Стоит задача получения списка процессов на локальной машине. Если использовать для работы PsAPI она показывает информацию для текущего пользователя.Но к локальной машине удалённо подключаются и другие пользователи. Для подключения используется терминальные сервера. Подключение может происходить в двух режимах: консольном и терминальном. Возникает также ещё один вопрос можно ли узнать в какой сесии звпущен тот либо иной процесс?
Список процессов я вроде получил, но как понять в каком режиме работает процесс: в терминальном или консольном?
procedure FillProcessesList(var ListPr:TDataArrMul); var Count, i: DWORD; pProcessInfo, pCur: PWTS_PROCESS_INFO; sProcessName: String; begin SetLength(ListPr,3); SetLength(ListPr[0],0); SetLength(ListPr[1],0); SetLength(ListPr[2],0); if WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, 0,1,pProcessInfo,Count)then begin for i := 0 to Count - 1 do begin pCur := Ptr(DWORD(pProcessInfo) + (i * SizeOf(WTS_PROCESS_INFO))); sProcessName := '<iaecaanoii>'; SetLength(ListPr[0],length(listpr[0])+1); SetLength(ListPr[1],length(listpr[1])+1); SetLength(ListPr[2],length(listpr[2])+1); ListPr[0,length(listpr[0])-1]:=pcur.pProcessName; ListPr[1,length(listpr[1])-1]:=inttostr(pcur.SessionId); ListPr[2,length(listpr[2])-1]:=inttostr(pcur.ProcessId); end; WTSFreeMemory(pProcessInfo); end; end;
PWTS_PROCESS_INFO = ^WTS_PROCESS_INFO; WTS_PROCESS_INFO = packed record SessionId: DWORD; ProcessId: DWORD; pProcessName: PChar; pUserSid: PSID; end; //--------------------------------------------------------------------- Пожалуйста.
Всё таки может ли кто подсказать. При подключении к rdp серверу клиент может подключаться в двух режимах: терминальном и консольном. Как можно отличить в какой сесии загрузился пользователь. Может существует какой-то параметр отвечающий за это?