Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2010, 23:45   #1
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию Реестр в x64

В Windows Vista x64 все созданные ключи, созданные функцией RegCreateKeyEx в ветке "HKLM\Software" автоматически перенаправляются в папку "HKLM\Software\Wow6432Node".
Как можно создать раздел в разделе "HKLM\Software" без "Wow6432Node"?
Если нужно, могу выложить исходник для добавления раздела и ключей в реестр.
если чем помог, поставьте отзыв на весы
Xatr вне форума Ответить с цитированием
Старый 16.01.2010, 00:28   #2
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

При открытии ключа HKLM\Software к параметру samDesired добавляй флаг KEY_WOW64_64KEY и наступит счастье (при создании ключа возможно тоже следует добавлять).
maxionans вне форума Ответить с цитированием
Старый 16.01.2010, 00:36   #3
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

А если создавать функцией раздел в реестре в x86-й версии с таким флагом, создаст? или придётся ставить ещё условие на проверку?

Код:
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\advapi32.inc
includelib \masm32\lib\advapi32.lib
.data?
d dd ?
o db 255 dup (?)
.const
au db "Software\program",0
az db "path",0
.code
start:
invoke RegCreateKeyEx,HKEY_LOCAL_MACHINE,addr au,0,0,REG_OPTION_NON_VOLATILE,KEY_WRITE or KEY_WOW64_64KEY,0,addr d,0
invoke GetCurrentDirectory,256,addr o
invoke RegSetValueEx,d,addr az,0,REG_SZ,addr o,eax
invoke RegCloseKey,addr d
invoke ExitProcess,0
end start
чёто он всё равно не там, где надо создаёт
если чем помог, поставьте отзыв на весы

Последний раз редактировалось Xatr; 16.01.2010 в 00:58.
Xatr вне форума Ответить с цитированием
Старый 16.01.2010, 11:51   #4
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

В x86 нормально создаст и с REG_WOW64_64KEY. А почему у тебя все-равно создает не в том месте - не понятно, код выглядит корректным.
maxionans вне форума Ответить с цитированием
Старый 16.01.2010, 13:20   #5
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

Я сделал тоже самое в Delphi, всё работает нормально:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var b:integer;
c: array[0..255]of char;
a:hkey;
begin
RegCreateKeyEx(HKEY_LOCAL_MACHINE,'Software\program',0,0,REG_OPTION_NON_VOLATILE,KEY_WRITE or KEY_WOW64_64KEY,nil,a,nil);
b:=GetCurrentDirectory(256,c);
RegSetValueEx(a,'Path',0,REG_SZ,@c,b);
RegCloseKey(a);
end;
А в масме не работает.
если чем помог, поставьте отзыв на весы

Последний раз редактировалось Xatr; 16.01.2010 в 13:56.
Xatr вне форума Ответить с цитированием
Старый 16.01.2010, 22:26   #6
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

Проверь в масме чему там равняется KEY_WOW64_64KEY. Должно быть 0x100.
maxionans вне форума Ответить с цитированием
Старый 17.01.2010, 01:29   #7
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

в масме:
KEY_WOW64_64KEY equ (0100)
в Delphi:
KEY_WOW64_64KEY = $0100;
если чем помог, поставьте отзыв на весы
Xatr вне форума Ответить с цитированием
Старый 17.01.2010, 02:41   #8
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

в масме это в hex? меня смущает отсутствие h в написании числа.
maxionans вне форума Ответить с цитированием
Старый 17.01.2010, 02:48   #9
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

всё, разобрался. надо было так:
Код:
invoke RegCreateKeyEx,HKEY_LOCAL_MACHINE,addr au,0,0,REG_OPTION_NON_VOLATILE,KEY_WRITE or 0100h,0,addr d,0
создаёт в нужном месте.

KEY_WOW64_64KEY equ (0100)
почему написано в скобках? непонятно.
если чем помог, поставьте отзыв на весы
Xatr вне форума Ответить с цитированием
Старый 17.01.2010, 04:00   #10
maxionans
Форумчанин
 
Аватар для maxionans
 
Регистрация: 02.01.2010
Сообщений: 254
По умолчанию

очевидно, у тебя константа KEY_WOW64_64KEY объявлена неправильно.
maxionans вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разрядность ОСи x86/x64 Veiron Win Api 11 13.12.2010 17:26
C++ Bilder or Delphi под x64 SunKnight Свободное общение 5 10.02.2010 11:18
Borland C для vista x64 Aндрей Общие вопросы C/C++ 2 24.12.2009 13:46
X64 Debug BioS Общие вопросы C/C++ 6 07.10.2009 20:41
svchost.exe в Windows Vista x64 Maxs Windows 5 15.06.2009 01:44