WdfUsbTargetDeviceQueryString 함수(wdfusb.h)
[KMDF 및 UMDF에 적용]
WdfUsbTargetDeviceQueryString 메서드는 지정된 USB 디바이스 및 설명자 인덱스 값과 연결된 유니코드 문자열을 검색합니다.
통사론
NTSTATUS WdfUsbTargetDeviceQueryString(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] WDFREQUEST Request,
[in, optional] PWDF_REQUEST_SEND_OPTIONS RequestOptions,
[out, optional] PUSHORT String,
[in, out] PUSHORT NumCharacters,
[in] UCHAR StringIndex,
[in, optional] USHORT LangID
);
매개 변수
[in] UsbDevice
WdfUsbTargetDeviceCreateWithParameters대한 이전 호출에서 가져온 USB 디바이스 개체에 대한 핸들입니다.
[in, optional] Request
프레임워크 요청 개체에 대한 핸들입니다. 이 매개 변수는 선택 사항이며 NULL
[in, optional] RequestOptions
요청에 대한 옵션을 지정하는 호출자가 할당한 WDF_REQUEST_SEND_OPTIONS 구조체에 대한 포인터입니다. 이 포인터는 선택 사항이며 NULL
[out, optional] String
요청된 유니코드 문자열을 수신하는 호출자 할당 버퍼에 대한 포인터입니다. 이 문자열은 디바이스에서 NULL로 종료된 문자열을 제공하는 경우에만 NULL로 종료됩니다. 이 포인터가 NULL
[in, out] NumCharacters
호출자가 할당한 변수에 대한 포인터입니다. 호출자는 버퍼가 보유할 수 있는 유니코드 문자 수를 제공합니다. WdfUsbTargetDeviceQueryString 반환하면 변수는 String 버퍼가 수신하는 유니코드 문자열에 있는 문자 수(제공된 경우 NULL 종결자 포함)를 받습니다.
[in] StringIndex
유니코드 문자열을 식별하는 인덱스 값입니다. 이 인덱스 값은 USB_DEVICE_DESCRIPTOR, USB_CONFIGURATION_DESCRIPTOR또는 USB_INTERFACE_DESCRIPTOR 구조체에서 가져옵니다.
[in, optional] LangID
언어 식별자입니다. 유니코드 문자열은 이 식별자가 지정하는 언어에 대해 검색됩니다. 디바이스의 지원되는 언어 식별자를 가져오는 방법에 대한 자세한 내용은 USB 사양을 참조하세요.
반환 값
WdfUsbTargetDeviceQueryString 작업이 성공하면 STATUS_SUCCESS 반환합니다. 그렇지 않으면 이 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 묘사 |
---|---|
|
잘못된 매개 변수가 검색되었습니다. |
|
메모리 버퍼를 할당할 수 없습니다. |
|
USB 디바이스가 잘못된 설명자를 반환했습니다. |
|
제공된 버퍼가 너무 작습니다. |
이 메서드는다른
드라이버에서 잘못된 개체 핸들을 제공하면 버그 검사가 수행됩니다.
발언
드라이버는 다음 단계를 사용하여 WdfUsbTargetDeviceQueryString 두 번 호출해야 합니다.
- String 포인터를 NULL설정하여 WdfUsbTargetDeviceQueryStringNumCharacters가 매개 변수를 가리키는 주소에서 필요한 버퍼 크기를 반환하도록.
- 요청된 문자열에 있는 유니코드 문자 수를 저장할 버퍼 공간을 할당합니다. 예를 들어 드라이버는 ExAllocatePoolWithTag 호출하여 버퍼를 할당하거나 WdfMemoryCreate 호출하여 프레임워크 메모리 개체를 만들 수 있습니다.
- WdfUsbTargetDeviceQueryString 다시 호출하여 String 값을 새 버퍼에 대한 포인터로 설정하고 NumCharacters 버퍼 길이(바이트 길이가 아닌 유니코드 문자 수)로 설정합니다.
드라이버가
드라이버가NULL이 아닌 또는 NULLRequest 매개 변수를 제공하는지 여부에 관계없이 드라이버에서NULLRequestOptions 매개 변수를 지정할 수 있습니다. 예를 들어 RequestOptions 매개 변수를 사용하여 제한 시간 값을 지정할 수 있습니다.
USB 문자열 설명자에 대한 자세한 내용은 USB 사양을 참조하세요.
WdfUsbTargetDeviceQueryString 메서드 및 USB I/O 대상에 대한 자세한 내용은 USB I/O 대상참조하세요.
예제
다음 코드 예제에서는 WdfUsbTargetDeviceQueryString 호출하여 필요한 버퍼 크기를 가져옵니다. WdfMemoryCreate 호출하여 메모리 개체 및 버퍼를 만든 다음, WdfUsbTargetDeviceQueryString 다시 호출하여 USB 디바이스 설명자에서 제조업체의 이름 문자열(0x0409)을 가져옵니다. (드라이버는 이전에 드라이버 정의 컨텍스트 공간에 설명자를 저장했습니다.)
PMY_DEVICE_CONTEXT myDeviceContext;
USHORT numCharacters;
PUSHORT stringBuf;
WDFMEMORY memoryHandle;
myDeviceContext = GetDeviceContext(device);
status = WdfUsbTargetDeviceQueryString(
myDeviceContext->UsbTargetDevice,
NULL,
NULL,
NULL,
&numCharacters,
myDeviceContext->UsbDeviceDescr.iManufacturer,
0x0409
);
ntStatus = WdfMemoryCreate(
WDF_NO_OBJECT_ATTRIBUTES,
NonPagedPool,
POOL_TAG,
numCharacters * sizeof(WCHAR),
&memoryHandle,
(PVOID)&stringBuf
);
if (!NT_SUCCESS(ntStatus)) {
return ntStatus;
}
status = WdfUsbTargetDeviceQueryString(
myDeviceContext->UsbTargetDevice,
NULL,
NULL,
stringBuf,
&numCharacters,
myDeviceContext->UsbDeviceDescr.iManufacturer,
0x0409
);
요구 사항
요구 | 값 |
---|---|
대상 플랫폼 | 보편적 |
최소 KMDF 버전 | 1.0 |
최소 UMDF 버전 | 2.0 |
헤더 | wdfusb.h(Wdfusb.h 포함) |
라이브러리 | Wdf01000.sys(KMDF); WUDFx02000.dll(UMDF) |
IRQL |
PASSIVE_LEVEL |
DDI 규정 준수 규칙 |
DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |