楼主: 银砾石
收起左侧

[原创工具] 火流星(2011-2-15 FS.DLL更新---bug修复)

  [复制链接]
银砾石
 楼主| 发表于 2009-11-22 20:39:01 | 显示全部楼层
原帖由 olly 于 2009-11-22 15:21 发表
dll在枚举exFAT格式磁盘时有时会出现异常。

文件夹中的文件有时会错乱,比如d文件在A文件夹中,但是枚举时会出现在B文件夹(B文件夹为空)中,这时再在B文件夹中建立一个文件c,A中能枚举出d文件了,但是B中还是会枚 ...

原因找到了,枚举时多枚举了一个簇,多出来的文件是属于下一簇的,出错的话可能是因为内容不符合目录项而强行分析的结果。
将在下一版修正
olly
发表于 2009-11-22 20:57:25 | 显示全部楼层
原帖由 银砾石 于 2009-11-22 20:39 发表

原因找到了,枚举时多枚举了一个簇,多出来的文件是属于下一簇的,出错的话可能是因为内容不符合目录项而强行分析的结果。
将在下一版修正


呵呵,我也是今天刚把U盘格式化试了下exFAT格式,就试了下枚举,删除,刚好复制了些文件就发生了些问题。。

还有一个问题,为什么exFAT下写入一般是失败的(我没成功过= =),是在xp sp3环境下~~~
另外,有没有什么方式让系统强制刷新文件缓存而不需要重启呢?
银砾石
 楼主| 发表于 2009-11-22 21:24:10 | 显示全部楼层
卸载EXFAT驱动就可以写成功
刷新需要驱动,具体如何做我也不清楚

我测试的时候是新格式化的,然后拷贝了一两个目录,内容不多,所以BUG没显示出来(另一个原因是用的那个console测的,字符界面,切换目录不方便,所以测的也不多)
银砾石
 楼主| 发表于 2009-11-22 21:43:06 | 显示全部楼层
//////////////////////////////////////////////////////////
///////////////////////////////2009-11-22更新/////////////
//////////////////////////////////////////////////////////
//修复olly发现的几个错误

#define FS_NotSupported 0x06 //不支持

//下面部分为链表中的fstype
#define FileSystem_FAT16 0x01   //FAT16    0x00为未知
#define FileSystem_FAT32 0x02   //FAT32
#define FileSystem_NTFS 0x03   //NTFS
#define FileSystem_EXFAT 0x04  //EXFAT
#define FileSystem_REG 0x1001 //注册表
#define FileSystem_PARTITION 0x2001 //分区

class Partition //枚举分区返回的链表
{
public:
        WORD ErrorCode;
        WORD fs;
        WORD fstype; //节点类型,期待值FileSystem_PARTITION
        LARGE_INTEGER StartPos; //分区开始位置
        LARGE_INTEGER Size; //分区大小
        BYTE Active; //是否活动分区
        BYTE Flag; //分区类型,参考MBR定义
        Partition * head;//第一分区
        Partition * next;//下一分区
        Partition *pre;//上一分区
};
typedef Partition * (* FS_ENUMPARTITION)(Partition * node);//导出枚举分区功能,需要读取MBR
//典型使用hDev=CreateFile("\\\\.\\PhysicalDrive0",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);//hDev见以前的读磁盘功能示范定义
//此功能可以和其他功能结合使用a.QuadPart=a.QuadPart+StartPos.QuadPart;SetFilePointer(hDev,a.LowPart,&a.HighPart,FILE_BEGIN);

typedef bool (* FS_DELETENODE)(void * node);//删除链表,包括fat,ntfs,exfat,reg,partition
olly
发表于 2009-11-22 22:14:55 | 显示全部楼层
奇怪了,刚更新的FS.dll注册失败(FS.DLL.rar压缩包中的那个),而用例子里那个dll能够注册成功。
例子中的程序用FS.DLL.rar压缩包中的那个dll却能注册成功



额,,刚试了下,没注册也能用啊~~ 石头是不是忘记加代码了?

[ 本帖最后由 olly 于 2009-11-22 22:22 编辑 ]
olly
发表于 2009-11-22 22:30:59 | 显示全部楼层
直接使用例子中的程序枚举分区表程序会直接崩溃,而换了FS.DLL.rar压缩包中的那个dll的话就可以枚举了,但是在第一次枚举后再次枚举时程序崩溃了,看了下例子代码,好像是枚举分区完用了deletenode(node);但是node没置NULL于是就。。。
银砾石
 楼主| 发表于 2009-11-23 08:24:17 | 显示全部楼层
deletenode后确实忘了,不过我这边倒没有出错过

console里的fs.dll是以前版本的

没注册除了geterror,其他都可以用,注册参数传入后会计算一下,你传入const类型试下,不行的话我把新加的那两句删了
olly
发表于 2009-11-23 08:53:35 | 显示全部楼层

回复 408楼 银砾石 的帖子

加了,,同样注册失败~~
银砾石
 楼主| 发表于 2009-11-23 09:22:30 | 显示全部楼层
发现了,注册的时候访问了后面的空间,已修改---可以不用管它,不影响功能的
angel13th
发表于 2009-11-23 11:38:44 | 显示全部楼层
这个玩艺越来越弄不懂了。。。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-2-5 05:10 , Processed in 0.087797 second(s), 14 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表