driver load and start order

Hi,

Can someone explain the order boot drivers are loaded and started?

Here is what IFS Kit says about driver loading

“On system boot, the OS loader loads the boot file system, the RAW file system, and all drivers of type SERVICE_BOOT_START BEFORE IT TRANSFERS CONTROL to the kernel. These drivers are in memory when the kernel gets control”

  1. The PnP Manager calls the DriverEntry routines of the RAW file system and all SERVICE_BOOT_START drivers.
    If a SERVICE_BOOT_START driver is dependent on other drivers, those drivers are loaded and started as well."

I have a storage filter driver which has a type SERVICE_BOOT_START. Do I understand correctly that my storage filter will be in memory along with the boot file system and other boot drivers when the control is transferred to the kernel? What is the purpose of ServiceGroupOrder and GroupOrderList options if a driver doesn’t get control until all other boot drivers are loaded??? Are these values used to determine the order in which PnP maanger calls DriverEntry?

Do I miss something?

Thank you,
Roman

boot start drivers are loaded as part of the OS load (bootstrap ) mechanism
before the OS is run. The service group and group order stuff determines
load order (and driver entry invocation order) for boot start drivers and
for other drivers that are not demand start. All non boot start pnp drivers
are supposed to be demand start, so outside of boot start drivers the load
order stuff really applies to legacy non-pnp nt4 style drivers.

AddDevice/StartDevice are invoked by the PnP manager as it sees fit, based
on bus enumeration.

Your design should not depend on load order at all, with the exception that
if you need to be present because you are part of the second phase of the
boot process (i.e. when the boot filesystem is started) you are a boot start
driver and you should set your service load type appropriately. Even then,
within the set of legitimate boot start drivers, depending on load order is
not a good idea.

=====================
Mark Roddy DDK MVP
Windows 2003/XP/2000 Consulting
Hollis Technology Solutions 603-321-1032
www.hollistech.com


From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Roman Kudinov
Sent: Wednesday, June 22, 2005 3:02 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] driver load and start order

Hi,

Can someone explain the order boot drivers are loaded and started?

Here is what IFS Kit says about driver loading

“On system boot, the OS loader loads the boot file system, the RAW file
system, and all drivers of type
mk:mentals_0t2e.htm#ddk_service_boot_start_if> SERVICE_BOOT_START BEFORE IT
TRANSFERS CONTROL to the kernel. These drivers are in memory when the kernel
gets control”



3. The PnP Manager calls the DriverEntry routines of the RAW file system and
all SERVICE_BOOT_START drivers.
If a SERVICE_BOOT_START driver is dependent on other drivers, those drivers
are loaded and started as well."

I have a storage filter driver which has a type SERVICE_BOOT_START. Do I
understand correctly that my storage filter will be in memory along with the
boot file system and other boot drivers when the control is transferred to
the kernel? What is the purpose of ServiceGroupOrder and GroupOrderList
options if a driver doesn’t get control until all other boot drivers are
loaded??? Are these values used to determine the order in which PnP maanger
calls DriverEntry?

Do I miss something?

Thank you,
Roman


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com</mk:>

Thank you for the detailed answer it cleared some things for me.
Another thing which confuses me is from the article “What Happens to File Systems During System Boot” from IFS Kit.

"Drivers are loaded in order of the load order groups to which they are assigned. Among file system filters, those that are assigned to one of the new file system filter driver load order groups are loaded before all other filter drivers. These load order groups are described in detail in File System Filter Driver Load Order Groups.
Then all drivers in the “filter” load order group are loaded. Note that the “filter” group includes storage filter drivers as well as file system filter drivers, and it includes third-party as well as built-in filter drivers. "

As it comes from this statement my storage filter driver may be started later than FS filter drivers. Is this correct?

P.S. Originally my questions arised because I need to know if I can access a file system from my boot start storage filter driver. Probably it’s a bad idea because of possibility of infinite loops, however I consider it as one of the possibilities for my storage filter driver to work (I want to save settings in a file)

Thank you,
Roman

boot start drivers are loaded as part of the OS load (bootstrap ) mechanism before the OS is run. The service group and group order stuff determines load order (and driver entry invocation order) for boot start drivers and for other drivers that are not demand start. All non boot start pnp drivers are supposed to be demand start, so outside of boot start drivers the load order stuff really applies to legacy non-pnp nt4 style drivers.

AddDevice/StartDevice are invoked by the PnP manager as it sees fit, based on bus enumeration.

Your design should not depend on load order at all, with the exception that if you need to be present because you are part of the second phase of the boot process (i.e. when the boot filesystem is started) you are a boot start driver and you should set your service load type appropriately. Even then, within the set of legitimate boot start drivers, depending on load order is not a good idea.

Mark Roddy DDK MVP
Windows 2003/XP/2000 Consulting
Hollis Technology Solutions 603-321-1032
www.hollistech.com


From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of Roman Kudinov
Sent: Wednesday, June 22, 2005 3:02 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] driver load and start order

Hi,

Can someone explain the order boot drivers are loaded and started?

Here is what IFS Kit says about driver loading

“On system boot, the OS loader loads the boot file system, the RAW file system, and all drivers of type SERVICE_BOOT_START BEFORE IT TRANSFERS CONTROL to the kernel. These drivers are in memory when the kernel gets control”

  1. The PnP Manager calls the DriverEntry routines of the RAW file system and all SERVICE_BOOT_START drivers.
    If a SERVICE_BOOT_START driver is dependent on other drivers, those drivers are loaded and started as well."

I have a storage filter driver which has a type SERVICE_BOOT_START. Do I understand correctly that my storage filter will be in memory along with the boot file system and other boot drivers when the control is transferred to the kernel? What is the purpose of ServiceGroupOrder and GroupOrderList options if a driver doesn’t get control until all other boot drivers are loaded??? Are these values used to determine the order in which PnP maanger calls DriverEntry?

Do I miss something?

Thank you,
Roman


Questions? First check the Kernel Driver FAQ at http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument: ‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com

the notion of when things “load” is much less important in the PNP
world, since PNP takes care of making sure drivers are attached to
device stacks in the order specified in the registry for that device
(UpperFilters, Service, LowerFilters, etc…). For PNP drivers load
order can define when the stack may become avaialble to the system, but
not what order the drivers are attached to it.

As for storing your settings in a file in the file system - it’s a bad
idea. What happens when there are multiple partitions on the drive, or
when the file gets deleted or the file system is formatted? If you want
to store your filter’s settings on the drive, require the user to create
a dummy partition for you that you can contain your information in (or
better yet, do it in your setup program)

-p


From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Roman Kudinov
Sent: Wednesday, June 22, 2005 5:13 AM
To: Windows System Software Devs Interest List
Subject: Re:[ntdev] driver load and start order

Thank you for the detailed answer it cleared some things for me.
Another thing which confuses me is from the article “What Happens to
File Systems During System Boot” from IFS Kit.

"Drivers are loaded in order of the load order groups to which they are
assigned. Among file system filters, those that are assigned to one of
the new file system filter driver load order groups are loaded before
all other filter drivers. These load order groups are described in
detail in File System Filter Driver Load Order Groups
mk:lters_41ba.htm> .

Then all drivers in the “filter” load order group are loaded. Note that
the “filter” group includes storage filter drivers as well as file
system filter drivers, and it includes third-party as well as built-in
filter drivers. “

As it comes from this statement my storage filter driver may be started
later than FS filter drivers. Is this correct?

P.S. Originally my questions arised because I need to know if I can
access a file system from my boot start storage filter driver. Probably
it’s a bad idea because of possibility of infinite loops, however I
consider it as one of the possibilities for my storage filter driver to
work (I want to save settings in a file)

Thank you,
Roman

boot start drivers are loaded as part of the OS load (bootstrap
) mechanism before the OS is run. The service group and group order
stuff determines load order (and driver entry invocation order) for boot
start drivers and for other drivers that are not demand start. All non
boot start pnp drivers are supposed to be demand start, so outside of
boot start drivers the load order stuff really applies to legacy non-pnp
nt4 style drivers.

AddDevice/StartDevice are invoked by the PnP manager as it sees
fit, based on bus enumeration.

Your design should not depend on load order at all, with the
exception that if you need to be present because you are part of the
second phase of the boot process (i.e. when the boot filesystem is
started) you are a boot start driver and you should set your service
load type appropriately. Even then, within the set of legitimate boot
start drivers, depending on load order is not a good idea.

=====================
Mark Roddy DDK MVP
Windows 2003/XP/2000 Consulting
Hollis Technology Solutions 603-321-1032
www.hollistech.com

________________________________

From: xxxxx@lists.osr.com
[mailto:xxxxx@lists.osr.com] On Behalf Of Roman Kudinov
Sent: Wednesday, June 22, 2005 3:02 AM
To: Windows System Software Devs Interest List
Subject: [ntdev] driver load and start order

Hi,

Can someone explain the order boot drivers are loaded
and started?

Here is what IFS Kit says about driver loading

“On system boot, the OS loader loads the boot file
system, the RAW file system, and all drivers of type SERVICE_BOOT_START
mk:undamentals_0t2e.htm#ddk_service_boot_start_if> BEFORE IT TRANSFERS
CONTROL to the kernel. These drivers are in memory when the kernel gets
control”



3. The PnP Manager calls the DriverEntry routines of the
RAW file system and all SERVICE_BOOT_START drivers.
If a SERVICE_BOOT_START driver is dependent on other
drivers, those drivers are loaded and started as well.”

I have a storage filter driver which has a type
SERVICE_BOOT_START. Do I understand correctly that my storage filter
will be in memory along with the boot file system and other boot drivers
when the control is transferred to the kernel? What is the purpose of
ServiceGroupOrder and GroupOrderList options if a driver doesn’t get
control until all other boot drivers are loaded??? Are these values used
to determine the order in which PnP maanger calls DriverEntry?

Do I miss something?

Thank you,
Roman


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown
lmsubst tag argument: ‘’
To unsubscribe send a blank email to
xxxxx@lists.osr.com


Questions? First check the Kernel Driver FAQ at
http://www.osronline.com/article.cfm?id=256

You are currently subscribed to ntdev as: unknown lmsubst tag argument:
‘’
To unsubscribe send a blank email to xxxxx@lists.osr.com</mk:></mk:>