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 |
---|---|
|
Le paramètre SPBREQUEST n’est pas valide ou la structure SPB_TRANSFER_LIST dans la requête est mal mise en forme. |
|
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. |