win9x/nt下不支持int13。
好象可以通过int21 的7503号功能来完成读写磁盘的工作,可以查一查。

解决方案 »

  1.   

    to:BigBen(江南草) 
       int21的7503號功能我查不到,怎麼實現的可以給一個例子嗎???
       我的EMail:[email protected] 先謝過了!
      

  2.   

    修改注册表,留下安装的次数,每次安装都检查,或者弄一个什么文件,安装的时候察看一下,如果没有,就说明这是第一次安装,都过已经有了,说明安装过了,这样的文件,名字奇怪一点,可以弄成什么.dll弄到系统文件夹中,然后每次开机的时候都让User32.dll加载,让User32.dll加载的方法是改注册表,这是个标准的方法,不会引起其他人的注意。这个Dll加载了,就会禁止删除,或者着注册一个服务,当然这也不让一般的用户注意。
      

  3.   

    To: BlueTrees(蜗牛) 
      你講到的…让User32.dll加载,让User32.dll加载的方法是改注册表…怎麼做?能具體一點嗎?如果可以的話我想知道INT13在delphi怎麼實現!
      

  4.   

    asm
      ...
      你的汇编代码
      ...
    end;
      

  5.   

    TO: fenzi_123(Fenzi) 
      注冊表太不全安!可以備份注冊表!也可用工具監視!
    TO: fenzi_123(Fenzi) 
      INT13中斷不能真接調用!help me!
    help me!
    help me!
      

  6.   

    1、nt下可以用createfile来操作磁盘读写,指定文件名为'\\.\x:'就可以了。.
    2、win9x下读写磁盘,需要通过dos功能调用,int13/25/26都可以,但都有局限---不支持fat32(int13好象只对软盘有效),在win9x下新加了int21的7305h号调用,支持fat/12/16/32格式的磁盘的读写。
    在win32中调用dos功能,需要通过vwin32.vxd(即先createfile得到此vxd的handle),使用deviceiocontrol向vwin32.vxd发控制码,deviceiocontrol的第三和第五个参数就是寄存器的设定。
    int21的7305h的约定如下:
    ax:7305h;
    bx:指向一diskio结构;
    cx:-1;
    dl:驱动器号,1=a,3=c;
    si:bit0=0为读,=1时为写,bit13到15另有意义。diskio结构:
    struct ds
     dwStartSector dd;
     wSectorCount dw;
     lpBuffer dd;
    endsdeviceiocontrol的第一个参数设为vwin32_dioc_dos_driveinfo,具体的可查msdn。对于你的第二个问题,我想,你是想在硬盘的特定地方(比如某些扇区的内零头里)写入你的标记,这是可行的,然后在程序中检测或更新此设定就可了。
      

  7.   

    TO: BigBen(江南草)
     能給出具體的例子嗎!比如以下的代碼中win9x\winnt下怎麼實現!
     以下代碼主要是寫c盤的0,0,1扇区! 
     我是想在0,0,2扇区寫入標志!因為0,0,2扇区是備用的!
    代碼在後面!
      

  8.   

    data segment
     d db 800 dup(0)
     a db 'yours disk ends!$'
     b db 'yours disk ok!$'
     c db 'sorry!$'
    data ends
    code segment
    assume cs:code,es:data,ds:data
    org 100h
    start:
      mov ax,data
      mov es,ax
      mov ds,ax
      mov ax,0201h
      mov bx,offset d
      mov cx,0001h
      mov dx,0180h
      int 13h
      cmp ah,0
      jnz k
      mov si,01feh
      mov bp,0aa55h
      xor es:[si],bp
      mov ax,0301h
      mov bx,offset d
      mov cx,0001h
      mov dx,0180h
      int 13h
      k: 
      mov dx,offset c
      cmp ah,0
      jnz kkk
      cmp es:[si],bp
      jz kk
      mov dx,offset a
      jmp kkk
      kk:
      mov dx,offset b
      kkk:
      mov ah,09h
      int 21h
      mov ax,4c00h
      int 21h
      CODE ENDS
      END START
      

  9.   

    混合使用汇编的时候能用OUT和IN语句吗?
      

  10.   

    混合使用汇编的时候,在98下能用OUT和IN语句,在nt下不可以用OUT和IN语句!
      

  11.   

    DeviceIOControl(hvxd,vwin32_dioc_dos_driveinfo,inregs,nCntIn,outregs,nCntOut);hvxd用createfile创建vwin32.vxd得到。
    vwin32_dioc_dos_driveinfo 定义为6,
    inregs/outregs输入输出的寄存器组,只要填输入的inregs,按int21的7305h约定填就行了。具体的可查呀我有汇编的源码,但懒得找了。msdn上也有c的。
      

  12.   

    TO: BigBen(江南草)
      網上有沒有更詳細一個資料?
      汇编的源码就不要了!在汇编下我也可以實現!隻是windows不
      能直接訪問硬件!
      

  13.   

    你要做硬盘保护对吧!但路走错了。在RING3级上是不可能实现的!
      

  14.   

    TO: smhpnuaa(农奴翻身感谢党)
     ring 3 to ring 0 我有匯編的程序!不過隻能在win9x下!
     請教一下ring 3 to ring 0後應該怎麼做啊???