Pemverifikasi Aplikasi (Buku Masak Kualitas Aplikasi Windows 7 dan Windows Server 2008 R2)

Platform yang Terpengaruh

Klien - Windows XP, Windows Vista, Windows 7
Servers - Windows Server 2003, Windows Server 2008, Windows Server 2008 R2

Deskripsi

Promosikan dan terapkan Pemverifikasi Aplikasi sebagai gerbang kualitas untuk semua pengembangan. Ini termasuk beberapa peningkatan:

  • Kami telah memberikan pemeriksaan tambahan untuk mengatasi masalah yang ditemukan tim Pelaporan Galat Windows selama penggunaan kumpulan utas.
  • Kami menggabungkan versi paket 32 dan 64-bit untuk mengatasi perubahan di Windows 7, termasuk kebutuhan untuk menguji komponen 32-bit di bawah Windows versi 64-bit, serta untuk penyederhanaan umum.
  • Kami telah menyertakan pemeriksaan tambahan untuk aplikasi multithreaded, menjalankan aplikasi 32-bit pada Windows 64-bit, serta banyak perbaikan bug.

Perubahan ini seharusnya tidak berdampak negatif pada pengguna yang tidak mengaktifkan Pemeriksaan Utas; mereka yang memang harus menerima dukungan tambahan dalam penemuan dan diagnosis masalah penggunaan kumpulan utas yang ada. Apakah Anda mengaktifkan Pemeriksaan Utas atau tidak, Anda akan mendapat manfaat dari peningkatan lain dan perbaikan bug dalam layanan ini.

Meskipun ada sedikit penalti performa saat menggunakan layanan ini, tingkat performa harus tetap dapat diterima karena biasanya tidak berjalan di lingkungan ritel.

Penggunaan

Informasi Umum

Untuk memberikan aplikasi Windows yang andal:

  1. Aplikasi pengujian yang ditulis dalam kode yang tidak dikelola (asli) dengan Application Verifier di bawah debugger dan dengan tumpukan halaman penuh sebelum merilisnya kepada pelanggan.
  2. Ikuti langkah-langkah yang disediakan oleh Pemverifikasi Aplikasi untuk mengatasi kondisi yang salah.
  3. Setelah aplikasi Anda dirilis, pantau laporan kegagalan aplikasi secara teratur yang dikumpulkan oleh Pelaporan Galat Windows.

Pemeriksaan kumpulan utas diaktifkan secara default di bawah judul pemeriksaan "Dasar". Karena ini disertakan dalam pengaturan default, pengguna hanya perlu menjalankan Pemverifikasi Aplikasi pada kode mereka dengan pengaturan default untuk memanfaatkan pemeriksaan baru.

Rincian

Minimal, Anda harus menjalankan Pemverifikasi Aplikasi dengan pengaturan Dasar yang dipilih. Ini diperlukan untuk WinLogo dan WinQual. Pengaturan Dasar memeriksa hal berikut:

  • Detail Penghentian Pengecualian - Memastikan bahwa aplikasi tidak menyembunyikan pelanggaran akses menggunakan penanganan pengecualian terstruktur
  • Menangani Detail Berhenti - Pengujian untuk memastikan aplikasi tidak mencoba menggunakan handel yang tidak valid
  • Detail Heaps Stop - Memeriksa masalah kerusakan memori dalam tumpukan
  • Detail Penghentian Input/Output - Memantau eksekusi IO asinkron, dan melakukan berbagai validasi
  • Detail Pemberhentian Kebocoran - Mendeteksi kebocoran dengan melacak sumber daya yang dibuat oleh dll yang tidak dibebaskan pada saat dll dibongkar
  • Detail Penghentian Kunci - Memverifikasi penggunaan yang benar untuk bagian penting
  • Detail Penghentian Memori - Memastikan API untuk manipulasi ruang virtual digunakan dengan benar (misalnya, VirtualAlloc, MapViewOfFile)
  • Detail Penghentian TLS - Memastikan bahwa API Penyimpanan Lokal Utas digunakan dengan benar
  • Detail Penghentian Threadpool - Memastikan penggunaan API threadpool yang benar dan memberlakukan pemeriksaan konsistensi pada worker-thread-states setelah panggilan balik

Jika aplikasi Anda bermigrasi dari aplikasi "Pra-Vista", Anda ingin memanfaatkan "LuaPriv" (juga dikenal sebagai pemeriksaan UAC). Prediksi Hak Istimewa Akun Pengguna Terbatas (LuaPriv) memiliki dua tujuan utama:

  • Prediktif: Saat menjalankan aplikasi dengan hak istimewa administratif, prediksi apakah aplikasi tersebut juga akan berfungsi jika dijalankan dengan lebih sedikit hak istimewa (umumnya, sebagai pengguna normal). Misalnya, jika aplikasi menulis ke file yang hanya mengizinkan akses Administrator, aplikasi tersebut tidak akan dapat menulis ke file yang sama jika dijalankan sebagai non-administrator.
  • Diagnostik: Saat berjalan dengan hak istimewa non-administrator, identifikasi potensi masalah yang mungkin sudah ada dengan eksekusi saat ini. Melanjutkan contoh sebelumnya, jika aplikasi mencoba menulis ke file yang hanya memberikan akses anggota grup Administrator, aplikasi akan mendapatkan kesalahan ACCESS_DENIED. Jika aplikasi tidak beroperasi dengan benar, operasi ini mungkin pelakunya.

LuaPriv mengidentifikasi jenis masalah berikut:

Potensi Masalah Keterangan
Namespace Terbatas Membuat objek sinkronisasi bernama (Peristiwa, Semaphore, Mutex, dll) tanpa namespace mungkin rumit berjalan tanpa hak istimewa pada beberapa sistem operasi karena sistem operasi dapat memilih untuk menempatkan objek di namespace terbatas. Membuat objek seperti itu di namespace terbatas (seperti namespace layanan Global) memerlukan SeCreateGlobalPrivilege, yang hanya diberikan kepada administrator.
LuaPriv menandai kedua masalah ini jika mendeteksinya.
Pemeriksaan Administrator Keras Beberapa aplikasi menginterogasi token keamanan pengguna untuk mengetahui berapa banyak hak istimewa yang dimilikinya. Dalam kasus tersebut, aplikasi dapat mengubah perilakunya tergantung pada seberapa besar daya yang dipikirkan pengguna.
LuaPriv menandai panggilan API yang mengembalikan informasi ini.
Meminta Hak Istimewa Aplikasi dapat mencoba mengaktifkan hak istimewa yang relevan dengan keamanan (seperti SeTcbPrivilege atau SeSecurityPrivilege) sebelum melakukan operasi yang memerlukannya.
Bendera LuaPriv mencoba mengaktifkan hak istimewa yang relevan dengan keamanan.
Hak Istimewa Hilang Jika aplikasi mencoba mengaktifkan hak istimewa yang tidak dimiliki pengguna, aplikasi mungkin memberi sinyal bahwa aplikasi mengharapkan hak istimewa, yang dapat menyebabkan perbedaan perilaku.
Bendera LuaPriv gagal meminta hak istimewa.
Operasi INI-File Upaya untuk menulis ke file INI yang dipetakan (WritePrivateProfileSection dan API serupa) dapat gagal sebagai pengguna non-administrator.
LuaPriv menandai operasi tersebut.
Akses Ditolak Jika aplikasi mencoba mengakses objek (File, kunci registri, dll) tetapi upaya gagal karena akses yang tidak memadai, aplikasi mungkin mengharapkan untuk berjalan dengan lebih banyak hak istimewa daripada yang dimilikinya.
LuaPriv menandai upaya buka objek yang gagal dengan ACCESS_DENIED dan kesalahan serupa.
Tolak ACE Jika objek memiliki Tolak ACE dalam DACL-nya, maka objek secara eksplisit menolak akses ke entitas tertentu.
Ini jarang terjadi, dan membuat prediksi sulit, jadi LuaPriv menandai Tolak ACE ketika menemukannya.
Akses Dibatasi Jika aplikasi mencoba membuka objek untuk hak yang tidak diberikan kepada pengguna normal (misalnya, mencoba menulis ke file yang hanya dapat ditulis oleh administrator), aplikasi mungkin tidak akan berfungsi sama ketika dijalankan sebagai pengguna normal.
LuaPriv menandai operasi tersebut.
MAXIMUM_ALLOWED Jika aplikasi membuka objek untuk MAXIMUM_ALLOWED, maka pemeriksaan akses aktual pada objek akan terjadi di tempat lain. Sebagian besar kode yang melakukan ini tidak berfungsi dengan benar, dan hampir pasti akan bekerja secara berbeda ketika dijalankan tanpa hak istimewa.
LuaPriv dengan demikian menandai semua insiden MAXIMUM_ALLOWED.

 

Masalah umum yang diabaikan ditangkap dalam Pemeriksaan Misc yang nebulous:

  • Detail Penghentian API Berbahaya
  • Detail Berhenti Tumpukan Kotor
  • Rollover Waktu

Kami telah menambahkan Print Verifier baru. Lapisan ini membantu menemukan dan memecahkan masalah yang dapat mengakibatkan aplikasi memanggil subsistem cetak. Print Verifier menargetkan dua lapisan subsistem cetak, lapisan PrintAPI dan lapisan PrintDriver.

Cetak Lapisan API

Print Verifier menguji antarmuka antara program dan Winspool.drv dan prntvpt.dll dan menguji antarmuka DLL tersebut. Anda dapat meninjau aturan untuk memanggil fungsi di antarmuka ini di bagian bantuan MSDN untuk API yang diekspor oleh winspool.drv dan prntvpt.dll.

Cetak Lapisan Pengandar

Print Verifier juga menguji antarmuka antara driver cetak inti seperti UNIDRV.DLL, UNIDRUI.DLL, PSCRIPT5.DLL, PS5UI.DLL, atau MXDWDRV.DLL, dan plug-in driver cetak. Anda dapat menemukan informasi tentang antarmuka ini di MSDN dan WDK.

Perhatikan bahwa beberapa pemeriksaan ini hanya untuk Windows 7, dan yang lain hanya akan berkinerja lebih baik di bawah Windows 7.

Biasanya, hanya versi debug yang menjalankan Pemverifikasi Aplikasi, sehingga performa umumnya bukan masalah. Jika masalah performa muncul dari penggunaan ini, atau pemeriksaan Pemverifikasi Aplikasi lainnya, jalankan satu pemeriksaan pada satu waktu hingga Anda melakukan semua pemeriksaan yang diperlukan.

Hampir 10% crash aplikasi pada sistem Windows disebabkan oleh kerusakan tumpukan. Crash ini hampir tidak mungkin untuk di-debug setelah fakta. Cara terbaik untuk menghindari masalah ini adalah dengan menguji dengan fitur Timbunan Halaman yang ditemukan di Pemverifikasi Aplikasi. Ada dua rasa Tumpuk Halaman: "Penuh" dan "Terang." Penuh adalah default; ini akan memaksa debugger berhenti seketika setelah mendeteksi kerusakan. Fitur ini HARUS dijalankan saat berada di bawah debugger. Namun, ini juga merupakan sumber daya yang paling menuntut. Jika pengguna mengalami masalah waktu dan telah menjalankan skenario di bawah Tumpukan Halaman "Penuh", mengaturnya ke "Cahaya" kemungkinan akan mengatasi masalah ini. Selain itu, Timbunan Halaman Ringan tidak mengalami crash hingga proses keluar. Ini memberikan jejak tumpukan ke alokasi, tetapi dapat memakan waktu jauh lebih lama untuk didiagnosis daripada memanfaatkan rekan penuhnya.

Pantau status keandalan aplikasi melalui portal web Winqual. Portal ini menunjukkan laporan kesalahan yang dikumpulkan melalui Pelaporan Galat Windows, sehingga mudah untuk mengidentifikasi kegagalan yang paling sering. Pelajari tentang hal ini di Pelaporan Galat Windows: Memulai. Microsoft tidak mengenakan biaya untuk layanan ini.

Untuk memanfaatkan WinQual, Anda harus:

  1. Daftarkan perusahaan Anda untuk WinQual, yang memerlukan ID VeriSign. Anda dapat menemukan informasi Windows 7 tentang WinQual di portal pengembang yang dikelompokkan di bawah Windows Vista SP1 \ Windows Server 2008. Ini akan memiliki lokasi Windows 7 segera.
  2. Petakan aplikasi ISV ke nama produk dan nama ISV, yang menautkan laporan kegagalan ke perusahaan. ISV lain tidak dapat melihat laporan kesalahan Anda.
  3. Gunakan portal untuk mengidentifikasi masalah teratas. ISV juga dapat membuat respons yang memberi tahu pelanggan langkah-langkah apa yang harus diambil setelah kegagalan. Sistem respons mendukung lebih dari 10 bahasa di seluruh dunia.

Satu catatan lebih lanjut: Pemverifikasi Aplikasi hanya sebagus jalur kode yang Anda jalankan. Nilai menggabungkan alat ini dengan alat cakupan kode tidak dapat dilebih-lebihkan.

Alat Penelusuran Kesalahan untuk Windows:

Pemverifikasi Aplikasi:

WinQual: