다음을 통해 공유


중간 드라이버 초기화

NDIS 중간 드라이버는 DriverEntry 루틴의 컨텍스트에서 MiniportXxx 함수 및 ProtocolXxx 함수를 등록합니다. MiniportXxx 함수를 등록하려면 중간 드라이버가 NDIS_INTERMEDIATE_DRIVER 플래그 집합을 사용하여 NdisMRegisterMiniportDriver 함수를 호출해야 합니다. 드라이버가 MiniportDriverCharacteristics에 전달하는 NDIS_MINIPORT_DRIVER_CHARACTERISTICS 구조 내에 이 플래그가 있습니다. ProtocolXxx 함수를 등록하려면 중간 드라이버가 NdisRegisterProtocolDriver 함수를 호출해야 합니다.

DriverEntry 드라이버가 NDIS 중간 드라이버로 성공적으로 등록된 경우 STATUS_SUCCESS 또는 해당 NDIS_STATUS_SUCCESS 반환합니다. driverEntry가 NdisXxx 함수 또는 커널 모드 지원 루틴에 의해 반환된 오류 상태를 전파하여 초기화에 실패하는 경우 드라이버는 로드된 상태로 유지되지 않습니다. DriverEntry 동기적으로 실행해야 합니다. 즉, STATUS_PENDING 또는 해당 NDIS_STATUS_PENDING 반환할 수 없습니다.

중간 드라이버를 NDIS에 등록하려면 DriverEntry 루틴은 최소한 다음을 수행해야 합니다.

  • NDIS_INTERMEDIATE_DRIVER 플래그가 설정된 NdisMRegisterMiniportDriver 함수를 호출하여 드라이버의 MiniportXxx 함수를 등록합니다.
  • 드라이버가 이후에 기본 NDIS 드라이버에 자신을 바인딩하는 경우 NdisRegisterProtocolDriver 함수를 호출하여 드라이버의 ProtocolXxx 함수를 등록합니다.
  • NdisIMAssociateMiniport 함수를 호출하여 드라이버의 미니포트 위쪽 가장자리와 프로토콜 아래쪽 가장자리 간의 연결에 대해 NDIS에 알릴 수 있습니다.

DriverEntry가 성공적으로 NdisMRegisterMiniportDriver를 반환한 후 오류가 발생하는 경우, 드라이버는 DriverEntry가 반환되기 전에 NdisMDeregisterMiniportDriver 함수를 호출해야 합니다. DriverEntry 성공하면 드라이버는 MiniportDriverUnload 함수에서 NdisMDeregisterMiniportDriver 호출해야 합니다.

중간 드라이버는 프로토콜 드라이버 및 미니포트 드라이버의 DriverEntry 요구 사항의 대부분을 공유합니다.

중간 드라이버의 가상 미니포트 초기화는 드라이버가 ProtocolBindAdapterEx 함수에서 NdisIMInitializeDeviceInstanceEx 함수를 호출할 때 발생합니다.

NDIS는 모든 기본 미니포트 드라이버가 초기화된 후 ProtocolBindAdapterEx 함수를 호출합니다.

실제로 NDIS 중간 드라이버의 DriverEntry 함수는 NdisMRegisterMiniportDriver전달한 후 RegistryPath 포인터를 무시할 수 있습니다. 이러한 드라이버는 DriverObject 포인터를 NdisMRegisterMiniportDriver에 전달한 후 무시할 수도 있습니다. 그러나 드라이버는 NdisMRegisterMiniportDriver에서 반환되는 미니포트 드라이버 핸들 값과 NdisRegisterProtocolDriver에서 반환되는 프로토콜 핸들 값을 NdisMiniportDriverHandleNdisProtocolHandle에 저장해야 하며, 이는 후속 NdisXxx 함수 호출에 사용됩니다. 중간 드라이버의 ProtocolBindAdapterEx 함수는 중간 드라이버의 가상 미니포트를 초기화하기 위해 MiniportInitializeEx 함수를 호출하기 전에 드라이버를 각 기본 미니포트 드라이버에 바인딩합니다. 더 높은 수준의 프로토콜 드라이버는 이후에 만든 가상 미니포트에 자신을 바인딩합니다. 이 전략을 사용하면 NDIS 중간 드라이버가 바인딩된 기본 미니포트 드라이버의 기능에 따라 가상 미니포트를 만들 때 리소스를 할당할 수 있습니다.