Affichage des articles dont le libellé est base de registres. Afficher tous les articles
Affichage des articles dont le libellé est base de registres. Afficher tous les articles

samedi 31 décembre 2016

GraphEdit sous Windows 7.1 en 64 bits


J'ai déjà eu l'occasion d'évoquer le logiciel GraphEdit qui rend beaucoup de services à ceux qui font de la programmation avec l'architecture DirectShow de Microsoft.


J'ai eu depuis plusieurs jours un problème qui m'ennuie beaucoup: Quand on ouvre GraphEdit et qu'on veut y ajouter un filtre de la catégorie directshow, alors le programme se plante et ferme abruptement. Il était donc devenu impossible de composer à la main un filtre.


Pour ceux qui auraient le même problème, je donne tout de suite la solution qui a résolu le problème chez moi: c'est le filtre LAV Video Decoder qui est le responsable, comme c'est indiqué sur cette page web.  En le désinstallant tout revient à la normale. Voir ici comment faire par la méthode basique, mais on peut le faire beaucoup plus aisément avec mon logiciel Filmerit. Notons quand même que certaines pages web parlent d'un  problème identique provoqué par d'autres filtres mal installés ou non compatibles. Dans l'un d'eux le problème a été résolu en mettant à jour ffdshow. En tous cas, cela semble toujours être lié à un filtre directshow. Il est donc inutile de chercher à réinstaller graphedit, voire Windows... Si on a de la chance, une restauration système marche. Sinon, en tâtonnant il faut chercher quels sont les derniers filtres qui ont pu être installés par une application  ou une autre. Chez moi, c'est Video to Video qui avait installé les filtres LAV, y compris LavVideo.ax

Ce problème m'a conduit à effectuer diverses recherches qui m'ont permis de progresser dans la compréhension  de GraphEdit, des filtres directshow et du fonctionnement de la base de registres sous Windows 7.1 en 64 bits.


Pour commencer, j'ai découvert qu'il y avait deux versions de GraphEdit: une version 32 bits et une version 64 bits. La manière officielle de les télécharger est de télécharger tout le Windows 7.1 SDK.
En ce qui me concerne, je télécharge depuis le site de Microsoft un fichier ISO du DVD de Windows SDK 7.1, et je le grave (par exemple avec ImgBurn) sur un DVD. Ensuite pour n'installer que les appli qui m'intéressent, j'explore le DVD obtenu, pour trouver le dossier: \Setup\WinSDKWin32Tools dans lequel je double clique sur winsdkwin32tools_x86.msi
Cela crée un dossier C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin dans lequel se logent tous les outils utiles: notamment GraphEdt.exe qui est la version 32 bits du programme, et dans le sous-dossier X64, la version 64 bits qui porte le même nom.



On peut différencier les 2 en en lançant un et en ouvrant le Gestionnaire des tâches. Celui qui est 32 bits apparaît avec une mention *32, alors que l'autre reste graphedt.exe seul. Les deux peuvent fonctionner simultanément. Pour me faciliter la tache je les renomme bien sûr en graphedit32.exe et graphedit64.exe



Pour que GraphEdit puisse espionner le graphe d'une autre application, et aussi ouvrir les pages de propriétés des filtres et pins qu'il affiche, il faut aussi installer deux dll: proppage.dll et evrprop.dll. Ces deux fichiers existent aussi en versions 32 bits et 64 bits, respectivement dans le dossier Bin et son sous-dossier x64. On les installe avec regsvr32.exe qu'on trouve dans les deux dossiers C;\Windows\System32 et c:\Windows\SysWow64. C'est un peu délicat car c'est en mode ligne de commande qu'il faut travailler dans une fenêtre de commande DOS.  Pour cela je crée avec notepad un fichier install.bat qui contient le texte suivant:

C:\WINDOWS\System32\Regsvr32.exe "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin\proppage.dll"
C:\WINDOWS\System32\Regsvr32.exe "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin\evrprop.dll"
C:\WINDOWS\SYSWoW64\Regsvr32.exe "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin\x64\proppage.dll"
C:\WINDOWS\SYSWoW64\Regsvr32.exe "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1\Bin\x64\evrprop.dll"
Quand je double clique sur le fichier install.bat, j'obtiens 4 messages d'installation réussie, et alors mes deux versions de GraphEdit sont pleinement opérationnelles.



Maintenant, si on ouvre graphedit32 et graphedit64 et qu'on tape CTRL+F pour charger des filtres, et qu'on clique sur Directshow Filters pour déplier le noeud et obtenir l'affichage de tous les filtres de la catégorie directshow, on n'obtient pas du tout la même liste sur les deux versions. Je suppose ici que vous n'avez pas le problème signalé au début de ce post qui empêchait chez moi  cette manip sur graphedit32.

Par exemple, dès le début de la liste on voit que graphedit64 affiche par exemple un filtre AudioRecorder WAV Dest, que graphedit32 n'affiche pas. Au contraire graphedit32 présente un filtre ATi Ticker ou toute la série des Cyberlink que graphedit64 n'affiche pas.

On peut supposer que graphedit64 n'affiche que les filtres compatibles avec des applications 64 bits, alors que graphedit32 affiche les filtres compatibles avec des applications 32 bits. Un certain nombre de filtres sont naturellement compatibles avec les deux systèmes.

Quand je lance alors mon gestionnaire de filtres Filmerit 3.1, il m'affiche exactement les mêmes filtres que graphedit32. Cela paraît finalement normal, car toutes mes applications sont faites avec un delphi 7 qui est 32 bits. Elles sont donc toutes en 32 bits, et Filmerit du coup ne gère que les filtres 32 bits. Il faudra un jour voir comment s'occuper des filtres 64 bits. En attendant, mes programmes n'utilisent tous que des filtres 32 bits.


J'en reviens au problème de LAVideo.ax qui avait bloqué l'affichage de la liste des filtres directshow dans graphedit32. Il apparaît que c'est parce que l'un des pins disposait de plus de 100 types de formats. En fait, la version installée par Video to Video comportait exactement 218 types de formats pour le Pin 00. Ils sont numérotés de 0 à 207, puis s'ajoutent encore -39 à -48. Si on considère qu'un numéro négatif est en fait à retrancher à 256, on trouve que ces numéros négatifs vont de 208=256-48 à 217=256-39. Si on veut garder LAV Video installé, soit on le laisse comme il est, car il fonctionne correctement malgré tout sauf qu' on ne peut plus utiliser Graphedit32  pour construire des graphes. L'autre solution est sans doute d'enlever un certain nombre de types qui correspondent à des formats de vidéo rarement rencontrés. Mais cela nécessiterait un bidouillage à la main que je ne recommande pas.

Tout cela m'a quand même donné envie de voir comment les filtres sont enregistrés dans le registre de Windows 7 en 64 bits.

S'agissant des filtres directshow 32 bits, comme toutes les applications 32 bits, regedit les fait apparaître sous des clés WOW6432Node.

Un filtre directshow 32 bits apparaît ainsi dans le registre sous plusieurs emplacements:

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\ est une clé où apparaît d'un part dans la sous-clé
{083863F1-70DE-11D0-BD40-00A0C911CE86}\Instance\ la liste des filtres 32 bits de la catégorie directshow , d'autre part comme une sous-clé  le GUID de chacun des filtres directshow 32 bits, et son fichier serveur sous la valeur InProcServer32.

La même chose se produit de façon dupliquée dans HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\

comme dans
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\

Un filtre directshow 64 bits apparaît pour sa part de la même façon (liste des GUID dans la catégorie des filtres directshow, et Inprocserver32) sous les clés plus simples: HKEY_CLASSES_ROOT\CLSID\ et HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\.

Enfin, si je prends un filtre qui est installé aussi bien pour 32 bits que 64 bits, par exemple avi mux, alors il apparaît en principe dans les 5 positions (et toujours deux fois dans chacune).

Il est à noter que dans delphi 7 qui ne sait lire que les fichiers 32 bits, tout cela est masqué, et qu'en croyant ouvrir la clé HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\ avec une fonction openkey on ouvre en réalité la clé HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\.

Pourquoi faire simple quand on peut faire compliqué !


dimanche 13 mai 2007

Restaurer la restauration système

J'ai été frappé ces jours-ci par le syndrome de la restauration impossible du système. Il semble assez répandu chez les internautes utilisant Windows. Pour vous en rendre compte, lancez une recherche Google avec la phrase "Restoration Incomplete. Your computer cannot be restored". Vous trouverez plein de sites qui parlent de ce problème et proposent des diagnostics. Chez moi la forme du symptôme était que les points de restauration plus vieux que 48h ne marchaient plus. Les plus récents marchaient encore, et je pouvais d'ailleurs en créer de nouveaux.

Rien de ce que j'ai trouvé sur le web n'a permis de restaurer ma base de registres à ce qu'elle était il y a un mois. Or, en regardant dans le dossier c:\System Volume Information j'ai constaté que les points de restauration en cause existaient bel et bien. Ils sont contenus dans un dossier au nom abscons commençant par _restore. Et chaque point de restauration figure dans un sous-dossier nommé RPxxx. On peut trouver à quelle date le point de restauration a été effectué, simplement en regardant la date de création du dossier RPxxx. Notez que le dossier System Volume Information est un dossier caché et protégé qu'il faut déverrouiller avant de pouvoir y accéder. Microsoft fournit le mode d'emploi ici.

J'ai donc fait de la chirurgie fine, et par chance elle a marché:

J'ai créé un nouveau Point de restauration, et constaté qu'il avait créé dans le dossier correspondant (-restore....) de "C:\system volume information" un dossier appelé RP192. Dans ce dossier RP192, j'ai remplacé le sous-dossier snapshot par le sous-dossier snapshot issu du dossier RP113 correspondant au point de restauration voulu.

Et voilà, c'est tout: mon dernier point de restauration a pu être rechargé sans problème, et j'ai retrouvé le registre du mois précédent. Cette opération n'est peut-être pas sans risque. Elle peut donner un peu d'incohérence, dans la mesure où elle restaure les fichiers du système à la date la plus récente et le registre, contenu dans snapshot, à une date plus ancienne. Mais chez moi cela a marché.

J'en tire d'ailleurs comme conclusion que le syndrome est causé par la restauration des fichiers système et non par la restauration du registre. C'est peut être bon à savoir.