Partager via


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)

Voir aussi

DEVICE_OBJECT

IoAttachDeviceToDeviceStack

IoAttachDeviceToDeviceStackSafe

IoCreateDevice

IoDetachDevice

IoGetRelatedDeviceObject