Examine Information on Windows NT System Level Primitives
Posted
by Zoltan Csizmadia
on November 14th, 2000
Overview
This article presents two separate utilities (NtSysInfo and WhoUses) to examine low level information on such Windows NT system primitives such as processes, threads, windows, modules and objects. Some of the things that I'm doing here are similar to the utilities found on the sysinternals Web site.NtSysInfo Syntax
NtSysInfo enables you to explore the Windows NT internals and enumerate the system's processes, windows, threads, objects.
Usage: NtSysInfo.exe [/H[type]|/M[dllname]|/P|/T|/W] [processId]}
/H Handle list. Can be filtered by "type"
type: File, Thread, Semaphore, Process, Event,...
/M Module list. Can be filtered by "dllname"
/P Process list (processId not used)
/T Thread list
/W Window list
processId Process ID, dec. or 0x??? (-1 = every process, default)
Examples:
NtSysInfo.exe /HFile 651
NtSysInfo.exe /H 1248
NtSysInfo.exe /Mkernel32.dll
NtSysInfo.exe /P
NtSysInfo.exe /W
NtSysInfo.exe /W 1215
WhoUses Syntax
NtSysInfo allows you to list processes, windows, threads, objects. The WhoUses utility enalbes you to determine what process has a file or DLL locked.Usage: WhoUses.exe [/M] fileName /M fileName is a module name ( EXE, DLL, ... ) fileName File name Examples: WhoUses.exe /M kernel32.dll WhoUses.exe /M c:\test\test.dll WhoUses.exe yourTextFile.txt WhoUses.exe c:\pagefile.sys WhoUses.exe Serial0
Code Examples
- Get the process list
- Get the thread list
- Get the object list
- Get the file object list
- Get the window list
- Get window list
SystemProcessInformation pi;
pi.Refresh();
// Iterate through pi.m_ProcessInfos
// processId == -1 means every process SystemThreadInformation ti( processId ); ti.Refresh(); // Iterate through ti.m_ThreadInfos
// processId == -1 means every process SystemHandleInformation oi( processId ); oi.Refresh(); // Iterate through oi.m_HandleInfos
// processId == -1 means every process SystemHandleInformation fi( processId ); fi.SetFilter( _T("File"), TRUE ); // Refresh // Iterate through fi.m_HandleInfos
// processId == -1 means every process SystemWindowInformation wi( processId ); wi.Refresh(); // Iterate through wi.m_WindowInfos
// processId == -1 means every process SystemModuleInformation mi( processId ); mi.Refresh(); // Iterate through mi.m_ModuleInfos
Warnings & Disclaimers
This software uses a few undocumented functions (ntdll.dll), peeks around in your systems internals. Use at your own risk! It works for me. :)Resources
- Book: Undocumented Windows NT by Prasad Dabak, Sandeep Phadke, Milind Borate
- Book: Windows NT/2000 Native API Reference by Gary Nebbett
- Web: System Internals, www.sysinternals.com

Comments
Thanks
Posted by Praveen on 08/15/2012 02:40amHi, Excellent stuff!! thanks a lot Regards, Praveen
Reply