[BCB] CreatFileMapping -> ACCESS_DENIED

0

W jaki sposób otrzymać dostęp do zapisu zmapowanego pliku?
Próbowałem tak, ale nie działa:

plik=CreateFile(sPlik,GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
uchwyt=CreateFileMapping(plik,0,PAGE_READWRITE,0,0,"unikalny tekst");

plik i uchwyt są typu HANDLE
Funkcja GetLastError() zwraca 5, czyli ACCESS_DENIED
Jesli to ma znaczenie, to korzystam z systemu Windows Xp

Mapowanie pliku tylko do odczytu działa sprawnie i wykonuję to tak:

plik=CreateFile(sPlik,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
uchwyt=CreateFileMapping(plik,0,PAGE_READONLY,0,0,"unikalny tekst");

Enybady? :(

0

Co za noc...
Zrobiłem jak widać:
plik=CreateFile(sPlik,GENERIC_READ+GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
uchwyt=CreateFileMapping(plik,0,PAGE_READWRITE,0,0,"unikalny tekst");

i do tego jeszcze:

wojd=MapViewOfFile(uchwyt,FILE_MAP_ALL_ACCESS,0,0,0);

i plik jest mapowany bez problemu
problem mam tylko z zapisem
działam w assemblerze następująco:

cld
mov	esi,DWORD PTR [ebp+16]	;to zapisujemy (tekst)
mov	edi,DWORD PTR [ebp+8]	;tutaj (adres pliku w pamieci)
mov	ecx,DWORD PTR [ebp-4]	;dlugosc tekstu do przepisania
rep	movsb

no i error, że pamięć nie moze być read :(

0

[ebp+16]

upewnij się że funkcja w której jest ta wstawka ma conajmniej 3 parametry, a trzeci z nich jest owym wojd

int foo(int dokad, int skad, int reserv) {
  int ile
//dokad=[ebp+8]
//skad=[ebp+12]
//reserv=[ebp+16]
//ile=[ebp-4]
0

całkiem wcześnie jeszcze, a mi się udało rozwiązać problem :)
nie mam pojęcia czemu, ale windowsowi nie podobało się rep movsb
ustawienia flagi DF niczego nie zmieniały
dopiero rozpisanie operacji łańcuchowej na normalną sekwencję pomogło:

mov   al,[esi]
mov   [edi],al
inc     esi
inc     edi

dodam, że bardzo pomocna okazała się strona http://free.of.pl/a/asmpage/asmtuts.htm
oraz program tamtejszy Machine Gun: http://free.of.pl/a/asmpage/asmsrc/machinegun.zip

1 użytkowników online, w tym zalogowanych: 0, gości: 1