程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 怎樣用VC限制軟件的試用次數

怎樣用VC限制軟件的試用次數

編輯:vc教程

軟件試用次數的限制有很多種方法,其關鍵是把次數這個值存儲在哪 裡。這裡介紹一種方法,通過改變文件 的時間來存儲試用次數,從而限制軟 件的試用。

一、通過改變文件時間來限制軟件的試用次數

在MS-DOS中,文件的時間是 通過一個16位的值來保存的,位 15~11用來保存小時數,位10~5用 來保存分鐘數,位4~0用來保存秒鐘 數。這個16位的值正好可以被我們用 來保存試用次數。例如,在下面的示例 程序中,筆者就使用了保存分鐘數的 位來保存試用次數。運行一下示例程 序,我們可以看到,只是文件時間的分 鐘數加了1,一般人很難察覺,這種方 法有比較好的隱蔽性。

二、示例程序中所涉及的中斷

1.中斷21H的功能3DH

用途:打開文件用於讀。寫或補 充。
調用寄存器:AH=3DH,AL=00H,DS:DX=文件名;
返回寄存器:CF 復位--成功,AX=文件把柄。
CF 置位--出錯,AX=錯誤代碼。

2.中斷21H的功能3EH

用途:強迫清除所有緩沖區,更新目錄,使文件把 柄無效。
調用寄存器:AH=3EH,BX=文件把柄;
返回寄存器:CF 復位--成功,AX被破壞,
CF 置位--出錯,AX=錯誤代碼。

3.中斷21H的功能57H、子功能00H

用途:讀出文件被最後修改的日期和時間。
調用寄存器:AX=5700H,BX=文件把柄;
返回寄存器:CF 復位--成功,CX=文件時間, DX=文件日期,
CF 置位--出錯,AX=錯誤代碼。

4.中斷21H的功能57H、子功能01H

用途:將文件最後被修改過的日期和時間信息變 成指定值。
調用寄存器:AX=5701H,BX=文件把柄,CX= 新時間,DX=新日期;
返回寄存器:CF 復位--成功,
CF 置位--出錯,AX=錯誤代碼。

三、示例程序
#include 
#include 
#include 
int count( )
{
union REGS inregs,outregs;
strut SREGS segs;
unsigned handle;
unsigned times;
/ * 打開文件 * /
inregs.h.ah =0x3d;
inregs.h.al =0;
scgread(& segs);
inregs.x.dx ="test.exe";
intDOSx(& inregs, & outregs, & segs);
if(outregs.x.cflag) return(0);
else
{
/ * 讀取文件日期時間 * /
handle = Outregs.x.ax;
inregs.x.ax = 0x5700;
inregs.x.bx = handle;
intDOSx(& inregs, & outregs, &segs);
times = (outregs.x.cx &0x7e0)> > 5;
if(times <40)/ * 試用次數可以通過改變此處的'40'來實現 * /
{
inregs.x.ax = 0x5701;
inregs.x.bx = handle;
inregs.x.cx = outregs.x.cx + 0x20; / * 試用次數計數 * /
inregs.x.dx = outregs.x.dx;
intDOSx(& inregs, & outregs, & segs); / * 重置日期時間 * /
return(2);
}
else return(1);
/ * 關閉文件 * /
inregs.h.ah = 0x3e;
inregs.x.bx = handle;
intDOSx(& inregs, & outregs, & segs);
}
}
main()
{
int flag;
flag = count();
if(flag==0) printf("此軟件為試用版,請勿任意修改! n");
if(flag==1) printf("此軟件為試用版,您的試用次數已滿! ");
if(flag==2) printf("此軟件為試用版,歡迎試用! ");

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved