NDIS 선택적 일시 중단 유휴 알림 처리

NDIS는 다음 이벤트 중 하나가 발생하는 경우 선택적 일시 중단 작업을 시작합니다.

선택적 일시 중단 작업을 통해 네트워크 어댑터는 저전력 상태로 전환됩니다. NDIS는 MiniportIdleNotification 처리기 함수를 호출하여 미니포트 드라이버에 유휴 알림을 실행하여 이 작업을 시작합니다.

미니포트 드라이버는 유휴 알림을 처리할 때 버스 종속 작업을 수행해야 할 수 있습니다. 다음 그림에서는 USB 네트워크 어댑터에 대한 미니포트 드라이버의 유휴 알림 처리와 관련된 단계를 보여줍니다.

유휴 알림 작업을 보여 주는 다이어그램

이 항목에는 NDIS 선택적 일시 중단 유휴 알림을 처리하는 방법에 대한 다음 정보가 포함되어 있습니다.

MiniportIdleNotification 호출을 처리하기 위한 지침

NdisMIdleNotificationConfirm 호출에 대한 지침

NDIS 선택적 일시 중단 유휴 알림 취소 및 완료

MiniportIdleNotification 호출을 처리하기 위한 지침

NDIS와 미니포트 드라이버는 NDIS가 MiniportIdleNotification을 호출할 때 다음 단계를 수행합니다.

  1. NDIS는 MiniportIdleNotification 처리기 함수를 호출하여 드라이버에 기본 네트워크 어댑터가 유휴 상태임을 알립니다. NDIS는 MiniportIdleNotification 처리기 함수의 ForceIdle 매개 변수를 다음 값 중 하나로 설정합니다.

    • 네트워크 어댑터가 유휴 시간 제한 기간보다 오랫동안 비활성 상태인 경우 NDIS는 ForceIdle 매개 변수를 FALSE 로 설정합니다.

    • NDIS는 AOAC(Always On Always Connected) 기술을 준수하는 시스템이 연결된 대기 상태로 전환되는 경우 ForceIdle 매개 변수를 TRUE로 설정합니다.

  2. MiniportIdleNotification이 호출되면 미니포트 드라이버는 NDIS_STATUS_BUSY 반환하여 유휴 알림 및 선택적 일시 중단 작업을 거부할 수 있습니다. 예를 들어 드라이버가 네트워크 어댑터에서 활동을 감지하는 경우 드라이버가 유휴 알림을 거부할 수 있습니다.

    미니포트 드라이버가 유휴 알림을 거부하면 NDIS는 네트워크 어댑터에서 활동 모니터를 다시 시작합니다. 어댑터가 유휴 시간 제한 기간 내에 다시 비활성 상태가 되면 NDIS는 MiniportIdleNotification을 호출합니다.

    참고ForceIdle 매개 변수가 TRUE로 설정된 경우 미니포트 드라이버는 유휴 알림을 거부해서는 안 됩니다. 이 경우 드라이버는 선택적 일시 중단 작업을 계속해야 합니다.

  3. 미니포트 드라이버가 유휴 알림을 거부하지 않는 경우 선택적 일시 중단 작업을 위해 네트워크 어댑터를 준비하기 위해 버스별 작업을 수행해야 합니다. 예를 들어 USB 네트워크 어댑터의 미니포트 드라이버는 다음 단계를 수행하여 네트워크 어댑터가 저전력 상태로 전환할 수 있는지 여부를 확인합니다.

    1. 미니포트 드라이버는 IoCallDriver 를 호출하여 USB 유휴 요청(IOCTL_INTERNAL_USB_SUBMIT_IDLE_NOTIFICATION)에 대한 IRP(I/O 요청 패킷)를 기본 USB 버스 드라이버에 발급합니다. 이 IRP에서 미니포트 드라이버는 콜백 및 완료 루틴을 지정해야 합니다.

      USB 버스 드라이버는 IRP를 즉시 완료하지 않습니다. IRP는 저전력 전환을 통해 보류 중인 상태로 유지됩니다. 버스 드라이버는 다음 이벤트가 발생할 때 나중에 IRP를 완료합니다.

      • 미니포트 드라이버는 IRP를 취소합니다.

      • 시스템 전원 상태 변경이 필요합니다.

      • 디바이스가 USB 허브에서 제거됩니다.

    2. USB 버스 드라이버가 네트워크 어댑터를 저전력 상태로 만들 수 있다고 판단한 후 미니포트 드라이버의 IRP 콜백 루틴을 호출합니다. 이 호출은 네트워크 어댑터가 저전력 상태로 전환할 수 있음을 확인합니다.

      USB 유휴 요청 IRP에 대한 콜백 루틴을 작성하는 방법에 대한 지침은 USB 유휴 요청 IRP 콜백 루틴 구현을 참조하세요.

  4. 미니포트 드라이버가 선택적 일시 중단 작업을 위해 네트워크 어댑터 준비를 완료한 후 NdisMIdleNotificationConfirm을 호출합니다. 이 호출에서 미니포트 드라이버는 네트워크 어댑터가 전환할 수 있는 가장 낮은 전원 상태를 지정합니다.

    선택적 일시 중단 작업에 대한 버스 요구 사항에 따라 미니포트 드라이버는 MiniportIdleNotification 호출 컨텍스트에서 동기적으로 또는 MiniportIdleNotification이 반환된 후 비동기적으로 NdisMIdleNotificationConfirm을 호출합니다. 예를 들어 USB 네트워크 어댑터의 미니포트 드라이버는 USB 유휴 요청에 대한 콜백 루틴의 컨텍스트 내에서 NdisMIdleNotificationConfirm 을 호출합니다. USB 버스 드라이버는 IoCallDriver 호출 컨텍스트에서 동기적으로 또는 MiniportIdleNotification 이 반환된 후 비동기적으로 콜백 루틴을 호출합니다.

  5. 네트워크 어댑터를 저전력 상태로 전환할 수 있는 경우 미니포트 드라이버는 MiniportIdleNotification 호출에서 NDIS_STATUS_PENDING 반환합니다.

    참고 미니포트 드라이버는 드라이버가 NdisMIdleNotificationComplete를 호출할 때까지 유휴 알림이 완료되지 않으므로 NDIS_STATUS_PENDING 반환합니다. 미니포트 드라이버는 MiniportIdleNotification에서 NDIS_STATUS_SUCCESS 반환해서는 안됩니다.

미니포트 드라이버는 네트워크 어댑터가 일시 중단되고 저전력 상태로 전환될 때까지 다음 작업을 수행해야 합니다.

NdisMIdleNotificationConfirm 호출에 대한 지침

NDIS 및 미니포트 드라이버는 미니포트 드라이버가 NdisMIdleNotificationConfirm을 호출할 때 다음 단계를 수행합니다.

  1. NDIS는 기본 버스 드라이버에 IRP_MN_WAIT_WAKE 문제를 해결합니다. 이 IRP를 사용하면 버스 드라이버가 외부 절전 모드 해제 신호에 대한 응답으로 네트워크 어댑터를 절전 모드 해제할 수 있습니다.

  2. NDIS는 미니포트 드라이버에 OID_PM_PARAMETERS OID(개체 식별자) 집합 요청을 발급합니다. 이 OID 요청은 네트워크 어댑터가 절전 모드 해제 이벤트를 생성하는 설정을 지정하는 NDIS_PM_PARAMETERS 구조와 연결됩니다.

    미니포트 드라이버는 NDIS_PM_PARAMETERS 구조체의 멤버를 처리할 때 다음 지침을 따라야 합니다.

    • MiniportIdleNotification 처리기 함수의 ForceIdle 매개 변수가 FALSE로 설정된 경우 NDIS는 NDIS_PM_PARAMETERS 구조체의 WakeUpFlags 멤버에서만 NDIS_PM_SELECTIVE_SUSPEND_ENABLED 플래그를 설정합니다. 이 경우 네트워크 어댑터는 다음 이벤트 중 하나가 발생할 때 절전 모드 해제 이벤트를 알릴 수 있습니다.

      • 네트워크 어댑터는 수신 패킷 필터와 일치하는 패킷을 받습니다. 어댑터는 OID_GEN_CURRENT_PACKET_FILTER OID 집합 요청을 통해 이러한 필터를 사용하도록 구성됩니다.

      • 네트워크 어댑터는 연결 상태가 미디어 연결 끊기 또는 미디어 연결 끊김으로 변경되는 경우와 같이 네트워킹 드라이버 스택에서 처리해야 하는 다른 외부 이벤트를 검색합니다.

    • MiniportIdleNotification 처리기 함수의 ForceIdle 매개 변수가 TRUE로 설정된 경우 NDIS는 NDIS_PM_PARAMETERS 구조체의 WakeUpFlags 멤버에서 NDIS_PM_SELECTIVE_SUSPEND_ENABLED 플래그를 설정하지 않습니다. 이 경우 NDIS는 NDIS 선택적 일시 중단과 관련이 없는 절전 모드 해제 이벤트에 대해 NDIS_PM_PARAMETERS 구조의 다른 멤버를 설정합니다.

      참고 NDIS는 Always On AOAC(Always Connected) 기술을 준수하는 시스템이 연결된 대기 상태로 전환되는 경우에만 ForceIdle 매개 변수를 TRUE로 설정합니다.

      드라이버는 NDIS_STATUS_SUCCESS 사용하여 OID 요청을 완료합니다.

      참고 NDIS가 NDIS_PM_PARAMETERS 구조체의 WakeUpFlags 멤버에서 NDIS_PM_SELECTIVE_SUSPEND_ENABLED 플래그를 설정하는 경우 미니포트 드라이버에 직접 OID_PM_PARAMETERS OID 집합 요청을 발급합니다. 이를 통해 NDIS는 네트워킹 드라이버 스택의 필터 드라이버로 처리를 바이패스할 수 있습니다.

  3. OID_PM_PARAMETERS OID 집합 요청이 성공적으로 완료되면 NDIS는 미니포트 드라이버에 OID_PNP_SET_POWER OID 집합 요청을 실행합니다.

    이 OID 집합 요청을 처리하면 드라이버는 네트워크 어댑터를 OID 요청에 지정된 저전력 상태로 전환할 준비를 합니다. 드라이버는 다음과 같은 방법으로 보류 중인 모든 작업을 완료해야 합니다.

    • 미니포트 드라이버는 MiniportReturnNetBufferLists에 대한 호출을 통해 이전에 표시된 모든 수신 패킷이 반환될 때까지 기다립니다.

    • 미니포트 드라이버는 하드웨어에서 처리한 송신 요청이 완료될 때까지 기다립니다. 요청이 완료되면 미니포트 드라이버는 NdisMSendNetBufferListsComplete를 호출해야 합니다.

    • 미니포트 드라이버는 NdisMSendNetBufferListsComplete를 호출하여 보류 중인 모든 송신 요청을 완료합니다.

    • 미니포트 드라이버는 보류 중인 모든 NDIS 타이머 및 작업 항목을 취소해야 합니다. 이러한 타이머가 취소된 후 드라이버는 이러한 타이머 및 작업 항목이 완료될 때까지 기다려야 합니다.

    • 미니포트 드라이버는 네트워크 어댑터를 정지 상태로 유지해야 합니다. 예를 들어 드라이버는 모든 하드웨어 타이머를 취소해야 합니다.

    미니포트 드라이버는 OID_PM_PARAMETERS OID 집합 요청에 이전에 지정된 지정된 절전 모드 해제 이벤트를 사용하도록 기본 네트워크 어댑터를 구성합니다. 네트워크 어댑터가 저전력 전환에 대해 준비되면 미니포트 드라이버는 NDIS_STATUS_SUCCESS 사용하여 OID_PNP_SET_POWER OID 집합 요청을 완료합니다.

  4. NDIS는 기본 버스 드라이버에 IRP_MN_SET_POWER 발급합니다. 이 IRP는 네트워크 어댑터를 저전력 상태로 전환하도록 요청합니다.

    참고 선택적 일시 중단 작업 중에 네트워크 어댑터는 NdisMIdleNotificationConfirm 호출에 지정된 디바이스 전원 상태로 전환됩니다. 미니포트 드라이버는 이 함수의 IdlePowerState 매개 변수에서 이 디바이스 전원 상태를 지정합니다.

IRP가 완료되면 NDIS는 NdisMIdleNotificationConfirm 호출에서 를 반환합니다.

NDIS 선택적 일시 중단 유휴 알림 취소 및 완료

유휴 알림이 실행된 후 다음과 같은 방법으로 취소하고 완료할 수 있습니다.

  • 다음 조건이 충족되면 NDIS에서 미해결 유휴 알림을 취소할 수 있습니다.

    • 지나치게 많은 프로토콜 또는 필터 드라이버는 패킷 보내기 요청 또는 미니포트 드라이버에 대한 OID 요청을 발급합니다.

    • 기본 어댑터는 WOL(Wake-on-LAN) 패턴과 일치하는 패킷을 받거나 미디어 연결 상태 변경 내용을 감지하는 것과 같은 절전 모드 해제 이벤트를 신호로 보냅니다.

    NDIS는 MiniportCancelIdleNotification을 호출하여 유휴 알림을 취소합니다. 이 처리기 함수가 호출되면 미니포트 드라이버는 유휴 알림에 대해 이전에 발급했을 수 있는 버스별 IRP를 취소합니다. 마지막으로 미니포트 드라이버는 NdisMIdleNotificationComplete 를 호출하여 유휴 알림을 완료합니다.

    NDIS가 유휴 알림을 취소하는 방법에 대한 자세한 내용은 NDIS 선택적 일시 중단 유휴 알림 취소를 참조하세요.

  • 네트워크 어댑터가 저전력 상태가 된 후 미니포트 드라이버는 유휴 알림 자체를 완료하여 어댑터를 전체 전원 상태로 다시 시작할 수 있습니다. 이 작업을 수행하는 이유는 드라이버 및 어댑터의 디자인 및 요구 사항에 따라 다릅니다. 미니포트 드라이버는 NdisMIdleNotificationComplete를 호출하여 유휴 알림을 완료합니다.

    미니포트 드라이버가 유휴 알림을 완료하는 방법에 대한 자세한 내용은 NDIS 선택적 일시 중단 유휴 알림 완료를 참조하세요.