A lire...les bases des registre ?

A lire...les bases des registre ? - VB/VBA/VBS - Programmation

Marsh Posté le 17-02-2003 à 21:39:37    

Salut,
 
Je vous écris à propos de la base de registre. Non, ne fuyez pas, car vous connaissait peut-être la réponse à ma questions. Tout d?abord j?expose, cette interrogation, car depuis plusieurs mois que je cherche, je ne trouve rien. Je ne pense pas avoir de la m?. au yeux, donc?
 
Je ne vais pas vous détailler toutes la base de registre de Windows, car depuis 1995, il y a trop de chose à dire même si le principe reste. Le principe, parlons-en, cette base de registre crée après la version de win3.1, permet d?enregistrer toutes les données utilisateurs, application, ect et cache parfois même des mouchard dont ne nous connaissons pas l?existence. Elle remplaça les fichiers *.ini de Windows 3.11. Enfin bref, mon problème n?est pas là.
 
Je fais de la programmation depuis cinq ans, je touche au noyau des différents Windows, en touchant aux propres fonctions de Windows alias les API Windows dont on soupçonne même pas la puissance . Puissance  qui peut s?avérer destructrice, si des individus mal intentionnés en faisaient état. Bref, c?est pas le sujet?
 
Depuis six mois maintenant, je cherche à faire mes propres programmes d?installation en VB. Sa paraît idiot mais le but c?est de faire tourner  un programme correctement, ou plutôt de faire tourner un fichier *.exe. A faire tourner, ce n?est pas si simple que ça ! Très vite, car vous allez être souller, un *.exe dépend la plupart du temps de fichier tel que des  librairie dynamique appeler communément des *.dll et parfois de contrôle active X (ocx). Il y a deux manière de les installer ? je parle des exe ?  
 
 
1- On mets tous les fichiers dont le fichier exécutif dépend (dll et ocx) à la racine de l?exe. C?est une manière cavalière et impropre, mais le programme fonctionnera quand même. Il fonctionnera si le programmeur à prévu ne pas faire intervenir le base de registre ou de la faire intervenir en dynamique, bref...
 
 
2- On mets l?exe dans un répertoire, et tous les fichiers dont il dépend (dll et ocx) dans des répertoire spécifique, en l?occurrence le répertoire système d?exploitation que l?on à faire. Problème, et il est de taille, c?est que toutes les *.dll et *.ocx sont répertorié dans la base de registre, ce qui n?est pas le cas lors de la première méthode. C?est pour cette raison que la nommé méthode cavalière.
 
 
Ma questions est finalement très simple et à la fois compliqué. Savez par quel moyen les programmes d?installation référence t-il les fichiers tel que les librairies dynamiques ou les contrôles active X, dans la base de registre ? les clés qui sont-elles crées dynamiquement lors des programmes d?installation ?
 
Voilà, j?ai fini de poser ma questions, je me suis pas trop étendu, sinon, j?en n?aurais eue pour un dizaine de page et sa aurait été trop long à lire !
 
Merci des réponses que vous allez pouvoir m?apportez. Svp, ne me dîtes pas Google est ton ami, je l?ai déjà testé depuis six mois maintenant, à part des banalités, il n?y a rien d?autre que je sache déjà.  
 
Merci
@+
CVB
 
 
 

Reply

Marsh Posté le 17-02-2003 à 21:39:37   

Reply

Marsh Posté le 17-02-2003 à 21:44:41    

je suis sûr que la réponse à ta question se trouve quelque part ici: http://forum.hardware.fr/forum2.ph [...] subcat=385


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 17-02-2003 à 21:48:08    

Merci, beaucoup, sinon de ton coté tu n'y a jamais touché ou tu n'as pas de connaissance, même un tout petit peu !  :)

Reply

Marsh Posté le 17-02-2003 à 21:51:22    

cvb a écrit :

Merci, beaucoup, sinon de ton coté tu n'y a jamais touché ou tu n'as pas de connaissance, même un tout petit peu !  :)  


disons qu'en recherchant une seule instruction de l'API (puisqu'il faut obligatoirement passer par l'API), je devrais être à même de retrouver les autres.
 
Sinon en fait non, je n'ai pas encore exploité la chose, et je comptais le faire en créant une classe par exemple, histoire de me simplifier un peu les choses :)
 
Bouge pas je cherche ça.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 17-02-2003 à 21:53:34    


 
' Constants
'''''''''''
 
' Value types
Private Const REG_NONE = 0                       ' No value type
Private Const REG_SZ = 1                         ' Unicode nul terminated string
Private Const REG_EXPAND_SZ = 2                  ' Unicode nul terminated string
Private Const REG_BINARY = 3                     ' Free form binary
Private Const REG_DWORD = 4                      ' 32-bit number
Private Const REG_DWORD_LITTLE_ENDIAN = 4        ' 32-bit number (same as REG_DWORD)
Private Const REG_DWORD_BIG_ENDIAN = 5           ' 32-bit number
Private Const REG_LINK = 6                       ' Symbolic Link (unicode)
Private Const REG_MULTI_SZ = 7                   ' Multiple Unicode strings
Private Const REG_RESOURCE_LIST = 8              ' Resource list in the resource map
 
' Security constants
Private Const KEY_CREATE_LINK = &H20
Private Const KEY_CREATE_SUB_KEY = &H4
Private Const KEY_ENUMERATE_SUB_KEYS = &H8
Private Const KEY_EVENT = &H1
Private Const KEY_NOTIFY = &H10
Private Const KEY_QUERY_VALUE = &H1
Private Const KEY_SET_VALUE = &H2
 
Private Const READ_CONTROL = &H20000
Private Const STANDARD_RIGHTS_ALL = &H1F0000
Private Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Private Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
 
Private Const SYNCHRONIZE = &H100000
Private Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Private Const KEY_EXECUTE = ((KEY_READ) And (Not SYNCHRONIZE))
Private Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) And (Not SYNCHRONIZE))
Private Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) And (Not SYNCHRONIZE))
 
' RegOpenKey results
Private Const REG_CREATED_NEW_KEY = &H1
Private Const REG_OPENED_EXISTING_KEY = &H2
 
' Main registry keys
Private Const HKEY_CLASSES_ROOT = &H80000000
Private Const HKEY_CURRENT_CONFIG = &H80000005
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_DYN_DATA = &H80000006
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const HKEY_PERFORMANCE_DATA = &H80000004
Private Const HKEY_USERS = &H80000003
 
' Error return codes
Const ERROR_SUCCESS = 0&
Const ERROR_ACCESS_DENIED = 5&
 
Private Const REG_OPTION_NON_VOLATILE = 0
Private Const REG_OPTION_VOLATILE = 1
 
' Types
'''''''
 
' Access List Control
Private Type ACL
    AclRevision As Byte
    Sbz1 As Byte
    AclSize As Integer
    AceCount As Integer
    Sbz2 As Integer
End Type
 
' 64-bits expression, showing the number of 100-nanosecond intervals since January 1, 1601
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
 
' Security attributes
Private Type SECURITY_ATTRIBUTES
    nLength As Long
    lpSecurityDescriptor As Long
    bInheritHandle As Long
End Type
 
' Security descriptor
Private Type SECURITY_DESCRIPTOR
    Revision As Byte
    Sbz1 As Byte
    Control As Long
    Owner As Long
    Group As Long
    Sacl As ACL
    Dacl As ACL
End Type
 
' Connectivity
''''''''''''''
 
' Connects to a registry on a remote machine
'Private Declare Function RegConnectRegistry Lib "advapi32.dll" Alias "RegConnectRegistryA" (ByVal lpMachineName As String, ByVal hKey As Long, phkResult As Long) As Long
 
 
' Manage keys
'''''''''''''
 
Private Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
 
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegLoadKey Lib "advapi32.dll" Alias "RegLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpFile As String) As Long
Private Declare Function RegUnLoadKey Lib "advapi32.dll" Alias "RegUnLoadKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
Private Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Declare Function RegFlushKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
 
Private Declare Function RegNotifyChangeKeyValue Lib "advapi32.dll" (ByVal hKey As Long, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long, ByVal hEvent As Long, ByVal fAsynchronus As Long) As Long
 
Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
 
Private Declare Function RegReplaceKey Lib "advapi32.dll" Alias "RegReplaceKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal lpNewFile As String, ByVal lpOldFile As String) As Long
Private Declare Function RegRestoreKey Lib "advapi32.dll" Alias "RegRestoreKeyA" (ByVal hKey As Long, ByVal lpFile As String, ByVal dwFlags As Long) As Long
 
' Security
Private Declare Function RegSetKeySecurity Lib "advapi32.dll" (ByVal hKey As Long, ByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR) As Long
Private Declare Function RegGetKeySecurity Lib "advapi32.dll" (ByVal hKey As Long, ByVal SecurityInformation As Long, pSecurityDescriptor As SECURITY_DESCRIPTOR, lpcbSecurityDescriptor As Long) As Long
 
' Manage values
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
 
Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
 


 
Voilà, en gros c'est une synthèse de ce que j'ai glâné à propos de la registry.  Pour l'aide, je te suggère de consulter MSDN ou Google pour voir ce que les VB'ers en font ;)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 17-02-2003 à 21:56:38    


EXcellent, merci, je vais étudier le code de plus prés, merci beaucoup !  :jap:  :hello:


Message édité par cvb le 18-02-2003 à 12:32:32
Reply

Marsh Posté le 18-02-2003 à 02:20:49    

Citation :

Savez par quel moyen les programmes d?installation référence t-il les fichiers tel que les librairies dynamiques ou les contrôles active X, dans la base de registre ? les clés qui sont-elles crées dynamiquement lors des programmes d?installation ?


les dll qu'on utilise de manière classique, en tant que dll quoi, ne sont pas référencées dans la BDR. Un programme l'appelle par son nom (ex : "kernel32.dll" ) et Windows la recherche dans le répertoire courant, dans le rep Windows ou dans system32.
A moins que le prog s'y lie a l'execution en spécifiant un chemin.
Avec WinXP, il est possible de faire cohabiter des dll portant le même nom. Dans ce cas, la dll chargée par défaut doit etre dans windows ou system32. Pour en utiliser une autre, un exe doit posséder un manifest qui indique à WinXP d'aller chercher dans windows\WinSxS.
C'est comme cela qu'un prog fait pour bénéficier des styles visuels d'XP. Le manifest est là pour dire d'utiliser comctl32.dll version 6 qui se trouve dans ce répertoire et qui est responsable des nvx styles au lieu de la version classique (5.8) qui se trouve dans system32.
 
Maintenant les ActiveX ...
Les ActiveX, comme tous les autres composants COM/OLE, doivent s'enregistrer dans la BDR pour etre utilisables.
Chaque composant se voit associé par son créteur un numéro d'identification unique. C'est ce numéro qu'on utilise et non plus un nom en clair.
Un composant s'enregistre dans la bdr à l'aide de regsrv32.exe.
Le numéro en question, appelé GUID (Globally Unique IDentifier) ou UUID (Universally Unique IDentifier) est généré à l'aide de UUIDGEN.exe.
regsrv32.exe va en fait associer ce numéro au composant (=> l'enregistrer).
Cette association se fait dans HKEY_CLASSES_ROOT.
Apres la liste des extensions, tu as la liste des composants enregistrés.
Le GUID se trouve à la clé CLSID (CLaSs IDentifier).
exemple :
le CLSID de Excel.Application est {00024500-0000-0000-C000-000000000046}.
Donc quand tu veux te lier à Excel.Application, OLE récupère son CLSID à HKCR\Excel.Application.
Puis il va à HKCR\CLSID\{00024500-0000-0000-C000-000000000046}
et la clé LocalServer32 lui indique le fichier dll/exe/ocx... à lancer.
Pour un ocx, c'est la clé InprocServer32 qu'il faut regarder.
Y'a plusieurs autres clés.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 18-02-2003 à 09:39:15    

cvb a écrit :


 
EXcellent, merci, je vais étudier le code de plus prés, merci beaucoup !  :jap:  :hello:  


 
T'as pas honte de quoter tout son post juste pour ça :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-02-2003 à 12:18:09    

antp a écrit :


 
T'as pas honte de quoter tout son post juste pour ça :o


 
escuse mon ignorance  [:spamafote] mais ca veut dire quoi ? sinon, je n'ai pas honte plus que sa d'avoir poster un post pareil.  
 
Tu m'escusera, mais sa change des titres de m... et comme sujet, sans aucune indication...

Code :
  1. "mon disque dur ne marche plus, comment je peux faire ?"  :D


 
 
surtout  toi qui est modo. t'as du en voir des chose belle, tien. Ah la, là !  
 
Allez
@+ ANTP
 :hello:  :jap:  
 

Reply

Marsh Posté le 18-02-2003 à 12:20:10    

cvb a écrit :


 
escuse mon ignorance  [:spamafote] mais ca veut dire quoi ?  
 


 
quoter = citer (en anglais, 'to quote';)
 
drashe fait un super long post, et toi tu réinclus l'intégralité de son post pour répondre, ça prend de la place pour rien (dans la base de données du forum, et surtout visuellement pour les forumeurs)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-02-2003 à 12:20:10   

Reply

Marsh Posté le 18-02-2003 à 12:32:08    

antp a écrit :


 
quoter = citer (en anglais, 'to quote';)
 
drashe fait un super long post, et toi tu réinclus l'intégralité de son post pour répondre, ça prend de la place pour rien (dans la base de données du forum, et surtout visuellement pour les forumeurs)


 
A si c'est que ca, je l'enlève ! fallait le dire, je vais l'alléger, pas souci !  :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed