#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
BOOL GetMapAddr(char* lpFileName, DWORD& dwAddr)
{
HANDLE hFile = INVALID_HANDLE_VALUE;
HANDLE hMap = INVALID_HANDLE_VALUE;
BOOL bRet = FALSE;
hFile = CreateFile(lpFileName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
goto Exit0;
hMap = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL);
if (hMap == NULL)
goto Exit0;
dwAddr = (DWORD)MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
if (dwAddr == NULL)
goto Exit0;
bRet = TRUE;
Exit0:
if (hMap != INVALID_HANDLE_VALUE)
{
CloseHandle(hMap);
}
if (hFile != INVALID_HANDLE_VALUE)
{
CloseHandle(hFile);
}
return bRet;
}
int main(int argc, char* argv[])
{
DWORD dwAddr = 0;
if (GetMapAddr("a.txt", dwAddr))
{
strcat((char*)dwAddr, "a.txt");
int nLen = strlen((char*)dwAddr);
FlushViewOfFile((LPVOID)dwAddr, nLen);
printf("%s\r\n", (char*)dwAddr);
if (!UnmapViewOfFile((LPVOID)dwAddr))
{
printf("UnmapViewOfFile error!\r\n");
}
}
system("pause");
return 0;
}