首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

进程间通信的有关问题(在线急等)

2012-01-28 
进程间通信的问题(在线急等)我把一个DLL注入到一传送文件的程序中,用来拦截send函数发送的信息,然后通过Se

进程间通信的问题(在线急等)
我把一个DLL注入到一传送文件的程序中,用来拦截send函数发送的信息,
然后通过
SendMessage(g_hForm,WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds);


发送到一指定窗口

窗口的WM_COPYDATA消息映射函数如下(函数主要完成在指定文件中查找拦截到的数据):
//功能:   截获文件传送过程中的数据块,然后在一确定文件中查找看该文件中是否包含这段数据块,SameNum用来统计查找成功的次数
BOOL   CDwormDlg::OnCopyData(CWnd*   pWnd,   COPYDATASTRUCT*   pCopyDataStruct)  
{
//   TODO:   Add   your   message   handler   code   here   and/or   call   default


                  m_cCopyData=(LPSTR)pCopyDataStruct-> lpData;
m_cCopyData=m_cCopyData.Left(pCopyDataStruct-> cbData);
int   nDataNum=m_cCopyData.GetLength();
int   nStrLen=nDataNum/2;
m_cCopyData=m_cCopyData.Left(nStrLen);

//UpdateData(FALSE);
                    char   lpFileName[MAX_PATH];
DWORD   Ret=GetFullPathName((LPCTSTR)m_cFile,MAX_PATH,
                                                                                        (LPTSTR)lpFileName,NULL);
      //错误判断  
if(Ret==0)
AfxMessageBox( "未发现! ");  
     
//   char*   lpFileName   =   "D:\\test.exe ";
 
      CFile   file;
      if(!file.Open(lpFileName,CFile::modeRead,NULL))
      {
      AfxMessageBox( "未打开文件! ");
              return   FALSE;
      }
          CFileStatus   FileStatus;

     
  if(!file.GetStatus(lpFileName,FileStatus))
  return   FALSE;
  file.SeekToBegin();
 
      CString   strBuff;
      int   nRes=-1,SameNum=0;
     
strBuff.GetBufferSetLength(1024);
 
  for(long   i=0;i <FileStatus.m_size;)
  {
      memset(strBuff.GetBuffer(0), '\0 ',1024);  
    file.Read(strBuff.GetBuffer(0),1024);
     
  nRes=strBuff.Find(m_cCopyData);
 
if(nRes!=-1)
{
                                            SameNum++;
    if(SameNum> =2)
        //发现
      {
              AfxMessageBox( "发现! ");                         //报警
            //   MessageBeep(0xFFFFFFFF);  
                  file.Close();
  return   TRUE;
     
        }
}
  else  
  {
  file.Seek((i+1024)-nStrLen,CFile::begin);    
  i=i+1024-nStrLen;
 
    }

 


     

      }
  file.Close();


return   CDialog::OnCopyData(pWnd,   pCopyDataStruct);
}

请有空的朋友给看一下,小弟的程序有什么不妥的地方   ,怎么实现不预期功能.
  我通过观察发现:窗口可以接受到SendMessage发来的消息.
而且用这段程序去拦截聊天信息并显示都正常


   


[解决办法]
这样写当然不行了,你是在目标进程中分配的数据,怎么可能在另一个进程取得

GlobalAlloc 来分配共享内存
GlobalLock 来锁住内存
GlobalUnlock解锁全局内存块
GlobalFree 释放内存块


热点排行