Сейчас на форуме: tyns777, _MBK_, UniSoft (+11 невидимых)

 eXeL@B —› Программирование —› Ассемблер - передача строки из поля ввода в качестве параметра в реестр
Посл.ответ Сообщение

Ранг: 19.4 (новичок), 11thx
Активность: 0.020
Статус: Участник

Создано: 04 августа 2012 17:18
· Личное сообщение · #1

Ассемблер - передача строки из поля ввода в качестве параметра в реестр



Ранг: 19.4 (новичок), 11thx
Активность: 0.020
Статус: Участник

Создано: 04 августа 2012 17:29 · Поправил: elch
· Личное сообщение · #2

Нужно передать строку из поля ввода в качестве значения в реестр. Вот тестовый исходник:
Code:
  1. .686
  2. .model flat, stdcall
  3. option casemap :none
  4.  
  5. include windows.inc
  6. include user32.inc
  7. include kernel32.inc
  8. include masm32.inc
  9. include macros.asm
  10. include advapi32.inc
  11.  
  12. includelib user32.lib
  13. includelib kernel32.lib
  14. includelib masm32.lib
  15. includelib advapi32.lib
  16.  
  17. DialogProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
  18.  
  19. .const
  20. DLG_NAME equ 101
  21. BTN_REG equ 102
  22. BTN_EXIT equ 103
  23.  
  24. .data
  25. of_Reg db '&Register',0
  26. of_Exit db 'E&xit',0
  27. Caption1 db 'Ok',0
  28. Caption2 db 'Bad',0
  29. SubKey BYTE 'Software\Test\SubTest\Config',0
  30. AddRegValue1 BYTE 'xxxxxxxxxx',0
  31. AddRegValue2 BYTE 'Name',0
  32. RegCode BYTE 'yyyyyyyyyy',0
  33. RegName BYTE 'test',0
  34.  
  35. .data?
  36.  
  37. hInstance dd ?
  38. hWnd dd ?
  39.  
  40. RegH PHKEY ?
  41. OutRegName LOGFONT <>
  42.  
  43. .code
  44. main:
  45.  
  46. invoke GetModuleHandle,0
  47. invoke DialogBoxParam,eax,100,0,addr DialogProc,0
  48.  
  49. invoke ExitProcess,0
  50.  
  51. align 16
  52.  
  53. DialogProc proc uses ebx esi edi hwnd:dword,message:dword,wparam:dword,lparam:dword
  54.  
  55. mov eax,message
  56. .if eax==WM_INITDIALOG
  57.  
  58. invoke SetDlgItemText,hwnd,DLG_NAME,addr RegName
  59. invoke SetDlgItemText,hwnd,BTN_EXIT,addr of_Exit
  60. invoke SetDlgItemText,hwnd,BTN_REG,addr of_Reg
  61.  
  62. .elseif eax==WM_COMMAND
  63.  
  64. mov eax,wparam
  65. .if eax==BTN_REG
  66.  
  67. invoke RegCreateKey, HKEY_CURRENT_USER, addr SubKey, addr RegH
  68. .if eax==ERROR_SUCCESS
  69.  
  70. invoke RegSetValueEx, RegH, addr AddRegValue1, 0, REG_SZ, addr RegCode, sizeof RegCode
  71. invoke GetDlgItemText,hwnd,DLG_NAME,offset OutRegName, sizeof OutRegName
  72. invoke RegSetValueEx, RegH, addr AddRegValue2, 0, REG_SZ, addr OutRegName, sizeof OutRegName
  73. .endif
  74. .if eax==ERROR_SUCCESS
  75. invoke MessageBox,hwnd,chr$("Add to registry successfull! "),addr Caption1,MB_ICONQUESTION+MB_TOPMOST
  76. .else
  77. invoke MessageBox,hwnd,chr$("Add to registry failed! "),addr Caption2,MB_ICONERROR+MB_TOPMOST
  78. .endif
  79. .endif
  80. .endif
  81.  
  82. .if eax==BTN_EXIT
  83. invoke EndDialog,hwnd,0
  84.  
  85. .elseif eax==WM_CLOSE
  86. invoke EndDialog,hwnd,0
  87.  
  88. .elseif message==WM_LBUTTONDOWN
  89. invoke SendMessage,hwnd,WM_NCLBUTTONDOWN,HTCAPTION,0
  90. .endif
  91.  
  92. xor eax,eax
  93. ret
  94. DialogProc endp
  95.  
  96. end main

У меня это прекрасно работает на WinXP SP3. У другого человека на W7 x64 тоже все отрабатывает. Но у некоторых - почему-то не работает. В чем засада?

Исходники: bdb3_04.08.2012_EXELAB.rU.tgz - test.zip




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 04 августа 2012 18:01 · Поправил: -=AkaBOSS=-
· Личное сообщение · #3

elch пишет:
Но у некоторых - почему-то не работает. В чем засада?

после какого вызова не работает?
не работает RegCreateKey, или именно RegSetValueEx?
прав на запись в реестр всем хватает?



Ранг: 19.4 (новичок), 11thx
Активность: 0.020
Статус: Участник

Создано: 04 августа 2012 19:00 · Поправил: elch
· Личное сообщение · #4

-=AkaBOSS=-
В том то и дело, что объяснить внятно не могут. Пишут "Вот почему-то у меня в абауте не показывает введенного мной имени" и все Вот здесь подробней про это: --> Link <--
Мне кажется, что у меня все правильно сделано. Спросил здесь на всякий случай - может, еще чего в код надо добавить, или ошибка где-то?




Ранг: 307.9 (мудрец), 196thx
Активность: 0.180
Статус: Участник

Создано: 04 августа 2012 20:21 · Поправил: mysterio
· Личное сообщение · #5

elch
WinXP SP 2 все ок. Скорее всего тот кто запускает твою поделку (и вероятнее всего это юЗверь с W7) не слышал про запуск с правами администратора (а также с отключением или понижением UAC на 1-2 уровня что бы умерить пыл параноии W7). ИМХО.

Также не забывать про реестр W7 WOW64 и т.д.- ветки другие.
На худой конец заюзать другие API.

UPD:
LONG RegSetValueEx(
HKEY hKey, // handle of key to set value for
LPCTSTR lpValueName, // address of value to set
DWORD Reserved, // reserved
DWORD dwType, // flag for value type
CONST BYTE *lpData, // address of value data
DWORD cbData // size of value data
);
....
cbData
Specifies the size, in bytes, of the information pointed to by the lpData parameter. If the data is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, cbData must include the size of the terminating null character.

SizeOf (x)+1

Больше идей нет ;) У меня SizeOf RegCode хоть SizeOf RegCode+1 пашет.

-----
Don_t hate the cracker - hate the code.





Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 04 августа 2012 20:28 · Поправил: -=AkaBOSS=-
· Личное сообщение · #6

А рег ключ от имени зависит?
Если да, то если бы прога его не читала, ничего бы не работало.
Вставь вызов RegFlushKey. Может, поможет
Ну и на всякий, вставь в код проверку на вводимые символы имени.
А то мало ли, что и как они там вводят

/ADD:
mysterio
а вот чел из под хп, с той же проблемой:
http://forum.ru-board.com/topic.cgi?forum=35&topic=1500&start=1560#18



Ранг: 27.8 (посетитель), 51thx
Активность: 0.030
Статус: Участник

Создано: 05 августа 2012 06:27 · Поправил: ADMIN-CRACK
· Личное сообщение · #7

NAMES equ 114

of_Name2 db 'User Name:',0
Value1 db 'LicensedTo',0
SubKey db 'Software\ (второй [ \ ] тут не отображается увы) ProcessLasso',0
REG_S db 'REG_SZ',0

;REGKEY
hKey dd ?
lpcbData dd ?
szBuff db 512 dup(?)



invoke RegCreateKeyEx,HKEY_CURRENT_USER,addr SubKey,0,addr REG_S,0,KEY_WRITE or KEY_READ,0,addr hKey,0
invoke GetDlgItemText,hwnd,NAMES,addr szBuff,512
invoke lstrlen, addr szBuff
mov lpcbData, eax
invoke RegSetValueEx,hKey,addr Value1,0,REG_SZ,addr szBuff,lpcbData


Может чего и забыл.

| Сообщение посчитали полезным: elch

Ранг: 19.4 (новичок), 11thx
Активность: 0.020
Статус: Участник

Создано: 05 августа 2012 18:08
· Личное сообщение · #8

Вроде все нормально, помогло решение, предложенное mysterio, которое в более понятном виде запостил ADMIN-CRACK. Всем спасибо.
Модераторы - закройте тему тогда, а то у меня чето не закрывается




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 05 августа 2012 18:40
· Личное сообщение · #9

Автор сам может закрыть свою тему, кнопка "Закрыть тему" находится внизу страницы, под кнопкой "Отправить сообщение".


 eXeL@B —› Программирование —› Ассемблер - передача строки из поля ввода в качестве параметра в реестр
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати