La procédure d'arrêt ou de redémarrage de Windows est un peu fastidieuse (et longue)
:
Menu "Démarrer", item "Arrêter", puis choix dans
la boite de dialogue "Arrêt de Windows",...
On peut accélérer ce processus en lançant une application particulière pour
laquelel on aura créé un raccourci. Plusieurs méthodes existent :
- (version 32 bits) : rundll32.exe, auquel on passe en paramètre la librairie user32.dll, puis la fonction ExitWindowsEx
- (version 16 bits) : rundll.exe, auquel on passe en paramètre la librairie user.exe, puis la fonction ExitWindows
Exemple : c:\windows\rundll user.exe,ExitWindows
il ne doit y avoir AUCUN espace de part et d'autre de la virgule.
Mais cette astuce ne fonctionne pas toujours, et rundll, qui semble plus conciliant, n'existe pas sous Windows NT.De plus, elle se limite à arrêter Windows, or on peut vouloir redémarrer complètement le PC, ou simplement fermer la session en cours.
C'est pourquoi j'ai conçu une autre librairie 32 bits, nommée exit.dll, qui fonctionne aussi bien sous Windows 9x que Windows NT, et qui admet des paramètres, permettant de choisir le mode d'arrêt ou de redémarrage. Par ailleurs, sa taille est inférieure à 30 ko.
Elle peut être placée dans n'importe quel répertoire (p.ex. c:\util), et est également lancée à l'aide de rundll32. Elle se compose d'une seule fonction nommée exitwin.
La syntaxe de la commande (à placer dans un raccourci, un fichier batch, un programme) est la suivante :
rundll32.exe <répertoire_de_exit.dll>\exit.dll,exitwin <liste de paramètres>
avec :
Exemple récapitulatif :
c:\windows\rundll32.exe c:\util\exit.dll,exitwin reboot F
Le PC redémarrera sans confirmation, avec fermeture éventuelle de toutes les applications, même celles qui ne répondent plus au système.
Cliquez ici pour télécharger (gratuitement) exit.dll ("zippé" en exit.zip)
L'utilisation de rundll me plaisant modérément, surtout en raison de sa syntaxe peu pratique, j'ai conçu WINEXIT.EXE, un exécutable autonome, ayant des fonctionnalités identiques à EXIT.DLL. (j'ai changé le nom pour éviter des confusions de modules binaires)
C'est une application Windows en interface graphique. Au départ, je l'avais conçue en mode console, mais j'ai découvert que l'utilisation de la fonction ExitWindowsEx est INTERDITE sous Windows 9x en mode console (NT4 et Windows 2000 l'acceptent sans problème).
Le lancement de Winexit sans aucun paramètre affiche la fenêtre d'aide
Les paramètres sont les mêmes que pour exitwin.dll (logoff, poweroff, shutdown, force, reboot, ?)
La syntaxe de la commande (à placer dans un raccourci, un fichier batch, un programme) est la suivante :
winexit.exe <liste de paramètres>
Exemple récapitulatif :
d:\outils\winexit.exe reboot F Le PC redémarrera sans confirmation, avec fermeture éventuelle de toutes les applications, même celles qui ne répondent plus au système.
Cliquez ici pour télécharger (gratuitement) winexit.exe ("zippé" en winexit.zip)
Sur un disque, en plus de la création de fichiers (ajouts) on est généralement amené à supprimer, modifier, agrandir un ou plusieurs fichiers. Donc quand on veut écrire quelque chose sur un disque, à moins qu'il soit vierge ou que l'on n'ait JAMAIS effectué de suppressions de fichiers, on va copier les informations là où il y a de l'espace libre. Et comme cet espace peut provenir d'anciens fichiers supprimés, lesquels, à moins d'un très grand hasard, n'ont pas la même taille que le nouveau fichier, ce dernier va être en plusieurs morceaux.
Suivant les systèmes d'exploitation et les systèmes de fichiers, la défragmentation peut être opérée soit en continu (UNIX), soit ponctuellement (à la demande : DOS, Windows).
Et comme un bon dessin vaut mieux qu'un mauvais discours, je vais prendre un exemple :
Soit un disque vierge au départ, dans lequel :
On écrit 2 fichiers, A et B, de 1 ko chacun (pour faire simple) :
<--------------------Le disque------------------> | ||
AAAAAAAA | BBBBBBBB | ................................ |
1k | 1k |
AAAAAAAA | BBBBBBBB | CCCCCCCCCCCCCCCC | ................ |
1k | 1k | 2k |
On veut ensuite modifier A, et le passer à 1.5ko
Or on voit qu'il n'y a pas assez de place, là où est A
2 possibilités :
1) Déplacer TOUS les fichiers B, C derrière A,
de 0.5 ko "vers la droite"
AAAAAAAAAAAA | BBBBBBBB | CCCCCCCCCCCCCCCC | ............ |
1.5k | 1k | 2k |
2) Copier le "restant" du fichier derrière tous les autres, là où c'est libre :
AAAAAAAA | BBBBBBBB | CCCCCCCCCCCCCCCC | AAAA | ........... |
1k | 1k | 2k | .5 |
Opération devenue très classique, retenue par presque tous les systèmes de fichiers, en particulier les FAT. par contre :
Et la fragmentation va se poursuivre :
On supprime le fichier B
AAAAAAAA | ........ | CCCCCCCCCCCCCCCC | AAAA | ............ |
1k | 1k | 2k | .5 |
On crée un fichier D de 2 ko
Le système ne va pas le copier à la fin directement, il va commencer par
regarder s'il n'y a pas de la place libre avant. C'est justement le cas ici,
mais c'est insuffisant. On va obtenir ceci :
AAAAAAAA | DDDDDDDD | CCCCCCCCCCCCCCCC | AAAA | DDDDDDDD | .... |
1k | 1k | 2k | .5 | 1k |
On ramène la taille de C à 0.5ko
AAAAAAAA | DDDDDDDD | CCCC | ............ | AAAA | DDDDDDDD | .... |
1k | 1k | .5 | 1.5k | .5 | 1k |
On passe la taille de A à 2.5 ko
AAAAAAAA | DDDDDDDD | CCCC | AAAAAAAA | .... | AAAA | DDDDDDDD | .... |
1k | 1k | .5 | 1k | .5 | .5 | 1k |
On devine facilement la complexité de l'ensemble !!!
De plus, si on prend le cas du fichier A, on se rend compte qu'il est en 3
zones, le début est au début du disque, puis la suite vers la fin du disque,
et la fin du fichier est au milieu du disque, soit un désordre total!
Le défragmenteur va (p.ex.) commencer par supprimer tous les trous, en les déplaçant et les fusionnant à la fin du disque :
AAAAAAAA | DDDDDDDD | CCCC | AAAAAAAAAAAA | DDDDDDDD | ........ |
1k | 1k | .5 | 1.5k | 1k |
Ensuite, il va prendre les fichiers un par un, voir s'ils sont en plusieurs morceaux, et si oui essayer de les réorganiser :
Exemple :
AAAAAAAA | ........ | CCCC | AAAAAAAAAAAA | DDDDDDDDDDDDDDDD | .... |
1k | 1k | .5 | 1.5k | 2k | .5 |
AAAAAAAA | ............ | AAAAAAAAAAAA | DDDDDDDDDDDDDDDD | CCCC |
1k | 1.5k | 1.5k | 2k | .5 |
AAAAAAAAAAAAAAAAAAAA | ............ | DDDDDDDDDDDDDDDD | CCCC |
2.5k | 1.5k | 2k | .5 |
AAAAAAAAAAAAAAAAAAAA | DDDDDDDDDDDD | ............ | DDDD | CCCC |
2.5k | 1.5k | 1.5k | .5 | .5 |
AAAAAAAAAAAAAAAAAAAA | DDDDDDDDDDDDDDDD | ............ | CCCC |
2.5k | 2k | 1.5k | .5 |
AAAAAAAAAAAAAAAAAAAA | DDDDDDDDDDDDDDDD | CCCC | ........ | CCCC |
2.5k | 2k | .5 | 1k | .5 |
AAAAAAAAAAAAAAAAAAAA | DDDDDDDDDDDDDDDD | CCCCCCCC | ........ |
2.5k | 2k | 1k | 1k |
L'efficacité d'un défragmenteur repose sur l'algorithme utilisé. Certains
peuvent décider de rechercher pour commencer les plus gros fichiers, ou au
contraire les plus petits, de les déplacer temporairement juste à la fin des
fichiers, ou à la fin du disque,...
La défragmentation prendra aussi plus ou
moins de temps suivant la place libre sur le disque : si la place est très
faible, le défragmenteur va devoir s'y prendre à plusieurs reprises pour
déplacer un fichier.
C'est pourquoi il y a intérêt à défragmenter TRÈS RÉGULIÈREMENT (personnellement, je le fais quotidiennement, vers 2h du matin, par programmation automatique), ainsi la défragmentation est rapide (puisqu'il n'y a pas grand chose à faire, et aussi parce qu'il n'y a pas besoin d'une grande zone libre temporaire)
Si on attend trop longtemps, il n'y aura plus assez de place libre temporairement à la fin du disque, et donc le défragmenteur va devoir "ruser" un nombre incalculable de fois! Et on a intérêt à défragmenter, car un fichier fragmenté sera beaucoup plus long à lire ou à écrire, vu que les têtes vont devoir se déplacer à la surface du disque.
Contrairement à une idée reçue (et alimentée au départ par Microsoft
lui-même), NTFS, qui est pourtant un excellent système de
fichiers, fragmente les fichiers.
La preuve : sous Windows 2000, un défragmenteur est désormais livré avec le
système d'exploitation (une version "allégée" de DiskKeeper).
Pour ma part, j'utilise (sous NT4 et Windows 2000) "OO-Defrag" (http://www.oosoft.de/index-e.html)
En conclusion, les seuls cas où défragmenter ne sert à rien sont :
- Quand le disque est neuf
- Quand le disque vient d'être défragmenté! ;+)
- Quand on ne supprime JAMAIS rien sur un disque! ;+)
Le tableau ci-dessous regroupe d'une façon synthétique les clefs les plus couramment utilisées sous Windows. Pour avoir plus de détails, veuillez consulter les liens associés.
Abréviations utilisées: | |
HKCR | HKEY_CLASSES_ROOT |
HKLM | HKEY_LOCAL_MACHINE |
HKCU | HKEY_CURRENT_USER |
HKU | HKEY_USERS |
Clefs |
Rôles |
||
HKCR\CLSID\ | {20D04FE0-3AEA-1069-A2D8-08002B30309D} {645FF040-5081-101B-9F08-00AA002F954E} {208D2C60-3AEA-1069-A2D7-08002B30309D} |
Icônes | Poste de travail Corbeille Voisinage réseau |
HKCR\http\shell\open\command HKCR\http\shell\open\ddeexec\Application HKCR\http\DefaultIcon |
Navigateur Internet par défaut | ||
HKCU\Control Panel\Keyboard | Verrouillage pavé numérique | ||
HKLM\Network\Logon | Authentification via un serveur | ||
HKLM\Software\Microsoft\Windows\CurrentVersion | Dossier applications | ||
HKLM\Software\Microsoft\Windows\CurrentVersion\Run | Applications lancées au démarrage | ||
HKLM\Software\Microsoft\Windows\CurrentVersion\Setup | Lecteur d'installation | ||
HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall | Désinstallation d'applications | ||
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon | Autologon | ||
HKLM\System\CurrentControlSet\Control\Keyboard Layouts\0000040C | Verrouillage majuscules | ||
HKU\.Default\Control Panel\Desktop | Logo de connexion |
Commentaires : Cette clef est utile à connaître. Elle permet de "nettoyer" la liste des applications, affichée dans le panneau de configuration, qui fait encore apparaître certaines applications alors qu'elles ont été supprimées directement sans passer par la procédure de désinstallation.
toutes ces clefs ne sont pas forcément
présentes (cela dépend du système d'exploitation utilisé)
Commentaires : C'est souvent dans l'une de ces clefs que se
"cache" un exécutable plus ou moins indésirable lancé systématiquement au
démarrage de Windows, alors qu'on a rien trouvé dans le groupe/dossier
"Démarrage" ni dans le fichier "win.ini" (entrées "Load="
et "Run=").
C'est le cas par exemple du cheval de Troie "Back
Orifice", dont le lancement est localisé (sous Windows 95/98) dans la
clef :
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
Commentaires : Dans le cas de où l'on a besoin de changer rapidement ces paramètres (tests d'applications multilingues p.ex.), il est intéressant de sauvegarder cette clef dans un fichier .reg (p.ex. "langfr.reg"), puis de faire de même avec d'autres configurations (p.ex. "langen.reg"). Placer alors ces fichiers (ou leurs raccourcis) sur le bureau. Ensuite, un simple click sur l'un d'eux permet de basculer instantanément d'un paramétrage à un autre, sans devoir passer par le panneau de configuration.
La 1ère fois que Windows est lancé s'affiche une boite de dialogue "Le
saviez-vous ?", que, généralement, on s'empresse de désactiver pour
les fois suivantes ! Mais rien ne permet ensuite de rétablir cet affichage.
Pour cela, il suffit d'exécuter le programme welcome.exe, et de cocher
la case "Afficher cet écran d'accueil au démarrage de Windows"
Pour information, la clef correspondante de la base de registres s'appelle
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Tips
entrée "Show", dont la valeur est :
Quand on veut installer une nouvelle application, Windows propose
comme répertoire par défaut :
"c:\program files", "c:" étant la
lettre de la partition contenant Windows.
Même si on peut parfaitement installer l'application n'importe où ailleurs,
cela peut devenir fastidieux de modifier systématiquement cette proposition. On
peut modifier le nom de ce répertoire par défaut, à l'aide de la clef :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
dans laquelle l'entrée de type chaîne "ProgramFilesDir"
contient le chemin par défaut.
Il suffit donc de le remplacer sa valeur par ce que l'on veut (par exemple,
"E:\Mes programmes")
Dans cette clef on trouve également l'entrée de type chaîne "CommonFilesDir",
utilisée par MS Office, Adobe, ... (qui est au départ égale à
"c:\Program Files\Fichiers communs").
On peut la modifier de la même façon.
Il peut y
avoir plusieurs répertoires du style "Program Files" pour y
stocker des applications, par contre il ne doit y avoir qu'un seul répertoire
"...\fichiers communs", sinon il risque d'y avoir des problèmes!
Le répertoire d'installation de Windows est stocké dans :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Setup
dans laquelle l'entrée de type chaîne "SourcePath"
contient généralement la lettre du lecteur de CD ayant servi à installer
Windows. Si on est amené à modifier la lettre affectée au lecteur de CD, il
peut être pratique de modifier la valeur de cette entrée, en indiquant la
nouvelle lettre du CD.
On peut aussi avoir été amené à recopier l'intégralité du CD de
Windows dans un répertoire d'un disque dur (pour des questions
d'autonomie et de souplesse de (ré)installation). Dans ce cas, l'entrée SourcePath
contiendra le nom de ce répertoire.
Ce qui suit n'a pas d'intérêt vital, mais permet de donner un peu de fantaisie à votre système !
La manipulation décrite permet d'afficher une image et des informations personnalisées dans l'onglet "Général" du panneau de configuration "Système" : (ici sous Windows NT4 et Windows XP, mais tout ceci est valable également sous Windows 9x/ME et Windows 2000)
Quand on appuie sur le bouton "Informations de support technique", la boite de dialogue suivante s'affiche : | |
En fonction du système d'exploitation utilisé, il suffit de créer dans le répertoire :
Le nombre de lignes affichées dans la deuxième boite de dialogue n'est
pas limité. Il suffit de définir autant de clefs "Linenn"
qu'il y a effectivement de lignes (lignes blanches comprises).
Après avoir lancé l'aide de Windows 9x ou Windows NT (menu Démarre), et essayé d'ouvrir l'onglet de recherche, on reçoit le message d'erreur suivant:
Impossible d'afficher l'onglet Chercher (177)
On peut être amené à devoir remplacer un ou plusieurs fichiers (DLL, EXE, ...) alors qu'ils sont en cours d'utilisation, ce qui rend impossible toute manipulation habituelle (commande copy, opérations dans l'explorer,...). Il est existe néanmoins une méthode pour le faire, propre à chaque système d'exploitation.
Il suffit d'utiliser dans un programme la fonction "MoveFileEx" (dans kernel32.dll), avec le commutateur MOVEFILE_DELAY_UNTIL_REBOOT. Cette fonction, une fois exécutée, se contente de modifier ou créer dans la clef :
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager
l'entrée PendingFileRenameOperation (de type REG_MULTI_SZ), laquelle va contenir les opérations à effectuer lors du redémarrage suivant.Si la programmation en C rebute certains, il existe un tout petit utilitaire en mode console, FREEWARE, nommé "MOVEEX", disponible ici, qui fait cela très bien !
En voici la source :
Sa syntaxe est très simple :
Dans une fenêtre de commande (ou depuis le menu Démarrer/Exécuter), taper la commande suivante :moveex <source> <destination>
Déplace (et renomme) <source> en <destination> l'opération ayant lieu lors du prochain redémarrage.
Fonctionne seulement sous Windows NT et avec des disques locaux!
Avec des partitions NTFS, le compte SYSTEM doit avoir le droit 'Controle total' sur les fichiers en question!Exemples:
moveex c:\temp\nouvelle_gina.dll c:\winnt\system32\nwgina.dll
Déplace la librairie c:\temp\nouvelle_gina.dll dans le répertoire c:\winnt\system32 et la renomme en nwgina.dll .
S'il existe déja un fichier de ce nom dans c:\winnt\system32, il sera remplacé par le nouveau.moveex test.dll c:\temp
Syntaxe incorrecte : La destination doit être un nom de fichier
moveex c:\test.dll d:\test.dll
Syntaxe incorrecte : On ne peut pas mélanger plusieurs disques
Pour annuler une opération de renommage avant que le système soit redémarré, i lsuffit de modifier ou supprimer l'entrée PendingFileRenameOperation dans la clef HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager
Téléchargement de "MOVEEX" :
Source (en C) (4 ko)
Exécutable (40 ko)
On ne peut pas utiliser la solution précédente, car la fonction "MoveFileEx" n'existe pas dans l'environnement Windows 9x/ME.
On va par contre se servir de WININIT, qui est un utilitaire système prévu pour cela. Ce programme, lancé au démarrage de Windows (avant chargement de l'interface graphique) vient lire le contenu du fichier wininit.ini (section "[rename]")
La syntaxe de chaque ligne de cette section est :
<nouvelle destination>=<origine>Exemple :
[rename]
NUL=C:\TEMP.TXT
C:\NEW_DIR\EXISTING.TXT=C:\EXISTING.TXT
C:\NEW_DIR\NEWNAME.TXT=C:\OLDNAME.TXT
C:\EXISTING.TXT=C:\TEMP\NEWFILE.TXT
La 1ère ligne entraîne la suppression de Temp.txt.
La 2ème déplace Existing.txt vers un nouveau répertoire.
La 3ème déplace Oldname.txt vers le nouveau répertoire et le renomme.
La 4ème déplace et renomme Newfile.txt , qui va d'ailleurs écraser un fichier existant (Existing.txt)Les applications ne doivent pas utiliser la fonction WritePrivateProfileString() pour écrire les entrée de la section [rename], car plusieurs lignes peuvent désigner la même destination en particulier "NUL".
Une application qui utilise Wininit.ini doit vérifier son existence au préalable dans le répertoire de Windows. Si c'est le cas, cela signifie qu'une autre application en a eu besoin. S'il n'est pas trouvé, l'application devra le créer, ajouter la section [rename] et toutes les entrées nécessaires.
Pour annuler une opération de renommage avant que le système soit redémarré, il suffit de supprimer la ou les lignes correspondantes dans le fichier wininit.ini.
Les produits Microsoft (Systèmes d'exploitation, logiciels bureautique,...) ont une durée de vie limitée. En particulier, à partir d'une certaine date plus aucun support n'est disponible. Voici une liste relative aux systèmes d'exploitation et principaux autres logiciels (d'après http://support.microsoft.com/DIRECTORY/DISCONTINUE.ASP) :
Logiciel |
Date de fin |
Produit de remplacement | |
annoncée |
réelle |
||
DOS 1.x à 6.22 | 01/12/2000 | 31/12/2001 | Windows 2000 Pro / ME |
Win32s | 01/05/2000 | 01/11/2000 | Windows 2000 Pro / ME |
Windows 1.x à 3.11 | 01/12/2000 | 31/12/2001 | Windows 2000 Pro / ME |
Windows 95 | 04/08/2000 | 31/12/2001 | Windows 2000 Pro / ME |
Windows 98 | 01/02/2001 | 30/06/2003 | Windows 2000 Pro / ME |
Windows 98 SE | 01/02/2001 | 30/06/2003 | Windows 2000 Pro / ME |
Windows NT 4.0 Workstation | 01/02/2001 | 30/06/2003 | Windows 2000 Pro / ME |
Site Server Entreprise 2.0 | 01/08/2000 | 01/02/2001 | Site Server Commerce 3.0 |
Access 1.x | 01/01/1999 | 01/07/1999 | Access 2000 |
Access 2.x | 01/05/2000 | 01/11/2000 | Access 2000 |
Excel 4.x à 5.x | 01/05/2000 | 01/11/2000 | Excel 2000 |
PowerPoint 2.x à 4.x | 01/05/2000 | 01/11/2000 | PowerPoint 2000 |
Word 1.x | 01/01/1999 | 01/07/1999 | Word 2000 |
Word 2.x | 01/05/2000 | 01/11/2000 | Word 2000 |
FrontPage 1.x à 2.x | 01/05/2000 | 01/11/2000 | FrontPage 2000 |
Project 1.0 à 4.0 | 01/05/2000 | 01/11/2000 | Project 2000 |
FoxPro 2.5 et 2.6 | 01/01/1999 | 01/07/1999 | Visual FoxPro (6.0) |
Internet Explorer 1.x à 2.x | 01/12/2000 | 01/06/2001 | IE 5.5 |
C/C++ 7.0 | 01/01/1999 | 01/07/1999 | Visual C++ (6.0) |
Quick C | 01/01/1999 | 01/07/1999 | Visual C++ (6.0) |
Visual Basic 1.à à 3.0 | 01/01/1999 | 01/07/1999 | Visual Basic (6.0) |
Cobol | 01/01/1999 | 01/07/1999 | cf. produits tiers |
Fortran | 01/01/1999 | 01/07/1999 | cf. produits tiers |
MASM 6.0 | 01/01/1999 | 01/07/1999 | cf. produits tiers |
Pascal | 01/01/1999 | 01/07/1999 | cf. produits tiers |
Il est peut s'avérer utile de modifier la base de registres en ligne de commande (et non pas via l'interface graphique de REGEDIT), cela essentiellement pour incorporer cette commande dans un fichier batch (.bat ou .cmd sous NT/W2K/XP), ou encore pour l'exécuter depuis un raccourci posé sur le bureau.
Pour cela, il suffit de lui passer en paramètre à REGEDIT un fichier ayant l'extension .reg
La syntaxe est la suivante :
REGEDIT [/s] <nom_de_fichier.reg>
Le commutateur facultatif /s permet un fonctionnement en mode
silencieux, c'est à dire sans apparition de la boite de dialogue de
confirmation (ce mode est nécessaire dans le cas d'utilisation d'un fichier
batch) :
|
La première ligne du fichier est :
Type ANSI | REGEDIT4 |
Type UNICODE | Windows Registry Editor Version 5.00 |
Elle est suivie d'une ligne vide, puis des lignes propres à chaque clef à ajouter, modifier ou supprimer.
Pour ajouter ou modifier une clef :
On insère le nom complet de la clef, encadré par des crochets : [ et ].
Exemple :
REGEDIT4
[HKEY_CLASSES_ROOT\htmlfile\shell\open\command]
Pour ajouter ou modifier une entrée dans une clef :
On insère à la suite du nom de la clef une ligne de la forme :
<nom_de_l'entrée>=<valeur_de_l'entrée>
On encadre le nom de l'entrée par des guillemets " ", sauf si l'entrée concernée est l'entrée par défaut. Dans ce cas , le nom est symbolisé par le caractère @ (sans guillemets)
Exemple :
REGEDIT4
[HKEY_CLASSES_ROOT\.html]
@="htmlfile"
"Content Type"="text/html"
La valeur d'une entrée peut être de 3 types :
- REG_SZ (chaîne de caractères)
La chaîne doit être encadrée par des guillemets.
Le caractère \ est un caractère d'échappement. C'est pourquoi il faut le doubler si on doit l'insérer dans la chaîne (cas fréquent quand la valeur est un nom de fichier). Ce caractère sert aussi à insérer des guillemets dans la chaîne. Ainsi un guillemet sera représenté par la séquence \"
Exemple :
@="\"D:\\Program Files\\Internet Explorer\\iexplore.exe\" -nohome"
- REG_DWORD (mot binaire de 4 octets)
La valeur exprimée en hexadécimal doit être précédée du mot-clef dword suivi de 2 points :
Exemple :
"InstallDate"=dword:3a020c30
- REG_BINARY (donnée binaire de longueur quelconque)
La valeur est exprimée sous la forme d'une suite d'octets exprimés en hexadécimal, séparés par des virgules, le premier étant précédé du mot-clef hex suivi de deux points :
Si la ligne est trop grande, on peut la couper à l'aide du caractère \, qui indique que la valeur se continue sur la ligne suivante.
Exemple :
"DigitalProductId"=hex:a4,00,00,00,03,00,00,00,35,32,33,34,30,2d,30,30,35,2d,\
30,30,34,30,31,30,32,2d,30,35,34,30,31,00,0a,00,00,00,41,32,32,2d,30,30,30,\
...
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,43,19,d1,3a
- Sous Windows NT/W2K/XP, les valeurs de type :
doivent être exprimées sous la forme de valeurs binaires (hex:...)
- REG_EXPAND_SZ (chaîne contenant le nom d'une variable d'environnement)
- REG_MULTI_SZ (plusieurs chaînes à la suite)
Pour supprimer une clef
Il suffit de faire précéder le nom de la clef à supprimer du signe - (moins)
Exemple :
Suppression de la clef HKEY_LOCAL_MACHINE\SOFTWARE\jcb
REGEDIT4
[-HKEY_LOCAL_MACHINE\SOFTWARE\jcb]
Pour supprimer une entrée
Il suffit de faire suivre le signe "=" (après le nom de l'entrée) du signe - (moins)
Exemple :
Dans la clef HKey_Current_User\Software\Policies\Microsoft\Internet Explorer\Control Panel
suppression de l'entrée de nom "Home Page"
(pour information, c'est cette entrée qui interdit de modifier la page d'accueil de I.E.)
REGEDIT4
[HKey_Current_User\Software\Policies\Microsoft\Internet Explorer\Control Panel]
"Home Page"=-
Pour renommer une clef
Rien n'est prévu pour le faire en ligne de commande.
Le seul moyen de base est d'effectuer cette opération depuis l'interface graphique de REGEDITAfin de pallier ce manque, j'ai conçu un utilitaire : RenameReg.exe
Renommage de clef dans la Base de registres
JCB © 2003
http://www.bellamyjc.net
-------------------------------------------
Syntaxe
RenameReg <ancienne> <nouvelle>
Paramètres
<ancienne> : Nom complet de la clef à renommer
<nouvelle> : Nouveau nom de la clef à renommer (partie finale uniquement)
Dans le nom complet, les racines autorisées sont :
HKEY_CLASSES_ROOT (ou HKCR)
HKEY_LOCAL_MACHINE (ou HKLM)
HKEY_CURRENT_USER (ou HKCU)
HKEY_USERS (ou HKU )
La clef à renommer doit exister
Le nouveau nom peut ne pas exister
Exemples :
----------
RenameReg HKEY_LOCAL_MACHINE\software\test essai
la clef "HKEY_LOCAL_MACHINE\software\test" sera renommée en
"HKEY_LOCAL_MACHINE\software\essai"
RenameReg HKCU\mykey ma clef
la clef "HKEY_CURRENT_USER\mykey" sera renommée en
"HKEY_CURRENT_USER\ma clef"
Télechargement de (48 ko - gratuit)
Un fichier .reg doit se terminer par une ligne vide.
Il est possible également d'exporter un fichier .reg depuis la
base de registres à l'aide de REGEDIT en ligne de commande.
La syntaxe est la suivante :
REGEDIT [/e] <nom_de_fichier.reg> [clef_à_exporter]
Exemple :
Exportation du contenu de HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
dans le fichier ccs.reg :
regedit /e css.reg HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet
Un répertoire est un fichier, constitué d'entrées de 32 octets chacune, servant à définir un fichier ou un autre répertoire. Au départ, un fichier était nommé à l'aide de 8+3 caractères, si bien que ces 32 octets étaient suffisants pour stocker le nom du fichier (11 octets), ses attributs ("D", "R", "H", "S", "A", sur 1 octet), sa taille (4 octets, ou 32 bits, donc valeur limitée à 2^32 octets), sa date de création (2 octets), le n° du 1er cluster (4 octets), ...
Avec l'arrivée des "noms longs", apparus avec Windows 95 (exception faite de Windows NT, utilisant un autre système), pouvant atteindre 255 caractères, il est évident que cette structure s'est avérée insuffisante, mais dans un but de compatibilité, il fallait aussi préserver l'ancien système.
On a donc, pour un fichier donné, la disposition suivante :
Données
nom courtTaille
(octets)Remarques
Nom de fichier 8 Extension 3 Attributs 1 N° de bit Signification 7 réservé 6 réservé 5 archive 4 sous-répertoire 3 nom de volume 2 fichier système 1 fichier caché 0 fichier lecture seule Reservé 10 Heure 2 Date 2 1er cluster 2 Taille 4 Total 32
Données
nom longTaille
(octets)Remarques
N° d'entrée 1 Nom de fichier 10 UNICODE =5 caractères Attributs 1 toujours 0x0F Checksum 2 Suite nom 12 UNICODE =6 caractères Réservé 2 Suite nom 4 UNICODE =2 caractères Total 32
Une entrée de nom long peut donc contenir au maximum 5+6+2 = 13 caractères
Un nom long sera défini sous la forme de PLUSIEURS entrées supplémentaires,
qui vont PRÉCÉDER l'entrée PRINCIPALE (= celle qui contient le nom
court).
L'ordre a énormément d'importance!
En particulier, il ne faut surtout pas utiliser un outil de TRI de noms
de fichiers dans un répertoire (je pense à l'antique "DS" -
Directory Sort - des Norton Utilities des années 1985, qui était très
pratique et rapide au demeurant!). Si on exécute un tel outil, c'est le
désordre assuré dans le répertoire!
Par ailleurs, le nom long est exclusivement représenté en UNICODE (2
octets par caractère).
Le 1er octet de l'entrée indique le n° d'ordre de l'entrée
(0x01, 0x02, ...), la dernière entrée se voyant le bit 6 mis à
1 (p.ex. 0x42 au lieu de 0x02)
Exemple :
Soit le fichier de nom : "La connaissance s'accroit quand on la
partage.txt"
49 caractères au total => il faudra 4 entrées de nom long,
52=4x13 étant l'entier multiple de 13 immédiatement supérieur à 49.
Windows a déterminé comme nom court : "LACONN~1.TXT"
Pour cela, il prend les 6 1ers caractères en éliminant tout ce qui
n'est pas lettre ou chiffre (espace p.ex.), convertit en majuscule, ajoute le
caractère tilde "~" , puis un chiffre (en fonction de ce qui
existe déjà comme nom de fichier), et enfin rajoute la dernière extension (si
elle existe)
Dans le répertoire contenant ce fichier, on trouve ceci :
00000100 44 61 00 72 00 74 00 61 00 67 00 0F 00 8C 65 00 Da.r.t.a.g....e. 00000110 2E 00 74 00 78 00 74 00 00 00 00 00 FF FF FF FF ..t.x.t.........
00000120 03 71 00 75 00 61 00 6E 00 64 00 0F 00 8C 20 00 .q.u.a.n.d.... . 00000130 6F 00 6E 00 20 00 6C 00 61 00 00 00 20 00 70 00 o.n. .l.a... .p.
00000140 02 63 00 65 00 20 00 73 00 27 00 0F 00 8C 61 00 .c.e. .s.'....a. 00000150 63 00 63 00 72 00 6F 00 69 00 00 00 74 00 20 00 c.c.r.o.i...t. .
00000160 01 4C 00 61 00 20 00 63 00 6F 00 0F 00 8C 6E 00 .L.a. .c.o....n. 00000170 6E 00 61 00 69 00 73 00 73 00 00 00 61 00 6E 00 n.a.i.s.s...a.n.
00000180 4C 41 43 4F 4E 4E 7E 31 54 58 54 20 00 27 25 8C LACONN~1TXT .'%. 00000190 26 2A 26 2A 00 00 45 8C 26 2A FC 0A 33 00 00 00 &*&*..E.&*..3...
Il y a 5 entrées au total (4 entrées de nom long + 1 entrée de nom court) :
Commentaire personnel : on aurait pu faire plus simple !!!!! ;+)
Il existe (ou existait!) dans le CD de Windows NT4 deux outils entièrement autonomes (et très peu connus!) effectuant des tests de configuration matérielle (SCSI compris). Ils se présentent sous la forme de deux disquettes DOS 6.22 avec une version réduite de Windows 3.1.
Or ces outils n'ont pas été reconduits dans les versions postérieures de NT4 (2000, XP), et c'est fort dommage!
C'est pourquoi j'ai décidé de les mettre à disposition ici, sous la forme d'un fichier autoextractible hardtest.exe (2447 ko). Il suffit d'exécuter ce programme (sous DOS, Windows 9X, NT, 2000, XP) puis d'exécuter le script MAKEDISK.BAT (son lancement est proposé automatiquement si la décompression de hardtest.exe a lieu sous Windows). Il faut prévoir 2 disquettes de 1.44Mo (formatées ou non, vierges ou non).
Ensuite il faut rebooter le PC avec l'une ou l'autre de ces disquettes, Windows 3 va alors se lancer, et les diagnostics vont se dérouler.
Cliquer ici pour télécharger hardtest.exe (2447 ko).
Il est possible d'adjoindre aux ordinateurs portables un pavé numérique externe (connecté généralement sur un port USB). |
Cet accessoire est destiné à permettre une frappe rapide des touches numériques, au lieu de les chercher sur le clavier principal. |
Le problème rencontré avec ce système est que lors d'un verrouillage numérique, les touches du clavier principal sont également basculées en mode numérique. | |||||||||||||
Ainsi il devient impossible (sans désactiver le verrouillage numérique) de saisir les caractères suivants : |
|
Quelques constructeurs d'ordinateurs (Compaq, NEC) ont mis à disposition des utilitaires destinés à modifier ce comportement, mais ils fonctionnent mal et surtout sont liés à un type de matériel.
J'ai conçu un logiciel qui corrige cette anomalie : KNumLock.
Il fonctionne sous tout système Windows 32 bits (Windows 95,98, ME, NT4, 2000,
XP,2003)
(Il a été écrit sous Delphi 6)
Quand il est actif, il force le mode numérique uniquement sur le pavé
numérique externe (sans avoir à actionner la touche de
verrouillage numérique). Ainsi les touches U, I, O, P, J, K, L, M, ? , /, ! ...,
sont toujours disponibles en tant que telles.
Son principe repose sur l'utilisation d'un "hook" de type WH_GETMESSAGE,
qui intercepte (avant traitement par l'application destinataire) tous les
messages claviers, et modifie en conséquence uniquement ceux provenant du pavé
numérique externe, qui sont ensuite transmis à l'application.
Comme ce "hook" concerne toutes les applications en cours d'exécution, il
est installé dans une bibliothèque distincte du logiciel lui-même (DLL "libmsg.dll")
KNUMLOCK apparaît sous la forme d'une icône dans le "System Tray" :
Un clic droit sur l'icône fait apparaître un menu permettant de verrouiller ou
déverrouiller le pavé numérique, ou encore de quitter le logiciel (dans ce
dernier cas, le fonctionnement du verrouillage de clavier numérique redevient
habituel).
KNUMLOCK ne nécessite aucun redémarrage, il est opérationnel dès qu'on
l'exécute.
Son installation est réalisée automatiquement à partir d'un exécutable :
instknl.exe
Aucune modification n'est
effectuée dans la Base de Registres (sauf la clef pour sa désinstallation de
l'ordinateur)
Aucun fichier (dll,..) n'est placé dans l'arborescence Windows.
Ce logiciel est entièrement gratuit
Cliquer ici pour télécharger INSTKNL.EXE (373 ko) (version bilingue français/anglais)
Je remercie au passage Michel
Bardou et son site consacré à
Delphi , en particulier son composant "PIconeBarreTache"
dont je me suis servi dans mon logiciel.
Pour les développeurs : cliquer pour télécharger ici les sources du programme (exécutable et DLL)
On peut être amené à modifier le mode graphique (essentiellement la résolution horizontale et verticale) pour diverses raisons (application prévue pour une résolution donnée, exécution de jeux, ...)
Le problème est que cette simple opération nécessite l'utilisation de l'interface graphique (panneau de configuration affichage) ou au mieux l'action sur une icône placée dans le "System Tray" ("quickres" des Powertoys, utilitaire de certains fabricants de cartes graphiques,..), et donc ne peut pas être automatisée.
J'ai conçu "SETVIDEO", un outil en mode console, qui se lance donc en ligne de commande (depuis le menu Exécuter, dans une fenêtre de commandes, ou encore dans un fichier de commandes .bat ou .cmd)
La syntaxe est la suivante :
c:\>Setvideo
(sans paramètre)Exemple :
Carte graphique Matrox Marvel G450 eTV - Français
134 modes graphiques disponibles :
8 bits 320 x 200 74 Hz
8 bits 320 x 200 85 Hz
8 bits 320 x 240 63 Hz
8 bits 320 x 240 85 Hz
...
32 bits 1152 x 864 85 Hz
...
32 bits 1280 x 1024 75 Hz
32 bits 1280 x 1024 85 Hz
32 bits 1600 x 1200 60 Hz
32 bits 1600 x 1200 65 Hz
32 bits 1600 x 1200 70 HzAffiche la liste de tous les modes graphiques disponibles de la carte graphique, avec pour chaque mode :
- Nombre de bits par pixel
- Résolution horizontale
- Résolution verticale
- Fréquence de rafraîchissement verticale
Cette liste est suivie d'une aide en ligne.
c:\>Setvideo x=aaaa y=bbbb b=cc f=ddExemple :
c:\>Setvideo x=1280 y=1024 b=32 f=85
Modification du mode graphique.
4 paramètres doivent être passés :
- x=... résolution horizontale en pixels
- y=... résolution verticale en pixels
- b=... nombre de bits par pixels
- f=... fréquence verticale en Hertz
Un contrôle de validité des paramètres est effectué. Si au moins l'un d'entre eux est manquant, ou si la configuration demandée n'est pas supportée par la carte, un message d'erreur sera affiché :
C:\>setvideo x=1024 y=768
paramètre b omis
paramètre f omis
C:\>setvideo x=1600 y=1200 b=32 f=85
Mode incompatible avec le matériel
S'il n'y a pas d'erreur, le nouveau mode graphique est immédiatement appliqué
Cet outil a été testé avec succès sous les systèmes d'exploitation suivants :
L'information de fréquence de rafraîchissement peut être inconsistante sous Windows 98 et ME, en affichant une valeur de 0 Hz. Cela correspond au taux de rafraîchissement par défaut de la carte graphique. Il faut néanmoins l'indiquer dans la commande de modification (setvideo x=1024 y=768 b=16 f=0).
SETVIDEO ne nécessite aucune installation. Il est autonome et directement opérationnel.
Ce logiciel est entièrement gratuit.
Cliquer ici pour télécharger SETVIDEO.EXE (134 ko)
(Il a été écrit en Delphi)
Avertissement au lecteur : L'exposé qui suit ne décrit nullement la façon de créer des clefs "pirates" d'installation de produits Microsoft !
Il a simplement pour but de :
- montrer où et comment sont stockées ces clefs dans la Base de registres.
- retrouver facilement ces clefs en cas d'oubli, et permettre ainsi la réinstallation du logiciel.
- expliquer certains mécanismes algorithmiques.
Cette partie de Windows n'est pas documentée par Microsoft !
Afin de garantir (en principe) leur authenticité, les logiciels Microsoft
(Systèmes d'exploitation, applications bureautique, ...) nécessitent lors de
leur installation la saisie
d'une clef (fournie avec le support matériel) .
Les structures de ces clefs ont évolué au cours du temps.
On distingue essentiellement 2 types d'authentification de logiciels :
Jusqu'à Windows 95 (1995), Windows NT4 (1996), Office 97 (1997), ... cette
clef est unique, composée de 10 chiffres décimaux.
Cette clef est de la forme : xxx-xxxxxxx
Avec x = [0,1,2,3,4,5,6,7,8,9]
le 1er
groupe de 3 caractères peut être parfois constitué de la chaine OEM
Le nombre maximal théorique de clefs est donc égal à 10^10 -1
Par exemple : 335-3353356 (suggérée pour les produits MSDN
requérant ce genre de clef)
Le 1er nombre de 3 chiffres peut être quelconque, le 2ème est tel
que la somme de ses 7 chiffres doit être un multiple de 7.
Par exemple : 3 + 3 +5 + 3 + 3 + 5 + 6 = 28 (= 7 x 4)
On pourrait choisir aussi 0016077, 0005754, 7654321, 1111111, ...
: dans le cas de licences OEM
(logiciels préinstallés par le fabricant de l'ordinateur), le 1er nombre de 3 chiffres est remplacé par
la chaine alphanumérique "OEM".
Par exemple OEM-0016077
La clef xxx-xxxxxxx constitue la partie centrale d'un ensemble de 4 nombres xxxxx-xxx-xxxxxxx-xxxxx, appelé "ProductID" (identificateur de produit).
Le ProductID est stocké en clair dans la Base de registres dans une entrée de type REG_SZ :
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductID
Dans le ProductID, la clef (3+7) est encadré par 2 nombres de 5 chiffres :
50376 Windows NT4 SRV
52338 Windows 2000 PRO
52340 Windows 2000 SRV
55639 Windows XP HOME
55711 Windows XP PRO
76413 Windows XP Media Center Edition
69891 Windows 2003
On retrouve ce nombre à l'identique dans le fichier x:\i386\SETUPP.INI du CD
d'installation
Cas d'un CD XP PRO
:
[Pid] |
Le système utilisé précédemment ne présentait aucune protection contre la
copie illicite de logiciels, en raison de la simplicité triviale de
l'algorithme de génération de clefs.
Avec la sortie de Windows 98 (1998) puis Windows 2000 (2000), Microsoft a
complexifié le mécanisme de saisie de clef.
Désormais l'utilisateur doit être en possession d'une clef constitué de 25
caractères alphanumériques appelée "ProductKey" (clef de produit).
Cette clef est de la forme : xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
Avec x =
[B,C,D,F,G,H,J,K,M,P,Q,R,T,V,W,X,Y,2,3,4,6,7,8,9]
Le nombre maximal théorique de
clefs est donc égal à 24^25-1, soit environ 3,2 10^34.
(3 10^24 fois plus qu'avec le système précédent !)
Par exemple : FCKGW-RHQQ2-YXRKT-8TG6W-2B7Q8
Pour information,
cette clef - à ne surtout pas utiliser
! - est la plus célèbre des clefs
"pirates" de Windows XP PRO Corporate, apparue lors du lancement de
Windows XP en 2001.
On peut s'interroger sur ce jeu de caractères utilisé.
Il comporte 24 éléments, ce qui signifie tout simplement que l'on est en
présence de nombres représentés en base 24.
D'où cette mixité de lettres et chiffres (comme c'est déjà le cas pour la
représentation conventionnelle de nombre exprimés en base hexadécimale).
Il fallait donc choisir 24 caractères parmi les 26 lettres de l'alphabet
et 10 chiffres.
Afin d'éviter toute confusion entre lettres et chiffres,
Microsoft n'a pas retenu les lettres et chiffres suivants :
Par contre, il est regrettable que Microsoft ait laissé possible la confusion entre B et 8 .
Les chiffres de cette base 24 correspondent aux valeurs décimales suivantes :
B = 0 Q = 10 6 = 20 Puissances de 24
C = 1 R = 11 7 = 21 24^1 24 D = 2 T = 12 8 = 22 24^2 576 F = 3 V = 13 9 = 23 24^3 13824 G = 4 W = 14 24^4 331776 H = 5 X = 15 24^5 7962624 J = 6 Y = 16 ... ... K = 7 2 = 17 M = 8 3 = 18 P = 9 4 = 19
Exemples : 2B7Q8 est le codage en base 24 de :
2 = 17 x 24^4 5640192 B = 0 x 24^3 0 7 = 21 x 24^2 12096 Q = 10 x 24^1 240 8 = 22 x 24^0 22 5652550 (en hexadécimal : 0x564046) Inversement, le codage en base 24 de 2005 (en décimal) est :
2005 / 24 = 83 reste 13 V 83 / 24 = 3 reste 11 R 3 / 24 = 0 reste 3 F FRV
Contrairement au ProductID, il n'existe pas dans la base de registres d'entrée contenant en clair (5 fois 5 caractères) la clef de produit (ProductKey).
On trouve seulement une entrée nommée DigitalProductID de type REG_BINARY.
Cette entrée concerne Windows, mais aussi des applications telles
que
Office, Visio, FrontPage,
OneNote, Money, Internet Explorer ...
Sa taille est de 164 octets en général, mais peut atteindre parfois (cas
de Internet Explorer) 256 octets.
Windows HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductID Office 2003 HKLM\SOFTWARE\Microsoft\Office\11.0\Registration\{9011040C-6000-11D3-8CFE-0150048383C9}\DigitalProductID FrontPage 2003 HKLM\SOFTWARE\Microsoft\Office\11.0\Registration\{9017040C-6000-11D3-8CFE-0150048383C9}\DigitalProductID Visio 2003 HKLM\SOFTWARE\Microsoft\Office\11.0\Registration\{9051040C-6000-11D3-8CFE-0150048383C9}\DigitalProductID One Note 2003 HKLM\SOFTWARE\Microsoft\Office\11.0\Registration\{90A1040C-6000-11D3-8CFE-0150048383C9}\DigitalProductID Money 12 HKLM\SOFTWARE\Microsoft\Money\12.0\Registration\DigitalProductID Internet Explorer HKLM\SOFTWARE\Microsoft\Internet Explorer\Registration\DigitalProductID Le nombre maximal que l'on peut coder est donc 24^25 -1 (nombre de 25 chiffres compris entre 0 et 23), soit 3,2 x 10^34 comme cité plus haut.
Exprimé en puissances de 16, ce nombre est de l'ordre de 16^29.
Donc pour le représenter en base 16, il faudra 29 "chiffres" hexadécimaux, soit, après arrondi, 15 octets (1 octet étant représenté par 2 chiffres hexadécimaux).
Cette représentation binaire de la ProductKey est appelée "Raw Key" (clef brute)
C'est ce que l'on observe dans toutes entrées DigitalProductID,
la Raw Key étant stockée sur 15 octets, entre les offsets 0x34 à 0x42.Ne pas oublier que dans les architectures "Intel" (et compatible), les grandeurs binaires sont représentées en "Little Endian", c'est à dire que les octets de poids faibles sont en tête.
Dans l'exemple ci-contre, la Raw Key est le nombre (en hexadécimal) 03D3FC979F6BA773C899DEA7EF6380
On peut être amené à réinstaller des logiciels Microsoft (Windows,
Office,..)
Pour cela il faut ressaisir la ProductKey au cours de la procédure
d'installation.
Or cette clef étant souvent fournie sous la forme d'un autocollant posé sur
l'emballage, il arrive fréquemment que l'on ait perdu cette clef.
D'où l'intérêt de pouvoir obtenir la ProductKey en clair, par conversion de la "RAW key" en nombre exprimé en base24.
En raison de la grandeur des nombres rencontrés, cette conversion ne peut se
faire que par programmation.
Avec de possibles variantes, l'algorithme est toujours le même :
- On effectue une division euclidienne du nombre par 24.
- Le reste obtenu est le chiffre en base 24 des unités.
- Puis on recommence la division euclidienne sur le quotient,
et ainsi de suite, jusqu'à ce que le quotient soit nul.- Chaque reste est un chiffre de poids de plus en plus fort.
Exemple :
Conversion de 7D5 (représentation hexadécimale de 2005) en base 24
(18 est la représentation hexadécimale de 24)
7D5 = 53 x 18 + 0D V 53 = 3 x 18 + 0B R 3 = 0 x 18 + 03 F FRV
Il existe différents outils qui effectuent cette conversion :
- Le 1er de cette catégorie fut le logiciel Aida32.
Mais c'est devenu un produit commercial (Everest)
Et seules les versions payantes donnent les "ProductKey".
- WinfoKeys (Gratuit ) de Pierre TORRIS ,
qui donne par ailleurs un grand nombre d'informations.
- KeyFinder (Gratuit )
qui est spécialement dédié à cet usage.
- ViewPK (Gratuit)
script WSF de ma conception.
Il est doté de nombreuses fonctionnalités :
- Affichage de la ProductKey de Windows
- Recherche automatique de toutes les clefs DigitalProductID
(Office, FrontPage, Money, Visio,...)- Fonctionnement sur ordinateur local ou distant !
- Affichage de la RAWKey
- Calcul et affichage du ProductID
- Calcul du ProductID à partir de n'importe quelle ProductKey
En raison de l'absence de toute documentation de la part de Microsoft, ces informations sont susceptibles d'évoluer au fur et à mesure des expérimentations effectuées.
Malgré la présence de la ProductKey, le ProductID subsiste toujours car c'est lui qui permet à Microsoft de détecter la provenance authentique ou frauduleuse du logiciel correspondant.
C'est ainsi que le Service Pack 1 (et suivants) de Windows XP refuse de s'installer sur les machines dotées dont le ProductID est de la forme :
- XXXXX-640-0000356-23XXX
- XXXXX-640-2001765-23XXX
car il dénote l'utilisation de clefs "pirates" de Windows XP PRO Corporate (licence en volume, qui ne nécessite pas d'activation, réservée aux professionnels).
Cette information est extraite du document Microsoft Technical Details on SP1 Changes to Microsoft Product Activation for Windows XP.
Lors de la sortie du SP1 (2002), ce document était disponible sur le site Microsoft à l'adresse http://www.microsoft.com/piracy/basics/activation/WPA_SP1_Market_Bulletin.doc mais il a disparu du site.C'est par un procédé analogue que WGA (Windows Genuine Advantage) autorise ou non les téléchargements (hors correctifs de sécurité) depuis le site Windows Update. (via le contrôle ActiveX LegitCheckControl.dll)
Alors que le ProductID était autrefois saisi manuellement par
l'utilisateur, et constituait le seul identificateur du produit, il est
à présent dérivé de la ProductKey, par un algorithme (hachage)
relativement complexe.
Microsoft ne fait qu'évoquer cet algorithme dans le
document cité précédemment.
Il est contenu dans la DLL PIDgen.dll (située dans
%systemroot%\system32) (PIDgen = acronyme de Product Identifier
Generator)
On peut néanmoins trouver des informations très pertinentes à ce sujet dans le
document
Inside Windows Product Activation dû à la Compagnie
Licenturion spécialisée dans les solutions de protections de logiciels.
L'algorithme ProductID=f(ProductKey) dépend du produit (Windows, Suite Office, Money, ...)
Ce qui suit ne concerne que Windows :
Opérations Exemples Il faut tout d'abord convertir la ProductKey
(5 fois 5 caractères) en RAWkey binaire
comme exposé précédemmentFCKGW-RHQQ2-YXRKT-8TG6W-2B7Q8
->
00C8D5F1B880E1C0EC45F9CC4B4046
(big endian)Puis retenir les 31 1ers bits de poids faibles
(équivalent à effectuer un AND logique avec 0x7FFFFFFF)4C4B4046
Puis décaler d'un bit vers la droite le résultat
(équivalent à une division euclidienne par 2)2625A023 Convertir le résultat en décimal
(ajouter éventuellement des 0 en tête afin que le résultat comporte 9 chiffres)640000035 Scinder ce nombre en 2 parties constituées des 3 premiers et des 6 derniers chiffres. 640
000035Multiplier le 2ème nombre par 10, et lui ajouter un chiffre de telle façon que la somme de tous les chiffres soit un multiple de 7 0000350
+ 6
(0+0+0+0+3+5+6 = 2x7)La partie centrale du ProductID est donc : 640-0000356 dans cet exemple, on retrouve un ProductID de ProductKey "blacklistée"
par le Service Pack 1 de Windows XP, qui dénote donc une clef "pirate"!
Seuls les 2ème et 3ème nombres sont utiles ici pour détecter la
"provenance" d'une ProductKey.
Le chiffre des centaines du 2ème nombre semble indiquer la catégorie du logiciel
(information non garantie, obtenue expérimentalement) :
0xx : licence au détail
2xx : licence contrat Select
3xx : licence MSDN
6xx : licence en volume ("Corporate")
7xx : licence OEM