public static extern bool EnumProcessModulesEx(SafeMemoryHandle hProcess, [Out] IntPtr lphModule, int cb, out int lpcbNeeded, ListModulesFlags dwFilterFlag);
public static bool EnumProcessModules(SafeMemoryHandle hProcess, out IntPtr[] modules, ListModulesFlags flags = ListModulesFlags.ListModulesAll) { modules = new IntPtr[512]; var numberOfModules = 0; var cb = IntPtr.Size * modules.Length; var lphModule = GCHandle.Alloc(modules, GCHandleType.Pinned); if (NativeMethods.EnumProcessModulesEx(hProcess, lphModule.AddrOfPinnedObject(), cb, out var cbNeeded, flags)) { numberOfModules = cbNeeded / IntPtr.Size; } lphModule.Free(); Array.Resize(ref modules, numberOfModules); return(numberOfModules != 0); }