중간 드라이버 DriverEntry 함수
로더가 제대로 식별할 수 있도록 중간 드라이버의 초기 필수 진입점 이름을 DriverEntry 로 명시적으로 지정해야 합니다. 이 섹션에서 MiniportXxx 및 ProtocolXxx로 설명된 다른 모든 내보낸 드라이버 함수는 NDIS에 주소로 전달되기 때문에 공급업체에서 지정한 이름을 가질 수 있습니다.
중간 드라이버에서 DriverEntry 는 최소한 다음을 수행해야 합니다.
NdisMRegisterMiniportDriver를 호출하고 NdisMiniportDriverHandle 매개 변수에 반환된 핸들을 저장합니다.
드라이버가 이후에 기본 NDIS 드라이버에 자신을 바인딩하는 경우 NdisRegisterProtocolDriver 를 호출하여 드라이버의 ProtocolXxx 함수를 등록합니다.
NdisIMAssociateMiniport를 호출하여 드라이버의 미니포트 위쪽 가장자리와 프로토콜 아래쪽 가장자리 간의 연결에 대해 NDIS에 알릴 수 있습니다.
중간 드라이버는 MiniportDriverUnload 언로드 처리기를 등록해야 합니다. 이 언로드 처리기는 시스템에서 중간 드라이버를 언로드할 때 호출됩니다. DriverEntry가 실패하면 이 언로드 처리기가 호출되지 않습니다. 대신 드라이버가 단순히 언로드됩니다. 언로드 처리기에 대한 자세한 내용은 중간 드라이버 언로드를 참조하세요.
언로드 처리기는 NdisDeregisterProtocolDriver 를 호출하여 중간 드라이버의 프로토콜 부분을 등록 취소해야 합니다. 언로드 처리기는 드라이버의 프로토콜 부분에서 사용하는 리소스 재할당과 같은 필요한 정리 작업도 수행해야 합니다.
언로드 처리기는 MiniportHaltEx 함수와 다릅니다. 언로드 처리기에는 더 많은 전역 scope 있고 MiniportHaltEx 함수의 scope 특정 미니포트 어댑터로 제한됩니다. 중간 드라이버는 상태 정보를 클린 바인딩된 각 기본 미니포트 드라이버가 중지될 때 리소스를 재할당해야 합니다. 가상 미니포트에 대한 중지 작업을 처리하는 방법에 대한 자세한 내용은 가상 미니포트 중지를 참조하세요.
ProtocolUninstall 은 선택적 언로드 처리기입니다. NdisRegisterProtocolDriver에 전달하는 ProtocolCharacteristics 구조에 이 함수의 진입점을 등록합니다. NDIS는 중간 드라이버를 제거하는 사용자 요청에 대한 응답으로 ProtocolUninstall 을 호출합니다. NDIS는 각 바인딩된 어댑터에 대해 ProtocolUnbindAdapterEx 를 한 번 호출한 다음, NDIS는 ProtocolUninstall을 호출합니다. 이 처리기는 시스템이 실제로 드라이버를 언로드하기 전에 호출됩니다. 이 타이밍은 시스템이 NdisMRegisterMiniportDriver 에 등록된 언로드 처리기를 호출하고 드라이버를 언로드하지 못하게 할 수 있는 디바이스 개체 또는 기타 리소스를 해제할 수 있는 기회를 제공합니다.
DriverEntry 는 스핀 잠금을 초기화하여 중간 드라이버가 할당하는 전역 공유 리소스(예: 상태 변수, 구조 및 메모리 영역)를 보호할 수 있습니다. 드라이버는 이러한 리소스를 사용하여 연결을 추적하고 진행 중인 전송 또는 드라이버 할당 큐를 추적합니다.
드라이버가 네트워크 I/O 작업을 수행해야 하는 리소스를 할당하지 못하면 이전에 할당된 리소스를 해제하고 적절한 오류 상태 반환해야 합니다.
다음 topics 중간 드라이버를 등록하는 방법을 자세히 설명합니다.