Partager via


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.
RemarqueWdfDeviceInitSetRemoveLockOptions n’est pas prise en charge sur les objets de contrôle.
 
En règle générale, un pilote appelle WdfDeviceInitSetRemoveLockOptions à partir de sa fonction de rappel EvtDriverDeviceAdd, juste avant d’appeler WdfDeviceCreate.

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)

Voir aussi

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT