Реестр: сохранение и восстановление ветки реестра
Цитата:
//функция установки приоритета
HRESULT ModifyPrivilege(
IN LPCTSTR szPrivilege,
IN BOOL fEnable)
{
HRESULT hr = S_OK;
TOKEN_PRIVILEGES NewState;
LUID luid;
HANDLE hToken = NULL;
// Open the process token for this process.
if (!OpenProcessToken(GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hToken ))
{
MessageDlg("Failed OpenProcessToken",mtError, TMsgDlgButtons() << mbOK, 0);
return ERROR_FUNCTION_FAILED;
}
// Get the local unique ID for the privilege.
if ( !LookupPrivilegeValue( NULL,
szPrivilege,
&luid ))
{
CloseHandle( hToken );
MessageDlg("Failed LookupPrivilegeValue",mtError, TMsgDlgButtons() << mbOK, 0);
return ERROR_FUNCTION_FAILED;
}
// Assign values to the TOKEN_PRIVILEGE structure.
NewState.PrivilegeCount = 1;
NewState.Privileges[0].Luid = luid;
NewState.Privileges[0].Attributes =
(fEnable ? SE_PRIVILEGE_ENABLED : 0);
// Adjust the token privilege.
if (!AdjustTokenPrivileges(hToken,
FALSE,
&NewState,
0,
NULL,
NULL))
{
MessageDlg("Failed AdjustTokenPrivileges",mtError, TMsgDlgButtons() << mbOK, 0);
hr = ERROR_FUNCTION_FAILED;
}
// Close the handle.
CloseHandle(hToken);
return hr;
}
В глав/функции:
Цитата:
...
if (RegOpenKey(HKEY_LOCAL_MACHINE,............,&hk)==ERROR_SUCCESS)
{
HRESULT hr;
hr = ModifyPrivilege(SE_BACKUP_NAME, TRUE);
if (!SUCCEEDED(hr))
MessageDlg("Failed to modify privilege.",mtError, TMsgDlgButtons() << mbOK, 0);
else
MessageDlg("Successfully modified privilege",mtError, TMsgDlgButtons() << mbOK, 0);
if (RegSaveKeyEx(hk,"REGNAME.reg",NULL,REG_STANDARD_FORMAT)==ERROR_SUCCESS)
RegCloseKey(hk);
}
...
Почему функция RegSaveKeyEx создает файл нулевой длины, и не возвращает ERROR_SUCCESS, хоть у установлен приоритет SE_BACKUP_NAME?
ОС: Windows XP