чтение реестра в X64
От: andreypro  
Дата: 07.10.10 09:17
Оценка:
Столкнулся с такой проблемой, на Vista X64 в реестре программа писала значение в ветку:
HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\MyProgram

через regedit посмотрел куда она пишет на самом деле:
HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\MyProgram

после обновления программы т.к. вистализацию отключил теперь не могу прочитать эту ветку.

вот пробую напрямую прочитать через RegOpenKeyEx с ключом KEY_WOW64_32KEY, но пишет что нет такой ветки


Public Function OpenSubKey(ByVal namePath As String, ByVal name As String) As String
        Dim key As IntPtr = New IntPtr(&H80000001)
        Dim subKeyHandle As IntPtr
        Dim result As Integer = WinAPI.RegOpenKeyEx(key, namePath, 0, &H20019 Or &H200, subKeyHandle)
        If (result = 0) Then
            Dim lpType As Integer = 0
            Dim lpcbData As Integer = 0
            Dim num3 As Integer = WinAPI.RegQueryValueEx(subKeyHandle, name, Nothing, (lpType), Nothing, lpcbData)
            If (lpcbData > 0) Then
                Dim buffer As New StringBuilder(CInt(lpcbData / 2))
                num3 = WinAPI.RegQueryValueEx(subKeyHandle, name, Nothing, (lpType), buffer, (lpcbData))
                Return buffer.ToString()
            End If
        End If
        Return String.Empty
    End Function
Re: чтение реестра в X64
От: Pavel Dvorkin Россия  
Дата: 07.10.10 14:29
Оценка:
Здравствуйте, andreypro, Вы писали:

A>Столкнулся с такой проблемой, на Vista X64 в реестре программа писала значение в ветку:

A>HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\MyProgram

A>через regedit посмотрел куда она пишет на самом деле:

A>HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\MyProgram

A>после обновления программы т.к. вистализацию отключил теперь не могу прочитать эту ветку.


А что такое вистализация и как ее отключать ?

A>вот пробую напрямую прочитать через RegOpenKeyEx с ключом KEY_WOW64_32KEY, но пишет что нет такой ветки


Приложение по-прежнему 64-битное ? Иными словами, .NET 64-битный ?

Этот ключ 32-битным программам на виден. ИМХО.
With best regards
Pavel Dvorkin
Re: чтение реестра в X64
От: Severn Россия  
Дата: 08.10.10 06:41
Оценка:
Здравствуйте, andreypro, Вы писали:

A>Столкнулся с такой проблемой, на Vista X64 в реестре программа писала значение в ветку:

A>HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\MyProgram

A>через regedit посмотрел куда она пишет на самом деле:

A>HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\MyProgram

A>после обновления программы т.к. вистализацию отключил теперь не могу прочитать эту ветку.


A>вот пробую напрямую прочитать через RegOpenKeyEx с ключом KEY_WOW64_32KEY, но пишет что нет такой ветки


Насколько я понмю, WOW64 редирект работает только для ключей, находящихся непосредственно под HKCU\Software\ и HKCU\Software\Classes\
Т.е. 32битные процессы вместо Software\Classes\CLSID пишут в Software\Classes\Wow6432Node\CLSID
Для ключа подобного вашему редирект не должен работать, хотя и стоит в середине пути Wow6432Node.
Все должно прекрасно читаться через Microsoft.Win32.Registry. Просто открывайте обновленный путь вместо старого.

Для справки:
Registry Keys Affected by WOW64
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.