NET_PNP_EVENT 구조체(netpnp.h)

NET_PNP_EVENT 구조는 네트워크 플러그 앤 플레이(PnP) 이벤트, NDIS PnP 이벤트 또는 전원 관리 이벤트를 설명합니다.

구문

typedef struct _NET_PNP_EVENT {
  NET_PNP_EVENT_CODE NetEvent;
  PVOID              Buffer;
  ULONG              BufferLength;
  ULONG_PTR          NdisReserved[4];
  ULONG_PTR          TransportReserved[4];
  ULONG_PTR          TdiReserved[4];
  ULONG_PTR          TdiClientReserved[4];
} NET_PNP_EVENT, *PNET_PNP_EVENT;

멤버

NetEvent

이벤트를 다음 중 하나로 설명하는 이벤트 코드입니다.

NetEventSetPower

전원 관리자가 시스템 전원 상태로의 전환을 지정하는 전원 설정 요청을 전송했음을 나타냅니다. NDIS는 이 상태를 디바이스에 적합한 디바이스 전원 상태로 변환합니다.

자세한 내용은 주의 섹션을 참조하세요.

NetEventQueryPower

전원 관리자가 시스템 전원 상태로의 전환을 요청하는 쿼리 전원 요청을 전송했음을 나타냅니다. NDIS는 이 상태를 디바이스에 적합한 디바이스 전원 상태로 변환합니다.

자세한 내용은 주의 섹션을 참조하세요.

NetEventQueryRemoveDevice

PnP 관리자가 쿼리 제거 디바이스 요청을 전송했음을 나타냅니다. PnP 관리자는 작업을 중단하지 않고 디바이스를 제거할 수 있는지 여부를 쿼리하기 위해 이 요청을 보냅니다.

NetEventCancelRemoveDevice

PnP 관리자가 디바이스 제거 취소 요청을 보냈했음을 나타냅니다. PnP 관리자는 PnP 관리자가 쿼리 제거 디바이스 요청을 보낸 후 디바이스 제거를 취소하기 위해 이 요청을 보냅니다.

NetEventReconfigure

네트워크 구성 요소에 대한 구성이 변경되었음을 나타냅니다. 예를 들어 사용자가 네트워크 및 전화 접속 Connections 폴더를 통해 TCP/IP의 IP 주소를 변경하는 경우 NDIS는 NetEventReconfigure 이벤트를 TCP/IP 프로토콜로 나타냅니다. 또한 중간 드라이버는 일반적으로 이 이벤트를 트리거로 사용하여 NdisIMInitializeDeviceInstanceEx 함수 및 해당 가상 미니포트를 시작합니다. NetEventReconfigure에 대한 자세한 내용은 NetEventIMReEnableDevice를 참조하세요.

NetEventBindList

프로토콜 드라이버에 바인딩 목록 처리 순서가 다시 구성되었음을 나타냅니다. 이 목록은 처리 시 바인딩에 적용되는 상대 순서(예: 여러 바인딩 중 하나로 라우팅될 수 있는 사용자 요청)를 나타냅니다. 이 이벤트와 함께 전달되는 버퍼에는 null로 끝나는 유니코드 문자열로 형식이 지정된 디바이스 이름 목록이 포함되어 있습니다. 각 디바이스 이름의 형식은 ProtocolBindAdapterEx 함수 호출에 전달되는 AdapterName 멤버와 동일합니다.

NetEventBindsComplete

프로토콜 드라이버가 바인딩할 수 있는 모든 NIC에 바인딩되었음을 나타냅니다. PnP NIC가 시스템에 연결되지 않는 한 NDIS는 프로토콜에 더 이상 NIC를 표시하지 않습니다.

NetEventPnPCapabilities

사용자가 기본 어댑터의 절전 모드 해제 기능을 사용하거나 사용하지 않도록 설정했음을 나타냅니다. (바인딩은 ProtocolNetPnPEvent 함수에 전달되는 ProtocolBindingContext 매개 변수에 의해 지정됩니다.)

NetEventPause

지정된 프로토콜 바인딩이 일시 중지 상태로 들어가야 했음을 나타냅니다. 바인딩은 NDIS가 바인딩에 대한 미해결 송신 요청을 모두 완료한 후 일시 중지됨 상태가 됩니다.

NetEventRestart

지정된 프로토콜 바인딩이 다시 시작 상태로 들어갔다는 것을 나타냅니다. 프로토콜 드라이버가 바인딩에 대한 보내기 및 받기 작업을 다시 시작할 준비가 되면 바인딩이 실행 중 상태가 됩니다.

NetEventPortActivation

지정된 바인딩과 연결된 포트 목록의 활성화를 나타냅니다.

NetEventPortDeactivation

지정된 바인딩과 연결된 포트 목록의 비활성화를 나타냅니다.

NetEventIMReEnableDevice

NDIS 6.0 이상 중간 드라이버의 가상 미니포트에 대한 구성이 변경되었음을 나타냅니다. NetEventIMReEnableDevice 는 중간 드라이버가 단일 가상 미니포트에 대해 이 이벤트를 수신하고 NetEventReconfigure 이벤트가 모든 중간 드라이버의 가상 미니포트에 적용된다는 점을 제외하고 NetEventReconfigure 이벤트와 유사합니다. 예를 들어 중간 드라이버는 사용자가 사용하지 않도록 설정한 다음 장치 관리자 또는 다른 원본에서 단일 가상 미니포트를 사용하도록 설정할 때 NetEventIMReEnableDevice 이벤트를 받습니다. 중간 드라이버 전원 관리의 예는 GitHub의 Windows 드라이버 샘플 리포지토리에서 사용할 수 있는 NDIS MUX 중간 드라이버 및 알림 개체 드라이버 샘플을 참조하세요.

NetEventNDKEnable

NDK(네트워크 직접 커널)가 현재 사용하도록 설정되어 있음을 나타냅니다.

NetEventNDKDisable

NDK가 현재 사용하지 않도록 설정되어 있음을 나타냅니다.

NetEventFilterPreDetach

필터가 분리될 예정임을 나타냅니다. 필터가 FilterDetach 처리기에서 불가능한 필요한 정리를 수행할 수 있도록 합니다(당시 OID 및 표시 경로가 닫혀 있기 때문).

NetEventBindFailed

바인딩 이벤트 오류가 발생했음을 나타냅니다.

NetEventSwitchActivate

Hyper-V 확장 스위치가 활성화를 완료했음을 나타내며, 스위치 확장은 이제 추가 스위치 구성을 안전하게 쿼리할 수 있습니다. 표시는 확장 미니포트에서 발급한 Hyper-V 확장 스위치 스택에서만 사용됩니다. 자세한 내용은 Hyper-V 확장 가능한 스위치 구성 쿼리NDIS_SWITCH_PARAMETERS 참조하세요.

NetEventInhibitBindsAbove

다른 필터 및 프로토콜이 미니포트 어댑터에 바인딩되지 않도록 하는 동기 이벤트입니다. 이전에 바인딩된 모든 필터 또는 프로토콜은 이벤트가 완료되기 전에 바인딩되지 않습니다. 사용 규칙은 다음과 같습니다.

  • 미니포트 어댑터를 1000밀리초 이상 억제 상태로 두지 마십시오.
  • 이 이벤트는 MiniportInitializeEx 가 시작된 후에만 실행할 수 있으며 MiniportHaltEx 가 반환된 후에는 발급되지 않아야 합니다.
  • 이 이벤트는 미니포트 어댑터가 D0 상태인 경우에만 실행할 수 있습니다.
  • 이 이벤트는 차단되므로 교착 상태를 유발하는 컨텍스트에서 실행해서는 안 됩니다.
  • 이 이벤트를 실행하는 동안 잠금을 유지해서는 안 됩니다.
  • 이 이벤트는 PASSIVE_LEVEL 실행해야 합니다.
이 이벤트는 NDIS 버전 6.50부터 사용할 수 있으며 V2 이상 버전의 NET_PNP_EVENT 사용해야 합니다. 이 이벤트는 필요에 따라 미니포트 드라이버에서 실행할 수 있습니다. 프로토콜 및 필터는 이 이벤트를 수신하거나 발급할 수 없습니다.

NetEventAllowBindsAbove

NetEventInhibitBindsAbove의 효과를 되돌리는 비동기 이벤트입니다. 사용 규칙은 다음과 같습니다.

  • 이 이벤트는 MiniportInitializeEx 가 시작된 후에만 실행할 수 있으며 MiniportHaltEx 가 반환된 후에는 발급되지 않아야 합니다.
  • 이 이벤트는 미니포트 어댑터가 D0 상태인 경우에만 실행할 수 있습니다.
  • 이 이벤트를 실행하는 동안 잠금을 유지해서는 안 됩니다.
  • 이 이벤트는 PASSIVE_LEVEL 실행해야 합니다.
이 이벤트는 NDIS 버전 6.50부터 사용할 수 있으며 V2 이상 버전의 NET_PNP_EVENT 사용해야 합니다. 이 이벤트는 필요에 따라 미니포트 드라이버에서 실행할 수 있습니다. 프로토콜 및 필터는 이 이벤트를 수신하거나 발급할 수 없습니다.

NetEventRequirePause

미니포트 어댑터를 포함한 프로토콜 및 필터를 일시 중지해야 했음을 나타내는 동기 이벤트입니다. 프로토콜 및 필터 및 미니포트 어댑터는 NdisMNetPnPEvent 루틴이 반환될 때 일시 중지되도록 보장됩니다. 사용 규칙은 다음과 같습니다.

  • 사용자 애플리케이션의 지연을 방지하기 위해 NetEventAllowStart와 NetEventRequirePause 이벤트 간의 지연을 1000밀리초 이상 방지합니다.
  • 이 이벤트는 MiniportInitializeEx 가 시작된 후에만 실행할 수 있으며 MiniportHaltEx 가 반환된 후에는 발급되지 않아야 합니다.
  • 이 이벤트가 실행된 후 NDIS가 MiniportPause 를 호출한다는 보장은 없습니다. 특히 미니포트 어댑터가 이미 일시 중지된 경우 NDIS는 추가 시작 일시 중지 루프를 도입하지 않습니다. 즉, MiniportPause 가 호출된 횟수는 이 이벤트가 발생하는 양보다 크거나, 작거나, 같지 않습니다.
  • 이 이벤트는 차단되므로 교착 상태를 유발하는 컨텍스트에서 실행해서는 안 됩니다.
  • 이 이벤트를 실행하는 동안 잠금을 유지해서는 안 됩니다.
이 이벤트는 NDIS 버전 6.50부터 사용할 수 있으며 V2 이상 버전의 NET_PNP_EVENT 사용해야 합니다. 이 이벤트는 필요에 따라 미니포트 드라이버에서 실행할 수 있습니다. 프로토콜 및 필터는 이 이벤트를 수신하거나 발급할 수 없습니다.

NetEventAllowStart

미니포트 어댑터를 포함한 프로토콜 및 필터를 일시 중지할 필요가 없음을 나타내는 비동기 이벤트입니다. 사용 규칙은 다음과 같습니다. NdisMNetPnPEvent 루틴이 반환된 후 프로토콜 및 필터의 모든 드라이버에 대한 일시 중지 상태가 보장되지 않습니다.

  • 이 이벤트는 MiniportInitializeEx 가 시작된 후에만 실행할 수 있으며 MiniportHaltEx 가 반환된 후에는 발급되지 않아야 합니다.
  • 이 이벤트는 차단되므로 교착 상태를 유발하는 컨텍스트에서 실행해서는 안 됩니다.
  • 이 이벤트를 실행하는 동안 잠금을 유지해서는 안 됩니다.
이 이벤트는 NDIS 버전 6.50부터 사용할 수 있으며 V2 이상 버전의 NET_PNP_EVENT 사용해야 합니다. 이 이벤트는 필요에 따라 미니포트 드라이버에서 실행할 수 있습니다. 프로토콜 및 필터는 이 이벤트를 수신하거나 발급할 수 없습니다.

Buffer

NetEvent 멤버에 표시된 이벤트와 관련된 정보를 포함하는 버퍼의 주소입니다. 각 이벤트 유형에 대해 버퍼에는 다음 정보가 포함됩니다.

NetEventSetPower

버퍼에는 디바이스가 전환 중인 디바이스 전원 상태가 포함됩니다.

NDIS가 프로토콜 드라이버의 ProtocolNetPnPEvent 함수를 호출하면 디바이스 상태가 NDIS_DEVICE_POWER_STATE 다음 값 중 하나일 수 있습니다.

NdisDeviceStateUnspecified

네트워크 디바이스는 전원 관리를 지원하지 않습니다.

NdisDeviceStateD0

디바이스가 전체 기능과 성능을 제공하는 완전 전원 상태입니다.

NdisDeviceStateD1

호스트의 전송 요청이 디바이스에서 적용되지 않고 디바이스에서 받은 데이터가 호스트 메모리로 전송되지 않으며 중단이 발생하지 않는 저전력 상태입니다. 일부 디바이스 컨텍스트가 손실될 수 있습니다. NIC 및 미니포트 드라이버의 기능에 따라 디바이스가 절전 모드 해제 신호를 생성할 수 있습니다.

NdisDeviceStateD2

NdisDeviceStateD1과 유사한 저전력 상태는 일반적으로 더 많은 전원과 적은 컨텍스트가 저장되고 완전히 전원이 공급되는 상태로 전환하는 데 더 많은 시간이 필요하다는 점을 제외하면 NdisDeviceStateD1과 비슷합니다.

NdisDeviceStateD3

전원이 디바이스에서 완전히 제거된 꺼진 상태입니다.

프로토콜 드라이버의 경우 NdisDeviceStateD0 은 NIC의 전원이 완전히 공급되고 정상 작업에 사용할 수 있음을 의미합니다. 다른 모든 디바이스 상태는 디바이스가 완전히 전원이 공급되지 않고 네트워크 데이터를 보내고 받을 수 없음을 의미합니다.

NetEventQueryPower

버퍼에는 디바이스에 대해 요청된 디바이스 전원 상태가 포함됩니다. 디바이스 상태는 NDIS_DEVICE_POWER_STATE( NetEventSetPower 값 설명에 설명되어 있습니다).

NetEventQueryRemoveDevice

버퍼 콘텐츠는 NULL입니다.

NetEventCancelRemoveDevice

버퍼 콘텐츠는 NULL입니다.

NetEventReconfigure

버퍼에는 프로토콜별 데이터가 포함될 수 있습니다. 프로토콜 드라이버는 이 데이터의 유효성을 검사해야 합니다.

NetEventBindList

버퍼에는 다음 네트워크 구성 요소에 대한 수정된 바인딩 목록이 포함되어 있습니다. NET_PNP_EVENT_NOTIFICATION 구조체가 전달되고 있습니다. null로 끝나는 일련의 유니코드 문자열인 바인딩 목록에는 REG_MULTI_SZ 형식이 있습니다. 각 문자열은 어댑터 이름입니다. 프로토콜에 바인딩된 TDI 클라이언트는 이 바인딩 목록을 사용하여 바인딩의 순서를 다시 지정합니다. 프로토콜 드라이버는 이 목록의 유효성을 검사해야 합니다.

NetEventBindsComplete

버퍼 콘텐츠는 NULL입니다.

NetEventPnPCapabilities

버퍼는 비트 마스크를 포함하는 ULONG입니다. 비트 마스크에서 NDIS_DEVICE_WAKE_UP_ENABLE 플래그를 설정하면 NIC의 절전 모드 해제 기능이 활성화됩니다. 그렇지 않으면 NIC의 절전 모드 해제 기능이 비활성화됩니다. (바인딩은 ProtocolNetPnPEvent에 전달되는 ProtocolBindingContext 매개 변수에 의해 지정됩니다.) 0으로 설정하면 이 플래그는 NIC의 절전 모드 해제 기능이 비활성화되었음을 나타냅니다.

NetEventPause

버퍼에 다음이 포함됩니다. NDIS_PROTOCOL_PAUSE_PARAMETERS 구조체입니다.

NetEventRestart

버퍼에 NULL 또는 가 포함될 수 있습니다. NDIS_PROTOCOL_RESTART_PARAMETERS 구조체입니다. NDIS는 NDIS_PROTOCOL_RESTART_PARAMETERS 구조체의 RestartAttributes 멤버에 있는 NDIS_RESTART_ATTRIBUTES 구조체에 대한 포인터를 제공합니다.

참고 버퍼가 NULL인 경우 이전 다시 시작 이후 다시 시작 특성이 변경되지 않았습니다.
 

NetEventPortActivation

버퍼에는 NDIS가 활성화할 포트를 식별하는 NDIS_PORT 구조 목록의 첫 번째 항목이 포함됩니다. NDIS_PORT 구조체의 Next 멤버를 사용하여 목록에서 다음 구조를 가져올 수 있습니다.

NetEventPortDeactivation

버퍼에는 NDIS가 비활성화할 NDIS 포트를 식별하는 NDIS_PORT_NUMBER 형식(ULONG으로 정의됨)의 포트 번호 배열이 포함되어 있습니다. 배열의 요소 수를 계산하려면 NET_PNP_EVENT_NOTIFICATION NetPnPEvent 멤버에 지정된 NET_PNP_EVENT 구조체에 있는 BufferLength 멤버의 값을 sizeof(NDIS_PORT_NUMBER)로 나눕니다.

NetEventIMReEnableDevice

버퍼에는 사용 중인 디바이스에 대한 가상 미니포트의 디바이스 개체 이름을 지정하는 null로 끝나는 유니코드 문자열이 포함된 NDIS_STRING 형식의 변수에 대한 포인터가 포함되어 있습니다. 문자열은 전체 경로 이름입니다(예: \Device\DeviceName).

NetEventNDKEnable

Buffer 멤버가 NULL입니다.

NetEventNDKDisable

Buffer 멤버가 NULL입니다.

NetEventFilterPreDetach

Buffer 멤버가 NULL입니다.

NetEventBindFailed

버퍼에는 NDIS_BIND_FAILED_NOTIFICATION 구조체가 포함됩니다.

NetEventSwitchActivate

버퍼 콘텐츠는 NULL입니다.

NetEventAllowBindsAbove

버퍼 콘텐츠는 NULL입니다.

NetEventInhibitBindsAbove

버퍼 콘텐츠는 NULL입니다.

NetEventAllowStart

버퍼 콘텐츠는 NULL입니다.

NetEventRequirePause

버퍼 콘텐츠는 NULL입니다.

BufferLength

Buffer의 이벤트별 정보 바이트 수입니다.

NdisReserved[4]

NDIS에서 사용하기 위해 예약된 영역입니다.

TransportReserved[4]

전송 드라이버에서 사용하기 위해 예약된 영역입니다.

TdiReserved[4]

TDI에서 사용하기 위해 예약된 영역입니다.

TdiClientReserved[4]

TDI 클라이언트에서 사용하기 위해 예약된 영역입니다.

설명

NDIS 6.0 이상 버전에서 운영 체제가 미니포트 어댑터를 나타내는 대상 디바이스 개체에 시스템 PnP 이벤트 또는 전원 관리 이벤트를 발급하는 경우 NDIS는 이벤트를 로 변환합니다. NET_PNP_EVENT_NOTIFICATION 구조체입니다. NET_PNP_EVENT_NOTIFICATION 구조체의 NetPnPEvent 멤버는 NET_PNP_EVENT 구조체입니다.

NDIS는 프로토콜 드라이버의 ProtocolNetPnPEvent 함수를 호출하여 미니포트 어댑터에 바인딩된 각 프로토콜 드라이버에 NET_PNP_EVENT 구조에 대한 포인터를 전달합니다. 포인터는 드라이버가 ProtocolNetPnPEvent 호출을 비동기적으로 완료하기 위해 호출하는 NdisCompleteNetPnPEvent 함수에 대한 입력 매개 변수이므로 프로토콜 드라이버는 이 포인터를 저장해야 합니다.

NDIS는 필터 드라이버의 FilterNetPnPEvent 함수를 호출하여 미니포트 어댑터에 바인딩된 각 필터 드라이버에 NET_PNP_EVENT 구조체에 대한 포인터를 전달합니다. 드라이버가 FilterNetPnPEvent 에 대한 호출을 동기적으로 완료해야 하므로 필터 드라이버는 이 포인터를 저장할 필요가 없습니다.

NDIS 6.30부터 프로토콜 또는 필터 드라이버는 NDIS가 ProtocolNetPnPEvent 또는 FilterNetPnPEvent 함수를 호출할 때 다음 지침을 따라야 합니다.

  • NET_PNP_EVENT 구조체의 NetEvent 멤버가 NetEventSetPower로 설정된 경우 드라이버는 새 I/O 요청 생성을 중지해야 합니다. 또한 드라이버는 보류 중인 I/O 요청이 완료될 때까지 기다리지 않아야 합니다.

    프로토콜 또는 필터 드라이버가 ProtocolNetPnPEvent 또는 FilterNetPnPEvent에서 반환된 후에는 다음 조건이 해당하는 경우 전원 상태 전환 중에 이러한 드라이버를 일시 중지하고 다시 시작하지 않습니다.

    • 기본 미니포트 드라이버는 NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES 구조체에서 NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND 플래그를 설정합니다. 드라이버는 NdisMSetMiniportAttributes 함수 호출에서 이 구조체에 대한 포인터를 전달합니다.
    • 미니포트 드라이버에 연결된 모든 필터 드라이버는 NDIS 6.30 이상 버전의 NDIS를 지원합니다.
    • 미니포트 드라이버에 바인딩된 모든 프로토콜 드라이버는 NDIS 6.30 이상 버전의 NDIS를 지원합니다.
  • NET_PNP_EVENT 구조체의 NetEvent 멤버가 NetEventSetPower 또는 NetEventQueryPower로 설정된 경우 드라이버는 보류 중인 I/O 요청이 완료될 때까지 기다리지 않아야 합니다.
NET_PNP_EVENT 구조의 NetEvent 멤버는 플러그 앤 플레이 또는 전원 관리 이벤트의 형식을 식별합니다. 버퍼에는 이벤트 유형과 관련된 정보가 포함됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 NDIS 5.1 및 NDIS 6.0 이상에서 지원됩니다. 이 구조체의 NDIS 5.1 버전에 대한 자세한 내용은 NET_PNP_EVENT(NDIS 5.1)를 참조하세요.
머리글 netpnp.h(Ndis.h, Netpnp.h 포함)

추가 정보

FilterNetPnPEvent

NDIS_BIND_FAILED_NOTIFICATION

NDIS_PORT

NDIS_PROTOCOL_PAUSE_PARAMETERS NDIS_PROTOCOL_RESTART_PARAMETERS

NDIS_RESTART_ATTRIBUTES

NDIS_SWITCH_PARAMETERS

NET_PNP_EVENT_NOTIFICATION

NdisCompleteNetPnPEvent

NdisIMInitializeDeviceInstanceEx

ProtocolBindAdapterEx

ProtocolNetPnPEvent

Hyper-V 확장 가능한 스위치 구성 쿼리