So i guess i'm as excited as everyone about Windows 8 and i figured i'd get the preview and take a look at what's new. I haven't had much time to tinker with it, but here are some highlights of what to expect.
One thing that's been missing from FltMgr since the beginning and the developers have complained about was the ability to filter other devices that have file system semantics, and in particular named pipes (NPFS). It looks like in Win8 that's finally going to happen and we'll finally be able to write minifilters for NPFS. Moreover, it looks like the folks in Redmond went the extra mile and have added support for the Mailslot file system (MSFS) as well:
C:\Windows\system32>fltmc volumes
Dos Name Volume Name FileSystem Status
------------------------------ --------------------------------------- ---------- --------
\Device\Mup Remote
C: \Device\HarddiskVolume2 NTFS
\Device\HarddiskVolume1 NTFS
\Device\NamedPipe NamedPipe
\Device\Mailslot Mailslot
D: \Device\CdRom0 UDFS Detached
\Device\HarddiskVolumeShadowCopy1 NTFS
D: \Device\CdRom0 UDFS
There is even an in-box filter attached to NPFS:
C:\Far>fltmc filters
Filter Name Num Instances Altitude Frame
------------------------------ ------------- ------------ -----
WdFilter 6 328010 0
luafv 1 135000 0
npsvctrig 1 46000 0
FileInfo 6 45000 0
C:\Far>fltmc instances -f npsvctrig
Instances for npsvctrig filter:
Volume Name Altitude Instance Name Frame VlStatus
------------------------------------- ------------ ---------------------- ----- --------
\Device\NamedPipe 46000 npsvctrig 0
As you can see there are two more minifilters installed by default (at least in this version). There is npsvctrig, which seems to be (according to the INF file) the "Named pipe service trigger provider". There is also WdFilter, which i couldn't find the INF for but the entry in the services key seems to suggest it's related to some anti-malware protection feature.
One more thing I've done was to look at what's new in fltmgr.sys. It has increased in size from the Win7 version I have by about 15% (on the x86 version), so there's bound to be something interesting in there. Looking at the exports we can see a bunch of new APIs, which i've grouped by name into some categories. Some of them are actually documented in MSDN and I'll leave reading the documentation for them up to you:
FltGetContextsEx
FltReleaseContextsEx
FltGetSectionContext
FltCreateSectionForDataScan
FltRegisterForDataScan
FltCloseSectionForDataScan
FltFastIoMdlReadComplete
FltFastIoMdlWriteComplete
FltFastIoMdlRead
FltFastIoPrepareMdlWrite
FltPrepareToReuseEcp
FltOplockKeysEqual
FltOplockFsctrlEx
FltSetQuotaInformationFile
FltQueryQuotaInformationFile
FltCreateNamedPipeFile
FltCreateMailslotFile
FltGetActivityIdCallbackData
FltSetActivityIdCallbackData
FltEnumerateInstanceInformationByVolumeName
FltEnumerateInstanceInformationByDeviceObject
FltPropagateActivityIdToThread
FltWriteFileEx
FltReadFileEx
Please note that i'm pretty sure i'm barely scratching the surface here, for example some APIs might have changed their parameters and my simple perl script wouldn't be able to figure that out. I'm looking forward to the presentations and new samples in the WDK for these things and I wanted to get everybody as excited as I am.
Thanks for the article.
ReplyDeleteMSDN says that FltOplockFsctrlEx and FltOplockKeysEqual are available starting with Windows 7.
Interesting. I can see them in my header file in the WDK but they don't seem to be exported by the binaries i have. Dumpbin will find FltOplockFsctrlEx in the Function Table section but not in the exports section and FltOplockKeysEqual is completely missing. I guess they were never exported in Win7 ?
ReplyDelete