Condividi tramite


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
STATUS_INVALID_PARAMETER
Il parametro SPBREQUEST non è valido o la struttura SPB_TRANSFER_LIST nella richiesta è formattata in modo non corretto.
STATUS_INSUFFICIENT_RESOURCES
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.

Vedi anche

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode