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

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

Как изменить привилегии у процесса? [D7, WinXP]


Дмитрий ©   (2010-01-03 16:53:00) 

handle есть, но не удаётся изменить привилегии у другого процесса. Делаю через OpenProcessToken, потом AdjustTokenPrivileges. Для своего процесса всё хорошо, но для чужого - не идёт.


Игорь Шевченко   (2010-01-04 02:21:00) [1]

Не надо разными никами в одной ветке писать, это не приветствуется.

Надо читать справку по примененным функциям (по всем), когда какие значения возвращаются и что они значат.
У любых фукнции WinAPI, которые возвращают результат, надо проверять этот реультат, а не так, что OpenProcessToken и хрен бы с ним.


> Как по этому пути, условно C:\Project.exe определить handle
> процесса?


Используй ShellExecuteEx, она возвращает Handle процесса (не забудь сказать в маске SEE_MASK_NOCLOSEPROCESS)


Riply   (2010-01-04 01:10:00) [2]

> [7] Дмитрий   (03.01.10 23:40)
> Как несколько?=) У меня есть уникальный адрес, путь к файлу, совпадений быть не может

А что мешает стартовать "уникальному файлу" дважды ?
Я бы воспользовалась советом:
> [6] Дмитрий С ©   (03.01.10 23:36)
> Проще запускать с помощью CreateProcess


Дмитрий   (2010-01-03 23:40:00) [3]

Как несколько?=) У меня есть уникальный адрес, путь к файлу, совпадений быть не может. Как по этому пути, условно C:\Project.exe определить handle процесса?


Дмитрий С   (2010-01-03 23:36:00) [4]


> Boolean ©   (03.01.10 21:01) [5]

Перечислить процессы, их же несколько может быть. Проще запускать с помощью CreateProcess


Boolean   (2010-01-03 21:01:00) [5]

Т.е. ShellExecute не возвращает дескриптор процесса никаким боком??? Хм, а я думал почему значение всего двузначное показывало.=(
(Сошлюсь на праздники =) )
ОК, тогда вопрос другого рода, как мне узнать дескриптор процесса зная путь к файлу?


Riply   (2010-01-03 20:35:00) [6]

> [3] Дмитрий   (03.01.10 20:05)

(c) Help (ShellExecute):
Return Value
Returns a value greater than 32 if successful, or an error value that is less than or equal to 32 otherwise. The following table lists the error values. The return value is cast as an HINSTANCE for backward compatibility with 16-bit Windows applications. It is not a true HINSTANCE, however. The only thing that can be done with the returned HINSTANCE is to cast it to an int and compare it with the value 32 or one of the error codes below.


Дмитрий   (2010-01-03 20:05:00) [7]

Это на установку привилегий:
Function SetPrivilege(aPrivilegeName: String; aEnabled: Boolean; Hlink: THandle): Boolean;
Var TPPrev,
     TP: TTokenPrivileges;
     Token: THandle;
     dwRetLen: DWord;
Begin  
Result:=False;
OpenProcessToken(Hlink, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token );
TP.PrivilegeCount:=1;
IF (LookupPrivilegeValue(nil,PChar(aPrivilegeName),TP.Privileges[0].LUID )) then  
 Begin  
  IF aEnabled then TP.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED
             else  TP.Privileges[0].Attributes:=0;  
  dwRetLen:= 0;
  Result:=AdjustTokenPrivileges(Token,False,TP,SizeOf(TPPrev),TPPrev,dwRetLen);
 End;
CloseHandle(Token);
End;

---------------------------------------
А вот вызов этой функции:

Hhandle := ShellExecute(0, nil, 'H:\NAME.exe', nil, nil, SW_HIDE); //получили handle процесса
SetPrivilege('SeShutdownPrivilege', true, Hhandle );


Boolean   (2010-01-03 20:01:00) [8]

ошибки нет никакой вообще, GetLastError молчит. Проверяю выдачей прав на выключение системы (SeShutdownPrivilege). Мой процесс получает эти права и может выключить комп ( ExitWindowsEx(EWX_SHUTDOWN,0); ), но выдача этого же самого права другому процессу для такой же операции оканчивается ничем...


Eraser   (2010-01-03 19:28:00) [9]

скорее всего прав не хватает, какая ошибка?


Наверх

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