Всех с наступившим Новым Годом! В своей программе мне нужно получить список модулей загруженных в любой другой процесс. Сама программа 32-битная. Для получения списка модулей использую функцию EnumProcessModulesEx(). Для 64-битных процессов список модулей она не возвращает. Пока я думаю сделать отдельный 64-битный процесс и через него обмениваться данными. Написать функцию-обертку, которая будет отсылать запрос в этот процесс, наподобие "получить список модулей такого-то процесса", а затем пересылать результат в мою программу. Ещё вариант - COM Surrogate, но ничего толком не нашёл. Подскажите, пожалуйста, какие есть ещё варианты? Либо, может есть простой вариант, без этих заморочек. P.S. Вариант скомпилировать программу под 64 бита не предлагать).
Распарси PEB (адрес возьми из NtQueryInformationProcess), из него вытащи структуру PEB_LDR_DATA (Peb->Ldr). В ней указатель на двусвязный список структур LDR_MODULE (Peb->Ldr->InLoadOrderModuleList.Flink). Обходишь его, читаешь структурки. Чтобы работать с памятью чужих процессов, используй ReadProcessMemory. Если из x64 будешь читать память 32х-битных процессов (для аналогичной задачи, например), используй NtWow64QueryInformationProcess64 и NtWow64ReadVirtualMemory64, и не забудь, что у 32х-битных процессов на 64х-битных Windows есть два PEB'a с соответствующими модулями - для х32 и х64 отдельно.
А для простых смертных? Бросайте привычку говорить жаргонизмами и сокращениями, усугубляя недосказанностью. Как, по-вашему, ТС будет это гуглить? Раз начали - потрудитесь объяснить, что конкретно нужно сделать, чтобы использовать "х-ворота", чем бы они ни были.
Так бы сразу и написали. У меня первая ассоциация с "х" - eXecutive. И в гугле по запросу x-gates ожидаемо нашёл не то