English versionSwitch to the English version

 

FTDI soll wieder neue Treiber verteilen, die diesmal noch mehr Probleme bereiten! Siehe folgende Links:

Die einfachste Lösung ist natürlich, Windows dazu zu überreden, dass keine Treiber mehr erneuert werden. Dies kann man so einstellen:
     Windows 10: Automatische Treiberinstallation deaktivieren

Das kann aber nicht die Lösung sein. Ich habe einmal auf meinem PC nachgeschaut, wo die Treiberdateien liegen und habe ein kleines Visual Basic Programm geschrieben, das mich warnt, wenn neue FTDI-Treiber eingespielt werden.

Zum Problem, dass FTDI die USB-Kennung verändert siehe Boards: Unvergessene Dokumentationen.

In­halts­ver­zeich­nis

Prinzip

Konfiguration

Installation

Programm-Interna

Download


Prinzip

Das Treiberpaket besteht aus den sieben Dateien

Alle diese Dateien befinden sich auch noch einmal in den Verzeichnissen

Die Datei ftd2xx.dll, heißt dort ftd2xx64.dll. Das letzte Stück des Verzeichnisses "...\ftdibus.inf_amd64_54aa41742b0abca5\amd64" wird sehr rechnerspezifisch sein. Ich besitze einen 64-Bit-AMD-Rechner.

Alle diese Dateien der bei mir installierten Treiberversion 2.12.00 haben den Datumsstempel (Änderungsdatum) "09.09.2014".

Ein kleines VB-Programm untersucht den Datumsstempel dieser Dateien beim Start von Windows und schaut nach, ob dieser immer noch "09.09.2014" ist. Hat sich dieser geändert, schlägt das Programm Alarm.

Das ganze Treiberpaket besteht aus weiteren Dateien. Die oben aufgeführten scheinen mir die wichtigsten zu sein.

Sinnvollerweise kopiert man beide Ordner aus dem DriverStore an einen sicheren Ort, aus dem man sie nötigenfalls zurückholen kann. Meine Dateien habe ich unten abrufbar abgelegt.


Konfiguration

Leider kenne ich keinen allgemeingültigen Weg, wie man an die Dateipfade kommt. Deshalb ist es notwendig, die Dateipfade zu den Treiberdateien im Programm anzupassen und neu zu übersetzen. Das Programm wurde  mit Visual Studio 2012 entwickelt. Spätere VS-Versionen sollten damit klarkommen. Bei früheren Versionen muss man ggf. ein neues Projekt anlegen und die nur die Quelldateien übernehmen. Wichtig ist ein Verwies auf System.Management-Assembly.

Zur individuellen Konfiguration braucht im Projekt nur die Datei ModCheck.vb geändert werden. Zum einen sind die Verzeichnisse zu anzupassen:

'Adjust the following three directories to your own system!
Public SystemDir As String = "C:\\windows\\System32\\"
Public DriversDir As String = "C:\\windows\\System32\\drivers\\"
Public StoreDir As String = "C:\\Windows\\System32\\DriverStore\\FileRepository\\ftdibus.inf_amd64_54aa41742b0abca5\\amd64\\"
Public StoreDir2 As String = "C:\\Windows\\System32\\DriverStore\\FileRepository\\ftdiport.inf_amd64_52a0a468ba08593c\\amd64\\"

und zum anderen muss bei 32-Bit-Systemen der folgende Dateiname angepasst werden:

FtdiFileList.Add(New FileCheck(StoreDir & "ftd2xx64.dll")) '<- Check this filename!

Wichtig: Das Trennzeichen zwischen den Pfad-Teilen ist "\\" (zweimal Schrägstrich rückwärts). Der String wird an eine WMI-Abfrage weitergeleitet. Dort ist "\" das Fluchtsymbol.


Installation

Anschließend kann man das Programm übersetzen und die entstandene ausführbare Datei FtdiChk.exe in passendes Verzeichnis kopieren (z.B. "C:\Windows").

Über das Kontext-Menü erstellt man eine Verknüpfung auf die Datei. Diese kopiert man ins Autostart-Verzeichnis ("autostart" im Windows-Suchfeld eingegeben oder hier schauen: Autostart-Ordner in Windows 10 finden). Möchte man, dass man auch dann eine Meldung erhält, wenn kein Fehler gefunden wurde, gibt man den Kommandozeilen-Parameter "-V" hinzu. Das ganze sieht dann so aus:

Verknüpfungseigenschaften

Wenn alle Dateien das passende Datum haben und die Meldungsoption eingeschaltet ist ("-V") meldet sich das Programm mit

OK-Meldung

Findet das Programm eine Abweichung erscheint dieser Fehlerbricht:

Fehlerbericht


Programm-Interna

Das Programm besitzt nur zwei erwähnenswerte Punkte:

Programm-Start

Damit das Programm die Dateiprüfung vollkommen ohne eine sichtbare Aktion durchführen kann, erfolgt diese bevor das Hauptformular geladen wird. Hierzu werden die Anwendungsereignisse ausgenutzt.

Imports Microsoft.VisualBasic.ApplicationServices

Namespace My

   ' Für MyApplication sind folgende Ereignisse verfügbar:
   ' 
   ' Startup: Wird beim Starten der Anwendung noch vor dem Erstellen des Startformulars ausgelöst.
   ' Shutdown: Wird nach dem Schließen aller Anwendungsformulare ausgelöst. Dieses Ereignis wird nicht ausgelöst,
   '           wenn die Anwendung nicht normal beendet wird.
   ' UnhandledException: Wird ausgelöst, wenn in der Anwendung eine unbehandelte Ausnahme auftritt.
   ' StartupNextInstance: Wird beim Starten einer Einzelinstanzanwendung ausgelöst, wenn diese bereits aktiv ist. 
   ' NetworkAvailabilityChanged: Wird beim Herstellen oder Trennen der Netzwerkverbindung ausgelöst.
   Partial Friend Class MyApplication
      Public Sub Me_Startup(ByVal sender As Object, ByVal e As StartupEventArgs) Handles Me.Startup
         Dim mVerbose As Boolean = False
         For Each s In From s1 In e.CommandLine Where s1.ToUpper() = "-V" Or s1.ToUpper() = "/V"
            mVerbose = True
         Next
         Dim mResult = FtdiCheck()

         If mResult = ProblemType.NoProblem Then
            If mVerbose Then
               MsgBox("FTDI drivers were checked")
            End If
            e.Cancel = True ' Everything is ok. No further action required
         Else
            'Files have been modified, display problem report
         End If
      End Sub
   End Class
End Namespace

Der Zugriff auf die Anwendungsereignisse muss erst über die Projekteigenschaften aktiviert werden:

Anwendungsereignisse

Datei-Zugriffe

Windows hat sich strikt geweigert, über die normal zur Verfügung stehenden Funktionen Zugriff auf die Systemdateien zu gewähren. Ich habe dann auch nicht lange weiter gesucht sondern die das WMI (Windows Management Instrumentation) benutzt.

For Each File In FtdiFileList

   Dim mSearchString As String = "SELECT * FROM CIM_Datafile WHERE Name = '" & File.FilePath & "'"

   Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher(mSearchString)
   Dim mManagementObjectCollection As ManagementObjectCollection = searcher.Get

   If mManagementObjectCollection.Count <> 1 Then
      File.TestResult = ProblemType.MissingFile
      mOverallProblem = ProblemType.MissingFile
   Else
      Dim mFile As New CIM_Datafile(mManagementObjectCollection(0))
      If Not mFile.LastModified.StartsWith("20140909") Then
         File.TestResult = ProblemType.Modified
         mOverallProblem = ProblemType.Modified
      End If
   End If
Next

Über das WMI bekommt man auch die Programmversionen geliefert. Diese sind jedoch rechtunterschiedlich für die einzelnen Treiberkomponenten, während das Änderungsdatum über gleich ist. Deshalb habe ich dieses zur Prüfung benutzt. Ich hoffe, das reicht.

Download

FTDI-DriverStore auf meinem PC, Stand 2016-2-3

Das VB-Projekt für Visual Studio 2012