2424
2525package com .beaudoin .jmm .natives .win32 ;
2626
27+ import com .beaudoin .jmm .misc .Strings ;
2728import com .beaudoin .jmm .process .Module ;
2829import com .beaudoin .jmm .process .impl .win32 .Win32Process ;
2930import com .sun .jna .Native ;
@@ -48,19 +49,20 @@ public final class Psapi {
4849 Native .register (NativeLibrary .getInstance ("Psapi" ));
4950 }
5051
51- public static Map <String , Module > getModules (Win32Process process ) {
52- Map <String , Module > modules = new HashMap <>();
52+ private final static WinDef .HMODULE [] lphModules = new WinDef .HMODULE [1024 ];
53+ private final static IntByReference lpcbNeededs = new IntByReference ();
54+ private final static PsapiStdCall .LPMODULEINFO moduleInfo = new PsapiStdCall .LPMODULEINFO ();
55+ private final static Map <String , Module > modules = new HashMap <>();
5356
54- WinDef .HMODULE [] lphModules = new WinDef .HMODULE [1024 ];
55- IntByReference lpcbNeededs = new IntByReference ();
56- PsapiStdCall .LPMODULEINFO moduleInfo = new PsapiStdCall .LPMODULEINFO ();
57+ public static Map <String , Module > getModules (Win32Process process ) {
58+ modules .clear ();
5759
5860 EnumProcessModulesEx (process .pointer (), lphModules , lphModules .length , lpcbNeededs , 0x03 );
5961 for (int i = 0 ; i < lpcbNeededs .getValue () / 4 ; i ++) {
6062 WinDef .HMODULE hModule = lphModules [i ];
6163 if (GetModuleInformation (process .pointer (), hModule , moduleInfo , moduleInfo .size ())) {
6264 if (moduleInfo .lpBaseOfDll != null ) {
63- String moduleName = GetModuleBaseNameA (process .pointer (), hModule );
65+ String moduleName = Strings . transform ( GetModuleBaseNameA (process .pointer (), hModule ) );
6466 modules .put (moduleName , new Module (process , moduleName , hModule .getPointer (), moduleInfo .SizeOfImage ));
6567 }
6668 }
@@ -72,13 +74,14 @@ public static Map<String, Module> getModules(Win32Process process) {
7274
7375 public static native int GetModuleBaseNameA (Pointer hProcess , WinDef .HMODULE hModule , byte [] lpImageFileName , int nSize );
7476
75- private static String GetModuleBaseNameA (Pointer hProcess , WinDef .HMODULE hModule ) {
76- byte [] lpImageFileName = new byte [128 ];
77+ private static byte [] lpImageFileName = new byte [128 ];
78+
79+ private static byte [] GetModuleBaseNameA (Pointer hProcess , WinDef .HMODULE hModule ) {
7780 GetModuleBaseNameA (hProcess , hModule , lpImageFileName , lpImageFileName .length );
78- return Native . toString ( lpImageFileName ) ;
81+ return lpImageFileName ;
7982 }
8083
81- public static boolean EnumProcessModulesEx (Pointer hProcess , WinDef .HMODULE [] lphModule , int cb , IntByReference lpcbNeededs , int flags ) {
84+ private static boolean EnumProcessModulesEx (Pointer hProcess , WinDef .HMODULE [] lphModule , int cb , IntByReference lpcbNeededs , int flags ) {
8285 return psapi .EnumProcessModulesEx (hProcess , lphModule , cb , lpcbNeededs , flags );
8386 }
8487
0 commit comments