IAdapterPowerManagement::QueryDeviceCapabilities 메서드(portcls.h)

메서드는 QueryDeviceCapabilities 플러그 앤 플레이 IRP_MN_QUERY_CAPABILITIES IRP에 대한 응답으로 PortCls에서 호출됩니다.

구문

NTSTATUS QueryDeviceCapabilities(
  [in] PDEVICE_CAPABILITIES PowerDeviceCaps
);

매개 변수

[in] PowerDeviceCaps

디바이스의 기능을 지정하는 DEVICE_CAPABILITIES 구조체에 대한 포인터

반환 값

QueryDeviceCapabilities 는 호출에 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 메서드는 적절한 오류 코드를 반환합니다.

설명

이 메서드는 디바이스에 대한 기능을 가져오기 위해 드라이버 시작 시 호출됩니다. 메서드는 어댑터 드라이버에 시스템 전원 상태와 디바이스 전원 상태 간의 매핑을 정의하는 기능 구조를 전달합니다. PortCls는 메서드를 호출하기 전에 이러한 매핑에 대한 기본값을 구조체에 씁니다. 호출 중에 어댑터 드라이버는 필요한 경우 매핑을 편집할 수 있습니다.

일반적으로 어댑터 드라이버는 이러한 설정을 변경하지 않아야 합니다. 어댑터 드라이버가 기본값을 재정의해야 하는 경우 매핑을 더 깊고(덜 전원이 공급되는) 디바이스 전원 상태로 변경할 수 있지만 약한(더 전원이 공급되는) 디바이스 전원 상태는 변경할 수 없습니다. 예를 들어 S1(PowerSystemSleeping1)에 대한 매핑은 D1에서 D3으로 변경할 수 있지만 D0으로 변경할 수는 없습니다.

디바이스의 PowerDeviceCaps 구조를 채우려면 어댑터 드라이버가 PcRegisterAdapterPowerManagement 를 호출하여 디바이스 시작 시 IAdapterPowerManagement 인터페이스를 등록해야 합니다. 운영 체제는 어댑터 드라이버의 디바이스 시작 루틴을 호출하기 전에 디바이스를 쿼리합니다.

시스템 전원 상태와 디바이스 전원 상태 간의 매핑을 변경하기 위해 어댑터 드라이버는 PowerDeviceCaps 구조에서 DeviceState 배열의 값을 변경합니다. 이러한 매핑은 필요한 경우에만 변경해야 합니다. 다음 코드 예제에서는 D1 매핑을 D3에 매핑하는 방법을 보여 줍니다.

  for (i=ULONG(PowerSystemWorking); i<=ULONG(PowerSystemShutdown); i++)
      {
          if (PowerDeviceCaps->DeviceState[i] == PowerDeviceD1)
          {
              PowerDeviceCaps->DeviceState[i] = PowerDeviceD3;
          }
      }

메서드에 QueryDeviceCapabilities 대한 코드는 페이징된 메모리에 있어야 합니다.

요구 사항

요구 사항
대상 플랫폼 유니버설
헤더 portcls.h(Portcls.h 포함)

추가 정보

DEVICE_CAPABILITIES

IAdapterPowerManagement

IRP_MN_QUERY_CAPABILITIES

PcRegisterAdapterPowerManagement