SetupAPI の使用に関するガイドライン

SetupAPI によって提供される 一般的なセットアップ機能 (SetupXxx) と デバイス インストール関数 (SetupDiXxx) を使用するためのガイドラインを次に示します。

  • インストール ファイルの内容にエラーがないこと、または提供したインストール ファイルが悪意を持って変更されていないことを決して想定しないでください。 そのため、SetupAPI 関数から受信したすべての情報を常に検証します。 文字列が有効な長さであること、バッファーが有効なサイズであること、およびインデックス値が有効な範囲内にあることを確認します。

  • Microsoft Windows XP 以降のシステムでインストールを行うためのアプリケーションを記述する場合は、SetupVerifyInfFile (Windows SDK ドキュメントで説明) を呼び出すことができます。これにより、デジタル署名された INF ファイルが変更されていないことが確認されます。

  • 各 SetupAPI 関数の戻り値を常に確認してください。 関数が失敗した場合、コードは GetLastError を呼び出して、失敗を識別するエラー コードを取得する必要があります。 返されるエラー コードは 、Winerror.h または Setupapi.h で定義できます。 FORMAT_MESSAGE_FROM_SYSTEMを使用して FormatMessage を呼び出してテキスト表示を作成する前に、常に HRESULT_FROM_SETUPAPI マクロ ( Winerror.h で定義) を使用して戻り値を HRESULT 値に変換します。 SetupAPI 関数が正常に戻った場合、コードで GetLastError を呼び出してはなりません。 (GetLastError 関数と FormatMessage 関数とシステム エラー コードについては、Windows SDK ドキュメントを参照してください)。

  • SetupAPI 関数がハンドルを返す場合は、コードで戻り値がINVALID_HANDLE_VALUEかどうかを確認する必要があります。 このような関数は NULL を返しません。

  • 呼び出し元がバッファーの必要なサイズを照会できるようにする SetupDiXxx 関数と SetupXxx 関数の次の違いに注意してください。

    • SetupDiXxx 関数の呼び出し元がこのようなクエリを行う場合、GetLastError は常にERROR_INSUFFICIENT_BUFFERを返します。

    • SetupXxx 関数の呼び出し元がこのようなクエリを実行した場合、GetLastError はバッファー長が指定されていない場合は NO_ERROR を返し、小さすぎるバッファーが指定された場合は ERROR_INSUFFICIENT_BUFFER を返します。