다음을 통해 공유


WdfFdoInitQueryProperty 함수(wdffdo.h)

[KMDF 및 UMDF에 적용]

WdfFdoInitQueryProperty 메서드는 지정된 디바이스 속성을 검색합니다.

구문

NTSTATUS WdfFdoInitQueryProperty(
  [in]  PWDFDEVICE_INIT          DeviceInit,
  [in]  DEVICE_REGISTRY_PROPERTY DeviceProperty,
  [in]  ULONG                    BufferLength,
  [out] PVOID                    PropertyBuffer,
  [out] PULONG                   ResultLength
);

매개 변수

[in] DeviceInit

드라이버가 EvtDriverDeviceAdd 콜백 함수에서 가져온 WDFDEVICE_INIT 구조체에 대한 포인터입니다.

[in] DeviceProperty

검색할 디바이스 속성을 식별하는 DEVICE_REGISTRY_PROPERTY 형식의 열거자 값입니다.

[in] BufferLength

PropertyBuffer가 가리키는 버퍼의 크기(바이트)입니다.

[out] PropertyBuffer

요청된 디바이스 속성을 수신하는 호출자가 할당한 버퍼에 대한 호출자 제공 포인터입니다. BufferLength 매개 변수가 0인 경우 이 포인터는 NULL일 수 있습니다.

[out] ResultLength

반환 시 PropertyBuffer에 저장된 WdfFdoInitQueryProperty 정보의 크기(바이트)를 포함하는 호출자가 제공한 위치입니다. 이 메서드의 반환 값이 STATUS_BUFFER_TOO_SMALL 경우 ResultLength 는 필요한 버퍼 크기를 받습니다.

반환 값

작업이 성공하면 메서드는 STATUS_SUCCESS 반환합니다. 추가 반환 값은 다음과 같습니다.

반환 코드 설명
STATUS_BUFFER_TOO_SMALL
제공된 버퍼가 너무 작아서 정보를 받을 수 없습니다.
STATUS_INVALID_PARAMETER_2
지정된 DeviceProperty 값이 잘못되었습니다.
STATUS_INVALID_DEVICE_REQUEST
WDFDEVICE_INIT 구조체는 드라이버의 EvtDriverDeviceAdd 콜백 함수에서 가져오지 않았습니다.
 

메서드는 다른 NTSTATUS 값을 반환할 수도 있습니다.

설명

디바이스 속성 데이터를 수신하기 전에 드라이버는 일반적으로 WdfFdoInitQueryProperty 를 처음 호출하여 필요한 버퍼 크기를 가져와야 합니다. 일부 속성의 경우 필요한 크기가 반환되는 시간과 드라이버가 이 루틴을 다시 호출하는 시간 사이에 데이터 크기가 변경됩니다. 따라서 드라이버는 반환 상태 STATUS_BUFFER_TOO_SMALL 않을 때까지 실행되는 루프 내에서 WdfFdoInitQueryProperty를 호출해야 합니다.

필요한 버퍼 크기를 알고 변경되지 않는 경우에만 WdfFdoInitQueryProperty 를 사용하는 것이 가장 좋습니다. 이 경우 드라이버는 WdfFdoInitQueryProperty 를 한 번만 호출해야 하기 때문입니다. 필요한 버퍼 크기를 알 수 없거나 다른 경우 드라이버는 WdfFdoInitAllocAndQueryProperty를 호출해야 합니다.

드라이버는 WdfDeviceCreate를 호출하기 전에 WdfFdoInitQueryProperty를 호출할 수 있습니다. WdfDeviceCreate를 호출하는 방법에 대한 자세한 내용은 프레임워크 디바이스 개체 만들기를 참조하세요.

WdfDeviceCreate를 호출한 후 드라이버는 WdfDeviceQueryProperty를 호출하여 디바이스 속성 정보를 가져올 수 있습니다.

WdfFdoInitQueryProperty 메서드에 대한 자세한 내용은 함수 드라이버에서 디바이스 개체 만들기를 참조하세요.

또는 WdfFdoInitQueryPropertyEx 를 사용하여 통합 속성 모델을 통해 노출되는 디바이스 속성에 액세스할 수 있습니다.

예제

다음 코드 예제에서는 디바이스의 열거자 이름을 나타내는 유니코드 문자열을 가져오고 문자열이 "PCI"인 경우 TRUE 를 반환합니다.

NTSTATUS  status = STATUS_SUCCESS;
WCHAR  enumeratorName[64] = {0};
ULONG  returnSize;
UNICODE_STRING  unicodeEnumName, temp;

status = WdfFdoInitQueryProperty(
                                 DeviceInit,
                                 DevicePropertyEnumeratorName,
                                 sizeof(enumeratorName),
                                 enumeratorName,
                                 &returnSize
                                 );
if(!NT_SUCCESS(status)){
    return status;
}

RtlInitUnicodeString(
                     &unicodeEnumName,
                     enumeratorName
                     );
RtlInitUnicodeString(
                     &temp,
                     L"PCI"
                     );
if(RtlCompareUnicodeString(
                           &unicodeEnumName,
                           &temp,
                           TRUE
                           ) == 0) {
    //
    // This device is a PCI device.
    //
    return TRUE;
}

요구 사항

요구 사항
대상 플랫폼 유니버설
최소 KMDF 버전 1.0
최소 UMDF 버전 2.0
머리글 wdffdo.h(Wdf.h 포함)
라이브러리 Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF)
IRQL PASSIVE_LEVEL
DDI 규정 준수 규칙 DeviceInitAPI(kmdf), DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

추가 정보

WdfDeviceQueryProperty

WdfFdoInitAllocAndQueryProperty