當父進程建立子進程時,子進程將繼承父進程的內核對象。這時若是要控制子進程使用父進程的內核對象。能夠使用 SetHandleInformation設置。 BOOL SetHandleInformation(HANDLE hObject, DWORD dwMask, DWORD dwFlags); 改變句柄的標誌,目前可改變的標誌有兩種 #define HANDLE_FLAG_INHERIT 0x00000001 // 繼承標誌 #define HANDLE_FLAG_PROJECT_FROM_CLOSE 0x00000001 // 保護不容許關閉句柄標誌 例如 // 設置句柄值可繼承: SetHandleInformation(hObject, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT); // 設置句柄不可繼承: SetHandleInformation(hObject, HANDLE_FLAG_INHERIT, 0); // 設置句柄值不可關閉,受保護: SetHandleInformation(hObject, HANDLE_FLAG_PROJECT_FROM_CLOSE, HANDLE_FLAG_PROJECT_FROM_CLOSE); // 設置句柄值可關閉,不受保護: SetHandleInformation(hObject, HANDLE_FLAG_PROJECT_FROM_CLOSE, 0); 一、關於設置句柄爲不可繼承的用法,在建立一個迴路的socket時使用,若是能夠子進程能夠繼承的話,會出現多個迴路的socket,通信會受影響 二、關於設置句柄不能夠關閉,受保護時,父進程建立子進程,子進程再建立孫進程時,子進程把句柄關閉,致使孫進程沒法繼續使用,這時候要保護