Compartilhar via


Função WdfRequestReuse (wdfrequest.h)

[Aplica-se a KMDF e UMDF]

O método WdfRequestReuse reinicializa um objeto de solicitação de estrutura para que ele possa ser reutilizado.

Sintaxe

NTSTATUS WdfRequestReuse(
  [in] WDFREQUEST                Request,
  [in] PWDF_REQUEST_REUSE_PARAMS ReuseParams
);

Parâmetros

[in] Request

Um identificador para um objeto de solicitação de estrutura.

[in] ReuseParams

Um ponteiro para uma estrutura de WDF_REQUEST_REUSE_PARAMS alocada pelo chamador.

Retornar valor

WdfRequestReuse 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
STATUS_INVALID_PARAMETER
Um parâmetro de entrada é inválido.
STATUS_WDF_REQUEST_INVALID_STATE
O driver forneceu um IRP na estrutura WDF_REQUEST_REUSE_PARAMS , mas o objeto de solicitação especificado não foi obtido de WdfRequestCreateFromIrp.
 

Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.

Comentários

Um driver baseado em estrutura pode reutilizar objetos de solicitação de estrutura criados por chamadas anteriores para WdfRequestCreate ou WdfRequestCreateFromIrp. Os drivers também podem reutilizar objetos de solicitação que receberam da estrutura, mas não podem definir o sinalizador WDF_REQUEST_REUSE_SET_NEW_IRP para esses objetos de solicitação.

Observação

Os drivers devem ter cuidado ao reutilização de objetos de solicitação recebidos da estrutura. A reutilização dessa solicitação redefine o sinalizador de cancelamento do IRP subjacente e pode impedir que um driver de chamada cancele a solicitação.

Um driver pode reutilizar um objeto de solicitação após a conclusão da solicitação original. Depois que um driver tiver chamado WdfRequestReuse, o conteúdo da solicitação deverá ser reinicializado. O driver pode especificar alguns parâmetros de solicitação na estrutura WDF_REQUEST_REUSE_PARAMS .

Se você quiser que a solicitação reutilizado tenha uma função de retorno de chamada CompletionRoutine , o driver deverá chamar WdfRequestSetCompletionRoutine depois de chamar WdfRequestReuse.

Para obter mais informações sobre WdfRequestReuse, consulte Reutilizando objetos de solicitação da estrutura.

Exemplos

O exemplo de código a seguir faz parte de uma função de retorno de chamada CompletionRoutine que chama WdfRequestReuse para que o driver possa reutilizar uma solicitação alocada pelo driver.

VOID
MyRequestCompletionRoutine(
    IN WDFREQUEST  Request,
    IN WDFIOTARGET  Target,
    PWDF_REQUEST_COMPLETION_PARAMS  CompletionParams,
    IN WDFCONTEXT  Context
    )
{
    WDF_REQUEST_REUSE_PARAMS  params;
    NTSTATUS  status;
...
    WDF_REQUEST_REUSE_PARAMS_INIT(
                                  &params,
                                  WDF_REQUEST_REUSE_NO_FLAGS,
                                  STATUS_SUCCESS
                                  );

    status = WdfRequestReuse(
                             Request,
                             &params
                             );
    ASSERT(NT_SUCCESS(status));
...
}

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 wdfrequest.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL <=DISPATCH_LEVEL
Regras de conformidade de DDI DriverCreate(kmdf), InvalidReqAccess(kmdf), InvalidReqAccessLocal(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf), ReqSendFail(kmdf)

Confira também

Completionroutine

WDF_REQUEST_REUSE_PARAMS

WDF_REQUEST_REUSE_PARAMS_INIT

WdfRequestCreate

WdfRequestCreateFromIrp

WdfRequestSetCompletionRoutine