Share via


NDIS 절전 모드 해제 이유 상태 표시 발급

미니포트 드라이버가 NDIS 절전 모드 해제 이유 상태 표시(NDIS_STATUS_PM_WAKE_REASON)를 지원하는 경우 네트워크 어댑터가 절전 모드 해제 이벤트를 생성하고 어댑터가 전체 전원 상태로 다시 시작되면 바로 이 상태 표시를 생성해야 합니다.

참고 NDIS 절전 모드 해제 이유 상태 표시에 대한 지원은 모바일 광대역(MB) 미니포트 드라이버에 대한 선택 사항입니다.

미니포트 드라이버는 OID_PM_PARAMETERS OID(개체 식별자) 집합 요청을 통해 PM(전원 관리) 매개 변수로 구성됩니다. 이 OID 요청은 NDIS_PM_PARAMETERS 구조를 통해 PM 매개 변수를 지정합니다.

NDIS_PM_PARAMETERS 구조체는 다음 유형의 절적 모드 해제 이벤트에 대한 매개 변수를 지정합니다.

수신된 패킷 절삭 해제 이벤트
네트워크 어댑터는 WOL(Wake-On-LAN) 패턴과 일치하는 패킷을 수신하는 경우 절전 모드 해제 이벤트를 생성합니다. WOL 패턴에는 다음이 포함됩니다.

  • 매직 패킷 또는 패킷 페이로드 내의 TCP/IP 데이터 패턴과 같은 미디어 독립적 WOL 패턴입니다. 예를 들어 NDIS_PM_PARAMETERS 구조체는 TCP SYN 프레임에 대한 WOL 패턴을 지정할 수 있습니다.

  • EAPOL 요청 식별자 패킷 또는 MB(모바일 광대역) SMS(짧은 메시지 서비스) 메시지와 같은 미디어별 WOL 패턴입니다.

  • OID_GEN_CURRENT_PACKET_FILTER OID 집합 요청을 통해 지정된 수신 필터와 일치하는 와일드카드 패턴입니다.

참고 이러한 유형의 절삭 모드 해제 상태 표시를 위해 네트워크 어댑터는 수신된 패킷을 저장할 수 있어야 합니다. 드라이버는 상태 표시 내에서 수신된 패킷을 반환해야 합니다.

WOL 패턴은 NDIS_PM_PARAMETERS 구조체의 EnabledWoLPacketPatterns 멤버를 통해 지정됩니다.

미디어별 절개 모드 해제 이벤트
네트워크 어댑터는 802.11 AP(액세스 지점)의 연결 해제 또는 MB(모바일 광대역) SMS(짧은 메시지 서비스) 메시지 수신과 같은 미디어별 이유로 인해 절전 모드 해제 이벤트를 생성합니다.

이 형식의 절전 모드 해제 이벤트는 NDIS_PM_PARAMETERS 구조체의 MediaSpecificWakeUpEvents 멤버를 통해 지정됩니다.

미디어 독립적 절식 이벤트
네트워크 어댑터는 미디어 연결 또는 연결 끊김과 같은 미디어 독립적 이유로 인해 절전 모드 해제 이벤트를 생성합니다.

이 형식의 절전 모드 해제 이벤트는 NDIS_PM_PARAMETERS 구조체의 WakeUpFlags 멤버를 통해 지정됩니다.

네트워크 어댑터가 절전 모드 해제 신호를 생성한 경우 미니포트 드라이버는 NDIS_STATUS_PM_WAKE_REASON 상태 표시를 실행해야 합니다. 드라이버는 어댑터를 전체 전원 상태로 전환하기 위해 OID_PNP_SET_POWER OID 집합 요청을 처리하는 동안 이 작업을 수행합니다.

참고 미니포트 드라이버는 절전 모드 해제 이벤트와 관련된 상태 표시를 실행하기 전에 NDIS_STATUS_PM_WAKE_REASON 상태 표시를 실행해야 합니다. 예를 들어 절전 모드 해제 이벤트가 미디어 연결 상태의 변경으로 인한 경우 미니포트 드라이버는 NDIS_STATUS_PM_WAKE_REASON 상태 표시를 실행한 후 NDIS_STATUS_LINK_STATE 상태 표시를 실행해야 합니다.

미니포트 드라이버가 NDIS_STATUS_PM_WAKE_REASON 상태 표시를 발급하는 경우 다음 단계를 수행해야 합니다.

  1. 미니포트 드라이버는 다음을 포함할 수 있을 만큼 큰 버퍼를 할당해야 합니다.

    • NDIS_PM_WAKE_REASON 구조체입니다.

    • 네트워크 어댑터가 절전 모드 해제 이벤트를 생성하도록 한 수신된 패킷(절전 모드 해제 패킷)과 함께 NDIS_PM_WAKE_PACKET 구조체입니다.

      참고 미니포트 드라이버는 미디어별 또는 미디어 독립적 절전 모드 해제 이벤트를 나타내는 경우 이 버퍼 공간을 할당할 필요가 없습니다.

  2. 미니포트 드라이버는 버퍼 시작 시 NDIS_PM_WAKE_REASON 구조를 초기화합니다. 드라이버는 WakeReason 멤버를 절전 모드 해제 이벤트의 형식을 정의하는 NDIS_PM_WAKE_REASON_TYPE 열거형 값으로 설정합니다.

    예를 들어 미니포트 드라이버가 수신된 패킷 절전 모드 해제 이벤트를 나타내는 경우 WakeReason 멤버를 NdisWakeReasonPacket으로 설정해야 합니다. 그렇지 않으면 드라이버는 WakeReason 멤버를 미디어별 또는 미디어 독립적 절전 모드 해제 이벤트를 가장 잘 설명하는 열거형 값으로 설정합니다.

  3. miniportdriver가 수신된 패킷 절전 모드 해제 이벤트에 대한 NDIS_STATUS_PM_WAKE_REASON 상태 표시를 실행하는 경우 다음 단계를 수행해야 합니다.

    1. 미니포트 드라이버는 InfoBufferOffset 멤버를 버퍼의 NDIS_PM_WAKE_REASON 구조 다음에 있는 NDIS_PM_WAKE_PACKET 구조체의 오프셋으로 설정합니다.

      참고 미니포트 드라이버는 NDIS_PM_WAKE_PACKET 구조체의 시작을 64비트 경계에 맞춰야 합니다.

    2. 미니포트 드라이버는 InfoBufferSize 멤버를 NDIS_PM_WAKE_PACKET 구조체의 크기와 절전 모드 해제 이벤트를 발생시킨 패킷의 크기로 설정합니다.

    3. 미니포트 드라이버는 버퍼의 NDIS_PM_WAKE_REASON 구조에 따라 NDIS_PM_WAKE_PACKET 구조를 초기화합니다.

      미니포트 드라이버는 다음과 같이 NDIS_PM_WAKE_PACKET 구조체의 멤버를 설정합니다.

      • PatternId 멤버는 절전 모드 해제 패킷과 일치하는 WOL 패턴의 식별자로 설정됩니다. 이 식별자는 OID_PM_ADD_WOL_PATTERN OID 집합 요청 중에 드라이버에 전달되는 NDIS_PM_WOL_PATTERN 구조체의 PatternId 멤버에 의해 지정됩니다.

      • PatternFriendlyName 멤버는 PatternId 멤버에 의해 지정된 절식 패턴에 대한 사용자가 읽을 수 있는 설명으로 설정됩니다. 이 값은 NDIS_PM_WOL_PATTERN 구조체의 FriendlyName 멤버에 의해 지정됩니다.

        참고 미니포트 드라이버는 이 멤버를 초기화할 필요가 없습니다. NDIS는 NDIS_PM_WAKE_PACKET 구조를 오버리싱 드라이버에 전달하기 전에 PatternFriendlyName 멤버를 올바른 값으로 설정합니다.

      • OriginalPacketSize 멤버는 네트워크 어댑터에서 받은 패킷 길이로 설정됩니다.

      • SavedPacketSize 멤버는 NDIS_STATUS_PM_WAKE_REASON 상태 표시를 통해 보고되는 패킷의 길이로 설정해야 합니다.

        참고 이 멤버의 값은 미니포트 드라이버가 NDIS_PM_CAPABILITIES 구조체의 MaxWoLPacketSaveBuffer 멤버에 설정한 값보다 크지 않아야 합니다. 드라이버는 절전 모드 해제 패킷 표시 기능을 보고할 때 이 구조를 반환합니다. 자세한 내용은 보고 절전 모드 해제 이유 상태 표시 기능을 참조하세요.

      • SavedPacketOffset 멤버는 오프셋(바이트 단위)을 NDIS_PM_WAKE_PACKET 구조 뒤에 있는 절전 모드 해제 패킷으로 설정해야 합니다.

        참고 미니포트 드라이버는 버퍼의 64비트 경계에서 절전 모드 해제 패킷의 시작을 정렬해야 합니다.

    4. 미니포트는 SavedPacketOffset 멤버가 지정한 오프셋의 버퍼에 절전 모드 해제 패킷을 복사합니다.

  4. 미니포트 드라이버가 미디어별 또는 미디어 독립적 절전 모드 해제 이벤트에 대한 NDIS_STATUS_PM_WAKE_REASON 상태 표시를 실행하는 경우 NDIS_PM_WAKE_REASON 구조체의 InfoBufferOffsetInfoBufferSize 멤버를 0으로 설정합니다.

  5. 미니포트 드라이버는 NDIS_STATUS_INDICATION 구조를 초기화합니다. 드라이버는 StatusCode 멤버를 NDIS_STATUS_PM_WAKE_REASON 설정합니다. 또한 드라이버는 버퍼를 가리키도록 StatusBuffer 멤버를 설정하고 StatusBufferLength 를 버퍼의 길이(바이트)로 설정합니다.

  6. 미니포트 드라이버는 NdisMIndicateStatusEx를 호출하고 StatusIndication 매개 변수의 NDIS_STATUS_INDICATION 구조체에 대한 포인터를 전달합니다.

참고 미니포트 드라이버가 수신된 패킷 절전 모드 해제 이벤트에 대한 NDIS_STATUS_PM_WAKE_REASON 상태 표시를 발급한 후 NdisMIndicateReceiveNetBufferLists를 호출하여 수신된 패킷을 표시해야 합니다.