Здравствуйте, fAL!
Нифига не должен.
Сам посмотри. Во-первых, одну из функций(RegOpenKeyEx) ты умудряешься вызывать с неправильным числом параметров. Следующей функции(RegSetValueEx) нужно в качестве первого параметра значение переменной my_hkey. Ну и RegCloseKey тоже хочет значение, а ты ей адрес даешь. В общем, верный код в приложении. Немного упрощенный, но работает :)
P.S. Если у тебя нету - скачай OllyDbg. Под отладчиком очень хорошо всё видно, вопросы отпадают сами собой :-)--
<p><font color=#C00000 size=1 face=tahoma><b>* In Gates we trust! :)</b></font></p>
Приложение:
format PE GUI 4.0 entry start include ‘%include%\win32a.inc‘ section ‘.data‘ data readable writeable my_subkey db ‘SOFTWARE\Microsoft\Windows\CurrentVersion\Run‘,0 my_value_data db ‘Myprogram.exe‘,0 my_hkey: dw 0 section ‘.code‘ code readable executable start: invoke RegOpenKeyEx,HKEY_CURRENT_USER,my_subkey,0,KEY_SET_VALUE,my_hkey invoke RegSetValueEx,[my_hkey], my_value_data,0,1,my_value_data,13 invoke RegCloseKey,[my_hkey] invoke ExitProcess,0 section ‘.idata‘ import data readable writeable library kernel,‘KERNEL32.DLL‘,\ advapi,‘ADVAPI32.DLL‘ import kernel,\ ExitProcess,‘ExitProcess‘import advapi,\ RegOpenKeyEx,‘RegOpenKeyExA‘,\ RegSetValueEx,‘RegSetValueExA‘,\ RegCloseKey,‘RegCloseKey‘