Sunday, April 6, 2008

sessions in kernel mode

Вообще, тема сессий в kernel mode действительно не раскрыта, точнее раскрыта весьма слабо и недокументированно, постоянно появляются разные вопросы...
К примеру, периодически, комрады на РСДН бьются над вопросом получения Id сессии в драйвере, а ведь чудо уже давно произошло; давно уже существует прекрасная функция
ULONG PsGetProcessSessionId (PEPROCESS Process)
экспортируемая начиная аж с XP, но - недокументированная MS до сих пор.
На мой же взгляд, один из самых красивых и переносимых способов получения Id сессии выглядит так:

NTSTATUS GetSessionIdOfThread(PULONG pSessionId, PETHREAD pThread)
{
IRP irp;
NTSTATUS status;
irp.Tail.Overlay.Thread = pThread;

status = IoGetRequestorSessionId(&irp, pSessionId);
return status;
}
_Winnie C++ Colorizer
(c) мой :)
Прекрасно работает на 2k-vista, готовить совместно с PsGetCurrentThread, либо с NtQuerySystemInformation + SYSTEM_THREAD_INFORMATION.

No comments: