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 |