核心物件 2 之跨越邊界程序共享核心物件

2021-08-07 10:46:02 字數 1300 閱讀 7948

在兩個程序之間共享核心物件的方法有很多

1.通過物件控制代碼的繼承性共享核心物件,但是這兩個程序之間必須要存在父子關係

步驟是:建立乙個核心物件,將該核心物件的安全屬性的binherithandle屬性置為true,再用createprocess建立乙個程序,將引數中的binherithandles也置為true,這樣再新程序建立完成時,系統會自動複製父程序的控制代碼表中的可繼承標誌為true的控制代碼到子程序的控制代碼表中,此時子程序不知道自己已經繼承了父程序的控制代碼,需要通過createprocess的命令列引數將控制代碼值傳遞給子程序

2.通過命名物件跨程序共享核心物件

一般建立核心物件的函式除了有安全屬性,還會有乙個名字屬性,這個屬性就是為在另乙個程序得到某個核心物件的控制代碼而設定的

步驟是:假設有2個程序,分別為a,b,

a程序建立乙個帶有名字的核心物件

b程序也用建立函式建立相同名字的核心物件,如果該核心物件是第一次被建立,則getlasterror返回0,否則返回error_already_exists(物件已經存在)的錯誤,表明開啟了乙個已經存在的物件,這樣就可以實現跨程序共享物件了

此處b程序也可以用open函式,比如openmutex,openevent等開啟核心物件,不過與createmutex,createevent等函式不一樣的是,如果該核心物件不存在,create函式會直接建立乙個,open函式會開啟失敗

但是需要注意的是,如果此時程序a使用closehandle關閉了帶命名的核心物件,就無法再用openmutex等函式開啟了

3.終端伺服器的命名空間,此處缺少環境,我也不是很清楚,請見諒

4.複製物件控制代碼duplicatehandle函式

bool duplicatehandle(

handle hsourceprocesshandle, // 源程序控制代碼

handle hsourcehandle, // 源控制代碼

handle htargetprocesshandle, // 目標程序控制代碼

lphandle lptargethandle, // 接收目標控制代碼的指標

dword dwdesiredaccess, // 設定訪問(讀或寫)許可權

bool binherithandle, // 設定該控制代碼是否可以被子程序繼承

dword dwoptions // 標誌:設定遮蔽值,如果設定為duplicate_same_access標誌,則dwdesiredaccess引數將無效化

若設定duplicate_close_source標誌,則源程序的控制代碼將會被關閉,這樣核心物件的引用計數會加1再減1也就是保持不變

);

多程序共享核心物件

首先,核心物件是什麼?引用 windows核心程式設計 原文 每個核心物件都只是乙個記憶體塊,它由作業系統核心 ring0 分配,並只能由作業系統核心訪問。核心物件存在於程序虛擬位址空間的高位址 32位 0x80000000 0xffffffff 它由三個部分組成 物件頭 object header...

Linux核心之程序和檔案共享

1.shell命令的執行和程序 shell 命令可以是內部或者外部命令。內部 內建 命令 internal built in command 的 本身就是shell程序的一部分。linux shell中的一些內部命令如.alias bg cd continue echo exec exit fg j...

Windows程序間共享核心物件幾種方式

核心物件的控制代碼是程序相關的,這樣更可靠,更安全 windows提供下列n種機制來允許程序共享核心物件。只有程序間存在父子關係才能使用物件控制代碼繼承 系統會遍歷父程序的控制代碼表將所有有效的控制代碼完整的複製到子程序的控制代碼表中 這個動作只會在建立子程序的進行一次,後續父程序再建立控制代碼物件...