NT4 操作系统的 NTFS 文件系统驱动源代码(以及 FastFat CDFS 源码)
很久以前从微软泄漏出来的 NT 4 源代码, 拥有的人多, 研究的人少. 由于今后工作中要经常同 NTFS 文件系统打交道, 就把这份源码的 NTFS 文件系统驱动部分的源代码扒拉下来, 改巴改巴. 就能编译通过了.
经过初步在 windows XP SP2 环境下测试, 本驱动不足的地方是不支持在资源管理器内通过拷贝粘贴的方式来复制或移动文件, 其他问题还不知道有没有.
能通过的编译环境有
- VC 6 + ntddk2000
- VS2008 + WDk 7600.16385.0
更改了几个地方
lfsprocs.h:
/*#define LfsReleaseLfcb(LFCB) \
if ((LFCB)->Sync->Resource.OwnerThreads[0].OwnerThread == ExGetCurrentResourceThread()) {\
ExReleaseResource( &(LFCB)->Sync->Resource ); \
}//*/
#define LfsReleaseLfcb(LFCB) \
if ((LFCB)->Sync->Resource.OwnerEntry.OwnerThread == ExGetCurrentResourceThread()) {\
ExReleaseResource( &(LFCB)->Sync->Resource ); \
}
#define LfsAcquireLch(LCH) \
ExAcquireResourceExclusive( &(LCH)->Sync->Resource, TRUE )
/*#define LfsReleaseLch(LCH) \
if ((LCH)->Sync->Resource.OwnerThreads[0].OwnerThread == ExGetCurrentResourceThread()) { \
ExReleaseResource( &(LCH)->Sync->Resource ); \
}//*/
#define LfsReleaseLch(LCH) \
if ((LCH)->Sync->Resource.OwnerEntry.OwnerThread == ExGetCurrentResourceThread()) { \
ExReleaseResource( &(LCH)->Sync->Resource ); \
}
restrsup.c logsup.c
TransactionStateNormal ;//TransactionActive; TransactionStateIndoubt ;//TransactionPrepared; TransactionStateCommittedNotify;//TransactionCommitted;
本来以为想移植到 xp 中会有不少困难,但实际过程中,我只是修改了很小一部分。
- 其中包括 read 操作的一个死锁 bug. 这个 bug 的起因是:
NtfsCommonRead 中如果是 pageio 的时候, 且是异步 read, MS 忘记把锁放进完成函数的 context 里了. 即无处释放这个锁.- NT 4 的代码少了 NtfsFsdPnp 例程, 这个例程在 NtCreatePagingFile -> PpPagePathAssign 中会调用. 本来我想参照 xp 的, 不过似乎没成功, 所以干脆直接返回 STATUS_SUCCESS, 貌似也没啥大问题, 也能成功换页.
—- weolar
下面是源代码和工程文件的下载链接
延伸阅读:
NT Cache Manager 相关
NTFS 文件系统底层挖掘
在 VS 2008 内开发驱动程序的 “解决方案” 的编译链接选项的设置
NT 4 源码编译环境
ntfs工程精简版 update for VS 2005/2008/2010
【原创】六一献小礼:完整可编译NT4′s NTFS源码(可稳定替换xp原版ntfs.sys)








近期评论