Reading maketh a full man;
 conference a ready man;
 and writing an exact man. …
 Histories make men wise;
 poets witty;
 the mathematics subtitle;
 natural philosophy deep;
 moral grave;
 logical and rhetoric able to continued.

全部 生活 啰嗦 捉刀 望月 图片 影音 弄文 技术 拾花 资料 关于 未分类 相册 留言 工具房
« 上一篇: 忙流 下一篇: 体检!体检! »
嵇尔 @ 2006-03-28 12:31

  AutoRun给用户带来的便利和它带来的麻烦一样多,一方面软件发行者借助于它可以帮助用户非常轻松地把软件装入硬盘,用户通过它看VCD就跟影碟机一样方便。另一方面,当用户想察看光盘内容时,自动运行的程序却故意转移用户的视线,浪费用户的时间,而且AutoRun可能还会干扰正常运行的应用程序,不少高级用户希望放入光盘的同时竭力避开光盘的AutoRun。因此,了解一些AutoRun 的常识,无论对于发行软件的程序设计人员,或是使用电脑的普通用户,都是大有裨益的。 

  一、AutoRun的基本原理
  AutoRun是Microsoft Windows操作系统的特点之一,它需要Windows 95和NT 4.0以上版本支持,用于基于Windows和DOS的应用程序,创建自动运行的应用程序需要建立两个文件,其中一个是AutoRun.inf,另一个为启动应用程序。
  当设备(光盘)插入到一个支持AutoPlay的计算机中时,系统会检测插入设备上是否有有效的文件系统,如果有的话,它会搜索一个文件名为AutoRun.inf的配置文件,从这个文件找到安装程序和各种可选的配置,然后加载这个应用程序。
  AutoRun.inf文件由若干节组成,下面是一个典型的AutoRun.inf文件,“;”及其后的语句为注释说明语句,建立文件时不要输入。
  [AutoRun]
  Open=MyDemo.exe
//启动程序的文件名,一般位于根目录,可以有路径,但不要带驱动器,因为各个微机的配置不一样,驱动器符不固定,注意你最好在这里加载一个小程序,以照顾一下不喜欢自动播放而且没有耐心等待的朋友,因为他们对付大的自动运行程序的第一反应是按下Ctrl+Alt+Del。为自动启动设计的程序,应该启动另外一个线程,以缩短用户感受的加载时间。对于已经安装的程序,启动程序应能自动检测环境是否安装,能够自动退出,避免重复安装造成用户不耐烦。
  Icon=MyDemo.exe,1
//为驱动器指定一个应用程序的特定图标,这里的1为资源标识
  DefaultIcon=iconFile.Ico
//指定应用程序的缺省图标。这两种指定图标的方法可以互换,即可以来自一个Exe或Dll文件内部资源,也可以是一个图标或位图文件。
  Label="My Drive Label"
//自动运行的驱动器显示标签,它显示在图标的下面。
  ShellExecute=(FilePath\)fileName [Param1,[Param2]…]
//指定AutoPlay用来调用ShellExecuteEx的应用程序或数据文件,若文件名为一个可执行文件,它将被启动,若文件为数据文件,系统将调用ShellExecuteEx启动与该数据文件相关的缺省命令。这个命令与Open相似,但它可以利用文件的关联信息运行程序。
  Shell=Explorer
//为驱动器的右击菜单指定一个缺省命令
  Shell\ReadIt="&ReadMe";菜单上显示的字符串,你可以通过&定义菜单快捷键。
  Shell\ReadIt\Command="notepad abc\readme.txt ";菜单执行的命令
  Shell\Explorer="资源管理器"
  Shell\Explorer\Command=Explorer.exe
    后面这些语句用于对驱动器鼠标右击菜单进行定制。 

  二、禁止AutoRun
  手工禁止AutoRun 比较简单,只需用户在插入光盘的同时,按下Shift键即可。但有的时候需要通过程序设计禁止自动运行。
  对于Shell 4.7或更高版本的系统中,Microsoft® Windows® 能够向前台应用程序窗口发送“QueryCancelAutoPlay”通过响应这条消息,你的应用程序可以禁止AutoRun。在应用程序的前台窗口的窗口过程中,应用程序在响应该消息时,应该返回TRUE,以示取消AutoPlay。
  UINT g_uQueryCancelAutoPlay = 0;
  LRESULT WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  { switch (uMsg) {
  ...
  default:
  if (!g_uQueryCancelAutoPlay)
  {
  g_uQueryCancelAutoPlay =
  RegisterWindowMessage(TEXT("QueryCancelAutoPlay“));
  }
  if (uMsg && uMsg == g_uQueryCancelAutoPlay)
  {
  return TRUE; // 取消AutoPlay
  }
  }
  }
  如果你的应用程序使用的是一个对话框,你还需要作一些额外的工作,即在返回TRUE之前,调用SetWindowLong(hDlg, DWL_MSGRESULT, TRUE);设置消息返回结果,TRUE表示禁止播放, FALSE,则允许自动播放。Return TRUE 此时不起作用,可以返回1。特别注意使用前要注册"QueryCancelAutoPlay“消息。
  另外一种禁止AutoRun 的方法是通过修改注册编辑表:
  有两种方法用于永远地禁止自动播放,控制面板中光盘的自动播放设置也是通过修改注册编辑表实现的。注册编辑表中有两个项专门负责自动播放禁止,它们是NoDriveAutoRun和NoDriveTypeAutoRun,前者规定某一指定驱动器盘符禁止自动播放;后者规定某一类特定设备禁止自动播放。
  下面是注册编辑表导出的结果
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]“NoDriveAutoRun”=hex:05,00,00,00
"NoDriveTypeAutoRun"=hex:91,00,00,00
  在尝试修改的时候,建议用户把它原来存储的值记下来,因为没有更好的办法能够恢复它的原始值。NoDriveAutoRun值存储一个双字,从最低位到最高位依次对应A:、B:、C:,依次类推,上面的值将禁止A: ,C:。 NoDriveTypeAutoRun也存储一个双字,它的各位对应驱动器类型如下,注意Windows NT /2000系统重启或注销后重新登录方能生效:
位号 位屏蔽常量 描述
0x04 DRIVE_REMOVEABLE 对应软盘
0x08 DRIVE_FIXED 硬盘
0x10 DRIVE_REMOTE 网络驱动器
0x20 DRIVE_CDROM 光盘
0x40 DRIVE_RAMDISK Ram虚拟盘

  三、其它存储设备的AutoRun

  通过上面的描述可以看出,AutoRun不光支持光盘载体,同时它还支持其它载体,这使得AutoRun的调试非常方便。对于一个可移动存储载体,如USB移动存储器,AutoRun如果实现AutoRun.inf的加载必须满足下列条件:
  (1)设备驱动必须兼容AutoRun驱动,即载体插入时必须向系统发送WM_DEVICECHANGE消息
  (2)根目录下必须有一个有效的AutoRun.inf文件
  (3)注册表不能禁止该设备的自动运行
  (4)前台应用程序没有阻止AutoRun
  注意这种方法不应该用来发布基于软盘的应用程序,因为实现软盘的自动运行会给病毒的传播提供一条有效的途径,用户会对任何含有AutoRun.inf文件的软盘保持怀疑。
  AutoRun不仅可以手动禁止,也可以手工启动,你只需右击满足AutoRun条件的驱动器图标,选中AutoPlay项也可以激活AutoRun 命令。  




评论 / 个人网页 / 扔小纸条
* 昵称

已经注册过? 请登录

新用户请先注册 以便能显示头像及追踪评论回复

Email
网址
* 评论
表情
 


 

分类小组论坛
杂谈 , 娱乐、八卦 , 文学、艺术 , 体育 , 旅游、同城 , 象牙塔 , 情感 , 时尚、生活 , 星座 , 科技

请注意遵守中华人民共和国法律法规, 如威胁到本站生存, 将依法向有关部门报告, 同时本站的相关记录可能成为对您不利的证据.

相关法律法规
全国人大常委会关于维护互联网安全的决定
中华人民共和国计算机信息系统安全保护条例
中华人民共和国计算机信息网络国际联网管理暂行规定
计算机信息网络国际联网安全保护管理办法
计算机信息系统国际联网保密管理规定

日历
站内搜索

互联网 绘娴涯绪
友情链接

本站logo

【 我的BLOG朋友 】

阳光下的黑色

小猪

魔女的巢穴

lysunking

【  我出没的BBS  】

【  我的网络生活  】

杀手的童话

如果图片没有显示估计就是卡了

【 杂七杂八的各种东西 】

E-都市-三维地图

中国邮政

国家邮政局速递局

  

  

订阅 RSS
0136229
歪酷博客
错别字报告
 此页面访客的地理位置