草庐IT

CreateFileMapping

全部标签

windows - 处理巨大的位图

我需要在我的MFC/WinAPI应用程序窗口上显示位图。位图大小可能不同——例如40MB、100MB、500MB、700MB、1GB等等。不适合应用程序窗口的巨大位图应使用滚动条显示。问题是即使通过CreateFileMapping+CreateDIBSection分配内存,系统也无法为一些巨大的尺寸创建位图。是否有处理此类案例的方法?我想我需要将我的位图分成许多小块,但我不确定这是正确的方法。 最佳答案 您无法创建多大尺寸的位图?您可能会遇到的限制是虚拟地址空间,对于32位代码,虚拟地址空间为2GB、3GB或4GB——具体取决于环

卷的 CreateFileMapping() 失败

我在将部分卷映射到内存时遇到问题。卷已成功打开,我可以从中读取,但CreateFileMapping()失败。GetLastError()返回87,其中有following意思是:“参数不正确。”我已经创建了卷的图像并且它被正确处理了。这就是我打开文件和创建映射的方式:/*openfunction*/fd->handle=CreateFile(name,GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);/*mappingfunction*/LARGE_

c++ - CreateFileMapping 返回 ERROR_INVALID_HANDLE

我是第一次尝试使用CreateFileMapping,当我使用GetLastError()时出现此错误:ERROR_INVALID_HANDLE:Thehandleisinvalid.这是我的代码://createthenameofourfile-mappingobjectnTry++;//EnsuresauniquestringisusedincaseuserclosesandreopenswsprintfA(szName,FS6IPC_MSGNAME1":%X:%X",GetCurrentProcessId(),nTry);//stuffthenameintoaglobalatom

c++ - 在 Windows Mobile 中动态分配内存映射文件的大小

我正在尝试找到一种方法来为不同进程之间共享的内存映射文件动态分配内存。我的设计如下:在WindowsMobile中,我正在编写一个显示线程,它使用共享内存处理来自不同进程的显示部分。计划是创建一个等于屏幕大小的内存映射文件例如:如果屏幕大小是640X480,那么我创建一个640X480X4的BYTE数组,然后与另一个进程共享这个另一个进程更新内存中的hDC显示,然后将更新发送到显示线程以更新设备上的显示。这工作正常,但一个限制是在编译时分配内存,因为我们不能动态分配内存(http://msdn.microsoft.com/en-us/library/aa366542%28v=vs.85

c++ - Windows CreateFileMapping : different file-mapping objects with same backed file

我知道我们可以使用文件映射在两个进程之间共享内容,但这需要相同的文件映射对象。如果每个进程使用自己的文件句柄创建自己的文件映射对象,但每个文件句柄都指向同一个文件,会发生什么情况?谢谢张 最佳答案 来自文档:Creatingafilemappingobjectdoesnotactuallymaptheviewintoaprocessaddressspace.TheMapViewOfFileandMapViewOfFileExfunctionsmapaviewofafileintoaprocessaddressspace.Withon

c - Windows - 如何清理进程异常终止留下的共享内存对象?

我遇到了一个问题,进程异常终止,因此一些共享资源(BaseNamedObjects)未被进程释放。CreateFileMapping函数返回ERROR_ALREADY_EXISTS表示共享内存已经存在。通过CreateFileMapping获取ERROR_ALREADY_EXISTS后返回一个句柄。所以我有以下与上述情况相关的查询:我们可以使用这个返回的句柄执行清理吗?我们可以使用CreateFileMapping返回的句柄吗?如何清理这样的共享内存对象? 最佳答案 返回的句柄对您继续使用是完全有效的,使用完毕后请关闭该句柄。但是,

windows - 具有部分对象(CreateFileMapping)的 I/O 是否比基本 api(Read/WriteFile)更快?

CreateFileMapping和MapViewOfFile,然后我们使用类似memcpy的函数进行I/O。只需使用读/写文件。第一个比第二个快吗?我不明白。为什么更快?如果我们使用节对象,那么我们可以从VMM或缓存​​管理器中获得更多的缓存优势吗? 最佳答案 发生页面调出时,文件内存映射速度更快,因为文件本身用作分页存储。如果内存映射文件中的内存未更改,则无需将页面刷新到页面文件,因为数据已经在文件中,Windows可以从磁盘重新读取页面。.EXE和.DLL文件使用此机制加载,因此是它们自己的页面存储。如果内存映射文件中的内存被

windows - 全局命名空间 CreateFileMapping 和 SeCreateGlobalPrivilege

我正在使用共享内存映射进行进程间通信。该映射需要在session之间可见,因此我试图在全局命名空间中创建它。我知道正在运行的用户需要SeCreateGlobalPrivilege才能使其正常工作。我已经编辑了本地安全策略(我不在域中)以授予我的用户“创建全局对象”权限,但是当我运行应用程序时,此权限不在访问token中。如果我以管理员身份运行,我会获得特权。我错过了什么?为什么我得不到这个特权? 最佳答案 在调用CreateFileMapping()之前尝试使用OpenThreadToken()和AdjustTokenPrivile

c - Windows 上的共享内存,可以由单独的进程访问(读取和写入)

我可以在Windows上使用共享内存,以便拥有一个可供多个独立进程使用的公共(public)内存区域吗?上下文:将unix应用程序移植到Windows,它具有:-创建多个共享内存区域的“设置”过程。-一组其他进程(在设置过程已经完成时运行)读取(偶尔写入)已准备好的内存区域设置过程我已经尝试过CreateFileMapping(INVALID_HANDLE_VALUE,...)/OpenFileMapping但共享内存似乎在创建进程退出后立即被释放。我应该创建真实的(即在文件系统上的)文件并打开这些文件而不是使用INVALID_HANDLE_VALUE吗?

c - 如果我打算通过多个进程访问文件的多个部分,使用 CreateFileMapping 和 MapViewOfFile 的正确方法是什么?

我正在用C编写一个组件,它将被几个不同的进程使用,它们都访问同一个文件。每个进程将同时访问文件的不同部分,主要用于读取,也用于写入。我想弄清楚正确的方法是:选项A:对于每个进程,为整个文件调用一次CreateFileMapping,然后在不同部分多次使用MapViewOfFile来访问它需要的部分,这意味着如果我有10个部分我想访问,我将为整个文件调用一次CreateFileMapping,端到端,然后MapViewOfFile10次,文件的每个部分一次。或选项B:对于每个要访问的每个特定部分调用CreateFileMapping和MapViewOfFile的进程,这意味着如果我有10