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();在这里
}

浙公网安备 33010602011771号