Пожалуйста, посмотрите на этот код ниже.
#include <windows.h>
void Write(char *pBuffer)
{
// pBuffer -= 4*sizeof(int);
for(int i = 0; i<20; i++)
*(pBuffer + sizeof(int)*i) = i+1;
}
void main()
{
HANDLE hFile = ::CreateFile("file", GENERIC_READ|GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(INVALID_HANDLE_VALUE == hFile)
{
::MessageBox(NULL, "", "Error", 0);
return;
}
HANDLE hMMF = ::CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 32, NULL);
char *pBuffer = (char*)::MapViewOfFile(hMMF, FILE_MAP_WRITE, 0, 0, 0);
Write(pBuffer);
::FlushViewOfFile(pBuffer, 100);
::UnmapViewOfFile(pBuffer);
}
Я выделил только 32 байта, но когда я пытаюсь записать после выделенного размера, я не получаю никакой ошибки вообще.Это по замыслу или это ошибка в коде Windows?Однако, если вы включите закомментированную часть, она выдаст ошибку, как и ожидалось.
Я спрашиваю об этом, потому что думаю об использовании этой «функции» в своих интересах.Могу я?К вашему сведению, у меня Win XP ver 2002 SP 3, но я подозреваю, что это «исправлено» в новой Windows, что может привести к сбою моего кода, IDK.Любая полезная ссылка, объясняющая некоторые внутренности этого, действительно помогла бы.
Спасибо