阅读:1934回复:14
运行tooflat的sfilter的蓝屏问题,请大家帮忙,感激不尽
我在运行tooflat的sfilter程序的时候,操作需要加密的文件就蓝屏。后来发现原来在SfCreate被触发时,调用到SfSetFileEncrypted函数。这个函数中以下这段程序一执行就蓝屏(这段程序应该实现的功能是:将一个文件是否被加密的记录存在隐藏的文件中)。如果注释下面这段程序,反复操作需要加密的文件几次就蓝屏。
所以想问大家一个谁调过这个程序,能否告诉我为什么呀,在此先谢过了。 也想问一下tooflat,这个程序是否稳定的运行过?我看很多朋友都说运行过,好象没说有什么问题。 我的环境是:ifsxp+winxp用的是debug版本 // Status = ZwCreateFile(&FileHandle, // FILE_WRITE_DATA | SYNCHRONIZE, // &ObjectAttributes, // &IoStatus, // NULL, // FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM, // 0, // FILE_OVERWRITE_IF, // FILE_SYNCHRONOUS_IO_NONALERT, // NULL, // 0 // ); // if (NT_SUCCESS(Status)) // { // if (Data) // { // Status = ZwWriteFile(FileHandle, // NULL, // NULL, // NULL, // &IoStatus, // Data, // DataLength, // NULL, // NULL // ); // } // // ZwClose(FileHandle); // } |
|
|
沙发#
发布于:2007-01-05 15:44
是不是重入了?
|
|
|
板凳#
发布于:2007-01-05 16:52
我以前测试过好象没什么问题,可能和你机器的某些其他软件冲突吧,他那个只能保证自己不会重入,但如果有其他FILTER的话,可能还是有问题的.
|
|
|
地板#
发布于:2007-01-05 17:07
好的,谢谢,可是这是新装的机器,除了开发必要的,别的都没装,实在不知道问题在哪,还有哪位仁兄再说说有什么其它的原因吗?或遇到过这种情况。
|
|
|
地下室#
发布于:2007-01-06 23:45
我家里的笔记本加密解密怎么测试都没有问题,公司电脑一对系统盘调试就死机了.
|
|
5楼#
发布于:2007-01-06 23:48
有一些系统文件是动不得的...是不是分区不同的原因?
fat32?ntfs? |
|
|
6楼#
发布于:2007-01-07 00:02
家里电脑清一色的ntfs,分别在c盘和D盘上装了Xp sp2,测试都没有问题
公司电脑没太注意,不过公司里电脑上病毒很多,家里电脑还算比较干净 |
|
7楼#
发布于:2007-01-07 16:34
tooflat在一部分电脑上运行正常,应该说他的sfilter自己本身没有重入问题,应该是与其他文件系统之间发生了重入,两种可能,
1/其他文件系统的create在sfilter中发生重入, 2/sfilter的create操做在其他文件系统中发生了重入, 不知道哪一种可能性大一些?? |
|
8楼#
发布于:2007-01-07 16:40
不过最原始的sfilter编译安装之后没有发生重入问题,我觉得是tooflat大侠的sfilter中的create操作在其他的filter中引起重入的可能性会比较大一些.
|
|
9楼#
发布于:2007-01-08 09:39
非常感谢大家,只是怎么防止重入呀,我都折腾1个月了,还是弄不好
还要请大家帮忙,怎么解决呀 |
|
|
10楼#
发布于:2007-01-08 14:24
调用SfIssueReadWriteIrpSynchronously的时候,指定IRP_NOCACHE标志,可能还需要对文件长度做调整。
不过我不知道你遇到的问题是不是和这有关。 最好有个dump文件的分析。 |
|
11楼#
发布于:2007-01-09 18:33
谢谢大家,谢谢tooflat,我的问题部分解决了,原来是卡巴斯基的问题。关了就不会蓝屏了。
但是在执行SfIsEncryptFlagExist函数时,ZwReadFile老是出错,但不会蓝屏。 Data是tooflat预留给密钥的,读的时候就读了sizeof(Data)那么长,我把读的长度减1就好了。 |
|
|
12楼#
发布于:2007-01-15 09:42
TO:fatmouse527
Status = SfIsEncryptFlagExist(DeviceObject, FileCtxPtr->Name, &IsEncryptFlagExist, FileCtxPtr->EncryptExtData, sizeof(FileCtxPtr->EncryptExtData)); 改为 Status = SfIsEncryptFlagExist(DeviceObject, FileCtxPtr->Name, &IsEncryptFlagExist, FileCtxPtr->EncryptExtData, sizeof(FileCtxPtr->EncryptExtData)-1); ??????????????????????? |
|
13楼#
发布于:2007-01-15 09:52
我将以下两个函数改了一下,不过这样改是暂时的,如果你以后有了自已的密钥,和一些需要记录的信息,再根据实际情况改Data和DataLength:
SfIsEncryptFlagExist函数做如下修改 Status = ZwReadFile(FileHandle, NULL, NULL, NULL, &IoStatus, Data, DataLength-1, NULL, NULL ); SfSetFileEncrypted函数做如下修改 Status = ZwWriteFile(FileHandle, NULL, NULL, NULL, &IoStatus, Data, DataLength-1, NULL, NULL ); |
|
|
14楼#
发布于:2007-01-15 15:34
tooflat大侠的目录判断好象有点问题,不准!
|
|