Partilhar via


Função SpbRequestCaptureIoOtherTransferList (spbcx.h)

O método SpbRequestCaptureIoOtherTransferList recupera a estrutura de 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.

Valor de retorno

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

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

Observações

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 EvtIoInCallerCallerContext 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 se originado do 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 SPB pode usar o método de 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
de cliente com suporte mínimo Disponível a partir do Windows 8.
da Plataforma de Destino Universal
cabeçalho spbcx.h
biblioteca Spbcxstubs.lib
IRQL Consulte Comentários.

Consulte também

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode