@msdn=http://search.microsoft.com/search/results.aspx?qu=$$$ @pinvoke=http://pinvoke.net/$$$.htm Summary: Retrieves a handle for each module in the specified process. !!!!C# Signature: [DllImport("psapi.dll", SetLastError = true)] public static extern bool EnumProcessModules(IntPtr hProcess, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.U4)] [In][Out] uint[] lphModule, uint cb, [MarshalAs(UnmanagedType.U4)] out uint lpcbNeeded); !!!!VB.NET Signature: <DllImport("psapi.dll", SetLastError:=True)> _ Public Shared Function EnumProcessModules(ByVal hProcess As IntPtr, <MarshalAs(UnmanagedType.LPArray, ArraySubType := UnmanagedType.U4)> <[In]()> <Out()> ByVal lphModule As UInteger(), ByVal cb As UInteger, <MarshalAs(UnmanagedType.U4)> ByRef lpcbNeeded As UInteger) As Boolean End Function !!!!User-Defined Types: None. !!!!Alternative Managed API: System.Diagnostics.Process.Modules !!!!Notes: I found that the C# signature above did not work for me. Instead I am using the following signature: [DllImport("psapi.dll", CallingConvention=CallingConvention.StdCall, SetLastError = true)] public static extern int EnumProcessModules(IntPtr hProcess, [Out] IntPtr lphModule, uint cb, out uint lpcbNeeded); !!!!Tips & Tricks: Please add some! !!!!Sample Code: Used in conjuction with GetModuleFileNameEx: Process[] pc = Process.GetProcessesByName("communicator"); foreach (Process p in pc) { // Setting up the variable for the second argument for EnumProcessModules IntPtr[] hMods = new IntPtr[1024]; GCHandle gch = GCHandle.Alloc(hMods, GCHandleType.Pinned); // Don't forget to free this later IntPtr pModules = gch.AddrOfPinnedObject(); // Setting up the rest of the parameters for EnumProcessModules uint uiSize = (uint)(Marshal.SizeOf(typeof(IntPtr)) * (hMods.Length)); uint cbNeeded = 0; if (EnumProcessModules(p.Handle, pModules, uiSize, out cbNeeded) == 1) { Int32 uiTotalNumberofModules = (Int32)(cbNeeded / (Marshal.SizeOf(typeof(IntPtr)))); for (int i = 0; i < (int)uiTotalNumberofModules; i++) { StringBuilder strbld = new StringBuilder(1024); GetModuleFileNameEx(p.Handle, hMods[i], strbld, (uint)(strbld.Capacity)); Console.WriteLine("File Path: " + strbld.ToString()); Console.WriteLine(); } Console.WriteLine("Number of Modules: " + uiTotalNumberofModules); Console.WriteLine(); } // Must free the GCHandle object gch.Free(); } Documentation: EnumProcessModules@msdn on MSDN
Edit psapi.EnumProcess...
You do not have permission to change this page. If you feel this is in error, please send feedback with the contact link on the main page.