The Old New Thing

Practical development throughout the evolution of Windows.

Latest posts

Sep 6, 2012
Post comments count 0
Post likes count 1

You can't rule out a total breakdown of normal functioning, because a total breakdown of normal functioning could manifest itself as anything

Raymond Chen

A customer was attempting to study a problem that their analysis traced back to the function returning . Is it a valid conclusion that there is no heap corruption? While heap corruption may not be the avenue of investigation you'd first pursue, you can't rule it out. In the presence of a total breakdown of normal functioning, anything can happen, including appearing to be some other type of failure entirely. For example, the heap corruption might have corrupted the bookkeeping data in such a way as to make the heap behave as if it were a fixed-sized heap, say by corrupting the location where the heap manage...

Sep 5, 2012
Post comments count 0
Post likes count 1

How did the X-Mouse setting come to be?

Raymond Chen

Commenter HiTechHiTouch wants to know whether the "X-Mouse" feature went through the "every request starts at −100 points filter", and if so, how did it manage to gain 99 points? The X-Mouse feature is ancient and long predates the "−100 points" rule. It was added back in the days when a developer could add a random rogue feature because he liked it. But I'm getting ahead of myself. Rewind back to 1995. Windows 95 had just shipped, and some of the graphics people had shifted their focus to DirectX. The DirectX team maintained a very close relationship with the video game software community, ...

Sep 4, 2012
Post comments count 0
Post likes count 1

Why don't the shortcuts I put in the CSIDL_COMMON_FAVORITES folder show up in the Favorites menu?

Raymond Chen

A customer created some shortcuts in the folder, expecting them to appear in the Favorites menu for all users. Instead, they appeared in the Favorites menu for no users. Why isn't working? The value was added at the same time as the other values, and its name strongly suggests that its relationship to is the same as the relationship between and , or between and , or between and . That suggestion is a false one. In fact, is not hooked up to anything. It's another of those vestigial values that got created with the intent of actually doing something but that thing never actually happened. I don't think...

Sep 3, 2012
Post comments count 0
Post likes count 1

Buzzword-filled subject line easily misinterpreted by unsuspecting manager

Raymond Chen

A colleague of mine submitted some paperwork regarding the end-date of his college intern. The automated response combined HR buzzwords in an unfortunate way: Subject: Intern Termination Report was executed Just to be sure, my colleague stopped by his intern's office. He's still there. And still alive. For now.

Aug 31, 2012
Post comments count 0
Post likes count 1

Adventures in undefined behavior: The premature downcast

Raymond Chen

A customer encountered the following problem: The function converts the cookie back to a object, and then checks if the object is a object by calling . If so, then it does some more stuff to figure out what type of paint to buy. (Note to nitpickers: The actual scenario was not like this, but I presented it this way to illustrate the point. If you say "You should've used RTTI" or "You should've had a BuyPaint method on the Shape class", then you're missing the point.) The programmers figured they'd save some typing by casting the result of to a right away, because after all, since is a virtual method...

Aug 30, 2012
Post comments count 0
Post likes count 1

I'm not calling a virtual function from my constructor or destructor, but I'm still getting a __purecall error

Raymond Chen

Some time ago, I described what is for: It's to detect the cases where you call a virtual method with no implementation (a so-called pure virtual method). This can happen during object constructor or destruction, since those are times when you can validly have a partially-implemented object. Well, there's another case this can happen: If the object has already been destructed. If you call a method on an object that has already been destructed, the behavior is undefined. In practice, what happens is that the method runs on whatever leftover values are in memory where the object used to be. Depending on how luc...

Aug 29, 2012
Post comments count 0
Post likes count 1

Psychic debugging: Why Chinese characters don't work

Raymond Chen

Here's a walkthrough of an actual case of psychic debugging. I'm using the internal XYZ table-generating tool, but it appears to be useless in my case. Does this tool work? Right now, I'm just resorting to the manual method of generating my data table (Chinese and English). Hooray for vague questions! "It appears to be useless." But there were enough tiny clues in the question that made it possible to make a psychic guess. First of all, the parenthetical "Chinese and English" suggests that there are Chinese characters in the data being passed to the XYZ table-generating tool. Second of all, one might make a...

Aug 28, 2012
Post comments count 0
Post likes count 1

Command line tool to manage Windows 7 Libraries, with source code

Raymond Chen

A customer asked if there was a command-line tool for managing Windows 7 Libraries so that they could create and deploy libraries across their organization. Not only is there such a tool, it even comes with source code. The Shell Library Command Line Sample shows how to manage Windows 7 libraries programmatically via the interface. And it's actually a useful program on its own. For example, to see all the folders that are part of your Documents library, use the command Each of the commands has further sub-options. And the source code shows how to perform each of these actions programmati...

Aug 28, 2012
Post comments count 0
Post likes count 1

Well at least nobody's parking there any more

Raymond Chen

There is a field next to the Microsoft building I used to work in, and for a time, people parked their cars out on the field, presumably because finding a proper parking space in the garage became difficult due to overcrowding. To prevent people from parking in the field, Security placed a large log across the access to the field. The technique worked: Nobody parked in the field any more. Some months later, our building had a fire drill, and everybody dutifully filed out of the building and waited until the all-clear signal was given to return. Normally, people would wait in the field, because that is the design...