Partager via


SpbRequestGetTransferParameters, fonction (spbcx.h)

La méthode SpbRequestGetTransferParameters récupère les paramètres de transfert d’un transfert individuel dans une séquence de transfert d’E/S.

Syntaxe

void SpbRequestGetTransferParameters(
  [in]            SPBREQUEST              SpbRequest,
  [in]            ULONG                   Index,
  [out, optional] SPB_TRANSFER_DESCRIPTOR *TransferDescriptor,
  [out, optional] PMDL                    *TransferBuffer
);

Paramètres

[in] SpbRequest

Un handle SPBREQUEST à la demande d’E/S à partir de laquelle récupérer les paramètres de transfert. Ce paramètre doit être un handle pour une demande de IOCTL_SPB_EXECUTE_SEQUENCE .

[in] Index

Index d’un transfert dans la séquence de transfert d’E/S. Pour plus d'informations, consultez la section Notes qui suit.

[out, optional] TransferDescriptor

Pointeur vers une structure de SPB_TRANSFER_DESCRIPTOR allouée par l’appelant dans laquelle la méthode écrit les paramètres de transfert. Le paramètre TransferDescriptor est facultatif et peut être spécifié comme NULL si l’appelant n’a pas besoin des paramètres de transfert. Pour plus d’informations, consultez la section Remarques.

[out, optional] TransferBuffer

Pointeur vers un emplacement dans lequel la méthode écrit un pointeur vers une MDL (ou une chaîne MDL) qui décrit la mémoire physique dans la mémoire tampon de transfert. L’appelant ne doit pas modifier le contenu de cette MDL. Ce paramètre est facultatif et peut être défini sur NULL si la MDL n’est pas nécessaire. Pour plus d'informations, consultez la section Notes qui suit.

Valeur de retour

None

Remarques

Pour demander une séquence de transfert d’E/S, un client (pilote périphérique) du pilote de contrôleur SPB envoie une demande de IOCTL_SPB_EXECUTE_SEQUENCE qui contient une liste des transferts dans la séquence. Votre pilote de contrôleur peut appeler SpbRequestGetTransferParameters pour obtenir des informations sur un transfert particulier dans la séquence.

Le paramètre Index est un index qui identifie un transfert particulier dans la séquence. Si N est le nombre de transferts dans la séquence, les index valides vont de 0 à N–1. Pour déterminer le nombre de transferts dans la séquence, appelez la méthode SpbRequestGetParameters . Cette méthode récupère une structure de SPB_TRANSFER_DESCRIPTOR qui contient les paramètres de requête. Le membre TransferCount de cette structure spécifie le nombre de transferts dans la séquence.

Si TransferDescriptor n’a pas la valeur NULL, l’appelant doit appeler la fonction SPB_TRANSFER_DESCRIPTOR_INIT pour initialiser la structure avant d’appeler SpbRequestGetTransferParameters. Une fois la structure initialisée, elle peut être réutilisée autant de fois que nécessaire sans être réinitialisée.

TransferBuffer est un pointeur facultatif dans lequel SpbRequestGetTransferParameters écrit un pointeur vers une MDL qui décrit la mise en page physique de la mémoire tampon de transfert. La mémoire tampon de transfert peut être décrite par une seule MDL ou par une chaîne MDL. Une mémoire tampon simple, qui se compose d’un bloc contigu de mémoire virtuelle, est décrite par une seule MDL. Si une mémoire tampon de transfert est mise en forme en tant que liste de nuages de points, chaque bloc contigu de mémoire virtuelle dans la mémoire tampon est décrit par une MDL dans une chaîne MDL. Pour plus d’informations sur les DLL, consultez Utilisation de MDL.

Exemples

//
// Note that this snippet shows a transfer completing synchronously. This
// is a horrible thing for a driver to do, but demonstrates the DDI nicely.
//

WDF_REQUEST_PARAMETERS parameters;
WDF_TRANSFER_DESCRIPTOR transfer;

WDF_REQUEST_PARAMETERS_INIT(&parameters);
WDF_TRANSFER_DESCRIPTOR_INIT(&transfer);

SpbRequestGetParameters(request, &parameters);

for (ULONG i = 0; i < parameters.SequenceCount; i += 1)
{
    WDFMEMORY buffer;

    SpbRequestGetTransferParameters(request, i, &transfer, &buffer);

    MyDriverPerformTransfer(deviceContext, 
                            request,
                            transfer,
                            buffer);
}

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 <= DISPATCH_LEVEL

Voir aussi