Var
Form1: TForm1;
const
VWin32_DIOC_DOS_Int25 = 2;
VWin32_DIOC_DOS_Int26 = 3;
type
TDevioctl_reg = pack record
Reg_EBX : DWord;
Reg_edx : DWord;
Reg_DCX : DWord;
Reg_EAX : DWord;
Reg_EDI : DWord;
Reg_ESI : DWord;
Reg_Flags : DWord;
end;
type
TDiskIO = pack record
StartSektor;
Anzahlsektoren;
PBuffer;
end;Procedure TForm1.FormButton1Click(Sender: TObject);
Var
x:integer;
Deviohandle:THandle;
BytesReturned:Dword;
Reg: TDevioctl_Reg;
DiskIO: TDiskIO;
DatenBuffer: array[0..511] of Byte;
begin
if(length(Edit1.text) > 35) or (length(Edit1.text)=0) then
begin
showmessage('please enter a new dos stub text of 1 to 35 chars!');
exit;
end;
with disk io do
begin
startsektor := 33;
Anzahlsektoren := 1;
PBuffer := DWord(@DatenBuffer);
end;
with reg do
begin
Reg_EAX := 0;
Reg_EBX := DWord(@DiskIO);
Reg_ECX := $FFFF;//怎么这个代码在win200 server中不认
end;
DevIOHandle := CreateFile('\.' Generic_Read,FileShare_Read or File_share_write,nil,Open_Existring,File_Attribute_Normal,0);
If DevIOHandle <> Invalid_Handle_Value then
begin
DeviceIOControl(DevIOHandle,VWin32_DIOC_DOS_Int25,@Reg,SizeOF(Reg),@Reg,SizeOF(Reg),BytesReturned,nil);
For x := 80 to 80 + Length(Edit1.text) do
begin
DateBuffer[x] := ord(Edit1.text[x-79]);
end;
DeviceIOControl(DevIOHandle,VWin32_DIOC_DOS_Int26@Reg,SizeOF(Reg),@Reg,SizeOF(Reg),BytesReturned,nil);
CloseHandle(DevIOHandle);
end;
end;Procedure TForm1.FormCreate(Sender : TObject);
var
x : Byte;
begin
form1.caption := '';
For x := 80 to 115 do
begin
Form1.caption := Form1.caption + char(Pointer(Ainstance+x)^);
end;
end;
end.
__________________________________________________________________________
这段代码也是我在别的地方抄下来的,原文(环境:WIN98,D5)EXE文件在软盘上运行
但是我拿过来却没有它说的效果啊
运行以后窗体上的Form1.Edit1.Text应该可以修改的
是通过直接修改磁盘的方法做的,但是没有效果,大家改改
end;
end;
Form1: TForm1;
const
VWin32_DIOC_DOS_Int25 = 2;
VWin32_DIOC_DOS_Int26 = 3;
type
TDevioctl_reg = pack record
Reg_EBX : DWord;
Reg_edx : DWord;
Reg_DCX : DWord;
Reg_EAX : DWord;
Reg_EDI : DWord;
Reg_ESI : DWord;
Reg_Flags : DWord;
end;
type
TDiskIO = pack record
StartSektor;
Anzahlsektoren;
PBuffer;
end;Procedure TForm1.FormButton1Click(Sender: TObject);
Var
x:integer;
Deviohandle:THandle;
BytesReturned:Dword;
Reg: TDevioctl_Reg;
DiskIO: TDiskIO;
DatenBuffer: array[0..511] of Byte;
begin
if(length(Edit1.text) > 35) or (length(Edit1.text)=0) then
begin
showmessage('please enter a new dos stub text of 1 to 35 chars!');
exit;
end;
with disk io do
begin
startsektor := 33;
Anzahlsektoren := 1;
PBuffer := DWord(@DatenBuffer);
end;
with reg do
begin
Reg_EAX := 0;
Reg_EBX := DWord(@DiskIO);
Reg_ECX := $FFFF;//怎么这个代码在win200 server中不认
end;
DevIOHandle := CreateFile('\.' Generic_Read,FileShare_Read or File_share_write,nil,Open_Existring,File_Attribute_Normal,0);
If DevIOHandle <> Invalid_Handle_Value then
begin
DeviceIOControl(DevIOHandle,VWin32_DIOC_DOS_Int25,@Reg,SizeOF(Reg),@Reg,SizeOF(Reg),BytesReturned,nil);
For x := 80 to 80 + Length(Edit1.text) do
begin
DateBuffer[x] := ord(Edit1.text[x-79]);
end;
DeviceIOControl(DevIOHandle,VWin32_DIOC_DOS_Int26@Reg,SizeOF(Reg),@Reg,SizeOF(Reg),BytesReturned,nil);
CloseHandle(DevIOHandle);
end;
end;Procedure TForm1.FormCreate(Sender : TObject);
var
x : Byte;
begin
form1.caption := '';
For x := 80 to 115 do
begin
Form1.caption := Form1.caption + char(Pointer(Ainstance+x)^);
end;
end;
end.
__________________________________________________________________________
这段代码也是我在别的地方抄下来的,原文(环境:WIN98,D5)EXE文件在软盘上运行
但是我拿过来却没有它说的效果啊
运行以后窗体上的Form1.Edit1.Text应该可以修改的
是通过直接修改磁盘的方法做的,但是没有效果,大家改改
end;
end;
这个变量在那定义的?Reg_edx : DWord;
Reg_DCX : DWord;//会不会是这个变量你写错了? 寄存器里 ECX有,DCX是什么?