네트워크 드라이버의 비동기 I/O 및 완료 함수
대기 시간은 일부 네트워크 작업에 내재되어 있습니다. 이러한 대기 시간으로 인해 미니포트 드라이버에서 제공하는 대부분의 위쪽 에지 함수와 프로토콜 드라이버의 아래쪽 에지 함수는 비동기 작업을 지원하도록 설계되었습니다. 시간이 많이 걸리는 작업이 완료되거나 하드웨어 이벤트를 신호로 표시하기 위해 루프에서 대기하는 CPU 주기를 낭비하는 대신 네트워크 드라이버는 대부분의 작업을 비동기적으로 처리하는 기능에 의존합니다.
비동기 네트워크 I/O는 완료 함수를 사용하여 지원됩니다. 다음 예제에서는 네트워크 송신 작업에 완료 함수를 사용하는 것을 보여 주지만 프로토콜 또는 미니포트 드라이버에서 수행하는 다른 많은 작업에 대해 동일한 메커니즘이 존재합니다.
프로토콜 드라이버가 NDIS를 호출하여 패킷을 보내면 미니포트 드라이버의 MiniportSendNetBufferLists 함수를 호출하면 미니포트 드라이버는 이 요청을 즉시 완료하고 적절한 상태 값을 반환할 수 있습니다. 동기 작업의 경우 보내기, NDIS_STATUS_RESOURCES 및 NDIS_STATUS_FAILURE 성공적으로 완료하여 어떤 종류의 실패를 나타내는 가능한 응답이 NDIS_STATUS_SUCCESS.
그러나 미니포트 드라이버(또는 NDIS)가 패킷을 큐에 대기하고 NIC가 보내기 작업의 결과를 나타낼 때까지 기다리는 동안 보내기 작업을 완료하는 데 다소 시간이 걸릴 수 있습니다. 미니포트 드라이버 MiniportSendNetBufferLists 함수는 NDIS_STATUS_PENDING 상태 값을 반환하여 이 작업을 비동기적으로 처리할 수 있습니다. 미니포트 드라이버가 보내기 작업을 완료하면 완료 함수 인 NdisMSendNetBufferListsComplete를 호출하여 전송된 패킷 설명자에 포인터를 전달합니다. 이 정보는 프로토콜 드라이버에 전달되어 완료 신호를 보냅니다.
유사한 완성 함수를 사용하여 비동기 지원을 완료하는 데 시간이 더 길어질 수 있는 대부분의 드라이버 작업입니다. 이러한 함수에는 NdisMXxxComplete 형식의 이름이 있습니다.
완성 함수는 다음에도 제공됩니다.
구성을 설정하고 쿼리합니다.
하드웨어를 초기화합니다.
상태 나타냅니다.
수신된 데이터를 나타냅니다.
받은 데이터를 전송합니다.