1、内核对象允许被继承
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
HANDLE g_hEvent = CreateEvent(&sa, TRUE, FALSE, NULL);
2、允许子进程继承句柄
CreateProcess( "c:\\test.exe", NULL, NULL,NULL, TRUE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi);
第五个参数为TRUE的时候,指明子进程可以继承父进程的句柄表
3、进程、线程句柄继承
CreateProcess第三个参数与第四个参数的类型为SECURITY_ATTRIBUTES
第三个参数决定当前创建的进程句柄是否允许被继承
第四个参数决定当前创建的线程句柄是否允许被继承
CreateProcess创建进程时,会创建一个进程、一个线程。它们都是内核对象,会被添加到主进程的句柄表内,
通过三、四参数修改这两个句柄的属性,使其可以被子进程进程。
A进程创建B进程,将B进程的进程句柄、线程句柄设置为可继承。(CreateProcess三、四参数)
A进程创建C进程,赋予C进程可以继承句柄表的权限,C进程可以获取到B进程的进程句柄、线程句柄 (CreateProcess第五个参数)