Função SpbRequestCaptureIoOtherTransferList (spbcx.h)

O método SpbRequestCaptureIoOtherTransferList recupera a estrutura SPB_TRANSFER_LIST no buffer de entrada da solicitação IOCTL personalizada.

Sintaxe

NTSTATUS SpbRequestCaptureIoOtherTransferList(
  SPBREQUEST Request
);

Parâmetros

Request

Um identificador SPBREQUEST para a solicitação IOCTL personalizada. O driver do controlador SPB recebeu esse identificador anteriormente por meio de uma de suas funções de retorno de chamada de evento registradas.

Retornar valor

SpbRequestCaptureIoOtherTransferList retornará STATUS_SUCCESS se a chamada for bem-sucedida. Os possíveis valores retornados incluem os seguintes códigos de erro.

Valor retornado Descrição
STATUS_INVALID_PARAMETER
O parâmetro SPBREQUEST é inválido ou a estrutura SPB_TRANSFER_LIST na solicitação está formatada incorretamente.
STATUS_INSUFFICIENT_RESOURCES
Não é possível alocar os recursos do sistema necessários para esta operação.

Comentários

Esse método deve ser chamado no contexto do processo no qual os endereços de buffer são válidos. Normalmente, o driver do controlador SPB chama esse método da função de retorno de chamada de evento EvtIoInCallerContext que o driver fornece como um parâmetro de entrada para o método SpbControllerSetIoOtherCallback .

O IRQL máximo no qual o driver do controlador SPB pode chamar esse método depende se o originador da solicitação de E/S está em execução no modo de usuário ou no modo kernel. Se a solicitação tiver origem no modo de usuário, o driver deverá chamar esse método em PASSIVE_LEVEL. Se a solicitação tiver origem no modo kernel, o driver deverá chamar esse método em IRQL <= DISPATCH_LEVEL. O driver pode chamar o método WdfRequestGetRequestorMode para determinar o modo do originador. No entanto, essa chamada normalmente é desnecessária porque o driver pode contar com a extensão da estrutura SPB (SpbCx) para chamar a função EvtIoInCallerContext do driver no IRQL apropriado.

Exemplos

O exemplo de código a seguir mostra como a função de retorno de chamada de evento EvtIoInCallerContext do driver do controlador SPB pode usar o método SpbRequestCaptureIoOtherTransferList para obter o buffer de E/S ou buffers de uma solicitação IOCTL personalizada.

VOID
EvtIoInCallerContext(
    _In_  WDFDEVICE   SpbController,
    _In_  WDFREQUEST  FxRequest
    ) 
{
    NTSTATUS status;

    //
    // NOTE: The driver should check for custom IOCTLs that this
    // driver handles. If an IOCTL is not recognized, mark the
    // request as STATUS_NOT_SUPPORTED, and complete the request.
    //

    status = SpbRequestCaptureIoOtherTransferList((SPBREQUEST)FxRequest);

    //
    // If the preceding call fails, the driver must complete the
    // request instead of queueing the request.
    //

    if (!NT_SUCCESS(status))
    {
        goto exit;
    }

    status = WdfDeviceEnqueueRequest(SpbController, FxRequest);

    if (!NT_SUCCESS(status))
    {
        goto exit;
    }

exit:

    if (!NT_SUCCESS(status))
    {
        WdfRequestComplete(FxRequest, status);
    }
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível a partir do Windows 8.
Plataforma de Destino Universal
Cabeçalho spbcx.h
Biblioteca Spbcxstubs.lib
IRQL Consulte Observações.

Confira também

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode