Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Назначение привелегий AdjustTokenPriveleges [D5, D6, NT4, Win2k]


Страницы:   1 2

max2057 ©   (2002-09-19 15:10:00) 

Кто-нибудь может показать как назначать привелигии под NT/2000
Лично мне нужно назначить SE_SHUTDOWN_PRIVELEGE,чтобы мой сервис
тушил машину. А то хелп по AdjustTokenPriveleges меня не радует.


Ученик   (2002-09-20 11:09:00) [21]

А "Shell_TrayWnd" - это панелка внизу с кнопочкой Пуск?
Это панелька

Наверно, используется InitiateSystemShutdown


max2057   (2002-09-20 10:48:00) [22]

А "Shell_TrayWnd" - это панелка внизу с кнопочкой Пуск?
Кстати а как машины тушит SHUTDOWN из Resource Kit?
К какмому сервису он коннектится и че он ему коммандует?


Ученик   (2002-09-20 10:32:00) [23]

function ExplorerProcessID : DWord;
begin
GetWindowThreadProcessID(FindWindow("Shell_TrayWnd", nil), Result)
end;


max2057   (2002-09-20 10:26:00) [24]

Так вот как этот dwRemoteProcessID := Идентификатор процесса Explorer.exe получить?
Это же не хендл, а как получить PID процесса, отличного от моего
я не нашел - я пытался сделать перечисление процессов, как ты уже понял, но меня посылают - "Отказано в доступе"


Ученик   (2002-09-20 09:25:00) [25]

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-19 16:00:00) [26]

Спасибо.


Ученик   (2002-09-19 15:47:00) [27]

or EWX_POWEROFF


max2057   (2002-09-19 15:40:00) [28]

Спасибо сработало, но я сижу по Win2k и ExitWindowsEx(EWX_FORCE or EWX_SHUTDOWN,0) приводит к шатдауну, после которого появляется "А теперь питание можно отключить". Можно ли сделать
так чтобы тушил без всякого б.


Ученик   (2002-09-19 15:19:00) [29]

{ 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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо