您的位置:首页 > 编程语言

windows下内核对象的跨边界共享实现一

2010-03-08 22:54 309 查看
前段时间,看了WINDOWS核心编程里面关于内核对象跨边界共享的东东,于是自己写了一个简单的DEMO,以下为简单的代码,如有任何不妥之处请高手指出:

以共享CreateFile返回的内核对象为示例:

在父进程:
   SECURITY_ATTRIBUTES sa;
 sa.nLength=sizeof(sa);
 sa.lpSecurityDescriptor=NULL;
 sa.bInheritHandle=TRUE;  
 m_handle=::CreateFile("1.txt",GENERIC_ALL,FILE_SHARE_READ,&sa,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
 if( INVALID_HANDLE_VALUE==m_handle)
 {
  MessageBox("无法打开指定文件");
 }
 STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi));
 char chHandle[20]={0};
 sprintf(chHandle,"%d",m_handle);
 ::CreateProcess("D://我的程序//InheriteHandle//child//Debug//child.exe",
chHandle,NULL,NULL,TRUE,0,NULL,NULL,&si,&pi);

在子进程获得并使用:
   char *chCmd=GetCommandLine();
 HANDLE hFile=(HANDLE)atoi(chCmd);
 char chData[30]={0};
 unsigned long readedLen=0;
 ReadFile(hFile,chData,4,&readedLen,NULL);
 MessageBox(chData);
 CloseHandle(hFile);

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息