情况是这样的,使用自己的程序client.exe 启动1.exe(用createprocess 启动)
1.exe 启动 2.exe,然后 1.exe 退出
2.exe 启动 3.exe,然后 2.exe 退出
3.exe 启动 4.exe,然后 3.exe 退出现在我得到了 4.exe 的进程ID,
只能通过 PROCESSENTRY32.th32ParentProcessID 
取得3.exe 的进程ID,却无法再往回取得 1.exe,2.exe 和 client.exe的进程ID
想请问一下如何通过 4.exe 的进程ID,取得祖先进程 client.exe 的进程ID?PS: 不能使用系统钩子 HOOK createprocess
祝大家身体健康

解决方案 »

  1.   

    从命令行参数传过来
    client.exe启动1.exe时候命令行参数传PIDClient
    1.exe启动2.exe时候命令行参数传PIDClient|PID1
    2.exe启动3.exe时候命令行参数传PIDClient|PID1|PID2
    3.exe启动4.exe时候命令行参数传PIDClient|PID1|PID2|PID3
      

  2.   

    父进程在创建内核对象时指明句柄的继承性(只是句柄),方法是指定一个SECURITY_ATTRIBUTE结构并初始化,然后将此结构作为参数传递给Create*函数
    SECURITY_ATTRIBUTE sa;
    Sa.nLength=sizeof(sa);
    Sa.lpSecurityDiscriptor=NULL;(默认安全性)
    Sa.bInheritHandle=TRUE;
    Create(…..);
    传递方法:
    (1)将句柄作为命令行参数传给子进程;
        (2)父进程等待子进程初始化完之后发送消息到子进程的线程;
        (3)父进程将句柄值作为环境变量添加到环境程序块,子进程可以继承这个变量,然后调用GetEnvironmentVariable得到这个变量;