Файловые пути для списка процессов

Тема в разделе "WASM.WIN32", создана пользователем iamlamer, 5 мар 2007.

  1. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    Для списка процессов, полученных при помощи ZwQuerySystemInformation или Process32First/Process32Next, нужны полные имена файлов, из которых они стартовали. В Windows 98 это автоматом, а в NT/2000/XP - как?

    Где-то я читал решение, но не помню где. :dntknw:
     
  2. GMax

    GMax Member

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

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    Позволю себе процитировать исходник Ms-Rem'a
    Код (Text):
    1. //--- (C) Ms-Rem
    2. function GetNameByPid(Pid: dword): string;
    3. var
    4.  hProcess, Bytes: dword;
    5.  Info: PROCESS_BASIC_INFORMATION;
    6.  ProcessParametres: pointer;
    7.  ImagePath: TUnicodeString;
    8.  ImgPath: array[0..MAX_PATH] of WideChar;
    9. begin
    10.  Result := '';
    11.  ZeroMemory(@ImgPath, MAX_PATH * SizeOf(WideChar));
    12.  hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, false, Pid);
    13.  if ZwQueryInformationProcess(hProcess, ProcessBasicInformation, @Info,
    14.                               SizeOf(PROCESS_BASIC_INFORMATION), nil) = STATUS_SUCCESS then
    15.   begin
    16.    if ReadProcessMemory(hProcess, pointer(dword(Info.PebBaseAddress) + $10),
    17.                         @ProcessParametres, SizeOf(pointer), Bytes) and
    18.       ReadProcessMemory(hProcess, pointer(dword(ProcessParametres) + $38),
    19.                         @ImagePath, SizeOf(TUnicodeString), Bytes)  and
    20.       ReadProcessMemory(hProcess, ImagePath.Buffer, @ImgPath,
    21.                         ImagePath.Length, Bytes) then
    22.         begin
    23.           Result := ExtractFileName(WideCharToString(ImgPath));
    24.         end;
    25.    end;
    26.  CloseHandle(hProcess);
    27. end;
     
  4. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    А как узнать их хэндлы? Кроме того, совсем непонятно, как быть с Win NT 4, где снапшотов нет.
     
  5. iamlamer

    iamlamer New Member

    Публикаций:
    0
    Регистрация:
    20 июн 2005
    Сообщения:
    273
    Адрес:
    Russia
    slow

    Кажется, похоже на желаемое. Спасибо, буду разбираться.
     
  6. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    PsApi можете попробовать еще