小弟想写一个制作启动盘的程序,请教大家,先谢谢

解决方案 »

  1.   

    简单:)对磁盘物理读写就可以了
    方法:预先做好启动盘的映象
    打开磁盘,写入映象,就这样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下或以上才有用的
      

  2.   

    function RawOpenDrive(DriveParam: string): TRawDrive;
    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了
      

  3.   

    虽然注解是乱吗
    我用English系统的原因:)
    都可以用的type
      TRawDrive = record
        DiskGeometry: TDiskGeometry;
        Handle: THandle;
      end;另外需要JEDI的Win32API支持库!
      

  4.   

    非常感谢 ly_liuyang(Liu Yang) 的回答,只是本人要的并非是一个通过映象到软盘的启动盘也就是说我要的是一个从无到有的一个启动盘制作,这个方法甚至可以让我们去开发一个计算机启动,这个启动未必是现有操作系统的一种,(或者说用于启动一个你自已设计的操作系统)
      

  5.   

    开发一个计算机启动程序?
    难了,这样的问题去ASM区都不一定能获得你要的结果就算是现在,写一个类似于DOS的东西都是非常难的事情呀
      

  6.   

    看看这里,这里有你想要的东西。
    http://www.fixdown.com/article/article/759.htm