Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.30;
Скачать: CL | DM;

Вниз

Привелегии бэкапа   Найти похожие ветки 

 
Рамиль ©   (2007-04-02 12:17) [0]

Хочу получить привелегию бакапа. Код отрабатывает без ошибок, в папку пускает, а файлы просмотреть не дает... Чего я не доделал?
program BkpPriv;

{$APPTYPE CONSOLE}

uses
 SysUtils, Windows;

var
 Rlst: LongBool;
 StartUpInfo: TStartUpInfo;
 ProcessInfo: TProcessInformation;
 Error: integer;
 f: text;
 s: string;

function SetPrivileges(const S: String; const hProcess: Cardinal): Boolean;
var
hToken: THandle;
tkp,PrevState: _TOKEN_PRIVILEGES;
k: Cardinal;
ver: TOSVERSIONINFO;
begin
Result := false;
ver.dwOSVersionInfoSize := SizeOf(ver);
GetVersionEx(ver);
if ver.dwPlatformId = VER_PLATFORM_WIN32_NT then
  begin
    // "Включаем" привилегию
    OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
    LookupPrivilegeValue(nil, PChar(S), tkp.Privileges[0].Luid);
    tkp.PrivilegeCount := 1;
    tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(PrevState), PrevState, k);
    if GetLastError = ERROR_SUCCESS then
      Result := true
  end
end;

begin
 FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0);
 with StartUpInfo do
 begin
   cb := SizeOf(TStartUpInfo);
   dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
   wShowWindow := SW_SHOWNORMAL;
 end;
 Rlst := CreateProcess(PChar(ParamStr(1)), nil, nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
 if Rlst then
 with ProcessInfo do begin
   WaitForInputIdle(hProcess, INFINITE); // ждем завершения инициализации
   SetPrivileges("SeBackupPrivilege", hProcess);
   CloseHandle(hThread); // закрываем дескриптор процесса
   CloseHandle(hProcess); // закрываем дескриптор потока
 end;
end.


 
Рамиль ©   (2007-04-02 12:19) [1]

т. е. я запускаю этим кодом файловый менеджер. Если дать привелегии текущему процессу, то при попытке открыть файл на чтение, вываливает нет доступа.


 
Игорь Шевченко ©   (2007-04-02 12:22) [2]


>   SetPrivileges("SeBackupPrivilege", hProcess);


а результат проверить ?


 
Рамиль ©   (2007-04-02 12:27) [3]


> Игорь Шевченко ©   (02.04.07 12:22) [2]

ERROR_SUCCESS

Криво объяснил (
Если я запускаю этим кодом файловый менеджер, то к папкам я доступ получаю, но файлы не копируются и не просматриваются (нет доступа).
Если получить привелегии для текущего процесса, то все равно, при попытке открыть файл на чтение нет доступа.


 
Рамиль ©   (2007-04-02 16:58) [4]

Так. Разобрался, привилегии недостаточно :(
Надо еще при открытии файла флаг FILE_FLAG_BACKUP_SEMANTICS указывать...



Страницы: 1 вся ветка

Текущий архив: 2007.09.30;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.03 c
15-1188909994
Denis_
2007-09-04 16:46
2007.09.30
Палец заменит кредитку?


1-1184613088
Lavrenty
2007-07-16 23:11
2007.09.30
Событие на обновление файла


15-1188452913
TohaNik
2007-08-30 09:48
2007.09.30
Столько эмоций!


15-1188811502
Steep
2007-09-03 13:25
2007.09.30
Файлы


15-1188440446
Slider007
2007-08-30 06:20
2007.09.30
С днем рождения ! 30 августа 2007 четверг