NdisInterlockedInsertHeadList 매크로(ndis.h)
NdisInterlockedInsertHeadList 함수는 목록에 대한 액세스가 다중 프로세서로부터 안전한 방식으로 동기화되도록 이중으로 연결된 목록의 헤드에 항목(일반적으로 패킷)을 삽입합니다.
구문
void NdisInterlockedInsertHeadList(
[in] _ListHead,
[in] _ListEntry,
[in] _SpinLock
);
매개 변수
[in] _ListHead
항목을 삽입할 두 배로 연결된 목록의 헤드에 대한 포인터입니다.
[in] _ListEntry
목록의 맨 앞에 삽입할 항목에 대한 포인터입니다.
[in] _SpinLock
목록에 대한 액세스를 동기화하는 데 사용되는 호출자 제공 스핀 잠금에 대한 포인터입니다.
반환 값
없음
설명
NdisInterlockedInsertHeadList를 호출하기 전에 드라이버는 NdisInitializeListHead 함수와 NdisAllocateSpinLock 함수를 사용하여 SpinLock의 변수를 사용하여 ListHead에서 변수를 초기화해야 합니다. 또한 드라이버는 이러한 변수 및 내부 큐에 대한 상주 스토리지를 제공해야 합니다.
호출자가 제공한 스핀 잠금은 드라이버가 다중 프로세서 컴퓨터에서 실행되는 경우에도 NdisInterlockedInsertHeadList 가 지정된 항목을 삽입하는 동안 다른 함수가 드라이버의 내부 큐에 액세스하지 못하도록 합니다.
NdisInterlockedInsertHeadList 는 지정된 스핀 잠금을 획득하고 컨트롤을 반환하기 전에 원래 IRQL을 복원할 때 IRQL을 DISPATCH_LEVEL 발생합니다. 따라서 NdisInterlockedInsertHeadList 를 호출하는 드라이버 함수는 페이저블 코드가 될 수 없습니다.
대부분의 NDIS 드라이버는 FIFO 순서로 패킷을 처리하므로 연동 큐를 사용하는 모든 드라이버는 cal thel을 사용하는 경향이 있습니다. NdisInterlockedInsertTailList 함수는 NdisInterlockedInsertHeadList보다 훨씬 더 자주 작동합니다. 이러한 드라이버는 일반적으로 NdisInterlockedInsertHeadList 를 호출하여 다시 시도 작업을 위해 패킷을 다시 큐에 추가합니다.
반환된 값을 삽입된 항목의 주소로 다시 변환하기 위해 드라이버는 CONTAINING_RECORD 매크로를 사용할 수 있습니다.
IRQL >= DISPATCH_LEVEL NdisInterlockedInsertHeadList가 호출되면 ListHead 매개 변수 및 목록 항목에 대한 스토리지가 상주해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows Vista에서 NDIS 6.0 및 NDIS 5.1 드라이버(NdisInterlockedInsertHeadList(NDIS 5.1 참조))에 대해 지원됩니다. Windows XP의 NDIS 5.1 드라이버(NdisInterlockedInsertHeadList(NDIS 5.1) 참조)에 대해 지원됩니다. |
대상 플랫폼 | 유니버설 |
헤더 | ndis.h(Ndis.h 포함) |
라이브러리 | Ndis.lib |
IRQL | 모든 수준 |