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) |