다음을 통해 공유


가상 미니포트 초기화

중간 드라이버는 기본 미니포트 어댑터를 성공적으로 열고 요청을 수락하고 가상 미니포트에서 전송할 준비가 된 후 가상 미니포트를 초기화합니다. 중간 드라이버는 ProtocolBindAdapterEx 함수에서 NdisIMInitializeDeviceInstanceEx를 한 번 이상 호출하여 하나 이상의 가상 미니포트의 초기화를 요청합니다.

참고 중간 드라이버는 기본 미니포트 어댑터를 열 때 NdisIMInitializeDeviceInstanceEx 를 호출할 필요가 없습니다. 가상 미니포트와 오픈 어댑터 간에 일대일 관계가 있을 필요는 없습니다.

NdisIMInitializeDeviceInstanceExDriverInstance 매개 변수를 초기화 중인 가상 미니포트의 디바이스 이름으로 설정합니다. 중간 드라이버는 UpperBindings 레지스트리 키에서 디바이스 이름을 가져옵니다.

단일 물리적 NIC를 통해 여러 가상 미니포트를 계층화하는 n-to-One MUX 중간 드라이버의 경우 모든 가상 미니포트에 대한 디바이스 이름이 있어야 합니다. MUX 중간 드라이버에는 가상 미니포트 디바이스 이름 목록을 유지하는 알림 개체가 필요합니다. 목록에 권장되는 위치는 UpperBindings 레지스트리 키입니다. 이 경우 UpperBindings 레지스트리 키는 디바이스 이름 목록을 포함하는 MULTI_SZ 항목입니다. MUX 중간 드라이버는 디바이스 이름 목록에 지정된 각 디바이스 이름에 대해 NdisIMInitializeDeviceInstanceEx 를 한 번 호출합니다.

NdisIMInitializeDeviceInstanceEx를 호출하면 NDIS가 디바이스를 시작하는 IRP_MN_START_DEVICE 수신하는 경우 중간 드라이버의 MiniportInitializeEx 함수를 호출하여 지정된 가상 미니포트의 초기화를 수행합니다. NDIS가 이러한 IRP를 받지 못하면 NDIS는 중간 드라이버의 MiniportInitializeEx 함수를 호출하지 않습니다. MiniportInitializeEx에 대한 호출은 나중에 발생할 수 있으므로 반드시 NdisIMInitializeDeviceInstanceEx 호출의 컨텍스트 내에 있지는 않습니다. NDIS가 NdisIMInitializeDeviceInstanceEx 호출에서 참조되는 가상 미니포트에 대해 MiniportInitializeEx를 호출하지 않고 중간 드라이버에 더 이상 가상 미니포트가 필요하지 않은 경우 중간 드라이버는 NdisIMCancelInitializeDeviceInstance를 호출하여 가상 미니포트의 초기화를 취소해야 합니다. 예를 들어 중간 드라이버가 기본 미니포트에 대한 성공적인 바인딩에 대한 응답으로 가상 미니포트를 만든다고 가정합니다. NDIS가 MiniportInitializeEx를 호출하기 전에 해당 바인딩이 제거된 경우 중간 드라이버는 NdisIMCancelInitializeDeviceInstance 를 호출하여 미니포트의 초기화를 취소해야 합니다.

MiniportInitializeEx는 가상 미니포트 관련 컨텍스트 영역을 할당하고 초기화해야 합니다. 컨텍스트 영역을 지정하는 방법에 대한 자세한 내용은 가상 미니포트 초기화를 참조하세요.

중간 드라이버는 역직렬화된 드라이버로 작동해야 합니다. 역직렬화된 드라이버에 대한 자세한 내용은 역직렬화된 NDIS 미니포트 드라이버를 참조하세요.

중간 드라이버는 유지 관리하는 상태 정보가 제대로 초기화되었는지 확인해야 합니다. 드라이버에 송신 관련 리소스가 필요한 경우(예: MiniportSendNetBufferLists가 다음 하위 계층으로 전송하는 네트워크 데이터에 대한 새 NET_BUFFER_LIST 구조체) NET_BUFFER_LIST 구조 풀을 이 시점에서 할당할 수 있습니다.