Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить список 32-хбитных DLL в Win 7 64x / 2 сообщений из 2, страница 1 из 1
14.03.2016, 13:47
    #39191351
Desert_Nomad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить список 32-хбитных DLL в Win 7 64x
Возникла необходимость получить список dll, загруженных процессами в системе (Win 7 64x).
Для этого использую код из MSDN:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
// получаем список процессов
Process[] ProcessList = Process.GetProcesses();

foreach (Process CurProcess in ProcessList)
{
  try
  {
    // dll-модули, загруженные данным процессом
    ProcessModuleCollection ModulesList = CurProcess.Modules;

    foreach (System.Diagnostics.ProcessModule module in ModulesList)
    {
        log.Trace("... module: {0}", module.ModuleName);
     }                                
  }
  catch (Exception ex)
  {
     log.Error("Error reading modules: {0}", ex.Message);
  }
}


Но если сравнить выдаваемый результат с перечнем dll, отображаемых ProcessExplorer-ом уважаемого Руссиновича, то ясно, что видно далеко не все, особенно это касается 32-хбитных приложений (программу компилю 64-хбитным компилером).

Но поскольку ProcessExplorer64 отображает все, то, стало быть, в принципе это возможно.
Но как этого добиться? Куда рыть?
...
Рейтинг: 0 / 0
14.03.2016, 14:22
    #39191390
Desert_Nomad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить список 32-хбитных DLL в Win 7 64x
Ответ найден:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Runtime.InteropServices;

namespace EasyHack
{
    class EnumerateProcesses
    {
        public const uint LIST_MODULES_ALL = 0x03;


        [DllImport("psapi.dll")]
        public static extern bool EnumProcessModulesEx(IntPtr hProcess,
            [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4)] [In][Out] IntPtr[] lphModule,
            int cb, [MarshalAs(UnmanagedType.U4)] out int lpcbNeeded, uint dwFilterFlag);


        [DllImport("psapi.dll")]
        public static extern uint GetModuleFileNameEx(IntPtr hProcess, IntPtr hModule, [Out] StringBuilder lpBaseName,
            [In] [MarshalAs(UnmanagedType.U4)] int nSize);


        [DllImport("User32.dll")]
        public static extern int GetWindowThreadProcessId(IntPtr hWnd, out uint processId);


        public const uint PROCESS_ALL_ACCESS = (uint)(0x000F0000L | 0x00100000L | 0xFFF);


        [DllImport("kernel32")]
        public static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, uint dwProcessId);


        static void Main(string[] args)
        {
            List<string> strModules = new List<string>();
            IntPtr handle = OpenProcess(PROCESS_ALL_ACCESS, false, (uint)Process.GetProcessesByName("Toad")[0].Id);


            IntPtr[] stuff = new IntPtr[0];
            int size = 0;
            EnumProcessModulesEx(handle, stuff, 0, out size, LIST_MODULES_ALL);


            stuff = new IntPtr[size / IntPtr.Size];
            EnumProcessModulesEx(handle, stuff, stuff.Length * IntPtr.Size, out size, LIST_MODULES_ALL);


            for (int i = 0; i < stuff.Length; i++)
            {
                StringBuilder sb = new StringBuilder(256);
                if (GetModuleFileNameEx(handle, stuff[i], sb, sb.Capacity) != 0)
                    strModules.Add(sb.ToString());
            }


            for (int i = 0; i < strModules.Count; i++)
            {
                Console.WriteLine("Index[{0}] - ModuleName: {1}", i, strModules[i]);
            }

            Console.ReadLine();
        }
    }
}
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Получить список 32-хбитных DLL в Win 7 64x / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]