[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/vendor/symfony/event-dispatcher/EventDispatcher.php on line 184: call_user_func() expects parameter 1 to be a valid callback, class 'o0johntam0o/codeboxplus/event/main_listener' does not have a method 'message_content_event'
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4516: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3262)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4516: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3262)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4516: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3262)
forum.farmanager.com • Получение привилегий backup/restore - Page 2
Page 2 of 2

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

Posted: Wed 18 Jun, 2014 07:37
by Denis

Latest post of the previous page:

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

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

Posted: Wed 18 Jun, 2014 07:46
by John Doe
2useven10

Code: Select all

local z = ffi.new("char[?]", #n+1)
ffi.copy(z, n)
В этом нет необходимости.

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

Posted: Wed 18 Jun, 2014 09:20
by John Doe
Применение скриптов из данной темы приводит к тому, что активированные привилегии наследуются всеми процессами, запущеными впоследствии из фара.
Это неизбежно?

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

Posted: Wed 18 Jun, 2014 11:32
by John Doe
zg wrote:альтернативный вариант попроще.
В функцию AdjustTokenPrivileges в качестве BufferLength надо передавать 0.

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

Posted: Wed 18 Jun, 2014 23:01
by zg
John Doe wrote:В функцию AdjustTokenPrivileges в качестве BufferLength надо передавать 0.
там написано — можно, кстати. но да, ошибка.

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

Posted: Fri 20 Jun, 2014 08:31
by John Doe
2useven10
pcall не нужен, если в typedef использовать структуры не присваивая типу структуры имя (а у вас именно так)
viewtopic.php?p=119951#p119951

Можно все определения сделать в одном блоке ffi.cdef

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

Posted: Fri 20 Jun, 2014 13:53
by 2useven10
Поправил последний раз, с этого момента скрипт считаю идеальным.

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

Posted: Fri 20 Jun, 2014 14:52
by John Doe
2useven10 wrote:с этого момента скрипт считаю идеальным.
Похоже на то )
Разве что не уверен в необходимости TOKEN_QUERY (у zg работает и без него).

За компанию приведу и свой вариант:

Code: Select all

(119955)local Info = Info or package.loaded.regscript or function(...) return ... end --luacheck: ignore 113/Info
local nfo = Info { _filename or ...,
name = "EnablePrivileges";
description = "Enable backup/restore privileges";
version = "1"; --http://semver.org/lang/ru/
author = "jd";
url = "http://forum.farmanager.com/viewtopic.php?f=15&t=8707&p=119955#p119955";
id = "D33958E7-4A30-47CB-9F07-C2E1B254154E";

options = {
autostart = true,
}
}
if not nfo then return end

local ffi = require("ffi")
local C = ffi.C
local advapi32 = ffi.load("advapi32")

ffi.cdef[[
//http://msdn.microsoft.com/library/ms683179
HANDLE GetCurrentProcess(void); //WINAPI

//http://msdn.microsoft.com/library/ms724211
BOOL CloseHandle( //WINAPI
HANDLE hObject //_In_
);

//http://msdn.microsoft.com/library/ms679360
DWORD GetLastError(void);

//http://msdn.microsoft.com/library/aa379295
BOOL OpenProcessToken( //WINAPI
HANDLE ProcessHandle, //_In_
DWORD DesiredAccess, //_In_
PHANDLE TokenHandle //_Out_
);

//http://msdn.microsoft.com/library/aa379261
typedef struct { //_LUID
DWORD LowPart;
LONG HighPart;
} LUID, *PLUID;

//http://msdn.microsoft.com/library/aa379263
typedef struct { //_LUID_AND_ATTRIBUTES
LUID Luid;
DWORD Attributes;
} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;

//http://msdn.microsoft.com/library/aa379630
typedef struct { //_TOKEN_PRIVILEGES
DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[?]; //ANYSIZE_ARRAY
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;

//http://msdn.microsoft.com/library/aa379180
BOOL LookupPrivilegeValueA( //WINAPI
LPCSTR lpSystemName, //_In_opt_ //LPCTSTR
LPCSTR lpName, //_In_ //LPCTSTR
PLUID lpLuid //_Out_
);

//http://msdn.microsoft.com/library/aa375202
BOOL AdjustTokenPrivileges( //WINAPI
HANDLE TokenHandle, //_In_
BOOL DisableAllPrivileges, //_In_
PTOKEN_PRIVILEGES NewState, //_In_opt_
DWORD BufferLength, //_In_
PTOKEN_PRIVILEGES PreviousState, //_Out_opt_
PDWORD ReturnLength //_Out_opt_
);
]]

local TOKEN_ADJUST_PRIVILEGES = 0x0020
local SE_PRIVILEGE_ENABLED = 0x0002
local FALSE,NO_ERROR = 0,0

local function EnablePrivileges(names)
local state = ffi.new("TOKEN_PRIVILEGES",#names,#names)
--local size = n*ffi.sizeof("LUID_AND_ATTRIBUTES") + ffi.sizeof("uint32_t")
--local buffer = ffi.new("char[?]",size)
--local state = ffi.cast("TOKEN_PRIVILEGES*",buffer)
--state.PrivilegeCount=#names
for i=1,#names do
local p = state.Privileges[i-1]
if FALSE == advapi32.LookupPrivilegeValueA(nil, names[i], p.Luid) then return nil,"LookupPrivilegeValue" end
p.Attributes = SE_PRIVILEGE_ENABLED
end
local ptoken = ffi.new("void*[1]")
if FALSE==advapi32.OpenProcessToken(C.GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, ptoken) then return nil,"OpenProcessToken" end
if FALSE==advapi32.AdjustTokenPrivileges(ffi.gc(ptoken[0],C.CloseHandle),0,state,0,nil,nil) then return nil,"AdjustTokenPrivileges" end
return C.GetLastError()==NO_ERROR
end

function nfo:execute()
if Far.IsUserAdmin then
if EnablePrivileges{"SeBackupPrivilege","SeRestorePrivilege"} then
far.Message("Success!",self.name)
else
far.Message("Failed",self.name,nil,"w")
end
else
far.Message("User must be admin",self.name,nil,"w")
end
end

if Macro then
if nfo.options.autostart and not _G.runonce_done and Far.IsUserAdmin then
EnablePrivileges{"SeBackupPrivilege","SeRestorePrivilege"}
end
else
nfo:execute()
end
Отличия такие:
  • На вход принимается сразу весь список необходимых привилегий, и соответственно устанавливаются они за один вызов AdjustTokenPrivileges.
    EnablePrivileges{"SeBackupPrivilege","SeRestorePrivilege"}
  • В случае неудачи вторым значением возвращается имя функции, в которой произошла ошибка
Для нашей задачи это всё конечно непринципиально.

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

Posted: Fri 19 Aug, 2016 14:08
by Wave
Где-то между 4622 и 4747 это перестало работать.
Во всяком случае при наличии _macroinit.lua варианта от 2useven10 при входе в System Volume Information стали снова запрашиваться привилегии, при варианте от John Doe при старте фара выдаётся ошибка cannot convert 'number' to 'struct 2812 [1]', а вариант от zg я что-то не понял, как использовать. Назвал _macroinit.moon, перезапустил фар, ошибок не выдало, но при входе в System Volume Information запросило привилегии.

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

Posted: Fri 19 Aug, 2016 14:14
by Shmuel
Wave wrote: Назвал _macroinit.moon
Это ничего не даёт. Особо обрабатывается только _macroinit.lua.

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

Posted: Fri 19 Aug, 2016 14:39
by John Doe
Wave wrote: при варианте от John Doe при старте фара выдаётся ошибка
Исправил

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

Posted: Fri 19 Aug, 2016 16:17
by 2useven10
Wave wrote: при наличии _macroinit.lua варианта от 2useven10 при входе в System Volume Information стали снова запрашиваться привилегии
У меня всё работает. Может запускать стали не от админа?

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

Posted: Mon 22 Aug, 2016 09:49
by Wave
2useven10 wrote:
Wave wrote: при наличии _macroinit.lua варианта от 2useven10 при входе в System Volume Information стали снова запрашиваться привилегии
У меня всё работает. Может запускать стали не от админа?
Пользовательские права и всё такое прочее у меня уже много лет не меняются. Просто вот заметил, что стало запрашивать привилегии. Сначала и разбираться на стал в течении скольких-то сборок, потом… В общем, когда дошли руки, с трудом вспомнил, что что-то такое автостартующее на тему привилегий было, пока нашёл, где и что оно и откуда я его взял.
А заодно нашёлся бэкап фара-плагинов-макросов 4622, и эта сборка и сборная солянка на этой же машине работает по-прежнему, молча заходит в закрытые папки, автоматически повышая привилегии.
John Doe wrote:
Wave wrote: при варианте от John Doe при старте фара выдаётся ошибка
Исправил
Ошибку теперь не выдаёт, но и привилегии запрашивает.

P.s. Впрочем, проверил, скачал архив 4747 с сайта, распаковал, закинул _macroinit.lua в соотв. место, запустил — оба варианта, от John Doe и 2useven10 работают. Ясно, будем искать, что мешает. Но честно, полный х.з. — уж что-что, а на тему автостартующих макросов у меня ничего такого не добавлялось, что могло бы на привилегии повлиять. Хотя, конечно, всяких сложных макросов типа LuaManager наобновлялось прилично, может там чего…

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

Posted: Sun 28 Aug, 2016 16:16
by John Doe
Обновил свой вариант (изменения минимальные).
Теперь скрипт скрипт работает даже будучи просто запущенным из командной строки.
А если положить в scripts, то можно запускать из ScriptBrowser.
За автозапуск отвечает опция, которой можно управлять средствами cfgscript.

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

Posted: Sun 25 Jun, 2017 20:34
by ccaid

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

Posted: Mon 26 Jun, 2017 19:33
by Wave
Скорей всего оно. Но сейчас руки не доходят обновиться. Как обновлюсь — проверю.