WdfDeviceInitSetRemoveLockOptions, fonction (wdfdevice.h)
[S’applique uniquement à KMDF]
La méthode WdfDeviceInitSetRemoveLockOptions entraîne l’acquisition d’un verrou de suppression avant de remettre un IRP de tout type au pilote.
Syntaxe
void WdfDeviceInitSetRemoveLockOptions(
[in] PWDFDEVICE_INIT DeviceInit,
[in] PWDF_REMOVE_LOCK_OPTIONS Options
);
Paramètres
[in] DeviceInit
Pointeur fourni par l’appelant vers une structure WDFDEVICE_INIT.
[in] Options
Pointeur vers une structure WDF_REMOVE_LOCK_OPTIONS.
Valeur de retour
Aucun
Remarques
Par défaut, l’infrastructure acquiert un verrou de suppression avant qu’il ne livre les irPs des principaux types suivants au pilote :
- IRP_MJ_PNP
- IRP_MJ_POWER
- IRP_MJ_SYSTEM_CONTROL
Une fois l’IRP terminé, l’infrastructure libère le verrou de suppression.
À compter de KMDF 1.11, le pilote peut éventuellement appeler WdfDeviceInitSetRemoveLockOptions provoquer l’acquisition d’un verrou de suppression avant de fournir tous les types IRP, pas seulement ceux répertoriés ci-dessus.
Si votre pilote a des clients en mode noyau qui envoient des E/S non synchronisés avec l’état PnP de votre appareil, vous pouvez rencontrer des blocages en raison d’E/S IRPs arrivant une fois l’objet d’appareil framework supprimé. Dans ce cas, vous pouvez appeler WdfDeviceInitSetRemoveLockOptions. Ensuite, lorsqu’un client envoie une demande d’E/S à votre appareil :
- Si l’appareil n’a pas encore été supprimé, le verrou de suppression est acquis correctement et la demande est remise. Si la suppression se produit ultérieurement, l’infrastructure appelle IoReleaseRemoveLockAndWait qui bloque jusqu’à ce que toutes les acquisitions de verrou réussies soient publiées (les demandes d’E/S sont terminées).
- Si l’appareil a déjà traité IRP_MN_REMOVE_DEVICE, mais qu’il existe une référence exceptionnelle à un objet d’appareil WDM empêchant la libération de l’appareil, le verrou de suppression n’est pas acquis et l’infrastructure termine immédiatement la demande.
Une fois qu’un pilote appelle WdfDeviceInitSetRemoveLockOptions, le paramètre reste en vigueur pour la durée de vie de l’objet d’appareil framework.
Pour plus d’informations sur la suppression des verrous, consultez Using Remove Locks.
Exemples
Cet exemple de code initialise une structure WDF_REMOVE_LOCK_OPTIONS et appelle WdfDeviceInitSetRemoveLockOptions.
WDF_REMOVE_LOCK_OPTIONS RemoveLockOptions;
WDF_REMOVE_LOCK_OPTIONS_INIT(
&RemoveLockOptions,
WDF_REMOVE_LOCK_OPTION_ACQUIRE_FOR_IO
);
WdfDeviceInitSetRemoveLockOptions(
DeviceInit,
&RemoveLockOptions
);
Exigences
Exigence | Valeur |
---|---|
plateforme cible | Universel |
version minimale de KMDF | 1.11 |
d’en-tête | wdfdevice.h (include Wdf.h) |
bibliothèque | Wdf01000.sys (voir Versioning de la bibliothèque Framework.) |
IRQL | <= DISPATCH_LEVEL |
règles de conformité DDI | DriverCreate(kmdf) |