?? vcc45.htm
字號:
<html>
<head>
<title>c++系列</title>
<meta content="text/html; charset=gb2312" http-equiv=Content-Type>
</head>
<p align="center"><script src="../../1.js"></script></a>
<body bgcolor="#ffffff" leftmargin="5" topmargin="1" marginheight="5" marginwidth="5">
<div align=center>
<table border=0 cellpadding=0 cellspacing=0 width=680 align="center">
<tbody>
<tr>
<td width=200 height="59">
</tr>
</tbody>
</table>
<table border=1 bordercolordark=#ffffff bordercolorlight=#ffffff cellpadding=0
cellspacing=0 width=685 align="center" height="70">
<tbody>
<tr>
<td bgcolor=#ffffff height=10>
<div align=center class=H1> <b> <strong><span class="unnamed1">軟件試用次數的限制</span></strong></span></b></font></div>
</td>
</tr>
<tr valign=top>
<td class=H1 height=212>
<p align="left"> <font color="#FF0000"> <font color="#000000">軟件試用次數的限制有很多種方法,其關鍵是把次數這個值存儲在哪
里。本文介紹一種方法,通過改變文件 的時間來存儲試用次數,從而限制軟 件的試用。 <br>
<strong>一、通過改變文件時間來限制軟件的試用次數 <br>
</strong> 在MS-DOS中,文件的時間是 通過一個16位的值來保存的,位 15~11用來保存小時數,位10~5用
來保存分鐘數,位4~0用來保存秒鐘 數。這個16位的值正好可以被我們用 來保存試用次數。例如,在下面的示例 程序中,筆者就使用了保存分鐘數的
位來保存試用次數。運行一下示例程 序,我們可以看到,只是文件時間的分 鐘數加了1,一般人很難察覺,這種方 法有比較好的隱蔽性。 <br>
<strong>二、示例程序中所涉及的中斷 <br>
</strong>1.中斷21H的功能3DH <br>
用途:打開文件用于讀。寫或補 充。 <br>
調用寄存器:AH=3DH,AL=00H,DS:DX=文件名; <br>
返回寄存器:CF 復位--成功,AX=文件把柄。 <br>
CF 置位--出錯,AX=錯誤代碼。 <br>
2.中斷21H的功能3EH <br>
用途:強迫清除所有緩沖區,更新目錄,使文件把 柄無效。 <br>
調用寄存器:AH=3EH,BX=文件把柄; <br>
返回寄存器:CF 復位--成功,AX被破壞, <br>
CF 置位--出錯,AX=錯誤代碼。 <br>
3.中斷21H的功能57H、子功能00H <br>
用途:讀出文件被最后修改的日期和時間。 <br>
調用寄存器:AX=5700H,BX=文件把柄; <br>
返回寄存器:CF 復位--成功,CX=文件時間, DX=文件日期, <br>
CF 置位--出錯,AX=錯誤代碼。 <br>
4。中斷21H的功能57H、子功能01H <br>
用途:將文件最后被修改過的日期和時間信息變 成指定值。 <br>
調用寄存器:AX=5701H,BX=文件把柄,CX= 新時間,DX=新日期; <br>
返回寄存器:CF 復位--成功, <br>
CF 置位--出錯,AX=錯誤代碼。 <br>
<strong>三、示例程序 <br>
</strong>#include <sidio.h><br>
#include <dos.h><br>
#include <conio.h><br>
int count( )<br>
{<br>
union REGS inregs,outregs;<br>
strut SREGS segs;<br>
unsigned handle;<br>
unsigned times;<br>
/ * 打開文件 * /<br>
inregs.h.ah =0x3d;<br>
inregs.h.al =0;<br>
scgread(& segs);<br>
inregs.x.dx ="test.exe";<br>
intdosx(& inregs, & outregs, & segs);<br>
if(outregs.x.cflag) return(0);<br>
else<br>
{<br>
/ * 讀取文件日期時間 * /<br>
handle = Outregs.x.ax;<br>
inregs.x.ax = 0x5700;<br>
inregs.x.bx = handle;<br>
intdosx(& inregs,
& outregs, &segs);<br>
times = (outregs.x.cx
&0x7e0)> > 5;<br>
if(times <40)/ *
試用次數可以通過改變此處的'40'來實現 * /<br>
{<br>
inregs.x.ax = 0x5701;<br>
inregs.x.bx = handle;<br>
inregs.x.cx = outregs.x.cx + 0x20; / * 試用次數計數 * /<br>
inregs.x.dx = outregs.x.dx;<br>
intdosx(& inregs, & outregs, & segs); / * 重置日期時間 * /<br>
return(2);<br>
}<br>
else return(1);<br>
/ * 關閉文件 * /<br>
inregs.h.ah = 0x3e;<br>
inregs.x.bx = handle;<br>
intdosx(& inregs,
& outregs, & segs);<br>
}<br>
}<br>
main()<br>
{<br>
int flag;<br>
flag = count();<br>
if(flag==0) printf("此軟件為試用版,請勿任意修改!\ n");<br>
if(flag==1) printf("此軟件為試用版,您的試用次數已滿!\n");<br>
if(flag==2) printf("此軟件為試用版,歡迎試用!\n");<br>
}</font></span> </font> </span></p>
<p> <span style="FONT-SIZE: 9pt">選載自中國程序員網站</span>
</span></font>
</td>
</tr>
</tbody>
</table>
</div>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -