The Old New Thing

Practical development throughout the evolution of Windows.

Latest posts

The normal string manipulation functions stop on a null terminator, so be careful when manipulating double-null-terminated strings
Feb 19, 2010
Post comments count 0
Post likes count 0

The normal string manipulation functions stop on a null terminator, so be careful when manipulating double-null-terminated strings

Raymond Chen
Raymond Chen

One of the many gotchas of working with double-null-terminated strings is accidentally using functions on them which were designed to operate on single-null-terminated strings. Now, you do need to use those single-null-terminated strings, but you also need to know when they won't do what you want. One of the responses to my psychic detection that somebody passed a single-null-terminated string to is, "Oh, no, I double-null-terminated it. Look: See, I put an extra at the end." Well, yeah, you put an extra at the end, but all that does is terminate the format string. The function accepts its format st...

Don't forget to double-null-terminate those strings you pass to SHFileOperation
Feb 18, 2010
Post comments count 0
Post likes count 0

Don't forget to double-null-terminate those strings you pass to SHFileOperation

Raymond Chen
Raymond Chen

About once every two months for the past six months (I stopped checking further back), somebody reports a problem with the function. Often, they don't include very much information at all. They just say, "I call the function and it doesn't work." Here's an example: I'm hitting a problem with when using it to frob files in the gonzo directory when the user's SID ends in an odd number. The function returns file not found, but the file is definitely there. If you read the variable names carefully, you can see the problem. The and members of the structure are double-null-terminated strings. (There's...

Happy birthday, Windows 2000, and try not to get too hung over
Feb 17, 2010
Post comments count 0
Post likes count 0

Happy birthday, Windows 2000, and try not to get too hung over

Raymond Chen
Raymond Chen

On this date ten years ago, Windows 2000 launched in San Francisco. One of my colleagues was working as a staff member at the Windows 2000 Conference and Expo in San Francisco, an event which accompanied the Windows 2000 launch event. Also working at the event was his boss's boss, and the two shared a hotel room. Their flight back to Redmond wasn't until late in the afternoon, so they decided to spend their last day in San Francisco being tourists in their host city. Hopping on a cable car, walking down the crooked street, seeing the sights in Chinatown and Fisherman's Wharf, all the standard tou...

The fundamental rule of rocket science
Feb 16, 2010
Post comments count 0
Post likes count 0

The fundamental rule of rocket science

Raymond Chen
Raymond Chen

Pretty straightforward.

It rather involved being on the other side of this airtight hatchway: Dubious escalation
Feb 16, 2010
Post comments count 0
Post likes count 0

It rather involved being on the other side of this airtight hatchway: Dubious escalation

Raymond Chen
Raymond Chen

Consider this type of dubious security vulnerability: There is a buffer overflow bug in kernel driver X. To exploit it, call this function with these strange parameters. The exploit works only if you are logged on as administrator, because non-administrators will get . Yes, this is a bug, and yes it needs to be fixed, but it's not a security bug because of that only if you are logged on as an administrator clause. It's another variation of the dubious elevation to administrator vulnerability. After all, if you're already an administrator, then why bother attacking kernel mode in this complicated way? Ju...

Advocating the overthrow of the government of the United States by force or subversion
Feb 15, 2010
Post comments count 0
Post likes count 0

Advocating the overthrow of the government of the United States by force or subversion

Raymond Chen
Raymond Chen

It has been widely reported that South Carolina now requires "subversive groups" to register with the Secretary of State (and pay a $5 filing fee). Curiously, the list of organizations which must register include "an organization subject to foreign control." I wonder if this means that all consulates have to register, and that when any foreign dignitary visits South Carolina, they have to pay a $5 filing fee. (Not to mention all foreign-owned companies like Shell Oil.) Actually, it has been pointed out that a "subversive organization" includes one which advocates, teaches, or practices the propriety of contro...

Private classes, superclassing, and global subclassing
Feb 15, 2010
Post comments count 0
Post likes count 0

Private classes, superclassing, and global subclassing

Raymond Chen
Raymond Chen

In the suggestion box, A. Skrobov asks why it's impossible to superclass , but the example that follows is not actually superclassing. When I register my own class under this atom, and leave NULL in WNDCLASS.hInstance, Windows fills it in for me. Then I have two distinct classes registered: (0,WC_DIALOG) and (hMyInstance,WC_DIALOG), and DialogBox functions all use the first one. This question is a bit confused, since it says that the goal is to superclass the dialog class, but registering is not superclassing. First, I'll refer everyone to this MSDN article which describes the various ways of manipulati...

A decidedly Canadian response to the shambles that was the running portion of the modern pentathlon in Beijing
Feb 12, 2010
Post comments count 0
Post likes count 0

A decidedly Canadian response to the shambles that was the running portion of the modern pentathlon in Beijing

Raymond Chen
Raymond Chen

Living so close to the United States-Canada border means that there's a lot of friendly teasing of the many Canadians in our midst. It's a good thing Canadians as a whole seem to have a pretty good sense of humor about it. (Well, except the Quebecers. Those humorless grumps.) The final stage of the modern pentathlon is supposed to be a cross-country course, run through grassy fields, with occasional obstacles like a brook that needs to be hurdled. At the 2008 Olympics in Beijing, however, the course didn't so much resemble a cross-country run as it did waiting in line at Disneyland. Instead of traversing an outd...

How do I get information about the target of a symbolic link?
Feb 12, 2010
Post comments count 0
Post likes count 0

How do I get information about the target of a symbolic link?

Raymond Chen
Raymond Chen

Functions like and , when asked to provide information about a symbolic link, returns information about the link itself and not the link destination. If you use the function, you can tell that you have a symbolic link because the file attributes will have the flag set, and the member will contain the special value . Okay, great, so now I know I have a symbolic link, but what if I want information about the link target? For example, I want to know the size of the link target, its last-modified time, and its name. To do this, you open the symbolic link. The I/O manager dereferences the symbolic link and gives...