Função WdfUsbTargetDeviceCreateUrb (wdfusb.h)
[Aplica-se somente ao KMDF]
O método WdfUsbTargetDeviceCreateUrb aloca um URB (bloco de solicitação USB).
Sintaxe
NTSTATUS WdfUsbTargetDeviceCreateUrb(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[out] WDFMEMORY *UrbMemory,
[out, optional] PURB *Urb
);
Parâmetros
[in] UsbDevice
Um identificador para um objeto de dispositivo USB que foi obtido de uma chamada anterior para WdfUsbTargetDeviceCreateWithParameters.
[in, optional] Attributes
Um ponteiro para uma estrutura de WDF_OBJECT_ATTRIBUTES fornecida pelo chamador que contém atributos para o novo objeto de memória. Se o driver fornecer esse parâmetro, o membro ParentObject da estrutura deverá ser um objeto de dispositivo USB (WDFUSBDEVICE) ou um objeto de solicitação (WDFREQUEST) criado pela estrutura ou qualquer objeto cuja cadeia de pais leve a um desses tipos. Esse parâmetro é opcional e pode ser WDF_NO_OBJECT_ATTRIBUTES.
[out] UrbMemory
Um ponteiro para um local do tipo WDFMEMORY que recebe um identificador para um objeto de memória de estrutura.
[out, optional] Urb
Um ponteiro para uma estrutura URB que recebe o endereço do URB recém-alocado. Esse parâmetro é opcional e pode ser NULL.
Retornar valor
WdfUsbTargetDeviceCreateUrb 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. |
|
O driver não especificou uma versão de contrato de cliente quando chamou WDF_USB_DEVICE_CREATE_CONFIG_INIT. |
|
Não havia memória suficiente para criar um novo URB. |
Esse método também pode retornar outros valores NTSTATUS.
Comentários
Antes de chamar WdfUsbTargetDeviceCreateUrb, um driver deve chamar WdfUsbTargetDeviceCreateWithParameters. Se tiver êxito, WdfUsbTargetDeviceCreateUrb retornará um identificador para um objeto de memória de estrutura que descreve o URB recém-alocado. Normalmente, um driver chama WdfUsbTargetDeviceCreateUrb de dentro de um manipulador de solicitação.
Um driver pode chamar WdfUsbTargetDeviceCreateUrb para alocar uma estrutura URB antes de chamar WdfUsbTargetDeviceFormatRequestForUrb.
WdfUsbTargetDeviceCreateUrb é semelhante em operação a WdfMemoryCreate. Ambos os métodos alocam um objeto de memória de estrutura e ambos os métodos também fornecem a opção de receber o buffer (nesse caso, o URB) associado ao objeto de memória. Em ambos os casos, o chamador também pode recuperar o buffer mais tarde chamando WdfMemoryGetBuffer.
Se o driver fornecer um parâmetro Urb ao chamar WdfUsbTargetDeviceCreateUrb, você poderá formatar o URB manualmente ou chamando as rotinas do UsbBuildXxx.
O objeto de memória e seu buffer são excluídos quando o objeto pai é excluído. Um driver também pode excluir um objeto de memória e seu buffer chamando WdfObjectDelete.
Exemplos
O exemplo de código a seguir declara um objeto de memória de estrutura. O exemplo chama WdfUsbTargetDeviceCreateUrb para alocar um bloco de solicitação USB e, em seguida, chama WdfUsbTargetDeviceFormatRequestForUrb para formatar uma solicitação que usa o conteúdo da estrutura URB. Por fim, o exemplo registra uma função de retorno de chamada CompletionRoutine e envia a solicitação para um destino de E/S.
WDFMEMORY memory;
PURB urb = NULL;
WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
objectAttribs.ParentObject = UsbDevice;
status = WdfUsbTargetDeviceCreateUrb(
pDevContext->WdfUsbTargetDevice,
&objectAttribs,
&memory,
&urb);
status = WdfUsbTargetDeviceFormatRequestForUrb(
deviceContext->WdfUsbTargetDevice,
request,
memory,
NULL);
WdfRequestSetCompletionRoutine(
request,
MyCompletionRoutine,
NULL);
if (!WdfRequestSend(
request,
WdfUsbTargetDeviceGetIoTarget(UsbDevice),
NULL)) {
status = WdfRequestGetStatus(request);
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows Vista |
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1.11 |
Cabeçalho | wdfusb.h (inclua Wdfusb.h) |
Biblioteca | Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.) |
IRQL | <=DISPATCH_LEVEL |
Regras de conformidade de DDI | DriverCreate(kmdf) |
Confira também
WDF_USB_DEVICE_CREATE_CONFIG_INIT
WdfUsbTargetDeviceCreateIsochUrb