Fungsi KeSetSystemAffinityThreadEx (wdm.h)

Rutinitas KeSetSystemAffinityThreadEx mengatur afinitas sistem dari utas saat ini.

Sintaks

KAFFINITY KeSetSystemAffinityThreadEx(
  [in] KAFFINITY Affinity
);

Parameter

[in] Affinity

Variabel berjenis KAFFINITY yang menentukan afinitas sistem baru dari utas saat ini.

Nilai kembali

KeSetSystemAffinityThreadEx mengembalikan afinitas sistem sebelumnya dari utas saat ini, atau nol untuk menunjukkan bahwa tidak ada afinitas sistem sebelumnya.

Keterangan

KeSetSystemAffinityThreadEx mengubah masker afinitas utas saat ini. Masker afinitas mengidentifikasi sekumpulan prosesor tempat utas dapat berjalan. Jika berhasil, rutinitas menjadwalkan utas untuk berjalan pada prosesor dalam set ini.

Penelepon KeSetSystemAffinityThreadEx harus menyimpan nilai pengembalian dan kemudian meneruskan nilai ini ke rutinitas KeRevertToUserAffinityThreadEx untuk memulihkan masker afinitas sebelumnya.

Dalam sistem multiprosem, rutinitas driver mode kernel yang berjalan dalam konteks utas mode pengguna mungkin perlu memanggil KeSetSystemAffinityThreadEx untuk mengubah masker afinitas utas untuk sementara waktu. Sebelum rutin keluar, harus memanggil KeRevertToUserAffinityThreadEx untuk memulihkan masker afinitas utas ke nilai aslinya.

Istilah afinitas pengguna mengacu pada afinitas asli utas mode pengguna. Afinitas yang ditetapkan oleh driver mode kernel disebut sebagai afinitas sistem. Jika panggilan ke KeSetSystemAffinityThreadEx menggantikan afinitas pengguna utas dengan afinitas sistem, panggilan mengembalikan nol. Kemudian, driver memulihkan afinitas pengguna dengan memanggil KeRevertToUserAffinityThreadEx dan meneruskan nilai pengembalian ini (nol) sebagai nilai Afinitas .

Selain itu, rutinitas driver mode kernel yang memerlukan masker afinitas tertentu mungkin memanggil rutinitas mode kernel lain yang memerlukan masker afinitas yang berbeda. Setiap rutinitas dapat memanggil KeSetSystemAffinityThreadEx untuk mengatur masker afinitas baru lalu memanggil KeRevertToUserAffinityThreadEx untuk memulihkan masker afinitas sebelumnya sebelum kembali.

Rutinitas KeSetSystemAffinityThreadEx mengubah masker afinitas utas saat ini ke nilai Afinitas hanya jika kedua hal berikut ini benar:

  • Nilai Afinitas valid (yaitu, hanya bit mask yang sesuai dengan prosesor logis yang diatur).
  • Setidaknya salah satu prosesor yang ditentukan dalam nilai Afinitas aktif.
Jika salah satu kondisi ini tidak terpenuhi, panggilan ke KeSetSystemAffinityThreadEx tidak berpengaruh.

Windows 7 dan versi yang lebih baru dari grup prosesor dukungan Windows. Driver yang dirancang untuk menangani informasi tentang grup prosesor harus menggunakan rutinitas KeSetSystemGroupAffinityThread , yang menentukan grup prosesor, bukan KeSetSystemAffinityThreadEx, yang tidak. Namun, implementasi KeSetSystemAffinityThreadEx di Windows 7 dan versi Windows yang lebih baru memberikan kompatibilitas untuk driver yang ditulis untuk versi Windows sebelumnya, yang tidak mendukung grup prosesor. Dalam implementasi ini, KeSetSystemAffinityThreadEx menetapkan utas ke grup 0, dan menggunakan mask afinitas untuk menentukan sekumpulan prosesor logis dalam grup ini tempat utas dapat berjalan. Rutinitas mengembalikan masker afinitas relatif grup sebelumnya, tetapi bukan grup sebelumnya.

Jika KeSetSystemAffinityThreadEx dipanggil di IRQL <= APC_LEVEL dan panggilan berhasil, masker afinitas baru segera berlaku. Saat panggilan kembali, utas panggilan sudah berjalan pada prosesor yang ditentukan dalam masker afinitas baru. Jika KeSetSystemAffinityThreadEx dipanggil di IRQL = DISPATCH_LEVEL dan panggilan berhasil, perubahan prosesor yang tertunda ditangguhkan sampai penelepon menurunkan IRQL di bawah ini DISPATCH_LEVEL.

Persyaratan

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

Lihat juga

KAFINITAS

KeRevertToUserAffinityThreadEx

KeSetSystemAffinityThread

KeSetSystemGroupAffinityThread