liste des tâches ne répertorie pas tous les modules dans les systèmes 64

J’ai un problème. Je vais essayer d’obtenir tous les modules (fichiers dll) pour tous les processus sur ma machine. J’ai essayé de faire cette commande dans CMD:

tasklist /m 

Mais c’est un problème avec les systèmes 64 bits. Si vous exécutez un programme 32 bits sur une machine 64 bits, tous les modules ne sont pas répertoriés.

 ntdll.dll, wow64.dll, wow64win.dll, wow64cpu.dll 

Ensuite, j’ai essayé de faire cela avec un script Python, en utilisant pywin32 (win32api).

C’est du code:

 import win32security,win32file,win32api,ntsecuritycon,win32con,win32process processes = win32process.EnumProcesses() for pid in processes: dll_list = [] try: if pid: print('pid:', pid) ph = win32api.OpenProcess(win32con.MAXIMUM_ALLOWED, False, pid) dll = win32process.EnumProcessModules(ph) for dll_name in dll: dll_name_norm = win32process.GetModuleFileNameEx(ph, dll_name) dll_list.append(dll_name_norm) print("dll_list: ", dll_list) print("--------------") except: print("Error") print("--------------") 

Mais le résultat est le même. = (S’il vous plaît, aidez-moi avec ceci, comment je peux voir tous les fichiers dll, charger par chaque processus.

PS Il ne peut s’agir que d’outils standard tels que la ligne de commande, la liste de tâches (NOT ListDlls, Process Explorer ou la même chose) ou le script en Python.

Merci beaucoup!

EnumProcessModules affiche simplement les processus avec les mêmes caractéristiques que Python. Au lieu de cela, appelez EnumProcessModulesEx avec dwFilterFlag=LIST_MODULES_ALL .

Votre code actuel nécessite le module win32api , qui n’a ajouté que récemment EnumProcessModulesEx , et qui ne se trouve pas dans la bibliothèque standard. Voici une solution qui utilise uniquement la bibliothèque standard:

 from ctypes import byref, create_unicode_buffer, sizeof, WinDLL from ctypes.wintypes import DWORD, HMODULE, MAX_PATH Psapi = WinDLL('Psapi.dll') Kernel32 = WinDLL('kernel32.dll') PROCESS_QUERY_INFORMATION = 0x0400 PROCESS_VM_READ = 0x0010 LIST_MODULES_ALL = 0x03 def EnumProcesses(): buf_count = 256 while True: buf = (DWORD * buf_count)() buf_size = sizeof(buf) res_size = DWORD() if not Psapi.EnumProcesses(byref(buf), buf_size, byref(res_size)): raise OSError('EnumProcesses failed') if res_size.value >= buf_size: buf_count *= 2 continue count = res_size.value // (buf_size // buf_count) return buf[:count] def EnumProcessModulesEx(hProcess): buf_count = 256 while True: buf = (HMODULE * buf_count)() buf_size = sizeof(buf) needed = DWORD() if not Psapi.EnumProcessModulesEx(hProcess, byref(buf), buf_size, byref(needed), LIST_MODULES_ALL): raise OSError('EnumProcessModulesEx failed') if buf_size < needed.value: buf_count = needed.value // (buf_size // buf_count) continue count = needed.value // (buf_size // buf_count) return map(HMODULE, buf[:count]) def GetModuleFileNameEx(hProcess, hModule): buf = create_unicode_buffer(MAX_PATH) nSize = DWORD() if not Psapi.GetModuleFileNameExW(hProcess, hModule, byref(buf), byref(nSize)): raise OSError('GetModuleFileNameEx failed') return buf.value def get_process_modules(pid): hProcess = Kernel32.OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, False, pid) if not hProcess: raise OSError('Could not open PID %s' % pid) try: return [ GetModuleFileNameEx(hProcess, hModule) for hModule in EnumProcessModulesEx(hProcess)] finally: Kernel32.CloseHandle(hProcess) for pid in EnumProcesses(): try: dll_list = get_process_modules(pid) print('dll_list: ', dll_list) except OSError as ose: print(str(ose)) print('-' * 14)