October 27th, 2020

The BurgerMaster segment may have been legendary, but some legends aren’t true

Some time ago, I discussed the historical significance of the Burgermaster drive-in restaurant. This triggered a memory from one of my colleagues:

I also heard that the BurgerMaster was identified by an ordinal value, and that ordinal value was the telephone number of the restaurant.

That sounds like a fun story. Alas, it doesn’t hold up.

The Get­Proc­Address function checks the numeric value of the string pointer it is given. If it is greater than or equal to 65536, then it is interpreted as a string pointer. But if it is less than 65535, then it’s treated as an ordinal. Therefore, ordinal values are limited to 65535. That’s not enough digits to hold a U.S. telephone number.

The Global­Master­Handle function was exported as ordinal 28. There does not appear to be any significance to this number. It was just the next available ordinal in the block assigned to global memory functions.

Topics
History

Author

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

4 comments

Discussion is closed. Login to edit/delete existing comments.

  • Neil Rashbrook

    Ah yes, the good old days, when memory was so tight that you preferred to import functions by ordinal instead of name. I think you could probably go one better than by using instead. Or you could always manually import it in your file; I've done that before when I was using an old version of MSVC for Windows 3.0 but I wanted to import Windows 3.1 functions.

    Read more
    • Ivan K

      Sorry for nitpicking or completely missing a joke, but makintresource(28) would do a <code>, without the _PTR in the olden days #define I guess.
      I think it was pointed out here before somewhere that the first 64k of memory was reserved so that's how a number instead of a string pointer into memory could be detected.
      I'm guessing this is safer and quicker than parsing the string for total value between "min" and "max" (and...

      Read more
  • cheong00

    On the other hand it will sound more realistic if the tale is "I also heard that the BurgerMaster was identified by an ordinal value, and that ordinal value was the last 4 digits of telephone number of the restaurant."

    It's very common for big companies to allocate a block of continuous phone numbers for their PBX phones. It's quite doable to just allocate a block of numbers and assign forwarding to restaurants according to the...

    Read more
  • Peter Cooper Jr.

    Is there any chance that "28" was the company-wide speeddial number that Burgermaster was assigned to? (Like you'd hit "speeddial-2-8" or the like, depending on how the phone system did speeddials?) Or maybe it was just the last two digits of the full phone number (by coincidence or not)?

    I'm in my 30's and I remember as a child only needing to dial 4 digits when calling within the same exchange, so it is possible that...

    Read more