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

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

반환 값

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

반환 코드 설명
NDIS_STATUS_SUCCESS
프로토콜 드라이버는 표시된 네트워크 플러그 앤 플레이 이벤트, NDIS PnP 이벤트 또는 전원 관리 이벤트를 성공적으로 처리했습니다. 이 상태 코드의 의미는 버퍼링된 의 NetEvent 코드에 따라 달라집니다.NetPnPEvent NET_PNP_EVENT_NOTIFICATION 구조체:
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, NetEventBindsList, NetEventBindsComplete, NetEventPause, NetEventPortDeactivationNetEventPnPCapabilities 이벤트를 성공시켜야 합니다.

설명

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

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

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

프로토콜 드라이버는 항상 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( 정적 드라이버 검증 도구 ) 및 기타 확인 도구에서 오류를 찾는 데 도움이 되며 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