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 수를 가져와야 합니다.
수신 표시의 경우 드라이버는 다음을 수행해야 합니다.
- 표시할 수 있는 최대 Rx 패킷 수까지 가져옵니다.
- NCL을 초기화합니다.
- NDIS_POLL_RECEIVE_DATA 구조에서 제공하는 NBL 큐에 추가합니다(NdisPollPollData 매개 변수의 NDIS_POLL_DATA 구조에 있음).
- 콜백을 종료합니다.
전송 완료를 위해 드라이버는 다음을 수행해야 합니다.
- 완료할 수 있는 최대 Tx 패킷 수까지 가져옵니다.
- NCL을 완료합니다.
- NDIS_POLL_TRANSMIT_DATA 구조에서 제공하는 NBL 큐에 추가합니다(NdisPollPollData 매개 변수의 NDIS_POLL_DATA 구조에 있음).
- 콜백을 종료합니다.
드라이버는 NdisPoll 함수를 종료하기 전에 Poll 개체의 인터럽트 기능을 사용하도록 설정해서는 안 됩니다. NDIS는 앞으로 진행이 이루어지지 않는다고 평가할 때까지 드라이버를 계속 폴링합니다. 이 시점에서 NDIS는 폴링을 중지하고 NdisSetPollNotification 콜백을 호출하여 드라이버에 인터럽트 다시 활성화를 요청합니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 11 |
지원되는 최소 서버 | Windows Server 2022 |
헤더 | poll.h(ndis.h 포함) |
IRQL |
<= DISPATCH_LEVEL |