Fungsi KeQueryActiveProcessors (ntddk.h)

Rutinitas KeQueryActiveProcessors mengembalikan bitmask dari prosesor yang saat ini aktif.

Sintaks

KAFFINITY KeQueryActiveProcessors();

Mengembalikan nilai

KeQueryActiveProcessors mengembalikan nilai KAFFINITY yang mewakili kumpulan prosesor yang saat ini aktif.

Keterangan

Penelepon tidak dapat mengasumsikan bahwa KeQueryActiveProcessors memetakan prosesor ke bit secara berturut-turut, atau bahwa rutinitas secara konsisten menggunakan pemetaan yang sama setiap kali dipanggil. Satu-satunya penggunaan yang valid untuk nilai pengembalian adalah menentukan jumlah prosesor aktif dengan menghitung jumlah bit yang ditetapkan.

Penelepon juga harus menyadari bahwa nilai yang dikembalikan oleh KeQueryActiveProcessors dapat berubah selama runtime pada versi Windows yang mendukung fungsionalitas CPU hot-add.

Windows 7 dan versi yang lebih baru dari grup prosesor dukungan Windows. Driver yang dirancang untuk menangani informasi tentang grup prosesor harus menggunakan rutinitas KeQueryGroupAffinity , yang menentukan grup prosesor, bukan KeQueryActiveProcessors, yang tidak. Namun, implementasi KeQueryActiveProcessors di Windows 7 dan versi Windows yang lebih baru memberikan kompatibilitas untuk driver yang ditulis untuk versi Windows yang lebih lama, yang tidak mendukung grup prosesor. Dalam implementasi ini, KeQueryActiveProcessors mengembalikan masker afinitas yang menentukan set prosesor logis aktif di grup 0.

Di Windows Vista dan versi Windows yang lebih baru, rutinitas ini dapat dipanggil di IRQL apa pun. Namun, di Windows Server 2003 dan versi Windows yang lebih lama, rutinitas ini harus dipanggil di IRQL <= APC_LEVEL.

Variabel kernel KeNumberProcessors sudah usang di Windows Vista dengan Service Pack 1 (SP1), Windows Server 2008, dan versi Windows yang lebih baru. KeNumberProcessors tidak muncul di header WDK untuk rilis WDK yang dimulai dengan Windows Vista SP1; namun, variabel masih diekspor dari kernel, sehingga driver yang dibangun untuk platform sebelumnya tidak akan rusak

Windows Server 2008 menyertakan dukungan untuk Dynamic Hardware Partitioning (DHP) di SKU Windows Datacenter dan Enterprise Edition. Sebagai bagian dari DHP, Windows Server 2008 mendukung penambahan CPU saat runtime. Di lingkungan CPU hot-add, jumlah prosesor mungkin tidak tetap konstan selama runtime.

Dengan demikian, di Windows Server 2008, kode yang dapat menentukan jumlah prosesor harus menggunakan KeQueryActiveProcessors alih-alih referensi langsung ke variabel kernel, KeNumberProcessors.

Tinjau kode apa pun yang saat ini mereferensikan KeNumberProcessors untuk memastikan bahwa kode tersebut mengakomodasi perubahan pada jumlah CPU di lingkungan CPU hot-add.

Anda dapat menggunakan alat PNPCPU untuk mensimulasikan hot menambahkan CPU untuk tujuan pengujian.

#if (NTDDI_VERSION >= NTDDI_VISTA)
extern NTSYSAPI volatile CCHAR KeNumberProcessors;
#else
#if (NTDDI_VERSION >= NTDDI_WINXP)
extern NTSYSAPI CCHAR KeNumberProcessors;
#else
extern PCCHAR KeNumberProcessors;
#endif
#endif

Dimulai dengan Windows XP, KeNumberProcessors adalah nilai bilangan bulat 8-bit yang menunjukkan jumlah prosesor dalam platform. Di versi Windows sebelumnya, KeNumberProcessors adalah penunjuk ke nilai bilangan bulat 8-bit yang menunjukkan jumlah prosesor dalam platform.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Tersedia dimulai dengan Windows 2000.
Target Platform Universal
Header ntddk.h (termasuk Wdm.h, Ntddk.h)
Pustaka NtosKrnl.lib
DLL NtosKrnl.exe
IRQL Lihat bagian Keterangan.
Aturan kepatuhan DDI HwStorPortProhibitedDDIs(storport), IrqlKeApcLte1(wdm)

Lihat juga

KeQueryActiveProcessorCount

KeQueryGroupAffinity