Microsoft Windows and all that goes with it

Unreal Tournament 2004 Save Files (Windows 10 Edition)

As my son moved to another computer, one thing was left behind - his Unreal Tournament 2004 save file. Without it he would be just a lowly peasant climbing in the beginner ladders. With it, he is the overlord of the game.

Dramatic wording aside, he wanted his save files.

So I looked toward Internet and saw bunch of posts about moving CD key to another computer. As I got my UT2004 from GoG, that wasn’t my problem. Without an obvious solution on the first search results page, I gave up and though to my self: how hard can it be?

Well, for once these words were not the curse.

On his old computer I went into a virtual store - shady place where all programs writing to their own directories live:

"%USERPROFILE%\AppData\Local\VirtualStore\Program Files (x86)\GOG.com\Unreal Tournament 2004\Saves"

There I found a single file about 20K in size. Once I moved that file to the same location on the other computer I was done.

RoboCopy Bandwidth Limitting

If you are using RoboCopy to make backups, you might have noticed it’s a bandwidth hog. Once you start copying, it will saturate the network making it a bit annoying to copy anything else at the same time.

While RoboCopy has no understanding of bandwidth limiting, there is a concept of inter-packet gap pause. Yes, you can go and calculate it (with a varying degree of success) or you can just test a few runs with different IPG number.

I personally found that /IPG:7 works wonderfully for my background backups.

Forced Change to Crap

Illustration

Well, Microsoft learned one thing from the whole forced Windows 10 upgrade fiasco. If users don’t want to use your product because it lacks functionality, just force the upgrade on them as often as possible. Although with Skype they had opportunity to go further - just intentionally brick the old version short time in the future.

Yes, Skype Classic is going the way of the dodo. Is the new Skype good at least?

Well, the most notable change is the removal of a split (multi-window) mode. This makes is impossible to track two conversations without a load of clicking back and forth. Of course, Copy/Paste from the far history in one conversation will result in loads of scrolling since Skype will always jump to the last message as you switch.

And of course, just in case that hasn’t caused too much trouble, they had to be sure docking it to the display’s edge (so it doesn’t use too much space) also makes it unusable unless you are actively monitoring messages. You see, if you get into discussion when window is too small, any message that comes will be only indicated by tiny counter in title bar. And yes, of course they would remove advanced filtering, why not?

To ensure you feel as uncomfortable as possible, Escape key is no longer supported. It used to be possible to close window using a single key - no more - now you get to use Alt+F4. Just be careful which window is selected because, unlike every other tray icon since the dawn of time, double-clicking on Skype in the system tray actually deselects its window. But that is not a major issue since using keyboard to navigate is exercise in futility anyhow.

And there are multiple smaller issues too. For example, not following the system settings for time. Regardless of me using 24h time format (H:mm) in Windows, Skype insists on AM/PM nonsense. And no, before you ask, it doesn’t respect my date format either.

I believe you get the gist of it - the new Skype and its app-like behavior is again design winning over functionality and force-feeding the least common denominator on everybody. Considering amount of substandard applications we got with Windows 10 (don’t let me start about Calculator) I guess this was expected.

Well player Sir!

[2018-08-07: Microsoft decided not to kill proper desktop client - for now. They didn’t really specify the date so there’s no way to know for how long. My guess is that they’ll just have Skype 7 remind you to upgrade even more than now. And yes, their pages don’t have Skype 7 for download anymore, so one wrong click is all that’s needed to make you “happy” version 8 user. Fortunately direct link still works (SHA256 for 7.41.0.101: 1e4ca5d441a00ac6 91c58e0aa5890c3f eb395d2dc53dbae8 2faec7c9df4e52fc).]

[2018-08-11: Yep, as anticipated, Microsoft is pushing upgrade whether you want it or not. I got asked 4 times in the last 24 hours to download the new version. Frankly, at this time I am looking for alternative chat application to replace Skype altogether on my desktops.]

_[2018-10-02: Death of classic Skype is now planned for November 1st.]

[2018-01-10: Old Skype cannot be used anymore and of course none of the issues with the new one have been fixed. I personally moved to Discord - not perfect but quite decent platform.]_

Changing Default Settings For Scanner

Illustration

As I started scanning a batch of documents, I got annoyed by Windows Fax and Scan default settings. So I went to search for scanner dialog where you used to be able to set these things only to find it replaced by nicer looking and utterly useless interface. Again, Microsoft decided to remove the old dialog and replace it with nothing.

However, I knew settings were read from somewhere so I used Process Monitor to see what scanner was up to. That lead me to %USERPROFILE%\AppData\Local\Microsoft\UserScanProfiles directory full of XML files. And yes, scanner profiles were in that directory.

The first change I wanted was to have scanner load my last used settings by default. Fortunately settings are kept in (numbered) XML files and, knowing Photo was the current default profile, all it took was moving <default/> tag from that profile to one named “Last used settings”. Next time I tried scanning, my last values were offered as defaults.

However, while there, I also decided to customize two default settings. Instead of deciphering settings, just scan as you normally would and copy everything from WiaItem downward into the appropriate file.

My preferred settings ended up being:

<ScanProfile>
  <ProfileGUID>{F4798F9B-5FDE-4471-BC0D-4BF692AB32D8}</ProfileGUID>
  <DeviceID>{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0001</DeviceID>
  <ProfileName>Photo</ProfileName>
  <WiaItem>{FB607B1F-43F3-488B-855B-FB703EC342A6}</WiaItem>
  <Properties>
    <Property id="6147" type="3">600</Property>
    <Property id="4103" type="3">3</Property>
    <Property id="4108" type="3">2</Property>
    <Property id="4106" type="72">{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}</Property>
    <Property id="6154" type="3">0</Property>
    <Property id="6155" type="3">0</Property>
    <Property id="6164" type="3">0</Property>
  </Properties>
</ScanProfile>
<ScanProfile>
  <ProfileGUID>{814B8B4D-45B3-440D-B40B-BC34D10B21E5}</ProfileGUID>
  <DeviceID>{6BDD1FC6-810F-11D0-BEC7-08002BE2092F}\0001</DeviceID>
  <ProfileName>Documents</ProfileName>
  <WiaItem>{FE131934-F84C-42AD-8DA4-6129CDDD7288}</WiaItem>
  <Properties>
    <Property id="3097" type="3">2</Property>
    <Property id="6151" type="3">5100</Property>
    <Property id="6152" type="3">6600</Property>
    <Property id="6147" type="3">600</Property>
    <Property id="4103" type="3">0</Property>
    <Property id="4108" type="3">2</Property>
    <Property id="4106" type="72">{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}</Property>
    <Property id="6154" type="3">0</Property>
    <Property id="6155" type="3">0</Property>
    <Property id="3088" type="3">32</Property>
    <Property id="6164" type="3">0</Property>
  </Properties>
</ScanProfile>

PS: Yes, adding a new XML in directory will result in a new profile - just don’t forget to change its GUID value.

Interpreting File Explorer GPS Coordinates

Illustration

Do you notice something wrong with coordinates of this picture taken in Pasco, Washington?

Let’s disregard for moment a pointless precision. Four decimals on Lat/Lon seconds already bring you into a millimeter precision range. With 15 decimals Windows show we are talking about less than picometer - couple orders of magnitude smaller than a virus and more than adequate to locate a single DNA strand (still in nanometer range).

Anything over 2 decimals on seconds (or 6 decimals on degrees) is already way better than any standard GPS can resolve. If we are talking about specialized equipment, we can probably justify 5 decimal digits. Going to 15 digits is just a sign of programmer too lazy to round.

Let’s not even discuss that semicolon is used instead of proper signs for decimal degrees. Yes, latitude should be written as 46° 15′ 12.51″ instead but that is not the biggest fault.

Did you notice it yet? Yep, latitude has no north/south specifier nor is east/west shown for longitude. Alternative approach of having negative numbers instead of south and west is also not here. How do I know? Because this picture has been taken in North America and not in China.

Positive latitude is correct since picture was taken in the north hemisphere. However, longitude is very wrong as degrees number should have a negative prefix for west hemisphere where picture was taken.

In any case, I made a little calculator to convert Microsoft’s coordinates into standard ones:

DegreesMinutesSeconds
Latitude:
Longitude:
LatitudeLongitude

Muting F1 Key

Men are often irrational beings. For example I simply hate F1 key. I know, that key is there to give me help but realistically if I need help I will google for it. Absolutely every time I press F1 it is by accident and it leads to annoying wait for Help to load - especially in Microsoft Office. That key is useless!

Fortunately, deep in Microsoft’s Keyboard and mouse class drivers documentation there is a chapter on scan code mapper for keyboards. In short, there is a functionality enabling us to remap any key just by writing entry in registry without any external programs.

At first I though to simply disable F1 key. But reading a bit further into documentation I though better - why not use F1 key as a mute button?

For this conversion it is necessary to know codes for both F1 and Mute key. A bit of searching later I’ve found that information in USB HID to PS/2 Scan Code Translation Table. This ancient document has exactly what we need under “PS/2 Set 1 Make” column. F1 key has scan code 0x3B while mute is a bit more involved 0xE020 (disabling would be 0x0000).

Format of Scancode Map field is a bit confusing at first, but table examples do help a lot. For my use-case, table would be as this.:

ValueFieldInterpretation
0x00000000VersionSet to all zeroes.
0x00000000FlagsSet to all zeroes.
0x00000002CountTwo entries in the map (including null entry).
0x003BE020MappingRemap <F1> (0x3B) to <Mute> (0xE020).
0x00000000MappingTermination entry.

These values would need to be written in registry under key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout as binary entry named Scancode Map. Of course, since binary data has to be little-endian, (hex) value would actually be:

00000000 00000000 02000000 20E03B00 00000000

Or one can simply download prepared registry file for creating mapping and, if necessary, removing the same.

[2017-11-13: You can check codes using Scancode Viewer.]

[2017-11-23: I also made Scancode Map application so you don’t need to manually update registry.]

Windows 10 Pro USB Install on Dell's XPS 15

Illustration

When I got my new Dell XPS 15 with Windows 10 Home; the first thing I wanted to install my own fresh copy of Windows 10 Pro.

Guess what? Dell, as many other PC manufacturers, stores key in BIOS (Home edition in my case) and it will never ask you for it. Try as you may but Windows installation will never even ask your for alternate key. That is, if you don’t adjust it a bit.

First part is preparing installation USB and these same steps are needed even if you don’t need to change install key. Press <Win>+<R> and write diskpart, followed by OK. This will execute partition editor tool. Be very, very careful to select disk you want to clean and make new installation USB:

LIST DISK
 Disk ###  Status         Size     Free     Dyn  Gpt
 --------  -------------  -------  -------  ---  ---
 Disk 0    Online          476 GB      0 B        *
 Disk 1    Online          931 GB      0 B
 Disk 2    Online         7168 MB      0 B
 Disk ^^3^^    Online         7648 MB      0 B

SELECT DISK ^^3^^
 Disk 3 is now the selected disk.

CLEAN
 DiskPart succeeded in cleaning the disk.``

CREATE PARTITION PRIMARY
 DiskPart succeeded in creating the specified partition.``

FORMAT FS=FAT32 QUICK
 100 percent completed``
 DiskPart successfully formatted the volume.``

EXIT

Assuming that your, newly created and empty, USB drive is under letter U: and your Windows installation disk is at W:, you can use XCOPY to transfer files. Again, press <Win>+<R> to get a prompt where you can enter following command:

XCOPY ^^W:^^*.* /e /f ^^U:^^\

For getting our key into installation we need to create PID.txt with following content (use your key instead of XXXXX-XXXXX-XXXXX-XXXXX-XXXXX):

[PID]
Value=^^XXXXX-XXXXX-XXXXX-XXXXX-XXXXX^^

This file you then copy onto USB to U:\sources or U:\x64\sources folder, depending which one is present.

Now you can plug USB into XPS 15, boot to USB using F12 key and proceed with Windows installation as you usually would. The only difference is that Windows will now use key from USB instead of BIOS and give you the correct edition.

PS: If you want to use USB drive bigger than 64 GB, use CREATE PARTITION PRIMARY SIZE=8000 to make disk appear a bit smaller. Otherwise FAT32 formatting won’t work and that is important for UEFI.

PPS: To avoid entering legacy mode, I like to add custom EFI boot option pointing to \efi\boot\bootx64.efi on USB.

ReFS No Longer in Windows 10 Pro

I love copy-on-write file systems and ZFS always loved me back. With ReFS story was a bit more tangled as something always stood between us. Be it requirement for registry hacks, be it idiotic decision that integrity streams are not supported for virtual disks, be it lack of boot support (even when using it only for data), or be it just general slowness and opaqueness of its development. Despite all those issues, I have used it for all data on my Windows computers since 2015.

Well, I guess that is history now. With the advent of Windows Pro for Workstations, ReFS is gone from all lower editions - including Windows 10 Pro.

I’ll shed a tear while formatting my disk to NTFS; and dream of ZFS…

PS: No, even more than 5 years of its creation, ReFS is still not bootable. PPS: Yes, I am aware that read/write will still be supported even in Windows 10 Home. Not good enough for me.

Telling Windows 10 Build From ISO File

Illustration

If you download Windows 10 ISO files regularly it is more likely than not you cannot really tell for sure which build is which. However, determining the build number is fairly easy.

The first step is to mount the Windows .iso file which can be done by double-clicking it (or using VHD Attach). That will assign a drive letter to image so you can access it.

Second (and last) step is to right-click on setup.exe on newly created drive and select Properties. Inside Properties window we are interested into Details tab and its File Version field. It is this field that will tell you build number as third part of version.

For example, if File Version is 10.0.15063.0, that .iso belongs to Windows 10 build 15063.

Why No Insider?

Illustration

I am a bit crazy. Some say in general, while I will just use it to describe my choice of beta testing Microsoft’s software. :)

If Microsoft had release candidate of either Windows or Visual Studio, I would install it. And I wouldn’t pussy out and put it on some non-important server. No, I usually got that running on my daily driver.

And yes, this is definitely not what Microsoft recommends. And yes, this approach has bit me in the ass multiple times. However, I usually liked the new features enough to ignore the small issues. Well, no more. After what seems ages on the Windows Insider track, I have given up.

First issue I had with Windows Insider is the fact it would obliterate custom drivers on every install. As I have Asus N56VJ that needs the same for keyboard shortcuts (e.g. to disable touchpad), this was annoyance. And you couldn’t just reinstall driver - it took a bit more involved process to recover it.

Another issue was pushing of damn Edge. Every freaking time I would get new insider build, Edge would appear in taskbar. And not only there - it would take over the file associations too. A bit hypocritical and a whole lot annoying. That is, when you can switch it - there was a full month where “bug” in the build prevented moving away from Edge for http file handler.

However, both of these issues, along with a few others, were just a minor annoyances. Computer was still usable after them and I could get everything properly working within a day while not losing too much time.

Straw that broke my back were issues with VirtualBox. For the last few months every Insider build broke VirtualBox and VMware in one way or the other. While some were minor and easily solvable, others required either waiting for the new build or update from manufacturer. And, strangely, I found Microsoft’s Hyper-V re-enabled every time.

As someone who runs quite a few Linux related virtual machines (not all are properly supported by Hyper-V), I simply cannot be days without a running system. And the pressure of knowing that, even if I do get it working, it is never more than a build away from braking was simply too much.

Year ago, I would have jotted this just as a cost of getting early features. But insider updates lately became just noise as no proper feature has been introduced in ages. It seems to me that last few of them were just a sneaky way to reset my defaults for the damn Edge and show some Hyper-V up my bum.

Due to all this, I stopped all insider builds to two of my machines.

My main multimedia PC went to Linux Mint and my daily driver went back to the last Windows 10 official release. Frankly, if it wasn’t for Visual Studio, I would have moved it to Mint too.

It is a sad day when Linux distribution is valid and less annoying than Windows…