小弟想写一个制作启动盘的程序,请教大家,先谢谢
解决方案 »
- OCX方法的参数怎么传递呀!
- 怎样覆盖createparams方法?
- 如何单击dbgrideh的表头就能使数据表里的数据按表头字段排序?
- 关于rave报表的问题!请指导一下
- 数据库的容量问题
- 关于用ADO压缩ACCESS数据库出现的问题:如果文件已经存在会出错!请进来看看//准程序员
- 我遇到的一个可能很简单的问题
- 在SQL SERVER 的数据库设计期,可以修改表中某个字段的名称或删除这个字段,如何在程序中做到这一点呢,用什么语句?
- 一个关于用delphi向串口发数据的问题
- 请问Delphi7下的ZIntQRCode控件,怎么打印二维码?谢谢!
- 有关进制转换的问题!急啊!!!
- delphi中如何將DBgrid中的數據顯示到EDIT中
方法:预先做好启动盘的映象
打开磁盘,写入映象,就这样function OpenDisk(DriveParam: string): THandle;
begin
case Length(DriveParam) of
0: Exit;
1: DriveParam := DriveParam + ':';
end;
Result := CreateFile(PChar('\\.\' + DriveParam),
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
0,
0);
end;function RawWriteSectors(const RawDrive: TRawDrive; const Buf; SectorCount: Integer): boolean;
var num: Cardinal;
begin
Result := WriteFile(RawDrive.Handle, Buf, SectorCount * RawDrive.DiskGeometry.BytesPerSector, num, nil);
end;
主要就是这些了,其他的自己写:)注意2000下或以上才有用的
begin
FillChar(Result, SizeOf(TRawDrive), 0); Result.Handle := OpenDisk(DriveParam);
if Result.Handle = INVALID_HANDLE_VALUE then RaiseLastOSError;
if not LockVolume(Result.Handle) then RaiseLastOSError;
Result.DiskGeometry :=GetDiskGeometry(Result.Handle);
end;function GetDiskGeometry(hDisk: THandle): TDiskGeometry;
var dwOutBytes: DWORD;
begin
// ÓÃIOCTL_DISK_GET_DRIVE_GEOMETRYÈ¡´ÅÅ̲ÎÊý
if not DeviceIoControl(hDisk, // É豸¾ä±ú
IOCTL_DISK_GET_DRIVE_GEOMETRY, // È¡´ÅÅ̲ÎÊý
nil, 0, // ²»ÐèÒªÊäÈëÊý¾Ý
@Result, SizeOf(DISK_GEOMETRY), // Êä³öÊý¾Ý»º³åÇø
dwOutBytes, // Êä³öÊý¾Ý³¤¶È
nil) // ÓÃͬ²½I/O
then RaiseLastOSError;
end;OK可以Close了
我用English系统的原因:)
都可以用的type
TRawDrive = record
DiskGeometry: TDiskGeometry;
Handle: THandle;
end;另外需要JEDI的Win32API支持库!
难了,这样的问题去ASM区都不一定能获得你要的结果就算是现在,写一个类似于DOS的东西都是非常难的事情呀
http://www.fixdown.com/article/article/759.htm