Upload
blake-welch
View
212
Download
0
Embed Size (px)
Citation preview
File System and File System Filter Ecosystem Update
Neal ChristiansenDevelopment Lead
File System Filter Team
BOOT.INI and Longhorn The boot.ini file is no longer used to
configure boot parameters. New BCD (boot configuration data) file
Implemented as a registry hive Resides in \boot\bcd
There is a new tool called bcdedit which is used to configure options
Boot.ini is still used for downlevel operating systems if you are booting multiple OS’s on the same system
Useful bcdedit commands bcdedit –enum
List current settings bcdedit –enum all
List all settings bcdedit /?
Basic help bcdedit /? Types
Lists the bulk of the settings
Useful bcdedit commands
Enable debugging bcdedit -debug on Followed by one of the following:
bcdedit -dbgsettings serial debugport:1 baudrate:115200
bcdedit -dbgsettings 1394 CHANNEL:32 bcdedit –dbgsettings USB
TARGETNAME=U1
Doing IO from Completion Routines
Many of you issue IO operations from IO Completion routines (or post-operation callbacks) when those routines are at an IRQL level lower then DPC level
Filter manager promoted this with routines like FltDoCompletionProcessingWhenSafe
Doing IO from Completion Routines We have determined that it is not safe to ever perform any operation in a completion (or post-operation) callback routine regardless of your current IRQL level
We have been seeing deadlock with various storage drivers because of this The most common scenario we have seen is
when using dynamic disks with RAID enabled We have seen it with other drivers as well
Consider this a new “rule for filters”
Doing IO from Completion Routines It is our very strong recommendation
that you modify your existing products across all OS’s to stop doing this
You have two options: If the operation is synchronous you should
synchronize back to your dispatch routine Use IoIsOperationSynchronous
If the operation is asynchronous you should queue the request to a worker thread
You may have to throttle your worker thread usage because you can cause deadlocks if you consume all of the worker threads
Doing IO from Completion Routines What is filter manager going to do about
this? FltDoCompletionProcessingWhenSafe will be
modified to either queue the request or automatically synchronize and call the specified routine.
This will happen automatically so if you use the current routine you should not have to change anything
We are going to modify the minifilter verifier to detect this situation and break