ExSetResourceOwnerPointerEx, fonction (wdm.h)
L'ExSetResourceOwnerPointerEx routine transfère la propriété d’une ressource exécutive du thread appelant à un pointeur propriétaire, qui est une adresse système qui identifie le propriétaire de la ressource.
Syntaxe
void ExSetResourceOwnerPointerEx(
[in, out] PERESOURCE Resource,
[in] PVOID OwnerPointer,
[in] ULONG Flags
);
Paramètres
[in, out] Resource
Pointeur vers une ressource executive (une structure ERESOURCE opaque opaque) appartenant au thread appelant. L’appelant a précédemment alloué cette structure et l’a initialisée en appelant la routine ExInitializeResourceLite. Pour plus d’informations, consultez la section Remarques suivante.
[in] OwnerPointer
Valeur de pointeur qui identifie le propriétaire de la ressource. Cette valeur de paramètre est nominalement un pointeur vers une valeur de type ERESOURCE_THREAD, mais est castée en type PVOID. L’appelant doit définir les deux bits les moins significatifs de cette valeur de pointeur sur ceux-ci. Pour plus d’informations, consultez la section Remarques suivante.
[in] Flags
Ensemble d’indicateurs qui peuvent modifier l’opération de cette routine. Définissez ce paramètre sur zéro ou sur la valeur d’indicateur suivante :
- FLAG_OWNER_POINTER_IS_THREAD
Valeur de retour
Aucun
Remarques
Cette routine est disponible dans Windows 7 et versions ultérieures du système d’exploitation Windows.
ExSetResourceOwnerPointerPointerEx permet à un thread, qui agit en tant que gestionnaire de ressources, de transférer la propriété d’une ressource exécutive, que le thread a déjà acquis, vers un autre thread, qui utilise ensuite la ressource. La ressource executive est représentée par une structure ERESOURCE.
L’appelant doit définir les deux bits les moins significatifs de l'OwnerPointer valeur de paramètre sur une valeur. Le système d’exploitation utilise ces bits en interne pour distinguer un pointeur propriétaire qui a été défini par un ExSetResourceOwnerPointerEx appel d’un thread qui a acquis une ressource en appelant la routine ExAcquireResourceExclusiveLite ou ExAcquireResourceSharedLite routine.
Le thread qui appelle ExSetResourceOwnerPointerPointerEx pour transférer la propriété d’une ressource doit être le même thread que celui précédemment appelé ExAcquireResourceXxxLite routine pour acquérir la ressource.
Si le thread resource-manager a acquis la ressource pour un accès exclusif (en appelant ExAcquireResourceExclusiveLite), l’appel ExSetResourceOwnerPointerPointerEx transfère la propriété d’accès exclusif au thread de l’utilisateur de la ressource. Si le thread resource-manager a acquis la ressource pour l’accès partagé (en appelant ExAcquireResourceSharedLite), l’appel ExSetResourceOwnerPointerEx transfère la propriété d’accès partagé au thread de l’utilisateur de la ressource.
Lorsque le thread de l’utilisateur de ressource n’a plus besoin de la ressource, la ressource doit être libérée. En règle générale, le thread d’utilisateur de ressource libère la ressource. Pour ce faire, il doit appeler la routine ExReleaseResourceForThreadLite. Dans cet appel, la valeur du paramètre ThreadId doit correspondre à la valeur du paramètre OwnerPointer (y compris les deux bits les moins significatifs) dans l’appel précédent ExSetResourceOwnerPointerPointerEx qui a transféré la propriété de la ressource.
Après un ExSetResourceOwnerPointerEx l’appel transfère la propriété d’une ressource, la seule autre routine ERESOURCE qu’un pilote peut appeler pour la ressource spécifiée est ExReleaseResourceForThreadLite. Une tentative d’appel d’une autre routine ERESOURCE, telle que ExReleaseResourceLite, pour cette ressource est une erreur.
ExSetResourceOwnerPointerPointerEx peut fonctionner en deux modes considérablement différents. Le mode est spécifié par le paramètre indicateurs. Pour sélectionner le plus polyvalent des deux modes, définissez indicateurs = FLAG_OWNER_POINTER_IS_THREAD. Cette Indicateurs valeur informe le système d’exploitation que le paramètre OwnerPointer est un pointeur vers l’objet thread du thread resource-manager. Le système d’exploitation peut, si nécessaire, utiliser ces informations pour augmenter temporairement la priorité de ce thread afin d’éviter l’inversion de priorité. Pour obtenir le pointeur d’objet de thread à utiliser pour la valeur OwnerPointer, un pilote peut appeler la routine ExGetCurrentResourceThread. N’oubliez pas de définir les deux bits les moins significatifs de l'OwnerPointer valeur sur une valeur.
Si Flags est égal à zéro, le comportement de ExSetResourceOwnerPointerPointerEx est identique à celui de la routine ExSetResourceOwnerPointer, disponible dans Windows 2000 et versions ultérieures du système d’exploitation Windows. Autrement dit, le paramètre OwnerPointer pointe vers un objet de stockage que le thread resource-manager alloue dans la mémoire système avant d’appeler ExSetResourceOwnerPointerEx. Dans ce cas, le type d’objet et la valeur ne sont pas pertinents, car ExSetResourceOwnerPointerEx ne tente pas d’accéder à l’objet lui-même. Au lieu de cela, la routine utilise simplement l’adresse mémoire de l’objet pour identifier le propriétaire de la ressource. Le stockage de l’objet doit commencer à une limite de quatre octets en mémoire. Pour empêcher deux pilotes d’utiliser par inadvertance le même pointeur propriétaire en même temps, le thread resource-manager ne doit pas libérer le stockage de l’objet tant que la ressource n’est pas libérée.
Pour plus d’informations sur la gestion des ressources de direction, consultez Présentation des routines ERESOURCE.
Exigences
Voir aussi
ExAcquireResourceExclusiveLite