Função ExSetResourceOwnerPointerEx (wdm.h)
A rotina ExSetResourceOwnerPointerEx transfere a propriedade de um recurso executivo do thread de chamada para um ponteiro do proprietário, que é um endereço do sistema que identifica o proprietário do recurso.
Sintaxe
void ExSetResourceOwnerPointerEx(
[in, out] PERESOURCE Resource,
[in] PVOID OwnerPointer,
[in] ULONG Flags
);
Parâmetros
[in, out] Resource
Um ponteiro para um recurso executivo (uma estrutura de ERESOURCE opaca) que pertence ao thread de chamada. O chamador alocou essa estrutura anteriormente e a inicializou chamando a rotina ExInitializeResourceLite. Para obter mais informações, consulte a seção Comentários a seguir.
[in] OwnerPointer
Um valor de ponteiro que identifica o proprietário do recurso. Esse valor de parâmetro é nominalmente um ponteiro para um valor do tipo ERESOURCE_THREAD mas é convertido para digitar PVOID. O chamador deve definir os dois bits menos significativos desse valor de ponteiro como um. Para obter mais informações, consulte a seção Comentários a seguir.
[in] Flags
Um conjunto de sinalizadores que pode modificar a operação dessa rotina. Defina esse parâmetro como zero ou com o seguinte valor de sinalizador:
- FLAG_OWNER_POINTER_IS_THREAD
Valor de retorno
Nenhum
Observações
Essa rotina está disponível no Windows 7 e versões posteriores do sistema operacional Windows.
ExSetResourceOwnerPointerEx permite que um thread, que atua como um gerenciador de recursos, transfira a propriedade de um recurso executivo, que o thread já adquiriu, para outro thread, que usa o recurso. O recurso executivo é representado por uma estrutura de ERESOURCE.
O chamador deve definir os dois bits menos significativos do ownerPointer valor de parâmetro como um. O sistema operacional usa esses bits internamente para distinguir um ponteiro de proprietário que foi definido por uma chamada ExSetResourceOwnerPointerEx de um thread que adquiriu um recurso chamando a rotina ExAcquireResourceExclusiveLite ou ExAcquireResourceSharedLite rotina.
O thread que chama ExSetResourceOwnerPointerEx para transferir a propriedade de um recurso deve ser o mesmo thread que anteriormente chamou o ExAcquireResourceXxxLite rotina para adquirir o recurso.
Se o thread do gerenciador de recursos adquiriu o recurso para acesso exclusivo (chamando ExAcquireResourceExclusiveLite), a chamada ExSetResourceOwnerPointerEx transferirá a propriedade de acesso exclusivo para o thread do usuário do recurso. Se o thread do gerenciador de recursos adquiriu o recurso de acesso compartilhado (chamando ExAcquireResourceSharedLite), o ExSetResourceOwnerPointerEx chamada transferirá a propriedade de acesso compartilhado para o thread do usuário do recurso.
Quando o thread do usuário de recurso não precisar mais do recurso, o recurso deverá ser liberado. Normalmente, o thread do usuário do recurso libera o recurso. Para fazer isso, ele deve chamar a rotina ExReleaseResourceForThreadLite. Nesta chamada, o valor do parâmetro ThreadId deve corresponder ao valor do parâmetro OwnerPointer (incluindo os dois bits menos significativos) na chamada ExSetResourceOwnerPointerEx anterior que transferiu a propriedade do recurso.
Depois que uma chamada ExSetResourceOwnerPointerEx transferir a propriedade de um recurso, a única outra rotina ERESOURCE que um driver pode chamar para o recurso especificado é ExReleaseResourceForThreadLite. Uma tentativa de chamar outro rotina de ERESOURCE, como ExReleaseResourceLite, pois esse recurso é um erro.
ExSetResourceOwnerPointerEx pode operar em dois modos significativamente diferentes. O modo é especificado pelo parâmetro sinalizadores. Para selecionar o mais versátil dos dois modos, defina Flags = FLAG_OWNER_POINTER_IS_THREAD. Esse valor Flags informa ao sistema operacional que o parâmetro OwnerPointer é um ponteiro para o objeto thread do thread do gerenciador de recursos. O sistema operacional pode, se necessário, usar essas informações para aumentar temporariamente a prioridade desse thread para evitar a inversão de prioridade. Para obter o ponteiro do objeto thread a ser usado para o valor OwnerPointer, um driver pode chamar a rotina ExGetCurrentResourceThread. Lembre-se de definir os dois bits menos significativos do valor de do OwnerPointer como um.
Se Flags for zero, o comportamento de ExSetResourceOwnerPointerEx é o mesmo da rotina de exSetResourceOwnerPointer herdada, que está disponível no Windows 2000 e versões posteriores do sistema operacional Windows. Ou seja, o parâmetro OwnerPointer aponta para um objeto de armazenamento que o thread do gerenciador de recursos aloca na memória do sistema antes de chamar ExSetResourceOwnerPointerEx. Nesse caso, o tipo de objeto e o valor não são relevantes porque ExSetResourceOwnerPointerEx não tenta acessar o objeto em si. Em vez disso, a rotina simplesmente usa o endereço de memória do objeto para identificar o proprietário do recurso. O armazenamento do objeto deve começar em um limite par de quatro bytes na memória. Para impedir que dois drivers usem inadvertidamente o mesmo ponteiro de proprietário ao mesmo tempo, o thread do gerenciador de recursos não deve liberar o armazenamento do objeto até que o recurso seja liberado.
Para obter mais informações sobre como gerenciar recursos executivos, consulte Introdução às rotinas ERESOURCE.
Requisitos
Consulte também
ExAcquireResourceExclusiveLite