1. Как проще всего получить ID сессии, в которой выполняется процесс, по ID этого процесса?
2. PEB — структура одинаковая в Windows XP/Server 2003/Vista или различается ?
А>1. Как проще всего получить ID сессии, в которой выполняется процесс, по ID этого процесса? UserMode: ProcessIdToSessionId и процессу должно быть разрешено PROCESS_QUERY_INFORMATION.
Если же речь про текущий процесс — может быть удобнее позвать GetSystemMetrics(SM_REMOTESESSION) да и все.
Вообще ссылок тут должно быть навалом — поишите по слову SessionId в форуме WINAPI?
Естественно, аналогичные вещи можно делать и в приложении, имея токен: зовем GetTokenInformation с классом TokenSessionId.
А>2. PEB — структура одинаковая в Windows XP/Server 2003/Vista или различается ?
windbg>dt _PEB
однозначно ответит на этот вопрос.
PS отрицательно
... << RSDN@Home 1.2.0 alpha rev. 0>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: Пара вопросов...
От:
Аноним
Дата:
05.04.08 18:55
Оценка:
А>>1. Как проще всего получить ID сессии, в которой выполняется процесс, по ID этого процесса? VAB>KernelMode:
Нужно KernelMode. Посмотрел по ссылкам, — проще всего думаю будет через ZwOpenProcessTokenEx + ZwQueryInformationToken(TokenSessionId).
А>>2. PEB — структура одинаковая в Windows XP/Server 2003/Vista или различается ? VAB>PS отрицательно
А>Нужно KernelMode. Посмотрел по ссылкам, — проще всего думаю будет через ZwOpenProcessTokenEx + ZwQueryInformationToken(TokenSessionId).
это тоже по идее будет работать, просто часто Token или SECURITY_SUBJECT_CONTEXT уже имеется под рукой (см пред сообщ) посему удобнее (возможно мне, из-за специфики проектов) пользоваться SeXxx. возможно дело вкуса.
вот код который я имел ввиду для ядра — вставляем в любое место на PASSIVE_LEVEL и пользуемся:
А>>>2. PEB — структура одинаковая в Windows XP/Server 2003/Vista или различается ? VAB>>PS отрицательно
А>
почему? просто не надо лишний раз пользоваться тем, что не документировано официально.
Как правило пути всегда есть и часто они — оказываются правильные.
Например рыскать в поисках неких Id через PEB — не лучшая идея однозначно.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Здравствуйте, Аноним, Вы писали:
А>Привет!
А>1. Как проще всего получить ID сессии, в которой выполняется процесс, по ID этого процесса? А>2. PEB — структура одинаковая в Windows XP/Server 2003/Vista или различается ?
А>Спасибо.
1. Начиная с XP есть — nt!PsGetProcessSessionId
2. Для текущего хорош:
NTSTATUS GetSessionIdOfThread(PULONG pSessionId, PETHREAD pThread)
{
IRP irp;
NTSTATUS status;
irp.Tail.Overlay.Thread = pThread;
status = IoGetRequestorSessionId(&irp, pSessionId);
return status;
}
подробнее см тут