Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
peringatan C28170: Fungsi telah dinyatakan berada dalam segmen halaman, tetapi tidak PAGED_CODE atau PAGED_CODE_LOCKED tidak ditemukan
Alat Analisis Kode melaporkan kesalahan ini ketika #pragma alloc_text atau #pragma code_seg digunakan untuk memindahkan fungsi yang tidak berisi makro PAGED_CODE atau PAGED_CODE_LOCKED ke bagian kode yang dapat di-pageable. Kesalahan ini dilaporkan pada nomor baris yang sesuai dengan kurung kurawal pertama ({) dalam fungsi .
Alat Analisis Kode menyimpulkan bahwa bagian dapat di-pageable saat nama bagian dimulai dengan PAGE. Fungsi dalam kode yang dapat di-pageable harus berisi makro PAGED_CODE atau PAGED_CODE_LOCKED di awal fungsi antara kurung kurawal pertama ({ ) dan pernyataan kondisional pertama.
Makro ini memungkinkan alat Analisis Kode dan pemeriksa run-time untuk menentukan apakah kode yang dapat di-pageable mungkin dijalankan pada IRQL yang ditingkatkan. Jika kesalahan halaman terjadi saat sistem berjalan pada tingkat yang ditinggikan, sistem akan mengalami crash.
Jika fungsi dalam segmen halaman kemudian dikunci ke dalam memori, gunakan PAGED_CODE_LOCKED alih-alih PAGED_CODE. Makro PAGE_CODE_LOCKED mengizinkan driver untuk melakukan panggilan yang menaikkan IRQL tanpa mengalami peringatan PREfast untuk Driver.
Kondisi ini sering kali sangat sulit ditemukan saat pengujian (kecuali makro PAGED_CODE digunakan untuk menyebabkan Pemverifikasi Driver memeriksa kesalahan), karena kode harus benar-benar di-page out agar kesalahan halaman terjadi.
Contoh
Contoh kode berikut memunculkan peringatan ini.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func1()
{
// paged, no PAGED_CODE: error
}
Contoh kode berikut menghindari peringatan ini.
void func();
#pragma alloc_text("PAGED_CODE", func);
void func2()
{
PAGED_CODE(); // includes PAGED_CODE macro
}