PROTOCOL_NET_PNP_EVENT 콜백 함수(ndis.h)

NDIS는 ProtocolNetPnPEvent 함수를 호출하여 프로토콜 드라이버에 대한 네트워크 플러그 앤 플레이 이벤트, NDIS PnP 이벤트 또는 전원 관리 이벤트를 나타냅니다.

참고 PROTOCOL_NET_PNP_EVENT 형식을 사용하여 함수를 선언해야 합니다. 자세한 내용은 다음 예제 섹션을 참조하세요.

구문

PROTOCOL_NET_PNP_EVENT ProtocolNetPnpEvent;

NDIS_STATUS ProtocolNetPnpEvent(
  [in] NDIS_HANDLE ProtocolBindingContext,
  [in] PNET_PNP_EVENT_NOTIFICATION NetPnPEventNotification
)
{...}

매개 변수

[in] ProtocolBindingContext

이 드라이버가 바인딩당 런타임 상태 정보를 유지하는 프로토콜 드라이버 할당 컨텍스트 영역에 대한 핸들입니다. 프로토콜 드라이버는 NdisOpenAdapterEx 함수를 호출할 때 이 핸들을 제공했습니다. NULLProtocolBindingContext로 표시된 NetEventXxx 이벤트는 모든 바인딩에 적용됩니다. NetEventBindListNetEventBindsComplete는 항상 NULLProtocolBindingContext로 표시됩니다. NetEventReconfigure는 지정된 ProtocolBindingContext 또는 NULLProtocolBindingContext를 사용하여 표시할 수 있습니다.

[in] NetPnPEventNotification

NDIS가 프로토콜 드라이버에 나타내는 플러그 앤 플레이 이벤트 또는 전원 관리 이벤트를 설명하는 NET_PNP_EVENT_NOTIFICATION 구조체에 대한 포인터입니다.

반환 값

ProtocolNetPnPEvent 는 다음 중 어느 것을 반환할 수 있습니다.

반환 코드 설명
NDIS_STATUS_SUCCESS
프로토콜 드라이버가 표시된 네트워크 플러그 앤 플레이 이벤트, NDIS PnP 이벤트 또는 전원 관리 이벤트를 성공적으로 처리했습니다. 이 상태 코드의 의미는 NetPnPEvent에서 버퍼링된 NET_PNP_EVENT_NOTIFICATION 구조의 NetEvent 코드에 따라 달라집니다.
NetEventSetPower
프로토콜 드라이버는 디바이스가 요청된 디바이스 전원 상태로 전환될 준비를 하는 데 필요한 모든 드라이버별 작업을 수행했습니다.
NetEventQueryPower
기본 어댑터는 요청된 디바이스 전원 상태로 전환할 수 있습니다.
NetEventQueryRemoveDevice
기본 어댑터를 제거할 수 있습니다.
NetEventCancelRemoveDevice
프로토콜 드라이버는 기본 어댑터의 취소된 제거를 준비하는 데 필요한 드라이버별 작업을 수행했습니다.
NetEventReconfigure
프로토콜 드라이버가 변경된 구성을 수락했습니다.
NetEventBindList
프로토콜 드라이버에 새 바인딩 목록이 있으며 관련 처리를 수행했습니다.
NetEventBindsComplete
프로토콜 드라이버는 프로토콜 드라이버가 사용 가능한 모든 기본 어댑터에 바인딩되어 있음을 NDIS에서 확인했습니다.
NetEventPnPCapabilities
프로토콜 드라이버는 지정된 바인딩과 연결된 기본 어댑터의 현재 절전 모드 해제 기능을 수신했음을 인정했습니다.
NetEventPause
지정된 프로토콜 바인딩이 일시 중지 상태로 들어갔습니다. 바인딩은 NDIS가 바인딩에 대한 미해결 송신 요청을 모두 완료한 후 일시 중지 됨 상태로 들어갑니다. 일시 중지 작업에 대한 자세한 내용은 바인딩 일시 중지를 참조하세요.
NetEventRestart
지정된 프로토콜 바인딩이 다시 시작 상태로 들어갔습니다. 프로토콜 드라이버가 바인딩에 대한 보내기 및 받기 작업을 다시 시작할 준비가 되면 바인딩이 실행 중 상태가 됩니다.
NetEventPortActivation
프로토콜 드라이버가 지정된 바인딩과 연결된 포트의 활성화를 승인했습니다. 포트 활성화에 대한 자세한 내용은 NDIS 포트 활성화를 참조하세요.
NetEventPortDeactivation
프로토콜 드라이버가 지정된 바인딩과 연결된 포트의 활성화를 승인했습니다.
NDIS_STATUS_PENDING
프로토콜 드라이버는 NdisCompleteNetPnPEvent 함수를 호출하여 표시된 이벤트에 대한 응답을 비동기적으로 반환합니다.
NDIS_STATUS_RESOURCES
프로토콜 드라이버가 표시된 플러그 앤 플레이 또는 전원 관리 이벤트를 충족하는 데 필요한 시스템 리소스를 가져올 수 없습니다.
NDIS_STATUS_NOT_SUPPORTED
NDIS 6.0 이상 프로토콜 드라이버는 이 상태를 반환해서는 안 됩니다. NDIS 5. 플러그 앤 플레이를 지원하지 않는 x 프로토콜 드라이버는 NetEventSetPower 에 대한 응답으로 이 상태를 반환하여 NDIS가 기본 어댑터에서 바인딩을 해제해야 함을 나타낼 수 있습니다.
NDIS_STATUS_FAILURE
프로토콜 드라이버가 이전 목록에 명시된 것 이외의 이유로 표시된 이벤트를 실패했습니다.

프로토콜 드라이버는 NetEventQueryRemoveDeviceNetEventPortActivation 이벤트에 실패할 수 있습니다.

프로토콜 드라이버가 NetEventPortActivation 이벤트에 실패하는 경우 후속 작업에서 연결된 포트를 사용하지 않아야 합니다.

프로토콜 드라이버는 항상 NDIS_STATUS_SUCCESS 반환하여 NetEventRestart, NetEventIMReEnableDevice, NetEventCancelRemoveDevice, NetEventReconfigure, NetEventBindsComplete, NetEventPause, NetEventPortDeactivationNetEventPnPCapabilities 이벤트를 성공시켜야 합니다.

설명

ProtocolNetPnPEvent 함수는 플러그 앤 플레이 및 전원 관리를 지원하기 위해 프로토콜 드라이버에 필요합니다. NDIS는 ProtocolNetPnPEvent 를 호출하여 프로토콜 드라이버에 네트워크 플러그 앤 플레이 이벤트, NDIS PnP 이벤트 또는 전원 관리 이벤트가 발생했음을 알립니다.

ProtocolNetPnPEvent에 전달되는 NET_PNP_EVENT_NOTIFICATION 구조체는 이벤트를 설명합니다. ProtocolNetPnPEvent 는 NET_PNP_EVENT_NOTIFICATION 구조의 두 가지 기본 정보를 해석합니다.

  • 플러그 앤 플레이 또는 전원 관리 이벤트의 유형을 식별하는 NetEvent 멤버의 코드입니다.
  • 이벤트별 정보입니다. 예를 들어 NetEventSetPower 이벤트를 사용하면 버퍼 멤버에 디바이스가 전환되는 디바이스 전원 상태가 포함됩니다.
프로토콜 드라이버는 NetPnPEvent 포인터를 저장해야 합니다. 이 포인터는 NdisCompleteNetPnPEvent 함수에 대한 필수 입력 매개 변수로, ProtocolNetPnPEvent 가 NDIS_STATUS_PENDING 반환하는 경우 프로토콜 드라이버가 이후에 호출해야 합니다.

프로토콜 드라이버는 항상 NetEventQueryPower 이벤트에 성공해야 합니다. 활성 연결을 설정한 후 프로토콜 드라이버는 PoRegisterSystemState 함수를 호출하여 지속적으로 사용 중인 상태를 등록할 수 있습니다. 상태 등록이 적용되는 한 전원 관리자는 시스템을 절전 모드로 설정하지 않습니다. 연결이 비활성 상태가 되면 프로토콜 드라이버는 PoUnregisterSystemState 함수를 호출하여 상태 등록을 취소합니다. 프로토콜 드라이버는 NetEventQueryPower 이벤트에 실패하여 시스템이 절전 상태로 전환되는 것을 방지해서는 안 됩니다. NetEventQueryPower 이벤트 뒤에는 항상 NetEventSetPower 이벤트가 발생합니다. 기본 디바이스의 현재 전원 상태를 지정하는 NetEventSetPower 이벤트는 NetEventQueryPower 이벤트를 취소합니다.

프로토콜 드라이버가 디바이스를 해제할 수 없는 경우(예: 디바이스가 사용 중이므로) NDIS_STATUS_FAILURE 반환하여 NetEventQueryRemoveDevice 이벤트에 실패해야 합니다.

프로토콜 드라이버는 항상 NDIS_STATUS_SUCCESS 반환하여 NetEventCancelRemoveDevice, NetEventReconfigure, NetEventBindList, NetEventBindsComplete, NetEventPnPCapabilities, NetEventPause 또는 NetEventPortDeactivation을 성공시켜야 합니다.

NetEventReconfigure 또는 NetEventBindList를 처리할 때 프로토콜 드라이버는 이벤트와 연결된 데이터의 유효성을 검사해야 합니다. 이러한 데이터에 대한 자세한 내용은 NET_PNP_EVENT_NOTIFICATION 참조하세요.

NDIS는 IRQL = PASSIVE_LEVEL ProtocolNetPnPEvent 를 호출합니다.

예제

ProtocolNetPnPEvent 함수를 정의하려면 먼저 정의하는 함수의 형식을 식별하는 함수 선언을 제공해야 합니다. Windows 드라이버에 대한 함수 형식 집합을 제공합니다. 함수 형식을 사용하여 함수를 선언하면 드라이버, SDV(정적 드라이버 검증 도구) 및 기타 확인 도구에 대한 Code Analysis 오류를 찾는 데 도움이 되며, Windows 운영 체제용 드라이버를 작성하기 위한 요구 사항입니다.

예를 들어 " MyNetPnPEvent"라는 ProtocolNetPnPEvent 함수를 정의하려면 다음 코드 예제와 같이 PROTOCOL_NET_PNP_EVENT 형식을 사용합니다.

PROTOCOL_NET_PNP_EVENT MyNetPnPEvent;

그런 다음 다음과 같이 함수를 구현합니다.

_Use_decl_annotations_
NDIS_STATUS
 MyNetPnPEvent(
    NDIS_HANDLE  ProtocolBindingContext,
    PNET_PNP_EVENT_NOTIFICATION  NetPnPEvent
    )
  {...}

PROTOCOL_NET_PNP_EVENT 함수 형식은 Ndis.h 헤더 파일에 정의됩니다. 코드 분석 도구를 실행할 때 오류를 보다 정확하게 식별하려면 함수 정의에 Use_decl_annotations 주석을 추가해야 합니다. Use_decl_annotations 주석은 헤더 파일의 PROTOCOL_NET_PNP_EVENT 함수 형식에 적용되는 주석이 사용되도록 합니다. 함수 선언에 대한 요구 사항에 대한 자세한 내용은 NDIS 드라이버에 함수 역할 형식을 사용하여 함수 선언을 참조하세요.

Use_decl_annotations 대한 자세한 내용은 함수 동작 주석 지정을 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 NDIS 6.0 이상에서 지원됩니다.
대상 플랫폼 Windows
헤더 ndis.h(Ndis.h 포함)
IRQL PASSIVE_LEVEL

참고 항목

NET_PNP_EVENT_NOTIFICATION

NdisCompleteNetPnPEvent

NdisOpenAdapterEx

PoRegisterSystemState

PoUnregisterSystemState