Partager via


Macro IoInitializeRemoveLock (wdm.h)

La routine IoInitializeRemoveLock initialise un verrou de suppression pour un objet d’appareil.

Syntaxe

void IoInitializeRemoveLock(
  [in]  Lock,
  [in]  Tag,
  [in]  Maxmin,
  [in]  HighWater
);

Paramètres

[in] Lock

Pointeur vers une structure de IO_REMOVE_LOCK fournie par l’appelant que cette routine initialise avec des informations sur le verrou, y compris un compteur et un événement de synchronisation. Un enregistreur de pilotes doit allouer cette structure dans le cadre de l’extension de périphérique de l’objet de périphérique.

[in] Tag

Spécifie une balise pour identifier le créateur du verrou. Les enregistreurs de pilotes utilisent généralement une chaîne de 4 caractères, spécifiée dans l’ordre inverse, comme les balises utilisées pour ExAllocatePoolWithTag.

Le système d’E/S utilise ce paramètre si le vérificateur de pilote est activé. L’appelant doit toujours fournir une valeur de balise différente de zéro pour ce paramètre.

[in] Maxmin

Spécifie le nombre maximal de minutes pendant lesquelles ce verrou doit être maintenu. La valeur zéro signifie qu’il n’y a pas de limite. Cette valeur est généralement utilisée pendant le débogage pour identifier une routine de pilote qui maintient le verrou plus longtemps que prévu.

Le système d’E/S utilise ce paramètre si le vérificateur de pilote est activé.

[in] HighWater

Spécifie le nombre maximal d’acquisitions en attente autorisées sur le verrou. Utilisez 0 pour spécifier aucun maximum. HighWatermark doit être <= 0x7FFFFFFF.

Le système d’E/S utilise ce paramètre si le vérificateur de pilote est activé.

Valeur de retour

None

Remarques

Un pilote peut utiliser un verrou de suppression pour suivre les opérations d’E/S en suspens sur un appareil et déterminer quand le pilote peut supprimer son objet de périphérique en réponse à une demande de IRP_MN_REMOVE_DEVICE .

Avant d’appeler IoInitializeRemoveLock, un pilote doit allouer une structure IO_REMOVE_LOCK dans son extension de périphérique. Un pilote appelle généralement IoInitializeRemoveLock dans sa routine AddDevice , quand le pilote initialise le reste de l’extension de périphérique pour un objet d’appareil.

Une fois la routine IoReleaseRemoveLockAndWait retournée, le pilote doit considérer l’appareil dans un état dans lequel il est prêt à être supprimé et ne peut pas effectuer d’opérations d’E/S. Par conséquent, le pilote ne doit pas appeler IoInitializeRemoveLock pour réinitialiser le verrou de suppression. La violation de cette règle pendant la vérification du pilote par le vérificateur de pilotes entraîne un bogue case activée.

Étant donné que le pilote stocke la structure IO_REMOVE_LOCK dans l’extension de périphérique d’un objet de périphérique, le verrou de suppression est supprimé lorsque le pilote supprime l’extension de périphérique dans le cadre du traitement d’une demande de IRP_MN_REMOVE_DEVICE .

Pour plus d’informations, consultez Utilisation de supprimer des verrous.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows 2000.
Plateforme cible Desktop (Expérience utilisateur)
En-tête wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Bibliothèque NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

Voir aussi

IoAcquireRemoveLock

IoInitializeRemoveLock

IoReleaseRemoveLock

IoReleaseRemoveLockAndWait