CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何在WIN32应用程序中读写硬盘的扇区。

楼主Hover(翔)2000-03-04 23:02:00 在 VC/MFC / 基础类 提问

问题点数:50、回复次数:3Top

1 楼lu0(lu0.126.com)回复于 2000-03-07 22:41:00 得分 25

THUNK到WIN16,调用INT13.事先需要获取排他硬盘访问.Top

2 楼mainroad()回复于 2000-03-08 23:20:00 得分 25

 
  //用VWIN32接口调用DOS功能25/26(Windows   95)或7305/7306(Windows   OSR2及以上)  
  //如果想直接读写硬盘绝对扇区,由于VWIN32的VWIN32_DIOC_DOS_INT13接口存在Bugs,  
  //只有写一个IO子系统Driver,或者Thunk到Win16,然后直接调用INT13。  
   
           
  #define VWIN32_DIOC_DOS_INT25 2  
  #define   VWIN32_DIOC_DOS_INT26 3  
  #define VWIN32_DIOC_DOS_IOCTL 1  
   
  #define   FAILUE_LOAD_VWIN32 1  
  #define   FAILUE_LOCK_DRIVE 2  
  #define   FAILUE_CALLING 3  
  #define   FAILUE_DIOC                           4  
  #define   FAILUE_LOAD_EXT_DIOC 5  
   
  #ifndef   QWORD  
  #define   QWORD ULONGLONG  
  #endif  
   
  typedef   struct   DIOC_REGISTERS   {  
  DWORD ebx;  
  DWORD edx;  
  DWORD ecx;  
  DWORD eax;  
  DWORD edi;  
  DWORD esi;  
  DWORD eflags;  
  }   DIOC_REGISTERS,   *PDIOC_REGISTERS;  
   
  typedef   struct   DISKIOADDR{      
          DWORD StartSector;       //dd     ?       ;sector   number   to   start  
          WORD Sectors;               //dw     ?       ;number   of   sectors  
          DWORD Buffer;                 //dd     ?       ;address   of   buffer  
  }DISKIOADDR;  
   
  int ExecIoCommand(     WORD   dCode,     DIOC_REGISTERS   *reg   )  
  {  
  HANDLE hVxd;  
  BOOL fResult;  
  DWORD       cb;  
   
  SetLastError(0);  
   
  hVxd   =   CreateFile(   "\\\\.\\vwin32",   0,   0,    
  NULL,   0,   FILE_FLAG_DELETE_ON_CLOSE,   NULL   );  
   
  if(   GetLastError()   ==   ERROR_FILE_NOT_FOUND   )    
  return   FAILUE_LOAD_VWIN32;  
   
   
  fResult   =   ::DeviceIoControl(   hVxd,    
  dCode,  
  reg,   sizeof(   DIOC_REGISTERS   ),  
  reg,   sizeof(   DIOC_REGISTERS   ),  
  &cb,   0   );  
   
  if(   !fResult   )   {  
  cb   =   GetLastError();  
  #ifdef _DEBUG  
  wvsprintf(   (char   *)error,   "Error   code:   %u",   (char   *)&cb   );  
  ::MessageBox(   NULL,   error,   "error",   MB_OK   );  
  #endif  
  fResult   =   FAILUE_DIOC;  
  }  
  else   if(   reg->eflags   &   1   )   fResult   =   FAILUE_CALLING;  
  else   fResult   =   0;  
   
  CloseHandle(   hVxd   );  
  return(   fResult   );  
  }  
   
   
  //用VWIN32的Int25/Int26接口(不支持FAT32,仅适用于Windows95)  
  int     AbsLogRead95(char   drv,   char   *buf,   int   StartSectors,   int   Num   )  
  {  
        DIOC_REGISTERS   r;     //int   25   for   read  
   
        r.eax   =   drv-1;  
        r.ebx   =   (unsigned)buf;  
        r.ecx   =   Num;  
        r.edx   =   StartSectors;  
        return   (ExecIoCommand(   VWIN32_DIOC_DOS_INT25,   &r   )   );  
  }  
   
  //用VWIN32调用DOS的0x7305功能(支持FAT32,仅适用于Windows   OSR   2及以上版本)  
  int     AbsLogRead97(char   drv,   char   *buf,   int   StartSectors,   int   Num)  
  {  
  int   ErrorCode;  
  DIOC_REGISTERS     reg;  
  DISKIOADDR addr;  
  *(   DWORD   *)(   (   BYTE   *   )&addr           )     =   StartSectors;                           //sector   start  
  *(     WORD   *)(   (   BYTE   *   )&addr   +   4   )     =   Num;                                           //sector   number  
  *(   DWORD   *)(   (   BYTE   *   )&addr   +   6   )     =   (unsigned)buf; //buf   size  
  reg.eax =   0x7305;  
  reg.ebx   =   (unsigned)&addr;  
  reg.ecx   =   -1;  
  reg.edx   =   drv;  
  reg.esi   =   0;  
  ErrorCode   =   ExecIoCommand(   6,   &reg   );  
  return   ErrorCode;  
  }  
  Top

3 楼zoucaiming(Zcm)回复于 2001-07-29 12:38:29 得分 0

如何做“只有写一个IO子系统Driver,或者Thunk到Win16,然后直接调用INT13”?有源程序吗?Top

相关问题

  • 如何使编制的应用程序可以查找硬盘里的文件?
  • 急!关于c#win应用程序的问题!
  • Evc4能否开发win ce.net下的应用程序
  • 应用程序
  • 新手上路,问几个简单的win应用程序问题
  • 请问在开发 Win Form 的数据库(Sql Server)应用程序时
  • 请教:在 win ce.net 下作应用程序的开发 所需要的工具
  • 高分悬赏问题,Win应用程序向WEB站点的COOKICE传输
  • 急,所有的硬盘都打不开?点击是说 X盘不是有效的win32应用程序
  • vb.net应用程序!

关键词

  • win32
  • 硬盘
  • 接口
  • null
  • dioc
  • failue
  • vwin
  • startsectors
  • fresult
  • 调用

得分解答快速导航

  • 帖主:Hover
  • lu0
  • mainroad

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo