The Old New Thing

Practical development throughout the evolution of Windows.

Latest posts

Oct 12, 2009
Post comments count 0
Post likes count 1

The classical model for linking

Raymond Chen

Commenter Adam wonders why we need import libraries anyway. Why can't all the type information be encoded in the export table? This goes back to the classical model for linking. This model existed for decades before Microsoft was even founded, so at least this time you don't have Bill Gates to kick around. (Though I'm sure you'll find a way anyway.) Back in the days when computer programs fit into a single source file, there was only one step in producing an executable file: You compile it. The compiler takes the source code, parses it according to the rules of the applicable language, generates machine cod...

Oct 9, 2009
Post comments count 0
Post likes count 1

LoadString can load strings with embedded nulls, but your wrapper function might not

Raymond Chen

Whenever somebody reports that the function or the member of the structure is not working, my psychic powers tell me that they failed to manage the double-null-terminated strings. Since string resources take the form of a counted string, they can contain embedded null characters, since the null character is not being used as the string terminator. The function knows about this, but other functions might not. Here's one example: The problem is that you're using a function which operates on null-terminated strings but you're giving it a double-null-terminated string. Of course, it will stop copying at...

Oct 8, 2009
Post comments count 0
Post likes count 0

In Hawaiʻi, "mahalo" might officially mean "thank you"

Raymond Chen

In Hawaiʻi, you see the word Mahalo on signs everywhere. In theory, the word means Thank you, but my friend Joe Beda pointed out that in practice the word has a completely different meaning. Here are some examples: In practice, the word mahalo means You're screwed. Obligatory clarification: This was a joke, an attempt at observational humor.

Oct 8, 2009
Post comments count 0
Post likes count 1

What is the format of a double-null-terminated string with no strings?

Raymond Chen

One of the data formats peculiar to Windows is the double-null-terminated string. If you have a bunch of strings and you want to build one of these elusive double-null-terminated strings out of it, it's no big deal. But what about the edge cases? What if you want to build a double-null-terminated string with no strings? Let's step back and look at the double-null-terminated string with two strings in it. But I'm going to insert line breaks to highlight the structure. Now I'm going to move the lines around. This alternate way of writing the double-null-terminated string is the secret. Instead of viewin...

Oct 7, 2009
Post comments count 0
Post likes count 0

I will be speaking at Reflections|Projections 2009

Raymond Chen

The way to get me to show up at your conference is to invite me. The folks who run the Reflections|Projections 2009 conference figured that out. I will be there on Friday the 16th for the job fair in the Siebel Atrium, and my talk How Microsoft is Different from School is scheduled for Saturday morning at 11:15. Attendance is free, but that's not much consolation seeing as you first have to get there. It's always a weird situation I find myself in when I'm invited to give a talk at a conference, because if I give a talk on the stuff I usually write about, you'll get something like a one-hour discussion of the...

Oct 7, 2009
Post comments count 0
Post likes count 1

The ways people mess up IUnknown::QueryInterface, episode 3

Raymond Chen

Today we'll combine information you already know, some of which I covered in The ways people mess up IUnknown::QueryInterface with additional clues from The layout of a COM object. There's still not enough information for you to solve the problem entirely on your own, but maybe you can demonstrate your nascent psychic debugging powers and solve the problem. A customer contacted the shell team because their shell extension was causing the shell to crash. Perhaps they were doing something wrong, but they couldn't see what. The crash looked like this: Your next hint is that the crash takes place while the sh...

Oct 6, 2009
Post comments count 0
Post likes count 1

Proto-Microspeak: Efforting

Raymond Chen

I have only two citations, so it may not be proper Microspeak. We're efforting that for you. They're not just trying, they're efforting. Solution efforting seems to fall in a gap between teams so there's no clear owner or resourcing focused on it. Bonus jargon: resourcing. Actually, that one sentence came from a longer document packed with management-speak. Here's another beauty from that longer document: "A lot of effort goes into availing efficient systems to streamline incident handle time." Of course, what the person really meant to write was "A lot of efforting..." It appears that the term has been h...

Oct 5, 2009
Post comments count 0
Post likes count 0

Trying to come up with the most annoying meal ever

Raymond Chen

The other night, I had a small fish for dinner. The small fish combines two annoying features: (1) Lots of tiny bones, and (2) not a lot of meat. The challenge then occurred to me: Come up with the most annoying meal ever. Specifically, the criterion for most annoying meal would be a meal in which the diner expends the most amount of effort to obtain the least amount of food, while still adhering to the general shape of a traditional dinner. Here's what I came up with: Appetizer: Dried watermelon seeds. To eat dried watermelon seeds, you insert the seed vertically between your back teeth and bite down...

Oct 5, 2009
Post comments count 0
Post likes count 1

Why doesn't the mail image resizer check the image size before offering to resize?

Raymond Chen

Commenter Igor lambastes the image resizer dialog that appears when you select Send To Mail Recipient. (And people think I'm the one with the social skills of a thermonuclear device.) This dialog pisses him off so much, he complained about it again. The root of the diatribe appears to be that the image resizer dialog appears, even if it turns out the resizer won't do anything. For example, the resizer dialog appears even if the images are already small, or if the files have a .jpg extension but aren't actually JPG images, Why is it so idiotic that it fails to check these simple things before offering to do i...