首页
论坛
课程
招聘
雪    币: 250
活跃值: 活跃值 (20)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝

[原创]六一献小礼:完整可编译NT4's NTFS源码(可稳定替换xp原版ntfs.sys)

2009-6-1 08:59 67850

[原创]六一献小礼:完整可编译NT4's NTFS源码(可稳定替换xp原版ntfs.sys)

2009-6-1 08:59
67850
·   
(首先感谢珠海的同事,给了我很多学习的好机会~)
write by http://hi.baidu.com/weolar/blog
大家知道,文件系统在操作系统中应该属于比较独立的一块,只需要提供相应接口给上层使用。
Windows的NTFS文件系统也是一样,
在实际编程中,Windows以dispatch routing的形式为上层的io管理器、缓存管理器等提供读写的接口,
甚至文件系统本身的缺页中断也是通过其自身的读写例程来实现换页操作。
所以在设计上,其相对的独立性为我们“山寨”其驱动提供了不少方便。
  相信大家也都看过NT4的NTFS源码。
可那份 源码与现在WIN 5.1下的相差甚远(NT4应该写于91年)。
但由于文件系统的独立性,使我想到也许NTFS自身结构的变化也许并不妨碍它的移植。
事实证明也是如此,我将NT4的代码扣出后,只经过少许修改,便能成功运行在XP下,这也许对广大操作系统爱好者能提供不小的便捷吧~

  本来以为想移植到xp中会有不少困难,
但实际过程中,我只是修改了很小一部分。
其中包括read 操作的一个死锁bug。这个bug的起因是:
NtfsCommonRead 中如果是pageio的时候,
且是异步read,MS忘记把锁放进完成函数的context里了。即无处释放这个锁。
  另外NT4的代码少了NtfsFsdPnp例程。
这个例程在NtCreatePagingFile-》PpPagePathAssign中会调用。
本来我想参照xp的,不过似乎没成功,所以干脆直接返回STATUS_SUCCESS,
貌似也没啥大问题,也能成功换页~
  其他方面,NTFS的文件结构啥的,
基本无需修改。所以各位可以尽管鄙视我,毕竟我没做啥大改动,
就拿这么个题目来哗众取宠。不过我觉得比那个啥淫cracker(yingcracker)好点吧,
这娃直接把我的ksbinsword改个标题就说是他的了

  至于这个可源码调试的NTFS有啥用,我想不必多说了吧,
比如你想研究怎么强行删除文件,调试一下NtfsDeleteFile就知道了。
有了代码方便很多!想看哪个结构就看哪个结构。或者你还可以改动一下,想隐藏哪个文件就隐藏哪个文件。
附件中的sys不能直接运行,因为入口函数有int 3断点
下面是截图:
可以看出硬链接等NTFS特有的功能也支持的好好的

uneshell.org帐号:u10365n

HWS计划·2020安全精英夏令营来了!我们在华为松山湖欧洲小镇等你

上传的附件:
最新回复 (107)
雪    币: 578
活跃值: 活跃值 (15)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
非安全 活跃值 17 2009-6-1 09:01
2
0
支持 一 个
雪    币: 351
活跃值: 活跃值 (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
asd 活跃值 2009-6-1 09:02
3
0
占 领 二 楼
雪    币: 193
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kingcom 活跃值 2009-6-1 09:09
4
0
Good job!
雪    币: 111
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
peowner 活跃值 2009-6-1 09:10
5
0
很好!学习一下!
雪    币: 177
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wormz 活跃值 2009-6-1 09:16
6
0
支持一下,太强大了,有问题了再向你请教,呵呵
雪    币: 177
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wormz 活跃值 2009-6-1 09:19
7
0
顺道bs一下那个淫cracker
雪    币: 42
活跃值: 活跃值 (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
nevergone 活跃值 3 2009-6-1 09:21
8
0
支持一下。。。
雪    币: 284
活跃值: 活跃值 (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jerrynpc 活跃值 2009-6-1 09:22
9
0
盟主大神果然发布了,顶后下载,下载后学习。
雪    币: 204
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
qqeleven 活跃值 1 2009-6-1 09:26
10
0
支持 六一快乐
雪    币: 7099
活跃值: 活跃值 (23)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
achillis 活跃值 15 2009-6-1 09:39
11
0
有码有真相~
雪    币: 250
活跃值: 活跃值 (20)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 活跃值 10 2009-6-1 09:41
12
0
不好意思让大家失望了,我没改动啥东西,只是扣出来稍微修改了下能在xp下运行
雪    币: 251
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
solohac 活跃值 1 2009-6-1 10:10
13
0
so good!
雪    币: 144
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
modi 活跃值 2009-6-1 10:11
14
0
顶一下,不懂.
雪    币: 108
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
王道 活跃值 2009-6-1 10:36
15
0
盟主很强大
雪    币: 32
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jordanpz 活跃值 2009-6-1 10:38
16
0
星际盟主牛,好厉害!
雪    币: 244
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dapro 活跃值 2009-6-1 10:43
17
0
可算是出来了。
雪    币: 519
活跃值: 活跃值 (10)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
hljleo 活跃值 5 2009-6-1 10:43
18
0
顶一下...........
雪    币: 70
活跃值: 活跃值 (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dnybz 活跃值 2009-6-1 10:48
19
0


强烈支持
雪    币: 727
活跃值: 活跃值 (21)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
Winker 活跃值 8 2009-6-1 11:08
20
0
  6.1 的这个礼物最满意了。
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nvicly 活跃值 2009-6-1 11:09
21
0
LZ太强大了,想请教一下...

在NtfsCommonRead里面好像都没对CCB进行非空检查, 所以当Read请求里想查询一下文件信息时就很可能会递归到一个NonCache的Read里面, 这时遇到FO->FsContex2为空的就蓝定了.

对于这个现象我一直想不通...这只是故意设计的吗... 请教weolar大大是怎么看法?
雪    币: 250
活跃值: 活跃值 (20)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 活跃值 10 2009-6-1 11:21
22
0
你说的可能也是个NT4的bug!感谢指正!我再看看。反正NT4的代码里有不少要改的。我这个只是初步改了下,能跑起来而已。
雪    币: 278
活跃值: 活跃值 (15)
能力值: ( LV12,RANK:470 )
在线值:
发帖
回帖
粉丝
zhuwg 活跃值 11 2009-6-1 11:32
23
0
跟进了膜拜学习
雪    币: 321
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haras 活跃值 2009-6-1 11:38
24
0
盟主就是盟主,带领大家创江湖
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kwovex 活跃值 2009-6-1 11:40
25
0
妥妥帖帖忐忐忑忑
雪    币: 134
活跃值: 活跃值 (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 活跃值 2009-6-1 11:42
26
0
呵呵.不错不错....支持一个
雪    币: 105
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jordonA 活跃值 2009-6-1 11:50
27
0
强啊,
雪    币: 213
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
绿豆青蛙 活跃值 2009-6-1 12:00
28
0
先留个名,占块地先
雪    币: 2648
活跃值: 活跃值 (110)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
cvcvxk 活跃值 10 2009-6-1 14:14
29
0
不错啦,回去玩玩~
雪    币: 348
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
inioo 活跃值 2009-6-1 14:20
30
0
照单收了。谢楼主
雪    币: 269
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
nudtsong 活跃值 1 2009-6-1 15:26
31
0
看了《NT文件系统内幕》两次,都因为难以理解而没有坚持读完。不知道什么时候才能达到楼主的水平
雪    币: 211
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
dayed 活跃值 1 2009-6-1 23:38
32
0
收到,thx
雪    币: 104
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ChiChou 活跃值 2009-6-2 17:58
33
0
顶个~~~
雪    币: 78
活跃值: 活跃值 (11)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
RegKiller 活跃值 10 2009-6-2 18:16
34
0
完全看不懂,不过这娃的确是不太讲究。
雪    币: 6836
活跃值: 活跃值 (89)
能力值: (RANK:1290 )
在线值:
发帖
回帖
粉丝
玩命 活跃值 31 2009-6-2 22:04
35
0
收藏鸟。。。
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
rocker疯子 活跃值 2009-6-3 21:44
36
0
强人对你膜拜
雪    币: 209
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
百家拳 活跃值 2009-6-3 21:57
37
0
看雪论坛人才辈出啊
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小子李 活跃值 2009-6-9 09:57
38
0
支持 一 个
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
瓜ssj 活跃值 2009-6-11 21:08
39
0
顶师兄呢~~
雪    币: 113
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuyusong 活跃值 2009-6-12 08:54
40
0
没学过的东东   研读研读
雪    币: 115
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
supermilg 活跃值 2009-6-13 03:20
41
0
不错,不错,还真没敢试过
雪    币: 8
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
吹雪 活跃值 2009-6-13 04:13
42
0
跟帖收藏了。
雪    币: 214
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
李敬利 活跃值 2 2009-6-14 15:43
43
0
支持“山寨”Windows
雪    币: 250
活跃值: 活跃值 (20)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 活跃值 10 2009-6-22 20:47
44
0
经测试,完全可以在win2k3+wrk下正常运行。现在用wrk+山寨ntfs调试,全是代码级,很爽
雪    币: 154
活跃值: 活跃值 (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
fengjl 活跃值 1 2009-6-25 15:39
45
0
我用wdk 2008 不能编译通过(使用xp2的环境). 问一下楼主的编译环境,谢谢___有点贪心.....

D:\WINDDK\6001.18002\src\fengjl>cd MyNtfs

D:\WINDDK\6001.18002\src\fengjl\MyNtfs>build
BUILD: Compile and Link for x86
BUILD: Loading d:\winddk\6001.18002\build.dat...
BUILD: Computing Include file dependencies:
BUILD: Start time: Thu Jun 25 15:25:44 2009
BUILD: Examining d:\winddk\6001.18002\src\fengjl\myntfs directory for files to c
ompile.
BUILD: Saving d:\winddk\6001.18002\build.dat...
BUILD: Compiling and Linking d:\winddk\6001.18002\src\fengjl\myntfs directory
_NT_TARGET_VERSION SET TO WINXP
Compiling - ntfsinit.c
errors in directory d:\winddk\6001.18002\src\fengjl\myntfs
d:\winddk\6001.18002\src\fengjl\myntfs\inc\lfs.h(154) : error C2011: '_TRANSACTI
ON_STATE' : 'enum' type redefinition
d:\winddk\6001.18002\src\fengjl\myntfs\sdk\inc\ntioapi.h(803) : error C2011: '_F
ILE_FS_VOLUME_INFORMATION' : 'struct' type redefinition
d:\winddk\6001.18002\src\fengjl\myntfs\sdk\inc\ntioapi.h(812) : error C2011: '_F
ILE_FS_SIZE_INFORMATION' : 'struct' type redefinition
d:\winddk\6001.18002\src\fengjl\myntfs\sdk\inc\ntioapi.h(828) : error C2011: '_F
ILE_FS_LABEL_INFORMATION' : 'struct' type redefinition
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\cachesup.c(681) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\registry.c(313) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\registry.c(649) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\registry.c(974) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\registry.c(1061) : error C2039: 'Owne
rThreads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\registry.c(1175) : error C2039: 'Owne
rThreads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\registry.c(1345) : error C2039: 'Owne
rThreads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\registry.c(1929) : error C2039: 'Owne
rThreads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\lbcbsup.c(115) : error C2039: 'OwnerT
hreads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\querylog.c(224) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\querylog.c(265) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\querylog.c(451) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\querylog.c(568) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\querylog.c(689) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\querylog.c(791) : error C2039: 'Owner
Threads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\restart.c(174) : error C2039: 'OwnerT
hreads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\restart.c(237) : error C2039: 'OwnerT
hreads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\restart.c(424) : error C2039: 'OwnerT
hreads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\restart.c(557) : error C2039: 'OwnerT
hreads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\write.c(174) : error C2039: 'OwnerThr
eads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\write.c(337) : error C2039: 'OwnerThr
eads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\lfs\write.c(456) : error C2039: 'OwnerThr
eads' : is not a member of '_ERESOURCE'
d:\winddk\6001.18002\src\fengjl\myntfs\restrsup.c(1628) : error C2065: 'Transact
ionActive' : undeclared identifier
d:\winddk\6001.18002\src\fengjl\myntfs\restrsup.c(1962) : error C2065: 'Transact
ionPrepared' : undeclared identifier
d:\winddk\6001.18002\src\fengjl\myntfs\restrsup.c(1981) : error C2065: 'Transact
ionCommitted' : undeclared identifier
Linking Executable - objchk_wxp_x86\i386\myntfs.sys
link : error LNK1181: cannot open input file 'd:\winddk\6001.18002\src\fengjl\my
ntfs\objchk_wxp_x86\i386\ntfsinit.obj'
BUILD: Finish time: Thu Jun 25 15:25:53 2009
BUILD: Done

    3 files compiled - 386 Warnings - 29 Errors - 475 LPS
    1 executable built - 1 Error

D:\WINDDK\6001.18002\src\fengjl\MyNtfs>
雪    币: 154
活跃值: 活跃值 (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
fengjl 活跃值 1 2009-6-25 15:58
46
0
好象是ERESOURCE这个结构引起的
雪    币: 154
活跃值: 活跃值 (20)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
fengjl 活跃值 1 2009-6-25 16:34
47
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;

欢迎指正错误(有没有改错)呵呵
雪    币: 250
活跃值: 活跃值 (20)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
weolar 活跃值 10 2009-6-25 17:49
48
0
多谢指正。编译相关见http://www.debugman.com/read.php?tid=3174。我这没WDK,所以没法测试,呵呵。
雪    币: 284
活跃值: 活跃值 (14)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
飞心男孩 活跃值 2 2009-6-26 13:55
49
0
用他去杀人,回头再来谢
雪    币: 234
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
梦魇颖雨 活跃值 2009-7-1 16:03
50
0
强顶啊...
游客
登录 | 注册 方可回帖
返回