Я пытаюсь подобрать модули процесса, в соответствии с msdn невозможно обработать модули TH32CS_SNAPMODULE в 32-битных приложениях, используя функцию EnumProcessModules. Я не могу перечислить модули определенного процесса и переходят в бесконечный цикл.Ошибка при попытке EnumProcessModules в Windows 8 64bit
Я просто успел скомпилировать приложение для Windows 64bit.
вот моя ошибка кода!
procedure getmodule(ProcessID: Cardinal);
var
Modules: array of HMODULE;
cbNeeded, i: Cardinal;
ModuleInfo: TModuleInfo;
ModuleName: array[0..MAX_PATH] of Char;
PHandle: THandle;
ITEM: TListItem;
begin
SetLength(Modules, 1024);
PHandle := OpenProcess(PROCESS_QUERY_INFORMATION + PROCESS_VM_READ, False, ProcessID);
if (PHandle <> 0) then
begin
EnumProcessModules(PHandle, @Modules[0], 1024 * SizeOf(HMODULE), cbNeeded); //Getting the enumeration of modules
SetLength(Modules, cbNeeded div SizeOf(HMODULE)); //Setting the number of modules
for i := 0 to Length(Modules) - 1 do //Start the loop
begin
item := Form1.listView2.Items.Add;
ITEM.Caption := IntToStr(i); // Testing
end;
CloseHandle(PHandle);
end;
end;
Документация 'CreateToolhelp32Snapshot' объясняет, как получить и 32- и 64-битных модулей в снимок с вашего 64-разрядного процесса. Включите в свой вызов как «TH32CS_SNAPMODULE», так и «TH32CS_SNAPMODULE32». –
пример, я пытаюсь получить список модулей whit function CreateToolhelp32Snapshot, но у меня есть какой-то процесс, который не работает, например, explorer, я не знаю почему, но если я скомпилирую свое приложение 64bits, это сработает. Да, мой вызов имеет TH32CS_SNAPMODULE32 и TH32CS_SNAPMODULE, но дескриптор модулей - 0. – MrHelp
см. ContinueLoop: = Module32First (ModuleSnap, ModuleEntry); while Integer (ContinueLoop) <> 0 do begin – MrHelp