Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Customize Windows 8.1 StartScreen by decoding "*.itemdata-ms" binary data file (Windows 8.1, StartScreen, C#)

I will try to edit the Windows 8.1 StartScreen in a more comfortable and not user dependent way.

I know this is not the Microsoft way of using their OS, but in an enterprise environment there must be a way to customize the StartScreen. F.e. if I deploy a new software package there should be the icon on the StartScreen (in the right group, on the pre-defined position).

So, I found the files appsFolder.itemdata-ms and appsFolder.itemdata-ms.bak both are binary encoded. If I open them in a hex editor there are several group names and links visible but not in a dump format. There is also no way to edit this tiles in the hexeditor in the way it is needed.

Part of appsFolder.itemdata-ms

?%?????☺↔         ▼   ♠   S t o r e           Y+↨♣♦?BGJ   F   1SPS?w?

I tried to write a decoder (used C#), with no success, everything can be viewed but only like it was in the hex editor.

Tried the PowerShell command Export-StartLayout -as xml everything was exported in the right way, groups, tiles, positions to:

export.xml

<launcher version="2">
   <view name="Start">
     <group name="Desktop">
       <tile FencePost="0" size="wide310x150" AppID="Microsoft.Windows.Desktop"/>
       <tile FencePost="0" size="square150x150" AppID="Microsoft.InternetExplorer.Default"/>
       <tile FencePost="0" size="square150x150" AppID="Chrome"/>
     </group>
     <group name="Entwicklung">
       <tile FencePost="0" size="square150x150" AppID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Fiddler2\Fiddler.exe"/>
       <tile FencePost="0" size="square150x150" AppID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Notepad++\notepad++.exe"/>
      </group>
    </view>
</launcher>

But the Import-StartLayout does not work as expected, with this command the previously exported layout can not be applied to the current user (only by using gpo, but then the startscreen is locked).

I also took ILSpy to inspect the PowerShell Cmt-Lets but this ended in unmanaged code parts.

To cut a long story short, is there a way to decode the binary files to edit them (maybe a third party tool?) and write them back to apply the changes to the current user?

like image 870
Martin Avatar asked Sep 17 '13 13:09

Martin


2 Answers

No, it is not possible, and that is by-design (not that I agree with that design choice). I had several arguments with the Windows Product Group about this.

It is similar to the way Microsoft has locked down the Task Bar. See here:

"Note: Applications cannot programmatically pin themselves to the taskbar. That functionality is reserved strictly for the user."

Either:

  1. You set the Start Screen Tiles for all users via group policy or within the image. (locked down environment)
  2. You allow the users to customize their desktop as they wish (user defined environment).
like image 81
Keith S Garner Avatar answered Sep 20 '22 17:09

Keith S Garner


I too am looking at ways to edit the Start Screen data file. I have got it to work via a GPO and I used .Net Reflector to analyse the Export-StartLayout cmdlet. It works by calling a method on a COM interface defined in the windows\system32\twinapi.dll so it is not easy to decode the data file format.

The xml file contains APP IDs which are defined in the registry and can be listed by the PS get-startapps cmdlet so it is possible to create an editor for this.

I work with schools and colleges so there is a heavy requirement to control the desktop. At the moment most of the schools I deal with are keeping away from Windows 8 because of problems like these. Seems the MS just don't listen to what people really need!

like image 36
Doobiferkin Avatar answered Sep 19 '22 17:09

Doobiferkin