Здравствуйте!
Возникла следующая проблема:
необходимо загрузить данные из %windir%\Documents and Settings\user\NTUSER.DAT в реестр.
для этого использую ф-ю RegLoadKey следующим образом
RegLoadKey(HKEY_USERS, sSID, sFileName);
в результате работы ф-и возвращается код ошибки 1314: "A required privilege is not held by the client."
Собственно сам вопрос:
1) о каких привилегиях идет речь?
2) как установить эти привиегии в нужное значение?
за любую информацию и помощь буду очень признателен!
QA>Собственно сам вопрос:
QA>1) о каких привилегиях идет речь?
MSDN читать религия не позволяет?
The calling process must have the SE_RESTORE_NAME and SE_BACKUP_NAME privileges on the computer in which the registry resides. For more information, see Running with Special Privileges.
QA>2) как установить эти привиегии в нужное значение?
http://www.google.ru/search?hl=ru&q=SE_BACKUP_NAME&lr=
Здравствуйте, qzen.avk, Вы писали:
QA>Здравствуйте!
QA>Возникла следующая проблема:
QA>необходимо загрузить данные из %windir%\Documents and Settings\user\NTUSER.DAT в реестр.
QA>для этого использую ф-ю RegLoadKey следующим образом
QA>QA>RegLoadKey(HKEY_USERS, sSID, sFileName);
QA>
QA>в результате работы ф-и возвращается код ошибки 1314: "A required privilege is not held by the client."
QA>Собственно сам вопрос:
QA>1) о каких привилегиях идет речь?
QA>2) как установить эти привиегии в нужное значение?
QA>за любую информацию и помощь буду очень признателен!
Привет. Сорри за то что на дельфях, но тут речь про API, так что, думаю, поможет. Эти функции для того чтобы выключить комп. С реестром (константами привилегий) — смотри справку которые постили камрады в предыдущих постах.
function SetPrivilege(aPrivilegeName : string;
aEnabled : boolean ): boolean;
var
TPPrev,
TP : TTokenPrivileges;
Token : THandle;
dwRetLen : DWord;
begin
Result := False;
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, Token );
TP.PrivilegeCount := 1;
if( LookupPrivilegeValue(nil, PChar( aPrivilegeName ),
TP.Privileges[ 0 ].LUID ) ) then
begin
if( aEnabled )then
TP.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
else
TP.Privileges[0].Attributes:= 0;
dwRetLen := 0;
Result := AdjustTokenPrivileges(Token,False,TP,
SizeOf( TPPrev ),
TPPrev,dwRetLen );
end;
CloseHandle( Token );
end;
function TFormMain.ShutDownComputer: Boolean;
begin
//
result := TRUE;
if prWUtils.Win32PlatformIsUnicode then begin
if( SetPrivilege( 'SeShutdownPrivilege', true ) ) then begin
if( not ExitWindowsEx( EWX_SHUTDOWN, 0 ) )then begin
MainLog.AddError(PRLang.StrW['g_logINF0021']);
Result := False;
end;
SetPrivilege( 'SeShutdownPrivilege', False )
end else begin
MainLog.AddError(PRLang.StrW['g_logINF0021']);
Result := False;
end;
end else if( not ExitWindowsEx( EWX_SHUTDOWN, 0 ) )then begin
MainLog.AddError(PRLang.StrW['g_logINF0021']);
Result := False;
end;
end;
Здравствуйте, apple-antonovka.
Ths огромный за помощь!