NdisInterlockedRemoveHeadList 매크로(ndis.h)

NdisInterlockedRemoveHeadList 함수는 목록에 대한 액세스가 다중 프로세서로부터 안전한 방식으로 동기화되도록 이중으로 연결된 목록의 머리에서 항목(일반적으로 패킷)을 제거합니다.

구문

PLIST_ENTRY NdisInterlockedRemoveHeadList(
  [in]  _ListHead,
  [in]  _SpinLock
);

매개 변수

[in] _ListHead

항목을 제거할 두 배로 연결된 목록의 헤드에 대한 포인터입니다.

[in] _SpinLock

목록에 대한 액세스를 동기화하는 데 사용되는 호출자 제공 스핀 잠금에 대한 포인터입니다.

반환 값

NdisInterlockedRemoveHeadList 는 목록에서 제거된 LIST_ENTRY 구조체에 대한 포인터를 반환합니다. 목록이 비어 있으면 루틴은 NULL을 반환합니다.

설명

NdisInterlocked를 호출하기 전에. List 함수, 드라이버는 NdisInitializeListHead 함수를 사용하여 ListHead에서 변수를 초기화하고 NdisAllocateSpinLock 함수를 사용하여 SpinLock의 변수를 초기화해야 합니다. 또한 드라이버는 이러한 변수 및 내부 큐에 대한 상주 스토리지를 제공해야 합니다.

NdisInterlockedRemoveHeadList를 호출하기 전에 항목은 NdisInterlockedInsert에 대한 하나 이상의 호출로 큐에 대기됩니다. 함수를 나열합니다.

호출자가 제공한 스핀 잠금은 드라이버가 다중 프로세서 컴퓨터에서 실행되는 경우에도 NdisInterlockedRemoveHeadList 가 항목을 제거하는 동안 다른 함수가 드라이버의 내부 큐에 액세스하지 못하도록 합니다.

NdisInterlockedRemoveHeadList 는 지정된 스핀 잠금을 획득하고 컨트롤을 반환하기 전에 원래 IRQL을 복원할 때 IRQL을 DISPATCH_LEVEL 발생합니다. 따라서 NdisInterlockedRemoveHeadList 를 호출하는 드라이버 함수는 페이지 가능한 코드가 될 수 없습니다.

반환된 값을 삽입된 항목의 주소로 다시 변환하기 위해 드라이버는 CONTAINING_RECORD 매크로를 사용할 수 있습니다.

IRQL >= DISPATCH_LEVEL NdisInterlockedRemoveHeadList가 호출되면 ListHead 매개 변수에 대한 스토리지가 상주해야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows Vista에서 NDIS 6.0 및 NDIS 5.1 드라이버(NdisInterlockedRemoveHeadList(NDIS 5.1) 참조)에 대해 지원됩니다. Windows XP의 NDIS 5.1 드라이버(NdisInterlockedRemoveHeadList(NDIS 5.1) 참조)에 대해 지원됩니다.
대상 플랫폼 유니버설
헤더 ndis.h(Ndis.h 포함)
라이브러리 Ndis.lib
IRQL 모든 수준

추가 정보

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedInsertTailList