Compatibility vaguetibility

August 27, 2021

Windows XP added the compatibility tab, allowing you to fake the version returned to applications. One of the options is to emulate “Windows 98 / Windows ME”.

Compatibility tab

This is rather vague, it can’t be both versions at the same time. So which version does it actually emulate?

Read the rest of this entry »

Hiding unwanted Edge tab in IE

February 8, 2017

The latest insider builds now have a silly “Open Microsoft Edge” tab in Internet Explorer:

Edge Tab in IE

To remove it add a DWORD value named HideNewEdgeButton under HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main and set it to 1. It can also be set under HKEY_LOCAL_MACHINE if you want to apply it to all users.


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 to 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?