PROCESS_INFORMATION pi;BOOL fSuccess=CreateProcess(...,&pi);if(fSuccess){CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);}
在创建完一个新进程的时候,内核对象使用计数为1还是2啊,若是为1,现在这个操作使得内核对象的值减为0,系统会释放内核对象的,怎么还说这是在创建一个独立的子进程呢?若是为2,则执行完这个操作后内核对象的使用计数为1,这时只剩一个内核对象,没有主进程,没有主线程,还把句柄释放了,那我怎么能继续使用它呢?

解决方案 »

  1.   

    句柄是由系统维护,一系列句柄函数来操控的。CreateProcess函数内部,刚建立对象的时候,计数被初始化为1,往pi地址里面填写hThread和hProcess时,这两个内核对象的计数各自增加一(也就是此时至少是2);当你在CreateProcess返回时关闭句柄是,内核对象计数减一,计数至少为1。当你CloseHandle(pi.hThread);后,这个句柄就不再有效了,再次CloseHandle(pi.hThread);将失败,系统对象计数仍然是正常的。
    ---系统把关键数据隐藏起来,给出一组操控Api,用户是无法有意或无意的修改系统关键数据的。