IoRegisterDriverReinitialization 加载驱动顺序的一些问题

系统加载驱动按照group组的顺序加载,这个group组存放在

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\ServiceGroupOrder

 

 

IoInitSystem ()

{

首先是IopInitializeBootDrivers(好像函数中会调用IopCallBootDriverReinitializationRoutines)

// Initialize the drivers loaded by the boot loader (OSLOADER)
//

nextDriverObject = &driverObject;
if (!IopInitializeBootDrivers( LoaderBlock,
nextDriverObject )) {

 

然后是IopInitializeSystemDrivers,驱动是system driver类型的驱动,像tcpip,netbt之类的

//
// Initialize the device drivers for the system.
//

if (!IopInitializeSystemDrivers()) 

{。。。。}

 

这里调用一次    IopCallDriverReinitializationRoutines();

}

 

可以看得出,由于tcpip和netbt是system driver类型的,所以如果你的驱动即使是boot开,然后调用IoRegisterDriverReinitialization注册一个回调

当回调被调用的时候,tcpip和netbt都已经被加载了,并不能插在这2个模块中间获得通知。。。

 

-----

以后IoRegisterDriverReinitialization注册的回调都在下面的位置调用一次

IopLoadUnloadDriver()

{

 status = IopLoadDriver( keyHandle, TRUE, FALSE, &driverEntryStatus );

IopCallDriverReinitializationRoutines();在这里

}

 

 

 

posted @ 2013-09-03 20:29  kkindof  阅读(1290)  评论(0)    收藏  举报