在DOS下用汇编可以写,但在VB中不清楚。
movax,301    表示对磁盘写
movbx,[XXX]  数据内容存放地址
moves,bx     地址应放在ES寄存器
movbx,0      而ES寄存器不能直接赋值,所以用BX做传递
movcx,[XXX]  写几个扇区
movdx,80     对第一个硬盘写
int 13       调用中断

解决方案 »

  1.   

    有3个地方可以:
    1、磁盘的BOOT区;
    2、2个磁道的中间,王江民知道怎么做,KV3000就是用这种方法加密的;
    3、主板的FLASHROM,既BIOS里面,可以参考CIH病毒源代码。
      

  2.   

    哦,找到一个这方面的文章,能不能写入分区,你试试看,你不是想做病毒吧,分区里面可不要随便乱写:VB6编程中如何获取硬盘分区信息 
       也许你并不了解硬盘分区信息应该包括些什么,但如果你曾经对硬盘分过区,你或许对此有所了解,在此为各位介绍一个用VB编写的获取硬盘分区信息的程序。在这个程序中,它将详细地告诉你:你的硬盘总容量、分过几个区、每个区的总容量、及现在剩余的可用容量、硬盘分区表为几位(即是FAT32还是FAT16),每个分区是几个字节……怎么样?够完整详细了吧!好的,就让我们一起来看一下吧:
      首先做准备工作:在FORM1上新建二个LABEL(LABEL1和LABEL2)一个COMMAND1命令按钮。然后输入以下代码:
      Private Declare Function GetDriveType Lib 
      kernel32“Alias "GetDriveTypeA(ByVal nDrive As String) As Long
      Private Declare Function GetDiskFreeSpace Lib“kernel32" Alias“GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTtoalNumberOfClusters As Long) As Long
      Private Const DRIVE_FIXED = 3
      Private Sub Form_Load() '作初始化设置
      COMMAND1.Caption = “测试硬盘"
      Form1.Caption = “测试硬盘程序"
      Label1.WordWrap = True
      Label1.Caption = “"
      Label2.WordWrap = True
      Label2.Caption = “"
      End Sub
      Private Sub COMMAND1_Click()
      Dim DriveNum As Integer
      Dim TempDrive As String
      Dim X As Long
      For DriveNum = 97 To 122 Step 1 '检测从A-Z(盘符)
      TempDrive = GetDriveType(Chr(DriveNum) & “:\")
      Select Case TempDrive '如是3则表示是硬盘,测试你有几个盘
      Case 3: X = GetDiskSpace(Chr(DriveNum)) '调用子程序
      End Select
      Next DriveNum
      End Sub
      Public Function GetDiskSpace(DrivePath As String)
      Dim Drive As String
      Dim SectorsPerCluster As Long
      Dim BytesPerSector As Long
      Dim NumberOfFreeClusters As Long
      Dim TotalClusters As Long
      Dim Check As Integer
      Dim DiskSpace
      Dim diskTotal
      Static AllDiskTotal As Long
      Static NUM As Integer
      NUM = NUM + 1 '分几个区的计算
      Drive = Left(Trim(DrivePath), 1) & “:\"
      Check = GetDiskFreeSpace(Drive, SectorsPerCluster, BytesPerSector, NumberOfFreeClusters, TotalClusters)
      If Check <> 0 Then
      DiskSpace = SectorsPerCluster * BytesPerSector * NumberOfFreeClusters
      '这是一个分区磁盘剩余空间的计算公式
      DiskSpace = Format$(DiskSpace, “###,###") '以规定格式显示,如732,324,231
      diskTotal = SectorsPerCluster * BytesPerSector * TotalClusters
      '这是一个分区磁盘总容量的计算公式
      diskTotal = Format$(diskTotal, “###,###")
      AllDiskTotal = AllDiskTotal + diskTotal '整个硬盘的总容量
      Label1.Caption =“你的硬盘总容量为:” & Format$(AllDiskTotal,“###,###") &个字节,即:” & Left(AllDiskTotal, 1) & . & Mid(AllDiskTotal, 2, 1) &“G,一共分了”& NUM &“个区,其中:"
       Label2.Caption = Label2.Caption & UCase(DrivePath) & “盘的整个容量为:" & diskTotal &“个字节" & ",其剩余磁盘空间为:“& DiskSpace & " 个字节,磁盘已FAT“& SectorsPerCluster & ",每个分区为:“& BytesPerSector & "个字节。“& vbCrLf & vbCrLf”
      End If
      End Function
      注:以上程序在中文WINDOWS98,中文VB6.0企业版中调试通过。
      

  3.   

    如何用vb取得磁盘出厂序列号?好难啊,我都企盼了快1年了,crystal2000说的是出厂序列号吗?用vb?
      

  4.   

    高级格式化不掉的地方是mbr和bios,但是没有用的,用fdisk/mbr 和 cmos清零可以破坏你写的信息,用kv3000可以轻易恢复这些如mbr等所谓隐蔽的地方。有一种方法是制造逻辑坏块,可以试试,我在dos下用过汇编处理。
      

  5.   

    写个dll吧,在vb里条用。用vb实现很底层的东东很难
      

  6.   

    只能写个dll?我知道C中有个函数可以解决写磁道的函数,API中有没有类似的啊?
      

  7.   

    好象API里有这样的函数,具体我记不清了,要查下才行。。