setupapi.dev.log : dater la première connexion USB
Lire les sections d’installation de setupapi.dev.log, convertir leur heure locale en UTC et les comparer à la date de première installation du registre.
En bref. C:\Windows\INF\setupapi.dev.log enregistre une section chaque fois que Windows installe un périphérique. La première section d’un périphérique USB correspond à sa première connexion à cet ordinateur. Ses horodatages sont en heure locale : convertissez-les avec le fuseau horaire de la ruche SYSTEM avant de les comparer à quoi que ce soit.
À quoi ressemble une section
>>> [Device Install (Hardware initiated) - USBSTOR\Disk&Ven_Contoso&Prod_SecureFlash&Rev_1.00\CS1234567890&0]
>>> Section start 2026/09/14 12:30:14.212
ump: Creating Install Process: DrvInst.exe 12:30:14.215
...
<<< Section end 2026/09/14 12:30:16.034
<<< [Exit status: SUCCESS]
Une seule clé produit généralement plusieurs sections en quelques secondes : le périphérique USB (USB\VID_…&PID_…\serial), le disque (USBSTOR\…) et la vue « appareil portable » du volume (SWD\WPDBUSENUM\…). Toutes portent le numéro de série, ce qui permet de les regrouper sous un même périphérique.
Conversion en UTC
Les horodatages ne comportent aucune indication de fuseau. La ruche SYSTEM stocke le fuseau dans ControlSet00x\Control\TimeZoneInformation : Bias, StandardBias, DaylightBias et deux règles, StandardStart et DaylightStart (« dernier dimanche de mars à 02:00 »). Appliquez la règle correspondant à la date de l’entrée, et non le décalage en vigueur au moment de la collecte de la ruche : une entrée de septembre sur une machine réglée sur Paris est en UTC+2, même si vous réalisez l’image du disque en janvier.
Dans l’exemple ci-dessus, 12:30:14 en heure Romance Standard Time en septembre correspond à 10:30:14 UTC. USB Forensics effectue cette conversion à partir de la ruche et le signale dans une remarque ; sans ruche SYSTEM, il affiche les heures comme si elles étaient en UTC et vous en avertit.
Les règles propres à une année donnée (Time Zones\<zone>\Dynamic DST dans SOFTWARE) sont rares pour les fuseaux européens et nord-américains, mais peuvent compter ailleurs.
Comparaison avec le registre
La valeur 0065 FirstInstallDate du registre devrait se trouver à quelques secondes de la première section setupapi. Lorsque ce n’est pas le cas :
- setupapi est antérieur : le périphérique a été désinstallé (Gestionnaire de périphériques, outils de nettoyage) puis réinstallé ; le registre a été reconstruit, tandis que setupapi garde la trace de l’installation d’origine.
- Un écart d’une heure exactement : un problème de conversion de fuseau horaire — vérifiez le fuseau et la règle d’heure d’été.
- Aucune section setupapi : le journal a tourné ou a été supprimé ; cherchez les archives
setupapi.dev.*.loget les clichés instantanés de volume (Volume Shadow Copies).
Rapportez les deux valeurs. Un outil qui en choisit une en silence masque le seul indice dont vous disposiez sur une réinstallation.
Autres sources d’installation
Les événements UserPnp 20001/20003 du journal System (installation de pilote pour un périphérique) et Kernel-PnP/Configuration 400 fournissent des heures d’installation indépendantes, en UTC. Ils constituent des vérifications croisées utiles lorsque la conversion de setupapi est douteuse. Consultez la carte complète des artefacts USB et l’article sur USBSTOR pour le côté registre.