Função WdfUsbTargetDeviceCreateIsochUrb (wdfusb.h)
[Aplica-se somente ao KMDF]
O método WdfUsbTargetDeviceCreateIsochUrb aloca um URB (bloco de solicitação USB isócrono).
Sintaxe
NTSTATUS WdfUsbTargetDeviceCreateIsochUrb(
[in] WDFUSBDEVICE UsbDevice,
[in, optional] PWDF_OBJECT_ATTRIBUTES Attributes,
[in] ULONG NumberOfIsochPackets,
[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.
[in] NumberOfIsochPackets
Especifica o número de pacotes isocronos para os quais o sistema aloca memória na URB.
[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 novo URB isocrono. A estrutura inicializa o conteúdo da estrutura URB como zero. Esse parâmetro é opcional e pode ser NULL.
Retornar valor
WdfUsbTargetDeviceCreateIsochUrb 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. |
|
Memória insuficiente disponível. |
Esse método também pode retornar outros valores NTSTATUS.
Comentários
Antes de chamar WdfUsbTargetDeviceCreateIsochUrb, um driver deve chamar WdfUsbTargetDeviceCreateWithParameters. Se tiver êxito, WdfUsbTargetDeviceCreateIsochUrb retornará um identificador para um objeto de memória de estrutura que descreve o URB isocrono recém-alocado.
Um driver pode chamar WdfUsbTargetDeviceCreateIsochUrb para alocar uma estrutura URB antes de chamar WdfUsbTargetDeviceFormatRequestForUrb.
Normalmente, um driver chama WdfUsbTargetDeviceCreateIsochUrb de dentro de um manipulador de solicitação.
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.
Para obter informações relacionadas, consulte a seção Comentários de WdfUsbTargetDeviceCreateUrb.
Exemplos
O exemplo de código a seguir baseia-se na rotina PerformIsochTransfer no driver de exemplo Isorwr. O exemplo chama WdfUsbTargetDeviceCreateIsochUrb para alocar um bloco de solicitação USB isócrona. O exemplo determina o número de bytes necessários para manter a solicitação de transferência isócrona e configura manualmente o cabeçalho URB e os pacotes isócronos no URB. Neste ponto, o driver pode chamar WdfUsbTargetPipeFormatRequestForUrb, conforme mostrado no exemplo em WdfUsbTargetDeviceCreateUrb.
USBD_PIPE_HANDLE usbdPipeHandle;
ULONG numPackets = UserBufferLength/TransferSizePerFrame;
ULONG urbSize;
PURB urb;
WDFMEMORY memory;
WDF_OBJECT_ATTRIBUTES_INIT(&objectAttribs);
objectAttribs.ParentObject = UsbDevice;
status = WdfUsbTargetDeviceCreateIsochUrb(
pDevContext->WdfUsbTargetDevice,
&objectAttribs,
0,
numPackets,
&memory,
NULL
);
urb = WdfMemoryGetBuffer(urbMemory, &urbSize);
urbSize = GET_ISO_URB_SIZE(numPackets);
usbdPipeHandle = WdfUsbTargetPipeWdmGetPipeHandle(pipe);
urb->UrbIsochronousTransfer.Hdr.Length = GET_ISO_URB_SIZE(numPackets);
urb->UrbIsochronousTransfer.Hdr.Function = URB_FUNCTION_ISOCH_TRANSFER;
urb->UrbIsochronousTransfer.PipeHandle = usbdPipeHandle;
for (packetId = 0; packetId < numberOfPackets; packetId++) {
Urb-> UrbIsochronousTransfer.IsoPacket[packetId].Offset = xxx;
Urb-> UrbIsochronousTransfer.IsoPacket[packetId].YYY = yyy;
}
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) |