小弟在使用内存映射技术进行进程间通信,进程A在每次发送数据的时候均执行如下过程,
映射已经使用CreateFileMapping创建好的内存映射文件到本进程的地址空间,
如果成功,则使用此地址,写入数据;如果不成功,则关闭内存映射文件的句柄,重新
创建之,并再次映射。此段逻辑代码在某些机器上长时间运行无误,在有些机器上则会运行若干小时后发生映射
失败的情况,并在内存映射文件重新创建后,仍旧失败。百思不得其解,请指教运行环境:Windows 2K NTFS文件系统buf_s_pri_p = MapViewOfFile(buf_s_pri, FILE_MAP_WRITE, 0, 0, 0);
if(buf_s_pri_p == NULL)
{
CloseHandle(buf_s_pri);buf_s_pri = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, getSBufSize() * 1024, getSBufName());if(buf_s_pri == NULL)
  return false;buf_s_pri_p = (Private_Buf*)MapViewOfFile(buf_s_pri, FILE_MAP_WRITE, 0, 0, 0);
if(buf_s_pri_p == NULL)
 return false;
}

解决方案 »

  1.   

    buf_s_pri = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, getSBufSize() * 1024, getSBufName());这样用得了,不存在就会自己创建的
      

  2.   

    #define INVALID_HANDLE_VALUE  ((HANDLE)((LONG_PTR)-1))这个就是0xFFFFFFFF啊本来此处应该指定文件句柄,如果传入上述值,就直接在内存分页中创建吧我这里呢 创建是成功的 但map会失败 而且一直失败下去
      

  3.   

    奥 还有 我的程序以系统服务方式运行,并用SetNamedSecurityInfo设置了安全级别为内核对象,否则不能在服务程序间共享访问