Share via


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 모든 수준

추가 정보

CONTAINING_RECORD

NdisAllocateSpinLock

NdisInitializeListHead

NdisInterlockedInsertTailList NdisInterlockedRemoveHeadList