Что нового

[Процессы] Процессы других сеансов и пользователей терминала

iltmpz

Новичок
Сообщения
23
Репутация
0
Приветствую!
Пытаюсь на терминальном сервере 2008r2 читать список процессов, их нагрузку на ЦП и владельцев:
Код:
$aProcessList=ProcessList()
For $i=1 To $aProcessList[0][0]
  Local $pid=$aProcessList[$i][1]
  Local $aTimeProcess = _WinAPI_GetProcessTimes($pid)
  Local $aGetProcessUser=_WinAPI_GetProcessUser($pid)
  ; ...
Next

Для процессов своего пользователя, от которого запускаю скрипт, все работает. Работает и для системных процессов (система, LOCAL SERVICE и т.п.)
А вот для других пользователей терминала, оба вызова:
_WinAPI_GetProcessTimes($pid) и _WinAPI_GetProcessUser($pid) выдают error.
_WinAPI_GetLastError() возвращает 5: Отказано в доступе.

Как эту проблему решить?
Скрипт запускаю от имени администратора домена и соотв. администратора сервера. UAC выключен.

Нашел в MSDN про GetProcessTimes function:
A handle to the process whose timing information is sought. The handle must have the PROCESS_QUERY_INFORMATION or PROCESS_QUERY_LIMITED_INFORMATION access right. For more information, see Process Security and Access Rights.
Я так понимаю, надо сказать своему процессу, чтобы он себе поставил право на PROCESS_QUERY_INFORMATION.
Я так понимаю, это надо сделать функцией _WinAPI_AdjustTokenPrivileges?
Которая описана в справке, но без примеров, и пока совершенно не могу понять, что именно надо ей передавать...
 
Автор
I

iltmpz

Новичок
Сообщения
23
Репутация
0
Не совсем понял, как это работает, но вопрос решен:

В мудреные входные параметры для _Security__SetPrivilege и _WinAPI_AdjustTokenPrivileges мне вникнуть не удалось, зато нашел SetPrivilege тут: http://autoit-script.ru/index.php?topic=1845.0

Оказывается, достаточно было установить SetPrivilege('SeDebugPrivilege', 1)
 
Верх