首页
社区
课程
招聘
[旧帖] [求助]在双击打开txt文本文件时,notepad(记事本)怎样读取文件? 0.00雪花
发表于: 2006-10-9 10:26 8090

[旧帖] [求助]在双击打开txt文本文件时,notepad(记事本)怎样读取文件? 0.00雪花

2006-10-9 10:26
8090
双击打开txt文件时,notepad还没等对txt文件调用CreateFile(),就已经将文件显示出来了,很奇怪啊。

  其他打开方式,比如(1)先打开notepad再将txt文本托拽到notepad中;(2)先打开notepad再点击“文件”->“打开”->选txt文件打开, 上面两种方式都是很正常的内存映射文件的过程:CreateFile->CreatFileMapping->MapViewOfView。

  搞不懂双击打开时,notepad是怎么读文件的。哪位大侠知道,请多指教。多谢!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 215
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
notepad.exe %s
带参数打开的.怎么断我也不知道.那位知道的说下啊!比如如何找到一个程序里面可以用那些函数.怎么带参数.
2006-10-9 12:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
会调用的!

Windows系统中txt文件与记事本Notepad.exe是默认关联的,双击txt文件时,Explorer.exe将会创建进程Notepad.exe,并将该txt文件的完整路径(假设是C:\1.txt)传递给Notepad.exe;与我们在OllyDbg中调试Notepad.exe时,在“调试”菜单中的“参数”里添上C:\1.txt来运行Notepad.exe的效果基本相同,只是父进程不同。

可以这样验证CreateFileW被调用了
1、用OllyDbg载入Windows XP的Notepad.exe,在“调试”菜单中的“参数”里添上txt文件的完整路径名;
2、在 01004A07 处设置断点;
3、F9运行,程序将中断在01004A07 Call CreateFileW;
这时主窗口的消息循环还没有开始运行呢!而你的后两种方法都要到主窗口的消息循环运行之后才可能发生!
2006-10-9 12:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
多谢3楼。 OllyDbg我没用过,所以不很理解你的测试,呵呵。

我用API Hook来测试的,得到下面的结果:
当双击打开txt文本文件时:
第一步. 系统读取Notepad.exe到内存(用了内存映射文件),过程如下:
      CreateFile
      ReadFile(4次)
      CreateFileMapping
      MapViewOfFile
   (以上四个函数都是对Notepad.exe操作的)
第二步. 对txt文本文件调用CreateFile。(没有调用ReadFile等其他函数)

我在第二步里截获CreateFile,让它先不被调用,但文件的内容还是显示出来了。第一步和第二步中间有管道操作,我不懂管道,不知道时干生么用的。

你的意思是不是说:在第一步里,对文件的CreateFileW就已经被调用了?
之后txt件怎样被读到内存中的呢?
2006-10-9 13:03
0
游客
登录 | 注册 方可回帖
返回
//