powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Read\Write To Memory Mapped File
10 сообщений из 10, страница 1 из 1
Read\Write To Memory Mapped File
    #33426079
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробую написать програмулину, чтобы можна было читать/писать в существующий файл через память. По завершения программы - файл не обновляется. Это вообще можно делать? Если да, то как?

Спасиба.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
// Encrypt.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>
#include <windows.h>

void print_last_err()
{
	LPVOID lpMsgBuf;
	FormatMessage( 
		FORMAT_MESSAGE_ALLOCATE_BUFFER | 
		FORMAT_MESSAGE_FROM_SYSTEM | 
		FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL,
		GetLastError(),
		 0 , // Default language
		(LPTSTR) &lpMsgBuf,
		 0 ,
		NULL 
	);
	printf((LPCTSTR)lpMsgBuf);
	LocalFree( lpMsgBuf );
}
int _tmain(int argc, _TCHAR* argv[])
{
	printf("File Encryptor.");
	HANDLE hFile= CreateFile("D:\\Visual Studio Projects\\Encrypt\\Debug\\testfile.bin", 
							 GENERIC_READ || GENERIC_WRITE,
							 FILE_SHARE_READ || FILE_SHARE_WRITE,
							  0 ,
							 OPEN_EXISTING,
							 FILE_FLAG_SEQUENTIAL_SCAN,
							  0 );

	if (hFile != INVALID_HANDLE_VALUE)
	{
		HANDLE hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, 
											NULL,
											PAGE_READWRITE | SEC_COMMIT,
											 0 ,
											 1000 ,
											 0 );
		if (hFileMap != NULL )
		{
		  LPVOID lpMapAddress = MapViewOfFile(hFileMap, 
										FILE_MAP_ALL_ACCESS,
										 0 ,
										 0 ,
										 0 );
		  if (lpMapAddress != NULL)
		  {
			  LPVOID lpMapAddressStart = lpMapAddress;
			  char buff[ 1000 ];
			  memcpy(buff, (LPVOID)lpMapAddressStart,  20 );
			  //lpMapAddress = (LPVOID)"WWWWWWWWWWWWWWWWWWWWWWWW";
			  if (!FlushViewOfFile(lpMapAddressStart,  0 ))
				  print_last_err();
		  }
		  else
			  print_last_err();

		}
		else
			print_last_err();

		CloseHandle(hFileMap);

	}else
		print_last_err();

	CloseHandle(hFile);

	return  0 ;
}
...
Рейтинг: 0 / 0
Read\Write To Memory Mapped File
    #33426205
HANDLE hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1000, 0);

и хде тута хэндл файла?
...
Рейтинг: 0 / 0
Read\Write To Memory Mapped File
    #33426217
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дурацкий вопросHANDLE hFileMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1000, 0);

и хде тута хэндл файла?

Точно замечено :) Дал не тот сорс код. Пробовал и с хендлом файла. На READ_ONLY еще открывает, а на READWRITE дает ошибку Access Denied. Прошелся по интернету, говорят с некоторых пор CreateFileMapping стала превилигированной операцией, требуется настройка DACL (второй параметр фунции), как - непонятно. Хотя если процесс исполняется в текущей сессии пользователя, а оно так, должен и дефолт (NULL) DACL работать. Вдвойне не понятно. Ну а вобще, можно ли открыть существующий факл на диске таким вензелем и read/write в него, а?
...
Рейтинг: 0 / 0
Read\Write To Memory Mapped File
    #33426230
GENERIC_READ || GENERIC_WRITE

Это что за операция такая?
...
Рейтинг: 0 / 0
Read\Write To Memory Mapped File
    #33426246
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасиба, почти работает. Вот там, где <--AV ложится. ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
// Encrypt.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <conio.h>
#include <windows.h>
#include <sddl.h>

void print_last_err()
{
	LPVOID lpMsgBuf;
	FormatMessage( 
		FORMAT_MESSAGE_ALLOCATE_BUFFER | 
		FORMAT_MESSAGE_FROM_SYSTEM | 
		FORMAT_MESSAGE_IGNORE_INSERTS,
		NULL,
		GetLastError(),
		 0 , // Default language
		(LPTSTR) &lpMsgBuf,
		 0 ,
		NULL 
	);
	printf((LPCTSTR)lpMsgBuf);
	LocalFree( lpMsgBuf );
}


int _tmain(int argc, _TCHAR* argv[])
{
	printf("File Encryptor.");

	HANDLE hFile= CreateFile("D:\\Visual Studio Projects\\Encrypt\\Debug\\testfile.bin", 
							 GENERIC_READ | GENERIC_WRITE,
							 FILE_SHARE_WRITE,
							  0 ,
							 OPEN_EXISTING,
							 FILE_ATTRIBUTE_TEMPORARY,
							  0 );

	DWORD nFileSize = GetFileSize(hFile, NULL);

	if (hFile != INVALID_HANDLE_VALUE)
	{
		HANDLE hFileMap = CreateFileMapping(hFile/*INVALID_HANDLE_VALUE*/, 
											NULL,
											PAGE_READWRITE,
											 0 ,
											 0 ,
											 0 );
		if (hFileMap != NULL )
		{
			LPVOID lpMapAddress = MapViewOfFile(hFileMap, 
										FILE_MAP_READ,
										 0 ,
										 0 ,
										 0 );
			if (lpMapAddress != NULL)
			{
				LPVOID lpMapAddressStart = lpMapAddress;
				char buff[ 1000 ];
				memcpy(buff, lpMapAddressStart, nFileSize);
				memcpy(lpMapAddressStart), buff, nFileSize);//<-- AV
				if (!FlushViewOfFile(lpMapAddressStart,  0 ))
					  print_last_err();
			}
			else
				print_last_err();

		}
		else
			print_last_err();

		CloseHandle(hFileMap);

	}else
		print_last_err();

	CloseHandle(hFile);

	return  0 ;
}
...
Рейтинг: 0 / 0
Read\Write To Memory Mapped File
    #33426854
LPVOID lpMapAddress = MapViewOfFile(hFileMap, FILE_MAP_READ , 0, 0, 0);

FILE_MAP_ALL_ACCESS
...
Рейтинг: 0 / 0
Read\Write To Memory Mapped File
    #33428313
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты документацию читаешь?LPVOID lpMapAddress = MapViewOfFile(hFileMap, FILE_MAP_READ , 0, 0, 0);

FILE_MAP_ALL_ACCESS

Спасиба работает. Документацию некогда читать, просто переделывалось с readonly проджекта, ну и не все было вычищено :)
...
Рейтинг: 0 / 0
Read\Write To Memory Mapped File
    #33428612
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написан простой перекодировщик файлов с использованием CreateFile\ReadFile\WriteFile и Memory Mapped File. Второй дает выиграш по скорости в 1.5 раза, что особенно ценно при перекодировке гигабайтных файлов.
...
Рейтинг: 0 / 0
Read\Write To Memory Mapped File
    #33428631
гы-гы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так это не выигрышь, это так - "гуляем"
...
Рейтинг: 0 / 0
Read\Write To Memory Mapped File
    #33428687
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гы-гытак это не выигрышь, это так - "гуляем"
Предложи варианты.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Read\Write To Memory Mapped File
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]