Partager via


SpbRequestCaptureIoOtherTransferList, fonction (spbcx.h)

La méthode SpbRequestCaptureIoOtherTransferList récupère la structure SPB_TRANSFER_LIST dans la mémoire tampon d’entrée de la requête IOCTL personnalisée.

Syntaxe

NTSTATUS SpbRequestCaptureIoOtherTransferList(
  SPBREQUEST Request
);

Paramètres

Request

Un handle SPBREQUEST pour la requête IOCTL personnalisée. Le pilote du contrôleur SPB a précédemment reçu ce handle via l’une de ses fonctions de rappel d’événements inscrites.

Valeur retournée

SpbRequestCaptureIoOtherTransferList retourne STATUS_SUCCESS si l’appel réussit. Les valeurs de retour possibles incluent les codes d’erreur suivants.

Valeur retournée Description
STATUS_INVALID_PARAMETER
Le paramètre SPBREQUEST n’est pas valide ou la structure SPB_TRANSFER_LIST dans la requête est mal mise en forme.
STATUS_INSUFFICIENT_RESOURCES
Impossible d’allouer les ressources système requises pour cette opération.

Remarques

Cette méthode doit être appelée dans le contexte du processus dans lequel les adresses de mémoire tampon sont valides. En règle générale, le pilote du contrôleur SPB appelle cette méthode à partir de la fonction de rappel d’événement EvtIoInCallerContext que le pilote fournit en tant que paramètre d’entrée à la méthode SpbControllerSetIoOtherCallback .

L’IRQL maximal auquel le pilote de contrôleur SPB peut appeler cette méthode dépend de l’origine de la demande d’E/S en cours d’exécution en mode utilisateur ou en mode noyau. Si la requête provient du mode utilisateur, le pilote doit appeler cette méthode à PASSIVE_LEVEL. Si la requête provient du mode noyau, le pilote doit appeler cette méthode à l’adresse IRQL <= DISPATCH_LEVEL. Le pilote peut appeler la méthode WdfRequestGetRequestorMode pour déterminer le mode de l’initiateur. Toutefois, cet appel est généralement inutile, car le pilote peut s’appuyer sur l’extension SPB Framework (SpbCx) pour appeler la fonction EvtIoInCallerContext du pilote à l’IRQL approprié.

Exemples

L’exemple de code suivant montre comment la fonction de rappel d’événement EvtIoInCallerContext d’un pilote de contrôleur SPB peut utiliser la méthode SpbRequestCaptureIoOtherTransferList pour obtenir la ou les mémoires tampons d’E/S à partir d’une requête IOCTL personnalisée.

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);
    }
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 8.
Plateforme cible Universal
En-tête spbcx.h
Bibliothèque Spbcxstubs.lib
IRQL Consultez la section Notes.

Voir aussi

EvtIoInCallerContext

SPBREQUEST

SPB_TRANSFER_LIST

SpbControllerSetIoOtherCallback

WdfRequestGetRequestorMode