Aracılığıyla paylaş


SetupAPI Kullanma Yönergeleri

Aşağıda, SetupAPI tarafından sağlanan genel Kurulum işlevlerini (KurulumXxx) ve cihaz yükleme işlevlerini (SetupDiXxx) kullanma yönergeleri verilmiştir:

  • Yükleme dosyası içeriğinin hatasız olduğunu veya sağladığınız bir yükleme dosyasının kötü amaçlı olarak değiştirilmediğini asla varsaymayın. Bu nedenle, her zaman SetupAPI işlevlerinden alınan tüm bilgileri doğrulayın. Dizelerin geçerli uzunlukta olduğunu, arabelleklerin geçerli boyutta olduğunu ve dizin değerlerinin geçerli bir aralık içinde olduğunu doğrulayın.

  • Microsoft Windows XP ve sonraki sistemlerdeki yüklemeler için yükleme uygulamaları yazarken, dijital olarak imzalanmış bir INF dosyasının değiştirilmediğini doğrulayan SetupVerifyInfFile'ı (Windows SDK belgelerinde açıklanmıştır) çağırabilirsiniz.

  • Her setupAPI işlevinin dönüş değerini her zaman test edin. İşlev başarısız olursa, kodunuzun hatayı tanımlayan bir hata kodu almak için GetLastError'ı çağırması gerekir. Döndürülen hata kodları Winerror.h veya Setupapi.h içinde tanımlanabilir. Metin görüntüsü oluşturmak için FORMAT_MESSAGE_FROM_SYSTEM ile FormatMessage'ı çağırmadan önce, dönüş değerini HRESULT değerine dönüştürmek için her zaman HRESULT_FROM_SETUPAPI makroyu ( Winerror.h içinde tanımlanır) kullanın. Bir SetupAPI işlevi başarıyla döndürülüyorsa kodunuz GetLastError'ı çağırmamalıdır. ( GetLastError ve FormatMessage işlevleri, sistem hata kodlarıyla birlikte Windows SDK belgelerinde açıklanmıştır.)

  • SetupAPI işlevi bir tanıtıcı döndürürse, kodunuz INVALID_HANDLE_VALUE dönüş değerini denetlemelidir. Bu tür işlevler NULL döndürmez.

  • Çağıranın gerekli arabellek boyutunu sorgulamasına olanak sağlayan SetupDiXxx ve KurulumXxx işlevleri arasındaki aşağıdaki farka dikkat edin:

    • SetupDiXxx işlevini çağıran böyle bir sorgu yaparsa, GetLastError her zaman ERROR_INSUFFICIENT_BUFFER döndürür.

    • KurulumXxx işlevini çağıran böyle bir sorgu yaparsa, GetLastError arabellek uzunluğu belirtilmemişse NO_ERROR veya çok küçük bir arabellek belirtildiyse ERROR_INSUFFICIENT_BUFFER döndürür.