Autorun.inf 文件详解
Autorun.inf 是一种特殊的文本文件,通常存放在驱动器根目录下,并遵循特定格式,由一个或多个以节名为开头且用中括号包围的段落组成。对于autorun.Alpha 节,应用较少,而 Deviceinstall 则仅在 Windows XP 下可用,用于指定制设备安装向导进行递归目录搜索。光盘一旦插入光驱,就会自动运行,这主要依赖于两个文件:光盘上的 AutoRun.inf 文件和操作系统的系统文件 Cdvsd.vxd。Cdvsd.vxd 不断监测光驱内是否插入了光盘;若检测到插入,则查找光盘根目录下的 AutoRun.inf 文件,如存在,则执行其中预设的程序。
Autorun.inf 支持三个节:[autorun]、[autorun.alpha] 和 [Deviceinstall],其中唯有 [autorun] 是必需存在的。
`[AutoRun]` 表示 AutoRun 部分的开始,是必填项。
`icon=C:\C.ico` 设置 C 盘的个性化图标为 C.ico。
`Open=C:\1.exe` 指定位于 C 盘下的 1.exe 程序为运行目标。
该功能适用于硬盘和光盘,“Open=”后的文件需为可执行文件,如 com、exe 或 bat 文件。通过结合 Bat 批处理文件,可实现一系列任务的自动化执行。
图标设置也可用 `Defaulticon` 命令替代 `Icon`,二者效果相同。Iconname 参数可接受 .ico、.bmp、.exe 或 .dll 格式的文件。若文件包含多个图标,可通过指定资源号(索引)引用不同图标。资源号用 0、1、2 等数字表示,分别对应图标信息文件中的首个图标、次个图标等,与图标文件间用逗号分隔。例如,`Icon=C:\Windows\System\Shell32.DLL,21` 中,21 通常表示 exe 文件的第二个图标。需要注意的是,若同一 Autorun.inf 文件中出现 Defaulticon 和 Icon 命令,Autoplay 将优先使用 Defaulticon 并忽略 Icon 命令。
现今大多数 U 盘被视为可移动存储设备,操作系统并不会自动运行其中的 Autorun 功能。但对于 U 盘,可以尝试使用 `Shellexecute=1.exe` 进行配置。然而,这种方法会使 U 盘被视为非可读设备,因此并不推荐采用。
要实现 Autorun 功能,U 盘在进行 inquiry 查询时,返回数据的第二个字节的最高位必须为 0,即:
`inquiry[0] = 0; // DIRECT_Access_DEVICE 类设备`
`inquiry[1] = 0; // 第 7 位设为 1 表示可移除磁盘,设为 0 则表示硬盘`
......// 后续内容省略
若将 U 盘模拟为 CDFS 设备,首先需设置 `inquiry[0] = 5 (DTYPE_CROM)` 来声明自己为 CD-ROM 类设备,随后按照 SPC-2 (3/4) 和 MMC-4 规范处理主机发出的 CBW 命令,并在该磁盘 FAT 分区的根目录下加入 Autorun.inf 文件。
微软官网对此有所说明:
"Autorun 功能仅限于 CD-ROM 驱动器和固定硬盘驱动器。若要使 USB 存储设备具备 Autorun 功能,该设备不应标记为可移动媒体设备,且应包含 Autorun.inf 文件及启动应用程序。可移动媒体设备设置为一个存在于 SCSI Inquiry 数据响应中 SCSI Inquiry 命令的标志。该标志的第 7 位(从 0 开始计数)为可移除媒体位(RMB)。RMB 设置为 0 表示设备并非可移除媒体设备;若 RMB 设置为 1,则表示设备为可移除媒体设备。驱动程序通过调用 StorageDeviceProperty 请求获取这些信息。"
要定义卷标,可使用 Label 命令完成。
`label=dapeng`
打开网页可以使用:
`open=start.exe yourfilename.html` (适用于 9x/me 系统)
`shellexecute=index.html` (适用于 2k/Xp/2003 系统)
实际上,通过修改 Autorun.inf 文件,不仅能更改磁盘图标,还可向磁盘右键菜单增添许多命令。只需在文件内添加相应语句即可。
`shell\[标志] = 右键菜单中显示的内容`
`shell\[标志]\command = 要执行的文件或命令行`
例如:
`shell\1=天若有情天亦老`
`shell\1\command=notepad ok.txt`
示例:
`[AutoRun]`
`Open=regedit /s Share.reg`// 添加 `/s` 参数可确保在导入时不显示任何信息
`Share.reg` 内容如下:
`REGEDIT4`
``此处留空一行,以下内容为添加 C 盘默认隐藏共享`
`[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Network\Lanman\C$]`
`"Path"="C:\\\\"`
`"Remark"=""`
`"Type"=dword:00000000`
`"Flags"=dword:00000302`
`"Parmlenc"=hex:`
`"Parm2enc"=hex:`
当 `flags=0x302` 时,重启系统,目录共享标志消失,表面看似未共享,但实际上该目录处于完全共享状态。若将 `"Flags"=dword:00000302` 更改为 `"Flags"=dword:00000402`,则可以看到硬盘已被共享。
关闭 Autorun 功能的方法是打开注册表编辑器,定位至:
`[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]`
在右侧窗格中存在一个名为 "NoDriveTypeAutoRun" 的键,它决定了是否启用 Autorun 功能。
默认情况下,"NoDriveTypeAutoRun" 键值为 95(即 10010101),每一位代表一类设备,具体设备类型与数值对应关系如下:
设备名称 | 第几位值 | 设备用数值表示 | 含义
---|---|---|---
DRIVE_UNKNOWN | 0 | 1 | 无法识别的设备类型
DRIVE_NO_root_DIR | 1 | 0 | 无根目录的驱动器
DRIVE_REMOVABLE | 2 | 1 | 可移动驱动器
DRIVE_FIXED | 3 | 0 | 固定驱动器(硬盘)
DRIVE_REMOTE | 4 | 1 | 网络驱动器
DRIVE_CDROM | 5 | 0 | 光驱
DRIVE_RAMDISK | 6 | 0 | RAM 磁盘
保留 | 7 | 1 | 未指定的驱动器类型
这里的 "0" 表示设备允许运行,"1" 表示设备不允许运行。
通过修改 "NoDriveTypeAutoRun" 键值,可控制 Autorun.inf 的运行。默认情况下,DRIVE_NO_ROOT_DIR、DRIVE_FIXED、DRIVE_CDROM 和 DRIVE_RAMDISK 四类设备会被自动运行 Autorun.inf 文件。若要禁止硬盘自动运行 AutoRun.inf 文件,须将 DRIVE_FIXED 对应位值设为 1,因 DRIVE_FIXED 代表固定驱动器,即硬盘。若只想禁用软件光盘的 AutoRun 功能,同时保留对 CD 音频碟的自动播放能力,则只需将 “NoDriveTypeAutoRun” 键值更改为 BD,00,00,00 即可。默认情况下,此键值为 95 00 00 00。
锁定注册表的方法如下:
`REGEDIT4`
`[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]`
`"DisableRegistryTools"=dword: 00000001`
Autorun 文件格式简介:
I. `[AutoRun]` 关键字