Fungsi ExSetResourceOwnerPointerEx (wdm.h)

Rutinitas ExSetResourceOwnerPointerEx mentransfer kepemilikan sumber daya eksekutif dari utas panggilan ke penunjuk pemilik, yang merupakan alamat sistem yang mengidentifikasi pemilik sumber daya.

Sintaks

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

Parameter

[in, out] Resource

Pointer ke sumber daya eksekutif (struktur ERESOURCE buram) yang dimiliki oleh utas panggilan. Pemanggil sebelumnya mengalokasikan struktur ini dan menginisialisasinya dengan memanggil rutinitas ExInitializeResourceLite . Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

[in] OwnerPointer

Nilai pointer yang mengidentifikasi pemilik sumber daya. Nilai parameter ini secara nominal merupakan penunjuk ke nilai jenis ERESOURCE_THREAD tetapi dilemparkan untuk mengetik PVOID. Pemanggil harus mengatur dua bit paling tidak signifikan dari nilai pointer ini ke bit. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

[in] Flags

Sekumpulan bendera yang dapat memodifikasi operasi rutinitas ini. Atur parameter ini ke nol atau ke nilai bendera berikut:

  • FLAG_OWNER_POINTER_IS_THREAD
Jika Bendera = FLAG_OWNER_POINTER_IS_THREAD, OwnerPointer harus menunjuk ke nilai jenis ERESOURCE_THREAD, yang merupakan penunjuk ke objek utas buram. Jika Bendera = 0, OwnerPointer harus menunjuk ke objek penyimpanan dalam memori sistem yang tetap dialokasikan hingga sumber daya dirilis. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

Nilai kembali

Tidak ada

Keterangan

Rutinitas ini tersedia di Windows 7 dan versi yang lebih baru dari sistem operasi Windows.

ExSetResourceOwnerPointerEx memungkinkan utas, yang bertindak sebagai manajer sumber daya, untuk mentransfer kepemilikan sumber daya eksekutif, yang telah diperoleh utas, ke utas lain, yang kemudian menggunakan sumber daya. Sumber daya eksekutif diwakili oleh struktur ERESOURCE .

Pemanggil harus mengatur dua bit paling tidak signifikan dari nilai parameter OwnerPointer ke bit. Sistem operasi menggunakan bit ini secara internal untuk membedakan pointer pemilik yang telah ditetapkan oleh panggilan ExSetResourceOwnerPointerEx dari utas yang telah memperoleh sumber daya dengan memanggil rutinitas ExAcquireResourceExclusiveLite atau ExAcquireResourceSharedLite .

Utas yang memanggil ExSetResourceOwnerPointerEx untuk mentransfer kepemilikan sumber daya harus sama dengan utas yang sebelumnya disebut rutin ExAcquireResourceXxxLite untuk memperoleh sumber daya.

Jika utas resource-manager memperoleh sumber daya untuk akses eksklusif (dengan memanggil ExAcquireResourceExclusiveLite), panggilan ExSetResourceOwnerPointerEx mentransfer kepemilikan akses eksklusif ke utas pengguna sumber daya. Jika utas resource-manager memperoleh sumber daya untuk akses bersama (dengan memanggil ExAcquireResourceSharedLite), panggilan ExSetResourceOwnerPointerEx mentransfer kepemilikan akses bersama ke utas pengguna sumber daya.

Ketika utas pengguna sumber daya tidak lagi memerlukan sumber daya, sumber daya harus dirilis. Biasanya, utas pengguna sumber daya merilis sumber daya. Untuk melakukannya, ini harus memanggil rutinitas ExReleaseResourceForThreadLite . Dalam panggilan ini, nilai parameter ThreadId harus cocok dengan nilai parameter OwnerPointer (termasuk dua bit yang paling tidak signifikan) dalam panggilan ExSetResourceOwnerPointerEx sebelumnya yang mentransfer kepemilikan sumber daya.

Setelah panggilan ExSetResourceOwnerPointerEx mentransfer kepemilikan sumber daya, satu-satunya rutinitas ERESOURCE lainnya yang dapat dipanggil driver untuk sumber daya yang ditentukan adalah ExReleaseResourceForThreadLite. Upaya untuk memanggil rutinitas ERESOURCE lain, seperti ExReleaseResourceLite, untuk sumber daya ini adalah kesalahan.

ExSetResourceOwnerPointerEx dapat beroperasi dalam dua mode yang berbeda secara signifikan. Mode ditentukan oleh parameter Bendera . Untuk memilih mode yang lebih serbaguna, atur Bendera = FLAG_OWNER_POINTER_IS_THREAD. Nilai Bendera ini menginformasikan sistem operasi bahwa parameter OwnerPointer adalah penunjuk ke objek utas utas utas resource-manager. Sistem operasi dapat, jika perlu, menggunakan informasi ini untuk sementara meningkatkan prioritas utas ini untuk menghindari inversi prioritas. Untuk mendapatkan penunjuk objek utas yang akan digunakan untuk nilai OwnerPointer , driver dapat memanggil rutinitas ExGetCurrentResourceThread . Ingatlah untuk mengatur dua bit paling tidak signifikan dari nilai OwnerPointer ke bit yang paling signifikan.

Jika Bendera nol, perilaku ExSetResourceOwnerPointerEx sama dengan rutinitas ExSetResourceOwnerPointer warisan, yang tersedia di Windows 2000 dan versi yang lebih baru dari sistem operasi Windows. Artinya, parameter OwnerPointer menunjuk ke objek penyimpanan yang dialokasikan utas resource-manager dalam memori sistem sebelum memanggil ExSetResourceOwnerPointerEx. Dalam hal ini, jenis dan nilai objek tidak relevan karena ExSetResourceOwnerPointerEx tidak mencoba mengakses objek itu sendiri. Sebaliknya, rutinitas hanya menggunakan alamat memori objek untuk mengidentifikasi pemilik sumber daya. Penyimpanan untuk objek harus dimulai pada batas empat byte dalam memori. Untuk mencegah dua driver secara tidak sengaja menggunakan penunjuk pemilik yang sama pada saat yang sama, utas resource-manager tidak boleh merilis penyimpanan untuk objek hingga sumber daya dirilis.

Untuk informasi selengkapnya tentang mengelola sumber daya eksekutif, lihat Pengantar Rutinitas ERESOURCE.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows 7 dan versi yang lebih baru dari sistem operasi Windows.
Target Platform Universal
Header wdm.h (termasuk Wdm.h, Ntddk.h, Ntifs.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport)

Lihat juga

ERESOURCE

ExAcquireResourceExclusiveLite

ExAcquireResourceSharedLite

ExGetCurrentResourceThread

ExInitializeResourceLite

ExReleaseResourceForThreadLite

ExReleaseResourceLite

ExSetResourceOwnerPointer