다음을 통해 공유


미니포트 드라이버 초기화

네트워킹 디바이스를 사용할 수 있게 되면 시스템에서 NDIS 미니포트 드라이버를 로드하여 디바이스를 관리합니다(드라이버가 아직 로드되지 않은 경우). 모든 미니포트 드라이버는 DriverEntry 함수를 제공해야 합니다. 시스템은 드라이버를 로드 한 후 DriverEntry 를 호출합니다. DriverEntry 는 미니포트 드라이버의 특성을 NDIS(지원되는 NDIS 버전 및 드라이버 진입점 포함)에 등록합니다.

시스템은 DriverEntry에 다음 두 인수를 전달합니다.

  • I/O 시스템에서 만든 드라이버 개체에 대한 포인터입니다.

  • 드라이버별 매개 변수가 저장되는 위치를 지정하는 레지스트리 경로에 대한 포인터입니다.

DriverEntry에서 미니포트 드라이버는 NdisMRegisterMiniportDriver 함수에 대한 호출에서 이러한 포인터를 모두 전달합니다. 미니포트 드라이버는 진입점을 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 구조에 저장하고 해당 구조를 NdisMRegisterMiniportDriver에 전달하여 표준 MiniportXxx 함수 집합을 내보냅니다.

미니포트 드라이버용 DriverEntryNdisMRegisterMiniportDriver 호출에서 반환되는 값을 반환합니다.

미니포트 드라이버는 DriverEntry에 필요한 다른 드라이버별 초기화도 수행합니다. 드라이버는 MiniportInitializeEx 함수에서 어댑터별 초기화를 수행합니다. 어댑터 초기화에 대한 자세한 내용은 어댑터 초기화를 참조하세요.

NDIS 라이브러리는 관련 정보를 자체 스토리지에 복사하므로 DriverEntry는 스택에서 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 구조를 할당할 수 있습니다. DriverEntry 는 멤버에서 드라이버 제공 값을 설정하기 전에 NdisZeroMemory 를 사용하여 이 구조체의 메모리를 지워야 합니다. MajorNdisVersionMinorNdisVersion 멤버는 드라이버에서 지원하는 NDIS의 주 버전과 부 버전을 포함해야 합니다. 특성 구조의 각 Xxx처리기 멤버에서 DriverEntry 는 드라이버 제공 MiniportXxx 함수의 진입점을 설정해야 합니다. 그렇지 않으면 멤버가 NULL이어야 합니다.

미니포트 드라이버가 선택적 서비스를 구성할 수 있도록 NDIS는 미니포트 드라이버의 NdisMRegisterMiniportDriver 호출 컨텍스트 내에서 MiniportSetOptions 함수를 호출합니다. 선택적 서비스에 대한 자세한 내용은 선택적 미니포트 드라이버 서비스 구성을 참조하세요.

NdisMRegisterMiniportDriver를 호출하는 드라이버는 DriverEntry가 반환된 후 언제든지 NDIS가 MiniportInitializeEx 함수를 호출할 수 있도록 준비해야 합니다. 이러한 드라이버에는 충분한 설치 및 구성 정보가 레지스트리에 저장되어 있거나 NdisXxx 버스 유형별 구성 함수 호출에서 사용할 수 있어야 드라이버가 네트워크 I/O 작업을 수행하는 데 필요한 NIC 관련 리소스를 설정할 수 있습니다.

미니포트 드라이버는 결국 NdisMDeregisterMiniportDriver 를 호출하여 NdisMRegisterMiniportDriver를 호출하여 할당한 리소스를 해제해야 합니다. NdisMRegisterMiniportDriver 호출이 성공한 후 드라이버 초기화가 실패하면 드라이버는 DriverEntry 내에서 NdisMDeregisterMiniportDriver를 호출할 수 있습니다. 그렇지 않으면 미니포트 드라이버는 MiniportDriverUnload 함수에 할당하는 드라이버별 리소스를 해제해야 합니다. 즉, NdisMRegisterMiniportDriver가 NDIS_STATUS_SUCCESS 반환하지 않는 경우 DriverEntry 는 컨트롤을 반환하기 전에 할당된 리소스를 해제해야 합니다. 이 경우 드라이버가 로드되지 않습니다. 자세한 내용은 미니포트 드라이버 언로드를 참조하세요.