Display Loaded Modules v1.10

Author: Emmanuel KARTMANN.

Date: January 3, 2000

Environment: VC6 SP3, NT4 SP5 or VC6 SP3, Windows98 SE

Have you ever experienced an error while loading a DLL when you start an application? Invalid DLL version? Entry point @XXXX not found?

If the answer is yes, then this application is for you!

On you LAN, there may be thousands of versions of a DLL! Which version are you using? Which DLL has effectively been loaded by your application? You must check the PATH, the current working directory of your process, etc...

This small application, called "DisplayLoadedModules", connects to a running process, gets the list of DLLs loaded by the process, and display the following information for every DLL:

bulletModule File Path (e.g. "C:\WINNT4\System32\WS2_32.dll")
bulletModule Description (e.g. "Windows Socket 2.0 32-Bit DLL")
bulletModule File Version (e.g. "4.00")
bulletAssociated Product Name (e.g. "Microsoft(R) Windows NT(TM) Operating System")
bulletAssociated Product Version (e.g. "4.00")
bulletModule File Size (e.g. "59664 bytes")
bulletModule Creation Date (e.g. "October 14, 1996 03:38:00")

You can also click on the "Who's Locking?" button to find which process has loaded (and thus locked) a DLL. Usefull when you want to delete/move/upgrade a DLL and you get an access denied error (you find the process which locks the DLL and stop it instead of rebooting your computer).

The application can also save the output to a text file. If your application runs on a machine "A" and not on a machine "B", you can compare (using 'diff' or 'windiff') the output of the program on both machines. If you're experiencing a DLL versioning problem, you'll figure out very easily...

On Windows NT, the executable uses one additional DLL: PSAPI.DLL For more on these APIs, please refer to MSDN Platform SDK:
bulletProcess Status Helper (PSAPI)
http://msdn.microsoft.com/library/sdkdoc/winbase/psapi_25ki.htm
bulletOpenProcess
http://msdn.microsoft.com/library/sdkdoc/winbase/prothred_478z.htm
bulletEnumProcessModules
http://msdn.microsoft.com/library/sdkdoc/winbase/psapi_1wz7.htm
bulletGetModuleFileNameEx
http://msdn.microsoft.com/library/sdkdoc/winbase/psapi_8x88.htm

On Windows 98, the executable uses the ToolHelp32 library. For more on this APIs, please refer to MSDN Platform SDK:
bulletToolHelp Library
http://msdn.microsoft.com/library/sdkdoc/winbase/toolhelp_5pfd.htm
bulletTaking a Snapshot and Viewing Processes
http://msdn.microsoft.com/library/sdkdoc/winbase/toolhelp_99rn.htm
bulletTraversing the Module List
http://msdn.microsoft.com/library/sdkdoc/winbase/toolhelp_4t6c.htm

What's new in version 1.10

Regarding to previous version posted in Codeguru (v1.4), this new release provides the following new features:

bulletWho's Locking Button: find which process is locking a DLL.
bulletResizable window
bulletRuns on Windows NT, Windows 98 and Windows 95 with one executable
bulletCleaner Source Code: one reusable C++ class to browse through running processes/modules.
bulletThree kits: Source Code only, small kit (executable plus documentation only), full kit (with MFC 42 version 6.0 DLL, for plain systems without VC++ 6.0 installed).

Acknowledgement

The version info is fetched via the CFileVersion class by Manuel Laflamme (posted in www.codeguru.com).

Downloads

Download runtime - 112 Kb
Download source - 91 Kb

History

Date Posted: December 7, 1999
Date Last Updated: January 3, 2000