October 21, 2015

Raymond Chen recently did a post about various functions that extracts a GUID from a string. He left out various pieces of information and I’m going to try to complete the picture.

Let’s start with UuidFromString. On Windows 95/98 UuidFromStringW is just a stub that returns RPC_S_CANNOT_SUPPORT. The minimum version information on MSDN is wrong in the usual way.

IID­From­String has already been covered so I’ll skip that.

Next up is CLSID­From­String. MSDN does of course not say anything about the ProgId handling but Raymond did talk about this part, I’ll just add that the implementation on Windows 8 checks if the string starts with a ‘{‘ and then tries to parse it as a GUID, otherwise it does a ProgId look-up pretty much like CLSIDFromProgID would do (I did not look at other Windows versions).

Now we’ll get to the real reason for this post. There are three more functions Raymond did not cover at all!

The first one is CLSIDFromStringWrap, exported by ordinal in SHLWAPI (version 5 and later). On Windows 8 it works like CLSID­From­String but on Windows 98/2000/XP (IE 5/6) it does not support ProgIds and works more like IID­From­String.

The second one is SHCLSIDFromString, exported by ordinal in SHELL32 (all versions) and by name in version 6 from XP.SP1 and later. MSDN fails to mention that it used to only be exported by ordinal and the version information is wrong. It works like IID­From­String except that the input string is a LPCTSTR (CHAR* on Windows 95/98 and WCHAR* on NT based systems).

The third one is RtlGUIDFromString in NTDLL (Windows 2000 and later). Because it takes a UNICODE_STRING it is mostly useful for kernel developers.

Our journey ends with GUIDFromString. This function is actually implemented in both SHELL32 (version 4.71 and later) and in SHLWAPI (version 5 and later). MSDN documents the ordinals but fails document the minimum dll versions.

Disable Windows Update P2P distribution

August 1, 2015

This setting seems to be controlled by a value called DODownloadMode:


You should probably reboot after changing this or just manually turn the feature off in the settings app…

Disable Cortana web results

July 31, 2015

I’m never going to type in basic internet search queries in Cortana so there is no point in cluttering the results with useless garbage, this is how you disable it:

The basic UI setting is controlled by this value:


If you really want to kill Cortana you can set various group policies:
Read the rest of this entry »

Does not compute

January 27, 2015

And so it begins, the inevitable replacement of the classic Windows applets with slow Modern apps that lack features and are horrible in every way possible.

One of the most important features of Calculator, Notepad and friends is a fast start-up time and I cannot believe that someone finds it acceptable that a calculator needs a splash screen in 2015.

I really like the Windows 7 calculator and the bit-toggling panel in programmer mode is its best feature and of course it has been removed. But why stop there, no programmer is ever going to need to XOR anything so lets just remove that along with bit shifting and rotation!
Read the rest of this entry »

A home for old explorers

September 30, 2014

I was inspired by some of the leaked Windows vNext screenshots and decided to try to replicate the new Explorer Home special folder.

Explorer Home clone

Read the rest of this entry »

A property lost in tIME

March 25, 2014

The built-in PNG property handler does not support the tIME chunk for some reason. Why? I don’t know and it is only 7 bytes of data that is easy to parse!

We can fix this with a little shell extension. Sadly PSCreateMultiplexPropertyStore is documented to be read-only and I did not check if the system supplied version of IPropertyStore supports aggregation. We could hook the interface methods or do other tricks but just creating a simple wrapper seems to be enough to get a read-only version to work.

Read the rest of this entry »

Remove or hide personal information

September 26, 2013

The “Remove Properties and Personal Information” feature (on the details tab of the file properties UI) does not always remove information when you tell it to.

Start off by creating a small jpg image in paint and add some properties:
Add comment
Read the rest of this entry »

The final (menu) solution

July 10, 2013

Start Menu SizeGrip

How hard can it be to allow the user to decide the size of their start menu/screen?

To “open” or NULL, that is the verb

February 4, 2013

When you programmatically want to execute a shell item/path/URI you are forced to pick a verb even when you want to perform the default action (A.K.A. double click). This means passing NULL as the verb if you are calling ShellExecute[Ex]. When you do this the shell will do its magic to find the default verb:
Read the rest of this entry »

I see your errorlevel and raise you a process exit code

December 7, 2012

Have you ever written a batch file that is more of a “application” than a script? Of course you made sure ERRORLEVEL is set correctly so when your batch file is a part of a larger script, IF ERRORLEVEL error checking can be used. What could go wrong?

For some crazy reason, cmd.exe does not use the expected logic when you use the && and/or || syntax. I assume part of the problem is because the batch file is executed by cmd.exe itself and there is no child process and no real process exit code.

Fixing this requires some hacky workarounds and is generally a big pain in the ass.
Read the rest of this entry »


Get every new post delivered to your Inbox.