다음을 통해 공유


DEVICE_CAPABILITIES 구조체(wdm.h)

DEVICE_CAPABILITIES 구조는 디바이스의 PnP 및 전원 기능을 설명합니다. 이 구조체는 IRP_MN_QUERY_CAPABILITIES IRP에 대한 응답으로 반환됩니다.

구문

typedef struct _DEVICE_CAPABILITIES {
  USHORT             Size;
  USHORT             Version;
  ULONG              DeviceD1 : 1;
  ULONG              DeviceD2 : 1;
  ULONG              LockSupported : 1;
  ULONG              EjectSupported : 1;
  ULONG              Removable : 1;
  ULONG              DockDevice : 1;
  ULONG              UniqueID : 1;
  ULONG              SilentInstall : 1;
  ULONG              RawDeviceOK : 1;
  ULONG              SurpriseRemovalOK : 1;
  ULONG              WakeFromD0 : 1;
  ULONG              WakeFromD1 : 1;
  ULONG              WakeFromD2 : 1;
  ULONG              WakeFromD3 : 1;
  ULONG              HardwareDisabled : 1;
  ULONG              NonDynamic : 1;
  ULONG              WarmEjectSupported : 1;
  ULONG              NoDisplayInUI : 1;
  ULONG              Reserved1 : 1;
  ULONG              WakeFromInterrupt : 1;
  ULONG              SecureDevice : 1;
  ULONG              ChildOfVgaEnabledBridge : 1;
  ULONG              DecodeIoOnBoot : 1;
  ULONG              Reserved : 9;
  ULONG              Address;
  ULONG              UINumber;
  DEVICE_POWER_STATE DeviceState[POWER_SYSTEM_MAXIMUM];
  SYSTEM_POWER_STATE SystemWake;
  DEVICE_POWER_STATE DeviceWake;
  ULONG              D1Latency;
  ULONG              D2Latency;
  ULONG              D3Latency;
} DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;

멤버

Size

구조체의 크기를 바이트 단위로 지정합니다. 이 필드는 IRP_MN_QUERY_CAPABILITIES 요청을 보내는 구성 요소에 의해 설정됩니다.

Version

구조체의 버전(현재 버전 1)을 지정합니다. 이 필드는 IRP_MN_QUERY_CAPABILITIES 요청을 보내는 구성 요소에 의해 설정됩니다.

DeviceD1

디바이스 하드웨어가 D1 전원 상태를 지원하는지 여부를 지정합니다. 드라이버는 이 값을 변경하면 안 됩니다.

DeviceD2

디바이스 하드웨어가 D2 전원 상태를 지원하는지 여부를 지정합니다. 드라이버는 이 값을 변경하면 안 됩니다.

LockSupported

디바이스가 디바이스 배출을 방지하는 물리적 디바이스 잠금을 지원하는지 여부를 지정합니다. 이 멤버는 디바이스에서 이동식 미디어를 꺼내지 않고 슬롯에서 디바이스를 꺼내는 것과 관련이 있습니다.

EjectSupported

시스템이 PowerSystemWorking 상태인 동안 디바이스가 소프트웨어 제어 디바이스 배출을 지원하는지 여부를 지정합니다. 이 멤버는 디바이스에서 이동식 미디어를 꺼내지 않고 슬롯에서 디바이스를 꺼내는 것과 관련이 있습니다.

Removable

직접 부모에서 디바이스를 동적으로 제거할 수 있는지 여부를 지정합니다. 이동식TRUE로 설정된 경우 디바이스는 부모와 동일한 물리적 개체에 속하지 않습니다.

예를 들어 다기능 프린터 내의 USB 복합 디바이스에 대해 이동식TRUE 로 설정된 경우 복합 디바이스는 Notebook PC 내의 USB 허브와 같이 직속 부모의 물리적 개체에 속하지 않습니다.

대부분의 경우 함수 드라이버가 아닌 버스 드라이버는 디바이스의 이동식 매개 변수 값을 결정해야 합니다. USB 디바이스의 경우 USB 허브 드라이버는 이동식 매개 변수를 설정합니다. 함수 드라이버에서 수정해서는 안 됩니다.

이동식TRUE로 설정된 경우 SurpriseRemovalOKTRUE로 설정되지 않는 한 디바이스가 하드웨어 분리 또는 꺼내기 프로그램에 표시됩니다.

DockDevice

디바이스가 도킹 주변 장치인지 여부를 지정합니다.

UniqueID

디바이스의 instance ID가 시스템 전체에서 고유한지 여부를 지정합니다. 이 비트는 instance ID가 버스의 scope 내에서만 고유한지 분명합니다. 자세한 내용은 디바이스 식별 문자열을 참조하세요.

SilentInstall

장치 관리자 모든 설치 대화 상자를 표시하지 않아야 하는지 여부를 지정합니다. "호환되는 드라이버를 찾을 수 없음"과 같은 필수 대화 상자를 제외하고.

RawDeviceOK

기본 버스에 대한 드라이버가 함수 드라이버가 없는 경우 디바이스를 구동할 수 있는지 여부를 지정합니다(예: 통과 모드의 SCSI 디바이스). 이 작업 모드를 원시 모드라고 합니다.

SurpriseRemovalOK

Windows에서 IRP_MN_QUERY_REMOVE_DEVICE 보내기 전에 디바이스의 함수 드라이버가 디바이스가 제거되는 경우를 처리할 수 있는지 여부를 지정합니다. SurpriseRemovalOKTRUE로 설정된 경우 드라이버가 있는 상태에 관계없이 디바이스를 직속 부모에서 안전하게 제거할 수 있습니다.

예를 들어 표준 USB 마우스는 하드웨어의 상태를 유지하지 않으므로 언제든지 안전하게 제거할 수 있습니다. 그러나 드라이버 캐시가 메모리에 기록되는 외부 하드 디스크는 먼저 드라이버가 해당 캐시를 하드웨어로 플러시하도록 하지 않고 안전하게 제거할 수 없습니다.

서프라이즈 제거를 지원하는 USB 디바이스용 드라이버는 IRP가 드라이버 스택에 다시 전달되는 경우에만 이를 TRUE 로 설정해야 합니다.

WakeFromD0

D0 상태일 때 디바이스가 외부 절 해제 신호에 응답할 수 있는지 여부를 지정합니다. 드라이버는 이 값을 변경하면 안 됩니다.

WakeFromD1

D1 상태일 때 디바이스가 외부 절 해제 신호에 응답할 수 있는지 여부를 지정합니다. 드라이버는 이 값을 변경하면 안 됩니다.

WakeFromD2

D2 상태일 때 디바이스가 외부 절 해제 신호에 응답할 수 있는지 여부를 지정합니다. 드라이버는 이 값을 변경하면 안 됩니다.

WakeFromD3

D3 상태일 때 디바이스가 외부 절 해제 신호에 응답할 수 있는지 여부를 지정합니다. 드라이버는 이 값을 변경하면 안 됩니다.

HardwareDisabled

설정하면 이 플래그는 디바이스의 하드웨어를 사용하지 않도록 지정합니다.

디바이스의 부모 버스 드라이버 또는 버스 필터 드라이버는 이러한 드라이버가 디바이스 하드웨어가 비활성화된 것으로 판단할 때 이 플래그를 설정합니다.

PnP 관리자는 디바이스가 열거된 직후 한 IRP_MN_QUERY_CAPABILITIES IRP를 보내고 디바이스가 시작된 후 다른 IRP를 보냅니다. PnP 관리자는 디바이스가 열거된 직후에만 이 비트를 확인합니다. 디바이스가 시작되면 이 비트는 무시됩니다.

NonDynamic

나중에 사용하기 위해 예약되어 있습니다.

WarmEjectSupported

나중에 사용하기 위해 예약되어 있습니다.

NoDisplayInUI

사용자 인터페이스에 디바이스를 표시하지 마세요. 이 비트를 설정하면 디바이스가 있지만 시작에 실패하더라도 디바이스가 사용자 인터페이스에 표시되지 않습니다. 버스 드라이버 및 연결된 버스 필터 드라이버만 이 비트를 설정해야 합니다. ( PNP_DEVICE_STATE 구조체의 PNP_DEVICE_DONT_DISPLAY_IN_UI 플래그도 참조하세요.)

Reserved1

시스템에서 사용하도록 예약되었습니다.

WakeFromInterrupt

드라이버 또는 ACPI가 절전 모드 해제 이벤트를 처리해야 하는지 여부를 나타냅니다. 설정된 경우 드라이버는 절전 모드 해제 이벤트를 처리해야 합니다. ACPI는 IRP_MN_WAIT_WAKE IRP를 수신하지만 인터럽트를 연결하지 않을 때 디바이스를 무장하고 IRP를 완료하여 디바이스 스택에 절전 모드 해제 이벤트를 알립니다.

SecureDevice

디바이스가 보안 디바이스인지 여부를 나타냅니다.

ChildOfVgaEnabledBridge

VGA 디바이스의 경우 부모 브리지에 VGA 디코딩 비트 집합이 있는지 여부를 나타냅니다.

DecodeIoOnBoot

부팅 시 디바이스에 IO 디코딩이 사용하도록 설정되어 있는지 여부를 나타냅니다.

Reserved

시스템에서 사용하도록 예약되었습니다.

Address

디바이스가 기본 버스에 있는 위치를 나타내는 주소를 지정합니다.

이 숫자의 해석은 버스에 따라 다릅니다. 주소를 알 수 없거나 버스 드라이버가 주소를 지원하지 않는 경우 버스 드라이버는 이 멤버를 기본값인 0xFFFFFFFF 둡니다.

다음 목록에서는 특정 버스 드라이버가 자식 디바이스의 주소 필드에 저장하는 정보를 설명합니다.

버스 Description
1394 주소가 휘발성이므로 주소를 제공하지 않습니다. 기본값은 0xFFFFFFFF.
Eisa 슬롯 번호(0-F)입니다.
IDE IDE 디바이스의 경우 주소에 대상 ID 및 LUN이 포함됩니다. IDE 채널의 경우 주소는 0 또는 1(0 = 기본 채널 및 1 = 보조 채널)입니다.
ISApnp 주소를 제공하지 않습니다. 기본값은 0xFFFFFFFF.
PC 카드(PCMCIA) 소켓 번호(일반적으로 0x00 또는 0x40)입니다.
PCI 상위 단어의 디바이스 번호와 낮은 단어의 함수 번호입니다.
SCSI 대상 ID입니다.
USB 포트 번호.

UINumber

사용자 인터페이스에 표시할 수 있는 디바이스와 연결된 숫자를 지정합니다.

이 번호는 일반적으로 보드의 슬롯 옆에 인쇄된 숫자 또는 사용자가 물리적 디바이스를 더 쉽게 찾을 수 있도록 하는 다른 번호와 같이 사용자가 인식하는 슬롯 번호입니다. 이러한 규칙이 없는 버스의 경우 또는 UINumber 를 알 수 없는 경우 버스 드라이버는 이 멤버를 기본값인 0xFFFFFFFF 둡니다.

DeviceState[POWER_SYSTEM_MAXIMUM]

디바이스가 각 시스템 전원 상태에 대해 유지할 수 있는 가장 강력한 디바이스 전원 상태를 나타내는 값의 배열입니다. 배열의 DeviceState[PowerSystemWorking] 요소는 S0 시스템 상태에 해당합니다. PowerSystemUnspecified에 대한 항목은 시스템 사용을 위해 예약되어 있습니다.

이 배열의 항목은 부모 devnode의 기능을 기반으로 합니다. 일반적으로 드라이버는 이러한 값을 변경해서는 안 됩니다. 그러나 필요한 경우 드라이버는 PowerDeviceD1에서 PowerDeviceD2 로 값을 낮출 수 있습니다.

버스 드라이버가 루트 열거형 디바이스에 대한 적절한 디바이스 전원 상태를 확인할 수 없는 경우 DeviceState[PowerSystemWorking]를PowerDeviceD0 으로 설정하고 다른 모든 항목을 PowerDeviceD3으로 설정합니다.

SystemWake

디바이스가 절전 모드 해제 이벤트를 신호로 표시할 수 있는 최소 전원 시스템 전원 상태를 지정합니다. PowerSystemUnspecified 값은 디바이스가 시스템을 절전 모드에서 해제할 수 없음을 나타냅니다.

버스 드라이버는 부모 devnode에서 이 정보를 가져올 수 있습니다.

일반적으로 드라이버는 이 값을 변경해서는 안 됩니다. 그러나 필요한 경우 드라이버가 PowerSystemHibernate 에서 PowerSystemS1로 전원 상태를 올려 디바이스가 최대 절전 모드 상태에서 시스템을 절전 모드에서 해제할 수 없지만 전원이 더 높은 절전 모드 상태에서 해제할 수 있음을 나타낼 수 있습니다.

DeviceWake

디바이스가 절전 모드 해제 이벤트를 신호로 표시할 수 있는 최소 전원 디바이스 전원 상태를 지정합니다. PowerDeviceUnspecified 값은 디바이스가 절전 모드 해제 이벤트를 알릴 수 없음을 나타냅니다.

D1Latency

디바이스를 PowerDeviceD1 상태에서 PowerDeviceD0 상태로 되돌리기 위한 디바이스의 대략 최악의 대기 시간을 100 마이크로초 단위로 지정합니다. 디바이스가 D1 상태를 지원하지 않는 경우 0으로 설정합니다.

D2Latency

디바이스를 PowerDeviceD2 상태에서 PowerDeviceD0 상태로 되돌리기 위한 디바이스의 대략 최악의 대기 시간을 100 마이크로초 단위로 지정합니다. 디바이스가 D2 상태를 지원하지 않는 경우 0으로 설정합니다.

D3Latency

디바이스를 PowerDeviceD3 상태에서 PowerDeviceD0 상태로 되돌리기 위한 디바이스의 대략 최악의 대기 시간을 100 마이크로초 단위로 지정합니다. 디바이스가 D3 상태를 지원하지 않는 경우 0으로 설정합니다.

설명

버스 드라이버는 IRP_MN_QUERY_CAPABILITIES IRP에 대한 응답으로 이 구조체에서 적절한 값을 설정합니다. 버스 필터 드라이버, 함수 드라이버 및 필터 드라이버는 버스 드라이버에서 설정한 기능을 변경할 수 있습니다.

IRP_MN_QUERY_CAPABILITIES 요청을 보내는 드라이버는 IRP를 보내기 전에 이 구조체의 크기, 버전, 주소UINumber 멤버를 초기화해야 합니다.

DEVICE_CAPABILITIES 구조를 사용하여 디바이스의 전원 기능을 설명하는 방법에 대한 자세한 내용은 보고 디바이스 전원 기능을 참조하세요.

요구 사항

요구 사항
헤더 wdm.h(Wdm.h, Ntddk.h, Ntifs.h 포함)

추가 정보

IRP_MN_QUERY_CAPABILITIES

PNP_DEVICE_STATE