Главная страница
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.027 c
1-1184337761
WASM
2007-07-13 18:42
2007.09.30
TOOLTIP


2-1188541208
0leg
2007-08-31 10:20
2007.09.30
Архивация лог-файлов


3-1180202064
Valkyre
2007-05-26 21:54
2007.09.30
Не регистрируется подключение


3-1179905312
Dush
2007-05-23 11:28
2007.09.30
дублирование записи


2-1189077582
Yogan
2007-09-06 15:19
2007.09.30
SMTP, POP3 сервер