WdfDeviceInitSetRemoveLockOptions, fonction (wdfdevice.h)
[S’applique à KMDF uniquement]
La méthode WdfDeviceInitSetRemoveLockOptions permet au framework d’acquérir 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
None
Remarques
Par défaut, l’infrastructure acquiert un verrou de suppression avant de remettre des irps des types principaux 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 pour que l’infrastructure acquiert un verrou de suppression avant de remettre 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ées avec l’état PnP de votre appareil, vous pouvez rencontrer des blocages dus à l’arrivée des IRP d’E/S après la suppression de l’objet de périphérique d’infrastructure. 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 avec succès et la demande est remise. Si la suppression se produit ultérieurement, le framework appelle IoReleaseRemoveLockAndWait qui se bloque jusqu’à ce que toutes les acquisitions de verrou réussies soient libéré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 en suspens à un objet d’appareil WDM empêchant la libération de l’appareil, le verrouillage de suppression n’est pas acquis et l’infrastructure termine la demande immédiatement.
Après qu’un pilote a appelé WdfDeviceInitSetRemoveLockOptions, le paramètre reste en vigueur pendant la durée de vie de l’objet de périphérique d’infrastructure.
Pour plus d’informations sur la suppression des verrous, consultez Utilisation de supprimer des verrous.
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
);
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
Version KMDF minimale | 1.11 |
En-tête | wdfdevice.h (inclure Wdf.h) |
Bibliothèque | Wdf01000.sys (consultez Gestion des versions de la bibliothèque d’infrastructure).) |
IRQL | <= DISPATCH_LEVEL |
Règles de conformité DDI | DriverCreate(kmdf) |