NDIS 포트 활성화

미니포트 드라이버가 NDIS 포트를 성공적으로 할당한 후 NDIS 함수에서 포트 번호를 사용하기 전에 드라이버가 포트를 활성화해야 합니다. 포트를 활성화하기 위해 미니포트 드라이버는 포트 활성화 플러그 앤 플레이(PnP) 이벤트를 NDIS로 보냅니다. 포트 활성화 PnP 이벤트를 보내려면 미니포트 드라이버는 NdisMNetPnPEvent 함수 호출에서 NetEventPortActivation PnP 이벤트 코드를 사용합니다.

포트를 활성화하려면 미니포트 드라이버는 NdisMNetPnPEventNetPnPEvent 매개 변수가 가리키는 NET_PNP_EVENT_NOTIFICATION 구조체의 멤버를 다음과 같이 설정해야 합니다.

PortNumber
이벤트 알림의 원본 포트입니다. 포트 번호가 NetPnPEvent 멤버가 지정하는 구조체의 Buffer 멤버에 제공되므로 이 멤버를 0으로 설정합니다.

NetPnPEvent
포트 활성화 이벤트를 설명하는 NET_PNP_EVENT 구조체입니다. 이 구조체의 멤버를 다음과 같이 설정합니다.

NetEvent
이벤트를 설명하는 이벤트 코드입니다. 이 멤버를 NetEventPortActivation으로 설정합니다.

버퍼
NDIS_PORT 구조체의 연결된 목록에 대한 포인터입니다. NDIS_PORT 구조체의 Next 멤버는 목록의 다음 NDIS_PORT 구조를 가리킵니다.

BufferLength
버퍼 에 지정된 바이트 수입니다. BufferLength를 NDIS_PORT 구조체의 크기로 설정합니다.

다른 멤버
NET_PNP_EVENT 나머지 멤버를 NULL로 설정합니다.

미니포트 드라이버는 NDIS_PORT 구조체 의 연결된 목록에서 상태를 비활성에서 활성으로 변경한 포트를 나열합니다. 그러나 미니포트 어댑터의 기본 포트가 NetEventPortActivation PnP 이벤트의 대상인 경우 기본 포트는 목록의 유일한 포트여야 합니다.

미니포트 드라이버가 포트 활성화를 NDIS에 알린 경우(그리고 이 알림 호출이 반환되기 전에) 미니포트 드라이버는 포트와 연결된 송신 요청 및 OID 요청을 처리할 준비가 되어 있어야 합니다. 미니포트 드라이버는 상태 새로 활성화된 포트의 포트 번호를 사용하거나 NdisMNetPnPEvent 호출이 반환될 때까지 표시를 수신해서는 안 됩니다.

NDIS는 기본 포트가 활성화될 때까지 활성화된 포트에 대해 지나치게 많은 드라이버에 알리지 않습니다. NDIS가 프로토콜 드라이버의 ProtocolBindAdapterEx 함수를 호출할 때 NDIS는 BindParameters 매개 변수가 가리키는 NDIS_BIND_PARAMETERS 구조체의 ActivePorts 멤버에 있는 모든 현재 활성 포트 목록을 제공합니다. 미니포트 드라이버가 새 포트를 활성화하면 NDIS는 NetEventPortActivation PnP 이벤트를 사용하여 미니포트 드라이버에 바인딩된 모든 프로토콜 드라이버에 알립니다. 프로토콜 드라이버에서 이러한 포트 활성화 이벤트를 처리하는 방법에 대한 자세한 내용은 포트 활성화 PnP 이벤트 처리를 참조하세요.

미니포트 드라이버가 NDIS 포트를 할당하기 전에 드라이버는 NdisMSetMiniportAttributes 함수를 호출하여 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 구조에서 등록 특성을 설정해야 합니다. 미니포트 드라이버는 NdisMSetMiniportAttributes를 호출할 때 NDIS_MINIPORT_CONTROLS_DEFAULT_PORT 특성 플래그를 설정하여 기본 포트의 활성화를 제어할 수 있습니다. 미니포트 드라이버가 기본 포트를 활성화해야 하는 경우 미니포트 드라이버가 포트 활성화 PnP 이벤트를 사용하여 기본 포트를 활성화할 때까지 NDIS는 미니포트 어댑터와 오버리싱 드라이버 간의 바인딩을 시작하지 않습니다.

연결된 NDIS_PORT 구조 목록으로 지정된 모든 포트는 할당된 상태여야 합니다. 미니포트 드라이버는 이미 활성 상태인 포트를 활성화하려고 시도해서는 안 됩니다. 드라이버가 활성 포트를 활성화하려고 하면 NDIS는 상황을 포트 활성화 실패로 처리합니다.

NDIS가 목록의 포트를 활성화하지 못하면 NdisMNetPnPEvent 호출에 실패하고 목록의 포트 중 어느 것도 활성화된 상태로 상태를 변경하지 않습니다. 일부 포트가 없으므로 NDIS가 포트를 활성화하지 못하면 NdisMNetPnPEvent 는 NDIS_STATUS_INVALID_PORT 반환 값을 반환합니다. 일부 포트가 할당된 상태가 아니므로 NDIS가 포트를 활성화하지 못하면 NdisMNetPnPEvent 는 NDIS_STATUS_INVALID_PORT_STATE 반환 값을 반환합니다.

포트가 성공적으로 활성화되면 포트가 활성화된 상태입니다. 미니포트 드라이버는 활성화된 상태의 포트에 대해 수신된 데이터 및 상태 나타낼 수 있습니다.

NDIS는 기본 포트의 인증 상태를 NDIS_MINIPORT_INIT_PARAMETERS 구조체의 DefaultPortAuthStates 멤버에 있는 MiniportInitializeEx 함수에 전달합니다. 미니포트 드라이버가 기본 포트를 제어하는 경우 미니포트 드라이버가 기본 포트를 활성화할 때 기본 인증 설정을 사용하여 기본 포트를 활성화할 수 있습니다. 기본 인증 설정을 사용하려면 NDIS_PORT_CHARACTERISTICS 구조의 Flags 멤버에서 NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS 플래그를 설정합니다. 미니포트 드라이버는 할당하고 활성화하는 포트에 NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS 플래그를 사용할 수 있습니다. 활성화 사례의 경우 NDIS는 새로 활성화된 포트에 기본 인증 상태를 할당하고 NetEventPortActivation 이벤트에 대해 NdisMNetPnPEvent에 전달되는 인증 상태를 무시합니다.

기본 포트를 제어하고 포트를 할당하는 방법에 대한 자세한 내용은 NDIS 포트 할당을 참조하세요.