读磁片磁区

2016-02-19 15:06 0 1 收藏

下面是个简单易学的读磁片磁区教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

【 tulaoshi.com - 编程语言 】

  一、以前的dos版要读、写、格式化第0轨的第1个磁区,程式大致如下:

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  

char buffer[512];
reg.x.dx=0 ;  /* for drive a *
reg.x.cx=0x0001 /* for boot sector */
reg.x.bx=fp_off(buffer);
sreg.es=fp_seg(buffer);
resg.x.ax=0x0201;  /* 02 for read, 03 for write ,05 for format */
int86x(0x13,&reg,&reg,&sreg);

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  那麽在windows 下转换为呼叫 deviceiocontrol 以便格式化、读取、写入该磁轨,dioc_registers 这struct 在套上 dos 下 int21对hdd或fdd 的各项参数如要格式化是int21也是有, 但windows下也另有提供。

#pragma pack(push, 1)
struct dioc_registers {
   dword reg_ebx;
   dword reg_edx;
   dword reg_ecx;
   dword reg_eax;
   dword reg_edi;
   dword reg_esi;
   dword reg_flags;
};
#pragma pack(pop)
sdiskimageinfo-hdevice = ::createfile(".vwin32", 0, 0, null, 0, file_flag_delete_on_close, null);
if( sdiskimageinfo-hdevice == invalid_handle_value)
  brunnext = false;
// reset floppy disk
  reg.reg_ebx = 0;
  reg.reg_eax = 0x0000;    // ioctl for block devices
  reg.reg_edx = sdiskimageinfo-driver;
  reg.reg_edi = 0; reg.reg_esi= 0;
  reg.reg_flags = 0x0001;   // assume error (carry flag is set)
  dwresult = ::deviceiocontrol( sdiskimageinfo-hdevice, vwin32_dioc_dos_int13, &reg, sizeof(dioc_registers), &reg,
sizeof(dioc_registers), &cb, 0);
// seek floppy
    reg.reg_ebx = 0;
    reg.reg_eax = 0x0c00;    // ioctl for block devices
    reg.reg_ecx = ( sdiskimageinfo-nc 8) | sdiskimageinfo-ns;
    reg.reg_edx = ( sdiskimageinfo-nh 8) | sdiskimageinfo-driver;
    reg.reg_edi = 0;
reg.reg_esi= 0;
    reg.reg_flags = 0x0001;   // assume error (carry flag is set)
    dwresult = ::deviceiocontrol( sdiskimageinfo-hdevice,
vwin32_dioc_dos_int13,
                   &reg, sizeof(dioc_registers), &reg,
sizeof(dioc_registers), &cb, 0);
// read floppy
r_creatediskimagefile:
    reg.reg_ebx = 0;
    reg.reg_eax = 0x0200 | 0x01;    // ioctl for block devices
    reg.reg_ecx = ( sdiskimageinfo-nc 8) | sdiskimageinfo-ns;
    reg.reg_edx = ( sdiskimageinfo-nh 8) | sdiskimageinfo-driver;
    reg.reg_ebx = (dword) &m_buf;
    reg.reg_edi = 0;
reg.reg_esi= 0;
    reg.reg_flags = 0x0001;   // assume error (carry flag is set)
    dwresult = ::deviceiocontrol( hdevice, vwin32_dioc_dos_int13,
                   &reg, sizeof(dioc_registers), &reg,
sizeof(dioc_registers), &cb, 0);
    if (!dwresult || (reg.reg_flags & 0x0001))
    {
}

来源:https://www.tulaoshi.com/n/20160219/1608876.html

延伸阅读
Skype怎么设置已读消息为未读   无意间查看好友手机不小心把TA的消息查看了?肯定都不想别人知道自己查看的TA的消息吧,小伙伴们可以把已读消息标为未读哦,那么怎么设置呢?现在图老师小编就来教大家Skype设置已读消息为未读教程。 1)打开Skype,点击打开要标为未读的消息,然后点击右上角的;(如下图) 2)点击即可...
快读怎么卸载?   法一、快读小说阅读器默认是安装在C盘的,如果大家选择卸载这款应用,可以从开始菜单进行卸载。 法二、我们也可以从软件管家内选择卸载该阅读器; 出现如下界面,点击是,程序会自动进行卸载操作,完成之后,重启电脑,然后再手动将文件夹进行删除即可完全卸载,C盘文件夹安装路径如下图:
  进来忙得不得了,这时才体会出工作和在学校真的不同.有时候自己想做的事,很难如愿.不过我这一段时间没有太偷懒.对于linux 的386 保护模式,内存管理,作了一个初步的学习.当初学习操作系统课时老觉得理论没用. 如今,真的时间了,才知道理论知识是多么的缺乏.也许是书到用时方恨少 闲话少说 目前,linux 被移植到了各种机器上.如apple 等....
畅读如何关注杂志   1)首先把畅读打开,进去之后点击,然后选择自己喜欢的杂志点击就可以了。           注 :更多精彩教程请关注图老师手机教程栏目,图老师手机数码群:296605639欢迎你的加入
  这几天看的东西,前辈有书指导,不用我费口舌, 简单介绍一下 搞清楚了 linux的启动过程,对于整个系统分析来说.连一个开头都不算.所做的只是知道了系统启动是一些函数的条用顺序.恰如某位朋友来信建议的那样, 如果这样照顺序硬读,实是自残.好在sunmoon 有一定的自知之明.如此这样下去,等不懂得东西多了.那我就不能坚持了,所以我的原则是?...

经验教程

545

收藏

11

精华推荐

读核日记(四)

读核日记(四)

双子海陆空

儿童点读笔

儿童点读笔

id是瘠薄

Jaz-drive HOWTO -- 4. Jaz 磁片的用法

Jaz-drive HOWTO -- 4. Jaz 磁片的用法

Sun璐shine

微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部