Windows Vista IE 7保护模式开发者生存指南
2008-08-22 17:24:11 来源:WEB开发网在我们的示例程序中,使用了两个mutex,目的是允许插件判别何时程序在运行,当DemoApp程序启动时会创建这两个mutex,当点击其中一个Open Mutex按钮时,插件会试图打开它们。Mutex 1具有默认完整性级别,而Mutex 2被SetObjectToLowIntegrity()设为低完整性级别,这意味着一旦处于保护模式,插件将只能访问Mutex 2,下面是点击Open Mutex按钮之后的程序输出:
保护模式的另一个作用是插件不能启动一个继承自内核对象句柄的单独进程,例如,处于保护模式时,示例中的插件不能通过创建一个文件映射对象,来启动一个单独的进程(CreateProcess()中的参数bInheritHandles为TRUE),且使这个进程继承了文件映射对象的句柄。
HANDLE hMapping;
SECURITY_ATTRIBUTES sa = { sizeof(SECURITY_ATTRIBUTES) };
sa.bInheritHandle = TRUE;
hMapping = CreateFileMapping( INVALID_HANDLE_VALUE, &sa,
PAGE_READWRITE, 0, cbyData, NULL );
//在此可把数据放在共享内存块中
//运行EXE并传递给它共享内存句柄
CString sCommandLine;
BOOL bSuccess;
STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi = {0};
sCommandLine.Format( _T(""C:path oDemoApp.exe" /h:%p"),
hMapping );
bSuccess = CreateProcess(
NULL, sCommandLine.GetBuffer(0), NULL, NULL,
TRUE,// TRUE代表新的进程应该继承句柄
NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi );
更多精彩
赞助商链接