子进程如何使用从父进程继承过来的句柄??
谢谢~~
谢谢~~
解决方案 »
- jrtplib 传输 h264 单包发送错误
- 为何添加不到WM_DEVICECHANGE的消息处理函数OnDeviceChange呢?
- 谁能给我解释一下_COM_SMARTPTR_TYPEDEF(_Connection, __uuidof(_Connection));这段定义
- Debug版本和Release版本有什么区别
- 想写个程序 ,能向指定的 e_mail 发信 , 大家有思路吗 ?
- 关于dll问题,在MFC扩展dll里,使用DoModel为什么没有作用,调用方法和在标准对话框中完全一样
- 如何编程实现在facebook.com的个人状态编辑框里增加表情工具条
- wndclass.hbrBackground=GetStockObject(WHITE_BRUSH); 这句为什么老出错?????
- 谁知道股票之星的日数据,分时数据等数据文件的格式吗
- 怎样用VC++实现远程控制?
- 知道HDIB对象 怎么能得到HBITMAP 对象 CreateDIBSection(...)函数参数如何填写?
- 获得当前活动句柄的问题!!
首先,当父进程创建内核对象时,必须向系统指明,它希望对象的句柄是个可继承的句柄。请记住,虽然内核对象句柄具有继承性,但是内核对象本 身不具备继承性。若要创建能继承的句柄,父进程必须指定一个S E C U R I T Y _ AT T R I B U T E S 结构并对它进行初始化,然后将该结构的地址传递给特定的C r e a t e 函数。下面的代码用于创建一个互斥对象,并将一个可继承的句柄返回给它: SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecuntyDescriptor = NULL;
//Make the returned handle inheritable.
sa.bInheritHandle =- TRUE;
HANDLE hMutex = CreateMutex(&sa, FALSE, NULL);
该代码对一个S E C U R I T Y _ AT T R I B U T E S 结构进行初始化,指明该对象应该使用默认安全性(在Windows 98 中该安全性被忽略)来创 建,并且返回的句柄应该是可继承的。
其它的方法如父进程等待子进程完成初始化(使用WaitForInputIdle()),然后发送一条消息给子进程的某线程。
第三种方法是父进程将一个环境变量加到环境程序块中。该变量的名字是子进程知道要查找的某种信息,而变量的信息则是内核对象要继承的值。可以用GetEnviromentVariable()获取环境变量。
总之,父进程要把句柄值传递给子进程。例如楼上的hMutex,子进程得到它的值后,可以直接WaitForSingleObject(hMutex,...),而不用再去CreateMutext或OpenMutex