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.


Log in to reply