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. 🙂


  • Mod

    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.


Anmelden zum Antworten