SetHandleInformation設置內核對象標誌

當父進程建立子進程時,子進程將繼承父進程的內核對象。這時若是要控制子進程使用父進程的內核對象。能夠使用
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,通信會受影響

二、關於設置句柄不能夠關閉,受保護時,父進程建立子進程,子進程再建立孫進程時,子進程把句柄關閉,致使孫進程沒法繼續使用,這時候要保護
相關文章
相關標籤/搜索