Page 1 of 7

Получение привилегий backup/restore

Posted: Tue 17 Jun, 2014 14:33
by 2useven10
Примечание модератора: начало обсуждения см. в теме Запрос дополнительных привилегий при поиске.
zg wrote:
fps wrote:
zg wrote:убираете все галочки и запускаете фар от имени администратора.
это не поможет
> снятие галки в системных настройках отключает диалог, но привилегии в этом случае не предоставляются, а значит это не решение вопроса <
backup/restore поднимаются элементарным макросом.
что-то вроде:

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 14:51
by John Doe
Можно назвать как угодно, не обязательно _macroinit.lua

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 16:18
by fps
zg,
вы под "элементарным макросом" имели ввиду что-то типа примера 2useven10?
По мне, так его ну никак элементарным не назовешь. Высший пилотаж какой-то. Если для остальных тут это элементарщина, то я пойду пока в песочнике поиграю..

2useven10,
у меня в Win7 32bit макрос тоже не работает

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 16:53
by zg
fps wrote:вы под "элементарным макросом" имели ввиду что-то типа примера 2useven10?
нет, у него как-то чересчур усложнено всё.

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 17:11
by 2useven10
zg wrote:
fps wrote:вы под "элементарным макросом" имели ввиду что-то типа примера 2useven10?
нет, у него как-то чересчур усложнено всё.
У меня проще не получается. ffi не знаю - только по примерам на форуме.
Но проблема в том, что не работает.
Может я накосячил, может этого не достаточно...

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 17:41
by John Doe
2useven10 wrote:Может я накосячил, [...]
Ага
hcurrp
hcurrсp

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 17:53
by 2useven10
поправил. с правкой работает?
я сейчас на xp и права на всё что можно у меня добавлены, проверить не на чем...

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 17:57
by John Doe
На 8.1 работает.
А на XP проверю завтра (надо зайти в System Volume Information) Update: на XP тоже работает.

По коду.
Я так понимаю все привилегии можно передать массивом за 1 вызов.
И ненулевое значение, возвращённое функцией AdjustTokenPrivileges, ещё не значит что операция удалась, поэтому тут надо дополнительно использовать GetLastError.

P.S.
Ну и как уже сказано, SE_CREATE_SYMBOLIC_LINK_NAME устанавливать нет смысла.

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 19:10
by fps
На win7 работает.
Большое спасибо.

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 19:35
by zg
альтернативный вариант попроще.
moonscript:

Code: Select all

ffi=require"ffi"
C=ffi.C
advapi32=ffi.load"advapi32"
safe_cdef=(name,def)->
  if not pcall(ffi.sizeof,name) then ffi.cdef(def)
safe_cdef "LUID",[[
  typedef struct _LUID {
    unsigned long LowPart;
    long HighPart;
  } LUID;
]]
safe_cdef "LUID_AND_ATTRIBUTES",[[
  typedef struct _LUID_AND_ATTRIBUTES {
    LUID Luid;
    unsigned long Attributes;
  } LUID_AND_ATTRIBUTES;
]]
safe_cdef "TOKEN_PRIVILEGES",[[
  typedef struct _TOKEN_PRIVILEGES {
    unsigned long PrivilegeCount;
    LUID_AND_ATTRIBUTES Privileges[1];
  } TOKEN_PRIVILEGES;
]]
ffi.cdef[[
int32_t LookupPrivilegeValueA(const char* lpSystemName,const char* lpName,LUID* lpLuid);
int32_t OpenProcessToken(void* ProcessHandle,unsigned long DesiredAccess,void** TokenHandle);
int32_t AdjustTokenPrivileges(void* TokenHandle,int32_t DisableAllPrivileges, TOKEN_PRIVILEGES* NewState,unsigned long BufferLength,TOKEN_PRIVILEGES* PreviousState,unsigned long* ReturnLength);
int32_t CloseHandle(void* hObject);
void* GetCurrentProcess(void);
]]

TOKEN_ADJUST_PRIVILEGES=0x0020
SE_PRIVILEGE_ENABLED=0x00000002

EnablePrivilege=(name)->
  priv=ffi.new"TOKEN_PRIVILEGES"
  priv.PrivilegeCount=1
  priv.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED
  if 0~=advapi32.LookupPrivilegeValueA ffi.NULL,name,priv.Privileges[0].Luid
    token=ffi.new("void*[1]")
    if 0~=advapi32.OpenProcessToken C.GetCurrentProcess!,TOKEN_ADJUST_PRIVILEGES,token
      advapi32.AdjustTokenPrivileges token[0],0,priv,ffi.sizeof(priv),ffi.NULL,ffi.NULL
      C.CloseHandle token[0]

EnablePrivilege"SeBackupPrivilege"
EnablePrivilege"SeRestorePrivilege"

Re: Запрос дополнительных привилегий при поиске

Posted: Tue 17 Jun, 2014 20:04
by Shmuel
zg

safe_cdef=(def)-> pcall ffi.cdef,def попроще будет, и только один параметр нужен.

Re: Запрос дополнительных привилегий при поиске

Posted: Wed 18 Jun, 2014 07:14
by Denis
А следующий баг куда писать - если с макросом http://forum.farmanager.com/viewtopic.p ... 66#p119866 зайти в "System Volume Information", сохранить настройки и перезапустить Far, то при следующем запуске на панели пустая "System Volume Information".

Re: Запрос дополнительных привилегий при поиске

Posted: Wed 18 Jun, 2014 07:27
by John Doe
Denis
Не воспроизводится.

При следующем запуске макрос тоже присутствует?
Фар запускается с повышенными правами?

Что если всё то же самое проделать без макроса?

Re: Запрос дополнительных привилегий при поиске

Posted: Wed 18 Jun, 2014 07:30
by Denis
Far x64. win7 sp1. В обоих случаях запускается под админом. Без макроса повторый запуск даёт те же результаты.

Re: Запрос дополнительных привилегий при поиске

Posted: Wed 18 Jun, 2014 07:32
by Denis
Но вот если нажать CtrlR, то содержимое "System Volume Information" появляется (если макрос есть).