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.
Rutinitas DriverEntry harus menyimpan salinan argumen, bukan pointer, karena Manajer I/O membebaskan buffer
Keterangan
Rutinitas driver DriverEntry menyimpan salinan pointer ke buffer alih-alih menyimpan salinan buffer. Karena buffer dikosongkan ketika DriverEntry rutin kembali, penunjuk ke buffer akan segera tidak valid.
Nama analisis kode: NOT_COPYING_NAME
Contoh
Kode berikut menghasilkan peringatan ini.
g_RP berjenis PUNICODE_STRING, yang merupakan penunjuk ke jenis UNICODE_STRINGdata . Dengan menyimpan PUNICODE_STRING RegistryPath, kami hanya menyimpan pointer ke UNICODE_STRING tempat data berada. Ini akan hilang di akhir DriverEntry.
PUNICODE_STRING g_RP;
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
g_RP = RegistryPath;
return 0;
}
Kode berikut memulihkan masalah ini.
g_RP sekarang adalah UNICODE_STRING, dengan buffer sendiri. Ketika data disalin, data akan bertahan di luar pengembalian DriverEntry
UNICODE_STRING g_RP;
NTSTATUS
DriverEntry(
PDRIVER_OBJECT DriverObject,
PUNICODE_STRING RegistryPath
)
{
g_RP = CloneRegistryPath(RegistryPath); // CloneRegistryPath is an example helper function that copies over the data.
return 0;
}