Partager via


Fonction IoEnumerateDeviceObjectList (ntifs.h)

La routine IoEnumerateDeviceObjectList énumère la liste des objets d’appareil 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 driver pour le pilote.

[out] DeviceObjectList

Pointeur vers un tableau alloué par l’appelant qui reçoit les pointeurs d’objet d’appareil. Ce tableau doit être alloué à partir d’un pool sans page. Ce paramètre peut être NULL. Consultez la section Notes.

[in] DeviceObjectListSize

Taille, en octets, du tableau DeviceObjectList . Ce paramètre peut être égal à zéro. Consultez la section Notes.

[out] ActualNumberDeviceObjects

Nombre réel d’objets d’appareil trouvés dans la liste des objets de périphérique de l’objet pilote. Notez que si le tableau dans DeviceObjectList est trop petit, le nombre de pointeurs d’objets d’appareil copiés dans le tableau est inférieur à ActualNumberDeviceObjects.

Valeur retournée

IoEnumerateDeviceObjectList retourne un code NTSTATUS tel que l’une des valeurs suivantes :

Code de retour Description
STATUS_SUCCESS L’appel à IoEnumerateDeviceObjectList s’est terminé avec succès.
STATUS_BUFFER_TOO_SMALL Le tableau dans DeviceObjectList est trop petit pour contenir l’intégralité de la liste des objets de l’appareil. Dans ce cas, IoEnumerateDeviceObjectList copie autant de pointeurs d’objets d’appareil que possible dans le tableau.

Remarques

Un pilote de filtre de système de fichiers appelle IoEnumerateDeviceObjectList pour énumérer :

  • Objets d’appareil qu’il a créés. Cette opération est généralement effectuée 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.

  • Objets d’appareil créés par le système de fichiers de base, afin que le filtre connaisse 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 (CDO) ainsi que les objets de périphérique de volume (VDO). Les deux types d’objets d’appareil peuvent être distingués par le fait que, par convention, les CDO sont nommés et les VDO 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 des objets de périphérique 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 dans la liste pointée par DeviceObjectList. Ainsi, chaque appel réussi à IoEnumerateDeviceObjectList doit être mis en correspondance par un appel suivant à ObDereferenceObject pour chaque objet d’appareil dans la liste. Si vous ne le faites pas, le système ne peut pas libérer ou supprimer ces objets d’appareil en raison d’un nombre de références en attente.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Correctif cumulatif windows 2000 SP4 ; Windows XP
Plateforme cible Universal
En-tête ntifs.h (include Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL

Voir aussi

ExAllocatePool2

ExAllocatePool3

IoGetAttachedDevice

IoGetAttachedDeviceReference

IoGetLowerDeviceObject

ObDereferenceObject

ZwUnloadDriver