Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: XKC en 30 Agosto 2018, 20:44 pm



Título: Editar fichero win32
Publicado por: XKC en 30 Agosto 2018, 20:44 pm
Hola buenas,
estoy trabajando con la API de windows.
Bien, la cuestion es que quiero editar un fichero.
Lo abro con CreateFileW asi:
Código:
HANDLE hInpFile = CreateFileW(filename, GENERIC_ALL, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

Ahora, quiero leer y escribir a la vez sobre el, esto seria, leo los X primeros bytes(trato el fichero como binario), los edito en el buffer y quiero volver a escribirlos en su correspondiente posicion.
Código:
while (bResult = ReadFile(hInpFile, chunk, chunk_size, &out_len, NULL)) {
if (0 == out_len) break;

readTotalSize += out_len;
if (readTotalSize == inputSize) isFinal = TRUE;

        // Aqui edito chunk

if (!WriteFile(hInpFile, chunk, sizeof(chunk), &written, NULL)) break;
memset(chunk, 0, chunk_size);
}
La cuestion es que esta fallando por algun motivo, en concreto para un archivo con el texto HOLA MUNDO me añade la edicion detras del mismo y no lo sobreescribe, total queda algo asi.
Fichero original
Código:
HOLA MUNDO
HOLA MUNDO

Resultado que obtengo:
Código:
HOLA MUNDO XXXXXXXXXXXXXXXXXX
HOLA MUNDO XXXXXXXXXXXXXXXXXX

Resultado que espero:
Código:
XXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXX

Comentar que se que esto la manera de hacerlo correctamente seria con un stream, pero en este caso necesito utilizar estas funciones de la API.
Muchas gracias


Título: Re: Editar fichero win32
Publicado por: ivancea96 en 30 Agosto 2018, 21:02 pm
El resultado que obtienes es igual al que esperas?


Título: Re: Editar fichero win32
Publicado por: XKC en 30 Agosto 2018, 21:06 pm
El resultado que obtienes es igual al que esperas?
No, perdona, edito.

Simplemente necesito leer X bytes de un fichero, editarlos en el buffer que los lei y volver a escribirlos en donde estaban.


Título: Re: Editar fichero win32
Publicado por: MAFUS en 30 Agosto 2018, 21:58 pm
En API Windows ni idea.
Pero la idea sería que volvieras atrás el puntero del archivo tantos bytes como leíste, grabas  tantos bytes como leíste y continuas con la siguiente escritura.

Un fseek si se usara la biblioteca estándar.


Título: Re: Editar fichero win32
Publicado por: MCKSys Argentina en 31 Agosto 2018, 17:41 pm
Hola!

Probaste usar SetFilePointer (https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setfilepointer)?

Saludos!