intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Tự viết chương trình vô hiệu hoá ổ đĩa mềm bằng C

Chia sẻ: Vietnam 9h | Ngày: | Loại File: DOC | Số trang:4

89
lượt xem
6
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Chương trình này không bao giờ biên dịch trong TC Windows.Bạn phải dùng biên dịch TCC trong DOS . (c:\tc tcc nofloppy.c).

Chủ đề:
Lưu

Nội dung Text: Tự viết chương trình vô hiệu hoá ổ đĩa mềm bằng C

  1. Tự viết chương trình vô hiệu hoá ổ đĩa mềm bằng C : trang này đã được đọc  lần  ­ Chú ý: 1.Đừng thay đổi đuôi của chương trình thành .cpp. 2.Chương trình này chỉ chạy trong DOS. 3.Chương trình này không bao giờ biên dịch trong TC Windows.Bạn phải dùng biên dịch TCC trong DOS . (c:\tc> tcc nofloppy.c). 4.Tất cả các file .h;.obj phải để trong thư mục hiện hành. 5.File tasm.exe, tlink.exe cũng phải để trong  thư mục hiện hành. 6.Tốt nhất là copy tất cả các file vào trong thư mục c:>tc. Sau đây là đoạn code: #pragma inline /* dodn't remove this line */ #include "dos.h" #include "stdio.h" #include "conio.h" #define SUCCESS 0XC0FF #define FAILURE 0XC000 union REGS i,o; void interrupt (*old)(); struct INTERRUPT     {      unsigned bp,di,si,ds,es,dx,cx,bx,ax,ip,cs,fl; }; void interrupt disk (struct INTERRUPT); int tsrc; unsigned our_psp; void interrupt our_1c(); void interrupt (*prev_1c)(); void interrupt our_2f(struct INTERRUPT); void interrupt (*prev_2f)(); main(int argc,char *argv[])     {     int far *ebptr;     strupr(argv[1]);     tsrc=strcmp(argv[1],"UNLOAD");
  2.     if(tsrc!=0)          {         i.x.ax=0xc000;         int86(0x2f,&i,&o);         if(o.x.ax!=SUCCESS)              {             our_psp=getpsp();             res();             ebptr=MK_FP(our_psp,0x2c);             freemem(*ebptr);             printf("\Nofloppy v(1.0) Installed Successfully....\n");             keep(0,2500);             /* if u want to use automatic memory allocation use next line*/             /*keep(0,(_SS+(_SP/16)­_psp));*/              }             printf("\nfor unloading nofloppy use ­> nofloppy unload \n");             printf("\n Nofloppy v(1.0) already Loaded.....");         }         else              {             i.x.ax=0xc000;             int86(0x2f,&i,&o);             if(o.x.ax==SUCCESS)                 {                 i.x.ax=0xc001;                 int86(0x2f,&i,&o);                 if(o.x.ax==FAILURE)                 printf("\nCannot uninstall Nofloppy v(1.0),another program on top\n");                 else                 printf("\nNofloppy ver(1.0) Uninstalled");             }             else             printf("\nNofloppy ver(1.0) NOT IN MEMORY");         }         return 0;     }     res()         {         prev_1c=getvect(0x1c);         setvect(0x1c,our_1c);         prev_2f=getvect(0x2f);
  3.         setvect(0x2f,our_2f);         old=getvect(0x13);         setvect(0x13,disk);         return 0;     }     void interrupt disk(struct INTERRUPT r)         {          if (_DL==0 || _DL==1)              {              asm clc;              asm pushf              asm pop r.fl              return;              }             _ES=r.es;             _DX=r.dx;             _CX=r.cx;             _BX=r.bx;             _AX=r.ax;             (*old)();             asm pushf             asm pop r.fl;             r.ax=_AX;             r.bx=_BX;             r.cx=_CX;             r.dx=_DX;             r.es=_ES;         }         void interrupt our_1c()             {             (*prev_1c)();         }         void interrupt our_2f(struct INTERRUPT r)             {             if(r.ax==0xc000)                 {                 r.ax=SUCCESS;                 return;             }             if(r.ax==0xc001)                 {
  4.                 r.ax=uninstall();                 return;             }             asm pop bp             asm pop di             asm pop si             asm pop ds             asm pop es             asm pop dx             asm pop cx             asm pop bx             asm pop ax             asm jmp cs:_prev_2f;         }         int uninstall()             {             if(our_1c==getvect(0x1c) && our_2f==getvect(0x2f)&&disk==getvect(0x13))                 {                 setvect(0x1c,prev_1c);                 setvect(0x2f,prev_2f);                 setvect(0x13,old);                 freemem(our_psp);                 return(SUCCESS);             }             else             return(FAILURE);         }
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2