Fonction IoEnumerateDeviceObjectList (ntifs.h)
La routine IoEnumerateDeviceObjectList énumère la liste des objets de périphérique d’un pilote.
Syntaxe
NTSTATUS IoEnumerateDeviceObjectList(
[in] PDRIVER_OBJECT DriverObject,
[out] PDEVICE_OBJECT *DeviceObjectList,
[in] ULONG DeviceObjectListSize,
[out] PULONG ActualNumberDeviceObjects
);
Paramètres
[in] DriverObject
Pointeur vers l’objet pilote pour le pilote.
[out] DeviceObjectList
Pointeur vers un tableau alloué par l’appelant qui reçoit les pointeurs d’objet de l’appareil. Ce tableau doit être alloué à partir d’un pool non paginé. Ce paramètre peut être NULL. Voir les remarques.
[in] DeviceObjectListSize
Taille, en octets, du tableau DeviceObjectList. Ce paramètre peut être égal à zéro. Voir les remarques.
[out] ActualNumberDeviceObjects
Nombre réel d’objets d’appareil trouvés dans la liste des objets d’appareil de l’objet de pilote. Notez que si le tableau à DeviceObjectList est trop petit, le nombre de pointeurs d’objet d’appareil copiés dans le tableau est inférieur à ActualNumberDeviceObjects.
Valeur de retour
IoEnumerateDeviceObjectList retourne un code NTSTATUS tel que l’une des valeurs suivantes :
Retourner le code | Description |
---|---|
STATUS_SUCCESS | L’appel à IoEnumerateDeviceObjectList terminé avec succès. |
STATUS_BUFFER_TOO_SMALL | Le tableau à DeviceObjectList est trop petit pour contenir toute la liste des objets de l’appareil. Dans ce cas, IoEnumerateDeviceObjectList copie autant de pointeurs d’objet d’appareil dans le tableau que possible. |
Remarques
Un pilote de filtre de système de fichiers appelle IoEnumerateDeviceObjectList pour énumérer :
Objets d’appareil qu’il a créés. Cela est généralement effectué lorsque le pilote se prépare à décharger. Notez qu’un pilote de filtre ne peut pas être déchargé en toute sécurité à partir d’un système en cours d’exécution. Pour plus d’informations, consultez ZwUnloadDriver.
Les objets d’appareil créés par le système de fichiers de base, le filtre connaît donc le nombre de volumes auxquels il peut s’attacher.
IoEnumerateDeviceObjectList retourne tous les objets d’appareil créés par le pilote de filtre. Cela inclut les objets d’appareil de contrôle (CDOs) ainsi que les objets d’appareil en volume (VDO). Les deux types d’objets d’appareil peuvent être distingués par le fait que, par convention, les cdOs sont nommés et les objets virtuels ne le sont pas.
Dans ce dernier cas, le pilote de filtre appelle généralement IoEnumerateDeviceObjectList deux fois : une fois pour obtenir le nombre d’objets d’appareil dans la liste, et une fois pour obtenir la liste d’objets d’appareil elle-même. Dans le premier appel, l’appelant doit définir le paramètre DeviceObjectList sur NULL et DeviceObjectListSize sur zéro. Dans le deuxième appel, DeviceObjectList doit contenir un pointeur vers un tableau de pointeurs de taille appropriée, et DeviceObjectListSize doit contenir la taille, en octets, de ce tableau.
IoEnumerateDeviceObjectList incrémente le nombre de références sur chaque objet d’appareil de la liste pointée par DeviceObjectList. Ainsi, chaque appel réussi à IoEnumerateDeviceObjectList doit être mis en correspondance par un appel ultérieur à ObDereferenceObject pour chaque objet d’appareil de la liste. L’échec de cette opération empêche le système de libérer ou de supprimer ces objets d’appareil en raison d’un nombre de références en attente.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Correctif cumulatif windows 2000 SP4 ; Windows XP |
plateforme cible | Universel |
d’en-tête | ntifs.h (include Ntifs.h) |
bibliothèque | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |