Simulasi Sumber Daya Rendah
Ketika opsi Simulasi Sumber Daya Rendah (disebut Simulasi sumber daya rendah acak di Windows 8.1) aktif, Pemverifikasi Driver gagal instans acak dari alokasi memori driver, seperti yang mungkin terjadi jika driver berjalan di komputer dengan memori yang tidak mencukupi. Ini menguji kemampuan driver untuk merespons dengan benar terhadap memori rendah dan kondisi sumber daya rendah lainnya.
Pengujian Simulasi Sumber Daya Rendah gagal mengalokasikan alokasi yang diminta oleh panggilan ke beberapa fungsi berbeda, termasuk ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache, dan MmMapIoSpace.
Dimulai dengan Windows Vista, pengujian Simulasi Sumber Daya Rendah juga menyuntikkan kesalahan ke IoAllocateIrp, IoAllocateMdl, IoAllocateWorkItem, IoAllocateErrorLogEntry, MmAllocateContiguousMemory, MmAllocateContiguousMemorySpecifyCache, MmAllocatePagesForMdl, dan MmAllocatePagesForMdlEx. Selain itu, dimulai dengan Windows Vista, ketika Simulasi Sumber Daya Rendah diaktifkan, panggilan ke KeWaitForMultipleObjects atau KeWaitForSingleObject dengan parameter Yang Dapat Diperingatkan diatur ke TRUE dapat mengembalikan STATUS_ALERTED saat berjalan dalam konteks proses yang tidak istimewa. Ini mensimulasikan kemungkinan pemberitahuan utas yang berasal dari utas lain dalam aplikasi non-istimewa yang sama.
Pengujian Simulasi Sumber Daya Rendah juga menyuntikkan kesalahan ke fungsi GDI berikut: EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrush, dan CLIPOBJ_ppoGetPath.
Di Windows 7 dan versi yang lebih baru dari sistem operasi Windows, opsi Simulasi Sumber Daya Rendah mendukung memori yang dialokasikan dengan menggunakan API kernel berikut:
IoAllocateIrp dan rutinitas lainnya yang dapat mengalokasikan struktur data paket permintaan I/O (IRP)
RtlAnsiStringToUnicodeString dan rutinitas string pustaka run-time (RTL) lainnya
Dimulai dengan Windows 8.1, opsi Simulasi Sumber Daya Rendah juga gagal alokasi yang diminta oleh panggilan ke MmAllocateNodePagesForMdlEx. Selain itu, untuk beberapa fungsi, Driver Verifier sekarang mengisi memori yang dialokasikan dengan pola acak. Tetapi hanya dalam situasi di mana fungsi mengembalikan memori yang tidak diinisialisasi. Fungsi-fungsi ini meliputi:
- MmAllocatePagesForMdlEx
- MmAllocateNodePagesForMdlEx
- MmAllocateContiguousMemory
- MmAllocateContiguousMemorySpecifyCache
- MmAllocateContiguousMemorySpecifyCacheNode
- MmAllocateContiguousNodeMemory
- MmAllocateNonCachedMemory
Pengaturan Kustom untuk Simulasi Sumber Daya Rendah
Pada Windows Vista dan versi Windows yang lebih baru, Anda bisa menentukan pengaturan kustom berikut ini.
Probabilitas bahwa alokasi yang diberikan akan gagal. Defaultnya adalah 6%.
Aplikasi yang terpengaruh. Pengaturan ini membatasi alokasi gagal yang disuntikkan ke aplikasi yang ditentukan. Secara default, semua alokasi terpengaruh.
Tag kumpulan terpengaruh. Pengaturan ini membatasi kesalahan yang disuntikkan ke alokasi dengan tag kumpulan yang ditentukan. Secara default, semua alokasi terpengaruh.
Penundaan (dalam menit) sebelum alokasi gagal. Penundaan ini memungkinkan sistem untuk memulai dan menstabilkan sebelum kesalahan disuntikkan. Defaultnya adalah delapan menit.
Pada sistem operasi sebelum Windows Vista, Anda tidak dapat menyesuaikan pengaturan ini. Sistem operasi menggunakan nilai default.
Simulasi Sumber Daya Rendah tanpa Reboot
Anda dapat mengaktifkan Simulasi Sumber Daya Rendah pada Windows 2000 dan versi Windows yang lebih baru tanpa memulai ulang komputer dengan menggunakan parameter /volatile . Pengaturan segera efektif, tetapi hilang jika Anda mematikan atau menghidupkan ulang komputer.
Anda juga dapat menyimpan pengaturan Simulasi Sumber Daya Rendah di registri dengan menghilangkan parameter /volatil . Setelan ini hanya efektif ketika Anda memulai ulang komputer, tetapi tetap efektif hingga Anda mengubahnya.
Mengaktifkan Opsi Ini
Anda dapat mengaktifkan opsi Simulasi Sumber Daya Rendah untuk satu atau beberapa driver dengan menggunakan Driver Verifier Manager atau baris perintah Verifier.exe. Untuk detailnya, lihat Memilih Opsi Pemverifikasi Driver.
Pada baris perintah
Pada baris perintah, opsi Simulasi Sumber Daya Rendah diwakili oleh Bit 2 (0x4). Untuk mengaktifkan Simulasi Sumber Daya Rendah, gunakan nilai bendera 0x4 atau tambahkan 0x4 ke nilai bendera. Contohnya:
verifier /flags 0x4 /driver MyDriver.sys
Opsi akan aktif setelah boot berikutnya.
Pada Windows Vista dan versi Windows yang lebih baru, Anda dapat menggunakan parameter /faults atau nilai bendera 0x4 untuk mengaktifkan Simulasi Sumber Daya Rendah. Untuk mengubah pengaturan untuk Simulasi Sumber Daya Rendah, Anda harus menggunakan /faults. Contohnya:
verifier /faults /driver MyDriver.sys
Pada Windows 2000 dan versi Windows yang lebih baru, Anda juga dapat mengaktifkan dan menonaktifkan Simulasi Sumber Daya Rendah tanpa me-reboot komputer dengan menambahkan parameter /volatile ke perintah . Contohnya:
verifier /volatile /flags 0x4 /adddriver MyDriver.sys
Pengaturan ini segera efektif, tetapi hilang ketika Anda mematikan atau me-reboot komputer. Untuk detailnya, lihat Menggunakan Pengaturan Volatil.
Pada Windows Vista, Anda dapat menggunakan parameter /faults untuk mewakili Simulasi Sumber Daya Rendah dengan parameter /volatil untuk mewakili pengaturan yang efektif tanpa reboot. Perubahan pengaturan akan ditampilkan. Contohnya:
0> verifier /volatile /faults /adddriver MyDriver.sys New Low Resources Simulation options: - Use default fault injection probability. - Allocations using any pool tag can be failed. - Simulate low resources conditions in any application. The new settings are in effect until you restart this computer or change them again.
Menggunakan Driver Verifier Manager
- Mulai Driver Verifier Manager. Ketik Pemverifikasi di jendela Prompt Perintah.
- Pilih Buat pengaturan kustom (untuk pengembang kode), lalu klik Berikutnya.
- Pilih Pilih pengaturan individual dari daftar lengkap.
- Pilih Simulasi sumber daya rendah.
Menyesuaikan Pengaturan (Windows Vista dan yang lebih baru)
Dimulai dengan Windows Vista, Anda dapat mengubah pengaturan default untuk properti penundaan, probabilitas, aplikasi, dan tag kumpulan dari opsi Simulasi Sumber Daya Rendah. Anda dapat mengubah pengaturan ini dengan menggunakan Driver Verifier Manager atau baris perintah Verifier.exe. Untuk detailnya, lihat Memilih Opsi Pemverifikasi Driver.
Pada baris perintah, sintaks untuk pengaturan ini adalah sebagai berikut:
verifier [/volatile] /faults[Probability|PoolTags|Applications|DelayMins][/driverList|]
Catatan Parameter pengaturan kustom harus muncul dalam urutan yang ditampilkan. Jika Anda menghilangkan nilai, ketik tanda kutip untuk menahan tempatnya.
Subparameters
/Kesalahan
Mengaktifkan opsi Simulasi Sumber Daya Rendah di Pemverifikasi Driver. (Anda tidak dapat menggunakan /flags 0x4 dengan subparameters pengaturan kustom.)
Peluang
Menentukan probabilitas bahwa Pemverifikasi Driver akan gagal dalam alokasi tertentu. Ketik angka (dalam format desimal atau heksadesimal) untuk menunjukkan jumlah peluang dalam 10.000 bahwa Pemverifikasi Driver akan gagal alokasi. Nilai default, 600, berarti 600/10000, atau 6%.
PoolTags
Membatasi alokasi yang dapat gagal dialokasikan oleh Pemverifikasi Driver dengan tag kumpulan yang ditentukan. Anda dapat menggunakan karakter kartubebas (*) untuk mewakili beberapa tag kumpulan. Untuk mencantumkan beberapa tag kumpulan, pisahkan tag dengan spasi. Secara default, semua alokasi dapat gagal.
Aplikasi
Membatasi alokasi yang gagal dialokasikan oleh Pemverifikasi Driver untuk program yang ditentukan. Ketik nama file yang dapat dieksekusi. Untuk mencantumkan program, pisahkan nama program dengan spasi. Secara default, semua alokasi dapat gagal.
DelayMins
Menentukan jumlah menit setelah booting di mana Pemverifikasi Driver tidak sengaja gagal alokasi apa pun. Penundaan ini memungkinkan driver untuk memuat dan sistem stabil sebelum pengujian dimulai. Ketik angka (dalam format desimal atau heksadesimal). Nilai defaultnya adalah 8 (menit).
Misalnya, perintah berikut memungkinkan Simulasi Sumber Daya Rendah dengan probabilitas 10% (1000/10000) dan penundaan lima menit untuk tag kumpulan, Tag1 dan Fred, dan aplikasi, Notepad.exe.
verifier /faults 1000 "Tag1 Fred" Notepad.exe 5
Perintah berikut memungkinkan Simulasi Sumber Daya Rendah dengan nilai default, kecuali memperpanjang penundaan menjadi 10 menit.
verifier /faults "" "" "" 0xa
Menggunakan Driver Verifier Manager
Mulai Manajer Pemverifikasi Driver. Ketik Pemverifikasi di jendela Wantian Perintah.
Pilih Buat pengaturan kustom (untuk pengembang kode), lalu klik Berikutnya.
Pilih Pilih pengaturan individual dari daftar lengkap.
Pilih Simulasi sumber daya rendah, lalu klik Berikutnya.
Ubah pengaturan untuk properti penundaan, probabilitas, aplikasi, dan tag kumpulan sesuai keinginan.
Menampilkan Hasil
Anda dapat memantau berapa kali Driver Verifier sengaja gagal alokasi sumber daya dengan menampilkan penghitung global Yang Disuntikkan Kesalahan Pemverifikasi Driver. Penghitung ini menampilkan jumlah total alokasi sumber daya yang gagal disengaja oleh Pemverifikasi Driver sejak boot terakhir.
Anda dapat melihat penghitung ini dalam file log Driver Verifier (/log), di baris perintah (/kueri) atau di Driver Verifier Manager. Di Windows 2000, untuk melihat penghitung global, pilih tab Penghitung Global . Di versi Windows yang lebih baru, pilih Tampilkan informasi tentang tugas driver yang saat ini diverifikasi , lalu tekan Berikutnya dua kali. Untuk informasi selengkapnya, lihat Memantau Penghitung Global.
Anda juga dapat menampilkan jumlah alokasi yang sengaja gagal dan jumlah total alokasi (untuk menghitung probabilitas) dengan menggunakan ekstensi debugger !verifier . Contoh berikut menunjukkan sampel output !verifier .
Dalam contoh ini, Menyuntikkan kegagalan API sumber daya rendah acak menunjukkan bahwa Simulasi Sumber Daya Rendah diaktifkan. Alokasi Sumber Daya Gagal Sengaja menunjukkan jumlah alokasi yang sengaja gagal dan Alokasi Kumpulan yang Dicoba mewakili jumlah total alokasi.
!verifier
Verify Level 5 ... enabled options are:
Special pool
Inject random low-resource API failures
Summary of All Verifier Statistics
RaiseIrqls 0x2c671f
AcquireSpinLocks 0xca1a02
Synch Executions 0x10a623
Trims 0x0
Pool Allocations Attempted 0x862e0e
Pool Allocations Succeeded 0x8626e3
Pool Allocations Succeeded SpecialPool 0x768060
Pool Allocations With NO TAG 0x0
Pool Allocations Failed 0x34f
Resource Allocations Failed Deliberately 0x3f5
Untuk menampilkan jejak tumpukan untuk alokasi yang terakhir gagal oleh Pemverifikasi Driver, gunakan !verifier 4 di debugger kernel.
Contoh berikut menunjukkan sampel output dari !verifier 4. Secara default, !verifier 4 menampilkan jejak tumpukan dari empat alokasi yang terakhir gagal, tetapi Anda dapat menggunakan parameter Kuantitasnya untuk meningkatkan jumlah jejak tumpukan yang ditampilkan. Misalnya, !verifier 0x80 menampilkan 128 alokasi yang terakhir gagal.
Dalam contoh ini, perhatikan bahwa Verifier telah mencegat dan menggantikan panggilan driver ke ExAllocatePoolWithTag. Salah satu penyebab paling umum dari crash driver terjadi ketika driver mencoba mengalokasikan memori dan kemudian menggunakan pointer yang dikembalikan fungsi alokasi sebelum memverifikasi bahwa itu bukan NULL.
kd> !verifier 4
Resource fault injection history:
Tracker @ 8354A000 (# entries: 80, size: 80, depth: 8)
Entry @ 8354B258 (index 75)
Thread: C2638220
816760CB nt!VerifierExAllocatePoolWithTag+0x49
A4720443 win32k!bDeleteAllFlEntry+0x15d
A4720AB0 win32k!GreEnableEUDC+0x70
A47218FA win32k!CleanUpEUDC+0x37
A473998E win32k!GdiMultiUserFontCleanup+0x5
815AEACC nt!MiDereferenceSession+0x74
8146D3B4 nt!MmCleanProcessAddressSpace+0x112
815DF739 nt!PspExitThread+0x603
Entry @ 8354B230 (index 74)
Thread: 8436D770
816760CB nt!VerifierExAllocatePoolWithTag+0x49
A462141C win32k!Win32AllocPool+0x13
A4725F94 win32k!StubGdiAlloc+0x10
Pengalaman dengan pengujian Simulasi Sumber Daya Rendah mengungkapkan bahwa sebagian besar crash driver disebabkan oleh alokasi yang terakhir gagal. Dalam contoh di atas, crash berada di jalur win32k! GreEnableEUDC. Periksa kode di jalur alokasi untuk menemukan penyebab crash.
Untuk informasi tentang !verifier, lihat dokumentasi Alat Penelusuran Kesalahan untuk Windows .
Untuk melihat pengaturan di registri di baris perintah, gunakan opsi /querysettings . Contohnya:
C:\>verifier /querysettings
Special pool: Disabled
Pool tracking: Disabled
Force IRQL checking: Disabled
I/O verification: Disabled
Enhanced I/O verification: Disabled
Deadlock detection: Disabled
DMA checking: Disabled
Security checks: Disabled
Force pending I/O requests: Disabled
Low resources simulation: Enabled
IRP Logging: Disabled
Miscellaneous checks: Disabled
Low Resources Simulation options:
- Fault injection probability: 1/10000.
- Fail only allocations using pool tags: Tag1 Tag2.
- Simulate low resources conditions only in applications: test1.exe test2.exe.
- Boot time delay: 2 minutes.
Verified drivers:
blah.sys