다음을 통해 공유


NDIS 포트 비활성화

NDIS 포트를 비활성화하기 위해 미니포트 드라이버는 포트 비활성화 플러그 앤 플레이(PnP) 이벤트를 NDIS로 보냅니다. 미니포트 드라이버가 포트를 성공적으로 활성화한 후에는 드라이버가 포트를 해제하려면 먼저 포트를 비활성화해야 합니다. 또한 드라이버는 애플리케이션 관련 이유로 포트를 비활성화할 수 있습니다. 포트는 비활성화된 후 다시 활성화할 수 있지만 해제된 경우 포트를 다시 활성화할 수 없습니다.

포트 비활성화 PnP 이벤트를 보내려면 미니포트 드라이버는 NdisMNetPnPEvent 함수 호출에서 NetEventPortDeactivation PnP 이벤트 코드를 사용합니다. 포트를 비활성화하려면 미니포트 드라이버는 NdisMNetPnPEventNetPnPEvent 매개 변수가 가리키는 NET_PNP_EVENT_NOTIFICATION 구조체의 멤버를 다음과 같이 설정해야 합니다.

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

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

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

버퍼
NDIS_PORT_NUMBER 형식의 요소 배열에 대한 포인터입니다. 배열에는 미니포트 드라이버가 비활성화하는 모든 포트의 포트 번호가 포함됩니다.

BufferLength
버퍼 에 지정된 바이트 수입니다. BufferLength버퍼가 가리키는 배열의 크기로 설정합니다. 배열의 요소 수를 가져오려면 BufferLength 의 값을 NDIS_PORT_NUMBER 데이터 형식의 크기로 나눕니다.

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

미니포트 드라이버는 비활성화할 포트 목록을 배열에 제공할 수 있습니다. 그러나 미니포트 어댑터의 기본 포트가 NetEventPortDeactivation PnP 이벤트의 대상인 경우 기본 포트는 배열에 지정된 유일한 포트여야 합니다.

미니포트 드라이버는 언제든지 활성 포트를 비활성화할 수 있습니다. 그러나 미니포트 드라이버가 포트를 비활성화하기 전에 미해결 상태 표시가 없거나 해당 포트와 연결된 표시를 수신해야 합니다. 미니포트 드라이버가 포트 비활성화 PnP 이벤트를 보낸 후에는 상태 시작하거나 비활성화된 포트와 연결된 표시를 수신해서는 안 됩니다.

미니포트 드라이버는 포트를 다시 활성화할 수도 있습니다. NDIS 포트 활성화에 대한 자세한 내용은 NDIS 포트 활성화를 참조하세요.

미니포트 드라이버가 포트를 비활성화하면 NDIS는 NetEventPortDeactivation PnP 이벤트를 사용하여 미니포트 드라이버에 바인딩된 모든 프로토콜 드라이버에 알립니다. 이 PnP 이벤트는 할당된 상태로 변경된 포트를 나열하며 이미 비활성화된 포트는 포함하지 않습니다. 프로토콜 드라이버에서 포트 비활성화 이벤트를 처리하는 방법에 대한 자세한 내용은 포트 비활성화 PnP 이벤트 처리를 참조하세요.

미니포트 드라이버가 NDIS 포트를 할당하기 전에 드라이버는 NdisMSetMiniportAttributes 함수를 호출하여 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 구조에서 등록 특성을 설정해야 합니다. 미니포트 드라이버는 NdisMSetMiniportAttributes를 호출할 때 NDIS_MINIPORT_CONTROLS_DEFAULT_PORT 특성 플래그를 설정하여 기본 포트의 활성화를 제어할 수 있습니다. 미니포트 드라이버가 기본 포트를 활성화해야 한다고 가정하고 미니포트 드라이버가 기본 포트를 활성화한 경우 MiniportHaltEx 함수에서 반환하기 전에 기본 포트를 비활성화해야 합니다.

NDIS_PORT_NUMBER 요소의 배열에 의해 지정된 모든 포트는 활성화된 상태여야 합니다. 미니포트 드라이버는 이미 비활성화된 포트를 비활성화하려고 시도해서는 안 됩니다.

NDIS가 포트 배열의 포트를 비활성화하지 못하면 포트 배열의 포트 중 어느 것도 상태를 변경하지 않습니다. 지정된 포트 중 일부가 없으므로 비활성화가 실패하면 NdisMNetPnPEvent 함수는 NDIS_STATUS_INVALID_PORT 반환 값을 반환합니다. 일부 포트가 활성화되지 않아 비활성화가 실패하면 NdisMNetPnPEvent 는 NDIS_STATUS_INVALID_PORT_STATE 반환 값을 반환합니다.

NdisMNetPnPEvent 호출이 반환될 때까지 포트는 비활성화되지 않으며 미니포트 드라이버는 OID 요청을 처리하고 해당 포트와 연결된 요청을 보낼 수 있어야 합니다.

미니포트 드라이버가 기본 포트를 비활성화하면 NDIS는 오버레이 프로토콜 드라이버와 미니포트 어댑터 간의 모든 바인딩을 닫습니다. 미니포트 드라이버가 기본 포트를 비활성화하려고 하고 기본 포트가 이미 비활성화된 경우 NdisMNetPnPEvent 가 실패하고 NDIS_STATUS_INVALID_PORT_STATE 반환 값이 반환됩니다. 미니포트 드라이버가 기본 포트를 비활성화하려고 시도하고 기본 포트가 NDIS_PORT_NUMBER 요소의 배열에 지정된 유일한 포트가 아닌 경우 NdisMNetPnPEvent 가 실패하고 NDIS_STATUS_INVALID_PORT 반환 값이 반환됩니다. 미니포트 드라이버가 Buffer 멤버를 NULL 또는 BufferLength 멤버로 설정하는 경우 NDIS는 NdisMNetPnPEvent 호출에 실패하고 NDIS_STATUS_INVALID_PARAMETER 반환 값을 반환합니다.

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