Помогите загрузить hive в реестр!
От: qzen.avk  
Дата: 03.09.06 13:37
Оценка:
Здравствуйте!
Возникла следующая проблема:
необходимо загрузить данные из %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) как установить эти привиегии в нужное значение?

за любую информацию и помощь буду очень признателен!
Re: Помогите загрузить hive в реестр!
От: apple-antonovka  
Дата: 03.09.06 14:07
Оценка:
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=
Re: Помогите загрузить hive в реестр!
От: Аноним  
Дата: 03.09.06 14:24
Оценка:
Здравствуйте, 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;
Re[2]: Помогите загрузить hive в реестр!
От: qzen.avk  
Дата: 04.09.06 09:34
Оценка:
Здравствуйте, apple-antonovka.
Ths огромный за помощь!
Re[2]: Помогите загрузить hive в реестр!
От: qzen.avk  
Дата: 04.09.06 09:35
Оценка:
Ths огромный за помощь!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.