получаю указатель на процесс с помощью PsGetCurrentProcessId() (он используется только на IRQL PASSIVE_LEVEL), подскажите как мне узнать идентификатор сесиии пользователя, корректно ли использовать в этом контексте ProcessIdToSessionId() ?
Здравствуйте, Canavaro, Вы писали:
C>получаю указатель на процесс с помощью PsGetCurrentProcessId() (он используется только на IRQL PASSIVE_LEVEL), подскажите как мне узнать идентификатор сесиии пользователя, корректно ли использовать в этом контексте ProcessIdToSessionId() ?
ProcessIdToSessionId в реальных проектах я не использовал, а вот сессию получить можно попробовать через NtQueryInformationProcess с классом PROCESS_SESSION_INFORMATION
... << RSDN@Home 1.1 beta 2 >>
Здравствуйте, Valerio, Вы писали:
>>можно попробовать через NtQueryInformationProcess с классом PROCESS_SESSION_INFORMATION
а где бы почитать про этот класс, а то если я првильно понял это недокуменированные возможности, описанные только в соответствующей книге, доступа к которой у меня пока нет
Здравствуйте, Canavaro, Вы писали:
C>Здравствуйте, Valerio, Вы писали:
>>>можно попробовать через NtQueryInformationProcess с классом PROCESS_SESSION_INFORMATION
C>а где бы почитать про этот класс, а то если я првильно понял это недокуменированные возможности, описанные только в соответствующей книге, доступа к которой у меня пока нет 
думаю это вполне документированные уже возможности
в MSDN 2003 это уже очень даже документировано официально —
see Platform SDK: DLLs, Processes, and Threads
NtQueryInformationProcess
вот что я вижу в ntddk.h для 2000й
#define NtCurrentProcess() ( (HANDLE) -1 )
NTSYSCALLAPI
NTSTATUS
NTAPI
NtQueryInformationProcess(
IN HANDLE ProcessHandle,
IN PROCESSINFOCLASS ProcessInformationClass,
OUT PVOID ProcessInformation,
IN ULONG ProcessInformationLength,
OUT PULONG ReturnLength OPTIONAL
);
#define NtCurrentThread() ( (HANDLE) -2 )
//
// Multi-User Session specific Process Information
// NtQueryInformationProcess using ProcessSessionInformation
//
typedef struct _PROCESS_SESSION_INFORMATION {
ULONG SessionId;
} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
этого вполне достаточно должно быть
Нужно получить хэндл на процесс и спросить у NtQueryInformationProcess с ProcessSessionInformation и PROCESS_SESSION_INFORMATIONв качестве ProcessInformationClass и ProcessInformation. NtCurrentProcess в качестве хэндла может подойти или поиск по сайту (в asm & winapi форумах) поможет — это часто обсуждалось
... << RSDN@Home 1.1 beta 2 >>