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

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

 2008-08-22 17:24:11 来源:WEB开发网   
核心提示: DemoApp会从/h选项中读取句柄值,并用它来调用MapViewOfFile()完成数据读取,Windows Vista IE 7保护模式开发者生存指南(9),这也是使新进程自动接收到某个内核对象句柄的标准方法,但处于保护模式时,并把它传递给其他的单独进程,//得到一个用作共享内存对象名

DemoApp会从/h选项中读取句柄值,并用它来调用MapViewOfFile()完成数据读取,这也是使新进程自动接收到某个内核对象句柄的标准方法,但处于保护模式时,新进程实际上由代理进程启动,也正是因为IE进程不会直接启动新进程,所以句柄继承失效。

要突破这个限制,插件可为IPC对象使用一个预定义名,这样其他进程就能访问此对象了(因为这个对象为低完整性级别)。如果不想使用预定义名,也可在运行时生成一个“名字”(如为名字使用一个GUID),并把它传递给其他的单独进程。

//得到一个用作共享内存对象名的GUID
GUID guid = {0};
WCHAR wszGuid[64] = {0};
HRESULT hr;
  
CoCreateGuid( &guid );
StringFromGUID2( guid, wszGuid, _countof(wszGuid) );
  
//创建文件映射对象,因为句柄不可被继承,所以无需SECURITY_ATTRIBUTES结构
HANDLE hMapping;
  
hMapping = CreateFileMapping( INVALID_HANDLE_VALUE, NULL,
                PAGE_READWRITE, 0, cbyData, CW2CT(wszGuid) );
  
//在此可把数据放在共享内存块中
  
//运行EXE并传递给它共享内存对象名
//注意CreateProcess()中的参数bInheritHandles为FALSE
CString sCommandLine;
BOOL bSuccess;
STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi = {0};
  
sCommandLine.Format( _T(""C:path  oDemoApp.exe" /n:%ls"),
            wszGuid );
  
bSuccess = CreateProcess(
        NULL, sCommandLine.GetBuffer(0), NULL, NULL,
        FALSE,// FALSE代表新的进程不继承句柄
        NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );

上一页  4 5 6 7 8 9 10  下一页

Tags:Windows Vista IE

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