Função WdfUsbTargetDeviceQueryString (wdfusb.h)
[Aplica-se a KMDF e UMDF]
O método WdfUsbTargetDeviceQueryString
Sintaxe
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
);
Parâmetros
[in] UsbDevice
Um identificador para um objeto de dispositivo USB obtido de uma chamada anterior para WdfUsbTargetDeviceCreateWithParameters.
[in, optional] Request
Um identificador para um objeto de solicitação de estrutura. Esse parâmetro é opcional e pode ser NULL. Para obter mais informações, consulte a seção Comentários a seguir.
[in, optional] RequestOptions
Um ponteiro para uma estrutura de WDF_REQUEST_SEND_OPTIONS alocada pelo chamador que especifica opções para a solicitação. Esse ponteiro é opcional e pode ser NULL. Para obter mais informações, consulte a seção Comentários a seguir.
[out, optional] String
Um ponteiro para um buffer alocado pelo chamador que recebe a cadeia de caracteres Unicode solicitada. A cadeia de caracteres será encerrada em NULL somente se o dispositivo fornecer uma cadeia de caracteres terminada por NULL. Se esse ponteiro for NULL, WdfUsbTargetDeviceQueryString retornará o tamanho do buffer necessário (ou seja, o número necessário de caracteres Unicode) no local para o qual o NumCharacters aponta.
[in, out] NumCharacters
Um ponteiro para uma variável alocada por chamador. O chamador fornece o número de caracteres Unicode que o buffer pode conter. Quando
[in] StringIndex
Um valor de índice que identifica a cadeia de caracteres Unicode. Esse valor de índice é obtido de uma estrutura USB_DEVICE_DESCRIPTOR, USB_CONFIGURATION_DESCRIPTORou USB_INTERFACE_DESCRIPTOR.
[in, optional] LangID
Um identificador de idioma. A cadeia de caracteres Unicode será recuperada para o idioma especificado por esse identificador. Para obter informações sobre como obter os identificadores de idioma com suporte de um dispositivo, consulte a especificação USB.
Valor de retorno
WdfUsbTargetDeviceQueryString retornará STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, esse método poderá retornar um dos seguintes valores:
Código de retorno | Descrição |
---|---|
|
Um parâmetro inválido foi detectado. |
|
Não foi possível alocar um buffer de memória. |
|
O dispositivo USB retornou um descritor inválido. |
|
O buffer fornecido era muito pequeno. |
Esse método também pode retornar outros valores NTSTATUS .
Uma verificação de bug ocorre se o driver fornece um identificador de objeto inválido.
Observações
Os drivers devem chamar WdfUsbTargetDeviceQueryString duas vezes, usando as seguintes etapas:
-
Defina o ponteiro de cadeia de caracteres
como NULL, de modo que WdfUsbTargetDeviceQueryString retornará o tamanho do buffer necessário no endereço ao qual o parâmetro NumCharacters aponta. - Aloque espaço em buffer para manter o número de caracteres Unicode que estão na cadeia de caracteres solicitada. Por exemplo, um driver pode chamar ExAllocatePoolWithTag para alocar um buffer ou pode chamar WdfMemoryCreate para criar um objeto de memória de estrutura.
-
Chame
WdfUsbTargetDeviceQueryString novamente, definindo o valor cadeia de caracteres como um ponteiro para o novo buffer e definindo NumCharacters para o comprimento do buffer (ou seja, o número de caracteres Unicode, não o comprimento do byte).
Se o driver especificar um valor NULL não
O driver pode especificar um parâmetro
Para obter mais informações sobre descritores de cadeia de caracteres USB, consulte a especificação USB.
Para obter mais informações sobre o método
Exemplos
O exemplo de código a seguir chama WdfUsbTargetDeviceQueryString para obter o tamanho do buffer necessário, chama WdfMemoryCreate para criar um objeto de memória e um buffer e, em seguida, chama WdfUsbTargetDeviceQueryString novamente para obter a cadeia de caracteres de nome do fabricante, em inglês dos EUA (0x0409), de um descritor de dispositivo USB. (O driver armazenou anteriormente o descritor no espaço de contexto definido pelo driver.)
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
);
Requisitos
Requisito | Valor |
---|---|
da Plataforma de Destino |
Universal |
versão mínima do KMDF | 1.0 |
versão mínima do UMDF | 2.0 |
cabeçalho | wdfusb.h (inclua Wdfusb.h) |
biblioteca | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
regras de conformidade de DDI |