Funzione SpbRequestCaptureIoOtherTransferList (spbcx.h)
Il metodo SpbRequestCaptureIoOtherTransferList recupera la struttura SPB_TRANSFER_LIST nel buffer di input della richiesta IOCTL personalizzata.
Sintassi
NTSTATUS SpbRequestCaptureIoOtherTransferList(
SPBREQUEST Request
);
Parametri
Request
Handle di SPBREQUEST alla richiesta IOCTL personalizzata. Il driver del controller SPB ha ricevuto in precedenza questo handle tramite una delle funzioni di callback degli eventi registrate.
Valore restituito
SpbRequestCaptureIoOtherTransferList restituisce STATUS_SUCCESS se la chiamata ha esito positivo. I valori restituiti possibili includono i codici di errore seguenti.
Valore restituito | Descrizione |
---|---|
|
Il parametro SPBREQUEST non è valido o la struttura SPB_TRANSFER_LIST nella richiesta non è formattata correttamente. |
|
Impossibile allocare le risorse di sistema necessarie per questa operazione. |
Osservazioni
Questo metodo deve essere chiamato nel contesto del processo in cui gli indirizzi del buffer sono validi. In genere, il driver del controller SPB chiama questo metodo dal EvtIoInCallerContext funzione di callback degli eventi fornita dal driver come parametro di input al metodo SpbControllerSetIoOtherCallback.
Il valore irQL massimo in cui il driver del controller SPB può chiamare questo metodo dipende dal fatto che l'origine della richiesta di I/O sia in esecuzione in modalità utente o in modalità kernel. Se la richiesta ha avuto origine dalla modalità utente, il driver deve chiamare questo metodo in PASSIVE_LEVEL. Se la richiesta proviene dalla modalità kernel, il driver deve chiamare questo metodo in IRQL <= DISPATCH_LEVEL. Il driver può chiamare il metodo WdfRequestGetRequestorMode per determinare la modalità dell'origine. Tuttavia, questa chiamata non è in genere necessaria perché il driver può basarsi sull'estensione spb framework (SpbCx) per chiamare il driver EvtIoInCallerContext funzione irQL appropriata.
Esempi
Nell'esempio di codice seguente viene illustrato come la funzione di callback di un driver del controller SPB EvtIoInCallerContext di eventi può usare il metodo SpbRequestCaptureIoOtherTransferList per ottenere il buffer o i buffer I/O da una richiesta IOCTL personalizzata.
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);
}
}
Fabbisogno
Requisito | Valore |
---|---|
client minimo supportato | Disponibile a partire da Windows 8. |
piattaforma di destinazione | Universale |
intestazione | spbcx.h |
libreria | Spbcxstubs.lib |
IRQL | Vedere la sezione Osservazioni. |