欢迎来到天天文库
浏览记录
ID:41037331
大小:127.50 KB
页数:66页
时间:2019-08-14
《Pascal高级编程技术第三章 实用程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、第三章实用程序本章提供了12个用TURBOPASCAL编写的实用程序,包括软锁驱动器的程序、锁硬盘逻辑分区的程序、稿纸排版打印程序、源程序列表程序、查找并替换程序、备份硬盘主引导记录程序、四通-PC文本文件双向转换程序、SPT文件和BMP文件的双向转换程序、数据库文件打卡程序、BATCH文件转换为COM文件的程序、机密文件的有效销毁程序、释放内存程序等12个。下面具体介绍每个程序的编写原理和使用方法。§3.1软锁驱动器程序一般286或386微机都有一个容量极大的硬盘,为使用方便,在硬盘上要安装许
2、多系统软件和专用软件,同时还有很多用户开发的应用程序,由于DOS系统的安全性比较差,软件、程序或数据往往容易被他人非法复制。怎样才能防止他人非法复制呢?人们想出许多方法,其中有给硬盘加口令字,使子目录名变为隐含等多种方法,我向大家介绍一种使逻辑驱动器失效的防拷贝方法。巧妙地使用本节提供的程序,计算机从硬盘启动后,可以使软驱(包括A、B驱)均失效,当在C:>提字符下打入A:并回车,则显示“Invaliddrivespecification”,键入B:时,同样显示此信息。这样在不得到许可时,非法用
3、户是很难拷贝程序和软件的。§3.1.1获得驱动器路径表的方法获得驱动器路径表需要用到未编入文档的DOS功能调用52H,该功能调用的用途是得到内部缓冲器的指针,该指针指向的表描述了与存储子系统有关的大多数DOS内部结构,返回指针存在ES:BX中。这个缓冲区的结构随DOS的主要版本而异,对DOS3.XX及以上版本,此表的偏移16H处为指向驱动器路径的远指针。驱动器路径表由多个表项组成,每个表项均包含缺省值路径、磁头位置和各种标志和指针,表项的数目等于有效逻辑驱动器数加1,最后一表项的标志变量为零,没
4、有任何有用数据。驱动器路径表项的结构如表3-1。表3-1.驱动器路径表项的结构殌┌────┬─────┬───────────────────────┐│偏移│长度│说明│├────┼─────┼───────────────────────┤│0│字节│ASCIIZ格式的当前缺省值路径名,包含着逻辑驱动│││(64)│器字母、冒号分隔符和起始符""││40H│双字│保留,置为0││44H│字节│标志变量,所有有效项包含一个40H,最后一项包含0││45H│双字│逻辑驱动器参数块的远指针││4
5、9H│字│此逻辑驱动器的当前块或磁道/扇区编号││4BH│双字│远指针││4FH│字│未知存储│└────┴─────┴───────────────────────┘殣从表3-1可知,在驱动器路径表每个表项的偏移44H处的一个字节为该逻辑驱动器是否有效的标志,有效时为40H,为其它值则无效,所以要逻辑驱动器失效可以通过DOS功能调用52H,来修改这个标志为0即可。作者用TURBOPASCAL和TASM编写一个程序SL.PAS,可以用来修改逻辑驱动器路径表,使逻辑驱动器失效和有效,源程序清单附后
6、。§3.1.2使用方法该程序采用命令行格式:SL[d:][/switch]其中d代表驱动器,switch为开关,可取L和U,取时L执行锁驱动器过程,取U时解锁已锁的驱动器。典型用法:SL--显示程序的帮助信息SLC:--显示C逻辑盘的当前状态SLC:/L--锁C逻辑盘SLC:/U--解锁C逻辑盘该程序只能在MSDOS3.0以上的操作系统下工作。在对逻辑驱动器解锁时,程序提示输入口令,程序设定的口令是“ABCDEF”,在SOFTLOCK.ASM的源程序中可以找到。§3.1.3作用与效果.防止他人非
7、法拷贝软件、程序或数据。.预防病毒的入侵:因为非机器管理人员在未得到许可时无法使用软驱,从而可以减少病毒入侵的机会。该程序经过我的长期使用,非常有效,而且减少了病毒的入侵机会。每当交换数据前,我们均用防毒软件对软盘进行消毒,以致于病毒很难侵入系统,这对系统的安全和数据的保密都有很好的效果。§3.1.5源程序清单程序1:SL.PAS{}{SL.PAS1.0}{Copyright(C)1991DongZhanshan}programSoftLock;varDrive,Switch:Char;{$LS
8、OFTLOCK}procedureDriveState;External;procedureLockDrive;External;procedureUnLockDrive;External;functionGetDriveNum:Byte;External;procedureHelp;beginWriteLn('Syntax:SL[d:][/Switch]');WriteLn('Switch:/L=Lockthedrived:');WriteLn('/U=Unlockthedrived:');W
此文档下载收益归作者所有