проблема с RegSaveKey

Тема в разделе "WASM.BEGINNERS", создана пользователем Kalten Bruner, 7 авг 2005.

  1. Kalten Bruner

    Kalten Bruner New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2005
    Сообщения:
    3
    Адрес:
    Russia
    Код (Text):
    1. ...
    2. .data
    3. HKLM equ HKEY_LOCAL_MACHINE
    4. PathToSave db 'SOFTWARE\Yahoo',0
    5. FileNam db 'D:\SavKey.reg',0
    6. .code
    7.  
    8. start:
    9. ....
    10. invoke RegOpenKeyEx,HKLM,addr PathToSave,NULL,KEY_ALL_ACCESS,addr hKey
    11.        cmp eax,0
    12.        jne @@Exit
    13.        invoke RegSaveKey,hKey,addr FileNam,NULL
    14.        cmp eax,0
    15.        jne @@Exit
    16.        invoke RegCloseKey,hKey
    17.  
    18. @@Exit:
    19.        invoke ExitProcess,eax;Выход
    20. end start


    Проблема такова: функция RegSaveKey сохраняет ключи в файл, но он у меня получается нулевой длины, при любых значениях FileNam и PathToSave. Почему? Кстати, расскажите как восстанавливать ключ реестра из файла? Спасибо!
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Читаем справку:

    The calling process must have the SE_BACKUP_NAME privilege enabled.
     
  3. Volniy

    Volniy New Member

    Публикаций:
    0
    Регистрация:
    9 сен 2005
    Сообщения:
    3
    Адрес:
    Belarus
    >>FileNam db 'D:\SavKey.reg',0

    Файл, создаваемый этой функции имеет нетекстовый, а бинарный формат (куст). Если ты ожидаешь получить скрипт для редактора реестра, то тут облом.
     
  4. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    У меня та же трабла :dntknw:

    >SE_BACKUP_NAME privilege enabled.

    Можно более подробно ?

    Я работаю под локальным админом на своем компе т.е. в теории я имею права по бекап системы.
    Прогу я запускаю под собой соответственно она так же имеет эти права !

    Спасибо.
     
  5. OFFSIDE

    OFFSIDE New Member

    Публикаций:
    0
    Регистрация:
    23 сен 2006
    Сообщения:
    106
    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
    );
    Можт поможет
     
  6. TanKisT

    TanKisT New Member

    Публикаций:
    0
    Регистрация:
    21 авг 2006
    Сообщения:
    8
    asmlamo
    Код (Text):
    1. BOOL GetPrivilege(char* SeNamePriv){
    2.  
    3.     HANDLE            hToken;
    4.     LUID              lpLuid;
    5.     TOKEN_PRIVILEGES  NewState;
    6.  
    7.     if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken)){
    8.         if(LookupPrivilegeValue(NULL, SeNamePriv, &lpLuid)){
    9.             NewState.PrivilegeCount = 1;
    10.             NewState.Privileges[0].Luid = lpLuid;
    11.             NewState.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    12.             AdjustTokenPrivileges (hToken, FALSE, &NewState, sizeof(NewState), NULL, NULL);
    13.             return TRUE;
    14.         }
    15.     CloseHandle (hToken);
    16.     }
    17. return FALSE;
    18. }
     
  7. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    TanKisT
    Спасибо буду пробовать !
     
  8. asmlamo

    asmlamo Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    1.734
    К сожалению я не знаю С++ и прочих ЯВУ.

    Пишу на только на асме.

    Как пересести этот код на асм ?



    invoke GetCurrentProcess ; я так понял эта функция хендлер через EAX передает ?
    invoke OpenProcessToken, eax, TOKEN_ADJUST_PRIVILEGES, hToken
    invoke LookupPrivilegeValue, NULL, SE_BACKUP_NAME, &luid

    А как дальше не понял, там я думаю некий массив ?