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

Здесь обсуждается всё, что касается макросов.
2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Tue 17 Jun, 2014 14:33

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

User avatar
John Doe
Бюрократ
Posts: 11096
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

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

Post by John Doe » Tue 17 Jun, 2014 14:51

Можно назвать как угодно, не обязательно _macroinit.lua

fps
Posts: 163
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 11 times
Been thanked: 3 times

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

Post by fps » Tue 17 Jun, 2014 16:18

zg,
вы под "элементарным макросом" имели ввиду что-то типа примера 2useven10?
По мне, так его ну никак элементарным не назовешь. Высший пилотаж какой-то. Если для остальных тут это элементарщина, то я пойду пока в песочнике поиграю..

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

User avatar
zg
zero-gravity
Posts: 5241
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Tue 17 Jun, 2014 16:53

fps wrote:вы под "элементарным макросом" имели ввиду что-то типа примера 2useven10?
нет, у него как-то чересчур усложнено всё.

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Tue 17 Jun, 2014 17:11

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

User avatar
John Doe
Бюрократ
Posts: 11096
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

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

Post by John Doe » Tue 17 Jun, 2014 17:41

2useven10 wrote:Может я накосячил, [...]
Ага
hcurrp
hcurrсp

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

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

Post by 2useven10 » Tue 17 Jun, 2014 17:53

поправил. с правкой работает?
я сейчас на xp и права на всё что можно у меня добавлены, проверить не на чем...

User avatar
John Doe
Бюрократ
Posts: 11096
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

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

Post by John Doe » Tue 17 Jun, 2014 17:57

На 8.1 работает.
А на XP проверю завтра (надо зайти в System Volume Information) Update: на XP тоже работает.

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

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

fps
Posts: 163
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 11 times
Been thanked: 3 times

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

Post by fps » Tue 17 Jun, 2014 19:10

На win7 работает.
Большое спасибо.

User avatar
zg
zero-gravity
Posts: 5241
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 42 times
Contact:

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

Post by zg » Tue 17 Jun, 2014 19:35

альтернативный вариант попроще.
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"

Shmuel
Posts: 5097
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

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

Post by Shmuel » Tue 17 Jun, 2014 20:04

zg

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

Denis
Posts: 1390
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 2 times
Been thanked: 2 times

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

Post by Denis » Wed 18 Jun, 2014 07:14

А следующий баг куда писать - если с макросом viewtopic.php?p=119866#p119866 зайти в "System Volume Information", сохранить настройки и перезапустить Far, то при следующем запуске на панели пустая "System Volume Information".

User avatar
John Doe
Бюрократ
Posts: 11096
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

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

Post by John Doe » Wed 18 Jun, 2014 07:27

Denis
Не воспроизводится.

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

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

Denis
Posts: 1390
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 2 times
Been thanked: 2 times

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

Post by Denis » Wed 18 Jun, 2014 07:30

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

Denis
Posts: 1390
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 2 times
Been thanked: 2 times

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

Post by Denis » Wed 18 Jun, 2014 07:32

Но вот если нажать CtrlR, то содержимое "System Volume Information" появляется (если макрос есть).

Denis
Posts: 1390
Joined: Tue 05 Apr, 2005 18:12
Has thanked: 2 times
Been thanked: 2 times

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

Post by Denis » Wed 18 Jun, 2014 07:37

Нашёл в чём дело.
Была отключена "[ ] use additional privileges".
В таком случае всё как я описал. Если включить, то при старте Far'a запрашиваются привилегии.

Post Reply

Return to “Обсуждение макросов”