Função WdfRequestForwardToParentDeviceIoQueue (wdfrequest.h)
[Aplica-se somente ao KMDF]
O método WdfRequestForwardToParentDeviceIoQueue recoloca uma solicitação de E/S da fila de E/S de um dispositivo filho para uma fila de E/S especificada do dispositivo pai do filho.
Sintaxe
NTSTATUS WdfRequestForwardToParentDeviceIoQueue(
[in] WDFREQUEST Request,
[in] WDFQUEUE ParentDeviceQueue,
[in] PWDF_REQUEST_FORWARD_OPTIONS ForwardOptions
);
Parâmetros
[in] Request
Um identificador para um objeto de solicitação de estrutura.
[in] ParentDeviceQueue
Um identificador para um objeto de fila de estrutura.
[in] ForwardOptions
Um ponteiro para uma estrutura de WDF_REQUEST_FORWARD_OPTIONS alocada pelo chamador.
Retornar valor
WdfRequestForwardToParentDeviceIoQueue 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 |
---|---|
|
O tamanho da estrutura de WDF_REQUEST_FORWARD_OPTIONS fornecida é inválido. |
|
Um membro da estrutura de WDF_REQUEST_FORWARD_OPTIONS fornecida contém um valor inválido. |
|
Esse valor será retornado se ocorrer um dos seguintes procedimentos:
|
|
A fila de E/S especificada não está aceitando novas solicitações. |
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
Antes que um driver possa chamar WdfRequestForwardToParentDeviceIoQueue, ele deve chamar WdfPdoInitAllowForwardingRequestToParent.
O driver deve usar o mesmo método para acessar buffers de dados (armazenados em buffer, diretos ou nenhum deles) para o dispositivo pai e o dispositivo filho.
Se o driver chamar WdfRequestForwardToParentDeviceIoQueue para enfileirar novamente uma solicitação de E/S, o driver não deverá usar o objeto de solicitação como pai de outros objetos de estrutura, como objetos de temporizador ou objetos de item de trabalho.
Se o driver tiver chamado WdfDeviceInitSetRequestAttributes para especificar espaço de contexto para os objetos de solicitação do dispositivo pai , a estrutura não adicionará esse espaço de contexto para solicitar objetos que o driver recebe na fila de um dispositivo filho. O driver pode chamar WdfObjectAllocateContext para adicionar o espaço de contexto a um objeto de solicitação antes que o driver chame WdfRequestForwardToParentDeviceIoQueue. Por outro lado, se o driver chamado WdfDeviceInitSetRequestAttributes para os objetos de solicitação do dispositivo filho e se os objetos de solicitação do dispositivo pai usarem espaço de contexto igual ou menor que o espaço de contexto do dispositivo filho, o driver poderá usar o espaço de contexto do objeto de solicitação sem chamar WdfObjectAllocateContext.
Atualmente, o driver deve usar a opção enviar e esquecer para todas as solicitações de E/S requeuidas. Portanto, lembre-se de que, no momento em que a estrutura exclui um objeto de solicitação requeutado, ele pode já ter removido o dispositivo filho que recebeu originalmente o objeto de solicitação. Portanto, o driver não deve usar a função EvtCleanupCallback ou EvtDestroyCallback de um objeto de solicitação requeued para acessar recursos de dispositivo filho, pois os recursos podem ser removidos antes da execução da função EvtCleanupCallback ou EvtDestroyCallback .
Para obter mais informações sobre WdfRequestForwardToParentDeviceIoQueue, consulte Requeuing I/O Requests.
Exemplos
O exemplo de código a seguir primeiro determina o dispositivo pai de um dispositivo que recebeu uma solicitação de E/S e, em seguida, ele requeusa a solicitação de E/S para a fila de E/S padrão do dispositivo pai.
WDFDEVICE device, parentDevice;
WDF_REQUEST_FORWARD_OPTIONS forwardOptions;
NTSTATUS status;
device = WdfIoQueueGetDevice(WdfRequestGetIoQueue(Request));
parentDevice = WdfPdoGetParent(device);
WDF_REQUEST_FORWARD_OPTIONS_INIT(&forwardOptions);
status = WdfRequestForwardToParentDeviceIoQueue(
Request,
WdfDeviceGetDefaultQueue(parentDevice),
&forwardOptions
);
if (!NT_SUCCESS(status)) {
WdfRequestComplete(
Request,
status
);
}
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Versão mínima do KMDF | 1,9 |
Cabeçalho | wdfrequest.h (inclua Wdf.h) |
Biblioteca | Wdf01000.sys (consulte Controle de versão da biblioteca de estrutura.) |
IRQL | <=DISPATCH_LEVEL |
Regras de conformidade da DDI | DriverCreate(kmdf) |