Терминальные серверы и список процессов.

Тема в разделе "WASM.BEGINNERS", создана пользователем csmok, 8 июн 2007.

  1. csmok

    csmok New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    19
    Стоит задача получения списка процессов на локальной машине.
    Если использовать для работы PsAPI она показывает информацию для текущего пользователя.Но к локальной машине удалённо подключаются и другие пользователи.
    Для подключения используется терминальные сервера. Подключение может происходить в двух режимах: консольном и терминальном. Возникает также ещё один вопрос можно ли узнать в какой сесии звпущен тот либо иной процесс?
     
  2. GMax

    GMax Member

    Публикаций:
    0
    Регистрация:
    3 июл 2006
    Сообщения:
    218
    Может WTSEnumerateProcesses поможет...
     
  3. csmok

    csmok New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    19
    Список процессов я вроде получил, но как понять в каком режиме работает
    процесс: в терминальном или консольном?
     
  4. WIN32

    WIN32 Member

    Публикаций:
    0
    Регистрация:
    20 янв 2007
    Сообщения:
    338
    А как получил, код покажи.
     
  5. csmok

    csmok New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    19
    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;
     
  6. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    Покажи, плз, как у тебя определена структура WTS_PROCESS_INFO.
     
  7. csmok

    csmok New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    19
    PWTS_PROCESS_INFO = ^WTS_PROCESS_INFO;
    WTS_PROCESS_INFO = packed record
    SessionId: DWORD;
    ProcessId: DWORD;
    pProcessName: PChar;
    pUserSid: PSID;
    end;
    //---------------------------------------------------------------------
    Пожалуйста.
     
  8. csmok

    csmok New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2007
    Сообщения:
    19
    Всё таки может ли кто подсказать.
    При подключении к rdp серверу клиент может подключаться в двух режимах:
    терминальном и консольном. Как можно отличить в какой сесии загрузился пользователь.
    Может существует какой-то параметр отвечающий за это?