用什么方法可以修改软盘零磁道的前五个字节的数据?
我用尽了方法也只能使用DISKEDITER将零磁道的数据读出来,但是怎么都修改不了。我该怎么做?请各位大哥指教。
我用尽了方法也只能使用DISKEDITER将零磁道的数据读出来,但是怎么都修改不了。我该怎么做?请各位大哥指教。
解决方案 »
- 装windows7后报错‘Error Creating system registry entry'
- List index out of bounds
- (你也来说说吧) 如何减小Delphi 2010 编写应用程序体积.
- 买书散分
- 串口接受数据,如何在界面上显示出来??????
- 如何将文字信息转换成图片
- ADOQuery的数据从链接服务器上取过来的,更新时提示缺少用于更新或刷新的基本表信息
- 再问资源释放问题?
- BATCHUPDATE 问题
- 有个超小的问题?
- 在三层中怎样实现实时刷新?(就是说在一个客户端修改了数据,在其他客户端不需要用户按刷新按钮对应的DBGRID就自动刷新了。)这种功能有
- 如何在Delphi中使用正则表达式?(三天结帖)
assume cs:code ;all other registers will be destroyed
public getsecgetsec: push bp ;save old frame pointer
mov bp,sp ;get new frame pointer
mov ax,4[bp] ;put drive number into AL
xor ah,ah
mov cx,6[bp] ;number of sectors to fetch
mov dx,8[bp] ;logical record number of 1st sector
mov bx,10[bp] ;pointer to transfer address
int 25h ;BIOS call
jc error ;error has occurred if carry flag = 1
mov al,00H ;NULL to indicate sucessful completion
jmp done
error: cmp al,00H ;detect unspecified error code 00H
jne done ;...change to 0FFh if found to
mov al,0FFH ;...differentiate it from success code
done: xor ah,ah ;return AL only
popf ;remove flags int 0x25 left on stack
pop bp ;restore original frame pointer
ret ;all donecode ends
end哈哈,上面的代码可以读写扇区,你自己想吧,写磁道需要怎么修改?
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;type INT13Regs = record
buffer:pointer;//EBX寄存器
Drive:BYTE;//磁盘号,dl
Head:BYTE;//刺头号,dh
EDX_Hight:WORD;//EDX寄存器
Sector:BYTE;//起始扇区号,cl
Track:BYTE;//磁道号,ch
ECX_Hight:WORD;//ECX寄存器
Number:BYTE;//要读写的扇区数,al
CMD:BYTE;//命令:2—读,3—写,5—格式化,ah
EAX_Hight:WORD;//EAX寄存器
EDI:DWORD;//EDI寄存器
ESI:DWORD;//ESI寄存器
Flags:DWORD;//Flags
end;
TVWin32CtlCode = (ccNone,ccVWin32Intloctl,ccVWin32Int26,ccVWin32Int25,ccVWin32Int13);type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
edit1: TEdit;
RichEdit1: TRichEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Button5: TButton;
Label3: TLabel;
Edit4: TEdit;
Button6: TButton;
Edit5: TEdit;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button1Click(Sender: TObject);//98下读取
var hDev:thandle;
Abuffer,LPRET:array[0..511] of char;//定义缓冲区,放置读取扇区数据
int13_registers:INT13Regs;//定义INT13中断的寄存器结构变量
b_int13_registers,AA:boolean;
TCOUNT:DWORD;
i,j:integer;
Tempstr:string;
begin
hDev:=CreateFile('\\.\VWIN32 ',0,0,NIL,0,FILE_FLAG_DELETE_ON_CLOSE,0);
int13_registers.buffer:=@Abuffer;
int13_registers.Drive:=0;//0-软盘A;1—软盘B;0x80-硬盘c
int13_registers.Head:=0;//0面
int13_registers.Track:=0;//0磁到道
int13_registers.Sector:=0;//0扇区
int13_registers.Number:=1;
int13_registers.CMD:=2;//读操作
b_int13_registers:=FALSE;
AA:=DeviceioControl(hDev,ord(ccVWin32Int13),@int13_registers,sizeof(INT13Regs),@int13_registers,sizeof(INT13Regs),TCOUNT,NIL);
CLOSEHANDLE(hDev);
//AA:=b_int13_registers;
for i:=0 to 511do
begin
Edit1.text:=Edit1.text+Abuffer[i];
end;
end;
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button2Click(Sender: TObject);//98下写
var hDev:thandle;
Abuffer,LPRET:array[0..511] of char;//定义缓冲区,放置读取扇区数据
int13_registers:INT13Regs;//定义INT13中断的寄存器结构变量
b_int13_registers,aa:boolean;
TCOUNT:DWORD;
i:integer;
begin
hDev:=CreateFile('\\.\VWIN32 ',0,0,NIL,0,FILE_FLAG_DELETE_ON_CLOSE,0);
for i:=0 to 511 do
begin
Abuffer[i]:='b';
end;
int13_registers.buffer:=@Abuffer;
int13_registers.Drive:=0;//0-软盘A;1—软盘B;0x80-硬盘c
int13_registers.Head:=0;
int13_registers.Track:=0;
int13_registers.Sector:=0;
int13_registers.Number:=1;
int13_registers.CMD:=3;//写入
b_int13_registers:=DeviceioControl(hDev,4,@int13_registers,sizeof(INT13Regs),@int13_registers,
sizeof(INT13Regs),TCOUNT,NIL);
CLOSEHANDLE(hDev);
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button3Click(Sender: TObject);//2000下读
var hDev:Thandle;
dwRet:dword;
RBuffer:array[0..511] of char;
Tempstr:string;
i,j:integer;
tcount:boolean;
dwStartSector:integer;
begin
dwStartSector:=0;//起始位置
hDev:=createfile('\\.\A:',GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
SetFilePointer(hDev,512*dwStartSector,0,FILE_BEGIN);
dwRet:=0;
tcount:=ReadFile(hDev,RBuffer,512,dwRet,0);
for i:=0 to 511 do
begin
Edit1.text=Edit1.text+RBuffer[i];
end;
closehandle(hDev);
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure TForm1.Button4Click(Sender: TObject);//2000下写入
var hDev:Thandle;
dwRet:dword;
RBuffer:array[0..511] of char;
Tempstr:string;
i:integer;
tcount:boolean;
dwStartSector:integer;
begin
dwStartSector:=0;
hDev:=createfile('\\.\A:',GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
SetFilePointer(hDev,512*dwStartSector,0,FILE_BEGIN);
dwRet:=0;
for i:=0 to 511 do
begin
RBuffer[i]:='a';
end;
tcount:=WriteFile(hDev,RBuffer,512,dwRet,0);
closehandle(hDev);
end;