CreateProcess and Explorer’s filename check

CreateProcess and Explorer’s filename check

Tuesday, July 11th, 2006

在"Function system() failed"中,提到了如果通过lpCommandLine(第二个参数)来传递命令给函数CreateProcess,字符串“c:/program files/sub dir/program name”会被解释成:

c:/program.exe files/sub dir/program name
c:/program files/sub.exe dir/program name
c:/program files/sub dir/program.exe name
c:/program files/sub dir/program name.exe

如果在C:/下,存在着一个名为program.exe的程序,事情会怎么样?在这种情况下,这个名为program.exe的程序就会被执行,这几乎不是程序员想要得到的结果。如果这个program.exe是一个恶意程序(如果它真的存在,则几乎就一定是),就会由于程序员的疏忽而导致它的执行。

MS认为他们有责任防止类似事情的发生。在MSDN中,MS强调应该在lpCommandLine使用引号(")来避免CreateProcess错误地解析这个参数,即应该使用:

"/"c:/program files/subdir/program name/" your params to the program"

除此以外,他们还在Explorer.exe中加入了检查。当Windows启动时,Explorer.exe会检查C:/和其它一些目录,以确定这些目录下不存在类似于program.*的文件和目录存在。如果存在的话,Exploerer.exe会弹出一个对话框(应该说这个对话框非常不友好,当我第一次见到它的时候,我无法理解它给出的提示,也完全不知道应该如何操作,甚至不知道这个对话框属于哪个应用程序),这个对话框是:

explorer warning

用VC以资源方式打开Explorer.exe,在资源>Dialog目录下可以找到这个对话框模板。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值