<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx</link><description>It's a confusing story.</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2087092</link><pubDate>Wed, 11 Apr 2007 17:53:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2087092</guid><dc:creator>gkdada</dc:creator><description>
&lt;p&gt;I have one question. &lt;/p&gt;

&lt;p&gt;If you declare WINVER to be 0x0500, can you dispense with _WIN32_WINNT and _WIN32_WINDOWS (not to mention _WIN32_IE)?&lt;/p&gt;

&lt;p&gt;Thanks for providing a column (oops...blog) to read with my morning cuppa.&lt;/p&gt;
&lt;div class="post"&gt;[&lt;i&gt;You already have the tools available to figure this out for yourself. No need to get me involved. -Raymond&lt;/i&gt;]&lt;/div&gt;</description></item><item><title>NTDDI</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2087213</link><pubDate>Wed, 11 Apr 2007 18:03:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2087213</guid><dc:creator>Nathan</dc:creator><description>&lt;p&gt;If those tricky DDK guys were involved, I'd think it is the device driver interface. How that'd relate to user level is a stretch.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2087531</link><pubDate>Wed, 11 Apr 2007 18:32:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2087531</guid><dc:creator>Adrian</dc:creator><description>&lt;p&gt;The link for sdkddkver.h in the article appears broken. &amp;nbsp;I did a search and found this on MSDN, which I believe is the page Raymond intended:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_new" href="http://msdn2.microsoft.com/en-us/library/aa383745.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa383745.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It's interesting (to me, anyway) that the NTDDI macros go back only to Windows 2000. &amp;nbsp;It seems with the legacy macros, you should be able to target even older versions of Windows.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2087826</link><pubDate>Wed, 11 Apr 2007 19:02:49 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2087826</guid><dc:creator>Active Desktop...</dc:creator><description>&lt;p&gt;Active Desktop... we use it!&lt;/p&gt;
&lt;p&gt;Almost everyone here uses it to have an handy phone list on the desktop (exporting an excel file as html).&lt;/p&gt;
&lt;p&gt;No other good uses I think (maybe a calculator ?).&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2087840</link><pubDate>Wed, 11 Apr 2007 19:04:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2087840</guid><dc:creator>CN</dc:creator><description>
&lt;p&gt;Just curious: Any idea why 0x30A was used for NT?&lt;/p&gt;

&lt;p&gt;I guess that A = 10 and the version number being 3.1(0) coulod be the explanation, but it's still quite odd. On the other hand, I guess it's better than an actual expansion of 3.1 in fixed-point hex, like 0x319 or 0x31999... (or 0x31A etc with rounding)&lt;/p&gt;

&lt;p&gt;I hope this can be considered somewhat on-topic.&lt;/p&gt;
&lt;div class="post"&gt;[&lt;i&gt;Because that's what GetVersion returned.&lt;/i&gt;†&lt;br&gt;&lt;br&gt;&lt;b&gt;Nitpicker's corner&lt;/b&gt;&lt;br&gt;†&lt;i&gt;Yes, that's not &lt;u&gt;exactly&lt;/u&gt; what GetVersion returns. You're so smart. -Raymond&lt;/i&gt;]&lt;/div&gt;</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2088475</link><pubDate>Wed, 11 Apr 2007 20:00:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2088475</guid><dc:creator>Greg Neilson</dc:creator><description>&lt;p&gt;Win32s. I'd relegated the year of hell I spent with that in about 1996 to the back of my mind. &lt;/p&gt;
&lt;p&gt;*shudders*&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2089227</link><pubDate>Wed, 11 Apr 2007 20:57:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2089227</guid><dc:creator>mikeb</dc:creator><description>&lt;p&gt;Totally useless trivia about Windows version numbers:&lt;/p&gt;
&lt;p&gt;Win 3.1 (16-bit and NT) returned 0x0A for the minor revision part. &amp;nbsp;In other words 0x030A (or reverse the bytes to get what GetVersion() returns).&lt;/p&gt;
&lt;p&gt;Win 5.1 (otherwise known as Windows XP) returns 0x01 for the revision. &amp;nbsp;In other words 0x0501.&lt;/p&gt;
&lt;p&gt;Actually, I suppose this isn't totally useless. &amp;nbsp;It may be of use if you're formatting version numbers you get from GetVersion() or it's variants for display. &amp;nbsp;Otherwise you might display WinXP as version 5.01, confusing the universe and causing a rocket to explode in mid-flight.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2089332</link><pubDate>Wed, 11 Apr 2007 21:07:06 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2089332</guid><dc:creator>Chris L</dc:creator><description>&lt;p&gt;Mac OS X takes a different approach. There is a separate copy of all the headers &amp;amp; libs for each OS version. I guess that is more straightforward than putting #ifdef all over the place.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2089769</link><pubDate>Wed, 11 Apr 2007 21:38:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2089769</guid><dc:creator>richard</dc:creator><description>&lt;P&gt;Simple solution to people stealing your thunder is to not preannounce what you are going to blog about.&lt;/P&gt;
&lt;DIV class=post&gt;[&lt;I&gt;That's what I used to do but it was only worse. -Raymond&lt;/I&gt;]&lt;/DIV&gt;</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2090016</link><pubDate>Wed, 11 Apr 2007 21:55:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2090016</guid><dc:creator>Yuhong Bao</dc:creator><description>&lt;p&gt;Actually the use of _WIN32_IE began with IE 3 because it updated comctl32. _WIN32_IE continues to be used today because new IE releases still update SHLWAPI. And the Active Desktop and therefore the new version shell32 was optional in 95 and NT4.&lt;/p&gt;
&lt;p&gt;A general rule with WINVER: &amp;lt; 0x0500 means it is the version of the 9x serius, &amp;gt; 0x0500 means it is the version of the NT serius.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2090097</link><pubDate>Wed, 11 Apr 2007 22:02:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2090097</guid><dc:creator>Yuhong Bao</dc:creator><description>&lt;p&gt;I aplogise for stealing your thonder.&lt;/p&gt;
&lt;p&gt;By the way, the fact that 0x0501 is displayed as 5.1, not 5.01 depends on the minor version being displayed without the trailing zero&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2090110</link><pubDate>Wed, 11 Apr 2007 22:04:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2090110</guid><dc:creator>Jenny Palonus</dc:creator><description>&lt;p&gt;The proliferation of defines does make sense given how the product lines forked so badly with NT, Win32s, &amp;amp; IE. But if we're supposed to all simply check for a single NTDDI_VERSION number, to me this requires Microsoft to promise us they'll never again split off whole lines of Windows, nor will they introduce important chunks of Windows functionality in specific product lines, but instead will always bring them out sequentially in service packs or major releases of the OS itself.&lt;/p&gt;
&lt;p&gt;You simply can't account for two independent lines of code by checking for a single define being greater than some single number.&lt;/p&gt;
&lt;p&gt;It's a glorious vision indeed. But I'm skeptical. Darnit.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2090275</link><pubDate>Wed, 11 Apr 2007 22:25:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2090275</guid><dc:creator>KenW</dc:creator><description>&lt;p&gt;Jenny Palonus: &amp;quot;You simply can't account for two independent lines of code by checking for a single define being greater than some single number.&lt;/p&gt;
&lt;p&gt;It's a glorious vision indeed. But I'm skeptical. Darnit.&amp;quot;&lt;/p&gt;
&lt;p&gt;Re-read what Raymond wrote:&lt;/p&gt;
&lt;p&gt;&amp;quot;There's now just one symbol you define to specify your minimum target operating system: NTDDI_VERSION. Once you set that, all the other symbols are set automatically to the appropriate values for your target operating system.&amp;quot;&lt;/p&gt;
&lt;p&gt;Note the &amp;quot;all the other symbols are set automatically&amp;quot; part? So you still have the granularity you had before, but you don't have to set all of the individual #define values yourself.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2090486</link><pubDate>Wed, 11 Apr 2007 22:41:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2090486</guid><dc:creator>David Walker</dc:creator><description>&lt;p&gt;Chris L: &amp;nbsp;A separate copy of all the headers and libs sounds like a maintenance nightmare. &lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2090873</link><pubDate>Wed, 11 Apr 2007 23:14:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2090873</guid><dc:creator>Chris Peterson</dc:creator><description>&lt;p&gt;And don't forget Windows CE adds even more version macros:&lt;/p&gt;
&lt;p&gt;* WINCE&lt;/p&gt;
&lt;p&gt;* _WIN32_WCE &lt;/p&gt;
&lt;p&gt;* UNDER_CE&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2091004</link><pubDate>Wed, 11 Apr 2007 23:28:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2091004</guid><dc:creator>Legolas</dc:creator><description>&lt;p&gt;David Walker: A separate copy of all the headers and libs is indeed a maintenance nightmare. And that's why it isn't true: they have macro's on osx just like on windows. Since apple was be a bit more abrupt in os9-&amp;gt;osx, no os9 legacy went into the headers, so the defines are somewhat cleaner.&lt;/p&gt;
</description></item><item><title>Active Desktop</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2091282</link><pubDate>Wed, 11 Apr 2007 23:54:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2091282</guid><dc:creator>Thomas</dc:creator><description>&lt;p&gt;Ah yes, I remember Active Desktop. A few years back I put together a simple status page to drop on everyone's desktop at school.&lt;/p&gt;
&lt;p&gt;More recently, I've used it under Windows 2000 to keep my university timetable in a corner of the desktop. Unfortuantly WinXP breaks it slightly - Active Desktop and shadowed captions appear to be mutually exclusive.&lt;/p&gt;
&lt;p&gt;In some ways it's a shame it fell by the wayside and never got used, along with web views for folders (I remember seeing examples of how a program CD could use a web view as a poor man's autorun splash screen).&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2092139</link><pubDate>Thu, 12 Apr 2007 01:36:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2092139</guid><dc:creator>Yuhong Bao</dc:creator><description>&lt;p&gt;Active Desktop was removed because it made the shell depend on IE.&lt;/p&gt;
&lt;p&gt;Anyway, why is this present in windows.h:&lt;/p&gt;
&lt;p&gt;#if defined(_WIN32_WINNT) &amp;amp;&amp;amp; (WINVER &amp;lt; 0x0400) &amp;amp;&amp;amp; (_WIN32_WINNT &amp;gt; 0x0400)&lt;/p&gt;
&lt;p&gt;#error WINVER setting conflicts with _WIN32_WINNT setting&lt;/p&gt;
&lt;p&gt;#endif&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2095651</link><pubDate>Thu, 12 Apr 2007 08:16:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2095651</guid><dc:creator>Norman Diamond</dc:creator><description>&lt;p&gt;&amp;gt; For example, Internet Explorer 4 came not&lt;/p&gt;
&lt;p&gt;&amp;gt; only with an updated comctl32.dll but also a&lt;/p&gt;
&lt;p&gt;&amp;gt; new shell32.dll that gave you Active Desktop.&lt;/p&gt;
&lt;p&gt;In some cases IE4 also brought Desktop Update, which was useful even when Active Desktop was turned off. &amp;nbsp;In MSDN-English language NT4, during installation of IE4, it would ask if we wanted Desktop Update. &amp;nbsp;Clicking No would yield the same results as in Japanese NT4 (i.e. no Desktop Update), but clicking Yes would bring it in. &amp;nbsp;The same features in Desktop Update were built into Windows 98, Windows 2000, etc., including the Japanese versions. &amp;nbsp;One time I found a trick to get it to install in Japanese NT4.&lt;/p&gt;
&lt;p&gt;Wednesday, April 11, 2007 2:55 PM by Yuhong Bao &lt;/p&gt;
&lt;p&gt;&amp;gt; A general rule with WINVER: &amp;lt; 0x0500 means it&lt;/p&gt;
&lt;p&gt;&amp;gt; is the version of the 9x serius, &amp;gt; 0x0500&lt;/p&gt;
&lt;p&gt;&amp;gt; means it is the version of the NT serius.&lt;/p&gt;
&lt;p&gt;Both MSDN and my experience disagree with you. &amp;nbsp;It seems to us that NT4 was version 4 but was part of the NT series.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2095840</link><pubDate>Thu, 12 Apr 2007 08:44:21 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2095840</guid><dc:creator>Chris L</dc:creator><description>&lt;p&gt;Legolas: I think it's true -- recent versions of XCode use &amp;quot;SDK's&amp;quot; which are copies of the Frameworks (and other headers and libs), specific for each version of the OS. &lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2096801</link><pubDate>Thu, 12 Apr 2007 10:42:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2096801</guid><dc:creator>Anon</dc:creator><description>&lt;p&gt;@Yuhong Bao &lt;/p&gt;
&lt;p&gt;&amp;quot;A general rule with WINVER: &amp;lt; 0x0500 means it is the version of the 9x serius, &amp;gt; 0x0500 means it is the version of the NT serius&amp;quot;&lt;/p&gt;
&lt;p&gt;As Norman pointed out, that rule breaks for NT 4.0. The most significant bit of of the DWORD GetVersion returns tells you if it's NT based or 9x based.&lt;/p&gt;
&lt;p&gt;DWORD dwVersion = GetVersion();&lt;/p&gt;
&lt;p&gt;BOOL bIsNT = ! ( dwVersion &amp;nbsp;&amp;amp; 0x80000000 );	&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2098722</link><pubDate>Thu, 12 Apr 2007 15:00:27 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2098722</guid><dc:creator>WinVer</dc:creator><description>&lt;p&gt;&amp;gt;&amp;gt; As Norman pointed out, that rule breaks for NT 4.0.&lt;/p&gt;
&lt;p&gt;Nitpicking, but it also breaks for NT 3.1, 3.5 and 3.51. &lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2098839</link><pubDate>Thu, 12 Apr 2007 15:24:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2098839</guid><dc:creator>Win64</dc:creator><description>&lt;p&gt;Are _WIN32_WINNT, _WIN32_WINDOWS and/or _WIN32_IE valid in Win64, or do they have any corresponding defines?&lt;/p&gt;
</description></item><item><title>Interesting Finds: April 12, 2007</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2099509</link><pubDate>Thu, 12 Apr 2007 16:47:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2099509</guid><dc:creator>Jason Haley</dc:creator><description /></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2100939</link><pubDate>Thu, 12 Apr 2007 18:58:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2100939</guid><dc:creator>Marc K</dc:creator><description>&lt;p&gt;NTDDI will be a great simplification some time in the future. &amp;nbsp;But now, if you want your app to run on something older than Windows 2000, there's no choice but to use the legacy macros.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2101407</link><pubDate>Thu, 12 Apr 2007 19:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2101407</guid><dc:creator>Dan McCarty</dc:creator><description>&lt;p&gt;&amp;quot;Chris Peterson: And don't forget Windows CE adds even more version macros&amp;quot;&lt;/p&gt;
&lt;p&gt;Yeah but usually CE guys who read this blog are like left-handed people watching an instructional video: they watch what's being done and reverse the directions to suit themselves.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2116167</link><pubDate>Fri, 13 Apr 2007 18:47:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2116167</guid><dc:creator>sandman</dc:creator><description>&lt;p&gt;My grumble with this API technique is it is all done in C macros. Which makes it *really* hard to write code which could make use of the extra fields in a structure but able to drop back until it finds an struct size that the current OS supports.&lt;/p&gt;
&lt;p&gt;The best you can do is write your own declartion of those headers but there are an awful lot oof structs in windows like this.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2139607</link><pubDate>Sun, 15 Apr 2007 06:40:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2139607</guid><dc:creator>Yuhong Bao</dc:creator><description>&lt;p&gt;But I mean that defining WINVER as equal to 0x0400 will not include the function that are new to NT 4, onlt those that are new to 95, but defining WINVER to 0x0500 will include functions that are new to NT 5, or Windows 2000.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2145847</link><pubDate>Sun, 15 Apr 2007 20:09:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2145847</guid><dc:creator>Dan</dc:creator><description>&lt;p&gt;&amp;quot;Anyway, why is this present in windows.h:&lt;/p&gt;
&lt;p&gt;#if defined(_WIN32_WINNT) &amp;amp;&amp;amp; (WINVER &amp;lt; 0x0400) &amp;amp;&amp;amp; (_WIN32_WINNT &amp;gt; 0x0400)&lt;/p&gt;
&lt;p&gt;#error WINVER setting conflicts with _WIN32_WINNT setting&lt;/p&gt;
&lt;p&gt;#endif&amp;quot;&lt;/p&gt;
&lt;p&gt;I'm guessing because Windows 2000 (4.1) and above implement WINVER &amp;gt;= 0x400 functionality ... it wouldn't make sense to set WINVER lower in this context, so the headers assume it was a mistake and alert the programmer.&lt;/p&gt;
</description></item><item><title>re: What's the difference between WINVER, _WIN32_WINNT, _WIN32_WINDOWS, and _WIN32_IE?</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2190677</link><pubDate>Thu, 19 Apr 2007 14:31:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2190677</guid><dc:creator>Anthony Wieser</dc:creator><description>&lt;p&gt;I can't get this to work.&lt;/p&gt;
&lt;p&gt;When I add this to the start of my precompiled header file:&lt;/p&gt;
&lt;p&gt;#define NTDDI_VERSION NTDDI_WINXPSP2&lt;/p&gt;
&lt;p&gt;// we build only for xp sp2 and later...&lt;/p&gt;
&lt;p&gt;#include &amp;lt;sdkddkver.h&amp;gt;&lt;/p&gt;
&lt;p&gt;I get this error message:&lt;/p&gt;
&lt;p&gt;NTDDI_VERSION setting conflicts with _WIN32_WINNT setting&lt;/p&gt;
&lt;p&gt;Looking at the code in sdkddkver.h, I see this:&lt;/p&gt;
&lt;p&gt;#if !defined(_WIN32_WINNT) &amp;amp;&amp;amp; !defined(_CHICAGO_)&lt;/p&gt;
&lt;p&gt;#define &amp;nbsp;_WIN32_WINNT &amp;nbsp; 0x0600&lt;/p&gt;
&lt;p&gt;#endif&lt;/p&gt;
&lt;p&gt;So, it looks like I have to define _WIN32_WINNT anyway. &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Is that really the case, or am I doing something stupid? &lt;/p&gt;
&lt;p&gt;Anthony Wieser&lt;/p&gt;
&lt;p&gt;Wieser Software Ltd&lt;/p&gt;
</description></item><item><title>Compatibility works both ways</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#2989911</link><pubDate>Wed, 30 May 2007 19:24:14 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2989911</guid><dc:creator>Larry Osterman's WebLog</dc:creator><description>&lt;p&gt;Windows is rather famous for its ability to run applications that were written for previous versions&lt;/p&gt;
</description></item><item><title>blog.patrulleros.com.br &amp;raquo; Pacote n??made</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#3104275</link><pubDate>Wed, 06 Jun 2007 00:12:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3104275</guid><dc:creator>blog.patrulleros.com.br » Pacote n??made</dc:creator><description>&lt;p&gt;PingBack from &lt;a rel="nofollow" target="_new" href="http://blog.patrulleros.com.br/2007/06/05/pacote-nomade/"&gt;http://blog.patrulleros.com.br/2007/06/05/pacote-nomade/&lt;/a&gt;&lt;/p&gt;
</description></item><item><title>Troubleshooting "Not a valid win32 Application" error at the startup.</title><link>http://blogs.msdn.com/oldnewthing/archive/2007/04/11/2079137.aspx#9791875</link><pubDate>Fri, 19 Jun 2009 21:53:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9791875</guid><dc:creator>Developer Support Visual C++ and C#</dc:creator><description>&lt;p&gt;Recently, we came across a very interesting issue. A purely native application written in C++ was failing&lt;/p&gt;
</description></item></channel></rss>