目的是使多个应用态程序能够打开同一个内核设备,而且这些应用态程序之间都使用同一个内核设备句柄我在进程A中使用CreateFile()打开自定义的内核设备后,想在进程B中获得进程A中打开的内核设备句柄,于是选用了DuplicateHandle()进行句柄复制。
现在的疑问是:
1:这样的方法可行么?
2:在使用DuplicateHandle时,总是返回  无权访问 的错误,不知是为什么都晕了,我

解决方案 »

  1.   

    DuplicateHandle() does not need to be used if there is a Parent/Child
    relationship.  Setting the handles as inheritable and then
    calling CreateProcess with the inherit handles flag set is
    enough
      

  2.   


    DuplicateHandle(hProcess,hSourceHandle, hCurrentProcess,&hMyHandle, STANDARD_RIGHTS_REQUIRED,TRUE,0 );你是这样用的吗?
      

  3.   

    可能是我没有说清楚:进程A和进程B的加载是不固定的,他们之间没有明确的继承关系,所以通过设置其继承标识不能达到我的目的。to snsins
    函数中的参数hProcess 是通过OpenProcess获得的句柄么?hSourceHandle是怎么获得的?能不能在进程A中记录下来,然后通过进程间通信传给进程B??
      

  4.   

    比如你想把在进程A里创建的内核对象 h1在进程B里使用,也就是你要把h1复制,
    那么在调用DuplicateHandle的时候,h1就是对应着参数hSourceHandle第一个参数hProcess是通过OpenProcess获得的,值得注意的是必须在OpenProcess的时候指定PROCESS_DUP_HANDLE这个标志,下面是MSDN里有关这个参数的说明:Parameters
    hSourceProcessHandle 
    [in] Handle to the process with the handle to duplicate. 
    Windows NT/2000: The handle must have PROCESS_DUP_HANDLE access. For more information, see Process Security and Access Rights. 
      

  5.   

    只试过在同一进程内DuplicateHandle。只好UP
      

  6.   

    试一试 snsins(███████████) (