Fungsi KeRevertToUserGroupAffinityThread (wdm.h)

Rutinitas KeRevertToUserGroupAffinityThread memulihkan afinitas grup utas panggilan ke nilai aslinya pada saat utas dibuat.

Sintaks

void KeRevertToUserGroupAffinityThread(
  [in] PGROUP_AFFINITY PreviousAffinity
);

Parameter

[in] PreviousAffinity

Penunjuk ke afinitas grup untuk dipulihkan. Parameter ini menunjuk ke struktur GROUP_AFFINITY yang berisi nomor grup dan masker afinitas. Masker afinitas menentukan set prosesor logis yang dapat dijalankan utas pengguna.

Nilai kembali

Tidak ada

Keterangan

Rutinitas ini mengubah nomor grup dan masker afinitas relatif grup dari utas panggilan. Nomor grup dan masker afinitas mengidentifikasi sekumpulan prosesor tempat utas dapat berjalan. Jika berhasil, rutinitas menjadwalkan utas untuk berjalan pada prosesor dalam set ini.

Parameter PreviousAffinity menunjuk ke struktur GROUP_AFFINITY yang menentukan nomor grup baru (Anggota grup) dan masker afinitas (anggota Masker ) untuk utas. Jika PreviousAffinity-Mask> bukan nol, KeRevertToUserGroupAffinityThread mengatur nomor grup dan masker afinitas utas panggilan ke nilai dalam struktur. Jika PreviousAffinity-Mask> adalah nol, rutinitas memulihkan nomor grup dan masker afinitas ke nilai aslinya pada saat utas diinisialisasi.

Proses dapat memiliki afinitas untuk lebih dari satu grup pada satu waktu. Namun, utas hanya dapat ditetapkan ke satu grup kapan saja, dan grup tersebut selalu berada dalam afinitas proses utas.

Utas dapat mengubah grup yang ditetapkan dengan memanggil rutinitas KeSetSystemGroupAffinityThread . Mengikuti satu atau beberapa panggilan ke KeSetSystemGroupAffinityThread, utas dapat memulihkan afinitas grup asli yang dimilikinya saat utas dibuat dengan memanggil KeRevertToUserGroupAffinityThread.

Setelah utas dibuat, panggilan ke KeRevertToUserGroupAffinityThread tidak berpengaruh (yaitu, nomor grup dan masker afinitas utas tetap tidak berubah) kecuali alur pertama kali memanggil KeSetSystemGroupAffinityThread. Mengikuti panggilan ke KeRevertToUserGroupAffinityThread, panggilan kedua ke KeRevertToUserGroupAffinityThread tidak berpengaruh kecuali alur pertama kali memanggil KeSetSystemGroupAffinityThread.

Rutinitas mengubah nomor grup dan masker afinitas ke nilai yang ditentukan dalam *PreviousAffinity hanya jika berikut ini benar:

  • Nomor grup valid.
  • Masker afinitas valid (yaitu, hanya bit mask yang sesuai dengan prosesor logis dalam grup yang diatur).
  • Setidaknya salah satu prosesor yang ditentukan dalam masker afinitas aktif.
Jika salah satu kondisi ini tidak terpenuhi, panggilan ke KeRevertToUserGroupAffinityThread tidak berpengaruh.

Rutinitas terkait, KeRevertToUserAffinityThreadEx, mengubah masker afinitas utas panggilan, tetapi rutinitas ini, tidak seperti KeRevertToUserGroupAffinityThread, tidak menerima nomor grup sebagai parameter input. Di Windows 7 dan versi yang lebih baru dari sistem operasi Windows, KeRevertToUserAffinityThreadEx mengasumsikan bahwa masker afinitas mengacu pada prosesor di grup 0, yang kompatibel dengan perilaku rutinitas ini di versi Windows sebelumnya yang tidak mendukung grup. Perilaku ini memastikan bahwa driver yang ada yang memanggil KeRevertToUserAffinityThreadEx dan yang tidak menggunakan fitur berorientasi grup akan berjalan dengan benar dalam sistem multiprosedur yang memiliki dua grup atau lebih. Namun, driver yang menggunakan fitur berorientasi grup apa pun di Windows 7 dan versi yang lebih baru dari sistem operasi Windows harus memanggil KeRevertToUserGroupAffinityThread alih-alih KeRevertToUserAffinityThreadEx.

Jika KeRevertToUserGroupAffinityThread dipanggil di IRQL <= APC_LEVEL dan panggilan berhasil, afinitas grup baru (dikembalikan) segera berlaku. Saat panggilan kembali, utas panggilan sudah berjalan pada prosesor yang ditentukan dalam afinitas grup baru. Jika KeRevertToUserGroupAffinityThread dipanggil di IRQL = DISPATCH_LEVEL dan panggilan berhasil, perubahan prosesor yang tertunda ditangguhkan hingga pemanggil menurunkan IRQL di bawah DISPATCH_LEVEL.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia di Windows 7 dan versi Windows yang lebih baru.
Target Platform Universal
Header wdm.h (termasuk Ntddk.h, Wdm.h, Ntddk.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL (lihat bagian Keterangan).

Lihat juga

GROUP_AFFINITY

KeRevertToUserAffinityThreadEx

KeSetSystemGroupAffinityThread