StackOverflow bei CreateFileW
-
Guten Tag,
ich habe ein Problem mit einer Prozedur, die ich geschrieben habe.
Und zwar wirft er mir ein StackOverflow, wenn er CreateFileW erreicht.
#include "Inc.h" #define SHREDDER_MAX_BUFFER 1048576 bool Shredder(LPCWSTR lpFileName, int recurrences) { HANDLE hFile = CreateFileW(lpFileName, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // Check, wheather open failed if (hFile == NULL) return false; // gets the file size. if file is larger then dword it fails DWORD dwFileSize = GetFileSize(hFile, NULL); for (int i = 0; i < recurrences; i++) { char value = (i%3 == 0) ? -1 : ((i%3 == 1) ? 0 : 255); char buffer[SHREDDER_MAX_BUFFER]; for (int i = 0; i < SHREDDER_MAX_BUFFER; i++) { // makes it random from zero to 8 bit if (value >= 0) buffer[i] = value; else buffer[i] = rand()%255; } DWORD dwWritten; if (dwFileSize > 0) { WriteFile(hFile, &buffer, dwFileSize, &dwWritten, NULL); if (dwFileSize > dwWritten) return false; } } // perform close action CloseHandle(hFile); // return deletefile return DeleteFileW(lpFileName); return true; }
Was könnte daran falsch sein?
Vielen Dank schonmal.
-
Der Stack der in der Funktion benötigt wird, wird bereits zu Beginn der Funktion alloziert. Das Du die Variable buffer erst in einem inneren Block allozierst spielt keine Rolle.
1MB ist die Größe des Standard Stacks.
Verwende den Heap, bzw. verwende einfach einen kleineren Puffer für das überschreiben. 4KB sollten genügen. Damit kommt das OS gut klar.