Код (Text): ... .data HKLM equ HKEY_LOCAL_MACHINE PathToSave db 'SOFTWARE\Yahoo',0 FileNam db 'D:\SavKey.reg',0 .code start: .... invoke RegOpenKeyEx,HKLM,addr PathToSave,NULL,KEY_ALL_ACCESS,addr hKey cmp eax,0 jne @@Exit invoke RegSaveKey,hKey,addr FileNam,NULL cmp eax,0 jne @@Exit invoke RegCloseKey,hKey @@Exit: invoke ExitProcess,eax;Выход end start Проблема такова: функция RegSaveKey сохраняет ключи в файл, но он у меня получается нулевой длины, при любых значениях FileNam и PathToSave. Почему? Кстати, расскажите как восстанавливать ключ реестра из файла? Спасибо!
>>FileNam db 'D:\SavKey.reg',0 Файл, создаваемый этой функции имеет нетекстовый, а бинарный формат (куст). Если ты ожидаешь получить скрипт для редактора реестра, то тут облом.
У меня та же трабла >SE_BACKUP_NAME privilege enabled. Можно более подробно ? Я работаю под локальным админом на своем компе т.е. в теории я имею права по бекап системы. Прогу я запускаю под собой соответственно она так же имеет эти права ! Спасибо.
LONG RegCreateKeyEx( HKEY hKey, // handle of an open key LPCTSTR lpszSubKey, // address of subkey name DWORD dwReserved, // reserved LPTSTR lpszClass, // address of class string DWORD fdwOptions, // special options flag REGSAM samDesired, // desired security access LPSECURITY_ATTRIBUTES lpSecurityAttributes, // address of key security structure PHKEY phkResult, // address of buffer for opened handle LPDWORD lpdwDisposition // address of disposition value buffer ); Можт поможет
asmlamo Код (Text): BOOL GetPrivilege(char* SeNamePriv){ HANDLE hToken; LUID lpLuid; TOKEN_PRIVILEGES NewState; if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)){ if(LookupPrivilegeValue(NULL, SeNamePriv, &lpLuid)){ NewState.PrivilegeCount = 1; NewState.Privileges[0].Luid = lpLuid; NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges (hToken, FALSE, &NewState, sizeof(NewState), NULL, NULL); return TRUE; } CloseHandle (hToken); } return FALSE; }
К сожалению я не знаю С++ и прочих ЯВУ. Пишу на только на асме. Как пересести этот код на асм ? invoke GetCurrentProcess ; я так понял эта функция хендлер через EAX передает ? invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES, hToken invoke LookupPrivilegeValue, NULL, SE_BACKUP_NAME, &luid А как дальше не понял, там я думаю некий массив ?