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 SPBREQUEST per la richiesta IOCTL personalizzata. Il driver del controller SPB ha ricevuto in precedenza questo handle tramite una delle funzioni di callback degli eventi registrati.
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 è formattata in modo non corretto. |
|
Impossibile allocare le risorse di sistema necessarie per questa operazione. |
Commenti
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 dalla funzione di callback dell'evento EvtIoInCallerContext fornita dal driver come parametro di input al metodo SpbControllerSetIoOtherCallback .
Il numero massimo di irQL in cui il driver del controller SPB può chiamare questo metodo dipende dal fatto che l'originatore 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 al 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 la funzione EvtIoInCallerContext del driver nel runtime di integrazione appropriato.
Esempio
Nell'esempio di codice seguente viene illustrato come la funzione di callback dell'evento EvtIoInCallerContext di un driver del controller SPB può usare il metodo SpbRequestCaptureIoOtherTransferList per ottenere il buffer di I/O o i buffer 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);
}
}
Requisiti
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. |