Monday, September 24, 2007

注册表操作纪事

按理,注册表操作是个极其简单的过程,但我还是掉进坑里几回,为防再次进坑,立此为证,以绝后患。
有点错乱了。

操作注册表记录
1.注册表中的树形控件中项目在注册表操作中叫做key,而右边列表控件中项目叫做value.
2.注册表项目的字符串应以"\"间隔,以"\"结束,当然ASM中字串应以0结束。例如:
strReg db "Software\Microsoft\windows\CurrentVersion\explorer\Advanced\Folder\Hidden\SHOWALL\",0
如果以"\\"间隔,则会出现奇怪的问题,在注册表打开时(用regedit),操作正常,如果没有打开,则eax返回02错误,意思是找不到指定的文件。(在winerror.h)link版本5.12.8078.0。
3.操作注册表时应先打开
invoke RegOpenKeyEx,HKEY_LOCAL_MACHINE,addr strReg,NULL,KEY_WRITE,addr adRegOpen
4.删除value,设置value的操作示例
  invoke RegDeleteValue,adRegOpen,addr strRegValue
  invoke RegSetValueEx,adRegOpen,addr strRegValue,NULL,REG_DWORD,addr strRegNewValue,SIZE DWORD
  .IF eax==ERROR_SUCCESS
      invoke MessageBox,hWin,addr strSuccess,addr strCaption,MB_OK                             
  .ENDIF  
5.最后记得关闭。
  invoke RegCloseKey,adRegOpen
6.操作key值的函数与此类同。
ps.未解决问题:如何得到操作注册表时得到的错误信息,在invoke了注册表的函数后,eax值明明不为0,但getlasterror硬是得到error_success的信息。真是一个和谐的结果。明明错的离谱,但给出的回应是这是一个和谐的世界。最后程序完全在这里崩溃。