다음을 통해 공유


NDIS_POLL 콜백 함수(poll.h)

미니포트 드라이버는 NDIS가 수신 표시를 폴링하고 완료를 보내는 NdisPoll 콜백 함수를 구현합니다.

통사론

NDIS_POLL NdisPoll;

void() NdisPoll(
  [_In_]    void *Context,
  [_Inout_] NDIS_POLL_DATA *PollData
)
{...}

매개 변수

[_In_] Context

드라이버가 Poll 개체를 만들 때 제공한 컨텍스트 정보에 대한 포인터입니다.

[_Inout_] PollData

드라이버가 수신 표시를 수행하고 완료를 보내는 데 사용해야 하는 NDIS_POLL_DATA 구조체에 대한 포인터입니다. 또한 표시해야 하는 NCL 수에 대한 세부 정보도 포함되어 있습니다.

발언

미니포트 드라이버는 미니포트 어댑터를 초기화하는 동안 NdisPoll 콜백을 등록합니다. 드라이버는 NdisRegisterPoll호출하기 전에 NDIS_POLL_CHARACTERISTICS 구조체의 PollHandler 매개 변수에서 NdisPoll 함수의 진입점을 지정합니다.

NDIS는 먼저 드라이버가 NdisRequestPoll호출할 때 NdisPoll 콜백을 호출합니다. NDIS는 NdisPoll 계속 호출하며, 드라이버는 수신 표시 또는 전송 완료에 대해 앞으로 진행합니다.

NdisPoll 콜백은 PASSIVE_LEVEL 및 DISPATCH_LEVEL IRQL 모두에서 호출될 수 있습니다. 드라이버는 어떤 수준이 될 것인지를 가정해서는 안 됩니다.

드라이버는 NDIS_POLL_DATA 구조체의 수신 또는 전송 매개 변수를 확인하여 표시하거나 완료할 수 있는 최대 NCL 수를 가져와야 합니다.

수신 표시의 경우 드라이버는 다음을 수행해야 합니다.

  1. 표시할 수 있는 최대 Rx 패킷 수까지 가져옵니다.
  2. NCL을 초기화합니다.
  3. NDIS_POLL_RECEIVE_DATA 구조에서 제공하는 NBL 큐에 추가합니다(NdisPollPollData 매개 변수의 NDIS_POLL_DATA 구조에 있음).
  4. 콜백을 종료합니다.

전송 완료를 위해 드라이버는 다음을 수행해야 합니다.

  1. 완료할 수 있는 최대 Tx 패킷 수까지 가져옵니다.
  2. NCL을 완료합니다.
  3. NDIS_POLL_TRANSMIT_DATA 구조에서 제공하는 NBL 큐에 추가합니다(NdisPollPollData 매개 변수의 NDIS_POLL_DATA 구조에 있음).
  4. 콜백을 종료합니다.

드라이버는 NdisPoll 함수를 종료하기 전에 Poll 개체의 인터럽트 기능을 사용하도록 설정해서는 안 됩니다. NDIS는 앞으로 진행이 이루어지지 않는다고 평가할 때까지 드라이버를 계속 폴링합니다. 이 시점에서 NDIS는 폴링을 중지하고 NdisSetPollNotification 콜백을 호출하여 드라이버에 인터럽트 다시 활성화를 요청합니다.

요구 사항

요구
지원되는 최소 클라이언트 Windows 11
지원되는 최소 서버 Windows Server 2022
헤더 poll.h(ndis.h 포함)
IRQL <= DISPATCH_LEVEL

참고 항목

NdisSetPollNotification

NDIS_POLL_CHARACTERISTICS

NDIS_POLL_DATA

NDIS_POLL_RECEIVE_DATA

NdisRegisterPoll

NdisRequestPoll