중간 드라이버는 기본 미니포트 어댑터를 성공적으로 열고 가상 미니포트에서 요청을 수락하고 보낼 준비가 된 후 가상 미니포트를 초기화합니다. 중간 드라이버는 ProtocolBindAdapterEx 함수에서 NdisIMInitializeDeviceInstanceEx 호출하여 하나 이상의 가상 미니포트의 초기화를 요청합니다.
참고 중간 드라이버는 기본 미니포트 어댑터를 열 때 NdisIMInitializeDeviceInstanceEx 호출할 필요가 없습니다. 가상 미니포트와 열린 어댑터 간에 일대일 관계가 있을 필요는 없습니다.
NdisIMInitializeDeviceInstanceExDriverInstance 매개 변수를 초기화할 가상 미니포트의 디바이스 이름으로 설정합니다. 중간 드라이버는 UpperBindings 레지스트리 키에서 디바이스 이름을 가져옵니다.
하나의 물리적 NIC에 여러 가상 미니포트를 층별하여 n대1 MUX 중간 드라이버를 사용할 경우, 모든 가상 미니포트에 대한 장치 이름이 있어야 합니다. MUX 중간 드라이버에는 가상 미니포트 디바이스 이름 목록을 유지하는 알림 개체가 필요합니다. 목록에 권장되는 위치는 UpperBindings 레지스트리 키입니다. 이 경우 UpperBindings 레지스트리 키는 디바이스 이름 목록을 포함하는 MULTI_SZ 항목입니다. MUX 중간 드라이버는 디바이스 이름 목록에 지정된 각 디바이스 이름에 대해 NdisIMInitializeDeviceInstanceEx 한 번 호출합니다.
IRP_MN_START_DEVICE를 수신하여 디바이스를 시작하는 경우, NdisIMInitializeDeviceInstanceEx 호출은 중간 드라이버의 MiniportInitializeEx 함수를 호출하여 지정된 가상 미니포트를 초기화합니다. NDIS가 이러한 IRP를 수신하지 않으면 NDIS는 중간 드라이버의 MiniportInitializeEx 함수를 호출하지 않습니다. MiniportInitializeEx 호출은 나중에 발생할 수 있으므로 NdisIMInitializeDeviceInstanceEx대한 호출 컨텍스트 내에 반드시 있는 것은 아닙니다. NDIS가 NdisIMInitializeDeviceInstanceEx호출에서 참조되는 가상 미니포트에 대해 MiniportInitializeEx 호출하지 않고 중간 드라이버에 더 이상 가상 미니포트가 필요하지 않은 경우 중간 드라이버는 NdisIMCancelInitializeDeviceInstance 호출하여 가상 미니포트의 초기화를 취소해야 합니다. 예를 들어 중간 드라이버가 기본 미니포트에 대한 성공적인 바인딩에 대한 응답으로 가상 미니포트를 만든다고 가정합니다. NDIS가 MiniportInitializeEx 호출하기 전에 해당 바인딩이 제거된 경우 중간 드라이버는 NdisIMCancelInitializeDeviceInstance 호출하여 미니포트의 초기화를 취소해야 합니다.
MiniportInitializeEx 가상 미니포트별 컨텍스트 영역을 할당하고 초기화해야 합니다. 컨텍스트 영역을 지정하는 방법에 대한 자세한 내용은 Virtual Miniport초기화를 참조하세요.
중간 드라이버는 역직렬화된 드라이버로 작동해야 합니다. 역직렬화된 드라이버에 대한 자세한 내용은 역직렬화된 NDIS 미니포트 드라이버 참조하세요.
중간 드라이버는 유지 관리하는 상태 정보가 제대로 초기화되었는지 확인해야 합니다. 드라이버에 송신 관련 리소스가 필요한 경우, 예를 들어 네트워크 데이터에 대한 새 NET_BUFFER_LIST 구조체를 MiniportSendNetBufferLists가 다음 하위 계층으로 전송할 때, NET_BUFFER_LIST 구조체 풀을 이 시점에 할당할 수 있습니다.