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