<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Martin&#039;s Blog &#187; VS 2010</title>
	<atom:link href="http://blog.m-ri.de/index.php/category/programmieren/vs2010/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.m-ri.de</link>
	<description>Gesammeltes aus dem Leben eines &#34;normalen&#34; Programmierers... :-)</description>
	<lastBuildDate>Sat, 04 Feb 2012 12:07:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Visual Studio 2010 komplett entfernen bzw. die Unmöglichkeit es richtig zu tun</title>
		<link>http://blog.m-ri.de/index.php/2012/01/18/visual-studio-2010-komplett-entfernen-bzw-die-unmoglichkeit-es-richtig-zu-tun/</link>
		<comments>http://blog.m-ri.de/index.php/2012/01/18/visual-studio-2010-komplett-entfernen-bzw-die-unmoglichkeit-es-richtig-zu-tun/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 19:25:35 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Installation]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[Uninstall]]></category>
		<category><![CDATA[VS-2010]]></category>
		<category><![CDATA[VS-Tipps&Tricks]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=928</guid>
		<description><![CDATA[Immer wieder mal lese ich von Problemen bei der Installation oder mit Installationen von VS-2010. Ich hatte den Fall noch nie, aber es gibt scheinbar immer wieder Installationen in denen der Wurm drin ist. VS-2010 installiert eine Unmenge an Komponenten und Programmteilen. Die meisten können einfach deinstalliert/gelöscht werden. Aber es bleiben immer noch ein Haufen DLLs/ActiveX Controls und [...]]]></description>
			<content:encoded><![CDATA[<p>Immer wieder mal lese ich von Problemen bei der Installation oder mit Installationen von <em>VS-2010</em>. Ich hatte den Fall noch nie, aber es gibt scheinbar immer wieder Installationen in denen der Wurm drin ist.</p>
<p><em>VS-2010</em> installiert eine Unmenge an Komponenten und Programmteilen. Die meisten können einfach deinstalliert/gelöscht werden. Aber es bleiben immer noch ein Haufen DLLs/ActiveX Controls und Registry Einträge und Verweise auf Verzeichnisse. Und leider gibt es für die Visual Studio 2010 keinen <em>richtigen</em> Uninstaller, der auch alle Artefakte löscht und deshalb kann ich gleich zu Anfang sagen, dass man außer der Deinstallation wirklich wenig tun kann.<br />
Eine Reparaturinstallation sollte man aber bei einer bestehenden Installation in jedem Fall einmal, bevor man zu härteren Maßnahmen greift. Die wirkt oft schon Wunder.</p>
<p>Im Netz gibt es das folgende Utility: <em><strong>Visual Studio 2010 Uninstall Utility</strong></em>:<br />
<a href="http://archive.msdn.microsoft.com/vs2010uninstall">http://archive.msdn.microsoft.com/vs2010uninstall</a><br />
Das Tool hat drei Operationsweisen die man in dem obigen Link erklärt findet.<br />
Das Tool funktioniert eigentlich ohne Probleme aber benutzt auch nur auf dem MSI Uninstall Prozess auf, und dabei berücksichtigt es nicht einmal Servicepacks. Sollte man also das <em>SP1</em> von <em>Visual Studio 2010</em> installiert haben, dann muss man dieses vorher selber entfernen.</p>
<p>Das dieses Tool macht aber auch nur die Arbeit halb. Das erkennt man mit einem schnellen Blick in Registry. Der Ast <em>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\10.0</em> wird durch die Deinstallation nicht entfernt und man muß in diesem Fall manuell Hand anlegen.</p>
<p>Wenn man also persistente Probleme mit der <em>VS-2010</em> Installation hat, die man nicht über die Setup-Logs oder mit Tipps aus den Foren lösen kann, dann bleibt nach meiner Meinung nur der harte Weg den Rechner neu aufzusetzen. Bisher bin ich davon verschont geblieben und meine Installation haben immer von Rechnerwechsel zu Rechnerwechsel gehalten.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2012/01/18/visual-studio-2010-komplett-entfernen-bzw-die-unmoglichkeit-es-richtig-zu-tun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>4 Termine für Microsoft C++ Infoday 2012</title>
		<link>http://blog.m-ri.de/index.php/2012/01/12/4-termine-fur-microsoft-c-infoday-2012/</link>
		<comments>http://blog.m-ri.de/index.php/2012/01/12/4-termine-fur-microsoft-c-infoday-2012/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 16:56:27 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[C++11]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=932</guid>
		<description><![CDATA[Wer letztes Jahr im Oktober keine Zeit hatte zum C++ Info Day nach München zu kommen, kann dies nun nachholen. In etwa ähnliche Themen werden an vier verschiedenen Terminen und Standorten von Microsoft kostenlos angeboten: Die Themen: C++ 11: Modernes C++ im 21. Jahrhundert Parallel-Power in Visual Studio 11: Konzepte und Tools Application Lifecycle Management für [...]]]></description>
			<content:encoded><![CDATA[<p>Wer letztes Jahr im Oktober keine Zeit hatte zum <em>C++ Info Day</em> nach München zu kommen, kann dies nun nachholen.</p>
<p>In etwa ähnliche Themen werden an vier verschiedenen Terminen und Standorten von Microsoft kostenlos angeboten:</p>
<p><strong>Die Themen:</strong></p>
<ul>
<li><strong><em>C++ 11: Modernes C++ im 21. Jahrhundert</em></strong></li>
<li><strong><em>Parallel-Power in Visual Studio 11: Konzepte und Tools</em></strong></li>
<li><strong><em>Application Lifecycle Management für C++: Die nächste Generation</em></strong></li>
</ul>
<p><strong>Die Termine:</strong></p>
<ul>
<li><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032502632&amp;Culture=de-DE">02.02.2012 14:00-18:00 Berlin</a></strong></li>
<li><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032502635&amp;Culture=de-DE">07.02.2012 14:00-18:00 Bad Homburg</a></strong></li>
<li><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032502637&amp;Culture=de-DE">13.02.2012 14:00-18:00 Karlsruhe</a></strong></li>
<li><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032502646&amp;Culture=de-DE">05.03.2012 14:00-18:00 Köln</a></strong></li>
</ul>
<p>Ich werde 07.02. in Bad Homburg vor Ort sein um ein wenig Networking zu betreiben.<br />
Da es aktuell eigentlich keine C/C++ Community im Netz gibt sehe ich hier die einzige wirklich gute Möglichkeit mit anderen C/C++ Entwicklern ins Gespräch zu kommen.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2012/01/12/4-termine-fur-microsoft-c-infoday-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VS-Tipps &amp; Tricks: Debugger Pseudo Variablen</title>
		<link>http://blog.m-ri.de/index.php/2011/11/26/vs-tipps-tricks-debugger-pseudo-variablen/</link>
		<comments>http://blog.m-ri.de/index.php/2011/11/26/vs-tipps-tricks-debugger-pseudo-variablen/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 18:28:55 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[VS-Tipps&Tricks]]></category>
		<category><![CDATA[Debuggen]]></category>
		<category><![CDATA[VC-2008]]></category>
		<category><![CDATA[VC-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=851</guid>
		<description><![CDATA[Die folgenden Variablen helfen mir immer wieder beim Debuggen und zeigen einem während des Debuggens in Watch-Window manch nützliche Information: $TID Die Thread ID des aktuellen Threads. Nützlich wenn man mehrere Threads debuggt und bestimmte Threads bei einem Breakpoint identifizieren muss. $HANDLES Die Anzahl der aktuell benutzen System-Handles des Prozesses. Handle Leaks lassen sich damit [...]]]></description>
			<content:encoded><![CDATA[<p>Die folgenden Variablen helfen mir immer wieder beim Debuggen und zeigen einem während des Debuggens in Watch-Window manch nützliche Information:</p>
<ul>
<li><strong><em>$TID<br />
</em></strong>Die Thread ID des aktuellen Threads. Nützlich wenn man mehrere Threads debuggt und bestimmte Threads bei einem Breakpoint identifizieren muss.</li>
<li><em><strong>$HANDLES</strong></em><br />
Die Anzahl der aktuell benutzen System-Handles des Prozesses. Handle Leaks lassen sich damit im Debugger leicht überwachen.</li>
<li><em><strong>$ERR<br />
</strong>GetLastError</em> leicht gemacht. Schlägt ein WinApi Befehl fehl, dann ist es schön das man sofort beim Debuggen im Watch-Window sehen kann was die Ursache war. Oft genug ist ja im Code selbst kein Aufruf von <em>GetLastError</em> vorhanden oder nötig.</li>
</ul>
<p>Siehe auch MSDN:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms164891.aspx">http://msdn.microsoft.com/en-us/library/ms164891.aspx</a></p>
<p>BTW: <em>WinDbg</em> hat noch einige mehr nette Pseudovariablen:<br />
<a href="http://blogs.msdn.com/b/debuggingtoolbox/archive/2008/06/16/special-command-using-variables-and-retrieving-information-through-pseudo-registers.aspx">http://blogs.msdn.com/b/debuggingtoolbox/archive/2008/06/16/special-command-using-variables-and-retrieving-information-through-pseudo-registers.aspx</a><br />
Schmerzhaft vermisse ich immer wieder <em>$PEB, $TEB, $TPID, $RA</em> im <em>Visual Studio, </em>komisch, dass es die nur im <em>WinDbg</em> gibt.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/11/26/vs-tipps-tricks-debugger-pseudo-variablen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Für was ist der Makro %(PreprocessorDefinitions) gut ?</title>
		<link>http://blog.m-ri.de/index.php/2011/10/16/fur-was-ist-der-makro-preprocessordefinitions-gut/</link>
		<comments>http://blog.m-ri.de/index.php/2011/10/16/fur-was-ist-der-makro-preprocessordefinitions-gut/#comments</comments>
		<pubDate>Sun, 16 Oct 2011 17:54:35 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[ATL]]></category>
		<category><![CDATA[CRT]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Compiler]]></category>
		<category><![CDATA[VS-2008]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=903</guid>
		<description><![CDATA[In den C++ Compilereinstellungen finden sich ein vorgegebener Makro %(PreprocessorDefinitions) in den C++ Präprozessor Definitionen. Die Verwendung dieses Makros ist nicht ganz offensichtlich. Dieser Makro sollten in jedem Fall nicht entfernt werden, denn Sie dienen der Übernahme einiger Einstellungen aus der General-Seite für die C++ Projekte. Zum Beispiel werden die Einstellungen für Unicode und MBCS über [...]]]></description>
			<content:encoded><![CDATA[<p>In den C++ Compilereinstellungen finden sich ein vorgegebener Makro <em>%(PreprocessorDefinitions)</em> in den C++ Präprozessor Definitionen. Die Verwendung dieses Makros ist nicht ganz offensichtlich.</p>
<p>Dieser Makro sollten in jedem Fall nicht entfernt werden, denn Sie dienen der Übernahme einiger Einstellungen aus der <em>General</em>-Seite für die C++ Projekte. Zum Beispiel werden die Einstellungen für Unicode und MBCS über den Makro <em>%(PreprocessorDefinitions)</em> in die allgemeinen Compiler-Einstellungen übernommen (die entsprechenden Defines sind <em>_UNICODE; UNICODE; _MBCS </em>).<br />
Erzeugt man eine DLL wird zusätzlich <em>_WINDLL</em> gesetzt.<br />
Setzt man ATL Optionen in der General Seite wird auch über die <em>%(PreprocessorDefinitions) _ATLDLL</em> bzw. <em>_ATL_STATIC_REGISTRY</em> gesetzt oder zurückgesetzt.<br />
Gleiches gilt, wenn die <em>MFC</em> als shared DLL verwendet wird. In diesem Fall wird der Define <em>_AFXDLL</em> zusätzlich gesetzt.</p>
<p>Löscht man also <em>%(PreprocessorDefinitions)</em> dann werden alle diese Einstellungen nicht mehr  korrekt übernommen.</p>
<p>Anmerkung:<br />
Bei dem Linker Makro <em>%(AdditionalDependencies) </em>habe ich eine ähnliche Verwendung vermutet, konnte aber keine direkte Beziehung zur Seite General herstellen.</p>
<p>Obwohl es auch hier Einflüsse auf die Linkereinstellungen gibt bei Änderungen in den <em>General</em>-Einstellungen. Werden allerdings die MFC als zusätzliche Bibliothek ausgewählt werden die Standard-LIBs aus dem SDK komplett entfernt. Hier gibt die MFC Bibliothek selbst vor in welchen zusätzlichen Libs, des SDK gesucht werden soll über #pragma comment(lib,..).</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/10/16/fur-was-ist-der-makro-preprocessordefinitions-gut/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vNext (VS-2011): Im aktuellen Preview kann man keine Programme mehr für XP entwickeln</title>
		<link>http://blog.m-ri.de/index.php/2011/09/24/vnext-vs-2011-im-aktuellen-preview-kann-man-keine-programme-mehr-fur-xp-entwickeln/</link>
		<comments>http://blog.m-ri.de/index.php/2011/09/24/vnext-vs-2011-im-aktuellen-preview-kann-man-keine-programme-mehr-fur-xp-entwickeln/#comments</comments>
		<pubDate>Sat, 24 Sep 2011 19:29:22 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[VS 2011]]></category>
		<category><![CDATA[Windows 8]]></category>
		<category><![CDATA[vNext]]></category>
		<category><![CDATA[VS-2011]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=902</guid>
		<description><![CDATA[Es kursiert ja bereits das Windows Developer Preview, also eine virtuelle Maschine mit der man in die nächste Windows 8 und Visual Studio Version hinein schnuppern kann. Mein Mit-MVP Mike Ryan hat nun bei Tests festgestellt, dass die mit der neuen Visual Studio Version erzeugten Programme, die die MFC 11 und CRT 11 benutzen nicht mehr [...]]]></description>
			<content:encoded><![CDATA[<p>Es kursiert ja bereits das <a href="http://msdn.microsoft.com/en-us/windows/apps/br229516">Windows Developer Preview</a>, also eine virtuelle Maschine mit der man in die nächste <em>Windows 8</em> und <em>Visual Studio</em> Version hinein schnuppern kann.</p>
<p>Mein Mit-MVP Mike Ryan hat nun bei Tests festgestellt, dass die mit der neuen Visual Studio Version erzeugten Programme, die die <em>MFC 11</em> und <em>CRT 11</em> benutzen nicht mehr unter <em>Windows XP</em> laufen <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' />  <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_surprised.gif' alt=':eek:' class='wp-smiley' />  Aus eigenen Tests kann ich das noch nicht bestätigen.</p>
<p>Das ist mit großer Sicherheit ein Killerkriterium&#8230; zumindest ist es das in unserer Firma.<br />
Mich wundert das, vor allem weil der Support für Windows XP auch noch bis 2014 läuft und wenn man <a href="http://www.techspot.com/news/44902-windows-xp-usage-finally-falls-below-50-mark.html">Statistiken</a> glauben darf, dann ist die Häufigkeit der Verwendung von <em>Windows XP</em> erst seit Juli diesen Jahres unter die 50% Marke gefallen.</p>
<p>Auf Connect wurde ein entsprechende Bug-Report eröffnet, es gibt hier die Möglichkeit mit den eigenen Stimmen für etwas Widerstand zu sorgen:<br />
<a href="https://connect.microsoft.com/VisualStudio/feedback/details/690617">https://connect.microsoft.com/VisualStudio/feedback/details/690617</a><br />
Also bitte gebt Eure Stimme ab!</p>
<p>Da die nächste VS Version vermutlich noch bis Herbst nächsten Jahres auf sich warten lässt kann man nur hoffen, dass sich das ändern wird.</p>
<p><strong>Nachtrag 26.09.2011</strong>: Weitere Details zu den fehlenden Funktionen siehe Kommentare<br />
<strong>Nachtrag 29.09.2011:</strong> Es scheint kein Zufall oder eine vorläufige Beschränkung zu sein. Der Bug wurde mit <em>By Design</em> geschlosen <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' />  Ich kann dennoch nur raten auf deisem case weiter mit Stimmen abzugeben.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/09/24/vnext-vs-2011-im-aktuellen-preview-kann-man-keine-programme-mehr-fur-xp-entwickeln/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Änderungen in den VC-Libraries des Sicherheitsupdates vom 09.08.2011</title>
		<link>http://blog.m-ri.de/index.php/2011/08/12/anderungen-in-den-vc-libraries-des-sicherheitsupdates-vom-09-08-2011/</link>
		<comments>http://blog.m-ri.de/index.php/2011/08/12/anderungen-in-den-vc-libraries-des-sicherheitsupdates-vom-09-08-2011/#comments</comments>
		<pubDate>Fri, 12 Aug 2011 18:49:30 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[CRT]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[SP1]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=887</guid>
		<description><![CDATA[Eigentlich kann man es kein Sicherheitsupdate nennen. Ich sehe  eigentlich nur eine sicherheitsrelevante Änderung in: atltransactionmanager.h (ATL) Hier wird das Laden der ktmw32.dll jetzt mit einer neuen Funktion AtlLoadSystemLibraryUsingFullPath durchgeführt, die in atlcore.h hinzugefügt wird. Diese Funktion lädt eine DLL nur aus dem Windows-System Verzeichnis. Damit wird Binary-Planting verhindert, aber dies betrifft eigentlich nur Windows [...]]]></description>
			<content:encoded><![CDATA[<p>Eigentlich kann man es kein Sicherheitsupdate nennen. Ich sehe  eigentlich nur eine sicherheitsrelevante Änderung in:</p>
<ul>
<li><strong>atltransactionmanager.h (ATL)</strong><br />
Hier wird das Laden der ktmw32.dll jetzt mit einer neuen Funktion <em>AtlLoadSystemLibraryUsingFullPath</em> durchgeführt, die in <strong><em>atlcore.h</em></strong> hinzugefügt wird. Diese Funktion lädt eine DLL nur aus dem Windows-System Verzeichnis. Damit wird Binary-Planting verhindert, aber dies betrifft eigentlich nur <del><em>Windows Vista / 7 / 2008</em></del> <span style="text-decoration: underline;">Windows 2003 und Windows XP</span> <em>(Nachtrag am 18.08. siehe dazu Kommentar von Stefan Kuhr)</em> und diejenigen die den <em>Kernel Transaction Manager</em> mit der <em>ATL</em> nutzen.</li>
</ul>
<p>Bugfixes habe ich folgende gefunden:</p>
<ul>
<li><strong>afxtoolbarimages.cpp (MFC)</strong><br />
In <em>CPngImage::LoadFromBuffer</em> wurde bei der Verwendung dieser Funktion in Speicherblock eines Streams nicht freigegeben (falsche Nutzung von <em>CreateStreamOnHGlobal</em>).</li>
<li><strong>dbcore (MFC / ODBC)</strong><br />
In <em>CRecordset::BuildUpdateSQL</em> in der ODBC Implementierung, wird bei Abfrage eines Cursornamens ein Puffer von 18 Zeichen Länge verwendet (<em>MAX_CURSOR_NAME</em>). Ist der Cursorname länger so wurde eine Exception geworfen. Jetzt wird erkannt, dass der Buffer zu klein ist und es wird ein dynamischer Buffer mit ausreichender Größe alloziert und der Name dann abgefragt.</li>
<li> <strong>xutility (STL und auch CRT)</strong><br />
In der Basisklasse der Iteratoren wurde eine Änderung gemacht. Scheinbar hat die Zuweisung eines &#8220;leeren/nicht initialisierten&#8221; Iterators bisher einen Iterator gar nicht verändert. Der alte Iterator wurde nicht aufgelöst durch <em>_Orphan_me</em>. Dies bringt dann Probleme mit sich wenn der <em>_ITERATOR_DEBUG_LEVEL</em> mit 2 genutzt wird.<br />
Da dieser STL Code auch komplett in der CRT verwendet wird, hat dies auch Einfluß auf die CRT.<br />
Auf die Release Version aber hat diese Code-Änderung jedoch keinen Einfluss, soweit ich das erkennen kann.</li>
</ul>
<p>Es gibt noch einige andere Dateien, die geändert wurde, aber hier haben sich nur unwichtige Kommentare geändert.</p>
<p>Fazit: Alles in allem ein Sicherheitspatch, der eher Bugfixes enthält, aber selbst die sind nicht sonderlich weitreichend. Und der Nutzerbereich, der mit der <em>ATL</em> den <em>Kernel Transaction Manager</em> nutzt, wird wohl eher klein sein&#8230;</p>
<p>PS: Die Dateien dieses Sicherheitspatches haben die Version 10.0.40219.325.<br />
Die Dateien aus dem VS-2010 SP1 haben die Versionsnummer 10.0.30319.1.</p>
<p><strong>Nachtrag 01.12.2011, MSDN Links:</strong><br />
Sicherheits Bullentin:   <a href="http://www.microsoft.com/technet/security/bulletin/MS11-025.mspx">MS11-025</a><br />
Knowledge Base-Artikel (KB-Artikel):  <a href="http://support.microsoft.com/?kbid=2565057">KB2565057</a></p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/08/12/anderungen-in-den-vc-libraries-des-sicherheitsupdates-vom-09-08-2011/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>LNK2001: unresolved external symbol _mainCRTStartup</title>
		<link>http://blog.m-ri.de/index.php/2011/07/28/lnk2001-unresolved-external-symbol-_maincrtstartup/</link>
		<comments>http://blog.m-ri.de/index.php/2011/07/28/lnk2001-unresolved-external-symbol-_maincrtstartup/#comments</comments>
		<pubDate>Thu, 28 Jul 2011 18:53:35 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[Anfänger]]></category>
		<category><![CDATA[VC-2010]]></category>
		<category><![CDATA[VC-Express]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=882</guid>
		<description><![CDATA[Ich habe einige Zeit gebraucht um herauszufinden warum ein Benutzer von VC-Express die folgende Meldung bekam: 1&#62;------ Build started: Project: Hallo Welt, Configuration: Debug Win32 ------ 1&#62;LINK : error LNK2001: unresolved external symbol _mainCRTStartup 1&#62;Hallo Welt.exe : fatal error LNK1120: 1 unresolved externals ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== Der [...]]]></description>
			<content:encoded><![CDATA[<p>Ich habe einige Zeit gebraucht um herauszufinden warum ein Benutzer von VC-Express die folgende Meldung bekam:</p>
<pre>1&gt;------ Build started: Project: Hallo Welt, Configuration: Debug Win32 ------
1&gt;LINK : error LNK2001: unresolved external symbol _mainCRTStartup
1&gt;Hallo Welt.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========</pre>
<p>Der User war ein Anfänger und hat ein leeres Win32 Projekt erzeugt. Anschließend eine Sourcedatei und hat das typische &#8220;Hello World&#8221; Programm schreiben wollen.<br />
Das Problem war aber, dass er zwar die Sourcedatei angelegt hat, diese aber nicht in das erzeugte Projekt eingefügt hat.<br />
Sobald man über die erzeugte Sourcedatei über den Menüpunkt <em>File -&gt; Move file Hello World.cpp into -&gt; Hello World </em> in das Projekt einfügt, klappt alles wie erwartet.<br />
Man kann die Datei natürlich auch über das Kontexmenü im Projekt hinzufügen, oder per Drag &amp; Drop auf den Solution Explorer ziehen.</p>
<p>Und eigentlich ist die Meldung auch klar, für den der sie versteht. Der Linker läuft an, findet keine Objektdateien. Entsprechend werden auch keine <em>CRT</em> Libraries einbezogen und geladen. Aber der Linker will gemäß den Einstellungen einen entsprechenden Einsprungpunkt für die CRT finden und wirft die obige Fehlermeldung aus.</p>
<p>Ich muss ehrlich sagen, dass mir die Fehlermeldung erst etwas gesagt hat, als ich per Email, das Beispielprojekt zugesendet bekam.</p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/07/28/lnk2001-unresolved-external-symbol-_maincrtstartup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zur Abwechslung mal ein kleines Quiz: Was ist das Problem mit diesem Template?</title>
		<link>http://blog.m-ri.de/index.php/2011/07/17/zur-abwechslung-mal-ein-kleines-quiz-was-ist-das-problem-mit-diesem-template/</link>
		<comments>http://blog.m-ri.de/index.php/2011/07/17/zur-abwechslung-mal-ein-kleines-quiz-was-ist-das-problem-mit-diesem-template/#comments</comments>
		<pubDate>Sun, 17 Jul 2011 10:25:00 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[MFC]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=875</guid>
		<description><![CDATA[Folgender Code wurde in einem Programmteil von uns eingebaut: template &#60;class T&#62; void SecureClearString&#40;T &#38;strText&#41; &#123; ::SecureZeroMemory&#40;strText.GetBuffer&#40;0&#41;,strText.GetAllocLength&#40;&#41;&#41;; strText.Empty&#40;&#41;; &#125; Der Sinn und Zweck sollte sein, dass der Inhalt einer CString Variable durch diesen Code überschrieben und anschließend freigegeben wird, damit zum Beispiel ein Kennwort oder ein Benutzername nicht mehr im Speicher lesbar bleibt. Die Anwendung [...]]]></description>
			<content:encoded><![CDATA[<p>Folgender Code wurde in einem Programmteil von uns eingebaut:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">template</span> <span style="color: #000080;">&lt;</span><span style="color: #0000ff;">class</span> T<span style="color: #000080;">&gt;</span>
<span style="color: #0000ff;">void</span> SecureClearString<span style="color: #008000;">&#40;</span>T <span style="color: #000040;">&amp;</span>strText<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #008080;">::</span><span style="color: #007788;">SecureZeroMemory</span><span style="color: #008000;">&#40;</span>strText.<span style="color: #007788;">GetBuffer</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>,strText.<span style="color: #007788;">GetAllocLength</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  strText.<span style="color: #007788;">Empty</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>Der Sinn und Zweck sollte sein, dass der Inhalt einer CString Variable durch diesen Code überschrieben und anschließend freigegeben wird, damit zum Beispiel ein Kennwort oder ein Benutzername nicht mehr im Speicher lesbar bleibt.<br />
Die Anwendung sieht in etwa so aus (war allerdings noch in einer Klasse gekapselt):</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">CString strPassword<span style="color: #008080;">;</span>
...
<span style="color: #666666;">// Fill password and use it</span>
...
<span style="color: #007788;">SecureClearString</span><span style="color: #008000;">&#40;</span>strPassword<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Doch leider ist was faul mit dem Code&#8230; zwei Probleme gibt es mit diesem Stück Code.<br />
Meine Frage an meine Leser lautet nun was <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_question.gif' alt=':?:' class='wp-smiley' /> </p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/07/17/zur-abwechslung-mal-ein-kleines-quiz-was-ist-das-problem-mit-diesem-template/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>VS-Tipps &amp; Tricks: Wie man gezielt einen Breakpoint für einen Thread setzen kann</title>
		<link>http://blog.m-ri.de/index.php/2011/07/02/vs-tipps-tricks-wie-man-gezielt-einen-breakpoint-fur-einen-thread-setzen-kann/</link>
		<comments>http://blog.m-ri.de/index.php/2011/07/02/vs-tipps-tricks-wie-man-gezielt-einen-breakpoint-fur-einen-thread-setzen-kann/#comments</comments>
		<pubDate>Sat, 02 Jul 2011 18:46:07 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[Debuggen]]></category>
		<category><![CDATA[Testen]]></category>
		<category><![CDATA[VS-2010]]></category>
		<category><![CDATA[VS-Tipps&Tricks]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=858</guid>
		<description><![CDATA[Wenn man eine Anwendung oder einen Dienst hat, der mit vielen Threads arbeitet, dann kann das Debuggen abenteuerlich werden. Besonders wenn viele Threads ein und die selbe Threadfunktion verwenden. Was macht man nun wenn man einen Thread isoliert hat und dessen Verhalten weiter prüfen möchte? Single-Stepping ist nicht drin, denn der Breakpoint würde auch jeden [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man eine Anwendung oder einen Dienst hat, der mit vielen Threads arbeitet, dann kann das Debuggen abenteuerlich werden. Besonders wenn viele Threads ein und die selbe Threadfunktion verwenden.<br />
Was macht man nun wenn man einen Thread isoliert hat und dessen Verhalten weiter prüfen möchte? Single-Stepping ist nicht drin, denn der Breakpoint würde auch jeden anderen Thread anhalten, der diese Code-Position erreicht.</p>
<p>Die nachfolgende Methode ist relativ einfach um gezielt einen Breakpoint für einen Thread zu setzen.<br />
Gehen wir mal davon aus, dass wir im Debugger einen Breakpoint haben und uns im Kontext des Threads befinden, den wir nun weiter verfolgen wollen.</p>
<ol>
<li>Zuallererst ermitteln wir die <em>Thread-Id</em>.<br />
Das geht elementar einfach über die Pseudo-Debugger-Variable <em>$TID</em>, die wir uns im Watch-Fenster, oder im Quick-View anzeigen lassen:<br />
<a href="http://blog.m-ri.de/wp-content/uploads/2011/05/BP1.png"><img class="size-full wp-image-861 alignnone" title="BP1" src="http://blog.m-ri.de/wp-content/uploads/2011/05/BP1.png" alt="" width="501" height="219" /></a></li>
<li>Als nächstes modifizieren wir den Breakpoint so, dass er nur noch dann stoppt, wenn auch unser Thread diesen Breakpoint erreicht.<br />
Das erreichen wir über die Breakpoint-Eigenschaft Condition (rechter Mausklick, über das Kontextmenü):<br />
<a href="http://blog.m-ri.de/wp-content/uploads/2011/05/BP2.png"><img class="alignnone size-full wp-image-862" title="BP2" src="http://blog.m-ri.de/wp-content/uploads/2011/05/BP2.png" alt="" width="472" height="320" /></a><br />
Hier geben wir einfach als Bedingung an, das $TID (also die Thread-ID) identisch sein muss, zu der ID des Threads, den wir beobachten wollen.</li>
<li>Den Rest macht der Debugger für uns, wenn wir wieder den Go-Befehl (F5) geben:<br />
<a href="http://blog.m-ri.de/wp-content/uploads/2011/05/BP3.png"><img class="alignnone size-full wp-image-863" title="BP3" src="http://blog.m-ri.de/wp-content/uploads/2011/05/BP3.png" alt="" width="595" height="103" /></a></li>
</ol>
<p>Auf diese Weise kann man auch mehrere Threads einfach beobachten.</p>
<p>Hinweis:<br />
Dieses Verfahren ändert das Laufzeitverhalten des Programmes, denn der Breakpoint wird immer intern ausgeführt, egal welcher Thread diese Codestelle passiert. Nur ermittelt der Debugger dann die Bedingung returniert und lässt das Programm, dann weiterlaufen, wenn die Id nicht passt. Wird diese Codestelle sehr oft passiert, dann kann ist der Einfluss eines solchen Breakpoints nicht  unerheblich.</p>
<p>Alternativ, kann man in solch einem Fall auch ein Stück Code einsetzen, der die aktuelle Thread-ID gegen eine statische Variable testet und einen <em>DebugBreak </em>ausführt. Die statische Variable setzt man dann während der Debugsession auf die gwünschte Thread-ID über das Watch-Window oder den Quick-View</p>
<p>Weiterführende Infos zu Debugger-Pseudo-Variablen von Visual-Studio findet man hier:<br />
<a href="http://msdn.microsoft.com/en-us/library/ms164891.aspx">http://msdn.microsoft.com/en-us/library/ms164891.aspx</a></p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/07/02/vs-tipps-tricks-wie-man-gezielt-einen-breakpoint-fur-einen-thread-setzen-kann/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Feature Request: Always ask the developer before applying a service pack or a security fix to Visual Studio that need changed C++ runtime DLLs ATL/MFC/CRT</title>
		<link>http://blog.m-ri.de/index.php/2011/04/20/feature-request-always-ask-the-developer-before-applying-a-service-pack-or-a-security-fix-to-visual-studio-that-need-changed-c-runtime-dlls-atlmfccrt/</link>
		<comments>http://blog.m-ri.de/index.php/2011/04/20/feature-request-always-ask-the-developer-before-applying-a-service-pack-or-a-security-fix-to-visual-studio-that-need-changed-c-runtime-dlls-atlmfccrt/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 15:55:54 +0000</pubDate>
		<dc:creator>Martin Richter</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[CRT]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[VS 2008]]></category>
		<category><![CDATA[VS 2010]]></category>
		<category><![CDATA[Feature Request]]></category>
		<category><![CDATA[Qualitätssicherung]]></category>
		<category><![CDATA[VS-2005]]></category>
		<category><![CDATA[VS-2008]]></category>
		<category><![CDATA[VS-2010]]></category>

		<guid isPermaLink="false">http://blog.m-ri.de/?p=832</guid>
		<description><![CDATA[I know this is a German blog, but for reaching a wider range of developer this article is written in English In the past security patches to Visual Studio were automatically installed on the machines of developers. This might have a great impact of to the shipment of the software that is created with this [...]]]></description>
			<content:encoded><![CDATA[<p>I know this is a German blog, but for reaching a wider range of developer this article is written in English <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>In the past security patches to <em>Visual Studio </em>were automatically installed on the machines of developers. This might have a great impact of to the shipment of the software that is created with this new pachted Visual-Studio version and it might cause incompatibilities with previous created modules.</p>
<p>And we all suffered under the problems that came with this patches and I don&#8217;t want to know how much time and money was wasted here.</p>
<p>Also I am aware of the risk that is caused when security fixes are not applied. But the last decision must be allowed to a developer if a fix is applied or not.</p>
<p>To avoid this I have a feature request that such security fixes to Visual Studio (any Version: <em>VS-2005</em>, <em>VS-2008</em>, <em>VS-2010</em>) is only applied to the developers machine if he is asked to do this!</p>
<p>Please use your vote and your words to comment this feature request <img src='http://blog.m-ri.de/wp-includes/images/smilies/icon_exclaim.gif' alt=':!:' class='wp-smiley' /><br />
Here is the link:</p>
<p><strong><a href="https://connect.microsoft.com/VisualStudio/feedback/details/662511/always-ask-the-developer-before-applying-a-security-fix-or-service-pack-to-visual-studio-that-need-changed-the-c-runtime-dlls-atl-mfc-crt">Always ask the developer before applying a security fix or service pack to Visual Studio that need changed the C++ runtime DLLs ATL/MFC/CRT</a></strong></p>
<hr /><small>Copyright &copy; 2010 Martin Richter<br />Dieser Feed ist nur für den persönlichen, nicht gewerblichen Gebrauch bestimmt. Eine Verwendung dieses Feeds bzw. der hier veröffentlichten Beiträge auf anderen Webseiten bedarf der ausdrücklichen Genehmigung des Autors.<br />(Digital Fingerprint: bdafe67664ea5aacaab71f8c0a581adf)</small>]]></content:encoded>
			<wfw:commentRss>http://blog.m-ri.de/index.php/2011/04/20/feature-request-always-ask-the-developer-before-applying-a-service-pack-or-a-security-fix-to-visual-studio-that-need-changed-c-runtime-dlls-atlmfccrt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

