Função WdfUsbTargetDeviceQueryString (wdfusb.h)
[Aplica-se a KMDF e UMDF]
O método WdfUsbTargetDeviceQueryString recupera a cadeia de caracteres Unicode associada a um dispositivo USB especificado e um valor de índice do descritor.
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 que foi 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á terminada em NULL somente se o dispositivo fornecer uma cadeia de caracteres terminada em 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 NumCharacters aponta.
[in, out] NumCharacters
Um ponteiro para uma variável alocada pelo chamador. O chamador fornece o número de caracteres Unicode que o buffer pode conter. Quando WdfUsbTargetDeviceQueryString retorna, a variável recebe o número de caracteres (incluindo o terminador NULL, se fornecido) que estão na cadeia de caracteres Unicode que o buffer String recebe.
[in] StringIndex
Um valor de índice que identifica a cadeia de caracteres Unicode. Esse valor de índice é obtido de uma estrutura de USB_DEVICE_DESCRIPTOR, USB_CONFIGURATION_DESCRIPTOR ou 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.
Retornar valor
WdfUsbTargetDeviceQueryString retornará STATUS_SUCCESS se a operação for bem-sucedida. Caso contrário, esse método pode 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.
Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.
Comentários
Os drivers devem chamar WdfUsbTargetDeviceQueryString duas vezes, usando as seguintes etapas:
- Defina o ponteiro String como NULL, para que WdfUsbTargetDeviceQueryString retorne o tamanho do buffer necessário no endereço para o 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 String como um ponteiro para o novo buffer e definindo NumCharacters com o comprimento do buffer (ou seja, o número de caracteres Unicode, não o comprimento do byte).
Se o driver especificar um valor não NULL para o parâmetro Request , a estrutura usará o objeto de solicitação especificado e outro thread de driver poderá chamar WdfRequestCancelSentRequest, se necessário, para tentar cancelar a solicitação de consulta de cadeia de caracteres. Se o driver especificar um valor NULL para Request, a estrutura usará um objeto de solicitação interno que o driver não pode cancelar.
O driver pode especificar um parâmetro RequestOptions não NULL, independentemente de o driver fornecer um parâmetro de solicitação não NULL ou NULL. Você pode, por exemplo, usar o parâmetro RequestOptions para especificar um valor de tempo limite.
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 WdfUsbTargetDeviceQueryString e destinos de E/S USB, consulte Destinos de E/S USB.
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 |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.0 |
Versão mínima do UMDF | 2,0 |
Cabeçalho | wdfusb.h (include Wdfusb.h) |
Biblioteca | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Regras de conformidade da DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), UsbKmdfIrql(kmdf), UsbKmdfIrql2(kmdf), UsbKmdfIrqlExplicit(kmdf) |
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de