Конференция "WinAPI" » Список процессов [D7, WinXP]
 
  • _bass (03.05.09 02:07) [0]
    Здравствуйте.
    Подскажите пожалуйста, как получить список процессов(включая системные) на ос win vista. На xp все отлично работает через Toolhelp32Snapshot, а на vista, например, не находит даже explorer.exe.
  • Eraser © (03.05.09 02:46) [1]
    > [0] _bass   (03.05.09 02:07)

    в висте тоже этот способ работает. но для начала нужно изучить систему безопасности висты, точнее её отличие от xp'шной.
  • Германн © (03.05.09 02:56) [2]

    > Eraser ©   (03.05.09 02:46) [1]
    >
    > > [0] _bass   (03.05.09 02:07)
    >
    > в висте тоже этот способ работает. но для начала нужно изучить
    > систему безопасности висты, точнее её отличие от xp'шной.
    >
    >

    Удар "поддых"!
    :)
  • Игорь © (03.05.09 10:08) [3]

    > _bass   (03.05.09 02:07)



    Вот держи, должно работать в ОС 2000, 2003, XP, Vista

    http://www.onlinedisk.ru/file/132291/
  • _bass (03.05.09 14:36) [4]
    Спасибо.

    _GetProcessPath(PSPI^.ProcessId, _Path); -> Access violation at address 0047DD15 in module 'Project1.exe'. Read of address 01039558
  • Игорь © (03.05.09 17:03) [5]

    > _bass   (03.05.09 14:36) [4]


    Это мне ни о чем не говорит, а кнопкой F7 нельзя пройтись по коду?
  • _bass (03.05.09 23:05) [6]
    Спасибо, разобрался. Подскажите, как узнать Parent pID процесса, имея его pID.
  • runaum (03.05.09 23:33) [7]
    @_bass, посмотрите исходники madCollection (madshi.net), сразу же станут понятнее многие моменты, тем более документация на уровне. К тому же, если надо сделать и нет времени на разбор, то это наилучший вариант.
  • Игорь © (04.05.09 00:11) [8]

    > _bass   (03.05.09 23:05) [6]


    type
     PROCESS_BASIC_INFORMATION = packed record
       ExitStatus: DWORD;
       PebBaseAddress: Pointer;
       AffinityMask: DWORD;
       BasePriority: DWORD;
       UniqueProcessId: ULONG;
       InheritedFromUniqueProcessId: ULONG;
     end;

     TNtQueryInformationProcess = function(ProcessHandle: THandle; ProcessInformationClass: Byte;
       ProcessInformation: Pointer; ProcessInformationLength: ULONG; ReturnLength: PULONG): DWORD; stdcall;

    var
     _NtQueryInformationProcess: TNtQueryInformationProcess;

    FormCreate...
     DLLHandle:= LoadLibrary('ntdll.dll');
     if DLLHandle <> 0 then
       @_NtQueryInformationProcess:= GetProcAddress(DLLHandle, 'NtQueryInformationProcess');

    ...
    function GetParentProcessID(PID: DWORD): DWORD;
    var
     ProcessInformation: PROCESS_BASIC_INFORMATION;
    begin
     if _NtQueryInformationProcess(OpenProcess(MAXIMUM_ALLOWED, False, PID), 0, @ProcessInformation, SizeOf(ProcessInformation), nil) = 0 then
       Result:= ProcessInformation.InheritedFromUniqueProcessId
     else
       Result:= 0;
    end;

    ...

    SubItems.Add(IntToStr(GetParentProcessID(PSPI^.ProcessId)));

  • Игорь © (04.05.09 11:12) [9]

    > Игорь ©   (04.05.09 00:11) [8]


    Чета я сморозил, в PSYSTEM_PROCESS_INFORMATION уже есть InheritedFromProcessId
 
Конференция "WinAPI" » Список процессов [D7, WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]