⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lc_bcb_68.html

📁 C++Builder教学大全
💻 HTML
字号:


<HTML><HEAD><TITLE>读磁片磁区</TITLE>

<META content="text/html; charset=gb2312" http-equiv=Content-Type>

<META content=zyqsj name=Author>

<META content="Microsoft FrontPage 4.0" name=GENERATOR></HEAD>

<BODY >

<div align="center"><FONT 

size=+2><b>读磁片磁区</b></FONT> </div>

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

<P>char buffer[512]; 

<P>reg.x.dx=0 ;&nbsp;&nbsp; /* for drive A * <BR>reg.x.cx=0x0001&nbsp; /* for 

boot sector */ <BR>reg.x.bx=FP_OFF(buffer); <BR>sreg.es=FP_SEG(buffer); 

<BR>resg.x.ax=0x0201;&nbsp;&nbsp; /*&nbsp; 02 for Read, 03 for Write ,05 for 

Format */ <BR>int86x(0x13,&amp;reg,&amp;reg,&amp;sreg); 

<P>&nbsp;&nbsp;&nbsp; 那麽在windows 下转换为呼叫 DeviceIoControl 

以便格式化、读取、写入该磁轨,DIOC_REGISTERS 这struct 在套上 DOS 下 Int21对HDD或FDD 

的各项参数如要格式化是Int21也是有, 但Windows下也另有提供。 

<P>l#pragma pack(push, 1) <BR>struct DIOC_REGISTERS { <BR>&nbsp;&nbsp;&nbsp; 

DWORD reg_EBX; <BR>&nbsp;&nbsp;&nbsp; DWORD reg_EDX; <BR>&nbsp;&nbsp;&nbsp; 

DWORD reg_ECX; <BR>&nbsp;&nbsp;&nbsp; DWORD reg_EAX; <BR>&nbsp;&nbsp;&nbsp; 

DWORD reg_EDI; <BR>&nbsp;&nbsp;&nbsp; DWORD reg_ESI; <BR>&nbsp;&nbsp;&nbsp; 

DWORD reg_Flags; <BR>}; <BR>#pragma pack(pop) 

<P>&nbsp;sDiskImageInfo-&gt;hDevice = ::CreateFile("\\\\.\\vwin32", 0, 0, NULL, 

0, <BR>FILE_FLAG_DELETE_ON_CLOSE, NULL); <BR>&nbsp;if( 

sDiskImageInfo-&gt;hDevice == INVALID_HANDLE_VALUE) <BR>&nbsp; bRunNext = false; 



<P>// Reset Floppy Disk <BR>&nbsp; reg.reg_EBX = 0; <BR>&nbsp; reg.reg_EAX = 

0x0000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // IOCTL for block devices 

<BR>&nbsp; reg.reg_EDX = sDiskImageInfo-&gt;Driver; <BR>&nbsp; reg.reg_EDI = 0; 

reg.reg_ESI= 0; <BR>&nbsp; reg.reg_Flags = 0x0001;&nbsp;&nbsp;&nbsp;&nbsp; // 

assume error (carry flag is set) <BR>&nbsp; dwResult = ::DeviceIoControl( 

sDiskImageInfo-&gt;hDevice, <BR>VWIN32_DIOC_DOS_INT13, 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

&amp;reg, sizeof(DIOC_REGISTERS), &amp;reg, <BR>sizeof(DIOC_REGISTERS), &amp;cb, 

0); 

<P>// Seek Floppy <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_EBX = 0; 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_EAX = 

0x0C00;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // IOCTL for block devices 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_ECX = ( sDiskImageInfo-&gt;nC 

&lt;&lt; 8) | sDiskImageInfo-&gt;nS; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

reg.reg_EDX = ( sDiskImageInfo-&gt;nH &lt;&lt; 8) | sDiskImageInfo-&gt;Driver; 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_EDI = 0; <BR>reg.reg_ESI= 0; 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_Flags = 

0x0001;&nbsp;&nbsp;&nbsp;&nbsp; // assume error (carry flag is set) 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwResult = ::DeviceIoControl( 

sDiskImageInfo-&gt;hDevice, <BR>VWIN32_DIOC_DOS_INT13, 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

&amp;reg, sizeof(DIOC_REGISTERS), &amp;reg, <BR>sizeof(DIOC_REGISTERS), &amp;cb, 

0); 

<P>// Read Floppy <BR>R_CreateDiskImageFile: <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

reg.reg_EBX = 0; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_EAX = 0x0200 | 

0x01;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // IOCTL for block devices 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_ECX = ( sDiskImageInfo-&gt;nC 

&lt;&lt; 8) | sDiskImageInfo-&gt;nS; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

reg.reg_EDX = ( sDiskImageInfo-&gt;nH &lt;&lt; 8) | sDiskImageInfo-&gt;Driver; 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_EBX = (DWORD) &amp;m_Buf; 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_EDI = 0; <BR>&nbsp;reg.reg_ESI= 0; 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reg.reg_Flags = 

0x0001;&nbsp;&nbsp;&nbsp;&nbsp; // assume error (carry flag is set) 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwResult = ::DeviceIoControl( hDevice, 

VWIN32_DIOC_DOS_INT13, 

<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

&amp;reg, sizeof(DIOC_REGISTERS), &amp;reg, <BR>sizeof(DIOC_REGISTERS), &amp;cb, 

0); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!dwResult || (reg.reg_Flags &amp; 

0x0001)) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <BR>} <BR>&nbsp; 

</P></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -