Beispiel #1
0
 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);
        }