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 SPBREQUEST de gérer la requête 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 Remarques suivante.
[out, optional] TransferDescriptor
Pointeur vers une structure 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 ne nécessite pas les 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 dans une chaîne MDL (ou MDL) qui décrit la mémoire physique dans la mémoire tampon de transfert. L’appelant ne doit pas modifier le contenu de ce MDL. Ce paramètre est facultatif et peut être défini sur NULL si le MDL n’est pas nécessaire. Pour plus d’informations, consultez la section Remarques suivante.
Valeur de retour
Aucun
Remarques
Pour demander une séquence de transfert d’E/S, un client (pilote périphérique) du pilote du contrôleur SPB envoie une requête 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 sont compris entre 0 et 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 SPB_TRANSFER_DESCRIPTOR qui contient les paramètres de requête. Le TransferCount membre de cette structure spécifie le nombre de transferts dans la séquence.
Si transferDescriptor n’est pas 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 dans un 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 un MDL unique 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 un MDL unique. 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 un MDL dans une chaîne MDL. Pour plus d’informations sur les DLL, consultez Utilisation de MDLs.
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(¶meters);
WDF_TRANSFER_DESCRIPTOR_INIT(&transfer);
SpbRequestGetParameters(request, ¶meters);
for (ULONG i = 0; i < parameters.SequenceCount; i += 1)
{
WDFMEMORY buffer;
SpbRequestGetTransferParameters(request, i, &transfer, &buffer);
MyDriverPerformTransfer(deviceContext,
request,
transfer,
buffer);
}
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible à partir de Windows 8. |
plateforme cible | Universel |
d’en-tête | spbcx.h |
bibliothèque | Spbcxstubs.lib |
IRQL | <= DISPATCH_LEVEL |