楼主: 银砾石
收起左侧

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

  [复制链接]
250662772
发表于 2009-9-28 18:11:32 | 显示全部楼层
老大终于更新了
银砾石
 楼主| 发表于 2009-9-28 18:45:22 | 显示全部楼层
原帖由 Ice-card 于 2009-9-28 18:09 发表



注册什么?


并不是真的需要注册,不过是需要调用这样一个功能,当是个人印记。
olly
发表于 2009-9-28 19:05:32 | 显示全部楼层
墙裂支持!!!!
穿越星空
发表于 2009-9-28 19:11:16 | 显示全部楼层
  只用NTFS。
olly
发表于 2009-9-28 19:32:44 | 显示全部楼层
貌似现在还只有枚举啊~~
angel13th
发表于 2009-9-28 20:32:04 | 显示全部楼层
看到更新很兴奋。。。不过NTFS分区,就纯顶了。。。
Ice-card
发表于 2009-9-28 21:38:30 | 显示全部楼层
原帖由 银砾石 于 2009-9-28 18:45 发表


并不是真的需要注册,不过是需要调用这样一个功能,当是个人印记。



原来是这样
olly
发表于 2009-9-28 22:31:01 | 显示全部楼层
为什么我的调用会出错


  1. typedef BYTE * (* FSREAD)(LARGE_INTEGER base,DWORD size) ;
  2. typedef bool (* FSWRITE)(LARGE_INTEGER base,DWORD size,BYTE * mem) ;
  3. typedef bool ( * FS_PRE_READ)(FSREAD FSIO_READ);
  4. typedef bool ( * FS_PRE_WRITE)(FSWRITE FSIO_WRITE);
  5. typedef FS_FAT *  (* FS_ENUMFILE)(wchar_t * path,void * node);
  6. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  7. hDev = ::CreateFile(this->m_patch.Left(6),
  8.   GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
  9. if (hDev == INVALID_HANDLE_VALUE)
  10.   MessageBox(this->m_patch.Left(6));
  11. HINSTANCE DLLInst = NULL;
  12. FS_ENUMFILE  FileEnum;
  13. FS_PRE_READ  FileRreRead;
  14. if(NULL == DLLInst) DLLInst = LoadLibrary(_T("FS.dll"));
  15. if (DLLInst) {
  16.   FileEnum = (FS_ENUMFILE) ::GetProcAddress(DLLInst, "FS_ENUMFILE");
  17.   FileRreRead = (FS_PRE_READ) ::GetProcAddress(DLLInst, "FS_PRE_READ");
  18. }
  19.     FileRreRead(FileEnumPre);//初始化
  20. CString a,b,all;
  21. void * node = NULL;
  22. //MessageBox((this->m_patch.Mid(4, this->m_patch.GetLength() - 5)).AllocSysString());
  23. FileEnum((this->m_patch.Mid(4, this->m_patch.GetLength() - 5)).AllocSysString(), node);
  24. FS_FAT * fp=(FS_FAT *)node;
  25. while(fp!=NULL)
  26. {
  27.   InsertItem(fp->longname, hSel, TVI_LAST);
  28.   fp=fp->next;
  29. }

  30. 其中
  31. / 由FS_PRE_READ调用来获取信息
  32. BYTE * FileEnumPre(LARGE_INTEGER a, DWORD b)
  33. {
  34. BYTE * buffer=new BYTE[b];
  35. if (hDev!=INVALID_HANDLE_VALUE)
  36. {
  37.   DWORD dwRet;
  38.   ::SetFilePointer(hDev,a.LowPart,&a.HighPart,FILE_BEGIN);
  39.   ::ReadFile(hDev,buffer,b,&dwRet,0);
  40. }
  41. else
  42. {
  43. }
  44. return buffer;
  45. }

复制代码


FileEnum((this->m_patch.Mid(4, this->m_patch.GetLength() - 5)).AllocSysString(), node);这一行提示堆破坏~~
银砾石
 楼主| 发表于 2009-9-29 08:53:25 | 显示全部楼层
待会空的时候我看下VC调用

Q2:BSTR与wchar_t    *的区别?   

A2:    wchar_t*    只是一个简单的指针    跟int*    ,char*    一样   
           BSTR    所指向的内存地址相当于一个wchar_t*,但BSTR往后退4Bytes(在内存中)的   
         地址中所存的一个DWORD值表示它的长度。   
         
         例如:   
           BSTR    bstrT    =    ::SysAllocString(L"....");//(内存地址)0x00001000;   
           LPDWORD    lpdwLen    =    (LPBYTE)bstrT    -    4;    //(相当于0x0000FFC)   
           ASSERT(*lpdwLen    ==    ::SysStringLen(bstrT));
a22124497
发表于 2009-9-29 09:33:27 | 显示全部楼层
顶一下呀火流星还是很好用的
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-12-27 11:09 , Processed in 0.105802 second(s), 14 queries .

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

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