//首先导入命名空间 using System.Runtime.InteropServices; /// <summary> /// 在指定进程的虚拟地址空间中保留或开辟一段区域..除非MEM_RESET被使用,否则将该内存区域初始化为0. /// </summary> /// <param name="process">需要在其中分配空间的进程的句柄.这个句柄必须拥有PROCESS_VM_OPERATION访问权限</param> /// <param name="pAddress">想要获取的地址区域.一般用NULL自动分配</param> /// <param name="size">要分配的内存大小.字节单位.注意实际分 配的内存大小是页内存大小的整数倍</param> /// <param name="type">内存分配的类型</param> /// <param name="protect">内存页保护</param> /// <returns>执行成功就返回分配内存的首地址,失败返回0。</returns> [DllImport("kernel32.dll")] //声明API函数 public static extern int VirtualAllocEx(IntPtr process, int pAddress, int size, int type, int protect); /// <summary> /// 写入某一进程的内存区域。入口区必须可以访问,否则操作将失败 /// </summary> /// <param name="process">进程句柄</param> /// <param name="baseAddress">要写的内存首地址</param> /// <param name="buffer">指向要写的数据的指针(数据当前存放地址)。</param> /// <param name="nSize">要写入的字节数。</param> /// <param name="lpNumberOfBytesWritten">实际数据的长度</param> /// <returns>非零表示成功,零表示失