WdfDeviceInitSetIoTypeEx, fonction (wdfdevice.h)
[S’applique à KMDF et UMDF]
La méthode WdfDeviceInitSetIoTypeEx définit la méthode ou la préférence pour la façon dont un pilote accède aux mémoires tampons de données incluses dans les demandes de lecture et d’écriture, ainsi que les demandes de contrôle d’E/S d’appareil, pour un appareil spécifié.
Syntaxe
void WdfDeviceInitSetIoTypeEx(
[in] PWDFDEVICE_INIT DeviceInit,
[in] PWDF_IO_TYPE_CONFIG IoTypeConfig
);
Paramètres
[in] DeviceInit
Pointeur vers une structure WDFDEVICE_INIT.
[in] IoTypeConfig
Pointeur vers WDF_IO_TYPE_CONFIG structure initialisée à l’aide de WDF_IO_TYPE_CONFIG_INIT macro.
Valeur de retour
Aucun
Remarques
Si vous écrivez un pilote à l’aide de KMDF version 1.11 ou antérieure, vous devez utiliser WdfDeviceInitSetIoType.
KMDF un pilote KMDF appelle WdfDeviceInitSetIoTypeEx pour définir une méthode d’accès tampon pour les demandes de lecture et d’écriture. Pour les demandes de contrôle d’E/S d’appareil, l’infrastructure utilise le type de mémoire tampon encodé dans le code de contrôle d’E/S (IOCTL).
UMDF Un pilote UMDF appelle WdfDeviceInitSetIoTypeEx pour inscrire des préférences pour les demandes de lecture et d’écriture, ainsi que les demandes de contrôle d’E/S d’appareil. Les valeurs qu’un pilote UMDF fournit à WdfDeviceInitSetIoTypeEx sont uniquement des préférences et ne sont pas garanties d’être utilisées par l’infrastructure. Votre pilote peut appeler WdfDeviceGetDeviceStackIoType pour déterminer les méthodes d’accès aux mémoires tampons affectées par UMDF aux demandes de contrôle d’E/S d’un appareil et en lecture/écriture. Pour les demandes de contrôle d’E/S, la méthode d’accès utilisée par l’infrastructure peut différer de la méthode d’accès spécifiée dans le IOCTL et de la méthode d’accès demandée par le pilote.
Si un pilote appelle WdfDeviceInitSetIoTypeEx, il doit le faire avant d’appeler WdfDeviceCreate.
Si le pilote n’appelle pas WdfDeviceInitSetIoTypeEx, l’infrastructure définit la méthode d’accès à la mémoire tampon du pilote sur WdfDeviceIoBuffered, pour l’appareil spécifié.
L’appel WdfDeviceInitSetIoTypeEx à partir d’un pilote de filtre KMDF n’a aucun effet. Pour les pilotes de filtre KMDF, l’infrastructure utilise le type d’E/S spécifié par le pilote inférieur suivant dans la pile des pilotes.
Toutefois, un pilote de filtre UMDF peut inscrire des préférences pour la méthode d’accès à la mémoire tampon en appelant WdfDeviceInitSetIoTypeEx.
Tous les pilotes UMDF dans une pile de pilotes doivent utiliser la même méthode pour accéder aux mémoires tampons d’un appareil. Si UMDF détermine que certains pilotes préfèrent les E/S mises en mémoire tampon ou les E/S directes d’un appareil, tandis que d’autres pilotes préfèrent uniquement les E/S mises en mémoire tampon pour l’appareil, UMDF utilise des E/S mises en mémoire tampon pour tous les pilotes. Si un ou plusieurs pilotes d’une pile préfèrent uniquement les E/S mises en mémoire tampon, tandis que d’autres préfèrent uniquement les E/S directes, UMDF enregistre un événement dans le journal des événements système et ne démarre pas la pile des pilotes.
Pour plus d’informations sur les méthodes d’accès aux mémoires tampons, consultez Accès aux mémoires tampons de données.
Cette méthode est l’équivalent UMDF 2.0 de IWDFDeviceInitialize2 ::SetIoTypePreference.
Exemples
L’exemple de code suivant initialise une structure de WDF_IO_TYPE_CONFIG, définit les préférences d’accès aux mémoires tampons du pilote sur les E/S directes, spécifie que les transferts inférieurs à 32 Ko doivent utiliser des E/S tampons et appellent WdfDeviceInitSetIoTypeEx.
WDF_IO_TYPE_CONFIG ioConfig;
WDF_IO_TYPE_CONFIG_INIT(&ioConfig);
ioConfig.ReadWriteIoType = WdfDeviceIoDirect;
ioConfig.DeviceControlIoType = WdfDeviceIoDirect;
ioConfig.DirectTransferThreshold = 32;
WdfDeviceInitSetIoTypeEx(DeviceInit, &ioConfig);
}
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
version minimale de KMDF | 1.13 |
version minimale de UMDF | 2.0 |
d’en-tête | wdfdevice.h (include Wdf.h) |
bibliothèque | Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF) |
IRQL | <= DISPATCH_LEVEL |