Share via


NdisInterlockedInsertTailList 매크로(ndis.h)

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

구문

void NdisInterlockedInsertTailList(
  [in]  _ListHead,
  [in]  _ListEntry,
  [in]  _SpinLock
);

매개 변수

[in] _ListHead

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

[in] _ListEntry

목록 끝에 삽입할 항목에 대한 포인터입니다.

[in] _SpinLock

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

반환 값

없음

설명

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

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

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

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

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

요구 사항

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

추가 정보

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertHeadList NdisInterlockedRemoveHeadList