Partager via


WdfDeviceSetAlignmentRequirement, fonction (wdfdevice.h)

[S’applique uniquement à KMDF]

La méthode WdfDeviceSetAlignmentRequirement inscrit l’alignement de l’adresse préférée du pilote pour les mémoires tampons de données que l’appareil utilise pendant les opérations de transfert de mémoire.

Syntaxe

void WdfDeviceSetAlignmentRequirement(
  [in] WDFDEVICE Device,
  [in] ULONG     AlignmentRequirement
);

Paramètres

[in] Device

Handle vers un objet d’appareil framework.

[in] AlignmentRequirement

Exigence d’alignement dépendante du matériel pour une mémoire tampon de données. Cette valeur doit être inférieure à la limite d’alignement. Par exemple, vous pouvez spécifier 15 pour une limite d’alignement de 16 octets et 31 pour une limite d’alignement de 32 octets. Vous pouvez également utiliser l’une des constantes_ALIGNMENT xxxx FILE_définies dans Wdm.h, par exemple :

//
// Define alignment requirement values
//
#define FILE_BYTE_ALIGNMENT             0x00000000
#define FILE_WORD_ALIGNMENT             0x00000001
#define FILE_LONG_ALIGNMENT             0x00000003
#define FILE_QUAD_ALIGNMENT             0x00000007
#define FILE_OCTA_ALIGNMENT             0x0000000f
#define FILE_32_BYTE_ALIGNMENT          0x0000001f
#define FILE_64_BYTE_ALIGNMENT          0x0000003f
#define FILE_128_BYTE_ALIGNMENT         0x0000007f
#define FILE_256_BYTE_ALIGNMENT         0x000000ff
#define FILE_512_BYTE_ALIGNMENT         0x000001ff

Valeur de retour

Aucun

Remarques

Une vérification de bogue se produit si le pilote fournit un handle d’objet non valide.

Un pilote qui utilise des E/S directes peut appeler WdfDeviceSetAlignmentRequirement pour inscrire une exigence d’alignement préférée. L’alignement s’applique aux requêtes d’E/S qui passent par le Gestionnaire d’E/S, et non à celles envoyées à votre pilote à partir d’un autre pilote qui appelle IoCallDriver.

Étant donné que le gestionnaire d’E/S n’utilise pas toujours l’alignement demandé, le pilote doit être préparé pour les mémoires tampons non alignées.

Le pilote peut appeler WdfDeviceGetAlignmentRequirement pour obtenir la valeur actuelle de l’exigence d’alignement de l’appareil.

Le gestionnaire d’E/S définit une valeur d’exigence d’alignement pour l’appareil lorsque le pilote appelle WdfDeviceCreate. Pour plus d’informations sur la valeur des exigences d’alignement d’un appareil et quand un pilote doit modifier la valeur, consultez Initialisation d’un objet d’appareil dans la documentation WDM.

Si votre pilote spécifie une exigence d’alignement supérieure à la taille de page de l’ordinateur (PAGE_SIZE), les adresses logiques renvoyées par la méthode WdfCommonBufferGetAlignedLogicalAddress sont toujours alignées sur l’exigence d’alignement spécifiée, mais les adresses virtuelles renvoyées par la méthode WdfCommonBufferGetAlignedVirtualAddress peuvent ne pas être alignées sur l’exigence d’alignement.

Si votre pilote spécifie une exigence d’alignement inférieure à la taille de page de l’ordinateur, toutes les adresses logiques et virtuelles sont alignées sur l’exigence d’alignement spécifiée.

Pour plus d’informations sur l’appel WdfDeviceSetAlignmentRequirement, consultez Activation des transactions DMA et à l’aide de mémoires tampons courantes.

Exemples

L’exemple de code suivant provient de l’exemple de pilote AMCC5933. Cet exemple vérifie l’exigence d’alignement actuelle d’un appareil et définit l’exigence d’alignement sur une nouvelle valeur, si nécessaire. Notez que la valeur d’alignement exacte dépend du matériel.

ULONG alignReq;

alignReq = WdfDeviceGetAlignmentRequirement(device);
if (alignReq < AMCC5933_ALIGNMENT__32BITS) {
//
// Set the S5933 alignment requirement to a new value.
//
WdfDeviceSetAlignmentRequirement(
                                 device,
                                 AMCC5933_ALIGNMENT__32BITS
                                 );
}

Exigences

Exigence Valeur
plateforme cible Universel
version minimale de KMDF 1.0
d’en-tête wdfdevice.h (include Wdf.h)
bibliothèque Wdf01000.sys (voir Versioning de la bibliothèque Framework.)
IRQL <= DISPATCH_LEVEL
règles de conformité DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Voir aussi

WdfCommonBufferGetAlignedLogicalAddress

WdfCommonBufferGetAlignedVirtualAddress

WdfDeviceGetAlignmentRequirement