父子进程间的共享内核对象。
利用内核对象句柄的可继承性,当然这种继承性仅限于父子进程。
可以在SECURITYATRIBUTE这种结构中,设置可继承标志。然后把它作为参数传给创建内核对象的函数。当创建内核对象完毕,在进程的句柄表里就会有一条记录,其中可继承标志位被设置为1状态。然后在这个进程里,利用创建进程的函数创建一个子进程,在这个创建函数里要设置继承性参数为true,这样建立的子进程的句柄表将在与父进程句柄表相同的位置建立相同的句柄结构记录,记录了父进程创建的内核对象的信息.
值得注意的是,虽然子进程的句柄表里已经有了父进程创建的内核对象的句柄,但是子进程并不知道,这个继承的句柄的值。如何获得这个值呢?有这么几个方式:
可以利用创建函数,在父进程中设置参数传递给创建函数,然后在子进程中利用sscanf函数进行分析,得出句柄值。这时子进程就可以影响内核对象了。
可以利用进程间通信的技术。可以等子进程初始化完毕,给子进程的线程窗口发送消息,封装句柄信息。
还可以,也是比较好的方式就是利用进程的环境程序块,在环境程序块里设置变量值,然后在子进程或者孙进程里
利用GetEnvironmentVariable函数取出变量值即可。
要注意:可以通过函数改变句柄的属性。SetHandleInfomation
参数值:HANDLE_FLAG_INHERIT(1)/HANDLE_FLAG_PROFECT_FROM_CLOSE(2)
还可以通过GetHandleInfomation(..)获得句柄的状态。