Partager via


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.
RemarqueWdfDeviceInitSetRemoveLockOptions n’est pas pris 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.

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)

Voir aussi

WDF_REMOVE_LOCK_OPTIONS

WDF_REMOVE_LOCK_OPTIONS_FLAGS

WDF_REMOVE_LOCK_OPTIONS_INIT