Текущий архив: 2002.11.21;
Скачать: CL | DM;
ВнизНазначение привелегий AdjustTokenPriveleges Найти похожие ветки
← →
max2057 (2002-09-19 15:10) [0]Кто-нибудь может показать как назначать привелигии под NT/2000
Лично мне нужно назначить SE_SHUTDOWN_PRIVELEGE,чтобы мой сервис
тушил машину. А то хелп по AdjustTokenPriveleges меня не радует.
← →
Ученик (2002-09-19 15:19) [1]{ Project JEDI Code Library (JCL) }
SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege";
SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege";
SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege";
SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege";
SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege";
SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege";
SE_TCB_NAME = "SeTcbPrivilege";
SE_SECURITY_NAME = "SeSecurityPrivilege";
SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege";
SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege";
SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege";
SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege";
SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege";
SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege";
SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege";
SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege";
SE_BACKUP_NAME = "SeBackupPrivilege";
SE_RESTORE_NAME = "SeRestorePrivilege";
SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
SE_DEBUG_NAME = "SeDebugPrivilege";
SE_AUDIT_NAME = "SeAuditPrivilege";
SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege";
SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege";
SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege";
SE_UNDOCK_NAME = "SeUndockPrivilege";
SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege";
SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege";
function EnableProcessPrivilege(const Enable: Boolean;
const Privilege: string): Boolean;
const
PrivAttrs: array [Boolean] of DWORD = (0, SE_PRIVILEGE_ENABLED);
var
Token: THandle;
TokenPriv: TTokenPrivileges;
begin
Result := False;
if OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, Token) then
begin
TokenPriv.PrivilegeCount := 1;
LookupPrivilegeValue(nil, PChar(Privilege), TokenPriv.Privileges[0].Luid);
TokenPriv.Privileges[0].Attributes := PrivAttrs[Enable];
AdjustTokenPrivileges(Token, False, TokenPriv, SizeOf(TokenPriv),
nil, PDWord(nil)^);
Result := GetLastError = ERROR_SUCCESS;
CloseHandle(Token);
end;
end;
← →
max2057 (2002-09-19 15:40) [2]Спасибо сработало, но я сижу по Win2k и ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN,0) приводит к шатдауну, после которого появляется "А теперь питание можно отключить". Можно ли сделать
так чтобы тушил без всякого б.
← →
Ученик (2002-09-19 15:47) [3]or EWX_POWEROFF
← →
max2057 (2002-09-19 16:00) [4]Спасибо.
← →
Ученик (2002-09-20 09:25) [5]procedure TForm1.Button1Click(Sender: TObject);
var
dwRemoteProcessID, dwRemoteThreadID : DWord;
hThread, hProcess : THandle;
begin
dwRemoteProcessID := Идентификатор процесса Explorer.exe;
if dwRemoteProcessID <> 0 then begin
hProcess := OpenProcess(PROCESS_CREATE_THREAD or PROCESS_VM_OPERATION, False,
dwRemoteProcessID);
if hProcess <> 0 then try
hThread := CreateRemoteThread(hProcess, nil, 0,
GetProcAddress(GetModuleHandle("user32"), "ExitWindowsEx"),
Pointer(EWX_LOGOFF), 0, dwRemoteThreadID);
if hThread <> 0 then try
WaitForSingleObject(hThread, INFINITE);
finally
CloseHandle(hThread)
end
finally
CloseHandle(hProcess)
end
end
end;
← →
max2057 (2002-09-20 10:26) [6]Так вот как этот dwRemoteProcessID := Идентификатор процесса Explorer.exe получить?
Это же не хендл, а как получить PID процесса, отличного от моего
я не нашел - я пытался сделать перечисление процессов, как ты уже понял, но меня посылают - "Отказано в доступе"
← →
Ученик (2002-09-20 10:32) [7]function ExplorerProcessID : DWord;
begin
GetWindowThreadProcessID(FindWindow("Shell_TrayWnd", nil), Result)
end;
← →
max2057 (2002-09-20 10:48) [8]А "Shell_TrayWnd" - это панелка внизу с кнопочкой Пуск?
Кстати а как машины тушит SHUTDOWN из Resource Kit?
К какмому сервису он коннектится и че он ему коммандует?
← →
Ученик (2002-09-20 11:09) [9]А "Shell_TrayWnd" - это панелка внизу с кнопочкой Пуск?
Это панелька
Наверно, используется InitiateSystemShutdown
← →
max2057 (2002-09-20 11:32) [10]В сервисе RemoteThread не работает,
а регистрация в Project JEDI Code Library (JCL) - платная?
← →
Ученик (2002-09-20 11:48) [11]В сервисе возможно не работает FindWindow,
регистрация бесплатная и исходники тоже
← →
max2057 (2002-09-20 14:03) [12]Ясно а как конектится к менеджеру сервисов на другой машине с целью проверки наличия/установки моего сервиса - опять не пускают!!! какие такие привелегии мне нужны?
← →
ZZ (2002-09-20 16:08) [13]Ученик © (20.09.02 09:25)
Что это было такое 8)
какие такие привелегии мне нужны?
Почти никаких. (Надо иметь доступ к компу по сети и вроде быть юзером из этого-же домена)
В сервисе возможно не работает FindWindow
В интерактивном работает.
← →
Ученик (2002-09-20 16:26) [14]>ZZ © (20.09.02 16:08)
А как думаете ?
← →
ZZ (2002-09-20 16:40) [15]Ученик ©
Задам вопрос по другому - зачем ЭТО надо?
← →
max2057 (2002-09-20 16:53) [16]>>ZZ - мне нужно чтобы сервис мог сделть Logoff текушего user"a
Ученик предложил сделать RemoteThread в Explorer"e но тут появилась проблема получения его PID"a (именно его родного,а не хендла).
>>Всем.Всем
А хочу я сделать типа reboot/logoff/shutdown demon.
Короче запрос на машину с целью запроса о наличии у меня уже работает. Теперь другой вопрос - как мне получить список компов моего домена причем чтоб работало и под NT и под Win2K(Это нужно для написания программки установки сервиса на компы-предпологается разумеется что это будет делать админ).
Можно ли использовать в Win2k Функции LAN Manager"a?
← →
Ученик (2002-09-20 17:00) [17]>max2057 © (20.09.02 16:53)
Из { Project JEDI Code Library (JCL) } получение PIDa доcтал ?
← →
max2057 (2002-09-20 17:00) [18]Совсем забыл - cервис интерактивный,но когда я вызываю предложенную учеником функцию в обычном приложении - все работает, а в сервисе - хрен,а SysErrorMessage(GetLastError) говорит "Неправильно задан параметр". Хотя и там и там- все один
в один - одна и та же функция. Ошибок синтакасич. и логич. нет - все один в один.
← →
ZZ (2002-09-20 17:04) [19]мне нужно чтобы сервис мог сделть Logoff текушего user"a
Ученик предложил сделать
Ясно, а то я между строк еще читать не научился (или ослеп уже :)
Можно ли использовать в Win2k Функции LAN Manager"a?
вроде всегда можно было
← →
max2057 (2002-09-20 17:07) [20]>Ученик
Пока нет.
← →
max2057 (2002-09-20 22:26) [21]>>ZZ
так ты брат можешь мне помочь? :))
← →
max2057 (2002-09-22 12:24) [22]>>Ученик.
PID я получаю(jclsysinfo.pas) , но в NT не работает поток в Explorer"e - он создается но ничего не делает.
← →
ZZ (2002-09-22 16:58) [23]Ученик © (20.09.02 09:25)
У меня вот такой вопрос - чему будет равен 2ой параметр функции ExitWindowsEx в твоем примере?
max2057 ©
Так ты с вопросами определись... :)
← →
Ученик (2002-09-22 21:23) [24]>ZZ © (22.09.02 16:58)
Произвольное число, второй параметр до XP по описанию игнорируется.
>max2057 © (22.09.02 12:24)
Проверил с сервисом на Windows 2000, Logoff работает.
← →
max2057 (2002-09-23 11:01) [25]В вин2к может и работает(не проверял еще) но в NT говорит - "Нет доступа"
>>ZZ
вопрос тот же самый - logoff, работающий в NT и в Win2k
← →
Ученик (2002-09-23 14:15) [26]>max2057 © (23.09.02 11:01)
И под NT тоже работает
← →
max2057 (2002-09-23 16:34) [27]а у меня - не работает, может NT у меня бракованная?
← →
Ученик (2002-09-23 17:21) [28]>max2057 © (23.09.02 16:34)
На какой операции Access Denied ?
← →
max2057 (2002-09-23 17:32) [29]Щас поробую вспомнить: Значит так Explorer открываю на создание
потока, создаю поток. - все нормально никаких INVALID_HANDLE_VALUE,0 и всего прочег, что говорит об ошибке = а потом ничего не происходит
Страницы: 1 вся ветка
Текущий архив: 2002.11.21;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.008 c