<?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[UpdateResource ()]]></title><description><![CDATA[<p>guten tag allerseits .<br />
folgendes :<br />
ich moechte die resourcen einer exe datei durch andere austauschen.<br />
nachdem ich mich in der msdn naeher informiert habe funktioniert das unter windows 2000 wunderbar.<br />
sinn und zweck war allerdings die ntoskrnl.exe von win2k anpassen zu koennen (bootlogo aendern).<br />
merkwuerdiger weise bekomm ich nach aendern der ntoskrnl.exe mit meinem prg ein fehler beim booten, der darauf hinweist, das diese beschaedigt waere.<br />
ich habe zum test eine ntoskrnl.exe mit der software reshacker modifiziert, welche einwandfrei arbeitet.<br />
die mit meinemn prg erstellte ntoskrnl.exe weisst nun trotz gleicher bmp einige unterschiede in einem hex editor auf.<br />
die groesse der datei ist absolut gleich, auch die groesse der bmp datei (laut reshacker) sind gleich.<br />
mit normalen win32 anwendungen funktioniert es auch einwand frei, nur halt nicht mit der datei ntoskrnl.exe.</p>
<p>hier ein ausschnitt aus dem code :</p>
<pre><code class="language-cpp">CFile booti;
	CString tmp,ntdatei=m_windir+m_bootein.Mid(8);
	HANDLE hfile,hResource;
	DWORD dwFileSize,dwBytesRead;
	BYTE *lpBuffer;

	hfile = CreateFile(m_bitmap, GENERIC_READ, 
                   0,
                   NULL,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL,
                   NULL);
	if (hfile == INVALID_HANDLE_VALUE )
	{
		MessageBox(_T(&quot;load error&quot;));
		return;
	}
	dwFileSize = GetFileSize(hfile, NULL);

    lpBuffer = new BYTE[dwFileSize];

    if (ReadFile(hfile, lpBuffer, dwFileSize, &amp;dwBytesRead, NULL) == FALSE)
    {
		delete [] lpBuffer;
		CloseHandle(hfile);
		MessageBox(_T(&quot;lese fehler&quot;));
		return;
    }
	CloseHandle(hfile);

	if (CopyFile(m_windir+&quot;ntoskrnl.exe&quot;,ntdatei,true)==NULL)
	{
		delete [] lpBuffer;
		MessageBox(_T(&quot;copy fehler&quot;));
		return;
	}

	hResource = BeginUpdateResource(ntdatei, FALSE);
	if (NULL != hResource)
	{
		if (UpdateResource(hResource, 
			RT_BITMAP,
			MAKEINTRESOURCE(1),
			MAKELANGID(LANG_GERMAN, SUBLANG_DEFAULT),
			(BYTE*)lpBuffer+14,
			dwFileSize-14) == FALSE)
		{
			MessageBox(_T(&quot;update fehler&quot;));
		}
		if (EndUpdateResource(hResource, FALSE)==FALSE) MessageBox(_T(&quot;updateclose fehler&quot;));
	}

	delete [] lpBuffer;
</code></pre>
<p>der code ist noch etwas &quot;durcheinander&quot; da ich ihn zigmal geaendert habe um tests durchfuehren zu koennen also nicht &quot;meckern&quot;:)</p>
<p>mfg donny <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/211711/updateresource</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 20:36:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/211711.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Apr 2008 14:12:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to UpdateResource () on Sat, 26 Apr 2008 14:12:41 GMT]]></title><description><![CDATA[<p>guten tag allerseits .<br />
folgendes :<br />
ich moechte die resourcen einer exe datei durch andere austauschen.<br />
nachdem ich mich in der msdn naeher informiert habe funktioniert das unter windows 2000 wunderbar.<br />
sinn und zweck war allerdings die ntoskrnl.exe von win2k anpassen zu koennen (bootlogo aendern).<br />
merkwuerdiger weise bekomm ich nach aendern der ntoskrnl.exe mit meinem prg ein fehler beim booten, der darauf hinweist, das diese beschaedigt waere.<br />
ich habe zum test eine ntoskrnl.exe mit der software reshacker modifiziert, welche einwandfrei arbeitet.<br />
die mit meinemn prg erstellte ntoskrnl.exe weisst nun trotz gleicher bmp einige unterschiede in einem hex editor auf.<br />
die groesse der datei ist absolut gleich, auch die groesse der bmp datei (laut reshacker) sind gleich.<br />
mit normalen win32 anwendungen funktioniert es auch einwand frei, nur halt nicht mit der datei ntoskrnl.exe.</p>
<p>hier ein ausschnitt aus dem code :</p>
<pre><code class="language-cpp">CFile booti;
	CString tmp,ntdatei=m_windir+m_bootein.Mid(8);
	HANDLE hfile,hResource;
	DWORD dwFileSize,dwBytesRead;
	BYTE *lpBuffer;

	hfile = CreateFile(m_bitmap, GENERIC_READ, 
                   0,
                   NULL,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL,
                   NULL);
	if (hfile == INVALID_HANDLE_VALUE )
	{
		MessageBox(_T(&quot;load error&quot;));
		return;
	}
	dwFileSize = GetFileSize(hfile, NULL);

    lpBuffer = new BYTE[dwFileSize];

    if (ReadFile(hfile, lpBuffer, dwFileSize, &amp;dwBytesRead, NULL) == FALSE)
    {
		delete [] lpBuffer;
		CloseHandle(hfile);
		MessageBox(_T(&quot;lese fehler&quot;));
		return;
    }
	CloseHandle(hfile);

	if (CopyFile(m_windir+&quot;ntoskrnl.exe&quot;,ntdatei,true)==NULL)
	{
		delete [] lpBuffer;
		MessageBox(_T(&quot;copy fehler&quot;));
		return;
	}

	hResource = BeginUpdateResource(ntdatei, FALSE);
	if (NULL != hResource)
	{
		if (UpdateResource(hResource, 
			RT_BITMAP,
			MAKEINTRESOURCE(1),
			MAKELANGID(LANG_GERMAN, SUBLANG_DEFAULT),
			(BYTE*)lpBuffer+14,
			dwFileSize-14) == FALSE)
		{
			MessageBox(_T(&quot;update fehler&quot;));
		}
		if (EndUpdateResource(hResource, FALSE)==FALSE) MessageBox(_T(&quot;updateclose fehler&quot;));
	}

	delete [] lpBuffer;
</code></pre>
<p>der code ist noch etwas &quot;durcheinander&quot; da ich ihn zigmal geaendert habe um tests durchfuehren zu koennen also nicht &quot;meckern&quot;:)</p>
<p>mfg donny <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1498542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1498542</guid><dc:creator><![CDATA[donbubu]]></dc:creator><pubDate>Sat, 26 Apr 2008 14:12:41 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateResource () on Sun, 27 Apr 2008 14:43:38 GMT]]></title><description><![CDATA[<p>nach laengeren tests scheint es wohl eindeutig an der api zu liegen.<br />
scheint so als muesst ich eine eigene routine dazu schreiben ^^<br />
sobald ich die zeit dazu habe werd ich mich daran ( nicht dranne ^^) setzen und den code dazu hier posten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>mfg donny</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1499045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499045</guid><dc:creator><![CDATA[donbubu]]></dc:creator><pubDate>Sun, 27 Apr 2008 14:43:38 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateResource () on Sun, 27 Apr 2008 15:03:53 GMT]]></title><description><![CDATA[<p>du kannst ja mal <a href="http://www.wilsonc.demon.co.uk/d10resourceeditor.htm" rel="nofollow">XN Resource Editor</a> ausprobieren. Falls der das auch schafft kannst du im Source nachgucken ob es UpdateResource oder was eigenes benutzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1499053</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499053</guid><dc:creator><![CDATA[123]]></dc:creator><pubDate>Sun, 27 Apr 2008 15:03:53 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateResource () on Sun, 27 Apr 2008 20:47:36 GMT]]></title><description><![CDATA[<p>hab ich , hab ich <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="🙂"
    /><br />
beide einstellungen in xn resource editor funktionieren nicht (windows api oder eigener).<br />
aber auf der hp vom reshacker steht, das der reshacker auch unter win95 laeuft, wobei ja updateresource erst ab nt5 vorhanden ist.<br />
damit ergibt sich logischerweise das der reshacker eine sehr ausgefeilte und vor allen dingen eigene routine dafuer nutzt.<br />
wie gesagt ich arbeite mich gerade durch die msdn von wegen mzexe,neexe und den eintraegen von wegen .rscs.<br />
wird wohl noch etwas daueren bis ich das alles zusammen hab. ( dummer hauptschueler ^^)</p>
<p>mfg donny <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1499279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1499279</guid><dc:creator><![CDATA[donbubu]]></dc:creator><pubDate>Sun, 27 Apr 2008 20:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateResource () on Mon, 28 Apr 2008 23:28:07 GMT]]></title><description><![CDATA[<p>so wie es scheint , habe ich den fehler gefunden.<br />
UpdateResource passt die checksum im nt optional header nicht an ...<br />
was soll man dazu noch sagen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
die loesung heisst CheckSumMappedFile .<br />
damit laesst sich die checksum berechnen ,welche dann nur noch an entprechender stelle gschrieben werden muss.<br />
dazu brauch man nur die lib ImageHlp.lib und die header datei Imagehlp.h einzubinden.<br />
bei interesse poste ich gerne noch den code bei, sobald ich fertig bin .</p>
<p>mfg donny <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1500135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500135</guid><dc:creator><![CDATA[donbubu]]></dc:creator><pubDate>Mon, 28 Apr 2008 23:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateResource () on Mon, 28 Apr 2008 23:34:07 GMT]]></title><description><![CDATA[<p>donbubu schrieb:</p>
<blockquote>
<p>bei interesse poste ich gerne noch den code bei, sobald ich fertig bin.</p>
</blockquote>
<p>Ja, doch, bei sowas speziellem findet man sonst immer nur sehr spärlich was <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/1500137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500137</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 28 Apr 2008 23:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateResource () on Tue, 29 Apr 2008 01:09:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>für einen Hauptschüler bist du aber ganz schön gut. Weiter so. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1500145</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500145</guid><dc:creator><![CDATA[topp]]></dc:creator><pubDate>Tue, 29 Apr 2008 01:09:41 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateResource () on Thu, 15 May 2008 19:32:58 GMT]]></title><description><![CDATA[<p>vielen dank <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>
<p>freut mich wenn ich doch mal etwas brauchbares produziere ^^</p>
<pre><code class="language-cpp">HANDLE hfile=INVALID_HANDLE_VALUE,hResource=NULL,hfilemap=NULL;;
	DWORD dwFileSize=0,dwBytesRead=0,filechsum=0,clacsum=0;;
	BYTE *lpBuffer;
	IMAGE_NT_HEADERS *tmpntheader=NULL;
	PVOID startaddmap=NULL;

	hfile = CreateFile(L&quot;c:\\boot.bmp&quot;, //bmp im format : 640 x 480 4bpp (16 farben)
				   GENERIC_READ,
                   0,
                   NULL,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL,
                   NULL);
	if (hfile == INVALID_HANDLE_VALUE )
	{
		MessageBox(_T(&quot;load error&quot;));
		return;
	}
	dwFileSize = GetFileSize(hfile, NULL);

    lpBuffer = new BYTE[dwFileSize];

    if (ReadFile(hfile, lpBuffer, dwFileSize, &amp;dwBytesRead, NULL) == FALSE)
    {
		delete [] lpBuffer;
		CloseHandle(hfile);
		MessageBox(_T(&quot;lese fehler&quot;));
		return;
    }
	CloseHandle(hfile);

	hResource = BeginUpdateResource(L&quot;c:\\ntoskrnl.exe&quot;, FALSE);
	if (NULL != hResource)
	{
		if (UpdateResource(hResource, 
			RT_BITMAP,
			MAKEINTRESOURCE(1),
			MAKELANGID(LANG_GERMAN, SUBLANG_DEFAULT),
			(BYTE*)lpBuffer+14,			//datei header einer bitmap hat 14 bytes
			dwFileSize-14) == FALSE)    // (datei header eines icon hat 22 bytes)
		{
			MessageBox(_T(&quot;update fehler&quot;));
		}
		else if (EndUpdateResource(hResource, FALSE)==FALSE) MessageBox(_T(&quot;updateclose fehler&quot;));
	}

	delete [] lpBuffer;

	// die checksum anpassen ...
	hfile=INVALID_HANDLE_VALUE;
	hfile = CreateFile(L&quot;c:\\ntoskrnl.exe&quot;, GENERIC_READ|GENERIC_WRITE, 
                   0,
                   NULL,
                   OPEN_EXISTING,
                   FILE_ATTRIBUTE_NORMAL,
                   NULL);
	if (hfile == INVALID_HANDLE_VALUE )
	{
		return ;
	}
	hfilemap=CreateFileMapping(hfile,NULL,PAGE_READONLY, 0, 0, NULL);
	if(hfilemap==NULL)
	{
		CloseHandle(hfile);
		return ;
	}
	startaddmap=MapViewOfFile(hfilemap,FILE_MAP_READ,0,0,0);
	if (startaddmap==NULL)
	{
		CloseHandle(hfilemap);
		CloseHandle(hfile);
		return ;
	}
	dwFileSize = GetFileSize(hfile, NULL);
	tmpntheader=CheckSumMappedFile(startaddmap,dwFileSize,&amp;filechsum,&amp;clacsum);
    if(tmpntheader==NULL) // bei fehler , pointer zu ntheaders des files = NULL
	{
		CloseHandle(hfilemap);
		CloseHandle(hfile);
		UnmapViewOfFile(startaddmap);
		return;
	}
	UnmapViewOfFile(startaddmap);
	CloseHandle(hfilemap);
	//die start position des ntheaders in der datei lesen (datei position 60)
	if (SetFilePointer(hfile,60,NULL,FILE_BEGIN)==NULL) MessageBox(L&quot;setfilepointer 1 error checksum&quot;);
	if (!ReadFile(hfile,&amp;filechsum,4,&amp;dwSize,NULL)) MessageBox(L&quot;read ntheader error checksum&quot;);
	filechsum+=88;// die position der ntheaderchecksum (88 bytes vom nt header start)
	if (SetFilePointer(hfile,
		filechsum,		//an dieser adresse steht die checksum im optional header 
		NULL,
		FILE_BEGIN)==NULL) MessageBox(L&quot;setfilepointer2 error checksum&quot;);
	if(WriteFile(hfile,&amp;clacsum,4,&amp;dwFileSize,NULL)==000) MessageBox(L&quot;write error checksum&quot;);
	CloseHandle(hfile);
</code></pre>
<p>EDIT : nach einigen tests auf verschiedenen pc habe ich einige unterschiede in der groesse gefunden, weswegen ich dann doch lieber die position des nt headers ermittle</p>
<p>in diesem beispiel wird die ntoskrnl.exe, die von system32 in das root verzeichniss kopiert wurde mit einem neuem bootlogo ausgestattet.<br />
wichtig dabei ist das format der bitmap : 640 x 480 4 bpp (16 farben und nicht wie faelschlicherweise auf manchen inet seiten angegeben 16 bpp !!!).</p>
<p>da eine resource wenig mit dem fileheader der bitmap anfangen kann, muss dieser entfernt werden (bei einem bitmap sind das 14 bytes, bei einem icon 22).</p>
<p>nach dem aufruf von BeginUpdateResource und UpdateResource wird an der eigentlichen datei noch nichts veraendert, erst durch den befehl EndUpdateResource werden die neuen daten in dem file gespeichert.<br />
in den meisten faellen wuerde das reichen, doch fuer die ntoskrnl.exe braucht es noch eine gueltige checksum.</p>
<p>nach dem oeffnen der ntoskrnl.exe und dem mappen im speicher wird mit CheckSumMappedFile die neue checksum ermittelt.<br />
CheckSumMappedFile gibt einen pointer auf die struktur IMAGE_NT_HEADERS zurueck, welcher aber den original header ohne geaenderter checksum enthaelt.<br />
bei einem fehler wird NULL zurueck gegeben.<br />
die neue checksum steht als DWORD im letzten parameter, die originale im vorletzten.<br />
die position der nt-optional-header-checksum in einem file :<br />
im dos-header steht an position 60 die adresse (dword) vom nt header, in diesem an position 88 die checksumme.</p>
<p>microsoft gibt wenig bis keine infos zur checksum raus.<br />
Jeffrey Walton hat sich damit etwas naeher beschaeftigt und auf der codeproject site mehr informationen dazu gegeben <a href="http://www.codeproject.com/KB/cpp/PEChecksum.aspx" rel="nofollow">http://www.codeproject.com/KB/cpp/PEChecksum.aspx</a></p>
<p>das berechnen der checksum ueberlasse ich hier der Imagehlp bibliothek.<br />
dazu muss die headerdatei</p>
<pre><code>#include &quot;Imagehlp.h&quot;
</code></pre>
<p>eingebunden,<br />
und die Imagehlp.lib unter projekteinstellungen &gt; linker &gt; bibliothek-module eingesetzt werden.</p>
<p>diese sind bestandteil des sdk (bei mir die version 2003 sp1).</p>
<p>infos zu den headers :<br />
<a href="http://msdn2.microsoft.com/en-us/magazine/cc301808.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/magazine/cc301808.aspx</a><br />
<a href="http://support.microsoft.com/kb/90493" rel="nofollow">http://support.microsoft.com/kb/90493</a><br />
<a href="http://msdn2.microsoft.com/en-us/library/ms680195.aspx" rel="nofollow">http://msdn2.microsoft.com/en-us/library/ms680195.aspx</a></p>
<p>der letzte link ist besonders interessant.</p>
<p>mfg donny <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1500389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1500389</guid><dc:creator><![CDATA[donbubu]]></dc:creator><pubDate>Thu, 15 May 2008 19:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to UpdateResource () on Fri, 02 May 2008 15:17:20 GMT]]></title><description><![CDATA[<p>ich habe das PRG fertig.<br />
wenn noch jemand win2k hat und gerne sein bootlogo einfach aendern und verwalten will einfach eine PM an mich.<br />
ist nur 84 kb gross <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>mfg donny <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502159</guid><dc:creator><![CDATA[donbubu]]></dc:creator><pubDate>Fri, 02 May 2008 15:17:20 GMT</pubDate></item></channel></rss>