Fonction IoAttachDevice (wdm.h)
La routine IoAttachDevice attache l’objet d’appareil de l’appelant à un objet d’appareil cible nommé, afin que les demandes d’E/S liées à l’appareil cible soient routées en premier vers l’appelant.
Syntaxe
NTSTATUS IoAttachDevice(
[in] PDEVICE_OBJECT SourceDevice,
[in] PUNICODE_STRING TargetDevice,
[out] PDEVICE_OBJECT *AttachedDevice
);
Paramètres
[in] SourceDevice
Pointeur vers l’objet d’appareil créé par l’appelant.
[in] TargetDevice
Pointeur vers une mémoire tampon contenant le nom de l’objet d’appareil auquel l’objet SourceDevice spécifié doit être attaché.
[out] AttachedDevice
Pointeur vers le stockage alloué à l’appelant pour un pointeur. Au retour, contient un pointeur vers l’objet d’appareil cible si la pièce jointe réussit.
Valeur retournée
IoAttachDevice peut retourner l’une des valeurs NTSTATUS suivantes :
Remarques
IoAttachDevice établit une superposition entre les pilotes afin que les mêmes IRP puissent être envoyés à chaque pilote de la chaîne.
Cette routine est utilisée par les pilotes intermédiaires pendant l’initialisation. Il permet à un tel pilote d’attacher son propre objet d’appareil à un autre appareil de telle sorte que toutes les demandes adressées à l’appareil d’origine soient d’abord envoyées au pilote intermédiaire.
L’appelant peut être superposé uniquement en haut d’une chaîne existante de pilotes en couches. IoAttachDevice recherche l’objet d’appareil le plus élevé superposé sur TargetDevice et s’attache à cet objet (qui peut être l’objet TargetDevice). Par conséquent, cette routine ne doit pas être appelée si un pilote qui doit être de niveau supérieur s’est déjà superposé sur l’appareil cible.
Notez que pour les pilotes de système de fichiers et les pilotes dans la pile de stockage, IoAttachDevice ouvre l’appareil cible avec FILE_READ_ATTRIBUTES, puis appelle IoGetRelatedDeviceObject. Cela n’entraîne pas le montage d’un système de fichiers. Ainsi, un appel réussi à IoAttachDevice retourne l’objet de périphérique du pilote de stockage, et non celui du pilote de système de fichiers.
Cette routine définit l’AlignmentRequirement dans SourceDevice sur la valeur de l’objet d’appareil suivant-inférieur et définit StackSize sur la valeur de l’objet inférieur suivant plus un.
Avertissement
AttachedDevice doit pointer vers un emplacement de mémoire globale, tel que l’extension de périphérique du pilote. IoAttachDevice ouvre l’objet file pour l’appareil cible, met à jour AttachedDevice, effectue l’attachement, puis ferme l’objet file. Ainsi, l’appareil source reçoit les requêtes IRP_MJ_CLEANUP et IRP_MJ_CLOSE pour l’objet file avant que IoAttachDevice ne retourne. Le pilote doit transférer ces demandes à l’appareil cible, et AttachedDevice doit être un emplacement mémoire accessible aux routines DispatchCleanup et DispatchClose du pilote.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
En-tête | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Règles de conformité DDI | HwStorPortProhibitedDDIs(storport), IrqlIoPassive1(wdm) |