使用 SetupAPI 的指導方針

以下是使用一 般安裝程式函 式的指導方針, (SetupXxx) 和 裝置安裝函 式, (SetupAPI 提供的 SetupDiXxx) :

  • 絕對不要假設安裝檔案內容沒有錯誤,或您提供的安裝檔案尚未遭到惡意修改。 因此,請一律驗證從 SetupAPI 函式接收的所有資訊。 確認字串是否為有效長度、緩衝區大小有效,且索引值在有效範圍內。

  • 撰寫安裝應用程式以在 Microsoft Windows XP 和更新版本系統上安裝時,您可以呼叫 Windows SDK 檔) 中所述的 SetupVerifyInfFile (,以驗證尚未修改數位簽署的 INF 檔案。

  • 一律測試每個 SetupAPI 函式的傳回值。 如果函式失敗,您的程式碼應該呼叫 GetLastError ,以取得識別失敗的錯誤碼。 傳回的錯誤碼可以在 Winerror.hSetupapi.h中定義。 使用 FORMAT_MESSAGE_FROM_SYSTEM 呼叫 FormatMessage 以建立文字顯示之前,請一律使用 Winerror.h 中定義的HRESULT_FROM_SETUPAPI (宏) ,將傳回值轉換成 HRESULT 值。 如果 SetupAPI 函式成功傳回,您的程式碼不得呼叫 GetLastError。 (Windows SDK 檔.) 說明 GetLastErrorFormatMessage 函式以及系統錯誤碼

  • 如果 SetupAPI 函式傳回控制碼,您的程式碼必須檢查傳回值INVALID_HANDLE_VALUE。 這類函式不會傳回 Null

  • 請注意 ,SetupDiXxxSetupXxx 函式之間有下列差異,可讓呼叫端查詢所需的緩衝區大小:

    • 如果 SetupDiXxx 函式的呼叫端進行這類查詢, GetLastError 一律會傳回ERROR_INSUFFICIENT_BUFFER。

    • 如果 SetupXxx 函式的呼叫端進行這類查詢,如果未指定緩衝區長度, 則 GetLastError 會傳回NO_ERROR,如果指定的緩衝區太小,則傳回ERROR_INSUFFICIENT_BUFFER。