WEB开发网
开发学院操作系统Windows Vista Windows Vista IE 7保护模式开发者生存指南 阅读

Windows Vista IE 7保护模式开发者生存指南

 2008-08-22 17:24:11 来源:WEB开发网   
核心提示: 这样,EXE就可在命令行中接收到IPC对象名,Windows Vista IE 7保护模式开发者生存指南(10),它接着会调用OpenFileMapping()来访问这个对象,另外,DemoApp会返回一个非法句柄错误;而点击“Run EXE 2”按钮时,将传递文件

这样,EXE就可在命令行中接收到IPC对象名,它接着会调用OpenFileMapping()来访问这个对象,另外,这个方法中,最重要的一点是要非常留意对象生命期。以下是使用句柄继承的步骤:

1、插件创建IPC对象,并置引用计数为1。

2、插件启动新进程,其继承了句柄。这个操作把对象引用计数增加为2。

3、插件能立即关闭它的句柄,因为它不再需要此对象。引用计数降为1。

4、新进程可通过IPC对象来进行所需的操作了。因为它拥有一个打开的句柄,对象直到新进程关闭句柄后才会结束。

如果依照上述步骤,且仅是把对象名传递给EXE,那么实际上是创建了一个“竞跑”状态,插件可能在EXE有机会打开句柄之前就把它关闭了(IPC对象也被删除了)。以下是修改后的步骤:

1、插件创建IPC对象,并置引用计数为1。

2、插件启动新进程,并传递给它IPC对象名。此时引用计数仍为1。

3、插件不能马上关闭它的句柄,它需要等待直到新进程已打开此对象的一个句柄。此时需要做一些同步。

4、新进程打开对象句柄并读取数据,此时,它可以发信号给插件以唤醒其线程,插件现在可以安全地关闭它的句柄了。

在示例程序中,我们让DemoApp在创建主窗口之前,先从共享内存中读取数据。插件在调用完CreateProcess()之后,接下来就可调用WaitForInputIdle(),这个函数使线程阻塞,直到DemoApp的主窗口创建并显示出来。一旦DemoApp线程处于空闲状态,它将不再使用共享内存,此时插件就可以安全地关闭其句柄了。

当点击“Run EXE 1”按钮时,程序把当前日期及时间写到共享内存中,并传递给DemoApp一个句柄,如果此时处于保护模式,这个方法将会失败,DemoApp会返回一个非法句柄错误;而点击“Run EXE 2”按钮时,将传递文件映射对象名给DemoApp,程序此时就会显示读取自共享内存的数据了。

上一页  5 6 7 8 9 10 

Tags:Windows Vista IE

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接