地址窗口扩展AWE写入数据发生访问冲突的错误 - C++ Builder / Windows SDK/API
ULONG_PTR ulRAMBytes=1024*1024;
SYSTEM_INFO sinf;
GetSystemInfo(&sinf);
LPVOID pvWindow=(LPVOID)VirtualAlloc(NULL,ulRAMBytes,MEM_RESERVE | MEM_PHYSICAL,PAGE_READWRITE);
ULONG_PTR ulRAMPages=(ulRAMBytes+sinf.dwPageSize-1);
ULONG_PTR * aRAMPages=(ULONG_PTR*)new ULONG_PTR[ulRAMPages];
AllocateUserPhysicalPages(GetCurrentProcess(),&ulRAMPages,aRAMPages);
MapUserPhysicalPages(pvWindow,ulRAMPages,aRAMPages);
unsigned char *ustr = (unsigned char *) pvWindow;
ustr[0]=0x89;
FreeUserPhysicalPages(GetCurrentProcess(),&ulRAMPages,aRAMPages);
VirtualFree(pvWindow,0,MEM_RELEASE);
delete[] aRAMPages;
代码是windows核心第五版书中的...我加了
unsigned char *ustr = (unsigned char *) pvWindow;
ustr[0]=0x89;
两行...
出现0x00416913 处未处理的异常: 0xC0000005: 写入位置 0x01010000 时发生访问冲突的错误。
将LPVOID pvWindow=(LPVOID)VirtualAlloc(NULL,ulRAMBytes,MEM_RESERVE | MEM_PHYSICAL,PAGE_READWRITE);的第三个参数改为MEM_RESERVE | MEM_COMMIT就不会出现错误了。但是这样是不是就不是AWE了?
[解决办法]
你的系统有没有启用AWE?你的应用程序是否有启用AWE?