Compartir a través de


Función ExSetResourceOwnerPointerEx (wdm.h)

La rutina ExSetResourceOwnerPointerEx transfiere la propiedad de un recurso ejecutivo del subproceso que realiza la llamada a un puntero propietario, que es una dirección del sistema que identifica al propietario del recurso.

Sintaxis

void ExSetResourceOwnerPointerEx(
  [in, out] PERESOURCE Resource,
  [in]      PVOID      OwnerPointer,
  [in]      ULONG      Flags
);

Parámetros

[in, out] Resource

Puntero a un recurso ejecutivo (una estructura ERESOURCE opaca) que pertenece al subproceso que realiza la llamada. El autor de la llamada asignó previamente esta estructura e lo inicializó llamando a la rutina ExInitializeResourceLite . Para obtener más información, vea la sección Comentarios que se muestra más adelante.

[in] OwnerPointer

Valor de puntero que identifica al propietario del recurso. Este valor de parámetro es nominalmente un puntero a un valor de tipo ERESOURCE_THREAD pero se convierte al tipo PVOID. El autor de la llamada debe establecer los dos bits menos significativos de este valor de puntero en uno. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

[in] Flags

Conjunto de marcas que pueden modificar el funcionamiento de esta rutina. Establezca este parámetro en cero o en el siguiente valor de marca:

  • FLAG_OWNER_POINTER_IS_THREAD
Si Flags = FLAG_OWNER_POINTER_IS_THREAD, OwnerPointer debe apuntar a un valor de tipo ERESOURCE_THREAD, que es un puntero a un objeto de subproceso opaco. Si Flags = 0, OwnerPointer debe apuntar a un objeto de almacenamiento en la memoria del sistema que permanece asignado hasta que se libere el recurso. Para obtener más información, vea la sección Comentarios que se muestra más adelante.

Valor devuelto

None

Observaciones

Esta rutina está disponible en Windows 7 y versiones posteriores del sistema operativo Windows.

ExSetResourceOwnerPointerEx permite que un subproceso, que actúa como administrador de recursos, transfiera la propiedad de un recurso ejecutivo, que el subproceso ya ha adquirido, a otro subproceso, que luego usa el recurso. El recurso ejecutivo se representa mediante una estructura ERESOURCE .

El autor de la llamada debe establecer los dos bits menos significativos del valor del parámetro OwnerPointer en uno. El sistema operativo usa estos bits internamente para distinguir un puntero de propietario establecido por una llamada ExSetResourceOwnerPointerEx de un subproceso que ha adquirido un recurso mediante una llamada a la rutina ExAcquireResourceExclusiveLite o ExAcquireResourceSharedLite .

El subproceso que llama a ExSetResourceOwnerPointerEx para transferir la propiedad de un recurso debe ser el mismo subproceso que anteriormente llamó a la rutina ExAcquireResourceXxxLite para adquirir el recurso.

Si el subproceso de Resource-Manager adquirió el recurso para el acceso exclusivo (mediante una llamada a ExAcquireResourceExclusiveLite), la llamada ExSetResourceOwnerPointerEx transfiere la propiedad de acceso exclusivo al subproceso resource-user. Si el subproceso de Resource-Manager adquirió el recurso para el acceso compartido (llamando a ExAcquireResourceSharedLite), la llamada ExSetResourceOwnerPointerEx transfiere la propiedad de acceso compartido al subproceso de usuario de recursos.

Cuando el subproceso de usuario de recursos ya no necesita el recurso, se debe liberar el recurso. Normalmente, el subproceso de usuario de recursos libera el recurso. Para ello, debe llamar a la rutina ExReleaseResourceForThreadLite . En esta llamada, el valor del parámetro ThreadId debe coincidir con el valor del parámetro OwnerPointer (incluidos los dos bits menos significativos) de la llamada anterior a ExSetResourceOwnerPointerEx que transfirió la propiedad del recurso.

Después de una llamada ExSetResourceOwnerPointerEx transfiere la propiedad de un recurso, la única rutina ERESOURCE a la que un controlador puede llamar para el recurso especificado es ExReleaseResourceForThreadLite. Un intento de llamar a otra rutina ERESOURCE , como ExReleaseResourceLite, para este recurso es un error.

ExSetResourceOwnerPointerEx puede funcionar en dos modos significativamente diferentes. El modo se especifica mediante el parámetro Flags . Para seleccionar el más versátil de los dos modos, establezca Flags = FLAG_OWNER_POINTER_IS_THREAD. Este valor flags informa al sistema operativo de que el parámetro OwnerPointer es un puntero al objeto de subproceso del subproceso del administrador de recursos. El sistema operativo puede, si es necesario, usar esta información para aumentar temporalmente la prioridad de este subproceso para evitar la inversión de prioridad. Para obtener el puntero del objeto de subproceso que se va a usar para el valor OwnerPointer , un controlador puede llamar a la rutina ExGetCurrentResourceThread . Recuerde establecer los dos bits menos significativos del valor OwnerPointer en uno.

Si Flags es cero, el comportamiento de ExSetResourceOwnerPointerEx es el mismo que el de la rutina ExSetResourceOwnerPointer heredada, que está disponible en Windows 2000 y versiones posteriores del sistema operativo Windows. Es decir, el parámetro OwnerPointer apunta a un objeto de almacenamiento que el subproceso del administrador de recursos asigna en la memoria del sistema antes de llamar a ExSetResourceOwnerPointerEx. En este caso, el tipo de objeto y el valor no son relevantes porque ExSetResourceOwnerPointerEx no intenta tener acceso al propio objeto. En su lugar, la rutina simplemente usa la dirección de memoria del objeto para identificar al propietario del recurso. El almacenamiento del objeto debe comenzar en un límite par de cuatro bytes en la memoria. Para evitar que dos controladores usen accidentalmente el mismo puntero de propietario al mismo tiempo, el subproceso de Resource-Manager no debe liberar el almacenamiento del objeto hasta que se libere el recurso.

Para obtener más información sobre la administración de recursos ejecutivos, consulte Introducción a las rutinas de ERESOURCE.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows 7 y versiones posteriores del sistema operativo Windows.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport)

Consulte también

ERESOURCE

ExAcquireResourceExclusiveLite

ExAcquireResourceSharedLite

ExGetCurrentResourceThread

ExInitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

ExSetResourceOwnerPointer