none
Extraire les valeurs d'une clé de registre dont le type est REG_RESOURCE_LIST RRS feed

  • Question

  • En VisualBasic2005 sur un PC Windows7 x64 je n'arrive pas a extraire la valeur contenu dans une clé de registre de type REG_RESOURCE_LIST.  J'ai un programme similaire en VB6 qui fonctionne.  J'ai essayé d'utiliser le même type de code en VB2005, soit des requêtes similaires à celle-ci: RegQueryValueEx(hKey "AllocConfig",0,dType,Data,dBuf) qui utilise une fonction contenu dans advapi32.dll. Ca retourne >Nothing<. 

    Initialement, en VB2005, j'ai utilisé le code suivant:

    Dim rk as RegistryKey = Registry.LocalMachine

    Dim rkSub as RegistryKey = rk.OpenSubKey("SYSTEM\CurrentControlSet\Enum\MF\PCI#VEN_9710&DEV_9835&SUBSYS_00121000&REV_01\5&2DDFE7D3&0&08F0#CHILD0002\Control")

    Dim sSub as String = rkSub.Getvalue("AllocConfig")

    Ca retourne >Nothing<.  Si je change AllocConfig qui est une clé REG_RESOURCE... pour ActiveService qui est une clé REG_SZ ça fonctionne.  J'ai essayé aussi dans une autre SubKey qui elle contient des clés de type REG_DWORD et ça fonctionne aussi.

    J'ai l'impression que c'est un problème de droits d'accès sur ce type de clé.  Si c'est le cas, comment faire pour contourner cette validation.  Dans le cas contraire, y a-t-il une autre ligne de code à ajouter ou une autre façon de lire cette clé de registre.

    Merci

     

     

     

     

    lundi 18 octobre 2010 23:44

Réponses

Toutes les réponses

  • Bonjour,

     

    En VB6 quand ça fonctionnais cela vous retournais quel type de valeur ?

    Moi quand j'essaye de récupérer une valeur "REG_RESOURCE_LIST " cela me retourne {0}
    Pour ce qui concerne les droits c'est possible (je doit avoir un bout de code quelque par qui modifie les droits) faudra essayer dans ce cas là en modifiant les droits sur l'arbre et tester le code.

    Attention faire une sauvegarde du registre avant de jouer avec :)

     

    A très bientôt

     


    Cordialement, Troxsa
    mardi 19 octobre 2010 16:22
    Auteur de réponse
  • Bonjour,

    Dans le bout de code que j'utilise en VB6

    RegQueryValueEx(hKey "AllocConfig",0,dType,Data,dBuf)

    l'élément Data est définie as String.  Cependant le contenu de Data semble être une serie de caractères aléatoires tel que:  "1ä1€à .........

    qui une fois passé à travers le code suivant:

                For n1 = 1 To dBuf
                    PortAddress = PortAddress & Right$( _
                    "0" & Hex(Asc(Mid$(Data, n1, 1))), 2)
                Next n1

    me redonne le contenu de la clé AllocConfig. ex.: "01000000050000000700000001........

    (la valeur de dBub dans le cas présent est de 80 mais j'ai déjà eu 450 comme valeur sur une autre clé)

    Dans le registre lui-même le contenu de la clé donne l'impression d'être de l'hexadécimal. On peut y retrouver des séquences comme E400,  DA25

    Merci

     

     

     

     

     

    mardi 19 octobre 2010 23:37
  • Bonjour

    Les seuls moyen que j'ai trouvé d'extraire l'information est d'utilisé l'API que vous utilisiez (aprioris)

    Il est dit dans le msdn :

    Unknown :
    Type de données de Registre non pris en charge.Par exemple, le
    type de données de Registre REG_RESOURCE_LIST de Microsoft API
    Win32 n'est pas pris en charge.Utilisez cette valeur pour spécifier
    que la méthode SetValue doit déterminer le type de données de
    Registre approprié lors du stockage d'une paire nom/valeur.
    

    Sinon solution bis serait d'extraire la branche qui vous intéresse avec la commande REG EXPORT (Utiliser Process.Start) et de lire le fichier par la suite mais cela va demandé pas mal de code car il faudra travailler le fichier en lui même, une solution peu idéale mais fonctionnelle ...

    Pourriez vous poster le code fonctionnel afin que je puisse l'essayer sur un poste en Windows 7 ? ou de me l'envoyer par mail troxsa[AT]gmail[Point]com (remplacé [AT] par @ et [point] par .)

     

    A bientot

     

     


    Cordialement, Troxsa
    mercredi 20 octobre 2010 10:59
    Auteur de réponse
  • Bonjour,

     

    Vous devez vérifier si le compte sous lequel vous lancez l’application a des droits pour lire cette clé de registre.

     

    Consultez la documentation MSDN pour les droits d’accès aux clés du registre.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur une de ces technologies : Visual Basic, C#, C++, .NET, ASP.NET, SQL Server, Silverlight, SharePoint 2010, SharePoint 2007

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Café des usages

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     

    • Marqué comme réponse Alex Petrescu jeudi 28 octobre 2010 08:48
    mercredi 20 octobre 2010 11:11
  • "PifoModif" a écrit dans le message de groupe de discussion : c403b21a-7c12-4114-9391-09b0bdf4e244@communitybridge.codeplex.co m...

    En VisualBasic2005 sur un PC Windows7 x64 je n'arrive pas a extraire la valeur contenu dans une clé de registre de type REG_RESOURCE_LIST.  J'ai un programme similaire en VB6 qui fonctionne. 


    Sachant que par défaut, l'application .NET s'exécute en 64bits (sauf indication contraire dans les options de compilation).
    Supposant que vb6 produit du code 32 bits,
    je propose de regarder également la notion de redirections du registre en commençant par cette page :
     
    • Marqué comme réponse Alex Petrescu jeudi 28 octobre 2010 08:48
    mercredi 20 octobre 2010 11:54
  • Bonjour à tous,

    Merci pour vos suggestions.  Comme chaque proposition demande un peu de recherche et d'essaie, je vais regarder ça de plus près.

    Merci encore,

    Pierre

     

    mercredi 20 octobre 2010 23:49
  • Bonjour,

     

    Si une de ces solutions vous est utile, je vous remercie de partager vos résultats dans le forum, pour les autres membres.

     

    Cordialement,

    Alex

    ________________

    Publiez un article sur MSDN !

    Windows Phone 7

    Astuces pour Visual Studio 2010

    XNA – Développement jeux vidéo

    Didacticiels et astuces : VB.NET, C#, ASP.NET, .NET Framework, Silverlight, Workflow Foundation, WPF

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

     

     


    Suivez MSDN sur Twitter 

    • Proposé comme réponse EhJoe mercredi 27 octobre 2010 08:59
    lundi 25 octobre 2010 14:15
  • Bonjour,

    Aucune des solutions précédentes n'a pu être utilisé.  J'ai trouvé sur le site PINVOKE.NET un bout d'article qui traite de ce genre de clé.

    (Special Note: The .NET Framework (3.0 and earlier at least) cannot read registry values of special types (for example: REG_RESOURCE_LIST and REG_FULL_RESOURCE_DESCRIPTOR). I am not sure if they will ever be available under .NET, to see examples of these types of values at work, visit your registry under (HKLM\HARDWARE\DESCRIPTION\System) and (HKLM\HARDWARE\RESOURCEMAP\Hardware Abstraction Layer\ACPI x86 platform).

    Cela explique pourquoi la lecture de la clé retourne NOTHING.  J'ai aussi essayé de créer une DLL  en C ainsi qu'une écrite en C++ et de les lier à mon programme en VB .NET.  Ca n'a pas fonctionné.  Selon d'autres sources ce type d'utilisation DLL vs VB.NET demande beaucoup de travail.

    Je vais essayer d'utiliser le FRAMEWORK4.  Peut-être que ça va fonctionner.  Si ça ne débloque pas je vais me contenter d'utiliser mon vieux programme en VB6.  Ca fait curieux de devoir utiliser un vieux code pour lire quelque chose d'aussi ordinaire.

    Merci 

    vendredi 29 octobre 2010 11:27
  • Re bonjour :)

     

    Je connais pas bien VB6 mais y a t'il possibilité de faire un DLL en VB6 avec le code que vous avez pour vous en servir dans votre projet VB.net ?

     

    A bientot


    Cordialement, Troxsa
    lundi 15 novembre 2010 10:15
    Auteur de réponse
  • Bonjour,

      Je n'ai pas tenté cette approche.  VB6 cré des DLL's sous forme ActiveX en se basant sur des CLASS's.  Je sais que le problème avec VB.net c'est qu'il cheche une CLASS au lieu d'un EntryPoint.  Il serait fort possible que ça fonctionne.  Cependant un ActiveX est, comme son nom l'indique, quelque chose d'actif.  Je ne sais pas s'il peut être utilisé comme une librairie.  Reste aussi a savoir si les fonctions Win32 peuvent être utilisées dans ce type de programme.

    La solution la plus simple que j'ai trouvé: demander à l'utilisateur de regarder dans le gestionnaire de périphériques et d'inscrire les valeurs qu'il y trouve.  C'est un peu basique comme approche, mais ça fait le travail.

    Merci, Pierre

     

     

     

     

     

     

    lundi 15 novembre 2010 12:22
  • Si vous avez des solutions futurs dans VB.net n’hésitez pas a revenir et de donner la solution c'est un sujet qui m'intéresse, et intéresserons d'autre j'en suis sure

    Bon courage 


    Cordialement, Troxsa
    lundi 15 novembre 2010 13:28
    Auteur de réponse