Suggestion Box 2

Date:March 1, 2005 / year-entry #51
Orig Link:
Comments:    191
Summary:Post suggestions for future topics here instead of posting off-topic comments. Note that the suggestion box is emptied and read periodically so don't be surprised if your suggestion vanishes. (Note also that I am under no obligation to accept any suggestion.) Topics I are more inclined to cover: Windows history (particularly the Windows 95 era)....

Post suggestions for future topics here instead of posting off-topic comments. Note that the suggestion box is emptied and read periodically so don't be surprised if your suggestion vanishes. (Note also that I am under no obligation to accept any suggestion.)

Topics I are more inclined to cover:

  • Windows history (particularly the Windows 95 era).
  • Windows user interface programming in Win32, and shell programming in particular.
  • General programming topics (selectively).
  • Issues of general interest.
  • My personal hobbies.

Topics I am not inclined to cover:

  • The blog software itself.  You can send feedback about .Text to its author, Scott Watermasysk.
  • Internet Explorer. You can try the IE folks.
  • Visual Studio.  You can try one of the Visual Studio blogs.
  • Managed code. This is not a .NET blog. I do not work on .NET technologies. As far as .NET is concerned, I'm just another programmer like you. Occasionally I touch a .NET-related topic, but I do not bring any expertise to the subject.
  • Non-software Microsoft topics, such as product support policies, marketing tactics, and hiring policy.
  • Microsoft software that isn't Windows. (Exchange, Office, ...)
  • Windows topics outside user interface programming. (Plug and Play, Terminal Services, Windows Messenger, Outlook Express, SQL, IIS, remoting, SOA...)
  • User interface programming in anything other than Win32. (Because I know nothing about it.)
  • Debugging a specific problem. (Not of general interest.)
  • Legal issues.
  • Predictions for the future. (What's the title of this blog again?)

(Due to the way the blog server is set up, a new suggestion box gets set up every 30 days, assuming I don't forget to create a new one. If I forget, you can send me a reminder via the Contact page. You can also peek at the previous suggestion box.)

Comments (191)
  1. David Candy says:

    Ah well I’m at the top of the list again.

    RecentDocs and Notepad.

    Notepad does not call ShAddToRecentDocs (depends and apimon). Commdlg does link to it.

    Dbl click a file, no file open dialog , added to menu

    In cmd – notepad fname – no file open dialog, added to menu, it’s in command so explorer isn’t doing it.

    Drag a file into a notepad window – NOT added to menu.

    How and how many ways are documents added to the recent docs menu? What does the EditFlags settings affect (shaddtorecentdocs say exe are not added – is this hard coded or is this just the edit flags – in which case why doesn’t it say other files types aren’t added either due to editflags such as dlls or vbs executed [as opposed to edited]?).

    [Migrated from Suggestion Box 2.]

    [Migrated from previous Suggestion box.]

  2. Some suggestions for topics to cover:

    Some sort of thingo on the "inner workings" of the windows Menu manager. I see several articles online around the place refering to various internal menu manager things like strange messages connected with menus only known by their IDs (e.g. 0x1E5 is one I have seen refered to)

    Also, covering some of the less well-known menu related APIs would be nice

    Also, I have seen several applications that dont have a "menu bar" but instead have a toolbar made to look like a menu bar. Some kind of example or something showing how to pull that off (and yet still have regular menu resources) would be very cool to see :)

    And, I wanna know how they did those cool menus in Visual Studio .NET 2003 :)

    Another thing I have always wanted to know is how those codenames (Cairo, Chicago, Daytona, Memphis, Whistler etc) map to actuall windows versions…

    [Migrated from Suggestion Box 2.]

    [Migrated from previous Suggestion box.]

  3. Joel Udden says:

    Hello, I’ve always wondered why the Win32 api handled shortcuts/links so inconvinient for programmers.

    [Migrated from Suggestion Box 2.]

    [Migrated from previous Suggestion box.]

  4. Matt Ellis says:

    Hi Raymond. How about covering how to do custom draw in toolbars? My specific problem is that the toolbar provides no metrics for where the icon, text, drop down arrow or separator for drop down arrow should be placed.

    This isn’t so much of a problem for drawing the text and icon, because it doesn’t have to be pixel perfect to the existing UI.

    The big problem is when trying to custom draw drop down arrows on split buttons. I need pixel perfect positioning to know where to draw the split separator, so that I can draw accurate hit testing feedback. Another problem with this is that during the custom draw cycle, there is no way of telling that the split drop down part has been hit – the notification you are sent is simply CDIS_HOT.

    Without this information, custom draw on toolbars is next to useless, unless you just deal with a simple text or image button.



    [Migrated from Suggestion Box 2.]

    [Migrated from previous Suggestion box.]

  5. Mack says:

    I’m interested why filenames are not allowed to contain the question mark, "?". In the shell, this character could easily be escaped (e.g. with C-style backslashes, "?") so not to be confused with the wildcard character. "Normal" users don’t care about wildcards anyway, but some have complete sentences as filenames and complain that they can’t end them with a question mark. I assume it’s a backwards compatibility thing; would you care to explain it?

    [Migrated from Suggestion Box 2.]

    [Migrated from previous Suggestion box.]

  6. I’ve noticed that most (all?) windows controls immediately repaint themselves after their state has been changed. (For example, if you send the LB_SETTOPINDEX message to a Listbox). Do the controls use UpdateWindow or some other mechanism? What is the reason for this design? You could just wait for the next WM_PAINT message.

    Also I’m interested in a DestroyMenu issue: Why is it possible to delete a menu that’s still assigned to a window? And why does GetMenu still return the handle of the deleted menu?

    [Migrated from Suggestion Box 2.]

    [Migrated from previous Suggestion box.]

  7. donuts says:

    I want to know how to get a registration code for my new computer’s Office 2003 WITHOUT having to pay for an upgrade.I JUST BOUGHT Windows Office 2000 from another source!! I cannot access my school’s websight/powerpoint presention without a new registration code for 2003 Office! I DON’T WANT IT! There is NO instruction on how to bypass this, dispite the websight’s claim! HELP!

    [Migrated from Suggestion Box 2. Unclear why this person is asking a question on a topic I explicit said that I don’t cover. (Microsoft software that isn’t Windows.)]

    [Migrated from previous Suggestion box.]

  8. Wes Bigelow says:

    Do you know how to disable the annoying warning in Windows whenever you try to rename a file extension (i.e. "If you change a file name extension, the file may become unusable…")? A 30 minute web search didn’t provide an answer and yet it’s a question that’s been posted many times on the newsgroups.

    [Migrated from previous Suggestion box.]

  9. David Candy says:

    Curious about IBM’s SAA CUA (Shift + Insert et al) and current conventions in Windows.

    I wanted to know if F10 was the CUA menu access key or a MS access key. Do you think the CUA is defined anywhere, (obviously it must be).

    I had thought windows was CUA complient. But Alt + Backspace does not undo in the shell (though office uses it).

    [Migrated from previous Suggestion box.]

  10. Arta says:


    Why does it exist? Did the designers of Windows have something specific in mind when they included it, or did they just think it might come in handy?

    MSDN mentions some things that you shouldn’t use it for, but nothing that you should!

    [Migrated from previous Suggestion box.]

  11. I have shortcuts on my desktop to files and folders that have been assigned shortcut keys. Sometime when you press the shortcut keys the function responds instantly and other times I get a 5 second delay (explorer is locked to the point where animated system tray icons stop). Are you able to explain what the shell does when a shortcut key is detected?

    [Migrated from previous Suggestion box.]

  12. Arun Philip says:

    Going through Petzold’s book, I’ve come to realize the amount of complexity behind the easy-to-use print subsystem in Windows. Some history / inside info on the print subsystem would be great.

    [Migrated from previous Suggestion box.]

  13. Eli O says:

    Two questions:

    At one point you had an internal web page that was dedicated to keeping track of the statistics for re-orgs (IIRC it was called ‘days between re-orgs’. Do you still maintain that page? Regardless, could you share/post it (even/especially if it is very dated and refers to the Win95 days).

    Second question;

    What percentage of Win95 code would estimate was for backwards compatibility? How would that percentage break down between DOS compatibility and Win3.X compatibility?

    (finally: do you still wear a suit to work?)

    [Migrated from previous Suggestion box.]

  14. Peter Cooper says:

    One Topic (two questions): What does Windows Explorer actually do when you select a removable media drive?

    I have a 70mb zip file in the root of my USB Jump Drive and it takes a really long time for the file list to appear (for the root of the drive, as see on Windows XP). If I move it to a folder there’s no wait on selecting root or the folder.

    Is it really reading in the entire file?

    [Migrated from previous Suggestion box.]

  15. A couple of topics (one I’ve brought up before, another that someone else brought up in the NCCALCSIZE discussion in Feb. but you haven’t returned to yet).

    1. Window Activation – how it works (and why you need to do the whole message-eating modal loop for FakeMenu).

    2. WS_EX_TRANSPARENT – what does this really do? For example, using GroupBoxes on a dialog with WS_CLIPCHILDREN enabled, you need WS_EX_TRANSPARENT on the group box or else its background is painted incorrectly.

    Thanks :)


    [Migrated from previous Suggestion box.]

  16. Rune Moberg says:;en-us;327699 describes how to increase the number of user handles from 10000 to 18000.

    I’m very curious about the reason for this limitation? Follow-up question: Limitation also present in 64-bit Windows?

    Same question applies to the desktop heap size… (the default 3MB is barely enough to hold 30 instances of IE)

    A number of my users have been bitten by these limitations.

    Any historic insight on this topic would be great. I naively assumed Windows NT was supposed to get rid of statically allocated buffers and such.


    [Migrated from previous Suggestion box.]

  17. Even though these apis are undocumented/unsupported I have found a few applications that depend on them. So far to date google searches only explain how about 2 of the SystemFunction APIs work. If these APIs are frozen could you please provide some documentation or explainations about them.



    [Migrated from previous Suggestion box.]

  18. Dave says:

    Why is it that after a couple of failed logins in windows 2000 it seems to wait for a long time at the next failed login before coming back with an invalid password message ?

    [Migrated from previous Suggestion box.]

  19. Can you please add a search functionality to your web-page that will help in locating older articles? I frequently remember reading something on your page, but then I spend lots more time looking for it because there doesn’t seem to be a way to search.

    [Migrated from previous Suggestion box.]

  20. Rune Moberg says:

    Re Dave’s question: Many servers put in an extra delay after x wrong login attempts. It might even be a prerequisite for C2 security compliance?

    [Migrated from previous Suggestion box.]

  21. Rune Moberg says:

    The last selected file is also the last you clicked on — the current item.

    If I’m right, then clicking on item #3 and pressing CTRL+A (usually "Select all") would open item #3 first and then the rest..?

    [Migrated from previous Suggestion box.]

  22. Janez says:

    Microsoft does not support using MSXML in .NET, for a variety of reasons.;en-us;815112

    What are the reasons and diffs preventing dotnet interop to be used to migrate old apps on dotnet?

    [Migrated from previous Suggestion box.]

  23. Assen says:

    For the "MS Software Trivia" section: Can you dig up the origins of the =rand(200,99) trick in Word? Seems to be a leftover debug feature or something like that…

    [Migrated from previous Suggestion box.]

  24. CarlSo says:

    For windows with WS_VSCROLL/WS_HSCROLL style, I noticed that the SetScrollInfo() API draws directly into the window’s non-client area to draw the scrollbar. That is, the scrollbar drawing seems to be done somewhere within the SetScrollInfo() call itself instead of sending a WM_NCPAINT to the window specified in the SetScrollInfo call.

    This seems incredibly broken from an architectural point of view. Instead of drawing the scrollbar parts directly, shouldn’t SetScrollInfo() send the window a WM_NCPAINT message and have the window itself do the scrollbar drawing (like it normally does)?

    Because of this behavior, it’s difficult to do custom scrollbar drawing for windows that use non-client area scrollbars (i.e., those with WS_VSCROLL/WS_HSCROLL styles). The typical approach of using window subclassing to intercept the WM_NCPAINT message handling won’t work because of this, especially for USER-based controls like LISTBOX, where you cannot change the source code.

    Is there a reason why SetScrollInfo() draws directly into the window’s non-client area instead of using WM_NCPAINT.


    [Migrated from previous Suggestion box.]

  25. Timdog says:

    Raymond –

    I’ve got a question about how best to handle very large files that are going to be read in a mostly sequential fashion.

    For some background, I need to read a single, very large (much too large to cache entirely to memory) file in two independent streams. These streams each read a discrete (smallish) block of bytes from the file, starting at roughly (and this is the real devil) the same location on each iteration. Unfortunately, due to the vagaries of what I’m doing, the streams need to access this data in a particular order and I have no way of knowing which has the earlier starting index.

    So, my question is – when I ask windows to do an fread or Async read, does it cache to a window with bytes before and after my local read index, or does it only cache in a forward-looking manner? (presumably, there’s some caching of some sort going on) Or, more specifically, am I better off writing a file access layer that does caching explicitly the way I want it to (at the cost of some memcpy’s) or does Windows handle this pretty well?


    [Migrated from previous Suggestion box.]

  26. Raymond Chen says:

    CarlSo: I checked with the window manager team. They say that the current documentation is correct.

    [Migrated from previous Suggestion box.]

  27. sarvesh says:

    Hi Raymond,

    Have been trying to find answer for this one from a long time. Why can’t i reuse windows explorer like IE ? What i mean is i could write an Asynchronous Pluggable Protocol for IE and replace the default http:// protocol with my own implementation or i could write a new protocol say newprot:// and plug it in. What i haven’t been able figure out is how to do this in Windows Explorer? I guess it uses file:/// why isn’t there a way to plug in my own protocol?



    [Migrated from previous Suggestion box.]

  28. Zirakzigil says:

    Hello Raymond, you might find the following link of interest. It scientifically explores different methods of voting, to find out which fulfill various criteria. An example is the Favourite Betrayal Criterion. A voting method fulfills the Favourite Betrayal Criterion if:

    <i>For any voter who has a unique favorite, there should be no possible set of votes cast by the other voters such that the voter can optimize the outcome (from his own perspective) only by voting someone over his favorite.</i>

    Anyway, might be worth a post, or at least, you might enjoy looking over the site.

    [Migrated from previous Suggestion box.]

  29. Eric Wilson says:

    I’m curious why the GUID structure is so oddly defined. Why is it 1 DWORD, 2 WORDS, and 8 BYTES? Why not just an array of 4 DWORDS?

    [Migrated from previous Suggestion box.]

  30. Michael says:

    Do you know how many computers are used to build windows?

    Or is there no central build and each subteam builds its own dll’s which are integrated afterwards?

    [Migrated from previous Suggestion box.]

  31. Sam [xMS] says:

    See for the straight dope on GUIDs.

    To answer your question as to why its broken out like that, its because the fields have meaning. From the above doc:

    UUID =

    time_low "-" time_mid "-" time_high_and_version "-" clock_seq_and_reserved clock_seq_low "-" node

    Of course, starting with win2k the OS does a hash so you can’t extract the MAC address.

    You can still tell some interesting things through. The first character of the 3rd group (bits 48-52) contains the version, and will be 1, 3 or 4. Version 1 is typically pre-win2k, 4 is win2k or later. Version 3 GUIDs are used in .NET to signify that the GUID is a hash of the fully qualified class name, assembly, version, etc, so the GUID automatically changes when the class or interface has a breaking change (slick!).

    [Migrated from previous Suggestion box.]

  32. What do you look like Mr. Chen ?

    [Migrated from previous Suggestion box.]

  33. Will says:

    I’ve always wondered why it is there’s no way to get the filename(s) for a font enumerated by EnumFontFamilies(Ex)? I realize that a single file may contain more than one style of font (true of TrueType and OpenType fonts), or, in the case of Type 1 fonts, a single font style may utilize multiple physical files (pfm/pfb/afm/etc), but this always seemed kind of silly to me. Is there a history or reason this has never been supported?

    PS: Hopefully this is within your area of expertise, if not, I apologize.

    [Migrated from previous Suggestion box.]

  34. Akshay says:

    When computer starts up, random set of programs get started. Trying to see how I can remove them from being autostarted. I have looked at run, runonce and runonceex keys and I do not see an entry for many of them.

    Is there another way that shell does auto start?

    [Migrated from previous Suggestion box.]

  35. The fact that people disassemble internal windows functions has created backwards compatibility problems, has Microsoft ever considered code obfuscation to avoid this? If no, why?


    [Migrated from previous Suggestion box.]

  36. Mike Dunn says:

    In the XP notification area, the most recently added icon is on the left. This is the opposite of previous OSes. What brought on that change? I assume it was a usability improvement, but was there a particular usability problem with the old way?

    [Migrated from previous Suggestion box.]

  37. typoo says:

    ‘Hair Color of the "Person" Icon for a User Group Becomes Gray If the Group Contains More Than 500 Users’ (KB 281923) The KB article says "Microsoft has confirmed that this is a problem", but is it? What kind of problem does it cause?

    [Migrated from previous Suggestion box.]

  38. CoMargo says:

    I’ve found your blog when tries to search info about "How to get which window displayed in taskbar".

    I’ve tried to Enumerate windows using EnumWindows function, then I tried to get, which window should be shown in task bar:

    All returned windows are top-level, i.e. I suppose they don’t have parrents. Then I check, is window visible, does it have no WS_EX_TOOLWINDOW exStyle and… here I get stuck.. MS Visual Studio.NET have got two windows in top level, both of them have no parent, only one have got WS_EX_APPWINDOW, but this one have got zero-sized window rectangle!!!

    Another one have no WS_EX_TOOLWINDOW exStyle but why I don’t see it in status bar? Also Spy++ have the same properties as one of that window and it is showed in status bar…

    Could you give me the key?

    Cyril Margorin

    [Migrated from previous Suggestion box.]

  39. CoMargo says:

    Sorry for disturbing, I’ve got the problem :) I’ve just forgot about Owner.

    [Migrated from previous Suggestion box.]

  40. I used the info from this website to fix the above referenced Windows XP Service Pack 2 problem. Then I turned off the automatic updates. When I needed to restart my computer the problem was back and I need help in getting rid of it. The Windows XP Hotfix file KB834707 is back and it won’t let me delete the file. Any help would be appreciated and you can e-mail me at the above address. Thank you.

    [Migrated from previous Suggestion box.]

  41. Mike Dunn says:

    If you remember Norton Navigator from 1995, it had a feature that let 16-bit apps "see" LFNs (not sure how exactly, I didn’t use NN much). I’m curious if apps like NN cause the shell team any extra grief in app compat. Did the team ever have any discussions that included the words "WTF are they doing?" ;)

    [Migrated from previous Suggestion box.]

  42. My suggestions is to talk about how SetWindowsHookEx is implemented.

    I was playing around with setting a global keyboard hook and am wondering how it does that. Is my dll with the keyboard window proc injected into every running process?

    [Migrated from previous Suggestion box.]

  43. Raymond, I have always been curious why the Windows painting model was originally designed to be two step: i.e. 1) erase the background and then 2) paint.

    And, if you really fell like it, it will be a nice bonus if you can explain what role the WM_SYNCPAINT message plays in the entire story.

    (honestly I think "used to synchronize painting while avoiding linking independent GUI threads" doesn’t explain everything).

    And by the way — thanks for the nice blog.

    [Migrated from previous Suggestion box.]

  44. Matt Barry says:

    What’s the best way to determine if two different Windows path names point to the same file? Between shell links, UNC and DBCS, the problem would seem to be a little more complicated than a simple lstrcmpi call.

    [Migrated from previous Suggestion box.]

  45. grouse says:

    How do you personally have your users set up on your desktop machine? Do you run everything as Administrator? Install everything as Administrator and run as another user? Install various packages under different users?

    [Migrated from previous Suggestion box.]

  46. Frank says:

    Why is the zoom behaviour of CTRL-Mousewheel in Internet Explorer the opposite of the zoom behaviour in the Rich edit control?

    Which should we prefer to implement in our own applications?

    [Migrated from previous Suggestion box.]

  47. Eddie says:

    Hi Raymond,

    Is there a limitation in Managed C++ when calling unmanaged functions via Platform Invoke with regard to the type of return?

    I am trying to call Kernel32.dll’s function GetLargestConsoleWindowSize from a Managed C++ class. I have created the prototype in my managed code like this:

    [DllImport("KERNEL32.DLL", EntryPoint="GetLargestConsoleWindowSize")]

    static COORD GetLargestConsoleWindowSize(int hConsoleOutput);

    COORD is a structure declared like this


    private __value struct COORD


    short x;

    short y;


    which mimics the API structure used by the API’s GetLargestConsoleWindowSize function.

    The problem is that when I try to compile I get an error C3385 that tells me that "a function that has a DllImport Custom Attribute cannot return an instance of a class". I know for sure that the C# compiler doesn’t have this limitation. I tried to find some references to this error on the net, but couldn’t find any.

    Do I interpret these the right way? Is there a workaround for this problem?



    [Migrated from previous Suggestion box.]

  48. Rich says:

    Please explain how Windows draws ‘opaque’ windows that you can see through but still read the text on them.

    [Migrated from previous Suggestion box.]

  49. I’m curious about the reason for an XP annoyance I have come across. On previous versions of Windows, I could mark a file, hit SHIFT-delete and immediately hit return, knowing that the key press would be received by the "Are you sure?" dialog when it finally made an appearence.

    On XP, the RETURN goes to Explorer instead. This is bad news if you’ve marked twenty files for deletion. Is this intentional?

    [Migrated from previous Suggestion box.]

  50. Ovidiu says:

    I would be really interested in knowing a bit more about the inner workings of the Memory Manager. The main reason I’m asking you this is because on fairly powerful machines, Windows behaves strangely sometimes when it comes to memory management.

    For instance, if you have a machine with 1 or 2 GB of RAM, the currently running applications only use about 200-300 MB of RAM and you start copying a CD from the CDROM drive to the HDD, you’ll end up doing a lot of paging. It turns out that, although you have enough RAM to load the entire CD in it, the memory manager still feels a strong need to send some pages to the pagefile. Why does that happen?

    [Migrated from previous Suggestion box.]

  51. Im working on a very complicated desktop system used for electronic trading. The desktop uses many windows with plugins in each window.

    In order to save on the hudreds of megabytes of memory used by loading plugins in separate windows i have converted the GUI from an SDI model to MSDI. This lets multiple windows share DLL’s and resources whilst maintaing the appearance of separate applications.

    The only problem is that the system runs its own taskbar so i need to remove the window icons from the windows taskbar. The standard MFC solution requires a hidden parent window.

    But this in turn means that when i activate one window, all the windows in the same MSDI process get raised. The breaks the illusion that the MSDI windows are actually separate processes and destroys the continuity of the desktop.

    How do you prevent child windows of a hidden parent from gaining focus ? I need windows without windows…

    [Migrated from previous Suggestion box.]

  52. Cooney says:

    You often complain that users don’t read. Have you ever put that to the test, say by doing usability tests where all the dialog text is in a foreign language (menus are still english)?

    [Migrated from previous Suggestion box.]

  53. Per B says:

    Whenever I create a .cmd/.bat file and use Swedish characters such as &amp;amp;#229;,&amp;amp;#228; and &amp;amp;#246; in paths I wind up editing the file using the DOS edit.exe application since notepad doesn’t understand the "OEM" codepage.

    Whenever I go through this pain I wonder why the command processor can’t execute Unicode .cmd files when piping Unicode text into commands works fine (i.e. sort <unicode.txt works fine and cmd with /u creates unicode text output). Do you know?

    [Migrated from previous Suggestion box.]

  54. Jonathan Wilson says:

    Is there a reason why Shortcuts are the way they are?

    Is there a reason why Shortcuts werent implemented more like Symlinks on unix or Aliases on mac?

    Can you shed any light on the history of shortcuts?

    [Migrated from previous Suggestion box.]

  55. Moi says:

    I’d love something on how to create a filter string for a File dialog. Basically it looks like I can hard code something / put it in the resources, or I can spend several days trawling through the registry piecing together what I need. Why can’t I just give the dialog a file suffix and let it work out what the full details of the filter string should be?

    For example, not only do I need an extension I also need a "description" (for example "Text file" for .txt). This should probably change depending on what language your Windows is in (mine is German, and so is the File dialog, except the filter string depends on the language of the app, which I find odd).

    [Migrated from previous Suggestion box.]

  56. Tom West says:

    If you think there’s enough general interest and it’s interesting to you:

    How would you save Explorer window positions, characteristics so as to be able to recreate the windows later in same location, directory, windows status (does it have an address bar, buttons, etc.) and how they were the files displayed (details, list, etc.)?

    The last two seems to be rather difficult…

    [Migrated from previous Suggestion box.]

  57. riverspell says:

    With my Word for Mac v. X, I find no way to insert page numbers on my written documents. the "help" function tells me to go to the INSERT menu and click on "page numbers" therein. But there is no such thing as "page numbers" in my INSERT menu. Can’t find it on any menu. What gives?

    [Migrated from previous Suggestion box.]

  58. Paul Todd says:

    One of the things I have always wanted to know is the cases where you would use RegisterHotKey and where you would use the the hot key common control and which one you should prefer

    [Migrated from previous Suggestion box.]

  59. Ivan Leo says:

    What do the RtlIsThreadWithinLoaderCallout() and RtlDllShutdownInProgress() functions do?


    [Migrated from previous Suggestion box.]

  60. Kevin Roth says:

    I frequently launch explorer windows with an adjusted folder tree root, using a shortcut such as:

    %windir%explorer.exe /e,/root,C:SomeDir

    I love this option for explorer windows, which keeps the folders tree limited to this folder and below. It is especially useful if the actual root directory is several levels deep (say, C:SomeDirOtherDirOneMoreDir…).

    BUT, when I press F3 to run a search from this window, it doesn’t default to "look in" the correct folder, and instead is set to search all local drives. Why is that, and is there any easy fix?

    (incidentally, F3 in this scenario also opens a separate window, rather than replacing the folders pane with a search pane, but as I happen to LIKE the separate window behavior this is a "good thing" IMHO.)

    I’m on WinXP SP1 if it makes any difference.

    [Migrated from previous Suggestion box.]

  61. Ivan Leo says:

    What does the User32InitializeImmEntryTable() function do?


    [Migrated from previous Suggestion box.]

  62. Joey says:

    I’d like to see some explanation about Windows memory management and virtual memory.

    A lot of Mozilla Firefox users are complaining that when the app. is minimized and idle for a while, restoring it can take a long while and are blaming Windows memory management. Read more here:

    [Migrated from previous Suggestion box.]

  63. Gerson says:

    Could you please comment on

    Q136218 – BUG: DdeConnect Never Returns

    more specifically, on the "solution", which seems a bit unpractical to me: if a window message takes long to process (e.g. notepad opening a 1GB file) it will block DDE for ALL OTHER PROCESSES during this time, and yes: on win32.

    [Migrated from previous Suggestion box.]

  64. Ovidiu says:

    Rumors say that Longhorn will have a Secure Execution Environment (SEE) that will allow people to use their computer as administrators and perform administrative tasks, while running their regular applications as users. This can be achieved by using Code Access Security for managed code and restricted tokens for native code.

    Technically, this is already possible today on Windows 2000 and later by using restricted tokens. One example is a tool written by Michael Howard that starts processes with such a restricted token (

    Has the possibility of implementing this feature been taken into account for Windows 2000/XP? How would you differentiate between "administrative" and "regular" apps? (I assume you would not set a magic bit in some header, but use some cryptographic techniques instead – in .NET it’s easy, you can grant permissions based on an assembly’s origin).

    Why isn’t such a feature present in Windows today? Many people blindly run as administrator, Windows XP by default creates administrator accounts after installation (the first account you specify in the list, the others are user accounts, to be more precise). Running Outlook Express or other apps with big security issues with restricted tokens might have made the world a better place in the past years…

    [Migrated from previous Suggestion box.]

  65. Mike Raiford says:

    lfWeight of the LogFont structure.

    I have always wondered this: I don’t know if you know all of the ins and outs of the GDI, especially when it comes to fonts.

    But, why is it that in the MSDN documentation for LogFont it talks about weights for 0-1000 being available, but in reality, you get only really get the equivalent of FW_NORMAL and FW_BOLD…

    Of course, I could be missing something, and if so, what am I missing…? (Maybe its the same thing every single web browser seems to be missing… It’d be nice if the weights worked as expected in browsers ;) )

    [Migrated from previous Suggestion box.]

  66. Guy Gervais says:

    Question about how different parts of Windows go about finding an executable you wish to run.

    Example: In Start->Run, if I type "winword", Word starts up. If I open a console and type "winword" I get the error "’winword’ is not recognized…’; if in the same console, I use "start winword" then Word comes up.

    What is the logic and the different APIs used to find winword.exe? It seems that the console by itself simply uses SearchPath; but the shell seems to be more thorough.

    [Migrated from previous Suggestion box.]

  67. Stefan Kuhr says:


    At various places I read that MS is using C (not C++) exclusively for developing products. But at least Visual Studio must have been created using MFC and thus, C++. I also recently encountered that there is at least one system DLL (WMI’s framedyd.dll) that has a strict C++ interface with C++ mangled names. I also read that during NT development the GDI group around Chuck Whitmer first started using C++ which they later abandoned in favor of C. Can you shed some light on which products or groups use C exclusively and which ones use C++ or a mixture of both? Maybe you could also give some historic retrospect on when and how far C++ pervaded development at MS?

    [Migrated from previous Suggestion box.]

  68. Jay Lauffer says:

    Hi Raymond,

    I just ran into this issue with using a Tree-view control from a dialog when using the Edit labels style..

    see KB: 130692;en-us;130692


    WM_COMMAND|IDOK errors are received when you edit labels in a TreeView control.


    The edit control created by the TreeView control can, and usually does, have an identifier of 1. This identifier is the same as IDOK. This can cause the parent window or dialog box to receive WM_COMMAND messages with an identifier of 1. Then the TreeView control passes on the EN_UPDATE and EN_CHANGE notifications from the edit control to the TreeView’s parent.

    This was a design decision made to meet system requirements and cannot be changed. If the parent window is going to perform some action in response to a command with an identifier of 1, this problem can occur. This problem is especially significant in dialog boxes that use the standard IDOK for a command button control. "

    Just wondering if you know what was the design decision? I mean this looks like a glaring compatibility issue, why else would you stick to such a kooky implementation? I especially like the forceful verbage "cannot be changed," undoubtedly there was a lot of requests to change it.. so what was the scoop?

    I liked the biPlanes piece, always good to understand how the software implementation really reflects the hardware, would love to read some more about those early decisions that shaped the GDI (and what’s with the DWORD aligned scanlines in a bitmap).

    [Migrated from previous Suggestion box.]

  69. Moi says:

    I don’t know if this is a bug, but…

    In Explorer if one sorts files by date and then change one of the files (e.g. open, change, and save it) Explorer recognises this, updates … and puts the updated file at the wrong end of the list. Why? What the heck is that all about?

    [Migrated from previous Suggestion box.]

  70. Thomas Heller says:

    I’d like some discussion of LoadLibrary. Is it possible to simulate it in a user program?

    [Migrated from previous Suggestion box.]

  71. Claus Brod says:

    I’d love to see some discussion on thread affinity for Win32 UI objects. You will find lots and lots of statements everywhere that UI objects have thread affinity, but I have found it hard to find information on what exactly causes that thread affinity. Are the internal window data structure allocated per-thread? Is there something thread-specific in the queue handling code?

    Always curious &amp;amp;amp; infinitely grateful for this great blog:


    [Migrated from previous Suggestion box.]

  72. Jay Lauffer says:

    So many of the MSDN articles are about "Managed Code" that I begin to wonder is the Win32 API truly an Albatross? I mean the more I write C++, the more I want to write C++ and the less I’m inclined to write C# or Java, even though C++ is painfully slow compared to C# or Java, the granularity of C++ is so much better and perhaps it’s being a control freak, but knowing what’s going on and what I’m doing even with the abstraction of the API just feels so much better than having my code "interpreted". So where will the C++ programmers go over the next decade, are they dying out to a new generation of "managed coders"? And who will do the "managing"?

    [Migrated from previous Suggestion box.]

  73. Tom says:

    Shell Namespace extensions in C++ code. The examples I’ve seen to be in MFC, or badly explained, and usually both. Actually, all the shell prgramming stuff is interesting, as is any COM or OLE stuff you can do.

    More on non mainstream Windows platforms – ia64, x64, and any others that you can talk about. Could you do an article on XBOX/XBOX2 for example? Windows CE internals.

    Windows history, especially the 16bit stuff.

    [Migrated from previous Suggestion box.]

  74. I would like more infomation on how the trash can really works in Windows.

    [Migrated from previous Suggestion box.]

  75. Toni says:

    Interested in the history of FormatMessage and how it determines which MessageTable entry in a resource file to scan for the message id. On the same topic how does FormatMessage handle multiple MessageTable entries when internationalizing the message file.

    [Migrated from previous Suggestion box.]

  76. Jon Clegg says:

    I have noticed that windows will sometimes take a very long time to delete a file. It seems to be the first delete after a reboot. I notice the hard drive spinning away for sometimes over 10 seconds before the file actually removes itself.

    What the heck is going on??

    [Migrated from previous Suggestion box.]

  77. Ivan says:

    Could you please talk about NT native files?

    [Migrated from previous Suggestion box.]

  78. I would be interested in knowing how come each and every version of Windows I ever power-used (my Win95 days are a bit blurry, was still a kid back then) tilts up when I insert a CD or DVD into the drive?

    The problem’s survived multiple reinstallations of Windows on many different hardware setups and as far as I hear, I’m not the only one with the problem.

    It seems like a VERY annoying problem to me, but MS doesn’t seem to fix it in any of it’s new releases. I would suspect this is simply a matter of tuning the Generic drive driver… but I’m most certainly way off

    anyway, I’d like to see the issue discussed :)

    thanks for hearing me out.

    [Migrated from previous Suggestion box.]

  79. Ivan says:

    Are the backround of landscapes in windows xp and longhorn real pictures, are they artifically produced/assembled with a graphics program, or are they real photos tweaked with a computer?

    [Migrated from previous Suggestion box.]

  80. I’ve long been interested in learning a foreign language – perhaps German or Japanese. However, I don’t really know how to best go about doing so.

    Perhaps you could share some tips for learning a second human language. What to learn (suggested starting languages), how to learn (books, classes, software) etcetera.

    [Migrated from previous Suggestion box.]

  81. FloodFill says:

    Why does FloodFill bluescreen if it fills a to complex pattern/takes to long time to execute? It also seems to freeze every other process/thread while executing. Is this a "feature" of the driver or GDI?

    [Migrated from previous Suggestion box.]

  82. Multidesktop says:
    1. Why doesn’t explorer show it’s taskbar on every created desktop? I have to start a explorer process for every desktop to get a taskbar, and then the icons in the systray isn’t duplicated to all desktops.

      2. A more irritating problem is: While showing a newly created desktop, with a newly created Explorer-process, why does Win+R start a run window on the Default desktop instead of the active one? Does anyone really want this behaviour, I want Win+R to start a run-window on my current desktop. I suppose this applies to all hotkeys.

      3. Is Multidesktop fully compatible with terminalserver+multimonitor?

      4. Why isn’t it possible to BitBlt on a inactive desktop, while it’s possible to get windows coords &amp;amp; layout from one.

      5. What is the other always-existing desktops used for (SAWinStaSADesktop, __X78B95_89_IW…, Service…)

      6. Why doesn’t Windows include a tool for the enduser to create/switch beetween desktops? The multidesktop feature is used frequently by x-windows users, but that’s because those systems usually has a bundled (installed &amp;amp; obvious) tool for manage desktops.

      [Migrated from previous Suggestion box.]

  83. CurrentVersion says:

    Why is there a CurrentVersion-key in the registry? Is it possible to hive several Windows-version’s registries there? How?

    [Migrated from previous Suggestion box.]

  84. Scrolling says:

    Why is the scrolling of the mousewheel buffered but draging the scrollbar isn’t?

    [Migrated from previous Suggestion box.]

  85. Nate says:

    What is the difference between SetWindowText() and WM_SETTEXT? Why are there situations where one works but not the other?

    [Migrated from previous Suggestion box.]

  86. bw says:

    Why does GDI32 invoke exceptions in it’s own functions (win95)?



    [Migrated from previous Suggestion box.]

  87. Chuckie says:

    How much wood would a woodchuck chuck if a woodchuck could chuck wood?

    [Migrated from previous Suggestion box.]

  88. Mike says:

    Could you explain why Dr. Watson is called the way it is? Is it based on a true physician, or rather a random name?

    [Migrated from previous Suggestion box.]

  89. Billy Gatez says:

    Is it true that windows has an inherit restriction in handling c++ classes residing in dynamically loaded dlls?

    Can you explain if it is possible, and if yes, how to call &amp;amp; access member functions in c++ classes and also public c++ class variables through a dll interface with explicit/late binding? Is it required to create ansi c wrapper functions or being dependant on com-like vtables which is compiler-dependant?

    [Migrated from previous Suggestion box.]

  90. Adrian says:

    Does GDI+ effectively re-implement everything in GDI, or is it a wrapper with some added functionality?

    [Migrated from previous Suggestion box.]

  91. Brad says:

    Can you format a hard drive in XP Pro? I just put in a 250gig hard drive and made it my primary and turned my original 60gig drive to a slave secondary drive, but I can’t format the 60gig. I want to 60gig to just be a storage drive for images but I can’t format it.

    How do you do this???

    Brad in Virginia

    [Migrated from previous Suggestion box.]

  92. Serge Wautier says:

    Is there an API that helps validate the ‘well-form-ness’ of a file/path name (Including the validity of characters used in that filename).

    I looked in the PathXXX set in shlwapi.dll but didn’t find any relevant one.


    [Migrated from previous Suggestion box.]

  93. Raymond,

    I know I may be asking a lot here, but I would like to see more "Windows History" type postings. Recently, it seems you have mostly been talking about coding. That’s great and I enjoy it as well, but I’m realling loving why some things are the way they are in Windows.


    James Summerlin

    [Migrated from previous Suggestion box.]

  94. Skeets Norquist says:

    Its seems like I often come accross stuff about Win32 that says "Although this function is present in Win9x it has no effect when called" or "This function exists under Win9x but does not behave correctly". What was going on during Win9x developement? Why are there so many broken functions? And why are there so many partially or incorrectly implemented functions?

    [Migrated from previous Suggestion box.]

  95. orangy says:

    I wonder why activating window doesn’t send WM_SHOWWINDOW message when window is hidden, though it actually makes window visible?

    This produces strange effects if you can manage to activate hidden window. How you can do it? Easy! Select "menu &amp;amp; tooltip" effects in display properties, and set it to "scroll effect". Now make simple app that will respond to size change and "minimize to notification area", i.e. hides itself when minimized. Then start application and double click on taskbar icon for application. First click will issue SC_MINIMIZE and initiate minimization (and animate window). While this is in process, window receives SC_RESTORE, but gets hidden before (by calling ShowWindow), and then WM_ACTIVATE comes to invisible window. It shows window, but never sends WM_SHOWWINDOW. This causes problems in Windows.Forms for example, because you have form displayed, but it’s Visible property is false! Weird…

    You could suggest about responding to SC_MINIMIZE message instead and perform hide at this moment. The problem is that WIN-M button (minimize all) doesn’t send SC_MINIMIZE to windows, it instead changes their size and location.

    [Migrated from previous Suggestion box.]

  96. Sean says:

    Several people say that Win9x still runs on DOS, like Win3.1 did.

    To support this they give a screenshot of the system monitor with one DOS shell open, and it shows 2 virutal machines. They say this shows that Win9x is still based on DOS. My IT teacher says that is DOS based as well!

    I know that a major part of Win9x is 16bit, but is DOS still the core of ths system?

    [Migrated from previous Suggestion box.]

  97. Kim says:

    "The long and sad story of the Shell Folders key" has a lot of comments that havent been adressed.

    To add my own story into the mix, I was writing an installation package some time ago for a program targeting mostly doctors. Just to do an unfair generalization I should point out that doctors are the greediest people I have ever met and their hardware is arcane. Most of them still use dot matrix printers.

    Anyway, back to the point. While writing the installation package i naturally needed the folders of various files and used "shGetSpecialFolderPath" or a variation thereof. Thats when I discovered that the function is not present in shell32.dll versions released prior to the "Active Desktop" release, which means most installations of NT 4.0 and Windows 95. Neither was this package available for download anywhere (used to be, as a part of Internet Explorer 4.0), so "upgrading" was out of the question.

    At this point I was tired of researching the problem and although I got a whiff of some DLL that could be bundled with my software to fix this, I just couldnt help but use the registry instead. It’s a lot cleaner and all the directories I needed where present after a clean installation.

    The part that makes this story tragic (for me anyway) was that MSDN listed the function present in Windows 95 or newer without mentioning the version numbers of the DLL or Active Desktop (This has later been fixed). So I happily just followed the documentation, tested on windows 2000 and newer and shipped the thing. I’ll take partial fault on that one :)

    Anyway, It would be really nice to see a follow up on that story where you try to give more detail on why just having it in the registry is such a bad idea. I fail to see how roaming profiles can be used as an excuse.

    Oh and I should add that I love your blog. It’s nice to get a peek into the workings of microsoft without all the hubb hubb of marketing and such.


    [Migrated from previous Suggestion box.]

  98. JOS Regular says:

    [Migrated from previous Suggestion box.]

  99. Eric says:

    Hi, I’ve been having a problem I have this thing NEWBIASANTI.EXE-2B742094, that’s always popping up in my taskbar under processes and it’s eating all my cpu. I delete it, but it keeps coming back on. I thought it was a virus or spyware but i did full scan and it wasnt. When i search it, it’s placed in the windows prefetch file. do you know what it is? how can I stop it from coming on? thanx

    [Migrated from previous Suggestion box.]

  100. David C says:

    I read your hyperthreading article (and others)–thanks for the excellent information!

    After reading the article I was left wondering about something:

    What’s the difference, from an application/device driver perspective, between hyperthreading and normal multithreading?

    Here’s why I ask: I had a problem where a few programs and devices I use would halt my WindowsXP system with a bugcheck/blue screen. When I contacted the vendors, they told me to disable hyperthreading. I did, and the problems went away.

    As a programmer, I can’t think of any reason why enabling hyperthreading would make it any more likely that thread-safety problems would be exposed.

    What am I missing?

    [Migrated from previous Suggestion box.]

  101. AC says:

    IP Address Control Is Sooo Broken

    I know it was made by IE team, but it is practically the part of Windows, and I struggle with it each time I have to change the IP address on some computer.

    The designer of that control thought that only one octet of the address can be important to the user. If somebody sent you an IP address, can you copy that address and paste it in the control? No! Can you copy the IP address that’s in the control anywhere? No!

    There is more: visual feedback: each filed behaves like separate edit control. So you are used to jump to the next control with tab. But you’d never get to the next field, just outside of the whole control.

    It looks like the author considered more than extremely dangerous to let somebody type more than 3 numbers in one field.

    It can be fixed. Just make one real edit control, limit the number of characters inside to 15 (4*3+3) and the characters to enter to 0..9 and ‘.’ and then let the people type the address, copy it, paste it, whatever. And then add some validation code on proper places, to keep all validations that already exist (e.g. if some filed is out of range, you can select exactly this part of the input, but it still can be an edit control).

    [Migrated from previous Suggestion box.]

  102. Ed Smith says:

    I have been using AVG Free for many years and now after being prompted to download up dates I find I can not shut down 98.

    I tried all the fixes on the Microsoft site to no avail. Finally I uninstalled AVG Free and it was fixed.

    Just to let you know.


    [Migrated from previous Suggestion box.]

  103. DAVID says:

    Why does the equal sign appear as I type an entry into a cell. I cannot get dates to appear as entered? Flustered.

    [Migrated from previous Suggestion box.]

  104. Guthrie says:

    OK, here is my question. Why does Windows hide the ‘true’ name of a detected device?. For example, it pops up a message box saying "Ethernet Controller Detected" but not the device ID held in the devices firmware. I often find old bits of kit that still work and would be good in a simple box, but finding drivers is a pain, as I dont have a lot to search on.

    [Migrated from previous Suggestion box.]

  105. mfink says:

    I wondered why there is a LVS_SHAREIMAGELISTS style for list controls, but none for tree controls.

    [Migrated from previous Suggestion box.]

  106. Serge Wautier says:

    Windows Explorer buttons such as Back, Forward and Up are disabled when their action is not applicable.

    On the other hand, buttons such as Cut, Copy, Paste, Delete are NOT disabled when their action is not applicable.

    Why such a difference of behaviour ?

    [Migrated from previous Suggestion box.]

  107. Bill Higgins says:

    I like to map shortcut keys to programs using by associating an alphanumeric key with a program through the program’s Windows shortcut. One thing I’ve noticed is that when I move a shortcut (from one part of the start menu to another) I have to delete and re-do the shortcut or it won’t work. Why is this, and is there any workaround other than recreating the shortcut.

    See the following blog for a description of what I’m talking about:;amp;entry=70266

    [Migrated from previous Suggestion box.]

  108. Matt says:

    Hey, I just found your page yesterday. Great stuff! Okay, I’ve never read a blog before, so pardon me for being such a newb that I run right to the suggestion box, but I was wondering if Microsoft has done any psychological type of studies on programmers? For instance, I’ve been wondering for a long time why programmers take terminology so literally all the time. I think this would make a really funny piece. For example, I was in IRC one time (ok, yeah, it’s IRC, but I’ve seen this type of thing happen in many places), and someone (not a channel regular) enters the channel and asks something about null characters at the end of strings. Then someone (who I presume was a regular) replies, "you mean <such and such> about NUL characters?" Apparently, the regular thought that ‘’ was only a NUL character and not a null character.

    Another example, someone on usenet was asking about the DOS box in Windows XP. Someone else replies, "you mean the console window?".

    I just don’t understand why programmers can’t take that little logical step that tells them that "NUL" came from the word "null", and that the "console" window can be legitimately called a "DOS" window, since it has a DOS prompt and runs DOS programs.

    Please enlighten us on this subject!

    [Migrated from previous Suggestion box.]

  109. Usually whenever a window is minimized (lets call this window M), it is sent to the bottom of the stack order so that when using ATL+TAB to switch windows M is the last one.

    Some windows refuse to behave this way (examples of this are Office applications), so that after minizing Outlook, for example, and then pressing ALT+TAB the second icon is Outlook’s and not the expecte window.

    Why is it that this happen, and what do I need to make sure that an application that I’m creating does not do this?

    [Migrated from previous Suggestion box.]

  110. Frandsen says:

    In Windows XP when you switch to a different user account and back, everything in your session reappears the way you left it. Except for one thing: The Z-order of the windows has been shuffled. Why is that?

    [Migrated from previous Suggestion box.]

  111. Raymond,

    here’s one: why is it, that the unzip feature in windows xp explosure is

    a) so extremely slow

    b) not using all of the available cpu cycles (the machine will be between 10 to 20 % cpu usage when unzipping.)

    (obviously a) is because of b) – but why ?) [unzippping large directory structures is a real pita].


    thomas woelfer

    [Migrated from previous Suggestion box.]

  112. Grant says:

    How about a discussion about why some command line utilities throw cmd into 8.3 mode.

    For example:

    C:Documents and Settings{user}>edlin

    File name must be specified



    C:Documents and Settings{user}>edit


    [Migrated from previous Suggestion box.]

  113. Could you tell us precisely how Windows chooses the image from an icon to display? There’s an article out there that seems authoritative, but seems to be wrong. For example, if my .exe icon has a few 16×16 images and a few 32×32 images (all different color depths of the same graphic), why does Windows sometimes choose a 32×32 image and scale it down for the taskbar icon?

    [Migrated from previous Suggestion box.]

  114. answer says:

    Ned Batchelder, it depends on the order of the bitmaps in the ico-file. Some programs uses the first bitmap and scales it.

    [Migrated from previous Suggestion box.]

  115. join says:

    Why was the join command removed?

    [Migrated from previous Suggestion box.]

  116. Real-time Programmer says:

    Is there any way to detect which processor a thread is currently executing on in a multiprocessor system?

    [Migrated from previous Suggestion box.]

  117. Dave says:

    Do I have to unregister (UnregisterClass(Ex)) all window classes that have been previously registered using RegisterClass(Ex)?

    I have tried to unregister the window class after the message loop, however I get the error that classes still exist (GetLastError). I have only created one window. So does windows do this for me when my progam returns from WinMain?

    [Migrated from previous Suggestion box.]

  118. WTL Fanatic says:

    First, thanks for writing such a excellent blog. My definitive favourite! Now…

    I would really like some inside information on WTL… Why was it ever shipped in the first place and why didn’t Microsoft embrace it once so many developers took it to their hearts?

    Are there currently any discussions going on regarding WTL at Microsoft?

    [Migrated from previous Suggestion box.]

  119. Don Kackman says:

    I’d like to see a discussion about the design decision that lead to the seperation of ShellStyle.dll from UxTheme.dll.

    Even though UxTheme defines resources for the EXPLORERBAR (the collabsible panel used in XP’s explorer) that match the default Luna/Blue style, the Windows XP explorer digs its resources out of ShellStyle.dll.

    The upshot is that if you’re trying to make a clone of the XP Shell’s ExplorerBar, you can’t use the Visual Styles API if you want anything other than Luna/Blue.

    Thanks for the great blog!


    [Migrated from previous Suggestion box.]

  120. Antoine says:

    Hi Raymond,

    Something I commented off-topic in a discussion BEFORE I actually see this one. So I repeat.

    About the lack of Win16 support in Win64 x64…

    I know plain DOS and DPMI in general are impossible (no V86 mode in long mode). Yet it should be possible to provide some useful degree of DOS API support to allow plain Win16 apps to survive in the 64 brave new world.

    I am thinking about VB apps in particular, probably because I happen to have an old one that is keeping me busy (the provider dies, no access to source, no budget/ROI to rewrite, same old thing again; and no Y2K in sight…)

    Keep working on this, that’s good stuff.


    [Migrated from previous Suggestion box.]

  121. I would like to see a full example of proper subclassing using SetWindowSubclass, GetWindowSubclass, RemoveWindowSubclass, and DefSubclassProc. I know you mentioned it here (there’s a spelling error in that, btw – procerure) and here but it would be nice to have a full example that includes reference data, memory allocation / deallocation, how everything integrates with the removal of subclasses, and an explanation of the subclass ID would be nice (i.e. not what it is, but how it may be used in, say, a function that creates a subclass that automatically deletes itself when the window is destroyed). MSDN is lacking in all of these areas.

    [Migrated from previous Suggestion box.]

  122. Why does the OS call SetProcessWorkingSetSize(-1, -1) when the user minimizes an application? Are there any scenarios where this actually improves performance?

    I’m highly skeptical of this feature. I think all it does is lower one number in Task Manager (MemUsage) while increasing another (Page Faults). In terms of performance there’s probably either no difference, or a small degradation because of all the unnecessary page faults.

    [Migrated from previous Suggestion box.]

  123. Phaeron says:

    A suggestion for the history section:

    Why was the floppy drive seek rate slowed down in the OSR versions of Windows 95? It was noticeably slower in OSR2 than Windows 95 retail and led to much longer system hiccups when an empty floppy drive was accessed. Windows 98 didn’t have this problem either.

    [Migrated from previous Suggestion box.]

  124. Anders says:

    How about a discussion about what you would have done differently when it comes to early Windows design if you had the chance to do it all over again. What design decisions are you proud of, and what would you have changed? Are there any specific API designs that have casued you a lot of troubles?

    [Migrated from previous Suggestion box.]

  125. Antti from Finland says:

    I think MSN Messenger would be better if it shows kb/s when someone is sending me something. Maybe a bit wrong place for this but I haven’t found a place to post my suggestion.

    [Migrated from previous Suggestion box.]

  126. David Walker says:

    Wow, this suggestion box is busy.

    Recently I was dragging a folder to another location, to copy its contents. The usual prompt comes up that tells me that the destination already has a folder named Blah, do I want to continue etc. Yes, I did.

    But what I really wanted to do was to copy all the new files from the source folder into the destination folder, without bothering to re-copy the existing files. I know I can do this with XCopy, but there ought to be a way to do this with right-mouse-button dragging and dropping. Any ideas why this was never implemented?

    Thanks. Great blog.

    David Walker

    [Migrated from previous Suggestion box.]

  127. anders says:

    why is the search in windows broken?

    In xp with "old school" search mode and search in subfolders it will miss a file even tho im looking at it in a explorer window (dxva_sig.txt in this case)

    [Migrated from previous Suggestion box.]

  128. gerry says:

    I lost windows explore all of a sudden if I try with the window and e simulstaneous like I used to all I got is the flashlight searching Will you please advise what I did wrong?

    [Migrated from previous Suggestion box.]

  129. Sergey Simakov says:

    What’s the story behind "native font control" ( and is it supported on NT/9x?

    [Migrated from previous Suggestion box.]

  130. Kyle Alons says:

    When will the XP theme background rendering bug [1] get fixed? It still exists in XP SP2 and W2K3 SP0.

    [Migrated from previous Suggestion box.]

  131. I was reading your earlier blog at (regarding how the title text is chosen for grouped taskbar icons). But there seems to be something missing.

    I’ve created several .NET assemblies, and set their version attributes so that they have some description text, and then used a resource viewer program to prove that yes, they do in fact have a FileDescription VERSIONINFO entry (in regular Win32 resources, not managed resources)…

    And yet, when they get grouped on the taskbar it always shows no text at all. All you see is the app’s icon and the number of windows. Nothing else. It’s been driving me nuts. I was wondering if you have any insight into it?

    (If you don’t feel it warrants a full blog entry, then please feel free to send any ideas to me directly though the Feedback page on my site.)

    [Migrated from previous Suggestion box.]

  132. Jim M says:

    I’m not sure if this fits, but I’ve been noticing that the whole concept of the MDI application seems to be fading at Microsoft. A look at the latest Office applications shows that aside from Excel’s tab interface, all office apps use a full-screen, single document view theme. Even Access, which tricks you into thinking you can open multiple documents, but closes anything open before creating a new doc.

    Thanks, love the blog!

    – Jim

    [Migrated from previous Suggestion box.]

  133. Ed James says:

    I followed a link on the microsoft support page to this blog… was wondering if you could direct me to some help for IE 6.0 display issues (parts of web pages seem to be "missing", that is they appear differently (complete)on other computers when I view them.

    Thank you, Ed

    [Migrated from previous Suggestion box.]

  134. Thomas says:

    Raymond, here’s one:

    The current Platform SDK claims there’s a function called NeedCurrentDirectoryForExePath exported by kernel32. Now, I’m running XP SP2 and I thought I might give it a try to figure out if i could make use of it.

    But why does my copy of kernel32 not even export it?

    – Thomas

    [Migrated from previous Suggestion box.]

  135. Jim Kane says:


    I just found your blog and have really enjoyed many of the topics.

    In your ‘dragging a shell object, part 1’ you reference GetUIObjectOfFile which uses IShellFolder to create IDataObject – boy have I been doing it the hard way.

    Is there any way to use the Shell to produce IDataObject when multiple items are selected instead of just one? Also is there any documentation of the formats the IDataObject produced by GetUIObjectOF() supports?

    [Migrated from previous Suggestion box.]

  136. Ivan says:

    I’ve found that if process A is a amongst other things a named pipe client, and only needs a pipe server (child process b) in some condition, and thus starts it with CreateProcess if it isn’t already running, in process A the CreateFile call to open the pipe will fail with ERROR_FILE_NOT_FOUND, while if I start the server by hand then the client will connect successfully. Is this a bug?


    [Migrated from previous Suggestion box.]

  137. wd says:

    Is there a future for Win32/Win64 in Longhorn and beyond? Are they being improved or set aside in favor of .NET?

    [Migrated from previous Suggestion box.]

  138. joel says:

    When and why was it ever decided to make toolbars moveable ? I’ve never run across anyone who uses this.

    [Migrated from previous Suggestion box.]

  139. Rob Myers says:


    I noticed that you used to post a lot to and you contributed a lot of great episode guides that are now archived at I haven’t seen anything Simpsons-related from you in over 10 years. Do you still watch the new episodes? What do you think of the Season 1 through 5 DVD sets and commentaries? Do you ever lurk in a.t.s or any of the web bulletin boards like simpsonsforum?

    Thank you, Rob

    [Migrated from previous Suggestion box.]

  140. boxmonkey says:

    In a previous article (, you talked about enabling NTFS on USB, but cautioned that you MUST use the annoying removal dialog every time you disconnect the drive.

    I was wondering if you could go into more detail about why exactly that is, and also if that applies only to thumb drives or also to external hard drives in an enclosure.

    I have an external 120GB USB drive formatted with NTFS, and it would be quite a pain if it were to become corrupted.

    [Migrated from previous Suggestion box.]

  141. boxmonkey says:

    erm, to clarify, why can’t we:

    Change setting to "Optimize for Performance"

    Format in NTFS

    Change setting to "Optimize for quick removal"

    …I mean, we CAN, and it’s what I’ve done, but is it a problem? I’ve searched all over and haven’t found any kind of even semi-official answer on this.

    [Migrated from previous Suggestion box.]

  142. Chee Wee says:

    Is there any reason why a NT4 device driver wouldn’t run on Windows 2000?

    A friend and I were having a drink and he mentioned that going by track records, Windows is not backward compatible, but Solaris is.

    As a developer, I know that is somewhat true (and untrue). I also (think I) know that the device driver model changed between NT4 and Windows 2000.

    [Migrated from previous Suggestion box.]

  143. Franco says:


    Wow! What a great site – one could spend days here. Here is my suggestion:

    I know in XP you can customize the common save dialog box with your own icons via the registry.

    But is there a way to customize the drop down menu on this same save dialog box as well?

    My goal is to get rid of the option to save on the desktop.

    Here is where I found the registry settings to change the save dialog in XP:

    Thank you!

    [Migrated from previous Suggestion box.]

  144. Franco says:

    Hello again,

    I should add that I work for a small academic library. The reason for not letting students/patrons save to the desktop is we have hard drive protection (reboot and the system is back to how we left it – anything student did to C: is gone). We protect C: and let D: be used a temp space. Alot of students/patrons are unaware and save their essays on the desktop. Upon reboot shocks sets in and well they are out to kill – which is understandable. We could put signs but no one would read them (we tried this). Hence why I want to be able to block any program from saving to C:.

    Sorry for the essay and thank you again for this blog/suggestion box!


    [Migrated from previous Suggestion box.]

  145. Dear Mr. Chen,

    I have read your blog posts about the great lengths you and the other programmers at MS have gone through to make third party programs work on Windows. Also, we are all aware of the cost of such compatibility prowess. Therefore, I have this suggestion: Perhaps with the next version of Windows (longhorn), instead of including all those compatibility fixes in the operating system, have them all as separate downloads. For example, assume my company just bought Baan 8.x or something. However, this program has a memory address problem that makes it crash the computer sporadically (despite the fact that this program costs millions). You fix this problem by placing a special DLL in the OS that recognizes when Baan runs and executes a special memory call that sovles the problem.

    Normally, this fix and all others are included in the box, but I say allow us SysAdmins to download the fixes separately in MSI format so we can distribute them via Group Policy and do NOT include the fixes in the box. Also, include a description on the download page showing exactly what the fix does. For example:

    "Microsoft Product Support Services has determined that a faulty memory call by Baan 8.x may cause the computer to crash. In order to obsolve this issue, please install this compatibilty fix."

    I know this would be a little more work for many sysadmins, but this way MS could ship Windows in a much more secure state and us sysadmins would know exactly what we are getting into when we purchase "X" third party app. And let us not forget that this idea would take some of the heat off MS and put it where it belongs – on the crappy third party vendors.


    James Summerlin

    [Migrated from previous Suggestion box.]

  146. Rune Huseby says:

    Just read your article about windowless controls. I have sometimes run into this limit using .NET Forms, but it seems the limit is hit at different times on different computers.

    So I’m curios at why, on mye 2GHz computer with 1GB of memory, there is such a limit?

    [Migrated from previous Suggestion box.]

  147. Rune Huseby says:

    Tj&#228;nare grabben

    Got a couple of questions:

    Approximately how many ‘other’ applications do you people test Windows with, and how old is the oldest?

    Where you around when Zachary wrote his book on building Windows NT?;s=books

    How did the Windows 3.x-devs of old react to the Undocumented Windows and Windows Internals books? Where there many errors in those books?


    [Migrated from previous Suggestion box.]

  148. Dan McCarty says:

    One of the most useful blogs I’ve ever seen for Windows programmers. Thanks!

    I’m wondering why a brush created with CreatePatternBrush(&amp;bmp) and a doesn’t start drawing at (0, 0) of the bit pattern. It looks like it starts drawing at about (4, 4) and tiles from there. Why is that?


    Dan McCarty

    [Migrated from previous Suggestion box.]

  149. console says:

    How does the console (cmd/command) know which programs to wait for, and which programs that should be "disconnected" from the console?

    Is the console-flag in the PE/COFF binary used for this, or does cmd/command use any other artifice?

    [Migrated from previous Suggestion box.]

  150. Jim Kane says:


    After reading your ole drag and drop series I was gave it a shot. all worked except for IDropSourceHelper. I decided to call IntializeFromBitmap. The only code change was I changed your call from createbitmap to createcompatiblebitmap. It didnt work – the method returned E_Fail. after tracing into windows it was apparent that if SPI_GetDragFullWindows if off the call will always fail – so I turned it on. Now I get back S_OK and my setdata method is called with DragImageBits and DragContent but still no Alpa blended image apears.

    I am totally fustrated with:

    (1) the dependance on SPI_GetDragFullWindows having to be on – I cant control that on a users machine.

    (2) even though the method call to initializefrombitmap works no image appears.

    Can you shed any light? Is only Initializefromwindow usable in a real world setting?

  151. Brian says:

    I just noticed lpstrDefExt doesn’t behave the way one would expect it to, or even the way the documentation describes. This may just be an error in the documentation or a bug in the API, but I have a feeling it’s for backwards compatibility…

    The api states:



    Pointer to a buffer that contains the default extension. GetOpenFileName and GetSaveFileName append this extension to the file name if the user fails to type an extension. This string can be any length, but only the first three characters are appended. The string should not contain a period (.). If this member is NULL and the user fails to type an extension, no extension is appended.


    What actually happens:

    If lpstrDefExt is NULL, no extension is appended, but if it is non-null, then it uses the first extension in the filter. In the following example, wang is appended rather than bar.

    ofn.lpstrFilter = "Text files (*.txt)*.wang;*.fooAll Files*.*";

    ofn.lpstrDefExt = "bar";

    [Migrated from Suggestion Box 2.]

    [Migrated from previous Suggestion box.]

  152. In Windows, when you select multiple files of the same type, right-click and select "open", the files are not opened in the order they were selected: the last file to be selected is opened first, then the others in order. This looks like the kind of thing that *must* have a reason, but I can’t guess what it would be. Is there really a reason for this ordering?

    [Migrated from previous Suggestion box.]

  153. CarlSo says:

    It seems that the SetWindowPos() documentation has had an error since the very early days of the SDK. I’m really surprised that after all of this time, this error has not been corrected.

    Could you please comment on whether the documentation is indeed incorrect?

    Under the Remarks section, the SDK documentation for SetWindowPos() reads:


    If neither the SWP_NOACTIVATE nor SWP_NOZORDER flag is specified (that is, when the application requests that a window be simultaneously activated and its position in the Z order changed), the value specified in hWndInsertAfter is used only in the following circumstances:

    * Neither the HWND_TOPMOST nor HWND_NOTOPMOST flag is specified in hWndInsertAfter.

    * The window identified by hWnd is not the active window.

    This is incorrect. In fact, the opposite is true.

    It should read WITH CORRECTION:

    If neither the SWP_NOACTIVATE nor SWP_NOZORDER flag is specified (that is, when the application requests that a window be simultaneously activated and its position in the Z order changed), the value specified in hWndInsertAfter is used only in the following circumstances:

    * The HWND_TOPMOST or HWND_NOTOPMOST flag is specified in hWndInsertAfter.

    – or –

    * The window identified by hWnd is the active window.

    Otherwise, the window is brought to the top of the Z order (i.e., hWndInsertAfter is considered to be HWND_TOP).

    In other words:

    The first rule says that when a window is transitioned from a non-active window to the active window, and its z-order is being changed, it can only be brought to either the top of the topmost windows or to the top of the non-topmost windows. SetWindowPos() will not let you place it anywhere else.

    The second rule says if the window is already the active window (and you would like it to remain the active window), SetWindowPos() allows you to reposition it anywhere in the z-order.

    Do I have this right?

    [Migrated from previous Suggestion box.]

  154. pete says:

    i was wondering if there is a system call to get the processes current enviroment. if not, is keeping track of **envp a valid strategy? or can its base address change as things are added and removed to the enviroment?

    [Migrated from previous Suggestion box.]

  155. Greg Bakker says:

    Issues to do with the transition from short filenames to long filenames.

    eg this one still bites in 2000 / XP:

    md v

    cd v

    echo something > aaaaaab.txt

    echo something > aaaaaaab.txt~

    echo something > aaac.txt

    :Looks like there should be two ‘something’s, but gets three

    :This is possibly valid if you look at the short filenames

    findstr something *.txt

    :Should get the same number of ‘something’s as previously but gets one

    findstr /s something *.txt

    At least one editor marks its backup files with a ‘~’ suffix.

    [Migrated from previous Suggestion box.]

  156. Why is SystemParametersInfo the way it is? I understand the concept of a getter and setter being stuffed into one function (and don’t mind it being like that). What I am curious about is why are things like SPI_SETMOUSESPEED and SPI_SETKEYBOARDCUES passing in *integer or boolean* data thru the pointer parameter instead of the integer parameter. I would have guessed that all setters would go through the integer (assuming the data would fit), and all getters would go through the pointer.

    [Migrated from previous Suggestion box.]

  157. Adrian says:

    Great blog. Here’s my suggestion.

    Message dispatching is subtle and not clearly documented. Consider:

    #define MSG_ANIMATE (WM_USER+101)

    case MSG_ANIMATE:

    if (cSteps > 0)


    ScrollWindow(hwnd, …);

    cSteps -= 1;



    case WM_PAINT:


    // …


    PostMessage(hwnd, MSG_ANIMATE, …);


    The MSG_ANIMATE scrolls the window, creating an invalid region. If there are no other messages in the queue, then GetMessage should give us a WM_PAINT, which, in turn, posts a new MSG_ANIMATE, effectively creating a loop until cSteps reaches zero.

    (I know you could achieve a similar effect with a timer, but that doesn’t demonstrate my point).

    Since WM_PAINT should be dispatched *only* when (1) there’s an invalid region and (2) there are no messages in the queue, then mouse clicks should be able to interrupt the scrolling.



    cSteps = 0;


    But if you implement this, you’ll find that the clicks are queued until after the scrolling has completed.

    So there must be more to message dispatching than Petzold and Richter taught us. Can you illuminate us?

    [Migrated from previous Suggestion box.]

  158. Some Guy says:

    One thing I’d be interested for you to blog on is how some apps apparently get away with missing out a call to BeginPaint/EndPaint in their WM_PAINT handling code.

    Some open source win32 apps do this and yet don’t hang, but if I just do:

    case WM_PAINT: return 0;

    then Windows 98 loops forever inside CreateWindow.

    Are there some appcompat hacks in this area? It feels like some magic API calls do a BeginPaint for you if you forget, or do *something* so that Windows is happy.

    [Migrated from previous Suggestion box.]

  159. Andres Bastidas says:

    Why "Safe Mode" (on all windows versions) take longer to boot that "Normal Mode"?

    In theory "Safe Mode" load less number of drivers and none of the "Start Up" listed programs and services. Shouldn’t it be faster?.

    Is this a matter of impression only?

    Thanks for all the wonderful postings


  160. Jonathan Wilson says:

    I have noticed that pressing the "Show Desktop" button on the taskbar does different things to manually minimizing all windows.

    What does it do that is different and why doesnt it do the same thing as manually minimizing windows?

  161. pUnk says:

    What’s the deal with that jumble of stuff in the shell light-weight utilities and shell miscellaneous functions? Some of it looks old and crusty, whilst other parts are a gold mine!

  162. Pojidembe says:

    Lucovsky -> Google

    MonopolySoft 0 GoodGuys 1

    I suggest other Distinguished Engineers follow!

    I wonder if Microsoft has a ‘monopoly sheep’ with a face looking like Judge Jackson or something similar for their internal buffoonery…

  163. Anonymous says:

    Why is the bolding of items in the system menu so inconsistent? For example, if you click on a program icon in the upper left corner of a window, the Close item is bolded, and if you double-click the icon, the window will close. If you right-click on the title bar, the Maximize item will be bolded on certain programs and if you double-click on the title bar, it will maximize the window. But on some programs, like Windows Explorer, right-clicking on the title bar will bring up a system menu with the Close item bolded. I think the maximize item is supposed to be bolded because double-clicking on the title bar still maximizes it.

  164. tkarven says:

    how about a automatically image save function in IE? when we activate the function, all images from website browsed will be stored in a pre-defined folder…

    or 1 click image saving function, where simply save the image file in the pre-defined folder, skipping the CFileDialog save as…..

  165. Grey Hodge says:

    You said in the blog post about how the Start Button got it’s name you’d tell us how the Taskbar got it’s name. That was a year and a half ago. Can we know now? :)

  166. Raymond, given the debate about SPI vs. accessing the registry directly, why not an article on how developers screw up placement of their registry data due to misspellings of the key string, etc.

  167. Francisco says:

    How to disable the screensaver and restore it later? It seems like it some methods will disable it but others won’t.

  168. George Thomas says:

    I have the same problem described in the following article

    is this actually a bug?

  169. Jonathan Wilson says:

    Soemthing that has always bugged me about the windows shell…

    Why does the "run" dialog box do autocomplete some of the time but other times it wont do autocomplete?

  170. Steve Hazel says:

    I’ve been working on a midi sequencer

    (song player) using c++ win32 API.

    I use timeSetEvent and a callback to make

    a timer capable of 1 msec resolution.

    It works well EXCEPT if you do certain UI

    things like minimize/maximize a window, etc.

    Is the minimize window GUI code disabling interrupts or something???

    The same thing happens when I use

    DirectMusic’s timer.

    The "big boy" sequencer makers like cubase,

    cakewalk, etc are making hardware to get

    around this limitation in windows.

    Even this day and age in XP.

    What’s the deeeeal ???

    Is this not something that can be fixed?

    In Win9x, you could "thunk" to keep the OS

    from allowing ANY other code to run.

    I can see why that ain’t a good idea.

    But can’t SOMEbody stop the glitching

    without me having to build new hardware?

    I can send you a simple code example

    if you’re willing to investigate.

    (less than 500 lines of win32 API code.)

    Also, if you know of ANYone else who

    could help me with this, you’ld make

    me a VERY happy guy…

    Thanks for your consideration :)


  171. Dave Brown says:
    1. RegisterSysMsgHandler. This is mentioned in MSDN in the "OnNow Power Management" section, and looks very useful. Does it exist?

      2. Copying files in Explorer. If you’re copying a large number of files and files with the same name already exist in the target folder, it wouldn’t be rocket science for Windows to see if the content of the files are actually different before bringing up a warning dialog.

      3. Minimizing windows. I use the large thumb button on my mouse to minimize windows. When I do this, there are some windows that instead of minimizing to the task bar, minimize to an iconized window at the bottom of the desktop, rather like Progman in Windows 3.1. If I click the minimize button on the title bar instead, they’re ok, they go to the taskbar. What’s the difference?

      An example application is the Platform SDK (Microsoft Document Explorer 7.0).

      Actually, I just found that if you write a small app:

      hwnd = FindWindow(NULL, "Platform SDK – Windows Server 2003 Family");

      ShowWindow(hwnd, SW_MINIMIZE);

      then it does the same thing – icon instead of task bar. So there’s some difference between clicking the minimize button and calling ShowWindow(hwnd, SW_MINIMIZE)

      P.S. Great Blog BTW

  172. I have just rebuilt screen capture code in VB.Net based on my old VB6 + Win32 API code. What I noticed then was that taking screenshots of the desktop didn’t render windows that were defined with WS_EX_LAYERED. If I get a screenshot of the layered window itself, I can BitBlt it from its DC.

    There are a couple of questions I have about this:

    1. Why don’t layered windows render on the desktops DC?

    2. Why/How does Ctrl+PrintScreen render those layered windows?

    Along the screen capture lines, how do you render the cursor in the screenshot? Most examples I have seen just render the cursor with DrawIcon.



  173. Albert says:

    Not really a question, more of a bug report:

    This occrus in Windows XP, when using the Windows Classic theme: Sometimes when the language bar is enabled on the taskbar, for some reason, the taskbar grows taller by 1 pixel or 2. The problem is that the Start button isn’t resized to take that into account and so it moves up by a pixel or 2.

    When the user clicks on a pixel that is on the bottom row of the screen, there appears to be some sort of "magic" that moves the pointer up by 2 pixel. But, since the Start button has moved up slightly, that isn’t quite enough to reach it and the click fails. The same applies to the task buttons.

    Similarly, you cannot click on any of the quicklaunch icons from the bottom row of pixels. The bit of magic moves the pointer up but it’s still slightly off. This happens whether the language bar made the taskbar taller or not.

  174. I would like to:

    General Interest Question

    This should be useful for anybody working with a massive number of rows.

    I would like to:

    1. Compare values in two columns, with the aim of high lighting any particular values which exist in the "non-base" column which also exist in the base (original) column.

    2. Is that possible to do from different worksheets?


  175. Rob says:

    Hi Raymond,

    Is it wise of UI control developers to overload the meaning of built-in windows styles (like WS_MAXIMIZED) to change the behaviour of the control? If not, would you care to comment on the documented and undocumented instances of this in the Rich Edit Control?



  176. Koro says:


    Could you talk about the design decisions that made the Windows XP theme manager (UxTheme) be implemented as an user-mode service adding hooks instead of directly modifying the very code that draws the (classic) windows?



    Really great blog by the way

  177. Bernie T says:

    When you compile a DLL and an EXE using the Multi-Threaded CRT libs (/MT), you get two independent heaps – one for the malloc/free in the DLL and a malloc/free in the EXE.

    If you malloc in the EXE and then call a func in the DLL that frees it will crash. You cannot free a pointer allocated in the EXE.

    Now, why would this ever happen?

    If you are using C++ and are passing objects(eg: a std:string) as a value parameter, it gets allocated in the EXE, but freed by the function in the DLL.

    The solution is to using the DLL versions of the CRT libs (so they both use the same instances of malloc/free) or simply pass objects by reference.

    I think people should be made aware of "tryckinesses" like this when using DLLs.


  178. Jonathan Wilson says:

    Can you talk about uxtheme and in particular how uxtheme can theme the non-client areas of windows on apps that dont even know it exists. (basicly, I want to know what black magic makes uxtheme and themeing work the way it does)

  179. James says:


    Almost two years ago, you wrote in:

    "(The general rule about issues like this is simply not to talk about it because the word may get back to the company that made the original mistake…"

    In the interest of improved products for everyone, why protect the guilty? It would certainly take the heat off Microsoft and perhaps pressure other vendors to do things right the first time.

    On to current events: I have a suspicious feeling the changes in Windows XP SP2 to degrade firewire (1394b) performance covers-up defects in a non-Microsoft product.

    Of course Microsoft isn’t talking and nobody else knows better. But there are other menufacturers who try to work-around Microsoft’s SP2 changes – and causing problems.

    The lack of information (truthful or otherwise) breeds mistrust and wasts time.

    PS. Your blog is certainly insightful and always a pleasure to read.


  180. Enigma2e says:

    Could you talk about why all of the window-ing APIs require an HINSTANCE parameter. I realize its *probably* not used now, but obviously at one point it was. Well, what was it for?

  181. Can you talk about advantages of Windows over Linux

  182. Also , I am using your blog’s URL on my website.

    I hope that is ok , no problems for anybody.

    The URL is :

  183. Szajd says:


    Could you tell us, what’s the reason behind the fact, that the taskbar does not group the buttons if it’s on the left side of the desktop? Instead it just divides the stuff into two columns, if there are many windows open.


  184. ben says:

    I have a question about plugging in devices to windows. I have a Dell Jukebox, and every time I plug it in, I get about 4 message boxes asking me what I would like windows to do with the device. Each time I select the "Take no action" option, and I check the checkbox, "Always perform this action for this device", yet every time I plug it in, I still get these message boxes.

  185. Francisco says:

    One thing I noticed is that sometimes some program Windows either don’t show up in the taskbar or they disappear until you switch back to them (and this is not even when the taskbar is full and needs to scroll).

    Why is that? I guess the answer will be the usual: the alternative would be worse…


  186. Norman Diamond says:

    I have just read a bunch of definitions in the public file wtypes.idl installed as part of the Microsoft SDK from February 2003. The more I read, the more confused I got. I understand COM isn’t the API or UI, but you’ve discussed it a few times. Any chance you could include wtypes.idl in a future discussion?

  187. Stewart Tootill says:

    I’ve been working with speech input lately, and the speech engine our customer uses the ALT+numpad combinations to input accented characters. I couldn’t be bothered to keep typing these combinations so I wrote some code to spoof the keys in. Naively (lazily) I used PostMessage to spoof keys into my window, and it didn’t work. Changing it to SendInput fixed the problem (which I should have in the first place), but if you look at the messages in spy++ they are the same.

    What is the difference?

  188. Jason says:

    One of my pet peeves is keyboard shortcut inconsistencies in Windows. I’m sure it’s a "legacy" thing, but the one that gets my blood boiling every time is the <CTRL><Backspace> shortcut to delete the previously typed word. It works in about 70% of the programs I regularly use, but fails to work in a select few that really drive me crazy: Notepad and Excel top that list. Is that keyboard shortcut something that has to be implemented on a program by program basis, or is it something more subtle?

  189. Norman Diamond says:

    Really not a Visual Studio question:

    Visual Studio 6 includes a tool called "Dependency Walker" that displays some information about DLLs. Dependency Walker thinks it knows how to display even more information about DLLs, by calling an external viewer called Quikview.



    "Note File viewers are not supported by Microsoft Windows 2000 and later systems."

    but doesn’t say why. And Dependency Viewer doesn’t know what MSDN says, Dependency Viewer just gives an error message instead.

    Why was Quikview deleted? This used to be part of the OS, and the deletion makes a mockery of compatibility.

    By the way Microsoft has some Knowledge Base articles mentioning Quikview, but you can’t find them by searching the Knowledge Base. You can find them by magic ^_^ But they only discuss Windows 98, they don’t say why later OSes don’t have it. One of the articles is:

  190. Post suggestions for future topics here instead of posting off-topic comments. Note that the suggestion…

Comments are closed.

*DISCLAIMER: I DO NOT OWN THIS CONTENT. If you are the owner and would like it removed, please contact me. The content herein is an archived reproduction of entries from Raymond Chen's "Old New Thing" Blog (most recent link is here). It may have slight formatting modifications for consistency and to improve readability.

WHY DID I DUPLICATE THIS CONTENT HERE? Let me first say this site has never had anything to sell and has never shown ads of any kind. I have nothing monetarily to gain by duplicating content here. Because I had made my own local copy of this content throughout the years, for ease of using tools like grep, I decided to put it online after I discovered some of the original content previously and publicly available, had disappeared approximately early to mid 2019. At the same time, I present the content in an easily accessible theme-agnostic way.

The information provided by Raymond's blog is, for all practical purposes, more authoritative on Windows Development than Microsoft's own MSDN documentation and should be considered supplemental reading to that documentation. The wealth of missing details provided by this blog that Microsoft could not or did not document about Windows over the years is vital enough, many would agree an online "backup" of these details is a necessary endeavor. Specifics include:

<-- Back to Old New Thing Archive Index