Bagikan melalui


Panduan untuk Menggunakan SetupAPI

Berikut ini adalah panduan untuk menggunakan fungsi Penyiapan umum (SetupXxx) dan fungsi penginstalan perangkat (SetupDiXxx) yang disediakan oleh SetupAPI:

  • Jangan pernah berasumsi bahwa konten file penginstalan bebas kesalahan, atau bahwa file penginstalan yang Anda berikan belum dimodifikasi dengan berbahaya. Oleh karena itu, selalu validasi semua informasi yang diterima dari fungsi SetupAPI. Verifikasi bahwa string memiliki panjang yang valid, bahwa buffer berukuran valid, dan nilai indeks berada dalam rentang yang valid.

  • Saat menulis aplikasi penginstalan untuk penginstalan di Microsoft Windows XP dan sistem yang lebih baru, Anda dapat memanggil SetupVerifyInfFile (dijelaskan dalam dokumentasi Windows SDK), yang memverifikasi bahwa file INF yang ditandatangani secara digital belum dimodifikasi.

  • Selalu uji nilai pengembalian dari setiap fungsi SetupAPI. Jika fungsi gagal, kode Anda harus memanggil GetLastError untuk mendapatkan kode kesalahan yang mengidentifikasi kegagalan. Kode kesalahan yang dikembalikan dapat didefinisikan dalam Winerror.h atau Setupapi.h. Sebelum memanggil FormatMessage dengan FORMAT_MESSAGE_FROM_SYSTEM untuk membuat tampilan teks, selalu gunakan makro HRESULT_FROM_SETUPAPI (ditentukan dalam Winerror.h) untuk mengonversi nilai yang dikembalikan ke nilai HRESULT. Jika fungsi SetupAPI berhasil dikembalikan, kode Anda tidak boleh memanggil GetLastError. (Fungsi GetLastError dan FormatMessage , bersama dengan kode kesalahan sistem, dijelaskan dalam dokumentasi Windows SDK.)

  • Jika fungsi SetupAPI mengembalikan handel, kode Anda harus memeriksa nilai pengembalian INVALID_HANDLE_VALUE. Fungsi tersebut tidak mengembalikan NULL.

  • Ketahui perbedaan berikut antara fungsi SetupDiXxx dan SetupXxx yang memungkinkan pemanggil untuk mengkueri ukuran buffer yang diperlukan:

    • Jika pemanggil fungsi SetupDiXxx membuat kueri seperti itu, GetLastError selalu mengembalikan ERROR_INSUFFICIENT_BUFFER.

    • Jika pemanggil fungsi SetupXxx membuat kueri seperti itu, GetLastError mengembalikan NO_ERROR jika tidak ada panjang buffer yang ditentukan atau ERROR_INSUFFICIENT_BUFFER jika buffer ditentukan yang terlalu kecil.