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 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 da estrutura.
[out, optional] Urb
Um ponteiro para uma estrutura URB que recebe o endereço da URB recém-alocada. Esse parâmetro é opcional e pode ser NULL.
Valor de retorno
WdfUsbTargetDeviceCreateUrb 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. |
|
O driver não especificou uma versão do contrato do 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 .
Observações
Antes de chamar WdfUsbTargetDeviceCreateUrb, um driver deve chamar WdfUsbTargetDeviceCreateWithParameters. Se bem-sucedido, WdfUsbTargetDeviceCreateUrb retorna 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 quando ele chamar WdfUsbTargetDeviceCreateUrb, você poderá formatar o URB manualmente ou chamando as rotinas 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 CompletionRoutine de retorno de chamada 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
Consulte também
WDF_USB_DEVICE_CREATE_CONFIG_INIT
WdfUsbTargetDeviceCreateIsochUrb