Узел аддон не может снимать модули (CreateToolhelp32Snapshot)

Я пытаюсь изучить C ++, но не могу понять, почему, когда я пытаюсь сделать снимок модулей с помощью надстройки Node, разные результаты возвращаются, когда я запускаю программу через VS на рабочем столе.

С помощью этот Исходный код из MSDN Я могу перечислить все модули внутри процесса:

void fm(LPSTR name) {
HANDLE hModuleSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 5844);
MODULEENTRY32 mEntry;

// check invalid handle value...
// check module32first...

mEntry.dwSize = sizeof(mEntry);

do {
if (!strcmp(mEntry.szModule, name)) {
CloseHandle(hModuleSnapshot);
cout << mEntry.szModule << endl;
}
} while (Module32Next(hModuleSnapshot, &mEntry));
}

Это работает как задумано и найдет / распечатает информацию о модуле (проверка ошибок не включена) — однако, когда я пытаюсь перенести эту функциональность в дополнение к Node, в нем не отображаются те же модули, что и в коде выше (код почти идентично, я не знаю, почему попытка реализовать функцию внутри пользовательского дополнения Node влияет на результат):

void fm() {
HANDLE hModuleSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 5844);
MODULEENTRY32 mEntry;

// check invalid handle value...
// check module32first...

mEntry.dwSize = sizeof(mEntry);

do {
cout << mEntry.szModule << endl;
} while (Module32Next(hModuleSnapshot, &mEntry));

CloseHandle(hModuleSnapshot);
}

После использования node-gyp для компиляции надстройки я могу успешно его вызвать (после запроса он просто запускает функцию, которая вызывает fm).

Если я попытаюсь сделать снимок процесса с помощью PID 5844 (VS Code) распечатывает:

Code.exe
ntdll.dll
wow64.dll
wow64win.dll
wow64cpu.dll

Если я попробую процесс с PID 6540 (Хром) это распечатывает:

chrome.exe
ntdll.dll
wow64.dll
wow64win.dll
wow64cpu.dll

Это, очевидно, не правильно, он печатает те же модули, даже если PID (жестко запрограммирован) отличается.

Если я использую первый блок кода и запускаю его с VS, я получаю:

chrome.exe
ntdll.dll
KERNEL32.DLL
KERNELBASE.dll
apphelp.dll
ADVAPI32.dll
msvcrt.dll
sechost.dll
RPCRT4.dll
SspiCli.dll
CRYPTBASE.dll...

Множество модулей намного больше, но вы можете видеть, что именно этот блок должен печатать второй блок кода.

Я не знаю, почему запуск кода через пользовательскую надстройку Node повлияет на результат, если я что-то упустил или не понял что-то о надстройках Node.

Я могу правильно открывать и собирать информацию обо всех процессах, используя CreateToolhelp32Snapshot с надстройкой Node, но я не могу собрать информацию о модулях в процессе.

1

Решение

С помощью TH32CS_SNAPMODULE в процессе x64 (Node.exe) на x86 процесс даст вам только 64-битные модули, используйте TH32CS_SNAPMODULE32 чтобы получить 32-битные модули — TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32 для всех модулей.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]