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 的兩個最小有效位 參數值設定為 1。 作系統會在內部使用這些位來區分 ExSetResourceOwnerPointerEx 所設定的擁有者指標, 呼叫已透過呼叫 ExAcquireResourceExclusiveLite 或 ExAcquireResourceSharedLite 例程來取得資源的線程。
呼叫 ExSetResourceOwnerPointerEx 以傳輸資源擁有權的線程必須是先前呼叫 ExAcquireResourceXxxLite 例程以取得資源的相同線程。
如果 resource-manager 線程取得資源進行獨佔存取(藉由呼叫 ExAcquireResourceExclusiveLite),ExSetResourceOwnerPointerEx 呼叫會將獨佔存取權轉移給資源使用者線程。 如果 resource-manager 線程取得共用存取的資源(藉由呼叫 ExAcquireResourceSharedLite),ExSetResourceOwnerPointerEx 呼叫會將共用存取權轉移給資源使用者線程。
當資源用戶線程不再需要資源時,應該釋放資源。 一般而言,資源用戶線程會釋放資源。 若要這樣做,它必須呼叫 ExReleaseResourceForThreadLite 例程。 在此呼叫中,ThreadId 參數值必須符合上一個 ExSetResourceOwnerPointerEx 轉移資源擁有權的 OwnerPointer 參數的值(包括兩個最小有效位)。
ExSetResourceOwnerPointerEx 呼叫會轉移資源的擁有權之後,驅動程式可以呼叫指定資源的唯一其他 ERESOURCE 例程 是 ExReleaseResourceForThreadLite。 嘗試呼叫另一個 ERESOURCE 例程,例如 ExReleaseResourceLite,此資源是錯誤的。
ExSetResourceOwnerPointerEx 可以在兩種截然不同的模式中運作。 模式是由 Flags 參數所指定。 若要選取這兩種模式的更多用途,請設定 Flags = FLAG_OWNER_POINTER_IS_THREAD。 這個 Flags 值會通知作系統,OwnerPointer 參數是 resource-manager 線程的線程物件的指標。 如有必要,作系統可以使用此資訊暫時提升此線程的優先順序,以避免優先順序反轉。 若要取得用於 OwnerPointer 值的線程對象指標,驅動程式可以呼叫 ExGetCurrentResourceThread 例程。 請記得將 OwnerPointer 值的兩個最小有效位設定為 1。
如果 旗標 為零,ExSetResourceOwnerPointerEx 的行為與舊版 ExSetResourceOwnerPointer 例程相同,這在 Windows 2000 和更新版本的 Windows作系統中提供。 也就是說,OwnerPointer 參數會指向資源管理員線程在系統記憶體中配置之記憶體物件,然後再 呼叫 exSetResourceOwnerPointerEx。 在此情況下,物件類型和值並不相關,因為 ExSetResourceOwnerPointerEx 不會嘗試存取物件本身。 相反地,例程只會使用 物件的記憶體位址來識別資源擁有者。 對象的記憶體必須從記憶體中的偶數四位元組界限開始。 為了避免兩個驅動程式不小心使用相同的擁有者指標同時使用,資源管理員線程在釋放資源之前,不得釋放對象的記憶體。
如需管理執行資源的詳細資訊,請參閱 ERESOURCE 例程簡介。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | 適用於 Windows 7 和更新版本的 Windows作系統。 |
目標平臺 | 普遍 |
標頭 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
連結庫 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |
DDI 合規性規則 | HwStorPortProhibitedDIs(storport) |
另請參閱
ExAcquireResourceExclusiveLite