ExSetResourceOwnerPointerEx 函式 (wdm.h)
ExSetResourceOwnerPointerEx 例程會將主管資源的擁有權從呼叫線程傳輸到擁有者指標,這是識別資源擁有者的系統位址。
語法
void ExSetResourceOwnerPointerEx(
[in, out] PERESOURCE Resource,
[in] PVOID OwnerPointer,
[in] ULONG Flags
);
參數
[in, out] Resource
執行資源的指標 (呼叫線程所擁有的不透明 ERESOURCE 結構) 。 呼叫端先前已配置此結構,並藉由呼叫 ExInitializeResourceLite 例程加以初始化。 如需詳細資訊,請參閱接下來的<備註>一節。
[in] OwnerPointer
識別資源擁有者的指標值。 此參數值是類型為 ERESOURCE_THREAD 但轉換成 PVOID 類型的指標。 呼叫端必須將這個指標值的兩個最小有效位設定為一個。 如需詳細資訊,請參閱接下來的<備註>一節。
[in] Flags
一組旗標,可修改此例程的作業。 將此參數設定為零或下列旗標值:
- FLAG_OWNER_POINTER_IS_THREAD
傳回值
無
備註
此例程適用於 Windows 7 和更新版本的 Windows 作業系統。
ExSetResourceOwnerPointerEx 可讓作為資源管理員的線程,將線程已取得的執行資源擁有權轉移至另一個線程,然後使用資源。 執行資源是以 ERESOURCE 結構表示。
呼叫端必須將 OwnerPointer 參數值的兩個最小有效位設定為一個。 操作系統會在內部使用這些位來區分 ExSetResourceOwnerPointerEx 呼叫所設定的擁有者指標,與透過呼叫 ExAcquireResourceExclusiveLite 或 ExAcquireResourceSharedLite 例程取得資源的線程。
呼叫 ExSetResourceOwnerPointerEx 以傳輸資源擁有權的線程,必須與先前呼叫 ExAcquireResourceXxxLite 例程才能取得資源的相同線程。
如果 resource-manager 線程藉由呼叫 ExAcquireResourceExclusiveLite) 取得獨佔存取權的資源 (, 則 ExSetResourceOwnerPointerEx 呼叫會將獨佔存取權轉移給資源使用者線程。 如果 resource-manager 線程藉由呼叫 ExAcquireResourceSharedLite () 取得共用存取的資源, 則 ExSetResourceOwnerPointerEx 呼叫會將共用存取權轉移給資源用戶線程。
當資源用戶線程不再需要資源時,應該釋放資源。 一般而言,資源用戶線程會釋放資源。 若要這樣做,它必須呼叫 ExReleaseResourceForThreadLite 例程。 在此呼叫中, ThreadId 參數值必須符合 OwnerPointer 參數的值, (包括先前 ExSetResourceOwnerPointerEx 呼叫中傳輸資源擁有權的兩個最小有效位) 。
在 ExSetResourceOwnerPointerEx 呼叫轉移資源的擁有權之後,驅動程式可以呼叫指定資源的唯一 ERESOURCE 例程是 ExReleaseResourceForThreadLite。 嘗試呼叫另一個 ERESOURCE 例程,例如 ExReleaseResourceLite,此資源是錯誤。
ExSetResourceOwnerPointerEx 可以在兩種不同的模式中運作。 模式是由 Flags 參數所指定。 若要選取兩種模式更具彈性,請設定 Flags = FLAG_OWNER_POINTER_IS_THREAD。 這個 Flags 值會通知操作系統 OwnerPointer 參數是 resource-manager 線程線程之線程物件的指標。 如有必要,操作系統可以使用這項資訊暫時提升此線程的優先順序,以避免優先順序反轉。 若要取得 用於 OwnerPointer 值的線程對象指標,驅動程式可以呼叫 ExGetCurrentResourceThread 例程。 請記得將 OwnerPointer 值的兩個最小有效位設定為一個。
如果 Flags 為零, 則 ExSetResourceOwnerPointerEx 的行為與舊版 ExSetResourceOwnerPointer 例程的行為相同,可在 Windows 2000 和更新版本的 Windows 操作系統中使用。 也就是說, OwnerPointer 參數會指向資源管理員線程在呼叫 ExSetResourceOwnerPointerEx 之前配置於系統記憶體中的記憶體中的記憶體物件。 在此情況下,物件類型和值並不相關,因為 ExSetResourceOwnerPointerEx 不會嘗試存取物件本身。 相反地,例程只會使用物件的記憶體位址來識別資源擁有者。 對象的記憶體必須從記憶體中的偶數四位元組界限開始。 為了避免兩個驅動程式同時使用相同的擁有者指標,資源管理員線程在釋放資源之前,不得釋放對象的記憶體。
如需管理執行資源的詳細資訊,請參閱 ERESOURCE 例程簡介。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 和更新版本的 Windows 作業系統。 |
目標平台 | Universal |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
程式庫 | NtosKrnl.lib |
Dll | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIS (storport) |
另請參閱
ExAcquireResourceExclusiveLite