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 반환합니다. 추가 반환 값은 다음과 같습니다.
반환 코드 | 설명 |
---|---|
|
제공된 버퍼가 너무 작아서 정보를 받을 수 없습니다. |
|
지정된 DeviceProperty 값이 잘못되었습니다. |
|
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) |