<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[StackOverflow bei CreateFileW]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich habe ein Problem mit einer Prozedur, die ich geschrieben habe.</p>
<p>Und zwar wirft er mir ein StackOverflow, wenn er CreateFileW erreicht.</p>
<pre><code class="language-cpp">#include &quot;Inc.h&quot;

#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 &lt; recurrences; i++)
	{
		char value = (i%3 == 0) ? -1 : ((i%3 == 1) ? 0 : 255);
		char buffer[SHREDDER_MAX_BUFFER];

		for (int i = 0; i &lt; SHREDDER_MAX_BUFFER; i++)
		{
			// makes it random from zero to 8 bit
			if (value &gt;= 0)
				buffer[i] = value;
			else
				buffer[i] = rand()%255;
		}

		DWORD dwWritten;

		if (dwFileSize &gt; 0)
		{
			WriteFile(hFile,
					  &amp;buffer,
					  dwFileSize,
					  &amp;dwWritten,
					  NULL);

			if (dwFileSize &gt; dwWritten)
				return false;
		}
	}

	// perform close action
	CloseHandle(hFile);

	// return deletefile return
	DeleteFileW(lpFileName);
	return true;
}
</code></pre>
<p>Was könnte daran falsch sein?</p>
<p>Vielen Dank schonmal. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/203073/stackoverflow-bei-createfilew</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 11:43:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203073.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Jan 2008 14:25:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to StackOverflow bei CreateFileW on Fri, 18 Jan 2008 14:25:57 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich habe ein Problem mit einer Prozedur, die ich geschrieben habe.</p>
<p>Und zwar wirft er mir ein StackOverflow, wenn er CreateFileW erreicht.</p>
<pre><code class="language-cpp">#include &quot;Inc.h&quot;

#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 &lt; recurrences; i++)
	{
		char value = (i%3 == 0) ? -1 : ((i%3 == 1) ? 0 : 255);
		char buffer[SHREDDER_MAX_BUFFER];

		for (int i = 0; i &lt; SHREDDER_MAX_BUFFER; i++)
		{
			// makes it random from zero to 8 bit
			if (value &gt;= 0)
				buffer[i] = value;
			else
				buffer[i] = rand()%255;
		}

		DWORD dwWritten;

		if (dwFileSize &gt; 0)
		{
			WriteFile(hFile,
					  &amp;buffer,
					  dwFileSize,
					  &amp;dwWritten,
					  NULL);

			if (dwFileSize &gt; dwWritten)
				return false;
		}
	}

	// perform close action
	CloseHandle(hFile);

	// return deletefile return
	DeleteFileW(lpFileName);
	return true;
}
</code></pre>
<p>Was könnte daran falsch sein?</p>
<p>Vielen Dank schonmal. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439068</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439068</guid><dc:creator><![CDATA[Script-Styler]]></dc:creator><pubDate>Fri, 18 Jan 2008 14:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to StackOverflow bei CreateFileW on Fri, 18 Jan 2008 14:46:38 GMT]]></title><description><![CDATA[<p>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.</p>
<p>1MB ist die Größe des Standard Stacks.<br />
Verwende den Heap, bzw. verwende einfach einen kleineren Puffer für das überschreiben. 4KB sollten genügen. Damit kommt das OS gut klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439086</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 18 Jan 2008 14:46:38 GMT</pubDate></item></channel></rss>