快速业务通道

用C++ Builder编HOOK程序

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30

               Size,
               ShareName);
       ShareP=(char *)MapViewOfFile(fh,
               FILE_MAP_ALL_ACCESS,
               0,0,0);
       if (GetLastError()!=ERROR_ALREADY_EXISTS)
         ZeroMemory(ShareP,size); // 共享区初始化
       return(fh);
    }
char * ShareP=NULL;
void test() // 申请一块128个字节的字符数组
    {
      HANDLE fh=GetShare(ShareP,128,"ShareForMyProg");
      for (int i=0;i<128;i++)
        ShareP[i]=i;
      CloseHandle(fh);
    }

如果你的多个程序之间或同一个程序多次同时运行,也可借助这个办法进

变量通讯;

在VC++中,若要为DLL定义一个共享内存段更简单,这是一种直接定义的

办法:

   #pragma  data_seg("Shared")
    int x,y;
    char s[128];
    #pragma  data_seg
    #pragma  comment(linker,"/section:Shared,rws")

真简单,可惜在C++BUILDER5.0中经试验好象不能接受这种方法;

对于BCB,能不能实现DLL中直接定义共享内存块内,请看下列一段文字:

http://community.borland.com/article/0,1410,20008,00.html
///
C++Builder 4.0 is the first C++Builder compiler that supports shared memory segments.
This document explains how to use this feature in windows DLL.
To change the data segment and the class name, you need to add
#pragma option -zR[SEGMENT NAME] and
#pragma option -zT[CLASS NAME] to the file you want the data shared from.
Below is the source file I am going to export the integer named ''data'':
File: SharedData.cpp
//---------------------------------------------------------------------------
// Borland C++Builder
// Copyright (c) 1987, 1999 Inprise Corporation. All Rights Reserved.
//---------------------------------------------------------------------------
#pragma option -zRSHSEG   // change default data segment name
#pragma option -zTSHCLASS  // change default data class name
// Here is the initialized data that will be shared.
int data = 0;
Notice that the segment name for this file is: SHSEGSHCLASS. A .def file
is required for the linker to create the shared segement. Below is what the
.def file looks like:
File: Shared.def
LIBRARY SHAREDDLL
SEGMENTS
  SHSEG CLASS ''SHCLASS'' SHARED
 

可见C++BUILDER4.0与DELPHI已能提供直接实现DLL内存段共享问题,请高手邦忙一起

试一试:在BCB或DELPHI具体应怎样做?

// 下面的程序将产生有三个导出函数的MouseHook.DLL

#include <windows.h>
#pragma argsused
typedef     // 为共享区定义结构
   struct
     {
      POINT MouseLoc; // 存放鼠标位置
      HHOOK NewHook;  // 存放新钩子句柄
      int  LoadCount; // DLL装入次数计数
     } TShareMem;
TShareMem *ShareMem=NULL;
HINSTANCE DllHinst;
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
   DllHinst=hinst;
   static HANDLE fh; // DLL共享区句柄
   if (reason==DLL_PROCESS_ATTACH)  // DLL入口
     {        // 为共享区申请共享单元
      fh=CreateFileMapping((HANDLE)-1,0,
                PAGE_READWRITE,0,
        

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号