WINDOWS核心编程——内核对象
今天想把看的第三章的心得写下来。
这章主要介绍了内核对象。在WINDOWS中,内核对象是由操作系统来管理,尽管用户能够创建它,但是在创建之后,用户对该内核对象的操作都是委托给操作系统。
通常用户创建和使用的对象分为:用户对象(如 HICON CreateIcon(prama))、GDI对象函数以及内核对象。像访问令牌、事件对象、文件对象、文件映像对象、进程对象、信号量等都属于内核对象。在内核对象第一次被创建的是,系统会根据给定的参数初始化,其中有一个参数:PSECURITY_ATTRIBUTES,是SECURITY_ATTRIBUTES的指针,SECURITY_ATTRIBUTES的结构如下:
//create a mutex object accessible by Process SHANDLE hObjInProcessS = CreateMutex(NULL, FALSE,NULL);//get a handle to Process T's kernel object//dwProcessIdT 就是T的进程标识符,假设已经获得HANDLE hProcessT = OpenProcess(PROCESS_ALL_ACCESS,FLASE, dwProcessIdT);HANDLE hObjInProcessT;//give T access to our hObjInProcessSDuplicateHandle(GetCurrentProcess(),hObjInProcessS, hProcessT, &hObjInProcessT, 0, FALSE, DUPLICATE_SAME_ACCESS);//通过进程间通信的方式,是T获得这个句柄。CloseHandle(hProcessT);CloseHandle(hProcessS);
?注意:进程S中永远不要调用CloseHandle(hObjInProcessT);另外,这种方式存在潜在的失败风险,如果进程S中的hObjInProcessT的句柄值已经被另外的内核对象占据,那么会强行将先前的内核对象关闭。
?
未完待续……
?
?
?
?