1、通過「控制代碼繼承」實現核心物件的共享
父程序**:
#include "stdafx.h"
#include #define max_buffer_size 2048
int main(int argc,char * argv)
lpfilebuffer = heapalloc(getprocessheap(), // 堆控制代碼
0, // 堆分配控制標誌
max_buffer_size); // 分配的位元組數
while(1)
if(dwbytesinfile > max_buffer_size)else
} printf("parent process id:%d\n",getcurrentprocessid());
printf("[parent]the value of the handle is %u\n",hfile);
printf("[parent]the index of the handle in table is:%u\n",((dword)hfile/4));
printf("[parent]the content of the robots.txt:\n%s\n\n\n",lpfilebuffer);
//最好將要傳遞給子程序引數命令列的值存放在快取中
lpstr lpcommandline; //定義乙個字串指標以存放核心物件控制代碼
lpcommandline = (lpstr)heapalloc(getprocessheap(),0,256); //為字串指標分配記憶體
zeromemory(lpcommandline, 256);
ltoa((dword)hfile,lpcommandline,10); //將handle控制代碼轉換為字串型別儲存
// 定義建立程序時,要用到的兩個物件
startupinfo si;
process_information pi;
zeromemory(&si,sizeof(si));
si.cb = sizeof(si);
zeromemory(&pi,sizeof(pi));
bool bret = createprocess("..\\debug\\childprocess.exe", // 新程序要執行的可執行檔名稱
lpcommandline, // 要傳遞給新程序的命令列字串
null, // 程序的安全屬性
null, // 執行緒的安全屬性
true, // 是否可以被繼承
0, // 建立標誌
null, // 新程序要使用的環境字串
null, // 子程序的當前目錄
&si,
&pi);
if (!bret)
printf("child process created successed.\n\n\n");
closehandle(hfile);
waitforsingleobject(pi.hprocess,infinite);
closehandle(pi.hprocess);
closehandle(pi.hthread);
system("pause");
return 0;
}
子程序**:
#include #include using std::cout;
using std::endl;
#define max_buffer_size 1024
int main(int argc,char * argv)
printf("child process id:%d\n",getcurrentprocessid());
printf("[child]the value of the handle is %u\n",(dword)hchildfile);
printf("[child]the index of the handle in table is:%u\n",((dword)hchildfile/4));
printf("[child]the content of the robots.txt:\n%s\n\n\n",lpfilebuffer);
closehandle(hchildfile);
return 0;
}
多程序共享核心物件
首先,核心物件是什麼?引用 windows核心程式設計 原文 每個核心物件都只是乙個記憶體塊,它由作業系統核心 ring0 分配,並只能由作業系統核心訪問。核心物件存在於程序虛擬位址空間的高位址 32位 0x80000000 0xffffffff 它由三個部分組成 物件頭 object header...
核心物件 2 之跨越邊界程序共享核心物件
在兩個程序之間共享核心物件的方法有很多 1.通過物件控制代碼的繼承性共享核心物件,但是這兩個程序之間必須要存在父子關係 步驟是 建立乙個核心物件,將該核心物件的安全屬性的binherithandle屬性置為true,再用createprocess建立乙個程序,將引數中的binherithandles...
白話windows核心物件共享之複製物件控制代碼
引子 話說老王的果園大豐收,老王心花怒放,帶著全家去美國阿拉斯加度假。阿拉斯加有很多東西琳琅滿目,都是中國沒有的,老王及家人都過了一把購物癮。但是有一次卻遇到了比較尷尬的事。怎麼回事呢?原來老王第一次出國,在買地攤上的東西時討價還價100元,但是給人家的卻是100元人民幣,人家自然不幹撒,你100元...