다음을 통해 공유


중간 드라이버 DriverEntry 함수

중간 드라이버의 초기 필수 진입점은 로더가 올바르게 식별할 수 있도록 DriverEntry명시적으로 명명되어야 합니다. 이 섹션에서 MiniportXxxProtocolXxx설명된 다른 모든 내보낸 드라이버 함수는 NDIS에 주소로 전달되기 때문에 공급업체에서 지정한 이름을 가질 수 있습니다.

중간 드라이버에서는 DriverEntry이 최소한 다음 작업을 수행해야 합니다.

  1. NdisMRegisterMiniportDriver 호출하고 NdisMiniportDriverHandle 매개 변수에 반환되는 핸들을 저장합니다.

  2. 드라이버가 이후에 기본 NDIS 드라이버에 자신을 바인딩하는 경우 NdisRegisterProtocolDriver 호출하여 드라이버의 ProtocolXxx 함수를 등록합니다.

  3. NdisIMAssociateMiniport 호출하여 드라이버의 미니포트 위쪽 가장자리와 프로토콜 아래쪽 가장자리 간의 연결에 대해 NDIS에 알릴 수 있습니다.

중간 드라이버는 MiniportDriverUnload 언로드 처리기를 등록해야 합니다. 이 언로드 처리기는 시스템에서 중간 드라이버를 언로드할 때 호출됩니다. DriverEntry 실패하면 이 언로드 처리기가 호출되지 않습니다. 대신 드라이버가 단순히 언로드됩니다. 언로드 처리기에 대한 자세한 내용은 중간 드라이버 언로드을 참조하세요.

언로드 처리기는 NdisDeregisterProtocolDriver 호출하여 중간 드라이버의 프로토콜 부분을 등록 취소해야 합니다. 또한 언로드 처리기는 드라이버의 프로토콜 부분에서 사용하는 리소스를 다시 할당하는 등 필요한 정리 작업을 수행해야 합니다.

언로드 처리기는 MiniportHaltEx 함수와 다릅니다. 언로드 처리기에는 전역 범위가 더 많으며 MiniportHaltEx 함수의 범위는 특정 미니포트 어댑터로 제한됩니다. 중간 드라이버는 상태 정보를 정리하고 바인딩된 각 기본 미니포트 드라이버가 중지될 때 리소스를 다시 할당해야 합니다. 가상 미니포트에 대한 중지 작업을 처리하는 방법에 대한 자세한 내용은 가상 미니포트중지를 참조하세요.

ProtocolUninstall 선택적 언로드 처리기입니다. ProtocolCharacteristics 구조체에 이 함수의 진입점을 등록하고, 이 구조체를 NdisRegisterProtocolDriver에 전달하십시오. NDIS는 중간 드라이버를 제거하는 사용자 요청에 대한 응답으로 protocolUninstall 호출합니다. NDIS는 각 바인딩된 어댑터에 대해 ProtocolUnbindAdapterEx 한 번 호출한 다음 NDIS는 ProtocolUninstall 호출합니다. 이 처리기는 시스템이 실제로 드라이버를 언로드하기 전에 호출됩니다. 이 타이밍은 시스템이 NdisMRegisterMiniportDriver에 등록된 언로드 처리기를 호출하고 드라이버를 언로드하지 못하는 상황을 피하기 위해, 디바이스 개체나 다른 리소스를 해제할 수 있는 기회를 제공합니다.

DriverEntry 스핀 잠금을 초기화하여 중간 드라이버가 할당하는 전역 공유 리소스(예: 상태 변수, 구조 및 메모리 영역)를 보호할 수 있습니다. 드라이버는 이러한 리소스를 사용하여 연결을 추적하고 진행 중인 송신 또는 드라이버 할당 큐를 추적합니다.

DriverEntry 드라이버가 네트워크 I/O 작업을 수행하는 데 필요한 리소스를 할당하지 못하는 경우 이전에 할당된 리소스를 해제하고 적절한 오류 상태를 반환해야 합니다.

다음 항목에서는 중간 드라이버를 등록하는 방법에 대해 자세히 설명합니다.

NDIS 중간 드라이버로 등록하기

중간 드라이버를 미니포트 드라이버로 등록하기

프로토콜 드라이버로 중간 드라이버를 등록