VOID
IoRegisterDriverReinitialization(
IN PDRIVER_OBJECT DriverObject,
IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
IN PVOID Context
);
IoRegisterDriverReinitialization is called by a driver during its initialization or reinitialization to register its Reinitialize routine to be called again before the driver’s and, possibly the system’s, initialization is complete.
VOID (*PDRIVER_REINITIALIZE)( IN PDRIVER_OBJECT DriverObject, IN PVOID Context, IN ULONG Count );
A driver can call this routine only if its DriverEntry routine will return STATUS_SUCCESS. If the driver-supplied Reinitialize routine must use the registry, the DriverEntry routine should include its input RegistryPath pointer as part of the context passed to the Reinitialize routine in this call.
If the driver is loaded dynamically, it is possible for this to occur during a normally running system, so all references to the reinitialization queue must be synchronized.
The Count input to a DriverReinitializationRoutine indicates how many times this routine has been called.
Callers of IoRegisterDriverReinitialization must be running at IRQL PASSIVE_LEVEL.