Richtlinien für die Verwendung von SetupAPI

Es folgen Richtlinien für die Verwendung der allgemeinen Setupfunktionen (SetupXxx) und geräteinstallationsfunktionen (SetupDiXxx), die von SetupAPI bereitgestellt werden:

  • Gehen Sie niemals davon aus, dass der Inhalt der Installationsdatei fehlerfrei ist oder dass eine von Ihnen bereitgestellte Installationsdatei nicht böswillig geändert wurde. Überprüfen Sie daher immer alle Informationen, die von SetupAPI-Funktionen empfangen wurden. Stellen Sie sicher, dass Zeichenfolgen eine gültige Länge haben, dass Puffer eine gültige Größe aufweisen und dass Indexwerte innerhalb eines gültigen Bereichs liegen.

  • Beim Schreiben von Installationsanwendungen für Installationen auf Microsoft Windows XP und späteren Systemen können Sie SetupVerifyInfFile (in der Windows SDK-Dokumentation beschrieben) aufrufen, wodurch überprüft wird, dass eine digital signierte INF-Datei nicht geändert wurde.

  • Testen Sie immer den Rückgabewert jeder SetupAPI-Funktion. Wenn die Funktion fehlschlägt, sollte der Code GetLastError aufrufen, um einen Fehlercode abzurufen, der den Fehler identifiziert. Zurückgegebene Fehlercodes können in Winerror.h oder Setupapi.h definiert werden. Verwenden Sie vor dem Aufrufen von FormatMessage mit FORMAT_MESSAGE_FROM_SYSTEM zum Erstellen einer Textanzeige immer das HRESULT_FROM_SETUPAPI Makro (definiert in Winerror.h), um den Rückgabewert in einen HRESULT-Wert zu konvertieren. Wenn eine SetupAPI-Funktion erfolgreich zurückkehrt, darf Ihr Code GetLastError nicht aufrufen. (Die Funktionen GetLastError und FormatMessage zusammen mit Systemfehlercodes werden in der Windows SDK-Dokumentation beschrieben.)

  • Wenn eine SetupAPI-Funktion ein Handle zurückgibt, muss Ihr Code prüfen, ob der Rückgabewert INVALID_HANDLE_VALUE ist. Solche Funktionen geben nicht NULL zurück.

  • Beachten Sie den folgenden Unterschied zwischen den Funktionen SetupDiXxx und SetupXxx , die es einem Aufrufer ermöglichen, die erforderliche Größe eines Puffers abzufragen:

    • Wenn der Aufrufer einer SetupDiXxx-Funktion eine solche Abfrage stellt, gibt GetLastError immer ERROR_INSUFFICIENT_BUFFER zurück.

    • Wenn der Aufrufer einer SetupXxx-Funktion eine solche Abfrage durchführt, gibt GetLastError NO_ERROR zurück, wenn keine Pufferlänge angegeben wurde oder ERROR_INSUFFICIENT_BUFFER, wenn ein Puffer angegeben wurde, der zu klein war.