WINDOWS核心编程——内核对象(续)
上篇讲到通过DuplicateHandle共享内核对象的用法。下面先讲讲DuplicateHandle另一种用法:
假设一个进程对一个文件映射对象拥有读写权限。在程序的某个位置,调用一个函数,并希望它对文件只有读权限。应该使用DuplicateHandle为现有的对象创建一个新的只有读权限的句柄。然后把这个句柄传给该函数,而不是用原来的句柄。
//通过ProcessIdToSessionId获得该进程所在的终端会话。DWORD processID = GetCurrentProcessId();DWORD sessionID;if(ProcessIdToSessionId(processID, &sessioId)){ tprintf(TEXT("^^^^^^^"));}else{ //.............}//显示的将内核对象创建在全局命名空间中。HANDLE h = CreateEvent(NULL,FALSE, FALSE,TEXT("Global\\MyName"));//显示的将内核对象创建在当前会话的命名空间中。HANDLE h = CreateEvent(NULL,FALSE, FALSE,TEXT("Local\\MyName"));?对于一般的内核对象,我们最好应该模仿上面的方式,创建自己专有的命名空间,从而防止恶意程序的Dos攻击。
?