DuplicateHandle的第一和第三个参数hSourceProcessHandle和hTargetProcessHandle
是否说明源进程复制句柄时需事先知道目标进程的句柄
这样的话,是否只有父子关系才能调用如果是两个没有关系的进程就不可以了呢

解决方案 »

  1.   

    BOOL DuplicateHandle(
      HANDLE hSourceProcessHandle,  // handle to the source process
      HANDLE hSourceHandle,         // handle to duplicate
      HANDLE hTargetProcessHandle,  // handle to process to duplicate to
      LPHANDLE lpTargetHandle,  // pointer to duplicate handle
      DWORD dwDesiredAccess,    // access for duplicate handle
      BOOL bInheritHandle,      // handle inheritance flag
      DWORD dwOptions           // optional actions
    );hSourceProcessHandle  //源复制进程的Handle.
    hTargetProcessHandle  //目标被复制的进程的Handle.源进程和目标进程HANDL可以是同一个进程,也可以是两个无任何关任的HANDL.同一进程如:
    HANDLE hThread;
    CWinThread *pThread = AfxBeginThread(....);
    ::DuplicateHandle(GetCurrentProcess(),pThread->m_hThread->m_hThread,GetCurrentProcess(),&hThread,0,FALSE,DUPLICATE_SAME_ACCESS);
    不同进程:
    HANDLE hProcess1,hProcess2;
    hProcess1 = ...//随便一个源复制的Handle;
    hProcess2 = GetCurrentProcess();
    HANDLE hProcess;
    ::DuplicateHandle(hProcess1,hProcess1 ,hProcess2 ,&hProcess,0,FALSE,DUPLICATE_SAME_ACCESS);
      

  2.   

    第一和第三个参数hSourceProcessHandle和hTargetProcessHandle是内核对象的句柄。这些句柄本身必须与调用DuplicateHandle函数的进程相关。此外,这两个参数必须标识进程的内核对象。
      

  3.   

    如果A有对内核对象C访问,希望B也能拥有对C的访问
    hSourceProcessHandle是A
    hTargetProcessHandle是B
    hSourceHandle是C
    是在A程序中使用DuplicateHandle吗那B中如何获得C的访问呢