SysInternals's WinObj can list all device objects.
I wonder how it can list the devices.
Is there any open source we can read?(or a code snippet)
What is the most significant function I should know?
WinObj uses the NT system calls NtOpenDirectoryObject
and NtQueryDirectoryObject
. There is no driver or kernel code needed. You won't see the imports because these NT functions are loaded via LoadLibrary
/GetProcAddress
.
You don't have to enumerate the entire object namespace. If you're interested in the device objects call NtOpenDirectoryObject
with "\Device"
, then call NtQueryDirectoryObject
on the returned handle.