保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 计算机论文 >> 正文

用Windows终端仿真程序实现微机远程文件传送1


COPY.EXE拷贝到一个新地方,只需运行一次PUT-KEY.EXE就可以使用新的NO-COPY.EXE了。所以PUT-KEY.EXE必须由合法用户保管。
先编写一个取“钥匙”的子程序,放在MAKE-KEY.CPP文件中,在该子程序中,分别取目录项的相对索引号,目录项所在扇区的扇区号,文件指针所对应的绝对簇号。采用相加的算法,形成“钥匙”。这里只用了一个文件指针6000所对应的簇号,当然可以使用多个文件指针,采用更复杂的算法,如相乘、相除、异或、相减等。所用的文件指针和所用的算法是保密的。而算出的“钥匙”可以是公开的。
MAKE-KEY.CPP的内容如下(本文件用来被包含在PUT-KEY.CPP和NO-COPY.CPP中)。
/*本子程序用来取filename的"当前钥匙"*/
unsigned long curentlocation-key(char filename)
{
unsigned long secc;
int filehandle;
int i,iii,jjj1,jjj2;
unsigned char u-char=0;
unsigne

d int u-int=0;
unsigned long u-long=0;
unsigned int offst1,segmnt1,offst2,segmnt2;
void psp-ptrr;
unsigned char far ptrr1, ptrr2;
FILE Stream;
Stream=fopen(filename,"r+b");
if(Stream==NULL)
{cputs("open error");exit(1);}
filehandle=fileno(Stream); //取文件句柄;
fseek(Stream,6000,0); //将文件指针置于6000处;
fread(&i,2,1,Stream); //读一次,使DOS按此文件指针修正SFT;
asm push es
asm mov ah,51h
asm int 21h //取程序段前缀(PSP)段地址;
asm mov es,bx
asm mov ax,word ptr es:[52] //偏移量34H为文件句柄表(FHT)地址;
asm mov bx,ax
axm mov ax,word ptr es:[54]
asm mov es,ax
asm add bx,filehandle //文件句柄表中偏移filehandle 处的一字节;
asm mov al,byte ptr es:[bx] //为该文件的SFT在SFT数组中的序号;
asm xor ah,ah
asm pop es
asm mov iii,ax //iii中存放文件的SFT在SFT数组中的序号;
asm push es
asm mov ah,52h //取DOS多重表指针;
asm int 21h //es为段地址,bx为偏移量;
asm mov ax,word ptr es:[bx+4] //多重表中偏移04H为第一个SFT数组控制块指针

asm mov offst1,ax //offset1为第一个SFT数组控制块偏移量;
asm mov ax,word ptr es:[bx+6]
asm mov segmnt1,ax//segment1为第一个SFT数组控制块段地址;
asm mov es,segmnt1
asm mov bx,offst1
asm mov ax,word ptr es:[bx]
asm mov offst2,ax//offset2为第二个SFT数组控制块偏移量;
asm mov ax,word ptr es:[bx+2]
asm mov segmnt2,ax //segment2为第二个SFT数组控制块段地址;
asm mov ax,word ptr es:[bx+4]
asm mov jjj1,ax //jjj1中存放第一个SFT数组的项数,一般为五
asm mov es,segmnt2 //个(系统保留的五个常用文件的SFT);
asm mov bx,offst2
asm mov ax,word ptr es:[bx+4]
asm mov jjj2,ax //jjj2中存放第二个SFT数组的项数,它一般等于
asm pop es //CONFIG.SYS中FILES=N的N值减去第一个SFT
//数组中SFT项数jjj1;
ptrr1=(unsigned char far *)MK-FP(segmnt1,offst1+6);
//ptrr1指向第一个SFT数组中第一个SFT
Ptrr2=(unsigned char far *)MK-FP(segmnt2,offst2+6);
//ptrr2指向第二个SFT数组中第一个SFT
if(iii<jjj1) //若该文件的SFT序号小于第一个SFT数组的项数,则它的SFT
{ //一定在第一个SFT数组中;
// for(i=0;i<0x3b;i++) //这两行可用来显示该文件的SFT;
// printf(" %2x",ptrr1[iii*0x3b+i]); //在DOS4.0-6.0中国共产党0x3b个字节;
asm push es
asm push di
asm les bx,ptrr1 //第0个SFT的地址;
asm mov

《用Windows终端仿真程序实现微机远程文件传送1(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/171971.html

★温馨提示:你可以返回到 计算机论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。