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 |
---|---|
|
O parâmetro SPBREQUEST é inválido ou a estrutura de SPB_TRANSFER_LIST na solicitação é formatada incorretamente. |
|
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. |