Valid HTML 4.01 Transitional Valid CSS Valid SVG 1.0

Me, myself & IT

Gimmick of the Day (or Week, Month, Year, …)

Click the appropriate button to select and display your gimmick, or the empty button to reset your selection and hide the gimmick.

Directory Identifiers MSDM Product Key Reader



The setup scripts DIRID.INF and LDID.INF create the file DIRID.INI or LDID.INI respectively on the user’s desktop with all known Dirids and the pathnames they resolve to, then opens it in Windows’® text editor NotePad.exe.


Right-click the downloaded setup script DIRID.INF or LDID.INF respectively to display its context menu and click Install to run it.

MSDM Product Key Reader


The Windows® application MSDM Product Key Reader.exe displays the device-specific individual product key embedded by (big) OEMs in the MSDM table of the ACPI BIOS.
This product key is used for automatic selection of the product edition and the activation of Windows 8 and Windows 8.1 during their installation, and can since version 1511 alias Threshold 2 be used for (manual) product activation of Windows 10 too.

Background Information

The MSDM table of the ACPI BIOS is specified in a white paper available from Microsoft Software Licensing Tables (SLIC and MSDM) on MSDN.

Implementation and Build Details

MSDM Product Key Reader.exe is a pure Win32 application, written in ANSI C, built with the Platform SDK for Windows Server 2003 R2 Microsoft Visual C++ Compiler 2010 SP1 from update 2519277, but without the MSVCRT libraries, for use on Windows Server 2003 and newer versions of Windows NT as well as Windows PE 2.0 and newer versions.

Source and Build Instructions

Optionally perform the following 2 simple steps to build MSDM Product Key Reader.exe from the source.

Note: MSDM Product Key Reader.exe is a pure Win32 application and builds without the MSVCRT libraries.

  1. Create the text file GIMMICK.C with the following content:

    // Copyright © 2012-2021, Stefan Kanthak <‍stefan‍.‍kanthak‍@‍nexgo‍.‍de‍>
    #define STRICT
    #undef UNICODE
    #define WIN32_LEAN_AND_MEAN
    #include <windows.h>
    typedef	struct	_msdm		// 'Microsoft Data Management' table
    	DWORD	Signature;	// "MSDM" = 0x4D44534D = 'MDSM'
    	DWORD	Length;		// size of entire MSDM table: 0x00000055
    	BYTE	Revision;
    	BYTE	Checksum;	// checksum of entire MSDM table
    	CHAR	OEMId[6];	// OEM identification
    	CHAR	OEMTableId[8];
    	DWORD	OEMRevision;
    	CHAR	CreatorId[4];	// creator identification
    	DWORD	CreatorRevision;
    	DWORD	Version;	// 0x00000001
    	DWORD	Reserved;	// 0x00000000
    	DWORD	DataType;	// 0x00000001
    	DWORD	DataReserved;	// 0x00000000
    	DWORD	DataLength;	// 0x0000001D
    	CHAR	Data[29];	// product key: "23467-89BCD-FGHJK-MNPQR-TVWXY"
    } MSDM;
    	MSDM	msdm;
    	BYTE	bCheckSum;
    	DWORD	dwCheckSum;
    	// see <>
    	if (GetSystemFirmwareTable('ACPI', 'MDSM', NULL, sizeof(msdm)) == 0)
    		              "No \'MSDM\' table found!",
    		              "\'MSDM\' Product Key Reader",
    		              MB_OK | MB_ICONQUESTION,
    		if (GetSystemFirmwareTable('ACPI', 'MDSM', &msdm, sizeof(msdm)) > sizeof(msdm))
    			              "Error reading \'MSDM\' table!",
    			              "\'MSDM\' Product Key Reader",
    			              MB_OK | MB_ICONERROR,
    			for (bCheckSum = 0, dwCheckSum = msdm.Length;
    			     dwCheckSum > 0L;
    			     bCheckSum += ((BYTE *) &msdm)[--dwCheckSum])
    			if ((bCheckSum != 0)
    			 || (msdm.Version != 1L)
    			 || (msdm.Reserved != 0L)
    			 || (msdm.DataType != 1L)
    			 || (msdm.DataReserved != 0L)
    			 || (msdm.DataLength != sizeof(msdm.Data)))
    				              "Invalid or unknown \'MSDM\' table found!",
    				              "\'MSDM\' Product Key Reader",
    				              MB_OK | MB_ICONWARNING,
    				msdm.Data[sizeof(msdm.Data)] = '\0';
    				              "\'MSDM\' Product Key Reader",
    				              MB_OK | MB_ICONINFORMATION,
  2. Run the following three command lines to compile the source file GIMMICK.C created in step 1., link the compiled object file GIMMICK.OBJ and cleanup afterwards:

    CL.EXE /c /GA /GF /GS /O1 /Os /TcGIMMICK.C /W4 /Zl
    For details and reference see the MSDN articles Compiler Options and Linker Options.

    Note: if necessary, see the MSDN article Use the Microsoft C++ toolset from the command line for an introduction.

    Note: the command lines can be copied and pasted as block into a Command Processor window!

    Microsoft (R) C/C++ Optimizing Compiler Version 16.00.40219.01 for 80x86
    Copyright (C) Microsoft Corporation.  All rights reserved.
    Microsoft (R) Incremental Linker Version 10.00.40219.386
    Copyright (C) Microsoft Corporation.  All rights reserved.



Demonstrate ...


Right-click the downloaded registry script CONTEXT.REG to display its context menu and click Merge to import it into the registry of your user account.


Right-click ...


If you miss anything here, have additions, comments, corrections, criticism or questions, want to give feedback, hints or tipps, report broken links, bugs, deficiencies, errors, inaccuracies, misrepresentations, omissions, shortcomings, vulnerabilities or weaknesses, …: don’t hesitate to contact me and feel free to ask, comment, criticise, flame, notify or report!

Use the X.509 certificate to send S/MIME encrypted mail.

Note: email in weird format and without a proper sender name is likely to be discarded!

I dislike HTML (and even weirder formats too) in email, I prefer to receive plain text.
I also expect to see your full (real) name as sender, not your nickname.
I abhor top posts and expect inline quotes in replies.

Terms and Conditions

By using this site, you signify your agreement to these terms and conditions. If you do not agree to these terms and conditions, do not use this site!

Data Protection Declaration

This web page records no (personal) data and stores no cookies in the web browser.

The web service is operated and provided by

Telekom Deutschland GmbH
Business Center
D-64306 Darmstadt
+49 800 5252033

The web service provider stores a session cookie in the web browser and records every visit of this web site with the following data in an access log on their server(s):

Copyright © 1995–2021 • Stefan Kanthak • <‍stefan‍.‍kanthak‍@‍nexgo‍.‍de‍>