다음을 통해 공유


중간 드라이버 DriverEntry 함수

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

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

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

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

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

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

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

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

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

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

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

다음 topics 중간 드라이버를 등록하는 방법을 자세히 설명합니다.

NDIS 중간 드라이버로 등록

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

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