nt!IopLoadDriver indirect call is used only for SERVICE_DEMAND start driver entry
for boot loading drivers you would need to break on nt!IopInitializeBuiltInDriver indirect call as well
you can see a short example on message #17 & #18 in this link
http://www.osronline.com/showthread.cfm?link=231280
this is a dormant script (slightly edited to use gc (go from conditional instead of go as recommended ) that keeps waiting forever and will print out the !drvobj details when ever any driver is loaded in a kernel debugging session
no word wraps the command should be in a single line
.foreach /pS 1 /ps 10 ( place { # call*dword*ptr*\[*\+*\] nt!IopInitializeBuiltinDriver} ) {bu place ".printf \"%msu\\n\", poi(esp+4);r $t0 = poi(esp); gu; !drvobj $t0 2;gc"} .foreach /pS 1 /ps 10 ( place { # call*dword*ptr*\[*\+*\] nt!IoploadDriver} ) {bu place ".printf \"%msu\\n\", poi(esp+4);r $t1 = poi(esp); gu; !drvobj $t1 2;gc"}
xp sp3 vm
in a connected kd session do sxe ibp; .reboot kd will request an initial break on rebooting (equivalent to /break switch in boot.ini) when broken run this script
$$>a< "thisscript.extension"
in addition to printing all the system driver entry points and their driver objects
if your application loads an additional driver their details will be printed too
a sample output for sysinternals dbgview opened in the target vm
the dbgv.sys entry point is called when you check mark the enable kernel capture (ctrl+k)
\REGISTRY\MACHINE\SYSTEM\ControlSet001\Services\DBGV *** ERROR: Module load completed but symbols could not be loaded for Dbgv.sys Driver object (ffbd6248) is for: \Driver\DBGV DriverEntry: f6d89185 Dbgv DriverStartIo: 00000000 DriverUnload: 00000000 AddDevice: 00000000 Dispatch routines: [00] IRP_MJ_CREATE f6d87168 Dbgv+0x1168 [01] IRP_MJ_CREATE_NAMED_PIPE 804fa87e nt!IopInvalidDeviceRequest [02] IRP_MJ_CLOSE f6d87168 Dbgv+0x1168 [03] IRP_MJ_READ 804fa87e nt!IopInvalidDeviceRequest [04] IRP_MJ_WRITE 804fa87e nt!IopInvalidDeviceRequest [05] IRP_MJ_QUERY_INFORMATION 804fa87e nt!IopInvalidDeviceRequest [06] IRP_MJ_SET_INFORMATION 804fa87e nt!IopInvalidDeviceRequest [07] IRP_MJ_QUERY_EA 804fa87e nt!IopInvalidDeviceRequest [08] IRP_MJ_SET_EA 804fa87e nt!IopInvalidDeviceRequest [09] IRP_MJ_FLUSH_BUFFERS 804fa87e nt!IopInvalidDeviceRequest [0a] IRP_MJ_QUERY_VOLUME_INFORMATION 804fa87e nt!IopInvalidDeviceRequest [0b] IRP_MJ_SET_VOLUME_INFORMATION 804fa87e nt!IopInvalidDeviceRequest [0c] IRP_MJ_DIRECTORY_CONTROL 804fa87e nt!IopInvalidDeviceRequest [0d] IRP_MJ_FILE_SYSTEM_CONTROL 804fa87e nt!IopInvalidDeviceRequest [0e] IRP_MJ_DEVICE_CONTROL f6d87168 Dbgv+0x1168 [0f] IRP_MJ_INTERNAL_DEVICE_CONTROL 804fa87e nt!IopInvalidDeviceRequest [10] IRP_MJ_SHUTDOWN 804fa87e nt!IopInvalidDeviceRequest [11] IRP_MJ_LOCK_CONTROL 804fa87e nt!IopInvalidDeviceRequest [12] IRP_MJ_CLEANUP 804fa87e nt!IopInvalidDeviceRequest [13] IRP_MJ_CREATE_MAILSLOT 804fa87e nt!IopInvalidDeviceRequest [14] IRP_MJ_QUERY_SECURITY 804fa87e nt!IopInvalidDeviceRequest [15] IRP_MJ_SET_SECURITY 804fa87e nt!IopInvalidDeviceRequest [16] IRP_MJ_POWER 804fa87e nt!IopInvalidDeviceRequest [17] IRP_MJ_SYSTEM_CONTROL 804fa87e nt!IopInvalidDeviceRequest [18] IRP_MJ_DEVICE_CHANGE 804fa87e nt!IopInvalidDeviceRequest [19] IRP_MJ_QUERY_QUOTA 804fa87e nt!IopInvalidDeviceRequest [1a] IRP_MJ_SET_QUOTA 804fa87e nt!IopInvalidDeviceRequest [1b] IRP_MJ_PNP 804fa87e nt!IopInvalidDeviceRequest