All console applications are presented with their (self-contained) ANSI C source code and build without the MSVCRT runtime library.
Group Policy Scripts Client Registration
Privileged Process Launcher
Interactive SYSTEM
Process Launcher
Privilege Twiddler
Really Known SIDs Enumerator Security Descriptor Definition Language Decoder
Security Descriptor Inspector 8.3 File and Directory Name Changer Directory Change Notifier Hardlink Enumerator
Debug String Monitor Non-interactive Symbolic Debugger Shim Database Decoder
Registry Policy Reader Registry INF Dumper Offline Registry Reader
Portable Executable Version Information Reader Portable Executable Resource Enumerator
Portable Executable Metadata Reader Product Key Validator SLIC ACPI Table & XrML Digital License Decoder Language Enumerator Locale Enumerator Network Enumerator
Note: only privileges already assigned to a user account can be enabled!
Cmd.exe
with the privileges SeAuditPrivilege
,
SeBackupPrivilege
, SeDebugPrivilege
,
SeRestorePrivilege
, SeSecurityPrivilege
and SeTakeOwnershipPrivilege
enabled in the directory
C:\System Volume Information\
and list its contents.
Create the text file PROCESS.VBS
with the following
content in an arbitrary directory:
Rem Copyright © 1999-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
Rem * The software is provided "as is" without any warranty, neither express
Rem nor implied.
Rem * In no event will the author be held liable for any damage(s) arising
Rem from the use of the software.
Rem * Redistribution of the software is allowed only in unmodified form.
Rem * Permission is granted to use the software solely for personal private
Rem and non-commercial purposes.
Rem * An individuals use of the software in his or her capacity or function
Rem as an agent, (independent) contractor, employee, member or officer of
Rem a business, corporation or organization (commercial or non-commercial)
Rem does not qualify as personal private and non-commercial purpose.
Rem * Without written approval from the author the software must not be used
Rem for a business, for commercial, corporate, governmental, military or
Rem organizational purposes of any kind, or in a commercial, corporate,
Rem governmental, military or organizational environment of any kind.
Option Explicit
Const strCommandLine = "C:\Windows\System32\Cmd.exe /D /K DIR /A"
Const strCurrentDirectory = "C:\System Volume Information"
Dim arrEnvironment(10)
arrEnvironment(0) = "NoDefaultCurrentDirectoryInExePath=*"
With WScript.CreateObject("Scripting.FileSystemObject")
Const fsoWindowsFolder = 0
Const fsoSystemFolder = 1
Const fsoTemporaryFolder = 2
arrEnvironment(1) = "SYSTEMDRIVE=" & .GetSpecialFolder(fsoWindowsFolder).Drive
arrEnvironment(2) = "SYSTEMROOT=" & .GetSpecialFolder(fsoWindowsFolder).Path
arrEnvironment(3) = "PATH=" & .GetSpecialFolder(fsoSystemFolder).Path & ";" & .GetSpecialFolder(fsoWindowsFolder).Path
arrEnvironment(4) = "TEMP=" & .GetSpecialFolder(fsoTemporaryFolder).Path
arrEnvironment(5) = "LOCALAPPDATA=" & .GetSpecialFolder(fsoTemporaryFolder).ParentFolder.Path
arrEnvironment(6) = "USERPROFILE=" & .GetSpecialFolder(fsoTemporaryFolder).ParentFolder.ParentFolder.ParentFolder.Path
End With
With WScript.CreateObject("WScript.Network")
arrEnvironment(7) = "COMPUTERNAME=" & .ComputerName
arrEnvironment(8) = "USERDOMAIN=" & .UserDomain
arrEnvironment(9) = "USERNAME=" & .UserName
End With
With GetObject("WinMgmts:{impersonationLevel=Impersonate, (Audit, Backup, Debug, Restore, Security, TakeOwnership)}!\\.\Root\CIMv2")
Dim objProcessStartup
Set objProcessStartup = .Get("Win32_ProcessStartup").SpawnInstance_
With objProcessStartup
' .CreateFlags = 8 ' Detached_Process
.EnvironmentVariables = arrEnvironment
.ErrorMode = 2 ' Fail_Critical_Errors
.FillAttribute = 240 ' Black on White
.PriorityClass = 32 ' Normal
.ShowWindow = 1 ' SW_NORMAL
.Title = vbNullString
.WinstationDesktop = vbNullString
' .X = 0
.XCountChars = 80
' .XSize = 640
' .Y = 240
.YCountChars = 50
' .YSize = 480
End With
Dim intReturn, intProcessID
intReturn = .Get("Win32_Process").Create(strCommandLine, strCurrentDirectory, objProcessStartup, intProcessID)
If intReturn <> 0 Then
WScript.Echo "Error " & intReturn
Else
WScript.Echo "Process " & intProcessID & " created"
End If
End With
Execute the
VBScript
PROCESS.VBS
created in step 1. per double-click.
Note: PROCESS.VBS
must be run under a
user account which has the privileges to enable assigned, typically
any member of the
BUILTIN\Administrators
user group!
Note: startup and shutdown scripts
run under
the NT AUTHORITY\SYSTEM
alias
LocalSystem
account; logon and logoff scripts
run under the current user
account.
SCRIPTS.INF
and save it in an arbitrary directory, then right-click the
downloaded file to display its context menu and click Installto run it.
Note: on Windows Vista and newer
versions of Windows NT,
InfDefaultInstall.exe
,
the application registered for the Install
verb of
*.inf
files, requests administrative privileges and
access rights.
client programswhich can be selected by every user as the
default programfor their associated file types and URL protocols.
CLIENTS.INF
and save it in an arbitrary directory, then right-click the
downloaded file to display its context menu and click Installto run it.
Note: on Windows Vista and newer
versions of Windows NT,
InfDefaultInstall.exe
,
the application registered for the Install
verb of
*.inf
files, requests administrative privileges.
Application Compatibility Shim Database(
.sdb
) file and print its contents in
UTF-16LE
encoding on standard output(which must be redirected to a file or piped into an application that reads from
standard input, like Clip, Find or More).
SdbCloseDatabase()
SdbGetBinaryTagData()
SdbGetFirstChild()
SdbGetNextChild()
SdbGetStringTagPtr()
SdbGetTagFromTagID()
SdbOpenDatabase()
SdbReadDWORDTag()
SdbReadQWORDTag()
SdbTagToString()
Understanding Shims
APPHELP.COM ‹input file name› >‹output file name› APPHELP.COM ‹input file name› | CLIP.COM APPHELP.COM ‹input file name› | MORE.COM
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and APPHELP.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
is not supported!
The MSDN article Console Handles provides background information.
Create the text file APPHELP.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#ifndef _DLL
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
typedef enum _PATH_TYPE
{
DOS_PATH,
NT_PATH
} PATH_TYPE;
#define PATCH_STOP 0UL
#define PATCH_REPLACE 2UL
#define PATCH_MATCH 4UL
typedef struct _PATCH_ACTION
{
DWORD Opcode;
DWORD ActionSize; // size of structure
DWORD PatternSize;
DWORD RVA;
DWORD Reserved;
WCHAR ModuleName[32];
BYTE Pattern[ANYSIZE_ARRAY];
} PATCH_ACTION, *LPPATCH_ACTION;
typedef LPVOID PDB;
typedef ULONGLONG QWORD;
typedef WORD TAG;
#define TAG_TYPE_NULL 0x1000 // no value associated with the TAG
#define TAG_TYPE_BYTE 0x2000 // BYTE value
#define TAG_TYPE_WORD 0x3000 // WORD value
#define TAG_TYPE_DWORD 0x4000 // DWORD value
#define TAG_TYPE_QWORD 0x5000 // ULONGLONG value
#define TAG_TYPE_STRINGREF 0x6000 // tokenized string value
#define TAG_TYPE_LIST 0x7000 // list of TAG values
#define TAG_TYPE_STRING 0x8000 // UNICODE string value
#define TAG_TYPE_BINARY 0x9000 // binary value
#define TAG_TYPE_MASK 0xF000
#define TAG_LINK_DATE (TAG_TYPE_DWORD | 0x001D) // link date attribute of a file
#define TAG_UPTO_LINK_DATE (TAG_TYPE_DWORD | 0x001E) // link date attribute of a file; matching is done up to and including this link date
#define TAG_APP_NAME_RC_ID (TAG_TYPE_DWORD | 0x0024) // application name resource identifier attribute for AppHelp entries
#define TAG_VENDOR_NAME_RC_ID (TAG_TYPE_DWORD | 0x0025) // vendor name resource identifier attribute for AppHelp entries
#define TAG_SUMMARY_MSG_RC_ID (TAG_TYPE_DWORD | 0x0026) // summary message resource identifier attribute for AppHelp entries
#define TAG_DESCRIPTION_RC_ID (TAG_TYPE_DWORD | 0x0028) // description resource identifier attribute for AppHelp entries
#define TAG_PARAMETER1_RC_ID (TAG_TYPE_DWORD | 0x0029) // parameter1 resource identifier attribute for AppHelp entries
#define TAG_TIME (TAG_TYPE_QWORD | 0x0001) // time attribute
#define TAG_BIN_FILE_VERSION (TAG_TYPE_QWORD | 0x0002) // bin file version attribute for file entries
#define TAG_BIN_PRODUCT_VERSION (TAG_TYPE_QWORD | 0x0003) // bin product version attribute for file entries
#define TAG_UPTO_BIN_PRODUCT_VERSION (TAG_TYPE_QWORD | 0x0006) // bin product version attribute of a file; matching is done up to and including this product version
#define TAG_UPTO_BIN_FILE_VERSION (TAG_TYPE_QWORD | 0x000D) // bin file version attribute of a file; matching is done up to and including this file version
#define TAG_PATCH_BITS (TAG_TYPE_BINARY | 0x0002) // patch file bits attribute
#define TAG_EXE_ID (TAG_TYPE_BINARY | 0x0004) // GUID attribute of an executable entry
#define TAG_MSI_PACKAGE_ID (TAG_TYPE_BINARY | 0x0006) // MSI package identifier attribute of an MSI package
#define TAG_DATABASE_ID (TAG_TYPE_BINARY | 0x0007) // GUID attribute of a database
#define TAG_CONTEXT_PLATFORM_ID (TAG_TYPE_BINARY | 0x0008)
#define TAG_CONTEXT_BRANCH_ID (TAG_TYPE_BINARY | 0x0009)
#define TAG_FIX_ID (TAG_TYPE_BINARY | 0x0010)
#define TAG_APP_ID (TAG_TYPE_BINARY | 0x0011)
typedef DWORD TAGID;
#define TAGID_NULL 0UL
#define TAGID_ROOT 0UL
__declspec(dllimport)
VOID WINAPI SdbCloseDatabase(PDB lpdb);
__declspec(dllimport)
LPVOID WINAPI SdbGetBinaryTagData(PDB lpdb,
TAGID tiWhich);
__declspec(dllimport)
BOOL WINAPI SdbGetDatabaseVersion(LPCWSTR lpwszFileName,
LPDWORD dwMajorversion,
LPDWORD dwMinorversion);
__declspec(dllimport)
TAGID WINAPI SdbGetFirstChild(PDB lpdb,
TAGID tiParent);
__declspec(dllimport)
TAGID WINAPI SdbGetNextChild(PDB lpdb,
TAGID tiParent,
TAGID tiPrevious);
__declspec(dllimport)
LPWSTR WINAPI SdbGetStringTagPtr(PDB lpdb,
TAGID tiWhich);
__declspec(dllimport)
DWORD WINAPI SdbGetTagDataSize(PDB lpdb,
TAGID tiWhich);
__declspec(dllimport)
TAG WINAPI SdbGetTagFromTagID(PDB lpdb,
TAGID tiWhich);
__declspec(dllimport)
BOOL WINAPI SdbGUIDToString(GUID *lpGuid,
LPWSTR lpwszGuidString);
__declspec(dllimport)
PDB WINAPI SdbOpenDatabase(LPCWSTR lpwszPath,
PATH_TYPE eType);
__declspec(dllimport)
DWORD WINAPI SdbReadDWORDTag(PDB lpdb,
TAGID tiWhich,
DWORD dwDefault);
__declspec(dllimport)
QWORD WINAPI SdbReadQWORDTag(PDB lpdb,
TAGID tiWhich,
QWORD qwDefault);
__declspec(dllimport)
WORD WINAPI SdbReadWORDTag(PDB lpdb,
TAGID tiWhich,
WORD wDefault);
__declspec(dllimport)
LPCWSTR WINAPI SdbTagToString(TAG tag);
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(safebuffers)
BOOL CDECL PrintFormat(HANDLE hFile, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
LPBYTE lpOutput;
DWORD dwOutput;
DWORD dwFile;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
dwOutput *= sizeof(*szOutput);
lpOutput = (LPBYTE) szOutput;
do
{
if (!WriteFile(hFile, lpOutput, dwOutput, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpOutput += dwFile;
dwOutput -= dwFile;
} while (dwOutput != 0);
return TRUE;
}
#define PrintString(HANDLE, LITERAL) PrintDirect(HANDLE, LITERAL, sizeof(LITERAL) / sizeof(*LITERAL) - 1)
__inline
BOOL WINAPI PrintDirect(HANDLE hFile, LPCWSTR lpString, DWORD dwString)
{
DWORD dwFile;
dwString *= sizeof(*lpString);
do
{
if (!WriteFile(hFile, lpString, dwString, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpString = (LPCWSTR) ((LPBYTE) lpString + dwFile);
dwString -= dwFile;
} while (dwString != 0);
return TRUE;
}
const LPCWSTR szDayOfWeek[7] = {L"Sunday",
L"Monday",
L"Tuesday",
L"Wednesday",
L"Thursday",
L"Friday",
L"Saturday"};
__declspec(safebuffers)
VOID WINAPI Children(HANDLE hConsole, HANDLE hOutput, PDB lpdb, TAGID tiParent, DWORD dwLevel)
{
SYSTEMTIME st;
PATCH_ACTION *lpPatch;
BOOL bOutput = TRUE;
DWORD dw;
LPBYTE lpData;
WORD wData;
DWORD dwData;
QWORD qwData;
WCHAR szGUID[sizeof("{00000000-0000-0000-0000-000000000000}")];
TAG tChild;
TAGID tiChild = SdbGetFirstChild(lpdb, tiParent);
while (tiChild != TAGID_NULL)
{
tChild = SdbGetTagFromTagID(lpdb, tiChild);
bOutput &= PrintFormat(hOutput,
L"0x%08lX%ls0x%04hX = %ls",
tiChild,
L"\t\t\t\t\t\t\t\t\t\t" + 9 - dwLevel,
tChild,
SdbTagToString(tChild));
switch (tChild & TAG_TYPE_MASK)
{
case TAG_TYPE_NULL:
bOutput &= PrintString(hOutput, L"\r\n");
break;
case TAG_TYPE_WORD:
wData = SdbReadWORDTag(lpdb, tiChild, ~0U);
if (wData == ~0U)
bOutput &= PrintString(hOutput, L"\r\n");
else
bOutput &= PrintFormat(hOutput, L": 0x%04hX\r\n", wData);
break;
case TAG_TYPE_DWORD:
dwData = SdbReadDWORDTag(lpdb, tiChild, ~0UL);
if (dwData == ~0UL)
bOutput &= PrintString(hOutput, L"\r\n");
else
if ((tChild == TAG_LINK_DATE)
|| (tChild == TAG_UPTO_LINK_DATE))
{
qwData = __emulu(dwData, 10000000) // seconds since 1970-01-01 to
+ 116444736000000000; // 100 nano-seconds since 1601-01-01
if (!FileTimeToSystemTime((LPFILETIME) &qwData, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
GetLastError());
else
bOutput &= PrintFormat(hOutput,
L": %ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu.%03hu UTC\r\n",
szDayOfWeek[st.wDayOfWeek],
st.wYear, st.wMonth, st.wDay, st.wHour,
st.wMinute, st.wSecond, st.wMilliseconds);
}
#if 0 // NOTE: Windows Vista or newer!
else if ((tChild == TAG_APP_NAME_RC_ID)
|| (tChild == TAG_VENDOR_NAME_RC_ID)
|| (tChild == TAG_SUMMARY_MSG_RC_ID)
|| (tChild == TAG_DESCRIPTION_RC_ID)
|| (tChild == TAG_PARAMETER1_RC_ID))
bOutput &= PrintFormat(hOutput, L": 0x%08lX\r\n", dwData);
#endif
else
bOutput &= PrintFormat(hOutput, L": 0x%08lX\r\n", dwData);
break;
case TAG_TYPE_QWORD:
qwData = SdbReadQWORDTag(lpdb, tiChild, ~0ULL);
if (qwData == ~0ULL)
bOutput &= PrintString(hOutput, L"\r\n");
else
if ((tChild == TAG_BIN_FILE_VERSION)
|| (tChild == TAG_BIN_PRODUCT_VERSION)
|| (tChild == TAG_UPTO_BIN_PRODUCT_VERSION)
|| (tChild == TAG_UPTO_BIN_FILE_VERSION))
bOutput &= PrintFormat(hOutput,
L": %hu.%hu.%hu.%hu\r\n",
(WORD) (qwData >> 48), (WORD) (qwData >> 32), (WORD) (qwData >> 16), (WORD) qwData);
else if (tChild != TAG_TIME)
bOutput &= PrintFormat(hOutput, L": 0x%016I64X\r\n", qwData);
else
if (!FileTimeToSystemTime((LPFILETIME) &qwData, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
GetLastError());
else
bOutput &= PrintFormat(hOutput,
L": %ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu.%03hu UTC\r\n",
szDayOfWeek[st.wDayOfWeek],
st.wYear, st.wMonth, st.wDay, st.wHour,
st.wMinute, st.wSecond, st.wMilliseconds);
break;
case TAG_TYPE_STRING:
case TAG_TYPE_STRINGREF:
bOutput &= PrintFormat(hOutput,
L": %ls\r\n",
SdbGetStringTagPtr(lpdb, tiChild));
break;
case TAG_TYPE_BYTE:
case TAG_TYPE_BINARY:
lpData = SdbGetBinaryTagData(lpdb, tiChild);
dwData = SdbGetTagDataSize(lpdb, tiChild);
if ((dwData == sizeof(GUID))
&& ((tChild == TAG_EXE_ID)
|| (tChild == TAG_MSI_PACKAGE_ID)
|| (tChild == TAG_DATABASE_ID)
|| (tChild == TAG_CONTEXT_PLATFORM_ID)
|| (tChild == TAG_CONTEXT_BRANCH_ID)
|| (tChild == TAG_FIX_ID)
|| (tChild == TAG_APP_ID)))
if (!SdbGUIDToString((LPGUID) lpData, szGUID))
PrintConsole(hConsole,
L"SdbGUIDToString() failed!\n");
else
bOutput &= PrintFormat(hOutput, L": %ls\r\n", szGUID);
else if (tChild == TAG_PATCH_BITS)
{
bOutput &= PrintString(hOutput, L":\r\n");
while (dwData > 0)
{
lpPatch = (LPPATCH_ACTION) lpData;
if ((lpPatch->Opcode == PATCH_STOP)
&& (lpPatch->ActionSize == 0))
break;
dwData -= lpPatch->ActionSize;
lpData += lpPatch->ActionSize;
if ((lpPatch->Opcode != PATCH_REPLACE)
&& (lpPatch->Opcode != PATCH_MATCH))
continue;
bOutput &= PrintFormat(hOutput,
L"%ls Action = %lu (%ls)\r\n"
L"%ls Module = %.32ls\r\n"
L"%ls RVA = 0x%08lX\r\n"
L"%ls Length = %lu\r\n"
L"%ls Pattern = 0x",
L"\t\t\t\t\t\t\t\t\t\t" + 7 - dwLevel,
lpPatch->Opcode,
lpPatch->Opcode == PATCH_MATCH ? L"MATCH" : L"REPLACE",
L"\t\t\t\t\t\t\t\t\t\t" + 7 - dwLevel,
lpPatch->ModuleName,
L"\t\t\t\t\t\t\t\t\t\t" + 7 - dwLevel,
lpPatch->RVA,
L"\t\t\t\t\t\t\t\t\t\t" + 7 - dwLevel,
lpPatch->PatternSize,
L"\t\t\t\t\t\t\t\t\t\t" + 7 - dwLevel);
for (dw = 0; dw < lpPatch->PatternSize; dw++)
bOutput &= PrintFormat(hOutput, L"%02X", lpPatch->Pattern[dw]);
bOutput &= PrintFormat(hOutput,
L"\r\n"
L"%ls Unknown = 0x%08lX\r\n",
L"\t\t\t\t\t\t\t\t\t\t" + 7 - dwLevel,
lpPatch->Reserved);
}
#if 0
if (dwData != 8)
PrintConsole(hConsole,
L"Sequence of \'PATCH_ACTION\' structures not properly terminated!\n");
#endif
}
else
{
if (dwData > 0)
bOutput &= PrintString(hOutput, L": 0x");
for (dw = 0; dw < dwData; dw++)
bOutput &= PrintFormat(hOutput, L"%02X", lpData[dw]);
bOutput &= PrintString(hOutput, L"\r\n");
}
break;
case TAG_TYPE_LIST:
bOutput &= PrintString(hOutput, L"\r\n");
Children(hConsole, hOutput, lpdb, tiChild, dwLevel + 1);
break;
default:
bOutput &= PrintString(hOutput, L"\r\n");
PrintConsole(hConsole,
L"Undefined TAG_TYPE 0x%04hX for TAGID 0x%08lX\n",
tChild, tiChild);
}
tiChild = SdbGetNextChild(lpdb, tiParent, tiChild);
}
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu for level %lu\n",
GetLastError(), dwLevel);
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
PDB lpdb;
LPWSTR *lpArguments;
INT nArguments;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwMajor, dwMinor;
HANDLE hOutput;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments != 2)
PrintConsole(hConsole,
L"Bad arguments: a single file or path name of a shim database must be given!\n");
else
{
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOutput == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"GetStdHandle() returned error %lu\n",
dwError = GetLastError());
else
{
if (!FlushFileBuffers(hOutput))
PrintConsole(hConsole,
L"FlushFileBuffers() returned error %lu: standard output is not redirected to a file!\n",
dwError = GetLastError());
else
{
dwError = ERROR_SUCCESS;
if (SdbGetDatabaseVersion(lpArguments[1], &dwMajor, &dwMinor))
PrintConsole(hConsole,
L"Shim database version: %lu.%lu\n",
dwMajor, dwMinor);
lpdb = SdbOpenDatabase(lpArguments[1], DOS_PATH);
if (lpdb == NULL)
PrintConsole(hConsole,
L"SdbOpenDatabase() returned NULL for file \'%ls\'\n",
lpArguments[1]);
else
{
if (!PrintFormat(hOutput,
L"\xFEFF" // UTF-16LE BOM
L"Shim database file:\t%ls\r\n"
L"Shim database version:\t%lu.%lu\r\n"
L"\r\n"
L"TAGID\t\tTAG = TAGSTRING: TAGVALUE\r\n"
L"\r\n",
lpArguments[1],
dwMajor, dwMinor))
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
Children(hConsole, hOutput, lpdb, TAGID_ROOT, 0);
SdbCloseDatabase(lpdb);
}
}
if (!CloseHandle(hOutput))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
#else // _DLL
__declspec(dllexport)
long SdbCloseDatabase(void *_1)
{ return 0; }
__declspec(dllexport)
long SdbGetBinaryTagData(void *_1, long _2)
{ return 0; }
__declspec(dllexport)
long SdbGetDatabaseVersion(void *_1, void *_2, void *_3)
{ return 0; }
__declspec(dllexport)
long SdbGetFirstChild(void *_1, long _2)
{ return 0; }
__declspec(dllexport)
long SdbGetNextChild(void *_1, long _2, long _3)
{ return 0; }
__declspec(dllexport)
long SdbGetStringTagPtr(void *_1, long _2)
{ return 0; }
__declspec(dllexport)
long SdbGetTagDataSize(void *_1, long _2)
{ return 0; }
__declspec(dllexport)
long SdbGetTagFromTagID(void *_1, long _2)
{ return 0; }
__declspec(dllexport)
long SdbGUIDToString(void *_1, void *_2)
{ return 0; }
__declspec(dllexport)
long SdbOpenDatabase(void *_1, long _2)
{ return 0; }
__declspec(dllexport)
long SdbReadDWORDTag(void *_1, long _2, long _3)
{ return 0; }
__declspec(dllexport)
long SdbReadQWORDTag(void *_1, long _2, long long _3)
{ return 0; }
__declspec(dllexport)
long SdbReadWORDTag(void *_1, long _2, short _3)
{ return 0; }
__declspec(dllexport)
long SdbTagToString(short _1)
{ return 0; }
#endif // _DLL
Run the following four command lines to compile the source file
APPHELP.C
created in step 1. a first time,
generate the import library APPHELP.LIB
from the
compiled object file APPHELP.OBJ
and cleanup
afterwards:
SET CL=/Gz /LD /MD /W4 /wd4100 /X /Zl SET LINK=/EXPORT:SdbCloseDatabase /EXPORT:SdbGetBinaryTagData /EXPORT:SdbGetDatabaseVersion /EXPORT:SdbGetFirstChild /EXPORT:SdbGetNextChild /EXPORT:SdbGetStringTagPtr /EXPORT:SdbGetTagDataSize /EXPORT:SdbGetTagFromTagID /EXPORT:SdbGUIDToString /EXPORT:SdbOpenDatabase /EXPORT:SdbReadDWORDTag /EXPORT:SdbReadQWORDTag /EXPORT:SdbReadWORDTag /EXPORT:SdbTagToString /NODEFAULTLIB /NOENTRY CL.EXE APPHELP.C ERASE APPHELP.DLL APPHELP.EXP APPHELP.OBJFor 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. APPHELP.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. … Creating library APPHELP.lib and object APPHELP.exp
Run the following four command lines to compile the source file
APPHELP.C
created in step 1. a second time, link
the compiled object file APPHELP.OBJ
with the import
library APPHELP.LIB
generated in step 2. and
cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.1 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeAPPHELP.COM APPHELP.C APPHELP.LIB KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE APPHELP.OBJFor 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. APPHELP.C APPHELP.C(222) : warning C4213: nonstandard extension used : cast on l-value APPHELP.C(274) : warning C4310: cast truncates constant value Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file APPHELP.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 0a 00 00 ......#.........
00 10 00 00 00 00 00 00 a1 15 00 00 00 10 00 00 ................
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 01 00 00 00 2f 03 05 00 01 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 4c bd 00 00 03 00 00 85 .0......L.......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
78 2c 00 00 50 00 00 00 00 00 00 00 00 00 00 00 x,..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 10 2c 00 00 40 00 00 00 .........,..@...
00 00 00 00 00 00 00 00 00 20 00 00 78 00 00 00 ......... ..x...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
0c 09 00 00 00 10 00 00 00 0a 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 48 0f 00 00 00 20 00 00 .const..H.... ..
00 10 00 00 00 0c 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 70 20 40 00 8b f0 .......P..p @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 3c 20 40 00 85 .....P.u...< @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 08 08 00 00 8d 45 10 50 ff 75 0c 8d 85 ........E.P.u...
f8 f7 ff ff 50 ff 15 70 20 40 00 85 c0 75 02 c9 ....P..p @...u..
c3 56 57 8d 3c 00 8d b5 f8 f7 ff ff 6a 00 8d 45 .VW.<.......j..E
fc 50 57 56 ff 75 08 ff 15 40 20 40 00 85 c0 74 .PWV.u...@ @...t
0f 03 75 fc 2b 7d fc 75 e3 33 c0 40 5f 5e c9 c3 ..u.+}.u.3.@_^..
33 c0 eb f8 55 8b ec 56 8b 75 10 57 8b 7d 0c 03 3...U..V.u.W.}..
f6 6a 00 8d 45 10 50 56 57 ff 75 08 ff 15 40 20 .j..E.PVW.u...@
40 00 85 c0 74 11 03 7d 10 2b 75 10 75 e3 33 c0 @...t..}.+u.u.3.
40 5f 5e 5d c2 0c 00 33 c0 eb f6 55 8b ec 83 ec @_^]...3...U....
7c ff 75 14 c7 45 fc 01 00 00 00 ff 75 10 ff 15 |.u..E......u...
28 20 40 00 89 45 f8 85 c0 0f 84 9e 04 00 00 8b ( @..E..........
45 18 53 03 c0 c7 45 f4 d6 28 40 00 29 45 f4 56 E.S...E..(@.)E.V
57 ff 75 f8 ff 75 10 ff 15 24 20 40 00 0f b7 f8 W.u..u...$ @....
57 8b f7 ff 15 20 20 40 00 8b 5d 0c 50 56 ff 75 W.... @..].PV.u
f4 ff 75 f8 68 94 28 40 00 53 e8 0f ff ff ff 21 ..u.h.(@.S.....!
45 fc 8b c6 25 00 f0 00 00 b9 00 50 00 00 83 c4 E...%......P....
18 3b c1 0f 87 ac 01 00 00 0f 84 11 01 00 00 3d .;.............=
00 10 00 00 74 34 3d 00 20 00 00 0f 84 e5 01 00 ....t4=. .......
00 3d 00 30 00 00 0f 84 cc 00 00 00 3d 00 40 00 .=.0........=.@.
00 0f 85 a6 01 00 00 6a ff ff 75 f8 ff 75 10 ff .......j..u..u..
15 1c 20 40 00 83 f8 ff 75 12 6a 02 68 8c 28 40 .. @....u.j.h.(@
00 53 e8 fd fe ff ff e9 ad 03 00 00 b9 1d 40 00 .S............@.
00 66 3b f9 74 11 41 66 3b f9 74 0b 50 68 74 28 .f;.t.Af;.t.Pht(
40 00 e9 89 03 00 00 b9 80 96 98 00 f7 e1 05 00 @...............
80 3e d5 81 d2 de b1 9d 01 89 45 e4 89 55 e8 8d .>........E..U..
45 d4 50 8d 45 e4 50 ff 15 48 20 40 00 85 c0 75 E.P.E.P..H @...u
16 ff 15 44 20 40 00 50 68 48 28 40 00 68 14 28 ...D @.PhH(@.h.(
40 00 e9 3f 01 00 00 0f b7 45 e2 50 0f b7 45 e0 @..?.....E.P..E.
50 0f b7 45 de 50 0f b7 45 dc 50 0f b7 45 da 50 P..E.P..E.P..E.P
0f b7 45 d6 50 0f b7 45 d4 50 0f b7 45 d8 ff 34 ..E.P..E.P..E..4
85 c8 20 40 00 68 a0 27 40 00 53 e8 0e fe ff ff .. @.h.'@.S.....
83 c4 28 e9 11 03 00 00 68 ff ff 00 00 ff 75 f8 ..(.....h.....u.
ff 75 10 ff 15 18 20 40 00 0f b7 c0 83 f8 ff 0f .u.... @........
84 35 ff ff ff 50 68 84 27 40 00 e9 e0 02 00 00 .5...Ph.'@......
6a ff 6a ff ff 75 f8 ff 75 10 ff 15 14 20 40 00 j.j..u..u.... @.
8b c8 23 ca 89 45 e4 89 55 e8 83 f9 ff 0f 84 07 ..#..E..U.......
ff ff ff b9 02 50 00 00 66 3b f9 74 3b 41 66 3b .....P..f;.t;Af;
f9 74 35 b9 06 50 00 00 66 3b f9 74 2b 83 c1 07 .t5..P..f;.t+...
66 3b f9 74 23 b9 01 50 00 00 66 3b f9 0f 84 1c f;.t#..P..f;....
ff ff ff 52 50 68 64 27 40 00 53 e8 7e fd ff ff ...RPhd'@.S.~...
83 c4 10 e9 81 02 00 00 0f b7 c8 51 8b ca 0f ac ...........Q....
c8 10 0f b7 c0 50 0f b7 45 e8 50 c1 ea 10 52 68 .....P..E.P...Rh
3c 27 40 00 53 c1 e9 10 e8 51 fd ff ff 83 c4 18 <'@.S....Q......
e9 54 02 00 00 3d 00 60 00 00 0f 84 2e 02 00 00 .T...=.`........
3d 00 70 00 00 0f 84 fd 01 00 00 3d 00 80 00 00 =.p........=....
0f 84 18 02 00 00 3d 00 90 00 00 74 29 6a 02 68 ......=....t)j.h
8c 28 40 00 53 e8 6a fd ff ff ff 75 f8 21 45 fc .(@.S.j....u.!E.
56 68 e0 26 40 00 ff 75 08 e8 b2 fc ff ff 83 c4 Vh.&@..u........
10 e9 06 02 00 00 ff 75 f8 ff 75 10 ff 15 10 20 .......u..u....
40 00 ff 75 f8 8b d8 ff 75 10 ff 15 0c 20 40 00 @..u....u.... @.
8b f0 89 75 f0 83 fe 10 75 72 b8 04 90 00 00 66 ...u....ur.....f
3b f8 74 34 83 c0 02 66 3b f8 74 2c b8 07 90 00 ;.t4...f;.t,....
00 66 3b f8 74 22 40 66 3b f8 74 1c b8 09 90 00 .f;.t"@f;.t.....
00 66 3b f8 74 12 83 c0 07 66 3b f8 74 0a b8 11 .f;.t....f;.t...
90 00 00 66 3b f8 75 34 8d 45 84 50 53 ff 15 08 ...f;.u4.E.PS...
20 40 00 85 c0 75 14 68 98 26 40 00 ff 75 08 e8 @...u.h.&@..u..
2c fc ff ff 59 59 e9 81 01 00 00 8d 45 84 50 68 ,...YY......E.Ph
88 26 40 00 ff 75 0c e9 65 01 00 00 b8 02 90 00 .&@..u..e.......
00 66 3b f8 0f 85 d5 00 00 00 6a 03 68 80 26 40 .f;.......j.h.&@
00 ff 75 0c e8 9b fc ff ff 21 45 fc 85 f6 0f 84 ..u......!E.....
48 01 00 00 83 3b 00 8b f3 75 0a 83 7b 04 00 0f H....;...u..{...
84 37 01 00 00 8b 43 04 8b 0e 29 45 f0 03 d8 89 .7....C...)E....
5d ec 83 f9 02 74 09 83 f9 04 0f 85 80 00 00 00 ]....t..........
ba 74 26 40 00 83 f9 04 74 05 ba 64 26 40 00 8b .t&@....t..d&@..
45 18 03 c0 bf d2 28 40 00 2b f8 57 ff 76 08 8d E.....(@.+.W.v..
46 14 57 ff 76 0c 57 50 57 52 51 57 68 90 25 40 F.W.v.WPWRQWh.%@
00 ff 75 0c e8 d5 fb ff ff 21 45 fc 33 db 83 c4 ..u......!E.3...
30 39 5e 08 76 20 0f b6 44 1e 54 6a 02 8d 04 85 09^.v ..D.Tj....
e8 20 40 00 50 ff 75 0c e8 07 fc ff ff 21 45 fc . @.P.u......!E.
43 3b 5e 08 72 e0 ff 76 10 57 68 58 25 40 00 ff C;^.r..v.WhX%@..
75 0c e8 97 fb ff ff 8b 5d ec 83 c4 10 21 45 fc u.......]....!E.
83 7d f0 00 0f 87 4a ff ff ff e9 8d 00 00 00 85 .}....J.........
f6 74 12 6a 04 68 4c 25 40 00 ff 75 0c e8 c2 fb .t.j.hL%@..u....
ff ff 21 45 fc 33 ff 85 f6 74 1e 0f b6 04 1f 6a ..!E.3...t.....j
02 8d 04 85 e8 20 40 00 50 ff 75 0c e8 a3 fb ff ..... @.P.u.....
ff 21 45 fc 47 3b fe 72 e2 6a 02 68 8c 28 40 00 .!E.G;.r.j.h.(@.
ff 75 0c e9 8a fc ff ff 6a 02 68 8c 28 40 00 53 .u......j.h.(@.S
e8 7f fb ff ff 21 45 fc 8b 45 18 40 50 ff 75 f8 .....!E..E.@P.u.
ff 75 10 53 ff 75 08 e8 9f fb ff ff eb 1e ff 75 .u.S.u.........u
f8 ff 75 10 ff 15 04 20 40 00 50 68 88 26 40 00 ..u.... @.Ph.&@.
53 e8 f8 fa ff ff 83 c4 0c 21 45 fc ff 75 f8 ff S........!E..u..
75 14 ff 75 10 ff 15 00 20 40 00 89 45 f8 85 c0 u..u.... @..E...
0f 85 9b fb ff ff 5f 5e 5b 39 45 fc 75 1f ff 75 ......_^[9E.u..u
18 ff 15 44 20 40 00 50 68 38 25 40 00 68 e8 24 ...D @.Ph8%@.h.$
40 00 ff 75 08 e8 66 fa ff ff 83 c4 14 c9 c2 14 @..u..f.........
00 83 ec 18 55 57 6a f4 bd a0 00 00 00 ff 15 60 ....UWj........`
20 40 00 8b f8 83 ff ff 75 0d ff 15 44 20 40 00 @......u...D @.
8b e8 e9 a4 01 00 00 53 56 8d 44 24 24 50 ff 15 .......SV.D$$P..
5c 20 40 00 50 e8 9a 01 00 00 8b 35 44 20 40 00 \ @.P......5D @.
89 44 24 10 85 c0 75 14 ff d6 8b e8 55 68 e0 2b .D$...u.....Uh.+
40 00 bb 14 28 40 00 e9 46 01 00 00 83 7c 24 24 @...(@..F....|$$
02 bb 14 28 40 00 74 12 68 48 2b 40 00 57 e8 ed ...(@.t.hH+@.W..
f9 ff ff 59 59 e9 12 01 00 00 6a f5 ff 15 60 20 ...YY.....j...`
40 00 89 44 24 14 83 f8 ff 75 0f ff d6 8b e8 55 @..D$....u.....U
68 2c 2b 40 00 e9 e8 00 00 00 50 ff 15 58 20 40 h,+@......P..X @
00 85 c0 75 11 ff d6 8b e8 55 68 08 2b 40 00 68 ...u.....Uh.+@.h
78 2a 40 00 eb 5b 8d 44 24 18 50 8d 44 24 20 50 x*@..[.D$.P.D$ P
8b 44 24 18 ff 70 04 33 ed ff 15 34 20 40 00 85 .D$..p.3...4 @..
c0 74 16 ff 74 24 18 ff 74 24 20 68 38 2a 40 00 .t..t$..t$ h8*@.
57 e8 7a f9 ff ff 83 c4 10 8b 44 24 10 6a 00 ff W.z.......D$.j..
70 04 ff 15 30 20 40 00 89 44 24 20 85 c0 8b 44 p...0 @..D$ ...D
24 10 75 18 ff 70 04 68 18 2a 40 00 68 d0 29 40 $.u..p.h.*@.h.)@
00 57 e8 49 f9 ff ff 83 c4 10 eb 50 ff 74 24 18 .W.I.......P.t$.
ff 74 24 20 ff 70 04 68 08 29 40 00 ff 74 24 24 .t$ .p.h.)@..t$$
e8 79 f9 ff ff 83 c4 14 85 c0 75 14 ff d6 8b e8 .y........u.....
55 68 38 25 40 00 53 57 e8 13 f9 ff ff 83 c4 10 Uh8%@.SW........
6a 00 6a 00 ff 74 24 28 ff 74 24 20 57 e8 d9 f9 j.j..t$(.t$ W...
ff ff ff 74 24 20 ff 15 2c 20 40 00 ff 74 24 14 ...t$ .., @..t$.
ff 15 54 20 40 00 85 c0 75 12 ff d6 50 68 f0 28 ..T @...u...Ph.(
40 00 53 57 e8 d7 f8 ff ff 83 c4 10 ff 74 24 10 @.SW.........t$.
ff 15 50 20 40 00 85 c0 74 12 ff d6 50 68 dc 28 ..P @...t...Ph.(
40 00 53 57 e8 b7 f8 ff ff 83 c4 10 57 ff 15 54 @.SW........W..T
20 40 00 85 c0 75 12 ff d6 50 68 f0 28 40 00 53 @...u...Ph.(@.S
57 e8 9a f8 ff ff 83 c4 10 5e 5b 55 ff 15 4c 20 W........^[U..L
40 00 5f 5d 55 8b ec 51 8b 45 08 53 56 33 f6 57 @._]U..Q.E.SV3.W
8b f8 89 75 08 89 75 fc 39 75 0c 0f 84 6a 01 00 ...u..u.9u...j..
00 3b c6 0f 84 62 01 00 00 0f b7 08 66 3b ce 0f .;...b......f;..
84 56 01 00 00 83 f9 20 74 0a 83 f9 09 74 05 33 .V..... t....t.3
db 43 eb 02 33 db 39 75 08 75 2b 66 83 f9 20 74 .C..3.9u.u+f.. t
06 66 83 f9 09 75 1f 89 75 fc 83 c0 02 0f b7 08 .f...u..u.......
83 f9 20 74 f5 83 f9 09 74 f0 33 c9 66 39 30 0f .. t....t.3.f90.
95 c1 03 d9 eb 23 66 83 f9 5c 75 06 83 75 fc 01 .....#f..\u..u..
eb 14 39 75 fc 75 0c 66 83 f9 22 75 06 83 75 08 ..9u.u.f.."u..u.
01 eb 03 89 75 fc 83 c0 02 0f b7 08 66 3b ce 75 ....u.......f;.u
a5 2b c7 83 c0 02 d1 f8 8d 44 58 02 03 c0 50 6a .+.......DX...Pj
40 ff 15 68 20 40 00 8b f0 33 d2 3b f2 0f 84 d0 @..h @...3.;....
00 00 00 8d 44 9e 04 33 db 89 06 89 55 08 89 5d ....D..3....U..]
fc 83 7d 08 00 75 34 0f b7 0f 83 f9 20 74 05 83 ..}..u4..... t..
f9 09 75 27 33 d2 33 c9 66 89 08 83 c7 02 0f b7 ..u'3.3.f.......
0f 83 f9 20 74 f5 83 f9 09 74 f0 66 39 17 74 71 ... t....t.f9.tq
43 8b c7 89 5d fc 89 3c 9e eb 5c 0f b7 0f 83 f9 C...]..<..\.....
5c 75 03 42 eb 48 83 f9 22 75 41 6a 02 8d 5a 01 \u.B.H.."uAj..Z.
d1 eb 59 f7 db 03 f9 8d 04 58 f6 c2 01 74 0a 6a ..Y......X...t.j
22 5a 66 89 10 03 c1 eb 1c 83 7d 08 00 74 12 66 "Zf.......}..t.f
83 3f 22 75 0c 6a 22 5a 66 89 10 03 c1 03 f9 eb .?"u.j"Zf.......
04 83 75 08 01 8b 5d fc 33 d2 eb 0b 33 d2 66 89 ..u...].3...3.f.
08 83 c0 02 83 c7 02 66 83 3f 00 0f 85 60 ff ff .......f.?...`..
ff 33 c9 43 66 89 08 21 0c 9e 8b 45 0c 89 18 39 .3.Cf..!...E...9
4d 08 74 0f 68 a0 00 00 00 eb 02 6a 57 ff 15 64 M.t.h......jW..d
20 40 00 5f 8b c6 5e 5b c9 c2 08 00 00 00 00 00 @._..^[........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
40 2d 00 00 52 2d 00 00 68 2d 00 00 7a 2d 00 00 @-..R-..h-..z-..
8e 2d 00 00 a4 2d 00 00 b6 2d 00 00 c8 2d 00 00 .-...-...-...-..
da 2d 00 00 ec 2d 00 00 02 2e 00 00 16 2e 00 00 .-...-..........
2a 2e 00 00 3c 2e 00 00 00 00 00 00 60 2e 00 00 *...<.......`...
70 2e 00 00 7c 2e 00 00 8c 2e 00 00 a4 2e 00 00 p...|...........
b2 2e 00 00 be 2e 00 00 cc 2e 00 00 e0 2e 00 00 ................
f2 2e 00 00 02 2f 00 00 12 2f 00 00 00 00 00 00 ...../.../......
2e 2f 00 00 00 00 00 00 53 00 61 00 74 00 75 00 ./......S.a.t.u.
72 00 00 00 46 00 72 00 69 00 00 00 54 00 68 00 r...F.r.i...T.h.
75 00 72 00 73 00 00 00 57 00 65 00 64 00 6e 00 u.r.s...W.e.d.n.
65 00 73 00 00 00 00 00 54 00 75 00 65 00 73 00 e.s.....T.u.e.s.
00 00 00 00 4d 00 6f 00 6e 00 00 00 53 00 75 00 ....M.o.n...S.u.
6e 00 00 00 00 00 00 00 bc 20 40 00 b4 20 40 00 n........ @.. @.
a8 20 40 00 98 20 40 00 8c 20 40 00 84 20 40 00 . @.. @.. @.. @.
78 20 40 00 00 00 00 00 30 00 30 00 30 00 31 00 x @.....0.0.0.1.
30 00 32 00 30 00 33 00 30 00 34 00 30 00 35 00 0.2.0.3.0.4.0.5.
30 00 36 00 30 00 37 00 30 00 38 00 30 00 39 00 0.6.0.7.0.8.0.9.
30 00 41 00 30 00 42 00 30 00 43 00 30 00 44 00 0.A.0.B.0.C.0.D.
30 00 45 00 30 00 46 00 31 00 30 00 31 00 31 00 0.E.0.F.1.0.1.1.
31 00 32 00 31 00 33 00 31 00 34 00 31 00 35 00 1.2.1.3.1.4.1.5.
31 00 36 00 31 00 37 00 31 00 38 00 31 00 39 00 1.6.1.7.1.8.1.9.
31 00 41 00 31 00 42 00 31 00 43 00 31 00 44 00 1.A.1.B.1.C.1.D.
31 00 45 00 31 00 46 00 32 00 30 00 32 00 31 00 1.E.1.F.2.0.2.1.
32 00 32 00 32 00 33 00 32 00 34 00 32 00 35 00 2.2.2.3.2.4.2.5.
32 00 36 00 32 00 37 00 32 00 38 00 32 00 39 00 2.6.2.7.2.8.2.9.
32 00 41 00 32 00 42 00 32 00 43 00 32 00 44 00 2.A.2.B.2.C.2.D.
32 00 45 00 32 00 46 00 33 00 30 00 33 00 31 00 2.E.2.F.3.0.3.1.
33 00 32 00 33 00 33 00 33 00 34 00 33 00 35 00 3.2.3.3.3.4.3.5.
33 00 36 00 33 00 37 00 33 00 38 00 33 00 39 00 3.6.3.7.3.8.3.9.
33 00 41 00 33 00 42 00 33 00 43 00 33 00 44 00 3.A.3.B.3.C.3.D.
33 00 45 00 33 00 46 00 34 00 30 00 34 00 31 00 3.E.3.F.4.0.4.1.
34 00 32 00 34 00 33 00 34 00 34 00 34 00 35 00 4.2.4.3.4.4.4.5.
34 00 36 00 34 00 37 00 34 00 38 00 34 00 39 00 4.6.4.7.4.8.4.9.
34 00 41 00 34 00 42 00 34 00 43 00 34 00 44 00 4.A.4.B.4.C.4.D.
34 00 45 00 34 00 46 00 35 00 30 00 35 00 31 00 4.E.4.F.5.0.5.1.
35 00 32 00 35 00 33 00 35 00 34 00 35 00 35 00 5.2.5.3.5.4.5.5.
35 00 36 00 35 00 37 00 35 00 38 00 35 00 39 00 5.6.5.7.5.8.5.9.
35 00 41 00 35 00 42 00 35 00 43 00 35 00 44 00 5.A.5.B.5.C.5.D.
35 00 45 00 35 00 46 00 36 00 30 00 36 00 31 00 5.E.5.F.6.0.6.1.
36 00 32 00 36 00 33 00 36 00 34 00 36 00 35 00 6.2.6.3.6.4.6.5.
36 00 36 00 36 00 37 00 36 00 38 00 36 00 39 00 6.6.6.7.6.8.6.9.
36 00 41 00 36 00 42 00 36 00 43 00 36 00 44 00 6.A.6.B.6.C.6.D.
36 00 45 00 36 00 46 00 37 00 30 00 37 00 31 00 6.E.6.F.7.0.7.1.
37 00 32 00 37 00 33 00 37 00 34 00 37 00 35 00 7.2.7.3.7.4.7.5.
37 00 36 00 37 00 37 00 37 00 38 00 37 00 39 00 7.6.7.7.7.8.7.9.
37 00 41 00 37 00 42 00 37 00 43 00 37 00 44 00 7.A.7.B.7.C.7.D.
37 00 45 00 37 00 46 00 38 00 30 00 38 00 31 00 7.E.7.F.8.0.8.1.
38 00 32 00 38 00 33 00 38 00 34 00 38 00 35 00 8.2.8.3.8.4.8.5.
38 00 36 00 38 00 37 00 38 00 38 00 38 00 39 00 8.6.8.7.8.8.8.9.
38 00 41 00 38 00 42 00 38 00 43 00 38 00 44 00 8.A.8.B.8.C.8.D.
38 00 45 00 38 00 46 00 39 00 30 00 39 00 31 00 8.E.8.F.9.0.9.1.
39 00 32 00 39 00 33 00 39 00 34 00 39 00 35 00 9.2.9.3.9.4.9.5.
39 00 36 00 39 00 37 00 39 00 38 00 39 00 39 00 9.6.9.7.9.8.9.9.
39 00 41 00 39 00 42 00 39 00 43 00 39 00 44 00 9.A.9.B.9.C.9.D.
39 00 45 00 39 00 46 00 41 00 30 00 41 00 31 00 9.E.9.F.A.0.A.1.
41 00 32 00 41 00 33 00 41 00 34 00 41 00 35 00 A.2.A.3.A.4.A.5.
41 00 36 00 41 00 37 00 41 00 38 00 41 00 39 00 A.6.A.7.A.8.A.9.
41 00 41 00 41 00 42 00 41 00 43 00 41 00 44 00 A.A.A.B.A.C.A.D.
41 00 45 00 41 00 46 00 42 00 30 00 42 00 31 00 A.E.A.F.B.0.B.1.
42 00 32 00 42 00 33 00 42 00 34 00 42 00 35 00 B.2.B.3.B.4.B.5.
42 00 36 00 42 00 37 00 42 00 38 00 42 00 39 00 B.6.B.7.B.8.B.9.
42 00 41 00 42 00 42 00 42 00 43 00 42 00 44 00 B.A.B.B.B.C.B.D.
42 00 45 00 42 00 46 00 43 00 30 00 43 00 31 00 B.E.B.F.C.0.C.1.
43 00 32 00 43 00 33 00 43 00 34 00 43 00 35 00 C.2.C.3.C.4.C.5.
43 00 36 00 43 00 37 00 43 00 38 00 43 00 39 00 C.6.C.7.C.8.C.9.
43 00 41 00 43 00 42 00 43 00 43 00 43 00 44 00 C.A.C.B.C.C.C.D.
43 00 45 00 43 00 46 00 44 00 30 00 44 00 31 00 C.E.C.F.D.0.D.1.
44 00 32 00 44 00 33 00 44 00 34 00 44 00 35 00 D.2.D.3.D.4.D.5.
44 00 36 00 44 00 37 00 44 00 38 00 44 00 39 00 D.6.D.7.D.8.D.9.
44 00 41 00 44 00 42 00 44 00 43 00 44 00 44 00 D.A.D.B.D.C.D.D.
44 00 45 00 44 00 46 00 45 00 30 00 45 00 31 00 D.E.D.F.E.0.E.1.
45 00 32 00 45 00 33 00 45 00 34 00 45 00 35 00 E.2.E.3.E.4.E.5.
45 00 36 00 45 00 37 00 45 00 38 00 45 00 39 00 E.6.E.7.E.8.E.9.
45 00 41 00 45 00 42 00 45 00 43 00 45 00 44 00 E.A.E.B.E.C.E.D.
45 00 45 00 45 00 46 00 46 00 30 00 46 00 31 00 E.E.E.F.F.0.F.1.
46 00 32 00 46 00 33 00 46 00 34 00 46 00 35 00 F.2.F.3.F.4.F.5.
46 00 36 00 46 00 37 00 46 00 38 00 46 00 39 00 F.6.F.7.F.8.F.9.
46 00 41 00 46 00 42 00 46 00 43 00 46 00 44 00 F.A.F.B.F.C.F.D.
46 00 45 00 46 00 46 00 25 00 6c 00 73 00 28 00 F.E.F.F.%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 6c 00 65 00 76 00 65 00 6c 00 20 00 25 00 .l.e.v.e.l. .%.
6c 00 75 00 0a 00 00 00 57 00 72 00 69 00 74 00 l.u.....W.r.i.t.
65 00 46 00 69 00 6c 00 65 00 00 00 3a 00 20 00 e.F.i.l.e...:. .
30 00 78 00 00 00 00 00 0d 00 0a 00 25 00 6c 00 0.x.........%.l.
73 00 20 00 55 00 6e 00 6b 00 6e 00 6f 00 77 00 s. .U.n.k.n.o.w.
6e 00 20 00 3d 00 20 00 30 00 78 00 25 00 30 00 n. .=. .0.x.%.0.
38 00 6c 00 58 00 0d 00 0a 00 00 00 00 00 00 00 8.l.X...........
25 00 6c 00 73 00 20 00 41 00 63 00 74 00 69 00 %.l.s. .A.c.t.i.
6f 00 6e 00 20 00 20 00 3d 00 20 00 25 00 6c 00 o.n. . .=. .%.l.
75 00 20 00 28 00 25 00 6c 00 73 00 29 00 0d 00 u. .(.%.l.s.)...
0a 00 25 00 6c 00 73 00 20 00 4d 00 6f 00 64 00 ..%.l.s. .M.o.d.
75 00 6c 00 65 00 20 00 20 00 3d 00 20 00 25 00 u.l.e. . .=. .%.
2e 00 33 00 32 00 6c 00 73 00 0d 00 0a 00 25 00 ..3.2.l.s.....%.
6c 00 73 00 20 00 52 00 56 00 41 00 20 00 20 00 l.s. .R.V.A. . .
20 00 20 00 20 00 3d 00 20 00 30 00 78 00 25 00 . . .=. .0.x.%.
30 00 38 00 6c 00 58 00 0d 00 0a 00 25 00 6c 00 0.8.l.X.....%.l.
73 00 20 00 4c 00 65 00 6e 00 67 00 74 00 68 00 s. .L.e.n.g.t.h.
20 00 20 00 3d 00 20 00 25 00 6c 00 75 00 0d 00 . .=. .%.l.u...
0a 00 25 00 6c 00 73 00 20 00 50 00 61 00 74 00 ..%.l.s. .P.a.t.
74 00 65 00 72 00 6e 00 20 00 3d 00 20 00 30 00 t.e.r.n. .=. .0.
78 00 00 00 52 00 45 00 50 00 4c 00 41 00 43 00 x...R.E.P.L.A.C.
45 00 00 00 4d 00 41 00 54 00 43 00 48 00 00 00 E...M.A.T.C.H...
3a 00 0d 00 0a 00 00 00 3a 00 20 00 25 00 6c 00 :.......:. .%.l.
73 00 0d 00 0a 00 00 00 53 00 64 00 62 00 47 00 s.......S.d.b.G.
55 00 49 00 44 00 54 00 6f 00 53 00 74 00 72 00 U.I.D.T.o.S.t.r.
69 00 6e 00 67 00 28 00 29 00 20 00 72 00 65 00 i.n.g.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 46 00 t.u.r.n.e.d. .F.
41 00 4c 00 53 00 45 00 21 00 0a 00 00 00 00 00 A.L.S.E.!.......
55 00 6e 00 64 00 65 00 66 00 69 00 6e 00 65 00 U.n.d.e.f.i.n.e.
64 00 20 00 54 00 41 00 47 00 5f 00 54 00 59 00 d. .T.A.G._.T.Y.
50 00 45 00 20 00 30 00 78 00 25 00 30 00 34 00 P.E. .0.x.%.0.4.
68 00 58 00 20 00 66 00 6f 00 72 00 20 00 54 00 h.X. .f.o.r. .T.
41 00 47 00 49 00 44 00 20 00 30 00 78 00 25 00 A.G.I.D. .0.x.%.
30 00 38 00 6c 00 58 00 0a 00 00 00 3a 00 20 00 0.8.l.X.....:. .
25 00 68 00 75 00 2e 00 25 00 68 00 75 00 2e 00 %.h.u...%.h.u...
25 00 68 00 75 00 2e 00 25 00 68 00 75 00 0d 00 %.h.u...%.h.u...
0a 00 00 00 3a 00 20 00 30 00 78 00 25 00 30 00 ....:. .0.x.%.0.
31 00 36 00 49 00 36 00 34 00 58 00 0d 00 0a 00 1.6.I.6.4.X.....
00 00 00 00 3a 00 20 00 30 00 78 00 25 00 30 00 ....:. .0.x.%.0.
34 00 68 00 58 00 0d 00 0a 00 00 00 00 00 00 00 4.h.X...........
3a 00 20 00 25 00 6c 00 73 00 64 00 61 00 79 00 :. .%.l.s.d.a.y.
2c 00 20 00 25 00 30 00 34 00 68 00 75 00 2d 00 ,. .%.0.4.h.u.-.
25 00 30 00 32 00 68 00 75 00 2d 00 25 00 30 00 %.0.2.h.u.-.%.0.
32 00 68 00 75 00 20 00 25 00 30 00 32 00 68 00 2.h.u. .%.0.2.h.
75 00 3a 00 25 00 30 00 32 00 68 00 75 00 3a 00 u.:.%.0.2.h.u.:.
25 00 30 00 32 00 68 00 75 00 2e 00 25 00 30 00 %.0.2.h.u...%.0.
33 00 68 00 75 00 20 00 55 00 54 00 43 00 0d 00 3.h.u. .U.T.C...
0a 00 00 00 25 00 6c 00 73 00 28 00 29 00 20 00 ....%.l.s.(.). .
72 00 65 00 74 00 75 00 72 00 6e 00 65 00 64 00 r.e.t.u.r.n.e.d.
20 00 65 00 72 00 72 00 6f 00 72 00 20 00 25 00 .e.r.r.o.r. .%.
6c 00 75 00 0a 00 00 00 46 00 69 00 6c 00 65 00 l.u.....F.i.l.e.
54 00 69 00 6d 00 65 00 54 00 6f 00 53 00 79 00 T.i.m.e.T.o.S.y.
73 00 74 00 65 00 6d 00 54 00 69 00 6d 00 65 00 s.t.e.m.T.i.m.e.
00 00 00 00 3a 00 20 00 30 00 78 00 25 00 30 00 ....:. .0.x.%.0.
38 00 6c 00 58 00 0d 00 0a 00 00 00 0d 00 0a 00 8.l.X...........
00 00 00 00 30 00 78 00 25 00 30 00 38 00 6c 00 ....0.x.%.0.8.l.
58 00 25 00 6c 00 73 00 30 00 78 00 25 00 30 00 X.%.l.s.0.x.%.0.
34 00 68 00 58 00 20 00 3d 00 20 00 25 00 6c 00 4.h.X. .=. .%.l.
73 00 00 00 09 00 09 00 09 00 09 00 09 00 09 00 s...............
09 00 09 00 09 00 09 00 00 00 00 00 4c 00 6f 00 ............L.o.
63 00 61 00 6c 00 46 00 72 00 65 00 65 00 00 00 c.a.l.F.r.e.e...
43 00 6c 00 6f 00 73 00 65 00 48 00 61 00 6e 00 C.l.o.s.e.H.a.n.
64 00 6c 00 65 00 00 00 ff fe 53 00 68 00 69 00 d.l.e.....S.h.i.
6d 00 20 00 64 00 61 00 74 00 61 00 62 00 61 00 m. .d.a.t.a.b.a.
73 00 65 00 20 00 66 00 69 00 6c 00 65 00 3a 00 s.e. .f.i.l.e.:.
09 00 25 00 6c 00 73 00 0d 00 0a 00 53 00 68 00 ..%.l.s.....S.h.
69 00 6d 00 20 00 64 00 61 00 74 00 61 00 62 00 i.m. .d.a.t.a.b.
61 00 73 00 65 00 20 00 76 00 65 00 72 00 73 00 a.s.e. .v.e.r.s.
69 00 6f 00 6e 00 3a 00 09 00 25 00 6c 00 75 00 i.o.n.:...%.l.u.
2e 00 25 00 6c 00 75 00 0d 00 0a 00 0d 00 0a 00 ..%.l.u.........
54 00 41 00 47 00 49 00 44 00 09 00 09 00 54 00 T.A.G.I.D.....T.
41 00 47 00 20 00 20 00 20 00 20 00 3d 00 20 00 A.G. . . . .=. .
54 00 41 00 47 00 53 00 54 00 52 00 49 00 4e 00 T.A.G.S.T.R.I.N.
47 00 3a 00 20 00 54 00 41 00 47 00 56 00 41 00 G.:. .T.A.G.V.A.
4c 00 55 00 45 00 0d 00 0a 00 0d 00 0a 00 00 00 L.U.E...........
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 4e 00 t.u.r.n.e.d. .N.
55 00 4c 00 4c 00 20 00 66 00 6f 00 72 00 20 00 U.L.L. .f.o.r. .
66 00 69 00 6c 00 65 00 20 00 27 00 25 00 6c 00 f.i.l.e. .'.%.l.
73 00 27 00 0a 00 00 00 53 00 64 00 62 00 4f 00 s.'.....S.d.b.O.
70 00 65 00 6e 00 44 00 61 00 74 00 61 00 62 00 p.e.n.D.a.t.a.b.
61 00 73 00 65 00 00 00 53 00 68 00 69 00 6d 00 a.s.e...S.h.i.m.
20 00 64 00 61 00 74 00 61 00 62 00 61 00 73 00 .d.a.t.a.b.a.s.
65 00 20 00 76 00 65 00 72 00 73 00 69 00 6f 00 e. .v.e.r.s.i.o.
6e 00 3a 00 20 00 25 00 6c 00 75 00 2e 00 25 00 n.:. .%.l.u...%.
6c 00 75 00 0a 00 00 00 25 00 6c 00 73 00 28 00 l.u.....%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 3a 00 20 00 73 00 74 00 .%.l.u.:. .s.t.
61 00 6e 00 64 00 61 00 72 00 64 00 20 00 6f 00 a.n.d.a.r.d. .o.
75 00 74 00 70 00 75 00 74 00 20 00 69 00 73 00 u.t.p.u.t. .i.s.
20 00 6e 00 6f 00 74 00 20 00 72 00 65 00 64 00 .n.o.t. .r.e.d.
69 00 72 00 65 00 63 00 74 00 65 00 64 00 20 00 i.r.e.c.t.e.d. .
74 00 6f 00 20 00 61 00 20 00 66 00 69 00 6c 00 t.o. .a. .f.i.l.
65 00 21 00 0a 00 00 00 46 00 6c 00 75 00 73 00 e.!.....F.l.u.s.
68 00 46 00 69 00 6c 00 65 00 42 00 75 00 66 00 h.F.i.l.e.B.u.f.
66 00 65 00 72 00 73 00 00 00 00 00 47 00 65 00 f.e.r.s.....G.e.
74 00 53 00 74 00 64 00 48 00 61 00 6e 00 64 00 t.S.t.d.H.a.n.d.
6c 00 65 00 00 00 00 00 4e 00 6f 00 20 00 61 00 l.e.....N.o. .a.
72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 3a 00 r.g.u.m.e.n.t.:.
20 00 61 00 20 00 73 00 69 00 6e 00 67 00 6c 00 .a. .s.i.n.g.l.
65 00 20 00 66 00 69 00 6c 00 65 00 20 00 6f 00 e. .f.i.l.e. .o.
72 00 20 00 70 00 61 00 74 00 68 00 20 00 6e 00 r. .p.a.t.h. .n.
61 00 6d 00 65 00 20 00 6f 00 66 00 20 00 61 00 a.m.e. .o.f. .a.
20 00 73 00 68 00 69 00 6d 00 20 00 64 00 61 00 .s.h.i.m. .d.a.
74 00 61 00 62 00 61 00 73 00 65 00 20 00 6d 00 t.a.b.a.s.e. .m.
75 00 73 00 74 00 20 00 62 00 65 00 20 00 67 00 u.s.t. .b.e. .g.
69 00 76 00 65 00 6e 00 21 00 0a 00 00 00 00 00 i.v.e.n.!.......
43 00 6f 00 6d 00 6d 00 61 00 6e 00 64 00 4c 00 C.o.m.m.a.n.d.L.
69 00 6e 00 65 00 54 00 6f 00 41 00 72 00 67 00 i.n.e.T.o.A.r.g.
76 00 00 00 00 00 00 00 b9 79 37 9e 00 00 00 00 v........y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 08 2c 40 00 .............,@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 c8 2c 00 00 00 00 00 00 .........,......
00 00 00 00 54 2e 00 00 00 20 00 00 04 2d 00 00 ....T.... ...-..
00 00 00 00 00 00 00 00 20 2f 00 00 3c 20 00 00 ........ /..< ..
38 2d 00 00 00 00 00 00 00 00 00 00 3c 2f 00 00 8-..........</..
70 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 p ..............
00 00 00 00 00 00 00 00 40 2d 00 00 52 2d 00 00 ........@-..R-..
68 2d 00 00 7a 2d 00 00 8e 2d 00 00 a4 2d 00 00 h-..z-...-...-..
b6 2d 00 00 c8 2d 00 00 da 2d 00 00 ec 2d 00 00 .-...-...-...-..
02 2e 00 00 16 2e 00 00 2a 2e 00 00 3c 2e 00 00 ........*...<...
00 00 00 00 60 2e 00 00 70 2e 00 00 7c 2e 00 00 ....`...p...|...
8c 2e 00 00 a4 2e 00 00 b2 2e 00 00 be 2e 00 00 ................
cc 2e 00 00 e0 2e 00 00 f2 2e 00 00 02 2f 00 00 ............./..
12 2f 00 00 00 00 00 00 2e 2f 00 00 00 00 00 00 ./......./......
1b 00 53 64 62 47 65 74 4e 65 78 74 43 68 69 6c ..SdbGetNextChil
64 00 1f 00 53 64 62 47 65 74 53 74 72 69 6e 67 d...SdbGetString
54 61 67 50 74 72 00 00 12 00 53 64 62 47 55 49 TagPtr....SdbGUI
44 54 6f 53 74 72 69 6e 67 00 20 00 53 64 62 47 DToString. .SdbG
65 74 54 61 67 44 61 74 61 53 69 7a 65 00 14 00 etTagDataSize...
53 64 62 47 65 74 42 69 6e 61 72 79 54 61 67 44 SdbGetBinaryTagD
61 74 61 00 2f 00 53 64 62 52 65 61 64 51 57 4f ata./.SdbReadQWO
52 44 54 61 67 00 31 00 53 64 62 52 65 61 64 57 RDTag.1.SdbReadW
4f 52 44 54 61 67 00 00 2e 00 53 64 62 52 65 61 ORDTag....SdbRea
64 44 57 4f 52 44 54 61 67 00 3a 00 53 64 62 54 dDWORDTag.:.SdbT
61 67 54 6f 53 74 72 69 6e 67 00 00 21 00 53 64 agToString..!.Sd
62 47 65 74 54 61 67 46 72 6f 6d 54 61 67 49 44 bGetTagFromTagID
00 00 18 00 53 64 62 47 65 74 46 69 72 73 74 43 ....SdbGetFirstC
68 69 6c 64 00 00 05 00 53 64 62 43 6c 6f 73 65 hild....SdbClose
44 61 74 61 62 61 73 65 00 00 2a 00 53 64 62 4f Database..*.SdbO
70 65 6e 44 61 74 61 62 61 73 65 00 16 00 53 64 penDatabase...Sd
62 47 65 74 44 61 74 61 62 61 73 65 56 65 72 73 bGetDatabaseVers
69 6f 6e 00 41 50 50 48 45 4c 50 2e 64 6c 6c 00 ion.APPHELP.dll.
24 05 57 72 69 74 65 43 6f 6e 73 6f 6c 65 57 00 $.WriteConsoleW.
25 05 57 72 69 74 65 46 69 6c 65 00 02 02 47 65 %.WriteFile...Ge
74 4c 61 73 74 45 72 72 6f 72 00 00 25 01 46 69 tLastError..%.Fi
6c 65 54 69 6d 65 54 6f 53 79 73 74 65 6d 54 69 leTimeToSystemTi
6d 65 00 00 19 01 45 78 69 74 50 72 6f 63 65 73 me....ExitProces
73 00 48 03 4c 6f 63 61 6c 46 72 65 65 00 52 00 s.H.LocalFree.R.
43 6c 6f 73 65 48 61 6e 64 6c 65 00 57 01 46 6c CloseHandle.W.Fl
75 73 68 46 69 6c 65 42 75 66 66 65 72 73 00 00 ushFileBuffers..
87 01 47 65 74 43 6f 6d 6d 61 6e 64 4c 69 6e 65 ..GetCommandLine
57 00 64 02 47 65 74 53 74 64 48 61 6e 64 6c 65 W.d.GetStdHandle
00 00 73 04 53 65 74 4c 61 73 74 45 72 72 6f 72 ..s.SetLastError
00 00 44 03 4c 6f 63 61 6c 41 6c 6c 6f 63 00 00 ..D.LocalAlloc..
4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 KERNEL32.dll..5.
77 76 73 70 72 69 6e 74 66 57 00 00 55 53 45 52 wvsprintfW..USER
33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 32.dll..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file APPHELP.TXT
created in
step 4. to recreate the console application
Shim Database Decoder:
CERTUTIL.EXE /DecodeHex /V APPHELP.TXT APPHELP.COM
Input Length = 30464 Output Length = 7168 CertUtil: -decodehex command completed successfully.
WaitForDebugEvent()
ContinueDebugEvent()
DEBUG_EVENT
CREATE_PROCESS_DEBUG_INFO
CREATE_THREAD_DEBUG_INFO
EXIT_PROCESS_DEBUG_INFO
EXIT_THREAD_DEBUG_INFO
LOAD_DLL_DEBUG_INFO
UNLOAD_DLL_DEBUG_INFO
OUTPUT_DEBUG_STRING_INFO
RIP_INFO
EXCEPTION_DEBUG_INFO
EXCEPTION_RECORD
Process Functions for Debugging
Thread Functions for Debugging
Exception Handling Functions for Debugging
Debugger Exception Handling
Debugging with Symbols
DEBUGGER.COM [ ‹debuggee› ] ‹quoted command line›Note: the optional first argument is the absolute or relative path name of the debuggee; when omitted, the first token of the then first and only argument, a properly quoted command line, is used as file name of the debuggee and searched in the
PATH
.
CreateProcess()
Cmd.exe
as debuggee and use a 28 (in words: twenty-eight)
year old bug to let it crash with an unhandled integer overflow
exception raised from the division
~2147483647 ÷ ~0 = −2147483648 ÷ −1 = 2147483648:
VER .\DEBUGGER.COM "%COMSPEC%" "CMD /E:ON /D /C SET /A ~2147483647 % ~0"
Microsoft Windows [Version 6.1.7601] Command line: 'CMD /E:ON /D /C SET /A ~2147483647 % ~0' Application name: 'C:\Windows\system32\cmd.exe' Application type: 0 = 32-bit Windows DbgHelp API: Version = 4.0 Revision = 5 Reserved = 0 Debuggee process loaded from image file 'C:\Windows\SysWOW64\cmd.exe' Debuggee process version is 6.1 Debuggee process 5844 with primary thread 4632 created Process 5844 created with primary thread 4632: Symbol search path: . Process filename = C:\Windows\SysWOW64\cmd.exe Base address = 0x4AAB0000 Start address = 0x4AAB829A TEB address = 0x7EFDD000 DLL loaded in process 5844 by thread 4632: SymRefreshModuleList() returned error 0x8000000D DLL filename = ntdll.dll Base address = 0x770E0000 ntdll DLL unloaded from process 5844 by thread 4632: Base address = 0x76E00000 SymUnloadModule64() returned error 87 DLL unloaded from process 5844 by thread 4632: Base address = 0x76930000 SymUnloadModule64() returned error 87 DLL unloaded from process 5844 by thread 4632: Base address = 0x76E00000 SymUnloadModule64() returned error 87 DLL unloaded from process 5844 by thread 4632: Base address = 0x76D00000 SymUnloadModule64() returned error 87 DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\kernel32.dll Base address = 0x76930000 kernel32 DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\KERNELBASE.dll Base address = 0x75080000 KERNELBASE DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\ADVAPI32.DLL Base address = 0x749B0000 ADVAPI32 DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\msvcrt.dll Base address = 0x74F30000 msvcrt DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\SysWOW64\sechost.dll Base address = 0x754F0000 sechost DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\RPCRT4.dll Base address = 0x76BC0000 RPCRT4 DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\SspiCli.dll Base address = 0x74800000 SspiCli DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\CRYPTBASE.dll Base address = 0x747F0000 CRYPTBASE DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\SysWOW64\WINBRAND.dll Base address = 0x6BDE0000 WINBRAND DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\USER32.dll Base address = 0x75BB0000 USER32!Ordinal2451 DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\GDI32.dll Base address = 0x75320000 GDI32 DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\LPK.dll Base address = 0x75040000 LPK DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\USP10.dll Base address = 0x75270000 USP10 First chance exception in thread 4632 of process 5844: Description = Breakpoint Code = 0x80000003 Flags = 0x00000000 (continuable) Address = 0x771810A6 ntdll!LdrVerifyImageMatchesChecksum+0xF21 Parameters[1] = 0x00000000 Call stack: Address = 0x771810A7 ntdll!LdrVerifyImageMatchesChecksum+0xF22 Address = 0x77160FF3 ntdll!RtlUlonglongByteSwap+0x4283 Address = 0x77129F31 ntdll!RtlSetUnhandledExceptionFilter+0x50 Address = 0x77119799 ntdll!LdrInitializeThunk+0x10 DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\SysWOW64\IMM32.DLL Base address = 0x753B0000 IMM32 DLL loaded in process 5844 by thread 4632: DLL filename = C:\Windows\syswow64\MSCTF.dll Base address = 0x74E60000 MSCTF First chance exception in thread 4632 of process 5844: Description = Breakpoint Code = 0x80000003 Flags = 0x00000000 (continuable) Address = 0x7715D315 ntdll!RtlUlonglongByteSwap+0x5A5 Parameters[1] = 0x00000000 Call stack: Address = 0x7711EA8E ntdll!wcspbrk+0x415 Address = 0x7715D3FF ntdll!RtlUlonglongByteSwap+0x68F Address = 0x75092E6A KERNELBASE!LoadLibraryExW+0x233 Address = 0x769B3B3F kernel32!LocalHandle+0x252 Address = 0x7696DE97 kernel32!CreateProcessAsUserW+0x952 Address = 0x75BCCE74 USER32!User32InitializeImmEntryTable+0xF40 Address = 0x75BC9D92 USER32!PostQuitMessage+0x2C5 Address = 0x75BCB98D USER32!UserClientDllInitialize+0x283 Address = 0x77119280 ntdll!RtlQueryEnvironmentVariable+0x241 Address = 0x7711FEB7 ntdll!LdrResSearchResource+0xA0D Address = 0x7712B474 ntdll!RtlGetNtVersionNumbers+0x9B Address = 0x77129F31 ntdll!RtlSetUnhandledExceptionFilter+0x50 Address = 0x77119799 ntdll!LdrInitializeThunk+0x10 First chance exception in thread 4632 of process 5844: Description = Integer overflow Code = 0xC0000095 Flags = 0x00000000 (continuable) Address = 0x4AAC5176 Call stack: Address = 0x4AABF5D9 Address = 0x4AABEF9D Address = 0x4AABEF33 Address = 0x4AABEED6 Address = 0x4AABEE79 Address = 0x4AABEE1C Address = 0x4AABEDF4 Address = 0x4AABECD1 Address = 0x4AABEC6C Address = 0x4AABEC1E Address = 0x4AABBD5B Address = 0x4AAB4385 Address = 0x4AAB22C0 Address = 0x4AAB7489 Address = 0x4AAB835E Address = 0x7694343D kernel32!BaseThreadInitThunk+0x12 Address = 0x77119812 ntdll!RtlInitializeExceptionChain+0x63 Address = 0x771197E5 ntdll!RtlInitializeExceptionChain+0x36 Last chance exception in thread 4632 of process 5844: Description = Integer overflow Code = 0xC0000095 Flags = 0x00000000 (continuable) Address = 0x4AAC5176 Process 5844 exited with thread 4632: Exit code = 0x000000FF Primary thread 4632 of debuggee process 5844 exited with code 0xC0000095 Primary thread times: Real = 9.2520945 s Kernel = 0.0312002 s User = 0.0000000 s Debuggee process 5844 exited with code 255 Debuggee process times: Real = 9.2520945 s Kernel = 0.0312002 s User = 0.0000000 s
Microsoft Windows [Version 10.0.19044.2486] Command line: 'CMD /E:ON /D /C SET /A ~2147483647 % ~0' Application name: 'C:\Windows\system32\cmd.exe' Application type: 0 = 32-bit Windows DbgHelp API: Version = 4.0 Revision = 5 Reserved = 0 Debuggee process loaded from image file 'C:\Windows\SysWOW64\cmd.exe' Debuggee process version is 10.0 Debuggee process 14052 with primary thread 11164 created Process 14052 created with primary thread 11164: Symbol search path: . Process filename = C:\Windows\SysWOW64\cmd.exe Base address = 0x00220000 Start address = 0x00236B20 TEB address = 0x02A5F000 DLL loaded in process 14052 by thread 11164: SymRefreshModuleList() returned error 0x8000000D ReadProcessMemory() returned error 299 Base address = 0x77AF0000 DLL loaded in process 14052 by thread 11164: DLL filename = C:\Windows\SysWOW64\KERNEL32.DLL Base address = 0x75B80000 KERNEL32 DLL loaded in process 14052 by thread 11164: DLL filename = C:\Windows\SysWOW64\KERNELBASE.dll Base address = 0x77890000 KERNELBASE DLL loaded in process 14052 by thread 11164: DLL filename = C:\Windows\SysWOW64\ADVAPI32.DLL Base address = 0x76AF0000 ADVAPI32 DLL loaded in process 14052 by thread 11164: DLL filename = C:\Windows\SysWOW64\msvcrt.dll Base address = 0x77710000 msvcrt DLL loaded in process 14052 by thread 11164: DLL filename = C:\Windows\SysWOW64\sechost.dll Base address = 0x77480000 sechost DLL loaded in process 14052 by thread 11164: DLL filename = C:\Windows\SysWOW64\RPCRT4.dll Base address = 0x75DC0000 RPCRT4 DLL loaded in process 14052 by thread 11164: DLL filename = C:\Windows\SysWOW64\combase.dll Base address = 0x75F10000 combase DLL loaded in process 14052 by thread 11164: DLL filename = C:\Windows\SysWOW64\ucrtbase.dll Base address = 0x75C70000 ucrtbase Thread 9304 created in process 14052: Start address = 0x77B259C0 ntdll!TpCallbackIndependent+0x140 TEB address = 0x02A62000 Thread 8732 created in process 14052: Start address = 0x77B259C0 ntdll!TpCallbackIndependent+0x140 TEB address = 0x02A65000 First chance exception in thread 11164 of process 14052: Description = Breakpoint Code = 0x80000003 Flags = 0x00000000 (continuable) Address = 0x77BA1EE2 ntdll!LdrInitShimEngineDynamic+0x6E2 Parameters[1] = 0x00000000 Call stack: Address = 0x77BA1EE3 ntdll!LdrInitShimEngineDynamic+0x6E3 Address = 0x77B9C431 ntdll!RtlCaptureStackContext+0x23501 Address = 0x77B56551 ntdll!LdrInitializeThunk+0x121 Address = 0x77B56441 ntdll!LdrInitializeThunk+0x11 First chance exception in thread 11164 of process 14052: Description = Integer overflow Code = 0xC0000095 Flags = 0x00000000 (continuable) Address = 0x0023F6C7 Call stack: Address = 0x00233063 Address = 0x00232E3D Address = 0x00232D7C Address = 0x00232D20 Address = 0x00232CC4 Address = 0x00232C68 Address = 0x00232F8F Address = 0x00232DE4 Address = 0x00233366 Address = 0x0022AB45 Address = 0x0023C9F0 Address = 0x0022AFC9 Address = 0x0022E4F6 Address = 0x00230B09 Address = 0x00236A0A Address = 0x75BA00F9 KERNEL32!BaseThreadInitThunk+0x19 Address = 0x77B57BBE ntdll!RtlGetAppContainerNamedObjectPath+0x11E Address = 0x77B57B8E ntdll!RtlGetAppContainerNamedObjectPath+0xEE Last chance exception in thread 11164 of process 14052: Description = Integer overflow Code = 0xC0000095 Flags = 0x00000000 (continuable) Address = 0x0023F6C7 Thread 9304 exited from process 14052: Exit code = 0xC0000095 Thread 11164 exited from process 14052: Exit code = 0xC0000095 Process 14052 exited with thread 8732: Exit code = 0xC0000095 Primary thread 11164 of debuggee process 14052 exited with code 0xC0000095 Primary thread times: Real = 3.5438404 s Kernel = 0.0156250 s User = 0.0000000 s Debuggee process 14052 exited with code 0xC0000095 Debuggee process times: Real = 3.5712333 s Kernel = 0.0156250 s User = 0.0000000 s
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and DEBUGGER.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file DEBUGGER.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#define wmemcpy __movsw
#if _MSC_VER < 1500 // MSC 9.0 alias 2008
#include <crt\delayimp.h>
#else
#include <delayimp.h>
#endif
#ifdef SYMBOLS
#ifdef UNICODE
#define DBGHELP_TRANSLATE_TCHAR
#endif
#include <dbghelp.h>
#ifdef DBGHELP_TRANSLATE_TCHAR
#undef IMAGEHLP_CBA_EVENT
#undef SymLoadModuleEx
#endif
#endif // SYMBOLS
#define DELPHI_RUNTIME_EXCEPTION 0x0EEDFADEL
#ifndef EXCEPTION_SEGMENT_NOTIFICATION
#define EXCEPTION_SEGMENT_NOTIFICATION 0x40000005L
#endif
#ifndef EXCEPTION_FATAL_APP_EXIT
#define EXCEPTION_FATAL_APP_EXIT 0x40000015L
#endif
#ifndef EXCEPTION_WX86_SINGLE_STEP
#define EXCEPTION_WX86_SINGLE_STEP 0x4000001EL
#endif
#ifndef EXCEPTION_WX86_BREAKPOINT
#define EXCEPTION_WX86_BREAKPOINT 0x4000001FL
#endif
#ifndef DBG_PRINTEXCEPTION_C
#define DBG_PRINTEXCEPTION_C 0x40010006L
#endif
#ifndef DBG_RIPEXCEPTION
#define DBG_RIPEXCEPTION 0x40010007L
#endif
#ifndef DBG_PRINTEXCEPTION_WIDE_C
#define DBG_PRINTEXCEPTION_WIDE_C 0x4001000AL
#endif
#ifndef EXCEPTION_CPP_EXCEPTION
#define EXCEPTION_CPP_EXCEPTION 0x406D1388L
#endif
#ifndef EXCEPTION_INVALID_PARAMETER
#define EXCEPTION_INVALID_PARAMETER 0xC000000DL
#endif
#ifndef EXCEPTION_NO_MEMORY
#define EXCEPTION_NO_MEMORY 0xC0000017L
#endif
#ifndef EXCEPTION_ACCESS_DENIED
#define EXCEPTION_ACCESS_DENIED 0xC0000022L
#endif
#ifndef EXCEPTION_OBJECT_NAME_NOT_FOUND
#define EXCEPTION_OBJECT_NAME_NOT_FOUND 0xC0000034L
#endif
#ifndef EXCEPTION_OBJECT_PATH_NOT_FOUND
#define EXCEPTION_OBJECT_PATH_NOT_FOUND 0xC000003AL
#endif
#ifndef EXCEPTION_PROCEDURE_NOT_FOUND
#define EXCEPTION_PROCEDURE_NOT_FOUND 0xC000007AL
#endif
#ifndef EXCEPTION_INSTRUCTION_MISALIGNMENT
#define EXCEPTION_INSTRUCTION_MISALIGNMENT 0xC00000AAL
#endif
#ifndef EXCEPTION_DLL_NOT_FOUND
#define EXCEPTION_DLL_NOT_FOUND 0xC0000135L
#endif
#ifndef EXCEPTION_ORDINAL_NOT_FOUND
#define EXCEPTION_ORDINAL_NOT_FOUND 0xC0000138L
#endif
#ifndef EXCEPTION_ENTRYPOINT_NOT_FOUND
#define EXCEPTION_ENTRYPOINT_NOT_FOUND 0xC0000139L
#endif
#ifndef EXCEPTION_DLL_INIT_FAILED
#define EXCEPTION_DLL_INIT_FAILED 0xC0000142L
#endif
#ifndef EXCEPTION_UNHANDLED_EXCEPTION
#define EXCEPTION_UNHANDLED_EXCEPTION 0xC0000144L
#endif
#ifndef EXCEPTION_ILLEGAL_FLOAT_CONTEXT
#define EXCEPTION_ILLEGAL_FLOAT_CONTEXT 0xC000014AL
#endif
#ifndef STATUS_POSSIBLE_DEADLOCK
#define STATUS_POSSIBLE_DEADLOCK 0xC0000194L
#endif
#ifndef EXCEPTION_HANDLE_NOT_CLOSABLE
#define EXCEPTION_HANDLE_NOT_CLOSABLE 0xC0000235L
#endif
#ifndef EXCEPTION_FLOAT_MULTIPLE_FAULTS
#define EXCEPTION_FLOAT_MULTIPLE_FAULTS 0xC00002B4L
#endif
#ifndef EXCEPTION_FLOAT_MULTIPLE_TRAPS
#define EXCEPTION_FLOAT_MULTIPLE_TRAPS 0xC00002B5L
#endif
#ifndef EXCEPTION_DATATYPE_MISALIGNMENT_ERROR
#define EXCEPTION_DATATYPE_MISALIGNMENT_ERROR 0xC00002C5L
#endif
#ifndef EXCEPTION_REG_NAT_CONSUMPTION
#define EXCEPTION_REG_NAT_CONSUMPTION 0xC00002C9L
#endif
#ifndef EXCEPTION_INVALID_IMAGE_WIN_32
#define EXCEPTION_INVALID_IMAGE_WIN_32 0xC0000359L
#endif
#ifndef EXCEPTION_INVALID_IMAGE_WIN_64
#define EXCEPTION_INVALID_IMAGE_WIN_64 0xC000035AL
#endif
#ifndef EXCEPTION_HEAP_CORRUPTION
#define EXCEPTION_HEAP_CORRUPTION 0xC0000374L
#endif
#ifndef EXCEPTION_STACK_BUFFER_OVERRUN
#define EXCEPTION_STACK_BUFFER_OVERRUN 0xC0000409L
#endif
#ifndef EXCEPTION_INVALID_CRUNTIME_PARAMETER
#define EXCEPTION_INVALID_CRUNTIME_PARAMETER 0xC0000417L
#endif
#ifndef EXCEPTION_FATAL_USER_CALLBACK_EXCEPTION
#define EXCEPTION_FATAL_USER_CALLBACK_EXCEPTION 0xC000041DL
#endif
#ifndef EXCEPTION_ASSERTION_FAILURE
#define EXCEPTION_ASSERTION_FAILURE 0xC0000420L
#endif
#ifndef EXCEPTION_VERIFIER_STOP
#define EXCEPTION_VERIFIER_STOP 0xC0000421L
#endif
#ifndef EXCEPTION_FAIL_FAST_EXCEPTION
#define EXCEPTION_FAIL_FAST_EXCEPTION 0xC0000602L
#endif
#ifndef EXCEPTION_DISK_QUOTA_EXCEEDED
#define EXCEPTION_DISK_QUOTA_EXCEEDED 0xC0000802L
#endif
#ifndef EXCEPTION_DELAY_LOAD_INVALID_PARAMETER
#define EXCEPTION_DELAY_LOAD_INVALID_PARAMETER 0xC06D0057L
#endif
#ifndef EXCEPTION_DELAY_LOAD_MODULE_NOT_FOUND
#define EXCEPTION_DELAY_LOAD_MODULE_NOT_FOUND 0xC06D007EL
#endif
#ifndef EXCEPTION_DELAY_LOAD_ENTRY_NOT_FOUND
#define EXCEPTION_DELAY_LOAD_ENTRY_NOT_FOUND 0xC06D007FL
#endif
#ifndef EXCEPTION_APPLICATION_HANG
#define EXCEPTION_APPLICATION_HANG 0xCFFFFFFFL
#endif
#ifndef EXCEPTION_CLR_CCR_EXCEPTION
#define EXCEPTION_CLR_CCR_EXCEPTION 0xE0434352L // = 0xE0000000L + 'CCR'
#endif
#ifndef EXCEPTION_CLR_COM_EXCEPTION
#define EXCEPTION_CLR_COM_EXCEPTION 0xE0434F4DL // = 0xE0000000L + 'COM'
#endif
#ifndef EXCEPTION_CLR_SOFT_STACK_OVERFLOW
#define EXCEPTION_CLR_SOFT_STACK_OVERFLOW 0xE053534FL // = 0xE0000000L + 'SSO'
#endif
#ifndef EXCEPTION_SEH_VERIFICATION_EXCEPTION
#define EXCEPTION_SEH_VERIFICATION_EXCEPTION 0xE0564552L // = 0xE0000000L + 'VER'
#endif
#ifndef EXCEPTION_CLR_INTERNAL_ASSERTION
#define EXCEPTION_CLR_INTERNAL_ASSERTION 0xE0584D4EL // = 0xE0000000L + 'XMN'
#endif
#ifndef EXCEPTION_CPP_EH_EXCEPTION
#define EXCEPTION_CPP_EH_EXCEPTION 0xE06D7363L // = 0xE0000000L + 'msc'
#endif
typedef struct _THREADNAME_INFO
{
DWORD dwType; // = 0x00001000UL
LPCSTR szName; // thread name to assign
DWORD dwThreadId; // thread id (~0UL = caller thread)
DWORD dwFlags; // reserved for future use (must be 0UL)
} THREADNAME_INFO;
__forceinline
LPCWSTR WINAPI ExceptionAccess(DWORD_PTR dwAccess)
{
switch (dwAccess)
{
case EXCEPTION_READ_FAULT:
return L"reading";
case EXCEPTION_WRITE_FAULT:
return L"writing";
case EXCEPTION_EXECUTE_FAULT:
return L"executing";
default:
return L"accessing";
}
}
LPCWSTR WINAPI ExceptionName(WCHAR szBuffer[1024], EXCEPTION_RECORD *ExceptionRecord)
{
switch (ExceptionRecord->ExceptionCode)
{
case RPC_S_INVALID_BINDING: // 0x000006A6
case __HRESULT_FROM_WIN32(RPC_S_INVALID_BINDING):
return L"RPC binding handle invalid";
case RPC_S_UNKNOWN_IF: // 0x000006B5L
case __HRESULT_FROM_WIN32(RPC_S_UNKNOWN_IF):
return L"RPC interface unknown";
case RPC_S_SERVER_UNAVAILABLE: // 0x000006BA
case __HRESULT_FROM_WIN32(RPC_S_SERVER_UNAVAILABLE):
return L"RPC server unavailable";
case RPC_S_INVALID_BOUND: // 0x000006C6
case __HRESULT_FROM_WIN32(RPC_S_INVALID_BOUND):
return L"RPC array bounds invalid";
case EPT_S_NOT_REGISTERED: // 0x000006D9
case __HRESULT_FROM_WIN32(EPT_S_NOT_REGISTERED):
return L"RPC endpoint not registered";
case RPC_S_CANNOT_SUPPORT: // 0x000006E4
case __HRESULT_FROM_WIN32(RPC_S_CANNOT_SUPPORT):
return L"RPC operation not supported";
case RPC_X_SS_IN_NULL_CONTEXT: // 0x000006EF
case __HRESULT_FROM_WIN32(RPC_X_SS_IN_NULL_CONTEXT):
return L"RPC null context handle";
case RPC_X_BAD_STUB_DATA: // 0x000006F7
case __HRESULT_FROM_WIN32(RPC_X_BAD_STUB_DATA):
return L"RPC stub received bad data";
case DELPHI_RUNTIME_EXCEPTION: // 0x0EEDFADE
return L"Delphi runtime exception";
case EXCEPTION_SEGMENT_NOTIFICATION: // 0x40000005
return L"Segment notification";
case EXCEPTION_FATAL_APP_EXIT: // 0x40000015
return L"Fatal application exit";
case EXCEPTION_WX86_SINGLE_STEP: // 0x4000001E
return L"WoW64 single-step";
case EXCEPTION_WX86_BREAKPOINT: // 0x4000001F
return L"WoW64 breakpoint";
case DBG_TERMINATE_THREAD: // 0x40010003
return L"Debugger terminate thread";
case DBG_TERMINATE_PROCESS: // 0x40010004
return L"Debugger terminate process";
case DBG_CONTROL_C: // 0x40010005
return L"Ctrl-C";
case DBG_PRINTEXCEPTION_C: // 0x40010006
case DBG_PRINTEXCEPTION_WIDE_C: // 0x4001000A
return L"Debugger print exception";
case DBG_RIPEXCEPTION: // 0x40010007
return L"Debugger RIP exception";
case DBG_CONTROL_BREAK: // 0x40010008
return L"Ctrl-Break";
case DBG_COMMAND_EXCEPTION: // 0x40010009
return L"Debugger command";
case EXCEPTION_CPP_EXCEPTION: // 0x406D1388
return L"Assign thread name";
case EXCEPTION_GUARD_PAGE: // 0x80000001
return L"Guard page access";
case EXCEPTION_DATATYPE_MISALIGNMENT: // 0x80000002
return L"Data misalignment";
case EXCEPTION_BREAKPOINT: // 0x80000003
return L"Breakpoint";
case EXCEPTION_SINGLE_STEP: // 0x80000004
return L"Single-step";
case EXCEPTION_ACCESS_VIOLATION: // 0xC0000005
if (wsprintf(szBuffer,
L"Access violation %ls 0x%p",
ExceptionAccess(ExceptionRecord->ExceptionInformation[0]),
ExceptionRecord->ExceptionInformation[1]) > 0)
return szBuffer;
return L"Access violation";
case EXCEPTION_IN_PAGE_ERROR: // 0xC0000006
if (wsprintf(szBuffer,
#ifdef _WIN64
L"In-page error %ls 0x%p (0x%016I64X)",
#else
L"In-page error %ls 0x%p (0x%08lX)",
#endif
ExceptionAccess(ExceptionRecord->ExceptionInformation[0]),
ExceptionRecord->ExceptionInformation[1],
ExceptionRecord->ExceptionInformation[2]) > 0)
return szBuffer;
return L"In-page error";
case EXCEPTION_INVALID_HANDLE: // 0xC0000008
return L"Invalid handle";
case EXCEPTION_INVALID_PARAMETER: // 0xC000000D
return L"Invalid parameter";
case EXCEPTION_NO_MEMORY: // 0xC0000017
return L"Not enough quota (no virtual memory)";
case EXCEPTION_ILLEGAL_INSTRUCTION: // 0xC000001D
return L"Illegal instruction";
case EXCEPTION_ACCESS_DENIED: // 0xC0000022
return L"Access denied";
case EXCEPTION_NONCONTINUABLE_EXCEPTION: // 0xC0000025
return L"Non-continuable";
case EXCEPTION_INVALID_DISPOSITION: // 0xC0000026
return L"Invalid disposition";
case EXCEPTION_OBJECT_NAME_NOT_FOUND: // 0xC0000034
return L"Object name not found";
case EXCEPTION_OBJECT_PATH_NOT_FOUND: // 0xC000003A
return L"Object path not found";
case EXCEPTION_PROCEDURE_NOT_FOUND: // 0xC000007A
return L"Procedure not found";
case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: // 0xC000008C
return L"Array bounds exceeded";
case EXCEPTION_FLT_DENORMAL_OPERAND: // 0xC000008D
return L"Denormal floating-point operand";
case EXCEPTION_FLT_DIVIDE_BY_ZERO: // 0xC000008E
return L"Floating-point divide-by-zero";
case EXCEPTION_FLT_INEXACT_RESULT: // 0xC000008F
return L"Inexact floating-point result";
case EXCEPTION_FLT_INVALID_OPERATION: // 0xC0000090
return L"Invalid floating-point operation";
case EXCEPTION_FLT_OVERFLOW: // 0xC0000091
return L"Floating-point overflow";
case EXCEPTION_FLT_STACK_CHECK: // 0xC0000092
return L"Floating-point stack check";
case EXCEPTION_FLT_UNDERFLOW: // 0xC0000093
return L"Floating-point underflow";
case EXCEPTION_INT_DIVIDE_BY_ZERO: // 0xC0000094
return L"Integer divide-by-zero";
case EXCEPTION_INT_OVERFLOW: // 0xC0000095
return L"Integer overflow";
case EXCEPTION_PRIV_INSTRUCTION: // 0xC0000096
return L"Privileged instruction";
case EXCEPTION_INSTRUCTION_MISALIGNMENT: // 0xC00000AA
return L"Instruction misalignment";
case EXCEPTION_STACK_OVERFLOW: // 0xC00000FD
return L"Stack overflow";
case EXCEPTION_DLL_NOT_FOUND: // 0xC0000135
return L"DLL not found";
case EXCEPTION_ORDINAL_NOT_FOUND: // 0xC0000138
return L"Ordinal not found";
case EXCEPTION_ENTRYPOINT_NOT_FOUND: // 0xC0000139
return L"Entrypoint not found";
case CONTROL_C_EXIT: // 0xC000013A
return L"Ctrl-C";
case EXCEPTION_DLL_INIT_FAILED: // 0xC0000142
return L"DLL initialisation failed";
case EXCEPTION_UNHANDLED_EXCEPTION: // 0xC0000144
return L"Unhandled exception";
case EXCEPTION_ILLEGAL_FLOAT_CONTEXT: // 0xC000014A
return L"No floating-point hardware";
case EXCEPTION_POSSIBLE_DEADLOCK: // 0xC0000194
return L"Possible deadlock";
case EXCEPTION_HANDLE_NOT_CLOSABLE: // 0xC0000235
return L"Close protected handle";
case EXCEPTION_FLOAT_MULTIPLE_FAULTS: // 0xC00002B4
return L"Multiple floating-point faults";
case EXCEPTION_FLOAT_MULTIPLE_TRAPS: // 0xC00002B5
return L"Multiple floating-point traps";
case EXCEPTION_DATATYPE_MISALIGNMENT_ERROR: // 0xC00002C5
return L"Alignment error";
case EXCEPTION_REG_NAT_CONSUMPTION: // 0xC00002C9
return L"Register NaT consumption fault";
case EXCEPTION_INVALID_IMAGE_WIN_32: // 0xC0000359
return L"32-bit image in 64-bit process";
case EXCEPTION_INVALID_IMAGE_WIN_64: // 0xC000035A
return L"64-bit image in 32-bit process";
case EXCEPTION_HEAP_CORRUPTION: // 0xC0000374
return L"Heap corruption";
case EXCEPTION_STACK_BUFFER_OVERRUN: // 0xC0000409
return L"Buffer overrun on stack (stack corruption)";
case EXCEPTION_INVALID_CRUNTIME_PARAMETER: // 0xC0000417
return L"C runtime exception (invalid parameter)";
case EXCEPTION_FATAL_USER_CALLBACK_EXCEPTION: // 0xC000041D
return L"Unhandled exception during user callback";
case EXCEPTION_ASSERTION_FAILURE: // 0xC0000420
return L"Assertion failed";
case EXCEPTION_VERIFIER_STOP: // 0xC0000421
return L"Application verifier stop";
case EXCEPTION_FAIL_FAST_EXCEPTION: // 0xC0000602
return L"Fail-fast exception";
case EXCEPTION_DISK_QUOTA_EXCEEDED: // 0xC0000802
return L"Disk quota exceeded";
case EXCEPTION_DELAY_LOAD_INVALID_PARAMETER: // 0xC06D0057
return L"Delay-load exception (invalid parameter)";
case EXCEPTION_DELAY_LOAD_MODULE_NOT_FOUND: // 0xC06D007E
#ifdef DELAYLOADINFO
if (wsprintf(szBuffer,
L"Delay-load exception (module %hs not found; 0x%08lX)",
((DelayLoadInfo *) (ExceptionRecord->ExceptionInformation[0]))->szDll,
((DelayLoadInfo *) (ExceptionRecord->ExceptionInformation[0]))->dwLastError) > 0)
return szBuffer;
#else
return L"Delay-load exception (module not found)";
#endif
case EXCEPTION_DELAY_LOAD_ENTRY_NOT_FOUND: // 0xC06D007F
if (((DelayLoadInfo *) (ExceptionRecord->ExceptionInformation[0]))->dlp.fImportByName)
#ifdef DELAYLOADINFO
if (wsprintf(szBuffer,
L"Delay-load exception (entry %hs not found in module %hs; 0x%08lX)",
((DelayLoadInfo *) (ExceptionRecord->ExceptionInformation[0]))->dlp.szProcName,
((DelayLoadInfo *) (ExceptionRecord->ExceptionInformation[0]))->szDll,
((DelayLoadInfo *) (ExceptionRecord->ExceptionInformation[0]))->dwLastError) > 0)
return szBuffer;
else
#endif
return L"Delay-load exception (entry not found)";
else
#ifdef DELAYLOADINFO
if (wsprintf(szBuffer,
L"Delay-load exception (ordinal %lu not found in module %hs; 0x%08lX)",
((DelayLoadInfo *) (ExceptionRecord->ExceptionInformation[0]))->dlp.dwOrdinal,
((DelayLoadInfo *) (ExceptionRecord->ExceptionInformation[0]))->szDll,
((DelayLoadInfo *) (ExceptionRecord->ExceptionInformation[0]))->dwLastError) > 0)
return szBuffer;
else
#endif
return L"Delay-load exception (ordinal not found)";
case EXCEPTION_APPLICATION_HANG: // 0xCFFFFFFF
return L"Application hang";
case EXCEPTION_CLR_CCR_EXCEPTION: // 0xE0434352 = 0xE0000000 + 'CCR'
case EXCEPTION_CLR_COM_EXCEPTION: // 0xE0434F4D = 0xE0000000 + 'COM'
case EXCEPTION_CLR_SOFT_STACK_OVERFLOW: // 0xE053534F = 0xE0000000 + 'SSO'
case EXCEPTION_CLR_INTERNAL_ASSERTION: // 0xE0584D4E = 0xE0000000 + 'XMN'
return L".NET CLR exception";
case EXCEPTION_SEH_VERIFICATION_EXCEPTION: // 0xE0564552 = 0xE0000000 + 'VER'
return L"SEH verification exception";
case EXCEPTION_CPP_EH_EXCEPTION: // 0xE06D7363 = 0xE0000000 + 'msc'
return L"C++ exception";
default:
return L"<not available>";
}
}
#ifdef SYMBOLS
typedef struct _siplus
{
SYMBOL_INFO si;
WCHAR name[MAX_SYM_NAME + sizeof("+0x0123456789ABCDEF")];
} SYMBOL_INFO_PLUS;
LPCWSTR WINAPI NameLookup(HANDLE hProcess,
DWORD64 ullAddress,
IMAGEHLP_MODULE64 *mi,
SYMBOL_INFO_PLUS *siplus)
{
DWORD64 ullDisplacement;
SIZE_T usModule;
LPWSTR lpModule;
if (!SymFromAddr(hProcess,
ullAddress,
&ullDisplacement,
&siplus->si))
{
#if 0
PrintConsole(hConsole,
L"SymFromAddr() returned error %lu\n",
GetLastError());
return L"";
#else
if (!SymGetModuleInfo64(hProcess,
ullAddress,
mi))
{
// PrintConsole(hConsole,
// L"SymGetModuleInfo64() returned error %lu\n",
// GetLastError());
return L"";
}
else
{
mi->ModuleName[sizeof(mi->ModuleName)] = L'\0';
usModule = wcslen(mi->ModuleName);
if (usModule == 0)
return L"";
mi->ModuleName[-1] = L'\t';
ullDisplacement = ullAddress - mi->BaseOfImage;
if (ullDisplacement != 0)
wsprintf(mi->ModuleName + usModule,
L"+0x%I64X",
ullDisplacement);
return mi->ModuleName - 1;
}
}
#endif
else
{
// siplus->si.Name[0] = L'\0';
if (ullDisplacement == 0)
siplus->si.Name[siplus->si.NameLen] = L'\0';
else
wsprintf(siplus->si.Name + siplus->si.NameLen,
L"+0x%I64X",
ullDisplacement);
if (!SymGetModuleInfo64(hProcess,
ullAddress,
mi))
{
// PrintConsole(hConsole,
// L"SymGetModuleInfo64() returned error %lu\n",
// GetLastError());
siplus->si.Name[-1] = L'\t';
return siplus->si.Name - 1;
}
else
{
mi->ModuleName[sizeof(mi->ModuleName)] = L'\0';
if (ullDisplacement == ~0ULL)
{
mi->ModuleName[-1] = L'\t';
return mi->ModuleName - 1;
}
else
{
usModule = wcslen(mi->ModuleName);
lpModule = siplus->si.Name - 1 - usModule;
#if 0
wcscpy(lpModule, mi->ModuleName);
#else
wmemcpy(lpModule, mi->ModuleName, usModule);
#endif
siplus->si.Name[-1] = L'!';
lpModule[-1] = L'\t';
return lpModule - 1;
}
}
}
}
#ifdef VERBOSE
LPCSTR WINAPI CallbackAction(DWORD ActionCode,
LPVOID CallbackData)
{
switch (ActionCode)
{
case CBA_DEFERRED_SYMBOL_LOAD_START:
return "DbgHelp: Deferred symbol load has started\n";
case CBA_DEFERRED_SYMBOL_LOAD_COMPLETE:
return "DbgHelp: Deferred symbol load has completed\n";
case CBA_DEFERRED_SYMBOL_LOAD_FAILURE:
return "DbgHelp: Deferred symbol load has failed\n";
case CBA_SYMBOLS_UNLOADED:
return "DbgHelp: Symbols have been unloaded\n";
case CBA_DUPLICATE_SYMBOL:
return "DbgHelp: Duplicate symbols were found\n";
case CBA_READ_MEMORY:
return "DbgHelp: The loaded image has been read\n";
case CBA_DEFERRED_SYMBOL_LOAD_CANCEL:
return "DbgHelp: Deferred symbol loading has started\n";
case CBA_SET_OPTIONS:
return "DbgHelp: Symbol options have been updated\n";
case CBA_EVENT:
#if 0
return "DbgHelp: Display verbose information\n";
#else
return ((IMAGEHLP_CBA_EVENT *) CallbackData)->desc;
#endif
break;
case CBA_DEFERRED_SYMBOL_LOAD_PARTIAL:
return "DbgHelp: Deferred symbol load has partially completed; "
"the symbol loader is unable to read the image header "
"from either the image file or the specified module\n";
case CBA_DEBUG_INFO:
return (LPCSTR) CallbackData;
#ifdef CBA_SRCSRV_INFO
case CBA_SRCSRV_INFO:
#if 0
return "DbgHelp: Display verbose information for source server\n";
#else
return (LPCSTR) CallbackData;
#endif
#endif // CBA_SRCSRV_INFO
#ifdef CBA_SRCSRV_EVENT
case CBA_SRCSRV_EVENT:
#if 0
return "DbgHelp: Display verbose information for source server\n";
#else
return ((IMAGEHLP_CBA_EVENT *) CallbackData)->desc;
#endif
#endif // CBA_SRCSRV_EVENT
default:
return "DbgHelp: Unknown action code\n";
}
}
#ifdef _WIN64
BOOL WINAPI SymRegisterCallbackProc(HANDLE hProcess,
ULONG ActionCode,
ULONG64 CallbackData,
ULONG64 UserContext)
#else
BOOL WINAPI SymRegisterCallbackProc(HANDLE hProcess,
ULONG ActionCode,
LPVOID CallbackData,
LPVOID UserContext)
#endif
{
LPCSTR lpString = CallbackAction(ActionCode, CallbackData);
DWORD dwString = strlen(lpString);
WriteConsoleA((HANDLE) UserContext, lpString, dwString, &dwString, NULL);
return (ActionCode == CBA_EVENT)
| (ActionCode == CBA_DEBUG_INFO);
}
#endif // VERBOSE
#endif // SYMBOLS
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
#if _WIN32_WINNT < 0x0600
__declspec(dllimport)
DWORD WINAPI GetMappedFileNameA(HANDLE hProcess,
LPVOID lpv,
LPSTR lpFileName,
DWORD dwSize);
__declspec(dllimport)
DWORD WINAPI GetMappedFileNameW(HANDLE hProcess,
LPVOID lpv,
LPWSTR lpFileName,
DWORD dwSize);
#ifndef UNICODE
#define GetMappedFileName GetMappedFileNameA
#else
#define GetMappedFileName GetMappedFileNameW
#endif
LPCWSTR WINAPI GetFileNameFromHandle(HANDLE hConsole,
HANDLE hFile,
WCHAR szFileName[MAX_PATH])
{
LPCWSTR lpFileName = NULL;
DWORD dwFileName;
DWORD dwDeviceName;
WCHAR szDeviceName[MAX_PATH];
WCHAR szDrive[] = L"@:";
DWORD dwDrive;
DWORD dwDrives;
LPVOID lpMapping;
HANDLE hMapping = CreateFileMapping(hFile,
(LPSECURITY_ATTRIBUTES) NULL,
PAGE_READONLY,
0, 1,
(LPCWSTR) NULL);
if (hMapping == NULL)
PrintConsole(hConsole,
L"CreateFileMapping() returned error %lu\n",
GetLastError());
else
{
lpMapping = MapViewOfFile(hMapping,
FILE_MAP_READ,
0, 0,
(SIZE_T) 1);
if (lpMapping == NULL)
PrintConsole(hConsole,
L"MapViewOfFile() returned error %lu\n",
GetLastError());
else
{
dwFileName = GetMappedFileName(GetCurrentProcess(),
lpMapping,
szFileName,
MAX_PATH);
if (dwFileName == 0)
PrintConsole(hConsole,
L"GetMappedFileName() returned error %lu\n",
GetLastError());
else
{
dwDrives = GetLogicalDrives();
if (dwDrives == 0)
PrintConsole(hConsole,
L"GetLogicalDrives() returned error %lu\n",
GetLastError());
else
while (_BitScanForwardd(&dwDrive, dwDrives))
{
dwDrives &= dwDrives - 1;
szDrive[0] = L'A' + dwDrive;
if (QueryDosDevice(szDrive,
szDeviceName,
sizeof(szDeviceName) / sizeof(*szDeviceName)) == 0)
PrintConsole(hConsole,
L"QueryDosDevice() returned error %lu\n",
GetLastError());
else
{
dwDeviceName = wcslen(szDeviceName);
#ifndef _WIN64
if ((dwFileName > dwDeviceName)
&& (szFileName[dwDeviceName] == L'\\')
#if 0
&& (wmemcmp(szFileName, szDeviceName, dwDeviceName) == 0))
else
&& (memcmp(szFileName, szDeviceName, dwDeviceName * sizeof(*szDeviceName)) == 0))
#endif
{
szFileName[--dwDeviceName] = L':';
szFileName[--dwDeviceName] = L'A' + dwDrive;
lpFileName = szFileName + dwDeviceName;
}
#else // _WIN64
if ((dwFileName > dwDeviceName)
&& (szFileName[dwDeviceName] == L'\\'))
{
szFileName[dwDeviceName] = L'\0';
if (wcscmp(szFileName, szDeviceName) == 0)
{
szFileName[dwDeviceName--] = L'\\';
szFileName[dwDeviceName--] = L':';
szFileName[dwDeviceName] = L'A' + dwDrive;
lpFileName = szFileName + dwDeviceName;
}
else
szFileName[dwDeviceName] = L'\\';
}
#endif // _WIN64
}
}
}
if (!UnmapViewOfFile(lpMapping))
PrintConsole(hConsole,
L"UnmapViewOfFile() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hMapping))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
return lpFileName;
}
#endif // _WIN32_WINNT
const LPCWSTR szBinaryType[7] = {L"32-bit Windows",
L"MS-DOS",
L"16-bit Windows",
L".PIF for MS-DOS",
L"POSIX",
L"16-bit OS/2",
L"64-bit Windows"};
#ifdef VERBOSE
const LPCWSTR szDirectories[3] = {L"Home ", // hdBase
L"Symbols", // hdSym
L"Sources"}; // hdSrc
const LPCWSTR szDayOfWeek[7] = {L"Sunday",
L"Monday",
L"Tuesday",
L"Wednesday",
L"Thursday",
L"Friday",
L"Saturday"};
#endif
const LPCWSTR szTimes[4] = {NULL,
L"Real ",
L"Kernel",
L"User "};
const STARTUPINFO si = {sizeof(si)};
#ifdef _M_IX86
__forceinline
struct
{
DWORD dwQuotient, dwRemainder;
} WINAPI SplitFileTime(DWORD dwLow, DWORD dwHigh)
{
__asm // returns quotient in eax and remainder in edx
{
mov eax, dwLow
mov edx, dwHigh
mov ecx, 10000000
div ecx
}
}
#endif
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
#ifdef _WIN64
BOOL bWow64 = FALSE;
WOW64_CONTEXT wow64_context;
#endif
CONTEXT context;
PEXCEPTION_RECORD lpExceptionRecord;
PROCESS_INFORMATION pi;
ULARGE_INTEGER uli[4];
DEBUG_EVENT de;
#ifdef SYMBOLS
LPAPI_VERSION lpApiVersion = ImagehlpApiVersion();
#ifdef VERBOSE // DBGHELP >= 6.1
DWORD dwDirectory;
LPWSTR lpDirectory;
WCHAR szDirectory[MAX_PATH];
SYSTEMTIME st;
DWORD64 ull;
#endif // VERBOSE
DWORD64 ullBaseOfModule;
IMAGEHLP_MODULE64 mi;
SYMBOL_INFO_PLUS siplus;
STACKFRAME64 sf;
#endif // SYMBOLS
LPWSTR *lpArguments;
INT nArguments;
WCHAR szBuffer[1024];
WCHAR szImageName[MAX_PATH];
DWORD dwImageName = MAX_PATH;
LPBYTE lpImageName;
LPBYTE lpString;
DWORD dwString;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwBinaryType;
DWORD dwVersion;
DWORD dwParameter;
DWORD dwThread;
DWORD dwProcess;
HANDLE hProcess;
HANDLE hThread;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if ((nArguments < 2)
|| (*lpArguments[1] == L'\0')
|| (nArguments > 3))
PrintConsole(hConsole,
L"Bad arguments: either a (properly quoted) command line\n"
L" or the (absolute or relative) path name of an application\n"
L" followed by a (properly quoted) command line must be given!\n");
else
{
PrintConsole(hConsole,
L"Command line: \'%ls\'\n"
L"Application name: \'%ls\'\n",
lpArguments[nArguments - 1],
lpArguments[4 - nArguments]);
if (nArguments == 3)
if (!GetBinaryType(lpArguments[1], &dwBinaryType))
PrintConsole(hConsole,
L"GetBinaryType() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"Application type: %lu = %ls\n",
dwBinaryType, szBinaryType[dwBinaryType]);
#ifdef SYMBOLS
PrintConsole(hConsole,
L"\n"
L"DbgHelp API:\n"
L"\tVersion = %hu.%hu\n"
L"\tRevision = %hu\n"
L"\tReserved = %hu\n",
lpApiVersion->MajorVersion, lpApiVersion->MinorVersion,
lpApiVersion->Revision,
lpApiVersion->Reserved);
#ifdef VERBOSE // DBGHELP >= 6.1
PrintConsole(hConsole,
L"DbgHelp Directories:\n");
for (dwDirectory = 0; dwDirectory < sizeof(szDirectories) / sizeof(*szDirectories); dwDirectory++)
{
lpDirectory = SymGetHomeDirectory(dwDirectory,
szDirectory,
sizeof(szDirectory));
if (lpDirectory == NULL)
PrintConsole(hConsole,
L"SymGetHomeDirectory() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"\t%ls = %ls\n",
szDirectories[dwDirectory], lpDirectory);
}
#endif // VERBOSE
SymSetOptions(SymGetOptions() | SYMOPT_DEBUG | SYMOPT_INCLUDE_32BIT_MODULES);
#endif // SYMBOLS
if (!CreateProcess(lpArguments[4 - nArguments],
lpArguments[nArguments - 1],
(SECURITY_ATTRIBUTES *) NULL,
(SECURITY_ATTRIBUTES *) NULL,
FALSE,
CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT | DEBUG_ONLY_THIS_PROCESS | NORMAL_PRIORITY_CLASS,
#if 1
NULL, // current environment block
#elif 1
L"", // empty environment block
#else
L"__COMPAT_LAYER=RunAsInvoker\0_NO_DEBUG_HEAP=1\0DBGENG_NO_DEBUG_PRIVILEGE=1\0TMP=NUL:\0",
#endif
(LPCWSTR) NULL,
&si,
&pi))
PrintConsole(hConsole,
L"CreateProcess() returned error %lu\n",
dwError = GetLastError());
else
{
dwError = ERROR_SUCCESS;
#if _WIN32_WINNT < 0x0600
dwImageName = GetModuleFileNameEx(pi.hProcess,
(HMODULE) NULL,
szImageName,
sizeof(szImageName) / sizeof(*szImageName));
if (dwImageName == 0)
PrintConsole(hConsole,
L"GetModuleFileNameEx() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"Debuggee process loaded from image file \'%ls\'\n",
szImageName);
#else // _WIN32_WINNT
if (!QueryFullProcessImageName(pi.hProcess,
0,
szImageName,
&dwImageName))
PrintConsole(hConsole,
L"QueryFullProcessImageName() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"Debuggee process loaded from image file \'%ls\'\n",
szImageName);
#endif // _WIN32_WINNT
dwVersion = GetProcessVersion(pi.dwProcessId);
if (dwVersion == 0)
PrintConsole(hConsole,
L"GetProcessVersion() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"Debuggee process version is %hu.%hu\n",
HIWORD(dwVersion), LOWORD(dwVersion));
PrintConsole(hConsole,
L"\n"
L"Debuggee process %lu with primary thread %lu created\n",
pi.dwProcessId, pi.dwThreadId);
if (!DebugSetProcessKillOnExit(FALSE))
PrintConsole(hConsole,
L"DebugSetProcessKillOnExit() returned error %lu\n",
dwError = GetLastError());
#ifdef SYMBOLS
mi.SizeOfStruct = sizeof(mi);
siplus.si.SizeOfStruct = sizeof(siplus.si);
siplus.si.MaxNameLen = MAX_SYM_NAME;
// siplus.si.Name[0] = L'\0';
#endif
context.ContextFlags = CONTEXT_CONTROL;
#ifdef _WIN64
wow64_context.ContextFlags = WOW64_CONTEXT_CONTROL;
#endif
do
{
if (!WaitForDebugEvent(&de, INFINITE))
{
PrintConsole(hConsole,
L"WaitForDebugEvent() returned error %lu\n",
dwError = GetLastError());
break;
}
switch (de.dwDebugEventCode)
{
case CREATE_PROCESS_DEBUG_EVENT:
PrintConsole(hConsole,
L"\n"
L"Process %lu created with primary thread %lu:\n",
de.dwProcessId, de.dwThreadId);
hProcess = de.u.CreateProcessInfo.hProcess;
if (de.u.CreateProcessInfo.hProcess != NULL)
{
#ifdef _WIN64
if (!IsWow64Process(de.u.CreateProcessInfo.hProcess, &bWow64))
PrintConsole(hConsole,
L"IsWow64Process() returned error %lu\n",
dwError = GetLastError());
#endif
#ifdef SYMBOLS
// NOTE: on Windows 7, SymInitialize() abuses HRESULT as error code!
if (!SymInitialize(de.u.CreateProcessInfo.hProcess,
(LPCWSTR) NULL, // evaluate _NT_SYMBOL_PATH environment variable
FALSE))
{
dwError = GetLastError();
if (dwError > 65535)
PrintConsole(hConsole,
L"SymInitialize() returned error 0x%08lX\n",
dwError);
else
PrintConsole(hConsole,
L"SymInitialize() returned error %lu\n",
dwError);
}
else
{
#ifdef VERBOSE
if (!SymRegisterCallback(de.u.CreateProcessInfo.hProcess,
SymRegisterCallbackProc,
hConsole))
PrintConsole(hConsole,
L"SymRegisterCallback() returned error %lu\n",
dwError = GetLastError());
#endif
#if 0
if (!SymSetSearchPath(de.u.CreateProcessInfo.hProcess,
L".;SRV**https://msdl.microsoft.com/download/symbols"))
PrintConsole(hConsole,
L"SymSetSearchPath() returned error %lu\n",
dwError = GetLastError());
#else
if (!SymGetSearchPath(de.u.CreateProcessInfo.hProcess,
szBuffer,
sizeof(szBuffer) / sizeof(*szBuffer)))
PrintConsole(hConsole,
L"SymGetSearchPath() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"Symbol search path: %ls\n",
szBuffer);
#endif
}
ullBaseOfModule = 0;
#endif // SYMBOLS
if (de.u.CreateProcessInfo.lpImageName != NULL)
if (!ReadProcessMemory(de.u.CreateProcessInfo.hProcess,
de.u.CreateProcessInfo.lpImageName,
&lpImageName,
sizeof(lpImageName),
(SIZE_T *) NULL))
PrintConsole(hConsole,
L"ReadProcessMemory() returned error %lu\n",
dwError = GetLastError());
else
if (lpImageName != NULL)
if (!ReadProcessMemory(de.u.CreateProcessInfo.hProcess,
lpImageName,
szImageName,
sizeof(szImageName),
(SIZE_T *) NULL))
{
dwError = GetLastError();
if (dwError != ERROR_PARTIAL_COPY)
PrintConsole(hConsole,
L"ReadProcessMemory() returned error %lu\n",
dwError);
else
goto FILENAME;
}
else
FILENAME:
if (de.u.CreateProcessInfo.fUnicode != 0)
{
PrintConsole(hConsole,
L"\tProcess filename = %ls\n",
szImageName);
#ifdef SYMBOLS // DBGHELP >= 6.0
ullBaseOfModule = SymLoadModuleExW(de.u.CreateProcessInfo.hProcess,
de.u.CreateProcessInfo.hFile,
szImageName,
(LPCWSTR) NULL,
de.u.CreateProcessInfo.lpBaseOfImage,
0,
(MODLOAD_DATA *) NULL,
0);
if (ullBaseOfModule == 0)
{
dwError = GetLastError();
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"SymLoadModuleExW() returned error %lu\n",
dwError);
}
#endif // SYMBOLS
}
else
{
PrintConsole(hConsole,
L"\tProcess filename = %hs\n",
szImageName);
#ifdef SYMBOLS
ullBaseOfModule = SymLoadModuleEx(de.u.CreateProcessInfo.hProcess,
de.u.CreateProcessInfo.hFile,
(LPCSTR) szImageName,
(LPCSTR) NULL,
de.u.CreateProcessInfo.lpBaseOfImage,
0,
(MODLOAD_DATA *) NULL,
0);
if (ullBaseOfModule == 0)
{
dwError = GetLastError();
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"SymLoadModuleEx() returned error %lu\n",
dwError);
}
#endif // SYMBOLS
}
else
goto NOFILENAME;
else
NOFILENAME:
{
#if _WIN32_WINNT < 0x0600
dwImageName = GetModuleFileNameEx(de.u.CreateProcessInfo.hProcess,
#if 0
de.u.CreateProcessInfo.lpBaseOfImage,
#else
(HMODULE) NULL,
#endif
szImageName,
sizeof(szImageName) / sizeof(*szImageName));
if (dwImageName == 0)
{
PrintConsole(hConsole,
L"GetModuleFileNameEx() returned error %lu\n",
dwError = GetLastError());
lpImageName = GetFileNameFromHandle(hConsole,
de.u.CreateProcessInfo.hFile,
szImageName);
if (lpImageName != NULL)
PrintConsole(hConsole,
L"\tProcess filename = %ls\n",
lpImageName);
}
else
PrintConsole(hConsole,
L"\tProcess filename = %ls\n",
szImageName);
#else // _WIN32_WINNT
dwImageName = GetFinalPathNameByHandle(de.u.CreateProcessInfo.hFile,
szImageName,
sizeof(szImageName) / sizeof(*szImageName),
FILE_NAME_NORMALIZED | VOLUME_NAME_DOS);
if (dwImageName == 0)
PrintConsole(hConsole,
L"GetFinalPathNameByHandle() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"\tProcess filename = %ls\n",
szImageName + 4);
#endif // _WIN32_WINNT
#ifdef SYMBOLS
ullBaseOfModule = SymLoadModuleEx(de.u.CreateProcessInfo.hProcess,
de.u.CreateProcessInfo.hFile,
(LPCSTR) NULL,
(LPCSTR) NULL,
de.u.CreateProcessInfo.lpBaseOfImage,
0,
(MODLOAD_DATA *) NULL,
0);
if (ullBaseOfModule == 0)
{
dwError = GetLastError();
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"SymLoadModuleEx() returned error %lu\n",
dwError);
}
#endif // SYMBOLS
}
#ifdef SYMBOLS
if (ullBaseOfModule != 0)
if (!SymGetModuleInfo64(de.u.CreateProcessInfo.hProcess,
ullBaseOfModule,
&mi))
PrintConsole(hConsole,
L"SymGetModuleInfo64() returned error %lu\n",
dwError = GetLastError());
#ifdef VERBOSE
else
{
ull = __emulu(mi.TimeDateStamp, 10000000) // seconds since 1970-01-01 to
+ 116444736000000000; // 100 nano-seconds since 1601-01-01
if (!FileTimeToSystemTime((LPFILETIME) &ull, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
dwError = GetLastError());
PrintConsole(hConsole,
L"\tModule date = 0x%08lX (%ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu UTC)\n"
L"\tModule size = 0x%08lX\n"
L"\tModule name = %.32ls\n"
L"\tImage name = %.256ls\n"
L"\tImage filename = %.256ls\n"
L"\tPDB filename = %.256ls\n"
L"\tSymbol count = %lu\n",
mi.TimeDateStamp,
szDayOfWeek[st.wDayOfWeek],
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond,
mi.ImageSize,
mi.ModuleName,
mi.ImageName,
mi.LoadedImageName,
mi.LoadedPdbName,
mi.NumSyms);
}
#endif // VERBOSE
#endif // SYMBOLS
}
#ifdef VERBOSE
PrintConsole(hConsole,
L"\tFile handle = 0x%p\n"
L"\tProcess handle = 0x%p\n"
L"\tThread handle = 0x%p\n",
de.u.CreateProcessInfo.hFile,
de.u.CreateProcessInfo.hProcess,
de.u.CreateProcessInfo.hThread);
#endif
PrintConsole(hConsole,
L"\tBase address = 0x%p\n"
#ifndef SYMBOLS
L"\tStart address = 0x%p\n"
#else
L"\tStart address = 0x%p%ls\n"
#endif
L"\tTEB address = 0x%p\n",
de.u.CreateProcessInfo.lpBaseOfImage,
#ifndef SYMBOLS
de.u.CreateProcessInfo.lpStartAddress,
#else
de.u.CreateProcessInfo.lpStartAddress,
NameLookup(de.u.CreateProcessInfo.hProcess, de.u.CreateProcessInfo.lpStartAddress, &mi, &siplus),
#endif
de.u.CreateProcessInfo.lpThreadLocalBase);
if (de.u.CreateProcessInfo.hFile != INVALID_HANDLE_VALUE)
if (!CloseHandle(de.u.CreateProcessInfo.hFile))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
dwError = GetLastError());
break;
case CREATE_THREAD_DEBUG_EVENT:
PrintConsole(hConsole,
L"\n"
L"Thread %lu created in process %lu:\n"
#ifdef VERBOSE
L"\tThread handle = 0x%p\n"
#endif
#ifndef SYMBOLS
L"\tStart address = 0x%p\n"
#else
L"\tStart address = 0x%p%ls\n"
#endif
L"\tTEB address = 0x%p\n",
de.dwThreadId, de.dwProcessId,
#ifdef VERBOSE
de.u.CreateThread.hThread,
#endif
#ifndef SYMBOLS
de.u.CreateThread.lpStartAddress,
#else
de.u.CreateThread.lpStartAddress,
NameLookup(hProcess, de.u.CreateThread.lpStartAddress, &mi, &siplus),
#endif
de.u.CreateThread.lpThreadLocalBase);
break;
case EXIT_PROCESS_DEBUG_EVENT:
PrintConsole(hConsole,
L"\n"
L"Process %lu exited with thread %lu:\n"
L"\tExit code = 0x%08lX\n",
de.dwProcessId, de.dwThreadId,
de.u.ExitProcess.dwExitCode);
#ifdef SYMBOLS
if (!SymCleanup(hProcess))
PrintConsole(hConsole,
L"SymCleanup() returned error %lu\n",
dwError = GetLastError());
#endif // SYMBOLS
hProcess = NULL;
break;
case EXIT_THREAD_DEBUG_EVENT:
PrintConsole(hConsole,
L"\n"
L"Thread %lu exited from process %lu:\n"
L"\tExit code = 0x%08lX\n",
de.dwThreadId, de.dwProcessId,
de.u.ExitThread.dwExitCode);
break;
case LOAD_DLL_DEBUG_EVENT:
PrintConsole(hConsole,
L"\n"
L"DLL loaded in process %lu by thread %lu:\n",
de.dwProcessId, de.dwThreadId);
#ifdef SYMBOLS // DBGHELP >= 6.5
if (!SymRefreshModuleList(hProcess))
{
dwError = GetLastError();
if (dwError > 65535)
PrintConsole(hConsole,
L"SymRefreshModuleList() returned error 0x%08lX\n",
dwError);
else
PrintConsole(hConsole,
L"SymRefreshModuleList() returned error %lu\n",
dwError);
}
ullBaseOfModule = 0;
#endif // SYMBOLS
if (de.u.LoadDll.lpImageName != NULL)
if (!ReadProcessMemory(hProcess,
de.u.LoadDll.lpImageName,
&lpImageName,
sizeof(lpImageName),
(SIZE_T *) NULL))
PrintConsole(hConsole,
L"ReadProcessMemory() returned error %lu\n",
dwError = GetLastError());
else
if (lpImageName != NULL)
{
if (!ReadProcessMemory(hProcess,
lpImageName,
szImageName,
sizeof(szImageName),
(SIZE_T *) NULL))
{
dwError = GetLastError();
if (dwError != ERROR_PARTIAL_COPY)
PrintConsole(hConsole,
L"ReadProcessMemory() returned error %lu\n",
dwError);
else
goto DLLNAME;
}
else
DLLNAME:
if (de.u.LoadDll.fUnicode != 0)
{
PrintConsole(hConsole,
L"\tDLL filename = %ls\n",
szImageName);
#ifdef SYMBOLS // DBGHELP >= 6.0
ullBaseOfModule = SymLoadModuleExW(hProcess,
de.u.LoadDll.hFile,
szImageName,
(LPCWSTR) NULL,
de.u.LoadDll.lpBaseOfDll,
0,
(MODLOAD_DATA *) NULL,
0);
if (ullBaseOfModule == 0)
{
dwError = GetLastError();
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"SymLoadModuleExW() returned error %lu\n",
dwError);
}
#endif // SYMBOLS
}
else
{
PrintConsole(hConsole,
L"\tDLL filename = %hs\n",
szImageName);
#ifdef SYMBOLS
ullBaseOfModule = SymLoadModuleEx(hProcess,
de.u.LoadDll.hFile,
(LPCSTR) szImageName,
(LPCSTR) NULL,
de.u.LoadDll.lpBaseOfDll,
0,
(MODLOAD_DATA *) NULL,
0);
if (ullBaseOfModule == 0)
{
dwError = GetLastError();
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"SymLoadModuleEx() returned error %lu\n",
dwError);
}
#endif // SYMBOLS
}
}
else
goto NODLLNAME;
else
NODLLNAME:
{
#if _WIN32_WINNT < 0x0600
dwImageName = GetModuleFileNameEx(hProcess,
de.u.LoadDll.lpBaseOfDll,
szImageName,
sizeof(szImageName) / sizeof(*szImageName));
if (dwImageName == 0)
{
PrintConsole(hConsole,
L"GetModuleFileNameEx() returned error %lu\n",
dwError = GetLastError());
lpImageName = GetFileNameFromHandle(hConsole,
de.u.LoadDll.hFile,
szImageName);
if (lpImageName != NULL)
PrintConsole(hConsole,
L"\tDLL filename = %ls\n",
lpImageName);
}
else
PrintConsole(hConsole,
L"\tDLL filename = %ls\n",
szImageName);
#else // _WIN32_WINNT
dwImageName = GetFinalPathNameByHandle(de.u.LoadDll.hFile,
szImageName,
sizeof(szImageName) / sizeof(*szImageName),
FILE_NAME_NORMALIZED | VOLUME_NAME_DOS);
if (dwImageName == 0)
PrintConsole(hConsole,
L"GetFinalPathNameByHandle() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"\tDLL filename = %ls\n",
szImageName + 4);
#endif // _WIN32_WINNT
#ifdef SYMBOLS
ullBaseOfModule = SymLoadModuleEx(hProcess,
de.u.LoadDll.hFile,
(LPCSTR) NULL,
(LPCSTR) NULL,
de.u.LoadDll.lpBaseOfDll,
0,
(MODLOAD_DATA *) NULL,
0);
if (ullBaseOfModule == 0)
{
dwError = GetLastError();
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"SymLoadModuleEx() returned error %lu\n",
dwError);
}
#endif // SYMBOLS
}
#ifdef SYMBOLS
if (ullBaseOfModule != 0)
if (!SymGetModuleInfo64(hProcess,
ullBaseOfModule,
&mi))
PrintConsole(hConsole,
L"SymGetModuleInfo64() returned error %lu\n",
dwError = GetLastError());
#ifdef VERBOSE
else
{
ull = __emulu(mi.TimeDateStamp, 10000000) // seconds since 1970-01-01 to
+ 116444736000000000; // 100 nano-seconds since 1601-01-01
if (!FileTimeToSystemTime((LPFILETIME) &ull, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
dwError = GetLastError());
PrintConsole(hConsole,
L"\tModule date = 0x%08lX (%ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu UTC)\n"
L"\tModule size = 0x%08lX\n"
L"\tModule name = %.32ls\n"
L"\tImage name = %.256ls\n"
L"\tImage filename = %.256ls\n"
L"\tPDB filename = %.256ls\n"
L"\tSymbol count = %lu\n",
mi.TimeDateStamp,
szDayOfWeek[st.wDayOfWeek],
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond,
mi.ImageSize,
mi.ModuleName,
mi.ImageName,
mi.LoadedImageName,
mi.LoadedPdbName,
mi.NumSyms);
}
#endif // VERBOSE
#endif // SYMBOLS
PrintConsole(hConsole,
#ifdef VERBOSE
L"\tFile handle = 0x%p\n"
#endif
#ifndef SYMBOLS
L"\tBase address = 0x%p\n",
#ifdef VERBOSE
de.u.LoadDll.hFile,
#endif
de.u.LoadDll.lpBaseOfDll);
#else // SYMBOLS
L"\tBase address = 0x%p%ls\n",
#ifdef VERBOSE
de.u.LoadDll.hFile,
#endif
de.u.LoadDll.lpBaseOfDll,
NameLookup(hProcess, de.u.LoadDll.lpBaseOfDll, &mi, &siplus));
#endif // SYMBOLS
if (de.u.LoadDll.hFile != INVALID_HANDLE_VALUE)
if (!CloseHandle(de.u.LoadDll.hFile))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
dwError = GetLastError());
break;
case UNLOAD_DLL_DEBUG_EVENT:
PrintConsole(hConsole,
L"\n"
L"DLL unloaded from process %lu by thread %lu:\n"
#ifndef SYMBOLS
L"\tBase address = 0x%p\n",
#else
L"\tBase address = 0x%p%ls\n",
#endif
de.dwProcessId, de.dwThreadId,
#ifndef SYMBOLS
de.u.UnloadDll.lpBaseOfDll);
#else
de.u.UnloadDll.lpBaseOfDll,
NameLookup(hProcess, de.u.UnloadDll.lpBaseOfDll, &mi, &siplus));
if (!SymUnloadModule64(hProcess,
de.u.UnloadDll.lpBaseOfDll))
PrintConsole(hConsole,
L"SymUnloadModule64() returned error %lu\n",
dwError = GetLastError());
#endif // SYMBOLS
break;
case OUTPUT_DEBUG_STRING_EVENT:
PrintConsole(hConsole,
L"\n"
L"Output debug string in thread %lu of process %lu:\n"
L"\tString length = %hu\n"
#ifndef SYMBOLS
L"\tString address = 0x%p\n",
#else
L"\tString address = 0x%p%ls\n",
#endif
de.dwThreadId, de.dwProcessId,
de.u.DebugString.nDebugStringLength - 1,
#ifndef SYMBOLS
de.u.DebugString.lpDebugStringData);
#else
de.u.DebugString.lpDebugStringData,
NameLookup(hProcess, de.u.DebugString.lpDebugStringData, &mi, &siplus));
#endif
dwString = de.u.DebugString.nDebugStringLength;
#if 0 // NOTE: debug string is always ANSI!
if (de.u.CreateProcessInfo.fUnicode != 0)
dwString *= sizeof(L'\0');
#endif
lpString = LocalAlloc(LPTR, dwString);
if (lpString == NULL)
PrintConsole(hConsole,
L"LocalAlloc() returned error %lu\n",
dwError = GetLastError());
else
{
if (!ReadProcessMemory(hProcess,
de.u.DebugString.lpDebugStringData,
lpString,
dwString,
(SIZE_T *) NULL))
PrintConsole(hConsole,
L"ReadProcessMemory() returned error %lu\n",
dwError = GetLastError());
else
#if 0 // NOTE: debug string is always ANSI!
if (de.u.CreateProcessInfo.fUnicode != 0)
{
dwString = wcslen((LPCWSTR) lpString);
while ((dwString-- > 0)
&& ((lpString[dwString] == L' ')
|| (lpString[dwString] == L'\a')
|| (lpString[dwString] == L'\b')
|| (lpString[dwString] == L'\f')
|| (lpString[dwString] == L'\n')
|| (lpString[dwString] == L'\r')
|| (lpString[dwString] == L'\t')
|| (lpString[dwString] == L'\v')))
/* lpString[dwString] = L'\0' */;
lpString[++dwString] = L'\0';
PrintConsole(hConsole,
L"\tString value = %ls\n",
lpString);
}
else
#endif
{
dwString = strlen((LPCSTR) lpString);
while ((dwString-- > 0)
&& ((lpString[dwString] == ' ')
|| (lpString[dwString] == '\a')
|| (lpString[dwString] == '\b')
|| (lpString[dwString] == '\f')
|| (lpString[dwString] == '\n')
|| (lpString[dwString] == '\r')
|| (lpString[dwString] == '\t')
|| (lpString[dwString] == '\v')))
/* lpString[dwString] = '\0' */;
lpString[++dwString] = '\0';
PrintConsole(hConsole,
L"\tString value = %hs\n",
lpString);
}
if (LocalFree(lpString) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
dwError = GetLastError());
}
break;
case RIP_EVENT:
PrintConsole(hConsole,
L"\n"
L"RIP in thread %lu of process %lu:\n"
L"\tError = %lu\n"
L"\tType = %lu\n",
de.dwThreadId, de.dwProcessId,
de.u.RipInfo.dwError,
de.u.RipInfo.dwType);
break;
case EXCEPTION_DEBUG_EVENT:
PrintConsole(hConsole,
L"\n"
L"%ls chance exception in thread %lu of process %lu:\n"
L"\tDescription = %ls\n"
L"\tCode = 0x%08lX\n"
L"\tFlags = 0x%08lX (%lscontinuable)\n"
#ifndef SYMBOLS
L"\tAddress = 0x%p\n",
#else
L"\tAddress = 0x%p%ls\n",
#endif
de.u.Exception.dwFirstChance != 0 ? L"First" : L"Last",
de.dwThreadId, de.dwProcessId,
ExceptionName(szBuffer, &de.u.Exception.ExceptionRecord),
de.u.Exception.ExceptionRecord.ExceptionCode,
de.u.Exception.ExceptionRecord.ExceptionFlags,
de.u.Exception.ExceptionRecord.ExceptionFlags != 0 ? L"non-" : L"",
#ifndef SYMBOLS
de.u.Exception.ExceptionRecord.ExceptionAddress);
#else
de.u.Exception.ExceptionRecord.ExceptionAddress,
NameLookup(hProcess, de.u.Exception.ExceptionRecord.ExceptionAddress, &mi, &siplus));
#endif
if (de.u.Exception.dwFirstChance == 0)
break;
if (de.u.Exception.ExceptionRecord.NumberParameters > 0)
{
PrintConsole(hConsole,
L"\tParameters[%lu] %lc",
de.u.Exception.ExceptionRecord.NumberParameters,
de.u.Exception.ExceptionRecord.NumberParameters > 10 ? L'\0' : L' ');
for (dwParameter = 0; dwParameter < de.u.Exception.ExceptionRecord.NumberParameters; dwParameter++)
PrintConsole(hConsole,
dwParameter == 0 ? L"= 0x%p" : L", 0x%p",
de.u.Exception.ExceptionRecord.ExceptionInformation[dwParameter]);
PrintConsole(hConsole, L"\n");
}
for (lpExceptionRecord = de.u.Exception.ExceptionRecord.ExceptionRecord;
lpExceptionRecord != NULL;
lpExceptionRecord = lpExceptionRecord->ExceptionRecord)
{
PrintConsole(hConsole,
L"\n"
L"\tChained exception:\n"
L"\t\tDescription = %ls\n"
L"\t\tCode = 0x%08lX\n"
L"\t\tFlags = 0x%08lX (%lscontinuable)\n"
#ifndef SYMBOLS
L"\t\tAddress = 0x%p\n",
#else
L"\t\tAddress = 0x%p%ls\n",
#endif
ExceptionName(szBuffer, lpExceptionRecord),
lpExceptionRecord->ExceptionCode,
lpExceptionRecord->ExceptionFlags,
lpExceptionRecord->ExceptionFlags != 0 ? L"non-" : L"",
#ifndef SYMBOLS
lpExceptionRecord->ExceptionAddress);
#else
lpExceptionRecord->ExceptionAddress,
NameLookup(hProcess, lpExceptionRecord->ExceptionAddress, &mi, &siplus));
#endif
if (lpExceptionRecord->NumberParameters > 0)
{
PrintConsole(hConsole,
L"\t\tParameters[%lu] %lc",
lpExceptionRecord->NumberParameters,
lpExceptionRecord->NumberParameters > 10 ? L'\0' : L' ');
for (dwParameter = 0; dwParameter < lpExceptionRecord->NumberParameters; dwParameter++)
PrintConsole(hConsole,
dwParameter == 0 ? L"= 0x%p" : L", 0x%p",
lpExceptionRecord->ExceptionInformation[dwParameter]);
PrintConsole(hConsole, L"\n");
}
}
#ifdef SYMBOLS
hThread = OpenThread(THREAD_GET_CONTEXT,
FALSE,
de.dwThreadId);
if (hThread == NULL)
PrintConsole(hConsole,
L"OpenThread() returned error %lu\n",
dwError = GetLastError());
else
{
#if _M_IX86
if (!GetThreadContext(hThread, &context))
PrintConsole(hConsole,
L"GetThreadContext() returned error %lu\n",
dwError = GetLastError());
else
{
#ifdef VERBOSE
PrintConsole(hConsole, L"\tRegisters:\n");
if ((context.ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL)
PrintConsole(hConsole,
L"\t\tEbp = 0x%08lX, Eip = 0x%08lX, Esp = 0x%08lX\n"
L"\t\tCs = 0x%08lX, Ss = 0x%08lX\n"
L"\t\tEfl = 0x%08lX: Iopl %1lu,%ls%ls %ls %ls %ls %ls %ls %ls %ls %ls\n",
context.Ebp, context.Eip, context.Esp,
context.SegCs, context.SegSs,
context.EFlags,
(context.EFlags >> 12) & 0x00000003, // IOPL level
context.EFlags & 0x00100000 ? L" vip" : L"", // VIP (virtual interrupt pending)
context.EFlags & 0x00080000 ? L" vif" : L"", // VIF (virtual interrupt flag)
context.EFlags & 0x00000800 ? L"ov" : L"nv", // OF (overflow flag)
context.EFlags & 0x00000400 ? L"dn" : L"up", // DF (direction flag)
context.EFlags & 0x00000200 ? L"ei" : L"di", // IF (interrupt enable flag)
context.EFlags & 0x00000080 ? L"ng" : L"pl", // SF (sign flag)
context.EFlags & 0x00000040 ? L"zr" : L"nz", // ZF (zero flag)
context.EFlags & 0x00000010 ? L"ac" : L"na", // AF (aux carry flag)
context.EFlags & 0x00000004 ? L"pe" : L"po", // PF (parity flag)
context.EFlags & 0x00000001 ? L"cy" : L"nc"); // CF (carry flag)
if ((context.ContextFlags & CONTEXT_INTEGER) == CONTEXT_INTEGER)
PrintConsole(hConsole,
L"\t\tEax = 0x%08lX, Ebx = 0x%08lX, Ecx = 0x%08lX, Edx = 0x%08lX\n"
L"\t\tEdi = 0x%08lX, Esi = 0x%08lX\n",
context.Eax, context.Ebx, context.Ecx, context.Edx,
context.Edi, context.Esi);
if ((context.ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS)
PrintConsole(hConsole,
L"\t\tDs = 0x%08lX, Es = 0x%08lX, Fs = 0x%08lX, Gs = 0x%08lX\n",
context.SegDs, context.SegEs, context.SegFs, context.SegGs);
if ((context.ContextFlags & CONTEXT_DEBUG_REGISTERS) == CONTEXT_DEBUG_REGISTERS)
PrintConsole(hConsole,
L"\t\tDr0 = 0x%08lX, Dr1 = 0x%08lX, Dr2 = 0x%08lX, Dr3 = 0x%08lX\n"
L"\t\tDr6 = 0x%08lX, Dr7 = 0x%08lX\n",
context.Dr0, context.Dr1, context.Dr2, context.Dr3,
context.Dr6, context.Dr7);
if ((context.ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT)
;
if ((context.ContextFlags & CONTEXT_EXTENDED_REGISTERS) == CONTEXT_EXTENDED_REGISTERS)
;
#endif // VERBOSE
sf.AddrPC.Offset = context.Eip;
sf.AddrPC.Mode = AddrModeFlat;
sf.AddrReturn.Mode = AddrModeFlat;
sf.AddrFrame.Offset = context.Ebp;
sf.AddrFrame.Mode = AddrModeFlat;
sf.AddrStack.Offset = context.Esp;
sf.AddrStack.Mode = AddrModeFlat;
PrintConsole(hConsole, L"\tCall stack:\n");
while (StackWalk64(IMAGE_FILE_MACHINE_I386,
hProcess,
hThread,
&sf,
&context,
#if 1
NULL,
#else
ReadProcessMemory,
#endif
SymFunctionTableAccess64,
SymGetModuleBase64,
NULL))
#ifdef VERBOSE
PrintConsole(hConsole,
L"\t\tAddress = 0x%08lX%ls\n"
L"\t\tReturn = 0x%08lX\n"
L"\t\tFrame = 0x%08lX\n"
L"\t\tStack = 0x%08lX\n"
L"\t\tParameter = 0x%08lX, 0x%08lX, 0x%08lX, 0x%08lX\n",
(DWORD) sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus),
(DWORD) sf.AddrReturn.Offset,
(DWORD) sf.AddrFrame.Offset,
(DWORD) sf.AddrStack.Offset,
(DWORD) sf.Params[0],
(DWORD) sf.Params[1],
(DWORD) sf.Params[2],
(DWORD) sf.Params[3]);
#else
PrintConsole(hConsole,
L"\t\tAddress = 0x%08lX%ls\n",
(DWORD) sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus));
#endif // VERBOSE
}
#elif _M_AMD64
if (bWow64)
{
if (!Wow64GetThreadContext(hThread, &wow64_context))
PrintConsole(hConsole,
L"Wow64GetThreadContext() returned error %lu\n",
dwError = GetLastError());
else
{
#ifdef VERBOSE
PrintConsole(hConsole, L"\tRegisters:\n");
if ((wow64_context.ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL)
PrintConsole(hConsole,
L"\t\tEbp = 0x%08lX, Eip = 0x%08lX, Esp = 0x%08lX\n"
L"\t\tCs = 0x%08lX, Ss = 0x%08lX\n"
L"\t\tEfl = 0x%08lX: Iopl %1lu,%ls%ls %ls %ls %ls %ls %ls %ls %ls %ls\n",
wow64_context.Ebp, wow64_context.Eip, wow64_context.Esp,
wow64_context.SegCs, wow64_context.SegSs,
wow64_context.EFlags,
(wow64_context.EFlags >> 12) & 0x00000003, // IOPL level
wow64_context.EFlags & 0x00100000 ? L" vip" : L"", // VIP (virtual interrupt pending)
wow64_context.EFlags & 0x00080000 ? L" vif" : L"", // VIF (virtual interrupt flag)
wow64_context.EFlags & 0x00000800 ? L"ov" : L"nv", // OF (overflow flag)
wow64_context.EFlags & 0x00000400 ? L"dn" : L"up", // DF (direction flag)
wow64_context.EFlags & 0x00000200 ? L"ei" : L"di", // IF (interrupt enable flag)
wow64_context.EFlags & 0x00000080 ? L"ng" : L"pl", // SF (sign flag)
wow64_context.EFlags & 0x00000040 ? L"zr" : L"nz", // ZF (zero flag)
wow64_context.EFlags & 0x00000010 ? L"ac" : L"na", // AF (aux carry flag)
wow64_context.EFlags & 0x00000004 ? L"pe" : L"po", // PF (parity flag)
wow64_context.EFlags & 0x00000001 ? L"cy" : L"nc"); // CF (carry flag)
if ((wow64_context.ContextFlags & CONTEXT_INTEGER) == CONTEXT_INTEGER)
PrintConsole(hConsole,
L"\t\tEax = 0x%08lX, Ebx = 0x%08lX, Ecx = 0x%08lX, Edx = 0x%08lX\n"
L"\t\tEdi = 0x%08lX, Esi = 0x%08lX\n",
wow64_context.Eax, wow64_context.Ebx, wow64_context.Ecx, wow64_context.Edx,
wow64_context.Edi, wow64_context.Esi);
if ((wow64_context.ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS)
PrintConsole(hConsole,
L"\t\tDs = 0x%08lX, Es = 0x%08lX, Fs = 0x%08lX, Gs = 0x%08lX\n",
wow64_context.SegDs, wow64_context.SegEs, wow64_context.SegFs, wow64_context.SegGs);
if ((wow64_context.ContextFlags & CONTEXT_DEBUG_REGISTERS) == CONTEXT_DEBUG_REGISTERS)
PrintConsole(hConsole,
L"\t\tDr0 = 0x%08lX, Dr1 = 0x%08lX, Dr2 = 0x%08lX, Dr3 = 0x%08lX\n"
L"\t\tDr6 = 0x%08lX, Dr7 = 0x%08lX\n",
wow64_context.Dr0, wow64_context.Dr1, wow64_context.Dr2, wow64_context.Dr3,
wow64_context.Dr6, wow64_context.Dr7);
if ((wow64_context.ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT)
;
if ((wow64_context.ContextFlags & CONTEXT_EXTENDED_REGISTERS) == CONTEXT_EXTENDED_REGISTERS)
;
#endif // VERBOSE
sf.AddrPC.Offset = wow64_context.Eip;
sf.AddrPC.Mode = AddrModeFlat;
sf.AddrReturn.Mode = AddrModeFlat;
sf.AddrFrame.Offset = wow64_context.Ebp;
sf.AddrFrame.Mode = AddrModeFlat;
sf.AddrStack.Offset = wow64_context.Esp;
sf.AddrStack.Mode = AddrModeFlat;
PrintConsole(hConsole, L"\tCall stack:\n");
while (StackWalk64(IMAGE_FILE_MACHINE_I386,
hProcess,
hThread,
&sf,
&wow64_context,
#if 1
NULL,
#else
ReadProcessMemory,
#endif
SymFunctionTableAccess64,
SymGetModuleBase64,
NULL))
#ifdef VERBOSE
PrintConsole(hConsole,
L"\t\tAddress = 0x%08lX%ls\n"
L"\t\tReturn = 0x%08lX\n"
L"\t\tFrame = 0x%08lX\n"
L"\t\tStack = 0x%08lX\n"
L"\t\tParameter = 0x%08lX, 0x%08lX, 0x%08lX, 0x%08lX\n",
(DWORD) sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus),
(DWORD) sf.AddrReturn.Offset,
(DWORD) sf.AddrFrame.Offset,
(DWORD) sf.AddrStack.Offset,
(DWORD) sf.Params[0],
(DWORD) sf.Params[1],
(DWORD) sf.Params[2],
(DWORD) sf.Params[3]);
#else
PrintConsole(hConsole,
L"\t\tAddress = 0x%08lX%ls\n",
(DWORD) sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus));
#endif // VERBOSE
}
}
else
{
if (!GetThreadContext(hThread, &context))
PrintConsole(hConsole,
L"GetThreadContext() returned error %lu\n",
dwError = GetLastError());
else
{
#ifdef VERBOSE
PrintConsole(hConsole, L"\tRegisters:\n");
if ((context.ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL)
PrintConsole(hConsole,
L"\t\tRip = 0x%016I64X, Rsp = 0x%016I64X\n"
L"\t\tCs = %04hX, Ss = %04hX\n"
L"\t\tRfl = 0x%08lX: Iopl %1lu,%ls%ls %ls %ls %ls %ls %ls %ls %ls %ls\n",
context.Rip, context.Rsp,
context.SegCs, context.SegSs,
context.EFlags,
(context.EFlags >> 12) & 0x00000003, // IOPL level
context.EFlags & 0x00100000 ? L" vip" : L"", // VIP (virtual interrupt pending)
context.EFlags & 0x00080000 ? L" vif" : L"", // VIF (virtual interrupt flag)
context.EFlags & 0x00000800 ? L"ov" : L"nv", // OF (overflow flag)
context.EFlags & 0x00000400 ? L"dn" : L"up", // DF (direction flag)
context.EFlags & 0x00000200 ? L"ei" : L"di", // IF (interrupt enable flag)
context.EFlags & 0x00000080 ? L"ng" : L"pl", // SF (sign flag)
context.EFlags & 0x00000040 ? L"zr" : L"nz", // ZF (zero flag)
context.EFlags & 0x00000010 ? L"ac" : L"na", // AF (aux carry flag)
context.EFlags & 0x00000004 ? L"pe" : L"po", // PF (parity flag)
context.EFlags & 0x00000001 ? L"cy" : L"nc"); // CF (carry flag)
if ((context.ContextFlags & CONTEXT_INTEGER) == CONTEXT_INTEGER)
PrintConsole(hConsole,
L"\t\tRax = 0x%016I64X, Rbx = 0x%016I64X, Rcx = 0x%016I64X, Rdx = 0x%016I64X\n"
L"\t\tRbp = 0x%016I64X, Rdi = 0x%016I64X, Rsi = 0x%016I64X\n"
L"\t\tR08 = 0x%016I64X, R09 = 0x%016I64X, R10 = 0x%016I64X, R11 = 0x%016I64X\n"
L"\t\tR12 = 0x%016I64X, R13 = 0x%016I64X, R14 = 0x%016I64X, R15 = 0x%016I64X\n",
context.Rax, context.Rbx, context.Rcx, context.Rdx,
context.Rbp, context.Rdi, context.Rsi,
context.R08, context.R09, context.R10, context.R11,
context.R12, context.R13, context.R14, context.R15);
if ((context.ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS)
PrintConsole(hConsole,
L"\t\tDs = %04hX, Es = %04hX, Fs = %04hX, Gs = %04hX\n",
context.SegDs, context.SegEs, context.SegFs, context.SegGs);
if ((context.ContextFlags & CONTEXT_DEBUG_REGISTERS) == CONTEXT_DEBUG_REGISTERS)
PrintConsole(hConsole,
L"\t\tDr0 = 0x%016I64X, Dr1 = 0x%016I64X, Dr2 = 0x%016I64X, Dr3 = 0x%016I64X\n"
L"\t\tDr6 = 0x%016I64X, Dr7 = 0x%016I64X\n",
context.Dr0, context.Dr1, context.Dr2, context.Dr3,
context.Dr6, context.Dr7);
if ((context.ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT)
;
#endif // VERBOSE
sf.AddrPC.Offset = context.Rip;
sf.AddrPC.Mode = AddrModeFlat;
sf.AddrReturn.Mode = AddrModeFlat;
sf.AddrFrame.Offset = context.Rbp;
sf.AddrFrame.Mode = AddrModeFlat;
sf.AddrStack.Offset = context.Rsp;
sf.AddrStack.Mode = AddrModeFlat;
PrintConsole(hConsole, L"\tCall stack:\n");
while (StackWalk64(IMAGE_FILE_MACHINE_AMD64,
hProcess,
hThread,
&sf,
&context,
#if 1
NULL,
#else
ReadProcessMemory,
#endif
SymFunctionTableAccess64,
SymGetModuleBase64,
NULL))
#ifdef VERBOSE
PrintConsole(hConsole,
L"\t\tAddress = 0x%016I64X%ls\n"
L"\t\tReturn = 0x%016I64X\n"
L"\t\tFrame = 0x%016I64X\n"
L"\t\tStack = 0x%016I64X\n"
L"\t\tParameter = 0x%016I64X, 0x%016I64X, 0x%016I64X, 0x%016I64X\n",
sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus),
sf.AddrReturn.Offset,
sf.AddrFrame.Offset,
sf.AddrStack.Offset,
sf.Params[0],
sf.Params[1],
sf.Params[2],
sf.Params[3]);
#else
PrintConsole(hConsole,
L"\t\tAddress = 0x%016I64X%ls\n",
sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus));
#endif // VERBOSE
}
}
#elif _M_IA64
if (bWow64)
{
if (!Wow64GetThreadContext(hThread, &wow64_context))
PrintConsole(hConsole,
L"Wow64GetThreadContext() returned error %lu\n",
dwError = GetLastError());
else
{
#ifdef VERBOSE
PrintConsole(hConsole, L"\tRegisters:\n");
if ((wow64_context.ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL)
PrintConsole(hConsole,
L"\t\tEbp = 0x%08lX, Eip = 0x%08lX, Esp = 0x%08lX\n"
L"\t\tCs = 0x%08lX, Ss = 0x%08lX\n"
L"\t\tEfl = 0x%08lX: Iopl %1lu,%ls%ls %ls %ls %ls %ls %ls %ls %ls %ls\n",
wow64_context.Ebp, wow64_context.Eip, wow64_context.Esp,
wow64_context.SegCs, wow64_context.SegSs,
wow64_context.EFlags,
(wow64_context.EFlags >> 12) & 0x00000003, // IOPL level
wow64_context.EFlags & 0x00100000 ? L" vip" : L"", // VIP (virtual interrupt pending)
wow64_context.EFlags & 0x00080000 ? L" vif" : L"", // VIF (virtual interrupt flag)
wow64_context.EFlags & 0x00000800 ? L"ov" : L"nv", // OF (overflow flag)
wow64_context.EFlags & 0x00000400 ? L"dn" : L"up", // DF (direction flag)
wow64_context.EFlags & 0x00000200 ? L"ei" : L"di", // IF (interrupt enable flag)
wow64_context.EFlags & 0x00000080 ? L"ng" : L"pl", // SF (sign flag)
wow64_context.EFlags & 0x00000040 ? L"zr" : L"nz", // ZF (zero flag)
wow64_context.EFlags & 0x00000010 ? L"ac" : L"na", // AF (aux carry flag)
wow64_context.EFlags & 0x00000004 ? L"pe" : L"po", // PF (parity flag)
wow64_context.EFlags & 0x00000001 ? L"cy" : L"nc"); // CF (carry flag)
if ((wow64_context.ContextFlags & CONTEXT_INTEGER) == CONTEXT_INTEGER)
PrintConsole(hConsole,
L"\t\tEax = 0x%08lX, Ebx = 0x%08lX, Ecx = 0x%08lX, Edx = 0x%08lX\n"
L"\t\tEdi = 0x%08lX, Esi = 0x%08lX\n",
wow64_context.Eax, wow64_context.Ebx, wow64_context.Ecx, wow64_context.Edx,
wow64_context.Edi, wow64_context.Esi);
if ((wow64_context.ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS)
PrintConsole(hConsole,
L"\t\tDs = 0x%08lX, Es = 0x%08lX, Fs = 0x%08lX, Gs = 0x%08lX\n",
wow64_context.SegDs, wow64_context.SegEs, wow64_context.SegFs, wow64_context.SegGs);
if ((wow64_context.ContextFlags & CONTEXT_DEBUG_REGISTERS) == CONTEXT_DEBUG_REGISTERS)
PrintConsole(hConsole,
L"\t\tDr0 = 0x%08lX, Dr1 = 0x%08lX, Dr2 = 0x%08lX, Dr3 = 0x%08lX\n"
L"\t\tDr6 = 0x%08lX, Dr7 = 0x%08lX\n",
wow64_context.Dr0, wow64_context.Dr1, wow64_context.Dr2, wow64_context.Dr3,
wow64_context.Dr6, wow64_context.Dr7);
if ((wow64_context.ContextFlags & CONTEXT_FLOATING_POINT) == CONTEXT_FLOATING_POINT)
;
if ((wow64_context.ContextFlags & CONTEXT_EXTENDED_REGISTERS) == CONTEXT_EXTENDED_REGISTERS)
;
#endif // VERBOSE
sf.AddrPC.Offset = wow64_context.Eip;
sf.AddrPC.Mode = AddrModeFlat;
sf.AddrReturn.Mode = AddrModeFlat;
sf.AddrFrame.Offset = wow64_context.Ebp;
sf.AddrFrame.Mode = AddrModeFlat;
sf.AddrStack.Offset = wow64_context.Esp;
sf.AddrStack.Mode = AddrModeFlat;
PrintConsole(hConsole, L"\tCall stack:\n");
while (StackWalk64(IMAGE_FILE_MACHINE_I386,
hProcess,
hThread,
&sf,
&wow64_context,
#if 1
NULL,
#else
ReadProcessMemory,
#endif
SymFunctionTableAccess64,
SymGetModuleBase64,
NULL))
#ifdef VERBOSE
PrintConsole(hConsole,
L"\t\tAddress = 0x%08lX%ls\n"
L"\t\tReturn = 0x%08lX\n"
L"\t\tFrame = 0x%08lX\n"
L"\t\tStack = 0x%08lX\n"
L"\t\tParameter = 0x%08lX, 0x%08lX, 0x%08lX, 0x%08lX\n",
(DWORD) sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus),
(DWORD) sf.AddrReturn.Offset,
(DWORD) sf.AddrFrame.Offset,
(DWORD) sf.AddrStack.Offset,
(DWORD) sf.Params[0],
(DWORD) sf.Params[1],
(DWORD) sf.Params[2],
(DWORD) sf.Params[3]);
#else
PrintConsole(hConsole,
L"\t\tAddress = 0x%08lX%ls\n",
(DWORD) sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus));
#endif // VERBOSE
}
}
else
{
if (!GetThreadContext(hThread, &context))
PrintConsole(hConsole,
L"GetThreadContext() returned error %lu\n",
dwError = GetLastError());
else
{
sf.AddrPC.Offset = context.StIIP;
sf.AddrPC.Mode = AddrModeFlat;
sf.AddrReturn.Mode = AddrModeFlat;
sf.AddrFrame.Mode = AddrModeFlat;
sf.AddrStack.Offset = context.IntSp;
sf.AddrStack.Mode = AddrModeFlat;
sf.AddrBStore.Offset = context.RsBSP;
sf.AddrBStore.Mode = AddrModeFlat;
PrintConsole(hConsole, L"\tCall stack:\n");
while (StackWalk64(IMAGE_FILE_MACHINE_IA64,
hProcess,
hThread,
&sf,
&context,
#if 1
NULL,
#else
ReadProcessMemory,
#endif
SymFunctionTableAccess64,
SymGetModuleBase64,
NULL))
#ifdef VERBOSE
PrintConsole(hConsole,
L"\t\tAddress = 0x%016I64X%ls\n"
L"\t\tReturn = 0x%016I64X\n"
L"\t\tFrame = 0x%016I64X\n"
L"\t\tStack = 0x%016I64X\n"
L"\t\tParameter = 0x%016I64X, 0x%016I64X, 0x%016I64X, 0x%016I64X\n",
sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus),
sf.AddrReturn.Offset,
sf.AddrFrame.Offset,
sf.AddrStack.Offset,
sf.Params[0],
sf.Params[1],
sf.Params[2],
sf.Params[3]);
#else
PrintConsole(hConsole,
L"\t\tAddress = 0x%016I64X%ls\n",
sf.AddrPC.Offset,
NameLookup(hProcess, sf.AddrPC.Offset, &mi, &siplus));
#endif // VERBOSE
}
}
#else
#error Only I386, AMD64 and IA64 supported!
#endif
if (!CloseHandle(hThread))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
dwError = GetLastError());
}
#endif // SYMBOLS
break;
default:
PrintConsole(hConsole,
L"\n"
L"Unknown debug event %lu in thread %lu of process %lu\n",
de.dwDebugEventCode,
de.dwThreadId, de.dwProcessId);
}
// NOTE: DBG_EXCEPTION_NOT_HANDLED repeats OUTPUT_DEBUG_STRING_EVENT once!
if (ContinueDebugEvent(de.dwProcessId,
de.dwThreadId,
de.dwDebugEventCode == EXCEPTION_DEBUG_EVENT ? DBG_EXCEPTION_NOT_HANDLED : DBG_CONTINUE))
continue;
PrintConsole(hConsole,
L"ContinueDebugEvent() returned error %lu\n",
dwError = GetLastError());
break;
}
while (hProcess != NULL);
PrintConsole(hConsole, L"\n");
if (WaitForSingleObject(pi.hThread, INFINITE) == WAIT_FAILED)
PrintConsole(hConsole,
L"WaitForSingleObject() returned error %lu\n",
dwError = GetLastError());
if (!GetExitCodeThread(pi.hThread, &dwThread))
PrintConsole(hConsole,
L"GetExitCodeThread() returned error %lu\n",
dwError = GetLastError());
else
if (dwThread > 65535)
PrintConsole(hConsole,
L"Primary thread %lu of debuggee process %lu exited with code 0x%08lX\n",
pi.dwThreadId, pi.dwProcessId, dwThread);
else
PrintConsole(hConsole,
L"Primary thread %lu of debuggee process %lu exited with code %lu\n",
pi.dwThreadId, pi.dwProcessId, dwThread);
if (!GetThreadTimes(pi.hThread,
(LPFILETIME) uli,
(LPFILETIME) uli + 1,
(LPFILETIME) uli + 2,
(LPFILETIME) uli + 3))
PrintConsole(hConsole,
L"GetThreadTimes() returned error %lu\n",
dwError = GetLastError());
else
{
PrintConsole(hConsole,
L"Primary thread times:\n");
uli[1].QuadPart -= uli[0].QuadPart;
for (dwThread = 1; dwThread < 4; dwThread++)
PrintConsole(hConsole,
L"\t%ls = %10lu.%07lu s\n",
szTimes[dwThread],
#ifdef _M_IX86
SplitFileTime(uli[dwThread].LowPart, uli[dwThread].HighPart));
#else
(DWORD) (uli[dwThread].QuadPart / 10000000),
(DWORD) (uli[dwThread].QuadPart % 10000000));
#endif
}
if (!CloseHandle(pi.hThread))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
dwError = GetLastError());
if (WaitForSingleObject(pi.hProcess, INFINITE) == WAIT_FAILED)
PrintConsole(hConsole,
L"WaitForSingleObject() returned error %lu\n",
dwError = GetLastError());
if (!GetExitCodeProcess(pi.hProcess, &dwProcess))
PrintConsole(hConsole,
L"GetExitCodeProcess() returned error %lu\n",
dwError = GetLastError());
else
if (dwProcess > 65535)
PrintConsole(hConsole,
L"Debuggee process %lu exited with code 0x%08lX\n",
pi.dwProcessId, dwProcess);
else
PrintConsole(hConsole,
L"Debuggee process %lu exited with code %lu\n",
pi.dwProcessId, dwProcess);
if (!GetProcessTimes(pi.hProcess,
(LPFILETIME) uli,
(LPFILETIME) uli + 1,
(LPFILETIME) uli + 2,
(LPFILETIME) uli + 3))
PrintConsole(hConsole,
L"GetProcessTimes() returned error %lu\n",
dwError = GetLastError());
else
{
PrintConsole(hConsole,
L"Debuggee process times:\n");
uli[1].QuadPart -= uli[0].QuadPart;
for (dwProcess = 1; dwProcess < 4; dwProcess++)
PrintConsole(hConsole,
L"\t%ls = %10lu.%07lu s\n",
szTimes[dwProcess],
#ifdef _M_IX86
SplitFileTime(uli[dwProcess].LowPart, uli[dwProcess].HighPart));
#else
(DWORD) (uli[dwProcess].QuadPart / 10000000),
(DWORD) (uli[dwProcess].QuadPart % 10000000));
#endif
}
if (!CloseHandle(pi.hProcess))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
dwError = GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
DEBUGGER.C
created in step 1., link the compiled
object file DEBUGGER.OBJ
and cleanup afterwards:
SET CL=/DDELAYLOADINFO /DSYMBOLS /GAFS /Gs69632 /Gy /O2isy /UVERBOSE /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:6.0 /RELEASE /STACK:1048576,65536 /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeDEBUGGER.COM DEBUGGER.C KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE DEBUGGER.OBJFor 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. DEBUGGER.C delayimp.h(67) : warning C4201: nonstandard extension used : nameless struct/union DEBUGGER.C(754) : warning C4100: 'hProcess' : unreferenced formal parameter DEBUGGER.C(1111) : warning C4090: 'function' : different 'const' qualifiers DEBUGGER.C(1293) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPVOID' DEBUGGER.C(1293) : warning C4024: 'SymLoadModuleExW' : different types for formal and actual parameter 5 DEBUGGER.C(1319) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPVOID' DEBUGGER.C(1319) : warning C4024: 'SymLoadModuleEx' : different types for formal and actual parameter 5 DEBUGGER.C(1389) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPVOID' DEBUGGER.C(1389) : warning C4024: 'SymLoadModuleEx' : different types for formal and actual parameter 5 DEBUGGER.C(1467) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPTHREAD_START_ROUTINE' DEBUGGER.C(1467) : warning C4024: 'NameLookup' : different types for formal and actual parameter 2 DEBUGGER.C(1500) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPTHREAD_START_ROUTINE' DEBUGGER.C(1500) : warning C4024: 'NameLookup' : different types for formal and actual parameter 2 DEBUGGER.C(1595) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPVOID' DEBUGGER.C(1595) : warning C4024: 'SymLoadModuleExW' : different types for formal and actual parameter 5 DEBUGGER.C(1621) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPVOID' DEBUGGER.C(1621) : warning C4024: 'SymLoadModuleEx' : different types for formal and actual parameter 5 DEBUGGER.C(1689) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPVOID' DEBUGGER.C(1689) : warning C4024: 'SymLoadModuleEx' : different types for formal and actual parameter 5 DEBUGGER.C(1760) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPVOID' DEBUGGER.C(1760) : warning C4024: 'NameLookup' : different types for formal and actual parameter 2 DEBUGGER.C(1784) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPVOID' DEBUGGER.C(1784) : warning C4024: 'NameLookup' : different types for formal and actual parameter 2 DEBUGGER.C(1787) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPVOID' DEBUGGER.C(1787) : warning C4024: 'SymUnloadModule64' : different types for formal and actual parameter 2 DEBUGGER.C(1811) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'LPSTR' DEBUGGER.C(1811) : warning C4024: 'NameLookup' : different types for formal and actual parameter 2 DEBUGGER.C(1923) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'PVOID' DEBUGGER.C(1923) : warning C4024: 'NameLookup' : different types for formal and actual parameter 2 DEBUGGER.C(1966) : warning C4047: 'function' : 'DWORD64' differs in levels of indirection from 'PVOID' DEBUGGER.C(1966) : warning C4024: 'NameLookup' : different types for formal and actual parameter 2 DEBUGGER.C(1502) : warning C4701: potentially uninitialized local variable 'hProcess' used Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file DEBUGGER.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
e0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 1a 00 00 ......#.........
00 2e 00 00 00 00 00 00 c7 18 00 00 00 10 00 00 ................
00 30 00 00 00 00 40 00 00 10 00 00 00 02 00 00 .0....@.........
06 00 00 00 00 00 2f 03 06 00 00 00 00 00 00 00 ....../.........
00 60 00 00 00 02 00 00 fb ea 00 00 03 00 00 85 .`..............
00 00 10 00 00 00 01 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
9c 58 00 00 50 00 00 00 00 00 00 00 00 00 00 00 .X..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 40 58 00 00 40 00 00 00 ........@X..@...
00 00 00 00 00 00 00 00 00 30 00 00 b4 00 00 00 .........0......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
ad 19 00 00 00 10 00 00 00 1a 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 dc 2c 00 00 00 30 00 00 .const...,...0..
00 2e 00 00 00 1c 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 53 56 8b 75 0c 8b 06 b9 8c 00 00 c0 57 U..SV.u........W
3b c1 0f 87 b5 03 00 00 0f 84 a5 03 00 00 b9 02 ;...............
00 00 80 3b c1 0f 87 6f 01 00 00 0f 84 5f 01 00 ...;...o....._..
00 b9 1e 00 00 40 3b c1 0f 87 a1 00 00 00 0f 84 .....@;.........
91 00 00 00 b9 e4 06 00 00 3b c1 77 3f 0f 84 60 .........;.w?..`
02 00 00 2d a6 06 00 00 0f 84 95 01 00 00 83 e8 ...-............
0f 0f 84 82 01 00 00 83 e8 05 0f 84 6f 01 00 00 ............o...
83 e8 0c 0f 84 98 01 00 00 83 e8 13 0f 85 6b 06 ..............k.
00 00 b8 10 43 40 00 e9 82 06 00 00 2d ef 06 00 ....C@......-...
00 0f 84 12 02 00 00 83 e8 08 0f 84 ff 01 00 00 ................
2d e7 f3 ed 0e 74 24 2d 27 05 12 31 74 13 83 e8 -....t$-'..1t...
10 0f 85 36 06 00 00 b8 e0 42 40 00 e9 4d 06 00 ...6.....B@..M..
00 b8 b4 42 40 00 e9 43 06 00 00 b8 80 42 40 00 ...B@..C.....B@.
e9 39 06 00 00 b8 5c 42 40 00 e9 2f 06 00 00 b9 .9....\B@../....
07 00 01 40 3b c1 77 59 74 4d 2d 1f 00 00 40 74 ...@;.wYtM-...@t
3c 2d e4 ff 00 00 74 2b 48 74 1e 48 74 11 48 0f <-....t+Ht.Ht.H.
85 e8 05 00 00 b8 28 42 40 00 e9 ff 05 00 00 b8 ......(B@.......
18 42 40 00 e9 f5 05 00 00 b8 e0 41 40 00 e9 eb .B@........A@...
05 00 00 b8 ac 41 40 00 e9 e1 05 00 00 b8 88 41 .....A@........A
40 00 e9 d7 05 00 00 b8 58 41 40 00 e9 cd 05 00 @.......XA@.....
00 3d 08 00 01 40 74 3e 3d 09 00 01 40 74 2d 3d .=...@t>=...@t-=
0a 00 01 40 74 af 3d 88 13 6d 40 74 15 3d 01 00 ...@t.=..m@t.=..
00 80 0f 85 85 05 00 00 b8 34 41 40 00 e9 9c 05 .........4A@....
00 00 b8 0c 41 40 00 e9 92 05 00 00 b8 e8 40 40 ....A@........@@
00 e9 88 05 00 00 b8 d0 40 40 00 e9 7e 05 00 00 ........@@..~...
b8 ac 40 40 00 e9 74 05 00 00 b9 06 00 00 c0 3b ..@@..t........;
c1 0f 87 66 01 00 00 0f 84 10 01 00 00 b9 c6 06 ...f............
07 80 3b c1 77 65 74 59 3d 03 00 00 80 74 48 3d ..;.wetY=....tH=
04 00 00 80 74 37 3d a6 06 07 80 74 26 3d b5 06 ....t7=....t&=..
07 80 74 15 3d ba 06 07 80 0f 85 0e 05 00 00 b8 ..t.=...........
7c 40 40 00 e9 25 05 00 00 b8 50 40 40 00 e9 1b |@@..%....P@@...
05 00 00 b8 18 40 40 00 e9 11 05 00 00 b8 00 40 .....@@........@
40 00 e9 07 05 00 00 b8 e8 3f 40 00 e9 fd 04 00 @........?@.....
00 b8 b4 3f 40 00 e9 f3 04 00 00 3d d9 06 07 80 ...?@......=....
0f 84 5c fe ff ff 3d e4 06 07 80 0f 84 82 00 00 ..\...=.........
00 3d ef 06 07 80 74 71 3d f7 06 07 80 74 60 3d .=....tq=....t`=
05 00 00 c0 0f 85 a3 04 00 00 8b 46 14 83 e8 00 ...........F....
74 1d 48 74 13 83 e8 07 74 07 b8 48 32 40 00 eb t.Ht....t..H2@..
13 b8 34 32 40 00 eb 0c b8 24 32 40 00 eb 05 b8 ..42@....$2@....
14 32 40 00 ff 76 18 50 68 80 3f 40 00 ff 75 08 .2@..v.Ph.?@..u.
ff 15 6c 30 40 00 83 c4 10 85 c0 7e 08 8b 45 08 ..l0@......~..E.
e9 79 04 00 00 b8 5c 3f 40 00 e9 6f 04 00 00 b8 .y....\?@..o....
24 3f 40 00 e9 65 04 00 00 b8 f4 3e 40 00 e9 5b $?@..e.....>@..[
04 00 00 b8 bc 3e 40 00 e9 51 04 00 00 8b 46 14 .....>@..Q....F.
83 e8 00 74 1d 48 74 13 83 e8 07 74 07 b8 48 32 ...t.Ht....t..H2
40 00 eb 13 b8 34 32 40 00 eb 0c b8 24 32 40 00 @....42@....$2@.
eb 05 b8 14 32 40 00 ff 76 1c ff 76 18 50 68 78 ....2@..v..v.Phx
3e 40 00 ff 75 08 ff 15 6c 30 40 00 83 c4 14 85 >@..u...l0@.....
c0 7f 8a b8 58 3e 40 00 e9 01 04 00 00 b9 25 00 ....X>@.......%.
00 c0 3b c1 77 65 74 59 3d 08 00 00 c0 74 48 3d ..;.wetY=....tH=
0d 00 00 c0 74 37 3d 17 00 00 c0 74 26 3d 1d 00 ....t7=....t&=..
00 c0 74 15 3d 22 00 00 c0 0f 85 ae 03 00 00 b8 ..t.="..........
3c 3e 40 00 e9 c5 03 00 00 b8 14 3e 40 00 e9 bb <>@........>@...
03 00 00 b8 c8 3d 40 00 e9 b1 03 00 00 b8 a4 3d .....=@........=
40 00 e9 a7 03 00 00 b8 84 3d 40 00 e9 9d 03 00 @........=@.....
00 b8 64 3d 40 00 e9 93 03 00 00 3d 26 00 00 c0 ..d=@......=&...
74 37 3d 34 00 00 c0 74 26 3d 3a 00 00 c0 74 15 t7=4...t&=:...t.
3d 7a 00 00 c0 0f 85 52 03 00 00 b8 3c 3d 40 00 =z.....R....<=@.
e9 69 03 00 00 b8 10 3d 40 00 e9 5f 03 00 00 b8 .i.....=@.._....
e4 3c 40 00 e9 55 03 00 00 b8 bc 3c 40 00 e9 4b .<@..U.....<@..K
03 00 00 b8 90 3c 40 00 e9 41 03 00 00 b9 aa 00 .....<@..A......
00 c0 3b c1 0f 87 85 00 00 00 74 79 05 73 ff ff ..;.......ty.s..
3f 83 f8 09 0f 87 03 03 00 00 ff 24 85 18 17 40 ?..........$...@
00 b8 50 3c 40 00 e9 13 03 00 00 b8 10 3c 40 00 ..P<@........<@.
e9 09 03 00 00 b8 d4 3b 40 00 e9 ff 02 00 00 b8 .......;@.......
90 3b 40 00 e9 f5 02 00 00 b8 5c 3b 40 00 e9 eb .;@.......\;@...
02 00 00 b8 24 3b 40 00 e9 e1 02 00 00 b8 f0 3a ....$;@........:
40 00 e9 d7 02 00 00 b8 c0 3a 40 00 e9 cd 02 00 @........:@.....
00 b8 9c 3a 40 00 e9 c3 02 00 00 b8 6c 3a 40 00 ...:@.......l:@.
e9 b9 02 00 00 b8 38 3a 40 00 e9 af 02 00 00 b9 ......8:@.......
09 04 00 c0 3b c1 0f 87 4d 01 00 00 0f 84 3d 01 ....;...M.....=.
00 00 b9 94 01 00 c0 3b c1 0f 87 9c 00 00 00 0f .......;........
84 8c 00 00 00 83 c1 a6 3b c1 77 4e 0f 84 7d fc ........;.wN..}.
ff ff 3d fd 00 00 c0 74 37 3d 35 01 00 c0 74 26 ..=....t7=5...t&
3d 38 01 00 c0 74 15 3d 39 01 00 c0 0f 85 3b 02 =8...t.=9.....;.
00 00 b8 0c 3a 40 00 e9 52 02 00 00 b8 e8 39 40 ....:@..R.....9@
00 e9 48 02 00 00 b8 cc 39 40 00 e9 3e 02 00 00 ..H.....9@..>...
b8 ac 39 40 00 e9 34 02 00 00 3d 42 01 00 c0 74 ..9@..4...=B...t
26 3d 44 01 00 c0 74 15 3d 4a 01 00 c0 0f 85 fa &=D...t.=J......
01 00 00 b8 74 39 40 00 e9 11 02 00 00 b8 4c 39 ....t9@.......L9
40 00 e9 07 02 00 00 b8 18 39 40 00 e9 fd 01 00 @........9@.....
00 b8 f4 38 40 00 e9 f3 01 00 00 b9 c9 02 00 c0 ...8@...........
3b c1 77 54 74 48 3d 35 02 00 c0 74 37 3d b4 02 ;.wTtH=5...t7=..
00 c0 74 26 3d b5 02 00 c0 74 15 3d c5 02 00 c0 ..t&=....t.=....
0f 85 a7 01 00 00 b8 d4 38 40 00 e9 be 01 00 00 ........8@......
b8 98 38 40 00 e9 b4 01 00 00 b8 58 38 40 00 e9 ..8@.......X8@..
aa 01 00 00 b8 28 38 40 00 e9 a0 01 00 00 b8 e8 .....(8@........
37 40 00 e9 96 01 00 00 3d 59 03 00 c0 74 26 3d 7@......=Y...t&=
5a 03 00 c0 74 15 3d 74 03 00 c0 0f 85 5c 01 00 Z...t.=t.....\..
00 b8 c8 37 40 00 e9 73 01 00 00 b8 88 37 40 00 ...7@..s.....7@.
e9 69 01 00 00 b8 48 37 40 00 e9 5f 01 00 00 b8 .i....H7@.._....
f0 36 40 00 e9 55 01 00 00 b9 7f 00 6d c0 3b c1 .6@..U......m.;.
0f 87 f6 00 00 00 8b 5d 08 8b 3d 6c 30 40 00 0f .......]..=l0@..
84 a9 00 00 00 b9 02 06 00 c0 3b c1 77 54 74 48 ..........;.wTtH
3d 17 04 00 c0 74 37 3d 1d 04 00 c0 74 26 3d 20 =....t7=....t&=
04 00 c0 74 15 3d 21 04 00 c0 0f 85 ed 00 00 00 ...t.=!.........
b8 b8 36 40 00 e9 04 01 00 00 b8 94 36 40 00 e9 ..6@........6@..
fa 00 00 00 b8 40 36 40 00 e9 f0 00 00 00 b8 f0 .....@6@........
35 40 00 e9 e6 00 00 00 b8 c4 35 40 00 e9 dc 00 5@........5@....
00 00 3d 02 08 00 c0 74 3b 3d 57 00 6d c0 74 2a ..=....t;=W.m.t*
3d 7e 00 6d c0 0f 85 a2 00 00 00 8b 46 14 ff 70 =~.m........F..p
20 ff 70 0c 68 58 35 40 00 53 ff d7 83 c4 10 85 .p.hX5@.S......
c0 7e 1b 8b c3 e9 a4 00 00 00 b8 00 35 40 00 e9 .~..........5@..
9a 00 00 00 b8 d4 34 40 00 e9 90 00 00 00 8b 46 ......4@.......F
14 83 78 10 00 ff 70 20 ff 70 0c ff 70 14 74 16 ..x...p .p..p.t.
68 50 34 40 00 53 ff d7 83 c4 14 85 c0 7f c4 b8 hP4@.S..........
00 34 40 00 eb 68 68 78 33 40 00 53 ff d7 83 c4 .4@..hhx3@.S....
14 85 c0 7f ae b8 20 33 40 00 eb 52 3d ff ff ff ...... 3@..R=...
cf 74 46 3d 52 43 43 e0 74 38 3d 4d 4f 43 e0 74 .tF=RCC.t8=MOC.t
31 3d 4f 53 53 e0 74 2a 3d 52 45 56 e0 74 1c 3d 1=OSS.t*=REV.t.=
4e 4d 58 e0 74 1c 3d 63 73 6d e0 74 07 b8 fc 32 NMX.t.=csm.t...2
40 00 eb 1a b8 e0 32 40 00 eb 13 b8 a8 32 40 00 @.....2@.....2@.
eb 0c b8 80 32 40 00 eb 05 b8 5c 32 40 00 5f 5e ....2@....\2@._^
5b 5d c2 08 00 8d 49 00 f1 13 40 00 fb 13 40 00 []....I...@...@.
05 14 40 00 0f 14 40 00 19 14 40 00 23 14 40 00 ..@...@...@.#.@.
2d 14 40 00 37 14 40 00 41 14 40 00 4b 14 40 00 -.@.7.@.A.@.K.@.
55 8b ec 51 51 53 8b 5d 18 56 57 8b 7d 10 53 8d U..QQS.].VW.}.S.
45 f8 50 57 ff 75 0c ff 75 08 ff 15 a8 30 40 00 E.PW.u..u....0@.
85 c0 75 78 8b 75 14 56 57 ff 75 0c ff 75 08 ff ..ux.u.VW.u..u..
15 ac 30 40 00 85 c0 75 0a b8 5c 43 40 00 e9 ef ..0@...u..\C@...
00 00 00 33 c0 66 89 86 a4 00 00 00 8d 46 24 8d ...3.f.......F$.
50 02 66 8b 08 83 c0 02 66 85 c9 75 f5 2b c2 d1 P.f.....f..u.+..
f8 74 d6 6a 09 59 66 89 4e 22 8b 4d 0c 2b 4e 08 .t.j.Yf.N".M.+N.
1b 7e 0c 8b d1 0b d7 89 4d f8 89 7d fc 74 15 57 .~......M..}.t.W
51 8d 44 46 24 68 48 43 40 00 50 ff 15 6c 30 40 Q.DF$hHC@.P..l0@
00 83 c4 10 8d 46 22 e9 96 00 00 00 8b 45 f8 0b .....F"......E..
45 fc 8b 43 4c 75 09 33 c9 66 89 4c 43 54 eb 19 E..CLu.3.f.LCT..
ff 75 fc 8d 44 43 54 ff 75 f8 68 48 43 40 00 50 .u..DCT.u.hHC@.P
ff 15 6c 30 40 00 83 c4 10 8b 75 14 56 57 ff 75 ..l0@.....u.VW.u
0c ff 75 08 ff 15 ac 30 40 00 85 c0 75 05 8d 43 ..u....0@...u..C
52 eb 49 33 c0 66 89 86 a4 00 00 00 8b 45 f8 23 R.I3.f.......E.#
45 fc 83 f8 ff 75 05 8d 46 22 eb 30 83 c6 24 8b E....u..F".0..$.
c6 8d 50 02 66 8b 08 83 c0 02 66 85 c9 75 f5 2b ..P.f.....f..u.+
c2 6a 29 d1 f8 59 2b c8 8d 14 4b 8b c8 6a 21 8b .j)..Y+...K..j!.
fa 58 66 f3 a5 66 89 43 52 8d 42 fe 6a 09 59 66 .Xf..f.CR.B.j.Yf
89 08 5f 5e 5b c9 c2 14 00 55 8b ec 81 ec 04 08 .._^[....U......
00 00 56 8d 45 10 50 ff 75 0c 8d 85 fc f7 ff ff ..V.E.P.u.......
50 ff 15 68 30 40 00 8b f0 85 f6 75 04 33 c0 eb P..h0@.....u.3..
23 6a 00 8d 45 fc 50 56 8d 85 fc f7 ff ff 50 ff #j..E.PV......P.
75 08 ff 15 3c 30 40 00 85 c0 74 e1 33 c0 39 75 u...<0@...t.3.9u
fc 0f 94 c0 5e c9 c3 55 8d 6c 24 88 81 ec 74 2b ....^..U.l$...t+
00 00 53 56 57 c7 45 54 04 01 00 00 c7 45 74 a0 ..SVW.ET.....Et.
00 00 00 ff 15 74 30 40 00 6a f4 89 45 64 ff 15 .....t0@.j..Ed..
10 30 40 00 8b d8 89 5d 5c 83 fb ff 75 0e ff 15 .0@....]\...u...
14 30 40 00 89 45 74 e9 f5 0e 00 00 8d 45 50 50 .0@..Et......EPP
ff 15 18 30 40 00 50 e8 13 0f 00 00 8b 3d 14 30 ...0@.P......=.0
40 00 89 45 4c 85 c0 75 15 ff d7 50 89 45 74 68 @..EL..u...P.Eth
10 58 40 00 be dc 57 40 00 e9 9c 0e 00 00 8b 45 .X@...W@.......E
50 be dc 57 40 00 83 f8 02 0f 82 69 0e 00 00 8b P..W@......i....
4d 4c 8b 49 04 66 83 39 00 0f 84 59 0e 00 00 83 ML.I.f.9...Y....
f8 03 0f 87 50 0e 00 00 8b 4d 4c 6a 04 5a 2b d0 ....P....MLj.Z+.
ff 34 91 ff 74 81 fc 68 78 57 40 00 53 e8 f7 fe .4..t..hxW@.S...
ff ff 83 c4 10 83 7d 50 03 75 38 8d 45 48 50 8b ......}P.u8.EHP.
45 4c ff 70 04 ff 15 1c 30 40 00 85 c0 75 0b ff EL.p....0@...u..
d7 50 68 5c 57 40 00 56 eb 10 8b 45 48 ff 34 85 .Ph\W@.V...EH.4.
a0 31 40 00 50 68 20 57 40 00 53 e8 b9 fe ff ff .1@.Ph W@.S.....
83 c4 10 8b 45 64 0f b7 48 06 51 0f b7 48 04 51 ....Ed..H.Q..H.Q
0f b7 48 02 0f b7 00 51 50 68 98 56 40 00 53 e8 ..H....QPh.V@.S.
95 fe ff ff 83 c4 18 ff 15 78 30 40 00 0d 00 20 .........x0@...
00 80 50 ff 15 7c 30 40 00 8b 4d 50 8d 45 38 50 ..P..|0@..MP.E8P
68 d0 31 40 00 33 c0 50 50 68 32 04 00 04 50 50 h.1@.3.PPh2...PP
50 8b 45 4c ff 74 88 fc 6a 04 5a 2b d1 ff 34 90 P.EL.t..j.Z+..4.
ff 15 20 30 40 00 85 c0 75 1a ff d7 50 68 7c 56 .. 0@...u...Ph|V
40 00 56 53 89 45 74 e8 3d fe ff ff 83 c4 10 e9 @.VS.Et.=.......
81 0d 00 00 83 65 74 00 8d 45 54 50 8d 85 a8 fc .....et..ETP....
ff ff 50 6a 00 ff 75 38 ff 15 24 30 40 00 85 c0 ..Pj..u8..$0@...
75 17 ff d7 50 68 48 56 40 00 56 53 89 45 74 e8 u...PhHV@.VS.Et.
05 fe ff ff 83 c4 10 eb 15 8d 85 a8 fc ff ff 50 ...............P
68 e8 55 40 00 53 e8 ee fd ff ff 83 c4 0c ff 75 h.U@.S.........u
40 ff 15 28 30 40 00 85 c0 75 0e ff d7 50 68 c4 @..(0@...u...Ph.
55 40 00 89 45 74 56 eb 0d 0f b7 c8 51 c1 e8 10 U@..EtV.....Q...
50 68 78 55 40 00 53 e8 bd fd ff ff 83 c4 10 ff PhxU@.S.........
75 44 ff 75 40 68 08 55 40 00 53 e8 a9 fd ff ff uD.u@h.U@.S.....
83 c4 10 6a 00 ff 15 2c 30 40 00 85 c0 75 15 ff ...j...,0@...u..
d7 50 68 d0 54 40 00 56 53 89 45 74 e8 88 fd ff .Ph.T@.VS.Et....
ff 83 c4 10 c7 85 24 ed ff ff b8 0c 00 00 c7 85 ......$.........
04 d5 ff ff 58 00 00 00 c7 85 54 d5 ff ff d0 07 ....X.....T.....
00 00 c7 85 dc f9 ff ff 01 00 01 00 6a ff 8d 45 ............j..E
d8 50 ff 15 30 30 40 00 85 c0 0f 84 17 0a 00 00 .P..00@.........
8b 4d d8 8d 41 ff 83 f8 08 0f 87 c2 09 00 00 ff .M..A...........
24 85 0b 28 40 00 ff 75 e0 ff 75 dc 68 70 54 40 $..(@..u..u.hpT@
00 53 e8 22 fd ff ff 8b 45 e8 83 c4 10 89 45 6c .S."....E.....El
85 c0 0f 84 04 02 00 00 6a 00 6a 00 50 ff 15 80 ........j.j.P...
30 40 00 85 c0 75 19 ff d7 50 89 45 74 68 50 54 0@...u...P.EthPT
40 00 3d ff ff 00 00 76 2b 68 14 54 40 00 eb 25 @.=....v+h.T@..%
68 00 04 00 00 8d 85 24 e5 ff ff 50 ff 75 e8 ff h......$...P.u..
15 84 30 40 00 85 c0 75 17 ff d7 50 89 45 74 68 ..0@...u...P.Eth
f0 53 40 00 56 53 e8 be fc ff ff 83 c4 10 eb 15 .S@.VS..........
8d 85 24 e5 ff ff 50 68 bc 53 40 00 53 e8 a7 fc ..$...Ph.S@.S...
ff ff 83 c4 0c 83 7d 04 00 0f 84 09 01 00 00 6a ......}........j
00 6a 04 8d 45 58 50 ff 75 04 ff 75 e8 ff 15 34 .j..EXP.u..u...4
30 40 00 85 c0 75 0d ff d7 50 68 98 53 40 00 e9 0@...u...Ph.S@..
5b 01 00 00 83 7d 58 00 0f 84 da 00 00 00 6a 00 [....}X.......j.
68 08 02 00 00 8d 85 a8 fc ff ff 50 ff 75 58 ff h..........P.uX.
75 e8 ff 15 34 30 40 00 85 c0 75 17 ff d7 89 45 u...40@...u....E
74 3d 2b 01 00 00 74 0b 50 68 98 53 40 00 e9 1f t=+...t.Ph.S@...
01 00 00 66 83 7d 08 00 8d 85 a8 fc ff ff 50 74 ...f.}........Pt
4f 68 64 53 40 00 53 e8 1d fc ff ff 8b 45 f0 83 OhdS@.S......E..
c4 0c 33 c9 51 51 51 99 52 50 51 8d 85 a8 fc ff ..3.QQQ.RPQ.....
ff 50 ff 75 e4 ff 75 e8 ff 15 88 30 40 00 8b c8 .P.u..u....0@...
0b ca 0f 85 b9 00 00 00 ff d7 89 45 74 85 c0 0f ...........Et...
84 d7 00 00 00 50 68 40 53 40 00 e9 c2 00 00 00 .....Ph@S@......
68 0c 53 40 00 53 e8 ce fb ff ff 8b 45 f0 83 c4 h.S@.S......E...
0c 33 c9 51 51 51 99 52 50 51 8d 85 a8 fc ff ff .3.QQQ.RPQ......
50 ff 75 e4 ff 75 e8 ff 15 8c 30 40 00 8b c8 0b P.u..u....0@....
ca 75 6e ff d7 89 45 74 85 c0 0f 84 8c 00 00 00 .un...Et........
50 68 ec 52 40 00 eb 7a 6a 00 68 04 01 00 00 8d Ph.R@..zj.h.....
85 a8 fc ff ff 50 ff 75 e4 ff 15 38 30 40 00 89 .....P.u...80@..
45 54 85 c0 75 17 ff d7 50 68 b8 52 40 00 56 53 ET..u...Ph.R@.VS
89 45 74 e8 61 fb ff ff 83 c4 10 eb 15 8d 85 b0 .Et.a...........
fc ff ff 50 68 64 53 40 00 53 e8 4a fb ff ff 83 ...PhdS@.S.J....
c4 0c 8b 45 f0 33 c9 51 51 51 99 52 50 51 51 eb ...E.3.QQQ.RPQQ.
80 8d 8d 24 ed ff ff 51 52 50 ff 75 e8 ff 15 ac ...$...QRP.u....
30 40 00 85 c0 75 15 ff d7 50 68 90 52 40 00 89 0@...u...Ph.R@..
45 74 56 53 e8 10 fb ff ff 83 c4 10 ff 75 fc 8d EtVS.........u..
85 04 d5 ff ff 50 8d 85 24 ed ff ff 50 6a 00 ff .....P..$...Pj..
75 00 ff 75 e8 e8 b6 f9 ff ff 50 ff 75 00 ff 75 u..u......P.u..u
f0 68 f0 51 40 00 53 e8 dd fa ff ff 83 c4 18 83 .h.Q@.S.........
7d e4 ff 0f 84 6d 07 00 00 ff 75 e4 ff 15 60 30 }....m....u...`0
40 00 85 c0 0f 85 5c 07 00 00 ff d7 50 68 d8 51 @.....\.....Ph.Q
40 00 56 53 89 45 74 e8 ad fa ff ff 83 c4 10 e9 @.VS.Et.........
42 07 00 00 ff 75 e8 8d 85 04 d5 ff ff 50 8d 85 B....u.......P..
24 ed ff ff 50 6a 00 ff 75 ec ff 75 6c e8 4e f9 $...Pj..u..ul.N.
ff ff 50 ff 75 ec ff 75 dc ff 75 e0 68 30 51 40 ..P.u..u..u.h0Q@
00 53 e8 72 fa ff ff 83 c4 1c e9 07 07 00 00 ff .S.r............
75 e4 ff 75 e0 ff 75 dc 68 b8 50 40 00 53 e8 56 u..u..u.h.P@.S.V
fa ff ff 83 c4 14 ff 75 6c ff 15 90 30 40 00 85 .......ul...0@..
c0 75 15 ff d7 50 68 a0 50 40 00 56 53 89 45 74 .u...Ph.P@.VS.Et
e8 34 fa ff ff 83 c4 10 83 65 6c 00 e9 c5 06 00 .4.......el.....
00 ff 75 e4 ff 75 dc ff 75 e0 68 28 50 40 00 e9 ..u..u..u.h(P@..
a9 06 00 00 ff 75 e0 ff 75 dc 68 d0 4f 40 00 53 .....u..u.h.O@.S
e8 04 fa ff ff 83 c4 10 ff 75 6c ff 15 94 30 40 .........ul...0@
00 85 c0 75 23 ff d7 50 89 45 74 68 a0 4f 40 00 ...u#..P.Eth.O@.
3d ff ff 00 00 76 07 68 14 54 40 00 eb 01 56 53 =....v.h.T@...VS
e8 d4 f9 ff ff 83 c4 10 83 7d f4 00 0f 84 09 01 .........}......
00 00 6a 00 6a 04 8d 45 58 50 ff 75 f4 ff 75 6c ..j.j..EXP.u..ul
ff 15 34 30 40 00 85 c0 75 0d ff d7 50 68 98 53 ..40@...u...Ph.S
40 00 e9 5b 01 00 00 83 7d 58 00 0f 84 da 00 00 @..[....}X......
00 6a 00 68 08 02 00 00 8d 85 a8 fc ff ff 50 ff .j.h..........P.
75 58 ff 75 6c ff 15 34 30 40 00 85 c0 75 17 ff uX.ul..40@...u..
d7 89 45 74 3d 2b 01 00 00 74 0b 50 68 98 53 40 ..Et=+...t.Ph.S@
00 e9 1f 01 00 00 66 83 7d f8 00 8d 85 a8 fc ff ......f.}.......
ff 50 74 4f 68 70 4f 40 00 53 e8 4a f9 ff ff 8b .PtOhpO@.S.J....
45 e8 83 c4 0c 33 c9 51 51 51 99 52 50 51 8d 85 E....3.QQQ.RPQ..
a8 fc ff ff 50 ff 75 e4 ff 75 6c ff 15 88 30 40 ....P.u..ul...0@
00 8b c8 0b ca 0f 85 b9 00 00 00 ff d7 89 45 74 ..............Et
85 c0 0f 84 d7 00 00 00 50 68 40 53 40 00 e9 c2 ........Ph@S@...
00 00 00 68 40 4f 40 00 53 e8 fb f8 ff ff 8b 45 ...h@O@.S......E
e8 83 c4 0c 33 c9 51 51 51 99 52 50 51 8d 85 a8 ....3.QQQ.RPQ...
fc ff ff 50 ff 75 e4 ff 75 6c ff 15 8c 30 40 00 ...P.u..ul...0@.
8b c8 0b ca 75 6e ff d7 89 45 74 85 c0 0f 84 8c ....un...Et.....
00 00 00 50 68 ec 52 40 00 eb 7a 6a 00 68 04 01 ...Ph.R@..zj.h..
00 00 8d 85 a8 fc ff ff 50 ff 75 e4 ff 15 38 30 ........P.u...80
40 00 89 45 54 85 c0 75 17 ff d7 50 68 b8 52 40 @..ET..u...Ph.R@
00 56 53 89 45 74 e8 8e f8 ff ff 83 c4 10 eb 15 .VS.Et..........
8d 85 b0 fc ff ff 50 68 70 4f 40 00 53 e8 77 f8 ......PhpO@.S.w.
ff ff 83 c4 0c 8b 45 e8 33 c9 51 51 51 99 52 50 ......E.3.QQQ.RP
51 51 eb 80 8d 8d 24 ed ff ff 51 52 50 ff 75 6c QQ....$...QRP.ul
ff 15 ac 30 40 00 85 c0 75 15 ff d7 50 68 90 52 ...0@...u...Ph.R
40 00 89 45 74 56 53 e8 3d f8 ff ff 83 c4 10 8d @..EtVS.=.......
85 04 d5 ff ff 50 8d 85 24 ed ff ff 50 8b 45 e8 .....P..$...P.E.
99 52 50 ff 75 6c e8 e5 f6 ff ff 50 ff 75 e8 68 .RP.ul.....P.u.h
08 4f 40 00 53 e8 0f f8 ff ff 83 c4 10 e9 2d fd .O@.S.........-.
ff ff 8d 85 04 d5 ff ff 50 8d 85 24 ed ff ff 50 ........P..$...P
8b 45 e4 99 52 50 ff 75 6c e8 b2 f6 ff ff 50 ff .E..RP.ul.....P.
75 e4 ff 75 e0 ff 75 dc 68 78 4e 40 00 53 e8 d6 u..u..u.hxN@.S..
f7 ff ff 8b 45 e4 83 c4 18 99 52 50 ff 75 6c ff ....E.....RP.ul.
15 98 30 40 00 85 c0 0f 85 59 04 00 00 ff d7 50 ..0@.....Y.....P
68 50 4e 40 00 e9 f8 fc ff ff 8d 85 04 d5 ff ff hPN@............
50 8d 85 24 ed ff ff 50 8b 45 e4 99 52 50 ff 75 P..$...P.E..RP.u
6c e8 5a f6 ff ff 50 ff 75 e4 0f b7 45 ea 48 50 l.Z...P.u...E.HP
ff 75 dc ff 75 e0 68 88 4d 40 00 53 e8 78 f7 ff .u..u.h.M@.S.x..
ff 0f b7 45 ea 83 c4 1c 50 6a 40 89 45 64 ff 15 ...E....Pj@.Ed..
04 30 40 00 89 45 70 85 c0 75 0d ff d7 50 68 70 .0@..Ep..u...Php
4d 40 00 e9 9a fc ff ff 6a 00 ff 75 64 ff 75 70 M@......j..ud.up
ff 75 e4 ff 75 6c ff 15 34 30 40 00 85 c0 75 17 .u..ul..40@...u.
ff d7 50 68 98 53 40 00 56 53 89 45 74 e8 27 f7 ..Ph.S@.VS.Et.'.
ff ff 83 c4 10 eb 5b 8b 45 70 8d 50 01 8a 08 40 ......[.Ep.P...@
84 c9 75 f9 2b c2 8b c8 48 85 c9 74 2e 8b 4d 70 ..u.+...H..t..Mp
8a 0c 01 80 f9 20 74 ee 80 f9 07 74 e9 80 f9 08 ..... t....t....
74 e4 80 f9 0c 74 df 80 f9 0a 74 da 80 f9 0d 74 t....t....t....t
d5 80 f9 09 74 d0 80 f9 0b 74 cb 8b 4d 70 51 68 ....t....t..MpQh
40 4d 40 00 53 c6 44 01 01 00 e8 ca f6 ff ff 83 @M@.S.D.........
c4 0c ff 75 70 ff 15 08 30 40 00 85 c0 0f 84 53 ...up...0@.....S
03 00 00 ff d7 50 68 2c 4d 40 00 e9 f2 fb ff ff .....Ph,M@......
ff 75 e8 ff 75 e4 ff 75 dc ff 75 e0 68 b0 4c 40 .u..u..u..u.h.L@
00 53 e8 92 f6 ff ff 83 c4 18 e9 27 03 00 00 83 .S.........'....
7d e8 00 c7 45 70 a4 4c 40 00 75 07 c7 45 70 5c }...Ep.L@.u..Ep\
43 40 00 83 7d 34 00 c7 45 64 98 4c 40 00 75 07 C@..}4..Ed.L@.u.
c7 45 64 8c 4c 40 00 8d 85 04 d5 ff ff 50 8d 85 .Ed.L@.......P..
24 ed ff ff 50 8b 45 f0 99 52 50 ff 75 6c e8 0d $...P.E..RP.ul..
f5 ff ff 50 ff 75 f0 8d 45 e4 ff 75 70 ff 75 e8 ...P.u..E..up.u.
ff 75 e4 50 8d 85 24 e5 ff ff 50 e8 b0 ed ff ff .u.P..$...P.....
50 ff 75 dc ff 75 e0 ff 75 64 68 20 4b 40 00 53 P.u..u..udh K@.S
e8 14 f6 ff ff 83 c4 2c 83 7d 34 00 0f 84 a4 02 .......,.}4.....
00 00 83 7d f4 00 74 63 6a 0a 58 3b 45 f4 1b c0 ...}..tcj.X;E...
83 e0 e0 83 c0 20 50 ff 75 f4 68 ec 4a 40 00 53 ..... P.u.h.J@.S
e8 e4 f5 ff ff 83 65 70 00 83 c4 10 83 7d f4 00 ......ep.....}..
76 2c 83 7d 70 00 b8 dc 4a 40 00 74 05 b8 cc 4a v,.}p...J@.t...J
40 00 8b 4d 70 ff 74 8d f8 50 53 e8 b9 f5 ff ff @..Mp.t..PS.....
83 c4 0c ff 45 70 8b 45 70 3b 45 f4 72 d4 68 c8 ....Ep.Ep;E.r.h.
4a 40 00 53 e8 a0 f5 ff ff 59 59 8b 5d ec e9 ca J@.S.....YY.]...
00 00 00 83 7b 04 00 c7 45 64 a4 4c 40 00 75 07 ....{...Ed.L@.u.
c7 45 64 5c 43 40 00 8d 85 04 d5 ff ff 50 8d 85 .Ed\C@.......P..
24 ed ff ff 50 8b 43 0c 99 52 50 ff 75 6c e8 2d $...P.C..RP.ul.-
f4 ff ff 50 ff 73 0c 8d 85 24 e5 ff ff ff 75 64 ...P.s...$....ud
ff 73 04 ff 33 53 50 e8 d4 ec ff ff 50 68 90 49 .s..3SP.....Ph.I
40 00 ff 75 5c e8 3f f5 ff ff 8b 43 10 83 c4 20 @..u\.?....C...
85 c0 74 66 6a 0a 59 3b c8 1b c9 83 e1 e0 83 c1 ..tfj.Y;........
20 51 50 68 5c 49 40 00 ff 75 5c e8 19 f5 ff ff QPh\I@..u\.....
83 65 70 00 83 c4 10 83 7b 10 00 76 2e 83 7d 70 .ep.....{..v..}p
00 b8 dc 4a 40 00 74 05 b8 cc 4a 40 00 8b 4d 70 ...J@.t...J@..Mp
ff 74 8b 14 50 ff 75 5c e8 ec f4 ff ff 83 c4 0c .t..P.u\........
ff 45 70 8b 45 70 3b 43 10 72 d2 68 c8 4a 40 00 .Ep.Ep;C.r.h.J@.
ff 75 5c e8 d1 f4 ff ff 59 59 8b 5b 08 85 db 0f .u\.....YY.[....
85 2e ff ff ff ff 75 e0 53 6a 08 ff 15 54 30 40 ......u.Sj...T0@
00 89 45 70 85 c0 75 0d ff d7 50 68 44 49 40 00 ..Ep..u...PhDI@.
e9 23 01 00 00 8d 8d dc f9 ff ff 51 50 ff 15 5c .#.........QP..\
30 40 00 85 c0 75 1c ff d7 50 68 20 49 40 00 56 0@...u...Ph I@.V
ff 75 5c 89 45 74 e8 7e f4 ff ff 83 c4 10 e9 e0 .u\.Et.~........
00 00 00 8b 85 94 fa ff ff 8b 8d 90 fa ff ff 6a ...............j
03 89 85 b0 fe ff ff 58 33 db 89 8d d0 fe ff ff .......X3.......
8b 8d a0 fa ff ff 68 04 49 40 00 ff 75 5c 89 9d ......h.I@..u\..
b4 fe ff ff 89 85 bc fe ff ff 89 85 cc fe ff ff ................
89 9d d4 fe ff ff 89 85 dc fe ff ff 89 8d e0 fe ................
ff ff 89 9d e4 fe ff ff 89 85 ec fe ff ff e8 16 ................
f4 ff ff 59 59 53 ff 35 9c 30 40 00 ff 35 a0 30 ...YYS.5.0@..5.0
40 00 53 8b 1d a4 30 40 00 eb 49 8d 85 04 d5 ff @.S...0@..I.....
ff 50 8d 85 24 ed ff ff 50 ff b5 b4 fe ff ff ff .P..$...P.......
b5 b0 fe ff ff ff 75 6c e8 a3 f2 ff ff 50 ff b5 ......ul.....P..
b0 fe ff ff 68 d0 48 40 00 ff 75 5c e8 c8 f3 ff ....h.H@..u\....
ff 83 c4 10 6a 00 ff 35 9c 30 40 00 ff 35 a0 30 ....j..5.0@..5.0
40 00 6a 00 8d 85 dc f9 ff ff 50 8d 85 b0 fe ff @.j.......P.....
ff 50 ff 75 70 ff 75 6c 68 4c 01 00 00 ff d3 85 .P.up.ulhL......
c0 75 98 ff 75 70 ff 15 60 30 40 00 85 c0 75 26 .u..up..`0@...u&
ff d7 50 68 d8 51 40 00 56 ff 75 5c e9 c3 f8 ff ..Ph.Q@.V.u\....
ff ff 75 dc ff 75 e0 51 68 60 48 40 00 53 e8 66 ..u..u.Qh`H@.S.f
f3 ff ff 83 c4 14 8b 45 d8 48 f7 d8 1b c0 25 01 .......E.H....%.
00 00 80 05 01 00 01 80 50 ff 75 e0 ff 75 dc ff ........P.u..u..
15 58 30 40 00 85 c0 74 18 83 7d 6c 00 8b 5d 5c .X0@...t..}l..]\
74 27 e9 d5 f5 ff ff ff d7 50 68 38 48 40 00 eb t'.......Ph8H@..
0b ff d7 8b 5d 5c 50 68 10 48 40 00 56 53 89 45 ....]\Ph.H@.VS.E
74 e8 13 f3 ff ff 83 c4 10 68 c8 4a 40 00 53 e8 t........h.J@.S.
05 f3 ff ff 59 59 6a ff ff 75 3c ff 15 00 30 40 ....YYj..u<...0@
00 83 f8 ff 75 15 ff d7 50 68 e8 47 40 00 56 53 ....u...Ph.G@.VS
89 45 74 e8 e1 f2 ff ff 83 c4 10 8d 45 68 50 ff .Et.........EhP.
75 3c ff 15 50 30 40 00 85 c0 75 17 ff d7 50 68 u<..P0@...u...Ph
c4 47 40 00 56 53 89 45 74 e8 bb f2 ff ff 83 c4 .G@.VS.Et.......
10 eb 27 81 7d 68 ff ff 00 00 ff 75 68 ff 75 40 ..'.}h.....uh.u@
ff 75 44 76 07 68 38 47 40 00 eb 05 68 b0 46 40 .uDv.h8G@...h.F@
00 53 e8 92 f2 ff ff 83 c4 14 8d 45 d0 50 8d 45 .S.........E.P.E
c8 50 8d 45 c0 50 8d 45 b8 50 ff 75 3c ff 15 4c .P.E.P.E.P.u<..L
30 40 00 85 c0 75 17 ff d7 50 68 8c 46 40 00 56 0@...u...Ph.F@.V
53 89 45 74 e8 60 f2 ff ff 83 c4 10 eb 61 68 5c S.Et.`.......ah\
46 40 00 53 e8 50 f2 ff ff 8b 45 b8 29 45 c0 8b F@.S.P....E.)E..
45 bc 59 19 45 c4 59 c7 45 68 01 00 00 00 8b 45 E.Y.E.Y.Eh.....E
68 8b 4c c5 bc 8b 44 c5 b8 89 4d 64 89 45 70 8b h.L...D...Md.Ep.
45 70 8b 55 64 b9 80 96 98 00 f7 f1 52 50 8b 45 Ep.Ud.......RP.E
68 ff 34 85 bc 31 40 00 68 30 46 40 00 53 e8 06 h.4..1@.h0F@.S..
f2 ff ff 83 c4 14 ff 45 68 83 7d 68 04 72 bf ff .......Eh.}h.r..
75 3c ff 15 60 30 40 00 85 c0 75 15 ff d7 50 68 u<..`0@...u...Ph
d8 51 40 00 56 53 89 45 74 e8 db f1 ff ff 83 c4 .Q@.VS.Et.......
10 6a ff ff 75 38 ff 15 00 30 40 00 83 f8 ff 75 .j..u8...0@....u
15 ff d7 50 68 e8 47 40 00 56 53 89 45 74 e8 b6 ...Ph.G@.VS.Et..
f1 ff ff 83 c4 10 8d 45 60 50 ff 75 38 ff 15 48 .......E`P.u8..H
30 40 00 85 c0 75 0e ff d7 50 68 08 46 40 00 89 0@...u...Ph.F@..
45 74 56 eb 1b 81 7d 60 ff ff 00 00 ff 75 60 ff EtV...}`.....u`.
75 40 76 07 68 a8 45 40 00 eb 05 68 50 45 40 00 u@v.h.E@...hPE@.
53 e8 73 f1 ff ff 83 c4 10 8d 45 d0 50 8d 45 c8 S.s.......E.P.E.
50 8d 45 c0 50 8d 45 b8 50 ff 75 38 ff 15 44 30 P.E.P.E.P.u8..D0
40 00 85 c0 75 17 ff d7 50 68 2c 45 40 00 56 53 @...u...Ph,E@.VS
89 45 74 e8 41 f1 ff ff 83 c4 10 eb 61 68 f8 44 .Et.A.......ah.D
40 00 53 e8 31 f1 ff ff 8b 45 b8 29 45 c0 8b 45 @.S.1....E.)E..E
bc 59 19 45 c4 59 c7 45 60 01 00 00 00 8b 45 60 .Y.E.Y.E`.....E`
8b 4c c5 bc 8b 44 c5 b8 89 4d 64 89 45 70 8b 45 .L...D...Md.Ep.E
70 8b 55 64 b9 80 96 98 00 f7 f1 52 50 8b 45 60 p.Ud.......RP.E`
ff 34 85 bc 31 40 00 68 30 46 40 00 53 e8 e7 f0 .4..1@.h0F@.S...
ff ff 83 c4 14 ff 45 60 83 7d 60 04 72 bf ff 75 ......E`.}`.r..u
38 ff 15 60 30 40 00 85 c0 75 1a ff d7 50 68 d8 8..`0@...u...Ph.
51 40 00 e9 7a f2 ff ff 68 60 43 40 00 53 e8 b6 Q@..z...h`C@.S..
f0 ff ff 59 59 ff 75 4c ff 15 08 30 40 00 85 c0 ...YY.uL...0@...
74 12 ff d7 50 68 2c 4d 40 00 56 53 e8 98 f0 ff t...Ph,M@.VS....
ff 83 c4 10 53 ff 15 60 30 40 00 85 c0 75 12 ff ....S..`0@...u..
d7 50 68 d8 51 40 00 56 53 e8 7b f0 ff ff 83 c4 .Ph.Q@.VS.{.....
10 ff 75 74 ff 15 40 30 40 00 90 ef 21 40 00 d4 ..ut..@0@...!@..
1d 40 00 46 1b 40 00 51 1e 40 00 0f 1e 40 00 64 .@.F.@.Q.@...@.d
1e 40 00 72 20 40 00 ca 20 40 00 d0 21 40 00 55 .@.r @.. @..!@.U
8b ec 51 8b 45 08 53 56 33 f6 57 8b f8 89 75 08 ..Q.E.SV3.W...u.
89 75 fc 39 75 0c 0f 84 50 01 00 00 3b c6 0f 84 .u.9u...P...;...
48 01 00 00 0f b7 08 66 3b ce 0f 84 3c 01 00 00 H......f;...<...
83 f9 20 74 0a 83 f9 09 74 05 33 db 43 eb 02 33 .. t....t.3.C..3
db 39 75 08 75 2b 66 83 f9 20 74 06 66 83 f9 09 .9u.u+f.. t.f...
75 1f 83 c0 02 0f b7 08 83 f9 20 74 f5 83 f9 09 u......... t....
74 f0 33 c9 66 39 30 89 75 fc 0f 95 c1 03 d9 eb t.3.f90.u.......
21 66 83 f9 5c 75 05 f7 55 fc eb 13 39 75 fc 75 !f..\u..U...9u.u
0b 66 83 f9 22 75 05 f7 55 08 eb 03 89 75 fc 83 .f.."u..U....u..
c0 02 0f b7 08 66 3b ce 75 a7 2b c7 83 c0 02 d1 .....f;.u.+.....
f8 8d 44 58 02 03 c0 50 6a 40 ff 15 04 30 40 00 ..DX...Pj@...0@.
8b f0 33 d2 3b f2 0f 84 b8 00 00 00 8d 44 9e 04 ..3.;........D..
89 06 89 55 08 33 db 83 7d 08 00 75 31 0f b7 0f ...U.3..}..u1...
83 f9 20 74 05 83 f9 09 75 24 33 c9 66 89 08 83 .. t....u$3.f...
c7 02 0f b7 0f 83 f9 20 74 f5 83 f9 09 74 f0 33 ....... t....t.3
d2 66 39 17 74 4d 43 8b c7 89 3c 9e eb 45 0f b7 .f9.tMC...<..E..
0f 83 f9 5c 75 0c 66 89 08 83 c0 02 83 c7 02 42 ...\u.f........B
eb 31 83 f9 22 75 21 8d 4a 01 d1 e9 f7 d9 8d 04 .1.."u!.J.......
48 f6 c2 01 75 0f 83 c7 02 66 83 3f 22 75 38 83 H...u....f.?"u8.
7d 08 00 74 32 6a 22 59 66 89 08 83 c0 02 83 c7 }..t2j"Yf.......
02 33 d2 66 83 3f 00 0f 85 7a ff ff ff 33 c9 43 .3.f.?...z...3.C
66 89 08 21 0c 9e 8b 45 0c 89 18 39 4d 08 74 14 f..!...E...9M.t.
68 a0 00 00 00 eb 07 f7 55 08 eb d5 6a 57 ff 15 h.......U...jW..
0c 30 40 00 5f 8b c6 5e 5b c9 c2 08 00 00 00 00 .0@._..^[.......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
3a 5b 00 00 94 5b 00 00 88 5b 00 00 98 5c 00 00 :[...[...[...\..
88 5c 00 00 78 5c 00 00 66 5c 00 00 54 5c 00 00 .\..x\..f\..T\..
42 5c 00 00 24 5c 00 00 10 5c 00 00 f4 5b 00 00 B\..$\...\...[..
e0 5b 00 00 cc 5b 00 00 b0 5b 00 00 ce 5a 00 00 .[...[...[...Z..
de 5a 00 00 ec 5a 00 00 fe 5a 00 00 14 5b 00 00 .Z...Z...Z...[..
26 5b 00 00 7a 5b 00 00 50 5b 00 00 66 5b 00 00 &[..z[..P[..f[..
a2 5b 00 00 00 00 00 00 c2 5c 00 00 b6 5c 00 00 .[.......\...\..
00 00 00 00 ac 5a 00 00 9c 5a 00 00 8c 5a 00 00 .....Z...Z...Z..
7a 5a 00 00 66 5a 00 00 52 5a 00 00 40 5a 00 00 zZ..fZ..RZ..@Z..
32 5a 00 00 1a 5a 00 00 06 5a 00 00 f0 59 00 00 2Z...Z...Z...Y..
d4 59 00 00 c6 59 00 00 b6 59 00 00 a0 59 00 00 .Y...Y...Y...Y..
00 00 00 00 00 00 00 00 55 00 73 00 65 00 72 00 ........U.s.e.r.
20 00 20 00 00 00 00 00 4b 00 65 00 72 00 6e 00 . .....K.e.r.n.
65 00 6c 00 00 00 00 00 52 00 65 00 61 00 6c 00 e.l.....R.e.a.l.
20 00 20 00 00 00 00 00 36 00 34 00 2d 00 62 00 . .....6.4.-.b.
69 00 74 00 20 00 57 00 69 00 6e 00 64 00 6f 00 i.t. .W.i.n.d.o.
77 00 73 00 00 00 00 00 31 00 36 00 2d 00 62 00 w.s.....1.6.-.b.
69 00 74 00 20 00 4f 00 53 00 2f 00 32 00 00 00 i.t. .O.S./.2...
50 00 4f 00 53 00 49 00 58 00 00 00 2e 00 50 00 P.O.S.I.X.....P.
49 00 46 00 20 00 66 00 6f 00 72 00 20 00 4d 00 I.F. .f.o.r. .M.
53 00 2d 00 44 00 4f 00 53 00 00 00 31 00 36 00 S.-.D.O.S...1.6.
2d 00 62 00 69 00 74 00 20 00 57 00 69 00 6e 00 -.b.i.t. .W.i.n.
64 00 6f 00 77 00 73 00 00 00 00 00 4d 00 53 00 d.o.w.s.....M.S.
2d 00 44 00 4f 00 53 00 00 00 00 00 33 00 32 00 -.D.O.S.....3.2.
2d 00 62 00 69 00 74 00 20 00 57 00 69 00 6e 00 -.b.i.t. .W.i.n.
64 00 6f 00 77 00 73 00 00 00 00 00 00 00 00 00 d.o.w.s.........
7c 31 40 00 6c 31 40 00 4c 31 40 00 2c 31 40 00 |1@.l1@.L1@.,1@.
20 31 40 00 08 31 40 00 e8 30 40 00 00 00 00 00 1@..1@..0@.....
d8 30 40 00 c8 30 40 00 b8 30 40 00 00 00 00 00 .0@..0@..0@.....
44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D...............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 72 00 65 00 61 00 64 00 69 00 6e 00 ....r.e.a.d.i.n.
67 00 00 00 77 00 72 00 69 00 74 00 69 00 6e 00 g...w.r.i.t.i.n.
67 00 00 00 65 00 78 00 65 00 63 00 75 00 74 00 g...e.x.e.c.u.t.
69 00 6e 00 67 00 00 00 61 00 63 00 63 00 65 00 i.n.g...a.c.c.e.
73 00 73 00 69 00 6e 00 67 00 00 00 41 00 70 00 s.s.i.n.g...A.p.
70 00 6c 00 69 00 63 00 61 00 74 00 69 00 6f 00 p.l.i.c.a.t.i.o.
6e 00 20 00 68 00 61 00 6e 00 67 00 00 00 00 00 n. .h.a.n.g.....
2e 00 4e 00 45 00 54 00 20 00 43 00 4c 00 52 00 ..N.E.T. .C.L.R.
20 00 65 00 78 00 63 00 65 00 70 00 74 00 69 00 .e.x.c.e.p.t.i.
6f 00 6e 00 00 00 00 00 53 00 45 00 48 00 20 00 o.n.....S.E.H. .
76 00 65 00 72 00 69 00 66 00 69 00 63 00 61 00 v.e.r.i.f.i.c.a.
74 00 69 00 6f 00 6e 00 20 00 65 00 78 00 63 00 t.i.o.n. .e.x.c.
65 00 70 00 74 00 69 00 6f 00 6e 00 00 00 00 00 e.p.t.i.o.n.....
43 00 2b 00 2b 00 20 00 65 00 78 00 63 00 65 00 C.+.+. .e.x.c.e.
70 00 74 00 69 00 6f 00 6e 00 00 00 3c 00 6e 00 p.t.i.o.n...<.n.
6f 00 74 00 20 00 61 00 76 00 61 00 69 00 6c 00 o.t. .a.v.a.i.l.
61 00 62 00 6c 00 65 00 3e 00 00 00 00 00 00 00 a.b.l.e.>.......
44 00 65 00 6c 00 61 00 79 00 2d 00 6c 00 6f 00 D.e.l.a.y.-.l.o.
61 00 64 00 20 00 65 00 78 00 63 00 65 00 70 00 a.d. .e.x.c.e.p.
74 00 69 00 6f 00 6e 00 20 00 28 00 6f 00 72 00 t.i.o.n. .(.o.r.
64 00 69 00 6e 00 61 00 6c 00 20 00 6e 00 6f 00 d.i.n.a.l. .n.o.
74 00 20 00 66 00 6f 00 75 00 6e 00 64 00 29 00 t. .f.o.u.n.d.).
00 00 00 00 00 00 00 00 44 00 65 00 6c 00 61 00 ........D.e.l.a.
79 00 2d 00 6c 00 6f 00 61 00 64 00 20 00 65 00 y.-.l.o.a.d. .e.
78 00 63 00 65 00 70 00 74 00 69 00 6f 00 6e 00 x.c.e.p.t.i.o.n.
20 00 28 00 6f 00 72 00 64 00 69 00 6e 00 61 00 .(.o.r.d.i.n.a.
6c 00 20 00 25 00 6c 00 75 00 20 00 6e 00 6f 00 l. .%.l.u. .n.o.
74 00 20 00 66 00 6f 00 75 00 6e 00 64 00 20 00 t. .f.o.u.n.d. .
69 00 6e 00 20 00 6d 00 6f 00 64 00 75 00 6c 00 i.n. .m.o.d.u.l.
65 00 20 00 25 00 68 00 73 00 3b 00 20 00 30 00 e. .%.h.s.;. .0.
78 00 25 00 30 00 38 00 6c 00 58 00 29 00 00 00 x.%.0.8.l.X.)...
44 00 65 00 6c 00 61 00 79 00 2d 00 6c 00 6f 00 D.e.l.a.y.-.l.o.
61 00 64 00 20 00 65 00 78 00 63 00 65 00 70 00 a.d. .e.x.c.e.p.
74 00 69 00 6f 00 6e 00 20 00 28 00 65 00 6e 00 t.i.o.n. .(.e.n.
74 00 72 00 79 00 20 00 6e 00 6f 00 74 00 20 00 t.r.y. .n.o.t. .
66 00 6f 00 75 00 6e 00 64 00 29 00 00 00 00 00 f.o.u.n.d.).....
44 00 65 00 6c 00 61 00 79 00 2d 00 6c 00 6f 00 D.e.l.a.y.-.l.o.
61 00 64 00 20 00 65 00 78 00 63 00 65 00 70 00 a.d. .e.x.c.e.p.
74 00 69 00 6f 00 6e 00 20 00 28 00 65 00 6e 00 t.i.o.n. .(.e.n.
74 00 72 00 79 00 20 00 25 00 68 00 73 00 20 00 t.r.y. .%.h.s. .
6e 00 6f 00 74 00 20 00 66 00 6f 00 75 00 6e 00 n.o.t. .f.o.u.n.
64 00 20 00 69 00 6e 00 20 00 6d 00 6f 00 64 00 d. .i.n. .m.o.d.
75 00 6c 00 65 00 20 00 25 00 68 00 73 00 3b 00 u.l.e. .%.h.s.;.
20 00 30 00 78 00 25 00 30 00 38 00 6c 00 58 00 .0.x.%.0.8.l.X.
29 00 00 00 44 00 69 00 73 00 6b 00 20 00 71 00 )...D.i.s.k. .q.
75 00 6f 00 74 00 61 00 20 00 65 00 78 00 63 00 u.o.t.a. .e.x.c.
65 00 65 00 64 00 65 00 64 00 00 00 00 00 00 00 e.e.d.e.d.......
44 00 65 00 6c 00 61 00 79 00 2d 00 6c 00 6f 00 D.e.l.a.y.-.l.o.
61 00 64 00 20 00 65 00 78 00 63 00 65 00 70 00 a.d. .e.x.c.e.p.
74 00 69 00 6f 00 6e 00 20 00 28 00 69 00 6e 00 t.i.o.n. .(.i.n.
76 00 61 00 6c 00 69 00 64 00 20 00 70 00 61 00 v.a.l.i.d. .p.a.
72 00 61 00 6d 00 65 00 74 00 65 00 72 00 29 00 r.a.m.e.t.e.r.).
00 00 00 00 00 00 00 00 44 00 65 00 6c 00 61 00 ........D.e.l.a.
79 00 2d 00 6c 00 6f 00 61 00 64 00 20 00 65 00 y.-.l.o.a.d. .e.
78 00 63 00 65 00 70 00 74 00 69 00 6f 00 6e 00 x.c.e.p.t.i.o.n.
20 00 28 00 6d 00 6f 00 64 00 75 00 6c 00 65 00 .(.m.o.d.u.l.e.
20 00 25 00 68 00 73 00 20 00 6e 00 6f 00 74 00 .%.h.s. .n.o.t.
20 00 66 00 6f 00 75 00 6e 00 64 00 3b 00 20 00 .f.o.u.n.d.;. .
30 00 78 00 25 00 30 00 38 00 6c 00 58 00 29 00 0.x.%.0.8.l.X.).
00 00 00 00 46 00 61 00 69 00 6c 00 2d 00 66 00 ....F.a.i.l.-.f.
61 00 73 00 74 00 20 00 65 00 78 00 63 00 65 00 a.s.t. .e.x.c.e.
70 00 74 00 69 00 6f 00 6e 00 00 00 00 00 00 00 p.t.i.o.n.......
43 00 20 00 72 00 75 00 6e 00 74 00 69 00 6d 00 C. .r.u.n.t.i.m.
65 00 20 00 65 00 78 00 63 00 65 00 70 00 74 00 e. .e.x.c.e.p.t.
69 00 6f 00 6e 00 20 00 28 00 69 00 6e 00 76 00 i.o.n. .(.i.n.v.
61 00 6c 00 69 00 64 00 20 00 70 00 61 00 72 00 a.l.i.d. .p.a.r.
61 00 6d 00 65 00 74 00 65 00 72 00 29 00 00 00 a.m.e.t.e.r.)...
55 00 6e 00 68 00 61 00 6e 00 64 00 6c 00 65 00 U.n.h.a.n.d.l.e.
64 00 20 00 65 00 78 00 63 00 65 00 70 00 74 00 d. .e.x.c.e.p.t.
69 00 6f 00 6e 00 20 00 64 00 75 00 72 00 69 00 i.o.n. .d.u.r.i.
6e 00 67 00 20 00 75 00 73 00 65 00 72 00 20 00 n.g. .u.s.e.r. .
63 00 61 00 6c 00 6c 00 62 00 61 00 63 00 6b 00 c.a.l.l.b.a.c.k.
00 00 00 00 41 00 73 00 73 00 65 00 72 00 74 00 ....A.s.s.e.r.t.
69 00 6f 00 6e 00 20 00 66 00 61 00 69 00 6c 00 i.o.n. .f.a.i.l.
65 00 64 00 00 00 00 00 41 00 70 00 70 00 6c 00 e.d.....A.p.p.l.
69 00 63 00 61 00 74 00 69 00 6f 00 6e 00 20 00 i.c.a.t.i.o.n. .
76 00 65 00 72 00 69 00 66 00 69 00 65 00 72 00 v.e.r.i.f.i.e.r.
20 00 73 00 74 00 6f 00 70 00 00 00 00 00 00 00 .s.t.o.p.......
42 00 75 00 66 00 66 00 65 00 72 00 20 00 6f 00 B.u.f.f.e.r. .o.
76 00 65 00 72 00 72 00 75 00 6e 00 20 00 6f 00 v.e.r.r.u.n. .o.
6e 00 20 00 73 00 74 00 61 00 63 00 6b 00 20 00 n. .s.t.a.c.k. .
28 00 73 00 74 00 61 00 63 00 6b 00 20 00 63 00 (.s.t.a.c.k. .c.
6f 00 72 00 72 00 75 00 70 00 74 00 69 00 6f 00 o.r.r.u.p.t.i.o.
6e 00 29 00 00 00 00 00 33 00 32 00 2d 00 62 00 n.).....3.2.-.b.
69 00 74 00 20 00 69 00 6d 00 61 00 67 00 65 00 i.t. .i.m.a.g.e.
20 00 69 00 6e 00 20 00 36 00 34 00 2d 00 62 00 .i.n. .6.4.-.b.
69 00 74 00 20 00 70 00 72 00 6f 00 63 00 65 00 i.t. .p.r.o.c.e.
73 00 73 00 00 00 00 00 36 00 34 00 2d 00 62 00 s.s.....6.4.-.b.
69 00 74 00 20 00 69 00 6d 00 61 00 67 00 65 00 i.t. .i.m.a.g.e.
20 00 69 00 6e 00 20 00 33 00 32 00 2d 00 62 00 .i.n. .3.2.-.b.
69 00 74 00 20 00 70 00 72 00 6f 00 63 00 65 00 i.t. .p.r.o.c.e.
73 00 73 00 00 00 00 00 48 00 65 00 61 00 70 00 s.s.....H.e.a.p.
20 00 63 00 6f 00 72 00 72 00 75 00 70 00 74 00 .c.o.r.r.u.p.t.
69 00 6f 00 6e 00 00 00 52 00 65 00 67 00 69 00 i.o.n...R.e.g.i.
73 00 74 00 65 00 72 00 20 00 4e 00 61 00 54 00 s.t.e.r. .N.a.T.
20 00 63 00 6f 00 6e 00 73 00 75 00 6d 00 70 00 .c.o.n.s.u.m.p.
74 00 69 00 6f 00 6e 00 20 00 66 00 61 00 75 00 t.i.o.n. .f.a.u.
6c 00 74 00 00 00 00 00 43 00 6c 00 6f 00 73 00 l.t.....C.l.o.s.
65 00 20 00 70 00 72 00 6f 00 74 00 65 00 63 00 e. .p.r.o.t.e.c.
74 00 65 00 64 00 20 00 68 00 61 00 6e 00 64 00 t.e.d. .h.a.n.d.
6c 00 65 00 00 00 00 00 4d 00 75 00 6c 00 74 00 l.e.....M.u.l.t.
69 00 70 00 6c 00 65 00 20 00 66 00 6c 00 6f 00 i.p.l.e. .f.l.o.
61 00 74 00 69 00 6e 00 67 00 2d 00 70 00 6f 00 a.t.i.n.g.-.p.o.
69 00 6e 00 74 00 20 00 66 00 61 00 75 00 6c 00 i.n.t. .f.a.u.l.
74 00 73 00 00 00 00 00 4d 00 75 00 6c 00 74 00 t.s.....M.u.l.t.
69 00 70 00 6c 00 65 00 20 00 66 00 6c 00 6f 00 i.p.l.e. .f.l.o.
61 00 74 00 69 00 6e 00 67 00 2d 00 70 00 6f 00 a.t.i.n.g.-.p.o.
69 00 6e 00 74 00 20 00 74 00 72 00 61 00 70 00 i.n.t. .t.r.a.p.
73 00 00 00 41 00 6c 00 69 00 67 00 6e 00 6d 00 s...A.l.i.g.n.m.
65 00 6e 00 74 00 20 00 65 00 72 00 72 00 6f 00 e.n.t. .e.r.r.o.
72 00 00 00 50 00 6f 00 73 00 73 00 69 00 62 00 r...P.o.s.s.i.b.
6c 00 65 00 20 00 64 00 65 00 61 00 64 00 6c 00 l.e. .d.e.a.d.l.
6f 00 63 00 6b 00 00 00 44 00 4c 00 4c 00 20 00 o.c.k...D.L.L. .
69 00 6e 00 69 00 74 00 69 00 61 00 6c 00 69 00 i.n.i.t.i.a.l.i.
73 00 61 00 74 00 69 00 6f 00 6e 00 20 00 66 00 s.a.t.i.o.n. .f.
61 00 69 00 6c 00 65 00 64 00 00 00 55 00 6e 00 a.i.l.e.d...U.n.
68 00 61 00 6e 00 64 00 6c 00 65 00 64 00 20 00 h.a.n.d.l.e.d. .
65 00 78 00 63 00 65 00 70 00 74 00 69 00 6f 00 e.x.c.e.p.t.i.o.
6e 00 00 00 4e 00 6f 00 20 00 66 00 6c 00 6f 00 n...N.o. .f.l.o.
61 00 74 00 69 00 6e 00 67 00 2d 00 70 00 6f 00 a.t.i.n.g.-.p.o.
69 00 6e 00 74 00 20 00 68 00 61 00 72 00 64 00 i.n.t. .h.a.r.d.
77 00 61 00 72 00 65 00 00 00 00 00 53 00 74 00 w.a.r.e.....S.t.
61 00 63 00 6b 00 20 00 6f 00 76 00 65 00 72 00 a.c.k. .o.v.e.r.
66 00 6c 00 6f 00 77 00 00 00 00 00 44 00 4c 00 f.l.o.w.....D.L.
4c 00 20 00 6e 00 6f 00 74 00 20 00 66 00 6f 00 L. .n.o.t. .f.o.
75 00 6e 00 64 00 00 00 4f 00 72 00 64 00 69 00 u.n.d...O.r.d.i.
6e 00 61 00 6c 00 20 00 6e 00 6f 00 74 00 20 00 n.a.l. .n.o.t. .
66 00 6f 00 75 00 6e 00 64 00 00 00 45 00 6e 00 f.o.u.n.d...E.n.
74 00 72 00 79 00 70 00 6f 00 69 00 6e 00 74 00 t.r.y.p.o.i.n.t.
20 00 6e 00 6f 00 74 00 20 00 66 00 6f 00 75 00 .n.o.t. .f.o.u.
6e 00 64 00 00 00 00 00 49 00 6e 00 73 00 74 00 n.d.....I.n.s.t.
72 00 75 00 63 00 74 00 69 00 6f 00 6e 00 20 00 r.u.c.t.i.o.n. .
6d 00 69 00 73 00 61 00 6c 00 69 00 67 00 6e 00 m.i.s.a.l.i.g.n.
6d 00 65 00 6e 00 74 00 00 00 00 00 50 00 72 00 m.e.n.t.....P.r.
69 00 76 00 69 00 6c 00 65 00 67 00 65 00 64 00 i.v.i.l.e.g.e.d.
20 00 69 00 6e 00 73 00 74 00 72 00 75 00 63 00 .i.n.s.t.r.u.c.
74 00 69 00 6f 00 6e 00 00 00 00 00 49 00 6e 00 t.i.o.n.....I.n.
74 00 65 00 67 00 65 00 72 00 20 00 6f 00 76 00 t.e.g.e.r. .o.v.
65 00 72 00 66 00 6c 00 6f 00 77 00 00 00 00 00 e.r.f.l.o.w.....
49 00 6e 00 74 00 65 00 67 00 65 00 72 00 20 00 I.n.t.e.g.e.r. .
64 00 69 00 76 00 69 00 64 00 65 00 2d 00 62 00 d.i.v.i.d.e.-.b.
79 00 2d 00 7a 00 65 00 72 00 6f 00 00 00 00 00 y.-.z.e.r.o.....
46 00 6c 00 6f 00 61 00 74 00 69 00 6e 00 67 00 F.l.o.a.t.i.n.g.
2d 00 70 00 6f 00 69 00 6e 00 74 00 20 00 75 00 -.p.o.i.n.t. .u.
6e 00 64 00 65 00 72 00 66 00 6c 00 6f 00 77 00 n.d.e.r.f.l.o.w.
00 00 00 00 46 00 6c 00 6f 00 61 00 74 00 69 00 ....F.l.o.a.t.i.
6e 00 67 00 2d 00 70 00 6f 00 69 00 6e 00 74 00 n.g.-.p.o.i.n.t.
20 00 73 00 74 00 61 00 63 00 6b 00 20 00 63 00 .s.t.a.c.k. .c.
68 00 65 00 63 00 6b 00 00 00 00 00 46 00 6c 00 h.e.c.k.....F.l.
6f 00 61 00 74 00 69 00 6e 00 67 00 2d 00 70 00 o.a.t.i.n.g.-.p.
6f 00 69 00 6e 00 74 00 20 00 6f 00 76 00 65 00 o.i.n.t. .o.v.e.
72 00 66 00 6c 00 6f 00 77 00 00 00 00 00 00 00 r.f.l.o.w.......
49 00 6e 00 76 00 61 00 6c 00 69 00 64 00 20 00 I.n.v.a.l.i.d. .
66 00 6c 00 6f 00 61 00 74 00 69 00 6e 00 67 00 f.l.o.a.t.i.n.g.
2d 00 70 00 6f 00 69 00 6e 00 74 00 20 00 6f 00 -.p.o.i.n.t. .o.
70 00 65 00 72 00 61 00 74 00 69 00 6f 00 6e 00 p.e.r.a.t.i.o.n.
00 00 00 00 49 00 6e 00 65 00 78 00 61 00 63 00 ....I.n.e.x.a.c.
74 00 20 00 66 00 6c 00 6f 00 61 00 74 00 69 00 t. .f.l.o.a.t.i.
6e 00 67 00 2d 00 70 00 6f 00 69 00 6e 00 74 00 n.g.-.p.o.i.n.t.
20 00 72 00 65 00 73 00 75 00 6c 00 74 00 00 00 .r.e.s.u.l.t...
46 00 6c 00 6f 00 61 00 74 00 69 00 6e 00 67 00 F.l.o.a.t.i.n.g.
2d 00 70 00 6f 00 69 00 6e 00 74 00 20 00 64 00 -.p.o.i.n.t. .d.
69 00 76 00 69 00 64 00 65 00 2d 00 62 00 79 00 i.v.i.d.e.-.b.y.
2d 00 7a 00 65 00 72 00 6f 00 00 00 00 00 00 00 -.z.e.r.o.......
44 00 65 00 6e 00 6f 00 72 00 6d 00 61 00 6c 00 D.e.n.o.r.m.a.l.
20 00 66 00 6c 00 6f 00 61 00 74 00 69 00 6e 00 .f.l.o.a.t.i.n.
67 00 2d 00 70 00 6f 00 69 00 6e 00 74 00 20 00 g.-.p.o.i.n.t. .
6f 00 70 00 65 00 72 00 61 00 6e 00 64 00 00 00 o.p.e.r.a.n.d...
41 00 72 00 72 00 61 00 79 00 20 00 62 00 6f 00 A.r.r.a.y. .b.o.
75 00 6e 00 64 00 73 00 20 00 65 00 78 00 63 00 u.n.d.s. .e.x.c.
65 00 65 00 64 00 65 00 64 00 00 00 49 00 6e 00 e.e.d.e.d...I.n.
76 00 61 00 6c 00 69 00 64 00 20 00 64 00 69 00 v.a.l.i.d. .d.i.
73 00 70 00 6f 00 73 00 69 00 74 00 69 00 6f 00 s.p.o.s.i.t.i.o.
6e 00 00 00 4f 00 62 00 6a 00 65 00 63 00 74 00 n...O.b.j.e.c.t.
20 00 6e 00 61 00 6d 00 65 00 20 00 6e 00 6f 00 .n.a.m.e. .n.o.
74 00 20 00 66 00 6f 00 75 00 6e 00 64 00 00 00 t. .f.o.u.n.d...
4f 00 62 00 6a 00 65 00 63 00 74 00 20 00 70 00 O.b.j.e.c.t. .p.
61 00 74 00 68 00 20 00 6e 00 6f 00 74 00 20 00 a.t.h. .n.o.t. .
66 00 6f 00 75 00 6e 00 64 00 00 00 50 00 72 00 f.o.u.n.d...P.r.
6f 00 63 00 65 00 64 00 75 00 72 00 65 00 20 00 o.c.e.d.u.r.e. .
6e 00 6f 00 74 00 20 00 66 00 6f 00 75 00 6e 00 n.o.t. .f.o.u.n.
64 00 00 00 4e 00 6f 00 6e 00 2d 00 63 00 6f 00 d...N.o.n.-.c.o.
6e 00 74 00 69 00 6e 00 75 00 61 00 62 00 6c 00 n.t.i.n.u.a.b.l.
65 00 00 00 49 00 6e 00 76 00 61 00 6c 00 69 00 e...I.n.v.a.l.i.
64 00 20 00 68 00 61 00 6e 00 64 00 6c 00 65 00 d. .h.a.n.d.l.e.
00 00 00 00 49 00 6e 00 76 00 61 00 6c 00 69 00 ....I.n.v.a.l.i.
64 00 20 00 70 00 61 00 72 00 61 00 6d 00 65 00 d. .p.a.r.a.m.e.
74 00 65 00 72 00 00 00 4e 00 6f 00 74 00 20 00 t.e.r...N.o.t. .
65 00 6e 00 6f 00 75 00 67 00 68 00 20 00 71 00 e.n.o.u.g.h. .q.
75 00 6f 00 74 00 61 00 20 00 28 00 6e 00 6f 00 u.o.t.a. .(.n.o.
20 00 76 00 69 00 72 00 74 00 75 00 61 00 6c 00 .v.i.r.t.u.a.l.
20 00 6d 00 65 00 6d 00 6f 00 72 00 79 00 29 00 .m.e.m.o.r.y.).
00 00 00 00 49 00 6c 00 6c 00 65 00 67 00 61 00 ....I.l.l.e.g.a.
6c 00 20 00 69 00 6e 00 73 00 74 00 72 00 75 00 l. .i.n.s.t.r.u.
63 00 74 00 69 00 6f 00 6e 00 00 00 41 00 63 00 c.t.i.o.n...A.c.
63 00 65 00 73 00 73 00 20 00 64 00 65 00 6e 00 c.e.s.s. .d.e.n.
69 00 65 00 64 00 00 00 49 00 6e 00 2d 00 70 00 i.e.d...I.n.-.p.
61 00 67 00 65 00 20 00 65 00 72 00 72 00 6f 00 a.g.e. .e.r.r.o.
72 00 00 00 00 00 00 00 49 00 6e 00 2d 00 70 00 r.......I.n.-.p.
61 00 67 00 65 00 20 00 65 00 72 00 72 00 6f 00 a.g.e. .e.r.r.o.
72 00 20 00 25 00 6c 00 73 00 20 00 30 00 78 00 r. .%.l.s. .0.x.
25 00 70 00 20 00 28 00 30 00 78 00 25 00 30 00 %.p. .(.0.x.%.0.
38 00 6c 00 58 00 29 00 00 00 00 00 52 00 50 00 8.l.X.).....R.P.
43 00 20 00 6f 00 70 00 65 00 72 00 61 00 74 00 C. .o.p.e.r.a.t.
69 00 6f 00 6e 00 20 00 6e 00 6f 00 74 00 20 00 i.o.n. .n.o.t. .
73 00 75 00 70 00 70 00 6f 00 72 00 74 00 65 00 s.u.p.p.o.r.t.e.
64 00 00 00 52 00 50 00 43 00 20 00 6e 00 75 00 d...R.P.C. .n.u.
6c 00 6c 00 20 00 63 00 6f 00 6e 00 74 00 65 00 l.l. .c.o.n.t.e.
78 00 74 00 20 00 68 00 61 00 6e 00 64 00 6c 00 x.t. .h.a.n.d.l.
65 00 00 00 52 00 50 00 43 00 20 00 73 00 74 00 e...R.P.C. .s.t.
75 00 62 00 20 00 72 00 65 00 63 00 65 00 69 00 u.b. .r.e.c.e.i.
76 00 65 00 64 00 20 00 62 00 61 00 64 00 20 00 v.e.d. .b.a.d. .
64 00 61 00 74 00 61 00 00 00 00 00 41 00 63 00 d.a.t.a.....A.c.
63 00 65 00 73 00 73 00 20 00 76 00 69 00 6f 00 c.e.s.s. .v.i.o.
6c 00 61 00 74 00 69 00 6f 00 6e 00 00 00 00 00 l.a.t.i.o.n.....
41 00 63 00 63 00 65 00 73 00 73 00 20 00 76 00 A.c.c.e.s.s. .v.
69 00 6f 00 6c 00 61 00 74 00 69 00 6f 00 6e 00 i.o.l.a.t.i.o.n.
20 00 25 00 6c 00 73 00 20 00 30 00 78 00 25 00 .%.l.s. .0.x.%.
70 00 00 00 52 00 50 00 43 00 20 00 61 00 72 00 p...R.P.C. .a.r.
72 00 61 00 79 00 20 00 62 00 6f 00 75 00 6e 00 r.a.y. .b.o.u.n.
64 00 73 00 20 00 69 00 6e 00 76 00 61 00 6c 00 d.s. .i.n.v.a.l.
69 00 64 00 00 00 00 00 42 00 72 00 65 00 61 00 i.d.....B.r.e.a.
6b 00 70 00 6f 00 69 00 6e 00 74 00 00 00 00 00 k.p.o.i.n.t.....
53 00 69 00 6e 00 67 00 6c 00 65 00 2d 00 73 00 S.i.n.g.l.e.-.s.
74 00 65 00 70 00 00 00 52 00 50 00 43 00 20 00 t.e.p...R.P.C. .
62 00 69 00 6e 00 64 00 69 00 6e 00 67 00 20 00 b.i.n.d.i.n.g. .
68 00 61 00 6e 00 64 00 6c 00 65 00 20 00 69 00 h.a.n.d.l.e. .i.
6e 00 76 00 61 00 6c 00 69 00 64 00 00 00 00 00 n.v.a.l.i.d.....
52 00 50 00 43 00 20 00 69 00 6e 00 74 00 65 00 R.P.C. .i.n.t.e.
72 00 66 00 61 00 63 00 65 00 20 00 75 00 6e 00 r.f.a.c.e. .u.n.
6b 00 6e 00 6f 00 77 00 6e 00 00 00 52 00 50 00 k.n.o.w.n...R.P.
43 00 20 00 73 00 65 00 72 00 76 00 65 00 72 00 C. .s.e.r.v.e.r.
20 00 75 00 6e 00 61 00 76 00 61 00 69 00 6c 00 .u.n.a.v.a.i.l.
61 00 62 00 6c 00 65 00 00 00 00 00 44 00 61 00 a.b.l.e.....D.a.
74 00 61 00 20 00 6d 00 69 00 73 00 61 00 6c 00 t.a. .m.i.s.a.l.
69 00 67 00 6e 00 6d 00 65 00 6e 00 74 00 00 00 i.g.n.m.e.n.t...
43 00 74 00 72 00 6c 00 2d 00 42 00 72 00 65 00 C.t.r.l.-.B.r.e.
61 00 6b 00 00 00 00 00 44 00 65 00 62 00 75 00 a.k.....D.e.b.u.
67 00 67 00 65 00 72 00 20 00 63 00 6f 00 6d 00 g.g.e.r. .c.o.m.
6d 00 61 00 6e 00 64 00 00 00 00 00 41 00 73 00 m.a.n.d.....A.s.
73 00 69 00 67 00 6e 00 20 00 74 00 68 00 72 00 s.i.g.n. .t.h.r.
65 00 61 00 64 00 20 00 6e 00 61 00 6d 00 65 00 e.a.d. .n.a.m.e.
00 00 00 00 47 00 75 00 61 00 72 00 64 00 20 00 ....G.u.a.r.d. .
70 00 61 00 67 00 65 00 20 00 61 00 63 00 63 00 p.a.g.e. .a.c.c.
65 00 73 00 73 00 00 00 44 00 65 00 62 00 75 00 e.s.s...D.e.b.u.
67 00 67 00 65 00 72 00 20 00 52 00 49 00 50 00 g.g.e.r. .R.I.P.
20 00 65 00 78 00 63 00 65 00 70 00 74 00 69 00 .e.x.c.e.p.t.i.
6f 00 6e 00 00 00 00 00 57 00 6f 00 57 00 36 00 o.n.....W.o.W.6.
34 00 20 00 62 00 72 00 65 00 61 00 6b 00 70 00 4. .b.r.e.a.k.p.
6f 00 69 00 6e 00 74 00 00 00 00 00 44 00 65 00 o.i.n.t.....D.e.
62 00 75 00 67 00 67 00 65 00 72 00 20 00 74 00 b.u.g.g.e.r. .t.
65 00 72 00 6d 00 69 00 6e 00 61 00 74 00 65 00 e.r.m.i.n.a.t.e.
20 00 74 00 68 00 72 00 65 00 61 00 64 00 00 00 .t.h.r.e.a.d...
44 00 65 00 62 00 75 00 67 00 67 00 65 00 72 00 D.e.b.u.g.g.e.r.
20 00 74 00 65 00 72 00 6d 00 69 00 6e 00 61 00 .t.e.r.m.i.n.a.
74 00 65 00 20 00 70 00 72 00 6f 00 63 00 65 00 t.e. .p.r.o.c.e.
73 00 73 00 00 00 00 00 43 00 74 00 72 00 6c 00 s.s.....C.t.r.l.
2d 00 43 00 00 00 00 00 44 00 65 00 62 00 75 00 -.C.....D.e.b.u.
67 00 67 00 65 00 72 00 20 00 70 00 72 00 69 00 g.g.e.r. .p.r.i.
6e 00 74 00 20 00 65 00 78 00 63 00 65 00 70 00 n.t. .e.x.c.e.p.
74 00 69 00 6f 00 6e 00 00 00 00 00 57 00 6f 00 t.i.o.n.....W.o.
57 00 36 00 34 00 20 00 73 00 69 00 6e 00 67 00 W.6.4. .s.i.n.g.
6c 00 65 00 2d 00 73 00 74 00 65 00 70 00 00 00 l.e.-.s.t.e.p...
44 00 65 00 6c 00 70 00 68 00 69 00 20 00 72 00 D.e.l.p.h.i. .r.
75 00 6e 00 74 00 69 00 6d 00 65 00 20 00 65 00 u.n.t.i.m.e. .e.
78 00 63 00 65 00 70 00 74 00 69 00 6f 00 6e 00 x.c.e.p.t.i.o.n.
00 00 00 00 53 00 65 00 67 00 6d 00 65 00 6e 00 ....S.e.g.m.e.n.
74 00 20 00 6e 00 6f 00 74 00 69 00 66 00 69 00 t. .n.o.t.i.f.i.
63 00 61 00 74 00 69 00 6f 00 6e 00 00 00 00 00 c.a.t.i.o.n.....
46 00 61 00 74 00 61 00 6c 00 20 00 61 00 70 00 F.a.t.a.l. .a.p.
70 00 6c 00 69 00 63 00 61 00 74 00 69 00 6f 00 p.l.i.c.a.t.i.o.
6e 00 20 00 65 00 78 00 69 00 74 00 00 00 00 00 n. .e.x.i.t.....
52 00 50 00 43 00 20 00 65 00 6e 00 64 00 70 00 R.P.C. .e.n.d.p.
6f 00 69 00 6e 00 74 00 20 00 6e 00 6f 00 74 00 o.i.n.t. .n.o.t.
20 00 72 00 65 00 67 00 69 00 73 00 74 00 65 00 .r.e.g.i.s.t.e.
72 00 65 00 64 00 00 00 2b 00 30 00 78 00 25 00 r.e.d...+.0.x.%.
49 00 36 00 34 00 58 00 00 00 00 00 00 00 00 00 I.6.4.X.........
42 00 61 00 64 00 20 00 61 00 72 00 67 00 75 00 B.a.d. .a.r.g.u.
6d 00 65 00 6e 00 74 00 73 00 3a 00 20 00 65 00 m.e.n.t.s.:. .e.
69 00 74 00 68 00 65 00 72 00 20 00 61 00 20 00 i.t.h.e.r. .a. .
28 00 70 00 72 00 6f 00 70 00 65 00 72 00 6c 00 (.p.r.o.p.e.r.l.
79 00 20 00 71 00 75 00 6f 00 74 00 65 00 64 00 y. .q.u.o.t.e.d.
29 00 20 00 63 00 6f 00 6d 00 6d 00 61 00 6e 00 ). .c.o.m.m.a.n.
64 00 20 00 6c 00 69 00 6e 00 65 00 0a 00 20 00 d. .l.i.n.e... .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 6f 00 72 00 . . . . . .o.r.
20 00 74 00 68 00 65 00 20 00 28 00 61 00 62 00 .t.h.e. .(.a.b.
73 00 6f 00 6c 00 75 00 74 00 65 00 20 00 6f 00 s.o.l.u.t.e. .o.
72 00 20 00 72 00 65 00 6c 00 61 00 74 00 69 00 r. .r.e.l.a.t.i.
76 00 65 00 29 00 20 00 70 00 61 00 74 00 68 00 v.e.). .p.a.t.h.
20 00 6e 00 61 00 6d 00 65 00 20 00 6f 00 66 00 .n.a.m.e. .o.f.
20 00 61 00 6e 00 20 00 61 00 70 00 70 00 6c 00 .a.n. .a.p.p.l.
69 00 63 00 61 00 74 00 69 00 6f 00 6e 00 0a 00 i.c.a.t.i.o.n...
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 66 00 . . . . . . .f.
6f 00 6c 00 6c 00 6f 00 77 00 65 00 64 00 20 00 o.l.l.o.w.e.d. .
62 00 79 00 20 00 61 00 20 00 28 00 70 00 72 00 b.y. .a. .(.p.r.
6f 00 70 00 65 00 72 00 6c 00 79 00 20 00 71 00 o.p.e.r.l.y. .q.
75 00 6f 00 74 00 65 00 64 00 29 00 20 00 63 00 u.o.t.e.d.). .c.
6f 00 6d 00 6d 00 61 00 6e 00 64 00 20 00 6c 00 o.m.m.a.n.d. .l.
69 00 6e 00 65 00 20 00 6d 00 75 00 73 00 74 00 i.n.e. .m.u.s.t.
20 00 62 00 65 00 20 00 67 00 69 00 76 00 65 00 .b.e. .g.i.v.e.
6e 00 21 00 0a 00 00 00 44 00 65 00 62 00 75 00 n.!.....D.e.b.u.
67 00 67 00 65 00 65 00 20 00 70 00 72 00 6f 00 g.g.e.e. .p.r.o.
63 00 65 00 73 00 73 00 20 00 74 00 69 00 6d 00 c.e.s.s. .t.i.m.
65 00 73 00 3a 00 0a 00 00 00 00 00 47 00 65 00 e.s.:.......G.e.
74 00 50 00 72 00 6f 00 63 00 65 00 73 00 73 00 t.P.r.o.c.e.s.s.
54 00 69 00 6d 00 65 00 73 00 00 00 00 00 00 00 T.i.m.e.s.......
44 00 65 00 62 00 75 00 67 00 67 00 65 00 65 00 D.e.b.u.g.g.e.e.
20 00 70 00 72 00 6f 00 63 00 65 00 73 00 73 00 .p.r.o.c.e.s.s.
20 00 25 00 6c 00 75 00 20 00 65 00 78 00 69 00 .%.l.u. .e.x.i.
74 00 65 00 64 00 20 00 77 00 69 00 74 00 68 00 t.e.d. .w.i.t.h.
20 00 63 00 6f 00 64 00 65 00 20 00 25 00 6c 00 .c.o.d.e. .%.l.
75 00 0a 00 00 00 00 00 44 00 65 00 62 00 75 00 u.......D.e.b.u.
67 00 67 00 65 00 65 00 20 00 70 00 72 00 6f 00 g.g.e.e. .p.r.o.
63 00 65 00 73 00 73 00 20 00 25 00 6c 00 75 00 c.e.s.s. .%.l.u.
20 00 65 00 78 00 69 00 74 00 65 00 64 00 20 00 .e.x.i.t.e.d. .
77 00 69 00 74 00 68 00 20 00 63 00 6f 00 64 00 w.i.t.h. .c.o.d.
65 00 20 00 30 00 78 00 25 00 30 00 38 00 6c 00 e. .0.x.%.0.8.l.
58 00 0a 00 00 00 00 00 47 00 65 00 74 00 45 00 X.......G.e.t.E.
78 00 69 00 74 00 43 00 6f 00 64 00 65 00 50 00 x.i.t.C.o.d.e.P.
72 00 6f 00 63 00 65 00 73 00 73 00 00 00 00 00 r.o.c.e.s.s.....
09 00 25 00 6c 00 73 00 20 00 3d 00 20 00 25 00 ..%.l.s. .=. .%.
31 00 30 00 6c 00 75 00 2e 00 25 00 30 00 37 00 1.0.l.u...%.0.7.
6c 00 75 00 20 00 73 00 0a 00 00 00 50 00 72 00 l.u. .s.....P.r.
69 00 6d 00 61 00 72 00 79 00 20 00 74 00 68 00 i.m.a.r.y. .t.h.
72 00 65 00 61 00 64 00 20 00 74 00 69 00 6d 00 r.e.a.d. .t.i.m.
65 00 73 00 3a 00 0a 00 00 00 00 00 47 00 65 00 e.s.:.......G.e.
74 00 54 00 68 00 72 00 65 00 61 00 64 00 54 00 t.T.h.r.e.a.d.T.
69 00 6d 00 65 00 73 00 00 00 00 00 00 00 00 00 i.m.e.s.........
50 00 72 00 69 00 6d 00 61 00 72 00 79 00 20 00 P.r.i.m.a.r.y. .
74 00 68 00 72 00 65 00 61 00 64 00 20 00 25 00 t.h.r.e.a.d. .%.
6c 00 75 00 20 00 6f 00 66 00 20 00 64 00 65 00 l.u. .o.f. .d.e.
62 00 75 00 67 00 67 00 65 00 65 00 20 00 70 00 b.u.g.g.e.e. .p.
72 00 6f 00 63 00 65 00 73 00 73 00 20 00 25 00 r.o.c.e.s.s. .%.
6c 00 75 00 20 00 65 00 78 00 69 00 74 00 65 00 l.u. .e.x.i.t.e.
64 00 20 00 77 00 69 00 74 00 68 00 20 00 63 00 d. .w.i.t.h. .c.
6f 00 64 00 65 00 20 00 25 00 6c 00 75 00 0a 00 o.d.e. .%.l.u...
00 00 00 00 00 00 00 00 50 00 72 00 69 00 6d 00 ........P.r.i.m.
61 00 72 00 79 00 20 00 74 00 68 00 72 00 65 00 a.r.y. .t.h.r.e.
61 00 64 00 20 00 25 00 6c 00 75 00 20 00 6f 00 a.d. .%.l.u. .o.
66 00 20 00 64 00 65 00 62 00 75 00 67 00 67 00 f. .d.e.b.u.g.g.
65 00 65 00 20 00 70 00 72 00 6f 00 63 00 65 00 e.e. .p.r.o.c.e.
73 00 73 00 20 00 25 00 6c 00 75 00 20 00 65 00 s.s. .%.l.u. .e.
78 00 69 00 74 00 65 00 64 00 20 00 77 00 69 00 x.i.t.e.d. .w.i.
74 00 68 00 20 00 63 00 6f 00 64 00 65 00 20 00 t.h. .c.o.d.e. .
30 00 78 00 25 00 30 00 38 00 6c 00 58 00 0a 00 0.x.%.0.8.l.X...
00 00 00 00 47 00 65 00 74 00 45 00 78 00 69 00 ....G.e.t.E.x.i.
74 00 43 00 6f 00 64 00 65 00 54 00 68 00 72 00 t.C.o.d.e.T.h.r.
65 00 61 00 64 00 00 00 57 00 61 00 69 00 74 00 e.a.d...W.a.i.t.
46 00 6f 00 72 00 53 00 69 00 6e 00 67 00 6c 00 F.o.r.S.i.n.g.l.
65 00 4f 00 62 00 6a 00 65 00 63 00 74 00 00 00 e.O.b.j.e.c.t...
43 00 6f 00 6e 00 74 00 69 00 6e 00 75 00 65 00 C.o.n.t.i.n.u.e.
44 00 65 00 62 00 75 00 67 00 45 00 76 00 65 00 D.e.b.u.g.E.v.e.
6e 00 74 00 00 00 00 00 57 00 61 00 69 00 74 00 n.t.....W.a.i.t.
46 00 6f 00 72 00 44 00 65 00 62 00 75 00 67 00 F.o.r.D.e.b.u.g.
45 00 76 00 65 00 6e 00 74 00 00 00 00 00 00 00 E.v.e.n.t.......
0a 00 55 00 6e 00 6b 00 6e 00 6f 00 77 00 6e 00 ..U.n.k.n.o.w.n.
20 00 64 00 65 00 62 00 75 00 67 00 20 00 65 00 .d.e.b.u.g. .e.
76 00 65 00 6e 00 74 00 20 00 25 00 6c 00 75 00 v.e.n.t. .%.l.u.
20 00 69 00 6e 00 20 00 74 00 68 00 72 00 65 00 .i.n. .t.h.r.e.
61 00 64 00 20 00 25 00 6c 00 75 00 20 00 6f 00 a.d. .%.l.u. .o.
66 00 20 00 70 00 72 00 6f 00 63 00 65 00 73 00 f. .p.r.o.c.e.s.
73 00 20 00 25 00 6c 00 75 00 0a 00 00 00 00 00 s. .%.l.u.......
09 00 09 00 41 00 64 00 64 00 72 00 65 00 73 00 ....A.d.d.r.e.s.
73 00 20 00 20 00 20 00 3d 00 20 00 30 00 78 00 s. . . .=. .0.x.
25 00 30 00 38 00 6c 00 58 00 25 00 6c 00 73 00 %.0.8.l.X.%.l.s.
0a 00 00 00 09 00 43 00 61 00 6c 00 6c 00 20 00 ......C.a.l.l. .
73 00 74 00 61 00 63 00 6b 00 3a 00 0a 00 00 00 s.t.a.c.k.:.....
47 00 65 00 74 00 54 00 68 00 72 00 65 00 61 00 G.e.t.T.h.r.e.a.
64 00 43 00 6f 00 6e 00 74 00 65 00 78 00 74 00 d.C.o.n.t.e.x.t.
00 00 00 00 4f 00 70 00 65 00 6e 00 54 00 68 00 ....O.p.e.n.T.h.
72 00 65 00 61 00 64 00 00 00 00 00 09 00 09 00 r.e.a.d.........
50 00 61 00 72 00 61 00 6d 00 65 00 74 00 65 00 P.a.r.a.m.e.t.e.
72 00 73 00 5b 00 25 00 6c 00 75 00 5d 00 20 00 r.s.[.%.l.u.]. .
20 00 20 00 20 00 25 00 6c 00 63 00 00 00 00 00 . . .%.l.c.....
0a 00 09 00 43 00 68 00 61 00 69 00 6e 00 65 00 ....C.h.a.i.n.e.
64 00 20 00 65 00 78 00 63 00 65 00 70 00 74 00 d. .e.x.c.e.p.t.
69 00 6f 00 6e 00 3a 00 0a 00 09 00 09 00 44 00 i.o.n.:.......D.
65 00 73 00 63 00 72 00 69 00 70 00 74 00 69 00 e.s.c.r.i.p.t.i.
6f 00 6e 00 20 00 20 00 20 00 20 00 20 00 20 00 o.n. . . . . . .
20 00 3d 00 20 00 25 00 6c 00 73 00 0a 00 09 00 .=. .%.l.s.....
09 00 43 00 6f 00 64 00 65 00 20 00 20 00 20 00 ..C.o.d.e. . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 3d 00 20 00 30 00 78 00 25 00 . . .=. .0.x.%.
30 00 38 00 6c 00 58 00 0a 00 09 00 09 00 46 00 0.8.l.X.......F.
6c 00 61 00 67 00 73 00 20 00 20 00 20 00 20 00 l.a.g.s. . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 3d 00 20 00 30 00 78 00 25 00 30 00 38 00 .=. .0.x.%.0.8.
6c 00 58 00 20 00 28 00 25 00 6c 00 73 00 63 00 l.X. .(.%.l.s.c.
6f 00 6e 00 74 00 69 00 6e 00 75 00 61 00 62 00 o.n.t.i.n.u.a.b.
6c 00 65 00 29 00 0a 00 09 00 09 00 41 00 64 00 l.e.).......A.d.
64 00 72 00 65 00 73 00 73 00 20 00 20 00 20 00 d.r.e.s.s. . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
3d 00 20 00 30 00 78 00 25 00 70 00 25 00 6c 00 =. .0.x.%.p.%.l.
73 00 0a 00 00 00 00 00 0a 00 00 00 2c 00 20 00 s...........,. .
30 00 78 00 25 00 70 00 00 00 00 00 3d 00 20 00 0.x.%.p.....=. .
30 00 78 00 25 00 70 00 00 00 00 00 09 00 50 00 0.x.%.p.......P.
61 00 72 00 61 00 6d 00 65 00 74 00 65 00 72 00 a.r.a.m.e.t.e.r.
73 00 5b 00 25 00 6c 00 75 00 5d 00 20 00 20 00 s.[.%.l.u.]. . .
20 00 20 00 25 00 6c 00 63 00 00 00 00 00 00 00 . .%.l.c.......
0a 00 25 00 6c 00 73 00 20 00 63 00 68 00 61 00 ..%.l.s. .c.h.a.
6e 00 63 00 65 00 20 00 65 00 78 00 63 00 65 00 n.c.e. .e.x.c.e.
70 00 74 00 69 00 6f 00 6e 00 20 00 69 00 6e 00 p.t.i.o.n. .i.n.
20 00 74 00 68 00 72 00 65 00 61 00 64 00 20 00 .t.h.r.e.a.d. .
25 00 6c 00 75 00 20 00 6f 00 66 00 20 00 70 00 %.l.u. .o.f. .p.
72 00 6f 00 63 00 65 00 73 00 73 00 20 00 25 00 r.o.c.e.s.s. .%.
6c 00 75 00 3a 00 0a 00 09 00 44 00 65 00 73 00 l.u.:.....D.e.s.
63 00 72 00 69 00 70 00 74 00 69 00 6f 00 6e 00 c.r.i.p.t.i.o.n.
20 00 20 00 20 00 20 00 20 00 20 00 20 00 3d 00 . . . . . . .=.
20 00 25 00 6c 00 73 00 0a 00 09 00 43 00 6f 00 .%.l.s.....C.o.
64 00 65 00 20 00 20 00 20 00 20 00 20 00 20 00 d.e. . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
3d 00 20 00 30 00 78 00 25 00 30 00 38 00 6c 00 =. .0.x.%.0.8.l.
58 00 0a 00 09 00 46 00 6c 00 61 00 67 00 73 00 X.....F.l.a.g.s.
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 3d 00 20 00 30 00 . . . . .=. .0.
78 00 25 00 30 00 38 00 6c 00 58 00 20 00 28 00 x.%.0.8.l.X. .(.
25 00 6c 00 73 00 63 00 6f 00 6e 00 74 00 69 00 %.l.s.c.o.n.t.i.
6e 00 75 00 61 00 62 00 6c 00 65 00 29 00 0a 00 n.u.a.b.l.e.)...
09 00 41 00 64 00 64 00 72 00 65 00 73 00 73 00 ..A.d.d.r.e.s.s.
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 3d 00 20 00 30 00 78 00 25 00 . . .=. .0.x.%.
70 00 25 00 6c 00 73 00 0a 00 00 00 4c 00 61 00 p.%.l.s.....L.a.
73 00 74 00 00 00 00 00 46 00 69 00 72 00 73 00 s.t.....F.i.r.s.
74 00 00 00 6e 00 6f 00 6e 00 2d 00 00 00 00 00 t...n.o.n.-.....
0a 00 52 00 49 00 50 00 20 00 69 00 6e 00 20 00 ..R.I.P. .i.n. .
74 00 68 00 72 00 65 00 61 00 64 00 20 00 25 00 t.h.r.e.a.d. .%.
6c 00 75 00 20 00 6f 00 66 00 20 00 70 00 72 00 l.u. .o.f. .p.r.
6f 00 63 00 65 00 73 00 73 00 20 00 25 00 6c 00 o.c.e.s.s. .%.l.
75 00 3a 00 0a 00 09 00 45 00 72 00 72 00 6f 00 u.:.....E.r.r.o.
72 00 20 00 3d 00 20 00 25 00 6c 00 75 00 0a 00 r. .=. .%.l.u...
09 00 54 00 79 00 70 00 65 00 20 00 20 00 3d 00 ..T.y.p.e. . .=.
20 00 25 00 6c 00 75 00 0a 00 00 00 4c 00 6f 00 .%.l.u.....L.o.
63 00 61 00 6c 00 46 00 72 00 65 00 65 00 00 00 c.a.l.F.r.e.e...
09 00 53 00 74 00 72 00 69 00 6e 00 67 00 20 00 ..S.t.r.i.n.g. .
76 00 61 00 6c 00 75 00 65 00 20 00 20 00 20 00 v.a.l.u.e. . . .
3d 00 20 00 25 00 68 00 73 00 0a 00 00 00 00 00 =. .%.h.s.......
4c 00 6f 00 63 00 61 00 6c 00 41 00 6c 00 6c 00 L.o.c.a.l.A.l.l.
6f 00 63 00 00 00 00 00 0a 00 4f 00 75 00 74 00 o.c.......O.u.t.
70 00 75 00 74 00 20 00 64 00 65 00 62 00 75 00 p.u.t. .d.e.b.u.
67 00 20 00 73 00 74 00 72 00 69 00 6e 00 67 00 g. .s.t.r.i.n.g.
20 00 69 00 6e 00 20 00 74 00 68 00 72 00 65 00 .i.n. .t.h.r.e.
61 00 64 00 20 00 25 00 6c 00 75 00 20 00 6f 00 a.d. .%.l.u. .o.
66 00 20 00 70 00 72 00 6f 00 63 00 65 00 73 00 f. .p.r.o.c.e.s.
73 00 20 00 25 00 6c 00 75 00 3a 00 0a 00 09 00 s. .%.l.u.:.....
53 00 74 00 72 00 69 00 6e 00 67 00 20 00 6c 00 S.t.r.i.n.g. .l.
65 00 6e 00 67 00 74 00 68 00 20 00 20 00 3d 00 e.n.g.t.h. . .=.
20 00 25 00 68 00 75 00 0a 00 09 00 53 00 74 00 .%.h.u.....S.t.
72 00 69 00 6e 00 67 00 20 00 61 00 64 00 64 00 r.i.n.g. .a.d.d.
72 00 65 00 73 00 73 00 20 00 3d 00 20 00 30 00 r.e.s.s. .=. .0.
78 00 25 00 70 00 25 00 6c 00 73 00 0a 00 00 00 x.%.p.%.l.s.....
53 00 79 00 6d 00 55 00 6e 00 6c 00 6f 00 61 00 S.y.m.U.n.l.o.a.
64 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 36 00 d.M.o.d.u.l.e.6.
34 00 00 00 00 00 00 00 0a 00 44 00 4c 00 4c 00 4.........D.L.L.
20 00 75 00 6e 00 6c 00 6f 00 61 00 64 00 65 00 .u.n.l.o.a.d.e.
64 00 20 00 66 00 72 00 6f 00 6d 00 20 00 70 00 d. .f.r.o.m. .p.
72 00 6f 00 63 00 65 00 73 00 73 00 20 00 25 00 r.o.c.e.s.s. .%.
6c 00 75 00 20 00 62 00 79 00 20 00 74 00 68 00 l.u. .b.y. .t.h.
72 00 65 00 61 00 64 00 20 00 25 00 6c 00 75 00 r.e.a.d. .%.l.u.
3a 00 0a 00 09 00 42 00 61 00 73 00 65 00 20 00 :.....B.a.s.e. .
61 00 64 00 64 00 72 00 65 00 73 00 73 00 20 00 a.d.d.r.e.s.s. .
3d 00 20 00 30 00 78 00 25 00 70 00 25 00 6c 00 =. .0.x.%.p.%.l.
73 00 0a 00 00 00 00 00 09 00 42 00 61 00 73 00 s.........B.a.s.
65 00 20 00 61 00 64 00 64 00 72 00 65 00 73 00 e. .a.d.d.r.e.s.
73 00 20 00 20 00 20 00 3d 00 20 00 30 00 78 00 s. . . .=. .0.x.
25 00 70 00 25 00 6c 00 73 00 0a 00 00 00 00 00 %.p.%.l.s.......
09 00 44 00 4c 00 4c 00 20 00 66 00 69 00 6c 00 ..D.L.L. .f.i.l.
65 00 6e 00 61 00 6d 00 65 00 20 00 20 00 20 00 e.n.a.m.e. . . .
3d 00 20 00 25 00 68 00 73 00 0a 00 00 00 00 00 =. .%.h.s.......
09 00 44 00 4c 00 4c 00 20 00 66 00 69 00 6c 00 ..D.L.L. .f.i.l.
65 00 6e 00 61 00 6d 00 65 00 20 00 20 00 20 00 e.n.a.m.e. . . .
3d 00 20 00 25 00 6c 00 73 00 0a 00 00 00 00 00 =. .%.l.s.......
53 00 79 00 6d 00 52 00 65 00 66 00 72 00 65 00 S.y.m.R.e.f.r.e.
73 00 68 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 s.h.M.o.d.u.l.e.
4c 00 69 00 73 00 74 00 00 00 00 00 00 00 00 00 L.i.s.t.........
0a 00 44 00 4c 00 4c 00 20 00 6c 00 6f 00 61 00 ..D.L.L. .l.o.a.
64 00 65 00 64 00 20 00 69 00 6e 00 20 00 70 00 d.e.d. .i.n. .p.
72 00 6f 00 63 00 65 00 73 00 73 00 20 00 25 00 r.o.c.e.s.s. .%.
6c 00 75 00 20 00 62 00 79 00 20 00 74 00 68 00 l.u. .b.y. .t.h.
72 00 65 00 61 00 64 00 20 00 25 00 6c 00 75 00 r.e.a.d. .%.l.u.
3a 00 0a 00 00 00 00 00 0a 00 54 00 68 00 72 00 :.........T.h.r.
65 00 61 00 64 00 20 00 25 00 6c 00 75 00 20 00 e.a.d. .%.l.u. .
65 00 78 00 69 00 74 00 65 00 64 00 20 00 66 00 e.x.i.t.e.d. .f.
72 00 6f 00 6d 00 20 00 70 00 72 00 6f 00 63 00 r.o.m. .p.r.o.c.
65 00 73 00 73 00 20 00 25 00 6c 00 75 00 3a 00 e.s.s. .%.l.u.:.
0a 00 09 00 45 00 78 00 69 00 74 00 20 00 63 00 ....E.x.i.t. .c.
6f 00 64 00 65 00 20 00 3d 00 20 00 30 00 78 00 o.d.e. .=. .0.x.
25 00 30 00 38 00 6c 00 58 00 0a 00 00 00 00 00 %.0.8.l.X.......
53 00 79 00 6d 00 43 00 6c 00 65 00 61 00 6e 00 S.y.m.C.l.e.a.n.
75 00 70 00 00 00 00 00 0a 00 50 00 72 00 6f 00 u.p.......P.r.o.
63 00 65 00 73 00 73 00 20 00 25 00 6c 00 75 00 c.e.s.s. .%.l.u.
20 00 65 00 78 00 69 00 74 00 65 00 64 00 20 00 .e.x.i.t.e.d. .
77 00 69 00 74 00 68 00 20 00 74 00 68 00 72 00 w.i.t.h. .t.h.r.
65 00 61 00 64 00 20 00 25 00 6c 00 75 00 3a 00 e.a.d. .%.l.u.:.
0a 00 09 00 45 00 78 00 69 00 74 00 20 00 63 00 ....E.x.i.t. .c.
6f 00 64 00 65 00 20 00 3d 00 20 00 30 00 78 00 o.d.e. .=. .0.x.
25 00 30 00 38 00 6c 00 58 00 0a 00 00 00 00 00 %.0.8.l.X.......
0a 00 54 00 68 00 72 00 65 00 61 00 64 00 20 00 ..T.h.r.e.a.d. .
25 00 6c 00 75 00 20 00 63 00 72 00 65 00 61 00 %.l.u. .c.r.e.a.
74 00 65 00 64 00 20 00 69 00 6e 00 20 00 70 00 t.e.d. .i.n. .p.
72 00 6f 00 63 00 65 00 73 00 73 00 20 00 25 00 r.o.c.e.s.s. .%.
6c 00 75 00 3a 00 0a 00 09 00 53 00 74 00 61 00 l.u.:.....S.t.a.
72 00 74 00 20 00 61 00 64 00 64 00 72 00 65 00 r.t. .a.d.d.r.e.
73 00 73 00 20 00 3d 00 20 00 30 00 78 00 25 00 s.s. .=. .0.x.%.
70 00 25 00 6c 00 73 00 0a 00 09 00 54 00 45 00 p.%.l.s.....T.E.
42 00 20 00 61 00 64 00 64 00 72 00 65 00 73 00 B. .a.d.d.r.e.s.
73 00 20 00 20 00 20 00 3d 00 20 00 30 00 78 00 s. . . .=. .0.x.
25 00 70 00 0a 00 00 00 43 00 6c 00 6f 00 73 00 %.p.....C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 e.H.a.n.d.l.e...
09 00 42 00 61 00 73 00 65 00 20 00 61 00 64 00 ..B.a.s.e. .a.d.
64 00 72 00 65 00 73 00 73 00 20 00 20 00 20 00 d.r.e.s.s. . . .
20 00 20 00 3d 00 20 00 30 00 78 00 25 00 70 00 . .=. .0.x.%.p.
0a 00 09 00 53 00 74 00 61 00 72 00 74 00 20 00 ....S.t.a.r.t. .
61 00 64 00 64 00 72 00 65 00 73 00 73 00 20 00 a.d.d.r.e.s.s. .
20 00 20 00 20 00 3d 00 20 00 30 00 78 00 25 00 . . .=. .0.x.%.
70 00 25 00 6c 00 73 00 0a 00 09 00 54 00 45 00 p.%.l.s.....T.E.
42 00 20 00 61 00 64 00 64 00 72 00 65 00 73 00 B. .a.d.d.r.e.s.
73 00 20 00 20 00 20 00 20 00 20 00 20 00 3d 00 s. . . . . . .=.
20 00 30 00 78 00 25 00 70 00 0a 00 00 00 00 00 .0.x.%.p.......
53 00 79 00 6d 00 47 00 65 00 74 00 4d 00 6f 00 S.y.m.G.e.t.M.o.
64 00 75 00 6c 00 65 00 49 00 6e 00 66 00 6f 00 d.u.l.e.I.n.f.o.
36 00 34 00 00 00 00 00 47 00 65 00 74 00 46 00 6.4.....G.e.t.F.
69 00 6e 00 61 00 6c 00 50 00 61 00 74 00 68 00 i.n.a.l.P.a.t.h.
4e 00 61 00 6d 00 65 00 42 00 79 00 48 00 61 00 N.a.m.e.B.y.H.a.
6e 00 64 00 6c 00 65 00 00 00 00 00 53 00 79 00 n.d.l.e.....S.y.
6d 00 4c 00 6f 00 61 00 64 00 4d 00 6f 00 64 00 m.L.o.a.d.M.o.d.
75 00 6c 00 65 00 45 00 78 00 00 00 09 00 50 00 u.l.e.E.x.....P.
72 00 6f 00 63 00 65 00 73 00 73 00 20 00 66 00 r.o.c.e.s.s. .f.
69 00 6c 00 65 00 6e 00 61 00 6d 00 65 00 20 00 i.l.e.n.a.m.e. .
3d 00 20 00 25 00 68 00 73 00 0a 00 00 00 00 00 =. .%.h.s.......
53 00 79 00 6d 00 4c 00 6f 00 61 00 64 00 4d 00 S.y.m.L.o.a.d.M.
6f 00 64 00 75 00 6c 00 65 00 45 00 78 00 57 00 o.d.u.l.e.E.x.W.
00 00 00 00 09 00 50 00 72 00 6f 00 63 00 65 00 ......P.r.o.c.e.
73 00 73 00 20 00 66 00 69 00 6c 00 65 00 6e 00 s.s. .f.i.l.e.n.
61 00 6d 00 65 00 20 00 3d 00 20 00 25 00 6c 00 a.m.e. .=. .%.l.
73 00 0a 00 00 00 00 00 52 00 65 00 61 00 64 00 s.......R.e.a.d.
50 00 72 00 6f 00 63 00 65 00 73 00 73 00 4d 00 P.r.o.c.e.s.s.M.
65 00 6d 00 6f 00 72 00 79 00 00 00 53 00 79 00 e.m.o.r.y...S.y.
6d 00 62 00 6f 00 6c 00 20 00 73 00 65 00 61 00 m.b.o.l. .s.e.a.
72 00 63 00 68 00 20 00 70 00 61 00 74 00 68 00 r.c.h. .p.a.t.h.
3a 00 20 00 25 00 6c 00 73 00 0a 00 00 00 00 00 :. .%.l.s.......
53 00 79 00 6d 00 47 00 65 00 74 00 53 00 65 00 S.y.m.G.e.t.S.e.
61 00 72 00 63 00 68 00 50 00 61 00 74 00 68 00 a.r.c.h.P.a.t.h.
00 00 00 00 25 00 6c 00 73 00 28 00 29 00 20 00 ....%.l.s.(.). .
72 00 65 00 74 00 75 00 72 00 6e 00 65 00 64 00 r.e.t.u.r.n.e.d.
20 00 65 00 72 00 72 00 6f 00 72 00 20 00 30 00 .e.r.r.o.r. .0.
78 00 25 00 30 00 38 00 6c 00 58 00 0a 00 00 00 x.%.0.8.l.X.....
53 00 79 00 6d 00 49 00 6e 00 69 00 74 00 69 00 S.y.m.I.n.i.t.i.
61 00 6c 00 69 00 7a 00 65 00 00 00 00 00 00 00 a.l.i.z.e.......
0a 00 50 00 72 00 6f 00 63 00 65 00 73 00 73 00 ..P.r.o.c.e.s.s.
20 00 25 00 6c 00 75 00 20 00 63 00 72 00 65 00 .%.l.u. .c.r.e.
61 00 74 00 65 00 64 00 20 00 77 00 69 00 74 00 a.t.e.d. .w.i.t.
68 00 20 00 70 00 72 00 69 00 6d 00 61 00 72 00 h. .p.r.i.m.a.r.
79 00 20 00 74 00 68 00 72 00 65 00 61 00 64 00 y. .t.h.r.e.a.d.
20 00 25 00 6c 00 75 00 3a 00 0a 00 00 00 00 00 .%.l.u.:.......
44 00 65 00 62 00 75 00 67 00 53 00 65 00 74 00 D.e.b.u.g.S.e.t.
50 00 72 00 6f 00 63 00 65 00 73 00 73 00 4b 00 P.r.o.c.e.s.s.K.
69 00 6c 00 6c 00 4f 00 6e 00 45 00 78 00 69 00 i.l.l.O.n.E.x.i.
74 00 00 00 00 00 00 00 0a 00 44 00 65 00 62 00 t.........D.e.b.
75 00 67 00 67 00 65 00 65 00 20 00 70 00 72 00 u.g.g.e.e. .p.r.
6f 00 63 00 65 00 73 00 73 00 20 00 25 00 6c 00 o.c.e.s.s. .%.l.
75 00 20 00 77 00 69 00 74 00 68 00 20 00 70 00 u. .w.i.t.h. .p.
72 00 69 00 6d 00 61 00 72 00 79 00 20 00 74 00 r.i.m.a.r.y. .t.
68 00 72 00 65 00 61 00 64 00 20 00 25 00 6c 00 h.r.e.a.d. .%.l.
75 00 20 00 63 00 72 00 65 00 61 00 74 00 65 00 u. .c.r.e.a.t.e.
64 00 0a 00 00 00 00 00 44 00 65 00 62 00 75 00 d.......D.e.b.u.
67 00 67 00 65 00 65 00 20 00 70 00 72 00 6f 00 g.g.e.e. .p.r.o.
63 00 65 00 73 00 73 00 20 00 76 00 65 00 72 00 c.e.s.s. .v.e.r.
73 00 69 00 6f 00 6e 00 20 00 69 00 73 00 20 00 s.i.o.n. .i.s. .
25 00 68 00 75 00 2e 00 25 00 68 00 75 00 0a 00 %.h.u...%.h.u...
00 00 00 00 47 00 65 00 74 00 50 00 72 00 6f 00 ....G.e.t.P.r.o.
63 00 65 00 73 00 73 00 56 00 65 00 72 00 73 00 c.e.s.s.V.e.r.s.
69 00 6f 00 6e 00 00 00 44 00 65 00 62 00 75 00 i.o.n...D.e.b.u.
67 00 67 00 65 00 65 00 20 00 70 00 72 00 6f 00 g.g.e.e. .p.r.o.
63 00 65 00 73 00 73 00 20 00 6c 00 6f 00 61 00 c.e.s.s. .l.o.a.
64 00 65 00 64 00 20 00 66 00 72 00 6f 00 6d 00 d.e.d. .f.r.o.m.
20 00 69 00 6d 00 61 00 67 00 65 00 20 00 66 00 .i.m.a.g.e. .f.
69 00 6c 00 65 00 20 00 27 00 25 00 6c 00 73 00 i.l.e. .'.%.l.s.
27 00 0a 00 00 00 00 00 51 00 75 00 65 00 72 00 '.......Q.u.e.r.
79 00 46 00 75 00 6c 00 6c 00 50 00 72 00 6f 00 y.F.u.l.l.P.r.o.
63 00 65 00 73 00 73 00 49 00 6d 00 61 00 67 00 c.e.s.s.I.m.a.g.
65 00 4e 00 61 00 6d 00 65 00 00 00 43 00 72 00 e.N.a.m.e...C.r.
65 00 61 00 74 00 65 00 50 00 72 00 6f 00 63 00 e.a.t.e.P.r.o.c.
65 00 73 00 73 00 00 00 0a 00 44 00 62 00 67 00 e.s.s.....D.b.g.
48 00 65 00 6c 00 70 00 20 00 41 00 50 00 49 00 H.e.l.p. .A.P.I.
3a 00 0a 00 09 00 56 00 65 00 72 00 73 00 69 00 :.....V.e.r.s.i.
6f 00 6e 00 20 00 20 00 3d 00 20 00 25 00 68 00 o.n. . .=. .%.h.
75 00 2e 00 25 00 68 00 75 00 0a 00 09 00 52 00 u...%.h.u.....R.
65 00 76 00 69 00 73 00 69 00 6f 00 6e 00 20 00 e.v.i.s.i.o.n. .
3d 00 20 00 25 00 68 00 75 00 0a 00 09 00 52 00 =. .%.h.u.....R.
65 00 73 00 65 00 72 00 76 00 65 00 64 00 20 00 e.s.e.r.v.e.d. .
3d 00 20 00 25 00 68 00 75 00 0a 00 00 00 00 00 =. .%.h.u.......
41 00 70 00 70 00 6c 00 69 00 63 00 61 00 74 00 A.p.p.l.i.c.a.t.
69 00 6f 00 6e 00 20 00 74 00 79 00 70 00 65 00 i.o.n. .t.y.p.e.
3a 00 20 00 25 00 6c 00 75 00 20 00 3d 00 20 00 :. .%.l.u. .=. .
25 00 6c 00 73 00 0a 00 00 00 00 00 47 00 65 00 %.l.s.......G.e.
74 00 42 00 69 00 6e 00 61 00 72 00 79 00 54 00 t.B.i.n.a.r.y.T.
79 00 70 00 65 00 00 00 43 00 6f 00 6d 00 6d 00 y.p.e...C.o.m.m.
61 00 6e 00 64 00 20 00 6c 00 69 00 6e 00 65 00 a.n.d. .l.i.n.e.
3a 00 20 00 20 00 20 00 20 00 20 00 27 00 25 00 :. . . . . .'.%.
6c 00 73 00 27 00 0a 00 41 00 70 00 70 00 6c 00 l.s.'...A.p.p.l.
69 00 63 00 61 00 74 00 69 00 6f 00 6e 00 20 00 i.c.a.t.i.o.n. .
6e 00 61 00 6d 00 65 00 3a 00 20 00 27 00 25 00 n.a.m.e.:. .'.%.
6c 00 73 00 27 00 0a 00 00 00 00 00 25 00 6c 00 l.s.'.......%.l.
73 00 28 00 29 00 20 00 72 00 65 00 74 00 75 00 s.(.). .r.e.t.u.
72 00 6e 00 65 00 64 00 20 00 65 00 72 00 72 00 r.n.e.d. .e.r.r.
6f 00 72 00 20 00 25 00 6c 00 75 00 0a 00 00 00 o.r. .%.l.u.....
43 00 6f 00 6d 00 6d 00 61 00 6e 00 64 00 4c 00 C.o.m.m.a.n.d.L.
69 00 6e 00 65 00 54 00 6f 00 41 00 72 00 67 00 i.n.e.T.o.A.r.g.
76 00 00 00 00 00 00 00 b9 79 37 9e 00 00 00 00 v........y7.....
5c 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 \...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 38 58 40 00 ............8X@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 60 59 00 00 ............`Y..
00 00 00 00 00 00 00 00 c2 5a 00 00 74 30 00 00 .........Z..t0..
ec 58 00 00 00 00 00 00 00 00 00 00 a8 5c 00 00 .X...........\..
00 30 00 00 54 59 00 00 00 00 00 00 00 00 00 00 .0..TY..........
d0 5c 00 00 68 30 00 00 00 00 00 00 00 00 00 00 .\..h0..........
00 00 00 00 00 00 00 00 00 00 00 00 3a 5b 00 00 ............:[..
94 5b 00 00 88 5b 00 00 98 5c 00 00 88 5c 00 00 .[...[...\...\..
78 5c 00 00 66 5c 00 00 54 5c 00 00 42 5c 00 00 x\..f\..T\..B\..
24 5c 00 00 10 5c 00 00 f4 5b 00 00 e0 5b 00 00 $\...\...[...[..
cc 5b 00 00 b0 5b 00 00 ce 5a 00 00 de 5a 00 00 .[...[...Z...Z..
ec 5a 00 00 fe 5a 00 00 14 5b 00 00 26 5b 00 00 .Z...Z...[..&[..
7a 5b 00 00 50 5b 00 00 66 5b 00 00 a2 5b 00 00 z[..P[..f[...[..
00 00 00 00 c2 5c 00 00 b6 5c 00 00 00 00 00 00 .....\...\......
ac 5a 00 00 9c 5a 00 00 8c 5a 00 00 7a 5a 00 00 .Z...Z...Z..zZ..
66 5a 00 00 52 5a 00 00 40 5a 00 00 32 5a 00 00 fZ..RZ..@Z..2Z..
1a 5a 00 00 06 5a 00 00 f0 59 00 00 d4 59 00 00 .Z...Z...Y...Y..
c6 59 00 00 b6 59 00 00 a0 59 00 00 00 00 00 00 .Y...Y...Y......
66 00 53 79 6d 47 65 74 4d 6f 64 75 6c 65 49 6e f.SymGetModuleIn
66 6f 57 36 34 00 49 00 53 79 6d 46 72 6f 6d 41 foW64.I.SymFromA
64 64 72 57 00 00 21 00 53 74 61 63 6b 57 61 6c ddrW..!.StackWal
6b 36 34 00 51 00 53 79 6d 46 75 6e 63 74 69 6f k64.Q.SymFunctio
6e 54 61 62 6c 65 41 63 63 65 73 73 36 34 00 00 nTableAccess64..
62 00 53 79 6d 47 65 74 4d 6f 64 75 6c 65 42 61 b.SymGetModuleBa
73 65 36 34 00 00 b8 00 53 79 6d 55 6e 6c 6f 61 se64....SymUnloa
64 4d 6f 64 75 6c 65 36 34 00 94 00 53 79 6d 52 dModule64...SymR
65 66 72 65 73 68 4d 6f 64 75 6c 65 4c 69 73 74 efreshModuleList
00 00 27 00 53 79 6d 43 6c 65 61 6e 75 70 00 00 ..'.SymCleanup..
89 00 53 79 6d 4c 6f 61 64 4d 6f 64 75 6c 65 45 ..SymLoadModuleE
78 00 8a 00 53 79 6d 4c 6f 61 64 4d 6f 64 75 6c x...SymLoadModul
65 45 78 57 00 00 6d 00 53 79 6d 47 65 74 53 65 eExW..m.SymGetSe
61 72 63 68 50 61 74 68 57 00 86 00 53 79 6d 49 archPathW...SymI
6e 69 74 69 61 6c 69 7a 65 57 00 00 9f 00 53 79 nitializeW....Sy
6d 53 65 74 4f 70 74 69 6f 6e 73 00 69 00 53 79 mSetOptions.i.Sy
6d 47 65 74 4f 70 74 69 6f 6e 73 00 18 00 49 6d mGetOptions...Im
61 67 65 68 6c 70 41 70 69 56 65 72 73 69 6f 6e agehlpApiVersion
00 00 64 62 67 68 65 6c 70 2e 64 6c 6c 00 24 05 ..dbghelp.dll.$.
57 72 69 74 65 43 6f 6e 73 6f 6c 65 57 00 19 01 WriteConsoleW...
45 78 69 74 50 72 6f 63 65 73 73 00 52 02 47 65 ExitProcess.R.Ge
74 50 72 6f 63 65 73 73 54 69 6d 65 73 00 df 01 tProcessTimes...
47 65 74 45 78 69 74 43 6f 64 65 50 72 6f 63 65 GetExitCodeProce
73 73 00 00 91 02 47 65 74 54 68 72 65 61 64 54 ss....GetThreadT
69 6d 65 73 00 00 e0 01 47 65 74 45 78 69 74 43 imes....GetExitC
6f 64 65 54 68 72 65 61 64 00 f9 04 57 61 69 74 odeThread...Wait
46 6f 72 53 69 6e 67 6c 65 4f 62 6a 65 63 74 00 ForSingleObject.
67 00 43 6f 6e 74 69 6e 75 65 44 65 62 75 67 45 g.ContinueDebugE
76 65 6e 74 00 00 86 02 47 65 74 54 68 72 65 61 vent....GetThrea
64 43 6f 6e 74 65 78 74 00 00 85 03 4f 70 65 6e dContext....Open
54 68 72 65 61 64 00 00 48 03 4c 6f 63 61 6c 46 Thread..H.LocalF
72 65 65 00 44 03 4c 6f 63 61 6c 41 6c 6c 6f 63 ree.D.LocalAlloc
00 00 52 00 43 6c 6f 73 65 48 61 6e 64 6c 65 00 ..R.CloseHandle.
f5 01 47 65 74 46 69 6e 61 6c 50 61 74 68 4e 61 ..GetFinalPathNa
6d 65 42 79 48 61 6e 64 6c 65 57 00 c3 03 52 65 meByHandleW...Re
61 64 50 72 6f 63 65 73 73 4d 65 6d 6f 72 79 00 adProcessMemory.
f6 04 57 61 69 74 46 6f 72 44 65 62 75 67 45 76 ..WaitForDebugEv
65 6e 74 00 c9 00 44 65 62 75 67 53 65 74 50 72 ent...DebugSetPr
6f 63 65 73 73 4b 69 6c 6c 4f 6e 45 78 69 74 00 ocessKillOnExit.
53 02 47 65 74 50 72 6f 63 65 73 73 56 65 72 73 S.GetProcessVers
69 6f 6e 00 a2 03 51 75 65 72 79 46 75 6c 6c 50 ion...QueryFullP
72 6f 63 65 73 73 49 6d 61 67 65 4e 61 6d 65 57 rocessImageNameW
00 00 a8 00 43 72 65 61 74 65 50 72 6f 63 65 73 ....CreateProces
73 57 00 00 71 01 47 65 74 42 69 6e 61 72 79 54 sW..q.GetBinaryT
79 70 65 57 00 00 87 01 47 65 74 43 6f 6d 6d 61 ypeW....GetComma
6e 64 4c 69 6e 65 57 00 02 02 47 65 74 4c 61 73 ndLineW...GetLas
74 45 72 72 6f 72 00 00 64 02 47 65 74 53 74 64 tError..d.GetStd
48 61 6e 64 6c 65 00 00 73 04 53 65 74 4c 61 73 Handle..s.SetLas
74 45 72 72 6f 72 00 00 4b 45 52 4e 45 4c 33 32 tError..KERNEL32
2e 64 6c 6c 00 00 33 03 77 73 70 72 69 6e 74 66 .dll..3.wsprintf
57 00 35 03 77 76 73 70 72 69 6e 74 66 57 00 00 W.5.wvsprintfW..
55 53 45 52 33 32 2e 64 6c 6c 00 00 00 00 00 00 USER32.dll......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file DEBUGGER.TXT
created in
step 3. to recreate the console application
Non-interactive Symbolic Debugger:
CERTUTIL.EXE /DecodeHex /V DEBUGGER.TXT DEBUGGER.COM
Input Length = 80512 Output Length = 18944 CertUtil: -decodehex command completed successfully.
debug stringswritten from all processes running in the current (user) session with the Win32 function
OutputDebugString()
.
debug stringswritten with the Win32 function
OutputDebugString()
are catched and typically displayed by the debugger.
In Win32 processes that are not run under a debugger,
the Win32 function
OutputDebugString()
checks whether the shared memory section named
DBWIN_BUFFER
as well as the events named
DBWIN_BUFFER_READY
and
DBWIN_DATA_READY
exist; if yes, it waits until the
event DBWIN_BUFFER_READY
is signaled, writes the
process identifier and its argument into the shared memory section
DBWIN_BUFFER
, signals the event
DBWIN_DATA_READY
and returns to its caller.
File Mapping
Creating a File View
Creating a View Within a File
DBWINNER.COM
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and DBWINNER.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file DBWINNER.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
const LPCSTR szCtrlType[] = {"Ctrl-C",
"Ctrl-Break",
"Ctrl-Close",
NULL,
NULL,
"Ctrl-Logoff",
"Ctrl-Shutdown"};
BOOL WINAPI CtrlHandler(DWORD dwCtrlType)
{
switch (dwCtrlType)
{
case CTRL_C_EVENT:
case CTRL_BREAK_EVENT:
case CTRL_CLOSE_EVENT:
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
OutputDebugStringA(szCtrlType[dwCtrlType]);
return TRUE;
default:
return FALSE;
}
}
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
typedef struct _dbwin_buffer
{
DWORD dwProcessId;
CHAR szString[4096 - sizeof(DWORD)];
} DBWIN_BUFFER;
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
DBWIN_BUFFER *lpDBWin;
HANDLE hDBWin;
HANDLE hDBWinBuffer;
HANDLE hDBWinData;
DWORD dwDBWinData;
DWORD dwString;
DWORD dwError = ERROR_SUCCESS;
DWORD dwProcessId = 0;
DWORD dwCurrentProcessId = GetCurrentProcessId();
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
hDBWin = CreateFileMapping(INVALID_HANDLE_VALUE,
(LPSECURITY_ATTRIBUTES) NULL,
PAGE_READWRITE,
0,
sizeof(DBWIN_BUFFER),
L"DBWIN_BUFFER");
dwError = GetLastError();
if (hDBWin == NULL)
PrintConsole(hConsole,
L"CreateFileMapping() returned error %lu\n",
dwError);
else
{
if (dwError == ERROR_ALREADY_EXISTS)
PrintConsole(hConsole,
L"Shared section \'DBWIN_BUFFER\' already created by another process!\n");
else
{
hDBWinBuffer = CreateEvent((LPSECURITY_ATTRIBUTES) NULL,
FALSE,
FALSE,
L"DBWIN_BUFFER_READY");
dwError = GetLastError();
if (hDBWinBuffer == NULL)
PrintConsole(hConsole,
L"CreateEvent() returned error %lu\n",
dwError);
else
{
if (dwError == ERROR_ALREADY_EXISTS)
PrintConsole(hConsole,
L"Event \'DBWIN_BUFFER_READY\' already created by another process!\n");
else
{
hDBWinData = CreateEvent((LPSECURITY_ATTRIBUTES) NULL,
FALSE,
FALSE,
L"DBWIN_DATA_READY");
dwError = GetLastError();
if (hDBWinData == NULL)
PrintConsole(hConsole,
L"CreateEvent() returned error %lu\n",
dwError);
else
{
if (dwError == ERROR_ALREADY_EXISTS)
PrintConsole(hConsole,
L"Event \'DBWIN_DATA_READY\' already created by another process!\n");
else
{
lpDBWin = MapViewOfFile(hDBWin,
SECTION_MAP_READ | SECTION_MAP_WRITE,
0, 0,
(SIZE_T) 0);
if (lpDBWin == NULL)
PrintConsole(hConsole,
L"MapViewOfFile() returned error %lu\n",
dwError = GetLastError());
else
{
if (!SetConsoleCtrlHandler(CtrlHandler, TRUE))
PrintConsole(hConsole,
L"SetConsoleCtrlHandler() returned error %lu\n",
dwError = GetLastError());
PrintConsole(hConsole,
L"Press \'Ctrl-C\' or \'Ctrl-Break\' to stop!\n"
L"\n"
L"Process\tDebug String\n");
do
{
dwDBWinData = SignalObjectAndWait(hDBWinBuffer,
hDBWinData,
INFINITE,
FALSE);
if (dwDBWinData != WAIT_OBJECT_0)
break;
dwString = strlen(lpDBWin->szString);
while ((dwString-- > 0)
&& ((lpDBWin->szString[dwString] == ' ')
|| (lpDBWin->szString[dwString] == '\a')
|| (lpDBWin->szString[dwString] == '\b')
|| (lpDBWin->szString[dwString] == '\f')
|| (lpDBWin->szString[dwString] == '\n')
|| (lpDBWin->szString[dwString] == '\r')
|| (lpDBWin->szString[dwString] == '\t')
|| (lpDBWin->szString[dwString] == '\v')))
/* lpDBWin->szString[dwString] = '\0' */;
lpDBWin->szString[++dwString] = '\0';
if (lpDBWin->dwProcessId != dwProcessId)
PrintConsole(hConsole,
L"\n"
L"%7lu\t%hs\n",
dwProcessId = lpDBWin->dwProcessId,
lpDBWin->szString);
else
PrintConsole(hConsole,
L"\t%hs\n",
lpDBWin->szString);
} while (dwProcessId != dwCurrentProcessId);
if (dwDBWinData == WAIT_FAILED)
PrintConsole(hConsole,
L"SignalObjectAndWait() returned error %lu\n",
dwError = GetLastError());
if (!SetConsoleCtrlHandler(CtrlHandler, FALSE))
PrintConsole(hConsole,
L"SetConsoleCtrlHandler() returned error %lu\n",
GetLastError());
if (!UnmapViewOfFile(lpDBWin))
PrintConsole(hConsole,
L"UnmapViewOfFile() returned error %lu\n",
GetLastError());
}
}
if (!CloseHandle(hDBWinData))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (!CloseHandle(hDBWinBuffer))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (!CloseHandle(hDBWin))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
DBWINNER.C
created in step 1., link the compiled
object file DBWINNER.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeDBWINNER.COM DBWINNER.C KERNEL32.LIB USER32.LIB ERASE DBWINNER.OBJFor 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. DBWINNER.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file DBWINNER.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 04 00 00 ......#.........
00 06 00 00 00 00 00 00 78 10 00 00 00 10 00 00 ........x.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 e5 86 00 00 03 00 00 85 .0..............
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
18 24 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 .$..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 b0 23 00 00 40 00 00 00 .........#..@...
00 00 00 00 00 00 00 00 00 20 00 00 40 00 00 00 ......... ..@...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
7f 03 00 00 00 10 00 00 00 04 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 aa 05 00 00 00 20 00 00 .const....... ..
00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
8b 44 24 04 83 f8 02 76 0a 83 f8 04 76 17 83 f8 .D$....v....v...
06 77 12 ff 34 85 7c 20 40 00 ff 15 00 20 40 00 .w..4.| @.... @.
33 c0 40 eb 02 33 c0 c2 04 00 55 8b ec 81 ec 08 3.@..3....U.....
08 00 00 56 8d 45 10 50 ff 75 0c 8d 85 f8 f7 ff ...V.E.P.u......
ff 50 ff 15 38 20 40 00 8b f0 85 f6 75 04 33 c0 .P..8 @.....u.3.
eb 23 6a 00 8d 45 fc 50 56 8d 85 f8 f7 ff ff 50 .#j..E.PV......P
ff 75 08 ff 15 04 20 40 00 85 c0 74 e1 33 c0 39 .u.... @...t.3.9
75 fc 0f 94 c0 5e c9 c3 83 ec 1c 55 57 33 ff 89 u....^.....UW3..
7c 24 0c ff 15 30 20 40 00 6a f4 89 44 24 24 ff |$...0 @.j..D$$.
15 2c 20 40 00 8b e8 83 fd ff 75 0f ff 15 28 20 ., @......u...(
40 00 89 44 24 08 e9 c8 02 00 00 53 56 bb 8c 23 @..D$......SV..#
40 00 53 68 00 10 00 00 57 6a 04 57 6a ff ff 15 @.Sh....Wj.Wj...
24 20 40 00 8b 35 28 20 40 00 89 44 24 20 ff d6 $ @..5( @..D$ ..
39 7c 24 20 89 44 24 10 bf 58 23 40 00 75 0b 50 9|$ .D$..X#@.u.P
68 34 23 40 00 e9 60 02 00 00 3d b7 00 00 00 75 h4#@..`...=....u
14 53 68 c0 22 40 00 55 e8 2d ff ff ff 83 c4 0c .Sh."@.U.-......
e9 2f 02 00 00 8b 1d 20 20 40 00 68 94 22 40 00 ./..... @.h."@.
33 c0 50 50 50 ff d3 89 44 24 1c ff d6 33 c9 89 3.PPP...D$...3..
44 24 10 39 4c 24 1c 75 0b 50 68 7c 22 40 00 e9 D$.9L$.u.Ph|"@..
f6 01 00 00 3d b7 00 00 00 75 18 68 94 22 40 00 ....=....u.h."@.
68 18 22 40 00 55 e8 df fe ff ff 83 c4 0c e9 c1 h."@.U..........
01 00 00 68 f4 21 40 00 51 51 51 ff d3 89 44 24 ...h.!@.QQQ...D$
18 ff d6 33 c9 89 44 24 10 39 4c 24 18 75 0b 50 ...3..D$.9L$.u.P
68 7c 22 40 00 e9 90 01 00 00 3d b7 00 00 00 75 h|"@......=....u
18 68 f4 21 40 00 68 18 22 40 00 55 e8 99 fe ff .h.!@.h."@.U....
ff 83 c4 0c e9 5b 01 00 00 51 51 51 6a 06 ff 74 .....[...QQQj..t
24 30 ff 15 1c 20 40 00 8b d8 89 5c 24 24 85 db $0... @....\$$..
75 11 ff d6 50 89 44 24 14 68 d8 21 40 00 e9 27 u...P.D$.h.!@..'
01 00 00 6a 01 68 00 10 40 00 ff 15 18 20 40 00 ...j.h..@.... @.
85 c0 75 16 ff d6 50 68 ac 21 40 00 57 55 89 44 ..u...Ph.!@.WU.D
24 20 e8 43 fe ff ff 83 c4 10 68 20 21 40 00 55 $ .C......h !@.U
e8 35 fe ff ff 59 59 6a 00 6a ff ff 74 24 20 ff .5...YYj.j..t$ .
74 24 28 ff 15 14 20 40 00 85 c0 0f 85 88 00 00 t$(... @........
00 8d 53 04 8b c2 8d 48 01 8a 18 40 84 db 75 f9 ..S....H...@..u.
2b c1 8b c8 48 85 c9 74 2b 8a 0c 02 80 f9 20 74 +...H..t+..... t
f1 80 f9 07 74 ec 80 f9 08 74 e7 80 f9 0c 74 e2 ....t....t....t.
80 f9 0a 74 dd 80 f9 0d 74 d8 80 f9 09 74 d3 80 ...t....t....t..
f9 0b 74 ce 8b 5c 24 24 c6 44 18 05 00 8b 03 52 ..t..\$$.D.....R
3b 44 24 18 74 15 50 68 04 21 40 00 55 89 44 24 ;D$.t.Ph.!@.U.D$
24 e8 b4 fd ff ff 83 c4 10 eb 0e 68 f8 20 40 00 $..........h. @.
55 e8 a4 fd ff ff 83 c4 0c 8b 44 24 14 3b 44 24 U.........D$.;D$
28 0f 85 60 ff ff ff eb 1b 83 f8 ff 75 16 ff d6 (..`........u...
50 68 d0 20 40 00 57 55 89 44 24 20 e8 79 fd ff Ph. @.WU.D$ .y..
ff 83 c4 10 6a 00 68 00 10 40 00 ff 15 18 20 40 ....j.h..@.... @
00 85 c0 75 12 ff d6 50 68 ac 21 40 00 57 55 e8 ...u...Ph.!@.WU.
56 fd ff ff 83 c4 10 53 ff 15 10 20 40 00 85 c0 V......S... @...
75 12 ff d6 50 68 b0 20 40 00 57 55 e8 39 fd ff u...Ph. @.WU.9..
ff 83 c4 10 ff 74 24 18 ff 15 0c 20 40 00 85 c0 .....t$.... @...
75 12 ff d6 50 68 98 20 40 00 57 55 e8 19 fd ff u...Ph. @.WU....
ff 83 c4 10 ff 74 24 1c ff 15 0c 20 40 00 85 c0 .....t$.... @...
75 12 ff d6 50 68 98 20 40 00 57 55 e8 f9 fc ff u...Ph. @.WU....
ff 83 c4 10 ff 74 24 20 ff 15 0c 20 40 00 85 c0 .....t$ ... @...
75 12 ff d6 50 68 98 20 40 00 57 55 e8 d9 fc ff u...Ph. @.WU....
ff 83 c4 10 55 ff 15 0c 20 40 00 85 c0 75 12 ff ....U... @...u..
d6 50 68 98 20 40 00 57 55 e8 bc fc ff ff 83 c4 .Ph. @.WU.......
10 5e 5b ff 74 24 08 ff 15 08 20 40 00 5f 5d 00 .^[.t$.... @._].
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
94 24 00 00 aa 24 00 00 ba 24 00 00 c8 24 00 00 .$...$...$...$..
d6 24 00 00 e8 24 00 00 fe 24 00 00 16 25 00 00 .$...$...$...%..
26 25 00 00 36 25 00 00 4c 25 00 00 5c 25 00 00 &%..6%..L%..\%..
6c 25 00 00 00 00 00 00 90 25 00 00 00 00 00 00 l%.......%......
43 74 72 6c 2d 53 68 75 74 64 6f 77 6e 00 00 00 Ctrl-Shutdown...
43 74 72 6c 2d 4c 6f 67 6f 66 66 00 43 74 72 6c Ctrl-Logoff.Ctrl
2d 43 6c 6f 73 65 00 00 43 74 72 6c 2d 42 72 65 -Close..Ctrl-Bre
61 6b 00 00 43 74 72 6c 2d 43 00 00 74 20 40 00 ak..Ctrl-C..t @.
68 20 40 00 5c 20 40 00 00 00 00 00 00 00 00 00 h @.\ @.........
50 20 40 00 40 20 40 00 43 00 6c 00 6f 00 73 00 P @.@ @.C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 e.H.a.n.d.l.e...
55 00 6e 00 6d 00 61 00 70 00 56 00 69 00 65 00 U.n.m.a.p.V.i.e.
77 00 4f 00 66 00 46 00 69 00 6c 00 65 00 00 00 w.O.f.F.i.l.e...
53 00 69 00 67 00 6e 00 61 00 6c 00 4f 00 62 00 S.i.g.n.a.l.O.b.
6a 00 65 00 63 00 74 00 41 00 6e 00 64 00 57 00 j.e.c.t.A.n.d.W.
61 00 69 00 74 00 00 00 09 00 25 00 68 00 73 00 a.i.t.....%.h.s.
0a 00 00 00 0a 00 25 00 37 00 6c 00 75 00 09 00 ......%.7.l.u...
25 00 68 00 73 00 0a 00 00 00 00 00 00 00 00 00 %.h.s...........
50 00 72 00 65 00 73 00 73 00 20 00 27 00 43 00 P.r.e.s.s. .'.C.
74 00 72 00 6c 00 2d 00 43 00 27 00 20 00 6f 00 t.r.l.-.C.'. .o.
72 00 20 00 27 00 43 00 74 00 72 00 6c 00 2d 00 r. .'.C.t.r.l.-.
42 00 72 00 65 00 61 00 6b 00 27 00 20 00 74 00 B.r.e.a.k.'. .t.
6f 00 20 00 74 00 65 00 72 00 6d 00 69 00 6e 00 o. .t.e.r.m.i.n.
61 00 74 00 65 00 21 00 0a 00 0a 00 50 00 72 00 a.t.e.!.....P.r.
6f 00 63 00 65 00 73 00 73 00 09 00 44 00 65 00 o.c.e.s.s...D.e.
62 00 75 00 67 00 20 00 4d 00 65 00 73 00 73 00 b.u.g. .M.e.s.s.
61 00 67 00 65 00 0a 00 00 00 00 00 53 00 65 00 a.g.e.......S.e.
74 00 43 00 6f 00 6e 00 73 00 6f 00 6c 00 65 00 t.C.o.n.s.o.l.e.
43 00 74 00 72 00 6c 00 48 00 61 00 6e 00 64 00 C.t.r.l.H.a.n.d.
6c 00 65 00 72 00 00 00 4d 00 61 00 70 00 56 00 l.e.r...M.a.p.V.
69 00 65 00 77 00 4f 00 66 00 46 00 69 00 6c 00 i.e.w.O.f.F.i.l.
65 00 00 00 44 00 42 00 57 00 49 00 4e 00 5f 00 e...D.B.W.I.N._.
44 00 41 00 54 00 41 00 5f 00 52 00 45 00 41 00 D.A.T.A._.R.E.A.
44 00 59 00 00 00 00 00 45 00 76 00 65 00 6e 00 D.Y.....E.v.e.n.
74 00 20 00 27 00 25 00 6c 00 73 00 27 00 20 00 t. .'.%.l.s.'. .
61 00 6c 00 72 00 65 00 61 00 64 00 79 00 20 00 a.l.r.e.a.d.y. .
63 00 72 00 65 00 61 00 74 00 65 00 64 00 20 00 c.r.e.a.t.e.d. .
62 00 79 00 20 00 61 00 6e 00 6f 00 74 00 68 00 b.y. .a.n.o.t.h.
65 00 72 00 20 00 70 00 72 00 6f 00 63 00 65 00 e.r. .p.r.o.c.e.
73 00 73 00 21 00 0a 00 00 00 00 00 43 00 72 00 s.s.!.......C.r.
65 00 61 00 74 00 65 00 45 00 76 00 65 00 6e 00 e.a.t.e.E.v.e.n.
74 00 00 00 44 00 42 00 57 00 49 00 4e 00 5f 00 t...D.B.W.I.N._.
42 00 55 00 46 00 46 00 45 00 52 00 5f 00 52 00 B.U.F.F.E.R._.R.
45 00 41 00 44 00 59 00 00 00 00 00 00 00 00 00 E.A.D.Y.........
53 00 68 00 61 00 72 00 65 00 64 00 20 00 73 00 S.h.a.r.e.d. .s.
65 00 63 00 74 00 69 00 6f 00 6e 00 20 00 27 00 e.c.t.i.o.n. .'.
25 00 6c 00 73 00 27 00 20 00 61 00 6c 00 72 00 %.l.s.'. .a.l.r.
65 00 61 00 64 00 79 00 20 00 63 00 72 00 65 00 e.a.d.y. .c.r.e.
61 00 74 00 65 00 64 00 20 00 62 00 79 00 20 00 a.t.e.d. .b.y. .
61 00 6e 00 6f 00 74 00 68 00 65 00 72 00 20 00 a.n.o.t.h.e.r. .
70 00 72 00 6f 00 63 00 65 00 73 00 73 00 21 00 p.r.o.c.e.s.s.!.
0a 00 00 00 43 00 72 00 65 00 61 00 74 00 65 00 ....C.r.e.a.t.e.
46 00 69 00 6c 00 65 00 4d 00 61 00 70 00 70 00 F.i.l.e.M.a.p.p.
69 00 6e 00 67 00 00 00 25 00 6c 00 73 00 28 00 i.n.g...%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 0a 00 00 00 44 00 42 00 .%.l.u.....D.B.
57 00 49 00 4e 00 5f 00 42 00 55 00 46 00 46 00 W.I.N._.B.U.F.F.
45 00 52 00 00 00 00 00 b9 79 37 9e 00 00 00 00 E.R......y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 a8 23 40 00 .............#@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 54 24 00 00 00 00 00 00 ........T$......
00 00 00 00 82 25 00 00 00 20 00 00 8c 24 00 00 .....%... ...$..
00 00 00 00 00 00 00 00 9e 25 00 00 38 20 00 00 .........%..8 ..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 94 24 00 00 aa 24 00 00 ba 24 00 00 .....$...$...$..
c8 24 00 00 d6 24 00 00 e8 24 00 00 fe 24 00 00 .$...$...$...$..
16 25 00 00 26 25 00 00 36 25 00 00 4c 25 00 00 .%..&%..6%..L%..
5c 25 00 00 6c 25 00 00 00 00 00 00 90 25 00 00 \%..l%.......%..
00 00 00 00 89 03 4f 75 74 70 75 74 44 65 62 75 ......OutputDebu
67 53 74 72 69 6e 67 41 00 00 24 05 57 72 69 74 gStringA..$.Writ
65 43 6f 6e 73 6f 6c 65 57 00 19 01 45 78 69 74 eConsoleW...Exit
50 72 6f 63 65 73 73 00 52 00 43 6c 6f 73 65 48 Process.R.CloseH
61 6e 64 6c 65 00 d6 04 55 6e 6d 61 70 56 69 65 andle...UnmapVie
77 4f 66 46 69 6c 65 00 b0 04 53 69 67 6e 61 6c wOfFile...Signal
4f 62 6a 65 63 74 41 6e 64 57 61 69 74 00 2d 04 ObjectAndWait.-.
53 65 74 43 6f 6e 73 6f 6c 65 43 74 72 6c 48 61 SetConsoleCtrlHa
6e 64 6c 65 72 00 57 03 4d 61 70 56 69 65 77 4f ndler.W.MapViewO
66 46 69 6c 65 00 85 00 43 72 65 61 74 65 45 76 fFile...CreateEv
65 6e 74 57 00 00 8c 00 43 72 65 61 74 65 46 69 entW....CreateFi
6c 65 4d 61 70 70 69 6e 67 57 00 00 02 02 47 65 leMappingW....Ge
74 4c 61 73 74 45 72 72 6f 72 00 00 64 02 47 65 tLastError..d.Ge
74 53 74 64 48 61 6e 64 6c 65 00 00 c1 01 47 65 tStdHandle....Ge
74 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 49 tCurrentProcessI
64 00 4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 d.KERNEL32.dll..
35 03 77 76 73 70 72 69 6e 74 66 57 00 00 55 53 5.wvsprintfW..US
45 52 33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 ER32.dll........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file DBWINNER.TXT
created in
step 3. to recreate the console application
Debug String Monitor:
CERTUTIL.EXE /DecodeHex /V DBWINNER.TXT DBWINNER.COM
Input Length = 13056 Output Length = 3072 CertUtil: -decodehex command completed successfully.
HARDLINK.COM ‹pathname› …
.\HARDLINK.COM HARDLINK.COM "%COMSPEC%" "%PUBLIC%" "%SystemDrive%" "%SystemRoot%" "%USERPROFILE%"
[1] C:\Users\Stefan\Tidbits\HARDLINK.COM [1] C:\Windows\winsxs\wow64_microsoft-windows-commandprompt_31bf3856ad364e35_6.1.7601.23403_none_f41ab18f7e737921\cmd.exe [2] C:\Windows\SysWOW64\cmd.exe [1] C:\Users\Public [1] C:\Users\Stefan\Tidbits [1] C:\Windows [1] C:\Users\Stefan
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and HARDLINK.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file HARDLINK.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
INT nArgument = 1;
INT nArguments;
LPWSTR *lpArguments;
WCHAR szCWD[MAX_PATH];
DWORD dwCWD;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwFileName;
WCHAR szFileName[32768];
WCHAR cwFileName;
ULONG ulFileName;
HANDLE hFileName;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 2)
PrintConsole(hConsole,
L"No arguments: at least one absolute or relative local path name must be given!\n");
else
{
dwCWD = GetCurrentDirectory(sizeof(szCWD) / sizeof(*szCWD),
szCWD);
if (dwCWD == 0)
PrintConsole(hConsole,
L"GetCurrentDirectory() returned error %lu\n",
dwError = GetLastError());
do
{
dwFileName = sizeof(szFileName) / sizeof(*szFileName);
hFileName = FindFirstFileNameW(lpArguments[nArgument], 0, &dwFileName, szFileName);
if (hFileName == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"FindFirstFileName() returned error %lu for argument \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
else
{
if (lpArguments[nArgument][1] == L':')
cwFileName = lpArguments[nArgument][0];
else if (((lpArguments[nArgument][1] != L'\\')
// && (lpArguments[nArgument][0] != L'\\')
|| (lpArguments[nArgument][0] == L'.'))
&& (szCWD[0] != L'\\')
&& (dwCWD > 0)
&& (dwCWD < sizeof(szCWD) / sizeof(*szCWD)))
cwFileName = szCWD[0];
else
cwFileName = L'?';
PrintConsole(hConsole,
L"\n"
L"[0]\t%ls\n",
lpArguments[nArgument]);
ulFileName = 0;
do
{
PrintConsole(hConsole,
L"[%lu]\t%lc:%ls\n",
++ulFileName, cwFileName, szFileName);
dwFileName = sizeof(szFileName) / sizeof(*szFileName);
}
while (FindNextFileNameW(hFileName, &dwFileName, szFileName));
dwError = GetLastError();
if (dwError == ERROR_HANDLE_EOF)
dwError = ERROR_SUCCESS;
else
PrintConsole(hConsole,
L"FindNextFileName() returned error %lu for argument \'%ls\'\n",
dwError, lpArguments[nArgument]);
if (!FindClose(hFileName))
PrintConsole(hConsole,
L"FindClose() returned error %lu for argument \'%ls\'\n",
GetLastError(), lpArgumentsniArgument]);
}
} while (++nArgument < nArguments);
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
HARDLINK.C
created in step 1., link the compiled
object file HARDLINK.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gs69632 /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:6.0 /RELEASE /STACK:1048576,65536 /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeHARDLINK.COM HARDLINK.C KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE HARDLINK.OBJFor 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. HARDLINK.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file HARDLINK.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
e0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 04 00 00 ......#.........
00 06 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 01 00 00 10 00 00 00 02 00 00 . ..............
06 00 00 00 00 00 2f 03 06 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 c3 36 00 00 03 00 00 85 .0.......6......
00 00 10 00 00 00 01 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
e4 22 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 ."..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 88 22 00 00 40 00 00 00 ........."..@...
00 00 00 00 00 00 00 00 00 20 00 00 40 00 00 00 ......... ..@...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
ef 03 00 00 00 10 00 00 00 04 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 5e 04 00 00 00 20 00 00 .const..^.... ..
00 06 00 00 00 06 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 04 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 fc f7 ff ff 50 ff 15 38 20 01 00 8b f0 .......P..8 ....
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 fc f7 ff ff 50 ff 75 08 ff 15 00 20 01 00 85 .....P.u.... ...
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 28 02 01 00 53 56 57 6a f4 c7 45 f8 01 ...(...SVWj..E..
00 00 00 bb a0 00 00 00 ff 15 28 20 01 00 8b f0 ..........( ....
89 75 fc 83 fe ff 75 0d ff 15 24 20 01 00 8b d8 .u....u...$ ....
e9 e5 01 00 00 8d 45 e8 50 ff 15 20 20 01 00 50 ......E.P.. ..P
e8 dd 01 00 00 8b 3d 24 20 01 00 89 45 e4 85 c0 ......=$ ...E...
75 0f ff d7 8b d8 53 68 58 22 01 00 e9 8a 01 00 u.....ShX"......
00 83 7d e8 02 73 12 68 b8 21 01 00 56 e8 3e ff ..}..s.h.!..V.>.
ff ff 59 59 e9 5d 01 00 00 8d 85 d8 fd ff ff 50 ..YY.].........P
68 04 01 00 00 ff 15 1c 20 01 00 89 45 e0 85 c0 h....... ...E...
75 16 ff d7 50 68 8c 21 01 00 68 58 21 01 00 56 u...Ph.!..hX!..V
e8 0b ff ff ff 83 c4 10 8b 45 e4 8b 4d f8 8d 34 .........E..M..4
88 8d 85 d8 fd fe ff 50 8d 45 f0 50 6a 00 c7 45 .......P.E.Pj..E
f0 00 80 00 00 ff 36 ff 15 18 20 01 00 89 45 ec ......6... ...E.
83 f8 ff 75 11 ff d7 ff 36 8b d8 53 68 34 21 01 ...u....6..Sh4!.
00 e9 ce 00 00 00 8b 06 0f b7 48 02 83 f9 3a 75 ..........H...:u
05 0f b7 18 eb 2d 83 f9 5c 75 06 66 83 38 2e 75 .....-..\u.f.8.u
1f 66 83 bd d8 fd ff ff 5c 74 15 8b 4d e0 49 81 .f......\t..M.I.
f9 02 01 00 00 77 09 0f b7 9d d8 fd ff ff eb 03 .....w..........
6a 3f 5b 50 68 20 21 01 00 ff 75 fc e8 7f fe ff j?[Ph !...u.....
ff 83 c4 0c 83 65 f4 00 0f b7 db ff 45 f4 8d 85 .....e......E...
d8 fd fe ff 50 53 ff 75 f4 68 00 21 01 00 ff 75 ....PS.u.h.!...u
fc e8 5a fe ff ff 83 c4 14 8d 85 d8 fd fe ff 50 ..Z............P
8d 45 f0 50 ff 75 ec c7 45 f0 00 80 00 00 ff 15 .E.P.u..E.......
14 20 01 00 85 c0 75 c3 ff d7 8b d8 83 fb 26 75 . ....u.......&u
04 33 db eb 18 ff 36 53 68 dc 20 01 00 68 80 20 .3....6Sh. ..h.
01 00 ff 75 fc e8 16 fe ff ff 83 c4 14 ff 75 ec ...u..........u.
ff 15 10 20 01 00 85 c0 75 1a ff 36 ff d7 50 68 ... ....u..6..Ph
6c 20 01 00 68 80 20 01 00 ff 75 fc e8 ef fd ff l ..h. ...u.....
ff 83 c4 14 ff 45 f8 8b 45 f8 3b 45 e8 0f 82 d5 .....E..E.;E....
fe ff ff 8b 75 fc ff 75 e4 ff 15 0c 20 01 00 85 ....u..u.... ...
c0 74 16 ff d7 50 68 58 20 01 00 68 58 21 01 00 .t...PhX ..hX!..
56 e8 ba fd ff ff 83 c4 10 56 ff 15 08 20 01 00 V........V... ..
85 c0 75 16 ff d7 50 68 40 20 01 00 68 58 21 01 ..u...Ph@ ..hX!.
00 56 e8 99 fd ff ff 83 c4 10 53 ff 15 04 20 01 .V........S... .
00 cc 55 8b ec 51 8b 45 08 53 56 33 f6 57 8b f8 ..U..Q.E.SV3.W..
89 75 08 89 75 fc 39 75 0c 0f 84 4f 01 00 00 3b .u..u.9u...O...;
c6 0f 84 47 01 00 00 0f b7 08 66 3b ce 0f 84 3b ...G......f;...;
01 00 00 83 f9 20 74 0a 83 f9 09 74 05 33 db 43 ..... t....t.3.C
eb 02 33 db 39 75 08 75 2b 66 83 f9 20 74 06 66 ..3.9u.u+f.. t.f
83 f9 09 75 1f 83 c0 02 0f b7 08 83 f9 20 74 f5 ...u......... t.
83 f9 09 74 f0 33 c9 66 39 30 89 75 fc 0f 95 c1 ...t.3.f90.u....
03 d9 eb 21 66 83 f9 5c 75 05 f7 55 fc eb 13 39 ...!f..\u..U...9
75 fc 75 0b 66 83 f9 22 75 05 f7 55 08 eb 03 89 u.u.f.."u..U....
75 fc 83 c0 02 0f b7 08 66 3b ce 75 a7 2b c7 83 u.......f;.u.+..
c0 02 d1 f8 8d 44 58 02 03 c0 50 56 ff 15 30 20 .....DX...PV..0
01 00 8b f0 33 d2 3b f2 0f 84 b8 00 00 00 8d 44 ....3.;........D
9e 04 89 06 89 55 08 33 db 83 7d 08 00 75 31 0f .....U.3..}..u1.
b7 0f 83 f9 20 74 05 83 f9 09 75 24 33 c9 66 89 .... t....u$3.f.
08 83 c7 02 0f b7 0f 83 f9 20 74 f5 83 f9 09 74 ......... t....t
f0 33 d2 66 39 17 74 4d 43 8b c7 89 3c 9e eb 45 .3.f9.tMC...<..E
0f b7 0f 83 f9 5c 75 0c 66 89 08 83 c0 02 83 c7 .....\u.f.......
02 42 eb 31 83 f9 22 75 21 8d 4a 01 d1 e9 f7 d9 .B.1.."u!.J.....
8d 04 48 f6 c2 01 75 0f 83 c7 02 66 83 3f 22 75 ..H...u....f.?"u
38 83 7d 08 00 74 32 6a 22 59 66 89 08 83 c0 02 8.}..t2j"Yf.....
83 c7 02 33 d2 66 83 3f 00 0f 85 7a ff ff ff 33 ...3.f.?...z...3
c9 43 66 89 08 21 0c 9e 8b 45 0c 89 18 39 4d 08 .Cf..!...E...9M.
74 14 68 a0 00 00 00 eb 07 f7 55 08 eb d5 6a 57 t.h.......U...jW
ff 15 2c 20 01 00 5f 8b c6 5e 5b c9 c2 08 00 00 .., .._..^[.....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
60 23 00 00 70 23 00 00 7e 23 00 00 8c 23 00 00 `#..p#..~#...#..
98 23 00 00 a4 23 00 00 b8 23 00 00 ce 23 00 00 .#...#...#...#..
e6 23 00 00 f8 23 00 00 08 24 00 00 18 24 00 00 .#...#...$...$..
28 24 00 00 00 00 00 00 44 24 00 00 00 00 00 00 ($......D$......
43 00 6c 00 6f 00 73 00 65 00 48 00 61 00 6e 00 C.l.o.s.e.H.a.n.
64 00 6c 00 65 00 00 00 4c 00 6f 00 63 00 61 00 d.l.e...L.o.c.a.
6c 00 46 00 72 00 65 00 65 00 00 00 46 00 69 00 l.F.r.e.e...F.i.
6e 00 64 00 43 00 6c 00 6f 00 73 00 65 00 00 00 n.d.C.l.o.s.e...
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 61 00 72 00 67 00 .f.o.r. .a.r.g.
75 00 6d 00 65 00 6e 00 74 00 20 00 27 00 25 00 u.m.e.n.t. .'.%.
6c 00 73 00 27 00 0a 00 00 00 00 00 46 00 69 00 l.s.'.......F.i.
6e 00 64 00 4e 00 65 00 78 00 74 00 46 00 69 00 n.d.N.e.x.t.F.i.
6c 00 65 00 4e 00 61 00 6d 00 65 00 00 00 00 00 l.e.N.a.m.e.....
5b 00 25 00 6c 00 75 00 5d 00 09 00 25 00 6c 00 [.%.l.u.]...%.l.
63 00 3a 00 25 00 6c 00 73 00 0a 00 00 00 00 00 c.:.%.l.s.......
0a 00 5b 00 30 00 5d 00 09 00 25 00 6c 00 73 00 ..[.0.]...%.l.s.
0a 00 00 00 46 00 69 00 6e 00 64 00 46 00 69 00 ....F.i.n.d.F.i.
72 00 73 00 74 00 46 00 69 00 6c 00 65 00 4e 00 r.s.t.F.i.l.e.N.
61 00 6d 00 65 00 00 00 25 00 6c 00 73 00 28 00 a.m.e...%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 0a 00 00 00 47 00 65 00 .%.l.u.....G.e.
74 00 43 00 75 00 72 00 72 00 65 00 6e 00 74 00 t.C.u.r.r.e.n.t.
44 00 69 00 72 00 65 00 63 00 74 00 6f 00 72 00 D.i.r.e.c.t.o.r.
79 00 00 00 00 00 00 00 4e 00 6f 00 20 00 61 00 y.......N.o. .a.
72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 73 00 r.g.u.m.e.n.t.s.
3a 00 20 00 61 00 74 00 20 00 6c 00 65 00 61 00 :. .a.t. .l.e.a.
73 00 74 00 20 00 6f 00 6e 00 65 00 20 00 61 00 s.t. .o.n.e. .a.
62 00 73 00 6f 00 6c 00 75 00 74 00 65 00 20 00 b.s.o.l.u.t.e. .
6f 00 72 00 20 00 72 00 65 00 6c 00 61 00 74 00 o.r. .r.e.l.a.t.
69 00 76 00 65 00 20 00 6c 00 6f 00 63 00 61 00 i.v.e. .l.o.c.a.
6c 00 20 00 70 00 61 00 74 00 68 00 20 00 6e 00 l. .p.a.t.h. .n.
61 00 6d 00 65 00 20 00 6d 00 75 00 73 00 74 00 a.m.e. .m.u.s.t.
20 00 62 00 65 00 20 00 67 00 69 00 76 00 65 00 .b.e. .g.i.v.e.
6e 00 21 00 0a 00 00 00 43 00 6f 00 6d 00 6d 00 n.!.....C.o.m.m.
61 00 6e 00 64 00 4c 00 69 00 6e 00 65 00 54 00 a.n.d.L.i.n.e.T.
6f 00 41 00 72 00 67 00 76 00 00 00 00 00 00 00 o.A.r.g.v.......
b9 79 37 9e 00 00 00 00 5c 00 00 00 45 54 41 44 .y7.....\...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 80 22 01 00 00 00 00 00 00 00 00 00 ....."..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 20 23 00 00 00 00 00 00 00 00 00 00 .... #..........
36 24 00 00 00 20 00 00 58 23 00 00 00 00 00 00 6$... ..X#......
00 00 00 00 52 24 00 00 38 20 00 00 00 00 00 00 ....R$..8 ......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
60 23 00 00 70 23 00 00 7e 23 00 00 8c 23 00 00 `#..p#..~#...#..
98 23 00 00 a4 23 00 00 b8 23 00 00 ce 23 00 00 .#...#...#...#..
e6 23 00 00 f8 23 00 00 08 24 00 00 18 24 00 00 .#...#...$...$..
28 24 00 00 00 00 00 00 44 24 00 00 00 00 00 00 ($......D$......
24 05 57 72 69 74 65 43 6f 6e 73 6f 6c 65 57 00 $.WriteConsoleW.
19 01 45 78 69 74 50 72 6f 63 65 73 73 00 52 00 ..ExitProcess.R.
43 6c 6f 73 65 48 61 6e 64 6c 65 00 48 03 4c 6f CloseHandle.H.Lo
63 61 6c 46 72 65 65 00 2e 01 46 69 6e 64 43 6c calFree...FindCl
6f 73 65 00 44 01 46 69 6e 64 4e 65 78 74 46 69 ose.D.FindNextFi
6c 65 4e 61 6d 65 57 00 36 01 46 69 6e 64 46 69 leNameW.6.FindFi
72 73 74 46 69 6c 65 4e 61 6d 65 57 00 00 bf 01 rstFileNameW....
47 65 74 43 75 72 72 65 6e 74 44 69 72 65 63 74 GetCurrentDirect
6f 72 79 57 00 00 87 01 47 65 74 43 6f 6d 6d 61 oryW....GetComma
6e 64 4c 69 6e 65 57 00 02 02 47 65 74 4c 61 73 ndLineW...GetLas
74 45 72 72 6f 72 00 00 64 02 47 65 74 53 74 64 tError..d.GetStd
48 61 6e 64 6c 65 00 00 73 04 53 65 74 4c 61 73 Handle..s.SetLas
74 45 72 72 6f 72 00 00 44 03 4c 6f 63 61 6c 41 tError..D.LocalA
6c 6c 6f 63 00 00 4b 45 52 4e 45 4c 33 32 2e 64 lloc..KERNEL32.d
6c 6c 00 00 35 03 77 76 73 70 72 69 6e 74 66 57 ll..5.wvsprintfW
00 00 55 53 45 52 33 32 2e 64 6c 6c 00 00 00 00 ..USER32.dll....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file HARDLINK.TXT
created in
step 3. to recreate the console application
Network Enumerator:
CERTUTIL.EXE /DecodeHex /V HARDLINK.TXT HARDLINK.COM
Input Length = 13056 Output Length = 3072 CertUtil: -decodehex command completed successfully.
MAKESORTLCID
LANGIDFROMLCID
SORTIDFROMLCID
PRIMARYLANGID
SUBLANGID
MAKELANGID
VerLanguageName()
LANGUAGE.COM
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and LANGUAGE.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file LANGUAGE.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
DWORD dwError = ERROR_SUCCESS;
DWORD dwPrimaryLanguage;
DWORD dwLanguage;
WCHAR szLanguage[123];
WCHAR szNeutral[123];
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
if (VerLanguageName(0,
szNeutral,
sizeof(szNeutral) / sizeof(*szNeutral)) == 0)
PrintConsole(hConsole,
L"VerLanguageName() returned error %lu for LCID 0x%04lX\n",
dwError = GetLastError(), 0);
else
{
PrintConsole(hConsole,
L"\n0x%04lX = %ls\n",
0, szNeutral);
for (dwPrimaryLanguage = 0; dwPrimaryLanguage < 0x0200; dwPrimaryLanguage++)
for (dwLanguage = dwPrimaryLanguage; dwLanguage < 0x8000; dwLanguage += 0x0400)
if (VerLanguageName(dwLanguage,
szLanguage,
sizeof(szLanguage) / sizeof(*szLanguage)) == 0)
PrintConsole(hConsole,
L"VerLanguageName() returned error %lu for LCID 0x%04lX\n",
dwError = GetLastError(), dwLanguage);
else
if (wcscmp(szLanguage, szNeutral) != 0)
PrintConsole(hConsole,
L"\n0x%04lX = %ls\n" + (dwLanguage != dwPrimaryLanguage),
dwLanguage, szLanguage);
else
if ((dwLanguage != 0)
&& (dwLanguage == dwPrimaryLanguage))
break;
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
LANGUAGE.C
created in step 1., link the compiled
object file LANGUAGE.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeLANGUAGE.COM LANGUAGE.C KERNEL32.LIB USER32.LIB ERASE LANGUAGE.OBJFor 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. LANGUAGE.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file LANGUAGE.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 02 00 00 ......#.........
00 04 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 bf 6f 00 00 03 00 00 85 .0.......o......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
70 21 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 p!..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 08 21 00 00 40 00 00 00 .........!..@...
00 00 00 00 00 00 00 00 00 20 00 00 24 00 00 00 ......... ..$...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
a9 01 00 00 00 10 00 00 00 02 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 58 02 00 00 00 20 00 00 .const..X.... ..
00 04 00 00 00 04 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 1c 20 40 00 8b f0 .......P... @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 00 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec f8 01 00 00 53 56 57 33 f6 6a f4 89 75 .......SVW3.j..u
f8 ff 15 14 20 40 00 8b f8 83 ff ff 75 0e ff 15 .... @......u...
10 20 40 00 89 45 f8 e9 23 01 00 00 6a 7b 8d 85 . @..E..#...j{..
00 ff ff ff 50 56 ff 15 0c 20 40 00 85 c0 75 1e ....PV... @...u.
ff 15 10 20 40 00 56 50 68 90 20 40 00 57 89 45 ... @.VPh. @.W.E
f8 e8 5a ff ff ff 83 c4 10 e9 d1 00 00 00 8d 85 ..Z.............
00 ff ff ff 50 56 68 6c 20 40 00 57 e8 3f ff ff ....PVhl @.W.?..
ff 83 c4 10 89 75 fc bb 00 80 00 00 8b 75 fc e9 .....u.......u..
93 00 00 00 6a 7b 8d 85 08 fe ff ff 50 56 ff 15 ....j{......PV..
0c 20 40 00 85 c0 75 12 ff 15 10 20 40 00 56 50 . @...u.... @.VP
89 45 f8 68 90 20 40 00 eb 53 8d 8d 00 ff ff ff .E.h. @..S......
8d 85 08 fe ff ff 66 8b 10 66 3b 11 75 1e 66 85 ......f..f;.u.f.
d2 74 15 66 8b 50 02 66 3b 51 02 75 0f 83 c0 04 .t.f.P.f;Q.u....
83 c1 04 66 85 d2 75 de 33 c0 eb 05 1b c0 83 d8 ...f..u.3.......
ff 85 c0 74 23 8d 85 08 fe ff ff 50 33 c0 3b 75 ...t#......P3.;u
fc 56 0f 95 c0 8d 04 45 6c 20 40 00 50 57 e8 ad .V.....El @.PW..
fe ff ff 83 c4 10 eb 09 85 f6 74 05 3b 75 fc 74 ..........t.;u.t
0e 81 c6 00 04 00 00 3b f3 0f 82 65 ff ff ff ff .......;...e....
45 fc 81 7d fc 00 02 00 00 0f 82 4d ff ff ff 57 E..}.......M...W
ff 15 08 20 40 00 85 c0 75 15 ff 15 10 20 40 00 ... @...u.... @.
50 68 28 20 40 00 57 e8 64 fe ff ff 83 c4 0c ff Ph( @.W.d.......
75 f8 ff 15 04 20 40 00 cc 00 00 00 00 00 00 00 u.... @.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
d0 21 00 00 e0 21 00 00 ee 21 00 00 fc 21 00 00 .!...!...!...!..
10 22 00 00 20 22 00 00 00 00 00 00 3e 22 00 00 .".. "......>"..
00 00 00 00 00 00 00 00 43 00 6c 00 6f 00 73 00 ........C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 28 00 e.H.a.n.d.l.e.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 0a 00 00 00 0a 00 30 00 .%.l.u.......0.
78 00 25 00 30 00 34 00 6c 00 58 00 20 00 3d 00 x.%.0.4.l.X. .=.
20 00 25 00 6c 00 73 00 0a 00 00 00 00 00 00 00 .%.l.s.........
56 00 65 00 72 00 4c 00 61 00 6e 00 67 00 75 00 V.e.r.L.a.n.g.u.
61 00 67 00 65 00 4e 00 61 00 6d 00 65 00 28 00 a.g.e.N.a.m.e.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 4c 00 43 00 49 00 44 00 20 00 30 00 78 00 .L.C.I.D. .0.x.
25 00 30 00 34 00 6c 00 58 00 0a 00 00 00 00 00 %.0.4.l.X.......
b9 79 37 9e 00 00 00 00 68 00 00 00 45 54 41 44 .y7.....h...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 00 21 40 00 00 00 00 00 00 00 00 00 .....!@.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
ac 21 00 00 00 00 00 00 00 00 00 00 30 22 00 00 .!..........0"..
00 20 00 00 c8 21 00 00 00 00 00 00 00 00 00 00 . ...!..........
4c 22 00 00 1c 20 00 00 00 00 00 00 00 00 00 00 L"... ..........
00 00 00 00 00 00 00 00 00 00 00 00 d0 21 00 00 .............!..
e0 21 00 00 ee 21 00 00 fc 21 00 00 10 22 00 00 .!...!...!..."..
20 22 00 00 00 00 00 00 3e 22 00 00 00 00 00 00 "......>"......
24 05 57 72 69 74 65 43 6f 6e 73 6f 6c 65 57 00 $.WriteConsoleW.
19 01 45 78 69 74 50 72 6f 63 65 73 73 00 52 00 ..ExitProcess.R.
43 6c 6f 73 65 48 61 6e 64 6c 65 00 e3 04 56 65 CloseHandle...Ve
72 4c 61 6e 67 75 61 67 65 4e 61 6d 65 57 00 00 rLanguageNameW..
02 02 47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 ..GetLastError..
64 02 47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 d.GetStdHandle..
4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 KERNEL32.dll..5.
77 76 73 70 72 69 6e 74 66 57 00 00 55 53 45 52 wvsprintfW..USER
33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 32.dll..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file LANGUAGE.TXT
created in
step 3. to recreate the console application
Language Enumerator:
CERTUTIL.EXE /DecodeHex /V LANGUAGE.TXT LANGUAGE.COM
Input Length = 8704 Output Length = 2048 CertUtil: -decodehex command completed successfully.
MAKELCID
GetLocaleInfo()
GetLocaleInfo()
GetLocaleInfo()
LOCALE.COM
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and LOCALE.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file LOCALE.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
DWORD dwError = ERROR_SUCCESS;
DWORD dwPrimaryLanguage;
DWORD dwLanguage;
BOOL bLanguage;
WCHAR szLanguage[123];
WCHAR szEnglishLanguage[123];
WCHAR szEnglishCountry[123];
#ifdef NATIVE
WCHAR szNativeLanguage[80];
WCHAR szNativeCountry[80];
#endif
WCHAR szISO639[9];
WCHAR szISO3166[9];
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
for (dwPrimaryLanguage = 0; ++dwPrimaryLanguage < 0x0200;)
{
bLanguage = FALSE;
for (dwLanguage = dwPrimaryLanguage; dwLanguage += 0x0400, dwLanguage < 0x8000;)
if (GetLocaleInfo(dwLanguage,
LOCALE_SLANGUAGE,
szLanguage,
sizeof(szLanguage) / sizeof(*szLanguage)) == 0)
{
dwError = GetLastError();
if (dwError == ERROR_INVALID_PARAMETER)
dwError = ERROR_SUCCESS;
else
PrintConsole(hConsole,
L"GetLocaleInfo() returned error %lu for LCID 0x%04lX\n",
dwError, dwLanguage);
}
else
{
if (GetLocaleInfo(dwLanguage,
LOCALE_SISO639LANGNAME,
szISO639,
sizeof(szISO3166) / sizeof(*szISO3166)) == 0)
PrintConsole(hConsole,
L"GetLocaleInfo() returned error %lu for LCID 0x%04lX\n",
dwError = GetLastError(), dwLanguage);
if (GetLocaleInfo(dwLanguage,
LOCALE_SISO3166CTRYNAME,
szISO3166,
sizeof(szISO3166) / sizeof(*szISO3166)) == 0)
PrintConsole(hConsole,
L"GetLocaleInfo() returned error %lu for LCID 0x%04lX\n",
dwError = GetLastError(), dwLanguage);
if (GetLocaleInfo(dwLanguage,
LOCALE_SENGLANGUAGE,
szEnglishLanguage,
sizeof(szEnglishLanguage) / sizeof(*szEnglishLanguage)) == 0)
PrintConsole(hConsole,
L"GetLocaleInfo() returned error %lu for LCID 0x%04lX\n",
dwError = GetLastError(), dwLanguage);
if (GetLocaleInfo(dwLanguage,
LOCALE_SENGCOUNTRY,
szEnglishCountry,
sizeof(szEnglishCountry) / sizeof(*szEnglishCountry)) == 0)
PrintConsole(hConsole,
L"GetLocaleInfo() returned error %lu for LCID 0x%04lX\n",
dwError = GetLastError(), dwLanguage);
#ifdef NATIVE
if (GetLocaleInfo(dwLanguage,
LOCALE_SNATIVELANGNAME,
szNativeLanguage,
sizeof(szNativeLanguage) / sizeof(*szNativeLanguage)) == 0)
PrintConsole(hConsole,
L"GetLocaleInfo() returned error %lu for LCID 0x%04lX\n",
dwError = GetLastError(), dwLanguage);
if (GetLocaleInfo(dwLanguage,
LOCALE_SNATIVECTRYNAME,
szNativeCountry,
sizeof(szNativeCountry) / sizeof(*szNativeCountry)) == 0)
PrintConsole(hConsole,
L"GetLocaleInfo() returned error %lu for LCID 0x%04lX\n",
dwError = GetLastError(), dwLanguage);
PrintConsole(hConsole,
L"\n0x%04lX = %ls // %ls-%ls;%ls (%ls), %ls (%ls)\n" + bLanguage,
dwLanguage,
szLanguage,
szISO639,
szISO3166,
szEnglishLanguage,
szEnglishCountry,
szNativeLanguage,
szNativeCountry);
#else
PrintConsole(hConsole,
L"\n0x%04lX = %ls // %ls-%ls;%ls (%ls)\n" + bLanguage,
dwLanguage,
szLanguage,
szISO639,
szISO3166,
szEnglishLanguage,
szEnglishCountry);
#endif
bLanguage = TRUE;
}
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
LOCALE.C
created in step 1., link the compiled
object file LOCALE.OBJ
and cleanup afterwards:
SET CL=/DNATIVE /GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeLOCALE.COM LOCALE.C KERNEL32.LIB USER32.LIB ERASE LOCALE.OBJFor 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. LOCALE.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file LOCALE.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 04 00 00 ......#.........
00 04 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 ae ac 00 00 03 00 00 85 .0..............
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
b0 21 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 .!..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 48 21 00 00 40 00 00 00 ........H!..@...
00 00 00 00 00 00 00 00 00 20 00 00 24 00 00 00 ......... ..$...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
64 02 00 00 00 10 00 00 00 04 00 00 00 02 00 00 d...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 96 02 00 00 00 20 00 00 .const....... ..
00 04 00 00 00 06 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 1c 20 40 00 8b f0 .......P... @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 00 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 64 04 00 00 83 65 f8 00 53 56 57 6a f4 ...d....e..SVWj.
ff 15 14 20 40 00 89 45 fc 83 f8 ff 75 0e ff 15 ... @..E....u...
10 20 40 00 89 45 f8 e9 de 01 00 00 8b 3d 10 20 . @..E.......=.
40 00 c7 45 f4 01 04 00 00 c7 45 ec ff 01 00 00 @..E......E.....
be d0 20 40 00 83 65 f0 00 8b 5d f4 e9 81 01 00 .. @..e...].....
00 6a 7b 8d 85 9c fb ff ff 50 6a 02 53 ff 15 0c .j{......Pj.S...
20 40 00 85 c0 75 26 ff d7 89 45 f8 83 f8 57 75 @...u&...E...Wu
09 83 65 f8 00 e9 52 01 00 00 53 50 56 ff 75 fc ..e...R...SPV.u.
e8 2b ff ff ff 83 c4 10 e9 3f 01 00 00 6a 09 8d .+.......?...j..
45 c4 50 6a 59 53 ff 15 0c 20 40 00 85 c0 75 13 E.PjYS... @...u.
ff d7 53 50 56 ff 75 fc 89 45 f8 e8 00 ff ff ff ..SPV.u..E......
83 c4 10 6a 09 8d 45 d8 50 6a 5a 53 ff 15 0c 20 ...j..E.PjZS...
40 00 85 c0 75 13 ff d7 53 50 56 ff 75 fc 89 45 @...u...SPV.u..E
f8 e8 da fe ff ff 83 c4 10 6a 7b 8d 85 94 fc ff .........j{.....
ff 50 68 01 10 00 00 53 ff 15 0c 20 40 00 85 c0 .Ph....S... @...
75 13 ff d7 53 50 56 ff 75 fc 89 45 f8 e8 ae fe u...SPV.u..E....
ff ff 83 c4 10 6a 7b 8d 85 8c fd ff ff 50 68 02 .....j{......Ph.
10 00 00 53 ff 15 0c 20 40 00 85 c0 75 13 ff d7 ...S... @...u...
53 50 56 ff 75 fc 89 45 f8 e8 82 fe ff ff 83 c4 SPV.u..E........
10 6a 50 8d 85 24 ff ff ff 50 6a 04 53 ff 15 0c .jP..$...Pj.S...
20 40 00 85 c0 75 13 ff d7 53 50 56 ff 75 fc 89 @...u...SPV.u..
45 f8 e8 59 fe ff ff 83 c4 10 6a 50 8d 85 84 fe E..Y......jP....
ff ff 50 6a 08 53 ff 15 0c 20 40 00 85 c0 75 13 ..Pj.S... @...u.
ff d7 53 50 56 ff 75 fc 89 45 f8 e8 30 fe ff ff ..SPV.u..E..0...
83 c4 10 8d 85 84 fe ff ff 50 8d 85 24 ff ff ff .........P..$...
50 8d 85 8c fd ff ff 50 8d 85 94 fc ff ff 50 8d P......P......P.
45 d8 50 8d 45 c4 50 8d 85 9c fb ff ff 50 8b 45 E.P.E.P......P.E
f0 53 8d 04 45 70 20 40 00 50 ff 75 fc e8 ee fd .S..Ep @.P.u....
ff ff 83 c4 28 c7 45 f0 01 00 00 00 81 c3 00 04 ....(.E.........
00 00 81 fb 00 80 00 00 0f 82 73 fe ff ff ff 45 ..........s....E
f4 ff 4d ec 0f 85 5b fe ff ff ff 75 fc ff 15 08 ..M...[....u....
20 40 00 85 c0 75 13 ff d7 50 68 28 20 40 00 ff @...u...Ph( @..
75 fc e8 a9 fd ff ff 83 c4 0c ff 75 f8 ff 15 04 u..........u....
20 40 00 cc 00 00 00 00 00 00 00 00 00 00 00 00 @..............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
10 22 00 00 20 22 00 00 2e 22 00 00 3c 22 00 00 .".. "..."..<"..
4e 22 00 00 5e 22 00 00 00 00 00 00 7c 22 00 00 N"..^"......|"..
00 00 00 00 00 00 00 00 43 00 6c 00 6f 00 73 00 ........C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 28 00 e.H.a.n.d.l.e.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 0a 00 00 00 00 00 00 00 .%.l.u.........
0a 00 30 00 78 00 25 00 30 00 34 00 6c 00 58 00 ..0.x.%.0.4.l.X.
20 00 3d 00 20 00 25 00 6c 00 73 00 20 00 2f 00 .=. .%.l.s. ./.
2f 00 20 00 25 00 6c 00 73 00 2d 00 25 00 6c 00 /. .%.l.s.-.%.l.
73 00 3b 00 25 00 6c 00 73 00 20 00 28 00 25 00 s.;.%.l.s. .(.%.
6c 00 73 00 29 00 2c 00 20 00 25 00 6c 00 73 00 l.s.).,. .%.l.s.
20 00 28 00 25 00 6c 00 73 00 29 00 0a 00 00 00 .(.%.l.s.).....
47 00 65 00 74 00 4c 00 6f 00 63 00 61 00 6c 00 G.e.t.L.o.c.a.l.
65 00 49 00 6e 00 66 00 6f 00 28 00 29 00 20 00 e.I.n.f.o.(.). .
72 00 65 00 74 00 75 00 72 00 6e 00 65 00 64 00 r.e.t.u.r.n.e.d.
20 00 65 00 72 00 72 00 6f 00 72 00 20 00 25 00 .e.r.r.o.r. .%.
6c 00 75 00 20 00 66 00 6f 00 72 00 20 00 4c 00 l.u. .f.o.r. .L.
43 00 49 00 44 00 20 00 30 00 78 00 25 00 30 00 C.I.D. .0.x.%.0.
34 00 6c 00 58 00 0a 00 00 00 00 00 00 00 00 00 4.l.X...........
b9 79 37 9e 00 00 00 00 68 00 00 00 45 54 41 44 .y7.....h...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 40 21 40 00 00 00 00 00 00 00 00 00 ....@!@.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
ec 21 00 00 00 00 00 00 00 00 00 00 6e 22 00 00 .!..........n"..
00 20 00 00 08 22 00 00 00 00 00 00 00 00 00 00 . ..."..........
8a 22 00 00 1c 20 00 00 00 00 00 00 00 00 00 00 ."... ..........
00 00 00 00 00 00 00 00 00 00 00 00 10 22 00 00 ............."..
20 22 00 00 2e 22 00 00 3c 22 00 00 4e 22 00 00 "..."..<"..N"..
5e 22 00 00 00 00 00 00 7c 22 00 00 00 00 00 00 ^"......|"......
24 05 57 72 69 74 65 43 6f 6e 73 6f 6c 65 57 00 $.WriteConsoleW.
19 01 45 78 69 74 50 72 6f 63 65 73 73 00 52 00 ..ExitProcess.R.
43 6c 6f 73 65 48 61 6e 64 6c 65 00 06 02 47 65 CloseHandle...Ge
74 4c 6f 63 61 6c 65 49 6e 66 6f 57 00 00 02 02 tLocaleInfoW....
47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 64 02 GetLastError..d.
47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 4b 45 GetStdHandle..KE
52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 77 76 RNEL32.dll..5.wv
73 70 72 69 6e 74 66 57 00 00 55 53 45 52 33 32 sprintfW..USER32
2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 .dll............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file LOCALE.TXT
created in
step 3. to recreate the console application
Locale Enumerator:
CERTUTIL.EXE /DecodeHex /V LOCALE.TXT LOCALE.COM
Input Length = 10880 Output Length = 2560 CertUtil: -decodehex command completed successfully.
WNetOpenEnum()
WNetEnumResource()
WNetCloseEnum()
NETRESOURCE structure
NETWORK.COM
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and NETWORK.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file NETWORK.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winnetwk.h>
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
const LPCWSTR szDisplayType[] = {L"Generic",
L"Domain",
L"Server",
L"Share",
L"File",
L"Group",
L"Network",
L"Root",
L"Administrative Share",
L"Directory",
L"Tree",
L"NDS Container"};
__declspec(safebuffers)
VOID WINAPI Network(HANDLE hConsole, LPNETRESOURCE lpNR, DWORD dwLevel)
{
NETRESOURCE nr[80];
HANDLE hNetwork;
DWORD dwCount;
DWORD dwSize;
DWORD dwError = WNetOpenEnum(RESOURCE_GLOBALNET,
RESOURCETYPE_ANY,
#if 0
RESOURCEUSAGE_ALL,
#else
0,
#endif
lpNR,
&hNetwork);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"WNetOpenEnum() returned error %lu\n",
dwError);
else
{
for (;;)
{
dwCount = 1;
dwSize = sizeof(nr);
dwError = WNetEnumResource(hNetwork,
&dwCount,
nr,
&dwSize);
if (dwError != ERROR_SUCCESS)
break;
PrintConsole(hConsole,
L"\n"
L"%lsScope:\t\t%lu\n"
L"%lsType:\t\t%lu\n"
L"%lsDisplay Type:\t%lu = %ls\n"
L"%lsUsage:\t\t0x%08lX\n"
L"%lsLocal Name:\t%ls\n"
L"%lsRemote Name:\t%ls\n"
L"%lsComment:\t%ls\n"
L"%lsProvider:\t%ls\n",
L"\t\t\t" + 3 + dwLevel, nr->dwScope,
L"\t\t\t" + 3 + dwLevel, nr->dwType,
L"\t\t\t" + 3 + dwLevel, nr->dwDisplayType,
nr->dwDisplayType < sizeof(szDisplayType) / sizeof(*szDisplayType) ? szDisplayType[nr->dwDisplayType] : L"Unknown",
L"\t\t\t" + 3 + dwLevel, nr->dwUsage,
L"\t\t\t" + 3 + dwLevel, nr->lpLocalName,
L"\t\t\t" + 3 + dwLevel, nr->lpRemoteName,
L"\t\t\t" + 3 + dwLevel, nr->lpComment,
L"\t\t\t" + 3 + dwLevel, nr->lpProvider);
if (nr->dwUsage & RESOURCEUSAGE_CONTAINER)
Network(hConsole, nr, dwLevel - 1);
}
if (dwError != ERROR_NO_MORE_ITEMS)
PrintConsole(hConsole,
L"WNetEnumResource() returned error %lu\n",
dwError);
dwError = WNetCloseEnum(hNetwork);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"WNetCloseEnum() returned error %lu\n",
dwError);
}
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
DWORD dwError = ERROR_SUCCESS;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
Network(hConsole, (LPNETRESOURCE) NULL, 0);
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
NETWORK.C
created in step 1., link the compiled
object file NETWORK.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeNETWORK.COM NETWORK.C KERNEL32.LIB MPR.LIB USER32.LIB ERASE NETWORK.OBJFor 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. NETWORK.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file NETWORK.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 02 00 00 ......#.........
00 06 00 00 00 00 00 00 ac 11 00 00 00 10 00 00 ................
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 dc ba 00 00 03 00 00 85 .0..............
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
98 23 00 00 50 00 00 00 00 00 00 00 00 00 00 00 .#..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 30 23 00 00 40 00 00 00 ........0#..@...
00 00 00 00 00 00 00 00 00 20 00 00 30 00 00 00 ......... ..0...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
ff 01 00 00 00 10 00 00 00 02 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 c8 04 00 00 00 20 00 00 .const....... ..
00 06 00 00 00 04 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 28 20 40 00 8b f0 .......P..( @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 00 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 08 0a 00 00 8d 45 fc 50 ff 75 0c 6a 00 ........E.P.u.j.
6a 00 6a 02 ff 15 1c 20 40 00 85 c0 74 1b 50 68 j.j.... @...t.Ph
f0 22 40 00 68 bc 22 40 00 ff 75 08 e8 7f ff ff ."@.h."@..u.....
ff 83 c4 10 e9 1f 01 00 00 56 57 8b 3d 18 20 40 .........VW.=. @
00 8d 45 0c 50 8d 85 f8 f5 ff ff 50 8d 45 f8 50 ..E.P......P.E.P
ff 75 fc c7 45 f8 01 00 00 00 c7 45 0c 00 0a 00 .u..E......E....
00 ff d7 85 c0 0f 85 ae 00 00 00 8b 75 10 8d 34 ............u..4
75 ba 22 40 00 8b 8d 00 f6 ff ff 83 f9 0c 73 09 u."@..........s.
8b 04 8d 08 21 40 00 eb 05 b8 a4 22 40 00 ff b5 ....!@....."@...
14 f6 ff ff 56 ff b5 10 f6 ff ff 56 ff b5 0c f6 ....V......V....
ff ff 56 ff b5 08 f6 ff ff 56 ff b5 04 f6 ff ff ..V......V......
56 50 51 56 ff b5 fc f5 ff ff 56 ff b5 f8 f5 ff VPQV......V.....
ff 56 68 78 21 40 00 ff 75 08 e8 e1 fe ff ff 83 .Vhx!@..u.......
c4 4c f6 85 04 f6 ff ff 02 74 14 8b 45 10 48 50 .L.......t..E.HP
8d 85 f8 f5 ff ff 50 ff 75 08 e8 0f ff ff ff 8d ......P.u.......
45 0c 50 8d 85 f8 f5 ff ff 50 8d 45 f8 50 ff 75 E.P......P.E.P.u
fc c7 45 f8 01 00 00 00 c7 45 0c 00 0a 00 00 ff ..E......E......
d7 85 c0 0f 84 5c ff ff ff be bc 22 40 00 3d 03 .....\....."@.=.
01 00 00 74 12 50 68 54 21 40 00 56 ff 75 08 e8 ...t.PhT!@.V.u..
7c fe ff ff 83 c4 10 ff 75 fc ff 15 20 20 40 00 |.......u... @.
85 c0 74 12 50 68 38 21 40 00 56 ff 75 08 e8 5d ..t.Ph8!@.V.u..]
fe ff ff 83 c4 10 5f 5e c9 c2 0c 00 56 57 6a f4 ......_^....VWj.
33 ff ff 15 10 20 40 00 8b f0 83 fe ff 75 0a ff 3.... @......u..
15 0c 20 40 00 8b f8 eb 2d 57 57 56 e8 7d fe ff .. @....-WWV.}..
ff 56 ff 15 08 20 40 00 85 c0 75 1a ff 15 0c 20 .V... @...u....
40 00 50 68 0c 23 40 00 68 bc 22 40 00 56 e8 0d @.Ph.#@.h."@.V..
fe ff ff 83 c4 10 57 ff 15 04 20 40 00 5f 5e 00 ......W... @._^.
18 24 00 00 28 24 00 00 36 24 00 00 44 24 00 00 .$..($..6$..D$..
54 24 00 00 00 00 00 00 82 24 00 00 96 24 00 00 T$.......$...$..
72 24 00 00 00 00 00 00 ae 24 00 00 00 00 00 00 r$.......$......
4e 00 44 00 53 00 20 00 43 00 6f 00 6e 00 74 00 N.D.S. .C.o.n.t.
61 00 69 00 6e 00 65 00 72 00 00 00 54 00 72 00 a.i.n.e.r...T.r.
65 00 65 00 00 00 00 00 44 00 69 00 72 00 65 00 e.e.....D.i.r.e.
63 00 74 00 6f 00 72 00 79 00 00 00 41 00 64 00 c.t.o.r.y...A.d.
6d 00 69 00 6e 00 69 00 73 00 74 00 72 00 61 00 m.i.n.i.s.t.r.a.
74 00 69 00 76 00 65 00 20 00 53 00 68 00 61 00 t.i.v.e. .S.h.a.
72 00 65 00 00 00 00 00 52 00 6f 00 6f 00 74 00 r.e.....R.o.o.t.
00 00 00 00 4e 00 65 00 74 00 77 00 6f 00 72 00 ....N.e.t.w.o.r.
6b 00 00 00 47 00 72 00 6f 00 75 00 70 00 00 00 k...G.r.o.u.p...
46 00 69 00 6c 00 65 00 00 00 00 00 53 00 68 00 F.i.l.e.....S.h.
61 00 72 00 65 00 00 00 53 00 65 00 72 00 76 00 a.r.e...S.e.r.v.
65 00 72 00 00 00 00 00 44 00 6f 00 6d 00 61 00 e.r.....D.o.m.a.
69 00 6e 00 00 00 00 00 47 00 65 00 6e 00 65 00 i.n.....G.e.n.e.
72 00 69 00 63 00 00 00 f8 20 40 00 e8 20 40 00 r.i.c.... @.. @.
d8 20 40 00 cc 20 40 00 c0 20 40 00 b4 20 40 00 . @.. @.. @.. @.
a4 20 40 00 98 20 40 00 6c 20 40 00 58 20 40 00 . @.. @.l @.X @.
4c 20 40 00 30 20 40 00 57 00 4e 00 65 00 74 00 L @.0 @.W.N.e.t.
43 00 6c 00 6f 00 73 00 65 00 45 00 6e 00 75 00 C.l.o.s.e.E.n.u.
6d 00 00 00 57 00 4e 00 65 00 74 00 45 00 6e 00 m...W.N.e.t.E.n.
75 00 6d 00 52 00 65 00 73 00 6f 00 75 00 72 00 u.m.R.e.s.o.u.r.
63 00 65 00 00 00 00 00 0a 00 25 00 6c 00 73 00 c.e.......%.l.s.
53 00 63 00 6f 00 70 00 65 00 3a 00 09 00 09 00 S.c.o.p.e.:.....
25 00 6c 00 75 00 0a 00 25 00 6c 00 73 00 54 00 %.l.u...%.l.s.T.
79 00 70 00 65 00 3a 00 09 00 09 00 25 00 6c 00 y.p.e.:.....%.l.
75 00 0a 00 25 00 6c 00 73 00 44 00 69 00 73 00 u...%.l.s.D.i.s.
70 00 6c 00 61 00 79 00 20 00 54 00 79 00 70 00 p.l.a.y. .T.y.p.
65 00 3a 00 09 00 25 00 6c 00 75 00 20 00 3d 00 e.:...%.l.u. .=.
20 00 25 00 6c 00 73 00 0a 00 25 00 6c 00 73 00 .%.l.s...%.l.s.
55 00 73 00 61 00 67 00 65 00 3a 00 09 00 09 00 U.s.a.g.e.:.....
30 00 78 00 25 00 30 00 38 00 6c 00 58 00 0a 00 0.x.%.0.8.l.X...
25 00 6c 00 73 00 4c 00 6f 00 63 00 61 00 6c 00 %.l.s.L.o.c.a.l.
20 00 4e 00 61 00 6d 00 65 00 3a 00 09 00 25 00 .N.a.m.e.:...%.
6c 00 73 00 0a 00 25 00 6c 00 73 00 52 00 65 00 l.s...%.l.s.R.e.
6d 00 6f 00 74 00 65 00 20 00 4e 00 61 00 6d 00 m.o.t.e. .N.a.m.
65 00 3a 00 09 00 25 00 6c 00 73 00 0a 00 25 00 e.:...%.l.s...%.
6c 00 73 00 43 00 6f 00 6d 00 6d 00 65 00 6e 00 l.s.C.o.m.m.e.n.
74 00 3a 00 09 00 25 00 6c 00 73 00 0a 00 25 00 t.:...%.l.s...%.
6c 00 73 00 50 00 72 00 6f 00 76 00 69 00 64 00 l.s.P.r.o.v.i.d.
65 00 72 00 3a 00 09 00 25 00 6c 00 73 00 0a 00 e.r.:...%.l.s...
00 00 00 00 55 00 6e 00 6b 00 6e 00 6f 00 77 00 ....U.n.k.n.o.w.
6e 00 00 00 09 00 09 00 09 00 00 00 25 00 6c 00 n...........%.l.
73 00 28 00 29 00 20 00 72 00 65 00 74 00 75 00 s.(.). .r.e.t.u.
72 00 6e 00 65 00 64 00 20 00 65 00 72 00 72 00 r.n.e.d. .e.r.r.
6f 00 72 00 20 00 25 00 6c 00 75 00 0a 00 00 00 o.r. .%.l.u.....
57 00 4e 00 65 00 74 00 4f 00 70 00 65 00 6e 00 W.N.e.t.O.p.e.n.
45 00 6e 00 75 00 6d 00 00 00 00 00 43 00 6c 00 E.n.u.m.....C.l.
6f 00 73 00 65 00 48 00 61 00 6e 00 64 00 6c 00 o.s.e.H.a.n.d.l.
65 00 00 00 00 00 00 00 b9 79 37 9e 00 00 00 00 e........y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 28 23 40 00 ............(#@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 e8 23 00 00 00 00 00 00 .........#......
00 00 00 00 64 24 00 00 00 20 00 00 00 24 00 00 ....d$... ...$..
00 00 00 00 00 00 00 00 a6 24 00 00 18 20 00 00 .........$... ..
10 24 00 00 00 00 00 00 00 00 00 00 bc 24 00 00 .$...........$..
28 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ( ..............
00 00 00 00 00 00 00 00 18 24 00 00 28 24 00 00 .........$..($..
36 24 00 00 44 24 00 00 54 24 00 00 00 00 00 00 6$..D$..T$......
82 24 00 00 96 24 00 00 72 24 00 00 00 00 00 00 .$...$..r$......
ae 24 00 00 00 00 00 00 24 05 57 72 69 74 65 43 .$......$.WriteC
6f 6e 73 6f 6c 65 57 00 19 01 45 78 69 74 50 72 onsoleW...ExitPr
6f 63 65 73 73 00 52 00 43 6c 6f 73 65 48 61 6e ocess.R.CloseHan
64 6c 65 00 02 02 47 65 74 4c 61 73 74 45 72 72 dle...GetLastErr
6f 72 00 00 64 02 47 65 74 53 74 64 48 61 6e 64 or..d.GetStdHand
6c 65 00 00 4b 45 52 4e 45 4c 33 32 2e 64 6c 6c le..KERNEL32.dll
00 00 10 00 57 4e 65 74 43 6c 6f 73 65 45 6e 75 ....WNetCloseEnu
6d 00 1c 00 57 4e 65 74 45 6e 75 6d 52 65 73 6f m...WNetEnumReso
75 72 63 65 57 00 3d 00 57 4e 65 74 4f 70 65 6e urceW.=.WNetOpen
45 6e 75 6d 57 00 4d 50 52 2e 64 6c 6c 00 35 03 EnumW.MPR.dll.5.
77 76 73 70 72 69 6e 74 66 57 00 00 55 53 45 52 wvsprintfW..USER
33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 32.dll..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file NETWORK.TXT
created in
step 3. to recreate the console application
Network Enumerator:
CERTUTIL.EXE /DecodeHex /V NETWORK.TXT NETWORK.COM
Input Length = 10880 Output Length = 2560 CertUtil: -decodehex command completed successfully.
NOTIFIER.COM ‹directory name› …
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and NOTIFIER.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file NOTIFIER.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#define FILE_NOTIFY_CHANGE_UNDOCUMENTED 0x00000E80UL
#define FILE_NOTIFY_CHANGE_ANY 0x00000FFFUL
#define FILE_NOTIFY_CHANGE_INVALID 0xFFFFF000UL
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
HANDLE hThreads[MAXIMUM_WAIT_OBJECTS];
DWORD dwThreads = 0;
const LPCWSTR szCtrlType[] = {L"C",
L"Break",
L"Close",
NULL,
NULL,
L"Logoff",
L"Shutdown"};
BOOL WINAPI CtrlHandler(DWORD dwCtrlType)
{
DWORD dwThread = dwThreads;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
switch (dwCtrlType)
{
case CTRL_C_EVENT:
case CTRL_BREAK_EVENT:
case CTRL_CLOSE_EVENT:
case CTRL_LOGOFF_EVENT:
case CTRL_SHUTDOWN_EVENT:
PrintConsole(hConsole,
L"Ctrl-%ls\n",
szCtrlType[dwCtrlType]);
while (dwThread-- > 0)
if (!CancelSynchronousIo(hThreads[dwThread]))
PrintConsole(hConsole,
L"CancelSynchronousIo() returned error %lu for thread 0x%p\n",
GetLastError(), hThreads[dwThread]);
return TRUE;
default:
return FALSE;
}
}
const LPCWSTR lpAction[] = {NULL,
L"Added",
L"Removed",
L"Modified",
L"Renamed from",
L"Renamed to"};
__declspec(safebuffers)
DWORD WINAPI ThreadProc(LPCWSTR lpArgument)
{
FILE_NOTIFY_INFORMATION *lpEntry;
#if 0
BY_HANDLE_FILE_INFORMATION bhfi;
#else
FILE_ATTRIBUTE_TAG_INFO fati;
#endif
HANDLE hArgument;
WCHAR szArgument[MAX_PATH];
DWORD dwArgument;
DWORD dwError = ERROR_SUCCESS;
DWORD dwEntry;
DWORD dwBuffer[65536 / sizeof(DWORD)];
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
hArgument = CreateFile(lpArgument,
FILE_LIST_DIRECTORY,
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING,
FILE_FLAG_BACKUP_SEMANTICS,
(HANDLE) NULL);
if (hArgument == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"CreateFile() returned error %lu for argument \'%ls\'\n",
dwError = GetLastError(), lpArgument);
else
{
#if 0
if (!GetFileInformationByHandle(hArgument,
&bhfi))
PrintConsole(hConsole,
L"GetFileInformationByHandle() returned error %lu for argument \'%ls\'\n",
dwError = GetLastError(), lpArgument);
else
if (((bhfi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
|| ((bhfi.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) == FILE_ATTRIBUTE_REPARSE_POINT))
#else
if (!GetFileInformationByHandleEx(hArgument,
FileAttributeTagInfo,
&fati,
sizeof(fati)))
PrintConsole(hConsole,
L"GetFileInformationByHandleEx() returned error %lu for argument \'%ls\'\n",
dwError = GetLastError(), lpArgument);
else
if (((fati.FileAttributes & FILE_ATTRIBUTE_DIRECTORY) != FILE_ATTRIBUTE_DIRECTORY)
|| ((fati.FileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) == FILE_ATTRIBUTE_REPARSE_POINT))
#endif
PrintConsole(hConsole,
L"Argument \'%ls\' is not a directory!\n",
lpArgument);
else
{
dwArgument = GetFinalPathNameByHandle(hArgument,
szArgument,
sizeof(szArgument) / sizeof(*szArgument),
FILE_NAME_NORMALIZED | VOLUME_NAME_DOS);
if (dwArgument == 0)
PrintConsole(hConsole,
L"GetFinalPathNameByHandle() returned error %lu for argument \'%ls\'\n",
dwError = GetLastError(), lpArgument);
else
{
while (ReadDirectoryChangesW(hArgument,
dwBuffer,
sizeof(dwBuffer),
TRUE,
#ifdef FILE_NOTIFY_CHANGE_ALL
FILE_NOTIFY_CHANGE_ALL,
#else
FILE_NOTIFY_CHANGE_ATTRIBUTES | FILE_NOTIFY_CHANGE_CREATION | FILE_NOTIFY_CHANGE_DIR_NAME | FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_LAST_ACCESS | FILE_NOTIFY_CHANGE_LAST_WRITE | FILE_NOTIFY_CHANGE_SECURITY | FILE_NOTIFY_CHANGE_SIZE,
#endif
&dwEntry,
(LPOVERLAPPED) NULL,
(LPOVERLAPPED_COMPLETION_ROUTINE) NULL))
for (lpEntry = (PFILE_NOTIFY_INFORMATION) dwBuffer;
dwEntry != 0;
lpEntry = (PFILE_NOTIFY_INFORMATION) ((LPBYTE) lpEntry + dwEntry))
{
dwEntry = lpEntry->NextEntryOffset;
lpEntry->FileName[lpEntry->FileNameLength / sizeof(lpEntry->FileName[0])] = L'\0';
PrintConsole(hConsole,
L"%ls %ls\\%ls\n",
lpAction[lpEntry->Action], szArgument + 4, lpEntry->FileName);
}
PrintConsole(hConsole,
L"ReadDirectoryChanges() returned error %lu for directory \'%ls\'\n",
dwError = GetLastError(), szArgument + 4);
}
}
if (!CloseHandle(hArgument))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
return dwError;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
LPWSTR *lpArguments;
INT nArguments;
INT nArgument = 1;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwThreadId;
HANDLE hThread;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 2)
PrintConsole(hConsole,
L"Too few arguments: at least one directory name must be given!\n");
else if (nArguments > sizeof(hThreads) / sizeof(*hThreads) + 1)
PrintConsole(hConsole,
L"Too many arguments: at most %lu directory names may be given!\n",
sizeof(hThreads) / sizeof(*hThreads));
else
{
do
{
hThread = CreateThread((LPSECURITY_ATTRIBUTES) NULL,
(SIZE_T) 65536,
ThreadProc,
lpArguments[nArgument],
0,
&dwThreadId);
if (hThread == NULL)
PrintConsole(hConsole,
L"CreateThread() returned error %lu\n",
dwError = GetLastError());
else
{
hThreads[dwThreads++] = hThread;
PrintConsole(hConsole,
L"Thread %lu created for argument \'%ls\'\n",
dwThreadId, lpArguments[nArgument]);
}
} while (++nArgument < nArguments);
if (dwThreads > 0)
{
if (!SetConsoleCtrlHandler(CtrlHandler, TRUE))
PrintConsole(hConsole,
L"SetConsoleCtrlHandler() returned error %lu\n",
dwError = GetLastError());
PrintConsole(hConsole,
L"Press \'Ctrl-C\' or \'Ctrl-Break\' to stop!\n"
L"\n");
if (WaitForMultipleObjects(dwThreads,
hThreads,
TRUE,
INFINITE) == WAIT_FAILED)
PrintConsole(hConsole,
L"WaitForMultipleObjects() returned error %lu\n",
dwError = GetLastError());
else
do
if (!CloseHandle(hThreads[--dwThreads]))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
while (dwThreads > 0);
if (!SetConsoleCtrlHandler(CtrlHandler, FALSE))
PrintConsole(hConsole,
L"SetConsoleCtrlHandler() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Thread Stack Size
Run the following four command lines to compile the source file
NOTIFIER.C
created in step 1., link the compiled
object file NOTIFIER.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gs69632 /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:6.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeNOTIFIER.COM NOTIFIER.C KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE NOTIFIER.OBJFor 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. NOTIFIER.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file NOTIFIER.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 03 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 08 00 00 ......#.........
00 0c 00 00 00 00 00 00 a4 12 00 00 00 10 00 00 ................
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
06 00 00 00 00 00 2f 03 06 00 00 00 00 00 00 00 ....../.........
00 40 00 00 00 02 00 00 ae dd 00 00 03 00 00 85 .@..............
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
b8 26 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 .&..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 50 26 00 00 40 00 00 00 ........P&..@...
00 00 00 00 00 00 00 00 00 20 00 00 50 00 00 00 ......... ..P...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
5e 06 00 00 00 10 00 00 00 08 00 00 00 02 00 00 ^...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 ae 08 00 00 00 20 00 00 .const....... ..
00 0a 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 2e 62 73 73 00 00 00 00 ....@..@.bss....
20 01 00 00 00 30 00 00 00 00 00 00 00 00 00 00 ....0..........
00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 c0 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 48 20 40 00 8b f0 .......P..H @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 00 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 53 57 .t.3.9u....^..SW
8b 3d 00 30 40 00 6a f4 ff 15 0c 20 40 00 8b d8 .=.0@.j.... @...
8b 44 24 0c 83 f8 02 76 0a 83 f8 04 76 59 83 f8 .D$....v....vY..
06 77 54 ff 34 85 f4 20 40 00 68 a4 21 40 00 53 .wT.4.. @.h.!@.S
e8 7b ff ff ff 83 c4 0c 85 ff 74 36 56 4f 8d 34 .{........t6VO.4
bd 20 30 40 00 ff 36 ff 15 08 20 40 00 85 c0 75 . 0@..6... @...u
1c ff 36 ff 15 04 20 40 00 50 68 7c 21 40 00 68 ..6... @.Ph|!@.h
28 21 40 00 53 e8 46 ff ff ff 83 c4 14 85 ff 75 (!@.S.F........u
cc 5e 33 c0 40 eb 02 33 c0 5f 5b c2 04 00 55 8b .^3.@..3._[...U.
ec 81 ec 18 02 01 00 56 57 6a f4 33 ff ff 15 0c .......VWj.3....
20 40 00 8b f0 89 75 f8 83 fe ff 75 0d ff 15 04 @....u....u....
20 40 00 8b f8 e9 a2 01 00 00 53 8b 5d 08 57 68 @........S.].Wh
00 00 00 02 6a 03 57 6a 07 6a 01 53 ff 15 20 20 ....j.Wj.j.S..
40 00 89 45 08 83 f8 ff 75 22 ff 15 04 20 40 00 @..E....u"... @.
53 8b f8 57 68 c4 23 40 00 68 68 23 40 00 56 e8 S..Wh.#@.hh#@.V.
cc fe ff ff 83 c4 14 e9 5f 01 00 00 6a 08 8d 4d ........_...j..M
f0 51 6a 09 50 ff 15 1c 20 40 00 85 c0 75 11 ff .Qj.P... @...u..
15 04 20 40 00 53 8b f8 57 68 28 23 40 00 eb 40 .. @.S..Wh(#@..@
f6 45 f0 10 0f 84 fb 00 00 00 f7 45 f0 00 04 00 .E.........E....
00 0f 85 ee 00 00 00 57 68 04 01 00 00 8d 85 e8 .......Wh.......
fd ff ff 50 ff 75 08 ff 15 18 20 40 00 85 c0 75 ...P.u.... @...u
22 ff 15 04 20 40 00 53 8b f8 57 68 f4 22 40 00 "... @.S..Wh."@.
68 68 23 40 00 56 e8 55 fe ff ff 83 c4 14 e9 c1 hh#@.V.U........
00 00 00 57 57 8b 3d 14 20 40 00 8d 45 fc 50 68 ...WW.=. @..E.Ph
ff 0f 00 00 6a 01 bb 00 00 01 00 53 8d 85 e8 fd ....j......S....
fe ff 50 ff 75 08 ff d7 85 c0 74 6a 8d b5 e8 fd ..P.u.....tj....
fe ff eb 39 8b 06 89 45 fc 8b 46 08 d1 e8 33 c9 ...9...E..F...3.
66 89 4c 46 0c 8d 46 0c 50 8d 85 f0 fd ff ff 50 f.LF..F.P......P
8b 46 04 ff 34 85 10 21 40 00 68 d8 22 40 00 ff .F..4..!@.h."@..
75 f8 e8 e9 fd ff ff 83 c4 14 03 75 fc 83 7d fc u..........u..}.
00 75 c1 6a 00 6a 00 8d 45 fc 50 68 ff 0f 00 00 .u.j.j..E.Ph....
6a 01 53 8d 85 e8 fd fe ff 50 ff 75 08 ff d7 85 j.S......P.u....
c0 75 99 8b 75 f8 ff 15 04 20 40 00 8b f8 8d 85 .u..u.... @.....
f0 fd ff ff 50 57 68 ac 22 40 00 68 50 22 40 00 ....PWh."@.hP"@.
e9 40 ff ff ff 53 68 08 22 40 00 56 e8 8f fd ff .@...Sh."@.V....
ff 83 c4 0c ff 75 08 ff 15 10 20 40 00 85 c0 75 .....u.... @...u
1a ff 15 04 20 40 00 50 68 ec 21 40 00 68 b8 21 .... @.Ph.!@.h.!
40 00 56 e8 68 fd ff ff 83 c4 10 5b 8b c7 5f 5e @.V.h......[.._^
c9 c2 04 00 83 ec 14 53 55 6a f4 c7 44 24 0c 01 .......SUj..D$..
00 00 00 bd a0 00 00 00 ff 15 0c 20 40 00 8b d8 ........... @...
83 fb ff 75 0d ff 15 04 20 40 00 8b e8 e9 eb 01 ...u.... @......
00 00 56 57 8d 44 24 14 50 ff 15 38 20 40 00 50 ..VW.D$.P..8 @.P
e8 e1 01 00 00 8b 35 04 20 40 00 89 44 24 18 85 ......5. @..D$..
c0 75 14 ff d6 8b e8 55 68 20 26 40 00 bf b8 21 .u.....Uh &@...!
40 00 e9 8d 01 00 00 83 7c 24 14 02 bf b8 21 40 @.......|$....!@
00 73 12 68 a0 25 40 00 53 e8 e2 fc ff ff 59 59 .s.h.%@.S.....YY
e9 59 01 00 00 83 7c 24 14 41 76 15 6a 40 68 20 .Y....|$.Av.j@h
25 40 00 53 e8 c7 fc ff ff 83 c4 0c e9 3d 01 00 %@.S.........=..
00 8b 4c 24 18 8b 44 24 10 8d 04 81 8d 4c 24 20 ..L$..D$.....L$
51 6a 00 ff 30 89 44 24 28 68 ce 10 40 00 68 00 Qj..0.D$(h..@.h.
00 01 00 6a 00 ff 15 34 20 40 00 85 c0 75 0d ff ...j...4 @...u..
d6 8b e8 55 68 00 25 40 00 57 eb 22 8b 0d 00 30 ...Uh.%@.W."...0
40 00 ff 05 00 30 40 00 89 04 8d 20 30 40 00 8b @....0@.... 0@..
44 24 1c ff 30 ff 74 24 24 68 b0 24 40 00 53 e8 D$..0.t$$h.$@.S.
5c fc ff ff 83 c4 10 ff 44 24 10 8b 44 24 10 3b \.......D$..D$.;
44 24 14 72 8c 83 3d 00 30 40 00 00 0f 86 bc 00 D$.r..=.0@......
00 00 6a 01 68 4e 10 40 00 ff 15 30 20 40 00 85 ..j.hN.@...0 @..
c0 75 14 ff d6 8b e8 55 68 80 24 40 00 57 53 e8 .u.....Uh.$@.WS.
1c fc ff ff 83 c4 10 68 20 24 40 00 53 e8 0e fc .......h $@.S...
ff ff 59 59 6a ff 6a 01 68 20 30 40 00 ff 35 00 ..YYj.j.h 0@..5.
30 40 00 ff 15 2c 20 40 00 83 f8 ff 75 16 ff d6 0@..., @....u...
8b e8 55 68 f0 23 40 00 57 53 e8 e1 fb ff ff 83 ..Uh.#@.WS......
c4 10 eb 37 ff 0d 00 30 40 00 a1 00 30 40 00 ff ...7...0@...0@..
34 85 20 30 40 00 ff 15 10 20 40 00 85 c0 75 12 4. 0@.... @...u.
ff d6 50 68 ec 21 40 00 57 53 e8 b1 fb ff ff 83 ..Ph.!@.WS......
c4 10 83 3d 00 30 40 00 00 77 c9 6a 00 68 4e 10 ...=.0@..w.j.hN.
40 00 ff 15 30 20 40 00 85 c0 75 12 ff d6 50 68 @...0 @...u...Ph
80 24 40 00 57 53 e8 85 fb ff ff 83 c4 10 ff 74 .$@.WS.........t
24 18 ff 15 28 20 40 00 85 c0 74 12 ff d6 50 68 $...( @...t...Ph
dc 23 40 00 57 53 e8 65 fb ff ff 83 c4 10 53 ff .#@.WS.e......S.
15 10 20 40 00 85 c0 75 12 ff d6 50 68 ec 21 40 .. @...u...Ph.!@
00 57 53 e8 48 fb ff ff 83 c4 10 5f 5e 55 ff 15 .WS.H......_^U..
24 20 40 00 5d 5b 55 8b ec 51 8b 45 08 53 56 33 $ @.][U..Q.E.SV3
f6 57 8b f8 89 75 08 89 75 fc 39 75 0c 0f 84 6a .W...u..u.9u...j
01 00 00 3b c6 0f 84 62 01 00 00 0f b7 08 66 3b ...;...b......f;
ce 0f 84 56 01 00 00 83 f9 20 74 0a 83 f9 09 74 ...V..... t....t
05 33 db 43 eb 02 33 db 39 75 08 75 2b 66 83 f9 .3.C..3.9u.u+f..
20 74 06 66 83 f9 09 75 1f 89 75 fc 83 c0 02 0f t.f...u..u.....
b7 08 83 f9 20 74 f5 83 f9 09 74 f0 33 c9 66 39 .... t....t.3.f9
30 0f 95 c1 03 d9 eb 23 66 83 f9 5c 75 06 83 75 0......#f..\u..u
fc 01 eb 14 39 75 fc 75 0c 66 83 f9 22 75 06 83 ....9u.u.f.."u..
75 08 01 eb 03 89 75 fc 83 c0 02 0f b7 08 66 3b u.....u.......f;
ce 75 a5 2b c7 83 c0 02 d1 f8 8d 44 58 02 03 c0 .u.+.......DX...
50 6a 40 ff 15 40 20 40 00 8b f0 33 d2 3b f2 0f Pj@..@ @...3.;..
84 d0 00 00 00 8d 44 9e 04 33 db 89 06 89 55 08 ......D..3....U.
89 5d fc 83 7d 08 00 75 34 0f b7 0f 83 f9 20 74 .]..}..u4..... t
05 83 f9 09 75 27 33 d2 33 c9 66 89 08 83 c7 02 ....u'3.3.f.....
0f b7 0f 83 f9 20 74 f5 83 f9 09 74 f0 66 39 17 ..... t....t.f9.
74 71 43 8b c7 89 5d fc 89 3c 9e eb 5c 0f b7 0f tqC...]..<..\...
83 f9 5c 75 03 42 eb 48 83 f9 22 75 41 6a 02 8d ..\u.B.H.."uAj..
5a 01 d1 eb 59 f7 db 03 f9 8d 04 58 f6 c2 01 74 Z...Y......X...t
0a 6a 22 5a 66 89 10 03 c1 eb 1c 83 7d 08 00 74 .j"Zf.......}..t
12 66 83 3f 22 75 0c 6a 22 5a 66 89 10 03 c1 03 .f.?"u.j"Zf.....
f9 eb 04 83 75 08 01 8b 5d fc 33 d2 eb 0b 33 d2 ....u...].3...3.
66 89 08 83 c0 02 83 c7 02 66 83 3f 00 0f 85 60 f........f.?...`
ff ff ff 33 c9 43 66 89 08 21 0c 9e 8b 45 0c 89 ...3.Cf..!...E..
18 39 4d 08 74 0f 68 a0 00 00 00 eb 02 6a 57 ff .9M.t.h......jW.
15 3c 20 40 00 5f 8b c6 5e 5b c9 c2 08 00 00 00 .< @._..^[......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
44 27 00 00 54 27 00 00 64 27 00 00 7a 27 00 00 D'..T'..d'..z'..
8a 27 00 00 98 27 00 00 b0 27 00 00 cc 27 00 00 .'...'...'...'..
ec 27 00 00 fa 27 00 00 08 28 00 00 14 28 00 00 .'...'...(...(..
2e 28 00 00 46 28 00 00 56 28 00 00 68 28 00 00 .(..F(..V(..h(..
78 28 00 00 00 00 00 00 94 28 00 00 00 00 00 00 x(.......(......
52 00 65 00 6e 00 61 00 6d 00 65 00 64 00 20 00 R.e.n.a.m.e.d. .
74 00 6f 00 00 00 00 00 52 00 65 00 6e 00 61 00 t.o.....R.e.n.a.
6d 00 65 00 64 00 20 00 66 00 72 00 6f 00 6d 00 m.e.d. .f.r.o.m.
00 00 00 00 4d 00 6f 00 64 00 69 00 66 00 69 00 ....M.o.d.i.f.i.
65 00 64 00 00 00 00 00 52 00 65 00 6d 00 6f 00 e.d.....R.e.m.o.
76 00 65 00 64 00 00 00 41 00 64 00 64 00 65 00 v.e.d...A.d.d.e.
64 00 00 00 53 00 68 00 75 00 74 00 64 00 6f 00 d...S.h.u.t.d.o.
77 00 6e 00 00 00 00 00 4c 00 6f 00 67 00 6f 00 w.n.....L.o.g.o.
66 00 66 00 00 00 00 00 43 00 6c 00 6f 00 73 00 f.f.....C.l.o.s.
65 00 00 00 42 00 72 00 65 00 61 00 6b 00 00 00 e...B.r.e.a.k...
43 00 00 00 f0 20 40 00 e4 20 40 00 d8 20 40 00 C.... @.. @.. @.
00 00 00 00 00 00 00 00 c8 20 40 00 b4 20 40 00 ......... @.. @.
00 00 00 00 a8 20 40 00 98 20 40 00 84 20 40 00 ..... @.. @.. @.
68 20 40 00 50 20 40 00 25 00 6c 00 73 00 28 00 h @.P @.%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 74 00 68 00 72 00 65 00 61 00 64 00 20 00 .t.h.r.e.a.d. .
30 00 78 00 25 00 70 00 0a 00 00 00 43 00 61 00 0.x.%.p.....C.a.
6e 00 63 00 65 00 6c 00 53 00 79 00 6e 00 63 00 n.c.e.l.S.y.n.c.
68 00 72 00 6f 00 6e 00 6f 00 75 00 73 00 49 00 h.r.o.n.o.u.s.I.
6f 00 00 00 43 00 74 00 72 00 6c 00 2d 00 25 00 o...C.t.r.l.-.%.
6c 00 73 00 0a 00 00 00 25 00 6c 00 73 00 28 00 l.s.....%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 0a 00 00 00 43 00 6c 00 .%.l.u.....C.l.
6f 00 73 00 65 00 48 00 61 00 6e 00 64 00 6c 00 o.s.e.H.a.n.d.l.
65 00 00 00 00 00 00 00 41 00 72 00 67 00 75 00 e.......A.r.g.u.
6d 00 65 00 6e 00 74 00 20 00 27 00 25 00 6c 00 m.e.n.t. .'.%.l.
73 00 27 00 20 00 69 00 73 00 20 00 6e 00 6f 00 s.'. .i.s. .n.o.
74 00 20 00 61 00 20 00 64 00 69 00 72 00 65 00 t. .a. .d.i.r.e.
63 00 74 00 6f 00 72 00 79 00 21 00 0a 00 00 00 c.t.o.r.y.!.....
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 64 00 69 00 72 00 .f.o.r. .d.i.r.
65 00 63 00 74 00 6f 00 72 00 79 00 20 00 27 00 e.c.t.o.r.y. .'.
25 00 6c 00 73 00 27 00 0a 00 00 00 52 00 65 00 %.l.s.'.....R.e.
61 00 64 00 44 00 69 00 72 00 65 00 63 00 74 00 a.d.D.i.r.e.c.t.
6f 00 72 00 79 00 43 00 68 00 61 00 6e 00 67 00 o.r.y.C.h.a.n.g.
65 00 73 00 00 00 00 00 25 00 6c 00 73 00 20 00 e.s.....%.l.s. .
25 00 6c 00 73 00 5c 00 25 00 6c 00 73 00 0a 00 %.l.s.\.%.l.s...
00 00 00 00 47 00 65 00 74 00 46 00 69 00 6e 00 ....G.e.t.F.i.n.
61 00 6c 00 50 00 61 00 74 00 68 00 4e 00 61 00 a.l.P.a.t.h.N.a.
6d 00 65 00 42 00 79 00 48 00 61 00 6e 00 64 00 m.e.B.y.H.a.n.d.
6c 00 65 00 00 00 00 00 47 00 65 00 74 00 46 00 l.e.....G.e.t.F.
69 00 6c 00 65 00 49 00 6e 00 66 00 6f 00 72 00 i.l.e.I.n.f.o.r.
6d 00 61 00 74 00 69 00 6f 00 6e 00 42 00 79 00 m.a.t.i.o.n.B.y.
48 00 61 00 6e 00 64 00 6c 00 65 00 45 00 78 00 H.a.n.d.l.e.E.x.
00 00 00 00 00 00 00 00 25 00 6c 00 73 00 28 00 ........%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 61 00 72 00 67 00 75 00 6d 00 65 00 6e 00 .a.r.g.u.m.e.n.
74 00 20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 t. .'.%.l.s.'...
00 00 00 00 43 00 72 00 65 00 61 00 74 00 65 00 ....C.r.e.a.t.e.
46 00 69 00 6c 00 65 00 00 00 00 00 4c 00 6f 00 F.i.l.e.....L.o.
63 00 61 00 6c 00 46 00 72 00 65 00 65 00 00 00 c.a.l.F.r.e.e...
57 00 61 00 69 00 74 00 46 00 6f 00 72 00 4d 00 W.a.i.t.F.o.r.M.
75 00 6c 00 74 00 69 00 70 00 6c 00 65 00 4f 00 u.l.t.i.p.l.e.O.
62 00 6a 00 65 00 63 00 74 00 73 00 00 00 00 00 b.j.e.c.t.s.....
50 00 72 00 65 00 73 00 73 00 20 00 27 00 43 00 P.r.e.s.s. .'.C.
74 00 72 00 6c 00 2d 00 43 00 27 00 20 00 6f 00 t.r.l.-.C.'. .o.
72 00 20 00 27 00 43 00 74 00 72 00 6c 00 2d 00 r. .'.C.t.r.l.-.
42 00 72 00 65 00 61 00 6b 00 27 00 20 00 74 00 B.r.e.a.k.'. .t.
6f 00 20 00 74 00 65 00 72 00 6d 00 69 00 6e 00 o. .t.e.r.m.i.n.
61 00 74 00 65 00 21 00 0a 00 0a 00 00 00 00 00 a.t.e.!.........
53 00 65 00 74 00 43 00 6f 00 6e 00 73 00 6f 00 S.e.t.C.o.n.s.o.
6c 00 65 00 43 00 74 00 72 00 6c 00 48 00 61 00 l.e.C.t.r.l.H.a.
6e 00 64 00 6c 00 65 00 72 00 00 00 00 00 00 00 n.d.l.e.r.......
54 00 68 00 72 00 65 00 61 00 64 00 20 00 25 00 T.h.r.e.a.d. .%.
6c 00 75 00 20 00 63 00 72 00 65 00 61 00 74 00 l.u. .c.r.e.a.t.
65 00 64 00 20 00 66 00 6f 00 72 00 20 00 61 00 e.d. .f.o.r. .a.
72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 20 00 r.g.u.m.e.n.t. .
27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 00 00 '.%.l.s.'.......
43 00 72 00 65 00 61 00 74 00 65 00 54 00 68 00 C.r.e.a.t.e.T.h.
72 00 65 00 61 00 64 00 00 00 00 00 00 00 00 00 r.e.a.d.........
54 00 6f 00 6f 00 20 00 6d 00 61 00 6e 00 79 00 T.o.o. .m.a.n.y.
20 00 61 00 72 00 67 00 75 00 6d 00 65 00 6e 00 .a.r.g.u.m.e.n.
74 00 73 00 3a 00 20 00 61 00 74 00 20 00 6d 00 t.s.:. .a.t. .m.
6f 00 73 00 74 00 20 00 25 00 6c 00 75 00 20 00 o.s.t. .%.l.u. .
64 00 69 00 72 00 65 00 63 00 74 00 6f 00 72 00 d.i.r.e.c.t.o.r.
79 00 20 00 6e 00 61 00 6d 00 65 00 73 00 20 00 y. .n.a.m.e.s. .
6d 00 61 00 79 00 20 00 62 00 65 00 20 00 67 00 m.a.y. .b.e. .g.
69 00 76 00 65 00 6e 00 21 00 0a 00 00 00 00 00 i.v.e.n.!.......
54 00 6f 00 6f 00 20 00 66 00 65 00 77 00 20 00 T.o.o. .f.e.w. .
61 00 72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 a.r.g.u.m.e.n.t.
73 00 3a 00 20 00 61 00 74 00 20 00 6c 00 65 00 s.:. .a.t. .l.e.
61 00 73 00 74 00 20 00 6f 00 6e 00 65 00 20 00 a.s.t. .o.n.e. .
64 00 69 00 72 00 65 00 63 00 74 00 6f 00 72 00 d.i.r.e.c.t.o.r.
79 00 20 00 6e 00 61 00 6d 00 65 00 20 00 6d 00 y. .n.a.m.e. .m.
75 00 73 00 74 00 20 00 62 00 65 00 20 00 67 00 u.s.t. .b.e. .g.
69 00 76 00 65 00 6e 00 21 00 0a 00 00 00 00 00 i.v.e.n.!.......
43 00 6f 00 6d 00 6d 00 61 00 6e 00 64 00 4c 00 C.o.m.m.a.n.d.L.
69 00 6e 00 65 00 54 00 6f 00 41 00 72 00 67 00 i.n.e.T.o.A.r.g.
76 00 00 00 00 00 00 00 b9 79 37 9e 00 00 00 00 v........y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 48 26 40 00 ............H&@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 f4 26 00 00 00 00 00 00 .........&......
00 00 00 00 86 28 00 00 00 20 00 00 3c 27 00 00 .....(... ..<'..
00 00 00 00 00 00 00 00 a2 28 00 00 48 20 00 00 .........(..H ..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 44 27 00 00 54 27 00 00 64 27 00 00 ....D'..T'..d'..
7a 27 00 00 8a 27 00 00 98 27 00 00 b0 27 00 00 z'...'...'...'..
cc 27 00 00 ec 27 00 00 fa 27 00 00 08 28 00 00 .'...'...'...(..
14 28 00 00 2e 28 00 00 46 28 00 00 56 28 00 00 .(...(..F(..V(..
68 28 00 00 78 28 00 00 00 00 00 00 94 28 00 00 h(..x(.......(..
00 00 00 00 24 05 57 72 69 74 65 43 6f 6e 73 6f ....$.WriteConso
6c 65 57 00 02 02 47 65 74 4c 61 73 74 45 72 72 leW...GetLastErr
6f 72 00 00 44 00 43 61 6e 63 65 6c 53 79 6e 63 or..D.CancelSync
68 72 6f 6e 6f 75 73 49 6f 00 64 02 47 65 74 53 hronousIo.d.GetS
74 64 48 61 6e 64 6c 65 00 00 52 00 43 6c 6f 73 tdHandle..R.Clos
65 48 61 6e 64 6c 65 00 bf 03 52 65 61 64 44 69 eHandle...ReadDi
72 65 63 74 6f 72 79 43 68 61 6e 67 65 73 57 00 rectoryChangesW.
f5 01 47 65 74 46 69 6e 61 6c 50 61 74 68 4e 61 ..GetFinalPathNa
6d 65 42 79 48 61 6e 64 6c 65 57 00 ed 01 47 65 meByHandleW...Ge
74 46 69 6c 65 49 6e 66 6f 72 6d 61 74 69 6f 6e tFileInformation
42 79 48 61 6e 64 6c 65 45 78 00 00 8f 00 43 72 ByHandleEx....Cr
65 61 74 65 46 69 6c 65 57 00 19 01 45 78 69 74 eateFileW...Exit
50 72 6f 63 65 73 73 00 48 03 4c 6f 63 61 6c 46 Process.H.LocalF
72 65 65 00 f7 04 57 61 69 74 46 6f 72 4d 75 6c ree...WaitForMul
74 69 70 6c 65 4f 62 6a 65 63 74 73 00 00 2d 04 tipleObjects..-.
53 65 74 43 6f 6e 73 6f 6c 65 43 74 72 6c 48 61 SetConsoleCtrlHa
6e 64 6c 65 72 00 b5 00 43 72 65 61 74 65 54 68 ndler...CreateTh
72 65 61 64 00 00 87 01 47 65 74 43 6f 6d 6d 61 read....GetComma
6e 64 4c 69 6e 65 57 00 73 04 53 65 74 4c 61 73 ndLineW.s.SetLas
74 45 72 72 6f 72 00 00 44 03 4c 6f 63 61 6c 41 tError..D.LocalA
6c 6c 6f 63 00 00 4b 45 52 4e 45 4c 33 32 2e 64 lloc..KERNEL32.d
6c 6c 00 00 35 03 77 76 73 70 72 69 6e 74 66 57 ll..5.wvsprintfW
00 00 55 53 45 52 33 32 2e 64 6c 6c 00 00 00 00 ..USER32.dll....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file NOTIFIER.TXT
created in
step 3. to recreate the console application
Directory Change Notifier;
CERTUTIL.EXE /DecodeHex /V NOTIFIER.TXT NOTIFIER.COM
Input Length = 21760 Output Length = 5120 CertUtil: -decodehex command completed successfully.
portable executableimage files, i.e. applications, (resource) DLLs, drivers etc., print them in UTF-16LE encoding on
standard output(which must be redirected to a file or piped into an application that reads from
standard input, like Clip, Find or More).
portable executableimage files; Matt Pietrek’s MSDN magazine articles Peering Inside the PE - A Tour of the Win32 Portable Executable File Format, An In-Depth Look into the Win32 Portable Executable File Format An In-Depth Look into the Win32 Portable Executable File Format and An In-Depth Look into the Win32 Portable Executable File Format, Part 2 An In-Depth Look into the Win32 Portable Executable File Format, Part 2 provide additional information. ASN.1 Encoding/Decoding Return Values Certificate and Trust Return Values
PE32PLUS.COM ‹image file name› >‹output file name› PE32PLUS.COM ‹image file name› | CLIP.COM PE32PLUS.COM ‹image file name› | MORE.COM
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and PE32PLUS.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
is not supported!
The MSDN article Console Handles provides background information.
Create the text file PE32PLUS.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <wintrust.h>
#include <shellapi.h>
#ifndef IMAGE_DEBUG_TYPE_VC_FEATURE
#define IMAGE_DEBUG_TYPE_VC_FEATURE 12
#endif
#ifndef IMAGE_DEBUG_TYPE_POGO
#define IMAGE_DEBUG_TYPE_POGO 13
#endif
#ifndef IMAGE_DEBUG_TYPE_ILTCG
#define IMAGE_DEBUG_TYPE_ILTCG 14
#endif
#ifndef IMAGE_DEBUG_TYPE_MPX
#define IMAGE_DEBUG_TYPE_MPX 15
#endif
#ifndef IMAGE_DEBUG_TYPE_REPRO
#define IMAGE_DEBUG_TYPE_REPRO 16
#endif
#define IMAGE_DLLCHARACTERISTICS_RESERVED 0x000FU
#ifndef IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA
#define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020U
#endif
#ifndef IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040U
#endif
#ifndef IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY
#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080U
#endif
#ifndef IMAGE_DLLCHARACTERISTICS_NX_COMPAT
#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100U
#endif
#ifndef IMAGE_DLLCHARACTERISTICS_APPCONTAINER
#define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000U
#endif
#ifndef IMAGE_DLLCHARACTERISTICS_GUARD_CF
#define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000U
#endif
#ifndef IMAGE_FILE_16BIT_MACHINE
#define IMAGE_FILE_16BIT_MACHINE 0x0040U
#endif
#ifndef IMAGE_FILE_MACHINE_TARGET_HOST
#define IMAGE_FILE_MACHINE_TARGET_HOST 0x0001U
#endif
#ifndef IMAGE_FILE_MACHINE_I860
#define IMAGE_FILE_MACHINE_I860 0x014DU
#endif
#ifndef IMAGE_FILE_MACHINE_ARMNT
#define IMAGE_FILE_MACHINE_ARMNT 0x01C4U
#endif
#ifndef IMAGE_FILE_MACHINE_M68K
#define IMAGE_FILE_MACHINE_M68K 0x0268U
#endif
#ifndef IMAGE_FILE_MACHINE_PARISC
#define IMAGE_FILE_MACHINE_PARISC 0x0290U
#endif
#ifndef IMAGE_FILE_MACHINE_CHPE_X86
#define IMAGE_FILE_MACHINE_CHPE_X86 0x3A64U // Compiled Hybrid PE
#endif
#ifndef IMAGE_FILE_MACHINE_RISCV32
#define IMAGE_FILE_MACHINE_RISCV32 0x5032U
#endif
#ifndef IMAGE_FILE_MACHINE_RISCV64
#define IMAGE_FILE_MACHINE_RISCV64 0x5064U
#endif
#ifndef IMAGE_FILE_MACHINE_RISCV128
#define IMAGE_FILE_MACHINE_RISCV128 0x5128U
#endif
#ifndef IMAGE_FILE_MACHINE_LOONGARCH32
#define IMAGE_FILE_MACHINE_LOONGARCH32 0x6232U
#endif
#ifndef IMAGE_FILE_MACHINE_LOONGARCH64
#define IMAGE_FILE_MACHINE_LOONGARCH64 0x6264U
#endif
#ifndef IMAGE_FILE_MACHINE_ARM64
#define IMAGE_FILE_MACHINE_ARM64 0xAA64U
#endif
#ifndef IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT
#define IMAGE_GUARD_CF_INSTRUMENTED 0x00000100UL
#define IMAGE_GUARD_CFW_INSTRUMENTED 0x00000200UL
#define IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT 0x00000400UL
#define IMAGE_GUARD_SECURITY_COOKIE_UNUSED 0x00000800UL
#define IMAGE_GUARD_PROTECT_DELAYLOAD_IAT 0x00001000UL
#define IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION 0x00002000UL
#define IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT 0x00004000UL
#define IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION 0x00008000UL
#define IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT 0x00010000UL
#define IMAGE_GUARD_RF_INSTRUMENTED 0x00020000UL
#define IMAGE_GUARD_RF_ENABLE 0x00040000UL
#define IMAGE_GUARD_RF_STRICT 0x00080000UL
#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK 0xF0000000UL
#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT 28
#endif
#ifndef IMAGE_LOADER_FLAGS_COMPLUS
#define IMAGE_LOADER_FLAGS_COMPLUS 0x00000001UL
#endif
#ifndef IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL
#define IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL 0x01000000UL
#endif
#ifndef IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION
#define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
#endif
#ifndef IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG
#define IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG 17
#endif
#ifndef LOAD_LIBRARY_SEARCH_DEFAULT_DIRS
#define LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR 0x00000100UL
#define LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x00000200UL
#define LOAD_LIBRARY_SEARCH_USER_DIRS 0x00000400UL
#define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800UL
#define LOAD_LIBRARY_SEARCH_DEFAULT_DIRS 0x00001000UL
#define LOAD_LIBRARY_SEARCH_SAFE_CURRENT_DIRS 0x00002000UL
#define LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER 0x00004000UL
#define LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY 0x00008000UL
#endif
typedef struct _IMAGE_ARMNT_RUNTIME_FUNCTION_ENTRY
{
DWORD BeginAddress;
DWORD UnwindData;
} IMAGE_ARMNT_RUNTIME_FUNCTION_ENTRY, *LPIMAGE_ARMNT_RUNTIME_FUNCTION_ENTRY, *PIMAGE_ARMNT_RUNTIME_FUNCTION_ENTRY;
typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR
{
union
{
DWORD AllAttributes;
struct
{
DWORD RvaBased : 1;
DWORD ReservedAttributes : 31;
};
} Attributes;
DWORD DllNameRVA;
DWORD ModuleHandleRVA;
DWORD ImportAddressTableRVA;
DWORD ImportNameTableRVA;
DWORD BoundImportAddressTableRVA;
DWORD UnloadInformationTableRVA;
DWORD TimeDateStamp;
} IMAGE_DELAYLOAD_DESCRIPTOR, *LPIMAGE_DELAYLOAD_DESCRIPTOR, *PIMAGE_DELAYLOAD_DESCRIPTOR;
typedef struct _IMAGE_LOAD_CONFIGURATION_DIRECTORY32
{
DWORD Size;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
DWORD GlobalFlagsClear;
DWORD GlobalFlagsSet;
DWORD CriticalSectionDefaultTimeout;
DWORD DeCommitFreeBlockThreshold;
DWORD DeCommitTotalFreeThreshold;
DWORD LockPrefixTable;
DWORD MaximumAllocationSize;
DWORD VirtualMemoryThreshold;
DWORD ProcessHeapFlags;
DWORD ProcessAffinityMask;
WORD CSDVersion;
#if 0
WORD Reserved1;
#else
WORD DependentLoadFlags;
#endif
DWORD EditList;
DWORD SecurityCookie;
DWORD SEHandlerTable;
DWORD SEHandlerCount;
// Threshold 1 (1507)
DWORD GuardCFCheckFunctionPointer;
DWORD GuardCFDispatchFunctionPointer;
DWORD GuardCFFunctionTable;
DWORD GuardCFFunctionCount;
DWORD GuardFlags;
// Threshold 2 (1511)
struct // _IMAGE_LOAD_CONFIG_CODE_INTEGRITY
{
WORD Flags;
WORD Catalog;
DWORD CatalogOffset;
DWORD Reserved;
} CodeIntegrity;
// Redstone 1 (1607)
DWORD GuardAddressTakenIatEntryTable;
DWORD GuardAddressTakenIatEntryCount;
DWORD GuardLongJumpTargetTable;
DWORD GuardLongJumpTargetCount;
//
DWORD DynamicValueRelocTable;
DWORD CHPEMetadataPointer;
// Redstone 2 (1703)
DWORD GuardRFFailureRoutine;
DWORD GuardRFFailureRoutineFunctionPointer;
DWORD DynamicValueRelocTableOffset;
WORD DynamicValueRelocTableSection;
WORD Reserved2;
//
DWORD GuardRFVerifyStackPointerFunctionPointer;
DWORD HotPatchTableOffset;
// Redstone 3 (1709)
DWORD Reserved3;
DWORD EnclaveConfigurationPointer;
// Redstone 4 (1803)
DWORD VolatileMetadataPointer;
// Redstone 5 (1809)
DWORD GuardEHContinuationTable;
DWORD GuardEHContinuationCount;
// Vanadium 1 (1903)
// Vanadium 2 (1909)
// Vibranium 1 (2004)
// Vibranium 2 (20H2)
// Vibranium 3 (21H1)
DWORD GuardXFGCheckFunctionPointer;
DWORD GuardXFGDispatchFunctionPointer;
DWORD GuardXFGTableDispatchFunctionPointer;
// Vibranium 4 (21H2)
DWORD CastGuardOsDeterminedFailureMode;
// Vibranium 5 (22H2)
DWORD GuardMemcpyFunctionPointer;
} IMAGE_LOAD_CONFIGURATION_DIRECTORY32, *LPIMAGE_LOAD_CONFIGURATION_DIRECTORY32, *PIMAGE_LOAD_CONFIGURATION_DIRECTORY32;
typedef struct _IMAGE_LOAD_CONFIGURATION_DIRECTORY64
{
DWORD Size;
DWORD TimeDateStamp;
WORD MajorVersion;
WORD MinorVersion;
DWORD GlobalFlagsClear;
DWORD GlobalFlagsSet;
DWORD CriticalSectionDefaultTimeout;
DWORD64 DeCommitFreeBlockThreshold;
DWORD64 DeCommitTotalFreeThreshold;
DWORD64 LockPrefixTable;
DWORD64 MaximumAllocationSize;
DWORD64 VirtualMemoryThreshold;
DWORD64 ProcessAffinityMask;
DWORD ProcessHeapFlags;
WORD CSDVersion;
#if 0
WORD Reserved1;
#else
WORD DependentLoadFlags;
#endif
DWORD64 EditList;
DWORD64 SecurityCookie;
DWORD64 SEHandlerTable;
DWORD64 SEHandlerCount;
// Threshold 1 (1507)
DWORD64 GuardCFCheckFunctionPointer;
DWORD64 GuardCFDispatchFunctionPointer;
DWORD64 GuardCFFunctionTable;
DWORD64 GuardCFFunctionCount;
DWORD GuardFlags;
// Threshold 2 (1511)
struct // _IMAGE_LOAD_CONFIG_CODE_INTEGRITY
{
WORD Flags;
WORD Catalog;
DWORD CatalogOffset;
DWORD Reserved;
} CodeIntegrity;
// Redstone 1 (1607)
DWORD64 GuardAddressTakenIatEntryTable;
DWORD64 GuardAddressTakenIatEntryCount;
DWORD64 GuardLongJumpTargetTable;
DWORD64 GuardLongJumpTargetCount;
//
DWORD64 DynamicValueRelocTable;
DWORD64 CHPEMetadataPointer;
// Redstone 2 (1703)
DWORD64 GuardRFFailureRoutine;
DWORD64 GuardRFFailureRoutineFunctionPointer;
DWORD DynamicValueRelocTableOffset;
WORD DynamicValueRelocTableSection;
WORD Reserved2;
//
DWORD64 GuardRFVerifyStackPointerFunctionPointer;
DWORD HotPatchTableOffset;
// Redstone 3 (1709)
DWORD Reserved3;
DWORD64 EnclaveConfigurationPointer;
// Redstone 4 (1803)
DWORD64 VolatileMetadataPointer;
// Redstone 5 (1809)
DWORD64 GuardEHContinuationTable;
DWORD64 GuardEHContinuationCount;
// Vanadium 1 (1903)
// Vanadium 2 (1909)
// Vibranium 1 (2004)
// Vibranium 2 (20H2)
// Vibranium 3 (21H1)
DWORD64 GuardXFGCheckFunctionPointer;
DWORD64 GuardXFGDispatchFunctionPointer;
DWORD64 GuardXFGTableDispatchFunctionPointer;
// Vibranium 4 (21H2)
DWORD64 CastGuardOsDeterminedFailureMode;
// Vibranium 5 (22H2)
DWORD64 GuardMemcpyFunctionPointer;
} IMAGE_LOAD_CONFIGURATION_DIRECTORY64, *LPIMAGE_LOAD_CONFIGURATION_DIRECTORY64, *PIMAGE_LOAD_CONFIGURATION_DIRECTORY64;
#ifndef RT_MENUEX
#define RT_MENUEX MAKEINTRESOURCE(13)
#endif
#ifndef RT_NAMETABLE
#define RT_NAMETABLE MAKEINTRESOURCE(15)
#endif
#ifndef RT_DIALOGEX
#define RT_DIALOGEX MAKEINTRESOURCE(18)
#endif
#ifndef RT_DLGINIT
#define RT_DLGINIT MAKEINTRESOURCE(240)
#endif
#ifndef RT_TOOLBAR
#define RT_TOOLBAR MAKEINTRESOURCE(241)
#endif
#ifndef RT_LOCALE
#define RT_LOCALE MAKEINTRESOURCE(255)
#endif
#ifndef WIN_CERT_TYPE_PKCS1_SIGN
#define WIN_CERT_TYPE_PKCS1_SIGN 0x0009
#endif
typedef struct _COFFStringTable
{
DWORD Size;
CHAR Strings[ANYSIZE_ARRAY];
} COFFStringTable;
typedef struct _CV_INFO_PDB20
{
DWORD Magic; // '01BN' = "NB10"
DWORD Offset;
DWORD Signature; // seconds since 1970-01-01
DWORD Age;
CHAR PdbFileName[ANYSIZE_ARRAY];
} CV_INFO_PDB20, *LPCV_INFO_PDB20, *PCV_INFO_PDB20;
typedef struct _CV_INFO_PDB70
{
DWORD Magic; // 'SDSR' = "RSDS"
GUID Signature;
DWORD Age;
CHAR PdbFileName[ANYSIZE_ARRAY];
} CV_INFO_PDB70, *LPCV_INFO_PDB70, *PCV_INFO_PDB70;
typedef struct _POGO
{
DWORD Magic; // 'LTCG' = "GCTL"
struct
{
DWORD Address;
DWORD Size;
CHAR Section[ANYSIZE_ARRAY];
} Entries[ANYSIZE_ARRAY];
} POGO, *LPPOGO, *PPOGO;
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(safebuffers)
BOOL CDECL PrintFormat(HANDLE hFile, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
LPBYTE lpOutput;
DWORD dwOutput;
DWORD dwFile;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
dwOutput *= sizeof(*szOutput);
lpOutput = (LPBYTE) szOutput;
do
{
if (!WriteFile(hFile, lpOutput, dwOutput, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpOutput += dwFile;
dwOutput -= dwFile;
} while (dwOutput != 0);
return TRUE;
}
#define PrintString(HANDLE, LITERAL) PrintDirect(HANDLE, LITERAL, sizeof(LITERAL) / sizeof(*LITERAL) - 1)
__inline
BOOL WINAPI PrintDirect(HANDLE hFile, LPCWSTR lpString, DWORD dwString)
{
DWORD dwFile;
dwString *= sizeof(*lpString);
do
{
if (!WriteFile(hFile, lpString, dwString, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpString = (LPCWSTR) ((LPBYTE) lpString + dwFile);
dwString -= dwFile;
} while (dwString != 0);
return TRUE;
}
LPCWSTR WINAPI CertificateTypeName(WORD wType)
{
switch (wType)
{
case WIN_CERT_TYPE_X509:
return L"X.509";
case WIN_CERT_TYPE_PKCS_SIGNED_DATA:
return L"PKCS";
case WIN_CERT_TYPE_RESERVED_1:
return L"(reserved)";
case WIN_CERT_TYPE_TS_STACK_SIGNED:
return L"Terminal Server";
case WIN_CERT_TYPE_PKCS1_SIGN:
return L"PKCS1_MODULE_SIGN";
default:
return L"<undefined>";
}
}
LPCWSTR WINAPI DebugTypeName(DWORD dwType)
{
switch (dwType)
{
case IMAGE_DEBUG_TYPE_UNKNOWN:
return L"Unknown";
case IMAGE_DEBUG_TYPE_COFF:
return L"COFF";
case IMAGE_DEBUG_TYPE_CODEVIEW:
return L"Codeview";
case IMAGE_DEBUG_TYPE_FPO:
return L"Frame pointer omission";
case IMAGE_DEBUG_TYPE_MISC:
return L"Misc";
case IMAGE_DEBUG_TYPE_EXCEPTION:
return L"Exception";
case IMAGE_DEBUG_TYPE_FIXUP:
return L"Fixup";
case IMAGE_DEBUG_TYPE_OMAP_TO_SRC:
return L"OMAP to source";
case IMAGE_DEBUG_TYPE_OMAP_FROM_SRC:
return L"OMAP from source";
case IMAGE_DEBUG_TYPE_BORLAND:
return L"Borland";
case IMAGE_DEBUG_TYPE_RESERVED10:
return L"Reserved";
case IMAGE_DEBUG_TYPE_CLSID:
return L"CLSID";
case IMAGE_DEBUG_TYPE_VC_FEATURE:
return L"VC feature";
case IMAGE_DEBUG_TYPE_POGO:
return L"Profile guided optimization";
case IMAGE_DEBUG_TYPE_ILTCG:
return L"Link time code generation";
case IMAGE_DEBUG_TYPE_MPX:
return L"MPX";
case IMAGE_DEBUG_TYPE_REPRO:
return L"Repro";
default:
return L"<undefined>";
}
}
LPCWSTR WINAPI MachineTypeName(WORD wMachine)
{
switch (wMachine)
{
case IMAGE_FILE_MACHINE_UNKNOWN: // 0x0000
return L"Unknown";
case IMAGE_FILE_MACHINE_TARGET_HOST: // 0x0001
return L"Target host";
case IMAGE_FILE_MACHINE_I386: // 0x014C
return L"Intel IA-32";
case IMAGE_FILE_MACHINE_I860: // 0x014D
return L"Intel i860";
case 0x0160:
return L"MIPS R3000, big-endian";
case IMAGE_FILE_MACHINE_R3000: // 0x0162
return L"MIPS R3000, little-endian";
case IMAGE_FILE_MACHINE_R4000: // 0x0166
return L"MIPS R4000, little-endian";
case IMAGE_FILE_MACHINE_R10000: // 0x0168
return L"MIPS R10000, little-endian";
case IMAGE_FILE_MACHINE_WCEMIPSV2: // 0x0169
return L"MIPS, little-endian, Windows CE v2";
case IMAGE_FILE_MACHINE_ALPHA: // 0x0184
return L"DEC Alpha AXP";
case IMAGE_FILE_MACHINE_SH3: // 0x01A2
return L"Hitachi SuperH 3, little-endian";
case IMAGE_FILE_MACHINE_SH3DSP: // 0x01A3
return L"Hitachi SuperH 3 with DSP";
case IMAGE_FILE_MACHINE_SH3E: // 0x01A4
return L"Hitachi SuperH 3E, little-endian";
case IMAGE_FILE_MACHINE_SH4: // 0x01A6
return L"Hitachi SuperH 4, little-endian";
case IMAGE_FILE_MACHINE_SH5: // 0x01A8
return L"Hitachi SuperH 5";
case IMAGE_FILE_MACHINE_ARM: // 0x01C0
return L"ARM, little-endian";
case IMAGE_FILE_MACHINE_THUMB: // 0x01C2
return L"ARM Thumb, little-endian";
case IMAGE_FILE_MACHINE_ARMNT: // 0x01C4
return L"ARM Thumb-2, little-endian";
case IMAGE_FILE_MACHINE_AM33: // 0x01D3
return L"Matsushita AM33";
case IMAGE_FILE_MACHINE_POWERPC: // 0x01F0
return L"IBM PowerPC, little-endian";
case IMAGE_FILE_MACHINE_POWERPCFP: // 0x01F1
return L"IBM PowerPC with FPU";
case IMAGE_FILE_MACHINE_IA64: // 0x0200
return L"Intel IA-64";
case IMAGE_FILE_MACHINE_MIPS16: // 0x0266
return L"MIPS, 16-bit instructions";
case IMAGE_FILE_MACHINE_M68K: // 0x0268
return L"Motorola MC68000";
case IMAGE_FILE_MACHINE_ALPHA64: // 0x0284
// case IMAGE_FILE_MACHINE_AXP64:
return L"DEC Alpha AXP64";
case IMAGE_FILE_MACHINE_PARISC: // 0x0290
return L"Hewlett-Packard PA-RISC";
case IMAGE_FILE_MACHINE_MIPSFPU: // 0x0366
return L"MIPS with FPU";
case IMAGE_FILE_MACHINE_MIPSFPU16: // 0x0466
return L"MIPS with FPU, 16-bit instructions";
case IMAGE_FILE_MACHINE_TRICORE: // 0x0520
return L"Infineon TriCore";
case 0x0601:
return L"Motorola PowerPC 601";
case IMAGE_FILE_MACHINE_CEF: // 0x0CEF
return L"CEF";
case IMAGE_FILE_MACHINE_EBC: // 0x0EBC
return L"EFI Byte Code";
case IMAGE_FILE_MACHINE_CHPE_X86: // 0x3A64
return L"Compiled Hybrid PE";
case IMAGE_FILE_MACHINE_RISCV32: // 0x5032
return L"RISC-V, 32-bit address space";
case IMAGE_FILE_MACHINE_RISCV64: // 0x5064
return L"RISC-V, 64-bit address space";
case IMAGE_FILE_MACHINE_RISCV128: // 0x5128
return L"RISC-V, 128-bit address space";
case IMAGE_FILE_MACHINE_LOONGARCH32: // 0x6232
return L"LoongArch, 32-bit";
case IMAGE_FILE_MACHINE_LOONGARCH64: // 0x6264
return L"LoongArch, 64-bit";
case IMAGE_FILE_MACHINE_AMD64: // 0x8664
return L"AMD64";
case IMAGE_FILE_MACHINE_M32R: // 0x9041
return L"Mitsubishi M32R, little-endian";
case IMAGE_FILE_MACHINE_ARM64: // 0xAA64
return L"ARMv8, 64-bit mode, little-endian";
case IMAGE_FILE_MACHINE_CEE: // 0xC0EE
return L"CEE";
default:
return L"<undefined>";
}
}
LPCWSTR WINAPI SubsystemName(WORD wSubsystem)
{
switch (wSubsystem)
{
case IMAGE_SUBSYSTEM_UNKNOWN:
return L"Unknown";
case IMAGE_SUBSYSTEM_NATIVE:
return L"Native";
case IMAGE_SUBSYSTEM_WINDOWS_GUI:
return L"Windows GUI";
case IMAGE_SUBSYSTEM_WINDOWS_CUI:
return L"Windows CUI";
case IMAGE_SUBSYSTEM_OS2_CUI:
return L"OS/2 CUI";
case IMAGE_SUBSYSTEM_POSIX_CUI:
return L"POSIX CUI";
case IMAGE_SUBSYSTEM_NATIVE_WINDOWS:
return L"Native Windows 9x driver";
case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI:
return L"Windows CE";
case IMAGE_SUBSYSTEM_EFI_APPLICATION:
return L"EFI application";
case IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER:
return L"EFI driver with boot services";
case IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER:
return L"EFI driver with run-time services";
case IMAGE_SUBSYSTEM_EFI_ROM:
return L"EFI ROM image";
case IMAGE_SUBSYSTEM_XBOX:
return L"Xbox";
case IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION:
return L"Boot application";
case IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG:
return L"Xbox code catalog";
default:
return L"<undefined>";
}
}
LPCWSTR WINAPI ResourceTypeName(WORD wResType)
{
switch (wResType)
{
case RT_CURSOR: // MAKEINTRESOURCE(1)
return L"RT_CURSOR";
case RT_BITMAP: // MAKEINTRESOURCE(2)
return L"RT_BITMAP";
case RT_ICON: // MAKEINTRESOURCE(3)
return L"RT_ICON";
case RT_MENU: // MAKEINTRESOURCE(4)
return L"RT_MENU";
case RT_DIALOG: // MAKEINTRESOURCE(5)
return L"RT_DIALOG";
case RT_STRING: // MAKEINTRESOURCE(6)
#if 1
return L"RT_STRING";
#else
return L"RT_STRINGTABLE";
#endif
case RT_FONTDIR: // MAKEINTRESOURCE(7)
return L"RT_FONTDIR";
case RT_FONT: // MAKEINTRESOURCE(8)
return L"RT_FONT";
case RT_ACCELERATOR: // MAKEINTRESOURCE(9)
return L"RT_ACCELERATOR";
case RT_RCDATA: // MAKEINTRESOURCE(10)
return L"RT_RCDATA";
case RT_MESSAGETABLE: // MAKEINTRESOURCE(11)
return L"RT_MESSAGETABLE";
case RT_GROUP_CURSOR: // MAKEINTRESOURCE(12)
return L"RT_GROUP_CURSOR";
case RT_MENUEX: // MAKEINTRESOURCE(13)
return L"RT_MENUEX";
case RT_GROUP_ICON: // MAKEINTRESOURCE(14)
return L"RT_GROUP_ICON";
case RT_NAMETABLE: // MAKEINTRESOURCE(15)
return L"RT_NAMETABLE";
case RT_VERSION: // MAKEINTRESOURCE(16)
return L"RT_VERSION";
case RT_DLGINCLUDE: // MAKEINTRESOURCE(17)
return L"RT_DLGINCLUDE";
case RT_DIALOGEX: // MAKEINTRESOURCE(18)
return L"RT_DIALOGEX";
case RT_PLUGPLAY: // MAKEINTRESOURCE(19)
return L"RT_PLUGPLAY";
case RT_VXD: // MAKEINTRESOURCE(20)
return L"RT_VXD";
case RT_ANICURSOR: // MAKEINTRESOURCE(21)
return L"RT_ANICURSOR";
case RT_ANIICON: // MAKEINTRESOURCE(22)
return L"RT_ANIICON";
case RT_HTML: // MAKEINTRESOURCE(23)
return L"RT_HTML";
case RT_MANIFEST: // MAKEINTRESOURCE(24)
return L"RT_MANIFEST";
case RT_DLGINIT: // MAKEINTRESOURCE(240)
return L"RT_DLGINIT";
case RT_TOOLBAR: // MAKEINTRESOURCE(241)
return L"RT_TOOLBAR";
case RT_LOCALE: // MAKEINTRESOURCE(255)
return L"RT_LOCALE";
default:
return NULL;
}
}
BOOL WINAPI Resource(HANDLE hOutput,
IMAGE_RESOURCE_DIRECTORY *lpRoot,
IMAGE_RESOURCE_DIRECTORY *lpLevel,
DWORD dwLevel) // 0 = Type, 1 = Id, 2 = Language
{
BOOL bOutput = TRUE;
DWORD dwEntry;
IMAGE_RESOURCE_DIRECTORY_ENTRY *lpEntry;
IMAGE_RESOURCE_DIR_STRING_U *lpUnicode;
IMAGE_RESOURCE_DATA_ENTRY *lpData;
for (lpEntry = (IMAGE_RESOURCE_DIRECTORY_ENTRY *) (lpLevel + 1),
dwEntry = lpLevel->NumberOfNamedEntries + lpLevel->NumberOfIdEntries;
dwEntry > 0;
dwEntry--,
lpEntry++)
{
if ((lpEntry->Name & IMAGE_RESOURCE_NAME_IS_STRING) == IMAGE_RESOURCE_NAME_IS_STRING)
{
lpUnicode = (IMAGE_RESOURCE_DIR_STRING_U *) ((BYTE *) lpRoot + (lpEntry->Name ^ IMAGE_RESOURCE_NAME_IS_STRING));
bOutput &= PrintDirect(hOutput, L"\t\t\t\tName = " + 2 - dwLevel, dwLevel + 11);
bOutput &= PrintDirect(hOutput, lpUnicode->NameString, lpUnicode->Length);
bOutput &= PrintString(hOutput, L"\r\n");
bOutput &= PrintFormat(hOutput, L"\t\t\t\tOffset = 0x%08lX\r\n" + 2 - dwLevel, lpEntry->OffsetToData);
}
else if (dwLevel > 1)
bOutput &= PrintFormat(hOutput,
L"\t\t\t\tLanguage = %hu\r\n"
L"\t\t\t\tOffset = 0x%08lX\r\n",
lpEntry->Id,
lpEntry->OffsetToData);
else if (dwLevel > 0)
bOutput &= PrintFormat(hOutput,
L"\t\t\tId = %hu\r\n"
L"\t\t\tOffset = 0x%08lX\r\n",
lpEntry->Id,
lpEntry->OffsetToData);
else
bOutput &= PrintFormat(hOutput,
L"\t\tType = %hu (%ls)\r\n"
L"\t\tOffset = 0x%08lX\r\n",
lpEntry->Id, ResourceTypeName(lpEntry->Id),
lpEntry->OffsetToData);
if ((lpEntry->OffsetToData & IMAGE_RESOURCE_DATA_IS_DIRECTORY) == IMAGE_RESOURCE_DATA_IS_DIRECTORY)
bOutput &= Resource(hOutput,
lpRoot,
(IMAGE_RESOURCE_DIRECTORY *) ((BYTE *) lpRoot + (lpEntry->OffsetToData ^ IMAGE_RESOURCE_DATA_IS_DIRECTORY)),
dwLevel + 1);
else
{
lpData = (IMAGE_RESOURCE_DATA_ENTRY *) ((BYTE *) lpRoot + lpEntry->OffsetToData);
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\tAddress = 0x%08lX\r\n"
L"\t\t\t\t\tSize = %lu\r\n"
L"\t\t\t\t\tCode Page = %lu\r\n"
L"\t\t\t\t\tReserved = 0x%08lX\r\n",
lpData->OffsetToData,
lpData->Size,
lpData->CodePage,
lpData->Reserved);
}
}
return bOutput;
}
LPVOID WINAPI RVA2Image(BYTE *lpImage,
IMAGE_SECTION_HEADER *lpSection,
DWORD dwSection,
DWORD dwRVA,
DWORD dwDirectory,
HANDLE hConsole)
{
while (dwSection > 0)
{
if ((dwRVA >= lpSection->VirtualAddress)
&& (dwRVA < lpSection->VirtualAddress + lpSection->SizeOfRawData))
return lpImage + dwRVA - lpSection->VirtualAddress + lpSection->PointerToRawData;
lpSection++;
dwSection--;
}
PrintConsole(hConsole,
L"RVA 0x%08lX in IMAGE_DATA_DIRECTORY[%lu] outside of COFF sections!\n",
dwRVA, dwDirectory);
return NULL;
}
const LPCWSTR szDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] = {L"Export",
L"Import",
L"Resource",
L"Exception Handler",
L"Security",
L"Base Relocation",
L"Debug",
L"Architecture",
L"Global Pointer",
L"Thread Local Storage",
L"Load Configuration",
L"Bound Import",
L"Import Address Table",
L"Delay Load Import",
L"COM+ Descriptor",
L"Reserved"};
const LPCWSTR szDayOfWeek[7] = {L"Sunday",
L"Monday",
L"Tuesday",
L"Wednesday",
L"Thursday",
L"Friday",
L"Saturday"};
const LPCWSTR szRelocation[16] = {L"ABSOLUTE",
L"HIGH",
L"LOW",
L"HIGHLOW",
L"HIGHADJ",
L"ARM_MOV32", // also L"MIPS_JMPADDR" or L"RISCV_HIGH20"
L"SECTION",
L"THUMB_MOV32", // also L"REL32" or L"RISCV_LOW12I"
L"RISCV_LOW12S", // also L"LOONGARCH32_MARK_LA" or L"LOONGARCH64_MARK_LA"
L"IA64_IMM64", // also L"MIPS_JMPADDR16"
L"DIR64",
L"HIGH3ADJ",
NULL,
NULL,
NULL,
NULL};
const LPCWSTR szGlobalFlags[32] = {L"Stop on exception",
L"Show loader snaps",
NULL,
NULL,
L"Enable heap tail checking",
L"Enable heap free checking",
L"Enable heap parameter checking",
L"Enable heap validation on call",
L"Enable application verifier",
L"Enable silent process exit monitoring",
NULL,
L"Enable heap tagging",
L"Create user mode stack trace database",
NULL,
NULL,
L"Enable heap tagging by DLL",
L"Disable stack extension",
NULL,
NULL,
NULL,
L"Enable system critical breaks",
L"Disable heap coalesce on free",
L"Enable close exception",
NULL,
NULL,
L"Enable page heap",
NULL,
L"Buffer DbgPrint output",
L"Early critical section event creation",
L"Stop on unhandled user-mode exception",
L"Enable bad handles detection",
L"Disable protected DLL verification"};
#ifdef RDN
const DWORD dwStrType = CERT_NAME_STR_REVERSE_FLAG | CERT_X500_NAME_STR;
#endif
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
IMAGE_DOS_HEADER *lpMZ;
IMAGE_NT_HEADERS *lpPE;
IMAGE_NT_HEADERS32 *lpPE32;
IMAGE_NT_HEADERS64 *lpPE64;
IMAGE_SECTION_HEADER *lpSection;
IMAGE_SECTION_HEADER *lpTLS = NULL;
IMAGE_DATA_DIRECTORY *lpDirectory;
IMAGE_DEBUG_DIRECTORY *lpDebug;
IMAGE_EXPORT_DIRECTORY *lpExport;
IMAGE_IMPORT_DESCRIPTOR *lpImport;
IMAGE_THUNK_DATA32 *lpThunk32;
IMAGE_THUNK_DATA64 *lpThunk64;
IMAGE_IMPORT_BY_NAME *lpAddress;
IMAGE_DEBUG_MISC *lpMisc;
IMAGE_BASE_RELOCATION *lpRelocation;
IMAGE_TLS_DIRECTORY32 *lpTLS32;
IMAGE_TLS_DIRECTORY64 *lpTLS64;
IMAGE_COR20_HEADER *lpCOMPlus;
IMAGE_RESOURCE_DIRECTORY *lpResource;
IMAGE_BOUND_IMPORT_DESCRIPTOR *lpDescriptor;
IMAGE_DELAYLOAD_DESCRIPTOR *lpDelay;
IMAGE_RUNTIME_FUNCTION_ENTRY *lpRuntime;
IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY *lpAlpha;
IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY *lpAlpha64;
IMAGE_ARMNT_RUNTIME_FUNCTION_ENTRY *lpARM;
IMAGE_LOAD_CONFIGURATION_DIRECTORY32 *lpLoadCfg32;
IMAGE_LOAD_CONFIGURATION_DIRECTORY64 *lpLoadCfg64;
COFFStringTable *lpCOFF;
CV_INFO_PDB70 *lpCodeView;
WIN_CERTIFICATE *lpCertificate;
CERT_CONTEXT *lpSigner;
CERT_BLOB blob;
HCERTSTORE hStore;
HCRYPTMSG hMsg;
SYSTEMTIME st;
LPWSTR *lpArguments;
INT nArguments;
BOOL bOutput;
HANDLE hOutput;
HANDLE hInput;
DWORD dwInput;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwArray = 0;
DWORD dwIndex;
DWORD dwImage;
HANDLE hImage;
BYTE *lpImage;
BYTE *lpBound;
WORD *lpWord;
DWORD *lpDanS;
DWORD *lpRich;
DWORD dwRich;
DWORD dwSigner;
LPWSTR szSigner;
LPCSTR lpString;
LPCSTR lpModule;
BYTE *lpException;
DWORD *lpFunctions;
WORD *lpOrdinals;
DWORD *lpNames;
DWORD dwNames;
DWORD dwFlags;
DWORD dwDebug;
DWORD dwDescriptor;
DWORD dwCertificate;
DWORD dwRelocation;
DWORD dwException;
DWORD dwDirectory;
DWORD dwSection;
DWORD dwCheckSum;
DWORD dwAccumulator;
DWORD dwCode;
DWORD dwData;
DWORD dwNone;
DWORD dwSize;
DWORD dwLast;
DWORD dwFile;
DWORD dwOffset;
DWORD dwMemory;
DWORD dwRVA;
DWORD dwBase;
DWORD64 qwBase;
DWORD64 qw;
DWORD64 *lpCookie64;
DWORD *lpCookie32;
DWORD *lpHandler;
DWORD dwHandler;
DWORD dwPogo;
POGO *lpPogo;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments != 2)
PrintConsole(hConsole,
L"No argument: a single file or path name of an image file must be given!\n");
else
{
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOutput == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"GetStdHandle() returned error %lu\n",
dwError = GetLastError());
else
{
if (!FlushFileBuffers(hOutput))
PrintConsole(hConsole,
L"FlushFileBuffers() returned error %lu: standard output is not redirected to a file!\n",
dwError = GetLastError());
else
{
hInput = CreateFile(lpArguments[1],
FILE_READ_DATA,
FILE_SHARE_READ,
(SECURITY_ATTRIBUTES *) NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
(HANDLE) NULL);
if (hInput == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"CreateFile() returned error %lu\n",
dwError = GetLastError());
else
{
dwInput = GetFileSize(hInput, (DWORD *) NULL);
if (dwInput == INVALID_FILE_SIZE)
PrintConsole(hConsole,
L"GetFileSize() returned error %lu\n",
dwError = GetLastError());
else
{
hImage = CreateFileMapping(hInput,
(LPSECURITY_ATTRIBUTES) NULL,
PAGE_WRITECOPY,
0, 0,
(LPCWSTR) NULL);
if (hImage == NULL)
PrintConsole(hConsole,
L"CreateFileMapping() returned error %lu\n",
dwError = GetLastError());
else
{
lpImage = MapViewOfFile(hImage,
FILE_MAP_COPY,
0, 0,
(SIZE_T) 0);
if (lpImage == NULL)
PrintConsole(hConsole,
L"MapViewOfFile() returned error %lu\n",
dwError = GetLastError());
else
{
dwError = ERROR_INVALID_EXE_SIGNATURE;
lpMZ = (IMAGE_DOS_HEADER *) lpImage;
if (lpMZ->e_magic != IMAGE_DOS_SIGNATURE)
PrintConsole(hConsole,
L"No signature \'%ls\' at offset 0x%08lX in file \'%ls\'!\n",
L"MZ", 0, lpArguments[1]);
else
{
dwImage = dwInput;
lpPE = (IMAGE_NT_HEADERS *) ((BYTE *) lpMZ + lpMZ->e_lfanew);
if (((DWORD) lpMZ->e_lfanew > dwImage)
|| (lpPE->Signature != IMAGE_NT_SIGNATURE))
PrintConsole(hConsole,
L"No signature \'%ls\' at offset 0x%08lX in file \'%ls\'!\n",
L"PE\\0\\0", lpMZ->e_lfanew, lpArguments[1]);
else
{
bOutput = PrintFormat(hOutput,
L"\xFEFF" // UTF-16LE BOM
L"Image File = %ls\r\n"
L"Image Size = %lu\r\n",
lpArguments[1],
dwImage);
lpRich = (DWORD *) lpPE;
while ((--lpRich > (DWORD *) (lpImage + sizeof(IMAGE_DOS_HEADER)))
&& (*lpRich != 'hciR'))
dwRich = *lpRich;
if (*lpRich == 'hciR')
{
lpDanS = lpRich;
while ((--lpDanS > (DWORD *) (lpImage + sizeof(IMAGE_DOS_HEADER)))
&& ((*lpDanS ^ dwRich) != 'SnaD'))
continue;
if ((*lpDanS ^ dwRich) != 'SnaD')
PrintConsole(hConsole,
L"End marker \"Rich\" present at offset 0x%08lX, but start marker \"DanS\" missing in file \'%ls\'!\n",
(BYTE *) lpRich - lpImage, lpArguments[1]);
else
{
bOutput &= PrintString(hOutput,
L"\r\n"
L"Tool Version Information:\r\n");
for (lpDanS += 4; lpDanS < lpRich; lpDanS += 2)
bOutput &= PrintFormat(hOutput,
L"\t@comp.id = %5hu %5hu, Count = %lu\r\n",
HIWORD(lpDanS[0] ^ dwRich), LOWORD(lpDanS[0] ^ dwRich), lpDanS[1] ^ dwRich);
}
}
dwError = ERROR_SUCCESS;
qw = __emulu(lpPE->FileHeader.TimeDateStamp, 10000000)
+ 116444736000000000; // seconds since 1970-01-01 to
// 100 nano-seconds since 1601-01-01
if (!FileTimeToSystemTime((FILETIME *) &qw, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
dwError = GetLastError());
bOutput = PrintFormat(hOutput,
L"\r\n"
L"File Header:\r\n"
L"\tMachine = 0x%04hX (%ls)\r\n"
L"\tTime/Date Stamp = 0x%08lX (%ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu UTC)\r\n"
L"\tPointer to Symbol Table = 0x%08lX\r\n"
L"\tNumber of Symbols = %lu\r\n"
L"\tSize of Optional Header = 0x%04hX\r\n"
L"\tCharacteristics = 0x%04hX\r\n",
lpPE->FileHeader.Machine, MachineTypeName(lpPE->FileHeader.Machine),
lpPE->FileHeader.TimeDateStamp,
szDayOfWeek[st.wDayOfWeek], st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond,
lpPE->FileHeader.PointerToSymbolTable,
lpPE->FileHeader.NumberOfSymbols,
lpPE->FileHeader.SizeOfOptionalHeader,
lpPE->FileHeader.Characteristics);
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_RELOCS_STRIPPED) == IMAGE_FILE_RELOCS_STRIPPED)
bOutput &= PrintString(hOutput, L"\t\tRelocation information stripped\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE) == IMAGE_FILE_EXECUTABLE_IMAGE)
bOutput &= PrintString(hOutput, L"\t\tExecutable image\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_LINE_NUMS_STRIPPED) == IMAGE_FILE_LINE_NUMS_STRIPPED)
bOutput &= PrintString(hOutput, L"\t\tLine numbers stripped\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_LOCAL_SYMS_STRIPPED) == IMAGE_FILE_LOCAL_SYMS_STRIPPED)
bOutput &= PrintString(hOutput, L"\t\tLocal symbols stripped\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_AGGRESIVE_WS_TRIM) == IMAGE_FILE_AGGRESIVE_WS_TRIM)
bOutput &= PrintString(hOutput, L"\t\tAggressively trim working set\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_LARGE_ADDRESS_AWARE) == IMAGE_FILE_LARGE_ADDRESS_AWARE)
bOutput &= PrintString(hOutput, L"\t\tHandles addresses above 2 GB\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_16BIT_MACHINE) == IMAGE_FILE_16BIT_MACHINE)
bOutput &= PrintString(hOutput, L"\t\t16 bit word machine\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_32BIT_MACHINE) == IMAGE_FILE_32BIT_MACHINE)
bOutput &= PrintString(hOutput, L"\t\t32 bit word machine\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_DEBUG_STRIPPED) == IMAGE_FILE_DEBUG_STRIPPED)
bOutput &= PrintString(hOutput, L"\t\tDebugging information stripped\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP) == IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP)
bOutput &= PrintString(hOutput, L"\t\tRun image on CD from swap file\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_NET_RUN_FROM_SWAP) == IMAGE_FILE_NET_RUN_FROM_SWAP)
bOutput &= PrintString(hOutput, L"\t\tRun image on network from swap file\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_SYSTEM) == IMAGE_FILE_SYSTEM)
bOutput &= PrintString(hOutput, L"\t\tSystem file\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_DLL) == IMAGE_FILE_DLL)
bOutput &= PrintString(hOutput, L"\t\tDLL\r\n");
if ((lpPE->FileHeader.Characteristics & IMAGE_FILE_UP_SYSTEM_ONLY) == IMAGE_FILE_UP_SYSTEM_ONLY)
bOutput &= PrintString(hOutput, L"\t\tUniprocessor machine only\r\n");
if (((lpPE->FileHeader.Characteristics & IMAGE_FILE_BYTES_REVERSED_LO) == IMAGE_FILE_BYTES_REVERSED_LO)
|| ((lpPE->FileHeader.Characteristics & IMAGE_FILE_BYTES_REVERSED_HI) == IMAGE_FILE_BYTES_REVERSED_HI))
bOutput &= PrintString(hOutput, L"\t\tBytes of machine word are reversed\r\n");
if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
{
if (lpPE->FileHeader.SizeOfOptionalHeader != sizeof(IMAGE_OPTIONAL_HEADER64))
PrintConsole(hConsole,
L"Size of %ls differs from size of %ls structure!\n",
L"optional header", L"IMAGE_OPTIONAL_HEADER64");
lpPE64 = (IMAGE_NT_HEADERS64 *) lpPE;
// lpSection = (IMAGE_SECTION_HEADER *) (lpPE64->OptionalHeader.DataDirectory + lpPE64->OptionalHeader.NumberOfRvaAndSizes);
lpDirectory = lpPE64->OptionalHeader.DataDirectory;
// dwDirectory = lpPE64->OptionalHeader.NumberOfRvaAndSizes;
qwBase = lpPE64->OptionalHeader.ImageBase;
// dwBase = lpPE64->OptionalHeader.BaseOfCode;
dwCode = lpPE64->OptionalHeader.SizeOfCode;
dwData = lpPE64->OptionalHeader.SizeOfInitializedData;
dwNone = lpPE64->OptionalHeader.SizeOfUninitializedData;
dwSize = lpPE64->OptionalHeader.SizeOfImage;
dwOffset = lpPE64->OptionalHeader.SizeOfHeaders;
dwMemory = lpPE64->OptionalHeader.SectionAlignment;
dwFile = lpPE64->OptionalHeader.FileAlignment;
}
else if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
{
if (lpPE->FileHeader.SizeOfOptionalHeader != sizeof(IMAGE_OPTIONAL_HEADER32))
PrintConsole(hConsole,
L"Size of %ls differs from size of %ls structure!\n",
L"optional header", L"IMAGE_OPTIONAL_HEADER32");
lpPE32 = (IMAGE_NT_HEADERS32 *) lpPE;
// lpSection = (IMAGE_SECTION_HEADER *) (lpPE32->OptionalHeader.DataDirectory + lpPE32->OptionalHeader.NumberOfRvaAndSizes);
lpDirectory = lpPE32->OptionalHeader.DataDirectory;
// dwDirectory = lpPE32->OptionalHeader.NumberOfRvaAndSizes;
dwBase = lpPE32->OptionalHeader.ImageBase;
// dwBase = lpPE32->OptionalHeader.BaseOfCode;
dwCode = lpPE32->OptionalHeader.SizeOfCode;
dwData = lpPE32->OptionalHeader.SizeOfInitializedData;
dwNone = lpPE32->OptionalHeader.SizeOfUninitializedData;
dwSize = lpPE32->OptionalHeader.SizeOfImage;
dwOffset = lpPE32->OptionalHeader.SizeOfHeaders;
dwMemory = lpPE32->OptionalHeader.SectionAlignment;
dwFile = lpPE32->OptionalHeader.FileAlignment;
}
else
PrintConsole(hConsole,
L"Image format is neither PE32 (32-bit) nor PE32+ (64-bit)!\n");
dwFile--;
if ((dwFile & (dwFile + 1)) != 0)
PrintConsole(hConsole,
L"File alignment is not a power of 2!\n");
else if ((dwMemory & dwFile) != 0)
PrintConsole(hConsole,
L"Section alignment is not a multiple of file alignment!\n");
#if 0
dwMemory--;
if ((dwMemory & (dwMemory + 1)) != 0)
PrintConsole(hConsole,
L"Section alignment is not a power of 2!\n");
#else
if ((dwMemory & (dwMemory - 1)) != 0)
PrintConsole(hConsole,
L"Section alignment is not a power of 2!\n");
dwMemory--;
#endif
dwRVA = (dwOffset + dwMemory) & ~dwMemory;
dwLast = 0;
bOutput &= PrintFormat(hOutput,
L"\tNumber of COFF Sections = %hu\r\n",
lpPE->FileHeader.NumberOfSections);
for (lpSection = (IMAGE_SECTION_HEADER *) ((BYTE *) &(lpPE->OptionalHeader) + lpPE->FileHeader.SizeOfOptionalHeader),
dwSection = 0;
dwSection < lpPE->FileHeader.NumberOfSections;
dwSection++)
{
bOutput &= PrintFormat(hOutput,
L"\t%.8hs:\r\n"
L"\t\tVirtual Address & Size = 0x%08lX, 0x%08lX\r\n"
L"\t\tFile Offset & Raw Size = 0x%08lX, 0x%08lX\r\n"
L"\t\tCharacteristics = 0x%08lX\r\n",
lpSection[dwSection].Name,
lpSection[dwSection].VirtualAddress,
lpSection[dwSection].Misc.VirtualSize,
lpSection[dwSection].PointerToRawData,
lpSection[dwSection].SizeOfRawData,
lpSection[dwSection].Characteristics);
#ifdef IMAGE_SCN_TYPE_REG
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_TYPE_REG) == IMAGE_SCN_TYPE_REG)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
#endif
#ifdef IMAGE_SCN_TYPE_DSECT
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_TYPE_DSECT) == IMAGE_SCN_TYPE_DSECT)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
#endif
#ifdef IMAGE_SCN_TYPE_NOLOAD
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_TYPE_NOLOAD) == IMAGE_SCN_TYPE_NOLOAD)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
#endif
#ifdef IMAGE_SCN_TYPE_GROUP
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_TYPE_GROUP) == IMAGE_SCN_TYPE_GROUP)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
#endif
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_TYPE_NO_PAD) == IMAGE_SCN_TYPE_NO_PAD)
bOutput &= PrintString(hOutput, L"\t\t\tReserved (COFF)\r\n");
#ifdef IMAGE_SCN_TYPE_COPY
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_TYPE_COPY) == IMAGE_SCN_TYPE_COPY)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
#endif
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_CNT_CODE) == IMAGE_SCN_CNT_CODE)
{
bOutput &= PrintString(hOutput, L"\t\t\tExecutable code\r\n");
dwCode -= lpSection[dwSection].SizeOfRawData;
}
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_CNT_INITIALIZED_DATA) == IMAGE_SCN_CNT_INITIALIZED_DATA)
{
bOutput &= PrintString(hOutput, L"\t\t\tInitialized data\r\n");
dwData -= lpSection[dwSection].SizeOfRawData;
}
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA) == IMAGE_SCN_CNT_UNINITIALIZED_DATA)
{
bOutput &= PrintString(hOutput, L"\t\t\tUninitialized data\r\n");
dwNone -= lpSection[dwSection].Misc.VirtualSize;
}
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_LNK_OTHER) == IMAGE_SCN_LNK_OTHER)
bOutput &= PrintString(hOutput, L"\t\t\tReserved (COFF)\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_LNK_INFO) == IMAGE_SCN_LNK_INFO)
bOutput &= PrintString(hOutput, L"\t\t\tLinker information: .cormeta, .drectve, .idlsym or .sxdata (COFF)\r\n");
#ifdef IMAGE_SCN_TYPE_OVER
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_TYPE_OVER) == IMAGE_SCN_TYPE_OVER)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
#endif
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_LNK_REMOVE) == IMAGE_SCN_LNK_REMOVE)
bOutput &= PrintString(hOutput, L"\t\t\tRemovable content (COFF)\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_LNK_COMDAT) == IMAGE_SCN_LNK_COMDAT)
bOutput &= PrintString(hOutput, L"\t\t\tCOMDAT (COFF)\r\n");
#ifdef IMAGE_SCN_MEM_PROTECTED
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_PROTECTED) == IMAGE_SCN_MEM_PROTECTED)
bOutput &= PrintString(hOutput, L"\t\t\tObsolete\r\n");
#endif
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_NO_DEFER_SPEC_EXC) == IMAGE_SCN_NO_DEFER_SPEC_EXC)
bOutput &= PrintString(hOutput, L"\t\t\tReset speculative exceptions handling bits in the TLB entries for this section\r\n");
#ifdef IMAGE_SCN_GPREL
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_GPREL) == IMAGE_SCN_GPREL)
#else
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_FARDATA) == IMAGE_SCN_MEM_FARDATA)
#endif
bOutput &= PrintString(hOutput, L"\t\t\tGP relative data\r\n");
#ifdef IMAGE_SCN_MEM_SYSHEAP
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_SYSHEAP) == IMAGE_SCN_MEM_SYSHEAP)
bOutput &= PrintString(hOutput, L"\t\t\tObsolete\r\n");
#endif
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_PURGEABLE) == IMAGE_SCN_MEM_PURGEABLE)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_16BIT) == IMAGE_SCN_MEM_16BIT)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_LOCKED) == IMAGE_SCN_MEM_LOCKED)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_PRELOAD) == IMAGE_SCN_MEM_PRELOAD)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_ALIGN_MASK) != 0)
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_ALIGN_MASK) == IMAGE_SCN_ALIGN_MASK)
bOutput &= PrintString(hOutput, L"\t\t\tReserved\r\n");
else
bOutput &= PrintFormat(hOutput,
L"\t\t\t%lu-byte alignment (COFF)\r\n",
1 << (((lpSection[dwSection].Characteristics & IMAGE_SCN_ALIGN_MASK) >> 20) - 1));
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_LNK_NRELOC_OVFL) == IMAGE_SCN_LNK_NRELOC_OVFL)
bOutput &= PrintString(hOutput, L"\t\t\tExtended relocations\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_DISCARDABLE) == IMAGE_SCN_MEM_DISCARDABLE)
bOutput &= PrintString(hOutput, L"\t\t\tDiscardable\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_NOT_CACHED) == IMAGE_SCN_MEM_NOT_CACHED)
bOutput &= PrintString(hOutput, L"\t\t\tVolatile, not cacheable\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_NOT_PAGED) == IMAGE_SCN_MEM_NOT_PAGED)
bOutput &= PrintString(hOutput, L"\t\t\tResident, not pageable\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_SHARED) == IMAGE_SCN_MEM_SHARED)
bOutput &= PrintString(hOutput, L"\t\t\tShared\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_EXECUTE) == IMAGE_SCN_MEM_EXECUTE)
bOutput &= PrintString(hOutput, L"\t\t\tExecutable\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_READ) == IMAGE_SCN_MEM_READ)
bOutput &= PrintString(hOutput, L"\t\t\tReadable\r\n");
if ((lpSection[dwSection].Characteristics & IMAGE_SCN_MEM_WRITE) == IMAGE_SCN_MEM_WRITE)
bOutput &= PrintString(hOutput, L"\t\t\tWritable\r\n");
if ((lpSection[dwSection].VirtualAddress & dwMemory) != 0)
PrintConsole(hConsole,
L"Address of \'%.8hs\' section is not aligned!\n",
lpSection[dwSection].Name);
if (lpSection[dwSection].VirtualAddress != dwRVA)
PrintConsole(hConsole,
L"Address of \'%.8hs\' section is not contiguous!\n",
lpSection[dwSection].Name);
if ((lpSection[dwSection].PointerToRawData & dwFile) != 0)
PrintConsole(hConsole,
L"Offset of \'%.8hs\' section is not aligned!\n",
lpSection[dwSection].Name);
if ((lpSection[dwSection].PointerToRawData != 0)
&& (lpSection[dwSection].PointerToRawData != dwOffset))
PrintConsole(hConsole,
L"Offset of \'%.8hs\' section is not contiguous!\n",
lpSection[dwSection].Name);
if ((lpSection[dwSection].PointerToRawData != 0)
&& (lpSection[dwSection].SizeOfRawData != 0))
dwOffset = lpSection[dwSection].PointerToRawData
+ lpSection[dwSection].SizeOfRawData;
if ((lpSection[dwSection].SizeOfRawData & dwFile) != 0)
PrintConsole(hConsole,
L"Data of \'%.8hs\' section is not aligned!\n",
lpSection[dwSection].Name);
dwRVA = lpSection[dwSection].VirtualAddress + lpSection[dwSection].Misc.VirtualSize;
if (dwRVA > dwSize)
PrintConsole(hConsole,
L"Section \'%.8hs\' extends past image!\n",
lpSection[dwSection].Name);
if (dwLast < dwRVA)
dwLast = dwRVA;
dwRVA = (lpSection[dwSection].Misc.VirtualSize + dwMemory) & ~dwMemory;
if (lpSection[dwSection].SizeOfRawData > dwRVA)
PrintConsole(hConsole,
L"Data of \'%.8hs\' section exceeds its size!\n",
lpSection[dwSection].Name);
dwRVA += lpSection[dwSection].VirtualAddress;
if (lpSection[dwSection].Name[0] != '.')
continue;
#if 0
if (strcmp(lpSection[dwSection].Name, ".arch") == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_ARCHITECTURE;
else if (strcmp(lpSection[dwSection].Name, ".debug") == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_DEBUG;
else if ((strcmp(lpSection[dwSection].Name, ".didat") == 0)
|| (strcmp(lpSection[dwSection].Name, ".didata") == 0))
dwDirectory = IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT;
else if (strcmp(lpSection[dwSection].Name, ".edata") == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_EXPORT;
else if (strcmp(lpSection[dwSection].Name, ".idata") == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_IMPORT;
else if (strcmp(lpSection[dwSection].Name, ".pdata") == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_EXCEPTION;
else if (strcmp(lpSection[dwSection].Name, ".reloc") == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_BASERELOC;
else if (strcmp(lpSection[dwSection].Name, ".rsrc") == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_RESOURCE;
else if (strcmp(lpSection[dwSection].Name, ".tls") == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_TLS;
else
continue;
#else
if (memcmp(lpSection[dwSection].Name, ".arch", sizeof(".arch")) == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_ARCHITECTURE;
else if (memcmp(lpSection[dwSection].Name, ".debug", sizeof(".debug")) == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_DEBUG;
else if ((memcmp(lpSection[dwSection].Name, ".didat", sizeof(".didat")) == 0)
|| (memcmp(lpSection[dwSection].Name, ".didata", sizeof(".didata")) == 0))
dwDirectory = IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT;
else if (memcmp(lpSection[dwSection].Name, ".edata", sizeof(".edata")) == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_EXPORT;
else if (memcmp(lpSection[dwSection].Name, ".idata", sizeof(".idata")) == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_IMPORT;
else if (memcmp(lpSection[dwSection].Name, ".pdata", sizeof(".pdata")) == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_EXCEPTION;
else if (memcmp(lpSection[dwSection].Name, ".reloc", sizeof(".reloc")) == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_BASERELOC;
else if (memcmp(lpSection[dwSection].Name, ".rsrc", sizeof(".rsrc")) == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_RESOURCE;
else if (memcmp(lpSection[dwSection].Name, ".tls", sizeof(".tls")) == 0)
dwDirectory = IMAGE_DIRECTORY_ENTRY_TLS;
else
continue;
#endif
if (dwArray & (1 << dwDirectory))
PrintConsole(hConsole,
L"Multiple \'%.8hs\' sections!\n",
lpSection[dwSection].Name);
else
{
dwArray |= 1 << dwDirectory;
if ((lpDirectory[dwDirectory].VirtualAddress == 0)
&& (lpDirectory[dwDirectory].Size == 0))
PrintConsole(hConsole,
L"No IMAGE_DATA_DIRECTORY[%lu] for \'%.8hs\' section!\n",
dwDirectory, lpSection[dwSection].Name);
else if (dwDirectory == IMAGE_DIRECTORY_ENTRY_TLS)
lpTLS = lpSection + dwSection;
else if ((lpDirectory[dwDirectory].VirtualAddress != lpSection[dwSection].VirtualAddress)
|| (lpDirectory[dwDirectory].Size != lpSection[dwSection].Misc.VirtualSize))
PrintConsole(hConsole,
L"Address/size in IMAGE_DATA_DIRECTORY[%lu] differ from address/size of \'%.8hs\' section!\n",
dwDirectory, lpSection[dwSection].Name);
}
}
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
if (dwCode != 0)
PrintConsole(hConsole,
L"Size of %ls differs from sum of \'*%ls\' section sizes!\n",
L"code", L"text");
if (dwData != 0)
PrintConsole(hConsole,
L"Size of %ls differs from sum of \'*%ls\' section sizes!\n",
L"initialised data", L"data");
if (dwNone != 0)
PrintConsole(hConsole,
L"Size of %ls differs from sum of \'*%ls\' section sizes!\n",
L"uninitialised data", L"bss");
if (((dwLast + dwMemory) & ~dwMemory) != dwSize)
PrintConsole(hConsole,
L"Last COFF section not at end of image!\n");
if (lpPE->FileHeader.PointerToSymbolTable > dwImage)
PrintConsole(hConsole,
L"Pointer to COFF symbol table past file size 0x%08lX!\n",
dwImage);
else if (lpPE->FileHeader.PointerToSymbolTable != 0)
{
bOutput = PrintString(hOutput,
L"\r\n"
L"COFF String Table:\r\n");
lpCOFF = (COFFStringTable *) (lpImage + lpPE->FileHeader.PointerToSymbolTable
+ lpPE->FileHeader.NumberOfSymbols * sizeof(IMAGE_SYMBOL));
for (lpString = lpCOFF->Strings;
lpString < (CHAR *) lpCOFF + lpCOFF->Size;
lpString += strlen(lpString) + 1)
bOutput &= PrintFormat(hOutput,
L"\t/%lu = %hs\r\n",
lpString - (CHAR *) lpCOFF, lpString);
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
}
if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
{
bOutput = PrintFormat(hOutput,
L"\r\n"
L"Optional Header:\r\n"
L"\tMagic = 0x%04hX (32-bit)\r\n"
L"\tSize of Code = 0x%08lX\r\n"
L"\tSize of Initialized Data = 0x%08lX\r\n"
L"\tSize of Uninitialized Data = 0x%08lX\r\n"
L"\tEntry Point = 0x%08lX\r\n"
L"\tBase of Code = 0x%08lX\r\n"
L"\tBase of Data = 0x%08lX\r\n"
L"\tImage Base = 0x%08lX\r\n"
L"\tSection Alignment = 0x%08lX\r\n"
L"\tFile Alignment = 0x%08lX\r\n"
L"\tSize of Image = 0x%08lX\r\n"
L"\tSize of Headers = 0x%08lX\r\n"
L"\tChecksum = 0x%08lX\r\n"
L"\tDLL Characteristics = 0x%04hX\r\n",
lpPE32->OptionalHeader.Magic,
lpPE32->OptionalHeader.SizeOfCode,
lpPE32->OptionalHeader.SizeOfInitializedData,
lpPE32->OptionalHeader.SizeOfUninitializedData,
lpPE32->OptionalHeader.AddressOfEntryPoint,
lpPE32->OptionalHeader.BaseOfCode,
lpPE32->OptionalHeader.BaseOfData,
lpPE32->OptionalHeader.ImageBase,
lpPE32->OptionalHeader.SectionAlignment,
lpPE32->OptionalHeader.FileAlignment,
lpPE32->OptionalHeader.SizeOfImage,
lpPE32->OptionalHeader.SizeOfHeaders,
lpPE32->OptionalHeader.CheckSum,
lpPE32->OptionalHeader.DllCharacteristics);
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_RESERVED) != 0)
bOutput &= PrintString(hOutput, L"\t\tReserved\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA) == IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA)
bOutput &= PrintString(hOutput, L"\t\tHigh entropy ASLR\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) == IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)
bOutput &= PrintString(hOutput, L"\t\tDynamic base\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY) == IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY)
bOutput &= PrintString(hOutput, L"\t\tCode integrity checks enforced\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT) == IMAGE_DLLCHARACTERISTICS_NX_COMPAT)
bOutput &= PrintString(hOutput, L"\t\tNX compatible\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NO_ISOLATION) == IMAGE_DLLCHARACTERISTICS_NO_ISOLATION)
bOutput &= PrintString(hOutput, L"\t\tIsolation aware, but don't isolate\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NO_SEH) == IMAGE_DLLCHARACTERISTICS_NO_SEH)
bOutput &= PrintString(hOutput, L"\t\tNo structured exception handler\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NO_BIND) == IMAGE_DLLCHARACTERISTICS_NO_BIND)
bOutput &= PrintString(hOutput, L"\t\tDon\'t bind\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_APPCONTAINER) == IMAGE_DLLCHARACTERISTICS_APPCONTAINER)
bOutput &= PrintString(hOutput, L"\t\tApp container\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_WDM_DRIVER) == IMAGE_DLLCHARACTERISTICS_WDM_DRIVER)
bOutput &= PrintString(hOutput, L"\t\tWDM driver\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_GUARD_CF) == IMAGE_DLLCHARACTERISTICS_GUARD_CF)
bOutput &= PrintString(hOutput, L"\t\tControl flow guard\r\n");
if ((lpPE32->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE) == IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE)
bOutput &= PrintString(hOutput, L"\t\tTerminal server aware\r\n");
bOutput &= PrintFormat(hOutput,
L"\tLoader Flags = 0x%08lX\r\n",
lpPE32->OptionalHeader.LoaderFlags);
if ((lpPE32->OptionalHeader.LoaderFlags & IMAGE_LOADER_FLAGS_COMPLUS) == IMAGE_LOADER_FLAGS_COMPLUS)
bOutput &= PrintString(hOutput, L"\t\tCOM+ image\r\n");
if ((lpPE32->OptionalHeader.LoaderFlags & IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL) == IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL)
bOutput &= PrintString(hOutput, L"\t\tGlobal subsections apply across TS sessions\r\n");
bOutput &= PrintFormat(hOutput,
L"\tSize of Stack Reserve = 0x%08lX\r\n"
L"\tSize of Stack Commit = 0x%08lX\r\n"
L"\tSize of Heap Reserve = 0x%08lX\r\n"
L"\tSize of Heap Commit = 0x%08lX\r\n"
L"\tNumber of Data Directories = %lu\r\n",
lpPE32->OptionalHeader.SizeOfStackReserve,
lpPE32->OptionalHeader.SizeOfStackCommit,
lpPE32->OptionalHeader.SizeOfHeapReserve,
lpPE32->OptionalHeader.SizeOfHeapCommit,
lpPE32->OptionalHeader.NumberOfRvaAndSizes);
if (lpPE32->OptionalHeader.NumberOfRvaAndSizes > 0)
bOutput &= PrintString(hOutput, L"\tData Directories:\r\n");
for (dwDirectory = 0; dwDirectory < lpPE32->OptionalHeader.NumberOfRvaAndSizes; dwDirectory++)
bOutput &= PrintFormat(hOutput,
L"\t\t%-20ls = 0x%08lX, 0x%08lX\r\n",
szDirectory[dwDirectory],
lpPE32->OptionalHeader.DataDirectory[dwDirectory].VirtualAddress,
lpPE32->OptionalHeader.DataDirectory[dwDirectory].Size);
bOutput &= PrintFormat(hOutput,
L"\tLinker Version = %u.%u\r\n"
L"\tOperating System Version = %hu.%hu\r\n"
L"\tImage Version = %hu.%hu\r\n"
L"\tSubsystem version = %hu.%hu\r\n"
L"\tWin32 Version = %lu (expected: 0)\r\n"
L"\tSubsystem = %hu (%ls)\r\n",
lpPE32->OptionalHeader.MajorLinkerVersion,
lpPE32->OptionalHeader.MinorLinkerVersion,
lpPE32->OptionalHeader.MajorOperatingSystemVersion,
lpPE32->OptionalHeader.MinorOperatingSystemVersion,
lpPE32->OptionalHeader.MajorImageVersion,
lpPE32->OptionalHeader.MinorImageVersion,
lpPE32->OptionalHeader.MajorSubsystemVersion,
lpPE32->OptionalHeader.MinorSubsystemVersion,
lpPE32->OptionalHeader.Win32VersionValue,
lpPE32->OptionalHeader.Subsystem, SubsystemName(lpPE32->OptionalHeader.Subsystem));
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
dwCheckSum = lpPE32->OptionalHeader.CheckSum;
lpPE32->OptionalHeader.CheckSum = 0;
for (lpWord = (WORD *) (lpImage + dwImage + (dwImage & 1)), dwAccumulator = 0;
lpWord > (WORD *) lpImage;
dwAccumulator += *--lpWord, dwAccumulator = HIWORD(dwAccumulator) + LOWORD(dwAccumulator))
continue;
if (dwAccumulator + dwImage != dwCheckSum)
PrintConsole(hConsole,
L"Computed checksum 0x%08lX differs from image checksum 0x%08lX!\n",
dwAccumulator + dwImage, dwCheckSum);
}
else if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
{
bOutput = PrintFormat(hOutput,
L"\r\n"
L"Optional Header:\r\n"
L"\tMagic = 0x%04hX (64-bit)\r\n"
L"\tSize of Code = 0x%08lX\r\n"
L"\tSize of Initialized Data = 0x%08lX\r\n"
L"\tSize of Uninitialized Data = 0x%08lX\r\n"
L"\tEntry Point = 0x%08lX\r\n"
L"\tBase of Code = 0x%08lX\r\n"
L"\tImage Base = 0x%016I64X\r\n"
L"\tSection Alignment = 0x%08lX\r\n"
L"\tFile Alignment = 0x%08lX\r\n"
L"\tSize of Image = 0x%08lX\r\n"
L"\tSize of Headers = 0x%08lX\r\n"
L"\tChecksum = 0x%08lX\r\n"
L"\tDLL Characteristics = 0x%04hX\r\n",
lpPE64->OptionalHeader.Magic,
lpPE64->OptionalHeader.SizeOfCode,
lpPE64->OptionalHeader.SizeOfInitializedData,
lpPE64->OptionalHeader.SizeOfUninitializedData,
lpPE64->OptionalHeader.AddressOfEntryPoint,
lpPE64->OptionalHeader.BaseOfCode,
lpPE64->OptionalHeader.ImageBase,
lpPE64->OptionalHeader.SectionAlignment,
lpPE64->OptionalHeader.FileAlignment,
lpPE64->OptionalHeader.SizeOfImage,
lpPE64->OptionalHeader.SizeOfHeaders,
lpPE64->OptionalHeader.CheckSum,
lpPE64->OptionalHeader.DllCharacteristics);
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_RESERVED) != 0)
bOutput &= PrintString(hOutput, L"\t\tReserved\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA) == IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA)
bOutput &= PrintString(hOutput, L"\t\tHigh entropy ASLR\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE) == IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE)
bOutput &= PrintString(hOutput, L"\t\tDynamic base\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY) == IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY)
bOutput &= PrintString(hOutput, L"\t\tCode integrity checks enforced\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NX_COMPAT) == IMAGE_DLLCHARACTERISTICS_NX_COMPAT)
bOutput &= PrintString(hOutput, L"\t\tNX compatible\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NO_ISOLATION) == IMAGE_DLLCHARACTERISTICS_NO_ISOLATION)
bOutput &= PrintString(hOutput, L"\t\tIsolation aware, but don't isolate\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NO_SEH) == IMAGE_DLLCHARACTERISTICS_NO_SEH)
bOutput &= PrintString(hOutput, L"\t\tNo structured exception handler\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_NO_BIND) == IMAGE_DLLCHARACTERISTICS_NO_BIND)
bOutput &= PrintString(hOutput, L"\t\tDon\'t bind\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_APPCONTAINER) == IMAGE_DLLCHARACTERISTICS_APPCONTAINER)
bOutput &= PrintString(hOutput, L"\t\tApp container\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_WDM_DRIVER) == IMAGE_DLLCHARACTERISTICS_WDM_DRIVER)
bOutput &= PrintString(hOutput, L"\t\tWDM driver\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_GUARD_CF) == IMAGE_DLLCHARACTERISTICS_GUARD_CF)
bOutput &= PrintString(hOutput, L"\t\tControl flow guard\r\n");
if ((lpPE64->OptionalHeader.DllCharacteristics & IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE) == IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE)
bOutput &= PrintString(hOutput, L"\t\tTerminal server aware\r\n");
bOutput &= PrintFormat(hOutput,
L"\tLoader Flags = 0x%08lX\r\n",
lpPE64->OptionalHeader.LoaderFlags);
if ((lpPE64->OptionalHeader.LoaderFlags & IMAGE_LOADER_FLAGS_COMPLUS) == IMAGE_LOADER_FLAGS_COMPLUS)
bOutput &= PrintString(hOutput, L"\t\tCOM+ image\r\n");
if ((lpPE64->OptionalHeader.LoaderFlags & IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL) == IMAGE_LOADER_FLAGS_SYSTEM_GLOBAL)
bOutput &= PrintString(hOutput, L"\t\tGlobal subsections apply across TS sessions\r\n");
bOutput &= PrintFormat(hOutput,
L"\tSize of Stack Reserve = 0x%016I64X\r\n"
L"\tSize of Stack Commit = 0x%016I64X\r\n"
L"\tSize of Heap Reserve = 0x%016I64X\r\n"
L"\tSize of Heap Commit = 0x%016I64X\r\n"
L"\tNumber of Data Directories = %lu\r\n",
lpPE64->OptionalHeader.SizeOfStackReserve,
lpPE64->OptionalHeader.SizeOfStackCommit,
lpPE64->OptionalHeader.SizeOfHeapReserve,
lpPE64->OptionalHeader.SizeOfHeapCommit,
lpPE64->OptionalHeader.NumberOfRvaAndSizes);
if (lpPE64->OptionalHeader.NumberOfRvaAndSizes > 0)
bOutput &= PrintString(hOutput, L"\tData Directories:\r\n");
for (dwDirectory = 0; dwDirectory < lpPE64->OptionalHeader.NumberOfRvaAndSizes; dwDirectory++)
bOutput &= PrintFormat(hOutput,
L"\t\t%-20ls = 0x%08lX, 0x%08lX\r\n",
szDirectory[dwDirectory],
lpPE64->OptionalHeader.DataDirectory[dwDirectory].VirtualAddress,
lpPE64->OptionalHeader.DataDirectory[dwDirectory].Size);
bOutput &= PrintFormat(hOutput,
L"\tLinker Version = %u.%u\r\n"
L"\tOperating System Version = %hu.%hu\r\n"
L"\tImage Version = %hu.%hu\r\n"
L"\tSubsystem Version = %hu.%hu\r\n"
L"\tWin32 Version = %lu (expected: 0)\r\n"
L"\tSubsystem = %hu (%ls)\r\n",
lpPE64->OptionalHeader.MajorLinkerVersion,
lpPE64->OptionalHeader.MinorLinkerVersion,
lpPE64->OptionalHeader.MajorOperatingSystemVersion,
lpPE64->OptionalHeader.MinorOperatingSystemVersion,
lpPE64->OptionalHeader.MajorImageVersion,
lpPE64->OptionalHeader.MinorImageVersion,
lpPE64->OptionalHeader.MajorSubsystemVersion,
lpPE64->OptionalHeader.MinorSubsystemVersion,
lpPE64->OptionalHeader.Win32VersionValue,
lpPE64->OptionalHeader.Subsystem, SubsystemName(lpPE64->OptionalHeader.Subsystem));
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
dwCheckSum = lpPE64->OptionalHeader.CheckSum;
lpPE64->OptionalHeader.CheckSum = 0;
for (lpWord = (WORD *) (lpImage + dwImage + (dwImage & 1)), dwAccumulator = 0;
lpWord > (WORD *) lpImage;
dwAccumulator += *--lpWord, dwAccumulator = HIWORD(dwAccumulator) + LOWORD(dwAccumulator))
continue;
if (dwAccumulator + dwImage != dwCheckSum)
PrintConsole(hConsole,
L"Computed checksum 0x%08lX differs from image checksum 0x%08lX!\n",
dwAccumulator + dwImage, dwCheckSum);
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_EXPORT)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size != 0))
{
if ((dwArray & (1 << IMAGE_DIRECTORY_ENTRY_EXPORT)) == 0)
PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".edata", IMAGE_DIRECTORY_ENTRY_EXPORT);
lpExport = (IMAGE_EXPORT_DIRECTORY *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole);
if (lpExport != NULL)
{
lpModule = (CHAR *) RVA2Image(lpImage, lpSection, dwSection,
lpExport->Name,
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole);
qw = __emulu(lpExport->TimeDateStamp, 10000000) // seconds since 1970-01-01 to
+ 116444736000000000; // 100 nano-seconds since 1601-01-01
if (!FileTimeToSystemTime((FILETIME *) &qw, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu for module \'%hs\'\n",
dwError = GetLastError(), lpModule);
bOutput = PrintFormat(hOutput,
L"\r\n"
L"Export Directory:\r\n"
L"\tCharacteristics = 0x%08lX\r\n"
L"\tTime/Date Stamp = 0x%08lX (%ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu UTC)\r\n"
L"\tVersion = %hu.%hu\r\n"
L"\tModule Name = %hs\r\n"
L"\tBase of Ordinals = %lu\r\n"
L"\tNumber of Functions = %lu\r\n"
L"\tNumber of Names = %lu\r\n"
L"\tArray of Functions = 0x%08lX\r\n"
L"\tArray of Names = 0x%08lX\r\n"
L"\tArray of Name Ordinals = 0x%08lX\r\n",
lpExport->Characteristics,
lpExport->TimeDateStamp,
szDayOfWeek[st.wDayOfWeek], st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond,
lpExport->MajorVersion,
lpExport->MinorVersion,
lpModule,
lpExport->Base,
lpExport->NumberOfFunctions,
lpExport->NumberOfNames,
lpExport->AddressOfFunctions,
lpExport->AddressOfNames,
lpExport->AddressOfNameOrdinals);
lpFunctions = (DWORD *) RVA2Image(lpImage, lpSection, dwSection,
lpExport->AddressOfFunctions,
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole);
if (lpFunctions != NULL)
{
if (lpExport->NumberOfNames != 0)
{
bOutput &= PrintString(hOutput, L"\tNamed Exports:\r\n");
lpOrdinals = (WORD *) RVA2Image(lpImage, lpSection, dwSection,
lpExport->AddressOfNameOrdinals,
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole);
lpNames = (DWORD *) RVA2Image(lpImage, lpSection, dwSection,
lpExport->AddressOfNames,
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole);
dwNames = lpExport->NumberOfNames;
do
{
if (*lpOrdinals < lpExport->NumberOfFunctions)
{
if ((lpFunctions[*lpOrdinals] < lpDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress)
|| (lpFunctions[*lpOrdinals] >= lpDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress
+ lpDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size))
bOutput &= PrintFormat(hOutput,
L"\t\t%lu\t%lu\t0x%08lX\t%hs\r\n",
lpExport->Base + *lpOrdinals,
*lpOrdinals,
lpFunctions[*lpOrdinals],
RVA2Image(lpImage, lpSection, dwSection,
*lpNames,
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole));
else // forwarded export
bOutput &= PrintFormat(hOutput,
L"\t\t%lu\t%lu\t-\t\t%hs -> %hs\r\n",
lpExport->Base + *lpOrdinals,
*lpOrdinals,
RVA2Image(lpImage, lpSection, dwSection,
*lpNames,
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole),
RVA2Image(lpImage, lpSection, dwSection,
lpFunctions[*lpOrdinals],
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole));
lpFunctions[*lpOrdinals] = 0;
}
else
PrintConsole(hConsole,
L"Ordinal %hu of export \'%hs\' out of bounds!\n",
lpExport->Base + *lpOrdinals,
RVA2Image(lpImage, lpSection, dwSection,
*lpNames,
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole));
lpOrdinals++;
lpNames++;
dwNames--;
} while (dwNames != 0);
}
if (lpExport->NumberOfFunctions > lpExport->NumberOfNames)
{
bOutput &= PrintString(hOutput, L"\tUnnamed Exports:\r\n");
for (dwIndex = 0; dwIndex < lpExport->NumberOfFunctions; dwIndex++)
if (lpFunctions[dwIndex] != 0)
if ((lpFunctions[dwIndex] < lpDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress)
|| (lpFunctions[dwIndex] >= lpDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress
+ lpDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size))
bOutput &= PrintFormat(hOutput,
L"\t\t%lu\t%lu\t0x%08lX\r\n",
lpExport->Base + dwIndex,
dwIndex,
lpFunctions[dwIndex]);
else // forwarded export
bOutput &= PrintFormat(hOutput,
L"\t\t%lu\t%lu\t-\t\t-> %hs\r\n",
lpExport->Base + dwIndex,
dwIndex,
RVA2Image(lpImage, lpSection, dwSection,
lpFunctions[dwIndex],
IMAGE_DIRECTORY_ENTRY_EXPORT,
hConsole));
}
}
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_IMPORT)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].Size != 0))
{
if ((dwArray & (1 << IMAGE_DIRECTORY_ENTRY_IMPORT)) == 0)
PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".idata", IMAGE_DIRECTORY_ENTRY_IMPORT);
lpImport = (IMAGE_IMPORT_DESCRIPTOR *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_IMPORT,
hConsole);
if (lpImport != NULL)
{
bOutput &= PrintString(hOutput,
L"\r\n"
L"Import Directory:\r\n");
while ((lpImport->OriginalFirstThunk != 0)
|| (lpImport->TimeDateStamp != 0)
|| (lpImport->ForwarderChain != 0)
|| (lpImport->Name != 0)
|| (lpImport->FirstThunk != 0))
{
lpModule = (CHAR *) RVA2Image(lpImage, lpSection, dwSection,
lpImport->Name,
IMAGE_DIRECTORY_ENTRY_IMPORT,
hConsole);
bOutput &= PrintFormat(hOutput,
L"\tImport Descriptor:\r\n"
L"\t\tModule Name = %hs\r\n"
L"\t\tTime/Date Stamp = 0x%08lX\r\n"
L"\t\tForwarder Chain = 0x%08lX\r\n"
L"\t\tAddress Table = 0x%08lX\r\n"
L"\t\tLookup Table = 0x%08lX\r\n"
L"\t\tImports:\r\n",
lpModule,
lpImport->TimeDateStamp,
lpImport->ForwarderChain,
lpImport->FirstThunk,
lpImport->OriginalFirstThunk);
if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
{
lpThunk32 = (IMAGE_THUNK_DATA32 *) RVA2Image(lpImage, lpSection, dwSection,
lpImport->OriginalFirstThunk != 0 ? lpImport->OriginalFirstThunk : lpImport->FirstThunk,
IMAGE_DIRECTORY_ENTRY_IMPORT,
hConsole);
if (lpThunk32 != NULL)
while (lpThunk32->u1.AddressOfData != 0)
{
if ((lpThunk32->u1.Ordinal & IMAGE_ORDINAL_FLAG32) == IMAGE_ORDINAL_FLAG32)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%hu\r\n",
LOWORD(lpThunk32->u1.Ordinal));
else
{
lpAddress = (IMAGE_IMPORT_BY_NAME *) RVA2Image(lpImage, lpSection, dwSection,
lpThunk32->u1.AddressOfData,
IMAGE_DIRECTORY_ENTRY_IMPORT,
hConsole);
if (lpAddress != NULL)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%hu\t%hs\r\n",
lpAddress->Hint,
lpAddress->Name);
}
lpThunk32++;
}
}
else if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
{
lpThunk64 = (IMAGE_THUNK_DATA64 *) RVA2Image(lpImage, lpSection, dwSection,
lpImport->OriginalFirstThunk != 0 ? lpImport->OriginalFirstThunk : lpImport->FirstThunk,
IMAGE_DIRECTORY_ENTRY_IMPORT,
hConsole);
if (lpThunk64 != NULL)
while (lpThunk64->u1.AddressOfData != 0)
{
if ((lpThunk64->u1.Ordinal & IMAGE_ORDINAL_FLAG64) == IMAGE_ORDINAL_FLAG64)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%hu\r\n",
LOWORD(lpThunk64->u1.Ordinal));
else
{
lpAddress = (IMAGE_IMPORT_BY_NAME *) RVA2Image(lpImage, lpSection, dwSection,
(DWORD) lpThunk64->u1.AddressOfData,
IMAGE_DIRECTORY_ENTRY_IMPORT,
hConsole);
if (lpAddress != NULL)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%hu\t%hs\r\n",
lpAddress->Hint,
lpAddress->Name);
}
lpThunk64++;
}
}
lpImport++;
}
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_RESOURCE)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size != 0))
{
if ((dwArray & (1 << IMAGE_DIRECTORY_ENTRY_RESOURCE)) == 0)
PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".rsrc", IMAGE_DIRECTORY_ENTRY_RESOURCE);
lpResource = (IMAGE_RESOURCE_DIRECTORY *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_RESOURCE,
hConsole);
if (lpResource != NULL)
{
bOutput &= PrintFormat(hOutput,
L"\r\n"
L"Resource Directory:\r\n"
L"\tCharacteristics = 0x%08lX\r\n"
L"\tTime/Date Stamp = 0x%08lX\r\n"
L"\tVersion = %hu.%hu\r\n"
L"\tNamed Entries = %hu\r\n"
L"\tUnnamed Entries = %hu\r\n"
L"\tEntries:\r\n",
lpResource->Characteristics,
lpResource->TimeDateStamp,
lpResource->MajorVersion,
lpResource->MinorVersion,
lpResource->NumberOfNamedEntries,
lpResource->NumberOfIdEntries);
bOutput &= Resource(hOutput, lpResource, lpResource, 0);
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_EXCEPTION)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size != 0))
{
if ((dwArray & (1 << IMAGE_DIRECTORY_ENTRY_EXCEPTION)) == 0)
PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".pdata", IMAGE_DIRECTORY_ENTRY_EXCEPTION);
dwException = lpDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].Size;
lpException = (BYTE *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_EXCEPTION,
hConsole);
if (lpException != NULL)
{
bOutput &= PrintString(hOutput,
L"\r\n"
L"Exception Handler Directory:\r\n");
if ((lpPE->FileHeader.Machine == IMAGE_FILE_MACHINE_ARMNT)
|| (lpPE->FileHeader.Machine == IMAGE_FILE_MACHINE_ARM64))
{
lpARM = (IMAGE_ARMNT_RUNTIME_FUNCTION_ENTRY *) lpException;
lpException += dwException;
do
bOutput &= PrintFormat(hOutput,
L"\tException Handler:\r\n"
L"\t\tBegin Address = 0x%08lX\r\n"
L"\t\tUnwind Data = 0x%08lX\r\n",
lpARM->BeginAddress,
lpARM->UnwindData);
while (++lpARM < (IMAGE_ARMNT_RUNTIME_FUNCTION_ENTRY *) lpException);
}
else if (lpPE->FileHeader.Machine == IMAGE_FILE_MACHINE_ALPHA)
{
lpAlpha = (IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY *) lpException;
lpException += dwException;
do
bOutput &= PrintFormat(hOutput,
L"\tException Handler:\r\n"
L"\t\tBegin Address = 0x%08lX\r\n"
L"\t\tEnd Address = 0x%08lX\r\n"
L"\t\tException Handler = 0x%08lX\r\n"
L"\t\tHandler Data = 0x%08lX\r\n"
L"\t\tProlog End Address = 0x%08lX\r\n",
lpAlpha->BeginAddress,
lpAlpha->EndAddress,
lpAlpha->ExceptionHandler,
lpAlpha->HandlerData,
lpAlpha->PrologEndAddress);
while (++lpAlpha < (IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY *) lpException);
}
else if (lpPE->FileHeader.Machine == IMAGE_FILE_MACHINE_ALPHA64)
{
lpAlpha64 = (IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY *) lpException;
lpException += dwException;
do
bOutput &= PrintFormat(hOutput,
L"\tException Handler:\r\n"
L"\t\tBegin Address = 0x%016I64X\r\n"
L"\t\tEnd Address = 0x%016I64X\r\n"
L"\t\tException Handler = 0x%016I64X\r\n"
L"\t\tHandler Data = 0x%016I64X\r\n"
L"\t\tProlog End Address = 0x%016I64X\r\n",
lpAlpha64->BeginAddress,
lpAlpha64->EndAddress,
lpAlpha64->ExceptionHandler,
lpAlpha64->HandlerData,
lpAlpha64->PrologEndAddress);
while (++lpAlpha64 < (IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY *) lpException);
}
else
{
lpRuntime = (IMAGE_RUNTIME_FUNCTION_ENTRY *) lpException;
lpException += dwException;
do
bOutput &= PrintFormat(hOutput,
L"\tException Handler:\r\n"
L"\t\tStart & End Address = 0x%08lX, 0x%08lX\r\n"
L"\t\tUnwind Info Address = 0x%08lX\r\n",
lpRuntime->BeginAddress,
lpRuntime->EndAddress,
lpRuntime->UnwindInfoAddress);
while (++lpRuntime < (IMAGE_RUNTIME_FUNCTION_ENTRY *) lpException);
}
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_SECURITY)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size != 0))
{
if (dwOffset != lpDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress)
PrintConsole(hConsole,
L"Authenticode signature not adjacent to last COFF section!\n");
if (dwImage != lpDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress
+ lpDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size)
PrintConsole(hConsole,
L"Image file extends past authenticode signature!\n");
bOutput &= PrintString(hOutput,
L"\r\n"
L"Security Directory:\r\n");
lpCertificate = (WIN_CERTIFICATE *) (lpImage + lpDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].VirtualAddress);
dwCertificate = lpDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY].Size;
do
{
bOutput &= PrintFormat(hOutput,
L"\tCertificate Entry:\r\n"
L"\t\tRevision = %hu\r\n"
L"\t\tType = %hu (%ls)\r\n"
L"\t\tSize = %lu\r\n",
lpCertificate->wRevision,
lpCertificate->wCertificateType, CertificateTypeName(lpCertificate->wCertificateType),
lpCertificate->dwLength);
blob.cbData = lpCertificate->dwLength - (lpCertificate->bCertificate - (BYTE *) lpCertificate);
blob.pbData = lpCertificate->bCertificate;
if (!CryptQueryObject(CERT_QUERY_OBJECT_BLOB,
&blob,
CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED,
CERT_QUERY_FORMAT_FLAG_BINARY,
0,
(DWORD *) NULL,
(DWORD *) NULL,
(DWORD *) NULL,
&hStore,
&hMsg,
NULL))
PrintConsole(hConsole,
L"CryptQueryObject() returned error 0x%08lX\n",
dwError = GetLastError());
else
{
if (!CryptMsgGetAndVerifySigner(hMsg,
1,
&hStore,
CMSG_TRUSTED_SIGNER_FLAG,
&lpSigner,
(DWORD *) NULL))
PrintConsole(hConsole,
L"CryptMsgGetAndVerifySigner() returned error 0x%08lX\n",
dwError = GetLastError());
else
{
dwFlags = 0;
do
{
dwSigner = CertGetNameString(lpSigner,
#ifndef RDN
CERT_NAME_FRIENDLY_DISPLAY_TYPE,
dwFlags,
NULL,
#else
CERT_NAME_RDN_TYPE,
dwFlags,
&dwStrType,
#endif
(LPWSTR) NULL,
0);
if (dwSigner == 0)
PrintConsole(hConsole,
L"CertGetNameString() returned error 0x%08lX\n",
dwError = GetLastError());
else
{
szSigner = (LPWSTR) LocalAlloc(LPTR, dwSigner * sizeof(*szSigner));
if (szSigner == NULL)
PrintConsole(hConsole,
L"LocalAlloc() returned error %lu\n",
dwError = GetLastError());
else
{
dwSigner = CertGetNameString(lpSigner,
#ifndef RDN
CERT_NAME_FRIENDLY_DISPLAY_TYPE,
dwFlags,
NULL,
#else
CERT_NAME_RDN_TYPE,
dwFlags,
&dwStrType,
#endif
szSigner,
dwSigner);
if (dwSigner == 0)
PrintConsole(hConsole,
L"CertGetNameString() returned error 0x%08lX\n",
dwError = GetLastError());
else
bOutput &= PrintFormat(hOutput,
L"\t\t%ls = %ls\r\n",
dwFlags == 0 ? L"Subject" : L"Issuer ", szSigner);
if (LocalFree(szSigner) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
}
} while (dwFlags ^= CERT_NAME_ISSUER_FLAG);
if (!CertFreeCertificateContext(lpSigner))
PrintConsole(hConsole,
L"CertFreeCertificateContext() returned error 0x%08lX\n",
dwError = GetLastError());
}
if (!CryptMsgClose(hMsg))
PrintConsole(hConsole,
L"CryptMsgClose() returned error 0x%08lX\n",
dwError = GetLastError());
if (!CertCloseStore(hStore, CERT_CLOSE_STORE_CHECK_FLAG))
PrintConsole(hConsole,
L"CertCloseStore() returned error 0x%08lX\n",
dwError = GetLastError());
}
dwSize = (lpCertificate->dwLength + sizeof(DWORD64) - 1) & (0 - sizeof(DWORD64));
lpCertificate = (WIN_CERTIFICATE *) ((BYTE *) lpCertificate + dwSize);
dwCertificate -= dwSize;
} while (dwCertificate != 0);
}
else
if (dwOffset != dwImage)
PrintConsole(hConsole,
L"Image file extends past last COFF section!\n");
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_BASERELOC)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size != 0))
{
if ((dwArray & (1 << IMAGE_DIRECTORY_ENTRY_BASERELOC)) == 0)
PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".reloc", IMAGE_DIRECTORY_ENTRY_BASERELOC);
dwRelocation = lpDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;
lpRelocation = (IMAGE_BASE_RELOCATION *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_BASERELOC,
hConsole);
if (lpRelocation != NULL)
{
bOutput &= PrintString(hOutput,
L"\r\n"
L"Base Relocation Directory:\r\n");
while (dwRelocation > 0)
{
bOutput &= PrintFormat(hOutput,
L"\tRelocation Block:\r\n"
L"\t\tAddress of Data = 0x%08lX\r\n"
L"\t\tSize of Block = 0x%08lX\r\n",
lpRelocation->VirtualAddress,
lpRelocation->SizeOfBlock);
lpWord = (WORD *) (lpRelocation + 1);
dwRelocation -= lpRelocation->SizeOfBlock;
lpRelocation = (IMAGE_BASE_RELOCATION *) ((BYTE *) lpRelocation + lpRelocation->SizeOfBlock);
do
bOutput &= PrintFormat(hOutput,
L"\t\t\t0x%03hX\t%ls\r\n",
*lpWord & 0x0FFF,
szRelocation[*lpWord >> 12]);
while (++lpWord < (WORD *) lpRelocation);
}
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_DEBUG)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size != 0))
{
if ((dwArray & (1 << IMAGE_DIRECTORY_ENTRY_DEBUG)) == 0)
PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".debug", IMAGE_DIRECTORY_ENTRY_DEBUG);
dwDebug = lpDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size;
lpDebug = (IMAGE_DEBUG_DIRECTORY *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_DEBUG,
hConsole);
if (lpDebug != NULL)
{
bOutput &= PrintString(hOutput,
L"\r\n"
L"Debug Directory:\r\n");
do
{
qw = __emulu(lpDebug->TimeDateStamp, 10000000) // seconds since 1970-01-01 to
+ 116444736000000000; // 100 nano-seconds since 1601-01-01
if (!FileTimeToSystemTime((FILETIME *) &qw, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
dwError = GetLastError());
bOutput &= PrintFormat(hOutput,
L"\tDebug Directory Entry:\r\n"
L"\t\tCharacteristics = 0x%08lX\r\n"
L"\t\tTime/Date Stamp = 0x%08lX (%ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu UTC)\r\n"
L"\t\tVersion = %hu.%hu\r\n"
L"\t\tType = %lu (%ls)\r\n"
L"\t\tAddress of Data = 0x%08lX\r\n"
L"\t\tOffset of Data = 0x%08lX\r\n"
L"\t\tSize of Data = 0x%08lX\r\n",
lpDebug->Characteristics,
lpDebug->TimeDateStamp,
szDayOfWeek[st.wDayOfWeek], st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond,
lpDebug->MajorVersion,
lpDebug->MinorVersion,
lpDebug->Type, DebugTypeName(lpDebug->Type),
lpDebug->AddressOfRawData,
lpDebug->PointerToRawData,
lpDebug->SizeOfData);
if (lpDebug->Type == IMAGE_DEBUG_TYPE_CODEVIEW)
{
lpCodeView = (CV_INFO_PDB70 *) (lpImage + lpDebug->PointerToRawData);
if (lpCodeView->Magic == 'SDSR')
bOutput &= PrintFormat(hOutput,
L"\t\t\tFormat = RSDS\r\n"
L"\t\t\tSignature = {%08lX-%04lX-%04lX-%02X%02X-%02X%02X%02X%02X%02X%02X}\r\n"
L"\t\t\tAge = %lu\r\n"
L"\t\t\tFilename = %hs\r\n",
lpCodeView->Signature.Data1, lpCodeView->Signature.Data2, lpCodeView->Signature.Data3,
lpCodeView->Signature.Data4[0], lpCodeView->Signature.Data4[1],
lpCodeView->Signature.Data4[2], lpCodeView->Signature.Data4[3], lpCodeView->Signature.Data4[4],
lpCodeView->Signature.Data4[5], lpCodeView->Signature.Data4[6], lpCodeView->Signature.Data4[7],
lpCodeView->Age,
lpCodeView->PdbFileName);
else
bOutput &= PrintFormat(hOutput,
L"\t\t\tFormat = %.4hs\r\n",
&lpCodeView->Magic);
}
else if (lpDebug->Type == IMAGE_DEBUG_TYPE_MISC)
{
lpMisc = (IMAGE_DEBUG_MISC *) (lpImage + lpDebug->PointerToRawData);
if (lpMisc->DataType == IMAGE_DEBUG_MISC_EXENAME)
bOutput &= PrintFormat(hOutput,
lpMisc->Unicode ? L"\t\t\tFilename = %ls\r\n" : L"\t\t\tFilename = %hs\r\n",
lpMisc->Data);
}
else if (lpDebug->Type == IMAGE_DEBUG_TYPE_RESERVED10)
bOutput &= PrintFormat(hOutput,
L"\t\t\tData = 0x%08lX\r\n",
*(DWORD *) (lpImage + lpDebug->PointerToRawData));
else if (lpDebug->Type == IMAGE_DEBUG_TYPE_POGO)
{
dwPogo = lpDebug->SizeOfData - sizeof(DWORD);
lpPogo = (POGO *) (lpImage + lpDebug->PointerToRawData);
if (lpPogo->Magic == 'LTCG')
while (dwPogo > 0)
{
bOutput &= PrintFormat(hOutput,
L"\t\t%hs:\r\n"
L"\t\t\tVirtual Address & Size = 0x%08lX, 0x%08lX\r\n",
lpPogo->Entries[0].Section,
lpPogo->Entries[0].Address, lpPogo->Entries[0].Size);
dwSize = (sizeof(POGO) - sizeof(DWORD) + strlen(lpPogo->Entries[0].Section)) & (0 - sizeof(DWORD));
dwPogo -= dwSize;
lpPogo = (POGO *) ((BYTE *) lpPogo + dwSize);
}
}
lpDebug++;
dwDebug -= sizeof(IMAGE_DEBUG_DIRECTORY);
} while (dwDebug != 0);
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_ARCHITECTURE)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_ARCHITECTURE].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_ARCHITECTURE].Size != 0))
{
if ((dwArray & (1 << IMAGE_DIRECTORY_ENTRY_ARCHITECTURE)) == 0)
PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".arch", IMAGE_DIRECTORY_ENTRY_ARCHITECTURE);
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_TLS)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_TLS].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_TLS].Size != 0))
{
if ((dwArray & (1 << IMAGE_DIRECTORY_ENTRY_TLS)) == 0)
PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".tls", IMAGE_DIRECTORY_ENTRY_TLS);
if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
{
if (lpDirectory[IMAGE_DIRECTORY_ENTRY_TLS].Size != sizeof(IMAGE_TLS_DIRECTORY32))
PrintConsole(hConsole,
L"Size of \'%ls\' differs from size of %ls structure!\n",
L"_tls_used", L"IMAGE_TLS_DIRECTORY32");
lpTLS32 = (IMAGE_TLS_DIRECTORY32 *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_TLS].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_TLS,
hConsole);
if (lpTLS32 == NULL)
PrintConsole(hConsole,
L"No \'%ls\' alias %ls structure!\n",
L"_tls_used", L"IMAGE_TLS_DIRECTORY32");
else
{
if (lpTLS32->StartAddressOfRawData != lpTLS32->EndAddressOfRawData)
if (lpTLS == NULL)
/* PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".tls", IMAGE_DIRECTORY_ENTRY_TLS) */;
else if ((lpTLS32->StartAddressOfRawData - dwBase != lpTLS->VirtualAddress)
|| (lpTLS32->EndAddressOfRawData - lpTLS32->StartAddressOfRawData != lpTLS->Misc.VirtualSize))
PrintConsole(hConsole,
L"Address/size in %ls differ from address/size of \'.tls\' section!\n",
L"IMAGE_TLS_DIRECTORY32");
bOutput &= PrintFormat(hOutput,
L"\r\n"
L"Thread Local Storage Directory:\r\n"
L"\tStart Address of Data = 0x%08lX\r\n"
L"\tEnd Address of Data = 0x%08lX\r\n"
L"\tAddress of Index = 0x%08lX\r\n"
L"\tAddress of Callbacks = 0x%08lX\r\n"
L"\tSize of Zero Fill = 0x%08lX\r\n"
L"\tCharacteristics = 0x%08lX\r\n",
lpTLS32->StartAddressOfRawData,
lpTLS32->EndAddressOfRawData,
lpTLS32->AddressOfIndex,
lpTLS32->AddressOfCallBacks,
lpTLS32->SizeOfZeroFill,
lpTLS32->Characteristics);
if (lpTLS32->AddressOfCallBacks != 0)
{
bOutput &= PrintString(hOutput,
L"\tCallback Functions:\r\n");
lpCookie32 = (DWORD *) RVA2Image(lpImage, lpSection, dwSection,
lpTLS32->AddressOfCallBacks - dwBase,
IMAGE_DIRECTORY_ENTRY_TLS,
hConsole);
if (lpCookie32 != NULL)
while (*lpCookie32 != 0)
bOutput &= PrintFormat(hOutput,
L"\t\t0x%08lX\r\n",
*lpCookie32++);
}
}
}
else if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
{
if (lpDirectory[IMAGE_DIRECTORY_ENTRY_TLS].Size != sizeof(IMAGE_TLS_DIRECTORY64))
PrintConsole(hConsole,
L"Size of \'%ls\' differs from size of %ls structure!\n",
L"_tls_used", L"IMAGE_TLS_DIRECTORY64");
lpTLS64 = (IMAGE_TLS_DIRECTORY64 *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_TLS].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_TLS,
hConsole);
if (lpTLS64 == NULL)
PrintConsole(hConsole,
L"No \'%ls\' alias %ls structure!\n",
L"_tls_used", L"IMAGE_TLS_DIRECTORY64");
else
{
if (lpTLS64->StartAddressOfRawData != lpTLS64->EndAddressOfRawData)
if (lpTLS == NULL)
/* PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".tls", IMAGE_DIRECTORY_ENTRY_TLS) */;
else if ((lpTLS64->StartAddressOfRawData - qwBase != lpTLS->VirtualAddress)
|| (lpTLS64->EndAddressOfRawData - lpTLS64->StartAddressOfRawData != lpTLS->Misc.VirtualSize))
PrintConsole(hConsole,
L"Address/size in %ls differ from address/size of \'.tls\' section!\n",
L"IMAGE_TLS_DIRECTORY64");
bOutput &= PrintFormat(hOutput,
L"\r\n"
L"Thread Local Storage Directory:\r\n"
L"\tStart Address of Data = 0x%016I64X\r\n"
L"\tEnd Address of Data = 0x%016I64X\r\n"
L"\tAddress of Index = 0x%016I64X\r\n"
L"\tAddress of Callbacks = 0x%016I64X\r\n"
L"\tSize of Zero Fill = 0x%08lX\r\n"
L"\tCharacteristics = 0x%08lX\r\n",
lpTLS64->StartAddressOfRawData,
lpTLS64->EndAddressOfRawData,
lpTLS64->AddressOfIndex,
lpTLS64->AddressOfCallBacks,
lpTLS64->SizeOfZeroFill,
lpTLS64->Characteristics);
if (lpTLS64->AddressOfCallBacks != 0)
{
bOutput &= PrintString(hOutput,
L"\tCallback Functions:\r\n");
lpCookie64 = (DWORD64 *) RVA2Image(lpImage, lpSection, dwSection,
(DWORD) (lpTLS64->AddressOfCallBacks - qwBase),
IMAGE_DIRECTORY_ENTRY_TLS,
hConsole);
if (lpCookie64 != NULL)
while (*lpCookie64 != 0)
bOutput &= PrintFormat(hOutput,
L"\t\t0x%016I64X\r\n",
*lpCookie64++);
}
}
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].Size != 0))
{
if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
{
lpLoadCfg32 = (IMAGE_LOAD_CONFIGURATION_DIRECTORY32 *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,
hConsole);
while (lpLoadCfg32 != NULL)
{
if (lpLoadCfg32->Size > sizeof(IMAGE_LOAD_CONFIGURATION_DIRECTORY32))
PrintConsole(hConsole,
L"Size of \'%ls\' exceeds size of %ls structure!\n",
L"_load_config_used", L"IMAGE_LOAD_CONFIGURATION_DIRECTORY32");
if (lpLoadCfg32->Size != lpDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].Size)
PrintConsole(hConsole,
L"Size member of \'%ls\' differs from size member of %ls!\n",
L"_load_config_used", L"IMAGE_DATA_DIRECTORY[10]");
bOutput &= PrintFormat(hOutput,
L"\r\n"
L"Load Configuration:\r\n"
L"\tSize = 0x%08lX\r\n"
L"\tTime/Date Stamp = 0x%08lX\r\n"
L"\tVersion = %hu.%hu\r\n"
L"\tGlobal Flags Clear = 0x%08lX\r\n",
lpLoadCfg32->Size,
lpLoadCfg32->TimeDateStamp,
lpLoadCfg32->MajorVersion,
lpLoadCfg32->MinorVersion,
lpLoadCfg32->GlobalFlagsClear);
for (dwFlags = lpLoadCfg32->GlobalFlagsClear; _BitScanForward(&dwIndex, dwFlags); dwFlags &= dwFlags - 1)
bOutput &= PrintFormat(hOutput, L"\t\t%ls\r\n", szGlobalFlags[dwIndex]);
bOutput &= PrintFormat(hOutput,
L"\tGlobal Flags Set = 0x%08lX\r\n",
lpLoadCfg32->GlobalFlagsSet);
for (dwFlags = lpLoadCfg32->GlobalFlagsSet; _BitScanForward(&dwIndex, dwFlags); dwFlags &= dwFlags - 1)
bOutput &= PrintFormat(hOutput, L"\t\t%ls\r\n", szGlobalFlags[dwIndex]);
bOutput &= PrintFormat(hOutput,
L"\tCritical Section Timeout = %lu\r\n"
L"\tDecommit Block Threshold = 0x%08lX\r\n"
L"\tDecommit Total Threshold = 0x%08lX\r\n"
L"\tLock Prefix Table Address = 0x%08lX\r\n"
L"\tMaximum Allocation Size = 0x%08lX\r\n"
L"\tVirtual Memory Threshold = 0x%08lX\r\n"
L"\tProcess Heap Flags = 0x%08lX\r\n"
L"\tProcess Affinity Mask = 0x%08lX\r\n"
L"\tCSD Version = %hu\r\n"
L"\tDependent Load Flags = 0x%04hX\r\n",
lpLoadCfg32->CriticalSectionDefaultTimeout,
lpLoadCfg32->DeCommitFreeBlockThreshold,
lpLoadCfg32->DeCommitTotalFreeThreshold,
lpLoadCfg32->LockPrefixTable,
lpLoadCfg32->MaximumAllocationSize,
lpLoadCfg32->VirtualMemoryThreshold,
lpLoadCfg32->ProcessHeapFlags,
lpLoadCfg32->ProcessAffinityMask,
lpLoadCfg32->CSDVersion,
lpLoadCfg32->DependentLoadFlags);
if ((lpLoadCfg32->DependentLoadFlags & DONT_RESOLVE_DLL_REFERENCES) == DONT_RESOLVE_DLL_REFERENCES)
bOutput &= PrintString(hOutput, L"\t\tDon't resolve DLL references\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_AS_DATAFILE) == LOAD_LIBRARY_AS_DATAFILE)
bOutput &= PrintString(hOutput, L"\t\tLoad as data file\r\n");
#ifdef LOAD_PACKAGED_LIBRARY
if ((lpLoadCfg32->DependentLoadFlags & LOAD_PACKAGED_LIBRARY) == LOAD_PACKAGED_LIBRARY)
bOutput &= PrintString(hOutput, L"\t\tLoad packaged library\r\n");
#endif
if ((lpLoadCfg32->DependentLoadFlags & LOAD_WITH_ALTERED_SEARCH_PATH) == LOAD_WITH_ALTERED_SEARCH_PATH)
bOutput &= PrintString(hOutput, L"\t\tLoad with altered search path\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_IGNORE_CODE_AUTHZ_LEVEL) == LOAD_IGNORE_CODE_AUTHZ_LEVEL)
bOutput &= PrintString(hOutput, L"\t\tIgnore AUTHZ level\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_AS_IMAGE_RESOURCE) == LOAD_LIBRARY_AS_IMAGE_RESOURCE)
bOutput &= PrintString(hOutput, L"\t\tLoad as image resource\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE) == LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE)
bOutput &= PrintString(hOutput, L"\t\tLoad as data file exclusively\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_REQUIRE_SIGNED_TARGET) == LOAD_LIBRARY_REQUIRE_SIGNED_TARGET)
bOutput &= PrintString(hOutput, L"\t\tRequire signed target\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR) == LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)
bOutput &= PrintString(hOutput, L"\t\tSearch DLL directory\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_SEARCH_APPLICATION_DIR) == LOAD_LIBRARY_SEARCH_APPLICATION_DIR)
bOutput &= PrintString(hOutput, L"\t\tSearch application directory\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_SEARCH_USER_DIRS) == LOAD_LIBRARY_SEARCH_USER_DIRS)
bOutput &= PrintString(hOutput, L"\t\tSearch user directories\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_SEARCH_SYSTEM32) == LOAD_LIBRARY_SEARCH_SYSTEM32)
bOutput &= PrintString(hOutput, L"\t\tSearch system directory\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_SEARCH_DEFAULT_DIRS) == LOAD_LIBRARY_SEARCH_DEFAULT_DIRS)
bOutput &= PrintString(hOutput, L"\t\tSearch default directories\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_SEARCH_SAFE_CURRENT_DIRS) == LOAD_LIBRARY_SEARCH_SAFE_CURRENT_DIRS)
bOutput &= PrintString(hOutput, L"\t\tSearch safe current directory\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER) == LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER)
bOutput &= PrintString(hOutput, L"\t\tSearch system directory, exempt (reverse) forwarder modules\r\n");
if ((lpLoadCfg32->DependentLoadFlags & LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY) == LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY)
bOutput &= PrintString(hOutput, L"\t\tOS integrity continuity\r\n");
if (lpLoadCfg32->Size < 64)
break;
bOutput &= PrintFormat(hOutput,
L"\tEdit List Address = 0x%08lX\r\n"
L"\tSecurity Cookie Address = 0x%08lX\r\n",
lpLoadCfg32->EditList,
lpLoadCfg32->SecurityCookie);
if (lpLoadCfg32->SecurityCookie != 0)
{
lpCookie32 = (DWORD *) RVA2Image(lpImage, lpSection, dwSection,
lpLoadCfg32->SecurityCookie - dwBase,
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,
hConsole);
if (lpCookie32 != NULL)
bOutput &= PrintFormat(hOutput,
L"\t\tSecurity Cookie = 0x%08lX (%ls)\r\n",
*lpCookie32,
*lpCookie32 == 0xBB40E64E ? L"default" : L"custom");
}
if (lpLoadCfg32->Size < 72)
break;
bOutput &= PrintFormat(hOutput,
L"\tSEH Table Address = 0x%08lX\r\n"
L"\tSEH Table Entries = %lu\r\n",
lpLoadCfg32->SEHandlerTable,
lpLoadCfg32->SEHandlerCount);
if (lpLoadCfg32->SEHandlerTable != 0)
{
lpHandler = (DWORD *) RVA2Image(lpImage, lpSection, dwSection,
lpLoadCfg32->SEHandlerTable - dwBase,
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,
hConsole);
if (lpHandler != NULL)
for (dwHandler = 0; dwHandler < lpLoadCfg32->SEHandlerCount; dwHandler++)
bOutput &= PrintFormat(hOutput,
L"\t\tException Handler = 0x%08lX\r\n",
lpHandler[dwHandler]);
}
if (lpLoadCfg32->Size < 92)
break;
bOutput &= PrintFormat(hOutput,
L"\tCFG Check Function = 0x%08lX\r\n"
L"\tCFG Dispatch Function = 0x%08lX\r\n"
L"\tCFG Function Table = 0x%08lX\r\n"
L"\tCFG Function Count = %lu\r\n"
L"\tCFG Function Table Stride = %lu\r\n"
L"\tCFG Flags = 0x%08lX\r\n",
lpLoadCfg32->GuardCFCheckFunctionPointer,
lpLoadCfg32->GuardCFDispatchFunctionPointer,
lpLoadCfg32->GuardCFFunctionTable,
lpLoadCfg32->GuardCFFunctionCount,
(lpLoadCfg32->GuardFlags & IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK) >> IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT,
lpLoadCfg32->GuardFlags & ~IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK);
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_CF_INSTRUMENTED) == IMAGE_GUARD_CF_INSTRUMENTED)
bOutput &= PrintString(hOutput, L"\t\tControl flow integrity checks using system-supplied support\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_CFW_INSTRUMENTED) == IMAGE_GUARD_CFW_INSTRUMENTED)
bOutput &= PrintString(hOutput, L"\t\tControl flow and write integrity checks\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT) == IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT)
bOutput &= PrintString(hOutput, L"\t\tControl flow target metadata\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_SECURITY_COOKIE_UNUSED) == IMAGE_GUARD_SECURITY_COOKIE_UNUSED)
bOutput &= PrintString(hOutput, L"\t\t/GS security cookie not used\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_PROTECT_DELAYLOAD_IAT) == IMAGE_GUARD_PROTECT_DELAYLOAD_IAT)
bOutput &= PrintString(hOutput, L"\t\tRead-only delay-load IAT\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION) == IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION)
bOutput &= PrintString(hOutput, L"\t\tDelay-load import table in own \'.didat\' section\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT) == IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT)
bOutput &= PrintString(hOutput, L"\t\tExport suppression information\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION) == IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION)
bOutput &= PrintString(hOutput, L"\t\tExport suppression\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT) == IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT)
bOutput &= PrintString(hOutput, L"\t\t\'longjmp()\' target information\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_RF_INSTRUMENTED) == IMAGE_GUARD_RF_INSTRUMENTED)
bOutput &= PrintString(hOutput, L"\t\tReturn flow instrumentation and metadata\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_RF_ENABLE) == IMAGE_GUARD_RF_ENABLE)
bOutput &= PrintString(hOutput, L"\t\tReturn flow protection\r\n");
if ((lpLoadCfg32->GuardFlags & IMAGE_GUARD_RF_STRICT) == IMAGE_GUARD_RF_STRICT)
bOutput &= PrintString(hOutput, L"\t\tReturn flow protection, strict mode\r\n");
if (lpLoadCfg32->Size < 104)
break;
bOutput &= PrintFormat(hOutput,
L"\tCode Integrity Flags = 0x%04hX\r\n"
L"\tCode Integrity Catalog = 0x%04hX\r\n"
L"\tCode Integrity Offset = 0x%08lX\r\n"
L"\tReserved = 0x%08lX\r\n",
lpLoadCfg32->CodeIntegrity.Flags,
lpLoadCfg32->CodeIntegrity.Catalog,
lpLoadCfg32->CodeIntegrity.CatalogOffset,
lpLoadCfg32->CodeIntegrity.Reserved);
if (lpLoadCfg32->Size < 120)
break;
bOutput &= PrintFormat(hOutput,
L"\tCFG IAT Entry Table = 0x%08lX\r\n"
L"\tCFG IAT Entry Count = %lu\r\n"
L"\tCFG Jump Target Table = 0x%08lX\r\n"
L"\tCFG Jump Target Count = %lu\r\n",
lpLoadCfg32->GuardAddressTakenIatEntryTable,
lpLoadCfg32->GuardAddressTakenIatEntryCount,
lpLoadCfg32->GuardLongJumpTargetTable,
lpLoadCfg32->GuardLongJumpTargetCount);
if (lpLoadCfg32->Size < 128)
break;
bOutput &= PrintFormat(hOutput,
L"\tRelocation Table = 0x%08lX\r\n"
L"\tCompiled Hybrid Metadata = 0x%08lX\r\n",
lpLoadCfg32->DynamicValueRelocTable,
lpLoadCfg32->CHPEMetadataPointer);
if (lpLoadCfg32->Size < 152)
break;
bOutput &= PrintFormat(hOutput,
L"\tRFG Failure Routine = 0x%08lX\r\n"
L"\tRFG Failure Function = 0x%08lX\r\n"
L"\tRelocation Table Offset = 0x%08lX\r\n"
L"\tRelocation Table Section = 0x%04hX\r\n"
L"\tReserved2 = %hu\r\n"
L"\tRFG Stack Pointer Function = 0x%08lX\r\n"
L"\tHot Patch Table Offset = 0x%08lX\r\n",
lpLoadCfg32->GuardRFFailureRoutine,
lpLoadCfg32->GuardRFFailureRoutineFunctionPointer,
lpLoadCfg32->DynamicValueRelocTableOffset,
lpLoadCfg32->DynamicValueRelocTableSection,
lpLoadCfg32->Reserved2,
lpLoadCfg32->GuardRFVerifyStackPointerFunctionPointer,
lpLoadCfg32->HotPatchTableOffset);
if (lpLoadCfg32->Size < 160)
break;
bOutput &= PrintFormat(hOutput,
L"\tReserved3 = %lu\r\n"
L"\tEnclave Configuration = 0x%08lX\r\n",
lpLoadCfg32->Reserved3,
lpLoadCfg32->EnclaveConfigurationPointer);
if (lpLoadCfg32->Size < 164)
break;
bOutput &= PrintFormat(hOutput,
L"\tVolatile Metadata Pointer = 0x%08lX\r\n",
lpLoadCfg32->VolatileMetadataPointer);
if (lpLoadCfg32->Size < 172)
break;
bOutput &= PrintFormat(hOutput,
L"\tCFG EH Continuation Table = 0x%08lX\r\n"
L"\tCFG EH Continuation Count = %lu\r\n",
lpLoadCfg32->GuardEHContinuationTable,
lpLoadCfg32->GuardEHContinuationCount);
if (lpLoadCfg32->Size < 184)
break;
bOutput &= PrintFormat(hOutput,
L"\tXFG Check Function = 0x%08lX\r\n"
L"\tXFG Dispatch Function = 0x%08lX\r\n"
L"\tXFG Function Table = 0x%08lX\r\n",
lpLoadCfg32->GuardXFGCheckFunctionPointer,
lpLoadCfg32->GuardXFGDispatchFunctionPointer,
lpLoadCfg32->GuardXFGTableDispatchFunctionPointer);
if (lpLoadCfg32->Size < 188)
break;
bOutput &= PrintFormat(hOutput,
L"\tCast Guard OS Failure Mode = 0x%08lX\r\n",
lpLoadCfg32->CastGuardOsDeterminedFailureMode);
if (lpLoadCfg32->Size < 192)
break;
bOutput &= PrintFormat(hOutput,
L"\tCFG memcpy() Function = 0x%08lX\r\n",
lpLoadCfg32->GuardMemcpyFunctionPointer);
break;
}
}
else if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
{
lpLoadCfg64 = (IMAGE_LOAD_CONFIGURATION_DIRECTORY64 *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,
hConsole);
while (lpLoadCfg64 != NULL)
{
if (lpLoadCfg64->Size > sizeof(IMAGE_LOAD_CONFIGURATION_DIRECTORY64))
PrintConsole(hConsole,
L"Size of \'%ls\' exceeds size of %ls structure!\n",
L"_load_config_used", L"IMAGE_LOAD_CONFIGURATION_DIRECTORY64");
if (lpLoadCfg64->Size != lpDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].Size)
PrintConsole(hConsole,
L"Size member of \'%ls\' differs from size member of %ls!\n",
L"_load_config_used", L"IMAGE_DATA_DIRECTORY[10]");
bOutput &= PrintFormat(hOutput,
L"\r\n"
L"Load Configuration:\r\n"
L"\tSize = 0x%08lX\r\n"
L"\tTime/Date Stamp = 0x%08lX\r\n"
L"\tVersion = %hu.%hu\r\n"
L"\tGlobal Flags Clear = 0x%08lX\r\n",
lpLoadCfg64->Size,
lpLoadCfg64->TimeDateStamp,
lpLoadCfg64->MajorVersion,
lpLoadCfg64->MinorVersion,
lpLoadCfg64->GlobalFlagsClear);
for (dwFlags = lpLoadCfg64->GlobalFlagsClear; _BitScanForward(&dwIndex, dwFlags); dwFlags &= dwFlags - 1)
bOutput &= PrintFormat(hOutput, L"\t\t%ls\r\n", szGlobalFlags[dwIndex]);
bOutput &= PrintFormat(hOutput,
L"\tGlobal Flags Set = 0x%08lX\r\n",
lpLoadCfg64->GlobalFlagsSet);
for (dwFlags = lpLoadCfg64->GlobalFlagsSet; _BitScanForward(&dwIndex, dwFlags); dwFlags &= dwFlags - 1)
bOutput &= PrintFormat(hOutput, L"\t\t%ls\r\n", szGlobalFlags[dwIndex]);
bOutput &= PrintFormat(hOutput,
L"\tCritical Section Timeout = %lu\r\n"
L"\tDecommit Block Threshold = 0x%016I64X\r\n"
L"\tDecommit Total Threshold = 0x%016I64X\r\n"
L"\tLock Prefix table Address = 0x%016I64X\r\n"
L"\tMaximum Allocation Size = 0x%016I64X\r\n"
L"\tVirtual Memory Threshold = 0x%016I64X\r\n"
L"\tProcess Affinity Mask = 0x%016I64X\r\n"
L"\tProcess Heap Flags = 0x%08lX\r\n"
L"\tCSD Version = %hu\r\n"
L"\tDependent Load Flags = 0x%04hX\r\n",
lpLoadCfg64->CriticalSectionDefaultTimeout,
lpLoadCfg64->DeCommitFreeBlockThreshold,
lpLoadCfg64->DeCommitTotalFreeThreshold,
lpLoadCfg64->LockPrefixTable,
lpLoadCfg64->MaximumAllocationSize,
lpLoadCfg64->VirtualMemoryThreshold,
lpLoadCfg64->ProcessAffinityMask,
lpLoadCfg64->ProcessHeapFlags,
lpLoadCfg64->CSDVersion,
lpLoadCfg64->DependentLoadFlags);
if ((lpLoadCfg64->DependentLoadFlags & DONT_RESOLVE_DLL_REFERENCES) == DONT_RESOLVE_DLL_REFERENCES)
bOutput &= PrintString(hOutput, L"\t\tDon't resolve DLL references\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_AS_DATAFILE) == LOAD_LIBRARY_AS_DATAFILE)
bOutput &= PrintString(hOutput, L"\t\tLoad as data file\r\n");
#ifdef LOAD_PACKAGED_LIBRARY
if ((lpLoadCfg64->DependentLoadFlags & LOAD_PACKAGED_LIBRARY) == LOAD_PACKAGED_LIBRARY)
bOutput &= PrintString(hOutput, L"\t\tLoad packaged library\r\n");
#endif
if ((lpLoadCfg64->DependentLoadFlags & LOAD_WITH_ALTERED_SEARCH_PATH) == LOAD_WITH_ALTERED_SEARCH_PATH)
bOutput &= PrintString(hOutput, L"\t\tLoad with altered search path\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_IGNORE_CODE_AUTHZ_LEVEL) == LOAD_IGNORE_CODE_AUTHZ_LEVEL)
bOutput &= PrintString(hOutput, L"\t\tIgnore AUTHZ level\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_AS_IMAGE_RESOURCE) == LOAD_LIBRARY_AS_IMAGE_RESOURCE)
bOutput &= PrintString(hOutput, L"\t\tLoad as image resource\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE) == LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE)
bOutput &= PrintString(hOutput, L"\t\tLoad as data file exclusively\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_REQUIRE_SIGNED_TARGET) == LOAD_LIBRARY_REQUIRE_SIGNED_TARGET)
bOutput &= PrintString(hOutput, L"\t\tRequire signed target\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR) == LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)
bOutput &= PrintString(hOutput, L"\t\tSearch DLL directory\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_SEARCH_APPLICATION_DIR) == LOAD_LIBRARY_SEARCH_APPLICATION_DIR)
bOutput &= PrintString(hOutput, L"\t\tSearch application directory\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_SEARCH_USER_DIRS) == LOAD_LIBRARY_SEARCH_USER_DIRS)
bOutput &= PrintString(hOutput, L"\t\tSearch user directories\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_SEARCH_SYSTEM32) == LOAD_LIBRARY_SEARCH_SYSTEM32)
bOutput &= PrintString(hOutput, L"\t\tSearch system directory\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_SEARCH_DEFAULT_DIRS) == LOAD_LIBRARY_SEARCH_DEFAULT_DIRS)
bOutput &= PrintString(hOutput, L"\t\tSearch default directories\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_SEARCH_SAFE_CURRENT_DIRS) == LOAD_LIBRARY_SEARCH_SAFE_CURRENT_DIRS)
bOutput &= PrintString(hOutput, L"\t\tSearch safe current directory\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER) == LOAD_LIBRARY_SEARCH_SYSTEM32_NO_FORWARDER)
bOutput &= PrintString(hOutput, L"\t\tSearch system directory, exempt (reverse) forwarder modules\r\n");
if ((lpLoadCfg64->DependentLoadFlags & LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY) == LOAD_LIBRARY_OS_INTEGRITY_CONTINUITY)
bOutput &= PrintString(hOutput, L"\t\tOS integrity continuity\r\n");
if (lpLoadCfg64->Size < 96)
break;
bOutput &= PrintFormat(hOutput,
L"\tEdit List Address = 0x%016I64X\r\n"
L"\tSecurity Cookie Address = 0x%016I64X\r\n",
lpLoadCfg64->EditList,
lpLoadCfg64->SecurityCookie);
if (lpLoadCfg64->SecurityCookie != 0)
{
lpCookie64 = (DWORD64 *) RVA2Image(lpImage, lpSection, dwSection,
(DWORD) (lpLoadCfg64->SecurityCookie - qwBase),
IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG,
hConsole);
if (lpCookie64 != NULL)
bOutput &= PrintFormat(hOutput,
L"\t\tSecurity Cookie = 0x%016I64X (%ls)\r\n",
*lpCookie64,
*lpCookie64 == 0x00002B992DDFA232 ? L"default" : L"custom");
}
if (lpLoadCfg64->Size < 112)
break;
if ((lpLoadCfg64->SEHandlerTable != 0)
|| (lpLoadCfg64->SEHandlerCount != 0))
PrintConsole(hConsole,
L"Structured exception handler table address or entry count not 0!\n");
bOutput &= PrintFormat(hOutput,
L"\tSEH Table Address = 0x%016I64X\r\n"
L"\tSEH Table Entries = %I64u\r\n",
lpLoadCfg64->SEHandlerTable,
lpLoadCfg64->SEHandlerCount);
if (lpLoadCfg64->Size < 148)
break;
bOutput &= PrintFormat(hOutput,
L"\tCFG Check Function = 0x%016I64X\r\n"
L"\tCFG Dispatch Function = 0x%016I64X\r\n"
L"\tCFG Function Table = 0x%016I64X\r\n"
L"\tCFG Function Count = %I64u\r\n"
L"\tCFG Function Table Stride = %lu\r\n"
L"\tCFG Flags = 0x%08lX\r\n",
lpLoadCfg64->GuardCFCheckFunctionPointer,
lpLoadCfg64->GuardCFDispatchFunctionPointer,
lpLoadCfg64->GuardCFFunctionTable,
lpLoadCfg64->GuardCFFunctionCount,
(lpLoadCfg64->GuardFlags & IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK) >> IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT,
lpLoadCfg64->GuardFlags & ~IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK);
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_CF_INSTRUMENTED) == IMAGE_GUARD_CF_INSTRUMENTED)
bOutput &= PrintString(hOutput, L"\t\tControl flow integrity checks using system-supplied support\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_CFW_INSTRUMENTED) == IMAGE_GUARD_CFW_INSTRUMENTED)
bOutput &= PrintString(hOutput, L"\t\tControl flow and write integrity checks\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT) == IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT)
bOutput &= PrintString(hOutput, L"\t\tControl flow target metadata\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_SECURITY_COOKIE_UNUSED) == IMAGE_GUARD_SECURITY_COOKIE_UNUSED)
bOutput &= PrintString(hOutput, L"\t\t/GS security cookie not used\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_PROTECT_DELAYLOAD_IAT) == IMAGE_GUARD_PROTECT_DELAYLOAD_IAT)
bOutput &= PrintString(hOutput, L"\t\tRead-only delay-load IAT\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION) == IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION)
bOutput &= PrintString(hOutput, L"\t\tDelay-load import table in own \'.didat\' section\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT) == IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT)
bOutput &= PrintString(hOutput, L"\t\tExport suppression information\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION) == IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION)
bOutput &= PrintString(hOutput, L"\t\tExport suppression\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT) == IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT)
bOutput &= PrintString(hOutput, L"\t\t\'longjmp()\' target information\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_RF_INSTRUMENTED) == IMAGE_GUARD_RF_INSTRUMENTED)
bOutput &= PrintString(hOutput, L"\t\tReturn flow instrumentation and metadata\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_RF_ENABLE) == IMAGE_GUARD_RF_ENABLE)
bOutput &= PrintString(hOutput, L"\t\tReturn flow protection\r\n");
if ((lpLoadCfg64->GuardFlags & IMAGE_GUARD_RF_STRICT) == IMAGE_GUARD_RF_STRICT)
bOutput &= PrintString(hOutput, L"\t\tReturn flow protection, strict mode\r\n");
if (lpLoadCfg64->Size < 160)
break;
bOutput &= PrintFormat(hOutput,
L"\tCode Integrity Flags = 0x%04hX\r\n"
L"\tCode Integrity Catalog = 0x%04hX\r\n"
L"\tCode Integrity Offset = 0x%08lX\r\n"
L"\tReserved = 0x%08lX\r\n",
lpLoadCfg64->CodeIntegrity.Flags,
lpLoadCfg64->CodeIntegrity.Catalog,
lpLoadCfg64->CodeIntegrity.CatalogOffset,
lpLoadCfg64->CodeIntegrity.Reserved);
if (lpLoadCfg64->Size < 192)
break;
bOutput &= PrintFormat(hOutput,
L"\tCFG IAT Entry Table = 0x%016I64X\r\n"
L"\tCFG IAT Entry Count = %I64u\r\n"
L"\tCFG Jump Target Table = 0x%016I64X\r\n"
L"\tCFG Jump Target Count = %I64u\r\n",
lpLoadCfg64->GuardAddressTakenIatEntryTable,
lpLoadCfg64->GuardAddressTakenIatEntryCount,
lpLoadCfg64->GuardLongJumpTargetTable,
lpLoadCfg64->GuardLongJumpTargetCount);
if (lpLoadCfg64->Size < 208)
break;
bOutput &= PrintFormat(hOutput,
L"\tRelocation Table = 0x%016I64X\r\n"
L"\tCompiled Hybrid Metadata = 0x%016I64X\r\n",
lpLoadCfg64->DynamicValueRelocTable,
lpLoadCfg64->CHPEMetadataPointer);
if (lpLoadCfg64->Size < 244)
break;
bOutput &= PrintFormat(hOutput,
L"\tRFG Failure Routine = 0x%016I64X\r\n"
L"\tRFG Failure Function = 0x%016I64X\r\n"
L"\tRelocation Table Offset = 0x%08lX\r\n"
L"\tRelocation Table Section = 0x%04hX\r\n"
L"\tReserved2 = %hu\r\n"
L"\tRFG Stack Pointer Function = 0x%016I64X\r\n"
L"\tHot Patch Table Offset = 0x%08lX\r\n",
lpLoadCfg64->GuardRFFailureRoutine,
lpLoadCfg64->GuardRFFailureRoutineFunctionPointer,
lpLoadCfg64->DynamicValueRelocTableOffset,
lpLoadCfg64->DynamicValueRelocTableSection,
lpLoadCfg64->Reserved2,
lpLoadCfg64->GuardRFVerifyStackPointerFunctionPointer,
lpLoadCfg64->HotPatchTableOffset);
if (lpLoadCfg64->Size < 256)
break;
bOutput &= PrintFormat(hOutput,
L"\tReserved3 = %lu\r\n"
L"\tEnclave Configuration = 0x%016I64X\r\n",
lpLoadCfg64->Reserved3,
lpLoadCfg64->EnclaveConfigurationPointer);
if (lpLoadCfg64->Size < 264)
break;
bOutput &= PrintFormat(hOutput,
L"\tVolatile Metadata Pointer = 0x%016I64X\r\n",
lpLoadCfg64->VolatileMetadataPointer);
if (lpLoadCfg64->Size < 280)
break;
bOutput &= PrintFormat(hOutput,
L"\tCFG EH Continuation Table = 0x%016I64X\r\n"
L"\tCFG EH Continuation Count = %I64u\r\n",
lpLoadCfg64->GuardEHContinuationTable,
lpLoadCfg64->GuardEHContinuationCount);
if (lpLoadCfg64->Size < 304)
break;
bOutput &= PrintFormat(hOutput,
L"\tXFG Check Function = 0x%016I64X\r\n"
L"\tXFG Dispatch Function = 0x%016I64X\r\n"
L"\tXFG Function Table = 0x%016I64X\r\n",
lpLoadCfg64->GuardXFGCheckFunctionPointer,
lpLoadCfg64->GuardXFGDispatchFunctionPointer,
lpLoadCfg64->GuardXFGTableDispatchFunctionPointer);
if (lpLoadCfg64->Size < 312)
break;
bOutput &= PrintFormat(hOutput,
L"\tCast Guard OS Failure Mode = 0x%016I64X\r\n",
lpLoadCfg64->CastGuardOsDeterminedFailureMode);
if (lpLoadCfg64->Size < 320)
break;
bOutput &= PrintFormat(hOutput,
L"\tCFG memcpy() Function = 0x%016I64X\r\n",
lpLoadCfg64->GuardMemcpyFunctionPointer);
break;
}
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].Size != 0))
{
bOutput &= PrintString(hOutput,
L"\r\n"
L"Bound Import Directory:\r\n");
lpBound = lpImage
+ lpDirectory[IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT].VirtualAddress;
dwDescriptor = 0;
lpDescriptor = (IMAGE_BOUND_IMPORT_DESCRIPTOR *) lpBound;
while (lpDescriptor->TimeDateStamp != 0)
{
qw = __emulu(lpDescriptor->TimeDateStamp, 10000000) // seconds since 1970-01-01 to
+ 116444736000000000; // 100 nano-seconds since 1601-01-01
if (!FileTimeToSystemTime((FILETIME *) &qw, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu for module \'%hs\'\n",
dwError = GetLastError(), lpBound + lpDescriptor->OffsetModuleName);
if (dwDescriptor == 0)
{
dwDescriptor = lpDescriptor->NumberOfModuleForwarderRefs;
bOutput &= PrintFormat(hOutput,
L"\tBound Import Entry:\r\n"
L"\t\tModule Name = %hs\r\n"
L"\t\tTime/Date Stamp = 0x%08lX (%ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu UTC)\r\n",
lpBound + lpDescriptor->OffsetModuleName,
lpDescriptor->TimeDateStamp,
szDayOfWeek[st.wDayOfWeek], st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
}
else
{
dwDescriptor--;
bOutput &= PrintFormat(hOutput,
L"\t\t\tModule Name = %hs\r\n"
L"\t\t\tTime/Date Stamp = 0x%08lX (%ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu UTC)\r\n",
lpBound + lpDescriptor->OffsetModuleName,
lpDescriptor->TimeDateStamp,
szDayOfWeek[st.wDayOfWeek], st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
}
lpDescriptor++;
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT].Size != 0))
{
if ((dwArray & (1 << IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT)) == 0)
PrintConsole(hConsole,
L"No \'%hs\' section for IMAGE_DATA_DIRECTORY[%lu]!\n",
".didat", IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT);
lpDelay = (IMAGE_DELAYLOAD_DESCRIPTOR *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,
hConsole);
if (lpDelay != NULL)
{
bOutput &= PrintString(hOutput,
L"\r\n"
L"Delay Load Import Directory:\r\n");
while (lpDelay->DllNameRVA != 0)
{
if (lpDelay->Attributes.RvaBased)
dwRVA = lpDelay->DllNameRVA;
else if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
dwRVA = lpDelay->DllNameRVA - dwBase;
else
dwRVA = ~0UL;
lpModule = (CHAR *) RVA2Image(lpImage, lpSection, dwSection,
dwRVA,
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,
hConsole);
bOutput &= PrintFormat(hOutput,
L"\tDelay Load Import Descriptor:\r\n"
L"\t\tAttributes = 0x%08lX\r\n"
L"\t\tModule Name = %hs\r\n"
L"\t\tTime/Date Stamp = 0x%08lX\r\n"
L"\t\tHandle Address = 0x%08lX\r\n"
L"\t\tAddress Table = 0x%08lX\r\n"
L"\t\tName Table = 0x%08lX\r\n"
L"\t\tBound Name Table = 0x%08lX\r\n"
L"\t\tUnload Name Table = 0x%08lX\r\n"
L"\t\tImports:\r\n",
lpDelay->Attributes.AllAttributes,
lpModule,
lpDelay->TimeDateStamp,
lpDelay->ModuleHandleRVA,
lpDelay->ImportAddressTableRVA,
lpDelay->ImportNameTableRVA,
lpDelay->BoundImportAddressTableRVA,
lpDelay->UnloadInformationTableRVA);
if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
{
lpThunk32 = (IMAGE_THUNK_DATA32 *) RVA2Image(lpImage, lpSection, dwSection,
lpDelay->Attributes.RvaBased ? lpDelay->ImportNameTableRVA : lpDelay->ImportNameTableRVA - dwBase,
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,
hConsole);
if (lpThunk32 != NULL)
while (lpThunk32->u1.AddressOfData != 0)
{
if ((lpThunk32->u1.Ordinal & IMAGE_ORDINAL_FLAG32) == IMAGE_ORDINAL_FLAG32)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%hu\r\n",
LOWORD(lpThunk32->u1.Ordinal));
else
{
lpAddress = (IMAGE_IMPORT_BY_NAME *) RVA2Image(lpImage, lpSection, dwSection,
lpDelay->Attributes.RvaBased ? lpThunk32->u1.AddressOfData : lpThunk32->u1.AddressOfData - dwBase,
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,
hConsole);
if (lpAddress != NULL)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%hu\t%hs\r\n",
lpAddress->Hint,
lpAddress->Name);
}
lpThunk32++;
}
}
else if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
{
lpThunk64 = (IMAGE_THUNK_DATA64 *) RVA2Image(lpImage, lpSection, dwSection,
lpDelay->ImportNameTableRVA,
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,
hConsole);
if (lpThunk64 != NULL)
while (lpThunk64->u1.AddressOfData != 0)
{
if ((lpThunk64->u1.Ordinal & IMAGE_ORDINAL_FLAG64) == IMAGE_ORDINAL_FLAG64)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%hu\r\n",
LOWORD(lpThunk64->u1.Ordinal));
else
{
lpAddress = (IMAGE_IMPORT_BY_NAME *) RVA2Image(lpImage, lpSection, dwSection,
(DWORD) lpThunk64->u1.AddressOfData,
IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT,
hConsole);
if (lpAddress != NULL)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%hu\t%hs\r\n",
lpAddress->Hint,
lpAddress->Name);
}
lpThunk64++;
}
}
lpDelay++;
}
}
}
if ((dwDirectory > IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR].VirtualAddress != 0)
&& (lpDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR].Size != 0))
{
lpCOMPlus = (IMAGE_COR20_HEADER *) RVA2Image(lpImage, lpSection, dwSection,
lpDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR].VirtualAddress,
IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR,
hConsole);
if (lpCOMPlus != NULL)
{
bOutput &= PrintFormat(hOutput,
L"\r\n"
L"COM+ Directory:\r\n"
L"\tRuntime Version = %hu.%hu\r\n"
L"\tFlags = 0x%08lX\r\n"
L"\tEntry Point Token = 0x%08lX\r\n"
L"\tMetadata = 0x%08lX\r\n"
L"\tResources = 0x%08lX\r\n"
L"\tStrong Name Signature = 0x%08lX\r\n"
L"\tCode Manager Table = 0x%08lX\r\n"
L"\tVTable Fixups = 0x%08lX\r\n"
L"\tExport Address Table Jumps = 0x%08lX\r\n"
L"\tManaged Native Header = 0x%08lX\r\n",
lpCOMPlus->MajorRuntimeVersion,
lpCOMPlus->MinorRuntimeVersion,
lpCOMPlus->Flags,
lpCOMPlus->EntryPointToken,
lpCOMPlus->MetaData,
lpCOMPlus->Resources,
lpCOMPlus->StrongNameSignature,
lpCOMPlus->CodeManagerTable,
lpCOMPlus->VTableFixups,
lpCOMPlus->ExportAddressTableJumps,
lpCOMPlus->ManagedNativeHeader);
}
}
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
}
}
if (!UnmapViewOfFile(lpImage))
PrintConsole(hConsole,
L"UnmapViewOfFile() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hImage))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (!CloseHandle(hInput))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (!CloseHandle(hOutput))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
PE32PLUS.C
created in step 1., link the compiled
object file PE32PLUS.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FePE32PLUS.COM PE32PLUS.C CRYPT32.LIB KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE PE32PLUS.OBJFor 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. PE32PLUS.C PE32PLUS.C(182) : warning C4214: nonstandard extension used : bit field types other than int PE32PLUS.C(183) : warning C4214: nonstandard extension used : bit field types other than int PE32PLUS.C(184) : warning C4201: nonstandard extension used : nameless struct/union PE32PLUS.C(1245) : warning C4701: potentially uninitialized local variable 'dwRich' used PE32PLUS.C(1884) : warning C4701: potentially uninitialized local variable 'lpPE64' used PE32PLUS.C(1662) : warning C4701: potentially uninitialized local variable 'lpDirectory' used PE32PLUS.C(3263) : warning C4701: potentially uninitialized local variable 'qwBase' used PE32PLUS.C(1455) : warning C4701: potentially uninitialized local variable 'dwCode' used PE32PLUS.C(1462) : warning C4701: potentially uninitialized local variable 'dwData' used PE32PLUS.C(1469) : warning C4701: potentially uninitialized local variable 'dwNone' used PE32PLUS.C(1579) : warning C4701: potentially uninitialized local variable 'dwSize' used PE32PLUS.C(1406) : warning C4701: potentially uninitialized local variable 'dwOffset' used PE32PLUS.C(1400) : warning C4701: potentially uninitialized local variable 'dwMemory' used PE32PLUS.C(1385) : warning C4701: potentially uninitialized local variable 'dwFile' used PE32PLUS.C(1748) : warning C4701: potentially uninitialized local variable 'lpPE32' used PE32PLUS.C(3568) : warning C4701: potentially uninitialized local variable 'dwBase' used PE32PLUS.C(1993) : warning C4701: potentially uninitialized local variable 'dwDirectory' used Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file PE32PLUS.TXT
with the following
content in an arbitrary, preferable empty directory:
�
Decode the dump file PE32PLUS.TXT
created in
step 3. to recreate the console application
Portable Executable Metadata Reader:
CERTUTIL.EXE /DecodeHex /V PE32PLUS.TXT PE32PLUS.COM
Input Length = 235008 Output Length = 55296 CertUtil: -decodehex command completed successfully.
external certificateprovided in a XrML (
.xrm-ms
) digital license file on factory installed
OEM
machines with version 2.0 or 2.1 marker embedded in the
SLIC
ACPI
table of their
BIOS.
System Builderinstalled machines.
hardware identificationgathered on activated previous installation of Windows 7 and newer versions and stored on Microsoft’s activation servers.
PIDGENX.COM [‹pidgenx.dll›] ‹pkeyconfig.xrm-ms› ‹product key› …
YTMG3-N6DKC-DKB77-7M9GH-8HVX7
and
VK7JG-NPHTM-C97JM-9MPGT-3V66T
for the Core
alias Home and Professional editions of
Windows 10 and Windows 11:
.\PIDGENX.COM "%SystemRoot%\System32\SPP\Tokens\PKeyConfig\PKeyConfig.xrm-ms" YTMG3-N6DKC-DKB77-7M9GH-8HVX7 VK7JG-NPHTM-C97JM-9MPGT-3V66T
Module 'C:\Windows\System32\PIDGENX.dll' Module version: 10.0:22621.1 Product version: 10.0:22621.1 Product key 'YTMG3-N6DKC-DKB77-7M9GH-8HVX7' is valid! DigitalProductId: size = 164 Product ID: 00326-10000-00000-AA527 Edition ID: [TH]X19-98868 OEM ID: Hardware ID (static): Hardware ID (dynamic): DigitalProductId4: size = 1272 Advanced Product ID: DUMMY-03261-000-000000-00-1033-9200.0000-3212022 Activation ID: 2b1f36bb-c1cd-4306-bf5c-a0367c2d97d8 OEM ID: Edition Type: Core Edition ID: [TH]X19-98868 Key Type: Retail EULA: Retail Product key 'VK7JG-NPHTM-C97JM-9MPGT-3V66T' is valid! DigitalProductId: size = 164 Product ID: 00330-80000-00000-AA779 Edition ID: [TH]X19-98841 OEM ID: Hardware ID (static): Hardware ID (dynamic): DigitalProductId4: size = 1272 Advanced Product ID: DUMMY-03308-000-000000-00-1033-9200.0000-3212022 Activation ID: 4de7cb65-cdf1-4de9-8ae8-e3cce27b9f2c OEM ID: Edition Type: Professional Edition ID: [TH]X19-98841 Key Type: Retail EULA: Retail
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and PIDGENX.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
importlibrary built from scratch;
PIDGENX.DLL
is located per
DLL search order
and loaded with the application PIDGENX.COM
.
safedirectories.
Create the text file PIDGENX.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#ifndef _DLL
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#ifndef E_FILENOTFOUND
#define E_FILENOTFOUND 0x80070002L // file not found
#endif
#ifndef E_PATHNOTFOUND
#define E_PATHNOTFOUND 0x80070003L // path not found
#endif
#ifndef E_RESERVEDKEY
#define E_RESERVEDKEY 0x8A010001L // reserved product key
#endif
#ifndef E_INVALIDKEY
#define E_INVALIDKEY 0x8A010101L // invalid product key
#endif
#define VS_BINARY 0U
#define VS_TEXT 1U
typedef struct _VS_VERSIONINFO
{
WORD wSize; // size of 'VERSION' resource
WORD wCount; // = sizeof(VS_FIXEDFILEINFO)
// (number of bytes in binary value)
WORD wType; // = VS_BINARY
WCHAR szKey[16]; // = L"VS_VERSION_INFO"
WORD wPadding; // = 0 (alignment to DWORD)
VS_FIXEDFILEINFO vsFFI;
} VS_VERSIONINFO;
typedef struct _DigitalProductId
{
DWORD dwSize; // 0x000000A4 = 164
WORD wMajorVersion; // 0x0003
WORD wMinorVersion; // 0x0000
CHAR szProductId[24]; // "DUMMY-OEM-0123456-78901"
DWORD dwKeyIdx;
CHAR szEditionId[16];
BYTE bCdKey[16];
DWORD dwCloneStatus;
DWORD dwTime;
DWORD dwRandom;
DWORD dwLt;
DWORD dwLicenseData[2];
CHAR sOemId[8];
DWORD dwBundleId;
CHAR sHardwareIdStatic[8];
DWORD dwHardwareIdTypeStatic;
DWORD dwBiosChecksumStatic;
DWORD dwVolumeSerialStatic;
DWORD dwTotalRamStatic;
DWORD dwVideoBiosChecksumStatic;
CHAR sHardwareIdDynamic[8];
DWORD dwHardwareIdTypeDynamic;
DWORD dwBiosChecksumDynamic;
DWORD dwVolumeSerialDynamic;
DWORD dwTotalRamDynamic;
DWORD dwVideoBiosChecksumDynamic;
DWORD dwCRC32;
} DPI, *LPDPI;
typedef struct _DigitalProductId4
{
DWORD dwSize; // 0x000004F8 = 1272
WORD wMajorVersion; // 0x0004
WORD wMinorVersion; // 0x0000
WCHAR szAdvancedPid[64];
WCHAR szActivationId[64];
WCHAR szOemId[8];
WCHAR szEditionType[260];
BYTE bIsUpgrade;
BYTE bReserved[7];
BYTE bCdKey[16];
BYTE bCdKey256Hash[32];
BYTE b256Hash[32];
WCHAR szEditionId[64];
WCHAR szKeyType[64];
WCHAR szEULA[64];
} DPI4, *LPDPI4;
__declspec(dllimport)
HRESULT WINAPI PidGenX(LPCWSTR lpProductKey,
LPCWSTR lpPKeyConfig,
LPCWSTR lpMPC,
LPCWSTR lpOEMId,
LPCWSTR lpProductId,
LPDPI lpDigitalProductId,
LPDPI4 lpDigitalProductId4);
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
VS_VERSIONINFO *lpVersion;
LPWSTR *lpArguments;
INT nArguments;
INT nArgument = 2;
DWORD dwError = ERROR_BAD_ARGUMENTS;
HMODULE hPidGenX;
HRSRC hResInfo;
HGLOBAL hResData;
WCHAR szPidGenX[MAX_PATH];
WCHAR szPid[24];
DPI dpi;
DPI4 dpi4;
HRESULT hr;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 3)
PrintConsole(hConsole,
L"Bad arguments: the file or path name of a \'PKeyConfig[*].xrm-ms\' XrML file plus\n"
L" at least one product key must be given!\n");
else
{
hPidGenX = GetModuleHandle(L"PidGenX");
if (hPidGenX == NULL)
PrintConsole(hConsole,
L"GetModuleHandle() returned error %lu\n",
dwError = GetLastError());
else
{
if (GetModuleFileName(hPidGenX, szPidGenX, sizeof(szPidGenX) / sizeof(*szPidGenX)) == 0)
PrintConsole(hConsole,
L"GetModuleFileName() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"Module \'%ls\'\n",
szPidGenX);
hResInfo = FindResource(hPidGenX, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION);
if (hResInfo == NULL)
PrintConsole(hConsole,
L"FindResource() returned error %lu\n",
dwError = GetLastError());
else
{
hResData = LoadResource(hPidGenX, hResInfo);
if (hResData == NULL)
PrintConsole(hConsole,
L"LoadResource() returned error %lu\n",
dwError = GetLastError());
else
{
lpVersion = LockResource(hResData);
if (lpVersion == NULL)
PrintConsole(hConsole,
L"LockResource() returned NULL\n");
else
PrintConsole(hConsole,
L"\tModule version:\t\t%hu.%hu:%hu.%hu\n"
L"\tProduct version:\t%hu.%hu:%hu.%hu\n",
HIWORD(lpVersion->vsFFI.dwFileVersionMS), LOWORD(lpVersion->vsFFI.dwFileVersionMS),
HIWORD(lpVersion->vsFFI.dwFileVersionLS), LOWORD(lpVersion->vsFFI.dwFileVersionLS),
HIWORD(lpVersion->vsFFI.dwProductVersionMS), LOWORD(lpVersion->vsFFI.dwProductVersionMS),
HIWORD(lpVersion->vsFFI.dwProductVersionLS), LOWORD(lpVersion->vsFFI.dwProductVersionLS));
}
}
}
dpi.dwSize = sizeof(dpi);
dpi4.dwSize = sizeof(dpi4);
do
{
hr = PidGenX(lpArguments[nArgument],
lpArguments[1],
L"DUMMY",
(LPCWSTR) NULL,
szPid,
&dpi,
&dpi4);
switch (hr)
{
case ERROR_FILE_NOT_FOUND:
case ERROR_PATH_NOT_FOUND:
case E_FILENOTFOUND: // file 'PKeyConfig.xrm-ms' not found
case E_PATHNOTFOUND: // path of 'PKeyConfig.xrm-ms' not found
nArguments = 0;
PrintConsole(hConsole,
L"Data file \'%ls\' not found!\n",
lpArguments[1]);
break;
case ERROR_INVALID_PARAMETER:
case E_INVALIDARG: // malformed product key
PrintConsole(hConsole,
L"Product key \'%ls\' is malformed!\n",
lpArguments[nArgument]);
break;
case E_RESERVEDKEY: // reserved product key
PrintConsole(hConsole,
L"Product key \'%ls\' is reserved!\n",
lpArguments[nArgument]);
break;
case E_INVALIDKEY: // invalid product key
PrintConsole(hConsole,
L"Product key \'%ls\' is invalid!\n",
lpArguments[nArgument]);
break;
case S_OK:
PrintConsole(hConsole,
L"Product key \'%ls\' is valid!\n",
lpArguments[nArgument]);
#ifdef VERBOSE
if ((dpi.dwSize != sizeof(dpi))
|| (dpi.wMajorVersion != 3)
|| (dpi.wMinorVersion != 0))
PrintConsole(hConsole,
L"Size of \'DigitalProductId\' not equal %lu or version not equal 3.0\n",
sizeof(dpi));
else
PrintConsole(hConsole,
L"\n"
L"DigitalProductId: size = %lu\n"
L"\tProduct ID:\t\t%hs\n"
L"\tEdition ID:\t\t%hs\n"
L"\tOEM ID:\t\t\t%.8hs\n"
L"\tHardware ID (static):\t%.8hs\n"
L"\tHardware ID (dynamic):\t%.8hs\n",
dpi.dwSize,
dpi.szProductId,
dpi.szEditionId,
dpi.sOemId,
dpi.sHardwareIdStatic,
dpi.sHardwareIdDynamic);
if ((dpi4.dwSize != sizeof(dpi4))
|| (dpi4.wMajorVersion != 4)
|| (dpi4.wMinorVersion != 0))
PrintConsole(hConsole,
L"Size of \'DigitalProductId4\' not equal %lu or version not equal 4.0\n",
sizeof(dpi4));
else
PrintConsole(hConsole,
L"\n"
L"DigitalProductId4: size = %lu\n"
L"\tAdvanced Product ID:\t%ls\n"
L"\tActivation ID:\t\t%ls\n"
L"\tOEM ID:\t\t\t%ls\n"
L"\tEdition Type:\t\t%ls\n"
L"\tEdition ID:\t\t%ls\n"
L"\tKey Type:\t\t%ls\n"
L"\tEULA:\t\t\t%ls\n",
dpi4.dwSize,
dpi4.szAdvancedPid,
dpi4.szActivationId,
dpi4.szOemId,
dpi4.szEditionType,
dpi4.szEditionId,
dpi4.szKeyType,
dpi4.szEULA);
#endif
break;
default:
PrintConsole(hConsole,
L"PidGenX() returned error 0x%08lX\n",
dwError = hr);
}
} while (++nArgument < nArguments);
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
#else // _DLL
__declspec(dllexport)
long PidGenX(void *_1, void *_2, void *_3, void *_4, void *_5, void *_6, void *_7)
{ return 0; }
#endif // _DLL
Run the following four command lines to compile the source file
PIDGENX.C
created in step 1. a first time,
generate the import library PIDGENX.LIB
from the
compiled object file PIDGENX.OBJ
and cleanup
afterwards:
SET CL=/Gz /LD /MD /W4 /wd4100 /X /Zl SET LINK=/EXPORT:PidGenX /NODEFAULTLIB /NOENTRY CL.EXE PIDGENX.C ERASE PIDGENX.DLL PIDGENX.EXP PIDGENX.OBJFor 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. PIDGENX.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. … Creating library PIDGENX.lib and object PIDGENX.exp
Run the following four command lines to compile the source file
PIDGENX.C
created in step 1. a second time, link
the compiled object file PIDGENX.OBJ
with the import
library PIDGENX.LIB
generated in step 2. and
cleanup afterwards:
SET CL=/DVERBOSE /GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.1 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FePIDGENX.COM PIDGENX.C KERNEL32.LIB PIDGENX.LIB SHELL32.LIB USER32.LIB ERASE PIDGENX.OBJFor 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. PIDGENX.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file PIDGENX.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 06 00 00 ......#.........
00 0c 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 7a 3b 00 00 03 00 00 85 .0......z;......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
c8 28 00 00 50 00 00 00 00 00 00 00 00 00 00 00 .(..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 60 28 00 00 40 00 00 00 ........`(..@...
00 00 00 00 00 00 00 00 00 20 00 00 4c 00 00 00 ......... ..L...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
5f 05 00 00 00 10 00 00 00 06 00 00 00 02 00 00 _...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 84 0a 00 00 00 20 00 00 .const....... ..
00 0c 00 00 00 08 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 44 20 40 00 8b f0 .......P..D @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 08 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8d .t.3.9u....^..U.
6c 24 88 81 ec ec 07 00 00 53 56 57 6a f4 c7 45 l$.......SVWj..E
6c 02 00 00 00 c7 45 74 a0 00 00 00 ff 15 34 20 l.....Et......4
40 00 8b f0 89 75 70 83 fe ff 75 0e ff 15 30 20 @....up...u...0
40 00 89 45 74 e9 33 03 00 00 8d 45 64 50 ff 15 @..Et.3....EdP..
2c 20 40 00 50 e8 2d 03 00 00 8b 3d 30 20 40 00 , @.P.-....=0 @.
89 45 68 85 c0 75 15 ff d7 50 89 45 74 68 34 28 .Eh..u...P.Eth4(
40 00 bb 00 28 40 00 e9 da 02 00 00 83 7d 64 03 @...(@.......}d.
bb 00 28 40 00 73 12 68 f0 26 40 00 56 e8 2e ff ..(@.s.h.&@.V...
ff ff 59 59 e9 a8 02 00 00 68 e0 26 40 00 ff 15 ..YY.....h.&@...
28 20 40 00 89 45 60 85 c0 75 0a ff d7 50 68 c0 ( @..E`..u...Ph.
26 40 00 eb 74 68 04 01 00 00 8d 8d 8c f8 ff ff &@..th..........
51 50 ff 15 00 20 40 00 85 c0 75 17 ff d7 50 68 QP... @...u...Ph
9c 26 40 00 53 56 89 45 74 e8 e2 fe ff ff 83 c4 .&@.SV.Et.......
10 eb 15 8d 85 8c f8 ff ff 50 68 80 26 40 00 56 .........Ph.&@.V
e8 cb fe ff ff 83 c4 0c 6a 10 6a 01 ff 75 60 ff ........j.j..u`.
15 20 20 40 00 85 c0 75 0a ff d7 50 68 64 26 40 . @...u...Phd&@
00 eb 16 50 ff 75 60 ff 15 1c 20 40 00 85 c0 75 ...P.u`... @...u
17 ff d7 50 68 48 26 40 00 53 56 89 45 74 e8 8d ...PhH&@.SV.Et..
fe ff ff 83 c4 10 eb 50 50 ff 15 18 20 40 00 85 .......PP... @..
c0 75 0f 68 0c 26 40 00 56 e8 72 fe ff ff 59 59 .u.h.&@.V.r...YY
eb 36 0f b7 48 3c 51 0f b7 48 3e 51 0f b7 48 38 .6..H<Q..H>Q..H8
51 0f b7 48 3a 51 0f b7 48 34 51 0f b7 48 36 51 Q..H:Q..H4Q..H6Q
0f b7 48 30 0f b7 40 32 51 50 68 80 25 40 00 56 ..H0..@2QPh.%@.V
e8 3b fe ff ff 83 c4 28 c7 45 bc a4 00 00 00 c7 .;.....(.E......
85 94 fa ff ff f8 04 00 00 8b 45 68 8b 4d 6c 8d ..........Eh.Ml.
34 88 8d 85 94 fa ff ff 50 8d 45 bc 50 8d 45 8c 4.......P.E.P.E.
50 8b 45 68 6a 00 68 70 25 40 00 ff 70 04 ff 36 P.Ehj.hp%@..p..6
ff 15 3c 20 40 00 b9 01 01 01 8a 3b c1 7f 36 74 ..< @......;..6t
2b 3d 02 00 07 80 7c 68 3d 03 00 07 80 7e 42 3d +=....|h=....~B=
57 00 07 80 74 32 3d 01 00 01 8a 75 53 ff 36 68 W...t2=....uS.6h
30 25 40 00 ff 75 70 e9 2b 01 00 00 ff 36 68 ec 0%@..up.+....6h.
24 40 00 eb ef 85 c0 74 55 83 f8 01 7e 32 83 f8 $@.....tU...~2..
03 7e 0e 83 f8 57 75 28 ff 36 68 a8 24 40 00 eb .~...Wu(.6h.$@..
d3 8b 45 68 ff 70 04 68 70 24 40 00 ff 75 70 e8 ..Eh.p.hp$@..up.
8c fd ff ff 83 c4 0c 83 65 64 00 e9 ef 00 00 00 ........ed......
50 68 e0 26 40 00 68 34 24 40 00 ff 75 70 89 45 Ph.&@.h4$@..up.E
74 e8 6a fd ff ff 83 c4 10 e9 d1 00 00 00 ff 36 t.j............6
8b 75 70 68 f8 23 40 00 56 e8 52 fd ff ff b8 a4 .uph.#@.V.R.....
00 00 00 83 c4 0c 39 45 bc 75 33 66 83 7d c0 03 ......9E.u3f.}..
75 2c 66 83 7d c2 00 75 25 8d 4d 40 51 8d 4d 24 u,f.}..u%.M@Q.M$
51 8d 4d 18 51 8d 4d e0 51 8d 4d c4 51 50 68 d8 Q.M.Q.M.Q.M.QPh.
22 40 00 56 e8 17 fd ff ff 83 c4 20 eb 0f 50 68 "@.V....... ..Ph
50 22 40 00 56 e8 06 fd ff ff 83 c4 0c b8 f8 04 P"@.V...........
00 00 39 85 94 fa ff ff 75 56 66 83 bd 98 fa ff ..9.....uVf.....
ff 04 75 4c 66 83 bd 9a fa ff ff 00 75 42 8d 8d ..uLf.......uB..
0c ff ff ff 51 8d 8d 8c fe ff ff 51 8d 8d 0c fe ....Q......Q....
ff ff 51 8d 8d ac fb ff ff 51 8d 8d 9c fb ff ff ..Q......Q......
51 8d 8d 1c fb ff ff 51 8d 8d 9c fa ff ff 51 50 Q......Q......QP
68 08 21 40 00 56 e8 a5 fc ff ff 83 c4 28 eb 0f h.!@.V.......(..
50 68 80 20 40 00 56 e8 94 fc ff ff 83 c4 0c ff Ph. @.V.........
45 6c 8b 45 6c 3b 45 64 0f 82 5b fe ff ff 8b 75 El.El;Ed..[....u
70 ff 75 68 ff 15 14 20 40 00 85 c0 74 12 ff d7 p.uh... @...t...
50 68 68 20 40 00 53 56 e8 63 fc ff ff 83 c4 10 Phh @.SV.c......
56 ff 15 10 20 40 00 85 c0 75 12 ff d7 50 68 50 V... @...u...PhP
20 40 00 53 56 e8 46 fc ff ff 83 c4 10 ff 75 74 @.SV.F.......ut
ff 15 0c 20 40 00 cc 55 8b ec 51 8b 45 08 53 56 ... @..U..Q.E.SV
33 f6 57 8b f8 89 75 08 89 75 fc 39 75 0c 0f 84 3.W...u..u.9u...
6a 01 00 00 3b c6 0f 84 62 01 00 00 0f b7 08 66 j...;...b......f
3b ce 0f 84 56 01 00 00 83 f9 20 74 0a 83 f9 09 ;...V..... t....
74 05 33 db 43 eb 02 33 db 39 75 08 75 2b 66 83 t.3.C..3.9u.u+f.
f9 20 74 06 66 83 f9 09 75 1f 89 75 fc 83 c0 02 . t.f...u..u....
0f b7 08 83 f9 20 74 f5 83 f9 09 74 f0 33 c9 66 ..... t....t.3.f
39 30 0f 95 c1 03 d9 eb 23 66 83 f9 5c 75 06 83 90......#f..\u..
75 fc 01 eb 14 39 75 fc 75 0c 66 83 f9 22 75 06 u....9u.u.f.."u.
83 75 08 01 eb 03 89 75 fc 83 c0 02 0f b7 08 66 .u.....u.......f
3b ce 75 a5 2b c7 83 c0 02 d1 f8 8d 44 58 02 03 ;.u.+.......DX..
c0 50 6a 40 ff 15 04 20 40 00 8b f0 33 d2 3b f2 .Pj@... @...3.;.
0f 84 d0 00 00 00 8d 44 9e 04 33 db 89 06 89 55 .......D..3....U
08 89 5d fc 83 7d 08 00 75 34 0f b7 0f 83 f9 20 ..]..}..u4.....
74 05 83 f9 09 75 27 33 d2 33 c9 66 89 08 83 c7 t....u'3.3.f....
02 0f b7 0f 83 f9 20 74 f5 83 f9 09 74 f0 66 39 ...... t....t.f9
17 74 71 43 8b c7 89 5d fc 89 3c 9e eb 5c 0f b7 .tqC...]..<..\..
0f 83 f9 5c 75 03 42 eb 48 83 f9 22 75 41 6a 02 ...\u.B.H.."uAj.
8d 5a 01 d1 eb 59 f7 db 03 f9 8d 04 58 f6 c2 01 .Z...Y......X...
74 0a 6a 22 5a 66 89 10 03 c1 eb 1c 83 7d 08 00 t.j"Zf.......}..
74 12 66 83 3f 22 75 0c 6a 22 5a 66 89 10 03 c1 t.f.?"u.j"Zf....
03 f9 eb 04 83 75 08 01 8b 5d fc 33 d2 eb 0b 33 .....u...].3...3
d2 66 89 08 83 c0 02 83 c7 02 66 83 3f 00 0f 85 .f........f.?...
60 ff ff ff 33 c9 43 66 89 08 21 0c 9e 8b 45 0c `...3.Cf..!...E.
89 18 39 4d 08 74 0f 68 a0 00 00 00 eb 02 6a 57 ..9M.t.h......jW
ff 15 24 20 40 00 5f 8b c6 5e 5b c9 c2 08 00 00 ..$ @._..^[.....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
e2 29 00 00 4e 2a 00 00 7a 29 00 00 8a 29 00 00 .)..N*..z)...)..
98 29 00 00 a6 29 00 00 b2 29 00 00 c2 29 00 00 .)...)...)...)..
d2 29 00 00 3e 2a 00 00 f8 29 00 00 0c 2a 00 00 .)..>*...)...*..
1e 2a 00 00 2e 2a 00 00 00 00 00 00 64 29 00 00 .*...*......d)..
00 00 00 00 6a 2a 00 00 00 00 00 00 00 00 00 00 ....j*..........
43 00 6c 00 6f 00 73 00 65 00 48 00 61 00 6e 00 C.l.o.s.e.H.a.n.
64 00 6c 00 65 00 00 00 4c 00 6f 00 63 00 61 00 d.l.e...L.o.c.a.
6c 00 46 00 72 00 65 00 65 00 00 00 00 00 00 00 l.F.r.e.e.......
53 00 69 00 7a 00 65 00 20 00 6f 00 66 00 20 00 S.i.z.e. .o.f. .
27 00 44 00 69 00 67 00 69 00 74 00 61 00 6c 00 '.D.i.g.i.t.a.l.
50 00 72 00 6f 00 64 00 75 00 63 00 74 00 49 00 P.r.o.d.u.c.t.I.
64 00 34 00 27 00 20 00 6e 00 6f 00 74 00 20 00 d.4.'. .n.o.t. .
65 00 71 00 75 00 61 00 6c 00 20 00 25 00 6c 00 e.q.u.a.l. .%.l.
75 00 20 00 6f 00 72 00 20 00 76 00 65 00 72 00 u. .o.r. .v.e.r.
73 00 69 00 6f 00 6e 00 20 00 6e 00 6f 00 74 00 s.i.o.n. .n.o.t.
20 00 65 00 71 00 75 00 61 00 6c 00 20 00 34 00 .e.q.u.a.l. .4.
2e 00 30 00 0a 00 00 00 0a 00 44 00 69 00 67 00 ..0.......D.i.g.
69 00 74 00 61 00 6c 00 50 00 72 00 6f 00 64 00 i.t.a.l.P.r.o.d.
75 00 63 00 74 00 49 00 64 00 34 00 3a 00 20 00 u.c.t.I.d.4.:. .
73 00 69 00 7a 00 65 00 20 00 3d 00 20 00 25 00 s.i.z.e. .=. .%.
6c 00 75 00 0a 00 09 00 41 00 64 00 76 00 61 00 l.u.....A.d.v.a.
6e 00 63 00 65 00 64 00 20 00 50 00 72 00 6f 00 n.c.e.d. .P.r.o.
64 00 75 00 63 00 74 00 20 00 49 00 44 00 3a 00 d.u.c.t. .I.D.:.
09 00 25 00 6c 00 73 00 0a 00 09 00 41 00 63 00 ..%.l.s.....A.c.
74 00 69 00 76 00 61 00 74 00 69 00 6f 00 6e 00 t.i.v.a.t.i.o.n.
20 00 49 00 44 00 3a 00 09 00 09 00 25 00 6c 00 .I.D.:.....%.l.
73 00 0a 00 09 00 4f 00 45 00 4d 00 20 00 49 00 s.....O.E.M. .I.
44 00 3a 00 09 00 09 00 09 00 25 00 6c 00 73 00 D.:.......%.l.s.
0a 00 09 00 45 00 64 00 69 00 74 00 69 00 6f 00 ....E.d.i.t.i.o.
6e 00 20 00 54 00 79 00 70 00 65 00 3a 00 09 00 n. .T.y.p.e.:...
09 00 25 00 6c 00 73 00 0a 00 09 00 45 00 64 00 ..%.l.s.....E.d.
69 00 74 00 69 00 6f 00 6e 00 20 00 49 00 44 00 i.t.i.o.n. .I.D.
3a 00 09 00 09 00 25 00 6c 00 73 00 0a 00 09 00 :.....%.l.s.....
4b 00 65 00 79 00 20 00 54 00 79 00 70 00 65 00 K.e.y. .T.y.p.e.
3a 00 09 00 09 00 25 00 6c 00 73 00 0a 00 09 00 :.....%.l.s.....
45 00 55 00 4c 00 41 00 3a 00 09 00 09 00 09 00 E.U.L.A.:.......
25 00 6c 00 73 00 0a 00 00 00 00 00 00 00 00 00 %.l.s...........
53 00 69 00 7a 00 65 00 20 00 6f 00 66 00 20 00 S.i.z.e. .o.f. .
27 00 44 00 69 00 67 00 69 00 74 00 61 00 6c 00 '.D.i.g.i.t.a.l.
50 00 72 00 6f 00 64 00 75 00 63 00 74 00 49 00 P.r.o.d.u.c.t.I.
64 00 27 00 20 00 6e 00 6f 00 74 00 20 00 65 00 d.'. .n.o.t. .e.
71 00 75 00 61 00 6c 00 20 00 25 00 6c 00 75 00 q.u.a.l. .%.l.u.
20 00 6f 00 72 00 20 00 76 00 65 00 72 00 73 00 .o.r. .v.e.r.s.
69 00 6f 00 6e 00 20 00 6e 00 6f 00 74 00 20 00 i.o.n. .n.o.t. .
65 00 71 00 75 00 61 00 6c 00 20 00 33 00 2e 00 e.q.u.a.l. .3...
30 00 0a 00 00 00 00 00 0a 00 44 00 69 00 67 00 0.........D.i.g.
69 00 74 00 61 00 6c 00 50 00 72 00 6f 00 64 00 i.t.a.l.P.r.o.d.
75 00 63 00 74 00 49 00 64 00 3a 00 20 00 73 00 u.c.t.I.d.:. .s.
69 00 7a 00 65 00 20 00 3d 00 20 00 25 00 6c 00 i.z.e. .=. .%.l.
75 00 0a 00 09 00 50 00 72 00 6f 00 64 00 75 00 u.....P.r.o.d.u.
63 00 74 00 20 00 49 00 44 00 3a 00 09 00 09 00 c.t. .I.D.:.....
25 00 68 00 73 00 0a 00 09 00 45 00 64 00 69 00 %.h.s.....E.d.i.
74 00 69 00 6f 00 6e 00 20 00 49 00 44 00 3a 00 t.i.o.n. .I.D.:.
09 00 09 00 25 00 68 00 73 00 0a 00 09 00 4f 00 ....%.h.s.....O.
45 00 4d 00 20 00 49 00 44 00 3a 00 09 00 09 00 E.M. .I.D.:.....
09 00 25 00 2e 00 38 00 68 00 73 00 0a 00 09 00 ..%...8.h.s.....
48 00 61 00 72 00 64 00 77 00 61 00 72 00 65 00 H.a.r.d.w.a.r.e.
20 00 49 00 44 00 20 00 28 00 73 00 74 00 61 00 .I.D. .(.s.t.a.
74 00 69 00 63 00 29 00 3a 00 09 00 25 00 2e 00 t.i.c.).:...%...
38 00 68 00 73 00 0a 00 09 00 48 00 61 00 72 00 8.h.s.....H.a.r.
64 00 77 00 61 00 72 00 65 00 20 00 49 00 44 00 d.w.a.r.e. .I.D.
20 00 28 00 64 00 79 00 6e 00 61 00 6d 00 69 00 .(.d.y.n.a.m.i.
63 00 29 00 3a 00 09 00 25 00 2e 00 38 00 68 00 c.).:...%...8.h.
73 00 0a 00 00 00 00 00 50 00 72 00 6f 00 64 00 s.......P.r.o.d.
75 00 63 00 74 00 20 00 6b 00 65 00 79 00 20 00 u.c.t. .k.e.y. .
27 00 25 00 6c 00 73 00 27 00 20 00 69 00 73 00 '.%.l.s.'. .i.s.
20 00 76 00 61 00 6c 00 69 00 64 00 21 00 0a 00 .v.a.l.i.d.!...
00 00 00 00 25 00 6c 00 73 00 28 00 29 00 20 00 ....%.l.s.(.). .
72 00 65 00 74 00 75 00 72 00 6e 00 65 00 64 00 r.e.t.u.r.n.e.d.
20 00 65 00 72 00 72 00 6f 00 72 00 20 00 30 00 .e.r.r.o.r. .0.
78 00 25 00 30 00 38 00 6c 00 58 00 0a 00 00 00 x.%.0.8.l.X.....
44 00 61 00 74 00 61 00 20 00 66 00 69 00 6c 00 D.a.t.a. .f.i.l.
65 00 20 00 27 00 25 00 6c 00 73 00 27 00 20 00 e. .'.%.l.s.'. .
6e 00 6f 00 74 00 20 00 66 00 6f 00 75 00 6e 00 n.o.t. .f.o.u.n.
64 00 21 00 0a 00 00 00 50 00 72 00 6f 00 64 00 d.!.....P.r.o.d.
75 00 63 00 74 00 20 00 6b 00 65 00 79 00 20 00 u.c.t. .k.e.y. .
27 00 25 00 6c 00 73 00 27 00 20 00 69 00 73 00 '.%.l.s.'. .i.s.
20 00 6d 00 61 00 6c 00 66 00 6f 00 72 00 6d 00 .m.a.l.f.o.r.m.
65 00 64 00 21 00 0a 00 00 00 00 00 50 00 72 00 e.d.!.......P.r.
6f 00 64 00 75 00 63 00 74 00 20 00 6b 00 65 00 o.d.u.c.t. .k.e.
79 00 20 00 27 00 25 00 6c 00 73 00 27 00 20 00 y. .'.%.l.s.'. .
69 00 73 00 20 00 69 00 6e 00 76 00 61 00 6c 00 i.s. .i.n.v.a.l.
69 00 64 00 21 00 0a 00 00 00 00 00 00 00 00 00 i.d.!...........
50 00 72 00 6f 00 64 00 75 00 63 00 74 00 20 00 P.r.o.d.u.c.t. .
6b 00 65 00 79 00 20 00 27 00 25 00 6c 00 73 00 k.e.y. .'.%.l.s.
27 00 20 00 69 00 73 00 20 00 72 00 65 00 73 00 '. .i.s. .r.e.s.
65 00 72 00 76 00 65 00 64 00 21 00 0a 00 00 00 e.r.v.e.d.!.....
44 00 55 00 4d 00 4d 00 59 00 00 00 00 00 00 00 D.U.M.M.Y.......
09 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 20 00 ..M.o.d.u.l.e. .
76 00 65 00 72 00 73 00 69 00 6f 00 6e 00 3a 00 v.e.r.s.i.o.n.:.
09 00 09 00 25 00 68 00 75 00 2e 00 25 00 68 00 ....%.h.u...%.h.
75 00 3a 00 25 00 68 00 75 00 2e 00 25 00 68 00 u.:.%.h.u...%.h.
75 00 0a 00 09 00 50 00 72 00 6f 00 64 00 75 00 u.....P.r.o.d.u.
63 00 74 00 20 00 76 00 65 00 72 00 73 00 69 00 c.t. .v.e.r.s.i.
6f 00 6e 00 3a 00 09 00 25 00 68 00 75 00 2e 00 o.n.:...%.h.u...
25 00 68 00 75 00 3a 00 25 00 68 00 75 00 2e 00 %.h.u.:.%.h.u...
25 00 68 00 75 00 0a 00 00 00 00 00 4c 00 6f 00 %.h.u.......L.o.
63 00 6b 00 52 00 65 00 73 00 6f 00 75 00 72 00 c.k.R.e.s.o.u.r.
63 00 65 00 28 00 29 00 20 00 72 00 65 00 74 00 c.e.(.). .r.e.t.
75 00 72 00 6e 00 65 00 64 00 20 00 4e 00 55 00 u.r.n.e.d. .N.U.
4c 00 4c 00 0a 00 00 00 4c 00 6f 00 61 00 64 00 L.L.....L.o.a.d.
52 00 65 00 73 00 6f 00 75 00 72 00 63 00 65 00 R.e.s.o.u.r.c.e.
00 00 00 00 46 00 69 00 6e 00 64 00 52 00 65 00 ....F.i.n.d.R.e.
73 00 6f 00 75 00 72 00 63 00 65 00 00 00 00 00 s.o.u.r.c.e.....
4d 00 6f 00 64 00 75 00 6c 00 65 00 20 00 27 00 M.o.d.u.l.e. .'.
25 00 6c 00 73 00 27 00 0a 00 00 00 47 00 65 00 %.l.s.'.....G.e.
74 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 46 00 t.M.o.d.u.l.e.F.
69 00 6c 00 65 00 4e 00 61 00 6d 00 65 00 00 00 i.l.e.N.a.m.e...
47 00 65 00 74 00 4d 00 6f 00 64 00 75 00 6c 00 G.e.t.M.o.d.u.l.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 e.H.a.n.d.l.e...
50 00 69 00 64 00 47 00 65 00 6e 00 58 00 00 00 P.i.d.G.e.n.X...
42 00 61 00 64 00 20 00 61 00 72 00 67 00 75 00 B.a.d. .a.r.g.u.
6d 00 65 00 6e 00 74 00 73 00 3a 00 20 00 74 00 m.e.n.t.s.:. .t.
68 00 65 00 20 00 66 00 69 00 6c 00 65 00 20 00 h.e. .f.i.l.e. .
6f 00 72 00 20 00 70 00 61 00 74 00 68 00 20 00 o.r. .p.a.t.h. .
6e 00 61 00 6d 00 65 00 20 00 6f 00 66 00 20 00 n.a.m.e. .o.f. .
61 00 20 00 27 00 50 00 4b 00 65 00 79 00 43 00 a. .'.P.K.e.y.C.
6f 00 6e 00 66 00 69 00 67 00 5b 00 2a 00 5d 00 o.n.f.i.g.[.*.].
2e 00 78 00 72 00 6d 00 2d 00 6d 00 73 00 27 00 ..x.r.m.-.m.s.'.
20 00 58 00 72 00 4d 00 4c 00 20 00 66 00 69 00 .X.r.M.L. .f.i.
6c 00 65 00 20 00 70 00 6c 00 75 00 73 00 0a 00 l.e. .p.l.u.s...
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 61 00 . . . . . . .a.
74 00 20 00 6c 00 65 00 61 00 73 00 74 00 20 00 t. .l.e.a.s.t. .
6f 00 6e 00 65 00 20 00 70 00 72 00 6f 00 64 00 o.n.e. .p.r.o.d.
75 00 63 00 74 00 20 00 6b 00 65 00 79 00 20 00 u.c.t. .k.e.y. .
6d 00 75 00 73 00 74 00 20 00 62 00 65 00 20 00 m.u.s.t. .b.e. .
67 00 69 00 76 00 65 00 6e 00 21 00 0a 00 00 00 g.i.v.e.n.!.....
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
0a 00 00 00 43 00 6f 00 6d 00 6d 00 61 00 6e 00 ....C.o.m.m.a.n.
64 00 4c 00 69 00 6e 00 65 00 54 00 6f 00 41 00 d.L.i.n.e.T.o.A.
72 00 67 00 76 00 00 00 b9 79 37 9e 00 00 00 00 r.g.v....y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 58 28 40 00 ............X(@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 54 29 00 00 00 00 00 00 ........T)......
00 00 00 00 6e 29 00 00 3c 20 00 00 18 29 00 00 ....n)..< ...)..
00 00 00 00 00 00 00 00 5c 2a 00 00 00 20 00 00 ........\*... ..
5c 29 00 00 00 00 00 00 00 00 00 00 78 2a 00 00 \)..........x*..
44 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D ..............
00 00 00 00 00 00 00 00 e2 29 00 00 4e 2a 00 00 .........)..N*..
7a 29 00 00 8a 29 00 00 98 29 00 00 a6 29 00 00 z)...)...)...)..
b2 29 00 00 c2 29 00 00 d2 29 00 00 3e 2a 00 00 .)...)...)..>*..
f8 29 00 00 0c 2a 00 00 1e 2a 00 00 2e 2a 00 00 .)...*...*...*..
00 00 00 00 64 29 00 00 00 00 00 00 6a 2a 00 00 ....d)......j*..
00 00 00 00 00 00 50 69 64 47 65 6e 58 00 50 49 ......PidGenX.PI
44 47 45 4e 58 2e 64 6c 6c 00 24 05 57 72 69 74 DGENX.dll.$.Writ
65 43 6f 6e 73 6f 6c 65 57 00 19 01 45 78 69 74 eConsoleW...Exit
50 72 6f 63 65 73 73 00 52 00 43 6c 6f 73 65 48 Process.R.CloseH
61 6e 64 6c 65 00 48 03 4c 6f 63 61 6c 46 72 65 andle.H.LocalFre
65 00 54 03 4c 6f 63 6b 52 65 73 6f 75 72 63 65 e.T.LockResource
00 00 41 03 4c 6f 61 64 52 65 73 6f 75 72 63 65 ..A.LoadResource
00 00 4e 01 46 69 6e 64 52 65 73 6f 75 72 63 65 ..N.FindResource
57 00 14 02 47 65 74 4d 6f 64 75 6c 65 46 69 6c W...GetModuleFil
65 4e 61 6d 65 57 00 00 18 02 47 65 74 4d 6f 64 eNameW....GetMod
75 6c 65 48 61 6e 64 6c 65 57 00 00 87 01 47 65 uleHandleW....Ge
74 43 6f 6d 6d 61 6e 64 4c 69 6e 65 57 00 02 02 tCommandLineW...
47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 64 02 GetLastError..d.
47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 73 04 GetStdHandle..s.
53 65 74 4c 61 73 74 45 72 72 6f 72 00 00 44 03 SetLastError..D.
4c 6f 63 61 6c 41 6c 6c 6f 63 00 00 4b 45 52 4e LocalAlloc..KERN
45 4c 33 32 2e 64 6c 6c 00 00 35 03 77 76 73 70 EL32.dll..5.wvsp
72 69 6e 74 66 57 00 00 55 53 45 52 33 32 2e 64 rintfW..USER32.d
6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ll..............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file PIDGENX.TXT
created in
step 4. to recreate the console application
Product Key Validator:
CERTUTIL.EXE /DecodeHex /V PIDGENX.TXT PIDGENX.COM
Input Length = 21760 Output Length = 5120 CertUtil: -decodehex command completed successfully.
Overwrite the text file PIDGENX.C
with the following
content:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#ifndef LOAD_LIBRARY_SAFE_CURRENT_DIRS
#define LOAD_LIBRARY_SAFE_CURRENT_DIRS 0x00002000UL
#endif
#ifndef E_FILENOTFOUND
#define E_FILENOTFOUND 0x80070002L // file not found
#endif
#ifndef E_PATHNOTFOUND
#define E_PATHNOTFOUND 0x80070003L // path not found
#endif
#ifndef E_RESERVEDKEY
#define E_RESERVEDKEY 0x8A010001L // reserved product key
#endif
#ifndef E_INVALIDKEY
#define E_INVALIDKEY 0x8A010101L // invalid product key
#endif
#define VS_BINARY 0U
#define VS_TEXT 1U
typedef struct _VS_VERSIONINFO
{
WORD wSize; // size of 'VERSION' resource
WORD wCount; // = sizeof(VS_FIXEDFILEINFO)
// (number of bytes in binary value)
WORD wType; // = VS_BINARY
WCHAR szKey[16]; // = L"VS_VERSION_INFO"
WORD wPadding; // = 0 (alignment to DWORD)
VS_FIXEDFILEINFO vsFFI;
} VS_VERSIONINFO;
typedef struct _DigitalProductId
{
DWORD dwSize; // 0x000000A4 = 164
WORD wMajorVersion; // 0x0003
WORD wMinorVersion; // 0x0000
CHAR szProductId[24]; // "DUMMY-OEM-0123456-78901"
DWORD dwKeyIdx;
CHAR szEditionId[16];
BYTE bCdKey[16];
DWORD dwCloneStatus;
DWORD dwTime;
DWORD dwRandom;
DWORD dwLt;
DWORD dwLicenseData[2];
CHAR sOemId[8];
DWORD dwBundleId;
CHAR sHardwareIdStatic[8];
DWORD dwHardwareIdTypeStatic;
DWORD dwBiosChecksumStatic;
DWORD dwVolumeSerialStatic;
DWORD dwTotalRamStatic;
DWORD dwVideoBiosChecksumStatic;
CHAR sHardwareIdDynamic[8];
DWORD dwHardwareIdTypeDynamic;
DWORD dwBiosChecksumDynamic;
DWORD dwVolumeSerialDynamic;
DWORD dwTotalRamDynamic;
DWORD dwVideoBiosChecksumDynamic;
DWORD dwCRC32;
} DPI, *LPDPI;
typedef struct _DigitalProductId4
{
DWORD dwSize; // 0x000004F8 = 1272
WORD wMajorVersion; // 0x0004
WORD wMinorVersion; // 0x0000
WCHAR szAdvancedPid[64];
WCHAR szActivationId[64];
WCHAR szOemId[8];
WCHAR szEditionType[260];
BYTE bIsUpgrade;
BYTE bReserved[7];
BYTE bCdKey[16];
BYTE bCdKey256Hash[32];
BYTE b256Hash[32];
WCHAR szEditionId[64];
WCHAR szKeyType[64];
WCHAR szEULA[64];
} DPI4, *LPDPI4;
typedef HRESULT (WINAPI PIDGENX) (LPCWSTR lpProductKey,
LPCWSTR lpPKeyConfig,
LPCWSTR lpMPC,
LPCWSTR lpOEMId,
LPCWSTR lpProductId,
LPDPI lpDigitalProductId,
LPDPI4 lpDigitalProductId4);
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
VS_VERSIONINFO *lpVersion;
LPWSTR *lpArguments;
INT nArguments;
INT nArgument = 3;
DWORD dwError = ERROR_BAD_ARGUMENTS;
WCHAR szPid[24];
DPI dpi;
DPI4 dpi4;
HMODULE hPidGenX;
FARPROC fpPidGenX;
HRESULT hr;
HRSRC hResInfo;
HGLOBAL hResData;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 4)
PrintConsole(hConsole,
L"Bad arguments: the (absolute or relative) path names of a \'PidGenX.dll\' and\n"
L" its associated \'PKeyConfig[*].xrm-ms\' XrML file plus at least\n"
L" one product key \'23467-89BCD-FGHJK-MNPQR-TVWXY\' must be given!\n");
else
{
hPidGenX = LoadLibraryEx(lpArguments[1], (HANDLE) NULL, LOAD_LIBRARY_SAFE_CURRENT_DIRS);
if (hPidGenX == NULL)
PrintConsole(hConsole,
L"LoadLibraryEx() returned error %lu\n",
dwError = GetLastError());
else
{
fpPidGenX = GetProcAddress(hPidGenX, "PidGenX");
if (fpPidGenX == NULL)
PrintConsole(hConsole,
L"GetProcAddress() returned error %lu\n",
dwError = GetLastError());
else
{
hResInfo = FindResource(hPidGenX, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION);
if (hResInfo == NULL)
PrintConsole(hConsole,
L"FindResource() returned error %lu\n",
dwError = GetLastError());
else
{
hResData = LoadResource(hPidGenX, hResInfo);
if (hResData == NULL)
PrintConsole(hConsole,
L"LoadResource() returned error %lu\n",
dwError = GetLastError());
else
{
lpVersion = LockResource(hResData);
if (lpVersion == NULL)
PrintConsole(hConsole,
L"LockResource() returned NULL\n");
else
PrintConsole(hConsole,
L"Library version = %hu.%hu:%hu.%hu\n"
L"Product version = %hu.%hu:%hu.%hu\n",
HIWORD(lpVersion->vsFFI.dwFileVersionMS), LOWORD(lpVersion->vsFFI.dwFileVersionMS),
HIWORD(lpVersion->vsFFI.dwFileVersionLS), LOWORD(lpVersion->vsFFI.dwFileVersionLS),
HIWORD(lpVersion->vsFFI.dwProductVersionMS), LOWORD(lpVersion->vsFFI.dwProductVersionMS),
HIWORD(lpVersion->vsFFI.dwProductVersionLS), LOWORD(lpVersion->vsFFI.dwProductVersionLS));
}
}
dpi.dwSize = sizeof(dpi);
dpi4.dwSize = sizeof(dpi4);
do
{
hr = ((PIDGENX *) fpPidGenX)(lpArguments[nArgument],
lpArguments[2],
L"DUMMY",
(LPCWSTR) NULL,
szPid,
&dpi,
&dpi4);
switch (hr)
{
case ERROR_FILE_NOT_FOUND:
case ERROR_PATH_NOT_FOUND:
case E_FILENOTFOUND: // file 'PKeyConfig.xrm-ms' not found
case E_PATHNOTFOUND: // path of 'PKeyConfig.xrm-ms' not found
nArguments = 0;
PrintConsole(hConsole,
L"Data file \'%ls\' not found!\n",
lpArguments[2]);
break;
case ERROR_INVALID_PARAMETER:
case E_INVALIDARG: // malformed product key
PrintConsole(hConsole,
L"Product key \'%ls\' is malformed!\n",
lpArguments[nArgument]);
break;
case E_RESERVEDKEY: // reserved product key
PrintConsole(hConsole,
L"Product key \'%ls\' is reserved!\n",
lpArguments[nArgument]);
break;
case E_INVALIDKEY: // invalid product key
PrintConsole(hConsole,
L"Product key \'%ls\' is invalid!\n",
lpArguments[nArgument]);
break;
case S_OK:
PrintConsole(hConsole,
L"Product key \'%ls\' is valid!\n",
lpArguments[nArgument]);
#ifdef VERBOSE
if ((dpi.dwSize != sizeof(dpi))
|| (dpi.wMajorVersion != 3)
|| (dpi.wMinorVersion != 0))
PrintConsole(hConsole,
L"Size of \'DigitalProductId\' not equal %lu or version not equal 3.0\n",
sizeof(dpi));
else
PrintConsole(hConsole,
L"\n"
L"DigitalProductId: size = %lu\n"
L"\tProduct ID:\t\t%hs\n"
L"\tEdition ID:\t\t%hs\n"
L"\tOEM ID:\t\t\t%.8hs\n"
L"\tHardware ID (static):\t%.8hs\n"
L"\tHardware ID (dynamic):\t%.8hs\n",
dpi.dwSize,
dpi.szProductId,
dpi.szEditionId,
dpi.sOemId,
dpi.sHardwareIdStatic,
dpi.sHardwareIdDynamic);
if ((dpi4.dwSize != sizeof(dpi4))
|| (dpi4.wMajorVersion != 4)
|| (dpi4.wMinorVersion != 0))
PrintConsole(hConsole,
L"Size of \'DigitalProductId4\' not equal %lu or version not equal 4.0\n",
sizeof(dpi4));
else
PrintConsole(hConsole,
L"\n"
L"DigitalProductId4: size = %lu\n"
L"\tAdvanced Product ID:\t%ls\n"
L"\tActivation ID:\t\t%ls\n"
L"\tOEM ID:\t\t\t%ls\n"
L"\tEdition Type:\t\t%ls\n"
L"\tEdition ID:\t\t%ls\n"
L"\tKey Type:\t\t%ls\n"
L"\tEULA:\t\t\t%ls\n",
dpi4.dwSize,
dpi4.szAdvancedPid,
dpi4.szActivationId,
dpi4.szOemId,
dpi4.szEditionType,
dpi4.szEditionId,
dpi4.szKeyType,
dpi4.szEULA);
#endif
break;
default:
PrintConsole(hConsole,
L"PidGenX() returned error 0x%08lX\n",
dwError = hr);
}
} while (++nArgument < nArguments);
}
if (!FreeLibrary(hPidGenX))
PrintConsole(hConsole,
L"FreeLibrary() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
PIDGENX.C
created in step 1., link the compiled
object file PIDGENX.OBJ
and cleanup afterwards:
SET CL=/DVERBOSE /GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FePIDGENX.COM PIDGENX.C KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE PIDGENX.OBJFor 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. PIDGENX.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file PIDGENX.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 06 00 00 ......#.........
00 0c 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 01 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 d9 35 00 00 03 00 00 85 .0.......5......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
80 29 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 .)..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 18 29 00 00 40 00 00 00 .........)..@...
00 00 00 00 00 00 00 00 00 20 00 00 48 00 00 00 ......... ..H...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
70 05 00 00 00 10 00 00 00 06 00 00 00 02 00 00 p...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 16 0b 00 00 00 20 00 00 .const....... ..
00 0c 00 00 00 08 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 40 20 40 00 8b f0 .......P..@ @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 00 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8d .t.3.9u....^..U.
6c 24 88 81 ec e8 05 00 00 53 56 57 6a f4 c7 45 l$.......SVWj..E
6c 03 00 00 00 c7 45 74 a0 00 00 00 ff 15 30 20 l.....Et......0
40 00 8b f0 89 75 70 83 fe ff 75 0e ff 15 2c 20 @....up...u...,
40 00 89 45 74 e9 44 03 00 00 8d 45 64 50 ff 15 @..Et.D....EdP..
28 20 40 00 50 e8 3e 03 00 00 8b 3d 2c 20 40 00 ( @.P.>....=, @.
89 45 68 85 c0 75 15 ff d7 50 89 45 74 68 ec 28 .Eh..u...P.Eth.(
40 00 bb b8 28 40 00 e9 eb 02 00 00 83 7d 64 04 @...(@.......}d.
bb b8 28 40 00 73 12 68 e8 26 40 00 56 e8 2e ff ..(@.s.h.&@.V...
ff ff 59 59 e9 b9 02 00 00 68 00 20 00 00 6a 00 ..YY.....h. ..j.
ff 70 04 ff 15 24 20 40 00 89 45 60 85 c0 75 10 .p...$ @..E`..u.
ff d7 50 89 45 74 68 c8 26 40 00 e9 88 02 00 00 ..P.Eth.&@......
68 c0 26 40 00 50 ff 15 20 20 40 00 89 45 5c 85 h.&@.P.. @..E\.
c0 75 1a ff d7 50 68 a0 26 40 00 53 56 89 45 74 .u...Ph.&@.SV.Et
e8 db fe ff ff 83 c4 10 e9 46 02 00 00 6a 10 6a .........F...j.j
01 ff 75 60 ff 15 1c 20 40 00 85 c0 75 0a ff d7 ..u`... @...u...
50 68 84 26 40 00 eb 16 50 ff 75 60 ff 15 18 20 Ph.&@...P.u`...
40 00 85 c0 75 17 ff d7 50 68 68 26 40 00 53 56 @...u...Phh&@.SV
89 45 74 e8 98 fe ff ff 83 c4 10 eb 50 50 ff 15 .Et.........PP..
14 20 40 00 85 c0 75 0f 68 2c 26 40 00 56 e8 7d . @...u.h,&@.V.}
fe ff ff 59 59 eb 36 0f b7 48 3c 51 0f b7 48 3e ...YY.6..H<Q..H>
51 0f b7 48 38 51 0f b7 48 3a 51 0f b7 48 34 51 Q..H8Q..H:Q..H4Q
0f b7 48 36 51 0f b7 48 30 0f b7 40 32 51 50 68 ..H6Q..H0..@2QPh
a0 25 40 00 56 e8 46 fe ff ff 83 c4 28 c7 45 b8 .%@.V.F.....(.E.
a4 00 00 00 c7 85 90 fa ff ff f8 04 00 00 8b 45 ...............E
68 8b 4d 6c 8d 34 88 8d 85 90 fa ff ff 50 8d 45 h.Ml.4.......P.E
b8 50 8d 45 88 50 8b 45 68 6a 00 68 90 25 40 00 .P.E.P.Ehj.h.%@.
ff 70 08 ff 36 ff 55 5c b9 01 01 01 8a 3b c1 7f .p..6.U\.....;..
36 74 2b 3d 02 00 07 80 7c 68 3d 03 00 07 80 7e 6t+=....|h=....~
42 3d 57 00 07 80 74 32 3d 01 00 01 8a 75 53 ff B=W...t2=....uS.
36 68 50 25 40 00 ff 75 70 e9 2b 01 00 00 ff 36 6hP%@..up.+....6
68 0c 25 40 00 eb ef 85 c0 74 55 83 f8 01 7e 32 h.%@.....tU...~2
83 f8 03 7e 0e 83 f8 57 75 28 ff 36 68 c8 24 40 ...~...Wu(.6h.$@
00 eb d3 8b 45 68 ff 70 08 68 90 24 40 00 ff 75 ....Eh.p.h.$@..u
70 e8 9a fd ff ff 83 c4 0c 83 65 64 00 e9 ef 00 p.........ed....
00 00 50 68 80 24 40 00 68 44 24 40 00 ff 75 70 ..Ph.$@.hD$@..up
89 45 74 e8 78 fd ff ff 83 c4 10 e9 d1 00 00 00 .Et.x...........
ff 36 8b 75 70 68 08 24 40 00 56 e8 60 fd ff ff .6.uph.$@.V.`...
b8 a4 00 00 00 83 c4 0c 39 45 b8 75 33 66 83 7d ........9E.u3f.}
bc 03 75 2c 66 83 7d be 00 75 25 8d 4d 3c 51 8d ..u,f.}..u%.M<Q.
4d 20 51 8d 4d 14 51 8d 4d dc 51 8d 4d c0 51 50 M Q.M.Q.M.Q.M.QP
68 e8 22 40 00 56 e8 25 fd ff ff 83 c4 20 eb 0f h."@.V.%..... ..
50 68 60 22 40 00 56 e8 14 fd ff ff 83 c4 0c b8 Ph`"@.V.........
f8 04 00 00 39 85 90 fa ff ff 75 56 66 83 bd 94 ....9.....uVf...
fa ff ff 04 75 4c 66 83 bd 96 fa ff ff 00 75 42 ....uLf.......uB
8d 8d 08 ff ff ff 51 8d 8d 88 fe ff ff 51 8d 8d ......Q......Q..
08 fe ff ff 51 8d 8d a8 fb ff ff 51 8d 8d 98 fb ....Q......Q....
ff ff 51 8d 8d 18 fb ff ff 51 8d 8d 98 fa ff ff ..Q......Q......
51 50 68 18 21 40 00 56 e8 b3 fc ff ff 83 c4 28 QPh.!@.V.......(
eb 0f 50 68 90 20 40 00 56 e8 a2 fc ff ff 83 c4 ..Ph. @.V.......
0c ff 45 6c 8b 45 6c 3b 45 64 0f 82 5e fe ff ff ..El.El;Ed..^...
8b 75 70 ff 75 60 ff 15 10 20 40 00 85 c0 75 12 .up.u`... @...u.
ff d7 50 68 74 20 40 00 53 56 e8 71 fc ff ff 83 ..Pht @.SV.q....
c4 10 ff 75 68 ff 15 0c 20 40 00 85 c0 74 12 ff ...uh... @...t..
d7 50 68 60 20 40 00 53 56 e8 52 fc ff ff 83 c4 .Ph` @.SV.R.....
10 56 ff 15 08 20 40 00 85 c0 75 12 ff d7 50 68 .V... @...u...Ph
48 20 40 00 53 56 e8 35 fc ff ff 83 c4 10 ff 75 H @.SV.5.......u
74 ff 15 04 20 40 00 cc 55 8b ec 51 8b 45 08 53 t... @..U..Q.E.S
56 33 f6 57 8b f8 89 75 08 89 75 fc 39 75 0c 0f V3.W...u..u.9u..
84 6a 01 00 00 3b c6 0f 84 62 01 00 00 0f b7 08 .j...;...b......
66 3b ce 0f 84 56 01 00 00 83 f9 20 74 0a 83 f9 f;...V..... t...
09 74 05 33 db 43 eb 02 33 db 39 75 08 75 2b 66 .t.3.C..3.9u.u+f
83 f9 20 74 06 66 83 f9 09 75 1f 89 75 fc 83 c0 .. t.f...u..u...
02 0f b7 08 83 f9 20 74 f5 83 f9 09 74 f0 33 c9 ...... t....t.3.
66 39 30 0f 95 c1 03 d9 eb 23 66 83 f9 5c 75 06 f90......#f..\u.
83 75 fc 01 eb 14 39 75 fc 75 0c 66 83 f9 22 75 .u....9u.u.f.."u
06 83 75 08 01 eb 03 89 75 fc 83 c0 02 0f b7 08 ..u.....u.......
66 3b ce 75 a5 2b c7 83 c0 02 d1 f8 8d 44 58 02 f;.u.+.......DX.
03 c0 50 6a 40 ff 15 38 20 40 00 8b f0 33 d2 3b ..Pj@..8 @...3.;
f2 0f 84 d0 00 00 00 8d 44 9e 04 33 db 89 06 89 ........D..3....
55 08 89 5d fc 83 7d 08 00 75 34 0f b7 0f 83 f9 U..]..}..u4.....
20 74 05 83 f9 09 75 27 33 d2 33 c9 66 89 08 83 t....u'3.3.f...
c7 02 0f b7 0f 83 f9 20 74 f5 83 f9 09 74 f0 66 ....... t....t.f
39 17 74 71 43 8b c7 89 5d fc 89 3c 9e eb 5c 0f 9.tqC...]..<..\.
b7 0f 83 f9 5c 75 03 42 eb 48 83 f9 22 75 41 6a ....\u.B.H.."uAj
02 8d 5a 01 d1 eb 59 f7 db 03 f9 8d 04 58 f6 c2 ..Z...Y......X..
01 74 0a 6a 22 5a 66 89 10 03 c1 eb 1c 83 7d 08 .t.j"Zf.......}.
00 74 12 66 83 3f 22 75 0c 6a 22 5a 66 89 10 03 .t.f.?"u.j"Zf...
c1 03 f9 eb 04 83 75 08 01 8b 5d fc 33 d2 eb 0b ......u...].3...
33 d2 66 89 08 83 c0 02 83 c7 02 66 83 3f 00 0f 3.f........f.?..
85 60 ff ff ff 33 c9 43 66 89 08 21 0c 9e 8b 45 .`...3.Cf..!...E
0c 89 18 39 4d 08 74 0f 68 a0 00 00 00 eb 02 6a ...9M.t.h......j
57 ff 15 34 20 40 00 5f 8b c6 5e 5b c9 c2 08 00 W..4 @._..^[....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
04 2a 00 00 14 2a 00 00 22 2a 00 00 30 2a 00 00 .*...*.."*..0*..
3c 2a 00 00 4a 2a 00 00 5a 2a 00 00 6a 2a 00 00 <*..J*..Z*..j*..
7a 2a 00 00 8c 2a 00 00 9e 2a 00 00 b0 2a 00 00 z*...*...*...*..
c0 2a 00 00 d0 2a 00 00 e0 2a 00 00 00 00 00 00 .*...*...*......
fc 2a 00 00 00 00 00 00 43 00 6c 00 6f 00 73 00 .*......C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 e.H.a.n.d.l.e...
4c 00 6f 00 63 00 61 00 6c 00 46 00 72 00 65 00 L.o.c.a.l.F.r.e.
65 00 00 00 46 00 72 00 65 00 65 00 4c 00 69 00 e...F.r.e.e.L.i.
62 00 72 00 61 00 72 00 79 00 00 00 00 00 00 00 b.r.a.r.y.......
53 00 69 00 7a 00 65 00 20 00 6f 00 66 00 20 00 S.i.z.e. .o.f. .
27 00 44 00 69 00 67 00 69 00 74 00 61 00 6c 00 '.D.i.g.i.t.a.l.
50 00 72 00 6f 00 64 00 75 00 63 00 74 00 49 00 P.r.o.d.u.c.t.I.
64 00 34 00 27 00 20 00 6e 00 6f 00 74 00 20 00 d.4.'. .n.o.t. .
65 00 71 00 75 00 61 00 6c 00 20 00 25 00 6c 00 e.q.u.a.l. .%.l.
75 00 20 00 6f 00 72 00 20 00 76 00 65 00 72 00 u. .o.r. .v.e.r.
73 00 69 00 6f 00 6e 00 20 00 6e 00 6f 00 74 00 s.i.o.n. .n.o.t.
20 00 65 00 71 00 75 00 61 00 6c 00 20 00 34 00 .e.q.u.a.l. .4.
2e 00 30 00 0a 00 00 00 0a 00 44 00 69 00 67 00 ..0.......D.i.g.
69 00 74 00 61 00 6c 00 50 00 72 00 6f 00 64 00 i.t.a.l.P.r.o.d.
75 00 63 00 74 00 49 00 64 00 34 00 3a 00 20 00 u.c.t.I.d.4.:. .
73 00 69 00 7a 00 65 00 20 00 3d 00 20 00 25 00 s.i.z.e. .=. .%.
6c 00 75 00 0a 00 09 00 41 00 64 00 76 00 61 00 l.u.....A.d.v.a.
6e 00 63 00 65 00 64 00 20 00 50 00 72 00 6f 00 n.c.e.d. .P.r.o.
64 00 75 00 63 00 74 00 20 00 49 00 44 00 3a 00 d.u.c.t. .I.D.:.
09 00 25 00 6c 00 73 00 0a 00 09 00 41 00 63 00 ..%.l.s.....A.c.
74 00 69 00 76 00 61 00 74 00 69 00 6f 00 6e 00 t.i.v.a.t.i.o.n.
20 00 49 00 44 00 3a 00 09 00 09 00 25 00 6c 00 .I.D.:.....%.l.
73 00 0a 00 09 00 4f 00 45 00 4d 00 20 00 49 00 s.....O.E.M. .I.
44 00 3a 00 09 00 09 00 09 00 25 00 6c 00 73 00 D.:.......%.l.s.
0a 00 09 00 45 00 64 00 69 00 74 00 69 00 6f 00 ....E.d.i.t.i.o.
6e 00 20 00 54 00 79 00 70 00 65 00 3a 00 09 00 n. .T.y.p.e.:...
09 00 25 00 6c 00 73 00 0a 00 09 00 45 00 64 00 ..%.l.s.....E.d.
69 00 74 00 69 00 6f 00 6e 00 20 00 49 00 44 00 i.t.i.o.n. .I.D.
3a 00 09 00 09 00 25 00 6c 00 73 00 0a 00 09 00 :.....%.l.s.....
4b 00 65 00 79 00 20 00 54 00 79 00 70 00 65 00 K.e.y. .T.y.p.e.
3a 00 09 00 09 00 25 00 6c 00 73 00 0a 00 09 00 :.....%.l.s.....
45 00 55 00 4c 00 41 00 3a 00 09 00 09 00 09 00 E.U.L.A.:.......
25 00 6c 00 73 00 0a 00 00 00 00 00 00 00 00 00 %.l.s...........
53 00 69 00 7a 00 65 00 20 00 6f 00 66 00 20 00 S.i.z.e. .o.f. .
27 00 44 00 69 00 67 00 69 00 74 00 61 00 6c 00 '.D.i.g.i.t.a.l.
50 00 72 00 6f 00 64 00 75 00 63 00 74 00 49 00 P.r.o.d.u.c.t.I.
64 00 27 00 20 00 6e 00 6f 00 74 00 20 00 65 00 d.'. .n.o.t. .e.
71 00 75 00 61 00 6c 00 20 00 25 00 6c 00 75 00 q.u.a.l. .%.l.u.
20 00 6f 00 72 00 20 00 76 00 65 00 72 00 73 00 .o.r. .v.e.r.s.
69 00 6f 00 6e 00 20 00 6e 00 6f 00 74 00 20 00 i.o.n. .n.o.t. .
65 00 71 00 75 00 61 00 6c 00 20 00 33 00 2e 00 e.q.u.a.l. .3...
30 00 0a 00 00 00 00 00 0a 00 44 00 69 00 67 00 0.........D.i.g.
69 00 74 00 61 00 6c 00 50 00 72 00 6f 00 64 00 i.t.a.l.P.r.o.d.
75 00 63 00 74 00 49 00 64 00 3a 00 20 00 73 00 u.c.t.I.d.:. .s.
69 00 7a 00 65 00 20 00 3d 00 20 00 25 00 6c 00 i.z.e. .=. .%.l.
75 00 0a 00 09 00 50 00 72 00 6f 00 64 00 75 00 u.....P.r.o.d.u.
63 00 74 00 20 00 49 00 44 00 3a 00 09 00 09 00 c.t. .I.D.:.....
25 00 68 00 73 00 0a 00 09 00 45 00 64 00 69 00 %.h.s.....E.d.i.
74 00 69 00 6f 00 6e 00 20 00 49 00 44 00 3a 00 t.i.o.n. .I.D.:.
09 00 09 00 25 00 68 00 73 00 0a 00 09 00 4f 00 ....%.h.s.....O.
45 00 4d 00 20 00 49 00 44 00 3a 00 09 00 09 00 E.M. .I.D.:.....
09 00 25 00 2e 00 38 00 68 00 73 00 0a 00 09 00 ..%...8.h.s.....
48 00 61 00 72 00 64 00 77 00 61 00 72 00 65 00 H.a.r.d.w.a.r.e.
20 00 49 00 44 00 20 00 28 00 73 00 74 00 61 00 .I.D. .(.s.t.a.
74 00 69 00 63 00 29 00 3a 00 09 00 25 00 2e 00 t.i.c.).:...%...
38 00 68 00 73 00 0a 00 09 00 48 00 61 00 72 00 8.h.s.....H.a.r.
64 00 77 00 61 00 72 00 65 00 20 00 49 00 44 00 d.w.a.r.e. .I.D.
20 00 28 00 64 00 79 00 6e 00 61 00 6d 00 69 00 .(.d.y.n.a.m.i.
63 00 29 00 3a 00 09 00 25 00 2e 00 38 00 68 00 c.).:...%...8.h.
73 00 0a 00 00 00 00 00 50 00 72 00 6f 00 64 00 s.......P.r.o.d.
75 00 63 00 74 00 20 00 6b 00 65 00 79 00 20 00 u.c.t. .k.e.y. .
27 00 25 00 6c 00 73 00 27 00 20 00 69 00 73 00 '.%.l.s.'. .i.s.
20 00 76 00 61 00 6c 00 69 00 64 00 21 00 0a 00 .v.a.l.i.d.!...
00 00 00 00 25 00 6c 00 73 00 28 00 29 00 20 00 ....%.l.s.(.). .
72 00 65 00 74 00 75 00 72 00 6e 00 65 00 64 00 r.e.t.u.r.n.e.d.
20 00 65 00 72 00 72 00 6f 00 72 00 20 00 30 00 .e.r.r.o.r. .0.
78 00 25 00 30 00 38 00 6c 00 58 00 0a 00 00 00 x.%.0.8.l.X.....
50 00 69 00 64 00 47 00 65 00 6e 00 58 00 00 00 P.i.d.G.e.n.X...
44 00 61 00 74 00 61 00 20 00 66 00 69 00 6c 00 D.a.t.a. .f.i.l.
65 00 20 00 27 00 25 00 6c 00 73 00 27 00 20 00 e. .'.%.l.s.'. .
6e 00 6f 00 74 00 20 00 66 00 6f 00 75 00 6e 00 n.o.t. .f.o.u.n.
64 00 21 00 0a 00 00 00 50 00 72 00 6f 00 64 00 d.!.....P.r.o.d.
75 00 63 00 74 00 20 00 6b 00 65 00 79 00 20 00 u.c.t. .k.e.y. .
27 00 25 00 6c 00 73 00 27 00 20 00 69 00 73 00 '.%.l.s.'. .i.s.
20 00 6d 00 61 00 6c 00 66 00 6f 00 72 00 6d 00 .m.a.l.f.o.r.m.
65 00 64 00 21 00 0a 00 00 00 00 00 50 00 72 00 e.d.!.......P.r.
6f 00 64 00 75 00 63 00 74 00 20 00 6b 00 65 00 o.d.u.c.t. .k.e.
79 00 20 00 27 00 25 00 6c 00 73 00 27 00 20 00 y. .'.%.l.s.'. .
69 00 73 00 20 00 69 00 6e 00 76 00 61 00 6c 00 i.s. .i.n.v.a.l.
69 00 64 00 21 00 0a 00 00 00 00 00 00 00 00 00 i.d.!...........
50 00 72 00 6f 00 64 00 75 00 63 00 74 00 20 00 P.r.o.d.u.c.t. .
6b 00 65 00 79 00 20 00 27 00 25 00 6c 00 73 00 k.e.y. .'.%.l.s.
27 00 20 00 69 00 73 00 20 00 72 00 65 00 73 00 '. .i.s. .r.e.s.
65 00 72 00 76 00 65 00 64 00 21 00 0a 00 00 00 e.r.v.e.d.!.....
44 00 55 00 4d 00 4d 00 59 00 00 00 00 00 00 00 D.U.M.M.Y.......
4c 00 69 00 62 00 72 00 61 00 72 00 79 00 20 00 L.i.b.r.a.r.y. .
76 00 65 00 72 00 73 00 69 00 6f 00 6e 00 20 00 v.e.r.s.i.o.n. .
3d 00 20 00 25 00 68 00 75 00 2e 00 25 00 68 00 =. .%.h.u...%.h.
75 00 3a 00 25 00 68 00 75 00 2e 00 25 00 68 00 u.:.%.h.u...%.h.
75 00 0a 00 50 00 72 00 6f 00 64 00 75 00 63 00 u...P.r.o.d.u.c.
74 00 20 00 76 00 65 00 72 00 73 00 69 00 6f 00 t. .v.e.r.s.i.o.
6e 00 20 00 3d 00 20 00 25 00 68 00 75 00 2e 00 n. .=. .%.h.u...
25 00 68 00 75 00 3a 00 25 00 68 00 75 00 2e 00 %.h.u.:.%.h.u...
25 00 68 00 75 00 0a 00 00 00 00 00 4c 00 6f 00 %.h.u.......L.o.
63 00 6b 00 52 00 65 00 73 00 6f 00 75 00 72 00 c.k.R.e.s.o.u.r.
63 00 65 00 28 00 29 00 20 00 72 00 65 00 74 00 c.e.(.). .r.e.t.
75 00 72 00 6e 00 65 00 64 00 20 00 4e 00 55 00 u.r.n.e.d. .N.U.
4c 00 4c 00 0a 00 00 00 4c 00 6f 00 61 00 64 00 L.L.....L.o.a.d.
52 00 65 00 73 00 6f 00 75 00 72 00 63 00 65 00 R.e.s.o.u.r.c.e.
00 00 00 00 46 00 69 00 6e 00 64 00 52 00 65 00 ....F.i.n.d.R.e.
73 00 6f 00 75 00 72 00 63 00 65 00 00 00 00 00 s.o.u.r.c.e.....
47 00 65 00 74 00 50 00 72 00 6f 00 63 00 41 00 G.e.t.P.r.o.c.A.
64 00 64 00 72 00 65 00 73 00 73 00 00 00 00 00 d.d.r.e.s.s.....
50 69 64 47 65 6e 58 00 4c 00 6f 00 61 00 64 00 PidGenX.L.o.a.d.
4c 00 69 00 62 00 72 00 61 00 72 00 79 00 45 00 L.i.b.r.a.r.y.E.
78 00 00 00 00 00 00 00 42 00 61 00 64 00 20 00 x.......B.a.d. .
61 00 72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 a.r.g.u.m.e.n.t.
73 00 3a 00 20 00 74 00 68 00 65 00 20 00 28 00 s.:. .t.h.e. .(.
61 00 62 00 73 00 6f 00 6c 00 75 00 74 00 65 00 a.b.s.o.l.u.t.e.
20 00 6f 00 72 00 20 00 72 00 65 00 6c 00 61 00 .o.r. .r.e.l.a.
74 00 69 00 76 00 65 00 29 00 20 00 70 00 61 00 t.i.v.e.). .p.a.
74 00 68 00 20 00 6e 00 61 00 6d 00 65 00 73 00 t.h. .n.a.m.e.s.
20 00 6f 00 66 00 20 00 61 00 20 00 27 00 50 00 .o.f. .a. .'.P.
69 00 64 00 47 00 65 00 6e 00 58 00 2e 00 64 00 i.d.G.e.n.X...d.
6c 00 6c 00 27 00 20 00 61 00 6e 00 64 00 0a 00 l.l.'. .a.n.d...
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 69 00 . . . . . . .i.
74 00 73 00 20 00 61 00 73 00 73 00 6f 00 63 00 t.s. .a.s.s.o.c.
69 00 61 00 74 00 65 00 64 00 20 00 27 00 50 00 i.a.t.e.d. .'.P.
4b 00 65 00 79 00 43 00 6f 00 6e 00 66 00 69 00 K.e.y.C.o.n.f.i.
67 00 5b 00 2a 00 5d 00 2e 00 78 00 72 00 6d 00 g.[.*.]...x.r.m.
2d 00 6d 00 73 00 27 00 20 00 58 00 72 00 4d 00 -.m.s.'. .X.r.M.
4c 00 20 00 66 00 69 00 6c 00 65 00 20 00 70 00 L. .f.i.l.e. .p.
6c 00 75 00 73 00 20 00 61 00 74 00 20 00 6c 00 l.u.s. .a.t. .l.
65 00 61 00 73 00 74 00 0a 00 20 00 20 00 20 00 e.a.s.t... . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 6f 00 6e 00 65 00 20 00 . . . .o.n.e. .
70 00 72 00 6f 00 64 00 75 00 63 00 74 00 20 00 p.r.o.d.u.c.t. .
6b 00 65 00 79 00 20 00 27 00 32 00 33 00 34 00 k.e.y. .'.2.3.4.
36 00 37 00 2d 00 38 00 39 00 42 00 43 00 44 00 6.7.-.8.9.B.C.D.
2d 00 46 00 47 00 48 00 4a 00 4b 00 2d 00 4d 00 -.F.G.H.J.K.-.M.
4e 00 50 00 51 00 52 00 2d 00 54 00 56 00 57 00 N.P.Q.R.-.T.V.W.
58 00 59 00 27 00 20 00 6d 00 75 00 73 00 74 00 X.Y.'. .m.u.s.t.
20 00 62 00 65 00 20 00 67 00 69 00 76 00 65 00 .b.e. .g.i.v.e.
6e 00 21 00 0a 00 00 00 25 00 6c 00 73 00 28 00 n.!.....%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 0a 00 00 00 43 00 6f 00 .%.l.u.....C.o.
6d 00 6d 00 61 00 6e 00 64 00 4c 00 69 00 6e 00 m.m.a.n.d.L.i.n.
65 00 54 00 6f 00 41 00 72 00 67 00 76 00 00 00 e.T.o.A.r.g.v...
b9 79 37 9e 00 00 00 00 68 00 00 00 45 54 41 44 .y7.....h...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 10 29 40 00 00 00 00 00 00 00 00 00 .....)@.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
bc 29 00 00 00 00 00 00 00 00 00 00 ee 2a 00 00 .)...........*..
00 20 00 00 fc 29 00 00 00 00 00 00 00 00 00 00 . ...)..........
0a 2b 00 00 40 20 00 00 00 00 00 00 00 00 00 00 .+..@ ..........
00 00 00 00 00 00 00 00 00 00 00 00 04 2a 00 00 .............*..
14 2a 00 00 22 2a 00 00 30 2a 00 00 3c 2a 00 00 .*.."*..0*..<*..
4a 2a 00 00 5a 2a 00 00 6a 2a 00 00 7a 2a 00 00 J*..Z*..j*..z*..
8c 2a 00 00 9e 2a 00 00 b0 2a 00 00 c0 2a 00 00 .*...*...*...*..
d0 2a 00 00 e0 2a 00 00 00 00 00 00 fc 2a 00 00 .*...*.......*..
00 00 00 00 24 05 57 72 69 74 65 43 6f 6e 73 6f ....$.WriteConso
6c 65 57 00 19 01 45 78 69 74 50 72 6f 63 65 73 leW...ExitProces
73 00 52 00 43 6c 6f 73 65 48 61 6e 64 6c 65 00 s.R.CloseHandle.
48 03 4c 6f 63 61 6c 46 72 65 65 00 62 01 46 72 H.LocalFree.b.Fr
65 65 4c 69 62 72 61 72 79 00 54 03 4c 6f 63 6b eeLibrary.T.Lock
52 65 73 6f 75 72 63 65 00 00 41 03 4c 6f 61 64 Resource..A.Load
52 65 73 6f 75 72 63 65 00 00 4e 01 46 69 6e 64 Resource..N.Find
52 65 73 6f 75 72 63 65 57 00 45 02 47 65 74 50 ResourceW.E.GetP
72 6f 63 41 64 64 72 65 73 73 00 00 3e 03 4c 6f rocAddress..>.Lo
61 64 4c 69 62 72 61 72 79 45 78 57 00 00 87 01 adLibraryExW....
47 65 74 43 6f 6d 6d 61 6e 64 4c 69 6e 65 57 00 GetCommandLineW.
02 02 47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 ..GetLastError..
64 02 47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 d.GetStdHandle..
73 04 53 65 74 4c 61 73 74 45 72 72 6f 72 00 00 s.SetLastError..
44 03 4c 6f 63 61 6c 41 6c 6c 6f 63 00 00 4b 45 D.LocalAlloc..KE
52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 77 76 RNEL32.dll..5.wv
73 70 72 69 6e 74 66 57 00 00 55 53 45 52 33 32 sprintfW..USER32
2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 .dll............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file PIDGENX.TXT
created in
step 3. to recreate the console application
Product Key Validator:
CERTUTIL.EXE /DecodeHex /V PIDGENX.TXT PIDGENX.COM
Input Length = 21760 Output Length = 5120 CertUtil: -decodehex command completed successfully.
.pol
, are used either to store the
Registry keys and entries (to be) applied by
Group Policies as well as
Local Security Policies, or to restore the previous
contents of Registry keys and entries modified by
Group Policies as well as
Local Security Policies.
The MSDN article Registry Policy File Format documents their format.
The MSKB
article
How to add, modify, or delete registry subkeys and values by using a .reg file
documents the format of Registry Editor script files,
typically created with the extension .reg
.
POLYGLOT.COM [ /MACHINE | /USER ] ‹file name› …
NTUser.pol
and
Registry.pol
files that are (eventually) present on
your machine:
VER .\POLYGLOT.COM "%USERPROFILE%\NTUser.pol" "%ALLUSERSPROFILE%\NTUser.pol" "%SystemRoot%\System32\GroupPolicy\Machine\Registry.pol" "%SystemRoot%\System32\GroupPolicy\User\Registry.pol" NET.EXE HelpMsg %ERRORLEVEL%Net services commands Ver
Microsoft Windows [Version 10.0.19044.2486] Windows Registry Editor Version 5.00 ; Registry Policy File 'C:\Users\Stefan\NTUser.pol' [HKEY_RELATIVE\Software\Policies\Microsoft\Windows\Group Policy Objects\Local Group Policy Objects] '**Comment:GPO Name: Local Group Policy Objects'= [HKEY_RELATIVE\Software\Microsoft\Windows\CurrentVersion\Policies\System] 'LogonHoursAction'=dword:00000002 'DontDisplayLogonHoursWarnings'=dword:00000001 Windows Registry Editor Version 5.00 ; Registry Policy File 'C:\ProgramData\NTUser.pol' [HKEY_RELATIVE\Software\Policies\Microsoft\Windows\Group Policy Objects\Local Group Policy Objects] '**Comment:GPO Name: Local Group Policy Objects'= Windows Registry Editor Version 5.00 ; Registry Policy File 'C:\Windows\System32\GroupPolicy\Machine\Registry.pol' [HKEY_RELATIVE\Software\Policies\Microsoft\SystemCertificates\TrustedPublisher\Safer] 'AuthentiCodeFlags'=dword:00000300 [HKEY_RELATIVE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers] 'PolicyScope'=dword:00000001 'TransparentEnabled'=dword:00000002 'ExecutableTypes'=multi:'WSF','WSC','VBS','VBE','VB','TMP','SHS','SCR','PIF','PCD','OCX','MST','MSP','MSI','MDE','MDB','JSE','JS','ISP','INS','HTA','HLP','EXE','DLL','CRT','CPL','COM','CMD','BAT','BAS','AX','ADP','ADE' 'DefaultLevel'=dword:00000000 'Levels'=dword:00071000 'LogFileName'='C:\Windows\System32\LogFiles\SAFER.Log' 'AuthenticodeEnabled'=dword:00000001 [HKEY_RELATIVE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\0\Hashes] @=none: [HKEY_RELATIVE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{191cd7fa-f240-4a17-8986-94d480a6c8ca}] 'LastModified'=qword:01cf68d87b202417 'Description'='' 'SaferFlags'=dword:00000000 'ItemData'=expand:'%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRoot%' [HKEY_RELATIVE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{d2c34ab2-529a-46b2-b293-fc853fce72ea}] 'LastModified'=qword:01cf68d87b202417 'Description'='' 'SaferFlags'=dword:00000000 'ItemData'=expand:'%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir%' [HKEY_RELATIVE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{4fcf2556-cf02-4356-ad71-f82ca93ccd0b}] 'LastModified'=qword:01cf68d979215214 'Description'='' 'SaferFlags'=dword:00000000 'ItemData'=expand:'%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir (x86)%' [HKEY_RELATIVE\Software\Policies\Microsoft\Windows\Safer\CodeIdentifiers\262144\Paths\{21c0b260-2d89-4fe0-8275-1c76746b3d2b}] 'LastModified'=qword:01d57587bb48c5c4 'Description'='' 'SaferFlags'=dword:00000000 'ItemData'=expand:'%HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramW6432Dir%' CreateFile() returned error 3 for file 'C:\Windows\System32\GroupPolicy\User\Registry.pol' The system cannot find the path specified.
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and POLYGLOT.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file POLYGLOT.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#define REGFILE_SIGNATURE 'geRP'
#define REGISTRY_FILE_VERSION 1UL
typedef unsigned long long QWORD, *LPQWORD;
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
const LPCWSTR szHKEY[8] = {L"HKEY_CLASSES_ROOT",
L"HKEY_CURRENT_USER",
L"HKEY_LOCAL_MACHINE",
L"HKEY_USERS",
L"HKEY_PERFORMANCE_DATA",
L"HKEY_CURRENT_CONFIG",
L"HKEY_DYN_DATA",
L"HKEY_CURRENT_USER_LOCAL_SETTINGS"};
const LPCWSTR szTYPE[12] = {L"NONE",
L"SZ",
L"EXPAND_SZ",
L"BINARY",
L"DWORD", // alias DWORD_LITTLE_ENDIAN
L"DWORD_BIG_ENDIAN",
L"LINK",
L"MULTI_SZ",
L"RESOURCE_LIST",
L"FULL_RESOURCE_DESCRIPTOR",
L"RESOURCE_REQUIREMENTS_LIST",
L"QWORD"}; // alias QWORD_LITTLE_ENDIAN
const LPCWSTR szType[12] = {L"none:",
L"",
L"expand:",
L"hex:",
L"dword:",
L"dword:",
L"link:",
L"multi:",
L"hex(8):",
L"hex(9):",
L"hex(a):",
L"qword:"};
DWORD WINAPI Polyglot(HANDLE hConsole, HKEY hkHKEY, LPCWSTR lpArgument)
{
#ifdef REGISTRY
LPCWSTR lpHKEY = szHKEY[(DWORD) hkHKEY ^ (DWORD) HKEY_CLASSES_ROOT];
HKEY hkKey;
BYTE cbData[65536];
#endif
HANDLE hInput;
DWORD dwInput;
LPCWSTR lpInput;
WCHAR cwInput;
HANDLE hPolicy;
DWORD dwPolicy;
LPDWORD lpPolicy;
LPCWSTR lpKey, lpValue, lpData, lp;
DWORD dwKey, dwValue, dwData, dwType, dwSize;
DWORD dwError = ERROR_SUCCESS;
hInput = CreateFile(lpArgument,
FILE_READ_DATA,
FILE_SHARE_READ,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
(HANDLE) NULL);
if (hInput == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"CreateFile() returned error %lu for file \'%ls\'\n",
dwError = GetLastError(), lpArgument);
else
{
dwInput = GetFileSize(hInput, (LPDWORD) NULL);
if (dwInput == INVALID_FILE_SIZE)
PrintConsole(hConsole,
L"GetFileSize() returned error %lu for file \'%ls\'\n",
dwError = GetLastError(), lpArgument);
else
{
hPolicy = CreateFileMapping(hInput,
(LPSECURITY_ATTRIBUTES) NULL,
PAGE_READONLY,
0, 0,
(LPCWSTR) NULL);
if (hPolicy == NULL)
PrintConsole(hConsole,
L"CreateFileMapping() returned error %lu for file \'%ls\'\n",
dwError = GetLastError(), lpArgument);
else
{
lpPolicy = MapViewOfFile(hPolicy,
FILE_MAP_READ,
0, 0,
(SIZE_T) 0);
if (lpPolicy == NULL)
PrintConsole(hConsole,
L"MapViewOfFile() returned error %lu for file \'%ls\'\n",
dwError = GetLastError(), lpArgument);
else
{
if ((lpPolicy[0] != REGFILE_SIGNATURE)
|| (lpPolicy[1] != REGISTRY_FILE_VERSION))
PrintConsole(hConsole,
L"Signature \'PReg\\1\\0\\0\\0\' missing in file \'%ls\'!\n",
lpArgument);
else
{
PrintConsole(hConsole,
L"Windows Registry Editor Version 5.00\n"
L"\n"
L"; Registry Policy File \'%ls\'\n",
lpArgument);
// L'[' key L']'
// L'[' key L';' value L';' type L';' size L';' data L']'
// L'[' key L';' L"**Del." value L';' type L';' size L';' data L']'
// L'[' key L';' L"**DeleteKeys" { L';' key } ... L']'
// L'[' key L';' L"**DeleteVals" L']'
// L'[' key L';' L"**DeleteValues" { L';' value } ... L']'
// L'[' key L';' L"**SecureKey=0" L']'
// L'[' key L';' L"**SecureKey=1" L']'
//
// WCHAR key[] NUL-terminated path of registry key beneath
// HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER
//
// WCHAR value[] NUL-terminated name of registry entry
//
// DWORD type registry data type
//
// DWORD size size of registry data in bytes
//
// BYTE data[] registry data
lpInput = (LPCWSTR) (lpPolicy + 2);
lpKey = NULL;
dwKey = 0;
dwPolicy = dwInput;
while ((LPBYTE) lpInput < (LPBYTE) lpPolicy + dwPolicy)
{
if (*lpInput++ != L'[')
break;
dwInput = wcslen(lpInput);
if ((dwKey == 0)
|| (dwKey != dwInput)
|| (memcmp(lpInput, lpKey, dwKey * sizeof(L'\0')) != 0))
PrintConsole(hConsole,
L"\n"
L"[HKEY_RELATIVE\\%ls]\n",
lpInput);
lpKey = lpInput;
dwKey = dwInput;
lpInput += dwInput + 1;
cwInput = *lpInput++;
if (cwInput == L']')
continue;
if (cwInput != L';')
break;
lpValue = lpInput;
dwValue = wcslen(lpInput);
lpInput += dwValue + 1;
if ((dwValue == sizeof("**securekey=1") - 1)
&& ((memcmp(lpValue, L"**securekey=1", sizeof(L"**securekey=1") - sizeof(L"")) == 0)
|| (memcmp(lpValue, L"**SecureKey=1", sizeof(L"**Securekey=1") - sizeof(L"")) == 0)))
{
PrintConsole(hConsole,
L"; SecureKey=1\n");
if (*lpInput++ != L']')
break;
}
else if ((dwValue == sizeof("**securekey=0") - 1)
&& ((memcmp(lpValue, L"**securekey=0", sizeof(L"**securekey=0") - sizeof(L"")) == 0)
|| (memcmp(lpValue, L"**SecureKey=0", sizeof(L"**Securekey=0") - sizeof(L"")) == 0)))
{
PrintConsole(hConsole,
L"; SecureKey=0\n");
if (*lpInput++ != L']')
break;
}
else if ((dwValue == sizeof("**deletevals") - 1)
&& ((memcmp(lpValue, L"**deletevals", sizeof(L"**deletevals") - sizeof(L"")) == 0)
|| (memcmp(lpValue, L"**Deletevals", sizeof(L"**Deletevals") - sizeof(L"")) == 0)))
{
PrintConsole(hConsole,
L"*=-\n");
if (*lpInput++ != L']')
break;
}
else if ((dwValue == sizeof("**deletevalues") - 1)
&& ((memcmp(lpValue, L"**deletevalues", sizeof(L"**deletevalues") - sizeof(L"")) == 0)
|| (memcmp(lpValue, L"**Deletevalues", sizeof(L"**Deletevalues") - sizeof(L"")) == 0)))
{
while (*lpInput == L';')
{
PrintConsole(hConsole,
L"\'%ls\'=-\n",
++lpInput);
lpInput += wcslen(lpInput) + 1;
}
if (*lpInput++ != L']')
break;
}
else if ((dwValue == sizeof("**deletekeys") - 1)
&& ((memcmp(lpValue, L"**deletekeys", sizeof(L"**deletekeys") - sizeof(L"")) == 0)
|| (memcmp(lpValue, L"**Deletekeys", sizeof(L"**Deletekeys") - sizeof(L"")) == 0)))
{
while (*lpInput == L';')
{
PrintConsole(hConsole,
L"[-HKEY_RELATIVE\\%ls\\%ls]\n",
lpKey, ++lpInput);
lpInput += wcslen(lpInput) + 1;
}
if (*lpInput++ != L']')
break;
}
else
{
if ((dwValue > sizeof("**del."))
&& ((memcmp(lpValue, L"**del.", sizeof(L"**del.") - sizeof(L"")) == 0)
|| (memcmp(lpValue, L"**Del.", sizeof(L"**Del.") - sizeof(L"")) == 0)))
{
lpValue += sizeof("**Del.") - 1;
if (dwValue == sizeof("**Del.") - 1)
PrintConsole(hConsole,
L"@=- ; =");
else
PrintConsole(hConsole,
L"\'%ls\'=- ; =", lpValue);
}
else
if (dwValue == 0)
PrintConsole(hConsole,
L"@=");
else
PrintConsole(hConsole,
L"\'%ls\'=", lpValue);
cwInput = *lpInput++;
if (cwInput == L']')
continue;
if (cwInput != L';')
break;
dwType = *((LPDWORD) lpInput)++;
if (dwType < sizeof(szType) / sizeof(*szType))
PrintConsole(hConsole,
L"%ls", szType[dwType]);
else
PrintConsole(hConsole,
L"hex(%lx):", dwType);
cwInput = *lpInput++;
if (cwInput == L']')
continue;
if (cwInput != L';')
break;
dwSize = *((LPDWORD) lpInput)++;
cwInput = *lpInput++;
if (cwInput == L']')
continue;
if (cwInput != L';')
break;
lpData = lpInput;
(LPBYTE) lpInput += dwSize;
switch (dwType)
{
case REG_SZ:
case REG_EXPAND_SZ:
case REG_LINK:
if (dwSize == 0)
goto NEWLINE;
PrintConsole(hConsole,
L"\'%ls\'\n",
lpData);
dwData = wcslen(lpData);
if (dwSize != (dwData + 1) * sizeof(L'\0'))
PrintConsole(hConsole,
L"Size %lu of REG_%ls value data not equal length %lu of string plus terminating \'NUL\' character!\n",
dwSize, szTYPE[dwType], dwData);
break;
case REG_DWORD_BIG_ENDIAN:
*(LPDWORD) lpData = _byteswap_ulong(*(LPDWORD) lpData);
case REG_DWORD_LITTLE_ENDIAN:
// case REG_DWORD:
PrintConsole(hConsole,
L"%08lx\n",
*(LPDWORD) lpData);
if (dwSize != sizeof(DWORD))
PrintConsole(hConsole,
L"Size %lu of REG_%ls value data not equal \'sizeof(DWORD)\'!\n",
dwSize, szTYPE[dwType]);
break;
case REG_QWORD_LITTLE_ENDIAN:
// case REG_QWORD:
PrintConsole(hConsole,
L"%016I64x\n",
*(LPQWORD) lpData);
if (dwSize != sizeof(QWORD))
PrintConsole(hConsole,
L"Size %lu of REG_QWORD value data not equal \'sizeof(QWORD)\'!\n",
dwSize);
break;
case REG_MULTI_SZ:
if (dwSize == 0)
goto NEWLINE;
for (lp = lpData; (lp < lpInput) && (*lp != L'\0'); lp += wcslen(lp) + 1)
PrintConsole(hConsole,
L",\'%ls\'" + (lp == lpData),
lp);
PrintConsole(hConsole,
L"\n");
if ((lp > lpInput) || (*lp != L'\0'))
PrintConsole(hConsole,
L"REG_MULTI_SZ value data not terminated with extra \'NUL\' character!\n");
else
lp++;
if (lp != lpInput)
PrintConsole(hConsole,
L"Size %lu of REG_MULTI_SZ value data not equal sum of string lengths plus terminating \'NUL\' characters!\n",
dwSize);
break;
// case REG_NONE:
// case REG_BINARY:
// case REG_RESOURCE_LIST:
// case REG_FULL_RESOURCE_DESCRIPTOR:
// case REG_RESOURCE_REQUIREMENTS_LIST:
default:
for (lp = lpData; lp < lpInput; (LPBYTE) lp += 1)
PrintConsole(hConsole,
L",%02x" + (lp == lpData),
*(LPBYTE) lp);
NEWLINE:
PrintConsole(hConsole,
L"\n");
}
#ifdef REGISTRY
if (hkHKEY != HKEY_CLASSES_ROOT)
{
dwError = RegOpenKeyEx(hkHKEY,
lpKey,
REG_OPTION_RESERVED,
KEY_QUERY_VALUE,
&hkKey);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"RegOpenKeyEx() returned error %lu for registry key \'%ls\\%ls\'\n",
dwError, lpHKEY, lpKey);
else
{
dwData = sizeof(cbData);
dwError = RegQueryValueEx(hkKey,
lpValue,
(LPDWORD) NULL,
&dwValue,
cbData,
&dwData);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"RegQueryValueEx() returned error %lu for value \'%ls\' of registry key \'%ls\\%ls\'\n",
dwError, lpValue, lpHKEY, lpKey);
else
if ((dwValue != dwType)
|| (dwData != dwSize)
|| (memcmp(lpData, cbData, dwData) != 0))
PrintConsole(hConsole,
L"MISMATCH: data type, size or value in policy file differs from registry!\n");
dwError = RegCloseKey(hkKey);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"RegCloseKey() returned error %lu for registry key \'%ls\\%ls\'\n",
dwError, lpHKEY, lpKey);
}
}
#endif // REGISTRY
if (*lpInput++ != L']')
break;
}
}
if ((LPBYTE) lpInput != (LPBYTE) lpPolicy + dwPolicy)
PrintConsole(hConsole,
L"Format error in policy file \'%ls\'!\n",
lpArgument);
}
if (!UnmapViewOfFile(lpPolicy))
PrintConsole(hConsole,
L"UnmapViewOfFile() returned error %lu for file \'%ls\'\n",
GetLastError(), lpArgument);
}
if (!CloseHandle(hPolicy))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu for file mapping \'%ls\'\n",
GetLastError(), lpArgument);
}
}
if (!CloseHandle(hInput))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu for file \'%ls\'\n",
GetLastError(), lpArgument);
}
return dwError;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
#ifdef WILDCARD
WIN32_FIND_DATA wfd;
HANDLE hArgument;
DWORD dwArgument;
WCHAR szArgument[32768];
LPWSTR lpArgument;
#endif
LPWSTR *lpArguments;
INT nArguments;
INT nArgument = 1;
DWORD dwError = ERROR_BAD_ARGUMENTS;
HKEY hkHKEY = HKEY_CLASSES_ROOT;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
#ifdef REGISTRY
if ((nArguments > 1)
&& (*lpArguments[1] == L'/'))
#if 0
if (wcscmp(lpArguments[1], L"/MACHINE") == 0)
#elif 0
if (wmemcmp(lpArguments[1], L"/MACHINE", sizeof("/MACHINE")) == 0)
#else
if (memcmp(lpArguments[1], L"/MACHINE", sizeof(L"/MACHINE")) == 0)
#endif
{
hkHKEY = HKEY_LOCAL_MACHINE;
nArgument = 2;
}
#if 0
else if (wcscmp(lpArguments[1], L"/USER") == 0)
#elif 0
else if (wmemcmp(lpArguments[1], L"/USER", sizeof("/USER")) == 0)
#else
else if (memcmp(lpArguments[1], L"/USER", sizeof(L"/USER")) == 0)
#endif
{
hkHKEY = HKEY_CURRENT_USER;
nArgument = 2;
}
else
{
PrintConsole(hConsole,
L"Bad arguments: optional first argument must be \'%ls\' or \'%ls\'!\n",
L"/MACHINE", L"/USER");
nArguments = 0;
}
if (nArguments <= nArgument)
#else
if (nArguments < 2)
#endif
PrintConsole(hConsole,
L"No arguments: at least one \'.pol\' file name must be given!\n");
else
#ifndef WILDCARD
do
dwError = Polyglot(hConsole, hkHKEY, lpArguments[nArgument]);
while (++nArgument < nArguments);
#else
do
{
hArgument = FindFirstFile(lpArguments[nArgument], &wfd);
if (hArgument == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"FindFirstFile() returned error %lu for argument \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
else
{
dwArgument = 0;
lpArgument = NULL;
do
{
szArgument[dwArgument] = lpArguments[nArgument][dwArgument];
if (szArgument[dwArgument] == L'\\')
lpArgument = szArgument + dwArgument;
}
while (szArgument[dwArgument++] != L'\0');
if (dwArgument > MAX_PATH)
PrintConsole(hConsole,
L"Argument \'%ls\' exceeds MAX_PATH!\n",
lpArguments[nArgument]);
if (lpArgument != NULL)
lpArgument++;
else
lpArgument = szArgument + 2 * (szArgument[1] == L':');
dwArgument = 0;
do
{
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
continue;
dwArgument++;
wcscpy(lpArgument, wfd.cFileName);
dwError = Polyglot(hConsole, hkHKEY, szArgument);
}
while (FindNextFile(hArgument, &wfd));
dwError = GetLastError();
if (dwError == ERROR_NO_MORE_FILES)
dwError = ERROR_SUCCESS;
else
PrintConsole(hConsole,
L"FindNextFile() returned error %lu for argument \'%ls\'\n",
dwError, lpArguments[nArgument]);
if (dwArgument == 0)
PrintConsole(hConsole,
L"No wildcard match for argument \'%ls\'!\n",
lpArguments[nArgument]);
if (!FindClose(hArgument))
PrintConsole(hConsole,
L"FindClose() returned error %lu for argument \'%ls\'\n",
GetLastError(), lpArguments[nArgument]);
}
} while (++nArgument < nArguments);
#endif // WILDCARD
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Note: with the preprocessor macro
REGISTRY
defined, an optional /MACHINE
or
/USER
is accepted as first command line argument to
compare the settings against the HKEY_LOCAL_MACHINE
or
HKEY_CURRENT_USER
branch of the
Registry!
Note: with the preprocessor macro
WILDCARD
defined, wildcard expansion of matching file
names is performed for the command line arguments!
Run the following four command lines to compile the source file
POLYGLOT.C
created in step 1., link the compiled
object file POLYGLOT.OBJ
and cleanup afterwards:
SET CL=/DREGISTRY /GAFS /Gs69632 /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /STACK:1048576,65536 /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FePOLYGLOT.COM POLYGLOT.C ADVAPI32.LIB KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE POLYGLOT.OBJFor 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. POLYGLOT.C POLYGLOT.C(313) : warning C4213: nonstandard extension used : cast on l-value POLYGLOT.C(330) : warning C4213: nonstandard extension used : cast on l-value POLYGLOT.C(341) : warning C4213: nonstandard extension used : cast on l-value POLYGLOT.C(425) : warning C4213: nonstandard extension used : cast on l-value Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file POLYGLOT.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 0c 00 00 ......#.........
00 14 00 00 00 00 00 00 d4 17 00 00 00 10 00 00 ................
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 40 00 00 00 02 00 00 ac e3 00 00 03 00 00 85 .@..............
00 00 10 00 00 00 01 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
40 30 00 00 50 00 00 00 00 00 00 00 00 00 00 00 @0..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 d8 2f 00 00 40 00 00 00 ........./..@...
00 00 00 00 00 00 00 00 00 20 00 00 54 00 00 00 ......... ..T...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
13 0b 00 00 00 10 00 00 00 0c 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 28 12 00 00 00 20 00 00 .const..(.... ..
00 14 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 4c 20 40 00 8b f0 .......P..L @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 10 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 38 00 01 00 8b 45 0c 53 8b 5d 10 56 57 ...8....E.S.].VW
33 ff 57 68 00 00 00 08 6a 03 57 6a 01 35 00 00 3.Wh....j.Wj.5..
00 80 8b 04 85 4c 23 40 00 6a 01 53 89 45 e4 89 .....L#@.j.S.E..
7d e8 ff 15 2c 20 40 00 8b f0 89 75 c8 83 fe ff }..., @....u....
75 14 ff 15 28 20 40 00 53 8b f0 56 68 2c 2e 40 u...( @.S..Vh,.@
00 e9 ff 06 00 00 57 56 ff 15 24 20 40 00 89 45 ......WV..$ @..E
fc 83 f8 ff 75 19 ff 15 28 20 40 00 53 8b f0 56 ....u...( @.S..V
68 14 2e 40 00 68 c0 2d 40 00 e9 b1 06 00 00 57 h..@.h.-@......W
57 57 6a 02 57 56 ff 15 20 20 40 00 89 45 d4 3b WWj.WV.. @..E.;
c7 75 11 ff 15 28 20 40 00 53 8b f0 56 68 9c 2d .u...( @.S..Vh.-
40 00 eb d1 57 57 57 6a 04 50 ff 15 1c 20 40 00 @...WWWj.P... @.
8b f0 89 75 d8 3b f7 75 24 ff 15 28 20 40 00 53 ...u.;.u$..( @.S
8b f0 56 68 80 2d 40 00 68 c0 2d 40 00 ff 75 08 ..Vh.-@.h.-@..u.
e8 db fe ff ff 83 c4 14 e9 34 06 00 00 81 3e 50 .........4....>P
52 65 67 0f 85 85 06 00 00 83 7e 04 01 0f 85 7b Reg.......~....{
06 00 00 53 68 f8 2c 40 00 ff 75 08 e8 af fe ff ...Sh.,@..u.....
ff 8b 45 fc 03 c6 8d 5e 08 83 c4 0c 89 7d f8 89 ..E....^.....}..
7d f0 89 45 dc 3b d8 0f 83 ad 05 00 00 eb 02 33 }..E.;.........3
ff 66 8b 03 83 c3 02 66 83 f8 5b 0f 85 99 05 00 .f.....f..[.....
00 8b c3 8d 50 02 66 8b 08 83 c0 02 66 3b cf 75 ....P.f.....f;.u
f5 2b c2 d1 f8 89 45 fc 39 7d f0 74 15 39 45 f0 .+....E.9}.t.9E.
75 10 8b 4d f0 8b 7d f8 03 c9 8b f3 33 c0 f3 a6 u..M..}.....3...
74 11 53 68 c8 2c 40 00 ff 75 08 e8 40 fe ff ff t.Sh.,@..u..@...
83 c4 0c 8b 45 fc 89 5d f8 8d 5c 43 02 89 45 f0 ....E..]..\C..E.
0f b7 03 83 c3 02 83 f8 5d 0f 84 32 05 00 00 83 ........]..2....
f8 3b 0f 85 32 05 00 00 8b d3 8b c3 89 55 f4 8d .;..2........U..
70 02 66 8b 08 83 c0 02 66 85 c9 75 f5 2b c6 d1 p.f.....f..u.+..
f8 6a 0d 59 89 45 ec 8d 5c 43 02 3b c1 75 60 bf .j.Y.E..\C.;.u`.
ac 2c 40 00 8b f2 33 c0 66 f3 a7 74 11 6a 0d 59 .,@...3.f..t.j.Y
bf 90 2c 40 00 8b f2 33 c0 66 f3 a7 75 14 68 70 ..,@...3.f..u.hp
2c 40 00 ff 75 08 e8 c5 fd ff ff 59 59 e9 c3 04 ,@..u......YY...
00 00 6a 0d 59 bf 54 2c 40 00 8b f2 33 c0 66 f3 ..j.Y.T,@...3.f.
a7 74 15 6a 0d 59 bf 38 2c 40 00 8b f2 33 c0 66 .t.j.Y.8,@...3.f
f3 a7 0f 85 fa 00 00 00 68 18 2c 40 00 eb c4 83 ........h.,@....
f8 0c 75 27 6a 06 59 bf fc 2b 40 00 8b f2 33 c0 ..u'j.Y..+@...3.
f3 a7 74 10 6a 06 59 bf e0 2b 40 00 8b f2 33 c0 ..t.j.Y..+@...3.
f3 a7 75 6d 68 d4 2b 40 00 eb 98 83 f8 0e 0f 85 ..umh.+@........
b9 00 00 00 6a 07 59 bf b4 2b 40 00 8b f2 33 c0 ....j.Y..+@...3.
f3 a7 74 42 6a 07 59 bf 94 2b 40 00 8b f2 33 c0 ..tBj.Y..+@...3.
f3 a7 0f 85 9a 00 00 00 eb 2c 83 c3 02 53 68 80 .........,...Sh.
2b 40 00 ff 75 08 e8 25 fd ff ff 8b c3 83 c4 0c +@..u..%........
8d 50 02 66 8b 08 83 c0 02 66 85 c9 75 f5 2b c2 .P.f.....f..u.+.
d1 f8 8d 5c 43 02 66 83 3b 3b 74 ce e9 04 04 00 ...\C.f.;;t.....
00 6a 06 59 bf 64 2b 40 00 8b f2 33 c0 f3 a7 74 .j.Y.d+@...3...t
41 6a 06 59 bf 48 2b 40 00 8b f2 33 c0 f3 a7 75 Aj.Y.H+@...3...u
41 eb 2f 83 c3 02 53 ff 75 f8 68 14 2b 40 00 ff A./...S.u.h.+@..
75 08 e8 c9 fc ff ff 8b c3 83 c4 10 8d 48 02 66 u............H.f
8b 10 83 c0 02 66 85 d2 75 f5 2b c1 d1 f8 8d 5c .....f..u.+....\
43 02 66 83 3b 3b 74 cb e9 a8 03 00 00 83 f8 07 C.f.;;t.........
76 40 6a 03 59 bf 04 2b 40 00 8b f2 33 c0 f3 a7 v@j.Y..+@...3...
74 10 6a 03 59 bf f4 2a 40 00 8b f2 33 c0 f3 a7 t.j.Y..*@...3...
75 1d 83 c2 0c 83 7d ec 06 89 55 f4 75 07 68 e4 u.....}...U.u.h.
2a 40 00 eb 16 ff 75 f4 68 cc 2a 40 00 eb 20 8b *@....u.h.*@.. .
45 ec 85 c0 75 11 68 c4 2a 40 00 ff 75 08 e8 4d E...u.h.*@..u..M
fc ff ff 59 59 eb 13 ff 75 f4 68 b4 2a 40 00 ff ...YY...u.h.*@..
75 08 e8 39 fc ff ff 83 c4 0c 0f b7 03 83 c3 02 u..9............
83 f8 5d 0f 84 38 03 00 00 83 f8 3b 0f 85 38 03 ..]..8.....;..8.
00 00 8b 03 89 45 fc 83 f8 0c 73 0e ff 34 85 9c .....E....s..4..
23 40 00 68 ac 2a 40 00 eb 06 50 68 98 2a 40 00 #@.h.*@...Ph.*@.
ff 75 08 e8 f8 fb ff ff 0f b7 43 04 83 c4 0c 83 .u........C.....
c3 06 83 f8 5d 0f 84 f6 02 00 00 83 f8 3b 0f 85 ....]........;..
f6 02 00 00 0f b7 43 04 8b 3b 83 c3 06 89 7d d0 ......C..;....}.
83 f8 5d 0f 84 d8 02 00 00 83 f8 3b 0f 85 d8 02 ..]........;....
00 00 8b 45 fc 8b f3 03 df 85 c0 0f 84 8a 01 00 ...E............
00 83 f8 02 0f 86 2b 01 00 00 83 f8 04 0f 84 e7 ......+.........
00 00 00 83 f8 05 0f 84 d8 00 00 00 83 f8 06 0f ................
84 10 01 00 00 83 f8 07 74 3d 83 f8 0b 0f 85 58 ........t=.....X
01 00 00 ff 76 04 ff 36 68 84 2a 40 00 ff 75 08 ....v..6h.*@..u.
e8 6b fb ff ff 83 c4 10 83 ff 08 0f 84 8b 01 00 .k..............
00 57 68 08 2a 40 00 ff 75 08 e8 51 fb ff ff 83 .Wh.*@..u..Q....
c4 0c e9 75 01 00 00 85 ff 0f 84 5e 01 00 00 8b ...u.......^....
fe 3b f3 73 3d 66 83 3f 00 74 37 33 c0 3b fe 0f .;.s=f.?.t73.;..
94 c0 57 8d 04 45 f4 29 40 00 50 ff 75 08 e8 1d ..W..E.)@.P.u...
fb ff ff 8b c7 83 c4 0c 8d 50 02 66 8b 08 83 c0 .........P.f....
02 66 85 c9 75 f5 2b c2 d1 f8 8d 7c 47 02 3b fb .f..u.+....|G.;.
72 c3 68 f0 29 40 00 ff 75 08 e8 f1 fa ff ff 59 r.h.)@..u......Y
59 3b fb 77 0b 66 83 3f 00 75 05 83 c7 02 eb 0f Y;.w.f.?.u......
68 68 29 40 00 ff 75 08 e8 d3 fa ff ff 59 59 3b hh)@..u......YY;
fb 0f 84 f5 00 00 00 ff 75 d0 68 98 28 40 00 e9 ........u.h.(@..
63 ff ff ff 8b 06 0f c8 89 06 ff 36 68 88 28 40 c..........6h.(@
00 ff 75 08 e8 a7 fa ff ff 83 c4 0c 83 ff 04 0f ..u.............
84 c7 00 00 00 8b 45 fc ff 34 85 6c 23 40 00 57 ......E..4.l#@.W
68 10 28 40 00 ff 75 08 e8 83 fa ff ff 83 c4 10 h.(@..u.........
e9 a7 00 00 00 85 ff 0f 84 90 00 00 00 56 68 fc .............Vh.
27 40 00 ff 75 08 e8 65 fa ff ff 8b c6 83 c4 0c '@..u..e........
8d 50 02 66 8b 08 83 c0 02 66 85 c9 75 f5 2b c2 .P.f.....f..u.+.
d1 f8 8d 4c 00 02 89 45 e0 3b f9 74 6f 50 8b 45 ...L...E.;.toP.E
fc ff 34 85 6c 23 40 00 57 68 38 27 40 00 ff 75 ..4.l#@.Wh8'@..u
08 e8 2a fa ff ff 83 c4 14 eb 51 8b fe 3b f3 73 ..*.......Q..;.s
3c 0f b6 07 8b c8 c1 e8 04 0f b7 04 45 14 27 40 <...........E.'@
00 83 e1 0f 0f b7 0c 4d 14 27 40 00 51 50 33 c0 .......M.'@.QP3.
3b fe 0f 94 c0 8d 04 45 04 27 40 00 50 ff 75 08 ;......E.'@.P.u.
e8 eb f9 ff ff 83 c4 10 47 3b fb 72 c4 68 f0 29 ........G;.r.h.)
40 00 ff 75 08 e8 d6 f9 ff ff 59 59 81 7d 0c 00 @..u......YY.}..
00 00 80 0f 84 cc 00 00 00 8d 45 cc 50 6a 01 6a ..........E.Pj.j
00 ff 75 f8 ff 75 0c ff 15 04 20 40 00 89 45 e8 ..u..u.... @..E.
85 c0 74 11 ff 75 f8 ff 75 e4 50 68 e8 26 40 00 ..t..u..u.Ph.&@.
e9 90 00 00 00 8d 45 e0 50 8d 85 c8 ff fe ff 50 ......E.P......P
8d 45 ec 50 6a 00 ff 75 f4 c7 45 e0 00 00 01 00 .E.Pj..u..E.....
ff 75 cc ff 15 00 20 40 00 85 c0 74 21 ff 75 f8 .u.... @...t!.u.
ff 75 e4 ff 75 f4 50 68 c8 26 40 00 68 40 26 40 .u..u.Ph.&@.h@&@
00 ff 75 08 e8 57 f9 ff ff 83 c4 1c eb 2b 8b 45 ..u..W.......+.E
fc 39 45 ec 75 14 8b 4d e0 3b 4d d0 75 0c 8d bd .9E.u..M.;M.u...
c8 ff fe ff 33 c0 f3 a6 74 0f 68 a8 25 40 00 ff ....3...t.h.%@..
75 08 e8 29 f9 ff ff 59 59 ff 75 cc ff 15 08 20 u..)...YY.u....
40 00 89 45 e8 85 c0 74 1c ff 75 f8 ff 75 e4 50 @..E...t..u..u.P
68 8c 25 40 00 68 20 25 40 00 ff 75 08 e8 fe f8 h.%@.h %@..u....
ff ff 83 c4 18 66 8b 03 83 c3 02 66 83 f8 5d 75 .....f.....f..]u
09 3b 5d dc 0f 82 55 fa ff ff 3b 5d dc 8b 5d 10 .;]...U...;]..].
74 11 53 68 d8 24 40 00 ff 75 08 e8 d0 f8 ff ff t.Sh.$@..u......
83 c4 0c 8b 75 d8 56 ff 15 18 20 40 00 85 c0 75 ....u.V... @...u
1d 53 ff 15 28 20 40 00 50 68 b4 24 40 00 68 c0 .S..( @.Ph.$@.h.
2d 40 00 ff 75 08 e8 a5 f8 ff ff 83 c4 14 8b 75 -@..u..........u
e8 ff 75 d4 ff 15 14 20 40 00 85 c0 75 1d 53 ff ..u.... @...u.S.
15 28 20 40 00 50 68 9c 24 40 00 68 38 24 40 00 .( @.Ph.$@.h8$@.
ff 75 08 e8 78 f8 ff ff 83 c4 14 ff 75 c8 ff 15 .u..x.......u...
14 20 40 00 85 c0 75 1d 53 ff 15 28 20 40 00 50 . @...u.S..( @.P
68 9c 24 40 00 68 c0 2d 40 00 ff 75 08 e8 4e f8 h.$@.h.-@..u..N.
ff ff 83 c4 14 5f 8b c6 5e 5b c9 c2 0c 00 53 68 ....._..^[....Sh
d0 23 40 00 ff 75 08 e8 34 f8 ff ff 83 c4 0c e9 .#@..u..4.......
62 ff ff ff 55 8b ec 83 ec 18 53 56 33 f6 46 6a b...U.....SV3.Fj
f4 89 75 f0 c7 45 f4 a0 00 00 00 c7 45 ec 00 00 ..u..E......E...
00 80 ff 15 3c 20 40 00 89 45 fc 83 f8 ff 75 0e ....< @..E....u.
ff 15 28 20 40 00 89 45 f4 e9 63 01 00 00 8d 45 ..( @..E..c....E
f8 50 ff 15 38 20 40 00 50 e8 5d 01 00 00 89 45 .P..8 @.P.]....E
e8 85 c0 75 14 ff 15 28 20 40 00 50 89 45 f4 68 ...u...( @.P.E.h
a8 2f 40 00 e9 ff 00 00 00 39 75 f8 0f 86 ce 00 ./@......9u.....
00 00 8b 40 04 66 83 38 2f 0f 85 9d 00 00 00 bb ...@.f.8/.......
94 2f 40 00 8b d3 8b c8 66 8b 31 66 3b 32 75 1e ./@.....f.1f;2u.
66 85 f6 74 15 66 8b 71 02 66 3b 72 02 75 0f 83 f..t.f.q.f;r.u..
c1 04 83 c2 04 66 85 f6 75 de 33 c9 eb 05 1b c9 .....f..u.3.....
83 d9 ff 85 c9 75 09 c7 45 ec 02 00 00 80 eb 3d .....u..E......=
be 88 2f 40 00 8b ce 66 8b 10 66 3b 11 75 1e 66 ../@...f..f;.u.f
85 d2 74 15 66 8b 50 02 66 3b 51 02 75 0f 83 c0 ..t.f.P.f;Q.u...
04 83 c1 04 66 85 d2 75 de 33 c0 eb 05 1b c0 83 ....f..u.3......
d8 ff 85 c0 75 10 c7 45 ec 01 00 00 80 c7 45 f0 ....u..E......E.
02 00 00 00 eb 16 56 53 68 08 2f 40 00 ff 75 fc ......VSh./@..u.
e8 1b f7 ff ff 83 c4 10 83 65 f8 00 8b 75 f0 39 .........e...u.9
75 f8 76 1c 8b 45 e8 ff 34 b0 ff 75 ec ff 75 fc u.v..E..4..u..u.
e8 49 f7 ff ff 46 89 45 f4 3b 75 f8 72 e6 eb 0f .I...F.E.;u.r...
68 90 2e 40 00 ff 75 fc e8 e3 f6 ff ff 59 59 ff h..@..u......YY.
75 e8 ff 15 34 20 40 00 85 c0 74 1c ff 15 28 20 u...4 @...t...(
40 00 50 68 78 2e 40 00 68 44 2e 40 00 ff 75 fc @.Phx.@.hD.@..u.
e8 bb f6 ff ff 83 c4 10 ff 75 fc ff 15 14 20 40 .........u.... @
00 85 c0 75 1c ff 15 28 20 40 00 50 68 9c 24 40 ...u...( @.Ph.$@
00 68 44 2e 40 00 ff 75 fc e8 92 f6 ff ff 83 c4 .hD.@..u........
10 ff 75 f4 ff 15 30 20 40 00 cc 55 8b ec 51 8b ..u...0 @..U..Q.
45 08 53 56 33 f6 57 8b f8 89 75 08 89 75 fc 39 E.SV3.W...u..u.9
75 0c 0f 84 6a 01 00 00 3b c6 0f 84 62 01 00 00 u...j...;...b...
0f b7 08 66 3b ce 0f 84 56 01 00 00 83 f9 20 74 ...f;...V..... t
0a 83 f9 09 74 05 33 db 43 eb 02 33 db 39 75 08 ....t.3.C..3.9u.
75 2b 66 83 f9 20 74 06 66 83 f9 09 75 1f 89 75 u+f.. t.f...u..u
fc 83 c0 02 0f b7 08 83 f9 20 74 f5 83 f9 09 74 ......... t....t
f0 33 c9 66 39 30 0f 95 c1 03 d9 eb 23 66 83 f9 .3.f90......#f..
5c 75 06 83 75 fc 01 eb 14 39 75 fc 75 0c 66 83 \u..u....9u.u.f.
f9 22 75 06 83 75 08 01 eb 03 89 75 fc 83 c0 02 ."u..u.....u....
0f b7 08 66 3b ce 75 a5 2b c7 83 c0 02 d1 f8 8d ...f;.u.+.......
44 58 02 03 c0 50 6a 40 ff 15 44 20 40 00 8b f0 DX...Pj@..D @...
33 d2 3b f2 0f 84 d0 00 00 00 8d 44 9e 04 33 db 3.;........D..3.
89 06 89 55 08 89 5d fc 83 7d 08 00 75 34 0f b7 ...U..]..}..u4..
0f 83 f9 20 74 05 83 f9 09 75 27 33 d2 33 c9 66 ... t....u'3.3.f
89 08 83 c7 02 0f b7 0f 83 f9 20 74 f5 83 f9 09 .......... t....
74 f0 66 39 17 74 71 43 8b c7 89 5d fc 89 3c 9e t.f9.tqC...]..<.
eb 5c 0f b7 0f 83 f9 5c 75 03 42 eb 48 83 f9 22 .\.....\u.B.H.."
75 41 6a 02 8d 5a 01 d1 eb 59 f7 db 03 f9 8d 04 uAj..Z...Y......
58 f6 c2 01 74 0a 6a 22 5a 66 89 10 03 c1 eb 1c X...t.j"Zf......
83 7d 08 00 74 12 66 83 3f 22 75 0c 6a 22 5a 66 .}..t.f.?"u.j"Zf
89 10 03 c1 03 f9 eb 04 83 75 08 01 8b 5d fc 33 .........u...].3
d2 eb 0b 33 d2 66 89 08 83 c0 02 83 c7 02 66 83 ...3.f........f.
3f 00 0f 85 60 ff ff ff 33 c9 43 66 89 08 21 0c ?...`...3.Cf..!.
9e 8b 45 0c 89 18 39 4d 08 74 0f 68 a0 00 00 00 ..E...9M.t.h....
eb 02 6a 57 ff 15 40 20 40 00 5f 8b c6 5e 5b c9 ..jW..@ @._..^[.
c2 08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
f2 30 00 00 06 31 00 00 e4 30 00 00 00 00 00 00 .0...1...0......
24 31 00 00 34 31 00 00 42 31 00 00 54 31 00 00 $1..41..B1..T1..
64 31 00 00 7a 31 00 00 88 31 00 00 98 31 00 00 d1..z1...1...1..
a6 31 00 00 b4 31 00 00 c0 31 00 00 d2 31 00 00 .1...1...1...1..
e2 31 00 00 f2 31 00 00 00 00 00 00 0e 32 00 00 .1...1.......2..
00 00 00 00 00 00 00 00 71 00 77 00 6f 00 72 00 ........q.w.o.r.
64 00 3a 00 00 00 00 00 68 00 65 00 78 00 28 00 d.:.....h.e.x.(.
61 00 29 00 3a 00 00 00 68 00 65 00 78 00 28 00 a.).:...h.e.x.(.
39 00 29 00 3a 00 00 00 68 00 65 00 78 00 28 00 9.).:...h.e.x.(.
38 00 29 00 3a 00 00 00 6d 00 75 00 6c 00 74 00 8.).:...m.u.l.t.
69 00 3a 00 00 00 00 00 6c 00 69 00 6e 00 6b 00 i.:.....l.i.n.k.
3a 00 00 00 64 00 77 00 6f 00 72 00 64 00 3a 00 :...d.w.o.r.d.:.
00 00 00 00 68 00 65 00 78 00 3a 00 00 00 00 00 ....h.e.x.:.....
65 00 78 00 70 00 61 00 6e 00 64 00 3a 00 00 00 e.x.p.a.n.d.:...
00 00 00 00 6e 00 6f 00 6e 00 65 00 3a 00 00 00 ....n.o.n.e.:...
51 00 57 00 4f 00 52 00 44 00 00 00 52 00 45 00 Q.W.O.R.D...R.E.
53 00 4f 00 55 00 52 00 43 00 45 00 5f 00 52 00 S.O.U.R.C.E._.R.
45 00 51 00 55 00 49 00 52 00 45 00 4d 00 45 00 E.Q.U.I.R.E.M.E.
4e 00 54 00 53 00 5f 00 4c 00 49 00 53 00 54 00 N.T.S._.L.I.S.T.
00 00 00 00 46 00 55 00 4c 00 4c 00 5f 00 52 00 ....F.U.L.L._.R.
45 00 53 00 4f 00 55 00 52 00 43 00 45 00 5f 00 E.S.O.U.R.C.E._.
44 00 45 00 53 00 43 00 52 00 49 00 50 00 54 00 D.E.S.C.R.I.P.T.
4f 00 52 00 00 00 00 00 52 00 45 00 53 00 4f 00 O.R.....R.E.S.O.
55 00 52 00 43 00 45 00 5f 00 4c 00 49 00 53 00 U.R.C.E._.L.I.S.
54 00 00 00 4d 00 55 00 4c 00 54 00 49 00 5f 00 T...M.U.L.T.I._.
53 00 5a 00 00 00 00 00 4c 00 49 00 4e 00 4b 00 S.Z.....L.I.N.K.
00 00 00 00 44 00 57 00 4f 00 52 00 44 00 5f 00 ....D.W.O.R.D._.
42 00 49 00 47 00 5f 00 45 00 4e 00 44 00 49 00 B.I.G._.E.N.D.I.
41 00 4e 00 00 00 00 00 44 00 57 00 4f 00 52 00 A.N.....D.W.O.R.
44 00 00 00 42 00 49 00 4e 00 41 00 52 00 59 00 D...B.I.N.A.R.Y.
00 00 00 00 45 00 58 00 50 00 41 00 4e 00 44 00 ....E.X.P.A.N.D.
5f 00 53 00 5a 00 00 00 53 00 5a 00 00 00 00 00 _.S.Z...S.Z.....
4e 00 4f 00 4e 00 45 00 00 00 00 00 00 00 00 00 N.O.N.E.........
48 00 4b 00 45 00 59 00 5f 00 43 00 55 00 52 00 H.K.E.Y._.C.U.R.
52 00 45 00 4e 00 54 00 5f 00 55 00 53 00 45 00 R.E.N.T._.U.S.E.
52 00 5f 00 4c 00 4f 00 43 00 41 00 4c 00 5f 00 R._.L.O.C.A.L._.
53 00 45 00 54 00 54 00 49 00 4e 00 47 00 53 00 S.E.T.T.I.N.G.S.
00 00 00 00 48 00 4b 00 45 00 59 00 5f 00 44 00 ....H.K.E.Y._.D.
59 00 4e 00 5f 00 44 00 41 00 54 00 41 00 00 00 Y.N._.D.A.T.A...
48 00 4b 00 45 00 59 00 5f 00 43 00 55 00 52 00 H.K.E.Y._.C.U.R.
52 00 45 00 4e 00 54 00 5f 00 43 00 4f 00 4e 00 R.E.N.T._.C.O.N.
46 00 49 00 47 00 00 00 48 00 4b 00 45 00 59 00 F.I.G...H.K.E.Y.
5f 00 50 00 45 00 52 00 46 00 4f 00 52 00 4d 00 _.P.E.R.F.O.R.M.
41 00 4e 00 43 00 45 00 5f 00 44 00 41 00 54 00 A.N.C.E._.D.A.T.
41 00 00 00 48 00 4b 00 45 00 59 00 5f 00 55 00 A...H.K.E.Y._.U.
53 00 45 00 52 00 53 00 00 00 00 00 48 00 4b 00 S.E.R.S.....H.K.
45 00 59 00 5f 00 4c 00 4f 00 43 00 41 00 4c 00 E.Y._.L.O.C.A.L.
5f 00 4d 00 41 00 43 00 48 00 49 00 4e 00 45 00 _.M.A.C.H.I.N.E.
00 00 00 00 48 00 4b 00 45 00 59 00 5f 00 43 00 ....H.K.E.Y._.C.
55 00 52 00 52 00 45 00 4e 00 54 00 5f 00 55 00 U.R.R.E.N.T._.U.
53 00 45 00 52 00 00 00 48 00 4b 00 45 00 59 00 S.E.R...H.K.E.Y.
5f 00 43 00 4c 00 41 00 53 00 53 00 45 00 53 00 _.C.L.A.S.S.E.S.
5f 00 52 00 4f 00 4f 00 54 00 00 00 28 23 40 00 _.R.O.O.T...(#@.
04 23 40 00 dc 22 40 00 c4 22 40 00 98 22 40 00 .#@.."@.."@.."@.
70 22 40 00 54 22 40 00 10 22 40 00 00 22 40 00 p"@.T"@.."@.."@.
f8 21 40 00 e4 21 40 00 d4 21 40 00 c8 21 40 00 .!@..!@..!@..!@.
a4 21 40 00 98 21 40 00 84 21 40 00 68 21 40 00 .!@..!@..!@.h!@.
34 21 40 00 fc 20 40 00 f0 20 40 00 e4 20 40 00 4!@.. @.. @.. @.
e0 20 40 00 d0 20 40 00 c4 20 40 00 b4 20 40 00 . @.. @.. @.. @.
b4 20 40 00 a8 20 40 00 98 20 40 00 88 20 40 00 . @.. @.. @.. @.
78 20 40 00 68 20 40 00 58 20 40 00 00 00 00 00 x @.h @.X @.....
53 00 69 00 67 00 6e 00 61 00 74 00 75 00 72 00 S.i.g.n.a.t.u.r.
65 00 20 00 27 00 50 00 52 00 65 00 67 00 5c 00 e. .'.P.R.e.g.\.
31 00 5c 00 30 00 5c 00 30 00 5c 00 30 00 27 00 1.\.0.\.0.\.0.'.
20 00 6d 00 69 00 73 00 73 00 69 00 6e 00 67 00 .m.i.s.s.i.n.g.
20 00 69 00 6e 00 20 00 66 00 69 00 6c 00 65 00 .i.n. .f.i.l.e.
20 00 27 00 25 00 6c 00 73 00 27 00 21 00 0a 00 .'.%.l.s.'.!...
00 00 00 00 00 00 00 00 25 00 6c 00 73 00 28 00 ........%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 66 00 69 00 6c 00 65 00 20 00 6d 00 61 00 .f.i.l.e. .m.a.
70 00 70 00 69 00 6e 00 67 00 20 00 27 00 25 00 p.p.i.n.g. .'.%.
6c 00 73 00 27 00 0a 00 00 00 00 00 43 00 6c 00 l.s.'.......C.l.
6f 00 73 00 65 00 48 00 61 00 6e 00 64 00 6c 00 o.s.e.H.a.n.d.l.
65 00 00 00 55 00 6e 00 6d 00 61 00 70 00 56 00 e...U.n.m.a.p.V.
69 00 65 00 77 00 4f 00 66 00 46 00 69 00 6c 00 i.e.w.O.f.F.i.l.
65 00 00 00 00 00 00 00 46 00 6f 00 72 00 6d 00 e.......F.o.r.m.
61 00 74 00 20 00 65 00 72 00 72 00 6f 00 72 00 a.t. .e.r.r.o.r.
20 00 69 00 6e 00 20 00 70 00 6f 00 6c 00 69 00 .i.n. .p.o.l.i.
63 00 79 00 20 00 66 00 69 00 6c 00 65 00 20 00 c.y. .f.i.l.e. .
27 00 25 00 6c 00 73 00 27 00 21 00 0a 00 00 00 '.%.l.s.'.!.....
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 72 00 65 00 67 00 .f.o.r. .r.e.g.
69 00 73 00 74 00 72 00 79 00 20 00 6b 00 65 00 i.s.t.r.y. .k.e.
79 00 20 00 27 00 25 00 6c 00 73 00 5c 00 25 00 y. .'.%.l.s.\.%.
6c 00 73 00 27 00 0a 00 00 00 00 00 52 00 65 00 l.s.'.......R.e.
67 00 43 00 6c 00 6f 00 73 00 65 00 4b 00 65 00 g.C.l.o.s.e.K.e.
79 00 00 00 00 00 00 00 4d 00 49 00 53 00 4d 00 y.......M.I.S.M.
41 00 54 00 43 00 48 00 3a 00 20 00 64 00 61 00 A.T.C.H.:. .d.a.
74 00 61 00 20 00 74 00 79 00 70 00 65 00 2c 00 t.a. .t.y.p.e.,.
20 00 73 00 69 00 7a 00 65 00 20 00 6f 00 72 00 .s.i.z.e. .o.r.
20 00 76 00 61 00 6c 00 75 00 65 00 20 00 69 00 .v.a.l.u.e. .i.
6e 00 20 00 70 00 6f 00 6c 00 69 00 63 00 79 00 n. .p.o.l.i.c.y.
20 00 66 00 69 00 6c 00 65 00 20 00 64 00 69 00 .f.i.l.e. .d.i.
66 00 66 00 65 00 72 00 73 00 20 00 66 00 72 00 f.f.e.r.s. .f.r.
6f 00 6d 00 20 00 72 00 65 00 67 00 69 00 73 00 o.m. .r.e.g.i.s.
74 00 72 00 79 00 21 00 0a 00 00 00 00 00 00 00 t.r.y.!.........
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 76 00 61 00 6c 00 .f.o.r. .v.a.l.
75 00 65 00 20 00 27 00 25 00 6c 00 73 00 27 00 u.e. .'.%.l.s.'.
20 00 6f 00 66 00 20 00 72 00 65 00 67 00 69 00 .o.f. .r.e.g.i.
73 00 74 00 72 00 79 00 20 00 6b 00 65 00 79 00 s.t.r.y. .k.e.y.
20 00 27 00 25 00 6c 00 73 00 5c 00 25 00 6c 00 .'.%.l.s.\.%.l.
73 00 27 00 0a 00 00 00 52 00 65 00 67 00 51 00 s.'.....R.e.g.Q.
75 00 65 00 72 00 79 00 56 00 61 00 6c 00 75 00 u.e.r.y.V.a.l.u.
65 00 45 00 78 00 00 00 52 00 65 00 67 00 4f 00 e.E.x...R.e.g.O.
70 00 65 00 6e 00 4b 00 65 00 79 00 45 00 78 00 p.e.n.K.e.y.E.x.
00 00 00 00 2c 00 25 00 6c 00 63 00 25 00 6c 00 ....,.%.l.c.%.l.
63 00 00 00 30 00 31 00 32 00 33 00 34 00 35 00 c...0.1.2.3.4.5.
36 00 37 00 38 00 39 00 61 00 62 00 63 00 64 00 6.7.8.9.a.b.c.d.
65 00 66 00 00 00 00 00 53 00 69 00 7a 00 65 00 e.f.....S.i.z.e.
20 00 25 00 6c 00 75 00 20 00 6f 00 66 00 20 00 .%.l.u. .o.f. .
52 00 45 00 47 00 5f 00 25 00 6c 00 73 00 20 00 R.E.G._.%.l.s. .
76 00 61 00 6c 00 75 00 65 00 20 00 64 00 61 00 v.a.l.u.e. .d.a.
74 00 61 00 20 00 6e 00 6f 00 74 00 20 00 65 00 t.a. .n.o.t. .e.
71 00 75 00 61 00 6c 00 20 00 6c 00 65 00 6e 00 q.u.a.l. .l.e.n.
67 00 74 00 68 00 20 00 25 00 6c 00 75 00 20 00 g.t.h. .%.l.u. .
6f 00 66 00 20 00 73 00 74 00 72 00 69 00 6e 00 o.f. .s.t.r.i.n.
67 00 20 00 70 00 6c 00 75 00 73 00 20 00 74 00 g. .p.l.u.s. .t.
65 00 72 00 6d 00 69 00 6e 00 61 00 74 00 69 00 e.r.m.i.n.a.t.i.
6e 00 67 00 20 00 27 00 4e 00 55 00 4c 00 27 00 n.g. .'.N.U.L.'.
20 00 63 00 68 00 61 00 72 00 61 00 63 00 74 00 .c.h.a.r.a.c.t.
65 00 72 00 21 00 0a 00 00 00 00 00 27 00 25 00 e.r.!.......'.%.
6c 00 73 00 27 00 0a 00 00 00 00 00 00 00 00 00 l.s.'...........
53 00 69 00 7a 00 65 00 20 00 25 00 6c 00 75 00 S.i.z.e. .%.l.u.
20 00 6f 00 66 00 20 00 52 00 45 00 47 00 5f 00 .o.f. .R.E.G._.
25 00 6c 00 73 00 20 00 76 00 61 00 6c 00 75 00 %.l.s. .v.a.l.u.
65 00 20 00 64 00 61 00 74 00 61 00 20 00 6e 00 e. .d.a.t.a. .n.
6f 00 74 00 20 00 65 00 71 00 75 00 61 00 6c 00 o.t. .e.q.u.a.l.
20 00 27 00 73 00 69 00 7a 00 65 00 6f 00 66 00 .'.s.i.z.e.o.f.
28 00 44 00 57 00 4f 00 52 00 44 00 29 00 27 00 (.D.W.O.R.D.).'.
21 00 0a 00 00 00 00 00 25 00 30 00 38 00 6c 00 !.......%.0.8.l.
78 00 0a 00 00 00 00 00 53 00 69 00 7a 00 65 00 x.......S.i.z.e.
20 00 25 00 6c 00 75 00 20 00 6f 00 66 00 20 00 .%.l.u. .o.f. .
52 00 45 00 47 00 5f 00 4d 00 55 00 4c 00 54 00 R.E.G._.M.U.L.T.
49 00 5f 00 53 00 5a 00 20 00 76 00 61 00 6c 00 I._.S.Z. .v.a.l.
75 00 65 00 20 00 64 00 61 00 74 00 61 00 20 00 u.e. .d.a.t.a. .
6e 00 6f 00 74 00 20 00 65 00 71 00 75 00 61 00 n.o.t. .e.q.u.a.
6c 00 20 00 73 00 75 00 6d 00 20 00 6f 00 66 00 l. .s.u.m. .o.f.
20 00 73 00 74 00 72 00 69 00 6e 00 67 00 20 00 .s.t.r.i.n.g. .
6c 00 65 00 6e 00 67 00 74 00 68 00 73 00 20 00 l.e.n.g.t.h.s. .
70 00 6c 00 75 00 73 00 20 00 74 00 65 00 72 00 p.l.u.s. .t.e.r.
6d 00 69 00 6e 00 61 00 74 00 69 00 6e 00 67 00 m.i.n.a.t.i.n.g.
20 00 27 00 4e 00 55 00 4c 00 27 00 20 00 63 00 .'.N.U.L.'. .c.
68 00 61 00 72 00 61 00 63 00 74 00 65 00 72 00 h.a.r.a.c.t.e.r.
73 00 21 00 0a 00 00 00 52 00 45 00 47 00 5f 00 s.!.....R.E.G._.
4d 00 55 00 4c 00 54 00 49 00 5f 00 53 00 5a 00 M.U.L.T.I._.S.Z.
20 00 76 00 61 00 6c 00 75 00 65 00 20 00 64 00 .v.a.l.u.e. .d.
61 00 74 00 61 00 20 00 6e 00 6f 00 74 00 20 00 a.t.a. .n.o.t. .
74 00 65 00 72 00 6d 00 69 00 6e 00 61 00 74 00 t.e.r.m.i.n.a.t.
65 00 64 00 20 00 77 00 69 00 74 00 68 00 20 00 e.d. .w.i.t.h. .
65 00 78 00 74 00 72 00 61 00 20 00 27 00 4e 00 e.x.t.r.a. .'.N.
55 00 4c 00 27 00 20 00 63 00 68 00 61 00 72 00 U.L.'. .c.h.a.r.
61 00 63 00 74 00 65 00 72 00 21 00 0a 00 00 00 a.c.t.e.r.!.....
0a 00 00 00 2c 00 27 00 25 00 6c 00 73 00 27 00 ....,.'.%.l.s.'.
00 00 00 00 00 00 00 00 53 00 69 00 7a 00 65 00 ........S.i.z.e.
20 00 25 00 6c 00 75 00 20 00 6f 00 66 00 20 00 .%.l.u. .o.f. .
52 00 45 00 47 00 5f 00 51 00 57 00 4f 00 52 00 R.E.G._.Q.W.O.R.
44 00 20 00 76 00 61 00 6c 00 75 00 65 00 20 00 D. .v.a.l.u.e. .
64 00 61 00 74 00 61 00 20 00 6e 00 6f 00 74 00 d.a.t.a. .n.o.t.
20 00 65 00 71 00 75 00 61 00 6c 00 20 00 27 00 .e.q.u.a.l. .'.
73 00 69 00 7a 00 65 00 6f 00 66 00 28 00 51 00 s.i.z.e.o.f.(.Q.
57 00 4f 00 52 00 44 00 29 00 27 00 21 00 0a 00 W.O.R.D.).'.!...
00 00 00 00 25 00 30 00 31 00 36 00 49 00 36 00 ....%.0.1.6.I.6.
34 00 78 00 0a 00 00 00 68 00 65 00 78 00 28 00 4.x.....h.e.x.(.
25 00 6c 00 78 00 29 00 3a 00 00 00 25 00 6c 00 %.l.x.).:...%.l.
73 00 00 00 27 00 25 00 6c 00 73 00 27 00 3d 00 s...'.%.l.s.'.=.
00 00 00 00 40 00 3d 00 00 00 00 00 27 00 25 00 ....@.=.....'.%.
6c 00 73 00 27 00 3d 00 2d 00 20 00 3b 00 20 00 l.s.'.=.-. .;. .
3d 00 00 00 40 00 3d 00 2d 00 20 00 3b 00 20 00 =...@.=.-. .;. .
3d 00 00 00 2a 00 2a 00 44 00 65 00 6c 00 2e 00 =...*.*.D.e.l...
00 00 00 00 2a 00 2a 00 64 00 65 00 6c 00 2e 00 ....*.*.d.e.l...
00 00 00 00 5b 00 2d 00 48 00 4b 00 45 00 59 00 ....[.-.H.K.E.Y.
5f 00 52 00 45 00 4c 00 41 00 54 00 49 00 56 00 _.R.E.L.A.T.I.V.
45 00 5c 00 25 00 6c 00 73 00 5c 00 25 00 6c 00 E.\.%.l.s.\.%.l.
73 00 5d 00 0a 00 00 00 2a 00 2a 00 44 00 65 00 s.].....*.*.D.e.
6c 00 65 00 74 00 65 00 6b 00 65 00 79 00 73 00 l.e.t.e.k.e.y.s.
00 00 00 00 2a 00 2a 00 64 00 65 00 6c 00 65 00 ....*.*.d.e.l.e.
74 00 65 00 6b 00 65 00 79 00 73 00 00 00 00 00 t.e.k.e.y.s.....
27 00 25 00 6c 00 73 00 27 00 3d 00 2d 00 0a 00 '.%.l.s.'.=.-...
00 00 00 00 2a 00 2a 00 44 00 65 00 6c 00 65 00 ....*.*.D.e.l.e.
74 00 65 00 76 00 61 00 6c 00 75 00 65 00 73 00 t.e.v.a.l.u.e.s.
00 00 00 00 2a 00 2a 00 64 00 65 00 6c 00 65 00 ....*.*.d.e.l.e.
74 00 65 00 76 00 61 00 6c 00 75 00 65 00 73 00 t.e.v.a.l.u.e.s.
00 00 00 00 2a 00 3d 00 2d 00 0a 00 00 00 00 00 ....*.=.-.......
2a 00 2a 00 44 00 65 00 6c 00 65 00 74 00 65 00 *.*.D.e.l.e.t.e.
76 00 61 00 6c 00 73 00 00 00 00 00 2a 00 2a 00 v.a.l.s.....*.*.
64 00 65 00 6c 00 65 00 74 00 65 00 76 00 61 00 d.e.l.e.t.e.v.a.
6c 00 73 00 00 00 00 00 3b 00 20 00 53 00 65 00 l.s.....;. .S.e.
63 00 75 00 72 00 65 00 4b 00 65 00 79 00 3d 00 c.u.r.e.K.e.y.=.
30 00 0a 00 00 00 00 00 2a 00 2a 00 53 00 65 00 0.......*.*.S.e.
63 00 75 00 72 00 65 00 4b 00 65 00 79 00 3d 00 c.u.r.e.K.e.y.=.
30 00 00 00 2a 00 2a 00 73 00 65 00 63 00 75 00 0...*.*.s.e.c.u.
72 00 65 00 6b 00 65 00 79 00 3d 00 30 00 00 00 r.e.k.e.y.=.0...
3b 00 20 00 53 00 65 00 63 00 75 00 72 00 65 00 ;. .S.e.c.u.r.e.
4b 00 65 00 79 00 3d 00 31 00 0a 00 00 00 00 00 K.e.y.=.1.......
2a 00 2a 00 53 00 65 00 63 00 75 00 72 00 65 00 *.*.S.e.c.u.r.e.
4b 00 65 00 79 00 3d 00 31 00 00 00 2a 00 2a 00 K.e.y.=.1...*.*.
73 00 65 00 63 00 75 00 72 00 65 00 6b 00 65 00 s.e.c.u.r.e.k.e.
79 00 3d 00 31 00 00 00 0a 00 5b 00 48 00 4b 00 y.=.1.....[.H.K.
45 00 59 00 5f 00 52 00 45 00 4c 00 41 00 54 00 E.Y._.R.E.L.A.T.
49 00 56 00 45 00 5c 00 25 00 6c 00 73 00 5d 00 I.V.E.\.%.l.s.].
0a 00 00 00 00 00 00 00 57 00 69 00 6e 00 64 00 ........W.i.n.d.
6f 00 77 00 73 00 20 00 52 00 65 00 67 00 69 00 o.w.s. .R.e.g.i.
73 00 74 00 72 00 79 00 20 00 45 00 64 00 69 00 s.t.r.y. .E.d.i.
74 00 6f 00 72 00 20 00 56 00 65 00 72 00 73 00 t.o.r. .V.e.r.s.
69 00 6f 00 6e 00 20 00 35 00 2e 00 30 00 30 00 i.o.n. .5...0.0.
0a 00 0a 00 3b 00 20 00 52 00 65 00 67 00 69 00 ....;. .R.e.g.i.
73 00 74 00 72 00 79 00 20 00 50 00 6f 00 6c 00 s.t.r.y. .P.o.l.
69 00 63 00 79 00 20 00 46 00 69 00 6c 00 65 00 i.c.y. .F.i.l.e.
20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 .'.%.l.s.'.....
4d 00 61 00 70 00 56 00 69 00 65 00 77 00 4f 00 M.a.p.V.i.e.w.O.
66 00 46 00 69 00 6c 00 65 00 00 00 43 00 72 00 f.F.i.l.e...C.r.
65 00 61 00 74 00 65 00 46 00 69 00 6c 00 65 00 e.a.t.e.F.i.l.e.
4d 00 61 00 70 00 70 00 69 00 6e 00 67 00 00 00 M.a.p.p.i.n.g...
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 66 00 69 00 6c 00 .f.o.r. .f.i.l.
65 00 20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 e. .'.%.l.s.'...
00 00 00 00 47 00 65 00 74 00 46 00 69 00 6c 00 ....G.e.t.F.i.l.
65 00 53 00 69 00 7a 00 65 00 00 00 43 00 72 00 e.S.i.z.e...C.r.
65 00 61 00 74 00 65 00 46 00 69 00 6c 00 65 00 e.a.t.e.F.i.l.e.
00 00 00 00 25 00 6c 00 73 00 28 00 29 00 20 00 ....%.l.s.(.). .
72 00 65 00 74 00 75 00 72 00 6e 00 65 00 64 00 r.e.t.u.r.n.e.d.
20 00 65 00 72 00 72 00 6f 00 72 00 20 00 25 00 .e.r.r.o.r. .%.
6c 00 75 00 0a 00 00 00 4c 00 6f 00 63 00 61 00 l.u.....L.o.c.a.
6c 00 46 00 72 00 65 00 65 00 00 00 00 00 00 00 l.F.r.e.e.......
4e 00 6f 00 20 00 61 00 72 00 67 00 75 00 6d 00 N.o. .a.r.g.u.m.
65 00 6e 00 74 00 73 00 3a 00 20 00 61 00 74 00 e.n.t.s.:. .a.t.
20 00 6c 00 65 00 61 00 73 00 74 00 20 00 6f 00 .l.e.a.s.t. .o.
6e 00 65 00 20 00 27 00 2e 00 70 00 6f 00 6c 00 n.e. .'...p.o.l.
27 00 20 00 66 00 69 00 6c 00 65 00 20 00 6e 00 '. .f.i.l.e. .n.
61 00 6d 00 65 00 20 00 6d 00 75 00 73 00 74 00 a.m.e. .m.u.s.t.
20 00 62 00 65 00 20 00 67 00 69 00 76 00 65 00 .b.e. .g.i.v.e.
6e 00 21 00 0a 00 00 00 42 00 61 00 64 00 20 00 n.!.....B.a.d. .
61 00 72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 a.r.g.u.m.e.n.t.
73 00 3a 00 20 00 6f 00 70 00 74 00 69 00 6f 00 s.:. .o.p.t.i.o.
6e 00 61 00 6c 00 20 00 66 00 69 00 72 00 73 00 n.a.l. .f.i.r.s.
74 00 20 00 61 00 72 00 67 00 75 00 6d 00 65 00 t. .a.r.g.u.m.e.
6e 00 74 00 20 00 6d 00 75 00 73 00 74 00 20 00 n.t. .m.u.s.t. .
62 00 65 00 20 00 27 00 25 00 6c 00 73 00 27 00 b.e. .'.%.l.s.'.
20 00 6f 00 72 00 20 00 27 00 25 00 6c 00 73 00 .o.r. .'.%.l.s.
27 00 21 00 0a 00 00 00 2f 00 55 00 53 00 45 00 '.!...../.U.S.E.
52 00 00 00 2f 00 4d 00 41 00 43 00 48 00 49 00 R.../.M.A.C.H.I.
4e 00 45 00 00 00 00 00 43 00 6f 00 6d 00 6d 00 N.E.....C.o.m.m.
61 00 6e 00 64 00 4c 00 69 00 6e 00 65 00 54 00 a.n.d.L.i.n.e.T.
6f 00 41 00 72 00 67 00 76 00 00 00 00 00 00 00 o.A.r.g.v.......
b9 79 37 9e 00 00 00 00 68 00 00 00 45 54 41 44 .y7.....h...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 d0 2f 40 00 00 00 00 00 00 00 00 00 ...../@.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
90 30 00 00 00 00 00 00 00 00 00 00 16 31 00 00 .0...........1..
00 20 00 00 a0 30 00 00 00 00 00 00 00 00 00 00 . ...0..........
00 32 00 00 10 20 00 00 dc 30 00 00 00 00 00 00 .2... ...0......
00 00 00 00 1c 32 00 00 4c 20 00 00 00 00 00 00 .....2..L ......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
f2 30 00 00 06 31 00 00 e4 30 00 00 00 00 00 00 .0...1...0......
24 31 00 00 34 31 00 00 42 31 00 00 54 31 00 00 $1..41..B1..T1..
64 31 00 00 7a 31 00 00 88 31 00 00 98 31 00 00 d1..z1...1...1..
a6 31 00 00 b4 31 00 00 c0 31 00 00 d2 31 00 00 .1...1...1...1..
e2 31 00 00 f2 31 00 00 00 00 00 00 0e 32 00 00 .1...1.......2..
00 00 00 00 30 02 52 65 67 43 6c 6f 73 65 4b 65 ....0.RegCloseKe
79 00 6e 02 52 65 67 51 75 65 72 79 56 61 6c 75 y.n.RegQueryValu
65 45 78 57 00 00 61 02 52 65 67 4f 70 65 6e 4b eExW..a.RegOpenK
65 79 45 78 57 00 41 44 56 41 50 49 33 32 2e 64 eyExW.ADVAPI32.d
6c 6c 00 00 24 05 57 72 69 74 65 43 6f 6e 73 6f ll..$.WriteConso
6c 65 57 00 52 00 43 6c 6f 73 65 48 61 6e 64 6c leW.R.CloseHandl
65 00 d6 04 55 6e 6d 61 70 56 69 65 77 4f 66 46 e...UnmapViewOfF
69 6c 65 00 57 03 4d 61 70 56 69 65 77 4f 66 46 ile.W.MapViewOfF
69 6c 65 00 8c 00 43 72 65 61 74 65 46 69 6c 65 ile...CreateFile
4d 61 70 70 69 6e 67 57 00 00 f0 01 47 65 74 46 MappingW....GetF
69 6c 65 53 69 7a 65 00 02 02 47 65 74 4c 61 73 ileSize...GetLas
74 45 72 72 6f 72 00 00 8f 00 43 72 65 61 74 65 tError....Create
46 69 6c 65 57 00 19 01 45 78 69 74 50 72 6f 63 FileW...ExitProc
65 73 73 00 48 03 4c 6f 63 61 6c 46 72 65 65 00 ess.H.LocalFree.
87 01 47 65 74 43 6f 6d 6d 61 6e 64 4c 69 6e 65 ..GetCommandLine
57 00 64 02 47 65 74 53 74 64 48 61 6e 64 6c 65 W.d.GetStdHandle
00 00 73 04 53 65 74 4c 61 73 74 45 72 72 6f 72 ..s.SetLastError
00 00 44 03 4c 6f 63 61 6c 41 6c 6c 6f 63 00 00 ..D.LocalAlloc..
4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 KERNEL32.dll..5.
77 76 73 70 72 69 6e 74 66 57 00 00 55 53 45 52 wvsprintfW..USER
33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 32.dll..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file POLYGLOT.TXT
created in
step 3. to recreate the console application
Registry Policy Reader:
CERTUTIL.EXE /DecodeHex /V POLYGLOT.TXT POLYGLOT.COM
Input Length = 36992 Output Length = 8704 CertUtil: -decodehex command completed successfully.
offlineregistry hive formatted as .inf file in UTF-16LE encoding on
standard output(which must be redirected to a file or piped into an application that reads from
standard input, like Clip, Find or More).
ORCloseHive()
ORCloseKey()
ORCreateHive()
ORCreateKey()
ORDeleteKey()
ORDeleteValue()
OREnumKey()
OREnumValue()
ORGetKeySecurity()
ORGetValue()
ORGetVersion()
ORGetVirtualFlags()
OROpenHive()
OROpenKey()
ORQueryInfoKey()
ORSaveHive()
ORSetKeySecurity()
ORSetValue()
ORSetVirtualFlags()
OFFREG.COM ‹input file name› >‹output file name› OFFREG.COM ‹input file name› | CLIP.COM OFFREG.COM ‹input file name› | MORE.COM
%SystemDrive%\Users\Default\NTUSER.DAT
to the file
ntuser.inf
and display it afterwards:
VER .\OFFREG.COM "%SystemDrive%\Users\Default\NTUSER.DAT" 1>ntuser.inf NET.EXE HelpMsg %ERRORLEVEL% TYPE ntuser.infNet services commands Ver
Microsoft Windows [Version 10.0.19044.2486] OFFREG.DLL version 1.0 The operation completed successfully. [Version] DriverVer = 08/15/2021,12.34.56.789 ; UTC Provider = "Stefan Kanthak" Signature = "$Windows NT$" [Strings] REG_SZ = 0x00000000 REG_BINARY = 0x00000001 REG_KEYONLY = 0x00000010 REG_MULTI_SZ = 0x00010000 REG_DWORD = 0x00010001 REG_EXPAND_SZ = 0x00020000 REG_NONE = 0x00020001 REG_COMPATIBLE = 0x00030001 ; same as REG_BINARY REG_DWORD_LITTLE_ENDIAN = 0x00040001 ; same as REG_DWORD REG_DWORD_BIG_ENDIAN = 0x00050001 REG_LINK = 0x00060000 REG_RESOURCE_LIST = 0x00080001 REG_FULL_RESOURCE_DESCRIPTOR = 0x00090001 REG_RESOURCE_REQUIREMENTS_LIST = 0x000a0001 REG_QWORD = 0x000b0001 REG_QWORD_LITTLE_ENDIAN = 0x000b0001 ; same as REG_QWORD [DefaultInstall.NT] ;AddReg = AddReg.HKO [AddReg.HKO] HKO,"AppEvents\EventLabels\.Default",,%REG_SZ%,"Default Beep" HKO,"AppEvents\EventLabels\.Default","DispFileName",%REG_SZ%,"@mmres.dll,-5824" HKO,"AppEvents\EventLabels\ActivatingDocument",,%REG_SZ%,"Complete Navigation" HKO,"AppEvents\EventLabels\ActivatingDocument","DispFileName",%REG_SZ%,"@ieframe.dll,-10321" HKO,"AppEvents\EventLabels\AppGPFault",,%REG_SZ%,"Program Error" HKO,"AppEvents\EventLabels\AppGPFault","DispFileName",%REG_SZ%,"@mmres.dll,-5825" HKO,"AppEvents\EventLabels\BlockedPopup",,%REG_SZ%,"Blocked Pop-up Window" HKO,"AppEvents\EventLabels\BlockedPopup","DispFileName",%REG_SZ%,"@ieframe.dll,-10325" HKO,"AppEvents\EventLabels\CCSelect",,%REG_SZ%,"Select" HKO,"AppEvents\EventLabels\CCSelect","DispFileName",%REG_SZ%,"@ieframe.dll,-10323" HKO,"AppEvents\EventLabels\ChangeTheme",,%REG_SZ%,"Change Theme" HKO,"AppEvents\EventLabels\ChangeTheme","DispFileName",%REG_SZ%,"@mmres.dll,-5860" HKO,"AppEvents\EventLabels\Close",,%REG_SZ%,"Close Program" HKO,"AppEvents\EventLabels\Close","DispFileName",%REG_SZ%,"@mmres.dll,-5826" HKO,"AppEvents\EventLabels\CriticalBatteryAlarm",,%REG_SZ%,"Critical Battery Alarm" HKO,"AppEvents\EventLabels\CriticalBatteryAlarm","DispFileName",%REG_SZ%,"@mmres.dll,-5827" HKO,"AppEvents\EventLabels\DeviceConnect",,%REG_SZ%,"Device Connect" HKO,"AppEvents\EventLabels\DeviceConnect","DispFileName",%REG_SZ%,"@mmres.dll,-5828" HKO,"AppEvents\EventLabels\DeviceDisconnect",,%REG_SZ%,"Device Disconnect" HKO,"AppEvents\EventLabels\DeviceDisconnect","DispFileName",%REG_SZ%,"@mmres.dll,-5829" HKO,"AppEvents\EventLabels\DeviceFail",,%REG_SZ%,"Device Failed to Connect" HKO,"AppEvents\EventLabels\DeviceFail","DispFileName",%REG_SZ%,"@mmres.dll,-5830" HKO,"AppEvents\EventLabels\DisNumbersSound",,%REG_SZ%,"Disambiguation Numbers" HKO,"AppEvents\EventLabels\DisNumbersSound","DispFileName",%REG_SZ%,"@C:\Windows\System32\speech\speechux\sapi.cpl,-5566" HKO,"AppEvents\EventLabels\EmptyRecycleBin",,%REG_SZ%,"Empty Recycle Bin" HKO,"AppEvents\EventLabels\EmptyRecycleBin","DispFileName",%REG_SZ%,"@mmres.dll,-5831" HKO,"AppEvents\EventLabels\FaxBeep",,%REG_SZ%,"New Fax Notification" HKO,"AppEvents\EventLabels\FaxBeep","DispFileName",%REG_SZ%,"@mmres.dll,-5858" HKO,"AppEvents\EventLabels\FeedDiscovered",,%REG_SZ%,"Feed Discovered" HKO,"AppEvents\EventLabels\FeedDiscovered","DispFileName",%REG_SZ%,"@ieframe.dll,-17315" HKO,"AppEvents\EventLabels\HubOffSound",,%REG_SZ%,"Off" HKO,"AppEvents\EventLabels\HubOffSound","DispFileName",%REG_SZ%,"@C:\Windows\System32\speech\speechux\sapi.cpl,-5563" HKO,"AppEvents\EventLabels\HubOnSound",,%REG_SZ%,"On" HKO,"AppEvents\EventLabels\HubOnSound","DispFileName",%REG_SZ%,"@C:\Windows\System32\speech\speechux\sapi.cpl,-5562" HKO,"AppEvents\EventLabels\HubSleepSound",,%REG_SZ%,"Sleep" HKO,"AppEvents\EventLabels\HubSleepSound","DispFileName",%REG_SZ%,"@C:\Windows\System32\speech\speechux\sapi.cpl,-5564" HKO,"AppEvents\EventLabels\LowBatteryAlarm",,%REG_SZ%,"Low Battery Alarm" HKO,"AppEvents\EventLabels\LowBatteryAlarm","DispFileName",%REG_SZ%,"@mmres.dll,-5832" HKO,"AppEvents\EventLabels\MailBeep",,%REG_SZ%,"Desktop Mail Notification" HKO,"AppEvents\EventLabels\MailBeep","DispFileName",%REG_SZ%,"@mmres.dll,-5837" HKO,"AppEvents\EventLabels\Maximize",,%REG_SZ%,"Maximize" HKO,"AppEvents\EventLabels\Maximize","DispFileName",%REG_SZ%,"@mmres.dll,-5833" HKO,"AppEvents\EventLabels\MenuCommand",,%REG_SZ%,"Menu Command" HKO,"AppEvents\EventLabels\MenuCommand","DispFileName",%REG_SZ%,"@mmres.dll,-5834" HKO,"AppEvents\EventLabels\MenuPopup",,%REG_SZ%,"Menu Pop-up" HKO,"AppEvents\EventLabels\MenuPopup","DispFileName",%REG_SZ%,"@mmres.dll,-5835" HKO,"AppEvents\EventLabels\MessageNudge",,%REG_SZ%,"Message Nudge" HKO,"AppEvents\EventLabels\MessageNudge","DispFileName",%REG_SZ%,"@mmres.dll,-5866" HKO,"AppEvents\EventLabels\Minimize",,%REG_SZ%,"Minimize" HKO,"AppEvents\EventLabels\Minimize","DispFileName",%REG_SZ%,"@mmres.dll,-5836" HKO,"AppEvents\EventLabels\MisrecoSound",,%REG_SZ%,"Misrecognition" HKO,"AppEvents\EventLabels\MisrecoSound","DispFileName",%REG_SZ%,"@C:\Windows\System32\speech\speechux\sapi.cpl,-5561" HKO,"AppEvents\EventLabels\MoveMenuItem",,%REG_SZ%,"Move Menu Item" HKO,"AppEvents\EventLabels\MoveMenuItem","DispFileName",%REG_SZ%,"@ieframe.dll,-10322" HKO,"AppEvents\EventLabels\Navigating",,%REG_SZ%,"Start Navigation" HKO,"AppEvents\EventLabels\Navigating","DispFileName",%REG_SZ%,"@ieframe.dll,-10320" HKO,"AppEvents\EventLabels\Notification.Default",,%REG_SZ%,"Notification" HKO,"AppEvents\EventLabels\Notification.Default","DispFileName",%REG_SZ%,"@mmres.dll,-5865" HKO,"AppEvents\EventLabels\Notification.IM",,%REG_SZ%,"Instant Message Notification" HKO,"AppEvents\EventLabels\Notification.IM","DispFileName",%REG_SZ%,"@mmres.dll,-5863" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm",,%REG_SZ%,"Alarm 1" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm","DispFileName",%REG_SZ%,"@mmres.dll,-5888" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Alarm10",,%REG_SZ%,"Alarm 10" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm10","DispFileName",%REG_SZ%,"@mmres.dll,-5897" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm10","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Alarm2",,%REG_SZ%,"Alarm 2" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm2","DispFileName",%REG_SZ%,"@mmres.dll,-5889" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm2","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Alarm3",,%REG_SZ%,"Alarm 3" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm3","DispFileName",%REG_SZ%,"@mmres.dll,-5890" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm3","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Alarm4",,%REG_SZ%,"Alarm 4" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm4","DispFileName",%REG_SZ%,"@mmres.dll,-5891" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm4","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Alarm5",,%REG_SZ%,"Alarm 5" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm5","DispFileName",%REG_SZ%,"@mmres.dll,-5892" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm5","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Alarm6",,%REG_SZ%,"Alarm 6" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm6","DispFileName",%REG_SZ%,"@mmres.dll,-5893" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm6","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Alarm7",,%REG_SZ%,"Alarm 7" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm7","DispFileName",%REG_SZ%,"@mmres.dll,-5894" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm7","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Alarm8",,%REG_SZ%,"Alarm 8" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm8","DispFileName",%REG_SZ%,"@mmres.dll,-5895" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm8","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Alarm9",,%REG_SZ%,"Alarm 9" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm9","DispFileName",%REG_SZ%,"@mmres.dll,-5896" HKO,"AppEvents\EventLabels\Notification.Looping.Alarm9","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call",,%REG_SZ%,"Incoming Call Notification 1" HKO,"AppEvents\EventLabels\Notification.Looping.Call","DispFileName",%REG_SZ%,"@mmres.dll,-5872" HKO,"AppEvents\EventLabels\Notification.Looping.Call","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call10",,%REG_SZ%,"Incoming Call Notification 10" HKO,"AppEvents\EventLabels\Notification.Looping.Call10","DispFileName",%REG_SZ%,"@mmres.dll,-5881" HKO,"AppEvents\EventLabels\Notification.Looping.Call10","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call2",,%REG_SZ%,"Incoming Call Notification 2" HKO,"AppEvents\EventLabels\Notification.Looping.Call2","DispFileName",%REG_SZ%,"@mmres.dll,-5873" HKO,"AppEvents\EventLabels\Notification.Looping.Call2","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call3",,%REG_SZ%,"Incoming Call Notification 3" HKO,"AppEvents\EventLabels\Notification.Looping.Call3","DispFileName",%REG_SZ%,"@mmres.dll,-5874" HKO,"AppEvents\EventLabels\Notification.Looping.Call3","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call4",,%REG_SZ%,"Incoming Call Notification 4" HKO,"AppEvents\EventLabels\Notification.Looping.Call4","DispFileName",%REG_SZ%,"@mmres.dll,-5875" HKO,"AppEvents\EventLabels\Notification.Looping.Call4","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call5",,%REG_SZ%,"Incoming Call Notification 5" HKO,"AppEvents\EventLabels\Notification.Looping.Call5","DispFileName",%REG_SZ%,"@mmres.dll,-5876" HKO,"AppEvents\EventLabels\Notification.Looping.Call5","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call6",,%REG_SZ%,"Incoming Call Notification 6" HKO,"AppEvents\EventLabels\Notification.Looping.Call6","DispFileName",%REG_SZ%,"@mmres.dll,-5877" HKO,"AppEvents\EventLabels\Notification.Looping.Call6","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call7",,%REG_SZ%,"Incoming Call Notification 7" HKO,"AppEvents\EventLabels\Notification.Looping.Call7","DispFileName",%REG_SZ%,"@mmres.dll,-5878" HKO,"AppEvents\EventLabels\Notification.Looping.Call7","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call8",,%REG_SZ%,"Incoming Call Notification 8" HKO,"AppEvents\EventLabels\Notification.Looping.Call8","DispFileName",%REG_SZ%,"@mmres.dll,-5879" HKO,"AppEvents\EventLabels\Notification.Looping.Call8","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Looping.Call9",,%REG_SZ%,"Incoming Call Notification 9" HKO,"AppEvents\EventLabels\Notification.Looping.Call9","DispFileName",%REG_SZ%,"@mmres.dll,-5880" HKO,"AppEvents\EventLabels\Notification.Looping.Call9","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\Notification.Mail",,%REG_SZ%,"New Mail Notification" HKO,"AppEvents\EventLabels\Notification.Mail","DispFileName",%REG_SZ%,"@mmres.dll,-5861" HKO,"AppEvents\EventLabels\Notification.Proximity",,%REG_SZ%,"NFP Completion" HKO,"AppEvents\EventLabels\Notification.Proximity","DispFileName",%REG_SZ%,"@mmres.dll,-5868" HKO,"AppEvents\EventLabels\Notification.Reminder",,%REG_SZ%,"Calendar Reminder" HKO,"AppEvents\EventLabels\Notification.Reminder","DispFileName",%REG_SZ%,"@mmres.dll,-5864" HKO,"AppEvents\EventLabels\Notification.SMS",,%REG_SZ%,"New Text Message Notification" HKO,"AppEvents\EventLabels\Notification.SMS","DispFileName",%REG_SZ%,"@mmres.dll,-5862" HKO,"AppEvents\EventLabels\Open",,%REG_SZ%,"Open Program" HKO,"AppEvents\EventLabels\Open","DispFileName",%REG_SZ%,"@mmres.dll,-5839" HKO,"AppEvents\EventLabels\PanelSound",,%REG_SZ%,"Disambiguation Panel" HKO,"AppEvents\EventLabels\PanelSound","DispFileName",%REG_SZ%,"@C:\Windows\System32\speech\speechux\sapi.cpl,-5565" HKO,"AppEvents\EventLabels\PrintComplete",,%REG_SZ%,"Print Complete" HKO,"AppEvents\EventLabels\PrintComplete","DispFileName",%REG_SZ%,"@mmres.dll,-5840" HKO,"AppEvents\EventLabels\ProximityConnection",,%REG_SZ%,"NFP Connection" HKO,"AppEvents\EventLabels\ProximityConnection","DispFileName",%REG_SZ%,"@mmres.dll,-5867" HKO,"AppEvents\EventLabels\RestoreDown",,%REG_SZ%,"Restore Down" HKO,"AppEvents\EventLabels\RestoreDown","DispFileName",%REG_SZ%,"@mmres.dll,-5841" HKO,"AppEvents\EventLabels\RestoreUp",,%REG_SZ%,"Restore Up" HKO,"AppEvents\EventLabels\RestoreUp","DispFileName",%REG_SZ%,"@mmres.dll,-5842" HKO,"AppEvents\EventLabels\SecurityBand",,%REG_SZ%,"Information Bar" HKO,"AppEvents\EventLabels\SecurityBand","DispFileName",%REG_SZ%,"@ieframe.dll,-10326" HKO,"AppEvents\EventLabels\ShowBand",,%REG_SZ%,"Show Toolbar Band" HKO,"AppEvents\EventLabels\ShowBand","DispFileName",%REG_SZ%,"@ieframe.dll,-10324" HKO,"AppEvents\EventLabels\SystemAsterisk",,%REG_SZ%,"Asterisk" HKO,"AppEvents\EventLabels\SystemAsterisk","DispFileName",%REG_SZ%,"@mmres.dll,-5843" HKO,"AppEvents\EventLabels\SystemExclamation",,%REG_SZ%,"Exclamation" HKO,"AppEvents\EventLabels\SystemExclamation","DispFileName",%REG_SZ%,"@mmres.dll,-5845" HKO,"AppEvents\EventLabels\SystemExit",,%REG_SZ%,"Exit Windows" HKO,"AppEvents\EventLabels\SystemExit","DispFileName",%REG_SZ%,"@mmres.dll,-5846" HKO,"AppEvents\EventLabels\SystemExit","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\SystemHand",,%REG_SZ%,"Critical Stop" HKO,"AppEvents\EventLabels\SystemHand","DispFileName",%REG_SZ%,"@mmres.dll,-5847" HKO,"AppEvents\EventLabels\SystemNotification",,%REG_SZ%,"System Notification" HKO,"AppEvents\EventLabels\SystemNotification","DispFileName",%REG_SZ%,"@mmres.dll,-5848" HKO,"AppEvents\EventLabels\SystemQuestion",,%REG_SZ%,"Question" HKO,"AppEvents\EventLabels\SystemQuestion","DispFileName",%REG_SZ%,"@mmres.dll,-5849" HKO,"AppEvents\EventLabels\WindowsLogoff",,%REG_SZ%,"Windows Logoff" HKO,"AppEvents\EventLabels\WindowsLogoff","DispFileName",%REG_SZ%,"@mmres.dll,-5852" HKO,"AppEvents\EventLabels\WindowsLogoff","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\WindowsLogon",,%REG_SZ%,"Windows Logon" HKO,"AppEvents\EventLabels\WindowsLogon","DispFileName",%REG_SZ%,"@mmres.dll,-5853" HKO,"AppEvents\EventLabels\WindowsLogon","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\EventLabels\WindowsUAC",,%REG_SZ%,"Windows User Account Control" HKO,"AppEvents\EventLabels\WindowsUAC","DispFileName",%REG_SZ%,"@mmres.dll,-5859" HKO,"AppEvents\EventLabels\WindowsUnlock",,%REG_SZ%,"Windows Unlock" HKO,"AppEvents\EventLabels\WindowsUnlock","DispFileName",%REG_SZ%,"@mmres.dll,-5869" HKO,"AppEvents\EventLabels\WindowsUnlock","ExcludeFromCPL",%REG_DWORD%,1 ; 0x00000001 HKO,"AppEvents\Schemes",,%REG_SZ%,".Default" HKO,"AppEvents\Schemes\Apps\.Default",,%REG_SZ%,"Windows" HKO,"AppEvents\Schemes\Apps\.Default","DispFileName",%REG_SZ%,"@mmres.dll,-5856" HKO,"AppEvents\Schemes\Apps\.Default\.Default\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\.Default\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\CCSelect",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\ChangeTheme\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\ChangeTheme\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\Close\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\Close\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Foreground.wav" HKO,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Foreground.wav" HKO,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Hardware Insert.wav" HKO,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Hardware Insert.wav" HKO,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Hardware Remove.wav" HKO,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Hardware Remove.wav" HKO,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Hardware Fail.wav" HKO,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Hardware Fail.wav" HKO,"AppEvents\Schemes\Apps\.Default\FaxBeep\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Email.wav" HKO,"AppEvents\Schemes\Apps\.Default\FaxBeep\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Email.wav" HKO,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\MailBeep\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Email.wav" HKO,"AppEvents\Schemes\Apps\.Default\MailBeep\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Email.wav" HKO,"AppEvents\Schemes\Apps\.Default\Maximize\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\Maximize\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\MessageNudge\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Message Nudge.wav" HKO,"AppEvents\Schemes\Apps\.Default\MessageNudge\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Message Nudge.wav" HKO,"AppEvents\Schemes\Apps\.Default\Minimize\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\Minimize\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\Notification.Default\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify System Generic.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Default\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify System Generic.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.IM\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Messaging.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.IM\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Messaging.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm01.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm01.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm10\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm10.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm10\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm10.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm2\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm02.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm2\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm02.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm3\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm03.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm3\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm03.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm4\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm04.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm4\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm04.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm5\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm05.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm5\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm05.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm6\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm06.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm6\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm06.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm7\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm07.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm7\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm07.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm8\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm08.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm8\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm08.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm9\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm09.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Alarm9\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Alarm09.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring01.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring01.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call10\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring10.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call10\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring10.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call2\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring02.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call2\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring02.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call3\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring03.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call3\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring03.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call4\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring04.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call4\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring04.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call5\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring05.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call5\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring05.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call6\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring06.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call6\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring06.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call7\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring07.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call7\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring07.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call8\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring08.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call8\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring08.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call9\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring09.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Looping.Call9\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Ring09.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Mail\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Email.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Mail\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Email.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Proximity\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Proximity Notification.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Proximity\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Proximity Notification.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Reminder\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Calendar.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.Reminder\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Calendar.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.SMS\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Messaging.wav" HKO,"AppEvents\Schemes\Apps\.Default\Notification.SMS\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Notify Messaging.wav" HKO,"AppEvents\Schemes\Apps\.Default\Open\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\Open\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\ProximityConnection\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Proximity Connection.wav" HKO,"AppEvents\Schemes\Apps\.Default\ProximityConnection\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Proximity Connection.wav" HKO,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\ShowBand",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\SystemExit\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\SystemExit\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\SystemHand\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Foreground.wav" HKO,"AppEvents\Schemes\Apps\.Default\SystemHand\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Foreground.wav" HKO,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Background.wav" HKO,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Logon.wav" HKO,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Logon.wav" HKO,"AppEvents\Schemes\Apps\.Default\WindowsUAC\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows User Account Control.wav" HKO,"AppEvents\Schemes\Apps\.Default\WindowsUAC\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows User Account Control.wav" HKO,"AppEvents\Schemes\Apps\.Default\WindowsUnlock\.Current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Unlock.wav" HKO,"AppEvents\Schemes\Apps\.Default\WindowsUnlock\.Default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Windows Unlock.wav" HKO,"AppEvents\Schemes\Apps\Explorer",,%REG_SZ%,"File Explorer" HKO,"AppEvents\Schemes\Apps\Explorer","DispFileName",%REG_SZ%,"@mmres.dll,-5854" HKO,"AppEvents\Schemes\Apps\Explorer\ActivatingDocument",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\BlockedPopup\.current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\BlockedPopup\.default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\FeedDiscovered\.current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\FeedDiscovered\.default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\MoveMenuItem",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\Navigating\.Current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\Navigating\.Default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\SecurityBand\.current",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\Explorer\SecurityBand\.default",,%REG_KEYONLY% HKO,"AppEvents\Schemes\Apps\sapisvr",,%REG_SZ%,"Speech Recognition" HKO,"AppEvents\Schemes\Apps\sapisvr","DispFileName",%REG_SZ%,"@C:\Windows\System32\speech\speechux\sapi.cpl,-5555" HKO,"AppEvents\Schemes\Apps\sapisvr\DisNumbersSound\.current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Disambiguation.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\DisNumbersSound\.default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Disambiguation.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\HubOffSound\.current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Off.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\HubOffSound\.default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Off.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\HubOnSound\.current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech On.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\HubOnSound\.default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech On.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\HubSleepSound\.current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Sleep.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\HubSleepSound\.default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Sleep.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\MisrecoSound\.current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Misrecognition.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\MisrecoSound\.default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Misrecognition.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\PanelSound\.current",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Disambiguation.wav" HKO,"AppEvents\Schemes\Apps\sapisvr\PanelSound\.default",,%REG_EXPAND_SZ%,"%%SystemRoot%%\media\Speech Disambiguation.wav" HKO,"AppEvents\Schemes\Names\.Default",,%REG_SZ%,"@mmres.dll,-800" HKO,"AppEvents\Schemes\Names\.None",,%REG_SZ%,"@mmres.dll,-801" HKO,"Console","ColorTable00",%REG_DWORD%,789516 ; 0x000c0c0c HKO,"Console","ColorTable01",%REG_DWORD%,14300928 ; 0x00da3700 HKO,"Console","ColorTable02",%REG_DWORD%,958739 ; 0x000ea113 HKO,"Console","ColorTable03",%REG_DWORD%,14521914 ; 0x00dd963a HKO,"Console","ColorTable04",%REG_DWORD%,2035653 ; 0x001f0fc5 HKO,"Console","ColorTable05",%REG_DWORD%,9967496 ; 0x00981788 HKO,"Console","ColorTable06",%REG_DWORD%,40129 ; 0x00009cc1 HKO,"Console","ColorTable07",%REG_DWORD%,13421772 ; 0x00cccccc HKO,"Console","ColorTable08",%REG_DWORD%,7763574 ; 0x00767676 HKO,"Console","ColorTable09",%REG_DWORD%,16742459 ; 0x00ff783b HKO,"Console","ColorTable10",%REG_DWORD%,837142 ; 0x000cc616 HKO,"Console","ColorTable11",%REG_DWORD%,14079585 ; 0x00d6d661 HKO,"Console","ColorTable12",%REG_DWORD%,5654759 ; 0x005648e7 HKO,"Console","ColorTable13",%REG_DWORD%,10354868 ; 0x009e00b4 HKO,"Console","ColorTable14",%REG_DWORD%,10875385 ; 0x00a5f1f9 HKO,"Console","ColorTable15",%REG_DWORD%,15921906 ; 0x00f2f2f2 HKO,"Console","CtrlKeyShortcutsDisabled",%REG_DWORD%,0 ; 0x00000000 HKO,"Console","CursorColor",%REG_DWORD%,4294967295 ; 0xffffffff HKO,"Console","CursorSize",%REG_DWORD%,25 ; 0x00000019 HKO,"Console","DefaultBackground",%REG_DWORD%,4294967295 ; 0xffffffff HKO,"Console","DefaultForeground",%REG_DWORD%,4294967295 ; 0xffffffff HKO,"Console","EnableColorSelection",%REG_DWORD%,0 ; 0x00000000 HKO,"Console","ExtendedEditKey",%REG_DWORD%,1 ; 0x00000001 HKO,"Console","ExtendedEditKeyCustom",%REG_DWORD%,0 ; 0x00000000 HKO,"Console","FaceName",%REG_SZ%,"__DefaultTTFont__" HKO,"Console","FilterOnPaste",%REG_DWORD%,1 ; 0x00000001 HKO,"Console","FontFamily",%REG_DWORD%,0 ; 0x00000000 HKO,"Console","FontSize",%REG_DWORD%,1048576 ; 0x00100000 HKO,"Console","FontWeight",%REG_DWORD%,0 ; 0x00000000 HKO,"Console","ForceV2",%REG_DWORD%,1 ; 0x00000001 HKO,"Console","FullScreen",%REG_DWORD%,0 ; 0x00000000 HKO,"Console","HistoryBufferSize",%REG_DWORD%,50 ; 0x00000032 HKO,"Console","HistoryNoDup",%REG_DWORD%,0 ; 0x00000000 HKO,"Console","InsertMode",%REG_DWORD%,1 ; 0x00000001 HKO,"Console","LineSelection",%REG_DWORD%,1 ; 0x00000001 HKO,"Console","LineWrap",%REG_DWORD%,1 ; 0x00000001 HKO,"Console","LoadConIme",%REG_DWORD%,1 ; 0x00000001 HKO,"Console","NumberOfHistoryBuffers",%REG_DWORD%,4 ; 0x00000004 HKO,"Console","PopupColors",%REG_DWORD%,245 ; 0x000000f5 HKO,"Console","QuickEdit",%REG_DWORD%,1 ; 0x00000001 HKO,"Console","ScreenBufferSize",%REG_DWORD%,589889656 ; 0x23290078 HKO,"Console","ScreenColors",%REG_DWORD%,7 ; 0x00000007 HKO,"Console","ScrollScale",%REG_DWORD%,1 ; 0x00000001 HKO,"Console","TerminalScrolling",%REG_DWORD%,0 ; 0x00000000 HKO,"Console","TrimLeadingZeros",%REG_DWORD%,0 ; 0x00000000 HKO,"Console","WindowAlpha",%REG_DWORD%,255 ; 0x000000ff HKO,"Console","WindowSize",%REG_DWORD%,1966200 ; 0x001e0078 HKO,"Console","WordDelimiters",%REG_DWORD%,0 ; 0x00000000 HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","ColorTable05",%REG_DWORD%,5645313 ; 0x00562401 HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","ColorTable06",%REG_DWORD%,15789550 ; 0x00f0edee HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","FaceName",%REG_SZ%,"Lucida Console" HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","FontFamily",%REG_DWORD%,54 ; 0x00000036 HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","FontWeight",%REG_DWORD%,400 ; 0x00000190 HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","PopupColors",%REG_DWORD%,243 ; 0x000000f3 HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","QuickEdit",%REG_DWORD%,1 ; 0x00000001 HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","ScreenBufferSize",%REG_DWORD%,196608120 ; 0x0bb80078 HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","ScreenColors",%REG_DWORD%,86 ; 0x00000056 HKO,"Console\%SystemRoot%_System32_WindowsPowerShell_v1.0_powershell.exe","WindowSize",%REG_DWORD%,3276920 ; 0x00320078 HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","ColorTable05",%REG_DWORD%,5645313 ; 0x00562401 HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","ColorTable06",%REG_DWORD%,15789550 ; 0x00f0edee HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","FaceName",%REG_SZ%,"Lucida Console" HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","FontFamily",%REG_DWORD%,54 ; 0x00000036 HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","FontWeight",%REG_DWORD%,400 ; 0x00000190 HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","PopupColors",%REG_DWORD%,243 ; 0x000000f3 HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","QuickEdit",%REG_DWORD%,1 ; 0x00000001 HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","ScreenBufferSize",%REG_DWORD%,196608120 ; 0x0bb80078 HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","ScreenColors",%REG_DWORD%,86 ; 0x00000056 HKO,"Console\%SystemRoot%_SysWOW64_WindowsPowerShell_v1.0_powershell.exe","WindowSize",%REG_DWORD%,3276920 ; 0x00320078 HKO,"Control Panel\Accessibility","MessageDuration",%REG_DWORD%,5 ; 0x00000005 HKO,"Control Panel\Accessibility","MinimumHitRadius",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Accessibility\AudioDescription","Locale",%REG_SZ%,"" HKO,"Control Panel\Accessibility\AudioDescription","On",%REG_SZ%,"0" HKO,"Control Panel\Accessibility\Blind Access","On",%REG_SZ%,"0" HKO,"Control Panel\Accessibility\HighContrast","Flags",%REG_SZ%,"126" HKO,"Control Panel\Accessibility\HighContrast","High Contrast Scheme",%REG_SZ%,"" HKO,"Control Panel\Accessibility\Keyboard Preference","On",%REG_SZ%,"0" HKO,"Control Panel\Accessibility\Keyboard Response","AutoRepeatDelay",%REG_SZ%,"1000" HKO,"Control Panel\Accessibility\Keyboard Response","AutoRepeatRate",%REG_SZ%,"500" HKO,"Control Panel\Accessibility\Keyboard Response","BounceTime",%REG_SZ%,"0" HKO,"Control Panel\Accessibility\Keyboard Response","DelayBeforeAcceptance",%REG_SZ%,"1000" HKO,"Control Panel\Accessibility\Keyboard Response","Flags",%REG_SZ%,"126" HKO,"Control Panel\Accessibility\Keyboard Response","Last BounceKey Setting",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Accessibility\Keyboard Response","Last Valid Delay",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Accessibility\Keyboard Response","Last Valid Repeat",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Accessibility\Keyboard Response","Last Valid Wait",%REG_DWORD%,1000 ; 0x000003e8 HKO,"Control Panel\Accessibility\MouseKeys","Flags",%REG_SZ%,"62" HKO,"Control Panel\Accessibility\MouseKeys","MaximumSpeed",%REG_SZ%,"80" HKO,"Control Panel\Accessibility\MouseKeys","TimeToMaximumSpeed",%REG_SZ%,"3000" HKO,"Control Panel\Accessibility\On","Locale",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Accessibility\On","On",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Accessibility\ShowSounds","On",%REG_SZ%,"0" HKO,"Control Panel\Accessibility\SlateLaunch","ATapp",%REG_SZ%,"narrator" HKO,"Control Panel\Accessibility\SlateLaunch","LaunchAT",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\Accessibility\SoundSentry","Flags",%REG_SZ%,"2" HKO,"Control Panel\Accessibility\SoundSentry","FSTextEffect",%REG_SZ%,"0" HKO,"Control Panel\Accessibility\SoundSentry","TextEffect",%REG_SZ%,"0" HKO,"Control Panel\Accessibility\SoundSentry","WindowsEffect",%REG_SZ%,"1" HKO,"Control Panel\Accessibility\StickyKeys","Flags",%REG_SZ%,"510" HKO,"Control Panel\Accessibility\TimeOut","Flags",%REG_SZ%,"2" HKO,"Control Panel\Accessibility\TimeOut","TimeToWait",%REG_SZ%,"300000" HKO,"Control Panel\Accessibility\ToggleKeys","Flags",%REG_SZ%,"62" HKO,"Control Panel\Appearance\New Schemes",,%REG_KEYONLY% HKO,"Control Panel\Appearance\Schemes","@themeui.dll,-850",%REG_BINARY%,02,00,00,00,46,00,00,00,01,00,00,00,11,00,00,00,11,00,00,00,14,00,00,00,14,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,fc,7f,22,14,fc,7f,b0,fe,12,00,00,00,00,00,00,00,00,00,98,23,eb,77,0f,00,00,00,0f,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,f0,77,00,20,14,00,00,00,00,10,80,05,14,00,f0,1f,14,00,00,00,14,00,12,00,00,00,12,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,00,88,fb,e8,77,02,02,00,00,ac,b9,f0,77,00,00,00,00,20,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,7c,6b,e8,77,00,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,00,06,00,00,00,18,00,00,00,ff,ff,ff,ff,f0,4b,21,fc,00,c4,f0,77,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,00,0b,00,00,00,00,ff,12,00,50,00,00,00,c0,fe,12,00,0c,10,00,01,00,00,00,00,00,00,00,00,00,00,ff,00,00,ff,ff,00,00,00,00,00,00,00,00,00,ff,ff,ff,00,ff,ff,ff,00,ff,ff,00,00,ff,ff,ff,00,00,00,ff,00,00,ff,ff,00,00,00,00,00,00,80,00,00,ff,ff,ff,00,00,00,00,00,80,80,80,00,00,ff,00,00,ff,ff,ff,00,00,00,00,00,c0,c0,c0,00,ff,ff,ff,00,ff,ff,ff,00,ff,ff,00,00,00,00,00,00,c0,c0,c0,00,80,80,ff,00,00,00,ff,00,00,ff,ff,00 HKO,"Control Panel\Appearance\Schemes","@themeui.dll,-851",%REG_BINARY%,02,00,00,00,46,00,00,00,01,00,00,00,11,00,00,00,11,00,00,00,14,00,00,00,14,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,fc,7f,22,14,fc,7f,b0,fe,12,00,00,00,00,00,00,00,00,00,98,23,eb,77,0f,00,00,00,0f,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,f0,77,00,20,14,00,00,00,00,10,80,05,14,00,f0,1f,14,00,00,00,14,00,12,00,00,00,12,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,00,88,fb,e8,77,02,02,00,00,ac,b9,f0,77,00,00,00,00,20,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,7c,6b,e8,77,00,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,00,06,00,00,00,18,00,00,00,ff,ff,ff,ff,f0,4b,21,fc,00,c4,f0,77,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,00,0b,00,00,00,00,ff,12,00,50,00,00,00,c0,fe,12,00,0c,10,00,01,00,00,00,00,00,00,00,00,00,ff,ff,00,00,00,ff,00,00,00,00,00,00,00,00,00,ff,ff,ff,00,00,ff,00,00,00,ff,00,00,00,00,00,00,00,ff,ff,00,00,00,ff,00,ff,ff,ff,00,00,00,ff,00,ff,ff,ff,00,00,00,00,00,80,80,80,00,c0,c0,c0,00,00,ff,00,00,ff,ff,ff,00,c0,c0,c0,00,ff,ff,ff,00,ff,ff,ff,00,00,00,00,00,ff,ff,00,00,c0,c0,c0,00,80,80,ff,00,00,ff,ff,00,00,00,ff,00 HKO,"Control Panel\Appearance\Schemes","@themeui.dll,-852",%REG_BINARY%,02,00,00,00,46,00,00,00,01,00,00,00,11,00,00,00,11,00,00,00,14,00,00,00,14,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,fc,7f,22,14,fc,7f,b0,fe,12,00,00,00,00,00,00,00,00,00,98,23,eb,77,0f,00,00,00,0f,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,f0,77,00,20,14,00,00,00,00,10,80,05,14,00,f0,1f,14,00,00,00,14,00,12,00,00,00,12,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,00,88,fb,e8,77,02,02,00,00,ac,b9,f0,77,00,00,00,00,20,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,7c,6b,e8,77,00,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,00,06,00,00,00,18,00,00,00,ff,ff,ff,ff,f0,4b,21,fc,00,c4,f0,77,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,00,0b,00,00,00,00,ff,12,00,50,00,00,00,c0,fe,12,00,0c,10,00,01,00,00,00,00,00,00,00,00,80,00,80,00,00,80,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,00,ff,ff,ff,00,ff,ff,ff,00,ff,ff,ff,00,ff,ff,00,00,00,80,00,00,00,00,00,00,80,00,80,00,ff,ff,ff,00,00,00,00,00,80,80,80,00,00,ff,00,00,ff,ff,ff,00,ff,ff,ff,00,c0,c0,c0,00,ff,ff,ff,00,ff,ff,ff,00,ff,ff,ff,00,00,00,00,00,c0,c0,c0,00,80,80,ff,00,80,00,80,00,00,80,00,00 HKO,"Control Panel\Appearance\Schemes","@themeui.dll,-853",%REG_BINARY%,02,00,00,00,46,00,00,00,01,00,00,00,11,00,00,00,11,00,00,00,14,00,00,00,14,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,fc,7f,22,14,fc,7f,b0,fe,12,00,00,00,00,00,00,00,00,00,98,23,eb,77,0f,00,00,00,0f,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,f0,77,00,20,14,00,00,00,00,10,80,05,14,00,f0,1f,14,00,00,00,14,00,12,00,00,00,12,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,00,88,fb,e8,77,02,02,00,00,ac,b9,f0,77,00,00,00,00,20,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,7c,6b,e8,77,00,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,00,06,00,00,00,18,00,00,00,ff,ff,ff,ff,f0,4b,21,fc,00,c4,f0,77,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,00,0b,00,00,00,00,ff,12,00,50,00,00,00,c0,fe,12,00,0c,10,00,01,ff,ff,ff,00,ff,ff,ff,00,00,00,00,00,ff,ff,ff,00,ff,ff,ff,00,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,00,80,80,80,00,c0,c0,c0,00,80,80,80,00,00,00,00,00,ff,ff,ff,00,ff,ff,ff,00,80,80,80,00,00,80,00,00,00,00,00,00,00,00,00,00,c0,c0,c0,00,00,00,00,00,c0,c0,c0,00,00,00,00,00,ff,ff,ff,00,c0,c0,c0,00,00,00,00,00,00,00,00,00,ff,ff,ff,00 HKO,"Control Panel\Appearance\Schemes","@themeui.dll,-854",%REG_BINARY%,02,00,00,00,f4,01,00,00,01,00,00,00,10,00,00,00,10,00,00,00,12,00,00,00,12,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0c,00,00,00,0f,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,12,00,00,00,12,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,d4,d0,c8,00,3a,6e,a5,00,0a,24,6a,00,80,80,80,00,d4,d0,c8,00,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,00,ff,ff,ff,00,d4,d0,c8,00,d4,d0,c8,00,80,80,80,00,0a,24,6a,00,ff,ff,ff,00,d4,d0,c8,00,80,80,80,00,80,80,80,00,00,00,00,00,d4,d0,c8,00,ff,ff,ff,00,40,40,40,00,d4,d0,c8,00,00,00,00,00,ff,ff,e1,00,b5,b5,b5,00,00,00,80,00,a6,ca,f0,00,c0,c0,c0,00 HKO,"Control Panel\Colors","ActiveBorder",%REG_SZ%,"180 180 180" HKO,"Control Panel\Colors","ActiveTitle",%REG_SZ%,"153 180 209" HKO,"Control Panel\Colors","AppWorkspace",%REG_SZ%,"171 171 171" HKO,"Control Panel\Colors","Background",%REG_SZ%,"0 0 0" HKO,"Control Panel\Colors","ButtonAlternateFace",%REG_SZ%,"0 0 0" HKO,"Control Panel\Colors","ButtonDkShadow",%REG_SZ%,"105 105 105" HKO,"Control Panel\Colors","ButtonFace",%REG_SZ%,"240 240 240" HKO,"Control Panel\Colors","ButtonHilight",%REG_SZ%,"255 255 255" HKO,"Control Panel\Colors","ButtonLight",%REG_SZ%,"227 227 227" HKO,"Control Panel\Colors","ButtonShadow",%REG_SZ%,"160 160 160" HKO,"Control Panel\Colors","ButtonText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Colors","GradientActiveTitle",%REG_SZ%,"185 209 234" HKO,"Control Panel\Colors","GradientInactiveTitle",%REG_SZ%,"215 228 242" HKO,"Control Panel\Colors","GrayText",%REG_SZ%,"109 109 109" HKO,"Control Panel\Colors","Hilight",%REG_SZ%,"51 153 255" HKO,"Control Panel\Colors","HilightText",%REG_SZ%,"255 255 255" HKO,"Control Panel\Colors","HotTrackingColor",%REG_SZ%,"0 102 204" HKO,"Control Panel\Colors","InactiveBorder",%REG_SZ%,"244 247 252" HKO,"Control Panel\Colors","InactiveTitle",%REG_SZ%,"191 205 219" HKO,"Control Panel\Colors","InactiveTitleText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Colors","InfoText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Colors","InfoWindow",%REG_SZ%,"255 255 225" HKO,"Control Panel\Colors","Menu",%REG_SZ%,"240 240 240" HKO,"Control Panel\Colors","MenuBar",%REG_SZ%,"240 240 240" HKO,"Control Panel\Colors","MenuHilight",%REG_SZ%,"51 153 255" HKO,"Control Panel\Colors","MenuText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Colors","Scrollbar",%REG_SZ%,"200 200 200" HKO,"Control Panel\Colors","TitleText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Colors","Window",%REG_SZ%,"255 255 255" HKO,"Control Panel\Colors","WindowFrame",%REG_SZ%,"100 100 100" HKO,"Control Panel\Colors","WindowText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Cursors","AppStarting",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_working.ani" HKO,"Control Panel\Cursors","Arrow",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_arrow.cur" HKO,"Control Panel\Cursors","ContactVisualization",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\Cursors","Crosshair",%REG_EXPAND_SZ%,"" HKO,"Control Panel\Cursors","CursorBaseSize",%REG_DWORD%,32 ; 0x00000020 HKO,"Control Panel\Cursors","GestureVisualization",%REG_DWORD%,31 ; 0x0000001f HKO,"Control Panel\Cursors","Hand",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_link.cur" HKO,"Control Panel\Cursors","Help",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_helpsel.cur" HKO,"Control Panel\Cursors","IBeam",%REG_EXPAND_SZ%,"" HKO,"Control Panel\Cursors","No",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_unavail.cur" HKO,"Control Panel\Cursors","NWPen",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_pen.cur" HKO,"Control Panel\Cursors","Scheme Source",%REG_DWORD%,2 ; 0x00000002 HKO,"Control Panel\Cursors","SizeAll",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_move.cur" HKO,"Control Panel\Cursors","SizeNESW",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_nesw.cur" HKO,"Control Panel\Cursors","SizeNS",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_ns.cur" HKO,"Control Panel\Cursors","SizeNWSE",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_nwse.cur" HKO,"Control Panel\Cursors","SizeWE",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_ew.cur" HKO,"Control Panel\Cursors","UpArrow",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_up.cur" HKO,"Control Panel\Cursors","Wait",%REG_EXPAND_SZ%,"%%SystemRoot%%\cursors\aero_busy.ani" HKO,"Control Panel\Desktop","ActiveWndTrackTimeout",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Desktop","BlockSendInputResets",%REG_SZ%,"0" HKO,"Control Panel\Desktop","CaretTimeout",%REG_DWORD%,5000 ; 0x00001388 HKO,"Control Panel\Desktop","CaretWidth",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\Desktop","ClickLockTime",%REG_DWORD%,1200 ; 0x000004b0 HKO,"Control Panel\Desktop","CoolSwitchColumns",%REG_SZ%,"7" HKO,"Control Panel\Desktop","CoolSwitchRows",%REG_SZ%,"3" HKO,"Control Panel\Desktop","CursorBlinkRate",%REG_SZ%,"530" HKO,"Control Panel\Desktop","DockMoving",%REG_SZ%,"1" HKO,"Control Panel\Desktop","DragFromMaximize",%REG_SZ%,"1" HKO,"Control Panel\Desktop","DragFullWindows",%REG_SZ%,"1" HKO,"Control Panel\Desktop","DragHeight",%REG_SZ%,"4" HKO,"Control Panel\Desktop","DragWidth",%REG_SZ%,"4" HKO,"Control Panel\Desktop","FocusBorderHeight",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\Desktop","FocusBorderWidth",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\Desktop","FontSmoothing",%REG_SZ%,"2" HKO,"Control Panel\Desktop","FontSmoothingGamma",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Desktop","FontSmoothingOrientation",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\Desktop","FontSmoothingType",%REG_DWORD%,2 ; 0x00000002 HKO,"Control Panel\Desktop","ForegroundFlashCount",%REG_DWORD%,7 ; 0x00000007 HKO,"Control Panel\Desktop","ForegroundLockTimeout",%REG_DWORD%,200000 ; 0x00030d40 HKO,"Control Panel\Desktop","LeftOverlapChars",%REG_SZ%,"3" HKO,"Control Panel\Desktop","MenuShowDelay",%REG_SZ%,"400" HKO,"Control Panel\Desktop","MouseWheelRouting",%REG_DWORD%,2 ; 0x00000002 HKO,"Control Panel\Desktop","PaintDesktopVersion",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Desktop","Pattern",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Desktop","RightOverlapChars",%REG_SZ%,"3" HKO,"Control Panel\Desktop","ScreenSaveActive",%REG_SZ%,"1" HKO,"Control Panel\Desktop","SnapSizing",%REG_SZ%,"1" HKO,"Control Panel\Desktop","TileWallpaper",%REG_SZ%,"0" HKO,"Control Panel\Desktop","WallPaper",%REG_SZ%,"C:\Windows\Web\Wallpaper\Windows\img0.jpg" HKO,"Control Panel\Desktop","WallpaperOriginX",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Desktop","WallpaperOriginY",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Desktop","WallpaperStyle",%REG_SZ%,"10" HKO,"Control Panel\Desktop","WheelScrollChars",%REG_SZ%,"3" HKO,"Control Panel\Desktop","WheelScrollLines",%REG_SZ%,"3" HKO,"Control Panel\Desktop","WindowArrangementActive",%REG_SZ%,"1" HKO,"Control Panel\Desktop\Colors","ActiveBorder",%REG_SZ%,"212 208 200" HKO,"Control Panel\Desktop\Colors","ActiveTitle",%REG_SZ%,"10 36 106" HKO,"Control Panel\Desktop\Colors","AppWorkSpace",%REG_SZ%,"128 128 128" HKO,"Control Panel\Desktop\Colors","ButtonAlternateFace",%REG_SZ%,"181 181 181" HKO,"Control Panel\Desktop\Colors","ButtonDkShadow",%REG_SZ%,"64 64 64" HKO,"Control Panel\Desktop\Colors","ButtonFace",%REG_SZ%,"212 208 200" HKO,"Control Panel\Desktop\Colors","ButtonHiLight",%REG_SZ%,"255 255 255" HKO,"Control Panel\Desktop\Colors","ButtonLight",%REG_SZ%,"212 208 200" HKO,"Control Panel\Desktop\Colors","ButtonShadow",%REG_SZ%,"128 128 128" HKO,"Control Panel\Desktop\Colors","ButtonText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Desktop\Colors","GradientActiveTitle",%REG_SZ%,"166 202 240" HKO,"Control Panel\Desktop\Colors","GradientInactiveTitle",%REG_SZ%,"192 192 192" HKO,"Control Panel\Desktop\Colors","GrayText",%REG_SZ%,"128 128 128" HKO,"Control Panel\Desktop\Colors","Hilight",%REG_SZ%,"10 36 106" HKO,"Control Panel\Desktop\Colors","HilightText",%REG_SZ%,"255 255 255" HKO,"Control Panel\Desktop\Colors","HotTrackingColor",%REG_SZ%,"0 0 128" HKO,"Control Panel\Desktop\Colors","InactiveBorder",%REG_SZ%,"212 208 200" HKO,"Control Panel\Desktop\Colors","InactiveTitle",%REG_SZ%,"128 128 128" HKO,"Control Panel\Desktop\Colors","InactiveTitleText",%REG_SZ%,"212 208 200" HKO,"Control Panel\Desktop\Colors","InfoText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Desktop\Colors","InfoWindow",%REG_SZ%,"255 255 255" HKO,"Control Panel\Desktop\Colors","Menu",%REG_SZ%,"212 208 200" HKO,"Control Panel\Desktop\Colors","MenuText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Desktop\Colors","Scrollbar",%REG_SZ%,"212 208 200" HKO,"Control Panel\Desktop\Colors","TitleText",%REG_SZ%,"255 255 255" HKO,"Control Panel\Desktop\Colors","Window",%REG_SZ%,"255 255 255" HKO,"Control Panel\Desktop\Colors","WindowFrame",%REG_SZ%,"0 0 0" HKO,"Control Panel\Desktop\Colors","WindowText",%REG_SZ%,"0 0 0" HKO,"Control Panel\Desktop\WindowMetrics","BorderWidth",%REG_SZ%,"#USR:Control Panel\Desktop\WindowMetrics" HKO,"Control Panel\Desktop\WindowMetrics","CaptionFont",%REG_BINARY%,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKO,"Control Panel\Desktop\WindowMetrics","CaptionHeight",%REG_SZ%,"-270" HKO,"Control Panel\Desktop\WindowMetrics","CaptionWidth",%REG_SZ%,"-270" HKO,"Control Panel\Desktop\WindowMetrics","IconFont",%REG_BINARY%,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKO,"Control Panel\Desktop\WindowMetrics","IconTitleWrap",%REG_SZ%,"1" HKO,"Control Panel\Desktop\WindowMetrics","MenuFont",%REG_BINARY%,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKO,"Control Panel\Desktop\WindowMetrics","MenuHeight",%REG_SZ%,"-270" HKO,"Control Panel\Desktop\WindowMetrics","MenuWidth",%REG_SZ%,"-270" HKO,"Control Panel\Desktop\WindowMetrics","MessageFont",%REG_BINARY%,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKO,"Control Panel\Desktop\WindowMetrics","ScrollHeight",%REG_SZ%,"-240" HKO,"Control Panel\Desktop\WindowMetrics","ScrollWidth",%REG_SZ%,"-240" HKO,"Control Panel\Desktop\WindowMetrics","Shell Icon Size",%REG_SZ%,"32" HKO,"Control Panel\Desktop\WindowMetrics","SmCaptionFont",%REG_BINARY%,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKO,"Control Panel\Desktop\WindowMetrics","SmCaptionHeight",%REG_SZ%,"-180" HKO,"Control Panel\Desktop\WindowMetrics","SmCaptionWidth",%REG_SZ%,"-180" HKO,"Control Panel\Desktop\WindowMetrics","StatusFont",%REG_BINARY%,f5,ff,ff,ff,00,00,00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKO,"Control Panel\Input Method","Show Status",%REG_SZ%,"1" HKO,"Control Panel\Input Method\Hot Keys\00000010","Key Modifiers",%REG_BINARY%,02,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000010","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000010","Virtual Key",%REG_BINARY%,20,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000011","Key Modifiers",%REG_BINARY%,04,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000011","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000011","Virtual Key",%REG_BINARY%,20,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000012","Key Modifiers",%REG_BINARY%,02,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000012","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000012","Virtual Key",%REG_BINARY%,be,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000070","Key Modifiers",%REG_BINARY%,02,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000070","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000070","Virtual Key",%REG_BINARY%,20,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000071","Key Modifiers",%REG_BINARY%,04,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000071","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000071","Virtual Key",%REG_BINARY%,20,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000072","Key Modifiers",%REG_BINARY%,03,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000072","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000072","Virtual Key",%REG_BINARY%,bc,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000104","Key Modifiers",%REG_BINARY%,06,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000104","Target IME",%REG_BINARY%,11,04,01,e0 HKO,"Control Panel\Input Method\Hot Keys\00000104","Virtual Key",%REG_BINARY%,30,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000200","Key Modifiers",%REG_BINARY%,03,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000200","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000200","Virtual Key",%REG_BINARY%,47,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000201","Key Modifiers",%REG_BINARY%,03,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000201","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000201","Virtual Key",%REG_BINARY%,4b,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000202","Key Modifiers",%REG_BINARY%,03,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000202","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000202","Virtual Key",%REG_BINARY%,4c,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000203","Key Modifiers",%REG_BINARY%,03,c0,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000203","Target IME",%REG_BINARY%,00,00,00,00 HKO,"Control Panel\Input Method\Hot Keys\00000203","Virtual Key",%REG_BINARY%,56,00,00,00 HKO,"Control Panel\International","Locale",%REG_SZ%,"00000407" HKO,"Control Panel\International","LocaleName",%REG_SZ%,"de-DE" HKO,"Control Panel\International","s1159",%REG_SZ%,"" HKO,"Control Panel\International","s2359",%REG_SZ%,"" HKO,"Control Panel\International","sCurrency",%REG_SZ%,"€" HKO,"Control Panel\International","sDate",%REG_SZ%,"." HKO,"Control Panel\International","sDecimal",%REG_SZ%,"," HKO,"Control Panel\International","sGrouping",%REG_SZ%,"3;0" HKO,"Control Panel\International","sLanguage",%REG_SZ%,"DEU" HKO,"Control Panel\International","sList",%REG_SZ%,";" HKO,"Control Panel\International","sLongDate",%REG_SZ%,"dddd, d. MMMM yyyy" HKO,"Control Panel\International","sMonDecimalSep",%REG_SZ%,"," HKO,"Control Panel\International","sMonGrouping",%REG_SZ%,"3;0" HKO,"Control Panel\International","sMonThousandSep",%REG_SZ%,"." HKO,"Control Panel\International","sNativeDigits",%REG_SZ%,"0123456789" HKO,"Control Panel\International","sNegativeSign",%REG_SZ%,"-" HKO,"Control Panel\International","sPositiveSign",%REG_SZ%,"" HKO,"Control Panel\International","sShortDate",%REG_SZ%,"dd.MM.yyyy" HKO,"Control Panel\International","sThousand",%REG_SZ%,"." HKO,"Control Panel\International","sTime",%REG_SZ%,":" HKO,"Control Panel\International","sTimeFormat",%REG_SZ%,"HH:mm:ss" HKO,"Control Panel\International","sShortTime",%REG_SZ%,"HH:mm" HKO,"Control Panel\International","sYearMonth",%REG_SZ%,"MMMM yyyy" HKO,"Control Panel\International","iCalendarType",%REG_SZ%,"1" HKO,"Control Panel\International","iCountry",%REG_SZ%,"49" HKO,"Control Panel\International","iCurrDigits",%REG_SZ%,"2" HKO,"Control Panel\International","iCurrency",%REG_SZ%,"3" HKO,"Control Panel\International","iDate",%REG_SZ%,"1" HKO,"Control Panel\International","iDigits",%REG_SZ%,"2" HKO,"Control Panel\International","NumShape",%REG_SZ%,"1" HKO,"Control Panel\International","iFirstDayOfWeek",%REG_SZ%,"0" HKO,"Control Panel\International","iFirstWeekOfYear",%REG_SZ%,"2" HKO,"Control Panel\International","iLZero",%REG_SZ%,"1" HKO,"Control Panel\International","iMeasure",%REG_SZ%,"0" HKO,"Control Panel\International","iNegCurr",%REG_SZ%,"8" HKO,"Control Panel\International","iNegNumber",%REG_SZ%,"1" HKO,"Control Panel\International","iPaperSize",%REG_SZ%,"9" HKO,"Control Panel\International","iTime",%REG_SZ%,"1" HKO,"Control Panel\International","iTimePrefix",%REG_SZ%,"0" HKO,"Control Panel\International","iTLZero",%REG_SZ%,"1" HKO,"Control Panel\International\Geo","Nation",%REG_SZ%,"94" HKO,"Control Panel\International\Geo","Name",%REG_SZ%,"DE" HKO,"Control Panel\International\User Profile","Languages",%REG_MULTI_SZ%,"de-DE" HKO,"Control Panel\International\User Profile","ShowAutoCorrection",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\International\User Profile","ShowTextPrediction",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\International\User Profile","ShowCasing",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\International\User Profile","ShowShiftLock",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\International\User Profile\de-DE","0407:00000407",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\International\User Profile System Backup","Languages",%REG_MULTI_SZ%,"de-DE" HKO,"Control Panel\International\User Profile System Backup","ShowAutoCorrection",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\International\User Profile System Backup","ShowTextPrediction",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\International\User Profile System Backup","ShowCasing",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\International\User Profile System Backup","ShowShiftLock",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\International\User Profile System Backup\de-DE","0407:00000407",%REG_DWORD%,1 ; 0x00000001 HKO,"Control Panel\Keyboard","InitialKeyboardIndicators",%REG_SZ%,"2147483648" HKO,"Control Panel\Keyboard","KeyboardDelay",%REG_SZ%,"1" HKO,"Control Panel\Keyboard","KeyboardSpeed",%REG_SZ%,"31" HKO,"Control Panel\Mouse","ActiveWindowTracking",%REG_DWORD%,0 ; 0x00000000 HKO,"Control Panel\Mouse","Beep",%REG_SZ%,"No" HKO,"Control Panel\Mouse","DoubleClickHeight",%REG_SZ%,"4" HKO,"Control Panel\Mouse","DoubleClickSpeed",%REG_SZ%,"500" HKO,"Control Panel\Mouse","DoubleClickWidth",%REG_SZ%,"4" HKO,"Control Panel\Mouse","ExtendedSounds",%REG_SZ%,"No" HKO,"Control Panel\Mouse","MouseHoverHeight",%REG_SZ%,"4" HKO,"Control Panel\Mouse","MouseHoverTime",%REG_SZ%,"400" HKO,"Control Panel\Mouse","MouseHoverWidth",%REG_SZ%,"4" HKO,"Control Panel\Mouse","MouseSensitivity",%REG_SZ%,"10" HKO,"Control Panel\Mouse","MouseSpeed",%REG_SZ%,"1" HKO,"Control Panel\Mouse","MouseThreshold1",%REG_SZ%,"6" HKO,"Control Panel\Mouse","MouseThreshold2",%REG_SZ%,"10" HKO,"Control Panel\Mouse","MouseTrails",%REG_SZ%,"0" HKO,"Control Panel\Mouse","SmoothMouseXCurve",%REG_BINARY%,00,00,00,00,00,00,00,00,15,6e,00,00,00,00,00,00,00,40,01,00,00,00,00,00,29,dc,03,00,00,00,00,00,00,00,28,00,00,00,00,00 HKO,"Control Panel\Mouse","SmoothMouseYCurve",%REG_BINARY%,00,00,00,00,00,00,00,00,fd,11,01,00,00,00,00,00,00,24,04,00,00,00,00,00,00,fc,12,00,00,00,00,00,00,c0,bb,01,00,00,00,00 HKO,"Control Panel\Mouse","SnapToDefaultButton",%REG_SZ%,"0" HKO,"Control Panel\Mouse","SwapMouseButtons",%REG_SZ%,"0" HKO,"Control Panel\PowerCfg","CurrentPowerPolicy",%REG_SZ%,"0" HKO,"Control Panel\PowerCfg\GlobalPowerPolicy","Policies",%REG_BINARY%,01,00,00,00,00,00,00,00,03,00,00,00,10,00,00,00,00,00,00,00,03,00,00,00,10,00,00,00,02,00,00,00,03,00,00,00,00,00,00,00,02,00,00,00,03,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,03,00,00,00,03,00,00,00,00,00,00,c0,01,00,00,00,05,00,00,00,01,00,00,00,0a,00,00,00,00,00,00,00,03,00,00,00,01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,16,00,00,00 HKO,"Control Panel\PowerCfg\PowerPolicies\0","Description",%REG_SZ%,"This scheme is suited to most home or desktop computers that are left plugged in all the time." HKO,"Control Panel\PowerCfg\PowerPolicies\0","Name",%REG_SZ%,"Home/Office Desk" HKO,"Control Panel\PowerCfg\PowerPolicies\0","Policies",%REG_BINARY%,01,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2c,01,00,00,32,32,00,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,b0,04,00,00,2c,01,00,00,00,00,00,00,58,02,00,00,01,01,64,50,64,64,00,00 HKO,"Control Panel\PowerCfg\PowerPolicies\1","Description",%REG_SZ%,"This scheme is designed for extended battery life for portable computers on the road." HKO,"Control Panel\PowerCfg\PowerPolicies\1","Name",%REG_SZ%,"Portable/Laptop" HKO,"Control Panel\PowerCfg\PowerPolicies\1","Policies",%REG_BINARY%,01,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,b0,04,00,00,2c,01,00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2c,01,00,00,08,07,00,00,2c,01,00,00,01,01,64,50,64,64,00,00 HKO,"Control Panel\PowerCfg\PowerPolicies\2","Description",%REG_SZ%,"This scheme keeps the monitor on for doing presentations." HKO,"Control Panel\PowerCfg\PowerPolicies\2","Name",%REG_SZ%,"Presentation" HKO,"Control Panel\PowerCfg\PowerPolicies\2","Policies",%REG_BINARY%,01,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2c,01,00,00,01,01,50,50,64,64,00,00 HKO,"Control Panel\PowerCfg\PowerPolicies\3","Description",%REG_SZ%,"This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware." HKO,"Control Panel\PowerCfg\PowerPolicies\3","Name",%REG_SZ%,"Always On" HKO,"Control Panel\PowerCfg\PowerPolicies\3","Policies",%REG_BINARY%,01,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,32,32,00,00,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,b0,04,00,00,84,03,00,00,00,00,00,00,08,07,00,00,00,01,64,64,64,64,00,00 HKO,"Control Panel\PowerCfg\PowerPolicies\4","Description",%REG_SZ%,"This scheme keeps the computer on and optimizes it for high performance." HKO,"Control Panel\PowerCfg\PowerPolicies\4","Name",%REG_SZ%,"Minimal Power Management" HKO,"Control Panel\PowerCfg\PowerPolicies\4","Policies",%REG_BINARY%,01,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2c,01,00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2c,01,00,00,00,00,00,00,84,03,00,00,00,01,64,64,64,64,00,00 HKO,"Control Panel\PowerCfg\PowerPolicies\5","Description",%REG_SZ%,"This scheme is extremely aggressive for saving power." HKO,"Control Panel\PowerCfg\PowerPolicies\5","Name",%REG_SZ%,"Max Battery" HKO,"Control Panel\PowerCfg\PowerPolicies\5","Policies",%REG_BINARY%,01,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,05,00,00,00,00,00,00,00,b0,04,00,00,78,00,00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,3c,00,00,00,00,00,00,00,b4,00,00,00,01,01,64,32,64,64,00,00 HKO,"Control Panel\Quick Actions\Pinned",,%REG_KEYONLY% HKO,"Control Panel\Sound","Beep",%REG_SZ%,"yes" HKO,"Control Panel\Sound","ExtendedSounds",%REG_SZ%,"yes" HKO,"Environment","Path",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Local\Microsoft\WindowsApps;" HKO,"Environment","TEMP",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Local\Temp" HKO,"Environment","TMP",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Local\Temp" HKO,"EUDC\932","SystemDefaultEUDCFont",%REG_SZ%,"EUDC.TTE" HKO,"EUDC\936","SystemDefaultEUDCFont",%REG_SZ%,"EUDC.TTE" HKO,"EUDC\949","SystemDefaultEUDCFont",%REG_SZ%,"EUDC.TTE" HKO,"EUDC\950","SystemDefaultEUDCFont",%REG_SZ%,"EUDC.TTE" HKO,"Keyboard Layout\Preload","1",%REG_SZ%,"00000407" HKO,"Keyboard Layout\Substitutes",,%REG_KEYONLY% HKO,"Keyboard Layout\Toggle",,%REG_KEYONLY% HKO,"Network",,%REG_KEYONLY% HKO,"SOFTWARE\Google\Chrome\NativeMessagingHosts\com.microsoft.browsercore",,%REG_SZ%,"C:\Program Files\Windows Security\BrowserCore\manifest.json" HKO,"SOFTWARE\Microsoft\Accessibility",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Assistance\Client\1.0\Settings","FirstTimeHelppaneStartup",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Assistance\Client\1.0\Settings","Height",%REG_DWORD%,340 ; 0x00000154 HKO,"SOFTWARE\Microsoft\Assistance\Client\1.0\Settings","ImplicitFeedback",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Assistance\Client\1.0\Settings","OnlineAssist",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Assistance\Client\1.0\Settings","PositionX",%REG_DWORD%,4294967295 ; 0xffffffff HKO,"SOFTWARE\Microsoft\Assistance\Client\1.0\Settings","PositionY",%REG_DWORD%,4294967295 ; 0xffffffff HKO,"SOFTWARE\Microsoft\Assistance\Client\1.0\Settings","UserID",%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\Assistance\Client\1.0\Settings","Width",%REG_DWORD%,510 ; 0x000001fe HKO,"SOFTWARE\Microsoft\Avalon.Graphics",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\CommsAPHost\Test",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\CTF\Assemblies\0x00000407\{34745C63-B2F0-4784-8B67-5E12C8701A31}","Default",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\CTF\Assemblies\0x00000407\{34745C63-B2F0-4784-8B67-5E12C8701A31}","Profile",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\CTF\Assemblies\0x00000407\{34745C63-B2F0-4784-8B67-5E12C8701A31}","KeyboardLayout",%REG_DWORD%,67568647 ; 0x04070407 HKO,"SOFTWARE\Microsoft\CTF\DirectSwitchHotkeys",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\CTF\HiddenDummyLayouts",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\CTF\SortOrder\AssemblyItem\0x00000407\{34745C63-B2F0-4784-8B67-5E12C8701A31}\00000000","CLSID",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\CTF\SortOrder\AssemblyItem\0x00000407\{34745C63-B2F0-4784-8B67-5E12C8701A31}\00000000","KeyboardLayout",%REG_DWORD%,67568647 ; 0x04070407 HKO,"SOFTWARE\Microsoft\CTF\SortOrder\AssemblyItem\0x00000407\{34745C63-B2F0-4784-8B67-5E12C8701A31}\00000000","Profile",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\CTF\SortOrder\Language","00000000",%REG_SZ%,"00000407" HKO,"SOFTWARE\Microsoft\CTF\TIP",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Fax\FaxOptions",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Fax\fxsclnt\Archive",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Fax\fxsclnt\Confirm",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Fax\Setup",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Fax\UserInfo",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\GameBarApi",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\IME",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Input\TIPC",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Input\TSF\Tsf3Override",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\InputMethod",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\InputPersonalization","RestrictImplicitInkCollection",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\InputPersonalization","RestrictImplicitTextCollection",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\InputPersonalization\TrainedDataStore","HarvestContacts",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Internet Connection Wizard","Completed",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Internet Explorer\Document Windows","height",%REG_BINARY%,00,00,00,00 HKO,"SOFTWARE\Microsoft\Internet Explorer\Document Windows","Maximized",%REG_SZ%,"no" HKO,"SOFTWARE\Microsoft\Internet Explorer\Document Windows","width",%REG_BINARY%,00,00,00,80 HKO,"SOFTWARE\Microsoft\Internet Explorer\Document Windows","x",%REG_BINARY%,00,00,00,80 HKO,"SOFTWARE\Microsoft\Internet Explorer\Document Windows","y",%REG_BINARY%,00,00,00,00 HKO,"SOFTWARE\Microsoft\Internet Explorer\International","AcceptLanguage",%REG_SZ%,"de-DE,de;q=0.5" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Anchor Underline",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Cache_Update_Frequency",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Disable Script Debugger",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","DisableScriptDebuggerIE",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Display Inline Images",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Do404Search",%REG_BINARY%,01,00,00,00 HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Local Page",%REG_SZ%,"%%11%%\blank.htm" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Save_Session_History_On_Exit",%REG_SZ%,"no" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Search Page",%REG_SZ%,"http://go.microsoft.com/fwlink/?LinkId=54896" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Show_FullURL",%REG_SZ%,"no" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Show_StatusBar",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Show_ToolBar",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Show_URLinStatusBar",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Show_URLToolBar",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","Use_DlgBox_Colors",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","UseClearType",%REG_SZ%,"no" HKO,"SOFTWARE\Microsoft\Internet Explorer\Main","XMLHTTP",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Internet Explorer\New Windows","PopupMgr",%REG_SZ%,"yes" HKO,"SOFTWARE\Microsoft\Internet Explorer\New Windows","Use Anchor Hover Color",%REG_SZ%,"1" HKO,"SOFTWARE\Microsoft\Internet Explorer\New Windows","UseSecBand",%REG_SZ%,"1" HKO,"SOFTWARE\Microsoft\Internet Explorer\Security","Safety Warning Level",%REG_SZ%,"Query" HKO,"SOFTWARE\Microsoft\Internet Explorer\Security","Sending_Security",%REG_SZ%,"Medium" HKO,"SOFTWARE\Microsoft\Internet Explorer\Security","Viewing_Security",%REG_SZ%,"Low" HKO,"SOFTWARE\Microsoft\Internet Explorer\Services",,%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\Internet Explorer\Settings","Anchor Color",%REG_SZ%,"0,0,255" HKO,"SOFTWARE\Microsoft\Internet Explorer\Settings","Anchor Color Visited",%REG_SZ%,"128,0,128" HKO,"SOFTWARE\Microsoft\Internet Explorer\Settings","Background Color",%REG_SZ%,"192,192,192" HKO,"SOFTWARE\Microsoft\Internet Explorer\Settings","Text Color",%REG_SZ%,"0,0,0" HKO,"SOFTWARE\Microsoft\Internet Explorer\Settings","Use Anchor Hover Color",%REG_SZ%,"No" HKO,"SOFTWARE\Microsoft\Internet Explorer\TypedURLs","url1",%REG_SZ%,"http://go.microsoft.com/fwlink/p/?LinkId=255141" HKO,"SOFTWARE\Microsoft\Internet Explorer\URLSearchHooks","{CFBFAE00-17A6-11D0-99CB-00C04FD64497}",%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\MobilePC\AdaptableSettings",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Multimedia\Audio\DefaultEndpoint",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Narrator\NoRoam","RunningState",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\OneDrive","EnableDownlevelInstallOnBluePlus",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\OneDrive","EnableTHDFFeatures",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Osk","RunningState",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\PeerNet\Event_Config",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Personalization\Settings","AcceptedPrivacyPolicy",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Phone\ShellUI",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Remote Assistance",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\ScreenMagnifier","RunningState",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Sensors",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Speech\Preferences\AppCompatDisableDictation","dwm.exe",%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\Speech\Preferences\AppCompatDisableDictation","tabtip.exe",%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\Speech\Preferences\AppCompatDisableMSAA","devenv.exe",%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\Speech\Preferences\AppCompatDisableMSAA","taskmgr.exe",%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\TabletTip\1.7",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\UEV\Agent","UserConsoleVersion",%REG_SZ%,"10.0.19041.1387" HKO,"SOFTWARE\Microsoft\WAB\WAB4\Wab File Name",,%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\WcmSvc\Tethering\Roaming",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\wfs\DraftsView",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\wfs\InboxView",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\wfs\IncomingView",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\wfs\OutboxView",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\wfs\SentItemsView",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\AssignedAccessConfiguration",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\AppHost",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ClickNote\UserCustomization\DoubleClickBelowLock","Override",%REG_DWORD%,5 ; 0x00000005 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ClickNote\UserCustomization\DoubleClickBelowLock","PenWorkspaceVerb",%REG_DWORD%,3 ; 0x00000003 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ClickNote\UserCustomization\LongPressBelowLock","Override",%REG_DWORD%,5 ; 0x00000005 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ClickNote\UserCustomization\LongPressBelowLock","PenWorkspaceVerb",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ClickNote\UserCustomization\SingleClickBelowLock","Override",%REG_DWORD%,8 ; 0x00000008 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ClickNote\UserCustomization\SingleClickBelowLock","PenWorkspaceVerb",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager","FeatureManagementEnabled",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager","OemPreInstalledAppsEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager","PreInstalledAppsEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager","RotatingLockScreenEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager","RotatingLockScreenOverlayEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager","SilentInstalledAppsEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager","SoftLandingEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager","SystemPaneSuggestionsEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager","SlideshowEnabled",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Renderers\SubscribedContent-310091","Version",%REG_SZ%,"2" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Renderers\SubscribedContent-310092","Version",%REG_SZ%,"2" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Renderers\SubscribedContent-338380","Version",%REG_SZ%,"2" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Renderers\SubscribedContent-338381","Version",%REG_SZ%,"2" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Renderers\SubscribedContent-338387","Version",%REG_SZ%,"2" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Renderers\SubscribedContent-338388","Version",%REG_SZ%,"2" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ContentDeliveryManager\Subscriptions",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced","Start_SearchFiles",%REG_DWORD%,2 ; 0x00000002 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers","DisableAutoplay",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\EventHandlersDefaultSelection",,%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\AutoplayHandlers\UserChosenExecuteHandlers",,%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","empty",%REG_EXPAND_SZ%,"%%SystemRoot%%\System32\imageres.dll,-55" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\DefaultIcon","full",%REG_EXPAND_SZ%,"%%SystemRoot%%\System32\imageres.dll,-54" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SearchPlatform\Preferences","BreadCrumbBarSearchDefault",%REG_SZ%,"MSNSearch" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SearchPlatform\Preferences","DisableAutoNavigateURL",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SearchPlatform\Preferences","DisableAutoResolveEmailAddrs",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SearchPlatform\Preferences","DisableResultsInNewWindow",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SearchPlatform\Preferences","DisableTabbedBrowsing",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SearchPlatform\Preferences","EditSavedSearch",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\SearchPlatform\Preferences","IEAddressBarSearchDefault",%REG_SZ%,"MSNSearch" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders","!Do not use this registry key",%REG_SZ%,"Use the SHGetFolderPath or SHGetKnownFolderPath function instead" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","AppData",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Roaming" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Cache",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Local\Microsoft\Windows\INetCache" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Cookies",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Local\Microsoft\Windows\INetCookies" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Desktop",%REG_EXPAND_SZ%,"%%USERPROFILE%%\Desktop" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Favorites",%REG_EXPAND_SZ%,"%%USERPROFILE%%\Favorites" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","History",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Local\Microsoft\Windows\History" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Local AppData",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Local" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","My Music",%REG_EXPAND_SZ%,"%%USERPROFILE%%\Music" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","My Pictures",%REG_EXPAND_SZ%,"%%USERPROFILE%%\Pictures" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","My Video",%REG_EXPAND_SZ%,"%%USERPROFILE%%\Videos" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","NetHood",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Roaming\Microsoft\Windows\Network Shortcuts" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Personal",%REG_EXPAND_SZ%,"%%USERPROFILE%%\Documents" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","PrintHood",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Roaming\Microsoft\Windows\Printer Shortcuts" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Programs",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Recent",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Roaming\Microsoft\Windows\Recent" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","SendTo",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Roaming\Microsoft\Windows\SendTo" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Start Menu",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Roaming\Microsoft\Windows\Start Menu" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Startup",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","Templates",%REG_EXPAND_SZ%,"%%USERPROFILE%%\AppData\Roaming\Microsoft\Windows\Templates" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders","{374DE290-123F-4565-9164-39C4925E467B}",%REG_EXPAND_SZ%,"%%USERPROFILE%%\Downloads" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\FileHistory\RestoreUI","FolderViewType",%REG_SZ%,"MediumIcons" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\FileHistory\RestoreUI","SearchResultsViewType",%REG_SZ%,"Content" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\FileHistory\RestoreUI","WindowLocation",%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Holographic","FirstRunSucceeded",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Holographic\StageManagement","DisableQuickRoomSetup",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Holographic\StageManagement","DisableStageNearbyRequirement",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ActiveLearning",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","AnsiChar",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","AutoCandState",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","BallonUI",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","BeepEnable",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Big5CharOnly",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","CandidateLargeFont",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","CandidateSortType",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ChangJie.All.ActiveAlphaNum",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ChangJie.All.ZkeyAsWildCard",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ChangJie.AssociatedWord",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ChangJie.IsOfflineReading",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ChangJie.ReadLayout",%REG_SZ%,"0x00010030" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","CharMode",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","CustomLayout",%REG_BINARY%,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","DefaultLanguage",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Delemiter",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Domain",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","EnableCNSReading",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","EnableExtensionA_Char",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","EnableExtensionB_Char",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","EudpSCK",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Fuzzy",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","HFTLearning",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Intellegnt.Eudp",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Intelligent.AssociatedWord",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Intelligent.AutoFinalize",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Intelligent.AutoInputSwitch",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Intelligent.EnableFinal",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Intelligent.EscapeFunc",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","LeadingIndicator",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Legacy.AutoFinalize",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Legacy.AutoInputSwitch",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Legacy.EnableFinal",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Legacy.EscapeFunc",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Legacy.Eudp",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Legacy.Modeless",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","MaxCharPerSentence",%REG_SZ%,"0x00000020" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","NewChangJie.Modeless",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","NewPhonetic.IntCharMode",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","NewPhonetic.Modeless",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","NewQuick.Modeless",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Phonetic.All.ActiveAlphaNum",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Phonetic.All.ZkeyAsWildCard",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Phonetic.AssociatedWord",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Phonetic.IntCharMode",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Phonetic.IsOfflineReading",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Phonetic.ReadLayout",%REG_SZ%,"0x00020010" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","PhrManEudpSortType",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","PhrManSelfLearnSortType",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","PluginLexiconInfo",%REG_BINARY%,00,00,00,00,00,00,00,00 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","PuncEnable",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Quick.AssociatedWord",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Quick.ZkeyAsWildCard",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ReconvertLength",%REG_SZ%,"0x00000020" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ReservedWord",%REG_BINARY%,08,00,00,00,01,00,00,00,01,00,00,00,01,00,00,00,01,00,00,00,01,00,00,00,2f,00,2f,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,66,00,69,00,6c,00,65,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,66,00,74,00,70,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,68,00,74,00,74,00,70,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,6d,00,61,00,69,00,6c,00,74,00,6f,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,6e,00,65,00,77,00,73,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,77,00,69,00,6e,00,64,00,6f,00,77,00,73,00,00,00,00,00,00,00,00,00,00,00,00,00,77,00,77,00,77,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,01,00,00,00,01,00,00,00,01,00,00,00,01,00,00,00,01,00,00,00,01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ReversedReadingType",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","SelfLearning",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","SharedEudp",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ShiftLeft",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","ShiftRight",%REG_SZ%,"0x00000001" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Surrogate",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","Trigram",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","UserSymbolMapping",%REG_BINARY%,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,20,00,31,00,32,00,33,00,34,00,35,00,36,00,37,00,38,00,39,00,30,00,61,00,62,00,63,00,64,00,65,00,66,00,67,00,68,00,69,00,6a,00,6b,00,6c,00,6d,00,6e,00,6f,00,70,00,71,00,72,00,73,00,74,00,75,00,76,00,77,00,78,00,79,00,7a,00,2d,00,3d,00,5c,00,5b,00,5d,00,3b,00,27,00,2c,00,2e,00,2f,00,60,00,00,30,11,ff,12,ff,13,ff,14,ff,15,ff,16,ff,17,ff,18,ff,19,ff,10,ff,41,ff,42,ff,43,ff,44,ff,45,ff,46,ff,47,ff,48,ff,49,ff,4a,ff,4b,ff,4c,ff,4d,ff,4e,ff,4f,ff,50,ff,51,ff,52,ff,53,ff,54,ff,55,ff,56,ff,57,ff,58,ff,59,ff,5a,ff,00,25,1d,ff,3c,ff,14,30,15,30,54,fe,19,20,0c,ff,02,30,0f,ff,35,20,20,00,21,00,40,00,23,00,24,00,25,00,5e,00,26,00,2a,00,28,00,29,00,41,00,42,00,43,00,44,00,45,00,46,00,47,00,48,00,49,00,4a,00,4b,00,4c,00,4d,00,4e,00,4f,00,50,00,51,00,52,00,53,00,54,00,55,00,56,00,57,00,58,00,59,00,5a,00,5f,00,2b,00,7c,00,7b,00,7d,00,3a,00,22,00,3c,00,3e,00,3f,00,7e,00,00,30,01,ff,20,ff,03,ff,04,ff,05,ff,3f,fe,06,ff,0a,ff,08,ff,09,ff,21,ff,22,ff,23,ff,24,ff,25,ff,26,ff,27,ff,28,ff,29,ff,2a,ff,2b,ff,2c,ff,2d,ff,2e,ff,2f,ff,30,ff,31,ff,32,ff,33,ff,34,ff,35,ff,36,ff,37,ff,38,ff,39,ff,3a,ff,3f,ff,0b,ff,5c,ff,5b,ff,5d,ff,1a,ff,1d,20,1c,ff,1e,ff,1f,ff,5e,ff,20,00,31,00,32,00,33,00,34,00,35,00,36,00,37,00,38,00,39,00,30,00,61,00,62,00,63,00,64,00,65,00,66,00,67,00,68,00,69,00,6a,00,6b,00,6c,00,6d,00,6e,00,6f,00,70,00,71,00,72,00,73,00,74,00,75,00,76,00,77,00,78,00,79,00,7a,00,2d,00,3d,00,5c,00,5b,00,5d,00,3b,00,27,00,2c,00,2e,00,2f,00,60,00,00,30,11,ff,12,ff,13,ff,14,ff,15,ff,16,ff,17,ff,18,ff,19,ff,10,ff,41,ff,42,ff,43,ff,44,ff,45,ff,46,ff,47,ff,48,ff,49,ff,4a,ff,4b,ff,4c,ff,4d,ff,4e,ff,4f,ff,50,ff,51,ff,52,ff,53,ff,54,ff,55,ff,56,ff,57,ff,58,ff,59,ff,5a,ff,00,25,1d,ff,3c,ff,14,30,15,30,54,fe,19,20,0c,ff,02,30,0f,ff,35,20,20,00,21,00,40,00,23,00,24,00,25,00,5e,00,26,00,2a,00,28,00,29,00,41,00,42,00,43,00,44,00,45,00,46,00,47,00,48,00,49,00,4a,00,4b,00,4c,00,4d,00,4e,00,4f,00,50,00,51,00,52,00,53,00,54,00,55,00,56,00,57,00,58,00,59,00,5a,00,5f,00,2b,00,7c,00,7b,00,7d,00,3a,00,22,00,3c,00,3e,00,3f,00,7e,00,00,30,01,ff,20,ff,03,ff,04,ff,05,ff,3f,fe,06,ff,0a,ff,08,ff,09,ff,21,ff,22,ff,23,ff,24,ff,25,ff,26,ff,27,ff,28,ff,29,ff,2a,ff,2b,ff,2c,ff,2d,ff,2e,ff,2f,ff,30,ff,31,ff,32,ff,33,ff,34,ff,35,ff,36,ff,37,ff,38,ff,39,ff,3a,ff,3f,ff,0b,ff,5c,ff,5b,ff,5d,ff,1a,ff,1d,20,1c,ff,1e,ff,1f,ff,5e,ff,20,00,31,00,32,00,33,00,34,00,35,00,36,00,37,00,38,00,39,00,30,00,61,00,62,00,63,00,64,00,65,00,66,00,67,00,68,00,69,00,6a,00,6b,00,6c,00,6d,00,6e,00,6f,00,70,00,71,00,72,00,73,00,74,00,75,00,76,00,77,00,78,00,79,00,7a,00,2d,00,3d,00,5c,00,5b,00,5d,00,3b,00,27,00,2c,00,2e,00,2f,00,60,00,00,30,11,ff,12,ff,13,ff,14,ff,15,ff,16,ff,17,ff,18,ff,19,ff,10,ff,41,ff,42,ff,43,ff,44,ff,45,ff,46,ff,47,ff,48,ff,49,ff,4a,ff,4b,ff,4c,ff,4d,ff,4e,ff,4f,ff,50,ff,51,ff,52,ff,53,ff,54,ff,55,ff,56,ff,57,ff,58,ff,59,ff,5a,ff,00,25,1d,ff,3c,ff,14,30,15,30,54,fe,19,20,0c,ff,02,30,0f,ff,35,20,20,00,21,00,40,00,23,00,24,00,25,00,5e,00,26,00,2a,00,28,00,29,00,41,00,42,00,43,00,44,00,45,00,46,00,47,00,48,00,49,00,4a,00,4b,00,4c,00,4d,00,4e,00,4f,00,50,00,51,00,52,00,53,00,54,00,55,00,56,00,57,00,58,00,59,00,5a,00,5f,00,2b,00,7c,00,7b,00,7d,00,3a,00,22,00,3c,00,3e,00,3f,00,7e,00,00,30,01,ff,20,ff,03,ff,04,ff,05,ff,3f,fe,06,ff,0a,ff,08,ff,09,ff,21,ff,22,ff,23,ff,24,ff,25,ff,26,ff,27,ff,28,ff,29,ff,2a,ff,2b,ff,2c,ff,2d,ff,2e,ff,2f,ff,30,ff,31,ff,32,ff,33,ff,34,ff,35,ff,36,ff,37,ff,38,ff,39,ff,3a,ff,3f,ff,0b,ff,5c,ff,5b,ff,5d,ff,1a,ff,1d,20,1c,ff,1e,ff,1f,ff,5e,ff HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70","VirtualInputMode",%REG_SZ%,"0x00000000" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70\FuzzyScheme","Data",%REG_BINARY%,87,3f,00,00 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ime\IMTC70\FuzzyScheme","Name",%REG_SZ%,"{EF8C6C27-997A-4af2-BC0E-A15C84790F8C}" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings","CertificateRevocation",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings","DisableCachingOfSSLPages",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings","IE5_UA_Backup_Flag",%REG_SZ%,"5.0" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings","PrivacyAdvanced",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings","SecureProtocols",%REG_DWORD%,2688 ; 0x00000a80 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings","User Agent",%REG_SZ%,"Mozilla/5.0 (compatible; MSIE 9.0; Win32)" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Cache","Persistent",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Http Filters\RPA",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\P3P\History",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Passport",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Lock Screen","LockAppAumId",%REG_SZ%,"Microsoft.LockApp_cw5n1h2txyewy!WindowsDefaultLockScreen" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Mobility",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PenWorkspace\Notes","NotesApp",%REG_SZ%,"Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe!App" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","AAPThreshold",%REG_DWORD%,2 ; 0x00000002 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","CursorSpeed",%REG_DWORD%,10 ; 0x0000000a HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","EnableEdgy",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","LeaveOnWithMouse",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","PanEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","RightClickZoneEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","ScrollDirection",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","TapAndDrag",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","TapsEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","TwoFingerTapEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad","ZoomEnabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PrecisionTouchPad\Status","Enabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Privacy","TailoredExperiencesWithDiagnosticDataEnabled",%REG_DWORD%,2 ; 0x00000002 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.CloudExperienceHostLauncher","ApplicationType",%REG_DWORD%,1073741824 ; 0x40000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.CloudExperienceHostLauncher","Capabilities",%REG_DWORD%,9471 ; 0x000024ff HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.CloudExperienceHostLauncher","PackageMoniker",%REG_SZ%,"System" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.CloudExperienceHostLauncherCustom","ApplicationType",%REG_DWORD%,1073741824 ; 0x40000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.CloudExperienceHostLauncherCustom","Capabilities",%REG_DWORD%,9471 ; 0x000024ff HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.CloudExperienceHostLauncherCustom","PackageMoniker",%REG_SZ%,"System" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.DisplaySettings","ApplicationType",%REG_DWORD%,1073741824 ; 0x40000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.DisplaySettings","Capabilities",%REG_DWORD%,9471 ; 0x000024ff HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.DisplaySettings","PackageMoniker",%REG_SZ%,"System" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.FodHelper","ApplicationType",%REG_DWORD%,1073741824 ; 0x40000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.FodHelper","Capabilities",%REG_DWORD%,9471 ; 0x000024ff HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.FodHelper","PackageMoniker",%REG_SZ%,"System" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.MobilityExperience","ApplicationType",%REG_DWORD%,1073741824 ; 0x40000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.MobilityExperience","Capabilities",%REG_DWORD%,9471 ; 0x000024ff HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.MobilityExperience","PackageMoniker",%REG_SZ%,"System" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.Suggested","ApplicationType",%REG_DWORD%,1073741824 ; 0x40000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.Suggested","Capabilities",%REG_DWORD%,9471 ; 0x000024ff HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.Suggested","PackageMoniker",%REG_SZ%,"System" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.WindowsTip","ApplicationType",%REG_DWORD%,1073741824 ; 0x40000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.WindowsTip","Capabilities",%REG_DWORD%,9471 ; 0x000024ff HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\PushNotifications\Applications\Windows.SystemToast.WindowsTip","PackageMoniker",%REG_SZ%,"System" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\RADAR","CLResolutionInterval",%REG_DWORD%,5 ; 0x00000005 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\RADAR","DisplayInterval",%REG_DWORD%,1440 ; 0x000005a0 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run","OneDriveSetup",%REG_SZ%,"C:\Windows\SysWOW64\OneDriveSetup.exe /thfirstsetup" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\Bubbles\Screen 1",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\Bubbles\Screen 2",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\Mystify\Screen 1",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\Mystify\Screen 2",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\Ribbons\Screen 1",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\Ribbons\Screen 2",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\ssText3d\Screen 1",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Screensavers\ssText3d\Screen 2",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\SettingSync\Groups\AppSync","Enabled",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\SmartGlass","UserAuthPolicy",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\HandoffPriorities","RequestMakeCall",%REG_SZ%,"DIALER.EXE" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\HandoffPriorities\MediaModes",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ThemeManager","DllName",%REG_EXPAND_SZ%,"%%SystemRoot%%\resources\themes\Aero\Aero.msstyles" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\ThemeManager","PrePolicy-DllName",%REG_SZ%,"C:\Windows\resources\themes\Aero\Aero.msstyles" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes","InstallVisualStyleColor",%REG_SZ%,"NormalColor" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes","InstallVisualStyleSize",%REG_SZ%,"NormalSize" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes","LastHighContrastTheme",%REG_EXPAND_SZ%,"%%SystemRoot%%\resources\Ease of Access Themes\hcblack.theme" HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes","ThemeChangesDesktopIcons",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes","ThemeChangesMousePointers",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize","ColorPrevalence",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize","EnableTransparency",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing","State",%REG_DWORD%,146432 ; 0x00023c00 HKO,"SOFTWARE\Microsoft\Windows\DWM","Composition",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows\TabletPC\Snipping Tool",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\TabletPC\TabSetup",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows\Windows Error Reporting\Hangs",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices","Microsoft XPS Document Writer",%REG_SZ%,"winspool,Ne00:" HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices","Microsoft Print to PDF",%REG_SZ%,"winspool,Ne01:" HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices","Fax",%REG_SZ%,"winspool,Ne02:" HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\EFS",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ICM",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MsiCorruptedFileRecovery\RepairedProducts","AnyIdMax",%REG_DWORD%,5 ; 0x00000005 HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MsiCorruptedFileRecovery\RepairedProducts","SameIdMax",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MsiCorruptedFileRecovery\RepairedProducts","TimeWindowMinutes",%REG_DWORD%,1440 ; 0x000005a0 HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\PrinterPorts","Microsoft XPS Document Writer",%REG_SZ%,"winspool,Ne00:,15,45" HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\PrinterPorts","Microsoft Print to PDF",%REG_SZ%,"winspool,Ne01:,15,45" HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\PrinterPorts","Fax",%REG_SZ%,"winspool,Ne02:,15,45" HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\TileDataModel\Migration",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Device",%REG_SZ%,"" HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","IsMRUEstablished",%REG_DWORD%,4294967295 ; 0xffffffff HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","LegacyDefaultPrinterMode",%REG_DWORD%,4294967295 ; 0xffffffff HKO,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\Pen","PenArbitrationType",%REG_DWORD%,3 ; 0x00000003 HKO,"SOFTWARE\Microsoft\Wisp\MultiTouch",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","DblDist",%REG_DWORD%,20 ; 0x00000014 HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","DblTime",%REG_DWORD%,300 ; 0x0000012c HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","EraseEnable",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","FlickMode",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","FlickTolerance",%REG_DWORD%,50 ; 0x00000032 HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","HoldMode",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","HoldTime",%REG_DWORD%,2300 ; 0x000008fc HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","RightMaskEnable",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","Splash",%REG_DWORD%,50 ; 0x00000032 HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","TapTime",%REG_DWORD%,100 ; 0x00000064 HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters","WaitTime",%REG_DWORD%,300 ; 0x0000012c HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters\CustomFlickCommands",,%REG_KEYONLY% HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters\FlickCommands","down",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters\FlickCommands","downLeft",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters\FlickCommands","downRight",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters\FlickCommands","left",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters\FlickCommands","right",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters\FlickCommands","up",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters\FlickCommands","upLeft",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\Wisp\Pen\SysEventParameters\FlickCommands","upRight",%REG_SZ%,"{00000000-0000-0000-0000-000000000000}" HKO,"SOFTWARE\Microsoft\Wisp\Touch","Bouncing",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Wisp\Touch","Friction",%REG_DWORD%,50 ; 0x00000032 HKO,"SOFTWARE\Microsoft\Wisp\Touch","Inertia",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Wisp\Touch","TouchMode_hold",%REG_DWORD%,1 ; 0x00000001 HKO,"SOFTWARE\Microsoft\Wisp\Touch","TouchModeN_DtapDist",%REG_DWORD%,50 ; 0x00000032 HKO,"SOFTWARE\Microsoft\Wisp\Touch","TouchModeN_DtapTime",%REG_DWORD%,50 ; 0x00000032 HKO,"SOFTWARE\Microsoft\Wisp\Touch","TouchModeN_HoldTime_Animation",%REG_DWORD%,50 ; 0x00000032 HKO,"SOFTWARE\Microsoft\Wisp\Touch","TouchModeN_HoldTime_BeforeAnimation",%REG_DWORD%,50 ; 0x00000032 HKO,"SOFTWARE\Microsoft\Wisp\Touch","TouchUI",%REG_DWORD%,0 ; 0x00000000 HKO,"SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\5.0\Cache",,%REG_KEYONLY% HKO,"SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\Cache",,%REG_KEYONLY% HKO,"SOFTWARE\Policies\Power\PowerSettings",,%REG_KEYONLY% HKO,"System\CurrentControlSet\Control\Network\NetworkLocationWizard","ShowCount",%REG_DWORD%,0 ; 0x00000000 ; EOF
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and OFFREG.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
is not supported!
The MSDN article Console Handles provides background information.
Create the text file OFFREG.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#include <sddl.h>
#include <offreg.h>
#define memcpy __movsb
#define wmemcpy __movsw
#define MAX_DEPTH 512UL
#define MAX_KEY_LENGTH 255UL
#define MAX_VALUE_NAME 16383UL
#define MAX_VALUE_DATA 1048576UL
typedef unsigned long long QWORD, *LPQWORD;
BYTE cbData[MAX_VALUE_DATA];
WCHAR szKey[(MAX_KEY_LENGTH + 1) * MAX_DEPTH];
WCHAR szValue[MAX_VALUE_NAME + 1];
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(safebuffers)
BOOL CDECL PrintFormat(HANDLE hFile, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
LPBYTE lpOutput;
DWORD dwOutput;
DWORD dwFile;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
dwOutput *= sizeof(*szOutput);
lpOutput = (LPBYTE) szOutput;
do
{
if (!WriteFile(hFile, lpOutput, dwOutput, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpOutput += dwFile;
dwOutput -= dwFile;
} while (dwOutput != 0);
return TRUE;
}
#define PrintString(HANDLE, LITERAL) PrintDirect(HANDLE, LITERAL, sizeof(LITERAL) / sizeof(*LITERAL) - 1)
__inline
BOOL WINAPI PrintDirect(HANDLE hFile, LPCWSTR lpString, DWORD dwString)
{
DWORD dwFile;
dwString *= sizeof(*lpString);
do
{
if (!WriteFile(hFile, lpString, dwString, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpString = (LPCWSTR) ((LPBYTE) lpString + dwFile);
dwString -= dwFile;
} while (dwString != 0);
return TRUE;
}
__inline
LPCWSTR WINAPI InfEscape(LPCWSTR lpString)
{
do
if ((*lpString == L'"')
|| (*lpString == L'%'))
return lpString;
while (*lpString++ != L'\0');
return NULL;
}
#ifndef TINY
const WCHAR szBytes[256][4] = {L",00", L",01", L",02", L",03", L",04", L",05", L",06", L",07", L",08", L",09", L",0a", L",0b", L",0c", L",0d", L",0e", L",0f",
L",10", L",11", L",12", L",13", L",14", L",15", L",16", L",17", L",18", L",19", L",1a", L",1b", L",1c", L",1d", L",1e", L",1f",
L",20", L",21", L",22", L",23", L",24", L",25", L",26", L",27", L",28", L",29", L",2a", L",2b", L",2c", L",2d", L",2e", L",2f",
L",30", L",31", L",32", L",33", L",34", L",35", L",36", L",37", L",38", L",39", L",3a", L",3b", L",3c", L",3d", L",3e", L",3f",
L",40", L",41", L",42", L",43", L",44", L",45", L",46", L",47", L",48", L",49", L",4a", L",4b", L",4c", L",4d", L",4e", L",4f",
L",50", L",51", L",52", L",53", L",54", L",55", L",56", L",57", L",58", L",59", L",5a", L",5b", L",5c", L",5d", L",5e", L",5f",
L",60", L",61", L",62", L",63", L",64", L",65", L",66", L",67", L",68", L",69", L",6a", L",6b", L",6c", L",6d", L",6e", L",6f",
L",70", L",71", L",72", L",73", L",74", L",75", L",76", L",77", L",78", L",79", L",7a", L",7b", L",7c", L",7d", L",7e", L",7f",
L",80", L",81", L",82", L",83", L",84", L",85", L",86", L",87", L",88", L",89", L",8a", L",8b", L",8c", L",8d", L",8e", L",8f",
L",90", L",91", L",92", L",93", L",94", L",95", L",96", L",97", L",98", L",99", L",9a", L",9b", L",9c", L",9d", L",9e", L",9f",
L",a0", L",a1", L",a2", L",a3", L",a4", L",a5", L",a6", L",a7", L",a8", L",a9", L",aa", L",ab", L",ac", L",ad", L",ae", L",af",
L",b0", L",b1", L",b2", L",b3", L",b4", L",b5", L",b6", L",b7", L",b8", L",b9", L",ba", L",bb", L",bc", L",bd", L",be", L",bf",
L",c0", L",c1", L",c2", L",c3", L",c4", L",c5", L",c6", L",c7", L",c8", L",c9", L",ca", L",cb", L",cc", L",cd", L",ce", L",cf",
L",d0", L",d1", L",d2", L",d3", L",d4", L",d5", L",d6", L",d7", L",d8", L",d9", L",da", L",db", L",dc", L",dd", L",de", L",df",
L",e0", L",e1", L",e2", L",e3", L",e4", L",e5", L",e6", L",e7", L",e8", L",e9", L",ea", L",eb", L",ec", L",ed", L",ee", L",ef",
L",f0", L",f1", L",f2", L",f3", L",f4", L",f5", L",f6", L",f7", L",f8", L",f9", L",fa", L",fb", L",fc", L",fd", L",fe", L",ff"};
#endif
const LPCWSTR szType[12] = {L"NONE",
L"SZ",
L"EXPAND_SZ",
L"BINARY",
L"DWORD", // alias DWORD_LITTLE_ENDIAN
L"DWORD_BIG_ENDIAN",
L"LINK",
L"MULTI_SZ",
L"RESOURCE_LIST",
L"FULL_RESOURCE_DESCRIPTOR",
L"RESOURCE_REQUIREMENTS_LIST",
L"QWORD"}; // alias QWORD_LITTLE_ENDIAN
DWORD WINAPI Offline(HANDLE hConsole, HANDLE hOutput, ORHKEY hkKey, DWORD dwKey)
{
BOOL bOutput;
ORHKEY hkSubKey;
LPCWSTR lpSubKey = szKey + dwKey + 1;
LPCWSTR lpData, lpEscape, lpLast, lpMulti;
#ifdef SANITY
LPCWSTR lpCount;
DWORD dwCount, dwChars;
#endif
DWORD dwError;
DWORD dwSubKeys, dwSubKey;
DWORD dwValues, dwValue, dwType, dwData, dwBytes;
#ifdef SECURITY
dwData = sizeof(cbData);
dwError = ORGetKeySecurity(hkKey,
OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION | LABEL_SECURITY_INFORMATION,
cbData,
&dwData);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"ORGetKeySecurity() returned error %lu for registry key \'%ls\'\n",
dwError, szKey);
else
if (!ConvertSecurityDescriptorToStringSecurityDescriptor(cbData,
SDDL_REVISION_1,
OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION | LABEL_SECURITY_INFORMATION,
&lpData,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"ConvertSecurityDescriptorToStringSecurityDescriptor() returned error %lu for registry key \'%ls\'\n",
dwError = GetLastError(), szKey);
else
{
if (dwKey < sizeof("HKEY_OFFLINE"))
bOutput = PrintString(hOutput,
L"HKO,,,%REG_KEYONLY%\r\n");
else
bOutput = PrintFormat(hOutput,
L"HKO,\"%ls\",,%%REG_KEYONLY%%\r\n",
szKey + sizeof("HKEY_OFFLINE"));
bOutput &= PrintString(hOutput, L"; ");
bOutput &= PrintDirect(hOutput, lpData, wcslen(lpData));
bOutput &= PrintString(hOutput, L"\r\n");
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu for registry key \'%ls\'\n",
dwError = GetLastError(), szKey);
if (LocalFree(lpData) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
#endif
for (dwValues = 0;; dwValues++)
{
// *szValue = L'\0';
dwValue = sizeof(szValue) / sizeof(*szValue);
dwData = sizeof(cbData);
dwError = OREnumValue(hkKey,
dwValues,
szValue,
&dwValue,
&dwType,
cbData,
&dwData);
if (dwError == ERROR_NO_MORE_ITEMS)
break;
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"OREnumValue() returned error %lu for registry key \'%ls\'\n",
dwError, szKey);
else
{
#ifdef SANITY
dwChars = wcslen(szValue);
if (dwValue < dwChars)
PrintConsole(hConsole,
L"ERROR: size (%lu characters) of value name \'%ls\' in registry key \'%ls\' smaller than actual string length (%lu characters)!\n",
dwValue, szValue, dwChars, szKey);
else if (dwValue > dwChars)
PrintConsole(hConsole,
L"WARNING: size (%lu characters) of value name \'%ls\' in registry key \'%ls\' greater than actual string length (%lu characters)\n",
dwValue, szValue, dwChars, szKey);
if (dwData == 0)
PrintConsole(hConsole,
L"WARNING: no value data for value name \'%ls\' in registry key \'%ls\'\n",
szValue, szKey);
else
switch (dwType)
{
case REG_LINK:
if (dwData % sizeof(L'\0') != 0)
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' not a multiple of WCHAR size!\n",
dwData, szValue, szKey);
break;
case REG_DWORD_BIG_ENDIAN:
case REG_DWORD_LITTLE_ENDIAN:
// case REG_DWORD:
if (dwData < sizeof(DWORD))
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' smaller than DWORD size!\n",
dwData, szValue, szKey);
else if (dwData > sizeof(DWORD))
PrintConsole(hConsole,
L"WARNING: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' greater than DWORD size\n",
dwData, szValue, szKey);
break;
case REG_QWORD_LITTLE_ENDIAN:
// case REG_QWORD:
if (dwData < sizeof(QWORD))
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' smaller than QWORD size!\n",
dwData, szValue, szKey);
else if (dwData > sizeof(QWORD))
PrintConsole(hConsole,
L"WARNING: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' greater than QWORD size\n",
dwData, szValue, szKey);
break;
case REG_SZ:
case REG_EXPAND_SZ:
dwChars = wcslen((LPCWSTR) cbData);
dwBytes = (dwChars + 1) * sizeof(L'\0');
if (dwData < dwBytes)
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' smaller than actual string length (%lu + 1 characters = %lu bytes)\n",
dwData, szValue, szKey, dwChars, dwBytes);
else if (dwData > dwBytes)
PrintConsole(hConsole,
L"WARNING: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' greater than actual string length (%lu + 1 characters = %lu bytes)\n",
dwData, szValue, szKey, dwChars, dwBytes);
break;
case REG_MULTI_SZ:
dwChars = 0;
dwCount = 1;
lpCount = (LPCWSTR) cbData;
while (*lpCount != L'\0')
{
dwChars += wcslen(lpCount);
dwCount++;
lpCount += wcslen(lpCount) + 1;
}
dwBytes = (dwChars + dwCount) * sizeof(L'\0');
if (dwData < dwBytes)
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' smaller than sum of actual string lengths (%lu + %lu characters = %lu bytes)\n",
dwData, szValue, szKey, dwChars, dwCount, dwBytes);
else if (dwData > dwBytes)
PrintConsole(hConsole,
L"WARNING: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' greater than sum of actual string lengths (%lu + %lu characters = %lu bytes)\n",
dwData, szValue, szKey, dwChars, dwCount, dwBytes);
break;
// case REG_NONE:
// case REG_BINARY:
// case REG_RESOURCE_LIST:
// case REG_FULL_RESOURCE_DESCRIPTOR:
// case REG_RESOURCE_REQUIREMENTS_LIST:
}
#ifdef UNKNOWN
if (dwType > REG_QWORD)
PrintConsole(hConsole,
L"WARNING: unknown data type (0x%08lx) for value name \'%ls\' in registry key \'%ls\'\n",
dwType, szValue, szKey);
#endif
#endif // SANITY
if (dwKey < sizeof("HKEY_OFFLINE"))
bOutput = PrintFormat(hOutput,
L"HKO,,");
else
bOutput = PrintFormat(hOutput,
L"HKO,\"%ls\",",
szKey + sizeof("HKEY_OFFLINE"));
if (dwType < sizeof(szType) / sizeof(*szType))
if (dwValue == 0)
bOutput &= PrintFormat(hOutput, L",%%REG_%ls%%", szType[dwType]);
else
bOutput &= PrintFormat(hOutput, L"\"%ls\",%%REG_%ls%%", szValue, szType[dwType]);
else
if (dwValue == 0)
bOutput &= PrintFormat(hOutput, L",0x%08lx", dwType);
else
bOutput &= PrintFormat(hOutput, L"\"%ls\",0x%08lx", szValue, dwType);
if (dwData == 0)
bOutput &= PrintString(hOutput, L"\r\n");
else
switch (dwType)
{
case REG_LINK:
if (dwData % sizeof(L'\0') != 0)
goto DEFAULT;
bOutput &= PrintString(hOutput, L",\"");
bOutput &= PrintDirect(hOutput, (LPCWSTR) cbData, dwData / sizeof(L'\0'));
bOutput &= PrintString(hOutput, L"\"\r\n");
break;
case REG_SZ:
case REG_EXPAND_SZ:
if (dwData % sizeof(L'\0') != 0)
goto DEFAULT;
if (*(LPCWSTR) cbData == L'\0')
bOutput &= PrintString(hOutput, L",\"\"\r\n");
else
{
lpData = (LPCWSTR) cbData;
((LPWSTR) lpData)[dwData / sizeof(L'\0')] = L'\0';
dwData = wcslen(lpData);
bOutput &= PrintString(hOutput, L",\"");
for (lpEscape = InfEscape(lpData); lpEscape != NULL; lpData = lpEscape, lpEscape = InfEscape(lpEscape + 1))
bOutput &= PrintDirect(hOutput, lpData, lpEscape + 1 - lpData);
bOutput &= PrintDirect(hOutput, lpData, (LPCWSTR) cbData + dwData - lpData);
bOutput &= PrintString(hOutput, L"\"\r\n");
}
break;
case REG_MULTI_SZ:
if (dwData % sizeof(L'\0') != 0)
goto DEFAULT;
if ((dwData == sizeof(L'\0'))
&& (*(LPCWSTR) cbData == L'\0'))
bOutput &= PrintString(hOutput, L";\r\n");
else
{
lpData = (LPCWSTR) cbData;
dwData /= sizeof(L'\0');
lpLast = lpData + dwData;
if ((dwData > 1)
&& (lpData[dwData - 1] == L'\0')
&& (lpData[dwData - 2] == L'\0'))
lpLast--;
else
*(LPWSTR) lpLast = L'\0';
do
if (*lpData == L'\0')
bOutput &= PrintString(hOutput, L";\"\"");
else
{
dwData = wcslen(lpData);
bOutput &= PrintString(hOutput, L",\"");
for (lpEscape = InfEscape(lpMulti = lpData), lpData += dwData;
lpEscape != NULL; lpMulti = lpEscape,
lpEscape = InfEscape(lpEscape + 1))
bOutput &= PrintDirect(hOutput, lpMulti, lpEscape + 1 - lpMulti);
bOutput &= PrintDirect(hOutput, lpMulti, lpData - lpMulti);
bOutput &= PrintString(hOutput, L"\"");
}
while (++lpData < lpLast);
bOutput &= PrintString(hOutput, L"\r\n");
}
break;
case REG_DWORD_BIG_ENDIAN:
if (dwData != sizeof(DWORD))
goto DEFAULT;
#if 0
bOutput &= PrintFormat(hOutput, L",%lu\r\n", _byteswap_ulong(*(LPDWORD) cbData));
#else
bOutput &= PrintFormat(hOutput, L",%lu ; 0x%08lx\r\n", _byteswap_ulong(*(LPDWORD) cbData), *(LPDWORD) cbData);
#endif
break;
case REG_DWORD_LITTLE_ENDIAN:
// case REG_DWORD:
if (dwData != sizeof(DWORD))
goto DEFAULT;
#if 0
bOutput &= PrintFormat(hOutput, L",%lu\r\n", *(LPDWORD) cbData);
#else
bOutput &= PrintFormat(hOutput, L",%lu ; 0x%08lx\r\n", *(LPDWORD) cbData, *(LPDWORD) cbData);
#endif
break;
case REG_QWORD_LITTLE_ENDIAN:
// case REG_QWORD:
if (dwData != sizeof(QWORD))
goto DEFAULT;
#if 0
bOutput &= PrintFormat(hOutput, L",%I64u\r\n", *(LPQWORD) cbData);
#else
bOutput &= PrintFormat(hOutput, L",%I64u ; 0x%016I64x\r\n", *(LPQWORD) cbData, *(LPQWORD) cbData);
#endif
break;
// case REG_NONE:
// case REG_BINARY:
// case REG_RESOURCE_LIST:
// case REG_FULL_RESOURCE_DESCRIPTOR:
// case REG_RESOURCE_REQUIREMENTS_LIST:
default:
DEFAULT:
for (dwBytes = 0; dwBytes < dwData; dwBytes++)
#ifdef TINY
bOutput &= PrintFormat(hOutput, L",%02x", cbData[dwBytes]);
#else
bOutput &= PrintDirect(hOutput, szBytes[cbData[dwBytes]], 3);
#endif
bOutput &= PrintString(hOutput, L"\r\n");
}
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu for value \'%ls\' of registry key \'%ls\'\n",
dwError = GetLastError(), szValue, szKey);
}
}
for (dwSubKeys = 0;; dwSubKeys++)
{
dwSubKey = sizeof(szKey) / sizeof(*szKey) - dwKey - 1;
dwError = OREnumKey(hkKey,
dwSubKeys,
lpSubKey,
&dwSubKey,
(LPWSTR) NULL,
(LPDWORD) NULL,
(LPFILETIME) NULL);
if (dwError == ERROR_NO_MORE_ITEMS)
break;
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"OREnumKey() returned error %lu for registry key \'%ls\'\n",
dwError, szKey);
else
{
#ifdef SANITY
dwChars = wcslen(lpSubKey);
if (dwChars > dwSubKey)
PrintConsole(hConsole,
L"ERROR: size (%lu characters) of subkey name \'%ls\' in registry key \'%ls\' smaller than actual string length (%lu characters)\n",
dwSubKey, lpSubKey, szKey, dwChars);
else if (dwChars < dwSubKey)
PrintConsole(hConsole,
L"WARNING: size (%lu characters) of subkey name \'%ls\' in registry key \'%ls\' greater than actual string length (%lu characters)\n",
dwSubKey, lpSubKey, szKey, dwChars);
#endif // SANITY
szKey[dwKey] = L'\\';
dwError = OROpenKey(hkKey,
lpSubKey,
&hkSubKey);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"OROpenKey() returned error %lu for registry key \'%ls\'\n",
dwError, szKey);
else
{
dwError = Offline(hConsole, hOutput, hkSubKey, dwKey + 1 + dwSubKey);
dwValue = ORCloseKey(hkSubKey);
if (dwValue != ERROR_SUCCESS)
PrintConsole(hConsole,
L"ORCloseKey() returned error %lu for registry key \'%ls\'\n",
dwValue, szKey);
}
szKey[dwKey] = L'\0';
}
}
#ifndef SECURITY
if ((dwValues == 0) && (dwSubKeys == 0))
{
if (dwKey < sizeof("HKEY_OFFLINE"))
bOutput = PrintString(hOutput,
L"HKO,,,%REG_KEYONLY%\r\n");
else
bOutput = PrintFormat(hOutput,
L"HKO,\"%ls\",,%%REG_KEYONLY%%\r\n",
szKey + sizeof("HKEY_OFFLINE"));
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu for empty registry key \'%ls\'\n",
dwError = GetLastError(), szKey);
}
#endif
return dwError;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
SYSTEMTIME st;
LPWSTR *lpArguments;
INT nArguments;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwMajor, dwMinor;
HKEY hkRoot;
HANDLE hOutput;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments != 2)
PrintConsole(hConsole,
L"Bad arguments: a single file or path name of a registry hive must be given!\n");
else
{
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOutput == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"GetStdHandle() returned error %lu\n",
dwError = GetLastError());
else
{
if (!FlushFileBuffers(hOutput))
PrintConsole(hConsole,
L"FlushFileBuffers() returned error %lu: standard output is not redirected to a file!\n",
dwError = GetLastError());
else
{
ORGetVersion(&dwMajor, &dwMinor);
PrintConsole(hConsole,
L"OFFREG.DLL version %lu.%lu\n",
dwMajor, dwMinor);
dwError = OROpenHive(lpArguments[1], &hkRoot);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"OROpenHive() returned error %lu\n",
dwError);
else
{
GetSystemTime(&st);
if (!PrintFormat(hOutput,
L"\xFEFF" // UTF-16LE BOM
L"[Version]\r\n"
L"DriverVer = %02hu/%02hu/%04hu,%02hu.%02hu.%02hu.%03hu ; UTC\r\n"
L"Provider = \"Stefan Kanthak\"\r\n"
L"Signature = \"$Windows NT$\"\r\n"
L"\r\n"
L"[Strings]\r\n"
L"REG_SZ = 0x00000000\r\n"
L"REG_BINARY = 0x00000001\r\n"
L"REG_KEYONLY = 0x00000010\r\n"
L"REG_MULTI_SZ = 0x00010000\r\n"
L"REG_DWORD = 0x00010001\r\n"
L"REG_EXPAND_SZ = 0x00020000\r\n"
L"REG_NONE = 0x00020001\r\n"
L"REG_COMPATIBLE = 0x00030001 ; same as REG_BINARY\r\n"
L"REG_DWORD_LITTLE_ENDIAN = 0x00040001 ; same as REG_DWORD\r\n"
L"REG_DWORD_BIG_ENDIAN = 0x00050001\r\n"
L"REG_LINK = 0x00060000\r\n"
L"REG_RESOURCE_LIST = 0x00080001\r\n"
L"REG_FULL_RESOURCE_DESCRIPTOR = 0x00090001\r\n"
L"REG_RESOURCE_REQUIREMENTS_LIST = 0x000a0001\r\n"
L"REG_QWORD = 0x000b0001\r\n"
L"REG_QWORD_LITTLE_ENDIAN = 0x000b0001 ; same as REG_QWORD\r\n"
L"\r\n"
L"[DefaultInstall.NT]\r\n"
L";AddReg = AddReg.HKO\r\n"
L"\r\n"
L"[AddReg.HKO]\r\n",
st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds))
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
#if 0
wmemcpy(szKey, L"HKEY_OFFLINE", sizeof("HKEY_OFFLINE"));
#else
memcpy(szKey, L"HKEY_OFFLINE", sizeof(L"HKEY_OFFLINE"));
#endif
dwError = Offline(hConsole, hOutput, hkRoot, sizeof("HKEY_OFFLINE") - 1);
if (!PrintString(hOutput,
L"\r\n"
L"; EOF\r\n"))
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
dwError = ORCloseHive(hkRoot);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"ORCloseHive() returned error %lu\n",
dwError);
}
}
if (!CloseHandle(hOutput))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Note: with the preprocessor macro
SANITY
defined, several consistency and sanity checks
regarding the size of key and value names as well as value data and
value data types are performed.
Note: with the preprocessor macro
SECURITY
defined, the
security descriptors
of enumerated keys are printed in
Security Descriptor Definition Language
notation.
Note: with the preprocessor macro TINY
defined, the application gets 2036 bytes smaller, but also a little
slower!
Run the following four command lines to compile the source file
OFFREG.C
created in step 1., link the compiled
object file OFFREG.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:mainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeOFFREG.COM OFFREG.C ADVAPI32.LIB KERNEL32.LIB OFFREG.LIB SHELL32.LIB USER32.LIB ERASE OFFREG.OBJFor 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. OFFREG.C OFFREG.C(523) : warning C4090: 'function' : different 'const' qualifiers Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file OFFREG.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 03 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 0c 00 00 ......#.........
00 1a 00 00 00 80 14 00 91 16 00 00 00 10 00 00 ................
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 c0 14 00 00 02 00 00 1d 63 00 00 03 00 00 85 .........c......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
a0 37 00 00 50 00 00 00 00 00 00 00 00 00 00 00 .7..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 38 37 00 00 40 00 00 00 ........87..@...
00 00 00 00 00 00 00 00 00 20 00 00 5c 00 00 00 ......... ..\...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
6b 0a 00 00 00 10 00 00 00 0c 00 00 00 02 00 00 k...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 98 19 00 00 00 20 00 00 .const....... ..
00 1a 00 00 00 0e 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 2e 62 73 73 00 00 00 00 ....@..@.bss....
00 80 14 00 00 40 00 00 00 00 00 00 00 00 00 00 .....@..........
00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 c0 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 54 20 40 00 8b f0 .......P..T @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 00 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 08 08 00 00 8d 45 10 50 ff 75 0c 8d 85 ........E.P.u...
f8 f7 ff ff 50 ff 15 54 20 40 00 85 c0 75 02 c9 ....P..T @...u..
c3 56 57 8d 3c 00 8d b5 f8 f7 ff ff 6a 00 8d 45 .VW.<.......j..E
fc 50 57 56 ff 75 08 ff 15 04 20 40 00 85 c0 74 .PWV.u.... @...t
0f 03 75 fc 2b 7d fc 75 e3 33 c0 40 5f 5e c9 c3 ..u.+}.u.3.@_^..
33 c0 eb f8 55 8b ec 56 8b 75 10 57 8b 7d 0c 03 3...U..V.u.W.}..
f6 6a 00 8d 45 10 50 56 57 ff 75 08 ff 15 04 20 .j..E.PVW.u....
40 00 85 c0 74 11 03 7d 10 2b 75 10 75 e3 33 c0 @...t..}.+u.u.3.
40 5f 5e 5d c2 0c 00 33 c0 eb f6 8b 44 24 04 0f @_^]...3....D$..
b7 08 83 f9 22 74 0f 83 f9 25 74 0a 83 c0 02 66 ...."t...%t....f
85 c9 75 eb 33 c0 c2 04 00 55 8b ec 83 ec 24 53 ..u.3....U....$S
56 57 8d 45 fc 50 be 00 c0 44 00 56 8d 45 e4 50 VW.E.P...D.V.E.P
8d 45 f8 50 33 db 68 00 40 44 00 53 ff 75 10 89 .E.P3.h.@D.S.u..
5d ec c7 45 f8 00 40 00 00 c7 45 fc 00 00 10 00 ]..E..@...E.....
ff 15 40 20 40 00 bf 03 01 00 00 e9 eb 03 00 00 ..@ @...........
3b c3 74 20 68 00 40 40 00 50 68 dc 2c 40 00 68 ;.t h.@@.Ph.,@.h
78 2c 40 00 ff 75 08 e8 a4 fe ff ff 83 c4 14 e9 x,@..u..........
98 03 00 00 83 7d 14 0d 73 11 68 6c 2c 40 00 ff .....}..s.hl,@..
75 0c e8 d7 fe ff ff 59 59 eb 15 68 1a 40 40 00 u......YY..h.@@.
68 54 2c 40 00 ff 75 0c e8 c1 fe ff ff 83 c4 0c hT,@..u.........
8b d8 8b 45 e4 83 f8 0c 73 2b 83 7d f8 00 ff 34 ...E....s+.}...4
85 80 29 40 00 75 12 68 38 2c 40 00 ff 75 0c e8 ..)@.u.h8,@..u..
9a fe ff ff 83 c4 0c eb 2f 68 00 40 44 00 68 14 ......../h.@D.h.
2c 40 00 eb 18 83 7d f8 00 50 75 07 68 00 2c 40 ,@....}..Pu.h.,@
00 eb d9 68 00 40 44 00 68 e4 2b 40 00 ff 75 0c ...h.@D.h.+@..u.
e8 69 fe ff ff 83 c4 10 23 d8 8b 45 fc 33 d2 3b .i......#..E.3.;
c2 0f 84 c8 02 00 00 8b 4d e4 3b ca 0f 86 8d 02 ........M.;.....
00 00 83 f9 02 0f 86 df 01 00 00 83 f9 04 0f 84 ................
c5 01 00 00 83 f9 05 0f 84 95 01 00 00 83 f9 06 ................
0f 84 56 01 00 00 83 f9 07 74 36 83 f9 0b 0f 85 ..V......t6.....
5b 02 00 00 83 f8 08 0f 85 52 02 00 00 a1 04 c0 [........R......
44 00 8b 0d 00 c0 44 00 50 51 50 51 68 b8 2b 40 D.....D.PQPQh.+@
00 ff 75 0c e8 f5 fd ff ff 83 c4 18 e9 6d 02 00 ..u..........m..
00 a8 01 0f 85 26 02 00 00 83 f8 02 75 15 66 39 .....&......u.f9
15 00 c0 44 00 75 0c 6a 03 68 b0 2b 40 00 e9 43 ...D.u.j.h.+@..C
02 00 00 d1 e8 8d 0c 45 00 c0 44 00 8b fe 89 45 .......E..D....E
fc 89 4d e0 83 f8 01 76 19 8d 51 fe 66 83 3a 00 ..M....v..Q.f.:.
75 10 66 83 3c 45 fc bf 44 00 00 75 05 89 55 e0 u.f.<E..D..u..U.
eb 05 33 c0 66 89 01 66 83 3f 00 75 0c 6a 03 68 ..3.f..f.?.u.j.h
a8 2b 40 00 e9 84 00 00 00 8b c7 8d 50 02 66 8b .+@.........P.f.
08 83 c0 02 66 85 c9 75 f5 6a 02 2b c2 68 a0 2b ....f..u.j.+.h.+
40 00 ff 75 0c d1 f8 89 45 fc e8 b5 fd ff ff 57 @..u....E......W
23 d8 89 7d f4 e8 e1 fd ff ff 8b 4d fc 8d 3c 4f #..}.......M..<O
eb 28 8b 45 e8 2b 45 f4 83 c0 02 d1 f8 50 ff 75 .(.E.+E......P.u
f4 ff 75 0c e8 8b fd ff ff 23 d8 8b 45 e8 89 45 ..u......#..E..E
f4 83 c0 02 50 e8 b1 fd ff ff 89 45 e8 85 c0 75 ....P......E...u
d1 8b c7 2b 45 f4 d1 f8 50 ff 75 f4 ff 75 0c e8 ...+E...P.u..u..
60 fd ff ff 6a 01 23 d8 68 9c 2b 40 00 ff 75 0c `...j.#.h.+@..u.
e8 4f fd ff ff 83 c7 02 23 d8 3b 7d e0 0f 82 54 .O......#.;}...T
ff ff ff 6a 02 68 94 2b 40 00 ff 75 0c e8 32 fd ...j.h.+@..u..2.
ff ff bf 03 01 00 00 e9 52 01 00 00 a8 01 0f 85 ........R.......
0b 01 00 00 6a 02 68 a0 2b 40 00 ff 75 0c e8 11 ....j.h.+@..u...
fd ff ff 23 d8 8b 45 fc d1 e8 50 56 ff 75 0c e8 ...#..E...PV.u..
00 fd ff ff 6a 03 23 d8 68 8c 2b 40 00 e9 14 01 ....j.#.h.+@....
00 00 83 f8 04 0f 85 d4 00 00 00 a1 00 c0 44 00 ..............D.
50 0f c8 50 68 68 2b 40 00 ff 75 0c e8 7d fc ff P..Phh+@..u..}..
ff 83 c4 10 e9 f5 00 00 00 83 f8 04 0f 85 ad 00 ................
00 00 a1 00 c0 44 00 50 eb d9 a8 01 0f 85 9d 00 .....D.P........
00 00 66 39 15 00 c0 44 00 75 0c 6a 05 68 5c 2b ..f9...D.u.j.h\+
40 00 e9 bf 00 00 00 d1 e8 33 c9 66 89 0c 45 00 @........3.f..E.
c0 44 00 8b c6 89 75 f4 8d 48 02 66 8b 10 83 c0 .D....u..H.f....
02 66 85 d2 75 f5 6a 02 2b c1 68 a0 2b 40 00 ff .f..u.j.+.h.+@..
75 0c d1 f8 89 45 fc e8 68 fc ff ff 56 eb 1d 8b u....E..h...V...
c7 2b 45 f4 83 c0 02 d1 f8 50 ff 75 f4 ff 75 0c .+E......P.u..u.
e8 4f fc ff ff 89 7d f4 83 c7 02 57 23 d8 e8 78 .O....}....W#..x
fc ff ff 8b f8 85 ff 75 d6 8b 45 fc 03 c0 2b 45 .......u..E...+E
f4 03 c6 d1 f8 50 ff 75 f4 ff 75 0c e8 23 fc ff .....P.u..u..#..
ff 6a 03 23 d8 68 8c 2b 40 00 e9 db fe ff ff 89 .j.#.h.+@.......
55 f4 3b c2 76 29 8b 45 f4 0f b6 80 00 c0 44 00 U.;.v).E......D.
6a 03 8d 04 c5 80 21 40 00 50 ff 75 0c e8 f2 fb j.....!@.P.u....
ff ff 23 d8 ff 45 f4 8b 45 f4 3b 45 fc 72 d7 6a ..#..E..E.;E.r.j
02 68 94 2b 40 00 ff 75 0c e8 d6 fb ff ff 23 d8 .h.+@..u......#.
85 db 75 26 ff 15 08 20 40 00 68 00 40 40 00 68 ..u&... @.h.@@.h
00 40 44 00 50 68 48 2b 40 00 68 c8 2a 40 00 ff .@D.PhH+@.h.*@..
75 08 e8 09 fb ff ff 83 c4 18 33 db ff 45 ec 8d u.........3..E..
45 fc 50 56 8d 45 e4 50 8d 45 f8 50 68 00 40 44 E.PV.E.P.E.Ph.@D
00 ff 75 ec c7 45 f8 00 40 00 00 ff 75 10 c7 45 ..u..E..@...u..E
fc 00 00 10 00 ff 15 40 20 40 00 3b c7 0f 85 0d .......@ @.;....
fc ff ff 8b 75 14 53 b8 ff ff 01 00 2b c6 53 89 ....u.S.....+.S.
45 e0 89 45 f0 53 8d 45 f0 50 8d 04 75 02 40 40 E..E.S.E.P..u.@@
00 50 89 5d f4 53 e9 bb 00 00 00 39 5d 14 74 1f .P.].S.....9].t.
68 00 40 40 00 ff 75 14 68 b4 2a 40 00 68 78 2c h.@@..u.h.*@.hx,
40 00 ff 75 08 e8 86 fa ff ff 83 c4 14 eb 7c 6a @..u..........|j
5c 58 66 89 04 75 00 40 40 00 8d 45 dc 50 8d 04 \Xf..u.@@..E.P..
75 02 40 40 00 50 ff 75 10 ff 15 3c 20 40 00 3b u.@@.P.u...< @.;
c3 74 0d 68 00 40 40 00 50 68 a0 2a 40 00 eb 31 .t.h.@@.Ph.*@..1
8b 45 f0 8d 44 30 01 50 ff 75 dc ff 75 0c ff 75 .E..D0.P.u..u..u
08 e8 33 fb ff ff ff 75 dc ff 15 38 20 40 00 89 ..3....u...8 @..
45 f8 3b c3 74 1b 68 00 40 40 00 50 68 88 2a 40 E.;.t.h.@@.Ph.*@
00 68 78 2c 40 00 ff 75 08 e8 12 fa ff ff 83 c4 .hx,@..u........
14 33 c0 66 89 04 75 00 40 40 00 8b 45 e0 ff 45 .3.f..u.@@..E..E
f4 53 53 89 45 f0 53 8d 45 f0 50 8d 04 75 02 40 .SS.E.S.E.P..u.@
40 00 50 ff 75 f4 ff 75 10 ff 15 34 20 40 00 89 @.P.u..u...4 @..
45 14 3b c7 0f 85 31 ff ff ff 39 5d ec 75 58 39 E.;...1...9].uX9
5d f4 75 53 83 fe 0d 73 11 6a 15 68 5c 2a 40 00 ].uS...s.j.h\*@.
ff 75 0c e8 5c fa ff ff eb 15 68 1a 40 40 00 68 .u..\.....h.@@.h
20 2a 40 00 ff 75 0c e8 f2 f9 ff ff 83 c4 0c 3b *@..u.........;
c3 75 24 ff 15 08 20 40 00 68 00 40 40 00 50 68 .u$... @.h.@@.Ph
48 2b 40 00 68 b0 29 40 00 ff 75 08 89 45 14 e8 H+@.h.)@..u..E..
7c f9 ff ff 83 c4 14 8b 45 14 5f 5e 5b c9 c2 10 |.......E._^[...
00 83 ec 2c 56 57 6a f4 bf a0 00 00 00 ff 15 24 ...,VWj........$
20 40 00 8b f0 89 74 24 08 83 fe ff 75 0d ff 15 @....t$....u...
08 20 40 00 8b f8 e9 0f 02 00 00 53 55 8d 44 24 . @........SU.D$
20 50 ff 15 20 20 40 00 50 e8 05 02 00 00 8b 2d P.. @.P......-
08 20 40 00 89 44 24 1c 85 c0 75 14 ff d5 8b f8 . @..D$...u.....
57 68 0c 37 40 00 bb d8 36 40 00 e9 b1 01 00 00 Wh.7@...6@......
83 7c 24 20 02 bb d8 36 40 00 74 12 68 40 36 40 .|$ ...6@.t.h@6@
00 56 e8 f9 f8 ff ff 59 59 e9 7d 01 00 00 6a f5 .V.....YY.}...j.
ff 15 24 20 40 00 89 44 24 14 83 f8 ff 75 0f ff ..$ @..D$....u..
d5 8b f8 57 68 24 36 40 00 e9 53 01 00 00 50 ff ...Wh$6@..S...P.
15 1c 20 40 00 85 c0 75 11 ff d5 8b f8 57 68 00 .. @...u.....Wh.
36 40 00 68 70 35 40 00 eb 45 8d 44 24 24 50 8d 6@.hp5@..E.D$$P.
44 24 2c 50 ff 15 4c 20 40 00 ff 74 24 24 ff 74 D$,P..L @..t$$.t
24 2c 68 38 35 40 00 56 e8 93 f8 ff ff 83 c4 10 $,h85@.V........
8d 44 24 18 50 8b 44 24 20 ff 70 04 ff 15 48 20 .D$.P.D$ .p...H
40 00 8b f8 85 ff 74 15 57 68 20 35 40 00 53 56 @.....t.Wh 5@.SV
e8 6b f8 ff ff 83 c4 10 e9 ce 00 00 00 8d 44 24 .k............D$
2c 50 ff 15 18 20 40 00 0f b7 44 24 3a 50 0f b7 ,P... @...D$:P..
44 24 3c 50 0f b7 44 24 3e 50 0f b7 44 24 40 50 D$<P..D$>P..D$@P
0f b7 44 24 3c 50 0f b7 44 24 46 50 0f b7 44 24 ..D$<P..D$FP..D$
46 50 68 68 2d 40 00 ff 74 24 34 e8 6e f8 ff ff FPhh-@..t$4.n...
83 c4 24 85 c0 75 12 ff d5 50 68 48 2b 40 00 53 ..$..u...PhH+@.S
56 e8 0a f8 ff ff 83 c4 10 6a 1a 59 6a 0c ff 74 V........j.Yj..t
24 1c bf 00 40 40 00 ff 74 24 1c be 4c 2d 40 00 $...@@..t$..L-@.
ff 74 24 1c f3 a4 e8 de f8 ff ff 6a 09 68 38 2d .t$........j.h8-
40 00 ff 74 24 1c e8 79 f8 ff ff 85 c0 75 15 ff @..t$..y.....u..
d5 50 68 48 2b 40 00 53 ff 74 24 1c e8 bf f7 ff .PhH+@.S.t$.....
ff 83 c4 10 ff 74 24 18 ff 15 44 20 40 00 8b f8 .....t$...D @...
85 ff 74 13 57 68 20 2d 40 00 53 ff 74 24 1c e8 ..t.Wh -@.S.t$..
9c f7 ff ff 83 c4 10 8b 74 24 10 ff 74 24 14 ff ........t$..t$..
15 14 20 40 00 85 c0 75 12 ff d5 50 68 08 2d 40 .. @...u...Ph.-@
00 53 56 e8 78 f7 ff ff 83 c4 10 ff 74 24 1c ff .SV.x.......t$..
15 10 20 40 00 85 c0 74 12 ff d5 50 68 f4 2c 40 .. @...t...Ph.,@
00 53 56 e8 58 f7 ff ff 83 c4 10 56 ff 15 14 20 .SV.X......V...
40 00 85 c0 75 12 ff d5 50 68 08 2d 40 00 53 56 @...u...Ph.-@.SV
e8 3b f7 ff ff 83 c4 10 5d 5b 57 ff 15 0c 20 40 .;......][W... @
00 5f 5e 55 8b ec 51 8b 45 08 53 56 33 f6 57 8b ._^U..Q.E.SV3.W.
f8 89 75 08 89 75 fc 39 75 0c 0f 84 6a 01 00 00 ..u..u.9u...j...
3b c6 0f 84 62 01 00 00 0f b7 08 66 3b ce 0f 84 ;...b......f;...
56 01 00 00 83 f9 20 74 0a 83 f9 09 74 05 33 db V..... t....t.3.
43 eb 02 33 db 39 75 08 75 2b 66 83 f9 20 74 06 C..3.9u.u+f.. t.
66 83 f9 09 75 1f 89 75 fc 83 c0 02 0f b7 08 83 f...u..u........
f9 20 74 f5 83 f9 09 74 f0 33 c9 66 39 30 0f 95 . t....t.3.f90..
c1 03 d9 eb 23 66 83 f9 5c 75 06 83 75 fc 01 eb ....#f..\u..u...
14 39 75 fc 75 0c 66 83 f9 22 75 06 83 75 08 01 .9u.u.f.."u..u..
eb 03 89 75 fc 83 c0 02 0f b7 08 66 3b ce 75 a5 ...u.......f;.u.
2b c7 83 c0 02 d1 f8 8d 44 58 02 03 c0 50 6a 40 +.......DX...Pj@
ff 15 2c 20 40 00 8b f0 33 d2 3b f2 0f 84 d0 00 .., @...3.;.....
00 00 8d 44 9e 04 33 db 89 06 89 55 08 89 5d fc ...D..3....U..].
83 7d 08 00 75 34 0f b7 0f 83 f9 20 74 05 83 f9 .}..u4..... t...
09 75 27 33 d2 33 c9 66 89 08 83 c7 02 0f b7 0f .u'3.3.f........
83 f9 20 74 f5 83 f9 09 74 f0 66 39 17 74 71 43 .. t....t.f9.tqC
8b c7 89 5d fc 89 3c 9e eb 5c 0f b7 0f 83 f9 5c ...]..<..\.....\
75 03 42 eb 48 83 f9 22 75 41 6a 02 8d 5a 01 d1 u.B.H.."uAj..Z..
eb 59 f7 db 03 f9 8d 04 58 f6 c2 01 74 0a 6a 22 .Y......X...t.j"
5a 66 89 10 03 c1 eb 1c 83 7d 08 00 74 12 66 83 Zf.......}..t.f.
3f 22 75 0c 6a 22 5a 66 89 10 03 c1 03 f9 eb 04 ?"u.j"Zf........
83 75 08 01 8b 5d fc 33 d2 eb 0b 33 d2 66 89 08 .u...].3...3.f..
83 c0 02 83 c7 02 66 83 3f 00 0f 85 60 ff ff ff ......f.?...`...
33 c9 43 66 89 08 21 0c 9e 8b 45 0c 89 18 39 4d 3.Cf..!...E...9M
08 74 0f 68 a0 00 00 00 eb 02 6a 57 ff 15 28 20 .t.h......jW..(
40 00 5f 8b c6 5e 5b c9 c2 08 00 00 00 00 00 00 @._..^[.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
4c 38 00 00 5c 38 00 00 68 38 00 00 78 38 00 00 L8..\8..h8..x8..
86 38 00 00 92 38 00 00 a0 38 00 00 b0 38 00 00 .8...8...8...8..
c4 38 00 00 d6 38 00 00 e6 38 00 00 f6 38 00 00 .8...8...8...8..
00 00 00 00 12 39 00 00 1e 39 00 00 2c 39 00 00 .....9...9..,9..
38 39 00 00 46 39 00 00 54 39 00 00 62 39 00 00 89..F9..T9..b9..
00 00 00 00 7e 39 00 00 00 00 00 00 00 00 00 00 ....~9..........
51 00 57 00 4f 00 52 00 44 00 00 00 52 00 45 00 Q.W.O.R.D...R.E.
53 00 4f 00 55 00 52 00 43 00 45 00 5f 00 52 00 S.O.U.R.C.E._.R.
45 00 51 00 55 00 49 00 52 00 45 00 4d 00 45 00 E.Q.U.I.R.E.M.E.
4e 00 54 00 53 00 5f 00 4c 00 49 00 53 00 54 00 N.T.S._.L.I.S.T.
00 00 00 00 46 00 55 00 4c 00 4c 00 5f 00 52 00 ....F.U.L.L._.R.
45 00 53 00 4f 00 55 00 52 00 43 00 45 00 5f 00 E.S.O.U.R.C.E._.
44 00 45 00 53 00 43 00 52 00 49 00 50 00 54 00 D.E.S.C.R.I.P.T.
4f 00 52 00 00 00 00 00 52 00 45 00 53 00 4f 00 O.R.....R.E.S.O.
55 00 52 00 43 00 45 00 5f 00 4c 00 49 00 53 00 U.R.C.E._.L.I.S.
54 00 00 00 4d 00 55 00 4c 00 54 00 49 00 5f 00 T...M.U.L.T.I._.
53 00 5a 00 00 00 00 00 4c 00 49 00 4e 00 4b 00 S.Z.....L.I.N.K.
00 00 00 00 44 00 57 00 4f 00 52 00 44 00 5f 00 ....D.W.O.R.D._.
42 00 49 00 47 00 5f 00 45 00 4e 00 44 00 49 00 B.I.G._.E.N.D.I.
41 00 4e 00 00 00 00 00 44 00 57 00 4f 00 52 00 A.N.....D.W.O.R.
44 00 00 00 42 00 49 00 4e 00 41 00 52 00 59 00 D...B.I.N.A.R.Y.
00 00 00 00 45 00 58 00 50 00 41 00 4e 00 44 00 ....E.X.P.A.N.D.
5f 00 53 00 5a 00 00 00 53 00 5a 00 00 00 00 00 _.S.Z...S.Z.....
4e 00 4f 00 4e 00 45 00 00 00 00 00 00 00 00 00 N.O.N.E.........
2c 00 30 00 30 00 00 00 2c 00 30 00 31 00 00 00 ,.0.0...,.0.1...
2c 00 30 00 32 00 00 00 2c 00 30 00 33 00 00 00 ,.0.2...,.0.3...
2c 00 30 00 34 00 00 00 2c 00 30 00 35 00 00 00 ,.0.4...,.0.5...
2c 00 30 00 36 00 00 00 2c 00 30 00 37 00 00 00 ,.0.6...,.0.7...
2c 00 30 00 38 00 00 00 2c 00 30 00 39 00 00 00 ,.0.8...,.0.9...
2c 00 30 00 61 00 00 00 2c 00 30 00 62 00 00 00 ,.0.a...,.0.b...
2c 00 30 00 63 00 00 00 2c 00 30 00 64 00 00 00 ,.0.c...,.0.d...
2c 00 30 00 65 00 00 00 2c 00 30 00 66 00 00 00 ,.0.e...,.0.f...
2c 00 31 00 30 00 00 00 2c 00 31 00 31 00 00 00 ,.1.0...,.1.1...
2c 00 31 00 32 00 00 00 2c 00 31 00 33 00 00 00 ,.1.2...,.1.3...
2c 00 31 00 34 00 00 00 2c 00 31 00 35 00 00 00 ,.1.4...,.1.5...
2c 00 31 00 36 00 00 00 2c 00 31 00 37 00 00 00 ,.1.6...,.1.7...
2c 00 31 00 38 00 00 00 2c 00 31 00 39 00 00 00 ,.1.8...,.1.9...
2c 00 31 00 61 00 00 00 2c 00 31 00 62 00 00 00 ,.1.a...,.1.b...
2c 00 31 00 63 00 00 00 2c 00 31 00 64 00 00 00 ,.1.c...,.1.d...
2c 00 31 00 65 00 00 00 2c 00 31 00 66 00 00 00 ,.1.e...,.1.f...
2c 00 32 00 30 00 00 00 2c 00 32 00 31 00 00 00 ,.2.0...,.2.1...
2c 00 32 00 32 00 00 00 2c 00 32 00 33 00 00 00 ,.2.2...,.2.3...
2c 00 32 00 34 00 00 00 2c 00 32 00 35 00 00 00 ,.2.4...,.2.5...
2c 00 32 00 36 00 00 00 2c 00 32 00 37 00 00 00 ,.2.6...,.2.7...
2c 00 32 00 38 00 00 00 2c 00 32 00 39 00 00 00 ,.2.8...,.2.9...
2c 00 32 00 61 00 00 00 2c 00 32 00 62 00 00 00 ,.2.a...,.2.b...
2c 00 32 00 63 00 00 00 2c 00 32 00 64 00 00 00 ,.2.c...,.2.d...
2c 00 32 00 65 00 00 00 2c 00 32 00 66 00 00 00 ,.2.e...,.2.f...
2c 00 33 00 30 00 00 00 2c 00 33 00 31 00 00 00 ,.3.0...,.3.1...
2c 00 33 00 32 00 00 00 2c 00 33 00 33 00 00 00 ,.3.2...,.3.3...
2c 00 33 00 34 00 00 00 2c 00 33 00 35 00 00 00 ,.3.4...,.3.5...
2c 00 33 00 36 00 00 00 2c 00 33 00 37 00 00 00 ,.3.6...,.3.7...
2c 00 33 00 38 00 00 00 2c 00 33 00 39 00 00 00 ,.3.8...,.3.9...
2c 00 33 00 61 00 00 00 2c 00 33 00 62 00 00 00 ,.3.a...,.3.b...
2c 00 33 00 63 00 00 00 2c 00 33 00 64 00 00 00 ,.3.c...,.3.d...
2c 00 33 00 65 00 00 00 2c 00 33 00 66 00 00 00 ,.3.e...,.3.f...
2c 00 34 00 30 00 00 00 2c 00 34 00 31 00 00 00 ,.4.0...,.4.1...
2c 00 34 00 32 00 00 00 2c 00 34 00 33 00 00 00 ,.4.2...,.4.3...
2c 00 34 00 34 00 00 00 2c 00 34 00 35 00 00 00 ,.4.4...,.4.5...
2c 00 34 00 36 00 00 00 2c 00 34 00 37 00 00 00 ,.4.6...,.4.7...
2c 00 34 00 38 00 00 00 2c 00 34 00 39 00 00 00 ,.4.8...,.4.9...
2c 00 34 00 61 00 00 00 2c 00 34 00 62 00 00 00 ,.4.a...,.4.b...
2c 00 34 00 63 00 00 00 2c 00 34 00 64 00 00 00 ,.4.c...,.4.d...
2c 00 34 00 65 00 00 00 2c 00 34 00 66 00 00 00 ,.4.e...,.4.f...
2c 00 35 00 30 00 00 00 2c 00 35 00 31 00 00 00 ,.5.0...,.5.1...
2c 00 35 00 32 00 00 00 2c 00 35 00 33 00 00 00 ,.5.2...,.5.3...
2c 00 35 00 34 00 00 00 2c 00 35 00 35 00 00 00 ,.5.4...,.5.5...
2c 00 35 00 36 00 00 00 2c 00 35 00 37 00 00 00 ,.5.6...,.5.7...
2c 00 35 00 38 00 00 00 2c 00 35 00 39 00 00 00 ,.5.8...,.5.9...
2c 00 35 00 61 00 00 00 2c 00 35 00 62 00 00 00 ,.5.a...,.5.b...
2c 00 35 00 63 00 00 00 2c 00 35 00 64 00 00 00 ,.5.c...,.5.d...
2c 00 35 00 65 00 00 00 2c 00 35 00 66 00 00 00 ,.5.e...,.5.f...
2c 00 36 00 30 00 00 00 2c 00 36 00 31 00 00 00 ,.6.0...,.6.1...
2c 00 36 00 32 00 00 00 2c 00 36 00 33 00 00 00 ,.6.2...,.6.3...
2c 00 36 00 34 00 00 00 2c 00 36 00 35 00 00 00 ,.6.4...,.6.5...
2c 00 36 00 36 00 00 00 2c 00 36 00 37 00 00 00 ,.6.6...,.6.7...
2c 00 36 00 38 00 00 00 2c 00 36 00 39 00 00 00 ,.6.8...,.6.9...
2c 00 36 00 61 00 00 00 2c 00 36 00 62 00 00 00 ,.6.a...,.6.b...
2c 00 36 00 63 00 00 00 2c 00 36 00 64 00 00 00 ,.6.c...,.6.d...
2c 00 36 00 65 00 00 00 2c 00 36 00 66 00 00 00 ,.6.e...,.6.f...
2c 00 37 00 30 00 00 00 2c 00 37 00 31 00 00 00 ,.7.0...,.7.1...
2c 00 37 00 32 00 00 00 2c 00 37 00 33 00 00 00 ,.7.2...,.7.3...
2c 00 37 00 34 00 00 00 2c 00 37 00 35 00 00 00 ,.7.4...,.7.5...
2c 00 37 00 36 00 00 00 2c 00 37 00 37 00 00 00 ,.7.6...,.7.7...
2c 00 37 00 38 00 00 00 2c 00 37 00 39 00 00 00 ,.7.8...,.7.9...
2c 00 37 00 61 00 00 00 2c 00 37 00 62 00 00 00 ,.7.a...,.7.b...
2c 00 37 00 63 00 00 00 2c 00 37 00 64 00 00 00 ,.7.c...,.7.d...
2c 00 37 00 65 00 00 00 2c 00 37 00 66 00 00 00 ,.7.e...,.7.f...
2c 00 38 00 30 00 00 00 2c 00 38 00 31 00 00 00 ,.8.0...,.8.1...
2c 00 38 00 32 00 00 00 2c 00 38 00 33 00 00 00 ,.8.2...,.8.3...
2c 00 38 00 34 00 00 00 2c 00 38 00 35 00 00 00 ,.8.4...,.8.5...
2c 00 38 00 36 00 00 00 2c 00 38 00 37 00 00 00 ,.8.6...,.8.7...
2c 00 38 00 38 00 00 00 2c 00 38 00 39 00 00 00 ,.8.8...,.8.9...
2c 00 38 00 61 00 00 00 2c 00 38 00 62 00 00 00 ,.8.a...,.8.b...
2c 00 38 00 63 00 00 00 2c 00 38 00 64 00 00 00 ,.8.c...,.8.d...
2c 00 38 00 65 00 00 00 2c 00 38 00 66 00 00 00 ,.8.e...,.8.f...
2c 00 39 00 30 00 00 00 2c 00 39 00 31 00 00 00 ,.9.0...,.9.1...
2c 00 39 00 32 00 00 00 2c 00 39 00 33 00 00 00 ,.9.2...,.9.3...
2c 00 39 00 34 00 00 00 2c 00 39 00 35 00 00 00 ,.9.4...,.9.5...
2c 00 39 00 36 00 00 00 2c 00 39 00 37 00 00 00 ,.9.6...,.9.7...
2c 00 39 00 38 00 00 00 2c 00 39 00 39 00 00 00 ,.9.8...,.9.9...
2c 00 39 00 61 00 00 00 2c 00 39 00 62 00 00 00 ,.9.a...,.9.b...
2c 00 39 00 63 00 00 00 2c 00 39 00 64 00 00 00 ,.9.c...,.9.d...
2c 00 39 00 65 00 00 00 2c 00 39 00 66 00 00 00 ,.9.e...,.9.f...
2c 00 61 00 30 00 00 00 2c 00 61 00 31 00 00 00 ,.a.0...,.a.1...
2c 00 61 00 32 00 00 00 2c 00 61 00 33 00 00 00 ,.a.2...,.a.3...
2c 00 61 00 34 00 00 00 2c 00 61 00 35 00 00 00 ,.a.4...,.a.5...
2c 00 61 00 36 00 00 00 2c 00 61 00 37 00 00 00 ,.a.6...,.a.7...
2c 00 61 00 38 00 00 00 2c 00 61 00 39 00 00 00 ,.a.8...,.a.9...
2c 00 61 00 61 00 00 00 2c 00 61 00 62 00 00 00 ,.a.a...,.a.b...
2c 00 61 00 63 00 00 00 2c 00 61 00 64 00 00 00 ,.a.c...,.a.d...
2c 00 61 00 65 00 00 00 2c 00 61 00 66 00 00 00 ,.a.e...,.a.f...
2c 00 62 00 30 00 00 00 2c 00 62 00 31 00 00 00 ,.b.0...,.b.1...
2c 00 62 00 32 00 00 00 2c 00 62 00 33 00 00 00 ,.b.2...,.b.3...
2c 00 62 00 34 00 00 00 2c 00 62 00 35 00 00 00 ,.b.4...,.b.5...
2c 00 62 00 36 00 00 00 2c 00 62 00 37 00 00 00 ,.b.6...,.b.7...
2c 00 62 00 38 00 00 00 2c 00 62 00 39 00 00 00 ,.b.8...,.b.9...
2c 00 62 00 61 00 00 00 2c 00 62 00 62 00 00 00 ,.b.a...,.b.b...
2c 00 62 00 63 00 00 00 2c 00 62 00 64 00 00 00 ,.b.c...,.b.d...
2c 00 62 00 65 00 00 00 2c 00 62 00 66 00 00 00 ,.b.e...,.b.f...
2c 00 63 00 30 00 00 00 2c 00 63 00 31 00 00 00 ,.c.0...,.c.1...
2c 00 63 00 32 00 00 00 2c 00 63 00 33 00 00 00 ,.c.2...,.c.3...
2c 00 63 00 34 00 00 00 2c 00 63 00 35 00 00 00 ,.c.4...,.c.5...
2c 00 63 00 36 00 00 00 2c 00 63 00 37 00 00 00 ,.c.6...,.c.7...
2c 00 63 00 38 00 00 00 2c 00 63 00 39 00 00 00 ,.c.8...,.c.9...
2c 00 63 00 61 00 00 00 2c 00 63 00 62 00 00 00 ,.c.a...,.c.b...
2c 00 63 00 63 00 00 00 2c 00 63 00 64 00 00 00 ,.c.c...,.c.d...
2c 00 63 00 65 00 00 00 2c 00 63 00 66 00 00 00 ,.c.e...,.c.f...
2c 00 64 00 30 00 00 00 2c 00 64 00 31 00 00 00 ,.d.0...,.d.1...
2c 00 64 00 32 00 00 00 2c 00 64 00 33 00 00 00 ,.d.2...,.d.3...
2c 00 64 00 34 00 00 00 2c 00 64 00 35 00 00 00 ,.d.4...,.d.5...
2c 00 64 00 36 00 00 00 2c 00 64 00 37 00 00 00 ,.d.6...,.d.7...
2c 00 64 00 38 00 00 00 2c 00 64 00 39 00 00 00 ,.d.8...,.d.9...
2c 00 64 00 61 00 00 00 2c 00 64 00 62 00 00 00 ,.d.a...,.d.b...
2c 00 64 00 63 00 00 00 2c 00 64 00 64 00 00 00 ,.d.c...,.d.d...
2c 00 64 00 65 00 00 00 2c 00 64 00 66 00 00 00 ,.d.e...,.d.f...
2c 00 65 00 30 00 00 00 2c 00 65 00 31 00 00 00 ,.e.0...,.e.1...
2c 00 65 00 32 00 00 00 2c 00 65 00 33 00 00 00 ,.e.2...,.e.3...
2c 00 65 00 34 00 00 00 2c 00 65 00 35 00 00 00 ,.e.4...,.e.5...
2c 00 65 00 36 00 00 00 2c 00 65 00 37 00 00 00 ,.e.6...,.e.7...
2c 00 65 00 38 00 00 00 2c 00 65 00 39 00 00 00 ,.e.8...,.e.9...
2c 00 65 00 61 00 00 00 2c 00 65 00 62 00 00 00 ,.e.a...,.e.b...
2c 00 65 00 63 00 00 00 2c 00 65 00 64 00 00 00 ,.e.c...,.e.d...
2c 00 65 00 65 00 00 00 2c 00 65 00 66 00 00 00 ,.e.e...,.e.f...
2c 00 66 00 30 00 00 00 2c 00 66 00 31 00 00 00 ,.f.0...,.f.1...
2c 00 66 00 32 00 00 00 2c 00 66 00 33 00 00 00 ,.f.2...,.f.3...
2c 00 66 00 34 00 00 00 2c 00 66 00 35 00 00 00 ,.f.4...,.f.5...
2c 00 66 00 36 00 00 00 2c 00 66 00 37 00 00 00 ,.f.6...,.f.7...
2c 00 66 00 38 00 00 00 2c 00 66 00 39 00 00 00 ,.f.8...,.f.9...
2c 00 66 00 61 00 00 00 2c 00 66 00 62 00 00 00 ,.f.a...,.f.b...
2c 00 66 00 63 00 00 00 2c 00 66 00 64 00 00 00 ,.f.c...,.f.d...
2c 00 66 00 65 00 00 00 2c 00 66 00 66 00 00 00 ,.f.e...,.f.f...
70 21 40 00 68 21 40 00 54 21 40 00 44 21 40 00 p!@.h!@.T!@.D!@.
38 21 40 00 14 21 40 00 08 21 40 00 f4 20 40 00 8!@..!@..!@.. @.
d8 20 40 00 a4 20 40 00 6c 20 40 00 60 20 40 00 . @.. @.l @.` @.
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 65 00 6d 00 70 00 .f.o.r. .e.m.p.
74 00 79 00 20 00 72 00 65 00 67 00 69 00 73 00 t.y. .r.e.g.i.s.
74 00 72 00 79 00 20 00 6b 00 65 00 79 00 20 00 t.r.y. .k.e.y. .
27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 00 00 '.%.l.s.'.......
48 00 4b 00 4f 00 2c 00 22 00 25 00 6c 00 73 00 H.K.O.,.".%.l.s.
22 00 2c 00 2c 00 25 00 25 00 52 00 45 00 47 00 ".,.,.%.%.R.E.G.
5f 00 4b 00 45 00 59 00 4f 00 4e 00 4c 00 59 00 _.K.E.Y.O.N.L.Y.
25 00 25 00 0d 00 0a 00 00 00 00 00 48 00 4b 00 %.%.........H.K.
4f 00 2c 00 2c 00 2c 00 25 00 52 00 45 00 47 00 O.,.,.,.%.R.E.G.
5f 00 4b 00 45 00 59 00 4f 00 4e 00 4c 00 59 00 _.K.E.Y.O.N.L.Y.
25 00 0d 00 0a 00 00 00 4f 00 52 00 43 00 6c 00 %.......O.R.C.l.
6f 00 73 00 65 00 4b 00 65 00 79 00 00 00 00 00 o.s.e.K.e.y.....
4f 00 52 00 4f 00 70 00 65 00 6e 00 4b 00 65 00 O.R.O.p.e.n.K.e.
79 00 00 00 4f 00 52 00 45 00 6e 00 75 00 6d 00 y...O.R.E.n.u.m.
4b 00 65 00 79 00 00 00 25 00 6c 00 73 00 28 00 K.e.y...%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 76 00 61 00 6c 00 75 00 65 00 20 00 27 00 .v.a.l.u.e. .'.
25 00 6c 00 73 00 27 00 20 00 6f 00 66 00 20 00 %.l.s.'. .o.f. .
72 00 65 00 67 00 69 00 73 00 74 00 72 00 79 00 r.e.g.i.s.t.r.y.
20 00 6b 00 65 00 79 00 20 00 27 00 25 00 6c 00 .k.e.y. .'.%.l.
73 00 27 00 0a 00 00 00 57 00 72 00 69 00 74 00 s.'.....W.r.i.t.
65 00 46 00 69 00 6c 00 65 00 00 00 2c 00 22 00 e.F.i.l.e...,.".
22 00 0d 00 0a 00 00 00 2c 00 25 00 6c 00 75 00 ".......,.%.l.u.
20 00 3b 00 20 00 30 00 78 00 25 00 30 00 38 00 .;. .0.x.%.0.8.
6c 00 78 00 0d 00 0a 00 00 00 00 00 22 00 0d 00 l.x........."...
0a 00 00 00 0d 00 0a 00 00 00 00 00 22 00 00 00 ............"...
2c 00 22 00 00 00 00 00 3b 00 22 00 22 00 00 00 ,.".....;."."...
3b 00 0d 00 0a 00 00 00 2c 00 25 00 49 00 36 00 ;.......,.%.I.6.
34 00 75 00 20 00 3b 00 20 00 30 00 78 00 25 00 4.u. .;. .0.x.%.
30 00 31 00 36 00 49 00 36 00 34 00 78 00 0d 00 0.1.6.I.6.4.x...
0a 00 00 00 22 00 25 00 6c 00 73 00 22 00 2c 00 ....".%.l.s.".,.
30 00 78 00 25 00 30 00 38 00 6c 00 78 00 00 00 0.x.%.0.8.l.x...
2c 00 30 00 78 00 25 00 30 00 38 00 6c 00 78 00 ,.0.x.%.0.8.l.x.
00 00 00 00 22 00 25 00 6c 00 73 00 22 00 2c 00 ....".%.l.s.".,.
25 00 25 00 52 00 45 00 47 00 5f 00 25 00 6c 00 %.%.R.E.G._.%.l.
73 00 25 00 25 00 00 00 2c 00 25 00 25 00 52 00 s.%.%...,.%.%.R.
45 00 47 00 5f 00 25 00 6c 00 73 00 25 00 25 00 E.G._.%.l.s.%.%.
00 00 00 00 48 00 4b 00 4f 00 2c 00 22 00 25 00 ....H.K.O.,.".%.
6c 00 73 00 22 00 2c 00 00 00 00 00 48 00 4b 00 l.s.".,.....H.K.
4f 00 2c 00 2c 00 00 00 25 00 6c 00 73 00 28 00 O.,.,...%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 72 00 65 00 67 00 69 00 73 00 74 00 72 00 .r.e.g.i.s.t.r.
79 00 20 00 6b 00 65 00 79 00 20 00 27 00 25 00 y. .k.e.y. .'.%.
6c 00 73 00 27 00 0a 00 00 00 00 00 4f 00 52 00 l.s.'.......O.R.
45 00 6e 00 75 00 6d 00 56 00 61 00 6c 00 75 00 E.n.u.m.V.a.l.u.
65 00 00 00 4c 00 6f 00 63 00 61 00 6c 00 46 00 e...L.o.c.a.l.F.
72 00 65 00 65 00 00 00 43 00 6c 00 6f 00 73 00 r.e.e...C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 e.H.a.n.d.l.e...
4f 00 52 00 43 00 6c 00 6f 00 73 00 65 00 48 00 O.R.C.l.o.s.e.H.
69 00 76 00 65 00 00 00 0d 00 0a 00 3b 00 20 00 i.v.e.......;. .
45 00 4f 00 46 00 0d 00 0a 00 00 00 48 00 4b 00 E.O.F.......H.K.
45 00 59 00 5f 00 4f 00 46 00 46 00 4c 00 49 00 E.Y._.O.F.F.L.I.
4e 00 45 00 00 00 00 00 ff fe 5b 00 56 00 65 00 N.E.......[.V.e.
72 00 73 00 69 00 6f 00 6e 00 5d 00 0d 00 0a 00 r.s.i.o.n.].....
44 00 72 00 69 00 76 00 65 00 72 00 56 00 65 00 D.r.i.v.e.r.V.e.
72 00 20 00 3d 00 20 00 25 00 30 00 32 00 68 00 r. .=. .%.0.2.h.
75 00 2f 00 25 00 30 00 32 00 68 00 75 00 2f 00 u./.%.0.2.h.u./.
25 00 30 00 34 00 68 00 75 00 2c 00 25 00 30 00 %.0.4.h.u.,.%.0.
32 00 68 00 75 00 2e 00 25 00 30 00 32 00 68 00 2.h.u...%.0.2.h.
75 00 2e 00 25 00 30 00 32 00 68 00 75 00 2e 00 u...%.0.2.h.u...
25 00 30 00 33 00 68 00 75 00 20 00 3b 00 20 00 %.0.3.h.u. .;. .
55 00 54 00 43 00 0d 00 0a 00 50 00 72 00 6f 00 U.T.C.....P.r.o.
76 00 69 00 64 00 65 00 72 00 20 00 20 00 3d 00 v.i.d.e.r. . .=.
20 00 22 00 53 00 74 00 65 00 66 00 61 00 6e 00 .".S.t.e.f.a.n.
20 00 4b 00 61 00 6e 00 74 00 68 00 61 00 6b 00 .K.a.n.t.h.a.k.
22 00 0d 00 0a 00 53 00 69 00 67 00 6e 00 61 00 ".....S.i.g.n.a.
74 00 75 00 72 00 65 00 20 00 3d 00 20 00 22 00 t.u.r.e. .=. .".
24 00 57 00 69 00 6e 00 64 00 6f 00 77 00 73 00 $.W.i.n.d.o.w.s.
20 00 4e 00 54 00 24 00 22 00 0d 00 0a 00 0d 00 .N.T.$.".......
0a 00 5b 00 53 00 74 00 72 00 69 00 6e 00 67 00 ..[.S.t.r.i.n.g.
73 00 5d 00 0d 00 0a 00 52 00 45 00 47 00 5f 00 s.].....R.E.G._.
53 00 5a 00 20 00 20 00 20 00 20 00 20 00 20 00 S.Z. . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 3d 00 20 00 30 00 78 00 30 00 . . .=. .0.x.0.
30 00 30 00 30 00 30 00 30 00 30 00 30 00 0d 00 0.0.0.0.0.0.0...
0a 00 52 00 45 00 47 00 5f 00 42 00 49 00 4e 00 ..R.E.G._.B.I.N.
41 00 52 00 59 00 20 00 20 00 20 00 20 00 20 00 A.R.Y. . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
3d 00 20 00 30 00 78 00 30 00 30 00 30 00 30 00 =. .0.x.0.0.0.0.
30 00 30 00 30 00 31 00 0d 00 0a 00 52 00 45 00 0.0.0.1.....R.E.
47 00 5f 00 4b 00 45 00 59 00 4f 00 4e 00 4c 00 G._.K.E.Y.O.N.L.
59 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 Y. . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 3d 00 20 00 30 00 . . . . .=. .0.
78 00 30 00 30 00 30 00 30 00 30 00 30 00 31 00 x.0.0.0.0.0.0.1.
30 00 0d 00 0a 00 52 00 45 00 47 00 5f 00 4d 00 0.....R.E.G._.M.
55 00 4c 00 54 00 49 00 5f 00 53 00 5a 00 20 00 U.L.T.I._.S.Z. .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 3d 00 20 00 30 00 78 00 30 00 30 00 . .=. .0.x.0.0.
30 00 31 00 30 00 30 00 30 00 30 00 0d 00 0a 00 0.1.0.0.0.0.....
52 00 45 00 47 00 5f 00 44 00 57 00 4f 00 52 00 R.E.G._.D.W.O.R.
44 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 D. . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 3d 00 . . . . . . .=.
20 00 30 00 78 00 30 00 30 00 30 00 31 00 30 00 .0.x.0.0.0.1.0.
30 00 30 00 31 00 0d 00 0a 00 52 00 45 00 47 00 0.0.1.....R.E.G.
5f 00 45 00 58 00 50 00 41 00 4e 00 44 00 5f 00 _.E.X.P.A.N.D._.
53 00 5a 00 20 00 20 00 20 00 20 00 20 00 20 00 S.Z. . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 3d 00 20 00 30 00 78 00 . . . .=. .0.x.
30 00 30 00 30 00 32 00 30 00 30 00 30 00 30 00 0.0.0.2.0.0.0.0.
0d 00 0a 00 52 00 45 00 47 00 5f 00 4e 00 4f 00 ....R.E.G._.N.O.
4e 00 45 00 20 00 20 00 20 00 20 00 20 00 20 00 N.E. . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 3d 00 20 00 30 00 78 00 30 00 30 00 30 00 .=. .0.x.0.0.0.
32 00 30 00 30 00 30 00 31 00 0d 00 0a 00 52 00 2.0.0.0.1.....R.
45 00 47 00 5f 00 43 00 4f 00 4d 00 50 00 41 00 E.G._.C.O.M.P.A.
54 00 49 00 42 00 4c 00 45 00 20 00 20 00 20 00 T.I.B.L.E. . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 3d 00 20 00 . . . . . .=. .
30 00 78 00 30 00 30 00 30 00 33 00 30 00 30 00 0.x.0.0.0.3.0.0.
30 00 31 00 20 00 3b 00 20 00 73 00 61 00 6d 00 0.1. .;. .s.a.m.
65 00 20 00 61 00 73 00 20 00 52 00 45 00 47 00 e. .a.s. .R.E.G.
5f 00 42 00 49 00 4e 00 41 00 52 00 59 00 0d 00 _.B.I.N.A.R.Y...
0a 00 52 00 45 00 47 00 5f 00 44 00 57 00 4f 00 ..R.E.G._.D.W.O.
52 00 44 00 5f 00 4c 00 49 00 54 00 54 00 4c 00 R.D._.L.I.T.T.L.
45 00 5f 00 45 00 4e 00 44 00 49 00 41 00 4e 00 E._.E.N.D.I.A.N.
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
3d 00 20 00 30 00 78 00 30 00 30 00 30 00 34 00 =. .0.x.0.0.0.4.
30 00 30 00 30 00 31 00 20 00 3b 00 20 00 73 00 0.0.0.1. .;. .s.
61 00 6d 00 65 00 20 00 61 00 73 00 20 00 52 00 a.m.e. .a.s. .R.
45 00 47 00 5f 00 44 00 57 00 4f 00 52 00 44 00 E.G._.D.W.O.R.D.
0d 00 0a 00 52 00 45 00 47 00 5f 00 44 00 57 00 ....R.E.G._.D.W.
4f 00 52 00 44 00 5f 00 42 00 49 00 47 00 5f 00 O.R.D._.B.I.G._.
45 00 4e 00 44 00 49 00 41 00 4e 00 20 00 20 00 E.N.D.I.A.N. . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 3d 00 20 00 30 00 78 00 30 00 30 00 30 00 .=. .0.x.0.0.0.
35 00 30 00 30 00 30 00 31 00 0d 00 0a 00 52 00 5.0.0.0.1.....R.
45 00 47 00 5f 00 4c 00 49 00 4e 00 4b 00 20 00 E.G._.L.I.N.K. .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 3d 00 20 00 . . . . . .=. .
30 00 78 00 30 00 30 00 30 00 36 00 30 00 30 00 0.x.0.0.0.6.0.0.
30 00 30 00 0d 00 0a 00 52 00 45 00 47 00 5f 00 0.0.....R.E.G._.
52 00 45 00 53 00 4f 00 55 00 52 00 43 00 45 00 R.E.S.O.U.R.C.E.
5f 00 4c 00 49 00 53 00 54 00 20 00 20 00 20 00 _.L.I.S.T. . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 3d 00 20 00 30 00 78 00 30 00 . . .=. .0.x.0.
30 00 30 00 38 00 30 00 30 00 30 00 31 00 0d 00 0.0.8.0.0.0.1...
0a 00 52 00 45 00 47 00 5f 00 46 00 55 00 4c 00 ..R.E.G._.F.U.L.
4c 00 5f 00 52 00 45 00 53 00 4f 00 55 00 52 00 L._.R.E.S.O.U.R.
43 00 45 00 5f 00 44 00 45 00 53 00 43 00 52 00 C.E._.D.E.S.C.R.
49 00 50 00 54 00 4f 00 52 00 20 00 20 00 20 00 I.P.T.O.R. . . .
3d 00 20 00 30 00 78 00 30 00 30 00 30 00 39 00 =. .0.x.0.0.0.9.
30 00 30 00 30 00 31 00 0d 00 0a 00 52 00 45 00 0.0.0.1.....R.E.
47 00 5f 00 52 00 45 00 53 00 4f 00 55 00 52 00 G._.R.E.S.O.U.R.
43 00 45 00 5f 00 52 00 45 00 51 00 55 00 49 00 C.E._.R.E.Q.U.I.
52 00 45 00 4d 00 45 00 4e 00 54 00 53 00 5f 00 R.E.M.E.N.T.S._.
4c 00 49 00 53 00 54 00 20 00 3d 00 20 00 30 00 L.I.S.T. .=. .0.
78 00 30 00 30 00 30 00 61 00 30 00 30 00 30 00 x.0.0.0.a.0.0.0.
31 00 0d 00 0a 00 52 00 45 00 47 00 5f 00 51 00 1.....R.E.G._.Q.
57 00 4f 00 52 00 44 00 20 00 20 00 20 00 20 00 W.O.R.D. . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 3d 00 20 00 30 00 78 00 30 00 30 00 . .=. .0.x.0.0.
30 00 62 00 30 00 30 00 30 00 31 00 0d 00 0a 00 0.b.0.0.0.1.....
52 00 45 00 47 00 5f 00 51 00 57 00 4f 00 52 00 R.E.G._.Q.W.O.R.
44 00 5f 00 4c 00 49 00 54 00 54 00 4c 00 45 00 D._.L.I.T.T.L.E.
5f 00 45 00 4e 00 44 00 49 00 41 00 4e 00 20 00 _.E.N.D.I.A.N. .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 3d 00 . . . . . . .=.
20 00 30 00 78 00 30 00 30 00 30 00 62 00 30 00 .0.x.0.0.0.b.0.
30 00 30 00 31 00 20 00 3b 00 20 00 73 00 61 00 0.0.1. .;. .s.a.
6d 00 65 00 20 00 61 00 73 00 20 00 52 00 45 00 m.e. .a.s. .R.E.
47 00 5f 00 51 00 57 00 4f 00 52 00 44 00 0d 00 G._.Q.W.O.R.D...
0a 00 0d 00 0a 00 5b 00 44 00 65 00 66 00 61 00 ......[.D.e.f.a.
75 00 6c 00 74 00 49 00 6e 00 73 00 74 00 61 00 u.l.t.I.n.s.t.a.
6c 00 6c 00 2e 00 4e 00 54 00 5d 00 0d 00 0a 00 l.l...N.T.].....
3b 00 41 00 64 00 64 00 52 00 65 00 67 00 20 00 ;.A.d.d.R.e.g. .
3d 00 20 00 41 00 64 00 64 00 52 00 65 00 67 00 =. .A.d.d.R.e.g.
2e 00 48 00 4b 00 4f 00 0d 00 0a 00 0d 00 0a 00 ..H.K.O.........
5b 00 41 00 64 00 64 00 52 00 65 00 67 00 2e 00 [.A.d.d.R.e.g...
48 00 4b 00 4f 00 5d 00 0d 00 0a 00 00 00 00 00 H.K.O.].........
4f 00 52 00 4f 00 70 00 65 00 6e 00 48 00 69 00 O.R.O.p.e.n.H.i.
76 00 65 00 00 00 00 00 4f 00 46 00 46 00 52 00 v.e.....O.F.F.R.
45 00 47 00 2e 00 44 00 4c 00 4c 00 20 00 76 00 E.G...D.L.L. .v.
65 00 72 00 73 00 69 00 6f 00 6e 00 20 00 25 00 e.r.s.i.o.n. .%.
6c 00 75 00 2e 00 25 00 6c 00 75 00 0a 00 00 00 l.u...%.l.u.....
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
3a 00 20 00 73 00 74 00 61 00 6e 00 64 00 61 00 :. .s.t.a.n.d.a.
72 00 64 00 20 00 6f 00 75 00 74 00 70 00 75 00 r.d. .o.u.t.p.u.
74 00 20 00 69 00 73 00 20 00 6e 00 6f 00 74 00 t. .i.s. .n.o.t.
20 00 72 00 65 00 64 00 69 00 72 00 65 00 63 00 .r.e.d.i.r.e.c.
74 00 65 00 64 00 20 00 74 00 6f 00 20 00 61 00 t.e.d. .t.o. .a.
20 00 66 00 69 00 6c 00 65 00 21 00 0a 00 00 00 .f.i.l.e.!.....
46 00 6c 00 75 00 73 00 68 00 46 00 69 00 6c 00 F.l.u.s.h.F.i.l.
65 00 42 00 75 00 66 00 66 00 65 00 72 00 73 00 e.B.u.f.f.e.r.s.
00 00 00 00 47 00 65 00 74 00 53 00 74 00 64 00 ....G.e.t.S.t.d.
48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 00 00 H.a.n.d.l.e.....
4e 00 6f 00 20 00 61 00 72 00 67 00 75 00 6d 00 N.o. .a.r.g.u.m.
65 00 6e 00 74 00 3a 00 20 00 61 00 20 00 73 00 e.n.t.:. .a. .s.
69 00 6e 00 67 00 6c 00 65 00 20 00 66 00 69 00 i.n.g.l.e. .f.i.
6c 00 65 00 20 00 6f 00 72 00 20 00 70 00 61 00 l.e. .o.r. .p.a.
74 00 68 00 20 00 6e 00 61 00 6d 00 65 00 20 00 t.h. .n.a.m.e. .
6f 00 66 00 20 00 61 00 20 00 72 00 65 00 67 00 o.f. .a. .r.e.g.
69 00 73 00 74 00 72 00 79 00 20 00 68 00 69 00 i.s.t.r.y. .h.i.
76 00 65 00 20 00 6d 00 75 00 73 00 74 00 20 00 v.e. .m.u.s.t. .
62 00 65 00 20 00 67 00 69 00 76 00 65 00 6e 00 b.e. .g.i.v.e.n.
21 00 0a 00 00 00 00 00 25 00 6c 00 73 00 28 00 !.......%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 0a 00 00 00 43 00 6f 00 .%.l.u.....C.o.
6d 00 6d 00 61 00 6e 00 64 00 4c 00 69 00 6e 00 m.m.a.n.d.L.i.n.
65 00 54 00 6f 00 41 00 72 00 67 00 76 00 00 00 e.T.o.A.r.g.v...
b9 79 37 9e 00 00 00 00 68 00 00 00 45 54 41 44 .y7.....h...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 30 37 40 00 00 00 00 00 00 00 00 00 ....07@.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
f0 37 00 00 00 00 00 00 00 00 00 00 04 39 00 00 .7...........9..
00 20 00 00 24 38 00 00 00 00 00 00 00 00 00 00 . ..$8..........
72 39 00 00 34 20 00 00 44 38 00 00 00 00 00 00 r9..4 ..D8......
00 00 00 00 8c 39 00 00 54 20 00 00 00 00 00 00 .....9..T ......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
4c 38 00 00 5c 38 00 00 68 38 00 00 78 38 00 00 L8..\8..h8..x8..
86 38 00 00 92 38 00 00 a0 38 00 00 b0 38 00 00 .8...8...8...8..
c4 38 00 00 d6 38 00 00 e6 38 00 00 f6 38 00 00 .8...8...8...8..
00 00 00 00 12 39 00 00 1e 39 00 00 2c 39 00 00 .....9...9..,9..
38 39 00 00 46 39 00 00 54 39 00 00 62 39 00 00 89..F9..T9..b9..
00 00 00 00 7e 39 00 00 00 00 00 00 24 05 57 72 ....~9......$.Wr
69 74 65 43 6f 6e 73 6f 6c 65 57 00 25 05 57 72 iteConsoleW.%.Wr
69 74 65 46 69 6c 65 00 02 02 47 65 74 4c 61 73 iteFile...GetLas
74 45 72 72 6f 72 00 00 19 01 45 78 69 74 50 72 tError....ExitPr
6f 63 65 73 73 00 48 03 4c 6f 63 61 6c 46 72 65 ocess.H.LocalFre
65 00 52 00 43 6c 6f 73 65 48 61 6e 64 6c 65 00 e.R.CloseHandle.
77 02 47 65 74 53 79 73 74 65 6d 54 69 6d 65 00 w.GetSystemTime.
57 01 46 6c 75 73 68 46 69 6c 65 42 75 66 66 65 W.FlushFileBuffe
72 73 00 00 87 01 47 65 74 43 6f 6d 6d 61 6e 64 rs....GetCommand
4c 69 6e 65 57 00 64 02 47 65 74 53 74 64 48 61 LineW.d.GetStdHa
6e 64 6c 65 00 00 73 04 53 65 74 4c 61 73 74 45 ndle..s.SetLastE
72 72 6f 72 00 00 44 03 4c 6f 63 61 6c 41 6c 6c rror..D.LocalAll
6f 63 00 00 4b 45 52 4e 45 4c 33 32 2e 64 6c 6c oc..KERNEL32.dll
00 00 06 00 4f 52 45 6e 75 6d 4b 65 79 00 01 00 ....OREnumKey...
4f 52 43 6c 6f 73 65 4b 65 79 00 00 0d 00 4f 52 ORCloseKey....OR
4f 70 65 6e 4b 65 79 00 07 00 4f 52 45 6e 75 6d OpenKey...OREnum
56 61 6c 75 65 00 00 00 4f 52 43 6c 6f 73 65 48 Value...ORCloseH
69 76 65 00 0c 00 4f 52 4f 70 65 6e 48 69 76 65 ive...OROpenHive
00 00 0a 00 4f 52 47 65 74 56 65 72 73 69 6f 6e ....ORGetVersion
00 00 4f 46 46 52 45 47 2e 64 6c 6c 00 00 35 03 ..OFFREG.dll..5.
77 76 73 70 72 69 6e 74 66 57 00 00 55 53 45 52 wvsprintfW..USER
33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 32.dll..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file OFFREG.TXT
created in
step 3. to recreate the console application
Offline Registry Reader:
CERTUTIL.EXE /DecodeHex /V OFFREG.TXT OFFREG.COM
Input Length = 43520 Output Length = 10240 CertUtil: -decodehex command completed successfully.
HKCC
,
HKCR
,
HKCU
,
HKLM
,
HKLS
,
HKPD
,
HKU
) and print them as an
.inf
file in
UTF-16LE
encoding on standard output(which must be redirected to a file or piped into an application that reads from
standard input, like Clip, Find or More).
Note: to dump the entire Registry
specify the branches HKLM
and HKU
.
REGISTRY.COM { HKCC | HKEY_CURRENT_CONFIG | HKCR | HKEY_CLASSES_ROOT | HKCU | HKEY_CURRENT_USER | HKDD | HKEY_DYN_DATA | HKLM | HKEY_LOCAL_MACHINE | HKLS | HKEY_CURRENT_USER_LOCAL_SETTINGS | HKPD | HKEY_PERFORMANCE_DATA | HKU | HKEY_USERS } … >‹output file name› REGISTRY.COM { HKCC | HKEY_CURRENT_CONFIG | HKCR | HKEY_CLASSES_ROOT | HKCU | HKEY_CURRENT_USER | HKDD | HKEY_DYN_DATA | HKLM | HKEY_LOCAL_MACHINE | HKLS | HKEY_CURRENT_USER_LOCAL_SETTINGS | HKPD | HKEY_PERFORMANCE_DATA | HKU | HKEY_USERS } … | CLIP.COM REGISTRY.COM { HKCC | HKEY_CURRENT_CONFIG | HKCR | HKEY_CLASSES_ROOT | HKCU | HKEY_CURRENT_USER | HKDD | HKEY_DYN_DATA | HKLM | HKEY_LOCAL_MACHINE | HKLS | HKEY_CURRENT_USER_LOCAL_SETTINGS | HKPD | HKEY_PERFORMANCE_DATA | HKU | HKEY_USERS } … | MORE.COMNote: when run under a user account which has the privilege
SeBackupPrivilege
assigned, the
Registry INF Dumper
enables it to enumerate all registry keys below the
specified branch(es).
Note: when run under a user account which has the
privilege SeSecurityPrivilege
assigned, the
Registry INF Dumper
enables it to include the
system access control list
in the optionally printed
security descriptors.
HKCC
branch of the
registry to the file HKCC.inf
and display it
afterwards:
VER .\REGISTRY.COM HKCC 1>HKCC.inf NET.EXE HelpMsg %ERRORLEVEL% TYPE HKCC.infNet services commands Ver
Microsoft Windows [Version 6.1.7601] The operation completed successfully. ; Registry of 'AMNESIAC' [Version] DriverVer = 08/15/2021,12.34.56.789 ; UTC Provider = "Stefan Kanthak" Signature = "$Windows NT$" [Strings] REG_SZ = 0x00000000 REG_BINARY = 0x00000001 REG_KEYONLY = 0x00000010 REG_MULTI_SZ = 0x00010000 REG_DWORD = 0x00010001 REG_EXPAND_SZ = 0x00020000 REG_NONE = 0x00020001 REG_COMPATIBLE = 0x00030001 ; same as REG_BINARY REG_DWORD_LITTLE_ENDIAN = 0x00040001 ; same as REG_DWORD REG_DWORD_BIG_ENDIAN = 0x00050001 REG_LINK = 0x00060000 REG_RESOURCE_LIST = 0x00080001 REG_FULL_RESOURCE_DESCRIPTOR = 0x00090001 REG_RESOURCE_REQUIREMENTS_LIST = 0x000a0001 REG_QWORD = 0x000b0001 REG_QWORD_LITTLE_ENDIAN = 0x000b0001 ; same as REG_QWORD [DefaultInstall.NT] ;AddReg = AddReg.HKU,AddReg.HKLM;AddReg.HKCU,AddReg.HKCR [AddReg.HKCC] HKCC,"Software\Fonts","LogPixels",%REG_DWORD%,96 ; 0x00000060 HKCC,"System\CurrentControlSet\Control\Print\Printers",,%REG_KEYONLY%; HKCC,"System\CurrentControlSet\Control\VIDEO",,%REG_KEYONLY%; HKCC,"System\CurrentControlSet\Enum\IDE\DISKFUJITSU_MHZ2320BJ_G2____________________0000001E\5&2223391E&0&0.0.0","CSConfigFlags",%REG_DWORD%,0 ; 0x00000000 HKCC,"System\CurrentControlSet\Enum\USBSTOR\DISK&VEN_GENERIC&PROD_FLASH_DISK&REV_8.07\4E0B595B&0","CSConfigFlags",%REG_DWORD%,0 ; 0x00000000 HKCC,"System\CurrentControlSet\SERVICES\TSDDD\DEVICE0","Attach.ToDesktop",%REG_DWORD%,1 ; 0x00000001 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","Attach.ToDesktop",%REG_DWORD%,1 ; 0x00000001 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","DefaultSettings.BitsPerPel",%REG_DWORD%,32 ; 0x00000020 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","DefaultSettings.XResolution",%REG_DWORD%,1920 ; 0x00000780 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","DefaultSettings.YResolution",%REG_DWORD%,1200 ; 0x000004b0 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","DefaultSettings.VRefresh",%REG_DWORD%,1 ; 0x00000001 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","DefaultSettings.Flags",%REG_DWORD%,0 ; 0x00000000 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","DefaultSettings.XPanning",%REG_DWORD%,0 ; 0x00000000 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","DefaultSettings.YPanning",%REG_DWORD%,0 ; 0x00000000 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","DefaultSettings.Orientation",%REG_DWORD%,0 ; 0x00000000 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","DefaultSettings.FixedOutput",%REG_DWORD%,0 ; 0x00000000 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","Attach.RelativeX",%REG_DWORD%,0 ; 0x00000000 HKCC,"System\CurrentControlSet\SERVICES\VGASAVE\DEVICE0","Attach.RelativeY",%REG_DWORD%,0 ; 0x00000000 ; EOF
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and REGISTRY.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
is not supported!
The MSDN article Console Handles provides background information.
Create the text file REGISTRY.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define _CRT_SECURE_NO_WARNINGS
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#include <sddl.h>
#define memcpy __movsb
#define wmemcpy __movsw
#define MAX_DEPTH 512UL
#define MAX_KEY_LENGTH 255UL
#define MAX_VALUE_NAME 16383UL
#define MAX_VALUE_DATA 1048576UL
#define SE_SECURITY_PRIVILEGE 8UL // "SeSecurityPrivilege"
#define SE_BACKUP_PRIVILEGE 17UL // "SeBackupPrivilege"
const TOKEN_PRIVILEGES tpBackup = {1, {SE_BACKUP_PRIVILEGE, 0, SE_PRIVILEGE_ENABLED}};
#ifdef SECURITY
const TOKEN_PRIVILEGES tpSecurity = {1, {SE_SECURITY_PRIVILEGE, 0, SE_PRIVILEGE_ENABLED}};
#endif
typedef unsigned long long QWORD, *LPQWORD;
BYTE cbData[MAX_VALUE_DATA];
WCHAR szKey[(MAX_KEY_LENGTH + 1) * MAX_DEPTH];
WCHAR szValue[MAX_VALUE_NAME + 1];
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(safebuffers)
BOOL CDECL PrintFormat(HANDLE hFile, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
LPBYTE lpOutput;
DWORD dwOutput;
DWORD dwFile;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
dwOutput *= sizeof(*szOutput);
lpOutput = (LPBYTE) szOutput;
do
{
if (!WriteFile(hFile, lpOutput, dwOutput, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpOutput += dwFile;
dwOutput -= dwFile;
} while (dwOutput != 0);
return TRUE;
}
#define PrintString(HANDLE, LITERAL) PrintDirect(HANDLE, LITERAL, sizeof(LITERAL) / sizeof(*LITERAL) - 1)
__inline
BOOL WINAPI PrintDirect(HANDLE hFile, LPCWSTR lpString, DWORD dwString)
{
DWORD dwFile;
dwString *= sizeof(*lpString);
do
{
if (!WriteFile(hFile, lpString, dwString, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpString = (LPCWSTR) ((LPBYTE) lpString + dwFile);
dwString -= dwFile;
} while (dwString != 0);
return TRUE;
}
__inline
LPCWSTR WINAPI InfEscape(LPCWSTR lpString)
{
do
if ((*lpString == L'"')
|| (*lpString == L'%'))
return lpString;
while (*lpString++ != L'\0');
return NULL;
}
#ifndef TINY
const WCHAR szBytes[256][4] = {L",00", L",01", L",02", L",03", L",04", L",05", L",06", L",07", L",08", L",09", L",0a", L",0b", L",0c", L",0d", L",0e", L",0f",
L",10", L",11", L",12", L",13", L",14", L",15", L",16", L",17", L",18", L",19", L",1a", L",1b", L",1c", L",1d", L",1e", L",1f",
L",20", L",21", L",22", L",23", L",24", L",25", L",26", L",27", L",28", L",29", L",2a", L",2b", L",2c", L",2d", L",2e", L",2f",
L",30", L",31", L",32", L",33", L",34", L",35", L",36", L",37", L",38", L",39", L",3a", L",3b", L",3c", L",3d", L",3e", L",3f",
L",40", L",41", L",42", L",43", L",44", L",45", L",46", L",47", L",48", L",49", L",4a", L",4b", L",4c", L",4d", L",4e", L",4f",
L",50", L",51", L",52", L",53", L",54", L",55", L",56", L",57", L",58", L",59", L",5a", L",5b", L",5c", L",5d", L",5e", L",5f",
L",60", L",61", L",62", L",63", L",64", L",65", L",66", L",67", L",68", L",69", L",6a", L",6b", L",6c", L",6d", L",6e", L",6f",
L",70", L",71", L",72", L",73", L",74", L",75", L",76", L",77", L",78", L",79", L",7a", L",7b", L",7c", L",7d", L",7e", L",7f",
L",80", L",81", L",82", L",83", L",84", L",85", L",86", L",87", L",88", L",89", L",8a", L",8b", L",8c", L",8d", L",8e", L",8f",
L",90", L",91", L",92", L",93", L",94", L",95", L",96", L",97", L",98", L",99", L",9a", L",9b", L",9c", L",9d", L",9e", L",9f",
L",a0", L",a1", L",a2", L",a3", L",a4", L",a5", L",a6", L",a7", L",a8", L",a9", L",aa", L",ab", L",ac", L",ad", L",ae", L",af",
L",b0", L",b1", L",b2", L",b3", L",b4", L",b5", L",b6", L",b7", L",b8", L",b9", L",ba", L",bb", L",bc", L",bd", L",be", L",bf",
L",c0", L",c1", L",c2", L",c3", L",c4", L",c5", L",c6", L",c7", L",c8", L",c9", L",ca", L",cb", L",cc", L",cd", L",ce", L",cf",
L",d0", L",d1", L",d2", L",d3", L",d4", L",d5", L",d6", L",d7", L",d8", L",d9", L",da", L",db", L",dc", L",dd", L",de", L",df",
L",e0", L",e1", L",e2", L",e3", L",e4", L",e5", L",e6", L",e7", L",e8", L",e9", L",ea", L",eb", L",ec", L",ed", L",ee", L",ef",
L",f0", L",f1", L",f2", L",f3", L",f4", L",f5", L",f6", L",f7", L",f8", L",f9", L",fa", L",fb", L",fc", L",fd", L",fe", L",ff"};
#endif
const LPCWSTR szHKey[8] = {L"HKCR",
L"HKCU",
L"HKLM",
L"HKU",
L"HKPD",
L"HKCC",
L"HKDD",
L"HKLS"};
const LPCWSTR szHKEY[8] = {L"HKEY_CLASSES_ROOT",
L"HKEY_CURRENT_USER",
L"HKEY_LOCAL_MACHINE",
L"HKEY_USERS",
L"HKEY_PERFORMANCE_DATA",
L"HKEY_CURRENT_CONFIG",
L"HKEY_DYN_DATA",
L"HKEY_CURRENT_USER_LOCAL_SETTINGS"};
const DWORD dwHKEY[8] = {sizeof("HKEY_CLASSES_ROOT"),
sizeof("HKEY_CURRENT_USER"),
sizeof("HKEY_LOCAL_MACHINE"),
sizeof("HKEY_USERS"),
sizeof("HKEY_PERFORMANCE_DATA"),
sizeof("HKEY_CURRENT_CONFIG"),
sizeof("HKEY_DYN_DATA"),
sizeof("HKEY_CURRENT_USER_LOCAL_SETTINGS")};
const LPCWSTR szType[12] = {L"NONE",
L"SZ",
L"EXPAND_SZ",
L"BINARY",
L"DWORD", // alias DWORD_LITTLE_ENDIAN
L"DWORD_BIG_ENDIAN",
L"LINK",
L"MULTI_SZ",
L"RESOURCE_LIST",
L"FULL_RESOURCE_DESCRIPTOR",
L"RESOURCE_REQUIREMENTS_LIST",
L"QWORD"}; // alias QWORD_LITTLE_ENDIAN
DWORD WINAPI Registry(HANDLE hConsole, HANDLE hOutput, QWORD qwPrivileges, HKEY hkHKEY, DWORD dwKey)
{
HKEY hkKey;
BOOL bOutput;
DWORD dwError;
DWORD dwIndex = (DWORD) hkHKEY ^ (DWORD) HKEY_CLASSES_ROOT;
DWORD dwSubKeys, dwSubKey;
DWORD dwValues, dwValue, dwType, dwData, dwBytes;
#ifdef SANITY
DWORD dwCount, dwChars;
LPCWSTR lpCount;
#endif
LPCWSTR lpHKey = szHKey[dwIndex];
LPCWSTR lpKey = dwKey < dwHKEY[dwIndex] ? NULL : szKey + dwHKEY[dwIndex];
LPCWSTR lpSubKey = szKey + dwKey + 1;
LPCWSTR lpData, lpEscape, lpLast, lpMulti;
dwError = RegOpenKeyEx(hkHKEY,
lpKey,
qwPrivileges & (1 << SE_BACKUP_PRIVILEGE) ? REG_OPTION_BACKUP_RESTORE | REG_OPTION_OPEN_LINK : REG_OPTION_OPEN_LINK,
#ifdef SECURITY
qwPrivileges & (1 << SE_SECURITY_PRIVILEGE) ? ACCESS_SYSTEM_SECURITY | KEY_READ | KEY_WOW64_64KEY : KEY_READ | KEY_WOW64_64KEY,
#else
KEY_READ | KEY_WOW64_64KEY,
#endif
&hkKey);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"RegOpenKeyEx() returned error %lu for registry key \'%ls\'\n",
dwError, szKey);
else
{
#ifdef SECURITY
dwData = sizeof(cbData);
dwError = RegGetKeySecurity(hkHKEY,
qwPrivileges & (1 << SE_SECURITY_PRIVILEGE) ? OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION | LABEL_SECURITY_INFORMATION : OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | LABEL_SECURITY_INFORMATION,
cbData,
&dwData);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"RegGetKeySecurity() returned error %lu for registry key \'%ls\'\n",
dwError, szKey);
else
if (!ConvertSecurityDescriptorToStringSecurityDescriptor(cbData,
SDDL_REVISION_1,
OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION | LABEL_SECURITY_INFORMATION,
&lpData,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"ConvertSecurityDescriptorToStringSecurityDescriptor() returned error %lu for registry key \'%ls\'\n",
dwError = GetLastError(), szKey);
else
{
if (lpKey == NULL)
bOutput = PrintFormat(hOutput,
L"%ls,,,%%REG_KEYONLY%%\r\n",
lpHKey);
else
bOutput = PrintFormat(hOutput,
L"%ls,\"%ls\",,%%REG_KEYONLY%%\r\n",
lpHKey, lpKey);
bOutput &= PrintString(hOutput, L"; ");
bOutput &= PrintDirect(hOutput, lpData, wcslen(lpData));
bOutput &= PrintString(hOutput, L"\r\n");
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu for registry key \'%ls\'\n",
dwError = GetLastError(), szKey);
if (LocalFree(lpData) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
#endif
for (dwValues = 0;; dwValues++)
{
// *szValue = L'\0';
dwValue = sizeof(szValue) / sizeof(*szValue);
dwData = sizeof(cbData);
dwError = RegEnumValue(hkKey,
dwValues,
szValue,
&dwValue,
(LPDWORD) NULL,
&dwType,
cbData,
&dwData);
if (dwError != ERROR_SUCCESS)
{
if (dwError == ERROR_NO_MORE_ITEMS)
break;
PrintConsole(hConsole,
L"RegEnumValue() returned error %lu for registry key \'%ls\'\n",
dwError, szKey);
if (dwError == ERROR_ACCESS_DENIED)
break;
}
else
{
#ifdef SANITY
dwChars = wcslen(szValue);
if (dwValue < dwChars)
PrintConsole(hConsole,
L"ERROR: size (%lu characters) of value name \'%ls\' in registry key \'%ls\' smaller than actual string length (%lu characters)!\n",
dwValue, szValue, dwChars, szKey);
else if (dwValue > dwChars)
PrintConsole(hConsole,
L"WARNING: size (%lu characters) of value name \'%ls\' in registry key \'%ls\' greater than actual string length (%lu characters)\n",
dwValue, szValue, dwChars, szKey);
if (dwData == 0)
PrintConsole(hConsole,
L"WARNING: no value data for value name \'%ls\' in registry key \'%ls\'\n",
szValue, szKey);
else
switch (dwType)
{
case REG_LINK:
if (dwData % sizeof(L'\0') != 0)
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' not a multiple of WCHAR size!\n",
dwData, szValue, szKey);
break;
case REG_DWORD_BIG_ENDIAN:
case REG_DWORD_LITTLE_ENDIAN:
// case REG_DWORD:
if (dwData < sizeof(DWORD))
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' smaller than DWORD size!\n",
dwData, szValue, szKey);
else if (dwData > sizeof(DWORD))
PrintConsole(hConsole,
L"WARNING: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' greater than DWORD size\n",
dwData, szValue, szKey);
break;
case REG_QWORD_LITTLE_ENDIAN:
// case REG_QWORD:
if (dwData < sizeof(QWORD))
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' smaller than QWORD size!\n",
dwData, szValue, szKey);
else if (dwData > sizeof(QWORD))
PrintConsole(hConsole,
L"WARNING: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' greater than QWORD size\n",
dwData, szValue, szKey);
break;
case REG_SZ:
case REG_EXPAND_SZ:
dwChars = wcslen((LPCWSTR) cbData);
dwBytes = (dwChars + 1) * sizeof(L'\0');
if (dwData < dwBytes)
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' smaller than actual string length (%lu + 1 characters = %lu bytes)\n",
dwData, szValue, szKey, dwChars, dwBytes);
else if (dwData > dwBytes)
PrintConsole(hConsole,
L"WARNING: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' greater than actual string length (%lu + 1 characters = %lu bytes)\n",
dwData, szValue, szKey, dwChars, dwBytes);
break;
case REG_MULTI_SZ:
dwChars = 0;
dwCount = 1;
lpCount = (LPCWSTR) cbData;
while (*lpCount != L'\0')
{
dwChars += wcslen(lpCount);
dwCount++;
lpCount += wcslen(lpCount) + 1;
}
dwBytes = (dwChars + dwCount) * sizeof(L'\0');
if (dwData < dwBytes)
PrintConsole(hConsole,
L"ERROR: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' smaller than sum of actual string lengths (%lu + %lu characters = %lu bytes)\n",
dwData, szValue, szKey, dwChars, dwCount, dwBytes);
else if (dwData > dwBytes)
PrintConsole(hConsole,
L"WARNING: size (%lu bytes) of value data for value name \'%ls\' in registry key \'%ls\' greater than sum of actual string lengths (%lu + %lu characters = %lu bytes)\n",
dwData, szValue, szKey, dwChars, dwCount, dwBytes);
break;
// case REG_NONE:
// case REG_BINARY:
// case REG_RESOURCE_LIST:
// case REG_FULL_RESOURCE_DESCRIPTOR:
// case REG_RESOURCE_REQUIREMENTS_LIST:
}
#ifdef UNKNOWN
if (dwType > REG_QWORD)
PrintConsole(hConsole,
L"WARNING: unknown data type (0x%08lx) for value name \'%ls\' in registry key \'%ls\'\n",
dwType, szValue, szKey);
#endif
#endif // SANITY
if (lpKey == NULL)
bOutput = PrintFormat(hOutput, L"%ls,,", lpHKey);
else
bOutput = PrintFormat(hOutput, L"%ls,\"%ls\",", lpHKey, lpKey);
if (dwType < sizeof(szType) / sizeof(*szType))
if (dwValue == 0)
bOutput &= PrintFormat(hOutput, L",%%REG_%ls%%", szType[dwType]);
else
bOutput &= PrintFormat(hOutput, L"\"%ls\",%%REG_%ls%%", szValue, szType[dwType]);
else
if (dwValue == 0)
bOutput &= PrintFormat(hOutput, L",0x%08lx", dwType);
else
bOutput &= PrintFormat(hOutput, L"\"%ls\",0x%08lx", dwType);
if (dwData == 0)
bOutput &= PrintString(hOutput, L"\r\n");
else
switch (dwType)
{
case REG_LINK:
if (dwData % sizeof(L'\0') != 0)
goto DEFAULT;
bOutput &= PrintString(hOutput, L",\"");
bOutput &= PrintDirect(hOutput, (LPCWSTR) cbData, dwData / sizeof(L'\0'));
bOutput &= PrintString(hOutput, L"\"\r\n");
break;
case REG_SZ:
case REG_EXPAND_SZ:
if (dwData % sizeof(L'\0') != 0)
goto DEFAULT;
if (*(LPCWSTR) cbData == L'\0')
bOutput &= PrintString(hOutput, L",\"\"\r\n");
else
{
lpData = (LPCWSTR) cbData;
((LPWSTR) lpData)[dwData / sizeof(L'\0')] = L'\0';
dwData = wcslen(lpData);
bOutput &= PrintString(hOutput, L",\"");
for (lpEscape = InfEscape(lpData); lpEscape != NULL; lpData = lpEscape, lpEscape = InfEscape(lpData + 1))
bOutput &= PrintDirect(hOutput, lpData, lpEscape + 1 - lpData);
bOutput &= PrintDirect(hOutput, lpData, (LPCWSTR) cbData + dwData - lpData);
bOutput &= PrintString(hOutput, L"\"\r\n");
}
break;
case REG_MULTI_SZ:
if (dwData % sizeof(L'\0') != 0)
goto DEFAULT;
if ((dwData == sizeof(L'\0'))
&& (*(LPCWSTR) cbData == L'\0'))
bOutput &= PrintString(hOutput, L";\r\n");
else
{
lpData = (LPCWSTR) cbData;
dwData /= sizeof(L'\0');
lpLast = lpData + dwData;
if ((dwData > 1)
&& (lpData[dwData - 1] == L'\0')
&& (lpData[dwData - 2] == L'\0'))
lpLast--;
else
*(LPWSTR) lpLast = L'\0';
do
if (*lpData == L'\0')
bOutput &= PrintString(hOutput, L";\"\"");
else
{
dwData = wcslen(lpData);
bOutput &= PrintString(hOutput, L",\"");
for (lpEscape = InfEscape(lpMulti = lpData), lpData += dwData;
lpEscape != NULL; lpMulti = lpEscape,
lpEscape = InfEscape(lpEscape + 1))
bOutput &= PrintDirect(hOutput, lpMulti, lpEscape + 1 - lpMulti);
bOutput &= PrintDirect(hOutput, lpMulti, lpData - lpMulti);
bOutput &= PrintString(hOutput, L"\"");
}
while (++lpData < lpLast);
bOutput &= PrintString(hOutput, L"\r\n");
}
break;
case REG_DWORD_BIG_ENDIAN:
if (dwData != sizeof(DWORD))
goto DEFAULT;
#if 0
bOutput &= PrintFormat(hOutput, L",%lu\r\n", _byteswap_ulong(*(LPDWORD) cbData));
#else
bOutput &= PrintFormat(hOutput, L",%lu ; 0x%08lx\r\n", _byteswap_ulong(*(LPDWORD) cbData), *(LPDWORD) cbData);
#endif
break;
case REG_DWORD_LITTLE_ENDIAN:
// case REG_DWORD:
if (dwData != sizeof(DWORD))
goto DEFAULT;
#if 0
bOutput &= PrintFormat(hOutput, L",%lu\r\n", *(LPDWORD) cbData);
#else
bOutput &= PrintFormat(hOutput, L",%lu ; 0x%08lx\r\n", *(LPDWORD) cbData, *(LPDWORD) cbData);
#endif
break;
case REG_QWORD_LITTLE_ENDIAN:
// case REG_QWORD:
if (dwData != sizeof(QWORD))
goto DEFAULT;
#if 0
bOutput &= PrintFormat(hOutput, L",%I64u\r\n", *(LPQWORD) cbData);
#else
bOutput &= PrintFormat(hOutput, L",%I64u ; 0x%016I64x\r\n", *(LPQWORD) cbData, *(LPQWORD) cbData);
#endif
break;
// case REG_NONE:
// case REG_BINARY:
// case REG_RESOURCE_LIST:
// case REG_FULL_RESOURCE_DESCRIPTOR:
// case REG_RESOURCE_REQUIREMENTS_LIST:
default:
DEFAULT:
for (dwBytes = 0; dwBytes < dwData; dwBytes++)
#ifdef TINY
bOutput &= PrintFormat(hOutput, L",%02x", cbData[dwBytes]);
#else
bOutput &= PrintDirect(hOutput, szBytes[cbData[dwBytes]], 3);
#endif
bOutput &= PrintString(hOutput, L"\r\n");
}
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu for value \'%ls\' of registry key \'%ls\'\n",
dwError = GetLastError(), szValue, szKey);
}
}
for (dwSubKeys = 0;; dwSubKeys++)
{
dwSubKey = sizeof(szKey) / sizeof(*szKey) - dwKey - 1;
#if 0
dwError = RegEnumKey(hkKey,
dwSubKeys,
lpSubKey,
dwSubKey);
#else
dwError = RegEnumKeyEx(hkKey,
dwSubKeys,
lpSubKey,
&dwSubKey,
(LPDWORD) NULL,
(LPWSTR) NULL,
(LPDWORD) NULL,
(LPFILETIME) NULL);
#endif
if (dwError != ERROR_SUCCESS)
{
if (dwError == ERROR_NO_MORE_ITEMS)
break;
PrintConsole(hConsole,
#if 0
L"RegEnumKey() returned error %lu for registry key \'%ls\'\n",
#else
L"RegEnumKeyEx() returned error %lu for registry key \'%ls\'\n",
#endif
dwError, szKey);
if (dwError == ERROR_ACCESS_DENIED)
break;
}
else
{
#ifdef SANITY
dwChars = wcslen(lpSubKey);
if (dwChars > dwSubKey)
PrintConsole(hConsole,
L"ERROR: size (%lu characters) of subkey name \'%ls\' in registry key \'%ls\' smaller than actual string length (%lu characters)\n",
dwSubKey, lpSubKey, szKey, dwChars);
else if (dwChars < dwSubKey)
PrintConsole(hConsole,
L"WARNING: size (%lu characters) of subkey name \'%ls\' in registry key \'%ls\' greater than actual string length (%lu characters)\n",
dwSubKey, lpSubKey, szKey, dwChars);
#endif
szKey[dwKey] = L'\\';
dwError = Registry(hConsole, hOutput, qwPrivileges, hkHKEY, dwKey + 1 + dwSubKey);
szKey[dwKey] = L'\0';
}
}
#ifndef SECURITY
if ((dwValues == 0) && (dwSubKeys == 0))
{
if (lpKey == NULL)
bOutput = PrintFormat(hOutput,
L"%ls,,,%%REG_KEYONLY%%\r\n",
lpHKey);
else
bOutput = PrintFormat(hOutput,
L"%ls,\"%ls\",,%%REG_KEYONLY%%\r\n",
lpHKey, lpKey);
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu for empty registry key \'%ls\'\n",
dwError = GetLastError(), szKey);
}
#endif
dwValue = RegCloseKey(hkKey);
if (dwValue != ERROR_SUCCESS)
PrintConsole(hConsole,
L"RegCloseKey() returned error %lu for registry key \'%ls\'\n",
dwValue, szKey);
}
return dwError;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
SYSTEMTIME st;
INT nArgument = 1;
INT nArguments;
LPWSTR *lpArguments;
WCHAR szComputer[MAX_COMPUTERNAME_LENGTH + 1] = L"<unknown>";
DWORD dwComputer = sizeof(szComputer) / sizeof(*szComputer);
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwIndex;
QWORD qwPrivileges = 0;
HKEY hkHKEY;
HANDLE hToken;
HANDLE hProcess = GetCurrentProcess();
HANDLE hOutput;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 2)
PrintConsole(hConsole,
L"No arguments: at least one predefined registry key name must be given!\n");
else
{
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOutput == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"GetStdHandle() returned error %lu\n",
dwError = GetLastError());
else
{
if (!FlushFileBuffers(hOutput))
PrintConsole(hConsole,
L"FlushFileBuffers() returned error %lu: standard output is not redirected to a file!\n",
dwError = GetLastError());
else
{
dwError = ERROR_SUCCESS;
if (!GetComputerName(szComputer, &dwComputer))
PrintConsole(hConsole,
L"GetComputerName() returned error %lu\n",
dwError = GetLastError());
GetSystemTime(&st);
if (!PrintFormat(hOutput,
L"\xFEFF" // UTF-16LE BOM
L"; Registry of \'%ls\'\r\n"
L"\r\n"
L"[Version]\r\n"
L"DriverVer = %02hu/%02hu/%04hu,%02hu.%02hu.%02hu.%03hu ; UTC\r\n"
L"Provider = \"Stefan Kanthak\"\r\n"
L"Signature = \"$Windows NT$\"\r\n"
L"\r\n"
L"[Strings]\r\n"
L"REG_SZ = 0x00000000\r\n"
L"REG_BINARY = 0x00000001\r\n"
L"REG_KEYONLY = 0x00000010\r\n"
L"REG_MULTI_SZ = 0x00010000\r\n"
L"REG_DWORD = 0x00010001\r\n"
L"REG_EXPAND_SZ = 0x00020000\r\n"
L"REG_NONE = 0x00020001\r\n"
L"REG_COMPATIBLE = 0x00030001 ; same as REG_BINARY\r\n"
L"REG_DWORD_LITTLE_ENDIAN = 0x00040001 ; same as REG_DWORD\r\n"
L"REG_DWORD_BIG_ENDIAN = 0x00050001\r\n"
L"REG_LINK = 0x00060000\r\n"
L"REG_RESOURCE_LIST = 0x00080001\r\n"
L"REG_FULL_RESOURCE_DESCRIPTOR = 0x00090001\r\n"
L"REG_RESOURCE_REQUIREMENTS_LIST = 0x000a0001\r\n"
L"REG_QWORD = 0x000b0001\r\n"
L"REG_QWORD_LITTLE_ENDIAN = 0x000b0001 ; same as REG_QWORD\r\n"
L"\r\n"
L"[DefaultInstall.NT]\r\n"
L";AddReg = AddReg.HKU,AddReg.HKLM;AddReg.HKCU,AddReg.HKCR\r\n",
szComputer,
st.wMonth, st.wDay, st.wYear, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds))
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
if (!OpenProcessToken(hProcess,
TOKEN_ADJUST_PRIVILEGES,
&hToken))
PrintConsole(hConsole,
L"OpenProcessToken() returned error %lu\n",
dwError = GetLastError());
else
{
if (!AdjustTokenPrivileges(hToken,
FALSE,
&tpBackup,
sizeof(TOKEN_PRIVILEGES),
(TOKEN_PRIVILEGES *) NULL,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"AdjustTokenPrivileges() returned error %lu\n",
dwError = GetLastError());
else
if (GetLastError() == ERROR_SUCCESS)
qwPrivileges |= 1 << SE_BACKUP_PRIVILEGE;
#ifdef SECURITY
if (!AdjustTokenPrivileges(hToken,
FALSE,
&tpSecurity,
sizeof(TOKEN_PRIVILEGES),
(TOKEN_PRIVILEGES *) NULL,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"AdjustTokenPrivileges() returned error %lu\n",
dwError = GetLastError());
else
if (GetLastError() == ERROR_SUCCESS)
qwPrivileges |= 1 << SE_SECURITY_PRIVILEGE;
#endif
if (!CloseHandle(hToken))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
do
{
hkHKEY = HKEY_CLASSES_ROOT;
do
{
dwIndex = (DWORD) hkHKEY ^ (DWORD) HKEY_CLASSES_ROOT;
if ((wcscmp(szHKey[dwIndex], lpArguments[nArgument]) != 0)
&& (wcscmp(szHKEY[dwIndex], lpArguments[nArgument]) != 0))
continue;
memcpy(szKey, szHKEY[dwIndex], dwHKEY[dwIndex] * sizeof(*szKey));
if (!PrintFormat(hOutput,
L"\r\n"
L"[AddReg.%ls]\r\n",
szHKey[dwIndex]))
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
dwError = Registry(hConsole, hOutput, qwPrivileges, hkHKEY, dwHKEY[dwIndex] - 1);
break;
}
while (++(DWORD) hkHKEY <= (DWORD) HKEY_CURRENT_USER_LOCAL_SETTINGS);
if ((DWORD) hkHKEY > (DWORD) HKEY_CURRENT_USER_LOCAL_SETTINGS)
PrintConsole(hConsole,
L"Argument \'%ls\' is not a predefined registry key name!\n",
lpArguments[nArgument]);
}
while (++nArgument < nArguments);
if (!PrintString(hOutput,
L"\r\n"
L"; EOF\r\n"))
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
}
if (!CloseHandle(hOutput))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Note: the output format allows to detect
Registry values without data, REG_SZ
,
REG_EXPAND_SZ
and REG_MULTI_SZ
values with
empty strings, REG_LINK
, REG_SZ
,
REG_EXPAND_SZ
and REG_MULTI_SZ
values with
(invalid) odd size, and REG_DWORD_BIG_ENDIAN
,
REG_DWORD_LITTLE_ENDIAN
alias REG_DWORD
as well as REG_QWORD_LITTLE_ENDIAN
alias
REG_QWORD
values with sizes not matching their data
type.
Note: with the preprocessor macro
SANITY
defined, several consistency and sanity checks
regarding the size of key and value names as well as value data and
value data types are performed.
Note: with the preprocessor macro
SECURITY
defined, the
security descriptors
of enumerated keys are printed in
Security Descriptor Definition Language
notation.
Note: with the preprocessor macro TINY
defined, the application gets 2036 bytes smaller, but also a little
slower!
Run the following four command lines to compile the source file
REGISTRY.C
created in step 1., link the compiled
object file REGISTRY.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeREGISTRY.COM REGISTRY.C ADVAPI32.LIB KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE REGISTRY.OBJFor 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. REGISTRY.C REGISTRY.C(587) : warning C4090: 'function' : different 'const' qualifiers REGISTRY.C(764) : warning C4090: 'function' : different 'const' qualifiers REGISTRY.C(819) : warning C4213: nonstandard extension used : cast on l-value Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
(Optional) Create the text file REGISTRY.XML
with the
following content next to the console application
REGISTRY.COM
built in step 2.:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!-- Copyright (C) 2004-2024, Stefan Kanthak -->
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity name="eSKamation.Tidbits.Registry INF Dumper" processorArchitecture="*" type="win32" version="0.8.1.5" />
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<description>Registry INF Dumper</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
(Optional) Embed the application manifest
REGISTRY.XML
created in step 3. in the console
application REGISTRY.COM
built in step 2.:
MT.EXE /CANONICALIZE /MANIFEST REGISTRY.XML /OUTPUTRESOURCE:REGISTRY.COMNote: the Manifest Tool
MT.exe
is shipped with the Windows Software Development Kit.
Microsoft (R) Manifest Tool version 6.1.7716.0 Copyright (c) Microsoft Corporation 2009. All rights reserved.
Create the text file REGISTRY.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 03 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 0e 00 00 ......#.........
00 1e 00 00 00 80 14 00 af 16 00 00 00 10 00 00 ................
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 c0 14 00 00 02 00 00 58 33 00 00 03 00 00 85 ........X3......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
a8 3a 00 00 50 00 00 00 00 00 00 00 00 00 00 00 .:..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 40 3a 00 00 40 00 00 00 ........@:..@...
00 00 00 00 00 00 00 00 00 20 00 00 60 00 00 00 ......... ..`...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
25 0c 00 00 00 10 00 00 00 0e 00 00 00 02 00 00 %...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 d8 1c 00 00 00 20 00 00 .const....... ..
00 1e 00 00 00 10 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 2e 62 73 73 00 00 00 00 ....@..@.bss....
00 80 14 00 00 40 00 00 00 00 00 00 00 00 00 00 .....@..........
00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 c0 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 58 20 40 00 8b f0 .......P..X @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 1c 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 08 08 00 00 8d 45 10 50 ff 75 0c 8d 85 ........E.P.u...
f8 f7 ff ff 50 ff 15 58 20 40 00 85 c0 75 02 c9 ....P..X @...u..
c3 56 57 8d 3c 00 8d b5 f8 f7 ff ff 6a 00 8d 45 .VW.<.......j..E
fc 50 57 56 ff 75 08 ff 15 20 20 40 00 85 c0 74 .PWV.u... @...t
0f 03 75 fc 2b 7d fc 75 e3 33 c0 40 5f 5e c9 c3 ..u.+}.u.3.@_^..
33 c0 eb f8 55 8b ec 56 8b 75 10 57 8b 7d 0c 03 3...U..V.u.W.}..
f6 6a 00 8d 45 10 50 56 57 ff 75 08 ff 15 20 20 .j..E.PVW.u...
40 00 85 c0 74 11 03 7d 10 2b 75 10 75 e3 33 c0 @...t..}.+u.u.3.
40 5f 5e 5d c2 0c 00 33 c0 eb f6 8b 44 24 04 0f @_^]...3....D$..
b7 08 83 f9 22 74 0f 83 f9 25 74 0a 83 c0 02 66 ...."t...%t....f
85 c9 75 eb 33 c0 c2 04 00 55 8b ec 83 ec 28 8b ..u.3....U....(.
45 18 35 00 00 00 80 8b 0c 85 28 2b 40 00 8b 04 E.5.......(+@...
85 68 2b 40 00 89 4d ec 39 45 1c 73 06 83 65 f8 .h+@..M.9E.s..e.
00 eb 0a 8d 04 45 00 40 40 00 89 45 f8 8b 45 10 .....E.@@..E..E.
25 00 00 02 00 33 c9 0b c1 74 04 6a 0c eb 02 6a %....3...t.j...j
08 58 57 8d 4d e4 51 68 19 01 02 00 50 ff 75 f8 .XW.M.Qh....P.u.
ff 75 18 ff 15 08 20 40 00 8b f8 85 ff 74 10 68 .u.... @.....t.h
00 40 40 00 57 68 00 2f 40 00 e9 29 05 00 00 83 .@@.Wh./@..)....
65 f0 00 53 56 8b 75 0c bb 00 c0 44 00 8d 45 fc e..SV.u....D..E.
50 53 8d 45 e0 50 6a 00 8d 45 e8 50 68 00 40 44 PS.E.Pj..E.Ph.@D
00 ff 75 f0 c7 45 e8 00 40 00 00 ff 75 e4 c7 45 ..u..E..@...u..E
fc 00 00 10 00 ff 15 04 20 40 00 8b f8 85 ff 0f ........ @......
84 c1 00 00 00 81 ff 03 01 00 00 74 24 68 00 40 ...........t$h.@
40 00 57 68 e4 2e 40 00 68 80 2e 40 00 ff 75 08 @.Wh..@.h..@..u.
e8 2b fe ff ff 83 c4 14 83 ff 05 0f 85 1b 04 00 .+..............
00 bb ff ff 01 00 33 f6 2b 5d 1c 33 c0 50 50 50 ......3.+].3.PPP
50 8d 45 d8 50 8b 45 1c 8d 04 45 02 40 40 00 50 P.E.P.E...E.@@.P
56 ff 75 e4 89 5d d8 ff 15 00 20 40 00 8b f8 85 V.u..].... @....
ff 0f 84 ed 03 00 00 81 ff 03 01 00 00 74 24 68 .............t$h
00 40 40 00 57 68 60 2e 40 00 68 80 2e 40 00 ff .@@.Wh`.@.h..@..
75 08 e8 c9 fd ff ff 83 c4 14 83 ff 05 0f 85 f5 u...............
03 00 00 83 7d f0 00 0f 85 2e 04 00 00 85 f6 0f ....}...........
85 26 04 00 00 39 75 f8 0f 85 e0 03 00 00 ff 75 .&...9u........u
ec 68 30 2e 40 00 ff 75 0c e8 e0 fd ff ff 83 c4 .h0.@..u........
0c e9 de 03 00 00 83 7d f8 00 75 13 ff 75 ec 68 .......}..u..u.h
24 2e 40 00 56 e8 c4 fd ff ff 83 c4 0c eb 14 ff $.@.V...........
75 f8 ff 75 ec 68 0c 2e 40 00 56 e8 ae fd ff ff u..u.h..@.V.....
83 c4 10 8b f8 8b 45 e0 83 f8 0c 73 29 83 7d e8 ......E....s).}.
00 ff 34 85 88 2b 40 00 75 10 68 f0 2d 40 00 56 ..4..+@.u.h.-@.V
e8 89 fd ff ff 83 c4 0c eb 2d 68 00 40 44 00 68 .........-h.@D.h
cc 2d 40 00 eb 18 83 7d e8 00 50 75 07 68 b8 2d .-@....}..Pu.h.-
40 00 eb db 68 00 40 44 00 68 9c 2d 40 00 56 e8 @...h.@D.h.-@.V.
5a fd ff ff 83 c4 10 23 f8 8b 45 fc 85 c0 75 12 Z......#..E...u.
6a 02 68 94 2d 40 00 56 e8 97 fd ff ff e9 be 02 j.h.-@.V........
00 00 8b 4d e0 85 c9 0f 84 7a 02 00 00 83 f9 02 ...M.....z......
0f 86 ce 01 00 00 83 f9 04 0f 84 b4 01 00 00 83 ................
f9 05 0f 84 86 01 00 00 83 f9 06 0f 84 4b 01 00 .............K..
00 83 f9 07 74 34 83 f9 0b 0f 85 48 02 00 00 83 ....t4.....H....
f8 08 0f 85 3f 02 00 00 a1 04 c0 44 00 8b 0d 00 ....?......D....
c0 44 00 50 51 50 51 68 68 2d 40 00 56 e8 dc fc .D.PQPQhh-@.V...
ff ff 83 c4 18 e9 56 02 00 00 a8 01 0f 85 15 02 ......V.........
00 00 83 f8 02 75 16 66 83 3d 00 c0 44 00 00 75 .....u.f.=..D..u
0c 6a 03 68 60 2d 40 00 e9 6a ff ff ff d1 e8 8d .j.h`-@..j......
0c 45 00 c0 44 00 8b f3 89 45 fc 89 4d dc 83 f8 .E..D....E..M...
01 76 19 8d 51 fe 66 83 3a 00 75 10 66 83 3c 45 .v..Q.f.:.u.f.<E
fc bf 44 00 00 75 05 89 55 dc eb 05 33 c0 66 89 ..D..u..U...3.f.
01 66 83 3e 00 75 14 6a 03 68 58 2d 40 00 ff 75 .f.>.u.j.hX-@..u
0c e8 be fc ff ff e9 8e 00 00 00 8b c6 8d 50 02 ..............P.
66 8b 08 83 c0 02 66 85 c9 75 f5 6a 02 2b c2 68 f.....f..u.j.+.h
50 2d 40 00 ff 75 0c d1 f8 89 45 fc e8 93 fc ff P-@..u....E.....
ff 56 23 f8 89 75 f4 e8 bf fc ff ff 8b d8 8b 45 .V#..u.........E
fc 8d 34 46 eb 26 8b c3 2b 45 f4 83 c0 02 d1 f8 ..4F.&..+E......
50 ff 75 f4 ff 75 0c e8 68 fc ff ff 89 5d f4 83 P.u..u..h....]..
c3 02 53 23 f8 e8 91 fc ff ff 8b d8 85 db 75 d6 ..S#..........u.
8b c6 2b 45 f4 d1 f8 50 ff 75 f4 ff 75 0c e8 41 ..+E...P.u..u..A
fc ff ff 6a 01 68 4c 2d 40 00 ff 75 0c 23 f8 e8 ...j.hL-@..u.#..
30 fc ff ff bb 00 c0 44 00 83 c6 02 23 f8 3b 75 0......D....#.;u
dc 0f 82 4a ff ff ff e9 32 01 00 00 a8 01 0f 85 ...J....2.......
03 01 00 00 6a 02 68 50 2d 40 00 56 e8 03 fc ff ....j.hP-@.V....
ff 23 f8 8b 45 fc d1 e8 50 53 56 e8 f4 fb ff ff .#..E...PSV.....
6a 03 23 f8 68 44 2d 40 00 e9 49 fe ff ff 83 f8 j.#.hD-@..I.....
04 0f 85 d0 00 00 00 a1 00 c0 44 00 50 0f c8 50 ..........D.P..P
68 20 2d 40 00 56 e8 73 fb ff ff 83 c4 10 e9 ed h -@.V.s........
00 00 00 83 f8 04 0f 85 ab 00 00 00 a1 00 c0 44 ...............D
00 50 eb db a8 01 0f 85 9b 00 00 00 66 83 3d 00 .P..........f.=.
c0 44 00 00 75 0c 6a 05 68 14 2d 40 00 e9 f5 fd .D..u.j.h.-@....
ff ff d1 e8 33 c9 66 89 0c 45 00 c0 44 00 8b c3 ....3.f..E..D...
89 5d f4 8d 48 02 66 8b 10 83 c0 02 66 85 d2 75 .]..H.f.....f..u
f5 6a 02 2b c1 68 50 2d 40 00 ff 75 0c d1 f8 89 .j.+.hP-@..u....
45 fc e8 5d fb ff ff 53 eb 1d 8b c6 2b 45 f4 83 E..]...S....+E..
c0 02 d1 f8 50 ff 75 f4 ff 75 0c e8 44 fb ff ff ....P.u..u..D...
89 75 f4 83 c6 02 56 23 f8 e8 6d fb ff ff 8b f0 .u....V#..m.....
85 f6 75 d6 8b 45 fc 03 c0 2b 45 f4 03 c3 d1 f8 ..u..E...+E.....
50 ff 75 f4 ff 75 0c e8 18 fb ff ff 6a 03 23 f8 P.u..u......j.#.
68 44 2d 40 00 eb 2e 33 f6 85 c0 74 21 0f b6 86 hD-@...3...t!...
00 c0 44 00 6a 03 8d 04 c5 28 23 40 00 50 ff 75 ..D.j....(#@.P.u
0c e8 ee fa ff ff 23 f8 46 3b 75 fc 72 df 6a 02 ......#.F;u.r.j.
68 94 2d 40 00 ff 75 0c e8 d7 fa ff ff 8b 75 0c h.-@..u.......u.
23 f8 85 ff 75 26 ff 15 24 20 40 00 68 00 40 40 #...u&..$ @.h.@@
00 68 00 40 44 00 50 68 00 2d 40 00 68 80 2c 40 .h.@D.Ph.-@.h.,@
00 ff 75 08 e8 07 fa ff ff 83 c4 18 ff 45 f0 e9 ..u..........E..
79 fb ff ff 8b 7d 1c 6a 5c 58 66 89 04 7d 00 40 y....}.j\Xf..}.@
40 00 8b 45 d8 8d 44 38 01 50 ff 75 18 ff 75 14 @..E..D8.P.u..u.
ff 75 10 ff 75 0c ff 75 08 e8 cb fa ff ff 33 c0 .u..u..u......3.
66 89 04 7d 00 40 40 00 46 e9 ad fb ff ff ff 75 f..}.@@.F......u
f8 ff 75 ec 68 40 2c 40 00 ff 75 0c e8 fd f9 ff ..u.h@,@..u.....
ff 83 c4 10 85 c0 75 23 ff 15 24 20 40 00 68 00 ......u#..$ @.h.
40 40 00 8b f8 57 68 00 2d 40 00 68 d0 2b 40 00 @@...Wh.-@.h.+@.
ff 75 08 e8 88 f9 ff ff 83 c4 14 ff 75 e4 ff 15 .u..........u...
14 20 40 00 5e 89 45 e8 5b 85 c0 74 1b 68 00 40 . @.^.E.[..t.h.@
40 00 50 68 b8 2b 40 00 68 80 2e 40 00 ff 75 08 @.Ph.+@.h..@..u.
e8 5b f9 ff ff 83 c4 14 8b c7 5f c9 c2 18 00 55 .[........_....U
8b ec 83 ec 60 83 65 d0 00 53 56 57 6a 05 59 be ....`.e..SVWj.Y.
24 3a 40 00 8d 7d a0 f3 a5 33 c0 8d 7d b4 ab ab $:@..}...3..}...
c7 45 ec 01 00 00 00 ab c7 45 d8 10 00 00 00 c7 .E.......E......
45 fc a0 00 00 00 ff 15 48 20 40 00 8b 35 44 20 E.......H @..5D
40 00 6a f4 89 45 e8 ff d6 8b f8 89 7d f4 83 ff @.j..E......}...
ff 75 0e ff 15 24 20 40 00 89 45 fc e9 e9 02 00 .u...$ @..E.....
00 8d 45 e0 50 ff 15 40 20 40 00 50 e8 6c 03 00 ..E.P..@ @.P.l..
00 8b 1d 24 20 40 00 89 45 dc 85 c0 75 10 ff d3 ...$ @..E...u...
50 89 45 fc 68 00 3a 40 00 e9 8d 02 00 00 83 7d P.E.h.:@.......}
e0 02 73 12 68 70 39 40 00 57 e8 b1 f8 ff ff 59 ..s.hp9@.W.....Y
59 e9 60 02 00 00 6a f5 ff d6 89 45 f0 83 f8 ff Y.`...j....E....
75 10 ff d3 50 89 45 fc 68 54 39 40 00 e9 36 02 u...P.E.hT9@..6.
00 00 50 ff 15 3c 20 40 00 85 c0 75 12 ff d3 50 ..P..< @...u...P
68 30 39 40 00 68 a0 38 40 00 e9 f8 01 00 00 83 h09@.h.8@.......
65 fc 00 8d 45 d8 50 8d 45 a0 50 ff 15 38 20 40 e...E.P.E.P..8 @
00 85 c0 75 1c ff d3 50 68 80 38 40 00 be 4c 38 ...u...Ph.8@..L8
40 00 56 57 89 45 fc e8 44 f8 ff ff 83 c4 10 eb @.VW.E..D.......
05 be 4c 38 40 00 8d 45 c0 50 ff 15 34 20 40 00 ..L8@..E.P..4 @.
0f b7 45 ce 50 0f b7 45 cc 50 0f b7 45 ca 50 0f ..E.P..E.P..E.P.
b7 45 c8 50 0f b7 45 c0 50 0f b7 45 c6 50 0f b7 .E.P..E.P..E.P..
45 c2 50 8d 45 a0 50 68 40 30 40 00 ff 75 f0 e8 E.P.E.Ph@0@..u..
4a f8 ff ff 83 c4 28 85 c0 75 15 ff d3 50 68 00 J.....(..u...Ph.
2d 40 00 56 57 89 45 fc e8 e3 f7 ff ff 83 c4 10 -@.VW.E.........
8d 45 e4 50 6a 20 ff 75 e8 ff 15 10 20 40 00 85 .E.Pj .u.... @..
c0 75 0d ff d3 50 89 45 fc 68 1c 30 40 00 eb 52 .u...P.E.h.0@..R
33 c0 50 50 6a 10 68 18 23 40 00 50 ff 75 e4 ff 3.PPj.h.#@.P.u..
15 0c 20 40 00 85 c0 75 17 ff d3 50 68 f0 2f 40 .. @...u...Ph./@
00 56 57 89 45 fc e8 95 f7 ff ff 83 c4 10 eb 0d .VW.E...........
ff d3 85 c0 75 07 c7 45 d0 00 00 02 00 ff 75 e4 ....u..E......u.
ff 15 30 20 40 00 85 c0 75 12 ff d3 50 68 d8 2f ..0 @...u...Ph./
40 00 56 57 e8 67 f7 ff ff 83 c4 10 8b 45 ec 8b @.VW.g.......E..
4d dc 8d 04 81 c7 45 f8 00 00 00 80 89 45 e8 8b M.....E......E..
4d f8 8b 45 e8 8b 10 81 f1 00 00 00 80 8b 04 8d M..E............
28 2b 40 00 66 8b 38 66 3b 3a 75 1e 66 85 ff 74 (+@.f.8f;:u.f..t
15 66 8b 78 02 66 3b 7a 02 75 0f 83 c0 04 83 c2 .f.x.f;z.u......
04 66 85 ff 75 de 33 c0 eb 05 1b c0 83 d8 ff 85 .f..u.3.........
c0 0f 84 0c 01 00 00 8b 45 e8 8b 10 8b 04 8d 48 ........E......H
2b 40 00 66 8b 38 66 3b 3a 75 1e 66 85 ff 74 15 +@.f.8f;:u.f..t.
66 8b 78 02 66 3b 7a 02 75 0f 83 c0 04 83 c2 04 f.x.f;z.u.......
66 85 ff 75 de 33 c0 eb 05 1b c0 83 d8 ff 85 c0 f..u.3..........
0f 84 cd 00 00 00 ff 45 f8 81 7d f8 07 00 00 80 .......E..}.....
0f 86 69 ff ff ff 8b 7d f4 8b 45 e8 ff 30 68 68 ..i....}..E..0hh
2f 40 00 57 e8 a7 f6 ff ff 83 c4 0c ff 45 ec 8b /@.W.........E..
45 ec 3b 45 e0 0f 82 31 ff ff ff 6a 09 68 54 2f E.;E...1...j.hT/
40 00 ff 75 f0 e8 2a f7 ff ff 85 c0 75 15 ff d3 @..u..*.....u...
50 68 00 2d 40 00 56 57 89 45 fc e8 70 f6 ff ff Ph.-@.VW.E..p...
83 c4 10 ff 75 f0 ff 15 30 20 40 00 85 c0 75 16 ....u...0 @...u.
ff d3 50 68 d8 2f 40 00 68 4c 38 40 00 57 e8 4d ..Ph./@.hL8@.W.M
f6 ff ff 83 c4 10 ff 75 dc ff 15 2c 20 40 00 85 .......u..., @..
c0 74 16 ff d3 50 68 40 2f 40 00 68 4c 38 40 00 .t...Ph@/@.hL8@.
57 e8 2a f6 ff ff 83 c4 10 57 ff 15 30 20 40 00 W.*......W..0 @.
85 c0 75 16 ff d3 50 68 d8 2f 40 00 68 4c 38 40 ..u...Ph./@.hL8@
00 57 e8 09 f6 ff ff 83 c4 10 ff 75 fc ff 15 28 .W.........u...(
20 40 00 8b c1 c1 e0 02 ff b0 28 2b 40 00 8b b0 @........(+@...
48 2b 40 00 8b 88 68 2b 40 00 68 1c 2f 40 00 ff H+@...h+@.h./@..
75 f0 bf 00 40 40 00 89 45 fc 66 f3 a5 e8 1c f6 u...@@..E.f.....
ff ff 83 c4 0c 85 c0 75 18 ff d3 50 68 00 2d 40 .......u...Ph.-@
00 68 4c 38 40 00 ff 75 f4 e8 b2 f5 ff ff 83 c4 .hL8@..u........
10 8b 45 fc 8b 80 68 2b 40 00 48 50 ff 75 f8 33 ..E...h+@.HP.u.3
c0 50 ff 75 d0 ff 75 f0 ff 75 f4 e8 89 f6 ff ff .P.u..u..u......
81 7d f8 07 00 00 80 8b 7d f4 89 45 fc be 4c 38 .}......}..E..L8
40 00 0f 86 d4 fe ff ff e9 bc fe ff ff 55 8b ec @............U..
51 8b 45 08 53 56 33 f6 57 8b f8 89 75 08 89 75 Q.E.SV3.W...u..u
fc 39 75 0c 0f 84 6a 01 00 00 3b c6 0f 84 62 01 .9u...j...;...b.
00 00 0f b7 08 66 3b ce 0f 84 56 01 00 00 83 f9 .....f;...V.....
20 74 0a 83 f9 09 74 05 33 db 43 eb 02 33 db 39 t....t.3.C..3.9
75 08 75 2b 66 83 f9 20 74 06 66 83 f9 09 75 1f u.u+f.. t.f...u.
89 75 fc 83 c0 02 0f b7 08 83 f9 20 74 f5 83 f9 .u......... t...
09 74 f0 33 c9 66 39 30 0f 95 c1 03 d9 eb 23 66 .t.3.f90......#f
83 f9 5c 75 06 83 75 fc 01 eb 14 39 75 fc 75 0c ..\u..u....9u.u.
66 83 f9 22 75 06 83 75 08 01 eb 03 89 75 fc 83 f.."u..u.....u..
c0 02 0f b7 08 66 3b ce 75 a5 2b c7 83 c0 02 d1 .....f;.u.+.....
f8 8d 44 58 02 03 c0 50 6a 40 ff 15 50 20 40 00 ..DX...Pj@..P @.
8b f0 33 d2 3b f2 0f 84 d0 00 00 00 8d 44 9e 04 ..3.;........D..
33 db 89 06 89 55 08 89 5d fc 83 7d 08 00 75 34 3....U..]..}..u4
0f b7 0f 83 f9 20 74 05 83 f9 09 75 27 33 d2 33 ..... t....u'3.3
c9 66 89 08 83 c7 02 0f b7 0f 83 f9 20 74 f5 83 .f.......... t..
f9 09 74 f0 66 39 17 74 71 43 8b c7 89 5d fc 89 ..t.f9.tqC...]..
3c 9e eb 5c 0f b7 0f 83 f9 5c 75 03 42 eb 48 83 <..\.....\u.B.H.
f9 22 75 41 6a 02 8d 5a 01 d1 eb 59 f7 db 03 f9 ."uAj..Z...Y....
8d 04 58 f6 c2 01 74 0a 6a 22 5a 66 89 10 03 c1 ..X...t.j"Zf....
eb 1c 83 7d 08 00 74 12 66 83 3f 22 75 0c 6a 22 ...}..t.f.?"u.j"
5a 66 89 10 03 c1 03 f9 eb 04 83 75 08 01 8b 5d Zf.........u...]
fc 33 d2 eb 0b 33 d2 66 89 08 83 c0 02 83 c7 02 .3...3.f........
66 83 3f 00 0f 85 60 ff ff ff 33 c9 43 66 89 08 f.?...`...3.Cf..
21 0c 9e 8b 45 0c 89 18 39 4d 08 74 0f 68 a0 00 !...E...9M.t.h..
00 00 eb 02 6a 57 ff 15 4c 20 40 00 5f 8b c6 5e ....jW..L @._..^
5b c9 c2 08 00 00 00 00 00 00 00 00 00 00 00 00 [...............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
66 3b 00 00 76 3b 00 00 86 3b 00 00 96 3b 00 00 f;..v;...;...;..
ae 3b 00 00 58 3b 00 00 00 00 00 00 d0 3b 00 00 .;..X;.......;..
e0 3b 00 00 ec 3b 00 00 fc 3b 00 00 0a 3c 00 00 .;...;...;...<..
16 3c 00 00 24 3c 00 00 34 3c 00 00 48 3c 00 00 .<..$<..4<..H<..
5c 3c 00 00 6e 3c 00 00 7e 3c 00 00 92 3c 00 00 \<..n<..~<...<..
a2 3c 00 00 00 00 00 00 be 3c 00 00 00 00 00 00 .<.......<......
51 00 57 00 4f 00 52 00 44 00 00 00 52 00 45 00 Q.W.O.R.D...R.E.
53 00 4f 00 55 00 52 00 43 00 45 00 5f 00 52 00 S.O.U.R.C.E._.R.
45 00 51 00 55 00 49 00 52 00 45 00 4d 00 45 00 E.Q.U.I.R.E.M.E.
4e 00 54 00 53 00 5f 00 4c 00 49 00 53 00 54 00 N.T.S._.L.I.S.T.
00 00 00 00 46 00 55 00 4c 00 4c 00 5f 00 52 00 ....F.U.L.L._.R.
45 00 53 00 4f 00 55 00 52 00 43 00 45 00 5f 00 E.S.O.U.R.C.E._.
44 00 45 00 53 00 43 00 52 00 49 00 50 00 54 00 D.E.S.C.R.I.P.T.
4f 00 52 00 00 00 00 00 52 00 45 00 53 00 4f 00 O.R.....R.E.S.O.
55 00 52 00 43 00 45 00 5f 00 4c 00 49 00 53 00 U.R.C.E._.L.I.S.
54 00 00 00 4d 00 55 00 4c 00 54 00 49 00 5f 00 T...M.U.L.T.I._.
53 00 5a 00 00 00 00 00 4c 00 49 00 4e 00 4b 00 S.Z.....L.I.N.K.
00 00 00 00 44 00 57 00 4f 00 52 00 44 00 5f 00 ....D.W.O.R.D._.
42 00 49 00 47 00 5f 00 45 00 4e 00 44 00 49 00 B.I.G._.E.N.D.I.
41 00 4e 00 00 00 00 00 44 00 57 00 4f 00 52 00 A.N.....D.W.O.R.
44 00 00 00 42 00 49 00 4e 00 41 00 52 00 59 00 D...B.I.N.A.R.Y.
00 00 00 00 45 00 58 00 50 00 41 00 4e 00 44 00 ....E.X.P.A.N.D.
5f 00 53 00 5a 00 00 00 53 00 5a 00 00 00 00 00 _.S.Z...S.Z.....
4e 00 4f 00 4e 00 45 00 00 00 00 00 00 00 00 00 N.O.N.E.........
48 00 4b 00 45 00 59 00 5f 00 43 00 55 00 52 00 H.K.E.Y._.C.U.R.
52 00 45 00 4e 00 54 00 5f 00 55 00 53 00 45 00 R.E.N.T._.U.S.E.
52 00 5f 00 4c 00 4f 00 43 00 41 00 4c 00 5f 00 R._.L.O.C.A.L._.
53 00 45 00 54 00 54 00 49 00 4e 00 47 00 53 00 S.E.T.T.I.N.G.S.
00 00 00 00 48 00 4b 00 45 00 59 00 5f 00 44 00 ....H.K.E.Y._.D.
59 00 4e 00 5f 00 44 00 41 00 54 00 41 00 00 00 Y.N._.D.A.T.A...
48 00 4b 00 45 00 59 00 5f 00 43 00 55 00 52 00 H.K.E.Y._.C.U.R.
52 00 45 00 4e 00 54 00 5f 00 43 00 4f 00 4e 00 R.E.N.T._.C.O.N.
46 00 49 00 47 00 00 00 48 00 4b 00 45 00 59 00 F.I.G...H.K.E.Y.
5f 00 50 00 45 00 52 00 46 00 4f 00 52 00 4d 00 _.P.E.R.F.O.R.M.
41 00 4e 00 43 00 45 00 5f 00 44 00 41 00 54 00 A.N.C.E._.D.A.T.
41 00 00 00 48 00 4b 00 45 00 59 00 5f 00 55 00 A...H.K.E.Y._.U.
53 00 45 00 52 00 53 00 00 00 00 00 48 00 4b 00 S.E.R.S.....H.K.
45 00 59 00 5f 00 4c 00 4f 00 43 00 41 00 4c 00 E.Y._.L.O.C.A.L.
5f 00 4d 00 41 00 43 00 48 00 49 00 4e 00 45 00 _.M.A.C.H.I.N.E.
00 00 00 00 48 00 4b 00 45 00 59 00 5f 00 43 00 ....H.K.E.Y._.C.
55 00 52 00 52 00 45 00 4e 00 54 00 5f 00 55 00 U.R.R.E.N.T._.U.
53 00 45 00 52 00 00 00 48 00 4b 00 45 00 59 00 S.E.R...H.K.E.Y.
5f 00 43 00 4c 00 41 00 53 00 53 00 45 00 53 00 _.C.L.A.S.S.E.S.
5f 00 52 00 4f 00 4f 00 54 00 00 00 48 00 4b 00 _.R.O.O.T...H.K.
4c 00 53 00 00 00 00 00 48 00 4b 00 44 00 44 00 L.S.....H.K.D.D.
00 00 00 00 48 00 4b 00 43 00 43 00 00 00 00 00 ....H.K.C.C.....
48 00 4b 00 50 00 44 00 00 00 00 00 48 00 4b 00 H.K.P.D.....H.K.
55 00 00 00 48 00 4b 00 4c 00 4d 00 00 00 00 00 U...H.K.L.M.....
48 00 4b 00 43 00 55 00 00 00 00 00 48 00 4b 00 H.K.C.U.....H.K.
43 00 52 00 00 00 00 00 01 00 00 00 11 00 00 00 C.R.............
00 00 00 00 02 00 00 00 2c 00 30 00 30 00 00 00 ........,.0.0...
2c 00 30 00 31 00 00 00 2c 00 30 00 32 00 00 00 ,.0.1...,.0.2...
2c 00 30 00 33 00 00 00 2c 00 30 00 34 00 00 00 ,.0.3...,.0.4...
2c 00 30 00 35 00 00 00 2c 00 30 00 36 00 00 00 ,.0.5...,.0.6...
2c 00 30 00 37 00 00 00 2c 00 30 00 38 00 00 00 ,.0.7...,.0.8...
2c 00 30 00 39 00 00 00 2c 00 30 00 61 00 00 00 ,.0.9...,.0.a...
2c 00 30 00 62 00 00 00 2c 00 30 00 63 00 00 00 ,.0.b...,.0.c...
2c 00 30 00 64 00 00 00 2c 00 30 00 65 00 00 00 ,.0.d...,.0.e...
2c 00 30 00 66 00 00 00 2c 00 31 00 30 00 00 00 ,.0.f...,.1.0...
2c 00 31 00 31 00 00 00 2c 00 31 00 32 00 00 00 ,.1.1...,.1.2...
2c 00 31 00 33 00 00 00 2c 00 31 00 34 00 00 00 ,.1.3...,.1.4...
2c 00 31 00 35 00 00 00 2c 00 31 00 36 00 00 00 ,.1.5...,.1.6...
2c 00 31 00 37 00 00 00 2c 00 31 00 38 00 00 00 ,.1.7...,.1.8...
2c 00 31 00 39 00 00 00 2c 00 31 00 61 00 00 00 ,.1.9...,.1.a...
2c 00 31 00 62 00 00 00 2c 00 31 00 63 00 00 00 ,.1.b...,.1.c...
2c 00 31 00 64 00 00 00 2c 00 31 00 65 00 00 00 ,.1.d...,.1.e...
2c 00 31 00 66 00 00 00 2c 00 32 00 30 00 00 00 ,.1.f...,.2.0...
2c 00 32 00 31 00 00 00 2c 00 32 00 32 00 00 00 ,.2.1...,.2.2...
2c 00 32 00 33 00 00 00 2c 00 32 00 34 00 00 00 ,.2.3...,.2.4...
2c 00 32 00 35 00 00 00 2c 00 32 00 36 00 00 00 ,.2.5...,.2.6...
2c 00 32 00 37 00 00 00 2c 00 32 00 38 00 00 00 ,.2.7...,.2.8...
2c 00 32 00 39 00 00 00 2c 00 32 00 61 00 00 00 ,.2.9...,.2.a...
2c 00 32 00 62 00 00 00 2c 00 32 00 63 00 00 00 ,.2.b...,.2.c...
2c 00 32 00 64 00 00 00 2c 00 32 00 65 00 00 00 ,.2.d...,.2.e...
2c 00 32 00 66 00 00 00 2c 00 33 00 30 00 00 00 ,.2.f...,.3.0...
2c 00 33 00 31 00 00 00 2c 00 33 00 32 00 00 00 ,.3.1...,.3.2...
2c 00 33 00 33 00 00 00 2c 00 33 00 34 00 00 00 ,.3.3...,.3.4...
2c 00 33 00 35 00 00 00 2c 00 33 00 36 00 00 00 ,.3.5...,.3.6...
2c 00 33 00 37 00 00 00 2c 00 33 00 38 00 00 00 ,.3.7...,.3.8...
2c 00 33 00 39 00 00 00 2c 00 33 00 61 00 00 00 ,.3.9...,.3.a...
2c 00 33 00 62 00 00 00 2c 00 33 00 63 00 00 00 ,.3.b...,.3.c...
2c 00 33 00 64 00 00 00 2c 00 33 00 65 00 00 00 ,.3.d...,.3.e...
2c 00 33 00 66 00 00 00 2c 00 34 00 30 00 00 00 ,.3.f...,.4.0...
2c 00 34 00 31 00 00 00 2c 00 34 00 32 00 00 00 ,.4.1...,.4.2...
2c 00 34 00 33 00 00 00 2c 00 34 00 34 00 00 00 ,.4.3...,.4.4...
2c 00 34 00 35 00 00 00 2c 00 34 00 36 00 00 00 ,.4.5...,.4.6...
2c 00 34 00 37 00 00 00 2c 00 34 00 38 00 00 00 ,.4.7...,.4.8...
2c 00 34 00 39 00 00 00 2c 00 34 00 61 00 00 00 ,.4.9...,.4.a...
2c 00 34 00 62 00 00 00 2c 00 34 00 63 00 00 00 ,.4.b...,.4.c...
2c 00 34 00 64 00 00 00 2c 00 34 00 65 00 00 00 ,.4.d...,.4.e...
2c 00 34 00 66 00 00 00 2c 00 35 00 30 00 00 00 ,.4.f...,.5.0...
2c 00 35 00 31 00 00 00 2c 00 35 00 32 00 00 00 ,.5.1...,.5.2...
2c 00 35 00 33 00 00 00 2c 00 35 00 34 00 00 00 ,.5.3...,.5.4...
2c 00 35 00 35 00 00 00 2c 00 35 00 36 00 00 00 ,.5.5...,.5.6...
2c 00 35 00 37 00 00 00 2c 00 35 00 38 00 00 00 ,.5.7...,.5.8...
2c 00 35 00 39 00 00 00 2c 00 35 00 61 00 00 00 ,.5.9...,.5.a...
2c 00 35 00 62 00 00 00 2c 00 35 00 63 00 00 00 ,.5.b...,.5.c...
2c 00 35 00 64 00 00 00 2c 00 35 00 65 00 00 00 ,.5.d...,.5.e...
2c 00 35 00 66 00 00 00 2c 00 36 00 30 00 00 00 ,.5.f...,.6.0...
2c 00 36 00 31 00 00 00 2c 00 36 00 32 00 00 00 ,.6.1...,.6.2...
2c 00 36 00 33 00 00 00 2c 00 36 00 34 00 00 00 ,.6.3...,.6.4...
2c 00 36 00 35 00 00 00 2c 00 36 00 36 00 00 00 ,.6.5...,.6.6...
2c 00 36 00 37 00 00 00 2c 00 36 00 38 00 00 00 ,.6.7...,.6.8...
2c 00 36 00 39 00 00 00 2c 00 36 00 61 00 00 00 ,.6.9...,.6.a...
2c 00 36 00 62 00 00 00 2c 00 36 00 63 00 00 00 ,.6.b...,.6.c...
2c 00 36 00 64 00 00 00 2c 00 36 00 65 00 00 00 ,.6.d...,.6.e...
2c 00 36 00 66 00 00 00 2c 00 37 00 30 00 00 00 ,.6.f...,.7.0...
2c 00 37 00 31 00 00 00 2c 00 37 00 32 00 00 00 ,.7.1...,.7.2...
2c 00 37 00 33 00 00 00 2c 00 37 00 34 00 00 00 ,.7.3...,.7.4...
2c 00 37 00 35 00 00 00 2c 00 37 00 36 00 00 00 ,.7.5...,.7.6...
2c 00 37 00 37 00 00 00 2c 00 37 00 38 00 00 00 ,.7.7...,.7.8...
2c 00 37 00 39 00 00 00 2c 00 37 00 61 00 00 00 ,.7.9...,.7.a...
2c 00 37 00 62 00 00 00 2c 00 37 00 63 00 00 00 ,.7.b...,.7.c...
2c 00 37 00 64 00 00 00 2c 00 37 00 65 00 00 00 ,.7.d...,.7.e...
2c 00 37 00 66 00 00 00 2c 00 38 00 30 00 00 00 ,.7.f...,.8.0...
2c 00 38 00 31 00 00 00 2c 00 38 00 32 00 00 00 ,.8.1...,.8.2...
2c 00 38 00 33 00 00 00 2c 00 38 00 34 00 00 00 ,.8.3...,.8.4...
2c 00 38 00 35 00 00 00 2c 00 38 00 36 00 00 00 ,.8.5...,.8.6...
2c 00 38 00 37 00 00 00 2c 00 38 00 38 00 00 00 ,.8.7...,.8.8...
2c 00 38 00 39 00 00 00 2c 00 38 00 61 00 00 00 ,.8.9...,.8.a...
2c 00 38 00 62 00 00 00 2c 00 38 00 63 00 00 00 ,.8.b...,.8.c...
2c 00 38 00 64 00 00 00 2c 00 38 00 65 00 00 00 ,.8.d...,.8.e...
2c 00 38 00 66 00 00 00 2c 00 39 00 30 00 00 00 ,.8.f...,.9.0...
2c 00 39 00 31 00 00 00 2c 00 39 00 32 00 00 00 ,.9.1...,.9.2...
2c 00 39 00 33 00 00 00 2c 00 39 00 34 00 00 00 ,.9.3...,.9.4...
2c 00 39 00 35 00 00 00 2c 00 39 00 36 00 00 00 ,.9.5...,.9.6...
2c 00 39 00 37 00 00 00 2c 00 39 00 38 00 00 00 ,.9.7...,.9.8...
2c 00 39 00 39 00 00 00 2c 00 39 00 61 00 00 00 ,.9.9...,.9.a...
2c 00 39 00 62 00 00 00 2c 00 39 00 63 00 00 00 ,.9.b...,.9.c...
2c 00 39 00 64 00 00 00 2c 00 39 00 65 00 00 00 ,.9.d...,.9.e...
2c 00 39 00 66 00 00 00 2c 00 61 00 30 00 00 00 ,.9.f...,.a.0...
2c 00 61 00 31 00 00 00 2c 00 61 00 32 00 00 00 ,.a.1...,.a.2...
2c 00 61 00 33 00 00 00 2c 00 61 00 34 00 00 00 ,.a.3...,.a.4...
2c 00 61 00 35 00 00 00 2c 00 61 00 36 00 00 00 ,.a.5...,.a.6...
2c 00 61 00 37 00 00 00 2c 00 61 00 38 00 00 00 ,.a.7...,.a.8...
2c 00 61 00 39 00 00 00 2c 00 61 00 61 00 00 00 ,.a.9...,.a.a...
2c 00 61 00 62 00 00 00 2c 00 61 00 63 00 00 00 ,.a.b...,.a.c...
2c 00 61 00 64 00 00 00 2c 00 61 00 65 00 00 00 ,.a.d...,.a.e...
2c 00 61 00 66 00 00 00 2c 00 62 00 30 00 00 00 ,.a.f...,.b.0...
2c 00 62 00 31 00 00 00 2c 00 62 00 32 00 00 00 ,.b.1...,.b.2...
2c 00 62 00 33 00 00 00 2c 00 62 00 34 00 00 00 ,.b.3...,.b.4...
2c 00 62 00 35 00 00 00 2c 00 62 00 36 00 00 00 ,.b.5...,.b.6...
2c 00 62 00 37 00 00 00 2c 00 62 00 38 00 00 00 ,.b.7...,.b.8...
2c 00 62 00 39 00 00 00 2c 00 62 00 61 00 00 00 ,.b.9...,.b.a...
2c 00 62 00 62 00 00 00 2c 00 62 00 63 00 00 00 ,.b.b...,.b.c...
2c 00 62 00 64 00 00 00 2c 00 62 00 65 00 00 00 ,.b.d...,.b.e...
2c 00 62 00 66 00 00 00 2c 00 63 00 30 00 00 00 ,.b.f...,.c.0...
2c 00 63 00 31 00 00 00 2c 00 63 00 32 00 00 00 ,.c.1...,.c.2...
2c 00 63 00 33 00 00 00 2c 00 63 00 34 00 00 00 ,.c.3...,.c.4...
2c 00 63 00 35 00 00 00 2c 00 63 00 36 00 00 00 ,.c.5...,.c.6...
2c 00 63 00 37 00 00 00 2c 00 63 00 38 00 00 00 ,.c.7...,.c.8...
2c 00 63 00 39 00 00 00 2c 00 63 00 61 00 00 00 ,.c.9...,.c.a...
2c 00 63 00 62 00 00 00 2c 00 63 00 63 00 00 00 ,.c.b...,.c.c...
2c 00 63 00 64 00 00 00 2c 00 63 00 65 00 00 00 ,.c.d...,.c.e...
2c 00 63 00 66 00 00 00 2c 00 64 00 30 00 00 00 ,.c.f...,.d.0...
2c 00 64 00 31 00 00 00 2c 00 64 00 32 00 00 00 ,.d.1...,.d.2...
2c 00 64 00 33 00 00 00 2c 00 64 00 34 00 00 00 ,.d.3...,.d.4...
2c 00 64 00 35 00 00 00 2c 00 64 00 36 00 00 00 ,.d.5...,.d.6...
2c 00 64 00 37 00 00 00 2c 00 64 00 38 00 00 00 ,.d.7...,.d.8...
2c 00 64 00 39 00 00 00 2c 00 64 00 61 00 00 00 ,.d.9...,.d.a...
2c 00 64 00 62 00 00 00 2c 00 64 00 63 00 00 00 ,.d.b...,.d.c...
2c 00 64 00 64 00 00 00 2c 00 64 00 65 00 00 00 ,.d.d...,.d.e...
2c 00 64 00 66 00 00 00 2c 00 65 00 30 00 00 00 ,.d.f...,.e.0...
2c 00 65 00 31 00 00 00 2c 00 65 00 32 00 00 00 ,.e.1...,.e.2...
2c 00 65 00 33 00 00 00 2c 00 65 00 34 00 00 00 ,.e.3...,.e.4...
2c 00 65 00 35 00 00 00 2c 00 65 00 36 00 00 00 ,.e.5...,.e.6...
2c 00 65 00 37 00 00 00 2c 00 65 00 38 00 00 00 ,.e.7...,.e.8...
2c 00 65 00 39 00 00 00 2c 00 65 00 61 00 00 00 ,.e.9...,.e.a...
2c 00 65 00 62 00 00 00 2c 00 65 00 63 00 00 00 ,.e.b...,.e.c...
2c 00 65 00 64 00 00 00 2c 00 65 00 65 00 00 00 ,.e.d...,.e.e...
2c 00 65 00 66 00 00 00 2c 00 66 00 30 00 00 00 ,.e.f...,.f.0...
2c 00 66 00 31 00 00 00 2c 00 66 00 32 00 00 00 ,.f.1...,.f.2...
2c 00 66 00 33 00 00 00 2c 00 66 00 34 00 00 00 ,.f.3...,.f.4...
2c 00 66 00 35 00 00 00 2c 00 66 00 36 00 00 00 ,.f.5...,.f.6...
2c 00 66 00 37 00 00 00 2c 00 66 00 38 00 00 00 ,.f.7...,.f.8...
2c 00 66 00 39 00 00 00 2c 00 66 00 61 00 00 00 ,.f.9...,.f.a...
2c 00 66 00 62 00 00 00 2c 00 66 00 63 00 00 00 ,.f.b...,.f.c...
2c 00 66 00 64 00 00 00 2c 00 66 00 65 00 00 00 ,.f.d...,.f.e...
2c 00 66 00 66 00 00 00 0c 23 40 00 00 23 40 00 ,.f.f....#@..#@.
f4 22 40 00 ec 22 40 00 e0 22 40 00 d4 22 40 00 ."@.."@.."@.."@.
c8 22 40 00 bc 22 40 00 98 22 40 00 74 22 40 00 ."@.."@.."@.t"@.
4c 22 40 00 34 22 40 00 08 22 40 00 e0 21 40 00 L"@.4"@.."@..!@.
c4 21 40 00 80 21 40 00 12 00 00 00 12 00 00 00 .!@..!@.........
13 00 00 00 0b 00 00 00 16 00 00 00 14 00 00 00 ................
0e 00 00 00 21 00 00 00 70 21 40 00 68 21 40 00 ....!...p!@.h!@.
54 21 40 00 44 21 40 00 38 21 40 00 14 21 40 00 T!@.D!@.8!@..!@.
08 21 40 00 f4 20 40 00 d8 20 40 00 a4 20 40 00 .!@.. @.. @.. @.
6c 20 40 00 60 20 40 00 52 00 65 00 67 00 43 00 l @.` @.R.e.g.C.
6c 00 6f 00 73 00 65 00 4b 00 65 00 79 00 00 00 l.o.s.e.K.e.y...
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 65 00 6d 00 70 00 .f.o.r. .e.m.p.
74 00 79 00 20 00 72 00 65 00 67 00 69 00 73 00 t.y. .r.e.g.i.s.
74 00 72 00 79 00 20 00 6b 00 65 00 79 00 20 00 t.r.y. .k.e.y. .
27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 00 00 '.%.l.s.'.......
25 00 6c 00 73 00 2c 00 22 00 25 00 6c 00 73 00 %.l.s.,.".%.l.s.
22 00 2c 00 2c 00 25 00 25 00 52 00 45 00 47 00 ".,.,.%.%.R.E.G.
5f 00 4b 00 45 00 59 00 4f 00 4e 00 4c 00 59 00 _.K.E.Y.O.N.L.Y.
25 00 25 00 0d 00 0a 00 00 00 00 00 00 00 00 00 %.%.............
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 76 00 61 00 6c 00 .f.o.r. .v.a.l.
75 00 65 00 20 00 27 00 25 00 6c 00 73 00 27 00 u.e. .'.%.l.s.'.
20 00 6f 00 66 00 20 00 72 00 65 00 67 00 69 00 .o.f. .r.e.g.i.
73 00 74 00 72 00 79 00 20 00 6b 00 65 00 79 00 s.t.r.y. .k.e.y.
20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 .'.%.l.s.'.....
57 00 72 00 69 00 74 00 65 00 46 00 69 00 6c 00 W.r.i.t.e.F.i.l.
65 00 00 00 2c 00 22 00 22 00 0d 00 0a 00 00 00 e...,.".".......
2c 00 25 00 6c 00 75 00 20 00 3b 00 20 00 30 00 ,.%.l.u. .;. .0.
78 00 25 00 30 00 38 00 6c 00 78 00 0d 00 0a 00 x.%.0.8.l.x.....
00 00 00 00 22 00 0d 00 0a 00 00 00 22 00 00 00 ...."......."...
2c 00 22 00 00 00 00 00 3b 00 22 00 22 00 00 00 ,.".....;."."...
3b 00 0d 00 0a 00 00 00 2c 00 25 00 49 00 36 00 ;.......,.%.I.6.
34 00 75 00 20 00 3b 00 20 00 30 00 78 00 25 00 4.u. .;. .0.x.%.
30 00 31 00 36 00 49 00 36 00 34 00 78 00 0d 00 0.1.6.I.6.4.x...
0a 00 00 00 0d 00 0a 00 00 00 00 00 22 00 25 00 ............".%.
6c 00 73 00 22 00 2c 00 30 00 78 00 25 00 30 00 l.s.".,.0.x.%.0.
38 00 6c 00 78 00 00 00 2c 00 30 00 78 00 25 00 8.l.x...,.0.x.%.
30 00 38 00 6c 00 78 00 00 00 00 00 22 00 25 00 0.8.l.x.....".%.
6c 00 73 00 22 00 2c 00 25 00 25 00 52 00 45 00 l.s.".,.%.%.R.E.
47 00 5f 00 25 00 6c 00 73 00 25 00 25 00 00 00 G._.%.l.s.%.%...
2c 00 25 00 25 00 52 00 45 00 47 00 5f 00 25 00 ,.%.%.R.E.G._.%.
6c 00 73 00 25 00 25 00 00 00 00 00 25 00 6c 00 l.s.%.%.....%.l.
73 00 2c 00 22 00 25 00 6c 00 73 00 22 00 2c 00 s.,.".%.l.s.".,.
00 00 00 00 25 00 6c 00 73 00 2c 00 2c 00 00 00 ....%.l.s.,.,...
25 00 6c 00 73 00 2c 00 2c 00 2c 00 25 00 25 00 %.l.s.,.,.,.%.%.
52 00 45 00 47 00 5f 00 4b 00 45 00 59 00 4f 00 R.E.G._.K.E.Y.O.
4e 00 4c 00 59 00 25 00 25 00 0d 00 0a 00 00 00 N.L.Y.%.%.......
52 00 65 00 67 00 45 00 6e 00 75 00 6d 00 4b 00 R.e.g.E.n.u.m.K.
65 00 79 00 45 00 78 00 00 00 00 00 00 00 00 00 e.y.E.x.........
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 72 00 65 00 67 00 .f.o.r. .r.e.g.
69 00 73 00 74 00 72 00 79 00 20 00 6b 00 65 00 i.s.t.r.y. .k.e.
79 00 20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 y. .'.%.l.s.'...
00 00 00 00 52 00 65 00 67 00 45 00 6e 00 75 00 ....R.e.g.E.n.u.
6d 00 56 00 61 00 6c 00 75 00 65 00 00 00 00 00 m.V.a.l.u.e.....
52 00 65 00 67 00 4f 00 70 00 65 00 6e 00 4b 00 R.e.g.O.p.e.n.K.
65 00 79 00 45 00 78 00 00 00 00 00 0d 00 0a 00 e.y.E.x.........
5b 00 41 00 64 00 64 00 52 00 65 00 67 00 2e 00 [.A.d.d.R.e.g...
25 00 6c 00 73 00 5d 00 0d 00 0a 00 00 00 00 00 %.l.s.].........
4c 00 6f 00 63 00 61 00 6c 00 46 00 72 00 65 00 L.o.c.a.l.F.r.e.
65 00 00 00 0d 00 0a 00 3b 00 20 00 45 00 4f 00 e.......;. .E.O.
46 00 0d 00 0a 00 00 00 41 00 72 00 67 00 75 00 F.......A.r.g.u.
6d 00 65 00 6e 00 74 00 20 00 27 00 25 00 6c 00 m.e.n.t. .'.%.l.
73 00 27 00 20 00 69 00 73 00 20 00 6e 00 6f 00 s.'. .i.s. .n.o.
74 00 20 00 61 00 20 00 70 00 72 00 65 00 64 00 t. .a. .p.r.e.d.
65 00 66 00 69 00 6e 00 65 00 64 00 20 00 72 00 e.f.i.n.e.d. .r.
65 00 67 00 69 00 73 00 74 00 72 00 79 00 20 00 e.g.i.s.t.r.y. .
6b 00 65 00 79 00 20 00 6e 00 61 00 6d 00 65 00 k.e.y. .n.a.m.e.
21 00 0a 00 00 00 00 00 43 00 6c 00 6f 00 73 00 !.......C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 e.H.a.n.d.l.e...
41 00 64 00 6a 00 75 00 73 00 74 00 54 00 6f 00 A.d.j.u.s.t.T.o.
6b 00 65 00 6e 00 50 00 72 00 69 00 76 00 69 00 k.e.n.P.r.i.v.i.
6c 00 65 00 67 00 65 00 73 00 00 00 4f 00 70 00 l.e.g.e.s...O.p.
65 00 6e 00 50 00 72 00 6f 00 63 00 65 00 73 00 e.n.P.r.o.c.e.s.
73 00 54 00 6f 00 6b 00 65 00 6e 00 00 00 00 00 s.T.o.k.e.n.....
ff fe 3b 00 20 00 52 00 65 00 67 00 69 00 73 00 ..;. .R.e.g.i.s.
74 00 72 00 79 00 20 00 6f 00 66 00 20 00 27 00 t.r.y. .o.f. .'.
25 00 6c 00 73 00 27 00 0d 00 0a 00 0d 00 0a 00 %.l.s.'.........
5b 00 56 00 65 00 72 00 73 00 69 00 6f 00 6e 00 [.V.e.r.s.i.o.n.
5d 00 0d 00 0a 00 44 00 72 00 69 00 76 00 65 00 ].....D.r.i.v.e.
72 00 56 00 65 00 72 00 20 00 3d 00 20 00 25 00 r.V.e.r. .=. .%.
30 00 32 00 68 00 75 00 2f 00 25 00 30 00 32 00 0.2.h.u./.%.0.2.
68 00 75 00 2f 00 25 00 30 00 34 00 68 00 75 00 h.u./.%.0.4.h.u.
2c 00 25 00 30 00 32 00 68 00 75 00 2e 00 25 00 ,.%.0.2.h.u...%.
30 00 32 00 68 00 75 00 2e 00 25 00 30 00 32 00 0.2.h.u...%.0.2.
68 00 75 00 2e 00 25 00 30 00 33 00 68 00 75 00 h.u...%.0.3.h.u.
20 00 3b 00 20 00 55 00 54 00 43 00 0d 00 0a 00 .;. .U.T.C.....
50 00 72 00 6f 00 76 00 69 00 64 00 65 00 72 00 P.r.o.v.i.d.e.r.
20 00 20 00 3d 00 20 00 22 00 53 00 74 00 65 00 . .=. .".S.t.e.
66 00 61 00 6e 00 20 00 4b 00 61 00 6e 00 74 00 f.a.n. .K.a.n.t.
68 00 61 00 6b 00 22 00 0d 00 0a 00 53 00 69 00 h.a.k.".....S.i.
67 00 6e 00 61 00 74 00 75 00 72 00 65 00 20 00 g.n.a.t.u.r.e. .
3d 00 20 00 22 00 24 00 57 00 69 00 6e 00 64 00 =. .".$.W.i.n.d.
6f 00 77 00 73 00 20 00 4e 00 54 00 24 00 22 00 o.w.s. .N.T.$.".
0d 00 0a 00 0d 00 0a 00 5b 00 53 00 74 00 72 00 ........[.S.t.r.
69 00 6e 00 67 00 73 00 5d 00 0d 00 0a 00 52 00 i.n.g.s.].....R.
45 00 47 00 5f 00 53 00 5a 00 20 00 20 00 20 00 E.G._.S.Z. . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 3d 00 20 00 . . . . . .=. .
30 00 78 00 30 00 30 00 30 00 30 00 30 00 30 00 0.x.0.0.0.0.0.0.
30 00 30 00 0d 00 0a 00 52 00 45 00 47 00 5f 00 0.0.....R.E.G._.
42 00 49 00 4e 00 41 00 52 00 59 00 20 00 20 00 B.I.N.A.R.Y. . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 3d 00 20 00 30 00 78 00 30 00 . . .=. .0.x.0.
30 00 30 00 30 00 30 00 30 00 30 00 31 00 0d 00 0.0.0.0.0.0.1...
0a 00 52 00 45 00 47 00 5f 00 4b 00 45 00 59 00 ..R.E.G._.K.E.Y.
4f 00 4e 00 4c 00 59 00 20 00 20 00 20 00 20 00 O.N.L.Y. . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
3d 00 20 00 30 00 78 00 30 00 30 00 30 00 30 00 =. .0.x.0.0.0.0.
30 00 30 00 31 00 30 00 0d 00 0a 00 52 00 45 00 0.0.1.0.....R.E.
47 00 5f 00 4d 00 55 00 4c 00 54 00 49 00 5f 00 G._.M.U.L.T.I._.
53 00 5a 00 20 00 20 00 20 00 20 00 20 00 20 00 S.Z. . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 3d 00 20 00 30 00 . . . . .=. .0.
78 00 30 00 30 00 30 00 31 00 30 00 30 00 30 00 x.0.0.0.1.0.0.0.
30 00 0d 00 0a 00 52 00 45 00 47 00 5f 00 44 00 0.....R.E.G._.D.
57 00 4f 00 52 00 44 00 20 00 20 00 20 00 20 00 W.O.R.D. . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 3d 00 20 00 30 00 78 00 30 00 30 00 . .=. .0.x.0.0.
30 00 31 00 30 00 30 00 30 00 31 00 0d 00 0a 00 0.1.0.0.0.1.....
52 00 45 00 47 00 5f 00 45 00 58 00 50 00 41 00 R.E.G._.E.X.P.A.
4e 00 44 00 5f 00 53 00 5a 00 20 00 20 00 20 00 N.D._.S.Z. . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 3d 00 . . . . . . .=.
20 00 30 00 78 00 30 00 30 00 30 00 32 00 30 00 .0.x.0.0.0.2.0.
30 00 30 00 30 00 0d 00 0a 00 52 00 45 00 47 00 0.0.0.....R.E.G.
5f 00 4e 00 4f 00 4e 00 45 00 20 00 20 00 20 00 _.N.O.N.E. . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 3d 00 20 00 30 00 78 00 . . . .=. .0.x.
30 00 30 00 30 00 32 00 30 00 30 00 30 00 31 00 0.0.0.2.0.0.0.1.
0d 00 0a 00 52 00 45 00 47 00 5f 00 43 00 4f 00 ....R.E.G._.C.O.
4d 00 50 00 41 00 54 00 49 00 42 00 4c 00 45 00 M.P.A.T.I.B.L.E.
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 3d 00 20 00 30 00 78 00 30 00 30 00 30 00 .=. .0.x.0.0.0.
33 00 30 00 30 00 30 00 31 00 20 00 3b 00 20 00 3.0.0.0.1. .;. .
73 00 61 00 6d 00 65 00 20 00 61 00 73 00 20 00 s.a.m.e. .a.s. .
52 00 45 00 47 00 5f 00 42 00 49 00 4e 00 41 00 R.E.G._.B.I.N.A.
52 00 59 00 0d 00 0a 00 52 00 45 00 47 00 5f 00 R.Y.....R.E.G._.
44 00 57 00 4f 00 52 00 44 00 5f 00 4c 00 49 00 D.W.O.R.D._.L.I.
54 00 54 00 4c 00 45 00 5f 00 45 00 4e 00 44 00 T.T.L.E._.E.N.D.
49 00 41 00 4e 00 20 00 20 00 20 00 20 00 20 00 I.A.N. . . . . .
20 00 20 00 20 00 3d 00 20 00 30 00 78 00 30 00 . . .=. .0.x.0.
30 00 30 00 34 00 30 00 30 00 30 00 31 00 20 00 0.0.4.0.0.0.1. .
3b 00 20 00 73 00 61 00 6d 00 65 00 20 00 61 00 ;. .s.a.m.e. .a.
73 00 20 00 52 00 45 00 47 00 5f 00 44 00 57 00 s. .R.E.G._.D.W.
4f 00 52 00 44 00 0d 00 0a 00 52 00 45 00 47 00 O.R.D.....R.E.G.
5f 00 44 00 57 00 4f 00 52 00 44 00 5f 00 42 00 _.D.W.O.R.D._.B.
49 00 47 00 5f 00 45 00 4e 00 44 00 49 00 41 00 I.G._.E.N.D.I.A.
4e 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 N. . . . . . . .
20 00 20 00 20 00 20 00 3d 00 20 00 30 00 78 00 . . . .=. .0.x.
30 00 30 00 30 00 35 00 30 00 30 00 30 00 31 00 0.0.0.5.0.0.0.1.
0d 00 0a 00 52 00 45 00 47 00 5f 00 4c 00 49 00 ....R.E.G._.L.I.
4e 00 4b 00 20 00 20 00 20 00 20 00 20 00 20 00 N.K. . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 3d 00 20 00 30 00 78 00 30 00 30 00 30 00 .=. .0.x.0.0.0.
36 00 30 00 30 00 30 00 30 00 0d 00 0a 00 52 00 6.0.0.0.0.....R.
45 00 47 00 5f 00 52 00 45 00 53 00 4f 00 55 00 E.G._.R.E.S.O.U.
52 00 43 00 45 00 5f 00 4c 00 49 00 53 00 54 00 R.C.E._.L.I.S.T.
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 3d 00 20 00 . . . . . .=. .
30 00 78 00 30 00 30 00 30 00 38 00 30 00 30 00 0.x.0.0.0.8.0.0.
30 00 31 00 0d 00 0a 00 52 00 45 00 47 00 5f 00 0.1.....R.E.G._.
46 00 55 00 4c 00 4c 00 5f 00 52 00 45 00 53 00 F.U.L.L._.R.E.S.
4f 00 55 00 52 00 43 00 45 00 5f 00 44 00 45 00 O.U.R.C.E._.D.E.
53 00 43 00 52 00 49 00 50 00 54 00 4f 00 52 00 S.C.R.I.P.T.O.R.
20 00 20 00 20 00 3d 00 20 00 30 00 78 00 30 00 . . .=. .0.x.0.
30 00 30 00 39 00 30 00 30 00 30 00 31 00 0d 00 0.0.9.0.0.0.1...
0a 00 52 00 45 00 47 00 5f 00 52 00 45 00 53 00 ..R.E.G._.R.E.S.
4f 00 55 00 52 00 43 00 45 00 5f 00 52 00 45 00 O.U.R.C.E._.R.E.
51 00 55 00 49 00 52 00 45 00 4d 00 45 00 4e 00 Q.U.I.R.E.M.E.N.
54 00 53 00 5f 00 4c 00 49 00 53 00 54 00 20 00 T.S._.L.I.S.T. .
3d 00 20 00 30 00 78 00 30 00 30 00 30 00 61 00 =. .0.x.0.0.0.a.
30 00 30 00 30 00 31 00 0d 00 0a 00 52 00 45 00 0.0.0.1.....R.E.
47 00 5f 00 51 00 57 00 4f 00 52 00 44 00 20 00 G._.Q.W.O.R.D. .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 3d 00 20 00 30 00 . . . . .=. .0.
78 00 30 00 30 00 30 00 62 00 30 00 30 00 30 00 x.0.0.0.b.0.0.0.
31 00 0d 00 0a 00 52 00 45 00 47 00 5f 00 51 00 1.....R.E.G._.Q.
57 00 4f 00 52 00 44 00 5f 00 4c 00 49 00 54 00 W.O.R.D._.L.I.T.
54 00 4c 00 45 00 5f 00 45 00 4e 00 44 00 49 00 T.L.E._.E.N.D.I.
41 00 4e 00 20 00 20 00 20 00 20 00 20 00 20 00 A.N. . . . . . .
20 00 20 00 3d 00 20 00 30 00 78 00 30 00 30 00 . .=. .0.x.0.0.
30 00 62 00 30 00 30 00 30 00 31 00 20 00 3b 00 0.b.0.0.0.1. .;.
20 00 73 00 61 00 6d 00 65 00 20 00 61 00 73 00 .s.a.m.e. .a.s.
20 00 52 00 45 00 47 00 5f 00 51 00 57 00 4f 00 .R.E.G._.Q.W.O.
52 00 44 00 0d 00 0a 00 0d 00 0a 00 5b 00 44 00 R.D.........[.D.
65 00 66 00 61 00 75 00 6c 00 74 00 49 00 6e 00 e.f.a.u.l.t.I.n.
73 00 74 00 61 00 6c 00 6c 00 2e 00 4e 00 54 00 s.t.a.l.l...N.T.
5d 00 0d 00 0a 00 3b 00 41 00 64 00 64 00 52 00 ].....;.A.d.d.R.
65 00 67 00 20 00 3d 00 20 00 41 00 64 00 64 00 e.g. .=. .A.d.d.
52 00 65 00 67 00 2e 00 48 00 4b 00 55 00 2c 00 R.e.g...H.K.U.,.
41 00 64 00 64 00 52 00 65 00 67 00 2e 00 48 00 A.d.d.R.e.g...H.
4b 00 4c 00 4d 00 3b 00 41 00 64 00 64 00 52 00 K.L.M.;.A.d.d.R.
65 00 67 00 2e 00 48 00 4b 00 43 00 55 00 2c 00 e.g...H.K.C.U.,.
41 00 64 00 64 00 52 00 65 00 67 00 2e 00 48 00 A.d.d.R.e.g...H.
4b 00 43 00 52 00 0d 00 0a 00 00 00 25 00 6c 00 K.C.R.......%.l.
73 00 28 00 29 00 20 00 72 00 65 00 74 00 75 00 s.(.). .r.e.t.u.
72 00 6e 00 65 00 64 00 20 00 65 00 72 00 72 00 r.n.e.d. .e.r.r.
6f 00 72 00 20 00 25 00 6c 00 75 00 0a 00 00 00 o.r. .%.l.u.....
47 00 65 00 74 00 43 00 6f 00 6d 00 70 00 75 00 G.e.t.C.o.m.p.u.
74 00 65 00 72 00 4e 00 61 00 6d 00 65 00 00 00 t.e.r.N.a.m.e...
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
3a 00 20 00 73 00 74 00 61 00 6e 00 64 00 61 00 :. .s.t.a.n.d.a.
72 00 64 00 20 00 6f 00 75 00 74 00 70 00 75 00 r.d. .o.u.t.p.u.
74 00 20 00 69 00 73 00 20 00 6e 00 6f 00 74 00 t. .i.s. .n.o.t.
20 00 72 00 65 00 64 00 69 00 72 00 65 00 63 00 .r.e.d.i.r.e.c.
74 00 65 00 64 00 20 00 74 00 6f 00 20 00 61 00 t.e.d. .t.o. .a.
20 00 66 00 69 00 6c 00 65 00 21 00 0a 00 00 00 .f.i.l.e.!.....
46 00 6c 00 75 00 73 00 68 00 46 00 69 00 6c 00 F.l.u.s.h.F.i.l.
65 00 42 00 75 00 66 00 66 00 65 00 72 00 73 00 e.B.u.f.f.e.r.s.
00 00 00 00 47 00 65 00 74 00 53 00 74 00 64 00 ....G.e.t.S.t.d.
48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 00 00 H.a.n.d.l.e.....
4e 00 6f 00 20 00 61 00 72 00 67 00 75 00 6d 00 N.o. .a.r.g.u.m.
65 00 6e 00 74 00 73 00 3a 00 20 00 61 00 74 00 e.n.t.s.:. .a.t.
20 00 6c 00 65 00 61 00 73 00 74 00 20 00 6f 00 .l.e.a.s.t. .o.
6e 00 65 00 20 00 70 00 72 00 65 00 64 00 65 00 n.e. .p.r.e.d.e.
66 00 69 00 6e 00 65 00 64 00 20 00 72 00 65 00 f.i.n.e.d. .r.e.
67 00 69 00 73 00 74 00 72 00 79 00 20 00 6b 00 g.i.s.t.r.y. .k.
65 00 79 00 20 00 6e 00 61 00 6d 00 65 00 20 00 e.y. .n.a.m.e. .
6d 00 75 00 73 00 74 00 20 00 62 00 65 00 20 00 m.u.s.t. .b.e. .
67 00 69 00 76 00 65 00 6e 00 21 00 0a 00 00 00 g.i.v.e.n.!.....
43 00 6f 00 6d 00 6d 00 61 00 6e 00 64 00 4c 00 C.o.m.m.a.n.d.L.
69 00 6e 00 65 00 54 00 6f 00 41 00 72 00 67 00 i.n.e.T.o.A.r.g.
76 00 00 00 3c 00 75 00 6e 00 6b 00 6e 00 6f 00 v...<.u.n.k.n.o.
77 00 6e 00 3e 00 00 00 b9 79 37 9e 00 00 00 00 w.n.>....y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 38 3a 40 00 ............8:@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 f8 3a 00 00 00 00 00 00 .........:......
00 00 00 00 c2 3b 00 00 00 20 00 00 14 3b 00 00 .....;... ...;..
00 00 00 00 00 00 00 00 b0 3c 00 00 1c 20 00 00 .........<... ..
50 3b 00 00 00 00 00 00 00 00 00 00 cc 3c 00 00 P;...........<..
58 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 X ..............
00 00 00 00 00 00 00 00 66 3b 00 00 76 3b 00 00 ........f;..v;..
86 3b 00 00 96 3b 00 00 ae 3b 00 00 58 3b 00 00 .;...;...;..X;..
00 00 00 00 d0 3b 00 00 e0 3b 00 00 ec 3b 00 00 .....;...;...;..
fc 3b 00 00 0a 3c 00 00 16 3c 00 00 24 3c 00 00 .;...<...<..$<..
34 3c 00 00 48 3c 00 00 5c 3c 00 00 6e 3c 00 00 4<..H<..\<..n<..
7e 3c 00 00 92 3c 00 00 a2 3c 00 00 00 00 00 00 ~<...<...<......
be 3c 00 00 00 00 00 00 30 02 52 65 67 43 6c 6f .<......0.RegClo
73 65 4b 65 79 00 4f 02 52 65 67 45 6e 75 6d 4b seKey.O.RegEnumK
65 79 45 78 57 00 52 02 52 65 67 45 6e 75 6d 56 eyExW.R.RegEnumV
61 6c 75 65 57 00 61 02 52 65 67 4f 70 65 6e 4b alueW.a.RegOpenK
65 79 45 78 57 00 1f 00 41 64 6a 75 73 74 54 6f eyExW...AdjustTo
6b 65 6e 50 72 69 76 69 6c 65 67 65 73 00 f7 01 kenPrivileges...
4f 70 65 6e 50 72 6f 63 65 73 73 54 6f 6b 65 6e OpenProcessToken
00 00 41 44 56 41 50 49 33 32 2e 64 6c 6c 00 00 ..ADVAPI32.dll..
24 05 57 72 69 74 65 43 6f 6e 73 6f 6c 65 57 00 $.WriteConsoleW.
25 05 57 72 69 74 65 46 69 6c 65 00 02 02 47 65 %.WriteFile...Ge
74 4c 61 73 74 45 72 72 6f 72 00 00 19 01 45 78 tLastError....Ex
69 74 50 72 6f 63 65 73 73 00 48 03 4c 6f 63 61 itProcess.H.Loca
6c 46 72 65 65 00 52 00 43 6c 6f 73 65 48 61 6e lFree.R.CloseHan
64 6c 65 00 77 02 47 65 74 53 79 73 74 65 6d 54 dle.w.GetSystemT
69 6d 65 00 8f 01 47 65 74 43 6f 6d 70 75 74 65 ime...GetCompute
72 4e 61 6d 65 57 00 00 57 01 46 6c 75 73 68 46 rNameW..W.FlushF
69 6c 65 42 75 66 66 65 72 73 00 00 87 01 47 65 ileBuffers....Ge
74 43 6f 6d 6d 61 6e 64 4c 69 6e 65 57 00 64 02 tCommandLineW.d.
47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 c0 01 GetStdHandle....
47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65 73 GetCurrentProces
73 00 73 04 53 65 74 4c 61 73 74 45 72 72 6f 72 s.s.SetLastError
00 00 44 03 4c 6f 63 61 6c 41 6c 6c 6f 63 00 00 ..D.LocalAlloc..
4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 KERNEL32.dll..5.
77 76 73 70 72 69 6e 74 66 57 00 00 55 53 45 52 wvsprintfW..USER
33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 32.dll..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file REGISTRY.TXT
created in
step 3. to recreate the console application
Registry INF Dumper:
CERTUTIL.EXE /DecodeHex /V REGISTRY.TXT REGISTRY.COM
Input Length = 50048 Output Length = 11776 CertUtil: -decodehex command completed successfully.
portable executableimage files, i.e. applications, (resource) DLLs, drivers etc., print their metadata and information representable as text in UTF-16LE encoding on
standard output(which must be redirected to a file or piped into an application that reads from
standard input, like Clip, Find or More).
RESOURCE.COM ‹image file name› >‹output file name› RESOURCE.COM ‹image file name› | CLIP.COM RESOURCE.COM ‹image file name› | MORE.COM
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and RESOURCE.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
is not supported!
The MSDN article Console Handles provides background information.
canonicalvariant uses the Win32 function
LoadLibraryEx()
to load an arbitrary portable executableimage file into memory, then either the functions
EnumResourceTypes()
,
EnumResourceNames()
and
EnumResourceLanguages()
or the functions
EnumResourceTypesEx()
,
EnumResourceNamesEx()
and
EnumResourceLanguagesEx()
to enumerate all
resources,
followed by
FindResourceEx()
,
SizeofResource()
,
LoadResource()
and
LockResource()
to provide access to them, and finally
FreeLibrary()
to unload the module.
EnumResTypeProc()
EnumResNameProc()
EnumResLangProc()
FreeResource()
Note: the portable executable
image file is
located via
DLL search order!
Caveat: on Windows Vista and later
versions of Windows NT, these Win32
functions load and enumerate the
MUI resource
DLLs
of a (language-neutral) portable executable
image file.
customvariant uses the Win32 functions
CreateFile()
,
CreateFileMapping()
and
MapViewOfFile()
to open an arbitrary file for reading and mapping it into memory,
accesses the structures IMAGE_DOS_HEADER
,
IMAGE_FILE_HEADER
,
IMAGE_NT_HEADERS
,
IMAGE_OPTIONAL_HEADER
plus
IMAGE_SECTION_HEADER
which describe portable executableimage files to locate the
.rsrc
section, then calls its custom(recursive) function
Resource()
to enumerate and access all
resources;
finally it uses the Win32 functions
UnmapViewOfFile()
and
CloseHandle()
to unmap the file from memory and close it.
The MSDN
articles
PE Format,
Peering Inside the PE: A Tour of the Win32 Portable Executable File Format,
An In-Depth Look into the Win32 Portable Executable File Format
and
An In-Depth Look into the Win32 Portable Executable File Format, Part 2
document and explain the layout and the structures of
portable executable
image files.
Create the text file RESOURCE.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#define memcpy __movsb
#define wmemcpy __movsw
#ifndef MESSAGE_RESOURCE_ANSI
#define MESSAGE_RESOURCE_ANSI 0
#endif
#ifndef RT_MENUEX
#define RT_MENUEX MAKEINTRESOURCE(13)
#endif
#ifndef RT_NAMETABLE
#define RT_NAMETABLE MAKEINTRESOURCE(15)
#endif
#ifndef RT_DIALOGEX
#define RT_DIALOGEX MAKEINTRESOURCE(18)
#endif
#ifndef RT_DLGINIT
#define RT_DLGINIT MAKEINTRESOURCE(240)
#endif
#ifndef RT_TOOLBAR
#define RT_TOOLBAR MAKEINTRESOURCE(241)
#endif
#ifndef RT_LOCALE
#define RT_LOCALE MAKEINTRESOURCE(255)
#endif
#define VS_BINARY 0U
#define VS_TEXT 1U
typedef struct _VS_VERSIONINFO
{
WORD wSize; // size of 'VERSION' resource
WORD wCount; // = sizeof(VS_FIXEDFILEINFO)
// (number of bytes in binary value)
WORD wType; // = VS_BINARY
WCHAR szKey[16]; // = L"VS_VERSION_INFO"
WORD wPadding; // = 0 (alignment to DWORD)
#if 0
DWORD dwValue[13];
#else
VS_FIXEDFILEINFO vsFFI;
#endif
} VS_VERSIONINFO;
typedef struct _VS_STRINGFILEINFO
{
WORD wSize; // size of VS_STRINGFILEINFO, including all
// subordinate VS_STRINGTABLEs and their VS_STRINGs
WORD wCount; // = 0 (number of characters in string value,
// including the terminating NUL character)
WORD wType; // = VS_TEXT
WCHAR szKey[15]; // = L"StringFileInfo"
// (alignment to DWORD not necessary here)
// WCHAR szValue[0]; // NO value!
} VS_STRINGFILEINFO;
typedef struct _VS_STRINGTABLE
{
WORD wSize; // size of VS_STRINGTABLE and all subordinate VS_STRINGs
WORD wCount; // = 0 (number of characters in string value,
// including the terminating NUL character)
WORD wType; // = VS_TEXT
WCHAR szKey[9]; // = L"040904B0"
// (alignment to DWORD not necessary here)
// WCHAR szValue[0]; // NO value!
} VS_STRINGTABLE;
typedef struct _VS_STRING
{
WORD wSize; // size of VS_STRING
WORD wCount; // = sizeof(szValue) / sizeof(*szValue)
// (number of characters in string value,
// including the terminating NUL character)
WORD wType; // = VS_TEXT
WCHAR szKey[9]; // = L"Comments"
// (mandatory key names are L"CompanyName",
// L"FileDescription", L"FileVersion",
// L"InternalName", L"OriginalFilename",
// L"ProductName", L"ProductVersion";
// optional key names are L"Comments",
// L"LegalCopyright", L"LegalTrademarks",
// L"OleSelfRegister", L"PrivateBuild",
// L"SpecialBuild")
// (alignment to DWORD not necessary here)
WCHAR szValue[ANYSIZE_ARRAY]; // = L"..."
WORD wPadding; // = 0 (alignment to DWORD)
} VS_STRING;
typedef struct _VS_VARFILEINFO
{
WORD wSize; // size of VS_VARFILEINFO and subordinate VS_VAR
WORD wCount; // = 0 (number of characters in string value,
// including the terminating NUL character)
WORD wType; // = VS_TEXT
WCHAR szKey[12]; // = L"VarFileInfo"
WORD wPadding; // = 0 (alignment to DWORD)
// WCHAR szValue[0]; // NO value!
} VS_VARFILEINFO;
typedef struct _VS_VAR
{
WORD wSize; // = sizeof(VS_VAR)
WORD wCount; // = sizeof(dwValue)
// (number of bytes in binary value)
WORD wType; // = VS_BINARY
WCHAR szKey[12]; // = L"Translation"
WORD wPadding; // = 0 (alignment to DWORD)
DWORD dwValue[ANYSIZE_ARRAY]; // = {0x04B00409, ...}
// (pairs of codepage and language ids)
} VS_VAR;
typedef struct _MUI_RESOURCE
{
DWORD dwSignature; // = 0xFECDFECD
DWORD dwSize; // size of "MUI" resource configuration data
DWORD dwVersion; // = 0x00010000
DWORD dwUnknown;
DWORD dwFileType; // = 0x00000011: LN, language-neutral main file
// = 0x00000012: MUI, language-specific satellite file
DWORD dwSystemAttributes;
DWORD dwFallbackLocation; // = 0x00000000: none
// = 0x00000001: internal
// = 0x00000002: external
BYTE bServiceChecksum[16];
BYTE bMainChecksum[16];
DWORD dwReserved[6];
DWORD dwTypeNameMainOffset; // offset and size of named resource types
DWORD dwTypeNameMainSize; // in main file (MULTI_SZ list)
DWORD dwTypeIDMainOffset; // offset and size of unnamed resource types
DWORD dwTypeIDMainSize; // in main file (DWORD array)
DWORD dwTypeNameMUIOffset; // offset and size of named resource types
DWORD dwTypeNameMUISize; // in satellite file (MULTI_SZ list)
DWORD dwTypeIDMUIOffset; // offset and size of unnamed resource types
DWORD dwTypeIDMUISize; // in satellite file (DWORD array)
DWORD dwLanguageNameOffset; // offset and size of language string
DWORD dwLanguageNameSize;
DWORD dwFallbackNameOffset; // offset and size of (ultimate) fallback
DWORD dwFallbackNameSize; // language string
DWORD dwPadding;
// DWORD dwData[0];
} MUI_RESOURCE;
#define MUI_RESOURCE_SIGNATURE 0xFECDFECDUL
#define MUI_RESOURCE_FILETYPE_MAIN 0x00000011UL
#define MUI_RESOURCE_FILETYPE_SATELLITE 0x00000012UL
#define MUI_RESOURCE_FALLBACK_NONE 0x00000000UL
#define MUI_RESOURCE_FALLBACK_INTERNAL 0x00000001UL
#define MUI_RESOURCE_FALLBACK_EXTERNAL 0x00000002UL
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(safebuffers)
BOOL CDECL PrintFormat(HANDLE hFile, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
LPBYTE lpOutput;
DWORD dwOutput;
DWORD dwFile;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
dwOutput *= sizeof(*szOutput);
lpOutput = (LPBYTE) szOutput;
do
{
if (!WriteFile(hFile, lpOutput, dwOutput, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpOutput += dwFile;
dwOutput -= dwFile;
} while (dwOutput != 0);
return TRUE;
}
#define PrintString(HANDLE, LITERAL) PrintDirect(HANDLE, LITERAL, sizeof(LITERAL) / sizeof(*LITERAL) - 1)
__inline
BOOL WINAPI PrintDirect(HANDLE hFile, LPCWSTR lpString, DWORD dwString)
{
DWORD dwFile;
dwString *= sizeof(*lpString);
do
{
if (!WriteFile(hFile, lpString, dwString, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpString = (LPCWSTR) ((LPBYTE) lpString + dwFile);
dwString -= dwFile;
} while (dwString != 0);
return TRUE;
}
const LPCWSTR szDayOfWeek[7] = {L"Sunday",
L"Monday",
L"Tuesday",
L"Wednesday",
L"Thursday",
L"Friday",
L"Saturday"};
const LPCWSTR szFileOSHigh[] = {L"Unknown", // VOS_UNKNOWN
L"MS-DOS", // VOS_DOS
L"OS/2 (16-bit)", // VOS_OS216
L"OS/2 (32-bit)", // VOS_OS232
L"Windows NT", // VOS_NT
L"Windows CE"}; // VOS_WINCE
const LPCWSTR szFileOSLow[] = {L"Base", // VOS__BASE
L"Windows (16-bit)", // VOS__WINDOWS16
L"Presentation Manager (16-bit)", // VOS__PM16
L"Presentation Manager (32-bit)", // VOS__PM32
L"Windows (32-bit)"}; // VOS__WINDOWS32
const LPCWSTR szFileType[] = {L"Unknown", // VFT_UNKNOWN
L"Application", // VFT_APP
L"DLL", // VFT_DLL
L"Driver", // VFT_DRV
L"Font", // VFT_FONT
L"Virtual Device", // VFT_VXD
L"Undefined",
L"Static Library"}; // VFT_STATIC_LIB
const LPCWSTR szFileDriverType[] = {L"Unknown", // VFT2_UNKNOWN
L"Printer", // VFT2_DRV_PRINTER
L"Keyboard", // VFT2_DRV_KEYBOARD
L"Language", // VFT2_DRV_LANGUAGE
L"Display", // VFT2_DRV_DISPLAY
L"Mouse", // VFT2_DRV_MOUSE
L"Network", // VFT2_DRV_NETWORK
L"System", // VFT2_DRV_SYSTEM
L"Installable", // VFT2_DRV_INSTALLABLE
L"Sound", // VFT2_DRV_SOUND
L"Communications", // VFT2_DRV_COMM
L"Input Method", // VFT2_DRV_INPUTMETHOD
L"Versioned Printer"}; // VFT2_DRV_VERSIONED_PRINTER
const LPCWSTR szFileFontType[] = {L"Unknown", // VFT2_UNKNOWN
L"Raster", // VFT2_FONT_RASTER
L"Vector", // VFT2_FONT_VECTOR
L"TrueType"}; // VFT2_FONT_TRUETYPE
__inline
LPCWSTR WINAPI MUIFileType(DWORD dwFileType)
{
switch (dwFileType)
{
case MUI_RESOURCE_FILETYPE_MAIN:
return L"LN: language-neutral main file";
case MUI_RESOURCE_FILETYPE_SATELLITE:
return L"MUI: language-specific satellite file";
default:
return NULL;
}
}
__inline
LPCWSTR WINAPI MUIFallbackLocation(DWORD dwFallbackLocation)
{
switch (dwFallbackLocation)
{
case MUI_RESOURCE_FALLBACK_NONE:
return L"none";
case MUI_RESOURCE_FALLBACK_INTERNAL:
return L"internal";
case MUI_RESOURCE_FALLBACK_EXTERNAL:
return L"external";
default:
return NULL;
}
}
LPCWSTR WINAPI ResourceTypeName(WORD wResType)
{
switch (wResType)
{
case RT_CURSOR: // MAKEINTRESOURCE(1)
return L"RT_CURSOR";
case RT_BITMAP: // MAKEINTRESOURCE(2)
return L"RT_BITMAP";
case RT_ICON: // MAKEINTRESOURCE(3)
return L"RT_ICON";
case RT_MENU: // MAKEINTRESOURCE(4)
return L"RT_MENU";
case RT_DIALOG: // MAKEINTRESOURCE(5)
return L"RT_DIALOG";
case RT_STRING: // MAKEINTRESOURCE(6)
#if 1
return L"RT_STRING";
#else
return L"RT_STRINGTABLE";
#endif
case RT_FONTDIR: // MAKEINTRESOURCE(7)
return L"RT_FONTDIR";
case RT_FONT: // MAKEINTRESOURCE(8)
return L"RT_FONT";
case RT_ACCELERATOR: // MAKEINTRESOURCE(9)
return L"RT_ACCELERATOR";
case RT_RCDATA: // MAKEINTRESOURCE(10)
return L"RT_RCDATA";
case RT_MESSAGETABLE: // MAKEINTRESOURCE(11)
return L"RT_MESSAGETABLE";
case RT_GROUP_CURSOR: // MAKEINTRESOURCE(12)
return L"RT_GROUP_CURSOR";
case RT_MENUEX: // MAKEINTRESOURCE(13)
return L"RT_MENUEX";
case RT_GROUP_ICON: // MAKEINTRESOURCE(14)
return L"RT_GROUP_ICON";
case RT_NAMETABLE: // MAKEINTRESOURCE(15)
return L"RT_NAMETABLE";
case RT_VERSION: // MAKEINTRESOURCE(16)
return L"RT_VERSION";
case RT_DLGINCLUDE: // MAKEINTRESOURCE(17)
return L"RT_DLGINCLUDE";
case RT_DIALOGEX: // MAKEINTRESOURCE(18)
return L"RT_DIALOGEX";
case RT_PLUGPLAY: // MAKEINTRESOURCE(19)
return L"RT_PLUGPLAY";
case RT_VXD: // MAKEINTRESOURCE(20)
return L"RT_VXD";
case RT_ANICURSOR: // MAKEINTRESOURCE(21)
return L"RT_ANICURSOR";
case RT_ANIICON: // MAKEINTRESOURCE(22)
return L"RT_ANIICON";
case RT_HTML: // MAKEINTRESOURCE(23)
return L"RT_HTML";
case RT_MANIFEST: // MAKEINTRESOURCE(24)
return L"RT_MANIFEST";
case RT_DLGINIT: // MAKEINTRESOURCE(240)
return L"RT_DLGINIT";
case RT_TOOLBAR: // MAKEINTRESOURCE(241)
return L"RT_TOOLBAR";
case RT_LOCALE: // MAKEINTRESOURCE(255)
return L"RT_LOCALE";
default:
return NULL;
}
}
__declspec(safebuffers)
BOOL WINAPI EnumResLangProc(HMODULE hModule,
LPCWSTR lpType,
LPCWSTR lpName,
WORD wIDLanguage,
LPARAM lParam)
{
BOOL bOutput;
HANDLE hOutput = ((HANDLE *) lParam)[1];
HANDLE hConsole = ((HANDLE *) lParam)[2];
HRSRC hResInfo; // address of an IMAGE_RESOURCE_DATA_ENTRY structure
HGLOBAL hResData;
DWORD dwResource;
LPVOID lpResource;
LPCWSTR lpUnicode;
DWORD dwUnicode;
DWORD dwValue;
DWORD dwBlock;
DWORD dwEntry;
DWORD dwKey;
DWORD dw;
WCHAR szLanguage[123];
#ifdef LOCALE
WCHAR szCountry[123];
#endif
WCHAR szFileFlags[sizeof(", Debug, Inferred, Patched, Pre-Release, Private Build, Special Build")];
LPWSTR lpFileFlags;
LPCWSTR lpFileOSLow, lpFileOSHigh;
LPCWSTR lpFileType, lpFileSubtype;
LPCWSTR lpValue;
FILETIME ft;
SYSTEMTIME st;
MUI_RESOURCE *lpMUI;
VS_VERSIONINFO *lpVersionInfo;
VS_STRINGTABLE *lpStringTable;
VS_STRING *lpString;
VS_VARFILEINFO *lpVarFileInfo;
VS_VAR *lpVar;
VS_STRINGFILEINFO *lpStringFileInfo;
MESSAGE_RESOURCE_DATA *lpTable;
MESSAGE_RESOURCE_BLOCK *lpBlock;
MESSAGE_RESOURCE_ENTRY *lpEntry;
hResInfo = FindResourceEx(hModule, lpType, lpName, wIDLanguage);
if (hResInfo == NULL)
PrintConsole(hConsole,
L"FindResourceEx() returned error %lu\n",
GetLastError());
else
{
#ifdef LOCALE
if (wIDLanguage == 0)
bOutput = PrintString(hOutput,
L"\t\tLanguageID: 0 = 0x0000 ; Neutral\r\n");
else
if ((GetLocaleInfo(MAKELCID(wIDLanguage, SORT_DEFAULT), LOCALE_SENGLANGUAGE, szLanguage, sizeof(szLanguage) / sizeof(*szLanguage)) == 0)
|| (GetLocaleInfo(MAKELCID(wIDLanguage, SORT_DEFAULT), LOCALE_SENGCOUNTRY, szCountry, sizeof(szCountry) / sizeof(*szCountry)) == 0))
{
PrintConsole(hConsole,
L"GetLocaleInfo() returned error %lu\n",
GetLastError());
bOutput = PrintFormat(hOutput,
L"\t\tLanguageID: %hu = 0x%04hX\r\n",
wIDLanguage, wIDLanguage);
}
else
bOutput = PrintFormat(hOutput,
L"\t\tLanguageID: %hu = 0x%04hX ; %ls, %ls\r\n",
wIDLanguage, wIDLanguage, szLanguage, szCountry);
#else
if (VerLanguageName(wIDLanguage, szLanguage, sizeof(szLanguage) / sizeof(*szLanguage)) == 0)
{
PrintConsole(hConsole,
L"VerLanguageName() returned 0\n");
bOutput = PrintFormat(hOutput,
L"\t\tLanguageID: %hu = 0x%04hX\r\n",
wIDLanguage, wIDLanguage);
}
else
bOutput = PrintFormat(hOutput,
L"\t\tLanguageID: %hu = 0x%04hX ; %ls\r\n",
wIDLanguage, wIDLanguage, szLanguage);
#endif
dwResource = SizeofResource(hModule, hResInfo);
if (dwResource == 0)
PrintConsole(hConsole,
L"SizeofResource() returned error %lu\n",
GetLastError());
bOutput &= PrintFormat(hOutput,
L"\t\t\tInfo Handle = 0x%p: Length = %lu\r\n",
hResInfo, dwResource);
hResData = LoadResource(hModule, hResInfo);
if (hResData == NULL)
PrintConsole(hConsole,
L"LoadResource() returned error %lu\n",
GetLastError());
else
{
lpResource = LockResource(hResData);
if (lpResource == NULL)
PrintConsole(hConsole,
L"LockResource() returned NULL\n");
else
{
bOutput &= PrintFormat(hOutput,
L"\t\t\tData Handle = 0x%p: Offset = 0x%08lX\r\n",
hResData,
(DWORD) ((BYTE *) lpResource - (BYTE *) hModule) + ((DWORD) ((BYTE *) lpResource - (BYTE *) hModule) & 1));
if (IS_INTRESOURCE(lpType))
switch ((WORD) lpType)
{
case RT_STRING:
// NOTE: every RT_STRING resource, a STRINGTABLE, holds 16 UNICODE strings
// IMAGE_RESOURCE_DIR_STRING_U of up to 65535 characters each, which
// need not be L'\0' terminated and may contain L'\0', with their
// character count (including the terminating L'\0' if present)
// stored in front of them.
for (lpUnicode = lpResource,
dwUnicode = 16; dwUnicode > 0; dwUnicode--,
lpUnicode += 1 + lpUnicode[0])
{
dw = lpUnicode[0];
if (dw == 0)
continue;
bOutput &= PrintFormat(hOutput,
L"\t\t\t%6lu:\tLength = %lu\r\n"
L"\t\t\t\tString = ",
IS_INTRESOURCE(lpName) ? (WORD) lpName * 16 - dwUnicode : 16 - dwUnicode, dw);
while (lpUnicode[dw] == L'\0')
dw--;
bOutput &= PrintDirect(hOutput, lpUnicode + 1, dw);
bOutput &= PrintString(hOutput, L"\r\n");
}
break;
case RT_MESSAGETABLE:
for (lpTable = lpResource,
lpBlock = lpTable->Blocks,
dwBlock = 0; dwBlock < lpTable->NumberOfBlocks; dwBlock++)
{
if (lpBlock[dwBlock].LowId == lpBlock[dwBlock].HighId)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%6lu:\tMessage ID 0x%08lX\r\n",
dwBlock, lpBlock[dwBlock].LowId);
else
bOutput &= PrintFormat(hOutput,
L"\t\t\t%6lu:\tMessage IDs 0x%08lX to 0x%08lX\r\n",
dwBlock, lpBlock[dwBlock].LowId, lpBlock[dwBlock].HighId);
for (lpEntry = (MESSAGE_RESOURCE_ENTRY *) ((BYTE *) lpTable + lpBlock[dwBlock].OffsetToEntries),
dwEntry = lpBlock[dwBlock].LowId; dwEntry <= lpBlock[dwBlock].HighId; dwEntry++,
lpEntry = (MESSAGE_RESOURCE_ENTRY *) ((BYTE *) lpEntry + lpEntry->Length))
if (lpEntry->Flags == MESSAGE_RESOURCE_UNICODE)
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t0x%08lX:\tSize = %hu\r\n"
L"\t\t\t\t\t\tText = %.999ls\r\n",
dwEntry, lpEntry->Length, lpEntry->Text);
else if (lpEntry->Flags == MESSAGE_RESOURCE_ANSI)
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t0x%08lX:\tSize = %hu\r\n"
L"\t\t\t\t\t\tText = %.999hs\r\n",
dwEntry, lpEntry->Length, lpEntry->Text);
else
PrintConsole(hConsole,
L"Text type %hu of message 0x%08lX neither UNICODE nor ANSI!\n",
lpEntry->Flags, dwEntry);
}
break;
case RT_VERSION:
lpVersionInfo = lpResource;
if (lpVersionInfo->wSize != dwResource)
PrintConsole(hConsole,
L"Size %hu in \'VERSIONINFO\' differs from size of \'VERSION\' resource!\n",
lpVersionInfo->wSize);
if (lpVersionInfo->wCount != sizeof(VS_FIXEDFILEINFO))
PrintConsole(hConsole,
L"Count %hu in \'VERSIONINFO\' differs from size %lu of \'VS_FIXEDFILEINFO\' structure!\n",
lpVersionInfo->wCount, sizeof(VS_FIXEDFILEINFO));
if (lpVersionInfo->wType != VS_BINARY)
PrintConsole(hConsole,
L"Type %hu in \'VERSIONINFO\' not \'VS_BINARY\'!\n",
lpVersionInfo->wType);
#if 0
if (wcscmp(lpVersionInfo->szKey, L"VS_VERSION_INFO") != 0)
#elif 0
if (wmemcmp(lpVersionInfo->szKey, L"VS_VERSION_INFO", sizeof("VS_VERSION_INFO")) != 0)
#else
if (memcmp(lpVersionInfo->szKey, L"VS_VERSION_INFO", sizeof(L"VS_VERSION_INFO")) != 0)
#endif
PrintConsole(hConsole,
L"Key string \"%ls\" in \'VERSIONINFO\' not \"VS_VERSION_INFO\"!\n",
lpVersionInfo->szKey);
if (lpVersionInfo->wPadding != 0)
PrintConsole(hConsole,
L"Padding %hu in \'VERSIONINFO\' not 0!\n",
lpVersionInfo->wPadding);
if (lpVersionInfo->vsFFI.dwSignature != VS_FFI_SIGNATURE)
PrintConsole(hConsole,
L"Signature 0x%08lX in \'FIXEDFILEINFO\' not 0x%08lX!\n",
lpVersionInfo->vsFFI.dwSignature, VS_FFI_SIGNATURE);
if (lpVersionInfo->vsFFI.dwStrucVersion != VS_FFI_STRUCVERSION)
PrintConsole(hConsole,
L"Structure version 0x%08lX in \'FIXEDFILEINFO\' not 0x%08lX!\n",
lpVersionInfo->vsFFI.dwStrucVersion, VS_FFI_STRUCVERSION);
if ((lpVersionInfo->vsFFI.dwFileFlags & lpVersionInfo->vsFFI.dwFileFlagsMask) == 0)
#ifdef _CRT_SECURE_NO_WARNINGS
wcscpy(szFileFlags, L", None");
#elif 0
wmemcpy(szFileFlags, L", None", sizeof(", None"));
#else
memcpy(szFileFlags, L", None", sizeof(L", None"));
#endif
else
{
#ifdef _CRT_SECURE_NO_WARNINGS
*szFileFlags = L'\0';
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_DEBUG) == VS_FF_DEBUG)
wcscat(szFileFlags, L", Debug");
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_INFOINFERRED) == VS_FF_INFOINFERRED)
wcscat(szFileFlags, L", Inferred");
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_PATCHED) == VS_FF_PATCHED)
wcscat(szFileFlags, L", Patched");
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_PRERELEASE) == VS_FF_PRERELEASE)
wcscat(szFileFlags, L", Pre-Release");
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_PRIVATEBUILD) == VS_FF_PRIVATEBUILD)
wcscat(szFileFlags, L", Private Build");
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_SPECIALBUILD) == VS_FF_SPECIALBUILD)
wcscat(szFileFlags, L", Special Build");
#else // _CRT_SECURE_NO_WARNINGS
lpFileFlags = szFileFlags;
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_DEBUG) == VS_FF_DEBUG)
{
memcpy(lpFileFlags, L", Debug", sizeof(L", Debug"));
lpFileFlags += sizeof(" Debug");
}
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_INFOINFERRED) == VS_FF_INFOINFERRED)
{
memcpy(lpFileFlags, L", Inferred", sizeof(L", Inferred"));
lpFileFlags += sizeof(" Inferred");
}
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_PATCHED) == VS_FF_PATCHED)
{
memcpy(lpFileFlags, L", Patched", sizeof(L", Patched"));
lpFileFlags += sizeof(" Patched");
}
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_PRERELEASE) == VS_FF_PRERELEASE)
{
memcpy(lpFileFlags, L", Pre-Release", sizeof(L", Pre-Release"));
lpFileFlags += sizeof(" Pre-Release");
}
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_PRIVATEBUILD) == VS_FF_PRIVATEBUILD)
{
memcpy(lpFileFlags, L", Private Build", sizeof(L", Private Build"));
lpFileFlags += sizeof(" Private Build");
}
if ((lpVersionInfo->vsFFI.dwFileFlags & VS_FF_SPECIALBUILD) == VS_FF_SPECIALBUILD)
{
memcpy(lpFileFlags, L", Special Build", sizeof(L", Special Build"));
lpFileFlags += sizeof(" Special Build");
}
#endif // _CRT_SECURE_NO_WARNINGS
}
if (lpVersionInfo->vsFFI.dwFileType < sizeof(szFileType) / sizeof(*szFileType))
lpFileType = szFileType[lpVersionInfo->vsFFI.dwFileType];
else
lpFileType = L"Undefined";
if ((lpVersionInfo->vsFFI.dwFileType == VFT_DRV)
&& (lpVersionInfo->vsFFI.dwFileSubtype < sizeof(szFileDriverType) / sizeof(*szFileDriverType)))
lpFileSubtype = szFileDriverType[lpVersionInfo->vsFFI.dwFileSubtype];
else if ((lpVersionInfo->vsFFI.dwFileType == VFT_FONT)
&& (lpVersionInfo->vsFFI.dwFileSubtype < sizeof(szFileFontType) / sizeof(*szFileFontType)))
lpFileSubtype = szFileFontType[lpVersionInfo->vsFFI.dwFileSubtype];
else
lpFileSubtype = L"Undefined";
if (HIWORD(lpVersionInfo->vsFFI.dwFileOS) < sizeof(szFileOSHigh) / sizeof(*szFileOSHigh))
lpFileOSHigh = szFileOSHigh[HIWORD(lpVersionInfo->vsFFI.dwFileOS)];
else
lpFileOSHigh = L"Undefined";
if (LOWORD(lpVersionInfo->vsFFI.dwFileOS) < sizeof(szFileOSLow) / sizeof(*szFileOSLow))
lpFileOSLow = szFileOSLow[LOWORD(lpVersionInfo->vsFFI.dwFileOS)];
else
lpFileOSLow = L"Undefined";
bOutput &= PrintFormat(hOutput,
L"\t\t\tFixedFileInfo:\r\n"
L"\t\t\t\tProduct Version = %hu.%hu:%hu.%hu\r\n"
L"\t\t\t\tModule Version = %hu.%hu:%hu.%hu\r\n"
L"\t\t\t\tModule Flags = %ls\r\n"
L"\t\t\t\tModule Type = %ls\r\n"
L"\t\t\t\tModule Subtype = %ls\r\n",
HIWORD(lpVersionInfo->vsFFI.dwProductVersionMS), LOWORD(lpVersionInfo->vsFFI.dwProductVersionMS),
HIWORD(lpVersionInfo->vsFFI.dwProductVersionLS), LOWORD(lpVersionInfo->vsFFI.dwProductVersionLS),
HIWORD(lpVersionInfo->vsFFI.dwFileVersionMS), LOWORD(lpVersionInfo->vsFFI.dwFileVersionMS),
HIWORD(lpVersionInfo->vsFFI.dwFileVersionLS), LOWORD(lpVersionInfo->vsFFI.dwFileVersionLS),
szFileFlags + 2,
lpFileType,
lpFileSubtype);
if ((lpVersionInfo->vsFFI.dwFileDateMS == 0)
&& (lpVersionInfo->vsFFI.dwFileDateLS == 0))
bOutput &= PrintString(hOutput, L"\t\t\t\tModule Time Stamp = None\r\n");
else
{
ft.dwHighDateTime = lpVersionInfo->vsFFI.dwFileDateMS;
ft.dwLowDateTime = lpVersionInfo->vsFFI.dwFileDateLS;
if (!FileTimeToSystemTime(&ft, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
GetLastError());
else
bOutput &= PrintFormat(hOutput,
L"\t\t\t\tModule Time Stamp = %ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu.%03hu UTC\r\n",
szDayOfWeek[st.wDayOfWeek],
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
}
bOutput &= PrintFormat(hOutput,
L"\t\t\t\tTarget OS = %ls, %ls\r\n",
lpFileOSHigh, lpFileOSLow);
for (lpResource = (BYTE *) lpVersionInfo + lpVersionInfo->wSize,
lpVersionInfo += 1;
lpVersionInfo < (VS_VERSIONINFO *) lpResource;
lpVersionInfo = (VS_VERSIONINFO *) ((BYTE *) lpVersionInfo + lpVersionInfo->wSize + lpVersionInfo->wSize % sizeof(DWORD)))
#if 0
if (wcscmp(lpVersionInfo->szKey, L"StringFileInfo") == 0)
#elif 0
if (wmemcmp(lpVersionInfo->szKey, L"StringFileInfo", sizeof("StringFileInfo")) == 0)
#else
if (memcmp(lpVersionInfo->szKey, L"StringFileInfo", sizeof(L"StringFileInfo")) == 0)
#endif
{
lpStringFileInfo = (VS_STRINGFILEINFO *) lpVersionInfo;
#if 0
if (lpStringFileInfo->wSize % sizeof(DWORD) != 0)
PrintConsole(hConsole,
L"Size %hu in \'%ls\' not a multiple of 4!\n",
lpStringFileInfo->wSize, lpStringFileInfo->szKey);
#endif
if (lpStringFileInfo->wCount != 0)
PrintConsole(hConsole,
L"Count %hu in \'%ls\' not 0!\n",
lpStringFileInfo->wCount, lpStringFileInfo->szKey);
if (lpStringFileInfo->wType != VS_TEXT)
PrintConsole(hConsole,
L"Type %hu in \'%ls\' not \'VS_TEXT\'!\n",
lpStringFileInfo->wType, lpStringFileInfo->szKey);
bOutput &= PrintString(hOutput,
L"\t\t\tStringFileInfo:\r\n");
for (lpStringTable = (VS_STRINGTABLE *) (lpStringFileInfo + 1);
lpStringTable < (VS_STRINGTABLE *) ((BYTE *) lpStringFileInfo + lpStringFileInfo->wSize);
lpStringTable = (VS_STRINGTABLE *) ((BYTE *) lpStringTable + lpStringTable->wSize + lpStringTable->wSize % sizeof(DWORD)))
{
#if 0
if (lpStringTable->wSize % sizeof(DWORD) != 0)
PrintConsole(hConsole,
L"Size %hu in \'%ls\' not a multiple of 4!\n",
lpStringTable->wSize, lpStringTable->szKey);
#endif
if (lpStringTable->wCount != 0)
PrintConsole(hConsole,
L"Count %hu in \'%ls\' not 0!\n",
lpStringTable->wCount, lpStringTable->szKey);
if (lpStringTable->wType != VS_TEXT)
PrintConsole(hConsole,
L"Type %hu in \'%ls\' not \'VS_TEXT\'!\n",
lpStringTable->wType, lpStringTable->szKey);
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t%ls:\r\n",
lpStringTable->szKey);
for (lpString = (VS_STRING *) (lpStringTable + 1);
lpString < (VS_STRING *) ((BYTE *) lpStringTable + lpStringTable->wSize);
lpString = (VS_STRING *) ((BYTE *) lpString + lpString->wSize + lpString->wSize % sizeof(DWORD)))
{
#if 0
if (lpString->wSize % sizeof(DWORD) != 0)
PrintConsole(hConsole,
L"Size %hu in \'%ls\' not a multiple of 4!\n",
lpString->wSize, lpString->szKey);
#endif
if (lpString->wType != VS_TEXT)
PrintConsole(hConsole,
L"Type %hu in \'%ls\' not \'VS_TEXT\'!\n",
lpString->wType, lpString->szKey);
if (lpString->wCount != 0)
{
dwKey = wcslen(lpString->szKey);
lpValue = lpString->szKey + (dwKey + dwKey % 2 + 1);
if (lpString->wCount != wcslen(lpValue) + 1)
PrintConsole(hConsole,
L"Count %hu in \'%ls\' not equal number of characters in string!\n",
lpString->wCount, lpString->szKey);
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\t%-16ls = %ls\r\n",
lpString->szKey, lpValue);
}
else
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\t%-16ls =\r\n",
lpString->szKey);
}
}
}
#if 0
else if (wcscmp(lpVersionInfo->szKey, L"VarFileInfo") == 0)
#elif 0
else if (wmemcmp(lpVersionInfo->szKey, L"VarFileInfo", sizeof("VarFileInfo")) == 0)
#else
else if (memcmp(lpVersionInfo->szKey, L"VarFileInfo", sizeof(L"VarFileInfo")) == 0)
#endif
{
lpVarFileInfo = (VS_VARFILEINFO *) lpVersionInfo;
#if 0
if (lpVarFileInfo->wSize % sizeof(DWORD) != 0)
PrintConsole(hConsole,
L"Size %hu in \'%ls\' not a multiple of 4!\n",
lpVarFileInfo->wSize, lpVarFileInfo->szKey);
#endif
if (lpVarFileInfo->wCount != 0)
PrintConsole(hConsole,
L"Count %hu in \'%ls\' not 0!\n",
lpVarFileInfo->wCount, lpVarFileInfo->szKey);
if (lpVarFileInfo->wType != VS_TEXT)
PrintConsole(hConsole,
L"Type %hu in \'%ls\' not \'VS_TEXT\'!\n",
lpVarFileInfo->wType, lpVarFileInfo->szKey);
if (lpVarFileInfo->wPadding != 0)
PrintConsole(hConsole,
L"Padding %hu in \'%ls\' not 0!\n",
lpVarFileInfo->wPadding, lpVarFileInfo->szKey);
bOutput &= PrintString(hOutput,
L"\t\t\tVarFileInfo:\r\n");
lpVar = (VS_VAR *) (lpVarFileInfo + 1);
#if 0
if (wcscmp(lpVar->szKey, L"Translation") != 0)
#elif 0
if (wmemcmp(lpVar->szKey, L"Translation", sizeof("Translation")) != 0)
#else
if (memcmp(lpVar->szKey, L"Translation", sizeof(L"Translation")) != 0)
#endif
PrintConsole(hConsole,
L"Key string \"%ls\" in \'VAR\' not \"Translation\"!\n",
lpVar->szKey);
else
{
if (lpVar->wCount % sizeof(DWORD) != 0)
PrintConsole(hConsole,
L"Count %hu in \'%ls\' not a multiple of 4!\n",
lpVar->wCount, lpVar->szKey);
if (lpVar->wType != VS_BINARY)
PrintConsole(hConsole,
L"Type %hu in \'%ls\' not \'VS_BINARY\'!\n",
lpVar->wType, lpVar->szKey);
if (lpVar->wPadding != 0)
PrintConsole(hConsole,
L"Padding %hu in \'%ls\' not 0!\n",
lpVar->wPadding, lpVar->szKey);
bOutput &= PrintString(hOutput,
L"\t\t\t\tTranslation(s) =");
for (dw = 0; dw < lpVar->wCount / sizeof(DWORD); dw++)
bOutput &= PrintFormat(hOutput,
L" 0x%04hX:%hu",
LOWORD(lpVar->dwValue[dw]), HIWORD(lpVar->dwValue[dw]));
bOutput &= PrintString(hOutput, L"\r\n");
}
}
else
PrintConsole(hConsole,
L"Unknown key string \"%ls\" in \'VERSIONINFO\'!\n",
lpVersionInfo->szKey);
break;
case RT_HTML:
case RT_MANIFEST:
if (*(DWORD *) lpResource == 0xFFFE0000)
{
dwValue = 12001;
lpValue = L"32BE";
}
else if (*(DWORD *) lpResource == 0x0000FEFF)
{
dwValue = 12000;
lpValue = L"32LE";
}
else if (*(WORD *) lpResource == 0xFFFE)
{
dwValue = 1201;
lpValue = L"16BE";
}
else if (*(WORD *) lpResource == 0xFEFF)
{
dwValue = 1200;
lpValue = L"16LE";
}
else if ((*(DWORD *) lpResource & 0x00FFFFFF) == 0x00BFBBEF)
{
dwValue = CP_UTF8;
lpValue = L"8 (BOM)";
}
else if ((*(DWORD *) lpResource == 0x2B762F2B)
|| (*(DWORD *) lpResource == 0x2F762F2B)
|| (*(DWORD *) lpResource == 0x38762F2B)
|| (*(DWORD *) lpResource == 0x39762F2B))
{
dwValue = CP_UTF7;
lpValue = L"7";
}
else
{
dwValue = CP_UTF8;
lpValue = L"8";
}
bOutput &= PrintFormat(hOutput,
L"\t\t\tUTF-%-7ls = ",
lpValue);
dwUnicode = MultiByteToWideChar(dwValue,
dwValue == CP_UTF7 ? 0 : MB_ERR_INVALID_CHARS,
lpResource,
dwResource,
(LPWSTR) NULL,
0);
if (dwUnicode == 0)
PrintConsole(hConsole,
L"MultiByteToWideChar() returned error %lu\n",
GetLastError());
else
{
lpUnicode = LocalAlloc(NONZEROLPTR, dwUnicode * sizeof(L'\0'));
if (lpUnicode == NULL)
PrintConsole(hConsole,
L"LocalAlloc() returned error %lu\n",
GetLastError());
else
{
dwUnicode = MultiByteToWideChar(dwValue,
dwValue == CP_UTF7 ? 0 : MB_ERR_INVALID_CHARS,
lpResource,
dwResource,
lpUnicode,
dwUnicode);
if (dwUnicode == 0)
PrintConsole(hConsole,
L"MultiByteToWideChar() returned error %lu\n",
GetLastError());
else
bOutput &= PrintDirect(hOutput, lpUnicode, dwUnicode);
if (LocalFree(lpUnicode) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
}
bOutput &= PrintString(hOutput, L"\r\n");
break;
case RT_LOCALE:
if (dwResource == sizeof(DWORD))
bOutput &= PrintFormat(hOutput,
L"\t\t\t%lu = 0x%04lX\r\n",
*(DWORD *) lpResource, *(DWORD *) lpResource);
break;
// default:
}
else
#if 0
if (wcscmp(lpType, L"MUI") == 0)
#elif 0
if (wmemcmp(lpType, L"MUI", sizeof("MUI")) == 0)
#else
if (memcmp(lpType, L"MUI", sizeof(L"MUI")) == 0)
#endif
{
lpMUI = (MUI_RESOURCE *) lpResource;
if (lpMUI->dwSignature != MUI_RESOURCE_SIGNATURE)
PrintConsole(hConsole,
L"Signature 0x%08lX of resource configuration data not 0x%08lX!\n",
lpMUI->dwSignature, MUI_RESOURCE_SIGNATURE);
else
bOutput &= PrintFormat(hOutput,
L"\t\t\tResource Configuration Data:\r\n"
L"\t\t\t\tVersion = %hu.%hu\r\n"
L"\t\t\t\tType = %lu (%ls)\r\n"
L"\t\t\t\tLanguage = %ls\r\n"
L"\t\t\t\tFallback Language = %ls\r\n"
L"\t\t\t\tFallback Location = %lu (%ls)\r\n"
L"\t\t\t\tSystem Attributes = 0x%08lX\r\n"
L"\t\t\t\tMain Checksum = %08lX %08lX %08lX %08lX\r\n"
L"\t\t\t\tService Checksum = %08lX %08lX %08lX %08lX\r\n",
HIWORD(lpMUI->dwVersion), LOWORD(lpMUI->dwVersion),
lpMUI->dwFileType, MUIFileType(lpMUI->dwFileType),
lpMUI->dwLanguageNameOffset == 0 ? NULL : (BYTE *) lpMUI + lpMUI->dwLanguageNameOffset,
lpMUI->dwFallbackNameOffset == 0 ? NULL : (BYTE *) lpMUI + lpMUI->dwFallbackNameOffset,
lpMUI->dwFallbackLocation, MUIFallbackLocation(lpMUI->dwFallbackLocation),
lpMUI->dwSystemAttributes,
_byteswap_ulong(((DWORD *) lpMUI->bMainChecksum)[0]),
_byteswap_ulong(((DWORD *) lpMUI->bMainChecksum)[1]),
_byteswap_ulong(((DWORD *) lpMUI->bMainChecksum)[2]),
_byteswap_ulong(((DWORD *) lpMUI->bMainChecksum)[3]),
_byteswap_ulong(((DWORD *) lpMUI->bServiceChecksum)[0]),
_byteswap_ulong(((DWORD *) lpMUI->bServiceChecksum)[1]),
_byteswap_ulong(((DWORD *) lpMUI->bServiceChecksum)[2]),
_byteswap_ulong(((DWORD *) lpMUI->bServiceChecksum)[3]));
}
#if 0 // OBSOLETE!
if (!UnlockResource(lpResource))
PrintConsole(hConsole,
L"UnlockResource() failed!\n");
#endif
}
#if 0 // OBSOLETE!
if (!FreeResource(hResData))
PrintConsole(hConsole,
L"FreeResource() failed!\n");
#endif
}
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
GetLastError());
}
return TRUE;
}
BOOL WINAPI EnumResNameProc(HMODULE hModule,
LPCWSTR lpType,
LPWSTR lpName,
LPARAM lParam)
{
BOOL bOutput;
HANDLE hOutput = ((HANDLE *) lParam)[1];
HANDLE hConsole = ((HANDLE *) lParam)[2];
if (IS_INTRESOURCE(lpName))
bOutput = PrintFormat(hOutput,
L"\tID: %hu\r\n",
(WORD) lpName);
else
bOutput = PrintFormat(hOutput,
L"\tName: %ls\r\n",
lpName);
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
GetLastError());
#ifdef NEUTRAL
if (!EnumResourceLanguagesEx(hModule,
lpType,
lpName,
EnumResLangProc,
lParam,
RESOURCE_ENUM_LN,
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)))
PrintConsole(hConsole,
L"EnumResourceLanguagesEx() returned error %lu\n",
GetLastError());
#else
if (!EnumResourceLanguages(hModule,
lpType,
lpName,
EnumResLangProc,
lParam))
PrintConsole(hConsole,
L"EnumResourceLanguages() returned error %lu\n",
GetLastError());
#endif
return TRUE;
}
BOOL WINAPI EnumResTypeProc(HMODULE hModule,
LPWSTR lpType,
LPARAM lParam)
{
BOOL bOutput;
HANDLE hOutput = ((HANDLE *) lParam)[1];
HANDLE hConsole = ((HANDLE *) lParam)[2];
if (IS_INTRESOURCE(lpType))
bOutput = PrintFormat(hOutput,
L"Type: %hu ; %ls\r\n",
(WORD) lpType, ResourceTypeName((WORD) lpType));
else
bOutput = PrintFormat(hOutput,
L"Name: %ls\r\n",
lpType);
if (!bOutput)
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
GetLastError());
#ifdef NEUTRAL
if (!EnumResourceNamesEx(hModule,
lpType,
EnumResNameProc,
lParam,
RESOURCE_ENUM_LN,
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)))
PrintConsole(hConsole,
L"EnumResourceNamesEx() returned error %lu\n",
GetLastError());
#else
if (!EnumResourceNames(hModule,
lpType,
EnumResNameProc,
lParam))
PrintConsole(hConsole,
L"EnumResourceNames() returned error %lu\n",
GetLastError());
#endif
return TRUE;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
HANDLE *hHandles[3];
LPWSTR *lpArguments;
INT nArguments;
DWORD dwError = ERROR_BAD_ARGUMENTS;
HMODULE hModule;
HANDLE hOutput;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments != 2)
PrintConsole(hConsole,
L"No argument: a single (absolute or relative) path name of a binary module\n"
L" (eventually located per DLL search order) must be given!\n");
else
{
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOutput == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"GetStdHandle() returned error %lu\n",
dwError = GetLastError());
else
{
if (!FlushFileBuffers(hOutput))
PrintConsole(hConsole,
L"FlushFileBuffers() returned error %lu: standard output is not redirected to a file!\n",
dwError = GetLastError());
else
{
hModule = LoadLibraryEx(lpArguments[1],
(HANDLE) NULL,
LOAD_LIBRARY_AS_DATAFILE);
if (hModule == NULL)
PrintConsole(hConsole,
L"LoadLibraryEx() returned error %lu\n",
dwError = GetLastError());
else
{
PrintConsole(hConsole,
L"Module \'%ls\' loaded at address 0x%p\n",
lpArguments[1], hModule);
if (!PrintFormat(hOutput,
L"\xFEFF" // UTF-16LE BOM
L"Module \'%ls\'\r\n"
L"\r\n",
lpArguments[1]))
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
hHandles[0] = NULL;
hHandles[1] = hOutput;
hHandles[2] = hConsole;
#ifdef NEUTRAL
if (!EnumResourceTypesEx(hModule,
EnumResTypeProc,
(LPARAM) hHandles,
RESOURCE_ENUM_LN,
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)))
PrintConsole(hConsole,
L"EnumResourceTypesEx() returned error %lu\n",
dwError = GetLastError());
#else
if (!EnumResourceTypes(hModule,
EnumResTypeProc,
(LPARAM) hHandles))
PrintConsole(hConsole,
L"EnumResourceTypes() returned error %lu\n",
dwError = GetLastError());
#endif
else
dwError = ERROR_SUCCESS;
if (!FreeLibrary(hModule))
PrintConsole(hConsole,
L"FreeLibrary() returned error %lu\n",
GetLastError());
else
PrintConsole(hConsole,
L"Module \'%ls\' unloaded\n",
lpArguments[1]);
}
}
if (!CloseHandle(hOutput))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
RESOURCE.C
created in step 1., link the compiled
object file RESOURCE.OBJ
and cleanup afterwards:
SET CL=/DLOCALE /DNEUTRAL /GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:6.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeRESOURCE.COM RESOURCE.C KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE RESOURCE.OBJFor 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. RESOURCE.C RESOURCE.C(554) : warning C4305: 'type cast' : truncation from 'LPWSTR' to 'WORD' RESOURCE.C(576) : warning C4305: 'type cast' : truncation from 'LPWSTR' to 'WORD' RESOURCE.C(1046) : warning C4090: 'function' : different 'const' qualifiers RESOURCE.C(1055) : warning C4090: 'function' : different 'const' qualifiers RESOURCE.C(1151) : warning C4305: 'type cast' : truncation from 'LPWSTR' to 'WORD' RESOURCE.C(1196) : warning C4305: 'type cast' : truncation from 'LPWSTR' to 'WORD' RESOURCE.C(1196) : warning C4305: 'type cast' : truncation from 'LPWSTR' to 'WORD' Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file RESOURCE.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
e0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 14 00 00 ......#.........
00 22 00 00 00 00 00 00 c2 1f 00 00 00 10 00 00 ."..............
00 30 00 00 00 00 01 00 00 10 00 00 00 02 00 00 .0..............
06 00 00 00 00 00 2f 03 06 00 00 00 00 00 00 00 ....../.........
00 60 00 00 00 02 00 00 d0 4a 00 00 03 00 00 85 .`......J.......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
14 4f 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 .O..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 b8 4e 00 00 40 00 00 00 .........N..@...
00 00 00 00 00 00 00 00 00 30 00 00 68 00 00 00 .........0..h...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
39 13 00 00 00 10 00 00 00 14 00 00 00 02 00 00 9...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 78 21 00 00 00 30 00 00 .const..x!...0..
00 22 00 00 00 16 00 00 00 00 00 00 00 00 00 00 ."..............
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 04 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 fc f7 ff ff 50 ff 15 60 30 01 00 8b f0 .......P..`0....
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 fc f7 ff ff 50 ff 75 08 ff 15 00 30 01 00 85 .....P.u....0...
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 04 08 00 00 8d 45 10 50 ff 75 0c 8d 85 ........E.P.u...
fc f7 ff ff 50 ff 15 60 30 01 00 85 c0 75 02 c9 ....P..`0....u..
c3 56 57 8d 3c 00 8d b5 fc f7 ff ff 6a 00 8d 45 .VW.<.......j..E
fc 50 57 56 ff 75 08 ff 15 04 30 01 00 85 c0 74 .PWV.u....0....t
0f 03 75 fc 2b 7d fc 75 e3 33 c0 40 5f 5e c9 c3 ..u.+}.u.3.@_^..
33 c0 eb f8 55 8b ec 56 8b 75 10 57 8b 7d 0c 03 3...U..V.u.W.}..
f6 6a 00 8d 45 10 50 56 57 ff 75 08 ff 15 04 30 .j..E.PVW.u....0
01 00 85 c0 74 11 03 7d 10 2b 75 10 75 e3 33 c0 ....t..}.+u.u.3.
40 5f 5e 5d c2 0c 00 33 c0 eb f6 8b 44 24 04 83 @_^]...3....D$..
e8 11 74 0e 48 74 04 33 c0 eb 0c b8 b8 34 01 00 ..t.Ht.3.....4..
eb 05 b8 78 34 01 00 c2 04 00 8b 44 24 04 83 e8 ...x4......D$...
00 74 18 48 74 0e 48 74 04 33 c0 eb 13 b8 24 35 .t.Ht.Ht.3....$5
01 00 eb 0c b8 10 35 01 00 eb 05 b8 04 35 01 00 ......5......5..
c2 04 00 0f b7 44 24 04 b9 f0 00 00 00 3b c1 0f .....D$......;..
8f e4 00 00 00 0f 84 d7 00 00 00 48 83 f8 17 0f ...........H....
87 e0 00 00 00 ff 24 85 3b 12 01 00 b8 90 37 01 ......$.;.....7.
00 e9 df 00 00 00 b8 7c 37 01 00 e9 d5 00 00 00 .......|7.......
b8 6c 37 01 00 e9 cb 00 00 00 b8 5c 37 01 00 e9 .l7........\7...
c1 00 00 00 b8 48 37 01 00 e9 b7 00 00 00 b8 34 .....H7........4
37 01 00 e9 ad 00 00 00 b8 1c 37 01 00 e9 a3 00 7.........7.....
00 00 b8 0c 37 01 00 e9 99 00 00 00 b8 ec 36 01 ....7.........6.
00 e9 8f 00 00 00 b8 d8 36 01 00 e9 85 00 00 00 ........6.......
b8 b8 36 01 00 eb 7e b8 98 36 01 00 eb 77 b8 84 ..6...~..6...w..
36 01 00 eb 70 b8 68 36 01 00 eb 69 b8 4c 36 01 6...p.h6...i.L6.
00 eb 62 b8 34 36 01 00 eb 5b b8 18 36 01 00 eb ..b.46...[..6...
54 b8 00 36 01 00 eb 4d b8 e8 35 01 00 eb 46 b8 T..6...M..5...F.
d8 35 01 00 eb 3f b8 bc 35 01 00 eb 38 b8 a4 35 .5...?..5...8..5
01 00 eb 31 b8 94 35 01 00 eb 2a b8 7c 35 01 00 ...1..5...*.|5..
eb 23 b8 64 35 01 00 eb 1c 2d f1 00 00 00 74 10 .#.d5....-....t.
83 e8 0e 74 04 33 c0 eb 0c b8 50 35 01 00 eb 05 ...t.3....P5....
b8 38 35 01 00 c2 04 00 8d 49 00 4c 11 01 00 56 .85......I.L...V
11 01 00 60 11 01 00 6a 11 01 00 74 11 01 00 7e ...`...j...t...~
11 01 00 88 11 01 00 92 11 01 00 9c 11 01 00 a6 ................
11 01 00 b0 11 01 00 b7 11 01 00 be 11 01 00 c5 ................
11 01 00 cc 11 01 00 d3 11 01 00 da 11 01 00 e1 ................
11 01 00 e8 11 01 00 ef 11 01 00 f6 11 01 00 fd ................
11 01 00 04 12 01 00 0b 12 01 00 55 8d 6c 24 9c ...........U.l$.
81 ec a0 02 00 00 8b 45 7c 56 8b 70 08 57 ff 75 .......E|V.p.W.u
78 8b 78 04 ff 75 74 89 7d 60 ff 75 70 89 75 7c x.x..ut.}`.up.u|
ff 75 6c ff 15 2c 30 01 00 89 45 58 85 c0 75 17 .ul..,0...EX..u.
ff 15 28 30 01 00 50 68 80 4a 01 00 68 4c 4a 01 ..(0..Ph.J..hLJ.
00 56 e9 90 0b 00 00 66 83 7d 78 00 53 75 0f 6a .V.....f.}x.Su.j
24 68 00 4a 01 00 57 e8 a8 fd ff ff eb 7d 0f b7 $h.J..W......}..
5d 78 8b 35 24 30 01 00 6a 7b 8d 85 c4 fd ff ff ]x.5$0..j{......
50 68 01 10 00 00 53 ff d6 85 c0 74 35 6a 7b 8d Ph....S....t5j{.
85 bc fe ff ff 50 68 02 10 00 00 53 ff d6 85 c0 .....Ph....S....
74 20 8d 85 bc fe ff ff 50 8d 85 c4 fd ff ff 50 t ......P......P
53 53 68 a8 49 01 00 57 e8 01 fd ff ff 83 c4 18 SSh.I..W........
eb 29 ff 15 28 30 01 00 50 68 88 49 01 00 68 4c .)..(0..Ph.I..hL
4a 01 00 ff 75 7c e8 95 fc ff ff 53 53 68 4c 49 J...u|.....SShLI
01 00 57 e8 d6 fc ff ff 83 c4 20 ff 75 58 89 45 ..W....... .uX.E
78 ff 75 6c ff 15 20 30 01 00 89 45 5c 85 c0 75 x.ul.. 0...E\..u
1c ff 15 28 30 01 00 50 68 2c 49 01 00 68 4c 4a ...(0..Ph,I..hLJ
01 00 ff 75 7c e8 56 fc ff ff 83 c4 10 ff 75 5c ...u|.V.......u\
ff 75 58 68 e0 48 01 00 57 e8 90 fc ff ff 21 45 .uXh.H..W.....!E
78 83 c4 10 ff 75 58 ff 75 6c ff 15 1c 30 01 00 x....uX.ul...0..
8b f0 85 f6 75 16 ff 15 28 30 01 00 50 68 c0 48 ....u...(0..Ph.H
01 00 68 4c 4a 01 00 e9 d2 09 00 00 56 ff 15 18 ..hLJ.......V...
30 01 00 8b d8 85 db 75 14 68 84 48 01 00 ff 75 0......u.h.H...u
7c e8 fa fb ff ff 59 59 e9 4f 0a 00 00 8b c3 2b |.....YY.O.....+
45 6c 83 e0 01 2b 45 6c 03 c3 50 56 68 30 48 01 El...+El..PVh0H.
00 57 e8 27 fc ff ff 21 45 78 83 c4 10 f7 45 70 .W.'...!Ex....Ep
00 00 ff ff 0f 85 5d 09 00 00 0f b7 45 70 83 f8 ......].....Ep..
06 0f 84 de 08 00 00 83 f8 0b 0f 84 09 08 00 00 ................
83 f8 10 0f 84 ca 01 00 00 83 f8 16 0f 8e fa 09 ................
00 00 83 f8 18 7e 2c 3d ff 00 00 00 0f 85 ea 09 .....~,=........
00 00 83 7d 5c 04 0f 85 e0 09 00 00 8b 1b 53 53 ...}\.........SS
68 04 48 01 00 57 e8 c3 fb ff ff 83 c4 10 e9 c6 h.H..W..........
09 00 00 8b 03 bf e8 fd 00 00 3d 00 00 fe ff 75 ..........=....u
11 c7 45 6c e1 2e 00 00 b8 f8 47 01 00 e9 87 00 ..El......G.....
00 00 b9 ff fe 00 00 3b c1 75 0e c7 45 6c e0 2e .......;.u..El..
00 00 b8 ec 47 01 00 eb 70 0f b7 13 be fe ff 00 ....G...p.......
00 66 3b d6 75 0e c7 45 6c b1 04 00 00 b8 e0 47 .f;.u..El......G
01 00 eb 55 66 3b d1 75 0e c7 45 6c b0 04 00 00 ...Uf;.u..El....
b8 d4 47 01 00 eb 42 8b c8 81 e1 ff ff ff 00 81 ..G...B.........
f9 ef bb bf 00 75 0e c7 45 6c e9 fd 00 00 b8 d0 .....u..El......
47 01 00 eb 24 3d 2b 2f 76 2b 74 15 3d 2b 2f 76 G...$=+/v+t.=+/v
2f 74 0e 3d 2b 2f 76 38 74 07 3d 2b 2f 76 39 75 /t.=+/v8t.=+/v9u
d6 89 7d 6c b8 cc 47 01 00 50 68 ac 47 01 00 ff ..}l..G..Ph.G...
75 60 e8 07 fb ff ff 8b 75 6c 21 45 78 83 c4 0c u`......ul!Ex...
6a 00 2b f7 8b 3d 14 30 01 00 6a 00 ff 75 5c f7 j.+..=.0..j..u\.
de 1b f6 53 83 e6 08 56 ff 75 6c ff d7 89 45 74 ...S...V.ul...Et
85 c0 75 0e ff 15 28 30 01 00 50 68 84 47 01 00 ..u...(0..Ph.G..
eb 7d 8b 45 74 03 c0 50 6a 00 ff 15 10 30 01 00 .}.Et..Pj....0..
89 45 70 85 c0 75 0e ff 15 28 30 01 00 50 68 6c .Ep..u...(0..Phl
47 01 00 eb 5a ff 75 74 ff 75 70 ff 75 5c 53 56 G...Z.ut.up.u\SV
ff 75 6c ff d7 85 c0 75 1e ff 15 28 30 01 00 50 .ul....u...(0..P
68 84 47 01 00 68 4c 4a 01 00 ff 75 7c e8 2e fa h.G..hLJ...u|...
ff ff 83 c4 10 eb 0f 50 ff 75 70 ff 75 60 e8 c1 .......P.up.u`..
fa ff ff 21 45 78 ff 75 70 ff 15 0c 30 01 00 85 ...!Ex.up...0...
c0 74 1c ff 15 28 30 01 00 50 68 58 47 01 00 68 .t...(0..PhXG..h
4c 4a 01 00 ff 75 7c e8 f4 f9 ff ff 83 c4 10 6a LJ...u|........j
02 68 50 47 01 00 ff 75 60 e8 86 fa ff ff e9 36 .hPG...u`......6
08 00 00 0f b7 03 89 5d 6c 3b 45 5c 74 11 50 68 .......]l;E\t.Ph
c8 46 01 00 ff 75 7c e8 c4 f9 ff ff 83 c4 0c 0f .F...u|.........
b7 43 02 83 f8 34 74 13 6a 34 50 68 20 46 01 00 .C...4t.j4Ph F..
ff 75 7c e8 a8 f9 ff ff 83 c4 10 0f b7 43 04 66 .u|..........C.f
85 c0 74 11 50 68 c8 45 01 00 ff 75 7c e8 8e f9 ..t.Ph.E...u|...
ff ff 83 c4 0c 8d 43 06 6a 08 59 bf a4 45 01 00 ......C.j.Y..E..
8b f0 33 d2 f3 a7 74 11 50 68 30 45 01 00 ff 75 ..3...t.Ph0E...u
7c e8 6a f9 ff ff 83 c4 0c 0f b7 43 26 66 85 c0 |.j........C&f..
74 11 50 68 e0 44 01 00 ff 75 7c e8 50 f9 ff ff t.Ph.D...u|.P...
83 c4 0c 8b 4b 28 b8 bd 04 ef fe 3b c8 74 12 50 ....K(.....;.t.P
51 68 78 44 01 00 ff 75 7c e8 32 f9 ff ff 83 c4 QhxD...u|.2.....
10 8b 4b 2c b8 00 00 01 00 3b c8 74 12 50 51 68 ..K,.....;.t.PQh
00 44 01 00 ff 75 7c e8 14 f9 ff ff 83 c4 10 8b .D...u|.........
43 44 85 43 40 75 0c 8d 7d b4 be ec 43 01 00 6a CD.C@u..}...C..j
0e eb 79 8d 55 b4 a8 01 74 0f 6a 10 8b fa be dc ..y.U...t.j.....
43 01 00 59 f3 a4 8d 55 c2 f6 43 44 10 74 0f 6a C..Y...U..CD.t.j
16 8b fa be c4 43 01 00 59 f3 a4 83 c2 14 f6 43 .....C..Y......C
44 04 74 0f 6a 14 8b fa be b0 43 01 00 59 f3 a4 D.t.j.....C..Y..
83 c2 12 f6 43 44 02 74 0f 6a 1c 8b fa be 94 43 ....CD.t.j.....C
01 00 59 f3 a4 83 c2 1a f6 43 44 08 74 0f 6a 20 ..Y......CD.t.j
8b fa be 74 43 01 00 59 f3 a4 83 c2 1e f6 43 44 ...tC..Y......CD
20 74 0c 8b fa be 54 43 01 00 6a 20 59 f3 a4 8b t....TC..j Y...
43 4c ba dc 32 01 00 83 f8 08 73 09 8b 34 85 14 CL..2.....s..4..
34 01 00 eb 02 8b f2 83 f8 03 75 11 8b 4b 50 83 4.........u..KP.
f9 0d 73 09 8b 04 8d 34 34 01 00 eb 18 83 f8 04 ..s....44.......
75 11 8b 43 50 83 f8 04 73 09 8b 04 85 68 34 01 u..CP...s....h4.
00 eb 02 8b c2 0f b7 4b 4a 83 f9 07 73 0c 8b 0c .......KJ...s...
8d e0 33 01 00 89 4d 70 eb 03 89 55 70 0f b7 4b ..3...Mp...Up..K
48 83 f9 06 73 09 8b 3c 8d fc 33 01 00 eb 02 8b H...s..<..3.....
fa 50 56 8d 45 b8 50 0f b7 43 34 50 0f b7 43 36 .PV.E.P..C4P..C6
50 0f b7 43 30 50 0f b7 43 32 50 0f b7 43 3c 8b P..C0P..C2P..C<.
75 60 50 0f b7 43 3e 50 0f b7 43 38 50 0f b7 43 u`P..C>P..C8P..C
3a 50 68 d8 41 01 00 56 e8 21 f8 ff ff 21 45 78 :Ph.A..V.!...!Ex
8b 43 54 83 c4 34 85 c0 75 14 39 43 58 75 0f 6a .CT..4..u.9CXu.j
1e 68 94 41 01 00 56 e8 58 f8 ff ff eb 75 89 45 .h.A..V.X....u.E
44 8b 43 58 89 45 40 8d 45 48 50 8d 45 40 50 ff D.CX.E@.EHP.E@P.
15 08 30 01 00 85 c0 75 1e ff 15 28 30 01 00 50 ..0....u...(0..P
68 68 41 01 00 68 4c 4a 01 00 ff 75 7c e8 7e f7 hhA..hLJ...u|.~.
ff ff 83 c4 10 eb 3f 0f b7 45 56 50 0f b7 45 54 ......?..EVP..ET
50 0f b7 45 52 50 0f b7 45 50 50 0f b7 45 4e 50 P..ERP..EPP..ENP
0f b7 45 4a 50 0f b7 45 48 50 0f b7 45 4c ff 34 ..EJP..EHP..EL.4
85 c4 33 01 00 68 c8 40 01 00 56 e8 8e f7 ff ff ..3..h.@..V.....
83 c4 28 21 45 78 57 ff 75 70 68 80 40 01 00 56 ..(!ExW.uph.@..V
e8 79 f7 ff ff 21 45 78 0f b7 03 83 c4 10 03 d8 .y...!Ex........
83 45 6c 5c e9 62 03 00 00 8b 45 6c 6a 0f 8d 70 .El\.b....Elj..p
06 59 bf 5c 40 01 00 33 d2 66 f3 a7 0f 85 a5 01 .Y.\@..3.f......
00 00 0f b7 48 02 66 85 c9 74 18 83 c0 06 50 51 ....H.f..t....PQ
68 24 40 01 00 ff 75 7c e8 e3 f6 ff ff 8b 45 6c h$@...u|......El
83 c4 10 0f b7 40 04 8b 7d 6c 83 f8 01 74 15 8d .....@..}l...t..
4f 06 51 50 68 e0 3f 01 00 ff 75 7c e8 bf f6 ff O.QPh.?...u|....
ff 83 c4 10 8d 47 06 50 68 cc 3f 01 00 ff 75 60 .....G.Ph.?...u`
e8 f9 f6 ff ff 21 45 78 0f b7 07 8d 77 24 03 c7 .....!Ex....w$..
83 c4 0c 3b f0 0f 83 d0 02 00 00 0f b7 46 02 66 ...;.........F.f
85 c0 74 15 8d 4e 06 51 50 68 24 40 01 00 ff 75 ..t..N.QPh$@...u
7c e8 7a f6 ff ff 83 c4 10 0f b7 46 04 83 f8 01 |.z........F....
74 15 8d 4e 06 51 50 68 e0 3f 01 00 ff 75 7c e8 t..N.QPh.?...u|.
5c f6 ff ff 83 c4 10 8d 46 06 50 68 b4 3f 01 00 \.......F.Ph.?..
ff 75 60 e8 96 f6 ff ff 83 c4 0c 21 45 78 8d 7e .u`........!Ex.~
18 e9 b3 00 00 00 0f b7 47 04 83 f8 01 74 15 8d ........G....t..
4f 06 51 50 68 e0 3f 01 00 ff 75 7c e8 1f f6 ff O.QPh.?...u|....
ff 83 c4 10 0f b7 47 02 66 85 c0 8d 47 06 75 13 ......G.f...G.u.
50 68 94 3f 01 00 ff 75 60 e8 50 f6 ff ff 83 c4 Ph.?...u`.P.....
0c eb 67 8d 50 02 66 8b 08 83 c0 02 66 85 c9 75 ..g.P.f.....f..u
f5 2b c2 d1 f8 8b c8 83 e1 01 03 c8 8d 44 4f 08 .+...........DO.
89 45 70 8d 48 02 66 8b 10 83 c0 02 66 85 d2 75 .Ep.H.f.....f..u
f5 2b c1 0f b7 4f 02 d1 f8 40 3b c8 74 15 8d 47 .+...O...@;.t..G
06 50 51 68 18 3f 01 00 ff 75 7c e8 b0 f5 ff ff .PQh.?...u|.....
83 c4 10 ff 75 70 8d 47 06 50 68 f0 3e 01 00 ff ....up.G.Ph.>...
75 60 e8 e7 f5 ff ff 83 c4 10 21 45 78 0f b7 07 u`........!Ex...
8b c8 83 e1 03 03 c8 03 f9 0f b7 06 03 c6 3b f8 ..............;.
0f 82 40 ff ff ff 0f b7 06 8b c8 83 e1 03 03 c8 ..@.............
8b 45 6c 03 f1 0f b7 08 03 c8 3b f1 0f 82 c9 fe .El.......;.....
ff ff e9 94 01 00 00 6a 06 59 bf d8 3e 01 00 8d .......j.Y..>...
70 06 33 d2 f3 a7 0f 85 68 01 00 00 0f b7 48 02 p.3.....h.....H.
66 85 c9 74 1b 8b 45 6c 83 c0 06 50 51 68 24 40 f..t..El...PQh$@
01 00 ff 75 7c e8 26 f5 ff ff 8b 45 6c 83 c4 10 ...u|.&....El...
0f b7 48 04 83 f9 01 74 1b 8b 45 6c 83 c0 06 50 ..H....t..El...P
51 68 e0 3f 01 00 ff 75 7c e8 02 f5 ff ff 8b 45 Qh.?...u|......E
6c 83 c4 10 0f b7 40 1e 66 85 c0 74 18 8b 4d 6c l.....@.f..t..Ml
83 c1 06 51 50 68 9c 3e 01 00 ff 75 7c e8 de f4 ...QPh.>...u|...
ff ff 83 c4 10 8b 75 6c 8d 46 06 50 68 cc 3f 01 ......ul.F.Ph.?.
00 ff 75 60 e8 15 f5 ff ff 21 45 78 83 c4 0c 83 ..u`.....!Ex....
c6 26 6a 06 59 bf 84 3e 01 00 33 c0 f3 a7 74 11 .&j.Y..>..3...t.
8b 45 6c 83 c0 26 50 68 28 3e 01 00 e9 cf 00 00 .El..&Ph(>......
00 8b 75 6c 0f b7 4e 22 f6 c1 03 74 15 8d 46 26 ..ul..N"...t..F&
50 51 68 d0 3d 01 00 ff 75 7c e8 81 f4 ff ff 83 PQh.=...u|......
c4 10 0f b7 4e 24 66 85 c9 74 15 8d 46 26 50 51 ....N$f..t..F&PQ
68 88 3d 01 00 ff 75 7c e8 63 f4 ff ff 83 c4 10 h.=...u|.c......
0f b7 46 3e 66 85 c0 74 15 8d 4e 26 51 50 68 9c ..F>f..t..N&QPh.
3e 01 00 ff 75 7c e8 45 f4 ff ff 83 c4 10 6a 14 >...u|.E......j.
68 5c 3d 01 00 ff 75 60 e8 d7 f4 ff ff 21 45 78 h\=...u`.....!Ex
0f b7 46 22 83 65 70 00 a9 fc ff ff ff 76 31 8d ..F".ep......v1.
7e 40 0f b7 47 02 50 0f b7 07 50 68 40 3d 01 00 ~@..G.P...Ph@=..
ff 75 60 e8 56 f4 ff ff 21 45 78 0f b7 46 22 83 .u`.V...!Ex..F".
c4 10 ff 45 70 c1 e8 02 83 c7 04 39 45 70 72 d2 ...Ep......9Epr.
6a 02 68 50 47 01 00 ff 75 60 e8 85 f4 ff ff 21 j.hPG...u`.....!
45 78 eb 17 8b 45 6c 83 c0 06 50 68 e8 3c 01 00 Ex...El...Ph.<..
ff 75 7c e8 c8 f3 ff ff 83 c4 0c 8b 45 6c 0f b7 .u|.........El..
00 8b c8 83 e1 03 03 c8 01 4d 6c 39 5d 6c 0f 82 .........Ml9]l..
95 fc ff ff e9 03 02 00 00 83 65 70 00 83 3b 00 ..........ep..;.
0f 86 f6 01 00 00 8d 7b 08 8b 47 fc 3b 07 75 16 .......{..G.;.u.
50 ff 75 70 68 ac 3c 01 00 ff 75 60 e8 cd f3 ff P.uph.<...u`....
ff 83 c4 10 eb 16 ff 37 50 ff 75 70 68 58 3c 01 .......7P.uphX<.
00 ff 75 60 e8 b5 f3 ff ff 83 c4 14 21 45 78 8b ..u`........!Ex.
77 04 8b 47 fc 03 f3 89 45 6c eb 5f 0f b7 46 02 w..G....El._..F.
83 f8 01 75 12 8d 46 04 50 0f b7 06 50 ff 75 6c ...u..F.P...P.ul
68 f8 3b 01 00 eb 15 66 85 c0 75 20 8d 46 04 50 h.;....f..u .F.P
0f b7 06 50 ff 75 6c 68 98 3b 01 00 ff 75 60 e8 ...P.ulh.;...u`.
6a f3 ff ff 83 c4 14 21 45 78 eb 14 ff 75 6c 50 j......!Ex...ulP
68 20 3b 01 00 ff 75 7c e8 03 f3 ff ff 83 c4 10 h ;...u|........
0f b7 06 ff 45 6c 03 f0 8b 45 6c 3b 07 76 9d ff ....El...El;.v..
45 70 8b 45 70 83 c7 0c 3b 03 0f 82 49 ff ff ff Ep.Ep...;...I...
e9 37 01 00 00 c7 45 70 10 00 00 00 0f b7 33 85 .7....Ep......3.
f6 74 53 f7 45 74 00 00 ff ff 75 09 0f b7 45 74 .tS.Et....u...Et
c1 e0 04 eb 03 6a 10 58 2b 45 70 56 50 68 d0 3a .....j.X+EpVPh.:
01 00 57 e8 f6 f2 ff ff 83 c4 10 21 45 78 eb 01 ..W........!Ex..
4e 66 83 3c 73 00 74 f8 56 8d 43 02 50 57 e8 31 Nf.<s.t.V.C.PW.1
f3 ff ff 21 45 78 6a 02 68 50 47 01 00 57 e8 21 ...!Exj.hPG..W.!
f3 ff ff 21 45 78 ff 4d 70 0f b7 03 8d 5c 43 02 ...!Ex.Mp....\C.
75 9a e9 c5 00 00 00 8b 75 70 6a 02 59 bf c8 3a u.......upj.Y..:
01 00 33 c0 f3 a7 0f 85 b0 00 00 00 8b 0b b8 cd ..3.............
fe cd fe 3b c8 74 17 50 51 68 48 3a 01 00 ff 75 ...;.t.PQhH:...u
7c e8 3a f2 ff ff 83 c4 10 e9 8e 00 00 00 8b 43 |.:............C
7c 85 c0 75 05 21 45 6c eb 05 03 c3 89 45 6c 8b |..u.!El.....El.
43 74 85 c0 75 05 21 45 70 eb 05 03 c3 89 45 70 Ct..u.!Ep.....Ep
8b 43 28 0f c8 50 8b 43 24 0f c8 50 8b 43 20 0f .C(..P.C$..P.C .
c8 50 8b 43 1c 0f c8 50 8b 43 38 8b 73 18 8b 7b .P.C...P.C8.s..{
10 0f c8 50 8b 43 34 0f c8 50 8b 43 30 0f c8 50 ...P.C4..P.C0..P
8b 43 2c 0f c8 50 ff 73 14 56 e8 cb f2 ff ff 50 .C,..P.s.V.....P
56 ff 75 6c ff 75 70 57 e8 9e f2 ff ff 50 0f b7 V.ul.upW.....P..
43 08 57 50 0f b7 43 0a 50 68 b8 37 01 00 ff 75 C.WP..C.Ph.7...u
60 e8 f8 f1 ff ff 83 c4 4c 21 45 78 83 7d 78 00 `.......L!Ex.}x.
5b 75 1c ff 15 28 30 01 00 50 68 a4 37 01 00 68 [u...(0..Ph.7..h
4c 4a 01 00 ff 75 7c e8 84 f1 ff ff 83 c4 10 33 LJ...u|........3
c0 5f 40 5e 83 c5 64 c9 c2 14 00 55 8b ec f7 45 ._@^..d....U...E
10 00 00 ff ff 53 8b 5d 14 8b 4b 08 8b 43 04 56 .....S.]..K..C.V
57 89 4d 14 75 0c 0f b7 4d 10 51 68 ec 4a 01 00 W.M.u...M.Qh.J..
eb 08 ff 75 10 68 d0 4a 01 00 50 e8 8e f1 ff ff ...u.h.J..P.....
8b 35 28 30 01 00 83 c4 0c bf 4c 4a 01 00 85 c0 .5(0......LJ....
75 14 ff d6 50 68 a4 37 01 00 57 ff 75 14 e8 1d u...Ph.7..W.u...
f1 ff ff 83 c4 10 6a 00 6a 01 53 68 9b 12 01 00 ......j.j.Sh....
ff 75 10 ff 75 0c ff 75 08 ff 15 30 30 01 00 85 .u..u..u...00...
c0 75 14 ff d6 50 68 a0 4a 01 00 57 ff 75 14 e8 .u...Ph.J..W.u..
ec f0 ff ff 83 c4 10 5f 33 c0 5e 40 5b 5d c2 10 ......._3.^@[]..
00 55 8b ec 53 8b 5d 10 8b 43 08 8b 53 04 56 8b .U..S.]..C..S.V.
75 0c 57 89 45 10 56 f7 c6 00 00 ff ff 75 1a e8 u.W.E.V......u..
df f1 ff ff 50 0f b7 c6 50 68 44 4b 01 00 52 e8 ....P...PhDK..R.
fa f0 ff ff 83 c4 10 eb 0e 68 2c 4b 01 00 52 e8 .........h,K..R.
ea f0 ff ff 83 c4 0c 8b 35 28 30 01 00 bf 4c 4a ........5(0...LJ
01 00 85 c0 75 14 ff d6 50 68 a4 37 01 00 57 ff ....u...Ph.7..W.
75 10 e8 79 f0 ff ff 83 c4 10 6a 00 6a 01 53 68 u..y......j.j.Sh
8b 1e 01 00 ff 75 0c ff 75 08 ff 15 34 30 01 00 .....u..u...40..
85 c0 75 14 ff d6 50 68 04 4b 01 00 57 ff 75 10 ..u...Ph.K..W.u.
e8 4b f0 ff ff 83 c4 10 5f 33 c0 5e 40 5b 5d c2 .K......_3.^@[].
0c 00 83 ec 1c 55 57 6a f4 bd a0 00 00 00 ff 15 .....UWj........
54 30 01 00 8b f8 83 ff ff 75 0d ff 15 28 30 01 T0.......u...(0.
00 8b e8 e9 cb 01 00 00 53 56 8d 44 24 1c 50 ff ........SV.D$.P.
15 50 30 01 00 50 e8 c1 01 00 00 8b 35 28 30 01 .P0..P......5(0.
00 89 44 24 10 85 c0 75 14 ff d6 8b e8 55 68 8c ..D$...u.....Uh.
4e 01 00 bb 4c 4a 01 00 e9 6d 01 00 00 83 7c 24 N...LJ...m....|$
1c 02 bb 4c 4a 01 00 74 12 68 68 4d 01 00 57 e8 ...LJ..t.hhM..W.
cc ef ff ff 59 59 e9 39 01 00 00 6a f5 ff 15 54 ....YY.9...j...T
30 01 00 89 44 24 18 83 f8 ff 75 0f ff d6 8b e8 0...D$....u.....
55 68 4c 4d 01 00 e9 0f 01 00 00 50 ff 15 4c 30 UhLM.......P..L0
01 00 85 c0 75 14 ff d6 8b e8 55 68 28 4d 01 00 ....u.....Uh(M..
68 98 4c 01 00 e9 ba 00 00 00 8b 6c 24 10 6a 02 h.L........l$.j.
6a 00 ff 75 04 ff 15 48 30 01 00 89 44 24 14 85 j..u...H0...D$..
c0 75 0f ff d6 8b e8 55 68 7c 4c 01 00 e9 91 00 .u.....Uh|L.....
00 00 50 ff 75 04 68 30 4c 01 00 57 e8 4f ef ff ..P.u.h0L..W.O..
ff ff 75 04 8b 6c 24 2c 68 0c 4c 01 00 55 e8 8b ..u..l$,h.L..U..
ef ff ff 83 c4 1c 85 c0 75 12 ff d6 50 68 a4 37 ........u...Ph.7
01 00 53 57 e8 27 ef ff ff 83 c4 10 83 64 24 20 ..SW.'.......d$
00 6a 00 6a 01 8d 44 24 28 50 68 21 1f 01 00 ff .j.j..D$(Ph!....
74 24 24 89 6c 24 38 89 7c 24 3c ff 15 44 30 01 t$$.l$8.|$<..D0.
00 85 c0 75 16 ff d6 8b e8 55 68 e4 4b 01 00 53 ...u.....Uh.K..S
57 e8 ea ee ff ff 83 c4 10 eb 02 33 ed ff 74 24 W..........3..t$
14 ff 15 40 30 01 00 85 c0 75 14 ff d6 50 68 cc ...@0....u...Ph.
4b 01 00 53 57 e8 c6 ee ff ff 83 c4 10 eb 15 8b K..SW...........
44 24 10 ff 70 04 68 9c 4b 01 00 57 e8 af ee ff D$..p.h.K..W....
ff 83 c4 0c ff 74 24 18 ff 15 3c 30 01 00 85 c0 .....t$...<0....
75 12 ff d6 50 68 84 4b 01 00 53 57 e8 8f ee ff u...Ph.K..SW....
ff 83 c4 10 ff 74 24 10 ff 15 0c 30 01 00 85 c0 .....t$....0....
74 12 ff d6 50 68 58 47 01 00 53 57 e8 6f ee ff t...PhXG..SW.o..
ff 83 c4 10 57 ff 15 3c 30 01 00 85 c0 75 12 ff ....W..<0....u..
d6 50 68 68 4b 01 00 53 57 e8 52 ee ff ff 83 c4 .PhhK..SW.R.....
10 5e 5b 55 ff 15 38 30 01 00 5f 5d 55 8b ec 51 .^[U..80.._]U..Q
8b 45 08 53 56 33 f6 57 8b f8 89 75 08 89 75 fc .E.SV3.W...u..u.
39 75 0c 0f 84 4f 01 00 00 3b c6 0f 84 47 01 00 9u...O...;...G..
00 0f b7 08 66 3b ce 0f 84 3b 01 00 00 83 f9 20 ....f;...;.....
74 0a 83 f9 09 74 05 33 db 43 eb 02 33 db 39 75 t....t.3.C..3.9u
08 75 2b 66 83 f9 20 74 06 66 83 f9 09 75 1f 83 .u+f.. t.f...u..
c0 02 0f b7 08 83 f9 20 74 f5 83 f9 09 74 f0 33 ....... t....t.3
c9 66 39 30 89 75 fc 0f 95 c1 03 d9 eb 21 66 83 .f90.u.......!f.
f9 5c 75 05 f7 55 fc eb 13 39 75 fc 75 0b 66 83 .\u..U...9u.u.f.
f9 22 75 05 f7 55 08 eb 03 89 75 fc 83 c0 02 0f ."u..U....u.....
b7 08 66 3b ce 75 a7 2b c7 83 c0 02 d1 f8 8d 44 ..f;.u.+.......D
58 02 03 c0 50 56 ff 15 10 30 01 00 8b f0 33 d2 X...PV...0....3.
3b f2 0f 84 b8 00 00 00 8d 44 9e 04 89 06 89 55 ;........D.....U
08 33 db 83 7d 08 00 75 31 0f b7 0f 83 f9 20 74 .3..}..u1..... t
05 83 f9 09 75 24 33 c9 66 89 08 83 c7 02 0f b7 ....u$3.f.......
0f 83 f9 20 74 f5 83 f9 09 74 f0 33 d2 66 39 17 ... t....t.3.f9.
74 4d 43 8b c7 89 3c 9e eb 45 0f b7 0f 83 f9 5c tMC...<..E.....\
75 0c 66 89 08 83 c0 02 83 c7 02 42 eb 31 83 f9 u.f........B.1..
22 75 21 8d 4a 01 d1 e9 f7 d9 8d 04 48 f6 c2 01 "u!.J.......H...
75 0f 83 c7 02 66 83 3f 22 75 38 83 7d 08 00 74 u....f.?"u8.}..t
32 6a 22 59 66 89 08 83 c0 02 83 c7 02 33 d2 66 2j"Yf........3.f
83 3f 00 0f 85 7a ff ff ff 33 c9 43 66 89 08 21 .?...z...3.Cf..!
0c 9e 8b 45 0c 89 18 39 4d 08 74 14 68 a0 00 00 ...E...9M.t.h...
00 eb 07 f7 55 08 eb d5 6a 57 ff 15 58 30 01 00 ....U...jW..X0..
5f 8b c6 5e 5b c9 c2 08 00 00 00 00 00 00 00 00 _..^[...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
b8 4f 00 00 c8 4f 00 00 d4 4f 00 00 ec 4f 00 00 .O...O...O...O..
f8 4f 00 00 06 50 00 00 1c 50 00 00 2c 50 00 00 .O...P...P..,P..
3c 50 00 00 4e 50 00 00 60 50 00 00 70 50 00 00 <P..NP..`P..pP..
82 50 00 00 9e 50 00 00 b6 50 00 00 c4 50 00 00 .P...P...P...P..
d2 50 00 00 e0 50 00 00 f8 50 00 00 0a 51 00 00 .P...P...P...Q..
1e 51 00 00 30 51 00 00 40 51 00 00 00 00 00 00 .Q..0Q..@Q......
5e 51 00 00 00 00 00 00 54 00 72 00 75 00 65 00 ^Q......T.r.u.e.
54 00 79 00 70 00 65 00 00 00 00 00 56 00 65 00 T.y.p.e.....V.e.
63 00 74 00 6f 00 72 00 00 00 00 00 52 00 61 00 c.t.o.r.....R.a.
73 00 74 00 65 00 72 00 00 00 00 00 56 00 65 00 s.t.e.r.....V.e.
72 00 73 00 69 00 6f 00 6e 00 65 00 64 00 20 00 r.s.i.o.n.e.d. .
50 00 72 00 69 00 6e 00 74 00 65 00 72 00 00 00 P.r.i.n.t.e.r...
49 00 6e 00 70 00 75 00 74 00 20 00 4d 00 65 00 I.n.p.u.t. .M.e.
74 00 68 00 6f 00 64 00 00 00 00 00 43 00 6f 00 t.h.o.d.....C.o.
6d 00 6d 00 75 00 6e 00 69 00 63 00 61 00 74 00 m.m.u.n.i.c.a.t.
69 00 6f 00 6e 00 73 00 00 00 00 00 53 00 6f 00 i.o.n.s.....S.o.
75 00 6e 00 64 00 00 00 49 00 6e 00 73 00 74 00 u.n.d...I.n.s.t.
61 00 6c 00 6c 00 61 00 62 00 6c 00 65 00 00 00 a.l.l.a.b.l.e...
53 00 79 00 73 00 74 00 65 00 6d 00 00 00 00 00 S.y.s.t.e.m.....
4e 00 65 00 74 00 77 00 6f 00 72 00 6b 00 00 00 N.e.t.w.o.r.k...
4d 00 6f 00 75 00 73 00 65 00 00 00 44 00 69 00 M.o.u.s.e...D.i.
73 00 70 00 6c 00 61 00 79 00 00 00 4c 00 61 00 s.p.l.a.y...L.a.
6e 00 67 00 75 00 61 00 67 00 65 00 00 00 00 00 n.g.u.a.g.e.....
4b 00 65 00 79 00 62 00 6f 00 61 00 72 00 64 00 K.e.y.b.o.a.r.d.
00 00 00 00 50 00 72 00 69 00 6e 00 74 00 65 00 ....P.r.i.n.t.e.
72 00 00 00 53 00 74 00 61 00 74 00 69 00 63 00 r...S.t.a.t.i.c.
20 00 4c 00 69 00 62 00 72 00 61 00 72 00 79 00 .L.i.b.r.a.r.y.
00 00 00 00 56 00 69 00 72 00 74 00 75 00 61 00 ....V.i.r.t.u.a.
6c 00 20 00 44 00 65 00 76 00 69 00 63 00 65 00 l. .D.e.v.i.c.e.
00 00 00 00 46 00 6f 00 6e 00 74 00 00 00 00 00 ....F.o.n.t.....
44 00 72 00 69 00 76 00 65 00 72 00 00 00 00 00 D.r.i.v.e.r.....
44 00 4c 00 4c 00 00 00 41 00 70 00 70 00 6c 00 D.L.L...A.p.p.l.
69 00 63 00 61 00 74 00 69 00 6f 00 6e 00 00 00 i.c.a.t.i.o.n...
57 00 69 00 6e 00 64 00 6f 00 77 00 73 00 20 00 W.i.n.d.o.w.s. .
28 00 33 00 32 00 2d 00 62 00 69 00 74 00 29 00 (.3.2.-.b.i.t.).
00 00 00 00 50 00 72 00 65 00 73 00 65 00 6e 00 ....P.r.e.s.e.n.
74 00 61 00 74 00 69 00 6f 00 6e 00 20 00 4d 00 t.a.t.i.o.n. .M.
61 00 6e 00 61 00 67 00 65 00 72 00 20 00 28 00 a.n.a.g.e.r. .(.
33 00 32 00 2d 00 62 00 69 00 74 00 29 00 00 00 3.2.-.b.i.t.)...
50 00 72 00 65 00 73 00 65 00 6e 00 74 00 61 00 P.r.e.s.e.n.t.a.
74 00 69 00 6f 00 6e 00 20 00 4d 00 61 00 6e 00 t.i.o.n. .M.a.n.
61 00 67 00 65 00 72 00 20 00 28 00 31 00 36 00 a.g.e.r. .(.1.6.
2d 00 62 00 69 00 74 00 29 00 00 00 57 00 69 00 -.b.i.t.)...W.i.
6e 00 64 00 6f 00 77 00 73 00 20 00 28 00 31 00 n.d.o.w.s. .(.1.
36 00 2d 00 62 00 69 00 74 00 29 00 00 00 00 00 6.-.b.i.t.).....
42 00 61 00 73 00 65 00 00 00 00 00 55 00 6e 00 B.a.s.e.....U.n.
64 00 65 00 66 00 69 00 6e 00 65 00 64 00 00 00 d.e.f.i.n.e.d...
57 00 69 00 6e 00 64 00 6f 00 77 00 73 00 20 00 W.i.n.d.o.w.s. .
43 00 45 00 00 00 00 00 57 00 69 00 6e 00 64 00 C.E.....W.i.n.d.
6f 00 77 00 73 00 20 00 4e 00 54 00 00 00 00 00 o.w.s. .N.T.....
4f 00 53 00 2f 00 32 00 20 00 28 00 33 00 32 00 O.S./.2. .(.3.2.
2d 00 62 00 69 00 74 00 29 00 00 00 4f 00 53 00 -.b.i.t.)...O.S.
2f 00 32 00 20 00 28 00 31 00 36 00 2d 00 62 00 /.2. .(.1.6.-.b.
69 00 74 00 29 00 00 00 4d 00 53 00 2d 00 44 00 i.t.)...M.S.-.D.
4f 00 53 00 00 00 00 00 55 00 6e 00 6b 00 6e 00 O.S.....U.n.k.n.
6f 00 77 00 6e 00 00 00 53 00 61 00 74 00 75 00 o.w.n...S.a.t.u.
72 00 00 00 46 00 72 00 69 00 00 00 54 00 68 00 r...F.r.i...T.h.
75 00 72 00 73 00 00 00 57 00 65 00 64 00 6e 00 u.r.s...W.e.d.n.
65 00 73 00 00 00 00 00 54 00 75 00 65 00 73 00 e.s.....T.u.e.s.
00 00 00 00 4d 00 6f 00 6e 00 00 00 53 00 75 00 ....M.o.n...S.u.
6e 00 00 00 bc 33 01 00 b4 33 01 00 a8 33 01 00 n....3...3...3..
98 33 01 00 8c 33 01 00 84 33 01 00 78 33 01 00 .3...3...3..x3..
68 33 01 00 58 33 01 00 3c 33 01 00 20 33 01 00 h3..X3..<3.. 3..
08 33 01 00 f0 32 01 00 dc 32 01 00 d0 32 01 00 .3...2...2...2..
ac 32 01 00 70 32 01 00 34 32 01 00 10 32 01 00 .2..p2..42...2..
dc 32 01 00 68 33 01 00 f8 31 01 00 f0 31 01 00 .2..h3...1...1..
e0 31 01 00 d4 31 01 00 b4 31 01 00 dc 32 01 00 .1...1...1...2..
94 31 01 00 68 33 01 00 84 31 01 00 70 31 01 00 .1..h3...1..p1..
5c 31 01 00 4c 31 01 00 40 31 01 00 30 31 01 00 \1..L1..@1..01..
20 31 01 00 08 31 01 00 fc 30 01 00 dc 30 01 00 1...1...0...0..
c0 30 01 00 9c 30 01 00 68 33 01 00 8c 30 01 00 .0...0..h3...0..
7c 30 01 00 68 30 01 00 4c 00 4e 00 3a 00 20 00 |0..h0..L.N.:. .
6c 00 61 00 6e 00 67 00 75 00 61 00 67 00 65 00 l.a.n.g.u.a.g.e.
2d 00 6e 00 65 00 75 00 74 00 72 00 61 00 6c 00 -.n.e.u.t.r.a.l.
20 00 6d 00 61 00 69 00 6e 00 20 00 66 00 69 00 .m.a.i.n. .f.i.
6c 00 65 00 00 00 00 00 4d 00 55 00 49 00 3a 00 l.e.....M.U.I.:.
20 00 6c 00 61 00 6e 00 67 00 75 00 61 00 67 00 .l.a.n.g.u.a.g.
65 00 2d 00 73 00 70 00 65 00 63 00 69 00 66 00 e.-.s.p.e.c.i.f.
69 00 63 00 20 00 73 00 61 00 74 00 65 00 6c 00 i.c. .s.a.t.e.l.
6c 00 69 00 74 00 65 00 20 00 66 00 69 00 6c 00 l.i.t.e. .f.i.l.
65 00 00 00 6e 00 6f 00 6e 00 65 00 00 00 00 00 e...n.o.n.e.....
69 00 6e 00 74 00 65 00 72 00 6e 00 61 00 6c 00 i.n.t.e.r.n.a.l.
00 00 00 00 65 00 78 00 74 00 65 00 72 00 6e 00 ....e.x.t.e.r.n.
61 00 6c 00 00 00 00 00 52 00 54 00 5f 00 54 00 a.l.....R.T._.T.
4f 00 4f 00 4c 00 42 00 41 00 52 00 00 00 00 00 O.O.L.B.A.R.....
52 00 54 00 5f 00 4c 00 4f 00 43 00 41 00 4c 00 R.T._.L.O.C.A.L.
45 00 00 00 52 00 54 00 5f 00 44 00 4c 00 47 00 E...R.T._.D.L.G.
49 00 4e 00 49 00 54 00 00 00 00 00 52 00 54 00 I.N.I.T.....R.T.
5f 00 4d 00 41 00 4e 00 49 00 46 00 45 00 53 00 _.M.A.N.I.F.E.S.
54 00 00 00 52 00 54 00 5f 00 48 00 54 00 4d 00 T...R.T._.H.T.M.
4c 00 00 00 52 00 54 00 5f 00 41 00 4e 00 49 00 L...R.T._.A.N.I.
49 00 43 00 4f 00 4e 00 00 00 00 00 52 00 54 00 I.C.O.N.....R.T.
5f 00 41 00 4e 00 49 00 43 00 55 00 52 00 53 00 _.A.N.I.C.U.R.S.
4f 00 52 00 00 00 00 00 52 00 54 00 5f 00 56 00 O.R.....R.T._.V.
58 00 44 00 00 00 00 00 52 00 54 00 5f 00 50 00 X.D.....R.T._.P.
4c 00 55 00 47 00 50 00 4c 00 41 00 59 00 00 00 L.U.G.P.L.A.Y...
52 00 54 00 5f 00 44 00 49 00 41 00 4c 00 4f 00 R.T._.D.I.A.L.O.
47 00 45 00 58 00 00 00 52 00 54 00 5f 00 44 00 G.E.X...R.T._.D.
4c 00 47 00 49 00 4e 00 43 00 4c 00 55 00 44 00 L.G.I.N.C.L.U.D.
45 00 00 00 52 00 54 00 5f 00 56 00 45 00 52 00 E...R.T._.V.E.R.
53 00 49 00 4f 00 4e 00 00 00 00 00 52 00 54 00 S.I.O.N.....R.T.
5f 00 4e 00 41 00 4d 00 45 00 54 00 41 00 42 00 _.N.A.M.E.T.A.B.
4c 00 45 00 00 00 00 00 52 00 54 00 5f 00 47 00 L.E.....R.T._.G.
52 00 4f 00 55 00 50 00 5f 00 49 00 43 00 4f 00 R.O.U.P._.I.C.O.
4e 00 00 00 52 00 54 00 5f 00 4d 00 45 00 4e 00 N...R.T._.M.E.N.
55 00 45 00 58 00 00 00 52 00 54 00 5f 00 47 00 U.E.X...R.T._.G.
52 00 4f 00 55 00 50 00 5f 00 43 00 55 00 52 00 R.O.U.P._.C.U.R.
53 00 4f 00 52 00 00 00 52 00 54 00 5f 00 4d 00 S.O.R...R.T._.M.
45 00 53 00 53 00 41 00 47 00 45 00 54 00 41 00 E.S.S.A.G.E.T.A.
42 00 4c 00 45 00 00 00 52 00 54 00 5f 00 52 00 B.L.E...R.T._.R.
43 00 44 00 41 00 54 00 41 00 00 00 52 00 54 00 C.D.A.T.A...R.T.
5f 00 41 00 43 00 43 00 45 00 4c 00 45 00 52 00 _.A.C.C.E.L.E.R.
41 00 54 00 4f 00 52 00 00 00 00 00 52 00 54 00 A.T.O.R.....R.T.
5f 00 46 00 4f 00 4e 00 54 00 00 00 52 00 54 00 _.F.O.N.T...R.T.
5f 00 46 00 4f 00 4e 00 54 00 44 00 49 00 52 00 _.F.O.N.T.D.I.R.
00 00 00 00 52 00 54 00 5f 00 53 00 54 00 52 00 ....R.T._.S.T.R.
49 00 4e 00 47 00 00 00 52 00 54 00 5f 00 44 00 I.N.G...R.T._.D.
49 00 41 00 4c 00 4f 00 47 00 00 00 52 00 54 00 I.A.L.O.G...R.T.
5f 00 4d 00 45 00 4e 00 55 00 00 00 52 00 54 00 _.M.E.N.U...R.T.
5f 00 49 00 43 00 4f 00 4e 00 00 00 52 00 54 00 _.I.C.O.N...R.T.
5f 00 42 00 49 00 54 00 4d 00 41 00 50 00 00 00 _.B.I.T.M.A.P...
52 00 54 00 5f 00 43 00 55 00 52 00 53 00 4f 00 R.T._.C.U.R.S.O.
52 00 00 00 57 00 72 00 69 00 74 00 65 00 46 00 R...W.r.i.t.e.F.
69 00 6c 00 65 00 00 00 09 00 09 00 09 00 52 00 i.l.e.........R.
65 00 73 00 6f 00 75 00 72 00 63 00 65 00 20 00 e.s.o.u.r.c.e. .
43 00 6f 00 6e 00 66 00 69 00 67 00 75 00 72 00 C.o.n.f.i.g.u.r.
61 00 74 00 69 00 6f 00 6e 00 20 00 44 00 61 00 a.t.i.o.n. .D.a.
74 00 61 00 3a 00 0d 00 0a 00 09 00 09 00 09 00 t.a.:...........
09 00 56 00 65 00 72 00 73 00 69 00 6f 00 6e 00 ..V.e.r.s.i.o.n.
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 3d 00 20 00 25 00 68 00 75 00 . . .=. .%.h.u.
2e 00 25 00 68 00 75 00 0d 00 0a 00 09 00 09 00 ..%.h.u.........
09 00 09 00 54 00 79 00 70 00 65 00 20 00 20 00 ....T.y.p.e. . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 3d 00 20 00 25 00 6c 00 . . . .=. .%.l.
75 00 20 00 28 00 25 00 6c 00 73 00 29 00 0d 00 u. .(.%.l.s.)...
0a 00 09 00 09 00 09 00 09 00 4c 00 61 00 6e 00 ..........L.a.n.
67 00 75 00 61 00 67 00 65 00 20 00 20 00 20 00 g.u.a.g.e. . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 3d 00 . . . . . . .=.
20 00 25 00 6c 00 73 00 0d 00 0a 00 09 00 09 00 .%.l.s.........
09 00 09 00 46 00 61 00 6c 00 6c 00 62 00 61 00 ....F.a.l.l.b.a.
63 00 6b 00 20 00 4c 00 61 00 6e 00 67 00 75 00 c.k. .L.a.n.g.u.
61 00 67 00 65 00 20 00 3d 00 20 00 25 00 6c 00 a.g.e. .=. .%.l.
73 00 0d 00 0a 00 09 00 09 00 09 00 09 00 46 00 s.............F.
61 00 6c 00 6c 00 62 00 61 00 63 00 6b 00 20 00 a.l.l.b.a.c.k. .
4c 00 6f 00 63 00 61 00 74 00 69 00 6f 00 6e 00 L.o.c.a.t.i.o.n.
20 00 3d 00 20 00 25 00 6c 00 75 00 20 00 28 00 .=. .%.l.u. .(.
25 00 6c 00 73 00 29 00 0d 00 0a 00 09 00 09 00 %.l.s.).........
09 00 09 00 53 00 79 00 73 00 74 00 65 00 6d 00 ....S.y.s.t.e.m.
20 00 41 00 74 00 74 00 72 00 69 00 62 00 75 00 .A.t.t.r.i.b.u.
74 00 65 00 73 00 20 00 3d 00 20 00 30 00 78 00 t.e.s. .=. .0.x.
25 00 30 00 38 00 6c 00 58 00 0d 00 0a 00 09 00 %.0.8.l.X.......
09 00 09 00 09 00 4d 00 61 00 69 00 6e 00 20 00 ......M.a.i.n. .
43 00 68 00 65 00 63 00 6b 00 73 00 75 00 6d 00 C.h.e.c.k.s.u.m.
20 00 20 00 20 00 20 00 20 00 3d 00 20 00 25 00 . . . . .=. .%.
30 00 38 00 6c 00 58 00 20 00 25 00 30 00 38 00 0.8.l.X. .%.0.8.
6c 00 58 00 20 00 25 00 30 00 38 00 6c 00 58 00 l.X. .%.0.8.l.X.
20 00 25 00 30 00 38 00 6c 00 58 00 0d 00 0a 00 .%.0.8.l.X.....
09 00 09 00 09 00 09 00 53 00 65 00 72 00 76 00 ........S.e.r.v.
69 00 63 00 65 00 20 00 43 00 68 00 65 00 63 00 i.c.e. .C.h.e.c.
6b 00 73 00 75 00 6d 00 20 00 20 00 3d 00 20 00 k.s.u.m. . .=. .
25 00 30 00 38 00 6c 00 58 00 20 00 25 00 30 00 %.0.8.l.X. .%.0.
38 00 6c 00 58 00 20 00 25 00 30 00 38 00 6c 00 8.l.X. .%.0.8.l.
58 00 20 00 25 00 30 00 38 00 6c 00 58 00 0d 00 X. .%.0.8.l.X...
0a 00 00 00 00 00 00 00 53 00 69 00 67 00 6e 00 ........S.i.g.n.
61 00 74 00 75 00 72 00 65 00 20 00 30 00 78 00 a.t.u.r.e. .0.x.
25 00 30 00 38 00 6c 00 58 00 20 00 6f 00 66 00 %.0.8.l.X. .o.f.
20 00 72 00 65 00 73 00 6f 00 75 00 72 00 63 00 .r.e.s.o.u.r.c.
65 00 20 00 63 00 6f 00 6e 00 66 00 69 00 67 00 e. .c.o.n.f.i.g.
75 00 72 00 61 00 74 00 69 00 6f 00 6e 00 20 00 u.r.a.t.i.o.n. .
64 00 61 00 74 00 61 00 20 00 6e 00 6f 00 74 00 d.a.t.a. .n.o.t.
20 00 30 00 78 00 25 00 30 00 38 00 6c 00 58 00 .0.x.%.0.8.l.X.
21 00 0a 00 00 00 00 00 4d 00 55 00 49 00 00 00 !.......M.U.I...
09 00 09 00 09 00 25 00 36 00 6c 00 75 00 3a 00 ......%.6.l.u.:.
09 00 4c 00 65 00 6e 00 67 00 74 00 68 00 20 00 ..L.e.n.g.t.h. .
3d 00 20 00 25 00 6c 00 75 00 0d 00 0a 00 09 00 =. .%.l.u.......
09 00 09 00 09 00 53 00 74 00 72 00 69 00 6e 00 ......S.t.r.i.n.
67 00 20 00 3d 00 20 00 00 00 00 00 00 00 00 00 g. .=. .........
54 00 65 00 78 00 74 00 20 00 74 00 79 00 70 00 T.e.x.t. .t.y.p.
65 00 20 00 25 00 68 00 75 00 20 00 6f 00 66 00 e. .%.h.u. .o.f.
20 00 6d 00 65 00 73 00 73 00 61 00 67 00 65 00 .m.e.s.s.a.g.e.
20 00 30 00 78 00 25 00 30 00 38 00 6c 00 58 00 .0.x.%.0.8.l.X.
20 00 6e 00 65 00 69 00 74 00 68 00 65 00 72 00 .n.e.i.t.h.e.r.
20 00 41 00 4e 00 53 00 49 00 20 00 6e 00 6f 00 .A.N.S.I. .n.o.
72 00 20 00 55 00 4e 00 49 00 43 00 4f 00 44 00 r. .U.N.I.C.O.D.
45 00 21 00 0a 00 00 00 09 00 09 00 09 00 09 00 E.!.............
30 00 78 00 25 00 30 00 38 00 6c 00 58 00 3a 00 0.x.%.0.8.l.X.:.
09 00 53 00 69 00 7a 00 65 00 20 00 3d 00 20 00 ..S.i.z.e. .=. .
25 00 68 00 75 00 0d 00 0a 00 09 00 09 00 09 00 %.h.u...........
09 00 09 00 09 00 54 00 65 00 78 00 74 00 20 00 ......T.e.x.t. .
3d 00 20 00 25 00 2e 00 39 00 39 00 39 00 68 00 =. .%...9.9.9.h.
73 00 0d 00 0a 00 00 00 09 00 09 00 09 00 09 00 s...............
30 00 78 00 25 00 30 00 38 00 6c 00 58 00 3a 00 0.x.%.0.8.l.X.:.
09 00 53 00 69 00 7a 00 65 00 20 00 3d 00 20 00 ..S.i.z.e. .=. .
25 00 68 00 75 00 0d 00 0a 00 09 00 09 00 09 00 %.h.u...........
09 00 09 00 09 00 54 00 65 00 78 00 74 00 20 00 ......T.e.x.t. .
3d 00 20 00 25 00 2e 00 39 00 39 00 39 00 6c 00 =. .%...9.9.9.l.
73 00 0d 00 0a 00 00 00 09 00 09 00 09 00 25 00 s.............%.
36 00 6c 00 75 00 3a 00 09 00 4d 00 65 00 73 00 6.l.u.:...M.e.s.
73 00 61 00 67 00 65 00 20 00 49 00 44 00 73 00 s.a.g.e. .I.D.s.
20 00 30 00 78 00 25 00 30 00 38 00 6c 00 58 00 .0.x.%.0.8.l.X.
20 00 74 00 6f 00 20 00 30 00 78 00 25 00 30 00 .t.o. .0.x.%.0.
38 00 6c 00 58 00 0d 00 0a 00 00 00 09 00 09 00 8.l.X...........
09 00 25 00 36 00 6c 00 75 00 3a 00 09 00 4d 00 ..%.6.l.u.:...M.
65 00 73 00 73 00 61 00 67 00 65 00 20 00 49 00 e.s.s.a.g.e. .I.
44 00 20 00 30 00 78 00 25 00 30 00 38 00 6c 00 D. .0.x.%.0.8.l.
58 00 0d 00 0a 00 00 00 55 00 6e 00 6b 00 6e 00 X.......U.n.k.n.
6f 00 77 00 6e 00 20 00 6b 00 65 00 79 00 20 00 o.w.n. .k.e.y. .
73 00 74 00 72 00 69 00 6e 00 67 00 20 00 22 00 s.t.r.i.n.g. .".
25 00 6c 00 73 00 22 00 20 00 69 00 6e 00 20 00 %.l.s.". .i.n. .
27 00 56 00 45 00 52 00 53 00 49 00 4f 00 4e 00 '.V.E.R.S.I.O.N.
49 00 4e 00 46 00 4f 00 27 00 21 00 0a 00 00 00 I.N.F.O.'.!.....
20 00 30 00 78 00 25 00 30 00 34 00 68 00 58 00 .0.x.%.0.4.h.X.
3a 00 25 00 68 00 75 00 00 00 00 00 09 00 09 00 :.%.h.u.........
09 00 09 00 54 00 72 00 61 00 6e 00 73 00 6c 00 ....T.r.a.n.s.l.
61 00 74 00 69 00 6f 00 6e 00 28 00 73 00 29 00 a.t.i.o.n.(.s.).
20 00 3d 00 00 00 00 00 54 00 79 00 70 00 65 00 .=.....T.y.p.e.
20 00 25 00 68 00 75 00 20 00 69 00 6e 00 20 00 .%.h.u. .i.n. .
27 00 25 00 6c 00 73 00 27 00 20 00 6e 00 6f 00 '.%.l.s.'. .n.o.
74 00 20 00 27 00 56 00 53 00 5f 00 42 00 49 00 t. .'.V.S._.B.I.
4e 00 41 00 52 00 59 00 27 00 21 00 0a 00 00 00 N.A.R.Y.'.!.....
43 00 6f 00 75 00 6e 00 74 00 20 00 25 00 68 00 C.o.u.n.t. .%.h.
75 00 20 00 69 00 6e 00 20 00 27 00 25 00 6c 00 u. .i.n. .'.%.l.
73 00 27 00 20 00 6e 00 6f 00 74 00 20 00 61 00 s.'. .n.o.t. .a.
20 00 6d 00 75 00 6c 00 74 00 69 00 70 00 6c 00 .m.u.l.t.i.p.l.
65 00 20 00 6f 00 66 00 20 00 34 00 21 00 0a 00 e. .o.f. .4.!...
00 00 00 00 00 00 00 00 4b 00 65 00 79 00 20 00 ........K.e.y. .
73 00 74 00 72 00 69 00 6e 00 67 00 20 00 22 00 s.t.r.i.n.g. .".
25 00 6c 00 73 00 22 00 20 00 69 00 6e 00 20 00 %.l.s.". .i.n. .
27 00 56 00 41 00 52 00 27 00 20 00 6e 00 6f 00 '.V.A.R.'. .n.o.
74 00 20 00 22 00 54 00 72 00 61 00 6e 00 73 00 t. .".T.r.a.n.s.
6c 00 61 00 74 00 69 00 6f 00 6e 00 22 00 21 00 l.a.t.i.o.n.".!.
0a 00 00 00 54 00 72 00 61 00 6e 00 73 00 6c 00 ....T.r.a.n.s.l.
61 00 74 00 69 00 6f 00 6e 00 00 00 50 00 61 00 a.t.i.o.n...P.a.
64 00 64 00 69 00 6e 00 67 00 20 00 25 00 68 00 d.d.i.n.g. .%.h.
75 00 20 00 69 00 6e 00 20 00 27 00 25 00 6c 00 u. .i.n. .'.%.l.
73 00 27 00 20 00 6e 00 6f 00 74 00 20 00 30 00 s.'. .n.o.t. .0.
21 00 0a 00 00 00 00 00 56 00 61 00 72 00 46 00 !.......V.a.r.F.
69 00 6c 00 65 00 49 00 6e 00 66 00 6f 00 00 00 i.l.e.I.n.f.o...
09 00 09 00 09 00 09 00 09 00 25 00 2d 00 31 00 ..........%.-.1.
36 00 6c 00 73 00 20 00 3d 00 20 00 25 00 6c 00 6.l.s. .=. .%.l.
73 00 0d 00 0a 00 00 00 43 00 6f 00 75 00 6e 00 s.......C.o.u.n.
74 00 20 00 25 00 68 00 75 00 20 00 69 00 6e 00 t. .%.h.u. .i.n.
20 00 27 00 25 00 6c 00 73 00 27 00 20 00 6e 00 .'.%.l.s.'. .n.
6f 00 74 00 20 00 65 00 71 00 75 00 61 00 6c 00 o.t. .e.q.u.a.l.
20 00 6e 00 75 00 6d 00 62 00 65 00 72 00 20 00 .n.u.m.b.e.r. .
6f 00 66 00 20 00 63 00 68 00 61 00 72 00 61 00 o.f. .c.h.a.r.a.
63 00 74 00 65 00 72 00 73 00 20 00 69 00 6e 00 c.t.e.r.s. .i.n.
20 00 73 00 74 00 72 00 69 00 6e 00 67 00 21 00 .s.t.r.i.n.g.!.
0a 00 00 00 09 00 09 00 09 00 09 00 09 00 25 00 ..............%.
2d 00 31 00 36 00 6c 00 73 00 20 00 3d 00 0d 00 -.1.6.l.s. .=...
0a 00 00 00 09 00 09 00 09 00 09 00 25 00 6c 00 ............%.l.
73 00 3a 00 0d 00 0a 00 00 00 00 00 09 00 09 00 s.:.............
09 00 25 00 6c 00 73 00 3a 00 0d 00 0a 00 00 00 ..%.l.s.:.......
54 00 79 00 70 00 65 00 20 00 25 00 68 00 75 00 T.y.p.e. .%.h.u.
20 00 69 00 6e 00 20 00 27 00 25 00 6c 00 73 00 .i.n. .'.%.l.s.
27 00 20 00 6e 00 6f 00 74 00 20 00 27 00 56 00 '. .n.o.t. .'.V.
53 00 5f 00 54 00 45 00 58 00 54 00 27 00 21 00 S._.T.E.X.T.'.!.
0a 00 00 00 43 00 6f 00 75 00 6e 00 74 00 20 00 ....C.o.u.n.t. .
25 00 68 00 75 00 20 00 69 00 6e 00 20 00 27 00 %.h.u. .i.n. .'.
25 00 6c 00 73 00 27 00 20 00 6e 00 6f 00 74 00 %.l.s.'. .n.o.t.
20 00 30 00 21 00 0a 00 00 00 00 00 53 00 74 00 .0.!.......S.t.
72 00 69 00 6e 00 67 00 46 00 69 00 6c 00 65 00 r.i.n.g.F.i.l.e.
49 00 6e 00 66 00 6f 00 00 00 00 00 00 00 00 00 I.n.f.o.........
09 00 09 00 09 00 09 00 54 00 61 00 72 00 67 00 ........T.a.r.g.
65 00 74 00 20 00 4f 00 53 00 20 00 20 00 20 00 e.t. .O.S. . . .
20 00 20 00 20 00 20 00 20 00 20 00 3d 00 20 00 . . . . . .=. .
25 00 6c 00 73 00 2c 00 20 00 25 00 6c 00 73 00 %.l.s.,. .%.l.s.
0d 00 0a 00 00 00 00 00 09 00 09 00 09 00 09 00 ................
4d 00 6f 00 64 00 75 00 6c 00 65 00 20 00 54 00 M.o.d.u.l.e. .T.
69 00 6d 00 65 00 20 00 53 00 74 00 61 00 6d 00 i.m.e. .S.t.a.m.
70 00 20 00 3d 00 20 00 25 00 6c 00 73 00 64 00 p. .=. .%.l.s.d.
61 00 79 00 2c 00 20 00 25 00 30 00 34 00 68 00 a.y.,. .%.0.4.h.
75 00 2d 00 25 00 30 00 32 00 68 00 75 00 2d 00 u.-.%.0.2.h.u.-.
25 00 30 00 32 00 68 00 75 00 20 00 25 00 30 00 %.0.2.h.u. .%.0.
32 00 68 00 75 00 3a 00 25 00 30 00 32 00 68 00 2.h.u.:.%.0.2.h.
75 00 3a 00 25 00 30 00 32 00 68 00 75 00 2e 00 u.:.%.0.2.h.u...
25 00 30 00 33 00 68 00 75 00 20 00 55 00 54 00 %.0.3.h.u. .U.T.
43 00 0d 00 0a 00 00 00 46 00 69 00 6c 00 65 00 C.......F.i.l.e.
54 00 69 00 6d 00 65 00 54 00 6f 00 53 00 79 00 T.i.m.e.T.o.S.y.
73 00 74 00 65 00 6d 00 54 00 69 00 6d 00 65 00 s.t.e.m.T.i.m.e.
00 00 00 00 09 00 09 00 09 00 09 00 4d 00 6f 00 ............M.o.
64 00 75 00 6c 00 65 00 20 00 54 00 69 00 6d 00 d.u.l.e. .T.i.m.
65 00 20 00 53 00 74 00 61 00 6d 00 70 00 20 00 e. .S.t.a.m.p. .
3d 00 20 00 4e 00 6f 00 6e 00 65 00 0d 00 0a 00 =. .N.o.n.e.....
00 00 00 00 00 00 00 00 09 00 09 00 09 00 46 00 ..............F.
69 00 78 00 65 00 64 00 46 00 69 00 6c 00 65 00 i.x.e.d.F.i.l.e.
49 00 6e 00 66 00 6f 00 3a 00 0d 00 0a 00 09 00 I.n.f.o.:.......
09 00 09 00 09 00 50 00 72 00 6f 00 64 00 75 00 ......P.r.o.d.u.
63 00 74 00 20 00 56 00 65 00 72 00 73 00 69 00 c.t. .V.e.r.s.i.
6f 00 6e 00 20 00 20 00 20 00 3d 00 20 00 25 00 o.n. . . .=. .%.
68 00 75 00 2e 00 25 00 68 00 75 00 3a 00 25 00 h.u...%.h.u.:.%.
68 00 75 00 2e 00 25 00 68 00 75 00 0d 00 0a 00 h.u...%.h.u.....
09 00 09 00 09 00 09 00 4d 00 6f 00 64 00 75 00 ........M.o.d.u.
6c 00 65 00 20 00 56 00 65 00 72 00 73 00 69 00 l.e. .V.e.r.s.i.
6f 00 6e 00 20 00 20 00 20 00 20 00 3d 00 20 00 o.n. . . . .=. .
25 00 68 00 75 00 2e 00 25 00 68 00 75 00 3a 00 %.h.u...%.h.u.:.
25 00 68 00 75 00 2e 00 25 00 68 00 75 00 0d 00 %.h.u...%.h.u...
0a 00 09 00 09 00 09 00 09 00 4d 00 6f 00 64 00 ..........M.o.d.
75 00 6c 00 65 00 20 00 46 00 6c 00 61 00 67 00 u.l.e. .F.l.a.g.
73 00 20 00 20 00 20 00 20 00 20 00 20 00 3d 00 s. . . . . . .=.
20 00 25 00 6c 00 73 00 0d 00 0a 00 09 00 09 00 .%.l.s.........
09 00 09 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 ....M.o.d.u.l.e.
20 00 54 00 79 00 70 00 65 00 20 00 20 00 20 00 .T.y.p.e. . . .
20 00 20 00 20 00 20 00 3d 00 20 00 25 00 6c 00 . . . .=. .%.l.
73 00 0d 00 0a 00 09 00 09 00 09 00 09 00 4d 00 s.............M.
6f 00 64 00 75 00 6c 00 65 00 20 00 53 00 75 00 o.d.u.l.e. .S.u.
62 00 74 00 79 00 70 00 65 00 20 00 20 00 20 00 b.t.y.p.e. . . .
20 00 3d 00 20 00 25 00 6c 00 73 00 0d 00 0a 00 .=. .%.l.s.....
00 00 00 00 2c 00 20 00 53 00 70 00 65 00 63 00 ....,. .S.p.e.c.
69 00 61 00 6c 00 20 00 42 00 75 00 69 00 6c 00 i.a.l. .B.u.i.l.
64 00 00 00 2c 00 20 00 50 00 72 00 69 00 76 00 d...,. .P.r.i.v.
61 00 74 00 65 00 20 00 42 00 75 00 69 00 6c 00 a.t.e. .B.u.i.l.
64 00 00 00 2c 00 20 00 50 00 72 00 65 00 2d 00 d...,. .P.r.e.-.
52 00 65 00 6c 00 65 00 61 00 73 00 65 00 00 00 R.e.l.e.a.s.e...
2c 00 20 00 50 00 61 00 74 00 63 00 68 00 65 00 ,. .P.a.t.c.h.e.
64 00 00 00 2c 00 20 00 49 00 6e 00 66 00 65 00 d...,. .I.n.f.e.
72 00 72 00 65 00 64 00 00 00 00 00 2c 00 20 00 r.r.e.d.....,. .
44 00 65 00 62 00 75 00 67 00 00 00 2c 00 20 00 D.e.b.u.g...,. .
4e 00 6f 00 6e 00 65 00 00 00 00 00 00 00 00 00 N.o.n.e.........
53 00 74 00 72 00 75 00 63 00 74 00 75 00 72 00 S.t.r.u.c.t.u.r.
65 00 20 00 76 00 65 00 72 00 73 00 69 00 6f 00 e. .v.e.r.s.i.o.
6e 00 20 00 30 00 78 00 25 00 30 00 38 00 6c 00 n. .0.x.%.0.8.l.
58 00 20 00 69 00 6e 00 20 00 27 00 46 00 49 00 X. .i.n. .'.F.I.
58 00 45 00 44 00 46 00 49 00 4c 00 45 00 49 00 X.E.D.F.I.L.E.I.
4e 00 46 00 4f 00 27 00 20 00 6e 00 6f 00 74 00 N.F.O.'. .n.o.t.
20 00 30 00 78 00 25 00 30 00 38 00 6c 00 58 00 .0.x.%.0.8.l.X.
21 00 0a 00 00 00 00 00 53 00 69 00 67 00 6e 00 !.......S.i.g.n.
61 00 74 00 75 00 72 00 65 00 20 00 30 00 78 00 a.t.u.r.e. .0.x.
25 00 30 00 38 00 6c 00 58 00 20 00 69 00 6e 00 %.0.8.l.X. .i.n.
20 00 27 00 46 00 49 00 58 00 45 00 44 00 46 00 .'.F.I.X.E.D.F.
49 00 4c 00 45 00 49 00 4e 00 46 00 4f 00 27 00 I.L.E.I.N.F.O.'.
20 00 6e 00 6f 00 74 00 20 00 30 00 78 00 25 00 .n.o.t. .0.x.%.
30 00 38 00 6c 00 58 00 21 00 0a 00 00 00 00 00 0.8.l.X.!.......
50 00 61 00 64 00 64 00 69 00 6e 00 67 00 20 00 P.a.d.d.i.n.g. .
25 00 68 00 75 00 20 00 69 00 6e 00 20 00 27 00 %.h.u. .i.n. .'.
56 00 45 00 52 00 53 00 49 00 4f 00 4e 00 49 00 V.E.R.S.I.O.N.I.
4e 00 46 00 4f 00 27 00 20 00 6e 00 6f 00 74 00 N.F.O.'. .n.o.t.
20 00 30 00 21 00 0a 00 00 00 00 00 00 00 00 00 .0.!...........
4b 00 65 00 79 00 20 00 73 00 74 00 72 00 69 00 K.e.y. .s.t.r.i.
6e 00 67 00 20 00 22 00 25 00 6c 00 73 00 22 00 n.g. .".%.l.s.".
20 00 69 00 6e 00 20 00 27 00 56 00 45 00 52 00 .i.n. .'.V.E.R.
53 00 49 00 4f 00 4e 00 49 00 4e 00 46 00 4f 00 S.I.O.N.I.N.F.O.
27 00 20 00 6e 00 6f 00 74 00 20 00 22 00 56 00 '. .n.o.t. .".V.
53 00 5f 00 56 00 45 00 52 00 53 00 49 00 4f 00 S._.V.E.R.S.I.O.
4e 00 5f 00 49 00 4e 00 46 00 4f 00 22 00 21 00 N._.I.N.F.O.".!.
0a 00 00 00 56 00 53 00 5f 00 56 00 45 00 52 00 ....V.S._.V.E.R.
53 00 49 00 4f 00 4e 00 5f 00 49 00 4e 00 46 00 S.I.O.N._.I.N.F.
4f 00 00 00 00 00 00 00 54 00 79 00 70 00 65 00 O.......T.y.p.e.
20 00 25 00 68 00 75 00 20 00 69 00 6e 00 20 00 .%.h.u. .i.n. .
27 00 56 00 45 00 52 00 53 00 49 00 4f 00 4e 00 '.V.E.R.S.I.O.N.
49 00 4e 00 46 00 4f 00 27 00 20 00 6e 00 6f 00 I.N.F.O.'. .n.o.
74 00 20 00 27 00 56 00 53 00 5f 00 42 00 49 00 t. .'.V.S._.B.I.
4e 00 41 00 52 00 59 00 27 00 21 00 0a 00 00 00 N.A.R.Y.'.!.....
43 00 6f 00 75 00 6e 00 74 00 20 00 25 00 68 00 C.o.u.n.t. .%.h.
75 00 20 00 69 00 6e 00 20 00 27 00 56 00 45 00 u. .i.n. .'.V.E.
52 00 53 00 49 00 4f 00 4e 00 49 00 4e 00 46 00 R.S.I.O.N.I.N.F.
4f 00 27 00 20 00 64 00 69 00 66 00 66 00 65 00 O.'. .d.i.f.f.e.
72 00 73 00 20 00 66 00 72 00 6f 00 6d 00 20 00 r.s. .f.r.o.m. .
73 00 69 00 7a 00 65 00 20 00 25 00 6c 00 75 00 s.i.z.e. .%.l.u.
20 00 6f 00 66 00 20 00 27 00 56 00 53 00 5f 00 .o.f. .'.V.S._.
46 00 49 00 58 00 45 00 44 00 46 00 49 00 4c 00 F.I.X.E.D.F.I.L.
45 00 49 00 4e 00 46 00 4f 00 27 00 20 00 73 00 E.I.N.F.O.'. .s.
74 00 72 00 75 00 63 00 74 00 75 00 72 00 65 00 t.r.u.c.t.u.r.e.
21 00 0a 00 00 00 00 00 53 00 69 00 7a 00 65 00 !.......S.i.z.e.
20 00 25 00 68 00 75 00 20 00 69 00 6e 00 20 00 .%.h.u. .i.n. .
27 00 56 00 45 00 52 00 53 00 49 00 4f 00 4e 00 '.V.E.R.S.I.O.N.
49 00 4e 00 46 00 4f 00 27 00 20 00 64 00 69 00 I.N.F.O.'. .d.i.
66 00 66 00 65 00 72 00 73 00 20 00 66 00 72 00 f.f.e.r.s. .f.r.
6f 00 6d 00 20 00 73 00 69 00 7a 00 65 00 20 00 o.m. .s.i.z.e. .
6f 00 66 00 20 00 27 00 56 00 45 00 52 00 53 00 o.f. .'.V.E.R.S.
49 00 4f 00 4e 00 27 00 20 00 72 00 65 00 73 00 I.O.N.'. .r.e.s.
6f 00 75 00 72 00 63 00 65 00 21 00 0a 00 00 00 o.u.r.c.e.!.....
0d 00 0a 00 00 00 00 00 4c 00 6f 00 63 00 61 00 ........L.o.c.a.
6c 00 46 00 72 00 65 00 65 00 00 00 4c 00 6f 00 l.F.r.e.e...L.o.
63 00 61 00 6c 00 41 00 6c 00 6c 00 6f 00 63 00 c.a.l.A.l.l.o.c.
00 00 00 00 4d 00 75 00 6c 00 74 00 69 00 42 00 ....M.u.l.t.i.B.
79 00 74 00 65 00 54 00 6f 00 57 00 69 00 64 00 y.t.e.T.o.W.i.d.
65 00 43 00 68 00 61 00 72 00 00 00 09 00 09 00 e.C.h.a.r.......
09 00 55 00 54 00 46 00 2d 00 25 00 2d 00 37 00 ..U.T.F.-.%.-.7.
6c 00 73 00 20 00 3d 00 20 00 00 00 37 00 00 00 l.s. .=. ...7...
38 00 00 00 31 00 36 00 4c 00 45 00 00 00 00 00 8...1.6.L.E.....
31 00 36 00 42 00 45 00 00 00 00 00 33 00 32 00 1.6.B.E.....3.2.
4c 00 45 00 00 00 00 00 33 00 32 00 42 00 45 00 L.E.....3.2.B.E.
00 00 00 00 09 00 09 00 09 00 25 00 6c 00 75 00 ..........%.l.u.
20 00 3d 00 20 00 30 00 78 00 25 00 30 00 34 00 .=. .0.x.%.0.4.
6c 00 58 00 0d 00 0a 00 00 00 00 00 00 00 00 00 l.X.............
09 00 09 00 09 00 44 00 61 00 74 00 61 00 20 00 ......D.a.t.a. .
48 00 61 00 6e 00 64 00 6c 00 65 00 20 00 3d 00 H.a.n.d.l.e. .=.
20 00 30 00 78 00 25 00 70 00 3a 00 20 00 4f 00 .0.x.%.p.:. .O.
66 00 66 00 73 00 65 00 74 00 20 00 3d 00 20 00 f.f.s.e.t. .=. .
30 00 78 00 25 00 30 00 38 00 6c 00 58 00 0d 00 0.x.%.0.8.l.X...
0a 00 00 00 4c 00 6f 00 63 00 6b 00 52 00 65 00 ....L.o.c.k.R.e.
73 00 6f 00 75 00 72 00 63 00 65 00 28 00 29 00 s.o.u.r.c.e.(.).
20 00 72 00 65 00 74 00 75 00 72 00 6e 00 65 00 .r.e.t.u.r.n.e.
64 00 20 00 4e 00 55 00 4c 00 4c 00 0a 00 00 00 d. .N.U.L.L.....
4c 00 6f 00 61 00 64 00 52 00 65 00 73 00 6f 00 L.o.a.d.R.e.s.o.
75 00 72 00 63 00 65 00 00 00 00 00 00 00 00 00 u.r.c.e.........
09 00 09 00 09 00 49 00 6e 00 66 00 6f 00 20 00 ......I.n.f.o. .
48 00 61 00 6e 00 64 00 6c 00 65 00 20 00 3d 00 H.a.n.d.l.e. .=.
20 00 30 00 78 00 25 00 70 00 3a 00 20 00 4c 00 .0.x.%.p.:. .L.
65 00 6e 00 67 00 74 00 68 00 20 00 3d 00 20 00 e.n.g.t.h. .=. .
25 00 6c 00 75 00 0d 00 0a 00 00 00 53 00 69 00 %.l.u.......S.i.
7a 00 65 00 6f 00 66 00 52 00 65 00 73 00 6f 00 z.e.o.f.R.e.s.o.
75 00 72 00 63 00 65 00 00 00 00 00 09 00 09 00 u.r.c.e.........
4c 00 61 00 6e 00 67 00 75 00 61 00 67 00 65 00 L.a.n.g.u.a.g.e.
49 00 44 00 3a 00 20 00 25 00 68 00 75 00 20 00 I.D.:. .%.h.u. .
3d 00 20 00 30 00 78 00 25 00 30 00 34 00 68 00 =. .0.x.%.0.4.h.
58 00 0d 00 0a 00 00 00 47 00 65 00 74 00 4c 00 X.......G.e.t.L.
6f 00 63 00 61 00 6c 00 65 00 49 00 6e 00 66 00 o.c.a.l.e.I.n.f.
6f 00 00 00 00 00 00 00 09 00 09 00 4c 00 61 00 o...........L.a.
6e 00 67 00 75 00 61 00 67 00 65 00 49 00 44 00 n.g.u.a.g.e.I.D.
3a 00 20 00 25 00 68 00 75 00 20 00 3d 00 20 00 :. .%.h.u. .=. .
30 00 78 00 25 00 30 00 34 00 68 00 58 00 20 00 0.x.%.0.4.h.X. .
3b 00 20 00 25 00 6c 00 73 00 2c 00 20 00 25 00 ;. .%.l.s.,. .%.
6c 00 73 00 0d 00 0a 00 00 00 00 00 00 00 00 00 l.s.............
09 00 09 00 4c 00 61 00 6e 00 67 00 75 00 61 00 ....L.a.n.g.u.a.
67 00 65 00 49 00 44 00 3a 00 20 00 30 00 20 00 g.e.I.D.:. .0. .
3d 00 20 00 30 00 78 00 30 00 30 00 30 00 30 00 =. .0.x.0.0.0.0.
20 00 3b 00 20 00 4e 00 65 00 75 00 74 00 72 00 .;. .N.e.u.t.r.
61 00 6c 00 0d 00 0a 00 00 00 00 00 25 00 6c 00 a.l.........%.l.
73 00 28 00 29 00 20 00 72 00 65 00 74 00 75 00 s.(.). .r.e.t.u.
72 00 6e 00 65 00 64 00 20 00 65 00 72 00 72 00 r.n.e.d. .e.r.r.
6f 00 72 00 20 00 25 00 6c 00 75 00 0a 00 00 00 o.r. .%.l.u.....
46 00 69 00 6e 00 64 00 52 00 65 00 73 00 6f 00 F.i.n.d.R.e.s.o.
75 00 72 00 63 00 65 00 45 00 78 00 00 00 00 00 u.r.c.e.E.x.....
45 00 6e 00 75 00 6d 00 52 00 65 00 73 00 6f 00 E.n.u.m.R.e.s.o.
75 00 72 00 63 00 65 00 4c 00 61 00 6e 00 67 00 u.r.c.e.L.a.n.g.
75 00 61 00 67 00 65 00 73 00 45 00 78 00 00 00 u.a.g.e.s.E.x...
09 00 4e 00 61 00 6d 00 65 00 3a 00 20 00 25 00 ..N.a.m.e.:. .%.
6c 00 73 00 0d 00 0a 00 00 00 00 00 09 00 49 00 l.s...........I.
44 00 3a 00 20 00 25 00 68 00 75 00 0d 00 0a 00 D.:. .%.h.u.....
00 00 00 00 45 00 6e 00 75 00 6d 00 52 00 65 00 ....E.n.u.m.R.e.
73 00 6f 00 75 00 72 00 63 00 65 00 4e 00 61 00 s.o.u.r.c.e.N.a.
6d 00 65 00 73 00 45 00 78 00 00 00 4e 00 61 00 m.e.s.E.x...N.a.
6d 00 65 00 3a 00 20 00 25 00 6c 00 73 00 0d 00 m.e.:. .%.l.s...
0a 00 00 00 54 00 79 00 70 00 65 00 3a 00 20 00 ....T.y.p.e.:. .
25 00 68 00 75 00 20 00 3b 00 20 00 25 00 6c 00 %.h.u. .;. .%.l.
73 00 0d 00 0a 00 00 00 43 00 6c 00 6f 00 73 00 s.......C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 28 00 e.H.a.n.d.l.e.(.
29 00 00 00 43 00 6c 00 6f 00 73 00 65 00 48 00 )...C.l.o.s.e.H.
61 00 6e 00 64 00 6c 00 65 00 00 00 4d 00 6f 00 a.n.d.l.e...M.o.
64 00 75 00 6c 00 65 00 20 00 27 00 25 00 6c 00 d.u.l.e. .'.%.l.
73 00 27 00 20 00 75 00 6e 00 6c 00 6f 00 61 00 s.'. .u.n.l.o.a.
64 00 65 00 64 00 0a 00 00 00 00 00 46 00 72 00 d.e.d.......F.r.
65 00 65 00 4c 00 69 00 62 00 72 00 61 00 72 00 e.e.L.i.b.r.a.r.
79 00 00 00 45 00 6e 00 75 00 6d 00 52 00 65 00 y...E.n.u.m.R.e.
73 00 6f 00 75 00 72 00 63 00 65 00 54 00 79 00 s.o.u.r.c.e.T.y.
70 00 65 00 73 00 45 00 78 00 00 00 ff fe 4d 00 p.e.s.E.x.....M.
6f 00 64 00 75 00 6c 00 65 00 20 00 27 00 25 00 o.d.u.l.e. .'.%.
6c 00 73 00 27 00 0d 00 0a 00 0d 00 0a 00 00 00 l.s.'...........
4d 00 6f 00 64 00 75 00 6c 00 65 00 20 00 27 00 M.o.d.u.l.e. .'.
25 00 6c 00 73 00 27 00 20 00 6c 00 6f 00 61 00 %.l.s.'. .l.o.a.
64 00 65 00 64 00 20 00 61 00 74 00 20 00 61 00 d.e.d. .a.t. .a.
64 00 64 00 72 00 65 00 73 00 73 00 20 00 30 00 d.d.r.e.s.s. .0.
78 00 25 00 70 00 0a 00 00 00 00 00 4c 00 6f 00 x.%.p.......L.o.
61 00 64 00 4c 00 69 00 62 00 72 00 61 00 72 00 a.d.L.i.b.r.a.r.
79 00 45 00 78 00 00 00 25 00 6c 00 73 00 28 00 y.E.x...%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 3a 00 20 00 73 00 74 00 .%.l.u.:. .s.t.
61 00 6e 00 64 00 61 00 72 00 64 00 20 00 6f 00 a.n.d.a.r.d. .o.
75 00 74 00 70 00 75 00 74 00 20 00 69 00 73 00 u.t.p.u.t. .i.s.
20 00 6e 00 6f 00 74 00 20 00 72 00 65 00 64 00 .n.o.t. .r.e.d.
69 00 72 00 65 00 63 00 74 00 65 00 64 00 20 00 i.r.e.c.t.e.d. .
74 00 6f 00 20 00 61 00 20 00 66 00 69 00 6c 00 t.o. .a. .f.i.l.
65 00 21 00 0a 00 00 00 46 00 6c 00 75 00 73 00 e.!.....F.l.u.s.
68 00 46 00 69 00 6c 00 65 00 42 00 75 00 66 00 h.F.i.l.e.B.u.f.
66 00 65 00 72 00 73 00 00 00 00 00 47 00 65 00 f.e.r.s.....G.e.
74 00 53 00 74 00 64 00 48 00 61 00 6e 00 64 00 t.S.t.d.H.a.n.d.
6c 00 65 00 00 00 00 00 4e 00 6f 00 20 00 61 00 l.e.....N.o. .a.
72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 3a 00 r.g.u.m.e.n.t.:.
20 00 61 00 20 00 73 00 69 00 6e 00 67 00 6c 00 .a. .s.i.n.g.l.
65 00 20 00 28 00 61 00 62 00 73 00 6f 00 6c 00 e. .(.a.b.s.o.l.
75 00 74 00 65 00 20 00 6f 00 72 00 20 00 72 00 u.t.e. .o.r. .r.
65 00 6c 00 61 00 74 00 69 00 76 00 65 00 29 00 e.l.a.t.i.v.e.).
20 00 70 00 61 00 74 00 68 00 20 00 6e 00 61 00 .p.a.t.h. .n.a.
6d 00 65 00 20 00 6f 00 66 00 20 00 61 00 20 00 m.e. .o.f. .a. .
62 00 69 00 6e 00 61 00 72 00 79 00 20 00 6d 00 b.i.n.a.r.y. .m.
6f 00 64 00 75 00 6c 00 65 00 0a 00 20 00 20 00 o.d.u.l.e... . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 28 00 65 00 76 00 65 00 6e 00 . . .(.e.v.e.n.
74 00 75 00 61 00 6c 00 6c 00 79 00 20 00 6c 00 t.u.a.l.l.y. .l.
6f 00 63 00 61 00 74 00 65 00 64 00 20 00 70 00 o.c.a.t.e.d. .p.
65 00 72 00 20 00 44 00 4c 00 4c 00 20 00 73 00 e.r. .D.L.L. .s.
65 00 61 00 72 00 63 00 68 00 20 00 6f 00 72 00 e.a.r.c.h. .o.r.
64 00 65 00 72 00 29 00 20 00 6d 00 75 00 73 00 d.e.r.). .m.u.s.
74 00 20 00 62 00 65 00 20 00 67 00 69 00 76 00 t. .b.e. .g.i.v.
65 00 6e 00 21 00 0a 00 00 00 00 00 43 00 6f 00 e.n.!.......C.o.
6d 00 6d 00 61 00 6e 00 64 00 4c 00 69 00 6e 00 m.m.a.n.d.L.i.n.
65 00 54 00 6f 00 41 00 72 00 67 00 76 00 00 00 e.T.o.A.r.g.v...
b9 79 37 9e 00 00 00 00 5c 00 00 00 45 54 41 44 .y7.....\...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 b0 4e 01 00 00 00 00 00 00 00 00 00 .....N..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 50 4f 00 00 00 00 00 00 00 00 00 00 ....PO..........
50 51 00 00 00 30 00 00 b0 4f 00 00 00 00 00 00 PQ...0...O......
00 00 00 00 6c 51 00 00 60 30 00 00 00 00 00 00 ....lQ..`0......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
b8 4f 00 00 c8 4f 00 00 d4 4f 00 00 ec 4f 00 00 .O...O...O...O..
f8 4f 00 00 06 50 00 00 1c 50 00 00 2c 50 00 00 .O...P...P..,P..
3c 50 00 00 4e 50 00 00 60 50 00 00 70 50 00 00 <P..NP..`P..pP..
82 50 00 00 9e 50 00 00 b6 50 00 00 c4 50 00 00 .P...P...P...P..
d2 50 00 00 e0 50 00 00 f8 50 00 00 0a 51 00 00 .P...P...P...Q..
1e 51 00 00 30 51 00 00 40 51 00 00 00 00 00 00 .Q..0Q..@Q......
5e 51 00 00 00 00 00 00 24 05 57 72 69 74 65 43 ^Q......$.WriteC
6f 6e 73 6f 6c 65 57 00 25 05 57 72 69 74 65 46 onsoleW.%.WriteF
69 6c 65 00 25 01 46 69 6c 65 54 69 6d 65 54 6f ile.%.FileTimeTo
53 79 73 74 65 6d 54 69 6d 65 00 00 48 03 4c 6f SystemTime..H.Lo
63 61 6c 46 72 65 65 00 44 03 4c 6f 63 61 6c 41 calFree.D.LocalA
6c 6c 6f 63 00 00 67 03 4d 75 6c 74 69 42 79 74 lloc..g.MultiByt
65 54 6f 57 69 64 65 43 68 61 72 00 54 03 4c 6f eToWideChar.T.Lo
63 6b 52 65 73 6f 75 72 63 65 00 00 41 03 4c 6f ckResource..A.Lo
61 64 52 65 73 6f 75 72 63 65 00 00 b1 04 53 69 adResource....Si
7a 65 6f 66 52 65 73 6f 75 72 63 65 00 00 06 02 zeofResource....
47 65 74 4c 6f 63 61 6c 65 49 6e 66 6f 57 00 00 GetLocaleInfoW..
02 02 47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 ..GetLastError..
4d 01 46 69 6e 64 52 65 73 6f 75 72 63 65 45 78 M.FindResourceEx
57 00 fd 00 45 6e 75 6d 52 65 73 6f 75 72 63 65 W...EnumResource
4c 61 6e 67 75 61 67 65 73 45 78 57 00 00 01 01 LanguagesExW....
45 6e 75 6d 52 65 73 6f 75 72 63 65 4e 61 6d 65 EnumResourceName
73 45 78 57 00 00 19 01 45 78 69 74 50 72 6f 63 sExW....ExitProc
65 73 73 00 52 00 43 6c 6f 73 65 48 61 6e 64 6c ess.R.CloseHandl
65 00 62 01 46 72 65 65 4c 69 62 72 61 72 79 00 e.b.FreeLibrary.
05 01 45 6e 75 6d 52 65 73 6f 75 72 63 65 54 79 ..EnumResourceTy
70 65 73 45 78 57 00 00 3e 03 4c 6f 61 64 4c 69 pesExW..>.LoadLi
62 72 61 72 79 45 78 57 00 00 57 01 46 6c 75 73 braryExW..W.Flus
68 46 69 6c 65 42 75 66 66 65 72 73 00 00 87 01 hFileBuffers....
47 65 74 43 6f 6d 6d 61 6e 64 4c 69 6e 65 57 00 GetCommandLineW.
64 02 47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 d.GetStdHandle..
73 04 53 65 74 4c 61 73 74 45 72 72 6f 72 00 00 s.SetLastError..
4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 KERNEL32.dll..5.
77 76 73 70 72 69 6e 74 66 57 00 00 55 53 45 52 wvsprintfW..USER
33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 32.dll..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file RESOURCE.TXT
created in
step 3. to recreate the console application
Portable Executable Resource Enumerator:
CERTUTIL.EXE /DecodeHex /V RESOURCE.TXT RESOURCE.COM
Input Length = 60928 Output Length = 14336 CertUtil: -decodehex command completed successfully.
Overwrite the text file RESOURCE.C
with the following
content:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#ifndef MESSAGE_RESOURCE_ANSI
#define MESSAGE_RESOURCE_ANSI 0
#endif
#ifndef RT_MENUEX
#define RT_MENUEX MAKEINTRESOURCE(13)
#endif
#ifndef RT_NAMETABLE
#define RT_NAMETABLE MAKEINTRESOURCE(15)
#endif
#ifndef RT_DIALOGEX
#define RT_DIALOGEX MAKEINTRESOURCE(18)
#endif
#ifndef RT_DLGINIT
#define RT_DLGINIT MAKEINTRESOURCE(240)
#endif
#ifndef RT_TOOLBAR
#define RT_TOOLBAR MAKEINTRESOURCE(241)
#endif
#ifndef RT_LOCALE
#define RT_LOCALE MAKEINTRESOURCE(255)
#endif
#define VS_BINARY 0U
#define VS_TEXT 1U
typedef struct _VS_VERSIONINFO
{
WORD wSize; // size of 'VERSION' resource
WORD wCount; // = sizeof(VS_FIXEDFILEINFO)
// (number of bytes in binary value)
WORD wType; // = VS_BINARY
WCHAR szKey[16]; // = L"VS_VERSION_INFO"
WORD wPadding; // = 0 (alignment to DWORD)
#if 0
DWORD dwValue[13];
#else
VS_FIXEDFILEINFO vsFFI;
#endif
} VS_VERSIONINFO;
typedef struct _MUI_RESOURCE
{
DWORD dwSignature; // = 0xFECDFECD
DWORD dwSize; // size of "MUI" resource configuration data
DWORD dwVersion; // = 0x00010000
DWORD dwUnknown;
DWORD dwFileType; // = 0x00000011: LN, language-neutral main file
// = 0x00000012: MUI, language-specific satellite file
DWORD dwSystemAttributes;
DWORD dwFallbackLocation; // = 0x00000000: none
// = 0x00000001: internal
// = 0x00000002: external
BYTE bServiceChecksum[16];
BYTE bMainChecksum[16];
DWORD dwReserved[6];
DWORD dwTypeNameMainOffset; // offset and size of named resource types
DWORD dwTypeNameMainSize; // in main file (MULTI_SZ list)
DWORD dwTypeIDMainOffset; // offset and size of unnamed resource types
DWORD dwTypeIDMainSize; // in main file (DWORD array)
DWORD dwTypeNameMUIOffset; // offset and size of named resource types
DWORD dwTypeNameMUISize; // in satellite file (MULTI_SZ list)
DWORD dwTypeIDMUIOffset; // offset and size of unnamed resource types
DWORD dwTypeIDMUISize; // in satellite file (DWORD array)
DWORD dwLanguageNameOffset; // offset and size of language string
DWORD dwLanguageNameSize;
DWORD dwFallbackNameOffset; // offset and size of (ultimate) fallback
DWORD dwFallbackNameSize; // language string
DWORD dwPadding;
// DWORD dwData[0];
} MUI_RESOURCE;
#define MUI_RESOURCE_SIGNATURE 0xFECDFECDUL
#define MUI_RESOURCE_FILETYPE_MAIN 0x00000011UL
#define MUI_RESOURCE_FILETYPE_SATELLITE 0x00000012UL
#define MUI_RESOURCE_FALLBACK_NONE 0x00000000UL
#define MUI_RESOURCE_FALLBACK_INTERNAL 0x00000001UL
#define MUI_RESOURCE_FALLBACK_EXTERNAL 0x00000002UL
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(safebuffers)
BOOL CDECL PrintFormat(HANDLE hFile, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
LPBYTE lpOutput;
DWORD dwOutput;
DWORD dwFile;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
dwOutput *= sizeof(*szOutput);
lpOutput = (LPBYTE) szOutput;
do
{
if (!WriteFile(hFile, lpOutput, dwOutput, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpOutput += dwFile;
dwOutput -= dwFile;
} while (dwOutput != 0);
return TRUE;
}
#define PrintString(HANDLE, LITERAL) PrintDirect(HANDLE, LITERAL, sizeof(LITERAL) / sizeof(*LITERAL) - 1)
__inline
BOOL WINAPI PrintDirect(HANDLE hFile, LPCWSTR lpString, DWORD dwString)
{
DWORD dwFile;
dwString *= sizeof(*lpString);
do
{
if (!WriteFile(hFile, lpString, dwString, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
lpString = (LPCWSTR) ((LPBYTE) lpString + dwFile);
dwString -= dwFile;
} while (dwString != 0);
return TRUE;
}
__inline
LPCWSTR WINAPI MUIFileType(DWORD dwFileType)
{
switch (dwFileType)
{
case MUI_RESOURCE_FILETYPE_MAIN:
return L"LN: language-neutral main file";
case MUI_RESOURCE_FILETYPE_SATELLITE:
return L"MUI: language-specific satellite file";
default:
return NULL;
}
}
__inline
LPCWSTR WINAPI MUIFallbackLocation(DWORD dwFallbackLocation)
{
switch (dwFallbackLocation)
{
case MUI_RESOURCE_FALLBACK_NONE:
return L"none";
case MUI_RESOURCE_FALLBACK_INTERNAL:
return L"internal";
case MUI_RESOURCE_FALLBACK_EXTERNAL:
return L"external";
default:
return NULL;
}
}
LPCWSTR WINAPI ResourceTypeName(WORD wResType)
{
switch (wResType)
{
case RT_CURSOR: // MAKEINTRESOURCE(1)
return L"RT_CURSOR";
case RT_BITMAP: // MAKEINTRESOURCE(2)
return L"RT_BITMAP";
case RT_ICON: // MAKEINTRESOURCE(3)
return L"RT_ICON";
case RT_MENU: // MAKEINTRESOURCE(4)
return L"RT_MENU";
case RT_DIALOG: // MAKEINTRESOURCE(5)
return L"RT_DIALOG";
case RT_STRING: // MAKEINTRESOURCE(6)
#if 1
return L"RT_STRING";
#else
return L"RT_STRINGTABLE";
#endif
case RT_FONTDIR: // MAKEINTRESOURCE(7)
return L"RT_FONTDIR";
case RT_FONT: // MAKEINTRESOURCE(8)
return L"RT_FONT";
case RT_ACCELERATOR: // MAKEINTRESOURCE(9)
return L"RT_ACCELERATOR";
case RT_RCDATA: // MAKEINTRESOURCE(10)
return L"RT_RCDATA";
case RT_MESSAGETABLE: // MAKEINTRESOURCE(11)
return L"RT_MESSAGETABLE";
case RT_GROUP_CURSOR: // MAKEINTRESOURCE(12)
return L"RT_GROUP_CURSOR";
case RT_MENUEX: // MAKEINTRESOURCE(13)
return L"RT_MENUEX";
case RT_GROUP_ICON: // MAKEINTRESOURCE(14)
return L"RT_GROUP_ICON";
case RT_NAMETABLE: // MAKEINTRESOURCE(15)
return L"RT_NAMETABLE";
case RT_VERSION: // MAKEINTRESOURCE(16)
return L"RT_VERSION";
case RT_DLGINCLUDE: // MAKEINTRESOURCE(17)
return L"RT_DLGINCLUDE";
case RT_DIALOGEX: // MAKEINTRESOURCE(18)
return L"RT_DIALOGEX";
case RT_PLUGPLAY: // MAKEINTRESOURCE(19)
return L"RT_PLUGPLAY";
case RT_VXD: // MAKEINTRESOURCE(20)
return L"RT_VXD";
case RT_ANICURSOR: // MAKEINTRESOURCE(21)
return L"RT_ANICURSOR";
case RT_ANIICON: // MAKEINTRESOURCE(22)
return L"RT_ANIICON";
case RT_HTML: // MAKEINTRESOURCE(23)
return L"RT_HTML";
case RT_MANIFEST: // MAKEINTRESOURCE(24)
return L"RT_MANIFEST";
case RT_DLGINIT: // MAKEINTRESOURCE(240)
return L"RT_DLGINIT";
case RT_TOOLBAR: // MAKEINTRESOURCE(241)
return L"RT_TOOLBAR";
case RT_LOCALE: // MAKEINTRESOURCE(255)
return L"RT_LOCALE";
default:
return NULL;
}
}
LPCWSTR WINAPI ResourceLanguageName(WORD wLanguageID, BOOL bSymbolic)
{
switch (wLanguageID)
{
case 0x0000: // = MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_NEUTRAL, SUBLANG_NEUTRAL"
: L"Neutral locale language, neutral sublanguage";
case 0x0400: // = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT) = LANG_USER_DEFAULT
return bSymbolic ? L"LANG_NEUTRAL, SUBLANG_DEFAULT"
: L"User default locale language, user default sublanguage";
case 0x0800: // = MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT) = LANG_SYSTEM_DEFAULT
return bSymbolic ? L"LANG_NEUTRAL, SUBLANG_SYS_DEFAULT"
: L"System default locale language, system default sublanguage";
case 0x0C00: // = MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT)
return bSymbolic ? L"LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT"
: L"Default custom locale language, default custom sublanguage";
case 0x1000: // = MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED)
return bSymbolic ? L"LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED"
: L"Unspecified custom locale language, unspecified custom sublanguage";
case 0x1400: // = MAKELANGID(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT)
return bSymbolic ? L"LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT"
: L"Default custom MUI locale language, default custom MUI sublanguage";
case 0x0001: // = MAKELANGID(LANG_ARABIC, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_NEUTRAL"
: L"Arabic (ar)";
case 0x0401: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_SAUDI_ARABIA)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_SAUDI_ARABIA"
: L"Arabic (ar), Saudi Arabia (SA)";
case 0x0801: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_IRAQ)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_IRAQ"
: L"Arabic (ar), Iraq (IQ)";
case 0x0C01: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_EGYPT)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_EGYPT"
: L"Arabic (ar), Egypt (EG)";
case 0x1001: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_LIBYA)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_LIBYA"
: L"Arabic (ar), Libya (LY)";
case 0x1401: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_ALGERIA)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_ALGERIA"
: L"Arabic (ar), Algeria (DZ)";
case 0x1801: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_MOROCCO)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_MOROCCO"
: L"Arabic (ar), Morocco (MA)";
case 0x1C01: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_TUNISIA)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_TUNISIA"
: L"Arabic (ar), Tunisia (TN)";
case 0x2001: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_OMAN)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_OMAN"
: L"Arabic (ar), Oman (OM)";
case 0x2401: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_YEMEN)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_YEMEN"
: L"Arabic (ar), Yemen (YE)";
case 0x2801: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_SYRIA)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_SYRIA"
: L"Arabic (ar), Syria (SY)";
case 0x2C01: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_JORDAN)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_JORDAN"
: L"Arabic (ar), Jordan (JO)";
case 0x3001: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_LEBANON)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_LEBANON"
: L"Arabic (ar), Lebanon (LB)";
case 0x3401: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_KUWAIT)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_KUWAIT"
: L"Arabic (ar), Kuwait (KW)";
case 0x3801: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_UAE)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_UAE"
: L"Arabic (ar), United Arab Emirates (AE)";
case 0x3C01: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_BAHRAIN)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_BAHRAIN"
: L"Arabic (ar), Bahrain (BH)";
case 0x4001: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_QATAR)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_QATAR"
: L"Arabic (ar), Qatar (QA)";
case 0x4401: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_PSEUDO_SAUDI_ARABIA)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_PSEUDO_SAUDI_ARABIA"
: L"Arabic (ar), Pseudo locale (Ploc), Saudi Arabia (SA)";
case 0x4801: // = MAKELANGID(LANG_ARABIC, SUBLANG_ARABIC_PALESTINE)
return bSymbolic ? L"LANG_ARABIC, SUBLANG_ARABIC_PALESTINE"
: L"Arabic (ar), Occupied Palestinian Territory (145)";
case 0x0002: // = MAKELANGID(LANG_BULGARIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_BULGARIAN, SUBLANG_NEUTRAL"
: L"Bulgarian (bg)";
case 0x0402: // = MAKELANGID(LANG_BULGARIAN, SUBLANG_BULGARIAN_BULGARIA)
return bSymbolic ? L"LANG_BULGARIAN, SUBLANG_BULGARIAN_BULGARIA"
: L"Bulgarian (bg), Bulgaria (BG)";
case 0x0003: // = MAKELANGID(LANG_CATALAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_CATALAN, SUBLANG_NEUTRAL"
: L"Catalan (ca)";
case 0x0403: // = MAKELANGID(LANG_CATALAN, SUBLANG_CATALAN_CATALAN)
return bSymbolic ? L"LANG_CATALAN, SUBLANG_CATALAN_CATALAN"
: L"Catalan (ca), Spain (ES)";
case 0x0803: // = MAKELANGID(LANG_VALENCIAN, SUBLANG_VALENCIAN_VALENCIA)
return bSymbolic ? L"LANG_VALENCIAN, SUBLANG_VALENCIAN_VALENCIA"
: L"Valencian (ca), Valencia (ES-Valencia)";
case 0x0004: // = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
return bSymbolic ? L"LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED"
: L"Chinese (zh), Simplified (Hans)";
case 0x0404: // = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TAIWAN)
return bSymbolic ? L"LANG_CHINESE, SUBLANG_CHINESE_TAIWAN"
: L"Chinese (zh), Taiwan (TW)";
case 0x0804: // = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_PRC)
return bSymbolic ? L"LANG_CHINESE, SUBLANG_CHINESE_PRC"
: L"Chinese (zh), People\'s Republic of China (CN)";
case 0x0C04: // = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_HONGKONG)
return bSymbolic ? L"LANG_CHINESE, SUBLANG_CHINESE_HONGKONG"
: L"Chinese (zh), Hongkong S.A.R. (HK)";
case 0x1004: // = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE)
return bSymbolic ? L"LANG_CHINESE, SUBLANG_CHINESE_SINGAPORE"
: L"Chinese (zh), Singapore (SG)";
case 0x1404: // = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_MACAU)
return bSymbolic ? L"LANG_CHINESE, SUBLANG_CHINESE_MACAU"
: L"Chinese (zh), Macao S.A.R. (MO)";
case 0x7804: // = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE)
return bSymbolic ? L"LANG_CHINESE, SUBLANG_CHINESE"
: L"Chinese (zh)";
case 0x7C04: // = MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL) = LANG_CHINESE_TRADITIONAL
return bSymbolic ? L"LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL"
: L"Chinese (zh), Traditional (Hant)";
case 0x0005: // = MAKELANGID(LANG_CZECH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_CZECH, SUBLANG_NEUTRAL"
: L"Czech (cs)";
case 0x0405: // = MAKELANGID(LANG_CZECH, SUBLANG_CZECH_CZECH_REPUBLIC)
return bSymbolic ? L"LANG_CZECH, SUBLANG_CZECH_CZECH_REPUBLIC"
: L"Czech (cs), Czech Republic (CZ)";
case 0x0006: // = MAKELANGID(LANG_DANISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_DANISH, SUBLANG_NEUTRAL"
: L"Danish (da)";
case 0x0406: // = MAKELANGID(LANG_DANISH, SUBLANG_DANISH_DENMARK)
return bSymbolic ? L"LANG_DANISH, SUBLANG_DANISH_DENMARK"
: L"Danish (da), Denmark (DK)";
case 0x0007: // = MAKELANGID(LANG_GERMAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_GERMAN, SUBLANG_NEUTRAL"
: L"German (de)";
#if 0
case 0x0407: // = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN)
return bSymbolic ? L"LANG_GERMAN, SUBLANG_GERMAN"
: L"German (de), Germany (DE)";
#else
case 0x0407: // = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_GERMANY)
return bSymbolic ? L"LANG_GERMAN, SUBLANG_GERMAN_GERMANY"
: L"German (de), Germany (DE)";
#endif
case 0x0807: // = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_SWISS)
return bSymbolic ? L"LANG_GERMAN, SUBLANG_GERMAN_SWISS"
: L"German (de), Switzerland (CH)";
case 0x0C07: // = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN)
return bSymbolic ? L"LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN"
: L"German (de), Austria (AT)";
case 0x1007: // = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_LUXEMBOURG)
return bSymbolic ? L"LANG_GERMAN, SUBLANG_GERMAN_LUXEMBOURG"
: L"German (de), Luxembourg (LU)";
case 0x1407: // = MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_LIECHTENSTEIN)
return bSymbolic ? L"LANG_GERMAN, SUBLANG_GERMAN_LIECHTENSTEIN"
: L"German (de), Liechtenstein (LI)";
case 0x0008: // = MAKELANGID(LANG_GREEK, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_GREEK, SUBLANG_NEUTRAL"
: L"Greek (el)";
case 0x0408: // = MAKELANGID(LANG_GREEK, SUBLANG_GREEK_GREECE)
return bSymbolic ? L"LANG_GREEK, SUBLANG_GREEK_GREECE"
: L"Greek (el), Greece (GR)";
case 0x0009: // = MAKELANGID(LANG_ENGLISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_NEUTRAL"
: L"English (en)";
case 0x0409: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_US"
: L"English (en), United States (US)";
case 0x0809: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UK)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_UK"
: L"English (en), United Kingdom (GB)";
case 0x0C09: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_AUS)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_AUS"
: L"English (en), Australia (AU)";
case 0x1009: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_CAN)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_CAN"
: L"English (en), Canada (CA)";
case 0x1409: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_NZ)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_NZ"
: L"English (en), New Zealand (NZ)";
#if 0
case 0x1809: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_EIRE)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_EIRE"
: L"English (en), Ireland (IE)";
#else
case 0x1809: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_IRELAND)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_IRELAND"
: L"English (en), Ireland (IE)";
#endif
case 0x1C09: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_SOUTH_AFRICA)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_SOUTH_AFRICA"
: L"English (en), South Africa (ZA)";
case 0x2009: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_JAMAICA)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_JAMAICA"
: L"English (en), Jamaica (JM)";
case 0x2409: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_CARIBBEAN)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_CARIBBEAN"
: L"English (en), Caribbean (029)";
case 0x2809: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_BELIZE)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_BELIZE"
: L"English (en), Belize (BZ)";
case 0x2C09: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_TRINIDAD)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_TRINIDAD"
: L"English (en), Trinidad and Tobago (TT)";
case 0x3009: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_ZIMBABWE)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_ZIMBABWE"
: L"English (en), Zimbabwe (ZW)";
case 0x3409: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_PHILIPPINES)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_PHILIPPINES"
: L"English (en), Philippines (PH)";
case 0x3809: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_INDONESIA)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_INDONESIO"
: L"English (en), Indonesia (ID)";
case 0x3C09: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_HONGKONG)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_HONGKONG"
: L"English (en), Hongkong S.A.R. (HK)";
case 0x4009: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_INDIA)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_INDIA"
: L"English (en), India (IN)";
case 0x4409: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_MALAYSIA)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_MALAYSIA"
: L"English (en), Malaysia (MY)";
case 0x4809: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_SINGAPORE)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_SINGAPORE"
: L"English (en), Singapore (SG)";
case 0x4C09: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_UAE)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_UAE"
: L"English (en), United Arab Emirates (AE)";
case 0x5009: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_BAHRAIN)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_BAHRAIN"
: L"English (en), Bahrain (BH)";
case 0x5409: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_EGYPT)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_EGYPT"
: L"English (en), Egypt (EG)";
case 0x5809: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_JORDAN)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_JORDAN"
: L"English (en), Jordan (JO)";
case 0x5C09: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_KUWAIT)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_KUWAIT"
: L"English (en), Kuwait (KW)";
case 0x6009: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_TURKEY)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_TURKEY"
: L"English (en), Turkey (TR)";
case 0x6409: // = MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_YEMEN)
return bSymbolic ? L"LANG_ENGLISH, SUBLANG_ENGLISH_YEMEN"
: L"English (en), Yemen (YE)";
case 0x000A: // = MAKELANGID(LANG_SPANISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_NEUTRAL"
: L"Spanish (es)";
#if 0
case 0x040A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH"
: L"Spanish (es), Spain (ES), Traditional Sort";
#else
case 0x040A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_SPAIN)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_SPAIN"
: L"Spanish (es), Spain (ES), Traditional Sort";
#endif
case 0x080A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MEXICAN)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_MEXICAN"
: L"Spanish (es), Mexico (MX)";
case 0x0C0A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_MODERN)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_MODERN"
: L"Spanish (es), Spain (ES), Modern Sort";
case 0x100A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_GUATEMALA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_GUATEMALA"
: L"Spanish (es), Guatemala (GT)";
case 0x140A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_COSTA_RICA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_COSTA_RICA"
: L"Spanish (es), Costa Rica (CR)";
case 0x180A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_PANAMA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_PANAMA"
: L"Spanish (es), Panama (PA)";
case 0x1C0A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_DOMINICAN_REPUBLIC)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_DOMINICAN_REPUBLIC"
: L"Spanish (es), Dominican Republic (DO)";
case 0x200A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_VENEZUELA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_VENEZUELA"
: L"Spanish (es), Venezuela (VE)";
case 0x240A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_COLOMBIA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_COLOMBIA"
: L"Spanish (es), Colombia (CO)";
case 0x280A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_PERU)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_PERU"
: L"Spanish (es), Peru (PE)";
case 0x2C0A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_ARGENTINA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_ARGENTINA"
: L"Spanish (es), Argentina (AR)";
case 0x300A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_ECUADOR)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_ECUADOR"
: L"Spanish (es), Ecuador (EC)";
case 0x340A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_CHILE)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_CHILE"
: L"Spanish (es), Chile (CL)";
case 0x380A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_URUGUAY)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_URUGUAY"
: L"Spanish (es), Uruguay (UY)";
case 0x3C0A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_PARAGUAY)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_PARAGUAY"
: L"Spanish (es), Paraguay (PY)";
case 0x400A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_BOLIVIA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_BOLIVIA"
: L"Spanish (es), Bolivia (BO)";
case 0x440A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_EL_SALVADOR)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_EL_SALVADOR"
: L"Spanish (es), El Salvador (SV)";
case 0x480A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_HONDURAS)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_HONDURAS"
: L"Spanish (es), Honduras (HN)";
case 0x4C0A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_NICARAGUA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_NICARAGUA"
: L"Spanish (es), Nicaragua (NI)";
case 0x500A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_PUERTO_RICO)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_PUERTO_RICO"
: L"Spanish (es), Puerto Rico (PR)";
case 0x540A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_US)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_US"
: L"Spanish (es), United States (US)";
case 0x580A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_LATIN_AMERICA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_LATIN_AMERICA"
: L"Spanish (es), Latin America (419)";
case 0x5C0A: // = MAKELANGID(LANG_SPANISH, SUBLANG_SPANISH_CUBA)
return bSymbolic ? L"LANG_SPANISH, SUBLANG_SPANISH_CUBA"
: L"Spanish (es), Cuba (CU)";
case 0x000B: // = MAKELANGID(LANG_FINNISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_FINNISH, SUBLANG_NEUTRAL"
: L"Finnish (fi)";
case 0x040B: // = MAKELANGID(LANG_FINNISH, SUBLANG_FINNISH_FINLAND)
return bSymbolic ? L"LANG_FINNISH, SUBLANG_FINNISH_FINLAND"
: L"Finnish (fi), Finland (FI)";
case 0x000C: // = MAKELANGID(LANG_FRENCH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_NEUTRAL"
: L"French (fr)";
#if 0
case 0x040C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH"
: L"French (fr), France (FR)";
#else
case 0x040C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_FRANCE)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_FRANCE"
: L"French (fr), France (FR)";
#endif
case 0x080C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_BELGIAN)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_BELGIAN"
: L"French (fr), Belgium (BE)";
case 0x0C0C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_CANADIAN)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_CANADIAN"
: L"French (fr), Canada (CA)";
case 0x100C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_SWISS)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_SWISS"
: L"French (fr), Switzerland (CH)";
case 0x140C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_LUXEMBOURG)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_LUXEMBOURG"
: L"French (fr), Luxembourg (LU)";
case 0x180C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_MONACO)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_MONACO"
: L"French (fr), Monaco (MC)";
#if 0
case 0x1C0C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_WEST_INDIES)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_WEST_INDIES"
: L"French (fr), West Indies (WI)";
#else
case 0x1C0C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_CARIBBEAN)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_CARIBBEAN"
: L"French (fr), Caribbean (029)";
#endif
case 0x200C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_REUNION)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_REUNION"
: L"French (fr), Reunion (RE)";
case 0x240C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_CONGO)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_CONGO"
: L"French (fr), Congo (CD)";
case 0x280C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_SENEGAL)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_SENEGAL"
: L"French (fr), Senegal (SN)";
case 0x2C0C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_CAMEROON)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_CAMEROON"
: L"French (fr), Cameroon (CM)";
case 0x300C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_COTE_DE_IVOIRE)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_COTE_DE_IVOIRE"
: L"French (fr), Côte d’Ivoire (CI)";
case 0x340C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_MALI)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_MALI"
: L"French (fr), Mali (ML)";
case 0x380C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_MOROCCO)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_MORROCO"
: L"French (fr), Morroco (MA)";
case 0x3C0C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_HAITI)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_HAITI"
: L"French (fr), Haiti (HT)";
#if 0
case 0xE40C: // = MAKELANGID(LANG_FRENCH, SUBLANG_FRENCH_NORTH_AFRICA)
return bSymbolic ? L"LANG_FRENCH, SUBLANG_FRENCH_NORTH_AFRICA"
: L"French (fr), North Africa (015)";
#endif
case 0x000D: // = MAKELANGID(LANG_HEBREW, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_HEBREW, SUBLANG_NEUTRAL"
: L"Hebrew (he)";
case 0x040D: // = MAKELANGID(LANG_HEBREW, SUBLANG_HEBREW_ISRAEL)
return bSymbolic ? L"LANG_HEBREW, SUBLANG_HEBREW_ISRAEL"
: L"Hebrew (he), Israel (IL)";
case 0x000E: // = MAKELANGID(LANG_HUNGARIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_HUNGARIAN, SUBLANG_NEUTRAL"
: L"Hungarian (hu)";
case 0x040E: // = MAKELANGID(LANG_HUNGARIAN, SUBLANG_HUNGARIAN_HUNGARY)
return bSymbolic ? L"LANG_HUNGARIAN, SUBLANG_HUNGARIAN_HUNGARY"
: L"Hungarian (hu), Hungary (HU)";
case 0x000F: // = MAKELANGID(LANG_ICELANDIC, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ICELANDIC, SUBLANG_NEUTRAL"
: L"Icelandic (is)";
case 0x040F: // = MAKELANGID(LANG_ICELANDIC, SUBLANG_ICELANDIC_ICELAND)
return bSymbolic ? L"LANG_ICELANDIC, SUBLANG_ICELANDIC_ICELAND"
: L"Icelandic (is), Iceland (IS)";
case 0x0010: // = MAKELANGID(LANG_ITALIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ITALIAN, SUBLANG_NEUTRAL"
: L"Italian (it)";
#if 0
case 0x0410: // = MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN)
return bSymbolic ? L"LANG_ITALIAN, SUBLANG_ITALIAN"
: L"Italian (it), Italy (IT)";
#else
case 0x0410: // = MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN_ITALY)
return bSymbolic ? L"LANG_ITALIAN, SUBLANG_ITALIAN_ITALY"
: L"Italian (it), Italy (IT)";
#endif
case 0x0810: // = MAKELANGID(LANG_ITALIAN, SUBLANG_ITALIAN_SWISS)
return bSymbolic ? L"LANG_ITALIAN, SUBLANG_ITALIAN_SWISS"
: L"Italian (it), Switzerland (CH)";
case 0x0011: // = MAKELANGID(LANG_JAPANESE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_JAPANESE, SUBLANG_NEUTRAL"
: L"Japanese (ja)";
case 0x0411: // = MAKELANGID(LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN)
return bSymbolic ? L"LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN"
: L"Japanese (ja), Japan (JP)";
case 0x0811: // = MAKELANGID(LANG_JAPANESE, SUBLANG_JAPANESE_PSEUDO_JAPAN)
return bSymbolic ? L"LANG_JAPANESE, SUBLANG_JAPANESE_PSEUDO_JAPAN"
: L"Japanese (ja), Pseudo locale (Ploc), Japan (JP)";
case 0x0012: // = MAKELANGID(LANG_KOREAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KOREAN, SUBLANG_NEUTRAL"
: L"Korean (ko)";
#if 0
case 0x0412: // = MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN)
return bSymbolic ? L"LANG_KOREAN, SUBLANG_KOREAN"
: L"Korean (ko), Korea (KR)";
#else
case 0x0412: // = MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN_KOREA)
return bSymbolic ? L"LANG_KOREAN, SUBLANG_KOREAN_KOREA"
: L"Korean (ko), Korea (KR)";
#endif
case 0x0013: // = MAKELANGID(LANG_DUTCH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_DUTCH, SUBLANG_NEUTRAL"
: L"Dutch (nl)";
#if 0
case 0x0413: // = MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH)
return bSymbolic ? L"LANG_DUTCH, SUBLANG_DUTCH"
: L"Dutch (nl), Netherlands (NL)";
#else
case 0x0413: // = MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH_NETHERLANDS)
return bSymbolic ? L"LANG_DUTCH, SUBLANG_DUTCH_NETHERLANDS"
: L"Dutch (nl), Netherlands (NL)";
#endif
case 0x0813: // = MAKELANGID(LANG_DUTCH, SUBLANG_DUTCH_BELGIAN)
return bSymbolic ? L"LANG_DUTCH, SUBLANG_DUTCH_BELGIAN"
: L"Dutch (nl), Belgium (BE)";
case 0x0014: // = MAKELANGID(LANG_NORWEGIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_NORWEGIAN, SUBLANG_NEUTRAL"
: L"Norwegian (no)";
case 0x0414: // = MAKELANGID(LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL)
return bSymbolic ? L"LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL"
: L"Bokmål (nb), Norway (NO)";
case 0x0814: // = MAKELANGID(LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK)
return bSymbolic ? L"LANG_NORWEGIAN, SUBLANG_NORWEGIAN_NYNORSK"
: L"Nynorsk (nn), Norway (NO)";
case 0x7814: // = MAKELANGID(LANG_NORWEGIAN, SUBLANG_NYNORSK)
return bSymbolic ? L"LANG_NORWEGIAN, SUBLANG_NYNORSK"
: L"Nynorsk (nn)";
case 0x7C14: // = MAKELANGID(LANG_NORWEGIAN, SUBLANG_BOKMAL)
return bSymbolic ? L"LANG_NORWEGIAN, SUBLANG_BOKMAL"
: L"Bokmål (nb)";
case 0x0015: // = MAKELANGID(LANG_POLISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_POLISH, SUBLANG_NEUTRAL"
: L"Polish (pl)";
case 0x0415: // = MAKELANGID(LANG_POLISH, SUBLANG_POLISH_POLAND)
return bSymbolic ? L"LANG_POLISH, SUBLANG_POLISH_POLAND"
: L"Polish (pl), Poland (PL)";
case 0x0016: // = MAKELANGID(LANG_PORTUGUESE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_PORTUGUESE, SUBLANG_NEUTRAL"
: L"Portuguese (pt)";
case 0x0416: // = MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN)
return bSymbolic ? L"LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN"
: L"Portuguese (pt), Brazil (BR)";
#if 0
case 0x0816: // = MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE)
return bSymbolic ? L"LANG_PORTUGUESE, SUBLANG_PORTUGUESE"
: L"Portuguese (pt), Portugal (PT)";
#else
case 0x0816: // = MAKELANGID(LANG_PORTUGUESE, SUBLANG_PORTUGUESE_PORTUGAL)
return bSymbolic ? L"LANG_PORTUGUESE, SUBLANG_PORTUGUESE_PORTUGAL"
: L"Portuguese (pt), Portugal (PT)";
#endif
case 0x0017: // = MAKELANGID(LANG_ROMANSH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ROMANSH, SUBLANG_NEUTRAL"
: L"Romansh (rm)";
case 0x0417: // = MAKELANGID(LANG_ROMANSH, SUBLANG_ROMANSH_SWITZERLAND)
return bSymbolic ? L"LANG_ROMANSH, SUBLANG_ROMANSH_SWITZERLAND"
: L"Romansh (rm), Switzerland (CH)";
case 0x0018: // = MAKELANGID(LANG_ROMANIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ROMANIAN, SUBLANG_NEUTRAL"
: L"Romanian (ro)";
case 0x0418: // = MAKELANGID(LANG_ROMANIAN, SUBLANG_ROMANIAN_ROMANIA)
return bSymbolic ? L"LANG_ROMANIAN, SUBLANG_ROMANIAN_ROMANIA"
: L"Romanian (ro), Romania (RO)";
case 0x0818: // = MAKELANGID(LANG_ROMANIAN, SUBLANG_ROMANIAN_MOLDAVIA)
return bSymbolic ? L"LANG_ROMANIAN, SUBLANG_ROMANIAN_MOLDAVIA"
: L"Romanian (ro), Moldova (MD)";
case 0x0019: // = MAKELANGID(LANG_RUSSIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_RUSSIAN, SUBLANG_NEUTRAL"
: L"Russian (ru)";
case 0x0419: // = MAKELANGID(LANG_RUSSIAN, SUBLANG_RUSSIAN_RUSSIA)
return bSymbolic ? L"LANG_RUSSIAN, SUBLANG_RUSSIAN_RUSSIA"
: L"Russian (ru), Russia (RU)";
case 0x0819: // = MAKELANGID(LANG_RUSSIAN, SUBLANG_RUSSIAN_MOLDAVIA)
return bSymbolic ? L"LANG_RUSSIAN, SUBLANG_RUSSIAN_MOLDAVIA"
: L"Russian (ru), Moldova (MD)";
case 0x001A: // = MAKELANGID(LANG_CROATIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_CROATIAN, SUBLANG_NEUTRAL"
: L"Croatian (hr)";
case 0x041A: // = MAKELANGID(LANG_CROATIAN, SUBLANG_CROATIAN_CROATIA)
return bSymbolic ? L"LANG_CROATIAN, SUBLANG_CROATIAN_CROATIA"
: L"Croatian (hr), Croatia (HR)";
case 0x081A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_LATIN)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_LATIN"
: L"Serbian (sr), Latin (Latn), Serbia and Montenegro, Former (CS)";
case 0x0C1A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC"
: L"Serbian (sr), Cyrillic (Cyrl), Serbia and Montenegro, Former (CS)";
case 0x101A: // = MAKELANGID(LANG_CROATIAN, SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN)
return bSymbolic ? L"LANG_CROATIAN, SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN"
: L"Croatian (hr), Latin (Latn), Bosnia and Herzegovina (BA)";
case 0x141A: // = MAKELANGID(LANG_BOSNIAN, SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN)
return bSymbolic ? L"LANG_BOSNIAN, SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN"
: L"Bosnian (bs), Latin (Latn), Bosnia and Herzegovina (BA)";
case 0x181A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN"
: L"Serbian (sr), Latin (Latn), Bosnia and Herzegovina (BA)";
case 0x1C1A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC"
: L"Serbian (sr), Cyrillic (Cyrl), Bosnia and Herzegovina (BA)";
case 0x201A: // = MAKELANGID(LANG_BOSNIAN, SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC)
return bSymbolic ? L"LANG_BOSNIAN, SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC"
: L"Bosnian (bs), Cyrillic (Cyrl), Bosnia and Herzegovina (BA)";
case 0x241A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_SERBIA_LATIN)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_SERBIA_LATIN"
: L"Serbian (sr), Latin (Latn), Serbia (RS)";
case 0x281A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_SERBIA_CYRILLIC)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_SERBIA_CYRILLIC"
: L"Serbian (sr), Cyrillic (Cyrl), Serbia (RS)";
case 0x2C1A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_MONTENEGRO_LATIN)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_MONTENEGRO_LATIN"
: L"Serbian (sr), Latin (Latn), Montenegro (ME)";
case 0x301A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC"
: L"Serbian (sr), Cyrillic (Cyrl), Montenegro (ME)";
case 0x641A: // = MAKELANGID(LANG_BOSNIAN, SUBLANG_BOSNIAN_CYRILLIC)
return bSymbolic ? L"LANG_BOSNIAN, SUBLANG_BOSNIAN_CYRILLIC"
: L"Bosnian (bs), Cyrillic (Cyrl)";
case 0x681A: // = MAKELANGID(LANG_BOSNIAN, SUBLANG_BOSNIAN_LATIN)
return bSymbolic ? L"LANG_BOSNIAN, SUBLANG_BOSNIAN_LATIN"
: L"Bosnian (bs), Latin (Latn)";
case 0x6C1A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_CYRILLIC"
: L"Serbian (sr), Cyrillic (Cyrl)";
case 0x701A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_LATIN)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_LATIN"
: L"Serbian (sr), Latin (Latn)";
case 0x741A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN_CROATIA)
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN_CROATIA"
: L"Serbian (sr), Croatia (HR)";
case 0x781A: // = MAKELANGID(LANG_BOSNIAN, SUBLANG_BOSNIAN) = LANG_BOSNIAN_NEUTRAL
return bSymbolic ? L"LANG_BOSNIAN, SUBLANG_BOSNIAN"
: L"Bosnian (bs)";
case 0x7C1A: // = MAKELANGID(LANG_SERBIAN, SUBLANG_SERBIAN) = LANG_SERBIAN_NEUTRAL
return bSymbolic ? L"LANG_SERBIAN, SUBLANG_SERBIAN"
: L"Serbian (sr)";
case 0x001B: // = MAKELANGID(LANG_SLOVAK, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SLOVAK, SUBLANG_NEUTRAL"
: L"Slovak (sk)";
case 0x041B: // = MAKELANGID(LANG_SLOVAK, SUBLANG_SLOVAK_SLOVAKIA)
return bSymbolic ? L"LANG_SLOVAK, SUBLANG_SLOVAK_SLOVAKIA"
: L"Slovak (sk), Slovakia (SK)";
case 0x001C: // = MAKELANGID(LANG_ALBANIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ALBANIAN, SUBLANG_NEUTRAL"
: L"Albanian (sq)";
case 0x041C: // = MAKELANGID(LANG_ALBANIAN, SUBLANG_ALBANIAN_ALBANIA)
return bSymbolic ? L"LANG_ALBANIAN, SUBLANG_ALBANIAN_ALBANIA"
: L"Albanian (sq), Albania (AL)";
case 0x001D: // = MAKELANGID(LANG_SWEDISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SWEDISH, SUBLANG_NEUTRAL"
: L"Swedish (sv)";
#if 0
case 0x041D: // = MAKELANGID(LANG_SWEDISH, SUBLANG_SWEDISH)
return bSymbolic ? L"LANG_SWEDISH, SUBLANG_SWEDISH"
: L"Swedish (sv), Sweden (SE)";
#else
case 0x041D: // = MAKELANGID(LANG_SWEDISH, SUBLANG_SWEDISH_SWEDEN)
return bSymbolic ? L"LANG_SWEDISH, SUBLANG_SWEDISH_SWEDEN"
: L"Swedish (sv), Sweden (SE)";
#endif
case 0x081D: // = MAKELANGID(LANG_SWEDISH, SUBLANG_SWEDISH_FINLAND)
return bSymbolic ? L"LANG_SWEDISH, SUBLANG_SWEDISH_FINLAND"
: L"Swedish (sv), Finland (FI)";
case 0x001E: // = MAKELANGID(LANG_THAI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_THAI, SUBLANG_NEUTRAL"
: L"Thai (th)";
case 0x041E: // = MAKELANGID(LANG_THAI, SUBLANG_THAI_THAILAND)
return bSymbolic ? L"LANG_THAI, SUBLANG_THAI_THAILAND"
: L"Thai (th), Thailand (TH)";
case 0x001F: // = MAKELANGID(LANG_TURKISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TURKISH, SUBLANG_NEUTRAL"
: L"Turkish (tr)";
case 0x041F: // = MAKELANGID(LANG_TURKISH, SUBLANG_TURKISH_TURKEY)
return bSymbolic ? L"LANG_TURKISH, SUBLANG_TURKISH_TURKEY"
: L"Turkish (tr), Turkey (TR)";
case 0x0020: // = MAKELANGID(LANG_URDU, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_URDU, SUBLANG_NEUTRAL"
: L"Urdu (ur)";
case 0x0420: // = MAKELANGID(LANG_URDU, SUBLANG_URDU_PAKISTAN)
return bSymbolic ? L"LANG_URDU, SUBLANG_URDU_PAKISTAN"
: L"Urdu (ur), Pakistan (PK)";
case 0x0820: // = MAKELANGID(LANG_URDU, SUBLANG_URDU_INDIA)
return bSymbolic ? L"LANG_URDU, SUBLANG_URDU_INDIA"
: L"Urdu (ur), India (IN)";
case 0x0021: // = MAKELANGID(LANG_INDONESIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_INDONESIAN, SUBLANG_NEUTRAL"
: L"Indonesian (id)";
case 0x0421: // = MAKELANGID(LANG_INDONESIAN, SUBLANG_INDONESIAN_INDONESIA)
return bSymbolic ? L"LANG_INDONESIAN, SUBLANG_INDONESIAN_INDONESIA"
: L"Indonesian (id), Indonesia (ID)";
case 0x0022: // = MAKELANGID(LANG_UKRAINIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_UKRAINIAN, SUBLANG_NEUTRAL"
: L"Ukrainian (uk)";
case 0x0422: // = MAKELANGID(LANG_UKRAINIAN, SUBLANG_UKRAINIAN_UKRAINE)
return bSymbolic ? L"LANG_UKRAINIAN, SUBLANG_UKRAINIAN_UKRAINE"
: L"Ukrainian (uk), Ukraine (UA)";
case 0x0023: // = MAKELANGID(LANG_BELARUSIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_BELARUSIAN, SUBLANG_NEUTRAL"
: L"Belarusian (be)";
case 0x0423: // = MAKELANGID(LANG_BELARUSIAN, SUBLANG_BELARUSIAN_BELARUS)
return bSymbolic ? L"LANG_BELARUSIAN, SUBLANG_BELARUSIAN_BELARUS"
: L"Belarusian (be), Belarus (BY)";
case 0x0024: // = MAKELANGID(LANG_SLOVENIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SLOVENIAN, SUBLANG_NEUTRAL"
: L"Slovenian (sl)";
case 0x0424: // = MAKELANGID(LANG_SLOVENIAN, SUBLANG_SLOVENIAN_SLOVENIA)
return bSymbolic ? L"LANG_SLOVENIAN, SUBLANG_SLOVENIAN_SLOVENIA"
: L"Slovenian (sl), Slovenia (SI)";
case 0x0025: // = MAKELANGID(LANG_ESTONIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ESTONIAN, SUBLANG_NEUTRAL"
: L"Estonian (et)";
case 0x0425: // = MAKELANGID(LANG_ESTONIAN, SUBLANG_ESTONIAN_ESTONIA)
return bSymbolic ? L"LANG_ESTONIAN, SUBLANG_ESTONIAN_ESTONIA"
: L"Estonian (et), Estonia (EE)";
case 0x0026: // = MAKELANGID(LANG_LATVIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_LATVIAN, SUBLANG_NEUTRAL"
: L"Latvian (lv)";
case 0x0426: // = MAKELANGID(LANG_LATVIAN, SUBLANG_LATVIAN_LATVIA)
return bSymbolic ? L"LANG_LATVIAN, SUBLANG_LATVIAN_LATVIA"
: L"Latvian (lv), Latvia (LV)";
case 0x0027: // = MAKELANGID(LANG_LITHUANIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_LITHUANIAN, SUBLANG_NEUTRAL"
: L"Lithuanian (lt)";
case 0x0427: // = MAKELANGID(LANG_LITHUANIAN, SUBLANG_LITHUANIAN_LITHUANIA)
return bSymbolic ? L"LANG_LITHUANIAN, SUBLANG_LITHUANIAN_LITHUANIA"
: L"Lithuanian (lt), Lithuania (LT)";
case 0x0028: // = MAKELANGID(LANG_TAJIK, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TAJIK, SUBLANG_NEUTRAL"
: L"Tajik (tg)";
case 0x0428: // = MAKELANGID(LANG_TAJIK, SUBLANG_TAJIK_TAJIKISTAN)
return bSymbolic ? L"LANG_TAJIK, SUBLANG_TAJIK_TAJIKISTAN"
: L"Tajik (tg), Cyrillic (Cyrl), Tajikistan (TJ)";
case 0x7C28: // = MAKELANGID(LANG_TAJIK, SUBLANG_TAJIK_CYRILLIC)
return bSymbolic ? L"LANG_TAJIK, SUBLANG_TAJIK_CYRILLIC"
: L"Tajik (tg), Cyrillic (Cyrl)";
#if 0
case 0x0029: // = MAKELANGID(LANG_FARSI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_FARSI, SUBLANG_NEUTRAL"
: L"Farsi (fa)";
case 0x0429: // = MAKELANGID(LANG_FARSI, SUBLANG_FARSI_IRAN)
return bSymbolic ? L"LANG_FARSI, SUBLANG_FARSI_IRAN"
: L"Farsi (fa), Iran (IR)";
#else
case 0x0029: // = MAKELANGID(LANG_PERSIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_PERSIAN, SUBLANG_NEUTRAL"
: L"Persian (fa)";
case 0x0429: // = MAKELANGID(LANG_PERSIAN, SUBLANG_PERSIAN_IRAN)
return bSymbolic ? L"LANG_PERSIAN, SUBLANG_PERSIAN_IRAN"
: L"Persian (fa), Iran (IR)";
#endif
case 0x002A: // = MAKELANGID(LANG_VIETNAMESE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_VIETNAMESE, SUBLANG_NEUTRAL"
: L"Vietnamese (vi)";
case 0x042A: // = MAKELANGID(LANG_VIETNAMESE, SUBLANG_VIETNAMESE_VIETNAM)
return bSymbolic ? L"LANG_VIETNAMESE, SUBLANG_VIETNAMESE_VIETNAM"
: L"Vietnamese (vi), Vietnam (VN)";
case 0x002B: // = MAKELANGID(LANG_ARMENIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ARMENIAN, SUBLANG_NEUTRAL"
: L"Armenian (hy)";
case 0x042B: // = MAKELANGID(LANG_ARMENIAN, SUBLANG_ARMENIAN_ARMENIA)
return bSymbolic ? L"LANG_ARMENIAN, SUBLANG_ARMENIAN_ARMENIA"
: L"Armenian (hy), Armenia (AM)";
#if 0
case 0x002C: // = MAKELANGID(LANG_AZERI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_AZERI, SUBLANG_NEUTRAL"
: L"Azeri (az)";
case 0x042C: // = MAKELANGID(LANG_AZERI, SUBLANG_AZERI_AZERBAIJAN_LATIN)
return bSymbolic ? L"LANG_AZERI, SUBLANG_AZERI_AZERBAIJAN_LATIN"
: L"Azeri (az), Latin (Latn), Azerbaijan (AZ)";
case 0x082C: // = MAKELANGID(LANG_AZERI, SUBLANG_AZERI_AZERBAIJAN_CYRILLIC)
return bSymbolic ? L"LANG_AZERI, SUBLANG_AZERI_AZERBAIJAN_CYRILLIC"
: L"Azeri (az), Cyrillic (Cyrl), Azerbaijan (AZ)";
case 0x742C: // = MAKELANGID(LANG_AZERI, SUBLANG_AZERI_CYRILLIC)
return bSymbolic ? L"LANG_AZERI, SUBLANG_AZERI_CYRILLIC"
: L"Azeri (az), Cyrillic (Cyrl)";
case 0x782C: // = MAKELANGID(LANG_AZERI, SUBLANG_AZERI_LATIN)
return bSymbolic ? L"LANG_AZERI, SUBLANG_AZERI_LATIN"
: L"Azeri (az), Latin (Latn)";
#else
case 0x002C: // = MAKELANGID(LANG_AZERBAIJANI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_AZERBAIJANI, SUBLANG_NEUTRAL"
: L"Azerbaijani (az)";
case 0x042C: // = MAKELANGID(LANG_AZERBAIJANI, SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN)
return bSymbolic ? L"LANG_AZERBAIJANI, SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN"
: L"Azerbaijani (az), Latin (Latn), Azerbaijan (AZ)";
case 0x082C: // = MAKELANGID(LANG_AZERBAIJANI, SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC)
return bSymbolic ? L"LANG_AZERBAIJANI, SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC"
: L"Azerbaijani (az), Cyrillic (Cyrl), Azerbaijan (AZ)";
case 0x742C: // = MAKELANGID(LANG_AZERBAIJANI, SUBLANG_AZERBAIJANI_CYRILLIC)
return bSymbolic ? L"LANG_AZERBAIJANI, SUBLANG_AZERBAIJANI_CYRILLIC"
: L"Azerbaijani (az), Cyrillic (Cyrl)";
case 0x782C: // = MAKELANGID(LANG_AZERBAIJANI, SUBLANG_AZERBAIJANI_LATIN)
return bSymbolic ? L"LANG_AZERBAIJANI, SUBLANG_AZERBAIJANI_LATIN"
: L"Azerbaijani (az), Latin (Latn)";
#endif
case 0x002D: // = MAKELANGID(LANG_BASQUE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_BASQUE, SUBLANG_NEUTRAL"
: L"Basque (eu)";
#if 0
case 0x042D: // = MAKELANGID(LANG_BASQUE, SUBLANG_BASQUE_BASQUE)
return bSymbolic ? L"LANG_BASQUE, SUBLANG_BASQUE_BASQUE"
: L"Basque (eu), Basque (ES)";
#else
case 0x042D: // = MAKELANGID(LANG_BASQUE, SUBLANG_BASQUE_SPAIN)
return bSymbolic ? L"LANG_BASQUE, SUBLANG_BASQUE_SPAIN"
: L"Basque (eu), Spain (ES)";
#endif
case 0x002E: // = MAKELANGID(LANG_UPPER_SORBIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_UPPER_SORBIAN, SUBLANG_NEUTRAL"
: L"Upper Sorbian (hsb)";
case 0x042E: // = MAKELANGID(LANG_UPPER_SORBIAN, SUBLANG_UPPER_SORBIAN_GERMANY)
return bSymbolic ? L"LANG_UPPER_SORBIAN, SUBLANG_UPPER_SORBIAN_GERMANY"
: L"Upper Sorbian (hsb), Germany (DE)";
case 0x082E: // = MAKELANGID(LANG_LOWER_SORBIAN, SUBLANG_LOWER_SORBIAN_GERMANY)
return bSymbolic ? L"LANG_LOWER_SORBIAN, SUBLANG_LOWER_SORBIAN_GERMANY"
: L"Lower Sorbian (dsb), Germany (DE)";
case 0x7C2E: // = MAKELANGID(LANG_LOWER_SORBIAN, SUBLANG_LOWER_SORBIAN)
return bSymbolic ? L"LANG_LOWER_SORBIAN, SUBLANG_LOWER_SORBIAN"
: L"Lower Sorbian (dsb)";
case 0x002F: // = MAKELANGID(LANG_MACEDONIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MACEDONIAN, SUBLANG_NEUTRAL"
: L"Macedonian (mk)";
case 0x042F: // = MAKELANGID(LANG_MACEDONIAN, SUBLANG_MACEDONIAN_MACEDONIA)
return bSymbolic ? L"LANG_MACEDONIAN, SUBLANG_MACEDONIAN_MACEDONIA"
: L"Macedonian (mk), Macedonia, FYROM (MK)";
#if 0
case 0x0030: // = MAKELANGID(LANG_SUTU, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SUTU, SUBLANG_NEUTRAL"
: L"Sutu (st)";
case 0x0430: // = MAKELANGID(LANG_SUTU, SUBLANG_SUTU_SOUTH_AFRICA)
return bSymbolic ? L"LANG_SUTU, SUBLANG_SUTU_SOUTH_AFRICA"
: L"Sutu (st), South Africa (ZA)";
case 0x0830: // = MAKELANGID(LANG_SUTU, SUBLANG_SUTU_BOTSWANA)
return bSymbolic ? L"LANG_SUTU, SUBLANG_SUTU_BOTSWANA"
: L"Sutu (st), Botswana (BW)";
#else
case 0x0030: // = MAKELANGID(LANG_SESOTHO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SESOTHO, SUBLANG_NEUTRAL"
: L"Sesotho (st)";
case 0x0430: // = MAKELANGID(LANG_SESOTHO, SUBLANG_SESOTHO_SOUTH_AFRICA)
return bSymbolic ? L"LANG_SESOTHO, SUBLANG_SESOTHO_SOUTH_AFRICA"
: L"Sesotho (st), South Africa (ZA)";
case 0x0830: // = MAKELANGID(LANG_SESOTHO, SUBLANG_SESOTHO_BOTSWANA)
return bSymbolic ? L"LANG_SESOTHO, SUBLANG_SESOTHO_BOTSWANA"
: L"Sesotho (st), Botswana (BW)";
#endif
case 0x0031: // = MAKELANGID(LANG_TSONGA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TSONGA, SUBLANG_NEUTRAL"
: L"Tsonga (ts)";
case 0x0431: // = MAKELANGID(LANG_TSONGA, SUBLANG_TSONGA_SOUTH_AFRICA)
return bSymbolic ? L"LANG_TSONGA, SUBLANG_TSONGA_SOUTH_AFRICA"
: L"Tsonga (ts), South Africa (ZA)";
case 0x0831: // = MAKELANGID(LANG_TSONGA, SUBLANG_TSONGA_BOTSWANA)
return bSymbolic ? L"LANG_TSONGA, SUBLANG_TSONGA_BOTSWANA"
: L"Tsonga (ts), Botswana (BW)";
#if 0
case 0x0032: // = MAKELANGID(LANG_TSWANA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TSWANA, SUBLANG_NEUTRAL"
: L"Tswana (tn)";
case 0x0432: // = MAKELANGID(LANG_TSWANA, SUBLANG_TSWANA_SOUTH_AFRICA)
return bSymbolic ? L"LANG_TSWANA, SUBLANG_TSWANA_SOUTH_AFRICA"
: L"Tswana (tn), South Africa (ZA)";
case 0x0832: // = MAKELANGID(LANG_TSWANA, SUBLANG_TSWANA_BOTSWANA)
return bSymbolic ? L"LANG_TSWANA, SUBLANG_TSWANA_BOTSWANA"
: L"Tswana (tn), Botswana (BW)";
#else
case 0x0032: // = MAKELANGID(LANG_SETSWANA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SETSWANA, SUBLANG_NEUTRAL"
: L"Setswana (tn)";
case 0x0432: // = MAKELANGID(LANG_SETSWANA, SUBLANG_SETSWANA_SOUTH_AFRICA)
return bSymbolic ? L"LANG_SETSWANA, SUBLANG_SETSWANA_SOUTH_AFRICA"
: L"Setswana (tn), South Africa (ZA)";
case 0x0832: // = MAKELANGID(LANG_SETSWANA, SUBLANG_SETSWANA_BOTSWANA)
return bSymbolic ? L"LANG_SETSWANA, SUBLANG_SETSWANA_BOTSWANA"
: L"Setswana (tn), Botswana (BW)";
#endif
case 0x0033: // = MAKELANGID(LANG_VENDA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_VENDA, SUBLANG_NEUTRAL"
: L"Venda (ve)";
case 0x0433: // = MAKELANGID(LANG_VENDA, SUBLANG_VENDA_SOUTH_AFRICA)
return bSymbolic ? L"LANG_VENDA, SUBLANG_VENDA_SOUTH_AFRICA"
: L"Venda (ve), South Africa (ZA)";
case 0x0034: // = MAKELANGID(LANG_XHOSA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_XHOSA, SUBLANG_NEUTRAL"
: L"Xhosa (xh)";
case 0x0434: // = MAKELANGID(LANG_XHOSA, SUBLANG_XHOSA_SOUTH_AFRICA)
return bSymbolic ? L"LANG_XHOSA, SUBLANG_XHOSA_SOUTH_AFRICA"
: L"Xhosa (xh), South Africa (ZA)";
case 0x0035: // = MAKELANGID(LANG_ZULU, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ZULU, SUBLANG_NEUTRAL"
: L"Zulu (zu)";
case 0x0435: // = MAKELANGID(LANG_ZULU, SUBLANG_ZULU_SOUTH_AFRICA)
return bSymbolic ? L"LANG_ZULU, SUBLANG_ZULU_SOUTH_AFRICA"
: L"Zulu (zu), South Africa (ZA)";
case 0x0036: // = MAKELANGID(LANG_AFRIKAANS, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_AFRIKAANS, SUBLANG_NEUTRAL"
: L"Afrikaans (af)";
case 0x0436: // = MAKELANGID(LANG_AFRIKAANS, SUBLANG_AFRIKAANS_SOUTH_AFRICA)
return bSymbolic ? L"LANG_AFRIKAANS, SUBLANG_AFRIKAANS_SOUTH_AFRICA"
: L"Afrikaans (af), South Africa (ZA)";
case 0x0037: // = MAKELANGID(LANG_GEORGIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_GEORGIAN, SUBLANG_NEUTRAL"
: L"Georgian (ka)";
case 0x0437: // = MAKELANGID(LANG_GEORGIAN, SUBLANG_GEORGIAN_GEORGIA)
return bSymbolic ? L"LANG_GEORGIAN, SUBLANG_GEORGIAN_GEORGIA"
: L"Georgian (ka), Georgia (GE)";
case 0x0038: // = MAKELANGID(LANG_FAEROESE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_FAEROESE, SUBLANG_NEUTRAL"
: L"Faroese (fo)";
case 0x0438: // = MAKELANGID(LANG_FAEROESE, SUBLANG_FAEROESE_FAROE_ISLANDS)
return bSymbolic ? L"LANG_FAEROESE, SUBLANG_FAEROESE_FAROE_ISLANDS"
: L"Faroese (fo), Faroe Islands (FO)";
case 0x0039: // = MAKELANGID(LANG_HINDI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_HINDI, SUBLANG_NEUTRAL"
: L"Hindi (hi)";
case 0x0439: // = MAKELANGID(LANG_HINDI, SUBLANG_HINDI_INDIA)
return bSymbolic ? L"LANG_HINDI, SUBLANG_HINDI_INDIA"
: L"Hindi (hi), India (IN)";
case 0x003A: // = MAKELANGID(LANG_MALTESE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MALTESE, SUBLANG_NEUTRAL"
: L"Maltese (mt)";
case 0x043A: // = MAKELANGID(LANG_MALTESE, SUBLANG_MALTESE_MALTA)
return bSymbolic ? L"LANG_MALTESE, SUBLANG_MALTESE_MALTA"
: L"Maltese (mt), Malta (MT)";
case 0x003B: // = MAKELANGID(LANG_SAMI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SAMI, SUBLANG_NEUTRAL"
: L"Sami (se)";
case 0x043B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_NORTHERN_NORWAY)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_NORTHERN_NORWAY"
: L"Sami (se), Northern, Norway (NO)";
case 0x083B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_NORTHERN_SWEDEN)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_NORTHERN_SWEDEN"
: L"Sami (se), Northern, Sweden (SE)";
case 0x0C3B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_NORTHERN_FINLAND)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_NORTHERN_FINLAND"
: L"Sami (se), Northern, Finland (FI)";
case 0x103B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_LULE_NORWAY)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_LULE_NORWAY"
: L"Sami (smj), Lule, Norway (NO)";
case 0x143B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_LULE_SWEDEN)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_LULE_SWEDEN"
: L"Sami (smj), Lule, Sweden (SE)";
case 0x183B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_SOUTHERN_NORWAY)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_SOUTHERN_NORWAY"
: L"Sami (sma), Southern, Norway (NO)";
case 0x1C3B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_SOUTHERN_SWEDEN)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_SOUTHERN_SWEDEN"
: L"Sami (sma), Southern, Sweden (SE)";
case 0x203B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_SKOLT_FINLAND)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_SKOLT_FINLAND"
: L"Sami (sms), Skolt, Finland (FI)";
case 0x243B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_INARI_FINLAND)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_INARI_FINLAND"
: L"Sami (smn), Inari, Finland (FI)";
case 0x703B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_INARI)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_INARI"
: L"Sami (smn), Inari";
case 0x743B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_SKOLT)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_SKOLT"
: L"Sami (sms), Skolt";
case 0x783B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI"
: L"Sami (sma)";
case 0x7C3B: // = MAKELANGID(LANG_SAMI, SUBLANG_SAMI_LULE)
return bSymbolic ? L"LANG_SAMI, SUBLANG_SAMI_LULE"
: L"Sami (smj), Lule";
case 0x003C: // = MAKELANGID(LANG_IRISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_IRISH, SUBLANG_NEUTRAL"
: L"Irish (ga)";
case 0x083C: // = MAKELANGID(LANG_IRISH, SUBLANG_IRISH_IRELAND)
return bSymbolic ? L"LANG_IRISH, SUBLANG_IRISH_IRELAND"
: L"Irish (ga), Ireland (IE)";
case 0x003D: // = MAKELANGID(LANG_YIDDISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_YIDDISH, SUBLANG_NEUTRAL"
: L"Yiddish (yi)";
case 0x043D: // = MAKELANGID(LANG_YIDDISH, SUBLANG_YIDDISH_HEBREW)
return bSymbolic ? L"LANG_YIDDISH, SUBLANG_YIDDISH_HEBREW"
: L"Yiddish (yi), Hebrew (Hebr)";
case 0x003E: // = MAKELANGID(LANG_MALAY, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MALAY, SUBLANG_NEUTRAL"
: L"Malay (ms)";
case 0x043E: // = MAKELANGID(LANG_MALAY, SUBLANG_MALAY_MALAYSIA)
return bSymbolic ? L"LANG_MALAY, SUBLANG_MALAY_MALAYSIA"
: L"Malay (ms), Malaysia (MY)";
case 0x083E: // = MAKELANGID(LANG_MALAY, SUBLANG_MALAY_BRUNEI_DARUSSALAM)
return bSymbolic ? L"LANG_MALAY, SUBLANG_MALAY_BRUNEI_DARUSSALAM"
: L"Malay (ms), Brunei Darussalam (BN)";
case 0x003F: // = MAKELANGID(LANG_KAZAK, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KAZAK, SUBLANG_NEUTRAL"
: L"Kazakh (kk)";
case 0x043F: // = MAKELANGID(LANG_KAZAK, SUBLANG_KAZAK_KAZAKHSTAN)
return bSymbolic ? L"LANG_KAZAK, SUBLANG_KAZAK_KAZAKHSTAN"
: L"Kazakh (kk), Kazakhstan (KZ)";
case 0x0040: // = MAKELANGID(LANG_KYRGYZ, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KYRGYZ, SUBLANG_NEUTRAL"
: L"Kyrgyz (ky)";
case 0x0440: // = MAKELANGID(LANG_KYRGYZ, SUBLANG_KYRGYZ_KYRGYZSTAN)
return bSymbolic ? L"LANG_KYRGYZ, SUBLANG_KYRGYZ_KYRGYZSTAN"
: L"Kyrgyz (ky), Kyrgyzstan (KG)";
case 0x0041: // = MAKELANGID(LANG_SWAHILI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SWAHILI, SUBLANG_NEUTRAL"
: L"Kiswahili (sw)";
#if 0
case 0x0441: // = MAKELANGID(LANG_SWAHILI, SUBLANG_SWAHILI)
return bSymbolic ? L"LANG_SWAHILI, SUBLANG_SWAHILI"
: L"Kiswahili (sw), Kenya (KE)";
#else
case 0x0441: // = MAKELANGID(LANG_SWAHILI, SUBLANG_SWAHILI_KENYA)
return bSymbolic ? L"LANG_SWAHILI, SUBLANG_SWAHILI_KENYA"
: L"Kiswahili (sw), Kenya (KE)";
#endif
case 0x0042: // = MAKELANGID(LANG_TURKMEN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TURKMEN, SUBLANG_NEUTRAL"
: L"Turkmen (tk)";
case 0x0442: // = MAKELANGID(LANG_TURKMEN, SUBLANG_TURKMEN_TURKMENISTAN)
return bSymbolic ? L"LANG_TURKMEN, SUBLANG_TURKMEN_TURKMENISTAN"
: L"Turkmen (tk), Turkmenistan (TM)";
case 0x0043: // = MAKELANGID(LANG_UZBEK, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_UZBEK, SUBLANG_NEUTRAL"
: L"Uzbek (uz)";
case 0x0443: // = MAKELANGID(LANG_UZBEK, SUBLANG_UZBEK_UZBEKISTAN_LATIN)
return bSymbolic ? L"LANG_UZBEK, SUBLANG_UZBEK_UZBEKISTAN_LATIN"
: L"Uzbek (uz), Latin (Latn), Uzbekistan (UZ)";
case 0x0843: // = MAKELANGID(LANG_UZBEK, SUBLANG_UZBEK_UZBEKISTAN_CYRILLIC)
return bSymbolic ? L"LANG_UZBEK, SUBLANG_UZBEK_UZBEKISTAN_CYRILLIC"
: L"Uzbek (uz), Cyrillic (Cyrl), Uzbekistan (UZ)";
case 0x7843: // = MAKELANGID(LANG_UZBEK, SUBLANG_UZBEK_CYRILLIC)
return bSymbolic ? L"LANG_UZBEK, SUBLANG_UZBEK_CYRILLIC"
: L"Uzbek (uz), Cyrillic (Cyrl)";
case 0x7C43: // = MAKELANGID(LANG_UZBEK, SUBLANG_UZBEK_LATIN)
return bSymbolic ? L"LANG_UZBEK, SUBLANG_UZBEK_LATIN"
: L"Uzbek (uz), Latin (Latn)";
case 0x0044: // = MAKELANGID(LANG_TATAR, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TATAR, SUBLANG_NEUTRAL"
: L"Tatar (tt)";
case 0x0444: // = MAKELANGID(LANG_TATAR, SUBLANG_TATAR_RUSSIA)
return bSymbolic ? L"LANG_TATAR, SUBLANG_TATAR_RUSSIA"
: L"Tatar (tt), Russia (RU)";
case 0x0844: // = MAKELANGID(LANG_TATAR, SUBLANG_TATAR_MONGOLIA)
return bSymbolic ? L"LANG_TATAR, SUBLANG_TATAR_MONGOLIA"
: L"Tatar (tt), Mongolia (MN)";
#if 0
case 0x0045: // = MAKELANGID(LANG_BENGALI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_BENGALI, SUBLANG_NEUTRAL"
: L"Bengali (bn)";
case 0x0445: // = MAKELANGID(LANG_BENGALI, SUBLANG_BENGALI_INDIA)
return bSymbolic ? L"LANG_BENGALI, SUBLANG_BENGALI_INDIA"
: L"Bengali (bn), India (IN)";
case 0x0845: // = MAKELANGID(LANG_BENGALI, SUBLANG_BENGALI_BANGLADESH)
return bSymbolic ? L"LANG_BENGALI, SUBLANG_BENGALI_BANGLADESH"
: L"Bengali (bn), Bangladesh (BD)";
#else
case 0x0045: // = MAKELANGID(LANG_BANGLA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_BANGLA, SUBLANG_NEUTRAL"
: L"Bangla (bn)";
case 0x0445: // = MAKELANGID(LANG_BANGLA, SUBLANG_BANGLA_INDIA)
return bSymbolic ? L"LANG_BANGLA, SUBLANG_BANGLA_INDIA"
: L"Bangla (bn), India (IN)";
case 0x0845: // = MAKELANGID(LANG_BANGLA, SUBLANG_BANGLA_BANGLADESH)
return bSymbolic ? L"LANG_BANGLA, SUBLANG_BANGLA_BANGLADESH"
: L"Bangla (bn), Bangladesh (BD)";
#endif
case 0x0046: // = MAKELANGID(LANG_PUNJABI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_PUNJABI, SUBLANG_NEUTRAL"
: L"Punjabi (pa)";
case 0x0446: // = MAKELANGID(LANG_PUNJABI, SUBLANG_PUNJABI_INDIA)
return bSymbolic ? L"LANG_PUNJABI, SUBLANG_PUNJABI_INDIA"
: L"Punjabi (pa), Gurmukhi script, India (IN)";
case 0x0846: // = MAKELANGID(LANG_PUNJABI, SUBLANG_PUNJABI_PAKISTAN)
return bSymbolic ? L"LANG_PUNJABI, SUBLANG_PUNJABI_PAKISTAN"
: L"Punjabi (pa), Arabic (Arab), Pakistan (PK)";
case 0x7C46: // = MAKELANGID(LANG_PUNJABI, SUBLANG_PUNJABI_ARABIC)
return bSymbolic ? L"LANG_PUNJABI, SUBLANG_PUNJABI_ARABIC"
: L"Punjabi (pa), Arabic (Arab)";
case 0x0047: // = MAKELANGID(LANG_GUJARATI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_GUJARATI, SUBLANG_NEUTRAL"
: L"Gujarati (gu)";
case 0x0447: // = MAKELANGID(LANG_GUJARATI, SUBLANG_GUJARATI_INDIA)
return bSymbolic ? L"LANG_GUJARATI, SUBLANG_GUJARATI_INDIA"
: L"Gujarati (gu), India (IN)";
#if 0
case 0x0048: // = MAKELANGID(LANG_ORIYA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ORIYA, SUBLANG_NEUTRAL"
: L"Oriya (or)";
case 0x0448: // = MAKELANGID(LANG_ORIYA, SUBLANG_ORIYA_INDIA)
return bSymbolic ? L"LANG_ORIYA, SUBLANG_ORIYA_INDIA"
: L"Oriya (or), India (IN)";
#else
case 0x0048: // = MAKELANGID(LANG_ODIA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ODIA, SUBLANG_NEUTRAL"
: L"Odia (or)";
case 0x0448: // = MAKELANGID(LANG_ODIA, SUBLANG_ODIA_INDIA)
return bSymbolic ? L"LANG_ODIA, SUBLANG_ODIA_INDIA"
: L"Odia (or), India (IN)";
#endif
case 0x0049: // = MAKELANGID(LANG_TAMIL, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TAMIL, SUBLANG_NEUTRAL"
: L"Tamil (ta)";
case 0x0449: // = MAKELANGID(LANG_TAMIL, SUBLANG_TAMIL_INDIA)
return bSymbolic ? L"LANG_TAMIL, SUBLANG_TAMIL_INDIA"
: L"Tamil (ta), India (IN)";
case 0x0849: // = MAKELANGID(LANG_TAMIL, SUBLANG_TAMIL_SRI_LANKA)
return bSymbolic ? L"LANG_TAMIL, SUBLANG_TAMIL_SRI_LANKA"
: L"Tamil (ta), Sri Lanka (LK)";
case 0x004A: // = MAKELANGID(LANG_TELUGU, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TELUGU, SUBLANG_NEUTRAL"
: L"Telugu (te)";
case 0x044A: // = MAKELANGID(LANG_TELUGU, SUBLANG_TELUGU_INDIA)
return bSymbolic ? L"LANG_TELUGU, SUBLANG_TELUGU_INDIA"
: L"Telugu (te), India (IN)";
case 0x004B: // = MAKELANGID(LANG_KANNADA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KANNADA, SUBLANG_NEUTRAL"
: L"Kannada (kn)";
case 0x044B: // = MAKELANGID(LANG_KANNADA, SUBLANG_KANNADA_INDIA)
return bSymbolic ? L"LANG_KANNADA, SUBLANG_KANNADA_INDIA"
: L"Kannada (kn), India (IN)";
case 0x004C: // = MAKELANGID(LANG_MALAYALAM, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MALAYALAM, SUBLANG_NEUTRAL"
: L"Malayalam (ml)";
case 0x044C: // = MAKELANGID(LANG_MALAYALAM, SUBLANG_MALAYALAM_INDIA)
return bSymbolic ? L"LANG_MALAYALAM, SUBLANG_MALAYALAM_INDIA"
: L"Malayalam (ml), India (IN)";
case 0x004D: // = MAKELANGID(LANG_ASSAMESE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ASSAMESE, SUBLANG_NEUTRAL"
: L"Assamese (as)";
case 0x044D: // = MAKELANGID(LANG_ASSAMESE, SUBLANG_ASSAMESE_INDIA)
return bSymbolic ? L"LANG_ASSAMESE, SUBLANG_ASSAMESE_INDIA"
: L"Assamese (as), India (IN)";
case 0x004E: // = MAKELANGID(LANG_MARATHI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MARATHI, SUBLANG_NEUTRAL"
: L"Marathi (mr)";
case 0x044E: // = MAKELANGID(LANG_MARATHI, SUBLANG_MARATHI_INDIA)
return bSymbolic ? L"LANG_MARATHI, SUBLANG_MARATHI_INDIA"
: L"Marathi (mr), India (IN)";
case 0x004F: // = MAKELANGID(LANG_SANSKRIT, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SANSKRIT, SUBLANG_NEUTRAL"
: L"Sanskrit (sa)";
case 0x044F: // = MAKELANGID(LANG_SANSKRIT, SUBLANG_SANSKRIT_INDIA)
return bSymbolic ? L"LANG_SANSKRIT, SUBLANG_SANSKRIT_INDIA"
: L"Sanskrit (sa), India (IN)";
case 0x0050: // = MAKELANGID(LANG_MONGOLIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MONGOLIAN, SUBLANG_NEUTRAL"
: L"Mongolian (mn)";
case 0x0450: // = MAKELANGID(LANG_MONGOLIAN, SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA)
return bSymbolic ? L"LANG_MONGOLIAN, SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA"
: L"Mongolian (mn), Cyrillic (Cyrl), Mongolia (MN)";
case 0x0850: // = MAKELANGID(LANG_MONGOLIAN, SUBLANG_MONGOLIAN_PRC)
return bSymbolic ? L"LANG_MONGOLIAN, SUBLANG_MONGOLIAN_PRC"
: L"Mongolian (mn), Mongolian (Mong), People\'s Republic of China (CN)";
case 0x0C50: // = MAKELANGID(LANG_MONGOLIAN, SUBLANG_MONGOLIAN_MONGOLIAN_MONGOLIA)
return bSymbolic ? L"LANG_MONGOLIAN, SUBLANG_MONGOLIAN_MONGOLIAN_MONGOLIA"
: L"Mongolian (mn), Mongolian (Mong), Mongolia (MN)";
case 0x7850: // = MAKELANGID(LANG_MONGOLIAN, SUBLANG_MONGOLIAN_CYRILLIC)
return bSymbolic ? L"LANG_MONGOLIAN, SUBLANG_MONGOLIAN_CYRILLIC"
: L"Mongolian (mn), Cyrillic (Cyrl)";
case 0x7C50: // = MAKELANGID(LANG_MONGOLIAN, SUBLANG_MONGOLIAN_MONGOLIAN)
return bSymbolic ? L"LANG_MONGOLIAN, SUBLANG_MONGOLIAN_MONGOLIAN"
: L"Mongolian (mn), Mongolian (Mong)";
case 0x0051: // = MAKELANGID(LANG_TIBETAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TIBETAN, SUBLANG_NEUTRAL"
: L"Tibetan (bo)";
case 0x0451: // = MAKELANGID(LANG_TIBETAN, SUBLANG_TIBETAN_PRC)
return bSymbolic ? L"LANG_TIBETAN, SUBLANG_TIBETAN_PRC"
: L"Tibetan (bo), People\'s Republic of China (CN)";
case 0x0851: // = MAKELANGID(LANG_TIBETAN, SUBLANG_TIBETAN_BHUTAN)
return bSymbolic ? L"LANG_TIBETAN, SUBLANG_TIBETAN_BHUTAN"
: L"Tibetan (bo), Bhutan (BT)";
case 0x0C51: // = MAKELANGID(LANG_DZONGKHA, SUBLANG_DZONGKHA_BHUTAN)
return bSymbolic ? L"LANG_DZONGKHA, SUBLANG_DZONGKHA_BHUTAN"
: L"Dzongkha (dz), Bhutan (BT)";
case 0x0052: // = MAKELANGID(LANG_WELSH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_WELSH, SUBLANG_NEUTRAL"
: L"Welsh (cy)";
case 0x0452: // = MAKELANGID(LANG_WELSH, SUBLANG_WELSH_UNITED_KINGDOM)
return bSymbolic ? L"LANG_WELSH, SUBLANG_WELSH_UNITED_KINGDOM"
: L"Welsh (cy), United Kingdom (GB)";
case 0x0053: // = MAKELANGID(LANG_KHMER, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KHMER, SUBLANG_NEUTRAL"
: L"Khmer (kh)";
case 0x0453: // = MAKELANGID(LANG_KHMER, SUBLANG_KHMER_CAMBODIA)
return bSymbolic ? L"LANG_KHMER, SUBLANG_KHMER_CAMBODIA"
: L"Khmer (kh), Cambodia (KH)";
case 0x0054: // = MAKELANGID(LANG_LAO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_LAO, SUBLANG_NEUTRAL"
: L"Lao (lo)";
case 0x0454: // = MAKELANGID(LANG_LAO, SUBLANG_LAO_LAO)
return bSymbolic ? L"LANG_LAO, SUBLANG_LAO_LAO"
: L"Lao (lo), Lao P.D.R. (LA)";
#if 0
case 0x0055: // = MAKELANGID(LANG_BIRMESE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_BIRMESE, SUBLANG_NEUTRAL"
: L"Birmese (my)";
case 0x0455: // = MAKELANGID(LANG_BIRMESE, SUBLANG_BIRMESE_MYANMAR)
return bSymbolic ? L"LANG_BIRMESE, SUBLANG_BIRMESE_MYANMAR"
: L"Birmese (my), Myanmar (MM)";
#else
case 0x0055: // = MAKELANGID(LANG_BURMESE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_BURMESE, SUBLANG_NEUTRAL"
: L"Burmese (my)";
case 0x0455: // = MAKELANGID(LANG_BURMESE, SUBLANG_BURMESE_MYANMAR)
return bSymbolic ? L"LANG_BURMESE, SUBLANG_BURMESE_MYANMAR"
: L"Burmese (my), Myanmar (MM)";
#endif
case 0x0056: // = MAKELANGID(LANG_GALICIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_GALICIAN, SUBLANG_NEUTRAL"
: L"Galician (gl)";
case 0x0456: // = MAKELANGID(LANG_GALICIAN, SUBLANG_GALICIAN_GALICIAN)
return bSymbolic ? L"LANG_GALICIAN, SUBLANG_GALICIAN_GALICIAN"
: L"Galician (gl), Spain (ES)";
case 0x0057: // = MAKELANGID(LANG_KONKANI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KONKANI, SUBLANG_NEUTRAL"
: L"Konkani (kok)";
case 0x0457: // = MAKELANGID(LANG_KONKANI, SUBLANG_KONKANI_INDIA)
return bSymbolic ? L"LANG_KONKANI, SUBLANG_KONKANI_INDIA"
: L"Konkani (kok), India (IN)";
case 0x0058: // = MAKELANGID(LANG_MANIPURI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MANIPURI, SUBLANG_NEUTRAL"
: L"Manipuri (mni)";
case 0x0458: // = MAKELANGID(LANG_MANIPURI, SUBLANG_MANIPURI_INDIA)
return bSymbolic ? L"LANG_MANIPURI, SUBLANG_MANIPURI_INDIA"
: L"Manipuri (mni), India (IN)";
case 0x0059: // = MAKELANGID(LANG_SINDHI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SINDHI, SUBLANG_NEUTRAL"
: L"Sindhi (sd)";
case 0x0459: // = MAKELANGID(LANG_SINDHI, SUBLANG_SINDHI_INDIA_DEVANAGARI)
return bSymbolic ? L"LANG_SINDHI, SUBLANG_SINDHI_INDIA_DEVANAGARI"
: L"Sindhi (sd), Devanagari (Deva), India (IN)";
case 0x0859: // = MAKELANGID(LANG_SINDHI, SUBLANG_SINDHI_PAKISTAN)
return bSymbolic ? L"LANG_SINDHI, SUBLANG_SINDHI_PAKISTAN"
: L"Sindhi (sd), Arabic (Arab), Pakistan (PK)";
case 0x0C59: // = MAKELANGID(LANG_SINDHI, SUBLANG_SINDHI_AFGHANISTAN)
return bSymbolic ? L"LANG_SINDHI, SUBLANG_SINDHI_AFGHANISTAN"
: L"Sindhi (sd), Afghanistan (AF)";
case 0x7C59: // = MAKELANGID(LANG_SINDHI, SUBLANG_SINDHI_ARABIC)
return bSymbolic ? L"LANG_SINDHI, SUBLANG_SINDHI_ARABIC"
: L"Sindhi (sd), Arabic (Arab)";
case 0x005A: // = MAKELANGID(LANG_SYRIAC, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SYRIAC, SUBLANG_NEUTRAL"
: L"Syriac (syr)";
#if 0
case 0x045A: // = MAKELANGID(LANG_SYRIAC, SUBLANG_SYRIAC)
return bSymbolic ? L"LANG_SYRIAC, SUBLANG_SYRIAC"
: L"Syriac (syr), Syria (SY)";
#else
case 0x045A: // = MAKELANGID(LANG_SYRIAC, SUBLANG_SYRIAC_SYRIA)
return bSymbolic ? L"LANG_SYRIAC, SUBLANG_SYRIAC_SYRIA"
: L"Syriac (syr), Syria (SY)";
#endif
case 0x005B: // = MAKELANGID(LANG_SINHALESE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SINHALESE, SUBLANG_NEUTRAL"
: L"Sinhala (si)";
case 0x045B: // = MAKELANGID(LANG_SINHALESE, SUBLANG_SINHALESE_SRI_LANKA)
return bSymbolic ? L"LANG_SINHALESE, SUBLANG_SINHALESE_SRI_LANKA"
: L"Sinhala (si), Sri Lanka (LK)";
case 0x005C: // = MAKELANGID(LANG_CHEROKEE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_CHEROKEE, SUBLANG_NEUTRAL"
: L"Cherokee (chr)";
case 0x045C: // = MAKELANGID(LANG_CHEROKEE, SUBLANG_CHEROKEE_US)
return bSymbolic ? L"LANG_CHEROKEE, SUBLANG_CHEROKEE_US"
: L"Cherokee (chr), Cherokee (Cher), United States (US)";
case 0x7C5C: // = MAKELANGID(LANG_CHEROKEE, SUBLANG_CHEROKEE_CHEROKEE)
return bSymbolic ? L"LANG_CHEROKEE, SUBLANG_CHEROKEE_CHEROKEE"
: L"Cherokee (chr), Cherokee (Cher)";
case 0x005D: // = MAKELANGID(LANG_INUKTITUT, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_INUKTITUT, SUBLANG_NEUTRAL"
: L"Inuktitut (iu)";
case 0x045D: // = MAKELANGID(LANG_INUKTITUT, SUBLANG_INUKTITUT_CANADA)
return bSymbolic ? L"LANG_INUKTITUT, SUBLANG_INUKTITUT_CANADA"
: L"Inuktitut (iu), Syllabic (Cans), Canada (CA)";
case 0x085D: // = MAKELANGID(LANG_INUKTITUT, SUBLANG_INUKTITUT_CANADA_LATIN)
return bSymbolic ? L"LANG_INUKTITUT, SUBLANG_INUKTITUT_CANADA_LATIN"
: L"Inuktitut (iu), Latin (Latn), Canada (CA)";
case 0x785D: // = MAKELANGID(LANG_INUKTITUT, SUBLANG_INUKTITUT)
return bSymbolic ? L"LANG_INUKTITUT, SUBLANG_INUKTITUT"
: L"Inuktitut (iu), Syllabic (Cans)";
case 0x7C5D: // = MAKELANGID(LANG_INUKTITUT, SUBLANG_INUKTITUT_LATIN)
return bSymbolic ? L"LANG_INUKTITUT, SUBLANG_INUKTITUT_LATIN"
: L"Inuktitut (iu), Latin (Latn)";
case 0x005E: // = MAKELANGID(LANG_AMHARIC, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_AMHARIC, SUBLANG_NEUTRAL"
: L"Amharic (am)";
case 0x045E: // = MAKELANGID(LANG_AMHARIC, SUBLANG_AMHARIC_ETHIOPIA)
return bSymbolic ? L"LANG_AMHARIC, SUBLANG_AMHARIC_ETHIOPIA"
: L"Amharic (am), Ethiopia (ET)";
case 0x005F: // = MAKELANGID(LANG_TAMAZIGHT, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TAMAZIGHT, SUBLANG_NEUTRAL"
: L"Tamazight (tzm)";
case 0x045F: // = MAKELANGID(LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_MOROCCO_ARABIC)
return bSymbolic ? L"LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_MOROCCO_ARABIC"
: L"Tamazight (tmz), Arabic (Arab), Morocco (MA)";
case 0x085F: // = MAKELANGID(LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_ALGERIA_LATIN)
return bSymbolic ? L"LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_ALGERIA_LATIN"
: L"Tamazight (tzm), Latin (Latn), Algeria (DZ)";
case 0x0C5F: // = MAKELANGID(LANG_TAMANAKU, SUBLANG_TAMANAKU_MOROCCO)
return bSymbolic ? L"LANG_TAMANAKU, SUBLANG_TAMANAKU_MOROCCO"
: L"Tamanaku (tmz), Morocco (MA)";
case 0x105F: // = MAKELANGID(LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_MOROCCO_TIFINAGH)
return bSymbolic ? L"LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_MOROCCO_TIFINAGH"
: L"Tamazight (tzm), Tifinagh (Tfng), Morocco (MA)";
case 0x785F: // = MAKELANGID(LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_TIFINAGH)
return bSymbolic ? L"LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_TIFINAGH"
: L"Tamazight (tzm), Tifinagh (Tfng)";
case 0x7C5F: // = MAKELANGID(LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_LATIN)
return bSymbolic ? L"LANG_TAMAZIGHT, SUBLANG_TAMAZIGHT_LATIN"
: L"Tamazight (tzm), Latin (Latn)";
case 0x0060: // = MAKELANGID(LANG_KASHMIRI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KASHMIRI, SUBLANG_NEUTRAL"
: L"Kashmiri (ks)";
case 0x0460: // = MAKELANGID(LANG_KASHMIRI, SUBLANG_KASHMIRI_ARABIC)
return bSymbolic ? L"LANG_KASHMIRI, SUBLANG_KASHMIRI_ARABIC"
: L"Kashmiri (ks), Arabic (Arab)";
#if 0
case 0x0860: // = MAKELANGID(LANG_KASHMIRI, SUBLANG_KASHMIRI_INDIA)
return bSymbolic ? L"LANG_KASHMIRI, SUBLANG_KASHMIRI_INDIA"
: L"Kashmiri (ks), India (IN)";
#elif 0
case 0x0860: // = MAKELANGID(LANG_KASHMIRI, SUBLANG_KASHMIRI_SASIA)
return bSymbolic ? L"LANG_KASHMIRI, SUBLANG_KASHMIRI_SASIA"
: L"Kashmiri (ks), South Asia";
#else
case 0x0860: // = MAKELANGID(LANG_KASHMIRI, SUBLANG_KASHMIRI_DEVANAGARI)
return bSymbolic ? L"LANG_KASHMIRI, SUBLANG_KASHMIRI_DEVANAGARI"
: L"Kashmiri (ks), Devanagari (Deva)";
#endif
case 0x0061: // = MAKELANGID(LANG_NEPALI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_NEPALI, SUBLANG_NEUTRAL"
: L"Nepali (ne)";
case 0x0461: // = MAKELANGID(LANG_NEPALI, SUBLANG_NEPALI_NEPAL)
return bSymbolic ? L"LANG_NEPALI, SUBLANG_NEPALI_NEPAL"
: L"Nepali (ne), Nepal (NP)";
case 0x0861: // = MAKELANGID(LANG_NEPALI, SUBLANG_NEPALI_INDIA)
return bSymbolic ? L"LANG_NEPALI, SUBLANG_NEPALI_INDIA"
: L"Nepali (ne), India (IN)";
case 0x0062: // = MAKELANGID(LANG_FRISIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_FRISIAN, SUBLANG_NEUTRAL"
: L"Frisian (fy)";
case 0x0462: // = MAKELANGID(LANG_FRISIAN, SUBLANG_FRISIAN_NETHERLANDS)
return bSymbolic ? L"LANG_FRISIAN, SUBLANG_FRISIAN_NETHERLANDS"
: L"Frisian (fy), Netherlands (NL)";
case 0x0063: // = MAKELANGID(LANG_PASHTO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_PASHTO, SUBLANG_NEUTRAL"
: L"Pashto (ps)";
case 0x0463: // = MAKELANGID(LANG_PASHTO, SUBLANG_PASHTO_AFGHANISTAN)
return bSymbolic ? L"LANG_PASHTO, SUBLANG_PASHTO_AFGHANISTAN"
: L"Pashto (ps), Afghanistan (AF)";
case 0x0064: // = MAKELANGID(LANG_FILIPINO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_FILIPINO, SUBLANG_NEUTRAL"
: L"Filipino (fil)";
case 0x0464: // = MAKELANGID(LANG_FILIPINO, SUBLANG_FILIPINO_PHILIPPINES)
return bSymbolic ? L"LANG_FILIPINO, SUBLANG_FILIPINO_PHILIPPINES"
: L"Filipino (fil), Philippines (PH)";
case 0x0065: // = MAKELANGID(LANG_DIVEHI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_DIVEHI, SUBLANG_NEUTRAL"
: L"Divehi (div)";
case 0x0465: // = MAKELANGID(LANG_DIVEHI, SUBLANG_DIVEHI_MALDIVES)
return bSymbolic ? L"LANG_DIVEHI, SUBLANG_DIVEHI_MALDIVES"
: L"Divehi (div), Maldives (MV)";
case 0x0066: // = MAKELANGID(LANG_EDO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_EDO, SUBLANG_NEUTRAL"
: L"Bini / Edo (bin)";
case 0x0466: // = MAKELANGID(LANG_EDO, SUBLANG_EDO_NIGERIA)
return bSymbolic ? L"LANG_EDO, SUBLANG_EDO_NIGERIA"
: L"Bini / Edo (bin), Nigeria (NG)";
case 0x0067: // = MAKELANGID(LANG_FULAH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_FULAH, SUBLANG_NEUTRAL"
: L"Fulah (ff)";
case 0x0467: // = MAKELANGID(LANG_FULAH, SUBLANG_FULAH_NIGERIA)
return bSymbolic ? L"LANG_FULAH, SUBLANG_FULAH_NIGERIA"
: L"Fulah (ff), Nigeria (NG)";
case 0x0867: // = MAKELANGID(LANG_FULAH, SUBLANG_FULAH_SENEGAL)
return bSymbolic ? L"LANG_FULAH, SUBLANG_FULAH_SENEGAL"
: L"Fulah (ff), Latin (Latn), Senegal (SN)";
case 0x7C67: // = MAKELANGID(LANG_FULAH, SUBLANG_FULAH_LATIN)
return bSymbolic ? L"LANG_FULAH, SUBLANG_FULAH_LATIN"
: L"Fulah (ff), Latin (Latn)";
case 0x0068: // = MAKELANGID(LANG_HAUSA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_HAUSA, SUBLANG_NEUTRAL"
: L"Hausa (ha)";
case 0x0468: // = MAKELANGID(LANG_HAUSA, SUBLANG_HAUSA_NIGERIA_LATIN)
return bSymbolic ? L"LANG_HAUSA, SUBLANG_HAUSA_NIGERIA_LATIN"
: L"Hausa (ha), Latin (Latn), Nigeria (NG)";
case 0x7C68: // = MAKELANGID(LANG_HAUSA, SUBLANG_HAUSA_LATIN)
return bSymbolic ? L"LANG_HAUSA, SUBLANG_HAUSA_LATIN"
: L"Hausa (ha), Latin (Latn)";
case 0x0069: // = MAKELANGID(LANG_IBIBIO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_IBIBIO, SUBLANG_NEUTRAL"
: L"Ibibio (ibb)";
case 0x0469: // = MAKELANGID(LANG_IBIBIO, SUBLANG_IBIBIO_NIGERIA)
return bSymbolic ? L"LANG_IBIBIO, SUBLANG_IBIBIO_NIGERIA"
: L"Ibibio (ibb), Nigeria (NG)";
case 0x006A: // = MAKELANGID(LANG_YORUBA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_YORUBA, SUBLANG_NEUTRAL"
: L"Yoruba (yo)";
case 0x046A: // = MAKELANGID(LANG_YORUBA, SUBLANG_YORUBA_NIGERIA)
return bSymbolic ? L"LANG_YORUBA, SUBLANG_YORUBA_NIGERIA"
: L"Yoruba (yo), Nigeria (NG)";
case 0x006B: // = MAKELANGID(LANG_QUECHUA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_QUECHUA, SUBLANG_NEUTRAL"
: L"Quechua (quz)";
case 0x046B: // = MAKELANGID(LANG_QUECHUA, SUBLANG_QUECHUA_BOLIVIA)
return bSymbolic ? L"LANG_QUECHUA, SUBLANG_QUECHUA_BOLIVIA"
: L"Quechua (quz), Bolivia (BO)";
case 0x086B: // = MAKELANGID(LANG_QUECHUA, SUBLANG_QUECHUA_ECUADOR)
return bSymbolic ? L"LANG_QUECHUA, SUBLANG_QUECHUA_ECUADOR"
: L"Quechua (quz), Ecuador (EC)";
case 0x0C6B: // = MAKELANGID(LANG_QUECHUA, SUBLANG_QUECHUA_PERU)
return bSymbolic ? L"LANG_QUECHUA, SUBLANG_QUECHUA_PERU"
: L"Quechua (quz), Peru (PE)";
#if 0
case 0x006C: // = MAKELANGID(LANG_SOTHO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SOTHO, SUBLANG_NEUTRAL"
: L"Sesotho sa Leboa (nso)";
case 0x046C: // = MAKELANGID(LANG_SOTHO, SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA)
return bSymbolic ? L"LANG_SOTHO, SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA"
: L"Sesotho sa Leboa (nso), South Africa (ZA)";
#else
case 0x006C: // = MAKELANGID(LANG_SESOTHO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SESOTHO, SUBLANG_NEUTRAL"
: L"Sesotho sa Leboa (nso)";
case 0x046C: // = MAKELANGID(LANG_SESOTHO, SUBLANG_SESOTHO_NORTHERN_SOUTH_AFRICA)
return bSymbolic ? L"LANG_SESOTHO, SUBLANG_SESOTHO_NORTHERN_SOUTH_AFRICA"
: L"Sesotho sa Leboa (nso), South Africa (ZA)";
#endif
case 0x006D: // = MAKELANGID(LANG_BASHKIR, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_BASHKIR, SUBLANG_NEUTRAL"
: L"Bashkir (ba)";
case 0x046D: // = MAKELANGID(LANG_BASHKIR, SUBLANG_BASHKIR_RUSSIA)
return bSymbolic ? L"LANG_BASHKIR, SUBLANG_BASHKIR_RUSSIA"
: L"Bashkir (ba), Russia (RU)";
case 0x006E: // = MAKELANGID(LANG_LUXEMBOURGISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_LUXEMBOURGISH, SUBLANG_NEUTRAL"
: L"Luxembourgish (lb)";
case 0x046E: // = MAKELANGID(LANG_LUXEMBOURGISH, SUBLANG_LUXEMBOURGISH_LUXEMBOURG)
return bSymbolic ? L"LANG_LUXEMBOURGISH, SUBLANG_LUXEMBOURGISH_LUXEMBOURG"
: L"Luxembourgish (lb), Luxembourg (LU)";
#if 0
case 0x006F: // = MAKELANGID(LANG_GREENLANDIC, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_GREENLANDIC, SUBLANG_NEUTRAL"
: L"Greenlandic (kl)";
case 0x046F: // = MAKELANGID(LANG_GREENLANDIC, SUBLANG_GREENLANDIC_GREENLAND)
return bSymbolic ? L"LANG_GREENLANDIC, SUBLANG_GREENLANDIC_GREENLAND"
: L"Greenlandic (kl), Greenland (GL)";
#else
case 0x006F: // = MAKELANGID(LANG_KALAALLISUT, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KALAALLISUT, SUBLANG_NEUTRAL"
: L"Kalaallisut (kl)";
case 0x046F: // = MAKELANGID(LANG_KALAALLISUT, SUBLANG_KALAALLISUT_GREENLAND)
return bSymbolic ? L"LANG_KALAALLISUT, SUBLANG_KALAALLISUT_GREENLAND"
: L"Kalaallisut (kl), Greenland (GL)";
#endif
case 0x0070: // = MAKELANGID(LANG_IGBO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_IGBO, SUBLANG_NEUTRAL"
: L"Igbo (ig)";
case 0x0470: // = MAKELANGID(LANG_IGBO, SUBLANG_IGBO_NIGERIA)
return bSymbolic ? L"LANG_IGBO, SUBLANG_IGBO_NIGERIA"
: L"Igbo (ig), Nigeria (NG)";
case 0x0071: // = MAKELANGID(LANG_KANURI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KANURI, SUBLANG_NEUTRAL"
: L"Kanuri (kr)";
case 0x0471: // = MAKELANGID(LANG_KANURI, SUBLANG_KANURI_NIGERIA)
return bSymbolic ? L"LANG_KANURI, SUBLANG_KANURI_NIGERIA"
: L"Kanuri (kr), Nigeria (NG)";
case 0x0072: // = MAKELANGID(LANG_OROMO, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_OROMO, SUBLANG_NEUTRAL"
: L"Oromo (om)";
case 0x0472: // = MAKELANGID(LANG_OROMO, SUBLANG_OROMO_ETHIOPIA)
return bSymbolic ? L"LANG_OROMO, SUBLANG_OROMO_ETHIOPIA"
: L"Oromo (om), Ethiopia (ET)";
#if 0
case 0x0073: // = MAKELANGID(LANG_TIGRIGNA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TIGRIGNA, SUBLANG_NEUTRAL"
: L"Tigrigna (ti)";
case 0x0473: // = MAKELANGID(LANG_TIGRIGNA, SUBLANG_TIGRIGNA_ETHIOPIA)
return bSymbolic ? L"LANG_TIGRIGNA, SUBLANG_TIGRIGNA_ETHIOPIA"
: L"Tigrigna (ti), Ethiopia (ET)";
case 0x0873: // = MAKELANGID(LANG_TIGRIGNA, SUBLANG_TIGRIGNA_ERITREA)
return bSymbolic ? L"LANG_TIGRIGNA, SUBLANG_TIGRIGNA_ERITREA"
: L"Tigrigna (ti), Eritrea (ER)";
#else
case 0x0073: // = MAKELANGID(LANG_TIGRINYA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TIGRINYA, SUBLANG_NEUTRAL"
: L"Tigrinya (ti)";
case 0x0473: // = MAKELANGID(LANG_TIGRINYA, SUBLANG_TIGRINYA_ETHIOPIA)
return bSymbolic ? L"LANG_TIGRINYA, SUBLANG_TIGRINYA_ETHIOPIA"
: L"Tigrinya (ti), Ethiopia (ET)";
case 0x0873: // = MAKELANGID(LANG_TIGRINYA, SUBLANG_TIGRINYA_ERITREA)
return bSymbolic ? L"LANG_TIGRINYA, SUBLANG_TIGRINYA_ERITREA"
: L"Tigrinya (ti), Eritrea (ER)";
#endif
case 0x0074: // = MAKELANGID(LANG_GUARANI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_GUARANI, SUBLANG_NEUTRAL"
: L"Guarani (gn)";
case 0x0474: // = MAKELANGID(LANG_GUARANI, SUBLANG_GUARANI_PARAGUAY)
return bSymbolic ? L"LANG_GUARANI, SUBLANG_GUARANI_PARAGUAY"
: L"Guarani (gn), Paraguay (PY)";
case 0x0075: // = MAKELANGID(LANG_HAWAIIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_HAWAIIAN, SUBLANG_NEUTRAL"
: L"Hawaiian (haw)";
case 0x0475: // = MAKELANGID(LANG_HAWAIIAN, SUBLANG_HAWAIIAN_US)
return bSymbolic ? L"LANG_HAWAIIAN, SUBLANG_HAWAIIAN_US"
: L"Hawaiian (haw), United States (US)";
case 0x0076: // = MAKELANGID(LANG_LATIN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_LATIN, SUBLANG_NEUTRAL"
: L"Latin (la)";
case 0x0476: // = MAKELANGID(LANG_LATIN, SUBLANG_LATIN_VATICAN)
return bSymbolic ? L"LANG_LATIN, SUBLANG_LATIN_VATICAN"
: L"Latin (la), Vatican (VA)";
case 0x0077: // = MAKELANGID(LANG_SOMALI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SOMALI, SUBLANG_NEUTRAL"
: L"Somali (so)";
case 0x0477: // = MAKELANGID(LANG_SOMALI, SUBLANG_SOMALI_SOMALIA)
return bSymbolic ? L"LANG_SOMALI, SUBLANG_SOMALI_SOMALIA"
: L"Somali (so), Somalia (SO)";
case 0x0078: // = MAKELANGID(LANG_YI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_YI, SUBLANG_NEUTRAL"
: L"Yi (ii)";
case 0x0478: // = MAKELANGID(LANG_YI, SUBLANG_YI_PRC)
return bSymbolic ? L"LANG_YI, SUBLANG_YI_PRC"
: L"Yi (ii), People\'s Republic of China (CN)";
case 0x0079: // = MAKELANGID(LANG_PAPIAMENTU, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_PAPIAMENTU, SUBLANG_NEUTRAL"
: L"Papiamentu (pap)";
case 0x0479: // = MAKELANGID(LANG_PAPIAMENTU, SUBLANG_PAPIAMENTU_ANTILLES)
return bSymbolic ? L"LANG_PAPIAMENTU, SUBLANG_PAPIAMENTU_ANTILLES"
: L"Papiamentu (pap), Netherlands Antilles (AN)";
case 0x0879: // = MAKELANGID(LANG_PAPIAMENTU, SUBLANG_PAPIAMENTU_ARUBA)
return bSymbolic ? L"LANG_PAPIAMENTU, SUBLANG_PAPIAMENTU_ARUBA"
: L"Papiamentu (pap), Aruba (AW)";
#if 0
case 0x007A: // = MAKELANGID(LANG_MAPUDUNGUN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MAPUDUNGUN, SUBLANG_NEUTRAL"
: L"Mapudungun (arn)";
case 0x047A: // = MAKELANGID(LANG_MAPUDUNGUN, SUBLANG_MAPUDUNGUN_CHILE)
return bSymbolic ? L"LANG_MAPUDUNGUN, SUBLANG_MAPUDUNGUN_CHILE"
: L"Mapudungun (arn), Chile (CL)";
#else
case 0x007A: // = MAKELANGID(LANG_MAPUCHE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MAPUCHE, SUBLANG_NEUTRAL"
: L"Mapuche (arn)";
case 0x047A: // = MAKELANGID(LANG_MAPUCHE, SUBLANG_MAPUCHE_CHILE)
return bSymbolic ? L"LANG_MAPUCHE, SUBLANG_MAPUCHE_CHILE"
: L"Mapuche (arn), Chile (CL)";
#endif
case 0x007C: // = MAKELANGID(LANG_MOHAWK, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MOHAWK, SUBLANG_NEUTRAL"
: L"Mohawk (moh)";
case 0x047C: // = MAKELANGID(LANG_MOHAWK, SUBLANG_MOHAWK_MOHAWK)
return bSymbolic ? L"LANG_MOHAWK, SUBLANG_MOHAWK_MOHAWK"
: L"Mohawk (moh), Canada (CA)";
case 0x007E: // = MAKELANGID(LANG_BRETON, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_BRETON, SUBLANG_NEUTRAL"
: L"Breton (br)";
case 0x047E: // = MAKELANGID(LANG_BRETON, SUBLANG_BRETON_FRANCE)
return bSymbolic ? L"LANG_BRETON, SUBLANG_BRETON_FRANCE"
: L"Breton (br), France (FR)";
case 0x007F: // = MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_INVARIANT, SUBLANG_NEUTRAL"
: L"Invariant Language, Invariant Country";
case 0x0080: // = MAKELANGID(LANG_UIGHUR, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_UIGHUR, SUBLANG_NEUTRAL"
: L"Uyghur (ug)";
case 0x0480: // = MAKELANGID(LANG_UIGHUR, SUBLANG_UIGHUR_PRC)
return bSymbolic ? L"LANG_UIGHUR, SUBLANG_UIGHUR_PRC"
: L"Uyghur (ug), People\'s Republic of China (CN)";
case 0x0081: // = MAKELANGID(LANG_MAORI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MAORI, SUBLANG_NEUTRAL"
: L"Maori (mi)";
case 0x0481: // = MAKELANGID(LANG_MAORI, SUBLANG_MAORI_NEW_ZEALAND)
return bSymbolic ? L"LANG_MAORI, SUBLANG_MAORI_NEW_ZEALAND"
: L"Maori (mi), New Zealand (NZ)";
case 0x0082: // = MAKELANGID(LANG_OCCITAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_OCCITAN, SUBLANG_NEUTRAL"
: L"Occitan (oc)";
case 0x0482: // = MAKELANGID(LANG_OCCITAN, SUBLANG_OCCITAN_FRANCE)
return bSymbolic ? L"LANG_OCCITAN, SUBLANG_OCCITAN_FRANCE"
: L"Occitan (oc), France (FR)";
case 0x0083: // = MAKELANGID(LANG_CORSICAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_CORSICAN, SUBLANG_NEUTRAL"
: L"Corsican (co)";
case 0x0483: // = MAKELANGID(LANG_CORSICAN, SUBLANG_CORSICAN_FRANCE)
return bSymbolic ? L"LANG_CORSICAN, SUBLANG_CORSICAN_FRANCE"
: L"Corsican (co), France (FR)";
case 0x0084: // = MAKELANGID(LANG_ALSATIAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_ALSATIAN, SUBLANG_NEUTRAL"
: L"Alsatian (gsw)";
case 0x0484: // = MAKELANGID(LANG_ALSATIAN, SUBLANG_ALSATIAN_FRANCE)
return bSymbolic ? L"LANG_ALSATIAN, SUBLANG_ALSATIAN_FRANCE"
: L"Alsatian (gsw), France (FR)";
#if 0
case 0x0085: // = MAKELANGID(LANG_YAKUT, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_YAKUT, SUBLANG_NEUTRAL"
: L"Yakut (sah)";
case 0x0485: // = MAKELANGID(LANG_YAKUT, SUBLANG_YAKUT_RUSSIA)
return bSymbolic ? L"LANG_YAKUT, SUBLANG_YAKUT_RUSSIA"
: L"Yakut (sah), Russia (RU)";
#else
case 0x0085: // = MAKELANGID(LANG_SAKHA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SAKHA, SUBLANG_NEUTRAL"
: L"Sakha (sah)";
case 0x0485: // = MAKELANGID(LANG_SAKHA, SUBLANG_SAKHA_RUSSIA)
return bSymbolic ? L"LANG_SAKHA, SUBLANG_SAKHA_RUSSIA"
: L"Sakha (sah), Russia (RU)";
#endif
case 0x0086: // = MAKELANGID(LANG_KICHE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KICHE, SUBLANG_NEUTRAL"
: L"K\'iche (qut)";
case 0x0486: // = MAKELANGID(LANG_KICHE, SUBLANG_KICHE_GUATEMALA)
return bSymbolic ? L"LANG_KICHE, SUBLANG_KICHE_GUATEMALA"
: L"K\'iche (qut), Guatemala (GT)";
case 0x7C86: // = MAKELANGID(LANG_KICHE, SUBLANG_KICHE_GUATEMALA)
return bSymbolic ? L"LANG_KICHE, SUBLANG_KICHE_GUATEMALA"
: L"K\'iche (qut), Guatemala (GT)";
case 0x0087: // = MAKELANGID(LANG_KINYARWANDA, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_KINYARWANDA, SUBLANG_NEUTRAL"
: L"Kinyarwanda (rw)";
case 0x0487: // = MAKELANGID(LANG_KINYARWANDA, SUBLANG_KINYARWANDA_RWANDA)
return bSymbolic ? L"LANG_KINYARWANDA, SUBLANG_KINYARWANDA_RWANDA"
: L"Kinyarwanda (rw), Rwanda (RW)";
case 0x0088: // = MAKELANGID(LANG_WOLOF, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_WOLOF, SUBLANG_NEUTRAL"
: L"Wolof (wo)";
case 0x0488: // = MAKELANGID(LANG_WOLOF, SUBLANG_WOLOF_SENEGAL)
return bSymbolic ? L"LANG_WOLOF, SUBLANG_WOLOF_SENEGAL"
: L"Wolof (wo), Senegal (SN)";
case 0x008C: // = MAKELANGID(LANG_DARI, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_DARI, SUBLANG_NEUTRAL"
: L"Dari (prs)";
case 0x048C: // = MAKELANGID(LANG_DARI, SUBLANG_DARI_AFGHANISTAN)
return bSymbolic ? L"LANG_DARI, SUBLANG_DARI_AFGHANISTAN"
: L"Dari (prs), Afghanistan (AF)";
case 0x008D: // = MAKELANGID(LANG_MALAGASY, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_MALAGASY, SUBLANG_NEUTRAL"
: L"Plateau Malagasy (plt)";
case 0x048D: // = MAKELANGID(LANG_MALAGASY, SUBLANG_MALAGASY_MADAGASCAR)
return bSymbolic ? L"LANG_MALAGASY, SUBLANG_MALAGASY_MADAGASCAR"
: L"Plateau Malagasy (plt), Madagascar (MG)";
case 0x008E: // = MAKELANGID(LANG_YUE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_YUE, SUBLANG_NEUTRAL"
: L"Yue (yue)";
case 0x048E: // = MAKELANGID(LANG_YUE, SUBLANG_YUE_HONGKONG)
return bSymbolic ? L"LANG_YUE, SUBLANG_YUE_HONGKONG"
: L"Yue (yue), Hongkong S.A.R. (HK)";
case 0x008F: // = MAKELANGID(LANG_SHAN, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SHAN, SUBLANG_NEUTRAL"
: L"Tai Nüa (tdd)";
case 0x048F: // = MAKELANGID(LANG_SHAN, SUBLANG_SHAN_PRC)
return bSymbolic ? L"LANG_SHAN, SUBLANG_SHAN_PRC"
: L"Tai Nüa (tdd), People\'s Republic of China (CN)";
case 0x0090: // = MAKELANGID(LANG_TAILUE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_TAILUE, SUBLANG_NEUTRAL"
: L"Tai Lü (khb)";
case 0x0490: // = MAKELANGID(LANG_TAILUE, SUBLANG_TAILUE_PRC)
return bSymbolic ? L"LANG_TAILUE, SUBLANG_TAILUE_PRC"
: L"Tai Lü (khb), People\'s Republic of China (CN)";
case 0x0091: // = MAKELANGID(LANG_SCOTTISH_GAELIC, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_SCOTTISH_GAELIC, SUBLANG_NEUTRAL"
: L"Scottish Gaelic (gd)";
case 0x0491: // = MAKELANGID(LANG_SCOTTISH_GAELIC, SUBLANG_SCOTTISH_GAELIC)
return bSymbolic ? L"LANG_SCOTTISH_GAELIC, SUBLANG_SCOTTISH_GAELIC"
: L"Scottish Gaelic (gd), Great Britain (GB)";
case 0x0092: // = MAKELANGID(LANG_CENTRAL_KURDISH, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_CENTRAL_KURDISH, SUBLANG_NEUTRAL"
: L"Central Kurdish (ku)";
case 0x0492: // = MAKELANGID(LANG_CENTRAL_KURDISH, SUBLANG_CENTRAL_KURDISH_IRAQ)
return bSymbolic ? L"LANG_CENTRAL_KURDISH, SUBLANG_CENTRAL_KURDISH_IRAQ"
: L"Central Kurdish (ku), Arabic (Arab), Iraq (IQ)";
case 0x7C92: // = MAKELANGID(LANG_CENTRAL_KURDISH, SUBLANG_CENTRAL_KURDISH_ARABIC)
return bSymbolic ? L"LANG_CENTRAL_KURDISH, SUBLANG_CENTRAL_KURDISH_ARABIC"
: L"Central Kurdish (ku), Arabic (Arab)";
case 0x0093: // = MAKELANGID(LANG_QUICHE, SUBLANG_NEUTRAL)
return bSymbolic ? L"LANG_QUICHE, SUBLANG_NEUTRAL"
: L"Quiche (quc)";
case 0x0493: // = MAKELANGID(LANG_QUICHE, SUBLANG_QUICHE_COLOMBIA)
return bSymbolic ? L"LANG_QUICHE, SUBLANG_QUICHE_COLOMBIA"
: L"Quiche (quc), Colombia (CO)";
case 0x0501: // = MAKELANGID(LANG_PSEUDO_BASE, SUBLANG_DEFAULT)
return bSymbolic ? L"LANG_PSEUDO_BASE, SUBLANG_DEFAULT"
: L"Pseudo locale language (qps), Base (ploc)";
case 0x0901: // = MAKELANGID(LANG_PSEUDO_SELFHOST, SUBLANG_DEFAULT)
return bSymbolic ? L"LANG_PSEUDO_SELFHOST, SUBLANG_DEFAULT"
: L"Pseudo locale language (qps), Latin (Latn)";
case 0x05FE: // = MAKELANGID(LANG_PSEUDO_EAST_ASIA, SUBLANG_DEFAULT)
return bSymbolic ? L"LANG_PSEUDO_EAST_ASIA, SUBLANG_DEFAULT"
: L"Pseudo locale language (qps), East Asian (ploca)";
case 0x09FF: // = MAKELANGID(LANG_PSEUDO_MIRRORED, SUBLANG_PSEUDO_MIRRORED)
return bSymbolic ? L"LANG_PSEUDO_MIRRORED, SUBLANG_PSEUDO_MIRRORED"
: L"Pseudo locale language (qps), Mirrored (plocm)";
default:
return NULL;
}
}
const LPCWSTR szFileOSHigh[] = {L"Unknown", // VOS_UNKNOWN
L"MS-DOS", // VOS_DOS
L"OS/2 (16-bit)", // VOS_OS216
L"OS/2 (32-bit)", // VOS_OS232
L"Windows NT", // VOS_NT
L"Windows CE"}; // VOS_WINCE
const LPCWSTR szFileOSLow[] = {L"Base", // VOS__BASE
L"Windows (16-bit)", // VOS__WINDOWS16
L"Presentation Manager (16-bit)", // VOS__PM16
L"Presentation Manager (32-bit)", // VOS__PM32
L"Windows (32-bit)"}; // VOS__WINDOWS32
const LPCWSTR szFileType[] = {L"Unknown", // VFT_UNKNOWN
L"Application", // VFT_APP
L"DLL", // VFT_DLL
L"Driver", // VFT_DRV
L"Font", // VFT_FONT
L"Virtual Device", // VFT_VXD
L"Undefined",
L"Static Library"}; // VFT_STATIC_LIB
const LPCWSTR szFileDriverType[] = {L"Unknown", // VFT2_UNKNOWN
L"Printer", // VFT2_DRV_PRINTER
L"Keyboard", // VFT2_DRV_KEYBOARD
L"Language", // VFT2_DRV_LANGUAGE
L"Display", // VFT2_DRV_DISPLAY
L"Mouse", // VFT2_DRV_MOUSE
L"Network", // VFT2_DRV_NETWORK
L"System", // VFT2_DRV_SYSTEM
L"Installable", // VFT2_DRV_INSTALLABLE
L"Sound", // VFT2_DRV_SOUND
L"Communications", // VFT2_DRV_COMM
L"Input Method", // VFT2_DRV_INPUTMETHOD
L"Versioned Printer"}; // VFT2_DRV_VERSIONED_PRINTER
const LPCWSTR szFileFontType[] = {L"Unknown", // VFT2_UNKNOWN
L"Raster", // VFT2_FONT_RASTER
L"Vector", // VFT2_FONT_VECTOR
L"TrueType"}; // VFT2_FONT_TRUETYPE
BOOL WINAPI Resource(HANDLE hConsole,
HANDLE hOutput,
BYTE *lpAddress,
IMAGE_RESOURCE_DIRECTORY *lpRoot,
IMAGE_RESOURCE_DIRECTORY *lpLevel,
LPCWSTR lpType,
LPCWSTR lpName,
DWORD dwLevel) // 0 = Type, 1 = Id, 2 = Language
{
BOOL bOutput = TRUE;
DWORD dwManifest;
DWORD dwUnicode;
DWORD dwMessage;
DWORD dwBlock;
DWORD dwEntry;
DWORD dwValue;
DWORD dwKey;
DWORD dw;
LPVOID lp;
LPVOID lpManifest;
LPCWSTR lpValue;
VS_VERSIONINFO *lpVersion;
MUI_RESOURCE *lpMUI;
MESSAGE_RESOURCE_DATA *lpTable;
MESSAGE_RESOURCE_BLOCK *lpBlock;
MESSAGE_RESOURCE_ENTRY *lpMessage;
IMAGE_RESOURCE_DATA_ENTRY *lpData;
IMAGE_RESOURCE_DIR_STRING_U *lpUnicode;
IMAGE_RESOURCE_DIRECTORY_ENTRY *lpEntry;
for (lpEntry = (IMAGE_RESOURCE_DIRECTORY_ENTRY *) (lpLevel + 1),
dwEntry = 0;
dwEntry < lpLevel->NumberOfNamedEntries + lpLevel->NumberOfIdEntries;
dwEntry++)
{
if ((lpEntry[dwEntry].Name & IMAGE_RESOURCE_NAME_IS_STRING) == IMAGE_RESOURCE_NAME_IS_STRING)
{
lpUnicode = (IMAGE_RESOURCE_DIR_STRING_U *) ((BYTE *) lpRoot + (lpEntry[dwEntry].Name ^ IMAGE_RESOURCE_NAME_IS_STRING));
bOutput &= PrintDirect(hOutput, L"\t\t\t\tName = " + 2 - dwLevel, dwLevel + 11);
bOutput &= PrintDirect(hOutput, lpUnicode->NameString, lpUnicode->Length);
bOutput &= PrintString(hOutput, L"\r\n");
bOutput &= PrintFormat(hOutput, L"\t\t\t\tOffset = 0x%08lX\r\n" + 2 - dwLevel, lpEntry[dwEntry].OffsetToData);
if (dwLevel == 1)
lpName = lpUnicode->NameString;
else if (dwLevel == 0)
lpType = lpUnicode->NameString;
}
else
if (dwLevel > 1)
bOutput &= PrintFormat(hOutput,
L"\t\t\t\tLanguage = %hu (%ls)\r\n"
L"\t\t\t\tOffset = 0x%08lX\r\n",
lpEntry[dwEntry].Id, ResourceLanguageName(lpEntry[dwEntry].Id, TRUE),
lpEntry[dwEntry].OffsetToData);
else if (dwLevel > 0)
{
bOutput &= PrintFormat(hOutput,
L"\t\t\tId = %hu\r\n"
L"\t\t\tOffset = 0x%08lX\r\n",
lpEntry[dwEntry].Id,
lpEntry[dwEntry].OffsetToData);
lpName = MAKEINTRESOURCE(lpEntry[dwEntry].Id);
}
else
{
bOutput &= PrintFormat(hOutput,
L"\t\tType = %hu (%ls)\r\n"
L"\t\tOffset = 0x%08lX\r\n",
lpEntry[dwEntry].Id, ResourceTypeName(lpEntry[dwEntry].Id),
lpEntry[dwEntry].OffsetToData);
lpType = MAKEINTRESOURCE(lpEntry[dwEntry].Id);
}
if ((lpEntry[dwEntry].OffsetToData & IMAGE_RESOURCE_DATA_IS_DIRECTORY) == IMAGE_RESOURCE_DATA_IS_DIRECTORY)
bOutput &= Resource(hConsole,
hOutput,
lpAddress,
lpRoot,
(IMAGE_RESOURCE_DIRECTORY *) ((BYTE *) lpRoot + (lpEntry[dwEntry].OffsetToData ^ IMAGE_RESOURCE_DATA_IS_DIRECTORY)),
lpType,
lpName,
dwLevel + 1);
else
{
lpData = (IMAGE_RESOURCE_DATA_ENTRY *) ((BYTE *) lpRoot + lpEntry[dwEntry].OffsetToData);
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\tAddress = 0x%08lX\r\n"
L"\t\t\t\t\tSize = %lu\r\n"
L"\t\t\t\t\tCode Page = %lu\r\n"
L"\t\t\t\t\tReserved = 0x%08lX\r\n",
lpData->OffsetToData,
lpData->Size,
lpData->CodePage,
lpData->Reserved);
if (IS_INTRESOURCE(lpType))
switch ((WORD) lpType)
{
case RT_STRING:
// NOTE: every RT_STRING resource, a STRINGTABLE, holds 16 UNICODE strings
// IMAGE_RESOURCE_DIR_STRING_U of up to 65535 characters each, which
// need not be L'\0' terminated and may contain L'\0', with their
// character count (including the terminating L'\0' if present)
// stored in front of them.
for (lpUnicode = (IMAGE_RESOURCE_DIR_STRING_U *) (lpAddress + lpData->OffsetToData),
dwUnicode = 16; dwUnicode > 0; dwUnicode--,
lpUnicode = (IMAGE_RESOURCE_DIR_STRING_U *) (lpUnicode->NameString + lpUnicode->Length))
{
dw = lpUnicode->Length;
if (dw == 0)
continue;
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\t%6lu:\tLength = %lu\r\n"
L"\t\t\t\t\t\tString = ",
IS_INTRESOURCE(lpName) ? (WORD) lpName * 16 - dwUnicode : 16 - dwUnicode, dw);
while (dw-- > 0)
if (lpUnicode->NameString[dw] < L' ')
lpUnicode->NameString[dw] += L'\x2400';
bOutput &= PrintDirect(hOutput, lpUnicode->NameString, lpUnicode->Length);
bOutput &= PrintString(hOutput, L"\r\n");
}
break;
case RT_MESSAGETABLE:
for (lpTable = (MESSAGE_RESOURCE_DATA *) (lpAddress + lpData->OffsetToData),
lpBlock = lpTable->Blocks,
dwBlock = 0; dwBlock < lpTable->NumberOfBlocks; dwBlock++)
{
if (lpBlock[dwBlock].LowId == lpBlock[dwBlock].HighId)
bOutput &= PrintFormat(hOutput,
L"\t\t\t%6lu:\tMessage ID 0x%08lX\r\n",
dwBlock, lpBlock[dwBlock].LowId);
else
bOutput &= PrintFormat(hOutput,
L"\t\t\t%6lu:\tMessage IDs 0x%08lX to 0x%08lX\r\n",
dwBlock, lpBlock[dwBlock].LowId, lpBlock[dwBlock].HighId);
for (lpMessage = (MESSAGE_RESOURCE_ENTRY *) ((BYTE *) lpTable + lpBlock[dwBlock].OffsetToEntries),
dwMessage = lpBlock[dwBlock].LowId; dwMessage <= lpBlock[dwBlock].HighId; dwMessage++,
lpMessage = (MESSAGE_RESOURCE_ENTRY *) ((BYTE *) lpMessage + lpMessage->Length))
if (lpMessage->Flags == MESSAGE_RESOURCE_UNICODE)
{
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t0x%08lX:\tSize = %hu\r\n"
L"\t\t\t\t\t\tText = ",
dwMessage, lpMessage->Length);
for (dw = 0; dw < ((BYTE *) lpMessage + lpMessage->Length - lpMessage->Text) / sizeof(L'\0'); dw++)
if (((LPWSTR) lpMessage->Text)[dw] < L' ')
((LPWSTR) lpMessage->Text)[dw] += L'\x2400';
bOutput &= PrintDirect(hOutput, (LPCWSTR) lpMessage->Text, dw);
bOutput &= PrintString(hOutput, L"\r\n");
}
else if (lpMessage->Flags == MESSAGE_RESOURCE_ANSI)
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t0x%08lX:\tSize = %hu\r\n"
L"\t\t\t\t\t\tText = %.999hs\r\n",
dwMessage, lpMessage->Length, lpMessage->Text);
else
PrintConsole(hConsole,
L"Text type %hu of message 0x%08lX neither UNICODE nor ANSI!\n",
lpMessage->Flags, dwMessage);
}
break;
case RT_VERSION:
lpVersion = (VS_VERSIONINFO *) (lpAddress + lpData->OffsetToData);
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\tFixedFileInfo:\r\n"
L"\t\t\t\t\t\tProduct Version = %hu.%hu:%hu.%hu\r\n"
L"\t\t\t\t\t\tModule Version = %hu.%hu:%hu.%hu\r\n"
L"\t\t\t\t\t\tModule Flags = 0x%08lX\r\n"
L"\t\t\t\t\t\tModule Type = 0x%08lX (%ls)\r\n"
L"\t\t\t\t\t\tModule Subtype = 0x%08lX (%ls)\r\n"
L"\t\t\t\t\t\tModule Time Stamp = 0x%08lX:%08lX\r\n"
L"\t\t\t\t\t\tTarget OS = %hu:%hu (%ls, %ls)\r\n",
HIWORD(lpVersion->vsFFI.dwProductVersionMS), LOWORD(lpVersion->vsFFI.dwProductVersionMS),
HIWORD(lpVersion->vsFFI.dwProductVersionLS), LOWORD(lpVersion->vsFFI.dwProductVersionLS),
HIWORD(lpVersion->vsFFI.dwFileVersionMS), LOWORD(lpVersion->vsFFI.dwFileVersionMS),
HIWORD(lpVersion->vsFFI.dwFileVersionLS), LOWORD(lpVersion->vsFFI.dwFileVersionLS),
lpVersion->vsFFI.dwFileFlags,
lpVersion->vsFFI.dwFileType,
lpVersion->vsFFI.dwFileType < sizeof(szFileType) / sizeof(*szFileType) ? szFileType[lpVersion->vsFFI.dwFileType] : L"Undefined",
lpVersion->vsFFI.dwFileSubtype,
lpVersion->vsFFI.dwFileType == VFT_DRV ? (lpVersion->vsFFI.dwFileSubtype < sizeof(szFileDriverType) / sizeof(*szFileDriverType) ? szFileDriverType[lpVersion->vsFFI.dwFileSubtype] : L"Undefined") :
lpVersion->vsFFI.dwFileType == VFT_FONT ? (lpVersion->vsFFI.dwFileSubtype < sizeof(szFileFontType) / sizeof(*szFileFontType) ? szFileFontType[lpVersion->vsFFI.dwFileSubtype] : L"Undefined") : L"Undefined",
lpVersion->vsFFI.dwFileDateMS,
lpVersion->vsFFI.dwFileDateLS,
HIWORD(lpVersion->vsFFI.dwFileOS), LOWORD(lpVersion->vsFFI.dwFileOS),
HIWORD(lpVersion->vsFFI.dwFileOS) < sizeof(szFileOSHigh) / sizeof(*szFileOSHigh) ? szFileOSHigh[HIWORD(lpVersion->vsFFI.dwFileOS)] : L"Undefined",
LOWORD(lpVersion->vsFFI.dwFileOS) < sizeof(szFileOSLow) / sizeof(*szFileOSLow) ? szFileOSLow[LOWORD(lpVersion->vsFFI.dwFileOS)] : L"Undefined");
for (lp = (BYTE *) lpVersion + lpVersion->wSize,
lpVersion += 1;
lpVersion < (VS_VERSIONINFO *) lp;
lpVersion = (VS_VERSIONINFO *) lpValue)
{
dwKey = wcslen(lpVersion->szKey);
lpValue = lpVersion->szKey + (dwKey + dwKey % 2 + 1);
if ((lpVersion->wCount == 0)
// && (lpVersion->wType == VS_TEXT)
&& (lpVersion->wSize + (BYTE *) lpVersion > (BYTE *) lpValue))
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\t\t%ls:\r\n" + (dwKey != 8),
lpVersion->szKey);
else
{
if (lpVersion->wType == VS_TEXT)
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\t\t\t%-16ls = %ls\r\n",
lpVersion->szKey, lpVersion->wCount != 0 ? lpValue : L"");
else
{
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\t\t%ls =",
lpVersion->szKey);
for (dw = 0; dw < lpVersion->wCount / sizeof(WORD); dw++)
bOutput &= PrintFormat(hOutput,
dw % sizeof(WORD) ? L":%hu" : L" 0x%04hX",
lpValue[dw]);
bOutput &= PrintString(hOutput, L"\r\n");
}
lpValue = (LPCWSTR) ((BYTE *) lpVersion + lpVersion->wSize + lpVersion->wSize % sizeof(DWORD));
}
}
break;
case RT_HTML:
case RT_MANIFEST:
lpManifest = lpAddress + lpData->OffsetToData;
dwManifest = lpData->Size;
if (*(DWORD *) lpManifest == 0xFFFE0000)
{
dwValue = 12001;
lpValue = L"32BE";
}
else if (*(DWORD *) lpManifest == 0x0000FEFF)
{
dwValue = 12000;
lpValue = L"32BE";
}
else if (*(WCHAR *) lpManifest == L'\xFFFE')
{
dwValue = 1201;
lpValue = L"16BE";
}
else if (*(WCHAR *) lpManifest == L'\xFEFF')
{
dwValue = 1200;
lpValue = L"16LE";
}
else if ((*(DWORD *) lpManifest & 0x00FFFFFF) == 0x00BFBBEF)
{
dwValue = CP_UTF8;
lpValue = L"8 (BOM)";
}
else if ((*(DWORD *) lpManifest == 0x2B762F2B)
|| (*(DWORD *) lpManifest == 0x2F762F2B)
|| (*(DWORD *) lpManifest == 0x38762F2B)
|| (*(DWORD *) lpManifest == 0x39762F2B))
{
dwValue = CP_UTF7;
lpValue = L"7";
}
else
{
dwValue = CP_UTF8;
lpValue = L"8";
}
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\tUTF-%-5ls = ",
lpValue);
dw = MultiByteToWideChar(dwValue,
dwValue == CP_UTF7 ? 0 : MB_ERR_INVALID_CHARS,
lpManifest,
dwManifest,
(LPWSTR) NULL,
0);
if (dw == 0)
PrintConsole(hConsole,
L"MultiByteToWideChar() returned error %lu\n",
GetLastError());
else
{
lp = LocalAlloc(NONZEROLPTR, dw * sizeof(L'\0'));
if (lp == NULL)
PrintConsole(hConsole,
L"LocalAlloc() returned error %lu\n",
GetLastError());
else
{
dw = MultiByteToWideChar(dwValue,
dwValue == CP_UTF7 ? 0 : MB_ERR_INVALID_CHARS,
lpManifest,
dwManifest,
lp,
dw);
if (dw == 0)
PrintConsole(hConsole,
L"MultiByteToWideChar() returned error %lu\n",
GetLastError());
else
bOutput &= PrintDirect(hOutput, lp, dw);
if (LocalFree(lp) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
}
bOutput &= PrintString(hOutput, L"\r\n");
break;
// NOTE: insert code to handle other RT_* resource types here!
default:
break;
}
else
if ((lpType[-1] == L'\3')
&& (lpType[0] == L'M')
&& (lpType[1] == L'U')
&& (lpType[2] == L'I'))
{
lpMUI = (MUI_RESOURCE *) (lpAddress + lpData->OffsetToData);
if (lpMUI->dwSignature != MUI_RESOURCE_SIGNATURE)
PrintConsole(hConsole,
L"Signature 0x%08lX of resource configuration data not 0x%08lX!\n",
lpMUI->dwSignature, MUI_RESOURCE_SIGNATURE);
else
bOutput &= PrintFormat(hOutput,
L"\t\t\t\t\tResource Configuration Data:\r\n"
L"\t\t\t\t\t\tVersion = %hu.%hu\r\n"
L"\t\t\t\t\t\tType = %lu (%ls)\r\n"
L"\t\t\t\t\t\tLanguage = %ls\r\n"
L"\t\t\t\t\t\tFallback Language = %ls\r\n"
L"\t\t\t\t\t\tFallback Location = %lu (%ls)\r\n"
L"\t\t\t\t\t\tSystem Attributes = 0x%08lX\r\n"
L"\t\t\t\t\t\tMain Checksum = %08lX %08lX %08lX %08lX\r\n"
L"\t\t\t\t\t\tService Checksum = %08lX %08lX %08lX %08lX\r\n",
HIWORD(lpMUI->dwVersion), LOWORD(lpMUI->dwVersion),
lpMUI->dwFileType, MUIFileType(lpMUI->dwFileType),
lpMUI->dwLanguageNameOffset == 0 ? NULL : (BYTE *) lpMUI + lpMUI->dwLanguageNameOffset,
lpMUI->dwFallbackNameOffset == 0 ? NULL : (BYTE *) lpMUI + lpMUI->dwFallbackNameOffset,
lpMUI->dwFallbackLocation, MUIFallbackLocation(lpMUI->dwFallbackLocation),
lpMUI->dwSystemAttributes,
_byteswap_ulong(((DWORD *) lpMUI->bMainChecksum)[0]),
_byteswap_ulong(((DWORD *) lpMUI->bMainChecksum)[1]),
_byteswap_ulong(((DWORD *) lpMUI->bMainChecksum)[2]),
_byteswap_ulong(((DWORD *) lpMUI->bMainChecksum)[3]),
_byteswap_ulong(((DWORD *) lpMUI->bServiceChecksum)[0]),
_byteswap_ulong(((DWORD *) lpMUI->bServiceChecksum)[1]),
_byteswap_ulong(((DWORD *) lpMUI->bServiceChecksum)[2]),
_byteswap_ulong(((DWORD *) lpMUI->bServiceChecksum)[3]));
}
}
}
return bOutput;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
IMAGE_DOS_HEADER *lpMZ;
IMAGE_NT_HEADERS *lpPE;
IMAGE_NT_HEADERS32 *lpPE32;
IMAGE_NT_HEADERS64 *lpPE64;
IMAGE_SECTION_HEADER *lpSection;
IMAGE_DATA_DIRECTORY *lpDirectory = NULL;
IMAGE_RESOURCE_DIRECTORY *lpResource;
LPWSTR *lpArguments;
INT nArguments;
HANDLE hOutput;
HANDLE hInput;
DWORD dwInput;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwSection;
DWORD dwResource;
DWORD dwDirectory = 0;
LPBYTE lpImage;
HANDLE hImage;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments != 2)
PrintConsole(hConsole,
L"No argument: a single file or path name of an image file must be given!\n");
else
{
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOutput == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"GetStdHandle() returned error %lu\n",
dwError = GetLastError());
else
{
if (!FlushFileBuffers(hOutput))
PrintConsole(hConsole,
L"FlushFileBuffers() returned error %lu: standard output is not redirected to a file!\n",
dwError = GetLastError());
else
{
hInput = CreateFile(lpArguments[1],
FILE_READ_DATA,
FILE_SHARE_READ,
(SECURITY_ATTRIBUTES *) NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
(HANDLE) NULL);
if (hInput == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"CreateFile() returned error %lu\n",
dwError = GetLastError());
else
{
dwInput = GetFileSize(hInput, (DWORD *) NULL);
if (dwInput == INVALID_FILE_SIZE)
PrintConsole(hConsole,
L"GetFileSize() returned error %lu\n",
dwError = GetLastError());
else
{
hImage = CreateFileMapping(hInput,
(LPSECURITY_ATTRIBUTES) NULL,
PAGE_WRITECOPY,
0, 0,
(LPCWSTR) NULL);
if (hImage == NULL)
PrintConsole(hConsole,
L"CreateFileMapping() returned error %lu\n",
dwError = GetLastError());
else
{
lpImage = MapViewOfFile(hImage,
FILE_MAP_COPY,
0, 0,
(SIZE_T) 0);
if (lpImage == NULL)
PrintConsole(hConsole,
L"MapViewOfFile() returned error %lu\n",
dwError = GetLastError());
else
{
dwError = ERROR_INVALID_EXE_SIGNATURE;
lpMZ = (IMAGE_DOS_HEADER *) lpImage;
if (lpMZ->e_magic != IMAGE_DOS_SIGNATURE)
PrintConsole(hConsole,
L"No signature \'%ls\' at offset 0x%08lX in file \'%ls\'!\n",
L"MZ", 0, lpArguments[1]);
else
{
lpPE = (IMAGE_NT_HEADERS *) ((BYTE *) lpMZ + lpMZ->e_lfanew);
if (((DWORD) lpMZ->e_lfanew > dwInput)
|| (lpPE->Signature != IMAGE_NT_SIGNATURE))
PrintConsole(hConsole,
L"No signature \'%ls\' at offset 0x%08lX in file \'%ls\'!\n",
L"PE\\0\\0", lpMZ->e_lfanew, lpArguments[1]);
else
{
dwError = ERROR_BAD_EXE_FORMAT;
if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
{
lpPE64 = (IMAGE_NT_HEADERS64 *) lpPE;
// lpSection = (IMAGE_SECTION_HEADER *) (lpPE64->OptionalHeader.DataDirectory + lpPE64->OptionalHeader.NumberOfRvaAndSizes);
lpDirectory = (IMAGE_DATA_DIRECTORY *) lpPE64->OptionalHeader.DataDirectory;
dwDirectory = lpPE64->OptionalHeader.NumberOfRvaAndSizes;
}
else if (lpPE->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
{
lpPE32 = (IMAGE_NT_HEADERS32 *) lpPE;
// lpSection = (IMAGE_SECTION_HEADER *) (lpPE32->OptionalHeader.DataDirectory + lpPE32->OptionalHeader.NumberOfRvaAndSizes);
lpDirectory = (IMAGE_DATA_DIRECTORY *) lpPE32->OptionalHeader.DataDirectory;
dwDirectory = lpPE32->OptionalHeader.NumberOfRvaAndSizes;
}
// else
// dwDirectory = 0;
if (dwDirectory == 0)
PrintConsole(hConsole,
L"Invalid \'PE\' image format 0x%04hX in file \'%ls\'!\n",
lpPE->OptionalHeader.Magic, lpArguments[1]);
else
{
dwError = ERROR_RESOURCE_DATA_NOT_FOUND;
for (lpSection = (IMAGE_SECTION_HEADER *) ((BYTE *) &(lpPE->OptionalHeader) + lpPE->FileHeader.SizeOfOptionalHeader),
dwSection = 0;
dwSection < lpPE->FileHeader.NumberOfSections;
dwSection++)
if (memcmp(lpSection[dwSection].Name, ".rsrc", sizeof(".rsrc")) == 0)
break;
if (dwSection == lpPE->FileHeader.NumberOfSections)
PrintConsole(hConsole,
L"No section \'.rsrc\' in file \'%ls\'!\n",
lpArguments[1]);
else if (dwDirectory <= IMAGE_DIRECTORY_ENTRY_RESOURCE)
PrintConsole(hConsole,
L"No IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_RESOURCE] in file \'%ls\'!\n",
lpArguments[1]);
else
{
if ((lpDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress != lpSection[dwSection].VirtualAddress)
|| (lpDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].Size != lpSection[dwSection].Misc.VirtualSize))
PrintConsole(hConsole,
L"Address/size in IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_RESOURCE] differ from address/size of section \'.rsrc\' in file \'%ls\'!\n",
lpArguments[1]);
lpResource = (IMAGE_RESOURCE_DIRECTORY *) (lpImage + lpSection[dwSection].PointerToRawData);
dwResource = lpSection[dwSection].VirtualAddress - lpSection[dwSection].PointerToRawData;
if (!PrintFormat(hOutput,
L"\xFEFF" // UTF-16LE BOM
L"Image File = %ls\r\n"
L"Image Size = %lu\r\n"
L"\r\n"
L"Section \'.rsrc\':\r\n"
L"\tOffset = 0x%08lX\r\n"
L"\tSize = 0x%08lX\r\n"
L"\tAddress = 0x%08lX\r\n"
L"\tData = 0x%08lX\r\n"
L"\r\n"
L"Resource Directory:\r\n"
L"\tCharacteristics = 0x%08lX\r\n"
L"\tTime/Date Stamp = 0x%08lX\r\n"
L"\tVersion = %hu.%hu\r\n"
L"\tNamed Entries = %hu\r\n"
L"\tUnnamed Entries = %hu\r\n"
L"\tEntries:\r\n",
lpArguments[1],
dwInput,
lpSection[dwSection].PointerToRawData,
lpSection[dwSection].SizeOfRawData,
lpSection[dwSection].VirtualAddress,
lpSection[dwSection].Misc.VirtualSize,
lpResource->Characteristics,
lpResource->TimeDateStamp,
lpResource->MajorVersion,
lpResource->MinorVersion,
lpResource->NumberOfNamedEntries,
lpResource->NumberOfIdEntries)
|| !Resource(hConsole, hOutput,
lpImage - dwResource,
lpResource, lpResource,
MAKEINTRESOURCE(0), MAKEINTRESOURCE(0), 0))
PrintConsole(hConsole,
L"WriteFile() returned error %lu\n",
dwError = GetLastError());
else
dwError = ERROR_SUCCESS;
}
}
}
}
if (!UnmapViewOfFile(lpImage))
PrintConsole(hConsole,
L"UnmapViewOfFile() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hImage))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (!CloseHandle(hInput))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (!CloseHandle(hOutput))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Note: this variant prints control characters within
Unicode
strings of RT_MESSAGETABLE
and RT_STRING
resources, especially the formatting
L'\a'
,
L'\b'
,
L'\f'
,
L'\n'
,
L'\r'
,
L'\t'
and
L'\v'
characters plus the
terminating L'\0'
character, as
␀,
␁,
␂,
␃,
␄,
␅,
␆,
␇,
␈,
␉,
␊,
␋,
␌,
␍,
␎,
␏,
␐,
␑,
␒,
␓,
␔,
␕,
␖,
␗,
␘,
␙,
␚,
␛,
␜,
␝,
␞ and
␟ respectively.
Run the following four command lines to compile the source file
RESOURCE.C
created in step 1., link the compiled
object file RESOURCE.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:6.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeRESOURCE.COM RESOURCE.C KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE RESOURCE.OBJFor 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. RESOURCE.C RESOURCE.C(2145) : warning C4018: '<' : signed/unsigned mismatch RESOURCE.C(2214) : warning C4305: 'type cast' : truncation from 'LPCWSTR' to 'WORD' RESOURCE.C(2236) : warning C4305: 'type cast' : truncation from 'LPCWSTR' to 'WORD' Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file RESOURCE.TXT
with the following
content in an arbitrary, preferable empty directory:
�
Decode the dump file RESOURCE.TXT
created in
step 3. to recreate the console application
Portable Executable Resource Enumerator:
CERTUTIL.EXE /DecodeHex /V RESOURCE.TXT RESOURCE.COM
Input Length = 365568 Output Length = 86016 CertUtil: -decodehex command completed successfully.
SDDL.COM ‹SDDL string› …
.\SDDL.COM O:AOG:DAD:(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0) O:DAG:DAD:(A;;RPWPCCDCLCRCWOWDSDSW;;;SY)(A;;RPWPCCDCLCRCWOWDSDSW;;;DA)(OA;;CCDC;BF967ABA-0DE6-11D0-A285-00AA003049E2;;AO)(OA;;CCDC;BF967A9C-0DE6-11D0-A285-00AA003049E2;;AO)(OA;;CCDC;6DA8A4FF-0E52-11D0-A286-00AA003049E2;;AO)(OA;;CCDC;BF967AA8-0DE6-11D0-A285-00AA003049E2;;PO)(A;;RPLCRC;;;AU)S:(AU;SAFA;WDWOSDWPCCDCSW;;;WD)
O:AOG:DAD:(A;;RPWPCCDCLCSWRCWDWOGA;;;S-1-0-0) Revision: 1 Control: 0x8004 DACL Present Owner: 'S-1-5-32-548' = alias 'BUILTIN\Account Operators' Group: 'S-1-5-21-820728443-44925810-1835867902-512' = group 'AMNESIAC\Domain Administrators' DACL: 28 bytes, 1 ACE(s) [0] ACE: 20 bytes Type: 0x00 = Access Allowed Flags: 0x00 Access Mask: 0x100E003F Directory List Directory, File/Pipe Read Data, Key Query Value, Event/Mutant/Semaphore/Timer Query State, Job Assign Process, Process Terminate, Section Query, Service Query Configuration, Session Query Access, Thread Terminate, Token Assign Primary Directory Add File, File/Pipe Write Data, Key Set Value, Event/IO Completion/Mutant/Semaphore/Timer Modify State, Job Set Attributes, Process Create Thread, Section Map Write, Service Change Configuration, Session Modify Access, Thread Suspend/Resume, Token Duplicate Directory Add Subdirectory, File Append Data, Pipe Create Instance, Key Create Subkey, Job Query, Process Set Session Id, Section Map Read, Service Query Status, Token Impersonate Directory/File Read Extended Attributes, Key Enumerate Subkeys, Job Terminate, Process Virtual Memory Operation, Section Map Execute, Service Enumerate Dependencies, Thread Get Context, Token Query Directory/File Write Extended Attributes, Key Notify, Job Set Security Attributes, Process Virtual Memory Read, Section Extend Size, Service Start, Thread Set Context, Token Query Source Directory Traverse, File Execute, Key Create Link, Job Impersonate, Process Virtual Memory Write, Section Map Execute Explicit, Service Stop, Thread Set Information, Token Adjust Privileges Read Control Write DACL Write Owner Generic All Trustee: 'S-1-0-0' = well-known group 'NULL SID' SACL: NONE O:DAG:DAD:(A;;RPWPCCDCLCRCWOWDSDSW;;;SY)(A;;RPWPCCDCLCRCWOWDSDSW;;;DA)(OA;;CCDC;BF967ABA-0DE6-11D0-A285-00AA003049E2;;AO)(OA;;CCDC;BF967A9C-0DE6-11D0-A285-00AA003049E2;;AO)(OA;;CCDC;6DA8A4FF-0E52-11D0-A286-00AA003049E2;;AO)(OA;;CCDC;BF967AA8-0DE6-11D0-A285-00AA003049E2;;PO)(A;;RPLCRC;;;AU)S:(AU;SAFA;WDWOSDWPCCDCSW;;;WD) Revision: 1 Control: 0x8014 DACL Present SACL Present Owner: 'S-1-5-21-820728443-44925810-1835867902-512' = group 'AMNESIAC\Domain Administrators' Group: 'S-1-5-21-820728443-44925810-1835867902-512' = group 'AMNESIAC\Domain Administrators' DACL: 248 bytes, 7 ACE(s) [0] ACE: 20 bytes Type: 0x00 = Access Allowed Flags: 0x00 Access Mask: 0x000F003F Directory List Directory, File/Pipe Read Data, Key Query Value, Event/Mutant/Semaphore/Timer Query State, Job Assign Process, Process Terminate, Section Query, Service Query Configuration, Session Query Access, Thread Terminate, Token Assign Primary Directory Add File, File/Pipe Write Data, Key Set Value, Event/IO Completion/Mutant/Semaphore/Timer Modify State, Job Set Attributes, Process Create Thread, Section Map Write, Service Change Configuration, Session Modify Access, Thread Suspend/Resume, Token Duplicate Directory Add Subdirectory, File Append Data, Pipe Create Instance, Key Create Subkey, Job Query, Process Set Session Id, Section Map Read, Service Query Status, Token Impersonate Directory/File Read Extended Attributes, Key Enumerate Subkeys, Job Terminate, Process Virtual Memory Operation, Section Map Execute, Service Enumerate Dependencies, Thread Get Context, Token Query Directory/File Write Extended Attributes, Key Notify, Job Set Security Attributes, Process Virtual Memory Read, Section Extend Size, Service Start, Thread Set Context, Token Query Source Directory Traverse, File Execute, Key Create Link, Job Impersonate, Process Virtual Memory Write, Section Map Execute Explicit, Service Stop, Thread Set Information, Token Adjust Privileges Standard Delete Read Control Write DACL Write Owner Trustee: 'S-1-5-18' = well-known group 'NT AUTHORITY\SYSTEM' [1] ACE: 24 bytes Type: 0x00 = Access Allowed Flags: 0x00 Access Mask: 0x000F003F Directory List Directory, File/Pipe Read Data, Key Query Value, Event/Mutant/Semaphore/Timer Query State, Job Assign Process, Process Terminate, Section Query, Service Query Configuration, Session Query Access, Thread Terminate, Token Assign Primary Directory Add File, File/Pipe Write Data, Key Set Value, Event/IO Completion/Mutant/Semaphore/Timer Modify State, Job Set Attributes, Process Create Thread, Section Map Write, Service Change Configuration, Session Modify Access, Thread Suspend/Resume, Token Duplicate Directory Add Subdirectory, File Append Data, Pipe Create Instance, Key Create Subkey, Job Query, Process Set Session Id, Section Map Read, Service Query Status, Token Impersonate Directory/File Read Extended Attributes, Key Enumerate Subkeys, Job Terminate, Process Virtual Memory Operation, Section Map Execute, Service Enumerate Dependencies, Thread Get Context, Token Query Directory/File Write Extended Attributes, Key Notify, Job Set Security Attributes, Process Virtual Memory Read, Section Extend Size, Service Start, Thread Set Context, Token Query Source Directory Traverse, File Execute, Key Create Link, Job Impersonate, Process Virtual Memory Write, Section Map Execute Explicit, Service Stop, Thread Set Information, Token Adjust Privileges Standard Delete Read Control Write DACL Write Owner Trustee: 'S-1-5-21-820728443-44925810-1835867902-512' = group 'AMNESIAC\Domain Administrators' [2] ACE: 44 bytes Type: 0x05 = Object Access Allowed Flags: 0x00 Access Mask: 0x00000003 Directory List Directory, File/Pipe Read Data, Key Query Value, Event/Mutant/Semaphore/Timer Query State, Job Assign Process, Process Terminate, Section Query, Service Query Configuration, Session Query Access, Thread Terminate, Token Assign Primary Directory Add File, File/Pipe Write Data, Key Set Value, Event/IO Completion/Mutant/Semaphore/Timer Modify State, Job Set Attributes, Process Create Thread, Section Map Write, Service Change Configuration, Session Modify Access, Thread Suspend/Resume, Token Duplicate Trustee: 'S-1-5-32-548' = alias 'BUILTIN\Account Operators' [3] ACE: 44 bytes Type: 0x05 = Object Access Allowed Flags: 0x00 Access Mask: 0x00000003 Directory List Directory, File/Pipe Read Data, Key Query Value, Event/Mutant/Semaphore/Timer Query State, Job Assign Process, Process Terminate, Section Query, Service Query Configuration, Session Query Access, Thread Terminate, Token Assign Primary Directory Add File, File/Pipe Write Data, Key Set Value, Event/IO Completion/Mutant/Semaphore/Timer Modify State, Job Set Attributes, Process Create Thread, Section Map Write, Service Change Configuration, Session Modify Access, Thread Suspend/Resume, Token Duplicate Trustee: 'S-1-5-32-548' = alias 'BUILTIN\Account Operators' [4] ACE: 44 bytes Type: 0x05 = Object Access Allowed Flags: 0x00 Access Mask: 0x00000003 Directory List Directory, File/Pipe Read Data, Key Query Value, Event/Mutant/Semaphore/Timer Query State, Job Assign Process, Process Terminate, Section Query, Service Query Configuration, Session Query Access, Thread Terminate, Token Assign Primary Directory Add File, File/Pipe Write Data, Key Set Value, Event/IO Completion/Mutant/Semaphore/Timer Modify State, Job Set Attributes, Process Create Thread, Section Map Write, Service Change Configuration, Session Modify Access, Thread Suspend/Resume, Token Duplicate Trustee: 'S-1-5-32-548' = alias 'BUILTIN\Account Operators' [5] ACE: 44 bytes Type: 0x05 = Object Access Allowed Flags: 0x00 Access Mask: 0x00000003 Directory List Directory, File/Pipe Read Data, Key Query Value, Event/Mutant/Semaphore/Timer Query State, Job Assign Process, Process Terminate, Section Query, Service Query Configuration, Session Query Access, Thread Terminate, Token Assign Primary Directory Add File, File/Pipe Write Data, Key Set Value, Event/IO Completion/Mutant/Semaphore/Timer Modify State, Job Set Attributes, Process Create Thread, Section Map Write, Service Change Configuration, Session Modify Access, Thread Suspend/Resume, Token Duplicate Trustee: 'S-1-5-32-550' = alias 'BUILTIN\Print Operators' [6] ACE: 20 bytes Type: 0x00 = Access Allowed Flags: 0x00 Access Mask: 0x00020014 Directory Add Subdirectory, File Append Data, Pipe Create Instance, Key Create Subkey, Job Query, Process Set Session Id, Section Map Read, Service Query Status, Token Impersonate Directory/File Write Extended Attributes, Key Notify, Job Set Security Attributes, Process Virtual Memory Read, Section Extend Size, Service Start, Thread Set Context, Token Query Source Read Control Trustee: 'S-1-5-11' = well-known group 'NT AUTHORITY\Authenticated Users' SACL: 28 bytes, 1 ACE(s) [0] ACE: 20 bytes Type: 0x02 = Access Audit Flags: 0xC0 Access Success Access Failure Access Mask: 0x000D002B Directory List Directory, File/Pipe Read Data, Key Query Value, Event/Mutant/Semaphore/Timer Query State, Job Assign Process, Process Terminate, Section Query, Service Query Configuration, Session Query Access, Thread Terminate, Token Assign Primary Directory Add File, File/Pipe Write Data, Key Set Value, Event/IO Completion/Mutant/Semaphore/Timer Modify State, Job Set Attributes, Process Create Thread, Section Map Write, Service Change Configuration, Session Modify Access, Thread Suspend/Resume, Token Duplicate Directory/File Read Extended Attributes, Key Enumerate Subkeys, Job Terminate, Process Virtual Memory Operation, Section Map Execute, Service Enumerate Dependencies, Thread Get Context, Token Query Directory Traverse, File Execute, Key Create Link, Job Impersonate, Process Virtual Memory Write, Section Map Execute Explicit, Service Stop, Thread Set Information, Token Adjust Privileges Standard Delete Write DACL Write Owner Trustee: 'S-1-1-0' = well-known group 'Everyone'
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and SDDL.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file SDDL.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#include <sddl.h>
#include <lmcons.h>
#include <aclapi.h>
#ifndef LABEL_SECURITY_INFORMATION
#define LABEL_SECURITY_INFORMATION 0x00000010UL
#endif
#ifndef ATTRIBUTE_SECURITY_INFORMATION
#define ATTRIBUTE_SECURITY_INFORMATION 0x00000020UL
#endif
#ifndef SCOPE_SECURITY_INFORMATION
#define SCOPE_SECURITY_INFORMATION 0x00000040UL
#endif
#ifndef PROCESS_TRUST_LABEL_SECURITY_INFORMATION
#define PROCESS_TRUST_LABEL_SECURITY_INFORMATION 0x00000080UL
#endif
#ifndef BACKUP_SECURITY_INFORMATION
#define BACKUP_SECURITY_INFORMATION 0x00010000UL
#endif
#ifndef CRITICAL_ACE_FLAG
#define CRITICAL_ACE_FLAG 0x20
#endif
#ifndef SYSTEM_MANDATORY_LABEL_ACE_TYPE
#define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11
typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_MANDATORY_LABEL_ACE;
#endif
#ifndef SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE
#define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE 0x12
typedef struct _SYSTEM_RESOURCE_ATTRIBUTE_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_RESOURCE_ATTRIBUTE_ACE;
#endif
#ifndef SYSTEM_SCOPED_POLICY_ID_ACE_TYPE
#define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE 0x13
typedef struct _SYSTEM_SCOPED_POLICY_ID_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_SCOPED_POLICY_ID_ACE;
#endif
#ifndef SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE
#define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE 0x14
typedef struct _SYSTEM_PROCESS_TRUST_LABEL_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_PROCESS_TRUST_LABEL_ACE;
#endif
#ifndef SYSTEM_ACCESS_FILTER_ACE_TYPE
#define SYSTEM_ACCESS_FILTER_ACE_TYPE 0x15
typedef struct _SYSTEM_ACCESS_FILTER_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_ACCESS_FILTER_ACE;
#endif
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
const LPCWSTR szSNU[] = {NULL,
L"user",
L"group",
L"domain",
L"alias",
L"well-known group",
L"deleted account",
L"invalid",
L"unknown",
L"computer",
L"label",
L"logon session"};
__declspec(safebuffers)
BOOL WINAPI PrintSID(HANDLE hConsole, SID *sid, LPCWSTR lpWhich)
{
LPWSTR lpSID;
DWORD dwError = ERROR_SUCCESS;
WCHAR szAccount[UNLEN + 1];
DWORD dwAccount = sizeof(szAccount) / sizeof(*szAccount);
WCHAR szDomain[GNLEN + 1];
DWORD dwDomain = sizeof(szDomain) / sizeof(*szDomain);
SID_NAME_USE snu = 0;
if (!ConvertSidToStringSid(sid, &lpSID))
PrintConsole(hConsole,
L"ConvertSidToStringSid() returned error %lu\n",
dwError = GetLastError());
else
{
if (!LookupAccountSid((LPCWSTR) NULL,
sid,
szAccount, &dwAccount,
szDomain, &dwDomain,
&snu))
{
dwError = GetLastError();
if (dwError != ERROR_NONE_MAPPED)
PrintConsole(hConsole,
L"LookupAccountSid() returned error %lu for security identifier \'%ls\'\n",
dwError, lpSID);
PrintConsole(hConsole,
L"%ls\'%ls\'\n",
lpWhich, lpSID);
}
else
if (*szDomain == L'\0')
PrintConsole(hConsole,
L"%ls\'%ls\' = %ls \'%ls\'\n",
lpWhich, lpSID, szSNU[snu], szAccount);
else if (*szAccount == L'\0')
PrintConsole(hConsole,
L"%ls\'%ls\' = %ls \'%ls\'\n",
lpWhich, lpSID, szSNU[snu], szDomain);
else
PrintConsole(hConsole,
L"%ls\'%ls\' = %ls \'%ls\\%ls\'\n",
lpWhich, lpSID, szSNU[snu], szDomain, szAccount);
if (LocalFree(lpSID) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
// SetLastError(dwError);
return dwError == ERROR_SUCCESS;
}
const LPCWSTR szSDC[16] = {L"Owner Defaulted", // SE_OWNER_DEFAULTED
L"Group Defaulted", // SE_GROUP_DEFAULTED
L"DACL Present", // SE_DACL_PRESENT
L"DACL Defaulted", // SE_DACL_DEFAULTED
L"SACL Present", // SE_SACL_PRESENT
L"SACL Defaulted", // SE_SACL_DEFAULTED
NULL,
NULL,
L"DACL Auto Inheritance Request", // SE_DACL_AUTO_INHERIT_REQ
L"SACL Auto Inheritance Request", // SE_SACL_AUTO_INHERIT_REQ
L"DACL Auto Inherited", // SE_DACL_AUTO_INHERITED
L"SACL Auto Inherited", // SE_SACL_AUTO_INHERITED
L"DACL Protected", // SE_DACL_PROTECTED
L"SACL Protected", // SE_SACL_PROTECTED
L"Resource Manager Control", // SE_RM_CONTROL_VALID
L"Self Relative"}; // SE_SELF_RELATIVE
const LPCWSTR szType[22] = {L"Access Allowed",
L"Access Denied",
L"Access Audit",
L"Access Alarm",
L"Compound Access Allowed",
L"Object Access Allowed",
L"Object Access Denied",
L"Object Access Audit",
L"Object Access Alarm",
L"Access Allowed Callback",
L"Access Denied Callback",
L"Object Access Allowed Callback",
L"Object Access Denied Callback",
L"Access Audit Callback",
L"Access Alarm Callback",
L"Object Access Audit Callback",
L"Object Access Alarm Callback",
L"Mandatory Label",
L"Resource Attribute",
L"Scoped Policy Identification",
L"Process Trust Label",
L"Access Filter"};
const LPCWSTR szFlag[8] = {L"Object Inherit", // OBJECT_INHERIT_ACE
L"Container Inherit", // CONTAINER_INHERIT_ACE
L"No Propagate Inherit", // NO_PROPAGATE_INHERIT_ACE
L"Inherit Only", // INHERIT_ONLY_ACE
L"Inherited", // INHERITED_ACE
L"Critical", // CRITICAL_ACE_FLAG
L"Access Success", // SUCCESSFUL_ACCESS_ACE_FLAG
L"Access Failure"}; // FAILED_ACCESS_ACE_FLAG
const LPCWSTR szMask[32] = {L"Directory List Directory, File/Pipe Read Data, Key Query Value, Event/Mutant/Semaphore/Timer Query State, Job Assign Process, Process Terminate, Section Query, Service Query Configuration, Session Query Access, Thread Terminate, Token Assign Primary",
L"Directory Add File, File/Pipe Write Data, Key Set Value, Event/IO Completion/Mutant/Semaphore/Timer Modify State, Job Set Attributes, Process Create Thread, Section Map Write, Service Change Configuration, Session Modify Access, Thread Suspend/Resume, Token Duplicate",
L"Directory Add Subdirectory, File Append Data, Pipe Create Instance, Key Create Subkey, Job Query, Process Set Session Id, Section Map Read, Service Query Status, Token Impersonate",
L"Directory/File Read Extended Attributes, Key Enumerate Subkeys, Job Terminate, Process Virtual Memory Operation, Section Map Execute, Service Enumerate Dependencies, Thread Get Context, Token Query",
L"Directory/File Write Extended Attributes, Key Notify, Job Set Security Attributes, Process Virtual Memory Read, Section Extend Size, Service Start, Thread Set Context, Token Query Source",
L"Directory Traverse, File Execute, Key Create Link, Job Impersonate, Process Virtual Memory Write, Section Map Execute Explicit, Service Stop, Thread Set Information, Token Adjust Privileges",
L"Directory Delete Child, Process Duplicate Handle, Service Pause, Thread Query Information, Token Adjust Groups",
L"Directory/File/Pipe Read Attributes, Process Create Process, Service Interrogate, Thread Set Thread Token, Token Adjust Default",
L"Directory/File/Pipe Write Attributes, Process Set Quota, Service User Defined, Thread Impersonate, Token Adjust Session Id",
L"Process Set Information, Thread Direct Impersonation",
L"Process Query Information, Thread Set Limited Information",
L"Process Suspend/Resume, Thread Query Limited Information",
L"Process Query Limited Information, Thread Resume",
L"Process Set Limited Information",
NULL,
NULL,
L"Standard Delete",
L"Read Control",
L"Write DACL",
L"Write Owner",
L"Synchronize",
NULL,
NULL,
NULL,
L"Access SACL",
L"Maximum Allowed",
NULL,
NULL,
L"Generic All",
L"Generic Execute/Traverse",
L"Generic Write",
L"Generic Read"};
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
SECURITY_DESCRIPTOR *lpSD;
SECURITY_DESCRIPTOR_CONTROL sdc;
SID *lpSID;
ACL *lpACL;
ACE_HEADER *lpACE;
INT nArgument = 1;
INT nArguments;
LPWSTR *lpArguments;
BYTE rmControl;
BOOL bDefaulted;
BOOL bPresent;
WORD wACE;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwIndex;
DWORD dwValue;
DWORD dwLength;
DWORD dwRevision;
DWORD dwSD;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 2)
PrintConsole(hConsole,
L"No arguments: at least one SDDL string must be given!\n");
else
do
if (!ConvertStringSecurityDescriptorToSecurityDescriptor(lpArguments[nArgument],
SDDL_REVISION_1,
&lpSD,
&dwSD))
PrintConsole(hConsole,
L"ConvertStringSecurityDescriptorToSecurityDescriptor() returned error %lu for argument \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
else
{
PrintConsole(hConsole,
L"\n"
L"%ls\n",
lpArguments[nArgument]);
dwLength = GetSecurityDescriptorLength(lpSD);
if (dwSD != dwLength)
PrintConsole(hConsole,
L"ConvertStringSecurityDescriptorToSecurityDescriptor() returned a security descriptor of %lu bytes, but GetSecurityDescriptorLength() returned %lu bytes\n",
dwSD, dwLength);
if (!GetSecurityDescriptorControl(lpSD, &sdc, &dwRevision))
PrintConsole(hConsole,
L"GetSecurityDescriptorControl() returned error %lu\n",
dwError = GetLastError());
else
{
PrintConsole(hConsole,
L"\tRevision:\t%lu\n"
L"\tControl:\t0x%04hX\n",
dwRevision,
sdc);
for (dwValue = sdc & ~SE_SELF_RELATIVE;
_BitScanForward(&dwIndex, dwValue);
dwValue &= dwValue - 1)
PrintConsole(hConsole, L"\t\t%ls\n", szSDC[dwIndex]);
}
if (sdc & SE_RM_CONTROL_VALID)
{
dwError = GetSecurityDescriptorRMControl(lpSD, &rmControl);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"GetSecurityDescriptorRMControl() returned error %lu\n",
dwError);
else
PrintConsole(hConsole,
L"\tRM Control:\t0x%02X\n",
rmControl);
}
if (!GetSecurityDescriptorOwner(lpSD, &lpSID, &bDefaulted))
PrintConsole(hConsole,
L"GetSecurityDescriptorOwner() returned error %lu\n",
dwError = GetLastError());
else
if (lpSID != NULL)
PrintSID(hConsole, lpSID, L"\tOwner:\t\t");
if (!GetSecurityDescriptorGroup(lpSD, &lpSID, &bDefaulted))
PrintConsole(hConsole,
L"GetSecurityDescriptorGroup() returned error %lu\n",
dwError = GetLastError());
else
if (lpSID != NULL)
PrintSID(hConsole, lpSID, L"\tGroup:\t\t");
if (!GetSecurityDescriptorDacl(lpSD, &bPresent, &lpACL, &bDefaulted))
PrintConsole(hConsole,
L"GetSecurityDescriptorDacl() returned error %lu\n",
dwError = GetLastError());
else
if (!bPresent)
PrintConsole(hConsole,
L"\tDACL:\t\tNONE\n");
else
if (lpACL == NULL)
PrintConsole(hConsole,
L"\tDACL:\t\tNULL\n");
else
if (lpACL->AceCount == 0)
PrintConsole(hConsole,
L"\tDACL:\t\tEMPTY\n");
else
{
PrintConsole(hConsole,
L"\tDACL:\t\t%hu bytes, %hu ACE(s)\n",
lpACL->AclSize, lpACL->AceCount);
for (lpACE = (ACE_HEADER *) (lpACL + 1),
wACE = 0; wACE < lpACL->AceCount; wACE++,
lpACE = (ACE_HEADER *) ((BYTE *) lpACE + lpACE->AceSize))
{
switch (lpACE->AceType)
{
case ACCESS_ALLOWED_ACE_TYPE:
lpSID = (SID *) &(((ACCESS_ALLOWED_ACE *) lpACE)->SidStart);
break;
case ACCESS_DENIED_ACE_TYPE:
lpSID = (SID *) &(((ACCESS_DENIED_ACE *) lpACE)->SidStart);
break;
case ACCESS_ALLOWED_COMPOUND_ACE_TYPE:
continue;
case ACCESS_ALLOWED_OBJECT_ACE_TYPE:
if (((((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpSID = (SID *) &(((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->SidStart);
else
lpSID = (SID *) &(((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->ObjectType);
else
lpSID = (SID *) &(((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case ACCESS_DENIED_OBJECT_ACE_TYPE:
if (((((ACCESS_DENIED_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((ACCESS_DENIED_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((ACCESS_DENIED_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpSID = (SID *) &(((ACCESS_DENIED_OBJECT_ACE *) lpACE)->SidStart);
else
lpSID = (SID *) &(((ACCESS_DENIED_OBJECT_ACE *) lpACE)->ObjectType);
else
lpSID = (SID *) &(((ACCESS_DENIED_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case ACCESS_ALLOWED_CALLBACK_ACE_TYPE:
lpSID = (SID *) &(((ACCESS_ALLOWED_CALLBACK_ACE *) lpACE)->SidStart);
break;
case ACCESS_DENIED_CALLBACK_ACE_TYPE:
lpSID = (SID *) &(((ACCESS_DENIED_CALLBACK_ACE *) lpACE)->SidStart);
break;
case ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE:
if (((((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpSID = (SID *) &(((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->SidStart);
else
lpSID = (SID *) &(((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->ObjectType);
else
lpSID = (SID *) &(((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE:
if (((((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpSID = (SID *) &(((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->SidStart);
else
lpSID = (SID *) &(((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->ObjectType);
else
lpSID = (SID *) &(((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
default:
PrintConsole(hConsole,
L"Unknown ACE type %u in DACL\n",
lpACE->AceType);
continue;
}
PrintConsole(hConsole,
L"\t[%hu]\tACE:\t%hu bytes\n"
L"\t\tType:\t\t0x%02X = %ls\n"
L"\t\tFlags:\t\t0x%02X\n",
wACE, lpACE->AceSize,
lpACE->AceType, szType[lpACE->AceType],
lpACE->AceFlags);
for (dwValue = lpACE->AceFlags & (VALID_INHERIT_FLAGS | CRITICAL_ACE_FLAG);
_BitScanForward(&dwIndex, dwValue);
dwValue &= dwValue - 1)
PrintConsole(hConsole, L"\t\t\t\t%ls\n", szFlag[dwIndex]);
PrintConsole(hConsole,
L"\t\tAccess Mask:\t0x%08lX\n",
((ACCESS_ALLOWED_ACE *) lpACE)->Mask);
for (dwValue = ((ACCESS_ALLOWED_ACE *) lpACE)->Mask;
_BitScanForward(&dwIndex, dwValue);
dwValue &= dwValue - 1)
PrintConsole(hConsole, L"\t\t\t\t%ls\n", szMask[dwIndex]);
PrintSID(hConsole, lpSID, L"\t\tTrustee:\t");
}
}
if (!GetSecurityDescriptorSacl(lpSD, &bPresent, &lpACL, &bDefaulted))
PrintConsole(hConsole,
L"GetSecurityDescriptorSacl() returned error %lu\n",
dwError = GetLastError());
else
if (!bPresent)
PrintConsole(hConsole,
L"\tSACL:\t\tNONE\n");
else
if (lpACL == NULL)
PrintConsole(hConsole,
L"\tSACL:\t\tNULL\n");
else
if (lpACL->AceCount == 0)
PrintConsole(hConsole,
L"\tSACL:\t\tEMPTY\n");
else
{
PrintConsole(hConsole,
L"\tSACL:\t\t%hu bytes, %hu ACE(s)\n",
lpACL->AclSize, lpACL->AceCount);
for (lpACE = (ACE_HEADER *) (lpACL + 1),
wACE = 0; wACE < lpACL->AceCount; wACE++,
lpACE = (ACE_HEADER *) ((BYTE *) lpACE + lpACE->AceSize))
{
switch (lpACE->AceType)
{
case SYSTEM_AUDIT_ACE_TYPE:
lpSID = (SID *) &(((SYSTEM_AUDIT_ACE *) lpACE)->SidStart);
break;
case SYSTEM_ALARM_ACE_TYPE:
lpSID = (SID *) &(((SYSTEM_ALARM_ACE *) lpACE)->SidStart);
break;
case SYSTEM_AUDIT_OBJECT_ACE_TYPE:
if (((((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpSID = (SID *) &(((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->SidStart);
else
lpSID = (SID *) &(((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->ObjectType);
else
lpSID = (SID *) &(((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case SYSTEM_ALARM_OBJECT_ACE_TYPE:
if (((((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpSID = (SID *) &(((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->SidStart);
else
lpSID = (SID *) &(((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->ObjectType);
else
lpSID = (SID *) &(((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case SYSTEM_AUDIT_CALLBACK_ACE_TYPE:
lpSID = (SID *) &(((SYSTEM_AUDIT_CALLBACK_ACE *) lpACE)->SidStart);
break;
case SYSTEM_ALARM_CALLBACK_ACE_TYPE:
lpSID = (SID *) &(((SYSTEM_ALARM_CALLBACK_ACE *) lpACE)->SidStart);
break;
case SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE:
if (((((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpSID = (SID *) &(((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->SidStart);
else
lpSID = (SID *) &(((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->ObjectType);
else
lpSID = (SID *) &(((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE:
if (((((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpSID = (SID *) &(((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->SidStart);
else
lpSID = (SID *) &(((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->ObjectType);
else
lpSID = (SID *) &(((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case SYSTEM_MANDATORY_LABEL_ACE_TYPE:
lpSID = (SID *) &(((SYSTEM_MANDATORY_LABEL_ACE *) lpACE)->SidStart);
break;
case SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE:
lpSID = (SID *) &(((SYSTEM_RESOURCE_ATTRIBUTE_ACE *) lpACE)->SidStart);
break;
case SYSTEM_SCOPED_POLICY_ID_ACE_TYPE:
lpSID = (SID *) &(((SYSTEM_SCOPED_POLICY_ID_ACE *) lpACE)->SidStart);
break;
case SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE:
lpSID = (SID *) &(((SYSTEM_PROCESS_TRUST_LABEL_ACE *) lpACE)->SidStart);
break;
case SYSTEM_ACCESS_FILTER_ACE_TYPE:
lpSID = (SID *) &(((SYSTEM_ACCESS_FILTER_ACE *) lpACE)->SidStart);
break;
default:
PrintConsole(hConsole,
L"Unknown ACE type %u in SACL\n",
lpACE->AceType);
continue;
}
PrintConsole(hConsole,
L"\t[%hu]\tACE:\t%hu bytes\n"
L"\t\tType:\t\t0x%02X = %ls\n"
L"\t\tFlags:\t\t0x%02X\n",
wACE, lpACE->AceSize,
lpACE->AceType, szType[lpACE->AceType],
lpACE->AceFlags);
for (dwValue = lpACE->AceFlags & (SUCCESSFUL_ACCESS_ACE_FLAG | FAILED_ACCESS_ACE_FLAG);
_BitScanForward(&dwIndex, dwValue);
dwValue &= dwValue - 1)
PrintConsole(hConsole, L"\t\t\t\t%ls\n", szFlag[dwIndex]);
PrintConsole(hConsole,
L"\t\tAccess Mask:\t0x%08lX\n",
((SYSTEM_MANDATORY_LABEL_ACE *) lpACE)->Mask);
if (lpACE->AceType == SYSTEM_MANDATORY_LABEL_ACE_TYPE)
{
if (((SYSTEM_MANDATORY_LABEL_ACE *) lpACE)->Mask & SYSTEM_MANDATORY_LABEL_NO_WRITE_UP)
PrintConsole(hConsole,
L"\t\t\t\tNo Write Up\n");
if (((SYSTEM_MANDATORY_LABEL_ACE *) lpACE)->Mask & SYSTEM_MANDATORY_LABEL_NO_READ_UP)
PrintConsole(hConsole,
L"\t\t\t\tNo Read Up\n");
if (((SYSTEM_MANDATORY_LABEL_ACE *) lpACE)->Mask & SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
PrintConsole(hConsole,
L"\t\t\t\tNo Execute Up\n");
}
else
for (dwValue = ((SYSTEM_AUDIT_ACE *) lpACE)->Mask;
_BitScanForward(&dwIndex, dwValue);
dwValue &= dwValue - 1)
PrintConsole(hConsole, L"\t\t\t\t%ls\n", szMask[dwIndex]);
PrintSID(hConsole, lpSID, L"\t\tTrustee:\t");
}
}
if (LocalFree(lpSD) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
dwError = GetLastError());
}
while (++nArgument < nArguments);
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
SDDL.C
created in step 1., link the compiled
object file SDDL.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeSDDL.COM SDDL.C ADVAPI32.LIB KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE SDDL.OBJFor 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. SDDL.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file SDDL.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 0a 00 00 ......#.........
00 26 00 00 00 00 00 00 ac 11 00 00 00 10 00 00 .&..............
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 50 00 00 00 02 00 00 7a 47 00 00 03 00 00 85 .P......zG......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
b8 42 00 00 50 00 00 00 00 00 00 00 00 00 00 00 .B..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 50 42 00 00 40 00 00 00 ........PB..@...
00 00 00 00 00 00 00 00 00 20 00 00 5c 00 00 00 ......... ..\...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
e8 09 00 00 00 10 00 00 00 0a 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 5c 25 00 00 00 20 00 00 .const..\%... ..
00 26 00 00 00 0c 00 00 00 00 00 00 00 00 00 00 .&..............
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 54 20 40 00 8b f0 .......P..T @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 2c 20 40 00 85 .....P.u..., @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 18 04 00 00 b8 01 01 00 00 57 89 45 f0 ............W.E.
89 45 f4 8d 45 fc 50 ff 75 0c 33 ff 21 7d f8 ff .E..E.P.u.3.!}..
15 04 20 40 00 85 c0 75 23 ff 15 34 20 40 00 8b .. @...u#..4 @..
f8 57 68 d0 3a 40 00 68 9c 3a 40 00 ff 75 08 e8 .Wh.:@.h.:@..u..
6c ff ff ff 83 c4 10 e9 04 01 00 00 56 8d 45 f8 l...........V.E.
50 8d 45 f4 50 8d 85 e8 fb ff ff 50 8d 45 f0 50 P.E.P......P.E.P
8d 85 ec fd ff ff 50 ff 75 0c 6a 00 ff 15 00 20 ......P.u.j....
40 00 8b 35 34 20 40 00 85 c0 75 3d ff d6 8b f8 @..54 @...u=....
81 ff 34 05 00 00 74 19 ff 75 fc 57 68 78 3a 40 ..4...t..u.Whx:@
00 68 08 3a 40 00 ff 75 08 e8 12 ff ff ff 83 c4 .h.:@..u........
14 ff 75 fc ff 75 10 68 f4 39 40 00 ff 75 08 e8 ..u..u.h.9@..u..
fc fe ff ff 83 c4 10 eb 71 66 39 bd e8 fb ff ff ........qf9.....
75 08 8d 85 ec fd ff ff eb 0f 66 39 bd ec fd ff u.........f9....
ff 75 29 8d 85 e8 fb ff ff 50 8b 45 f8 ff 34 85 .u)......P.E..4.
18 38 40 00 ff 75 fc ff 75 10 68 c8 39 40 00 ff .8@..u..u.h.9@..
75 08 e8 b9 fe ff ff 83 c4 18 eb 2e 8d 85 ec fd u...............
ff ff 50 8d 85 e8 fb ff ff 50 8b 45 f8 ff 34 85 ..P......P.E..4.
18 38 40 00 ff 75 fc ff 75 10 68 94 39 40 00 ff .8@..u..u.h.9@..
75 08 e8 89 fe ff ff 83 c4 1c ff 75 fc ff 15 30 u..........u...0
20 40 00 85 c0 74 18 ff d6 50 68 80 39 40 00 68 @...t...Ph.9@.h
9c 3a 40 00 ff 75 08 e8 64 fe ff ff 83 c4 10 5e .:@..u..d......^
33 c0 85 ff 0f 94 c0 5f c9 c2 0c 00 55 8b ec 83 3......_....U...
ec 3c 53 56 57 6a f4 c7 45 dc 01 00 00 00 c7 45 .<SVWj..E......E
ec a0 00 00 00 ff 15 44 20 40 00 8b f0 89 75 f0 .......D @....u.
83 fe ff 75 0e ff 15 34 20 40 00 89 45 ec e9 63 ...u...4 @..E..c
06 00 00 8d 45 cc 50 ff 15 40 20 40 00 50 e8 5d ....E.P..@ @.P.]
06 00 00 8b 3d 34 20 40 00 89 45 c8 85 c0 75 17 ....=4 @..E...u.
ff d7 50 68 20 42 40 00 bb 9c 3a 40 00 53 89 45 ..Ph B@...:@.S.E
ec 56 e9 06 06 00 00 83 7d cc 02 bb 9c 3a 40 00 .V......}....:@.
73 12 68 b0 41 40 00 56 e8 d3 fd ff ff 59 59 e9 s.h.A@.V.....YY.
d0 05 00 00 8b 45 c8 8b 4d dc 8d 34 88 8d 45 d0 .....E..M..4..E.
50 8d 45 e8 50 6a 01 ff 36 ff 15 24 20 40 00 85 P.E.Pj..6..$ @..
c0 75 22 ff d7 ff 36 89 45 ec 50 68 48 41 40 00 .u"...6.E.PhHA@.
68 e8 40 40 00 ff 75 f0 e8 93 fd ff ff 83 c4 14 h.@@..u.........
e9 80 05 00 00 ff 36 68 dc 40 40 00 ff 75 f0 e8 ......6h.@@..u..
7c fd ff ff 83 c4 0c ff 75 e8 ff 15 20 20 40 00 |.......u... @.
39 45 d0 74 1e 50 68 a4 40 40 00 ff 75 d0 68 48 9E.t.Ph.@@..u.hH
41 40 00 68 00 40 40 00 ff 75 f0 e8 50 fd ff ff A@.h.@@..u..P...
83 c4 18 8d 45 c4 50 8d 45 f8 50 ff 75 e8 ff 15 ....E.P.E.P.u...
1c 20 40 00 85 c0 75 19 ff d7 50 68 c4 3f 40 00 . @...u...Ph.?@.
53 ff 75 f0 89 45 ec e8 24 fd ff ff 83 c4 10 eb S.u..E..$.......
45 0f b7 45 f8 50 ff 75 c4 68 80 3f 40 00 ff 75 E..E.P.u.h.?@..u
f0 e8 0a fd ff ff 0f b7 75 f8 83 c4 10 81 e6 ff ........u.......
7f ff ff eb 1c ff 34 85 48 38 40 00 68 70 3f 40 ......4.H8@.hp?@
00 ff 75 f0 e8 e7 fc ff ff 8d 46 ff 83 c4 0c 23 ..u.......F....#
f0 0f bc c6 75 df 0f b7 45 f8 a9 00 40 00 00 74 ....u...E...@..t
3e 8d 45 ff 50 ff 75 e8 ff 15 18 20 40 00 8b 75 >.E.P.u.... @..u
f0 89 45 ec 85 c0 74 12 50 68 30 3f 40 00 53 56 ..E...t.Ph0?@.SV
e8 ab fc ff ff 83 c4 10 eb 18 0f b6 45 ff 50 68 ............E.Ph
04 3f 40 00 56 e8 96 fc ff ff 83 c4 0c eb 03 8b .?@.V...........
75 f0 8d 45 d8 50 8d 45 f4 50 ff 75 e8 ff 15 14 u..E.P.E.P.u....
20 40 00 85 c0 75 17 ff d7 50 68 cc 3e 40 00 53 @...u...Ph.>@.S
56 89 45 ec e8 67 fc ff ff 83 c4 10 eb 14 83 7d V.E..g.........}
f4 00 74 0e 68 b8 3e 40 00 ff 75 f4 56 e8 9c fc ..t.h.>@..u.V...
ff ff 8d 45 d8 50 8d 45 f4 50 ff 75 e8 ff 15 10 ...E.P.E.P.u....
20 40 00 85 c0 75 17 ff d7 50 68 80 3e 40 00 53 @...u...Ph.>@.S
56 89 45 ec e8 27 fc ff ff 83 c4 10 eb 14 83 7d V.E..'.........}
f4 00 74 0e 68 6c 3e 40 00 ff 75 f4 56 e8 5c fc ..t.hl>@..u.V.\.
ff ff 8d 45 d8 50 8d 45 e4 50 8d 45 d4 50 ff 75 ...E.P.E.P.E.P.u
e8 ff 15 0c 20 40 00 85 c0 75 1a ff d7 50 68 38 .... @...u...Ph8
3e 40 00 53 56 89 45 ec e8 e3 fb ff ff 83 c4 10 >@.SV.E.........
e9 97 01 00 00 83 7d d4 00 75 07 68 1c 3e 40 00 ......}..u.h.>@.
eb 1c 8b 45 e4 85 c0 75 07 68 00 3e 40 00 eb 0e ...E...u.h.>@...
0f b7 48 04 66 85 c9 75 12 68 e0 3d 40 00 56 e8 ..H.f..u.h.=@.V.
ac fb ff ff 59 59 e9 61 01 00 00 0f b7 40 02 51 ....YY.a.....@.Q
50 68 a0 3d 40 00 ff 75 f0 e8 92 fb ff ff 8b 45 Ph.=@..u.......E
e4 33 c9 83 c4 10 33 db 8d 70 08 66 3b 48 04 0f .3....3..p.f;H..
83 32 01 00 00 0f b6 06 83 f8 06 7f 49 74 16 8b .2..........It..
c8 83 e9 00 74 65 49 74 62 83 e9 03 0f 84 01 01 ....teItb.......
00 00 49 75 40 8b 46 08 8b c8 24 02 33 d2 83 e1 ..Iu@.F...$.3...
01 3c 02 0f 94 c2 33 c0 83 f9 01 0f 94 c0 3b c2 .<....3.......;.
75 0f 83 f9 01 75 05 8d 46 2c eb 32 8d 46 0c eb u....u..F,.2.F..
2d 8d 46 1c eb 28 8b c8 83 e9 09 74 1e 49 74 1b -.F..(.....t.It.
49 74 c2 eb bd 50 68 64 3d 40 00 ff 75 f0 e8 0d It...Phd=@..u...
fb ff ff 83 c4 0c e9 a8 00 00 00 8d 46 08 89 45 ............F..E
f4 0f b6 06 0f b6 4e 01 51 ff 34 85 88 38 40 00 ......N.Q.4..8@.
50 0f b7 46 02 50 0f b7 c3 50 68 e8 3c 40 00 ff P..F.P...Ph.<@..
75 f0 e8 d9 fa ff ff 0f b6 7e 01 83 c4 1c 83 e7 u........~......
3f eb 1c ff 34 85 e0 38 40 00 68 d0 3c 40 00 ff ?...4..8@.h.<@..
75 f0 e8 b9 fa ff ff 8d 47 ff 83 c4 0c 23 f8 0f u.......G....#..
bc c7 75 df ff 76 04 68 a0 3c 40 00 ff 75 f0 e8 ..u..v.h.<@..u..
9c fa ff ff 8b 7e 04 83 c4 0c eb 1c ff 34 85 00 .....~.......4..
39 40 00 68 d0 3c 40 00 ff 75 f0 e8 80 fa ff ff 9@.h.<@..u......
8d 47 ff 83 c4 0c 23 f8 0f bc c7 75 df 68 88 3c .G....#....u.h.<
40 00 ff 75 f4 ff 75 f0 e8 b1 fa ff ff 8b 3d 34 @..u..u.......=4
20 40 00 0f b7 46 02 03 f0 8b 45 e4 43 66 3b 58 @...F....E.Cf;X
04 0f 82 ce fe ff ff bb 9c 3a 40 00 8d 45 d8 50 .........:@..E.P
8d 45 e4 50 8d 45 d4 50 ff 75 e8 ff 15 08 20 40 .E.P.E.P.u.... @
00 85 c0 75 1c ff d7 50 68 54 3c 40 00 53 ff 75 ...u...PhT<@.S.u
f0 89 45 ec e8 17 fa ff ff 83 c4 10 e9 e0 01 00 ..E.............
00 83 7d d4 00 75 07 68 38 3c 40 00 eb 1c 8b 45 ..}..u.h8<@....E
e4 85 c0 75 07 68 1c 3c 40 00 eb 0e 0f b7 48 04 ...u.h.<@.....H.
66 85 c9 75 14 68 fc 3b 40 00 ff 75 f0 e8 de f9 f..u.h.;@..u....
ff ff 59 59 e9 a8 01 00 00 0f b7 40 02 51 50 68 ..YY.......@.QPh
bc 3b 40 00 ff 75 f0 e8 c4 f9 ff ff 8b 45 e4 83 .;@..u.......E..
65 e0 00 83 c4 10 8d 70 08 33 c9 e9 77 01 00 00 e......p.3..w...
0f b6 0e 83 f9 0f 7f 49 74 1b 8d 41 ff 48 74 10 .......It..A.Ht.
48 74 0d 83 e8 04 74 0d 48 74 0a 83 e8 05 eb 42 Ht....t.Ht.....B
8d 46 08 eb 5b 8b 46 08 8b c8 24 02 33 d2 83 e1 .F..[.F...$.3...
01 3c 02 0f 94 c2 33 c0 83 f9 01 0f 94 c0 3b c2 .<....3.......;.
75 3b 83 f9 01 75 05 8d 46 2c eb 34 8d 46 0c eb u;...u..F,.4.F..
2f 8b c1 83 e8 10 74 cd 48 74 c5 48 74 c2 48 74 /.....t.Ht.Ht.Ht
bf 48 74 bc 48 74 b9 51 68 80 3b 40 00 ff 75 f0 .Ht.Ht.Qh.;@..u.
e8 3b f9 ff ff 83 c4 0c e9 ea 00 00 00 8d 46 1c .;............F.
8b 5d f0 89 45 f4 0f b6 06 0f b6 4e 01 51 ff 34 .]..E......N.Q.4
85 88 38 40 00 50 0f b7 46 02 50 0f b7 45 e0 50 ..8@.P..F.P..E.P
68 e8 3c 40 00 53 e8 05 f9 ff ff 0f b6 7e 01 83 h.<@.S.......~..
c4 1c 81 e7 c0 00 00 00 eb 1a ff 34 85 e0 38 40 ...........4..8@
00 68 d0 3c 40 00 53 e8 e4 f8 ff ff 8d 47 ff 83 .h.<@.S......G..
c4 0c 23 f8 0f bc c7 75 e1 ff 76 04 68 a0 3c 40 ..#....u..v.h.<@
00 53 e8 c9 f8 ff ff 83 c4 0c 80 3e 11 75 3b f6 .S.........>.u;.
46 04 01 74 0d 68 5c 3b 40 00 53 e8 b0 f8 ff ff F..t.h\;@.S.....
59 59 f6 46 04 02 74 0d 68 3c 3b 40 00 53 e8 9d YY.F..t.h<;@.S..
f8 ff ff 59 59 f6 46 04 04 74 33 68 14 3b 40 00 ...YY.F..t3h.;@.
53 e8 8a f8 ff ff 59 59 eb 24 8b 7e 04 eb 1a ff S.....YY.$.~....
34 85 00 39 40 00 68 d0 3c 40 00 53 e8 6f f8 ff 4..9@.h.<@.S.o..
ff 8d 47 ff 83 c4 0c 23 f8 0f bc c7 75 e1 68 88 ..G....#....u.h.
3c 40 00 ff 75 f4 53 e8 a2 f8 ff ff 8b 3d 34 20 <@..u.S......=4
40 00 bb 9c 3a 40 00 0f b7 46 02 ff 45 e0 66 8b @...:@...F..E.f.
4d e0 03 f0 8b 45 e4 66 3b 48 04 0f 82 7f fe ff M....E.f;H......
ff ff 75 e8 ff 15 30 20 40 00 85 c0 74 17 ff d7 ..u...0 @...t...
50 68 80 39 40 00 53 ff 75 f0 89 45 ec e8 0e f8 Ph.9@.S.u..E....
ff ff 83 c4 10 ff 45 dc 8b 45 dc 3b 45 cc 0f 82 ......E..E.;E...
30 fa ff ff ff 75 c8 ff 15 30 20 40 00 85 c0 74 0....u...0 @...t
14 ff d7 50 68 80 39 40 00 53 ff 75 f0 e8 de f7 ...Ph.9@.S.u....
ff ff 83 c4 10 ff 75 f0 ff 15 3c 20 40 00 85 c0 ......u...< @...
75 14 ff d7 50 68 fc 3a 40 00 53 ff 75 f0 e8 bd u...Ph.:@.S.u...
f7 ff ff 83 c4 10 ff 75 ec ff 15 38 20 40 00 cc .......u...8 @..
55 8b ec 51 8b 45 08 53 56 33 f6 57 8b f8 89 75 U..Q.E.SV3.W...u
08 89 75 fc 39 75 0c 0f 84 6a 01 00 00 3b c6 0f ..u.9u...j...;..
84 62 01 00 00 0f b7 08 66 3b ce 0f 84 56 01 00 .b......f;...V..
00 83 f9 20 74 0a 83 f9 09 74 05 33 db 43 eb 02 ... t....t.3.C..
33 db 39 75 08 75 2b 66 83 f9 20 74 06 66 83 f9 3.9u.u+f.. t.f..
09 75 1f 89 75 fc 83 c0 02 0f b7 08 83 f9 20 74 .u..u......... t
f5 83 f9 09 74 f0 33 c9 66 39 30 0f 95 c1 03 d9 ....t.3.f90.....
eb 23 66 83 f9 5c 75 06 83 75 fc 01 eb 14 39 75 .#f..\u..u....9u
fc 75 0c 66 83 f9 22 75 06 83 75 08 01 eb 03 89 .u.f.."u..u.....
75 fc 83 c0 02 0f b7 08 66 3b ce 75 a5 2b c7 83 u.......f;.u.+..
c0 02 d1 f8 8d 44 58 02 03 c0 50 6a 40 ff 15 4c .....DX...Pj@..L
20 40 00 8b f0 33 d2 3b f2 0f 84 d0 00 00 00 8d @...3.;........
44 9e 04 33 db 89 06 89 55 08 89 5d fc 83 7d 08 D..3....U..]..}.
00 75 34 0f b7 0f 83 f9 20 74 05 83 f9 09 75 27 .u4..... t....u'
33 d2 33 c9 66 89 08 83 c7 02 0f b7 0f 83 f9 20 3.3.f..........
74 f5 83 f9 09 74 f0 66 39 17 74 71 43 8b c7 89 t....t.f9.tqC...
5d fc 89 3c 9e eb 5c 0f b7 0f 83 f9 5c 75 03 42 ]..<..\.....\u.B
eb 48 83 f9 22 75 41 6a 02 8d 5a 01 d1 eb 59 f7 .H.."uAj..Z...Y.
db 03 f9 8d 04 58 f6 c2 01 74 0a 6a 22 5a 66 89 .....X...t.j"Zf.
10 03 c1 eb 1c 83 7d 08 00 74 12 66 83 3f 22 75 ......}..t.f.?"u
0c 6a 22 5a 66 89 10 03 c1 03 f9 eb 04 83 75 08 .j"Zf.........u.
01 8b 5d fc 33 d2 eb 0b 33 d2 66 89 08 83 c0 02 ..].3...3.f.....
83 c7 02 66 83 3f 00 0f 85 60 ff ff ff 33 c9 43 ...f.?...`...3.C
66 89 08 21 0c 9e 8b 45 0c 89 18 39 4d 08 74 0f f..!...E...9M.t.
68 a0 00 00 00 eb 02 6a 57 ff 15 48 20 40 00 5f h......jW..H @._
8b c6 5e 5b c9 c2 08 00 00 00 00 00 00 00 00 00 ..^[............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
64 43 00 00 78 43 00 00 92 43 00 00 ae 43 00 00 dC..xC...C...C..
ca 43 00 00 e8 43 00 00 06 44 00 00 28 44 00 00 .C...C...D..(D..
48 44 00 00 66 44 00 00 00 00 00 00 ac 44 00 00 HD..fD.......D..
bc 44 00 00 c8 44 00 00 d8 44 00 00 e6 44 00 00 .D...D...D...D..
f4 44 00 00 06 45 00 00 16 45 00 00 26 45 00 00 .D...E...E..&E..
00 00 00 00 42 45 00 00 00 00 00 00 00 00 00 00 ....BE..........
47 00 65 00 6e 00 65 00 72 00 69 00 63 00 20 00 G.e.n.e.r.i.c. .
52 00 65 00 61 00 64 00 00 00 00 00 47 00 65 00 R.e.a.d.....G.e.
6e 00 65 00 72 00 69 00 63 00 20 00 57 00 72 00 n.e.r.i.c. .W.r.
69 00 74 00 65 00 00 00 47 00 65 00 6e 00 65 00 i.t.e...G.e.n.e.
72 00 69 00 63 00 20 00 45 00 78 00 65 00 63 00 r.i.c. .E.x.e.c.
75 00 74 00 65 00 2f 00 54 00 72 00 61 00 76 00 u.t.e./.T.r.a.v.
65 00 72 00 73 00 65 00 00 00 00 00 47 00 65 00 e.r.s.e.....G.e.
6e 00 65 00 72 00 69 00 63 00 20 00 41 00 6c 00 n.e.r.i.c. .A.l.
6c 00 00 00 4d 00 61 00 78 00 69 00 6d 00 75 00 l...M.a.x.i.m.u.
6d 00 20 00 41 00 6c 00 6c 00 6f 00 77 00 65 00 m. .A.l.l.o.w.e.
64 00 00 00 41 00 63 00 63 00 65 00 73 00 73 00 d...A.c.c.e.s.s.
20 00 53 00 41 00 43 00 4c 00 00 00 53 00 79 00 .S.A.C.L...S.y.
6e 00 63 00 68 00 72 00 6f 00 6e 00 69 00 7a 00 n.c.h.r.o.n.i.z.
65 00 00 00 57 00 72 00 69 00 74 00 65 00 20 00 e...W.r.i.t.e. .
4f 00 77 00 6e 00 65 00 72 00 00 00 57 00 72 00 O.w.n.e.r...W.r.
69 00 74 00 65 00 20 00 44 00 41 00 43 00 4c 00 i.t.e. .D.A.C.L.
00 00 00 00 52 00 65 00 61 00 64 00 20 00 43 00 ....R.e.a.d. .C.
6f 00 6e 00 74 00 72 00 6f 00 6c 00 00 00 00 00 o.n.t.r.o.l.....
53 00 74 00 61 00 6e 00 64 00 61 00 72 00 64 00 S.t.a.n.d.a.r.d.
20 00 44 00 65 00 6c 00 65 00 74 00 65 00 00 00 .D.e.l.e.t.e...
50 00 72 00 6f 00 63 00 65 00 73 00 73 00 20 00 P.r.o.c.e.s.s. .
53 00 65 00 74 00 20 00 4c 00 69 00 6d 00 69 00 S.e.t. .L.i.m.i.
74 00 65 00 64 00 20 00 49 00 6e 00 66 00 6f 00 t.e.d. .I.n.f.o.
72 00 6d 00 61 00 74 00 69 00 6f 00 6e 00 00 00 r.m.a.t.i.o.n...
50 00 72 00 6f 00 63 00 65 00 73 00 73 00 20 00 P.r.o.c.e.s.s. .
51 00 75 00 65 00 72 00 79 00 20 00 4c 00 69 00 Q.u.e.r.y. .L.i.
6d 00 69 00 74 00 65 00 64 00 20 00 49 00 6e 00 m.i.t.e.d. .I.n.
66 00 6f 00 72 00 6d 00 61 00 74 00 69 00 6f 00 f.o.r.m.a.t.i.o.
6e 00 2c 00 20 00 54 00 68 00 72 00 65 00 61 00 n.,. .T.h.r.e.a.
64 00 20 00 52 00 65 00 73 00 75 00 6d 00 65 00 d. .R.e.s.u.m.e.
00 00 00 00 00 00 00 00 50 00 72 00 6f 00 63 00 ........P.r.o.c.
65 00 73 00 73 00 20 00 53 00 75 00 73 00 70 00 e.s.s. .S.u.s.p.
65 00 6e 00 64 00 2f 00 52 00 65 00 73 00 75 00 e.n.d./.R.e.s.u.
6d 00 65 00 2c 00 20 00 54 00 68 00 72 00 65 00 m.e.,. .T.h.r.e.
61 00 64 00 20 00 51 00 75 00 65 00 72 00 79 00 a.d. .Q.u.e.r.y.
20 00 4c 00 69 00 6d 00 69 00 74 00 65 00 64 00 .L.i.m.i.t.e.d.
20 00 49 00 6e 00 66 00 6f 00 72 00 6d 00 61 00 .I.n.f.o.r.m.a.
74 00 69 00 6f 00 6e 00 00 00 00 00 00 00 00 00 t.i.o.n.........
50 00 72 00 6f 00 63 00 65 00 73 00 73 00 20 00 P.r.o.c.e.s.s. .
51 00 75 00 65 00 72 00 79 00 20 00 49 00 6e 00 Q.u.e.r.y. .I.n.
66 00 6f 00 72 00 6d 00 61 00 74 00 69 00 6f 00 f.o.r.m.a.t.i.o.
6e 00 2c 00 20 00 54 00 68 00 72 00 65 00 61 00 n.,. .T.h.r.e.a.
64 00 20 00 53 00 65 00 74 00 20 00 4c 00 69 00 d. .S.e.t. .L.i.
6d 00 69 00 74 00 65 00 64 00 20 00 49 00 6e 00 m.i.t.e.d. .I.n.
66 00 6f 00 72 00 6d 00 61 00 74 00 69 00 6f 00 f.o.r.m.a.t.i.o.
6e 00 00 00 00 00 00 00 50 00 72 00 6f 00 63 00 n.......P.r.o.c.
65 00 73 00 73 00 20 00 53 00 65 00 74 00 20 00 e.s.s. .S.e.t. .
49 00 6e 00 66 00 6f 00 72 00 6d 00 61 00 74 00 I.n.f.o.r.m.a.t.
69 00 6f 00 6e 00 2c 00 20 00 54 00 68 00 72 00 i.o.n.,. .T.h.r.
65 00 61 00 64 00 20 00 44 00 69 00 72 00 65 00 e.a.d. .D.i.r.e.
63 00 74 00 20 00 49 00 6d 00 70 00 65 00 72 00 c.t. .I.m.p.e.r.
73 00 6f 00 6e 00 61 00 74 00 69 00 6f 00 6e 00 s.o.n.a.t.i.o.n.
00 00 00 00 00 00 00 00 44 00 69 00 72 00 65 00 ........D.i.r.e.
63 00 74 00 6f 00 72 00 79 00 2f 00 46 00 69 00 c.t.o.r.y./.F.i.
6c 00 65 00 2f 00 50 00 69 00 70 00 65 00 20 00 l.e./.P.i.p.e. .
57 00 72 00 69 00 74 00 65 00 20 00 41 00 74 00 W.r.i.t.e. .A.t.
74 00 72 00 69 00 62 00 75 00 74 00 65 00 73 00 t.r.i.b.u.t.e.s.
2c 00 20 00 50 00 72 00 6f 00 63 00 65 00 73 00 ,. .P.r.o.c.e.s.
73 00 20 00 53 00 65 00 74 00 20 00 51 00 75 00 s. .S.e.t. .Q.u.
6f 00 74 00 61 00 2c 00 20 00 53 00 65 00 72 00 o.t.a.,. .S.e.r.
76 00 69 00 63 00 65 00 20 00 55 00 73 00 65 00 v.i.c.e. .U.s.e.
72 00 20 00 44 00 65 00 66 00 69 00 6e 00 65 00 r. .D.e.f.i.n.e.
64 00 2c 00 20 00 54 00 68 00 72 00 65 00 61 00 d.,. .T.h.r.e.a.
64 00 20 00 49 00 6d 00 70 00 65 00 72 00 73 00 d. .I.m.p.e.r.s.
6f 00 6e 00 61 00 74 00 65 00 2c 00 20 00 54 00 o.n.a.t.e.,. .T.
6f 00 6b 00 65 00 6e 00 20 00 41 00 64 00 6a 00 o.k.e.n. .A.d.j.
75 00 73 00 74 00 20 00 53 00 65 00 73 00 73 00 u.s.t. .S.e.s.s.
69 00 6f 00 6e 00 20 00 49 00 64 00 00 00 00 00 i.o.n. .I.d.....
44 00 69 00 72 00 65 00 63 00 74 00 6f 00 72 00 D.i.r.e.c.t.o.r.
79 00 2f 00 46 00 69 00 6c 00 65 00 2f 00 50 00 y./.F.i.l.e./.P.
69 00 70 00 65 00 20 00 52 00 65 00 61 00 64 00 i.p.e. .R.e.a.d.
20 00 41 00 74 00 74 00 72 00 69 00 62 00 75 00 .A.t.t.r.i.b.u.
74 00 65 00 73 00 2c 00 20 00 50 00 72 00 6f 00 t.e.s.,. .P.r.o.
63 00 65 00 73 00 73 00 20 00 43 00 72 00 65 00 c.e.s.s. .C.r.e.
61 00 74 00 65 00 20 00 50 00 72 00 6f 00 63 00 a.t.e. .P.r.o.c.
65 00 73 00 73 00 2c 00 20 00 53 00 65 00 72 00 e.s.s.,. .S.e.r.
76 00 69 00 63 00 65 00 20 00 49 00 6e 00 74 00 v.i.c.e. .I.n.t.
65 00 72 00 72 00 6f 00 67 00 61 00 74 00 65 00 e.r.r.o.g.a.t.e.
2c 00 20 00 54 00 68 00 72 00 65 00 61 00 64 00 ,. .T.h.r.e.a.d.
20 00 53 00 65 00 74 00 20 00 54 00 68 00 72 00 .S.e.t. .T.h.r.
65 00 61 00 64 00 20 00 54 00 6f 00 6b 00 65 00 e.a.d. .T.o.k.e.
6e 00 2c 00 20 00 54 00 6f 00 6b 00 65 00 6e 00 n.,. .T.o.k.e.n.
20 00 41 00 64 00 6a 00 75 00 73 00 74 00 20 00 .A.d.j.u.s.t. .
44 00 65 00 66 00 61 00 75 00 6c 00 74 00 00 00 D.e.f.a.u.l.t...
44 00 69 00 72 00 65 00 63 00 74 00 6f 00 72 00 D.i.r.e.c.t.o.r.
79 00 20 00 44 00 65 00 6c 00 65 00 74 00 65 00 y. .D.e.l.e.t.e.
20 00 43 00 68 00 69 00 6c 00 64 00 2c 00 20 00 .C.h.i.l.d.,. .
50 00 72 00 6f 00 63 00 65 00 73 00 73 00 20 00 P.r.o.c.e.s.s. .
44 00 75 00 70 00 6c 00 69 00 63 00 61 00 74 00 D.u.p.l.i.c.a.t.
65 00 20 00 48 00 61 00 6e 00 64 00 6c 00 65 00 e. .H.a.n.d.l.e.
2c 00 20 00 53 00 65 00 72 00 76 00 69 00 63 00 ,. .S.e.r.v.i.c.
65 00 20 00 50 00 61 00 75 00 73 00 65 00 2c 00 e. .P.a.u.s.e.,.
20 00 54 00 68 00 72 00 65 00 61 00 64 00 20 00 .T.h.r.e.a.d. .
51 00 75 00 65 00 72 00 79 00 20 00 49 00 6e 00 Q.u.e.r.y. .I.n.
66 00 6f 00 72 00 6d 00 61 00 74 00 69 00 6f 00 f.o.r.m.a.t.i.o.
6e 00 2c 00 20 00 54 00 6f 00 6b 00 65 00 6e 00 n.,. .T.o.k.e.n.
20 00 41 00 64 00 6a 00 75 00 73 00 74 00 20 00 .A.d.j.u.s.t. .
47 00 72 00 6f 00 75 00 70 00 73 00 00 00 00 00 G.r.o.u.p.s.....
44 00 69 00 72 00 65 00 63 00 74 00 6f 00 72 00 D.i.r.e.c.t.o.r.
79 00 20 00 54 00 72 00 61 00 76 00 65 00 72 00 y. .T.r.a.v.e.r.
73 00 65 00 2c 00 20 00 46 00 69 00 6c 00 65 00 s.e.,. .F.i.l.e.
20 00 45 00 78 00 65 00 63 00 75 00 74 00 65 00 .E.x.e.c.u.t.e.
2c 00 20 00 4b 00 65 00 79 00 20 00 43 00 72 00 ,. .K.e.y. .C.r.
65 00 61 00 74 00 65 00 20 00 4c 00 69 00 6e 00 e.a.t.e. .L.i.n.
6b 00 2c 00 20 00 4a 00 6f 00 62 00 20 00 49 00 k.,. .J.o.b. .I.
6d 00 70 00 65 00 72 00 73 00 6f 00 6e 00 61 00 m.p.e.r.s.o.n.a.
74 00 65 00 2c 00 20 00 50 00 72 00 6f 00 63 00 t.e.,. .P.r.o.c.
65 00 73 00 73 00 20 00 56 00 69 00 72 00 74 00 e.s.s. .V.i.r.t.
75 00 61 00 6c 00 20 00 4d 00 65 00 6d 00 6f 00 u.a.l. .M.e.m.o.
72 00 79 00 20 00 57 00 72 00 69 00 74 00 65 00 r.y. .W.r.i.t.e.
2c 00 20 00 53 00 65 00 63 00 74 00 69 00 6f 00 ,. .S.e.c.t.i.o.
6e 00 20 00 4d 00 61 00 70 00 20 00 45 00 78 00 n. .M.a.p. .E.x.
65 00 63 00 75 00 74 00 65 00 20 00 45 00 78 00 e.c.u.t.e. .E.x.
70 00 6c 00 69 00 63 00 69 00 74 00 2c 00 20 00 p.l.i.c.i.t.,. .
53 00 65 00 72 00 76 00 69 00 63 00 65 00 20 00 S.e.r.v.i.c.e. .
53 00 74 00 6f 00 70 00 2c 00 20 00 54 00 68 00 S.t.o.p.,. .T.h.
72 00 65 00 61 00 64 00 20 00 53 00 65 00 74 00 r.e.a.d. .S.e.t.
20 00 49 00 6e 00 66 00 6f 00 72 00 6d 00 61 00 .I.n.f.o.r.m.a.
74 00 69 00 6f 00 6e 00 2c 00 20 00 54 00 6f 00 t.i.o.n.,. .T.o.
6b 00 65 00 6e 00 20 00 41 00 64 00 6a 00 75 00 k.e.n. .A.d.j.u.
73 00 74 00 20 00 50 00 72 00 69 00 76 00 69 00 s.t. .P.r.i.v.i.
6c 00 65 00 67 00 65 00 73 00 00 00 00 00 00 00 l.e.g.e.s.......
44 00 69 00 72 00 65 00 63 00 74 00 6f 00 72 00 D.i.r.e.c.t.o.r.
79 00 2f 00 46 00 69 00 6c 00 65 00 20 00 57 00 y./.F.i.l.e. .W.
72 00 69 00 74 00 65 00 20 00 45 00 78 00 74 00 r.i.t.e. .E.x.t.
65 00 6e 00 64 00 65 00 64 00 20 00 41 00 74 00 e.n.d.e.d. .A.t.
74 00 72 00 69 00 62 00 75 00 74 00 65 00 73 00 t.r.i.b.u.t.e.s.
2c 00 20 00 4b 00 65 00 79 00 20 00 4e 00 6f 00 ,. .K.e.y. .N.o.
74 00 69 00 66 00 79 00 2c 00 20 00 4a 00 6f 00 t.i.f.y.,. .J.o.
62 00 20 00 53 00 65 00 74 00 20 00 53 00 65 00 b. .S.e.t. .S.e.
63 00 75 00 72 00 69 00 74 00 79 00 20 00 41 00 c.u.r.i.t.y. .A.
74 00 74 00 72 00 69 00 62 00 75 00 74 00 65 00 t.t.r.i.b.u.t.e.
73 00 2c 00 20 00 50 00 72 00 6f 00 63 00 65 00 s.,. .P.r.o.c.e.
73 00 73 00 20 00 56 00 69 00 72 00 74 00 75 00 s.s. .V.i.r.t.u.
61 00 6c 00 20 00 4d 00 65 00 6d 00 6f 00 72 00 a.l. .M.e.m.o.r.
79 00 20 00 52 00 65 00 61 00 64 00 2c 00 20 00 y. .R.e.a.d.,. .
53 00 65 00 63 00 74 00 69 00 6f 00 6e 00 20 00 S.e.c.t.i.o.n. .
45 00 78 00 74 00 65 00 6e 00 64 00 20 00 53 00 E.x.t.e.n.d. .S.
69 00 7a 00 65 00 2c 00 20 00 53 00 65 00 72 00 i.z.e.,. .S.e.r.
76 00 69 00 63 00 65 00 20 00 53 00 74 00 61 00 v.i.c.e. .S.t.a.
72 00 74 00 2c 00 20 00 54 00 68 00 72 00 65 00 r.t.,. .T.h.r.e.
61 00 64 00 20 00 53 00 65 00 74 00 20 00 43 00 a.d. .S.e.t. .C.
6f 00 6e 00 74 00 65 00 78 00 74 00 2c 00 20 00 o.n.t.e.x.t.,. .
54 00 6f 00 6b 00 65 00 6e 00 20 00 51 00 75 00 T.o.k.e.n. .Q.u.
65 00 72 00 79 00 20 00 53 00 6f 00 75 00 72 00 e.r.y. .S.o.u.r.
63 00 65 00 00 00 00 00 44 00 69 00 72 00 65 00 c.e.....D.i.r.e.
63 00 74 00 6f 00 72 00 79 00 2f 00 46 00 69 00 c.t.o.r.y./.F.i.
6c 00 65 00 20 00 52 00 65 00 61 00 64 00 20 00 l.e. .R.e.a.d. .
45 00 78 00 74 00 65 00 6e 00 64 00 65 00 64 00 E.x.t.e.n.d.e.d.
20 00 41 00 74 00 74 00 72 00 69 00 62 00 75 00 .A.t.t.r.i.b.u.
74 00 65 00 73 00 2c 00 20 00 4b 00 65 00 79 00 t.e.s.,. .K.e.y.
20 00 45 00 6e 00 75 00 6d 00 65 00 72 00 61 00 .E.n.u.m.e.r.a.
74 00 65 00 20 00 53 00 75 00 62 00 6b 00 65 00 t.e. .S.u.b.k.e.
79 00 73 00 2c 00 20 00 4a 00 6f 00 62 00 20 00 y.s.,. .J.o.b. .
54 00 65 00 72 00 6d 00 69 00 6e 00 61 00 74 00 T.e.r.m.i.n.a.t.
65 00 2c 00 20 00 50 00 72 00 6f 00 63 00 65 00 e.,. .P.r.o.c.e.
73 00 73 00 20 00 56 00 69 00 72 00 74 00 75 00 s.s. .V.i.r.t.u.
61 00 6c 00 20 00 4d 00 65 00 6d 00 6f 00 72 00 a.l. .M.e.m.o.r.
79 00 20 00 4f 00 70 00 65 00 72 00 61 00 74 00 y. .O.p.e.r.a.t.
69 00 6f 00 6e 00 2c 00 20 00 53 00 65 00 63 00 i.o.n.,. .S.e.c.
74 00 69 00 6f 00 6e 00 20 00 4d 00 61 00 70 00 t.i.o.n. .M.a.p.
20 00 45 00 78 00 65 00 63 00 75 00 74 00 65 00 .E.x.e.c.u.t.e.
2c 00 20 00 53 00 65 00 72 00 76 00 69 00 63 00 ,. .S.e.r.v.i.c.
65 00 20 00 45 00 6e 00 75 00 6d 00 65 00 72 00 e. .E.n.u.m.e.r.
61 00 74 00 65 00 20 00 44 00 65 00 70 00 65 00 a.t.e. .D.e.p.e.
6e 00 64 00 65 00 6e 00 63 00 69 00 65 00 73 00 n.d.e.n.c.i.e.s.
2c 00 20 00 54 00 68 00 72 00 65 00 61 00 64 00 ,. .T.h.r.e.a.d.
20 00 47 00 65 00 74 00 20 00 43 00 6f 00 6e 00 .G.e.t. .C.o.n.
74 00 65 00 78 00 74 00 2c 00 20 00 54 00 6f 00 t.e.x.t.,. .T.o.
6b 00 65 00 6e 00 20 00 51 00 75 00 65 00 72 00 k.e.n. .Q.u.e.r.
79 00 00 00 00 00 00 00 44 00 69 00 72 00 65 00 y.......D.i.r.e.
63 00 74 00 6f 00 72 00 79 00 20 00 41 00 64 00 c.t.o.r.y. .A.d.
64 00 20 00 53 00 75 00 62 00 64 00 69 00 72 00 d. .S.u.b.d.i.r.
65 00 63 00 74 00 6f 00 72 00 79 00 2c 00 20 00 e.c.t.o.r.y.,. .
46 00 69 00 6c 00 65 00 20 00 41 00 70 00 70 00 F.i.l.e. .A.p.p.
65 00 6e 00 64 00 20 00 44 00 61 00 74 00 61 00 e.n.d. .D.a.t.a.
2c 00 20 00 50 00 69 00 70 00 65 00 20 00 43 00 ,. .P.i.p.e. .C.
72 00 65 00 61 00 74 00 65 00 20 00 49 00 6e 00 r.e.a.t.e. .I.n.
73 00 74 00 61 00 6e 00 63 00 65 00 2c 00 20 00 s.t.a.n.c.e.,. .
4b 00 65 00 79 00 20 00 43 00 72 00 65 00 61 00 K.e.y. .C.r.e.a.
74 00 65 00 20 00 53 00 75 00 62 00 6b 00 65 00 t.e. .S.u.b.k.e.
79 00 2c 00 20 00 4a 00 6f 00 62 00 20 00 51 00 y.,. .J.o.b. .Q.
75 00 65 00 72 00 79 00 2c 00 20 00 50 00 72 00 u.e.r.y.,. .P.r.
6f 00 63 00 65 00 73 00 73 00 20 00 53 00 65 00 o.c.e.s.s. .S.e.
74 00 20 00 53 00 65 00 73 00 73 00 69 00 6f 00 t. .S.e.s.s.i.o.
6e 00 20 00 49 00 64 00 2c 00 20 00 53 00 65 00 n. .I.d.,. .S.e.
63 00 74 00 69 00 6f 00 6e 00 20 00 4d 00 61 00 c.t.i.o.n. .M.a.
70 00 20 00 52 00 65 00 61 00 64 00 2c 00 20 00 p. .R.e.a.d.,. .
53 00 65 00 72 00 76 00 69 00 63 00 65 00 20 00 S.e.r.v.i.c.e. .
51 00 75 00 65 00 72 00 79 00 20 00 53 00 74 00 Q.u.e.r.y. .S.t.
61 00 74 00 75 00 73 00 2c 00 20 00 54 00 6f 00 a.t.u.s.,. .T.o.
6b 00 65 00 6e 00 20 00 49 00 6d 00 70 00 65 00 k.e.n. .I.m.p.e.
72 00 73 00 6f 00 6e 00 61 00 74 00 65 00 00 00 r.s.o.n.a.t.e...
44 00 69 00 72 00 65 00 63 00 74 00 6f 00 72 00 D.i.r.e.c.t.o.r.
79 00 20 00 41 00 64 00 64 00 20 00 46 00 69 00 y. .A.d.d. .F.i.
6c 00 65 00 2c 00 20 00 46 00 69 00 6c 00 65 00 l.e.,. .F.i.l.e.
2f 00 50 00 69 00 70 00 65 00 20 00 57 00 72 00 /.P.i.p.e. .W.r.
69 00 74 00 65 00 20 00 44 00 61 00 74 00 61 00 i.t.e. .D.a.t.a.
2c 00 20 00 4b 00 65 00 79 00 20 00 53 00 65 00 ,. .K.e.y. .S.e.
74 00 20 00 56 00 61 00 6c 00 75 00 65 00 2c 00 t. .V.a.l.u.e.,.
20 00 45 00 76 00 65 00 6e 00 74 00 2f 00 49 00 .E.v.e.n.t./.I.
4f 00 20 00 43 00 6f 00 6d 00 70 00 6c 00 65 00 O. .C.o.m.p.l.e.
74 00 69 00 6f 00 6e 00 2f 00 4d 00 75 00 74 00 t.i.o.n./.M.u.t.
61 00 6e 00 74 00 2f 00 53 00 65 00 6d 00 61 00 a.n.t./.S.e.m.a.
70 00 68 00 6f 00 72 00 65 00 2f 00 54 00 69 00 p.h.o.r.e./.T.i.
6d 00 65 00 72 00 20 00 4d 00 6f 00 64 00 69 00 m.e.r. .M.o.d.i.
66 00 79 00 20 00 53 00 74 00 61 00 74 00 65 00 f.y. .S.t.a.t.e.
2c 00 20 00 4a 00 6f 00 62 00 20 00 53 00 65 00 ,. .J.o.b. .S.e.
74 00 20 00 41 00 74 00 74 00 72 00 69 00 62 00 t. .A.t.t.r.i.b.
75 00 74 00 65 00 73 00 2c 00 20 00 50 00 72 00 u.t.e.s.,. .P.r.
6f 00 63 00 65 00 73 00 73 00 20 00 43 00 72 00 o.c.e.s.s. .C.r.
65 00 61 00 74 00 65 00 20 00 54 00 68 00 72 00 e.a.t.e. .T.h.r.
65 00 61 00 64 00 2c 00 20 00 53 00 65 00 63 00 e.a.d.,. .S.e.c.
74 00 69 00 6f 00 6e 00 20 00 4d 00 61 00 70 00 t.i.o.n. .M.a.p.
20 00 57 00 72 00 69 00 74 00 65 00 2c 00 20 00 .W.r.i.t.e.,. .
53 00 65 00 72 00 76 00 69 00 63 00 65 00 20 00 S.e.r.v.i.c.e. .
43 00 68 00 61 00 6e 00 67 00 65 00 20 00 43 00 C.h.a.n.g.e. .C.
6f 00 6e 00 66 00 69 00 67 00 75 00 72 00 61 00 o.n.f.i.g.u.r.a.
74 00 69 00 6f 00 6e 00 2c 00 20 00 53 00 65 00 t.i.o.n.,. .S.e.
73 00 73 00 69 00 6f 00 6e 00 20 00 4d 00 6f 00 s.s.i.o.n. .M.o.
64 00 69 00 66 00 79 00 20 00 41 00 63 00 63 00 d.i.f.y. .A.c.c.
65 00 73 00 73 00 2c 00 20 00 54 00 68 00 72 00 e.s.s.,. .T.h.r.
65 00 61 00 64 00 20 00 53 00 75 00 73 00 70 00 e.a.d. .S.u.s.p.
65 00 6e 00 64 00 2f 00 52 00 65 00 73 00 75 00 e.n.d./.R.e.s.u.
6d 00 65 00 2c 00 20 00 54 00 6f 00 6b 00 65 00 m.e.,. .T.o.k.e.
6e 00 20 00 44 00 75 00 70 00 6c 00 69 00 63 00 n. .D.u.p.l.i.c.
61 00 74 00 65 00 00 00 44 00 69 00 72 00 65 00 a.t.e...D.i.r.e.
63 00 74 00 6f 00 72 00 79 00 20 00 4c 00 69 00 c.t.o.r.y. .L.i.
73 00 74 00 20 00 44 00 69 00 72 00 65 00 63 00 s.t. .D.i.r.e.c.
74 00 6f 00 72 00 79 00 2c 00 20 00 46 00 69 00 t.o.r.y.,. .F.i.
6c 00 65 00 2f 00 50 00 69 00 70 00 65 00 20 00 l.e./.P.i.p.e. .
52 00 65 00 61 00 64 00 20 00 44 00 61 00 74 00 R.e.a.d. .D.a.t.
61 00 2c 00 20 00 4b 00 65 00 79 00 20 00 51 00 a.,. .K.e.y. .Q.
75 00 65 00 72 00 79 00 20 00 56 00 61 00 6c 00 u.e.r.y. .V.a.l.
75 00 65 00 2c 00 20 00 45 00 76 00 65 00 6e 00 u.e.,. .E.v.e.n.
74 00 2f 00 4d 00 75 00 74 00 61 00 6e 00 74 00 t./.M.u.t.a.n.t.
2f 00 53 00 65 00 6d 00 61 00 70 00 68 00 6f 00 /.S.e.m.a.p.h.o.
72 00 65 00 2f 00 54 00 69 00 6d 00 65 00 72 00 r.e./.T.i.m.e.r.
20 00 51 00 75 00 65 00 72 00 79 00 20 00 53 00 .Q.u.e.r.y. .S.
74 00 61 00 74 00 65 00 2c 00 20 00 4a 00 6f 00 t.a.t.e.,. .J.o.
62 00 20 00 41 00 73 00 73 00 69 00 67 00 6e 00 b. .A.s.s.i.g.n.
20 00 50 00 72 00 6f 00 63 00 65 00 73 00 73 00 .P.r.o.c.e.s.s.
2c 00 20 00 50 00 72 00 6f 00 63 00 65 00 73 00 ,. .P.r.o.c.e.s.
73 00 20 00 54 00 65 00 72 00 6d 00 69 00 6e 00 s. .T.e.r.m.i.n.
61 00 74 00 65 00 2c 00 20 00 53 00 65 00 63 00 a.t.e.,. .S.e.c.
74 00 69 00 6f 00 6e 00 20 00 51 00 75 00 65 00 t.i.o.n. .Q.u.e.
72 00 79 00 2c 00 20 00 53 00 65 00 72 00 76 00 r.y.,. .S.e.r.v.
69 00 63 00 65 00 20 00 51 00 75 00 65 00 72 00 i.c.e. .Q.u.e.r.
79 00 20 00 43 00 6f 00 6e 00 66 00 69 00 67 00 y. .C.o.n.f.i.g.
75 00 72 00 61 00 74 00 69 00 6f 00 6e 00 2c 00 u.r.a.t.i.o.n.,.
20 00 53 00 65 00 73 00 73 00 69 00 6f 00 6e 00 .S.e.s.s.i.o.n.
20 00 51 00 75 00 65 00 72 00 79 00 20 00 41 00 .Q.u.e.r.y. .A.
63 00 63 00 65 00 73 00 73 00 2c 00 20 00 54 00 c.c.e.s.s.,. .T.
68 00 72 00 65 00 61 00 64 00 20 00 54 00 65 00 h.r.e.a.d. .T.e.
72 00 6d 00 69 00 6e 00 61 00 74 00 65 00 2c 00 r.m.i.n.a.t.e.,.
20 00 54 00 6f 00 6b 00 65 00 6e 00 20 00 41 00 .T.o.k.e.n. .A.
73 00 73 00 69 00 67 00 6e 00 20 00 50 00 72 00 s.s.i.g.n. .P.r.
69 00 6d 00 61 00 72 00 79 00 00 00 41 00 63 00 i.m.a.r.y...A.c.
63 00 65 00 73 00 73 00 20 00 46 00 61 00 69 00 c.e.s.s. .F.a.i.
6c 00 75 00 72 00 65 00 00 00 00 00 41 00 63 00 l.u.r.e.....A.c.
63 00 65 00 73 00 73 00 20 00 53 00 75 00 63 00 c.e.s.s. .S.u.c.
63 00 65 00 73 00 73 00 00 00 00 00 43 00 72 00 c.e.s.s.....C.r.
69 00 74 00 69 00 63 00 61 00 6c 00 00 00 00 00 i.t.i.c.a.l.....
49 00 6e 00 68 00 65 00 72 00 69 00 74 00 65 00 I.n.h.e.r.i.t.e.
64 00 00 00 49 00 6e 00 68 00 65 00 72 00 69 00 d...I.n.h.e.r.i.
74 00 20 00 4f 00 6e 00 6c 00 79 00 00 00 00 00 t. .O.n.l.y.....
4e 00 6f 00 20 00 50 00 72 00 6f 00 70 00 61 00 N.o. .P.r.o.p.a.
67 00 61 00 74 00 65 00 20 00 49 00 6e 00 68 00 g.a.t.e. .I.n.h.
65 00 72 00 69 00 74 00 00 00 00 00 43 00 6f 00 e.r.i.t.....C.o.
6e 00 74 00 61 00 69 00 6e 00 65 00 72 00 20 00 n.t.a.i.n.e.r. .
49 00 6e 00 68 00 65 00 72 00 69 00 74 00 00 00 I.n.h.e.r.i.t...
4f 00 62 00 6a 00 65 00 63 00 74 00 20 00 49 00 O.b.j.e.c.t. .I.
6e 00 68 00 65 00 72 00 69 00 74 00 00 00 00 00 n.h.e.r.i.t.....
41 00 63 00 63 00 65 00 73 00 73 00 20 00 46 00 A.c.c.e.s.s. .F.
69 00 6c 00 74 00 65 00 72 00 00 00 50 00 72 00 i.l.t.e.r...P.r.
6f 00 63 00 65 00 73 00 73 00 20 00 54 00 72 00 o.c.e.s.s. .T.r.
75 00 73 00 74 00 20 00 4c 00 61 00 62 00 65 00 u.s.t. .L.a.b.e.
6c 00 00 00 53 00 63 00 6f 00 70 00 65 00 64 00 l...S.c.o.p.e.d.
20 00 50 00 6f 00 6c 00 69 00 63 00 79 00 20 00 .P.o.l.i.c.y. .
49 00 64 00 65 00 6e 00 74 00 69 00 66 00 69 00 I.d.e.n.t.i.f.i.
63 00 61 00 74 00 69 00 6f 00 6e 00 00 00 00 00 c.a.t.i.o.n.....
52 00 65 00 73 00 6f 00 75 00 72 00 63 00 65 00 R.e.s.o.u.r.c.e.
20 00 41 00 74 00 74 00 72 00 69 00 62 00 75 00 .A.t.t.r.i.b.u.
74 00 65 00 00 00 00 00 4d 00 61 00 6e 00 64 00 t.e.....M.a.n.d.
61 00 74 00 6f 00 72 00 79 00 20 00 4c 00 61 00 a.t.o.r.y. .L.a.
62 00 65 00 6c 00 00 00 4f 00 62 00 6a 00 65 00 b.e.l...O.b.j.e.
63 00 74 00 20 00 41 00 63 00 63 00 65 00 73 00 c.t. .A.c.c.e.s.
73 00 20 00 41 00 6c 00 61 00 72 00 6d 00 20 00 s. .A.l.a.r.m. .
43 00 61 00 6c 00 6c 00 62 00 61 00 63 00 6b 00 C.a.l.l.b.a.c.k.
00 00 00 00 4f 00 62 00 6a 00 65 00 63 00 74 00 ....O.b.j.e.c.t.
20 00 41 00 63 00 63 00 65 00 73 00 73 00 20 00 .A.c.c.e.s.s. .
41 00 75 00 64 00 69 00 74 00 20 00 43 00 61 00 A.u.d.i.t. .C.a.
6c 00 6c 00 62 00 61 00 63 00 6b 00 00 00 00 00 l.l.b.a.c.k.....
41 00 63 00 63 00 65 00 73 00 73 00 20 00 41 00 A.c.c.e.s.s. .A.
6c 00 61 00 72 00 6d 00 20 00 43 00 61 00 6c 00 l.a.r.m. .C.a.l.
6c 00 62 00 61 00 63 00 6b 00 00 00 41 00 63 00 l.b.a.c.k...A.c.
63 00 65 00 73 00 73 00 20 00 41 00 75 00 64 00 c.e.s.s. .A.u.d.
69 00 74 00 20 00 43 00 61 00 6c 00 6c 00 62 00 i.t. .C.a.l.l.b.
61 00 63 00 6b 00 00 00 4f 00 62 00 6a 00 65 00 a.c.k...O.b.j.e.
63 00 74 00 20 00 41 00 63 00 63 00 65 00 73 00 c.t. .A.c.c.e.s.
73 00 20 00 44 00 65 00 6e 00 69 00 65 00 64 00 s. .D.e.n.i.e.d.
20 00 43 00 61 00 6c 00 6c 00 62 00 61 00 63 00 .C.a.l.l.b.a.c.
6b 00 00 00 4f 00 62 00 6a 00 65 00 63 00 74 00 k...O.b.j.e.c.t.
20 00 41 00 63 00 63 00 65 00 73 00 73 00 20 00 .A.c.c.e.s.s. .
41 00 6c 00 6c 00 6f 00 77 00 65 00 64 00 20 00 A.l.l.o.w.e.d. .
43 00 61 00 6c 00 6c 00 62 00 61 00 63 00 6b 00 C.a.l.l.b.a.c.k.
00 00 00 00 41 00 63 00 63 00 65 00 73 00 73 00 ....A.c.c.e.s.s.
20 00 44 00 65 00 6e 00 69 00 65 00 64 00 20 00 .D.e.n.i.e.d. .
43 00 61 00 6c 00 6c 00 62 00 61 00 63 00 6b 00 C.a.l.l.b.a.c.k.
00 00 00 00 41 00 63 00 63 00 65 00 73 00 73 00 ....A.c.c.e.s.s.
20 00 41 00 6c 00 6c 00 6f 00 77 00 65 00 64 00 .A.l.l.o.w.e.d.
20 00 43 00 61 00 6c 00 6c 00 62 00 61 00 63 00 .C.a.l.l.b.a.c.
6b 00 00 00 4f 00 62 00 6a 00 65 00 63 00 74 00 k...O.b.j.e.c.t.
20 00 41 00 63 00 63 00 65 00 73 00 73 00 20 00 .A.c.c.e.s.s. .
41 00 6c 00 61 00 72 00 6d 00 00 00 4f 00 62 00 A.l.a.r.m...O.b.
6a 00 65 00 63 00 74 00 20 00 41 00 63 00 63 00 j.e.c.t. .A.c.c.
65 00 73 00 73 00 20 00 41 00 75 00 64 00 69 00 e.s.s. .A.u.d.i.
74 00 00 00 4f 00 62 00 6a 00 65 00 63 00 74 00 t...O.b.j.e.c.t.
20 00 41 00 63 00 63 00 65 00 73 00 73 00 20 00 .A.c.c.e.s.s. .
44 00 65 00 6e 00 69 00 65 00 64 00 00 00 00 00 D.e.n.i.e.d.....
4f 00 62 00 6a 00 65 00 63 00 74 00 20 00 41 00 O.b.j.e.c.t. .A.
63 00 63 00 65 00 73 00 73 00 20 00 41 00 6c 00 c.c.e.s.s. .A.l.
6c 00 6f 00 77 00 65 00 64 00 00 00 43 00 6f 00 l.o.w.e.d...C.o.
6d 00 70 00 6f 00 75 00 6e 00 64 00 20 00 41 00 m.p.o.u.n.d. .A.
63 00 63 00 65 00 73 00 73 00 20 00 41 00 6c 00 c.c.e.s.s. .A.l.
6c 00 6f 00 77 00 65 00 64 00 00 00 41 00 63 00 l.o.w.e.d...A.c.
63 00 65 00 73 00 73 00 20 00 41 00 6c 00 61 00 c.e.s.s. .A.l.a.
72 00 6d 00 00 00 00 00 41 00 63 00 63 00 65 00 r.m.....A.c.c.e.
73 00 73 00 20 00 41 00 75 00 64 00 69 00 74 00 s.s. .A.u.d.i.t.
00 00 00 00 41 00 63 00 63 00 65 00 73 00 73 00 ....A.c.c.e.s.s.
20 00 44 00 65 00 6e 00 69 00 65 00 64 00 00 00 .D.e.n.i.e.d...
41 00 63 00 63 00 65 00 73 00 73 00 20 00 41 00 A.c.c.e.s.s. .A.
6c 00 6c 00 6f 00 77 00 65 00 64 00 00 00 00 00 l.l.o.w.e.d.....
53 00 65 00 6c 00 66 00 20 00 52 00 65 00 6c 00 S.e.l.f. .R.e.l.
61 00 74 00 69 00 76 00 65 00 00 00 52 00 65 00 a.t.i.v.e...R.e.
73 00 6f 00 75 00 72 00 63 00 65 00 20 00 4d 00 s.o.u.r.c.e. .M.
61 00 6e 00 61 00 67 00 65 00 72 00 20 00 43 00 a.n.a.g.e.r. .C.
6f 00 6e 00 74 00 72 00 6f 00 6c 00 00 00 00 00 o.n.t.r.o.l.....
53 00 41 00 43 00 4c 00 20 00 50 00 72 00 6f 00 S.A.C.L. .P.r.o.
74 00 65 00 63 00 74 00 65 00 64 00 00 00 00 00 t.e.c.t.e.d.....
44 00 41 00 43 00 4c 00 20 00 50 00 72 00 6f 00 D.A.C.L. .P.r.o.
74 00 65 00 63 00 74 00 65 00 64 00 00 00 00 00 t.e.c.t.e.d.....
53 00 41 00 43 00 4c 00 20 00 41 00 75 00 74 00 S.A.C.L. .A.u.t.
6f 00 20 00 49 00 6e 00 68 00 65 00 72 00 69 00 o. .I.n.h.e.r.i.
74 00 65 00 64 00 00 00 44 00 41 00 43 00 4c 00 t.e.d...D.A.C.L.
20 00 41 00 75 00 74 00 6f 00 20 00 49 00 6e 00 .A.u.t.o. .I.n.
68 00 65 00 72 00 69 00 74 00 65 00 64 00 00 00 h.e.r.i.t.e.d...
53 00 41 00 43 00 4c 00 20 00 41 00 75 00 74 00 S.A.C.L. .A.u.t.
6f 00 20 00 49 00 6e 00 68 00 65 00 72 00 69 00 o. .I.n.h.e.r.i.
74 00 61 00 6e 00 63 00 65 00 20 00 52 00 65 00 t.a.n.c.e. .R.e.
71 00 75 00 65 00 73 00 74 00 00 00 44 00 41 00 q.u.e.s.t...D.A.
43 00 4c 00 20 00 41 00 75 00 74 00 6f 00 20 00 C.L. .A.u.t.o. .
49 00 6e 00 68 00 65 00 72 00 69 00 74 00 61 00 I.n.h.e.r.i.t.a.
6e 00 63 00 65 00 20 00 52 00 65 00 71 00 75 00 n.c.e. .R.e.q.u.
65 00 73 00 74 00 00 00 53 00 41 00 43 00 4c 00 e.s.t...S.A.C.L.
20 00 44 00 65 00 66 00 61 00 75 00 6c 00 74 00 .D.e.f.a.u.l.t.
65 00 64 00 00 00 00 00 53 00 41 00 43 00 4c 00 e.d.....S.A.C.L.
20 00 50 00 72 00 65 00 73 00 65 00 6e 00 74 00 .P.r.e.s.e.n.t.
00 00 00 00 44 00 41 00 43 00 4c 00 20 00 44 00 ....D.A.C.L. .D.
65 00 66 00 61 00 75 00 6c 00 74 00 65 00 64 00 e.f.a.u.l.t.e.d.
00 00 00 00 44 00 41 00 43 00 4c 00 20 00 50 00 ....D.A.C.L. .P.
72 00 65 00 73 00 65 00 6e 00 74 00 00 00 00 00 r.e.s.e.n.t.....
47 00 72 00 6f 00 75 00 70 00 20 00 44 00 65 00 G.r.o.u.p. .D.e.
66 00 61 00 75 00 6c 00 74 00 65 00 64 00 00 00 f.a.u.l.t.e.d...
4f 00 77 00 6e 00 65 00 72 00 20 00 44 00 65 00 O.w.n.e.r. .D.e.
66 00 61 00 75 00 6c 00 74 00 65 00 64 00 00 00 f.a.u.l.t.e.d...
6c 00 6f 00 67 00 6f 00 6e 00 20 00 73 00 65 00 l.o.g.o.n. .s.e.
73 00 73 00 69 00 6f 00 6e 00 00 00 6c 00 61 00 s.s.i.o.n...l.a.
62 00 65 00 6c 00 00 00 63 00 6f 00 6d 00 70 00 b.e.l...c.o.m.p.
75 00 74 00 65 00 72 00 00 00 00 00 75 00 6e 00 u.t.e.r.....u.n.
6b 00 6e 00 6f 00 77 00 6e 00 00 00 69 00 6e 00 k.n.o.w.n...i.n.
76 00 61 00 6c 00 69 00 64 00 00 00 64 00 65 00 v.a.l.i.d...d.e.
6c 00 65 00 74 00 65 00 64 00 20 00 61 00 63 00 l.e.t.e.d. .a.c.
63 00 6f 00 75 00 6e 00 74 00 00 00 77 00 65 00 c.o.u.n.t...w.e.
6c 00 6c 00 2d 00 6b 00 6e 00 6f 00 77 00 6e 00 l.l.-.k.n.o.w.n.
20 00 67 00 72 00 6f 00 75 00 70 00 00 00 00 00 .g.r.o.u.p.....
61 00 6c 00 69 00 61 00 73 00 00 00 64 00 6f 00 a.l.i.a.s...d.o.
6d 00 61 00 69 00 6e 00 00 00 00 00 67 00 72 00 m.a.i.n.....g.r.
6f 00 75 00 70 00 00 00 75 00 73 00 65 00 72 00 o.u.p...u.s.e.r.
00 00 00 00 00 00 00 00 00 00 00 00 08 38 40 00 .............8@.
fc 37 40 00 ec 37 40 00 e0 37 40 00 bc 37 40 00 .7@..7@..7@..7@.
9c 37 40 00 8c 37 40 00 7c 37 40 00 68 37 40 00 .7@..7@.|7@.h7@.
5c 37 40 00 40 37 40 00 20 37 40 00 00 37 40 00 \7@.@7@. 7@..7@.
e4 36 40 00 c4 36 40 00 a8 36 40 00 88 36 40 00 .6@..6@..6@..6@.
00 00 00 00 00 00 00 00 4c 36 40 00 10 36 40 00 ........L6@..6@.
e8 35 40 00 c0 35 40 00 a0 35 40 00 80 35 40 00 .5@..5@..5@..5@.
4c 35 40 00 30 35 40 00 10 35 40 00 f4 34 40 00 L5@.05@..5@..4@.
d8 34 40 00 bc 34 40 00 8c 34 40 00 60 34 40 00 .4@..4@..4@.`4@.
34 34 40 00 0c 34 40 00 e4 33 40 00 b4 33 40 00 44@..4@..3@..3@.
84 33 40 00 44 33 40 00 08 33 40 00 dc 32 40 00 .3@.D3@..3@..2@.
b0 32 40 00 74 32 40 00 38 32 40 00 18 32 40 00 .2@.t2@.82@..2@.
f0 31 40 00 b4 31 40 00 8c 31 40 00 70 31 40 00 .1@..1@..1@.p1@.
50 31 40 00 2c 31 40 00 00 31 40 00 e4 30 40 00 P1@.,1@..1@..0@.
d0 30 40 00 bc 30 40 00 9c 30 40 00 7c 30 40 00 .0@..0@..0@.|0@.
88 2e 40 00 70 2c 40 00 08 2b 40 00 78 29 40 00 ..@.p,@..+@.x)@.
00 28 40 00 80 26 40 00 a0 25 40 00 a0 24 40 00 .(@..&@..%@..$@.
a8 23 40 00 38 23 40 00 c0 22 40 00 48 22 40 00 .#@.8#@.."@.H"@.
e0 21 40 00 a0 21 40 00 00 00 00 00 00 00 00 00 .!@..!@.........
80 21 40 00 64 21 40 00 4c 21 40 00 34 21 40 00 .!@.d!@.L!@.4!@.
1c 21 40 00 00 00 00 00 00 00 00 00 00 00 00 00 .!@.............
04 21 40 00 e4 20 40 00 00 00 00 00 00 00 00 00 .!@.. @.........
cc 20 40 00 98 20 40 00 7c 20 40 00 60 20 40 00 . @.. @.| @.` @.
4c 00 6f 00 63 00 61 00 6c 00 46 00 72 00 65 00 L.o.c.a.l.F.r.e.
65 00 00 00 25 00 6c 00 73 00 27 00 25 00 6c 00 e...%.l.s.'.%.l.
73 00 27 00 20 00 3d 00 20 00 25 00 6c 00 73 00 s.'. .=. .%.l.s.
20 00 27 00 25 00 6c 00 73 00 5c 00 25 00 6c 00 .'.%.l.s.\.%.l.
73 00 27 00 0a 00 00 00 25 00 6c 00 73 00 27 00 s.'.....%.l.s.'.
25 00 6c 00 73 00 27 00 20 00 3d 00 20 00 25 00 %.l.s.'. .=. .%.
6c 00 73 00 20 00 27 00 25 00 6c 00 73 00 27 00 l.s. .'.%.l.s.'.
0a 00 00 00 25 00 6c 00 73 00 27 00 25 00 6c 00 ....%.l.s.'.%.l.
73 00 27 00 0a 00 00 00 25 00 6c 00 73 00 28 00 s.'.....%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 73 00 65 00 63 00 75 00 72 00 69 00 74 00 .s.e.c.u.r.i.t.
79 00 20 00 69 00 64 00 65 00 6e 00 74 00 69 00 y. .i.d.e.n.t.i.
66 00 69 00 65 00 72 00 20 00 27 00 25 00 6c 00 f.i.e.r. .'.%.l.
73 00 27 00 0a 00 00 00 4c 00 6f 00 6f 00 6b 00 s.'.....L.o.o.k.
75 00 70 00 41 00 63 00 63 00 6f 00 75 00 6e 00 u.p.A.c.c.o.u.n.
74 00 53 00 69 00 64 00 00 00 00 00 25 00 6c 00 t.S.i.d.....%.l.
73 00 28 00 29 00 20 00 72 00 65 00 74 00 75 00 s.(.). .r.e.t.u.
72 00 6e 00 65 00 64 00 20 00 65 00 72 00 72 00 r.n.e.d. .e.r.r.
6f 00 72 00 20 00 25 00 6c 00 75 00 0a 00 00 00 o.r. .%.l.u.....
43 00 6f 00 6e 00 76 00 65 00 72 00 74 00 53 00 C.o.n.v.e.r.t.S.
69 00 64 00 54 00 6f 00 53 00 74 00 72 00 69 00 i.d.T.o.S.t.r.i.
6e 00 67 00 53 00 69 00 64 00 00 00 43 00 6c 00 n.g.S.i.d...C.l.
6f 00 73 00 65 00 48 00 61 00 6e 00 64 00 6c 00 o.s.e.H.a.n.d.l.
65 00 00 00 09 00 09 00 09 00 09 00 4e 00 6f 00 e...........N.o.
20 00 45 00 78 00 65 00 63 00 75 00 74 00 65 00 .E.x.e.c.u.t.e.
20 00 55 00 70 00 0a 00 00 00 00 00 09 00 09 00 .U.p...........
09 00 09 00 4e 00 6f 00 20 00 52 00 65 00 61 00 ....N.o. .R.e.a.
64 00 20 00 55 00 70 00 0a 00 00 00 09 00 09 00 d. .U.p.........
09 00 09 00 4e 00 6f 00 20 00 57 00 72 00 69 00 ....N.o. .W.r.i.
74 00 65 00 20 00 55 00 70 00 0a 00 00 00 00 00 t.e. .U.p.......
55 00 6e 00 6b 00 6e 00 6f 00 77 00 6e 00 20 00 U.n.k.n.o.w.n. .
41 00 43 00 45 00 20 00 74 00 79 00 70 00 65 00 A.C.E. .t.y.p.e.
20 00 25 00 75 00 20 00 69 00 6e 00 20 00 53 00 .%.u. .i.n. .S.
41 00 43 00 4c 00 0a 00 00 00 00 00 09 00 53 00 A.C.L.........S.
41 00 43 00 4c 00 3a 00 09 00 09 00 25 00 68 00 A.C.L.:.....%.h.
75 00 20 00 62 00 79 00 74 00 65 00 73 00 2c 00 u. .b.y.t.e.s.,.
20 00 25 00 68 00 75 00 20 00 41 00 43 00 45 00 .%.h.u. .A.C.E.
28 00 73 00 29 00 0a 00 00 00 00 00 09 00 53 00 (.s.).........S.
41 00 43 00 4c 00 3a 00 09 00 09 00 45 00 4d 00 A.C.L.:.....E.M.
50 00 54 00 59 00 0a 00 00 00 00 00 09 00 53 00 P.T.Y.........S.
41 00 43 00 4c 00 3a 00 09 00 09 00 4e 00 55 00 A.C.L.:.....N.U.
4c 00 4c 00 0a 00 00 00 09 00 53 00 41 00 43 00 L.L.......S.A.C.
4c 00 3a 00 09 00 09 00 4e 00 4f 00 4e 00 45 00 L.:.....N.O.N.E.
0a 00 00 00 47 00 65 00 74 00 53 00 65 00 63 00 ....G.e.t.S.e.c.
75 00 72 00 69 00 74 00 79 00 44 00 65 00 73 00 u.r.i.t.y.D.e.s.
63 00 72 00 69 00 70 00 74 00 6f 00 72 00 53 00 c.r.i.p.t.o.r.S.
61 00 63 00 6c 00 00 00 09 00 09 00 54 00 72 00 a.c.l.......T.r.
75 00 73 00 74 00 65 00 65 00 3a 00 09 00 00 00 u.s.t.e.e.:.....
09 00 09 00 41 00 63 00 63 00 65 00 73 00 73 00 ....A.c.c.e.s.s.
20 00 4d 00 61 00 73 00 6b 00 3a 00 09 00 30 00 .M.a.s.k.:...0.
78 00 25 00 30 00 38 00 6c 00 58 00 0a 00 00 00 x.%.0.8.l.X.....
09 00 09 00 09 00 09 00 25 00 6c 00 73 00 0a 00 ........%.l.s...
00 00 00 00 00 00 00 00 09 00 5b 00 25 00 68 00 ..........[.%.h.
75 00 5d 00 09 00 41 00 43 00 45 00 3a 00 09 00 u.]...A.C.E.:...
25 00 68 00 75 00 20 00 62 00 79 00 74 00 65 00 %.h.u. .b.y.t.e.
73 00 0a 00 09 00 09 00 54 00 79 00 70 00 65 00 s.......T.y.p.e.
3a 00 09 00 09 00 30 00 78 00 25 00 30 00 32 00 :.....0.x.%.0.2.
58 00 20 00 3d 00 20 00 25 00 6c 00 73 00 0a 00 X. .=. .%.l.s...
09 00 09 00 46 00 6c 00 61 00 67 00 73 00 3a 00 ....F.l.a.g.s.:.
09 00 09 00 30 00 78 00 25 00 30 00 32 00 58 00 ....0.x.%.0.2.X.
0a 00 00 00 55 00 6e 00 6b 00 6e 00 6f 00 77 00 ....U.n.k.n.o.w.
6e 00 20 00 41 00 43 00 45 00 20 00 74 00 79 00 n. .A.C.E. .t.y.
70 00 65 00 20 00 25 00 75 00 20 00 69 00 6e 00 p.e. .%.u. .i.n.
20 00 44 00 41 00 43 00 4c 00 0a 00 00 00 00 00 .D.A.C.L.......
09 00 44 00 41 00 43 00 4c 00 3a 00 09 00 09 00 ..D.A.C.L.:.....
25 00 68 00 75 00 20 00 62 00 79 00 74 00 65 00 %.h.u. .b.y.t.e.
73 00 2c 00 20 00 25 00 68 00 75 00 20 00 41 00 s.,. .%.h.u. .A.
43 00 45 00 28 00 73 00 29 00 0a 00 00 00 00 00 C.E.(.s.).......
09 00 44 00 41 00 43 00 4c 00 3a 00 09 00 09 00 ..D.A.C.L.:.....
45 00 4d 00 50 00 54 00 59 00 0a 00 00 00 00 00 E.M.P.T.Y.......
09 00 44 00 41 00 43 00 4c 00 3a 00 09 00 09 00 ..D.A.C.L.:.....
4e 00 55 00 4c 00 4c 00 0a 00 00 00 09 00 44 00 N.U.L.L.......D.
41 00 43 00 4c 00 3a 00 09 00 09 00 4e 00 4f 00 A.C.L.:.....N.O.
4e 00 45 00 0a 00 00 00 47 00 65 00 74 00 53 00 N.E.....G.e.t.S.
65 00 63 00 75 00 72 00 69 00 74 00 79 00 44 00 e.c.u.r.i.t.y.D.
65 00 73 00 63 00 72 00 69 00 70 00 74 00 6f 00 e.s.c.r.i.p.t.o.
72 00 44 00 61 00 63 00 6c 00 00 00 09 00 47 00 r.D.a.c.l.....G.
72 00 6f 00 75 00 70 00 3a 00 09 00 09 00 00 00 r.o.u.p.:.......
47 00 65 00 74 00 53 00 65 00 63 00 75 00 72 00 G.e.t.S.e.c.u.r.
69 00 74 00 79 00 44 00 65 00 73 00 63 00 72 00 i.t.y.D.e.s.c.r.
69 00 70 00 74 00 6f 00 72 00 47 00 72 00 6f 00 i.p.t.o.r.G.r.o.
75 00 70 00 00 00 00 00 09 00 4f 00 77 00 6e 00 u.p.......O.w.n.
65 00 72 00 3a 00 09 00 09 00 00 00 47 00 65 00 e.r.:.......G.e.
74 00 53 00 65 00 63 00 75 00 72 00 69 00 74 00 t.S.e.c.u.r.i.t.
79 00 44 00 65 00 73 00 63 00 72 00 69 00 70 00 y.D.e.s.c.r.i.p.
74 00 6f 00 72 00 4f 00 77 00 6e 00 65 00 72 00 t.o.r.O.w.n.e.r.
00 00 00 00 09 00 52 00 4d 00 20 00 43 00 6f 00 ......R.M. .C.o.
6e 00 74 00 72 00 6f 00 6c 00 3a 00 09 00 30 00 n.t.r.o.l.:...0.
78 00 25 00 30 00 32 00 58 00 0a 00 00 00 00 00 x.%.0.2.X.......
47 00 65 00 74 00 53 00 65 00 63 00 75 00 72 00 G.e.t.S.e.c.u.r.
69 00 74 00 79 00 44 00 65 00 73 00 63 00 72 00 i.t.y.D.e.s.c.r.
69 00 70 00 74 00 6f 00 72 00 52 00 4d 00 43 00 i.p.t.o.r.R.M.C.
6f 00 6e 00 74 00 72 00 6f 00 6c 00 00 00 00 00 o.n.t.r.o.l.....
09 00 09 00 25 00 6c 00 73 00 0a 00 00 00 00 00 ....%.l.s.......
09 00 52 00 65 00 76 00 69 00 73 00 69 00 6f 00 ..R.e.v.i.s.i.o.
6e 00 3a 00 09 00 25 00 6c 00 75 00 0a 00 09 00 n.:...%.l.u.....
43 00 6f 00 6e 00 74 00 72 00 6f 00 6c 00 3a 00 C.o.n.t.r.o.l.:.
09 00 30 00 78 00 25 00 30 00 34 00 68 00 58 00 ..0.x.%.0.4.h.X.
0a 00 00 00 47 00 65 00 74 00 53 00 65 00 63 00 ....G.e.t.S.e.c.
75 00 72 00 69 00 74 00 79 00 44 00 65 00 73 00 u.r.i.t.y.D.e.s.
63 00 72 00 69 00 70 00 74 00 6f 00 72 00 43 00 c.r.i.p.t.o.r.C.
6f 00 6e 00 74 00 72 00 6f 00 6c 00 00 00 00 00 o.n.t.r.o.l.....
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 61 00 t.u.r.n.e.d. .a.
20 00 73 00 65 00 63 00 75 00 72 00 69 00 74 00 .s.e.c.u.r.i.t.
79 00 20 00 64 00 65 00 73 00 63 00 72 00 69 00 y. .d.e.s.c.r.i.
70 00 74 00 6f 00 72 00 20 00 6f 00 66 00 20 00 p.t.o.r. .o.f. .
25 00 6c 00 75 00 20 00 62 00 79 00 74 00 65 00 %.l.u. .b.y.t.e.
73 00 2c 00 20 00 62 00 75 00 74 00 20 00 25 00 s.,. .b.u.t. .%.
6c 00 73 00 28 00 29 00 20 00 72 00 65 00 74 00 l.s.(.). .r.e.t.
75 00 72 00 6e 00 65 00 64 00 20 00 25 00 6c 00 u.r.n.e.d. .%.l.
75 00 20 00 62 00 79 00 74 00 65 00 73 00 0a 00 u. .b.y.t.e.s...
00 00 00 00 47 00 65 00 74 00 53 00 65 00 63 00 ....G.e.t.S.e.c.
75 00 72 00 69 00 74 00 79 00 44 00 65 00 73 00 u.r.i.t.y.D.e.s.
63 00 72 00 69 00 70 00 74 00 6f 00 72 00 4c 00 c.r.i.p.t.o.r.L.
65 00 6e 00 67 00 74 00 68 00 00 00 0a 00 25 00 e.n.g.t.h.....%.
6c 00 73 00 0a 00 00 00 25 00 6c 00 73 00 28 00 l.s.....%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 61 00 72 00 67 00 75 00 6d 00 65 00 6e 00 .a.r.g.u.m.e.n.
74 00 20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 t. .'.%.l.s.'...
00 00 00 00 00 00 00 00 43 00 6f 00 6e 00 76 00 ........C.o.n.v.
65 00 72 00 74 00 53 00 74 00 72 00 69 00 6e 00 e.r.t.S.t.r.i.n.
67 00 53 00 65 00 63 00 75 00 72 00 69 00 74 00 g.S.e.c.u.r.i.t.
79 00 44 00 65 00 73 00 63 00 72 00 69 00 70 00 y.D.e.s.c.r.i.p.
74 00 6f 00 72 00 54 00 6f 00 53 00 65 00 63 00 t.o.r.T.o.S.e.c.
75 00 72 00 69 00 74 00 79 00 44 00 65 00 73 00 u.r.i.t.y.D.e.s.
63 00 72 00 69 00 70 00 74 00 6f 00 72 00 00 00 c.r.i.p.t.o.r...
4e 00 6f 00 20 00 61 00 72 00 67 00 75 00 6d 00 N.o. .a.r.g.u.m.
65 00 6e 00 74 00 73 00 3a 00 20 00 61 00 74 00 e.n.t.s.:. .a.t.
20 00 6c 00 65 00 61 00 73 00 74 00 20 00 6f 00 .l.e.a.s.t. .o.
6e 00 65 00 20 00 53 00 44 00 44 00 4c 00 20 00 n.e. .S.D.D.L. .
73 00 74 00 72 00 69 00 6e 00 67 00 20 00 6d 00 s.t.r.i.n.g. .m.
75 00 73 00 74 00 20 00 62 00 65 00 20 00 67 00 u.s.t. .b.e. .g.
69 00 76 00 65 00 6e 00 21 00 0a 00 00 00 00 00 i.v.e.n.!.......
43 00 6f 00 6d 00 6d 00 61 00 6e 00 64 00 4c 00 C.o.m.m.a.n.d.L.
69 00 6e 00 65 00 54 00 6f 00 41 00 72 00 67 00 i.n.e.T.o.A.r.g.
76 00 00 00 00 00 00 00 b9 79 37 9e 00 00 00 00 v........y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 48 42 40 00 ............HB@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 08 43 00 00 00 00 00 00 .........C......
00 00 00 00 9e 44 00 00 00 20 00 00 34 43 00 00 .....D... ..4C..
00 00 00 00 00 00 00 00 34 45 00 00 2c 20 00 00 ........4E.., ..
5c 43 00 00 00 00 00 00 00 00 00 00 50 45 00 00 \C..........PE..
54 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 T ..............
00 00 00 00 00 00 00 00 64 43 00 00 78 43 00 00 ........dC..xC..
92 43 00 00 ae 43 00 00 ca 43 00 00 e8 43 00 00 .C...C...C...C..
06 44 00 00 28 44 00 00 48 44 00 00 66 44 00 00 .D..(D..HD..fD..
00 00 00 00 ac 44 00 00 bc 44 00 00 c8 44 00 00 .....D...D...D..
d8 44 00 00 e6 44 00 00 f4 44 00 00 06 45 00 00 .D...D...D...E..
16 45 00 00 26 45 00 00 00 00 00 00 42 45 00 00 .E..&E......BE..
00 00 00 00 91 01 4c 6f 6f 6b 75 70 41 63 63 6f ......LookupAcco
75 6e 74 53 69 64 57 00 6c 00 43 6f 6e 76 65 72 untSidW.l.Conver
74 53 69 64 54 6f 53 74 72 69 6e 67 53 69 64 57 tSidToStringSidW
00 00 4d 01 47 65 74 53 65 63 75 72 69 74 79 44 ..M.GetSecurityD
65 73 63 72 69 70 74 6f 72 53 61 63 6c 00 48 01 escriptorSacl.H.
47 65 74 53 65 63 75 72 69 74 79 44 65 73 63 72 GetSecurityDescr
69 70 74 6f 72 44 61 63 6c 00 49 01 47 65 74 53 iptorDacl.I.GetS
65 63 75 72 69 74 79 44 65 73 63 72 69 70 74 6f ecurityDescripto
72 47 72 6f 75 70 00 00 4b 01 47 65 74 53 65 63 rGroup..K.GetSec
75 72 69 74 79 44 65 73 63 72 69 70 74 6f 72 4f urityDescriptorO
77 6e 65 72 00 00 4c 01 47 65 74 53 65 63 75 72 wner..L.GetSecur
69 74 79 44 65 73 63 72 69 70 74 6f 72 52 4d 43 ityDescriptorRMC
6f 6e 74 72 6f 6c 00 00 47 01 47 65 74 53 65 63 ontrol..G.GetSec
75 72 69 74 79 44 65 73 63 72 69 70 74 6f 72 43 urityDescriptorC
6f 6e 74 72 6f 6c 00 00 4a 01 47 65 74 53 65 63 ontrol..J.GetSec
75 72 69 74 79 44 65 73 63 72 69 70 74 6f 72 4c urityDescriptorL
65 6e 67 74 68 00 72 00 43 6f 6e 76 65 72 74 53 ength.r.ConvertS
74 72 69 6e 67 53 65 63 75 72 69 74 79 44 65 73 tringSecurityDes
63 72 69 70 74 6f 72 54 6f 53 65 63 75 72 69 74 criptorToSecurit
79 44 65 73 63 72 69 70 74 6f 72 57 00 00 41 44 yDescriptorW..AD
56 41 50 49 33 32 2e 64 6c 6c 00 00 24 05 57 72 VAPI32.dll..$.Wr
69 74 65 43 6f 6e 73 6f 6c 65 57 00 48 03 4c 6f iteConsoleW.H.Lo
63 61 6c 46 72 65 65 00 02 02 47 65 74 4c 61 73 calFree...GetLas
74 45 72 72 6f 72 00 00 19 01 45 78 69 74 50 72 tError....ExitPr
6f 63 65 73 73 00 52 00 43 6c 6f 73 65 48 61 6e ocess.R.CloseHan
64 6c 65 00 87 01 47 65 74 43 6f 6d 6d 61 6e 64 dle...GetCommand
4c 69 6e 65 57 00 64 02 47 65 74 53 74 64 48 61 LineW.d.GetStdHa
6e 64 6c 65 00 00 73 04 53 65 74 4c 61 73 74 45 ndle..s.SetLastE
72 72 6f 72 00 00 44 03 4c 6f 63 61 6c 41 6c 6c rror..D.LocalAll
6f 63 00 00 4b 45 52 4e 45 4c 33 32 2e 64 6c 6c oc..KERNEL32.dll
00 00 35 03 77 76 73 70 72 69 6e 74 66 57 00 00 ..5.wvsprintfW..
55 53 45 52 33 32 2e 64 6c 6c 00 00 00 00 00 00 USER32.dll......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file SDDL.TXT
created in
step 3. to recreate the console application
Security Descriptor Definition Language Decoder:
CERTUTIL.EXE /DecodeHex /V SDDL.TXT SDDL.COM
Input Length = 54400 Output Length = 12800 CertUtil: -decodehex command completed successfully.
SECURITY.COM { ‹directory name› | ‹file name› } …Note: when run under a user account which has the privileges
SeBackupPrivilege
and
SeSecurityPrivilege
assigned, the
Security Descriptor Inspector
enables them to access all directories and files.
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and SECURITY.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file SECURITY.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define _CRT_SECURE_NO_WARNINGS
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#include <sddl.h>
#include <lmcons.h>
#include <aclapi.h>
#define memcpy __movsb
#define wmemcpy __movsw
#define SE_SECURITY_PRIVILEGE 8UL // "SeSecurityPrivilege"
#define SE_BACKUP_PRIVILEGE 17UL // "SeBackupPrivilege"
const TOKEN_PRIVILEGES tpBackup = {1, {SE_BACKUP_PRIVILEGE, 0, SE_PRIVILEGE_ENABLED}};
const TOKEN_PRIVILEGES tpSecurity = {1, {SE_SECURITY_PRIVILEGE, 0, SE_PRIVILEGE_ENABLED}};
typedef unsigned long long QWORD, *LPQWORD;
#ifndef LABEL_SECURITY_INFORMATION
#define LABEL_SECURITY_INFORMATION 0x00000010UL
#endif
#ifndef ATTRIBUTE_SECURITY_INFORMATION
#define ATTRIBUTE_SECURITY_INFORMATION 0x00000020UL
#endif
#ifndef SCOPE_SECURITY_INFORMATION
#define SCOPE_SECURITY_INFORMATION 0x00000040UL
#endif
#ifndef PROCESS_TRUST_LABEL_SECURITY_INFORMATION
#define PROCESS_TRUST_LABEL_SECURITY_INFORMATION 0x00000080UL
#endif
#ifndef BACKUP_SECURITY_INFORMATION
#define BACKUP_SECURITY_INFORMATION 0x00010000UL
#endif
#ifndef SYSTEM_MANDATORY_LABEL_ACE_TYPE
#define SYSTEM_MANDATORY_LABEL_ACE_TYPE 0x11
typedef struct _SYSTEM_MANDATORY_LABEL_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_MANDATORY_LABEL_ACE;
#endif
#ifndef SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE
#define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE 0x12
typedef struct _SYSTEM_RESOURCE_ATTRIBUTE_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_RESOURCE_ATTRIBUTE_ACE;
#endif
#ifndef SYSTEM_SCOPED_POLICY_ID_ACE_TYPE
#define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE 0x13
typedef struct _SYSTEM_SCOPED_POLICY_ID_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_SCOPED_POLICY_ID_ACE;
#endif
#ifndef SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE
#define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE 0x14
typedef struct _SYSTEM_PROCESS_TRUST_LABEL_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_PROCESS_TRUST_LABEL_ACE;
#endif
#ifndef SYSTEM_ACCESS_FILTER_ACE_TYPE
#define SYSTEM_ACCESS_FILTER_ACE_TYPE 0x15
typedef struct _SYSTEM_ACCESS_FILTER_ACE
{
ACE_HEADER Header;
ACCESS_MASK Mask;
DWORD SidStart;
} SYSTEM_ACCESS_FILTER_ACE;
#endif
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(safebuffers)
DWORD WINAPI Security(HANDLE hConsole, QWORD qwPrivileges, WCHAR szPathName[])
{
SECURITY_DESCRIPTOR *lpSD;
SID *lpOwner, *lpGroup, *lpTrustee;
ACL *lpDACL, *lpSACL;
ACE_HEADER *lpACE;
SID_NAME_USE snu;
WORD wACE;
LPWSTR lpStringSID;
WCHAR szAccount[UNLEN + 1];
WCHAR szDomain[GNLEN + 1];
DWORD dwAccount;
DWORD dwDomain;
DWORD dwError = GetNamedSecurityInfo(szPathName,
SE_FILE_OBJECT,
qwPrivileges & (1 << SE_SECURITY_PRIVILEGE) ? OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | SACL_SECURITY_INFORMATION | LABEL_SECURITY_INFORMATION : OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION | LABEL_SECURITY_INFORMATION,
&lpOwner,
&lpGroup,
&lpDACL,
&lpSACL,
&lpSD);
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"GetNamedSecurityInfo() returned error %lu for \'%ls\'\n",
dwError, szPathName);
else
if (!IsValidSecurityDescriptor(lpSD))
PrintConsole(hConsole,
L"IsValidSecurityDescriptor() failed for security descriptor of \'%ls\'\n",
szPathName);
else
{
if (lpOwner == NULL)
PrintConsole(hConsole,
L"No owner in security descriptor of \'%ls\'\n",
szPathName);
else
if (!IsValidSid(lpOwner))
PrintConsole(hConsole,
L"IsValidSid() failed for owner of \'%ls\'\n",
szPathName);
else
{
dwAccount = sizeof(szAccount) / sizeof(*szAccount);
dwDomain = sizeof(szDomain) / sizeof(*szDomain);
if (!LookupAccountSid((LPCWSTR) NULL,
lpOwner,
szAccount, &dwAccount,
szDomain, &dwDomain,
&snu))
{
dwError = GetLastError();
if (dwError != ERROR_NONE_MAPPED)
PrintConsole(hConsole,
L"LookupAccountSid() returned error %lu for owner of \'%ls\'\n",
dwError, szPathName);
else
if (!ConvertSidToStringSid(lpOwner, &lpStringSID))
PrintConsole(hConsole,
L"ConvertSidToStringSid() returned error %lu for unknown owner of \'%ls\'\n",
dwError = GetLastError(), szPathName);
else
{
PrintConsole(hConsole,
L"Unknown owner \'%ls\' in security descriptor of \'%ls\'\n",
lpStringSID, szPathName);
if (LocalFree(lpStringSID) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
}
}
if (lpGroup == NULL)
PrintConsole(hConsole,
L"No group in security descriptor of \'%ls\'\n",
szPathName);
else
if (!IsValidSid(lpGroup))
PrintConsole(hConsole,
L"IsValidSid() failed for group of \'%ls\'\n",
szPathName);
else
{
dwAccount = sizeof(szAccount) / sizeof(*szAccount);
dwDomain = sizeof(szDomain) / sizeof(*szDomain);
if (!LookupAccountSid((LPCWSTR) NULL,
lpGroup,
szAccount, &dwAccount,
szDomain, &dwDomain,
&snu))
{
dwError = GetLastError();
if (dwError != ERROR_NONE_MAPPED)
PrintConsole(hConsole,
L"LookupAccountSid() returned error %lu for group of \'%ls\'\n",
dwError, szPathName);
else
if (!ConvertSidToStringSid(lpGroup, &lpStringSID))
PrintConsole(hConsole,
L"ConvertSidToStringSid() returned error %lu for unknown group of \'%ls\'\n",
dwError = GetLastError(), szPathName);
else
{
PrintConsole(hConsole,
L"Unknown group \'%ls\' in security descriptor of \'%ls\'\n",
lpStringSID, szPathName);
if (LocalFree(lpStringSID) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
}
}
if (lpDACL == NULL)
PrintConsole(hConsole,
L"No DACL in security descriptor of \'%ls\'\n",
szPathName);
else
if (!IsValidAcl(lpDACL))
PrintConsole(hConsole,
L"IsValidAcl() failed for DACL of \'%ls\'\n",
szPathName);
else
if (lpDACL->AceCount == 0)
PrintConsole(hConsole,
L"Empty DACL in security descriptor of \'%ls\'\n",
szPathName);
else
for (lpACE = (ACE_HEADER *) (lpDACL + 1),
wACE = 0; wACE < lpDACL->AceCount; wACE++,
lpACE = (ACE_HEADER *) ((BYTE *) lpACE + lpACE->AceSize))
{
switch (lpACE->AceType)
{
case ACCESS_ALLOWED_ACE_TYPE:
lpTrustee = (SID *) &(((ACCESS_ALLOWED_ACE *) lpACE)->SidStart);
break;
case ACCESS_DENIED_ACE_TYPE:
lpTrustee = (SID *) &(((ACCESS_DENIED_ACE *) lpACE)->SidStart);
break;
case ACCESS_ALLOWED_COMPOUND_ACE_TYPE:
continue;
case ACCESS_ALLOWED_OBJECT_ACE_TYPE:
if (((((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpTrustee = (SID *) &(((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->SidStart);
else
lpTrustee = (SID *) &(((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->ObjectType);
else
lpTrustee = (SID *) &(((ACCESS_ALLOWED_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case ACCESS_DENIED_OBJECT_ACE_TYPE:
if (((((ACCESS_DENIED_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((ACCESS_DENIED_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((ACCESS_DENIED_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpTrustee = (SID *) &(((ACCESS_DENIED_OBJECT_ACE *) lpACE)->SidStart);
else
lpTrustee = (SID *) &(((ACCESS_DENIED_OBJECT_ACE *) lpACE)->ObjectType);
else
lpTrustee = (SID *) &(((ACCESS_DENIED_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case ACCESS_ALLOWED_CALLBACK_ACE_TYPE:
lpTrustee = (SID *) &(((ACCESS_ALLOWED_CALLBACK_ACE *) lpACE)->SidStart);
break;
case ACCESS_DENIED_CALLBACK_ACE_TYPE:
lpTrustee = (SID *) &(((ACCESS_DENIED_CALLBACK_ACE *) lpACE)->SidStart);
break;
case ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE:
if (((((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpTrustee = (SID *) &(((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->SidStart);
else
lpTrustee = (SID *) &(((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->ObjectType);
else
lpTrustee = (SID *) &(((ACCESS_ALLOWED_CALLBACK_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE:
if (((((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpTrustee = (SID *) &(((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->SidStart);
else
lpTrustee = (SID *) &(((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->ObjectType);
else
lpTrustee = (SID *) &(((ACCESS_DENIED_CALLBACK_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
default:
PrintConsole(hConsole,
L"Unknown ACE type %u in DACL of \'%ls\'\n",
lpACE->AceType, szPathName);
continue;
}
if (!IsValidSid(lpTrustee))
PrintConsole(hConsole,
L"IsValidSid() failed for trustee in DACL of \'%ls\'\n",
szPathName);
else
{
dwAccount = sizeof(szAccount) / sizeof(*szAccount);
dwDomain = sizeof(szDomain) / sizeof(*szDomain);
if (!LookupAccountSid((LPCWSTR) NULL,
lpTrustee,
szAccount, &dwAccount,
szDomain, &dwDomain,
&snu))
{
dwError = GetLastError();
if (dwError != ERROR_NONE_MAPPED)
PrintConsole(hConsole,
L"LookupAccountSid() returned error %lu for trustee in DACL of \'%ls\'\n",
dwError, szPathName);
else
if (!ConvertSidToStringSid(lpTrustee, &lpStringSID))
PrintConsole(hConsole,
L"ConvertSidToStringSid() returned error %lu for unknown trustee in DACL of \'%ls\'\n",
dwError = GetLastError(), szPathName);
else
{
PrintConsole(hConsole,
L"Unknown trustee \'%ls\' in DACL of \'%ls\'\n",
lpStringSID, szPathName);
if (LocalFree(lpStringSID) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
}
}
}
if (lpSACL == NULL)
PrintConsole(hConsole,
L"No SACL in security descriptor of \'%ls\'\n",
szPathName);
else
if (!IsValidAcl(lpSACL))
PrintConsole(hConsole,
L"IsValidAcl() failed for SACL of \'%ls\'\n",
szPathName);
else
if (lpSACL->AceCount == 0)
PrintConsole(hConsole,
L"Empty SACL in security descriptor of \'%ls\'\n",
szPathName);
else
for (lpACE = (ACE_HEADER *) (lpSACL + 1),
wACE = 0; wACE < lpSACL->AceCount; wACE++,
lpACE = (ACE_HEADER *) ((BYTE *) lpACE + lpACE->AceSize))
{
switch (lpACE->AceType)
{
case SYSTEM_AUDIT_ACE_TYPE:
lpTrustee = (SID *) &(((SYSTEM_AUDIT_ACE *) lpACE)->SidStart);
break;
case SYSTEM_ALARM_ACE_TYPE:
lpTrustee = (SID *) &(((SYSTEM_ALARM_ACE *) lpACE)->SidStart);
break;
case SYSTEM_AUDIT_OBJECT_ACE_TYPE:
if (((((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpTrustee = (SID *) &(((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->SidStart);
else
lpTrustee = (SID *) &(((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->ObjectType);
else
lpTrustee = (SID *) &(((SYSTEM_AUDIT_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case SYSTEM_ALARM_OBJECT_ACE_TYPE:
if (((((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpTrustee = (SID *) &(((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->SidStart);
else
lpTrustee = (SID *) &(((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->ObjectType);
else
lpTrustee = (SID *) &(((SYSTEM_ALARM_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case SYSTEM_AUDIT_CALLBACK_ACE_TYPE:
lpTrustee = (SID *) &(((SYSTEM_AUDIT_CALLBACK_ACE *) lpACE)->SidStart);
break;
case SYSTEM_ALARM_CALLBACK_ACE_TYPE:
lpTrustee = (SID *) &(((SYSTEM_ALARM_CALLBACK_ACE *) lpACE)->SidStart);
break;
case SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE:
if (((((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpTrustee = (SID *) &(((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->SidStart);
else
lpTrustee = (SID *) &(((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->ObjectType);
else
lpTrustee = (SID *) &(((SYSTEM_AUDIT_CALLBACK_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE:
if (((((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
== ((((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_INHERITED_OBJECT_TYPE_PRESENT) == ACE_INHERITED_OBJECT_TYPE_PRESENT))
if ((((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->Flags & ACE_OBJECT_TYPE_PRESENT) == ACE_OBJECT_TYPE_PRESENT)
lpTrustee = (SID *) &(((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->SidStart);
else
lpTrustee = (SID *) &(((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->ObjectType);
else
lpTrustee = (SID *) &(((SYSTEM_ALARM_CALLBACK_OBJECT_ACE *) lpACE)->InheritedObjectType);
break;
case SYSTEM_MANDATORY_LABEL_ACE_TYPE:
lpTrustee = (SID *) &(((SYSTEM_MANDATORY_LABEL_ACE *) lpACE)->SidStart);
break;
case SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE:
lpTrustee = (SID *) &(((SYSTEM_RESOURCE_ATTRIBUTE_ACE *) lpACE)->SidStart);
break;
case SYSTEM_SCOPED_POLICY_ID_ACE_TYPE:
lpTrustee = (SID *) &(((SYSTEM_SCOPED_POLICY_ID_ACE *) lpACE)->SidStart);
break;
case SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE:
lpTrustee = (SID *) &(((SYSTEM_PROCESS_TRUST_LABEL_ACE *) lpACE)->SidStart);
break;
case SYSTEM_ACCESS_FILTER_ACE_TYPE:
lpTrustee = (SID *) &(((SYSTEM_ACCESS_FILTER_ACE *) lpACE)->SidStart);
break;
default:
PrintConsole(hConsole,
L"Unknown ACE type %u in SACL of \'%ls\'\n",
lpACE->AceType, szPathName);
continue;
}
if (!IsValidSid(lpTrustee))
PrintConsole(hConsole,
L"IsValidSid() failed for trustee in SACL of \'%ls\'\n",
szPathName);
else
{
dwAccount = sizeof(szAccount) / sizeof(*szAccount);
dwDomain = sizeof(szDomain) / sizeof(*szDomain);
if (!LookupAccountSid((LPCWSTR) NULL,
lpTrustee,
szAccount, &dwAccount,
szDomain, &dwDomain,
&snu))
{
dwError = GetLastError();
if (dwError != ERROR_NONE_MAPPED)
PrintConsole(hConsole,
L"LookupAccountSid() returned error %lu for trustee in SACL of \'%ls\'\n",
dwError, szPathName);
else
if (!ConvertSidToStringSid(lpTrustee, &lpStringSID))
PrintConsole(hConsole,
L"ConvertSidToStringSid() returned error %lu for unknown trustee in SACL of \'%ls\'\n",
dwError = GetLastError(), szPathName);
else
{
PrintConsole(hConsole,
L"Unknown trustee \'%ls\' in SACL of \'%ls\'\n",
lpStringSID, szPathName);
if (LocalFree(lpStringSID) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
}
}
}
if (LocalFree(lpSD) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
return dwError;
}
__declspec(safebuffers)
DWORD WINAPI Traverse(HANDLE hConsole, QWORD qwPrivileges, WCHAR szPathName[32768])
{
WIN32_FIND_DATA wfd;
HANDLE hPathName;
DWORD dwPathName;
DWORD dwError = Security(hConsole, qwPrivileges, szPathName);
dwPathName = wcslen(szPathName);
#if 0
wcscat(szPathName, L"\\*");
#elif 0
wmemcpy(szPathName + dwPathName, L"\\*", sizeof("\\*"));
#elif 0
memcpy(szPathName + dwPathName, L"\\*", sizeof(L"\\*"));
#else
szPathName[dwPathName + 0] = L'\\';
szPathName[dwPathName + 1] = L'*';
szPathName[dwPathName + 2] = L'\0';
#endif
hPathName = FindFirstFile(szPathName, &wfd);
if (hPathName != INVALID_HANDLE_VALUE)
{
do
{
wcscpy(szPathName + dwPathName + 1, wfd.cFileName);
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
{
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0)
continue;
#if 0
if ((wcscmp(wfd.cFileName, L".") == 0)
|| (wcscmp(wfd.cFileName, L"..") == 0))
continue;
#elif 0
if ((wmemcmp(wfd.cFileName, L".", sizeof(".")) == 0)
|| (wmemcmp(wfd.cFileName, L"..", sizeof("..")) == 0))
continue;
#elif 0
if ((memcmp(wfd.cFileName, L".", sizeof(L".")) == 0)
|| (memcmp(wfd.cFileName, L"..", sizeof(L"..")) == 0))
continue;
#else
if ((wfd.cFileName[0] == L'.')
&& (wfd.cFileName[1] == L'\0'))
continue;
if ((wfd.cFileName[0] == L'.')
&& (wfd.cFileName[1] == L'.')
&& (wfd.cFileName[2] == L'\0'))
continue;
#endif
dwError = Traverse(hConsole, qwPrivileges, szPathName);
}
else
dwError = Security(hConsole, qwPrivileges, szPathName);
}
while (FindNextFile(hPathName, &wfd));
dwError = GetLastError();
if (dwError == ERROR_NO_MORE_FILES)
dwError = ERROR_SUCCESS;
else
PrintConsole(hConsole,
L"FindNextFile() returned error %lu for path \'%ls\'\n",
dwError, szPathName);
if (!FindClose(hPathName))
PrintConsole(hConsole,
L"FindClose() returned error %lu for path \'%ls\'\n",
GetLastError(), szPathName);
}
else
{
dwError = GetLastError();
if (dwError == ERROR_FILE_NOT_FOUND)
dwError = ERROR_SUCCESS;
else
PrintConsole(hConsole,
L"FindFirstFile() returned error %lu for path \'%ls\'\n",
dwError, szPathName);
}
// szPathName[dwPathName] = L'\0';
return dwError;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
WIN32_FIND_DATA wfd;
LPWSTR *lpArguments;
INT nArguments;
INT nArgument = 1;
QWORD qwPrivileges = 0;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwArgument;
WCHAR szArgument[32768];
LPWSTR lpArgument;
HANDLE hArgument;
HANDLE hToken;
HANDLE hProcess = GetCurrentProcess();
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 2)
PrintConsole(hConsole,
L"No arguments: at least one directory or file name must be given!\n");
else
{
if (!OpenProcessToken(hProcess,
TOKEN_ADJUST_PRIVILEGES,
&hToken))
PrintConsole(hConsole,
L"OpenProcessToken() returned error %lu\n",
dwError = GetLastError());
else
{
if (!AdjustTokenPrivileges(hToken,
FALSE,
&tpBackup,
sizeof(TOKEN_PRIVILEGES),
(TOKEN_PRIVILEGES *) NULL,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"AdjustTokenPrivileges() returned error %lu\n",
dwError = GetLastError());
else
if (GetLastError() == ERROR_SUCCESS)
qwPrivileges |= 1 << SE_BACKUP_PRIVILEGE;
if (!AdjustTokenPrivileges(hToken,
FALSE,
&tpSecurity,
sizeof(TOKEN_PRIVILEGES),
(TOKEN_PRIVILEGES *) NULL,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"AdjustTokenPrivileges() returned error %lu\n",
dwError = GetLastError());
else
if (GetLastError() == ERROR_SUCCESS)
qwPrivileges |= 1 << SE_SECURITY_PRIVILEGE;
if (!CloseHandle(hToken))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
do
{
dwArgument = GetFileAttributes(lpArguments[nArgument]);
if (dwArgument == INVALID_FILE_ATTRIBUTES)
{
hArgument = FindFirstFile(lpArguments[nArgument], &wfd);
if (hArgument == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"FindFirstFile() returned error %lu for argument \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
else
{
dwArgument = 0;
lpArgument = NULL;
do
{
szArgument[dwArgument] = lpArguments[nArgument][dwArgument];
if (szArgument[dwArgument] == L'\\')
lpArgument = szArgument + dwArgument;
}
while (szArgument[dwArgument++] != L'\0');
if (dwArgument > MAX_PATH)
PrintConsole(hConsole,
L"Argument \'%ls\' exceeds MAX_PATH!\n",
szArgument);
if (lpArgument != NULL)
lpArgument++;
else
lpArgument = szArgument + 2 * (szArgument[1] == L':');
dwArgument = 0;
do
{
wcscpy(lpArgument, wfd.cFileName);
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
{
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0)
continue;
#if 0
if ((wcscmp(wfd.cFileName, L".") == 0)
|| (wcscmp(wfd.cFileName, L"..") == 0))
continue;
#elif 0
if ((wmemcmp(wfd.cFileName, L".", sizeof(".")) == 0)
|| (wmemcmp(wfd.cFileName, L"..", sizeof("..")) == 0))
continue;
#elif 0
if ((memcmp(wfd.cFileName, L".", sizeof(L".")) == 0)
|| (memcmp(wfd.cFileName, L"..", sizeof(L"..")) == 0))
continue;
#else
if ((wfd.cFileName[0] == L'.')
&& (wfd.cFileName[1] == L'\0'))
continue;
if ((wfd.cFileName[0] == L'.')
&& (wfd.cFileName[1] == L'.')
&& (wfd.cFileName[2] == L'\0'))
continue;
#endif
dwError = Traverse(hConsole, qwPrivileges, szArgument);
}
else
dwError = Security(hConsole, qwPrivileges, szArgument);
dwArgument++;
}
while (FindNextFile(hArgument, &wfd));
dwError = GetLastError();
if (dwError == ERROR_NO_MORE_FILES)
dwError = ERROR_SUCCESS;
else
PrintConsole(hConsole,
L"FindNextFile() returned error %lu for argument \'%ls\'\n",
dwError, lpArguments[nArgument]);
if (dwArgument == 0)
PrintConsole(hConsole,
L"No wildcard match for argument \'%ls\'!\n",
lpArguments[nArgument]);
if (!FindClose(hArgument))
PrintConsole(hConsole,
L"FindClose() returned error %lu for argument \'%ls\'\n",
GetLastError(), lpArguments[nArgument]);
}
}
else if ((dwArgument & FILE_ATTRIBUTE_DIRECTORY) == 0)
dwError = Security(hConsole, qwPrivileges, szArgument);
else
dwError = Traverse(hConsole, qwPrivileges, szArgument);
}
while (++nArgument < nArguments);
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Note: the console application
SECURITY.COM
supports longpathnames with the
\\?\
prefix.
Run the following four command lines to compile the source file
SECURITY.C
created in step 1., link the compiled
object file SECURITY.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gs69632 /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /STACK:1048576,65536 /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeSECURITY.COM SECURITY.C ADVAPI32.LIB KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE SECURITY.OBJFor 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. SECURITY.C SECURITY.C(726) : warning C4090: 'function' : different 'const' qualifiers SECURITY.C(739) : warning C4090: 'function' : different 'const' qualifiers Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
(Optional) Create the text file SECURITY.XML
with the
following content next to the console application
SECURITY.COM
built in step 2.:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!-- Copyright (C) 2004-2024, Stefan Kanthak -->
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity name="eSKamation.Tidbits.Security Descriptor Inspector" processorArchitecture="*" type="win32" version="0.8.1.5" />
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<longPathAware xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">true</longPathAware>
</windowsSettings>
</application>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
</application>
</compatibility>
<description>Security Descriptor Inspector</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
Note: the double use of an
XML element
named application
is (at least) clumsy and error-prone!
(Optional) Embed the application manifest
SECURITY.XML
created in step 3. in the console
application SECURITY.COM
built in step 2.:
MT.EXE /CANONICALIZE /MANIFEST SECURITY.XML /OUTPUTRESOURCE:SECURITY.COMNote: the Manifest Tool
MT.exe
is shipped with the Windows Software Development Kit.
Microsoft (R) Manifest Tool version 6.1.7716.0 Copyright (c) Microsoft Corporation 2009. All rights reserved.Note: on Windows 10 1607 alias Anniversary Update and newer versions of Windows NT, the console application
SECURITY.COM
supports longpathnames when the following Registry. entry is present:
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001
Note: without this
Registry
entry and on older versions of Windows NT, the console
application SECURITY.COM
supports longpathnames with the
\\?\
prefix.
Create the text file SECURITY.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
e0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 03 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 0e 00 00 ......#.........
00 12 00 00 00 00 00 00 95 18 00 00 00 10 00 00 ................
00 20 00 00 00 00 01 00 00 10 00 00 00 02 00 00 . ..............
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 40 00 00 00 02 00 00 6d dc 00 00 03 00 00 85 .@......m.......
00 00 10 00 00 10 01 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
34 29 00 00 50 00 00 00 00 30 00 00 e6 05 00 00 4)..P....0......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 d8 28 00 00 40 00 00 00 .........(..@...
00 00 00 00 00 00 00 00 00 20 00 00 68 00 00 00 ......... ..h...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
a7 0d 00 00 00 10 00 00 00 0e 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 ac 0b 00 00 00 20 00 00 .const....... ..
00 0c 00 00 00 10 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 2e 72 73 72 63 00 00 00 ....@..@.rsrc...
e6 05 00 00 00 30 00 00 00 06 00 00 00 1c 00 00 4....0..........
00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 40 ............@..@
55 8b ec 81 ec 04 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 fc f7 ff ff 50 ff 15 60 20 01 00 8b f0 .......P..` ....
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 fc f7 ff ff 50 ff 75 08 ff 15 24 20 01 00 85 .....P.u...$ ...
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 8b 45 0c 25 00 01 00 00 33 c9 81 ec 30 04 00 ..E.%....3...0..
00 0b c1 74 04 6a 1f eb 02 6a 17 58 8d 4d d8 51 ...t.j...j.X.M.Q
8d 4d e0 51 8d 4d e8 51 8d 4d ec 51 8d 4d e4 51 .M.Q.M.Q.M.Q.M.Q
50 6a 01 ff 75 14 ff 15 14 20 01 00 89 45 fc 85 Pj..u.... ...E..
c0 74 10 ff 75 14 50 68 f8 25 01 00 68 b0 25 01 .t..u.Ph.%..h.%.
00 eb 1f ff 75 d8 ff 15 10 20 01 00 85 c0 75 22 ....u.... ....u"
ff 75 14 68 84 25 01 00 68 50 25 01 00 68 10 25 .u.h.%..hP%..h.%
01 00 ff 75 08 e8 36 ff ff ff 83 c4 14 e9 52 06 ...u..6.......R.
00 00 83 7d e4 00 53 8b 1d 2c 20 01 00 56 57 be ...}..S.., ..VW.
b8 24 01 00 bf 50 24 01 00 75 12 ff 75 14 68 40 .$...P$..u..u.h@
24 01 00 68 f0 23 01 00 e9 e6 00 00 00 ff 75 e4 $..h.#........u.
ff 15 0c 20 01 00 85 c0 75 22 ff 75 14 68 40 24 ... ....u".u.h@$
01 00 68 d8 23 01 00 68 10 25 01 00 ff 75 08 e8 ..h.#..h.%...u..
dc fe ff ff 83 c4 14 e9 c2 00 00 00 b8 01 01 00 ................
00 89 45 f4 89 45 f8 8d 45 dc 50 8d 45 f8 50 8d ..E..E..E.P.E.P.
85 d4 fd ff ff 50 8d 45 f4 50 8d 85 d0 fb ff ff .....P.E.P......
50 ff 75 e4 6a 00 ff 15 08 20 01 00 85 c0 0f 85 P.u.j.... ......
8a 00 00 00 ff d3 89 45 fc 3d 34 05 00 00 74 10 .......E.=4...t.
ff 75 14 68 40 24 01 00 50 68 b4 23 01 00 eb 24 .u.h@$..Ph.#...$
8d 45 10 50 ff 75 e4 ff 15 04 20 01 00 85 c0 75 .E.P.u.... ....u
21 ff d3 ff 75 14 89 45 fc 68 98 23 01 00 50 68 !...u..E.h.#..Ph
6c 23 01 00 56 ff 75 08 e8 53 fe ff ff 83 c4 18 l#..V.u..S......
eb 3c ff 75 14 ff 75 10 68 40 24 01 00 57 ff 75 .<.u..u.h@$..W.u
08 e8 3a fe ff ff 83 c4 14 ff 75 10 ff 15 28 20 ..:.......u...(
01 00 85 c0 74 18 ff d3 50 68 58 23 01 00 68 24 ....t...PhX#..h$
23 01 00 ff 75 08 e8 15 fe ff ff 83 c4 10 83 7d #...u..........}
ec 00 75 12 ff 75 14 68 18 23 01 00 68 f0 23 01 ..u..u.h.#..h.#.
00 e9 e6 00 00 00 ff 75 ec ff 15 0c 20 01 00 85 .......u.... ...
c0 75 22 ff 75 14 68 18 23 01 00 68 d8 23 01 00 .u".u.h.#..h.#..
68 10 25 01 00 ff 75 08 e8 d3 fd ff ff 83 c4 14 h.%...u.........
e9 c2 00 00 00 b8 01 01 00 00 89 45 f4 89 45 f8 ...........E..E.
8d 45 dc 50 8d 45 f8 50 8d 85 d4 fd ff ff 50 8d .E.P.E.P......P.
45 f4 50 8d 85 d0 fb ff ff 50 ff 75 ec 6a 00 ff E.P......P.u.j..
15 08 20 01 00 85 c0 0f 85 8a 00 00 00 ff d3 89 .. .............
45 fc 3d 34 05 00 00 74 10 ff 75 14 68 18 23 01 E.=4...t..u.h.#.
00 50 68 b4 23 01 00 eb 24 8d 45 10 50 ff 75 ec .Ph.#...$.E.P.u.
ff 15 04 20 01 00 85 c0 75 21 ff d3 ff 75 14 89 ... ....u!...u..
45 fc 68 fc 22 01 00 50 68 6c 23 01 00 56 ff 75 E.h."..Phl#..V.u
08 e8 4a fd ff ff 83 c4 18 eb 3c ff 75 14 ff 75 ..J.......<.u..u
10 68 18 23 01 00 57 ff 75 08 e8 31 fd ff ff 83 .h.#..W.u..1....
c4 14 ff 75 10 ff 15 28 20 01 00 85 c0 74 18 ff ...u...( ....t..
d3 50 68 58 23 01 00 68 24 23 01 00 ff 75 08 e8 .PhX#..h$#...u..
0c fd ff ff 83 c4 10 83 7d e8 00 bb f0 22 01 00 ........}...."..
75 0b ff 75 14 53 68 f0 23 01 00 eb 40 ff 75 e8 u..u.Sh.#...@.u.
ff 15 00 20 01 00 85 c0 75 1e ff 75 14 53 68 d8 ... ....u..u.Sh.
22 01 00 68 10 25 01 00 ff 75 08 e8 d0 fc ff ff "..h.%...u......
83 c4 14 e9 b4 01 00 00 8b 75 e8 0f b7 46 04 66 .........u...F.f
85 c0 75 19 ff 75 14 53 68 80 22 01 00 ff 75 08 ..u..u.Sh."...u.
e8 ab fc ff ff 83 c4 10 e9 8f 01 00 00 83 65 f0 ..............e.
00 33 c9 83 c6 08 66 3b c8 0f 83 7d 01 00 00 0f .3....f;...}....
b6 06 83 f8 06 7f 48 74 15 8b c8 83 e9 00 74 69 ......Ht......ti
49 74 66 83 e9 03 0f 84 46 01 00 00 eb 3e 8b 46 Itf.....F....>.F
08 8b c8 24 02 33 d2 83 e1 01 3c 02 0f 94 c2 33 ...$.3....<....3
c0 83 f9 01 0f 94 c0 3b c2 75 0f 83 f9 01 75 05 .......;.u....u.
8d 7e 2c eb 37 8d 7e 0c eb 32 8d 7e 1c eb 2d 8b .~,.7.~..2.~..-.
c8 83 e9 09 74 23 49 74 20 49 74 c2 49 74 bf ff ....t#It It.It..
75 14 53 50 68 30 22 01 00 ff 75 08 e8 1f fc ff u.SPh0"...u.....
ff 83 c4 14 e9 e9 00 00 00 8d 7e 08 57 ff 15 0c ..........~.W...
20 01 00 85 c0 75 10 ff 75 14 53 68 d8 23 01 00 ....u..u.Sh.#..
68 d8 21 01 00 eb d2 b8 01 01 00 00 89 45 f4 89 h.!..........E..
45 f8 8d 45 dc 50 8d 45 f8 50 8d 85 d4 fd ff ff E..E.P.E.P......
50 8d 45 f4 50 8d 85 d0 fb ff ff 50 57 6a 00 ff P.E.P......PWj..
15 08 20 01 00 85 c0 0f 85 95 00 00 00 ff 15 2c .. ............,
20 01 00 89 45 fc 3d 34 05 00 00 74 11 ff 75 14 ...E.=4...t..u.
53 50 68 b4 23 01 00 68 68 21 01 00 eb 27 8d 45 SPh.#..hh!...'.E
10 50 57 ff 15 04 20 01 00 85 c0 75 25 ff 15 2c .PW... ....u%..,
20 01 00 ff 75 14 89 45 fc 53 50 68 6c 23 01 00 ...u..E.SPhl#..
68 e8 20 01 00 ff 75 08 e8 73 fb ff ff 83 c4 18 h. ...u..s......
eb 40 ff 75 14 53 ff 75 10 68 98 20 01 00 ff 75 .@.u.S.u.h. ...u
08 e8 5a fb ff ff 83 c4 14 ff 75 10 ff 15 28 20 ..Z.......u...(
01 00 85 c0 74 1c ff 15 2c 20 01 00 50 68 58 23 ....t..., ..PhX#
01 00 68 24 23 01 00 ff 75 08 e8 31 fb ff ff 83 ..h$#...u..1....
c4 10 0f b7 46 02 ff 45 f0 66 8b 4d f0 03 f0 8b ....F..E.f.M....
45 e8 66 3b 48 04 0f 82 83 fe ff ff 83 7d e0 00 E.f;H........}..
75 0f ff 75 14 68 88 20 01 00 68 f0 23 01 00 eb u..u.h. ..h.#...
48 ff 75 e0 ff 15 00 20 01 00 85 c0 75 22 ff 75 H.u.... ....u".u
14 68 88 20 01 00 68 d8 22 01 00 68 10 25 01 00 .h. ..h."..h.%..
ff 75 08 e8 d8 fa ff ff 83 c4 14 e9 c8 01 00 00 .u..............
8b 45 e0 0f b7 48 04 66 85 c9 75 1d ff 75 14 68 .E...H.f..u..u.h
88 20 01 00 68 80 22 01 00 ff 75 08 e8 af fa ff . ..h."...u.....
ff 83 c4 10 e9 9f 01 00 00 83 65 f0 00 8d 70 08 ..........e...p.
33 c0 66 3b c1 0f 83 8d 01 00 00 bb 88 20 01 00 3.f;......... ..
0f b6 0e 83 f9 0f 7f 20 74 4b 8d 41 ff 48 74 13 ....... tK.A.Ht.
48 74 10 83 e8 04 74 3d 48 74 3a 83 e8 05 74 03 Ht....t=Ht:...t.
48 75 18 8d 7e 08 eb 5c 8b c1 83 e8 10 74 26 48 Hu..~..\.....t&H
74 f1 48 74 ee 48 74 eb 48 eb e3 ff 75 14 53 51 t.Ht.Ht.H...u.SQ
68 30 22 01 00 ff 75 08 e8 43 fa ff ff 83 c4 14 h0"...u..C......
e9 19 01 00 00 8b 46 08 8b c8 24 02 33 d2 83 e1 ......F...$.3...
01 3c 02 0f 94 c2 33 c0 83 f9 01 0f 94 c0 3b c2 .<....3.......;.
75 0f 83 f9 01 75 05 8d 7e 2c eb 08 8d 7e 0c eb u....u..~,...~..
03 8d 7e 1c 57 ff 15 0c 20 01 00 85 c0 75 10 ff ..~.W... ....u..
75 14 53 68 d8 23 01 00 68 d8 21 01 00 eb a6 b8 u.Sh.#..h.!.....
01 01 00 00 89 45 f4 89 45 f8 8d 45 dc 50 8d 45 .....E..E..E.P.E
f8 50 8d 85 d4 fd ff ff 50 8d 45 f4 50 8d 85 d0 .P......P.E.P...
fb ff ff 50 57 6a 00 ff 15 08 20 01 00 85 c0 0f ...PWj.... .....
85 99 00 00 00 ff 15 2c 20 01 00 89 45 fc 3d 34 ......., ...E.=4
05 00 00 74 11 ff 75 14 53 50 68 b4 23 01 00 68 ...t..u.SPh.#..h
68 21 01 00 eb 2b 8d 45 10 50 57 ff 15 04 20 01 h!...+.E.PW... .
00 85 c0 75 29 ff 15 2c 20 01 00 ff 75 14 89 45 ...u).., ...u..E
fc 68 f0 22 01 00 50 68 6c 23 01 00 68 e8 20 01 .h."..Phl#..h. .
00 ff 75 08 e8 67 f9 ff ff 83 c4 18 eb 40 ff 75 ..u..g.......@.u
14 53 ff 75 10 68 98 20 01 00 ff 75 08 e8 4e f9 .S.u.h. ...u..N.
ff ff 83 c4 14 ff 75 10 ff 15 28 20 01 00 85 c0 ......u...( ....
74 1c ff 15 2c 20 01 00 50 68 58 23 01 00 68 24 t..., ..PhX#..h$
23 01 00 ff 75 08 e8 25 f9 ff ff 83 c4 10 0f b7 #...u..%........
46 02 ff 45 f0 66 8b 4d f0 03 f0 8b 45 e0 66 3b F..E.f.M....E.f;
48 04 0f 82 78 fe ff ff ff 75 d8 ff 15 28 20 01 H...x....u...( .
00 5f 5e 5b 85 c0 74 1c ff 15 2c 20 01 00 50 68 ._^[..t..., ..Ph
58 23 01 00 68 24 23 01 00 ff 75 08 e8 df f8 ff X#..h$#...u.....
ff 83 c4 10 8b 45 fc c9 c2 10 00 55 8b ec 81 ec .....E.....U....
54 02 00 00 53 8b 5d 08 56 8b 75 14 57 56 ff 75 T...S.].V.u.WV.u
10 ff 75 0c 53 e8 04 f9 ff ff 8b c6 8d 48 02 66 ..u.S........H.f
8b 10 83 c0 02 66 85 d2 75 f5 6a 5c 2b c1 59 d1 .....f..u.j\+.Y.
f8 6a 2a 66 89 0c 46 59 8d 7c 46 02 66 89 0f 33 .j*f..FY.|F.f..3
c9 66 89 4c 46 04 8d 85 ac fd ff ff 50 56 ff 15 .f.LF.......PV..
38 20 01 00 89 45 fc 83 f8 ff 0f 84 d2 00 00 00 8 ...E..........
8d 85 d8 fd ff ff 2b f8 8d 85 d8 fd ff ff 0f b7 ......+.........
08 66 89 0c 07 83 c0 02 66 85 c9 75 f1 f6 85 ac .f......f..u....
fd ff ff 10 74 41 f7 85 ac fd ff ff 00 04 00 00 ....tA..........
75 42 66 83 bd d8 fd ff ff 2e 75 1c 66 39 8d da uBf.......u.f9..
fd ff ff 74 2f 66 83 bd da fd ff ff 2e 75 09 66 ...t/f.......u.f
39 8d dc fd ff ff 74 1c 56 ff 75 10 ff 75 0c 53 9.....t.V.u..u.S
e8 36 ff ff ff eb 0d 56 ff 75 10 ff 75 0c 53 e8 .6.....V.u..u.S.
4a f8 ff ff 8d 85 ac fd ff ff 50 ff 75 fc ff 15 J.........P.u...
34 20 01 00 85 c0 75 80 8b 1d 2c 20 01 00 ff d3 4 ....u..., ....
89 45 14 bf 70 26 01 00 83 f8 12 75 06 83 65 14 .E..p&.....u..e.
00 eb 13 56 50 68 54 26 01 00 57 ff 75 08 e8 bd ...VPhT&..W.u...
f7 ff ff 83 c4 14 ff 75 fc ff 15 30 20 01 00 85 .......u...0 ...
c0 75 38 56 ff d3 50 68 40 26 01 00 57 ff 75 08 .u8V..Ph@&..W.u.
eb 21 ff 15 2c 20 01 00 89 45 14 83 f8 02 75 06 .!.., ...E....u.
83 65 14 00 eb 15 56 50 68 24 26 01 00 68 70 26 .e....VPh$&..hp&
01 00 53 e8 78 f7 ff ff 83 c4 14 8b 45 14 5f 5e ..S.x.......E._^
5b c9 c2 10 00 55 8b ec 81 ec 78 02 01 00 53 56 [....U....x...SV
57 33 ff c7 45 e0 01 00 00 00 89 7d f0 89 7d f4 W3..E......}..}.
c7 45 fc a0 00 00 00 ff 15 50 20 01 00 6a f4 89 .E.......P ..j..
45 ec ff 15 4c 20 01 00 8b d8 89 5d f8 83 fb ff E...L .....]....
75 0e ff 15 2c 20 01 00 89 45 fc e9 1e 03 00 00 u..., ...E......
8d 45 d8 50 ff 15 48 20 01 00 50 e8 3a 03 00 00 .E.P..H ..P.:...
8b 35 2c 20 01 00 89 45 dc 3b c7 75 10 ff d6 50 .5, ...E.;.u...P
89 45 fc 68 ac 28 01 00 e9 c2 02 00 00 83 7d d8 .E.h.(........}.
02 73 12 68 28 28 01 00 53 e8 e2 f6 ff ff 59 59 .s.h((..S.....YY
e9 95 02 00 00 8d 45 e8 50 6a 20 ff 75 ec ff 15 ......E.Pj .u...
1c 20 01 00 85 c0 75 0d ff d6 50 68 00 28 01 00 . ....u...Ph.(..
e9 95 00 00 00 57 57 6a 10 68 68 20 01 00 57 ff .....WWj.hh ..W.
75 e8 ff 15 18 20 01 00 bf d4 27 01 00 85 c0 75 u.... ....'....u
14 ff d6 50 57 68 24 23 01 00 53 e8 90 f6 ff ff ...PWh$#..S.....
83 c4 10 eb 10 ff d6 85 c0 75 0a 21 45 f4 c7 45 .........u.!E..E
f0 00 00 02 00 33 c0 50 50 6a 10 68 78 20 01 00 .....3.PPj.hx ..
50 ff 75 e8 ff 15 18 20 01 00 85 c0 75 14 ff d6 P.u.... ....u...
50 57 68 24 23 01 00 53 e8 53 f6 ff ff 83 c4 10 PWh$#..S.S......
eb 13 ff d6 85 c0 75 0d 8b 45 f4 81 4d f0 00 01 ......u..E..M...
00 00 89 45 f4 ff 75 e8 ff 15 44 20 01 00 85 c0 ...E..u...D ....
75 16 ff d6 50 68 bc 27 01 00 68 24 23 01 00 53 u...Ph.'..h$#..S
e8 1b f6 ff ff 83 c4 10 8b 7d dc 83 c7 04 ff 37 .........}.....7
ff 15 40 20 01 00 83 f8 ff 0f 85 08 02 00 00 8d ..@ ............
85 88 fd ff ff 50 ff 37 ff 15 38 20 01 00 89 45 .....P.7..8 ...E
ec 83 f8 ff 75 20 ff d6 ff 37 89 45 fc 50 68 24 ....u ...7.E.Ph$
26 01 00 68 60 27 01 00 53 e8 d2 f5 ff ff 83 c4 &..h`'..S.......
14 e9 72 01 00 00 33 db 21 5d fc 8b 07 0f b7 04 ..r...3.!]......
58 8b d0 8d 8c 5d 88 fd fe ff 66 89 01 83 fa 5c X....]....f....\
75 03 89 4d fc 43 66 85 d2 75 e0 81 fb 04 01 00 u..M.Cf..u......
00 76 12 ff 37 68 18 27 01 00 ff 75 f8 e8 8e f5 .v..7h.'...u....
ff ff 83 c4 0c 83 7d fc 00 74 06 83 45 fc 02 eb ......}..t..E...
17 33 c0 66 83 bd 8a fd fe ff 3a 0f 94 c0 8d 84 .3.f......:.....
85 88 fd fe ff 89 45 fc 8b 5d fc 83 65 e4 00 8d ......E..]..e...
85 b4 fd ff ff 2b d8 8d 85 b4 fd ff ff 0f b7 08 .....+..........
66 89 0c 03 83 c0 02 66 85 c9 75 f1 f6 85 88 fd f......f..u.....
ff ff 10 74 49 f7 85 88 fd ff ff 00 04 00 00 75 ...tI..........u
55 66 83 bd b4 fd ff ff 2e 75 1c 66 39 8d b6 fd Uf.......u.f9...
ff ff 74 42 66 83 bd b6 fd ff ff 2e 75 09 66 39 ..tBf.......u.f9
8d b8 fd ff ff 74 2f 8d 85 88 fd fe ff 50 ff 75 .....t/......P.u
f4 ff 75 f0 ff 75 f8 e8 1f fc ff ff eb 15 8d 85 ..u..u..........
88 fd fe ff 50 ff 75 f4 ff 75 f0 ff 75 f8 e8 2b ....P.u..u..u..+
f5 ff ff ff 45 e4 8d 85 88 fd ff ff 50 ff 75 ec ....E.......P.u.
ff 15 34 20 01 00 85 c0 0f 85 69 ff ff ff ff d6 ..4 ......i.....
89 45 fc 83 f8 12 75 06 83 65 fc 00 eb 18 ff 37 .E....u..e.....7
50 68 54 26 01 00 68 60 27 01 00 ff 75 f8 e8 9d PhT&..h`'...u...
f4 ff ff 83 c4 14 83 7d e4 00 75 12 ff 37 68 c8 .......}..u..7h.
26 01 00 ff 75 f8 e8 85 f4 ff ff 83 c4 0c ff 75 &...u..........u
ec ff 15 30 20 01 00 85 c0 75 1a ff 37 ff d6 50 ...0 ....u..7..P
68 40 26 01 00 68 60 27 01 00 ff 75 f8 e8 5e f4 h@&..h`'...u..^.
ff ff 83 c4 14 8b 5d f8 ff 45 e0 8b 45 e0 83 c7 ......]..E..E...
04 3b 45 d8 0f 82 34 fe ff ff ff 75 dc ff 15 28 .;E...4....u...(
20 01 00 85 c0 74 16 ff d6 50 68 58 23 01 00 68 ....t...PhX#..h
24 23 01 00 53 e8 26 f4 ff ff 83 c4 10 53 ff 15 $#..S.&......S..
44 20 01 00 85 c0 75 16 ff d6 50 68 bc 27 01 00 D ....u...Ph.'..
68 24 23 01 00 53 e8 05 f4 ff ff 83 c4 10 ff 75 h$#..S.........u
fc ff 15 3c 20 01 00 a8 10 8d 85 88 fd fe ff 50 ...< ..........P
ff 75 f4 ff 75 f0 53 75 0a e8 30 f4 ff ff 89 45 .u..u.Su..0....E
fc eb 85 e8 03 fb ff ff eb f4 55 8b ec 51 8b 45 ..........U..Q.E
08 53 56 33 f6 57 8b f8 89 75 08 89 75 fc 39 75 .SV3.W...u..u.9u
0c 0f 84 4f 01 00 00 3b c6 0f 84 47 01 00 00 0f ...O...;...G....
b7 08 66 3b ce 0f 84 3b 01 00 00 83 f9 20 74 0a ..f;...;..... t.
83 f9 09 74 05 33 db 43 eb 02 33 db 39 75 08 75 ...t.3.C..3.9u.u
2b 66 83 f9 20 74 06 66 83 f9 09 75 1f 83 c0 02 +f.. t.f...u....
0f b7 08 83 f9 20 74 f5 83 f9 09 74 f0 33 c9 66 ..... t....t.3.f
39 30 89 75 fc 0f 95 c1 03 d9 eb 21 66 83 f9 5c 90.u.......!f..\
75 05 f7 55 fc eb 13 39 75 fc 75 0b 66 83 f9 22 u..U...9u.u.f.."
75 05 f7 55 08 eb 03 89 75 fc 83 c0 02 0f b7 08 u..U....u.......
66 3b ce 75 a7 2b c7 83 c0 02 d1 f8 8d 44 58 02 f;.u.+.......DX.
03 c0 50 56 ff 15 58 20 01 00 8b f0 33 d2 3b f2 ..PV..X ....3.;.
0f 84 b8 00 00 00 8d 44 9e 04 89 06 89 55 08 33 .......D.....U.3
db 83 7d 08 00 75 31 0f b7 0f 83 f9 20 74 05 83 ..}..u1..... t..
f9 09 75 24 33 c9 66 89 08 83 c7 02 0f b7 0f 83 ..u$3.f.........
f9 20 74 f5 83 f9 09 74 f0 33 d2 66 39 17 74 4d . t....t.3.f9.tM
43 8b c7 89 3c 9e eb 45 0f b7 0f 83 f9 5c 75 0c C...<..E.....\u.
66 89 08 83 c0 02 83 c7 02 42 eb 31 83 f9 22 75 f........B.1.."u
21 8d 4a 01 d1 e9 f7 d9 8d 04 48 f6 c2 01 75 0f !.J.......H...u.
83 c7 02 66 83 3f 22 75 38 83 7d 08 00 74 32 6a ...f.?"u8.}..t2j
22 59 66 89 08 83 c0 02 83 c7 02 33 d2 66 83 3f "Yf........3.f.?
00 0f 85 7a ff ff ff 33 c9 43 66 89 08 21 0c 9e ...z...3.Cf..!..
8b 45 0c 89 18 39 4d 08 74 14 68 a0 00 00 00 eb .E...9M.t.h.....
07 f7 55 08 eb d5 6a 57 ff 15 54 20 01 00 5f 8b ..U...jW..T .._.
c6 5e 5b c9 c2 08 00 00 00 00 00 00 00 00 00 00 .^[.............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
ec 29 00 00 fa 29 00 00 14 2a 00 00 28 2a 00 00 .)...)...*..(*..
36 2a 00 00 52 2a 00 00 6a 2a 00 00 82 2a 00 00 6*..R*..j*...*..
00 00 00 00 a4 2a 00 00 b4 2a 00 00 c0 2a 00 00 .....*...*...*..
d0 2a 00 00 dc 2a 00 00 ec 2a 00 00 fe 2a 00 00 .*...*...*...*..
0c 2b 00 00 22 2b 00 00 30 2b 00 00 42 2b 00 00 .+.."+..0+..B+..
52 2b 00 00 66 2b 00 00 76 2b 00 00 00 00 00 00 R+..f+..v+......
92 2b 00 00 00 00 00 00 01 00 00 00 11 00 00 00 .+..............
00 00 00 00 02 00 00 00 01 00 00 00 08 00 00 00 ................
00 00 00 00 02 00 00 00 53 00 41 00 43 00 4c 00 ........S.A.C.L.
00 00 00 00 00 00 00 00 55 00 6e 00 6b 00 6e 00 ........U.n.k.n.
6f 00 77 00 6e 00 20 00 74 00 72 00 75 00 73 00 o.w.n. .t.r.u.s.
74 00 65 00 65 00 20 00 27 00 25 00 6c 00 73 00 t.e.e. .'.%.l.s.
27 00 20 00 69 00 6e 00 20 00 25 00 6c 00 73 00 '. .i.n. .%.l.s.
20 00 6f 00 66 00 20 00 27 00 25 00 6c 00 73 00 .o.f. .'.%.l.s.
27 00 0a 00 00 00 00 00 25 00 6c 00 73 00 28 00 '.......%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 75 00 6e 00 6b 00 6e 00 6f 00 77 00 6e 00 .u.n.k.n.o.w.n.
20 00 74 00 72 00 75 00 73 00 74 00 65 00 65 00 .t.r.u.s.t.e.e.
20 00 69 00 6e 00 20 00 25 00 6c 00 73 00 20 00 .i.n. .%.l.s. .
6f 00 66 00 20 00 27 00 25 00 6c 00 73 00 27 00 o.f. .'.%.l.s.'.
0a 00 00 00 00 00 00 00 25 00 6c 00 73 00 28 00 ........%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 74 00 72 00 75 00 73 00 74 00 65 00 65 00 .t.r.u.s.t.e.e.
20 00 69 00 6e 00 20 00 25 00 6c 00 73 00 20 00 .i.n. .%.l.s. .
6f 00 66 00 20 00 27 00 25 00 6c 00 73 00 27 00 o.f. .'.%.l.s.'.
0a 00 00 00 00 00 00 00 25 00 6c 00 73 00 28 00 ........%.l.s.(.
29 00 20 00 66 00 61 00 69 00 6c 00 65 00 64 00 ). .f.a.i.l.e.d.
20 00 66 00 6f 00 72 00 20 00 74 00 72 00 75 00 .f.o.r. .t.r.u.
73 00 74 00 65 00 65 00 20 00 69 00 6e 00 20 00 s.t.e.e. .i.n. .
25 00 6c 00 73 00 20 00 6f 00 66 00 20 00 27 00 %.l.s. .o.f. .'.
25 00 6c 00 73 00 27 00 0a 00 00 00 00 00 00 00 %.l.s.'.........
55 00 6e 00 6b 00 6e 00 6f 00 77 00 6e 00 20 00 U.n.k.n.o.w.n. .
41 00 43 00 45 00 20 00 74 00 79 00 70 00 65 00 A.C.E. .t.y.p.e.
20 00 25 00 75 00 20 00 69 00 6e 00 20 00 25 00 .%.u. .i.n. .%.
6c 00 73 00 20 00 6f 00 66 00 20 00 27 00 25 00 l.s. .o.f. .'.%.
6c 00 73 00 27 00 0a 00 00 00 00 00 00 00 00 00 l.s.'...........
45 00 6d 00 70 00 74 00 79 00 20 00 25 00 6c 00 E.m.p.t.y. .%.l.
73 00 20 00 69 00 6e 00 20 00 73 00 65 00 63 00 s. .i.n. .s.e.c.
75 00 72 00 69 00 74 00 79 00 20 00 64 00 65 00 u.r.i.t.y. .d.e.
73 00 63 00 72 00 69 00 70 00 74 00 6f 00 72 00 s.c.r.i.p.t.o.r.
20 00 6f 00 66 00 20 00 27 00 25 00 6c 00 73 00 .o.f. .'.%.l.s.
27 00 0a 00 00 00 00 00 49 00 73 00 56 00 61 00 '.......I.s.V.a.
6c 00 69 00 64 00 41 00 63 00 6c 00 00 00 00 00 l.i.d.A.c.l.....
44 00 41 00 43 00 4c 00 00 00 00 00 75 00 6e 00 D.A.C.L.....u.n.
6b 00 6e 00 6f 00 77 00 6e 00 20 00 67 00 72 00 k.n.o.w.n. .g.r.
6f 00 75 00 70 00 00 00 67 00 72 00 6f 00 75 00 o.u.p...g.r.o.u.
70 00 00 00 25 00 6c 00 73 00 28 00 29 00 20 00 p...%.l.s.(.). .
72 00 65 00 74 00 75 00 72 00 6e 00 65 00 64 00 r.e.t.u.r.n.e.d.
20 00 65 00 72 00 72 00 6f 00 72 00 20 00 25 00 .e.r.r.o.r. .%.
6c 00 75 00 0a 00 00 00 4c 00 6f 00 63 00 61 00 l.u.....L.o.c.a.
6c 00 46 00 72 00 65 00 65 00 00 00 43 00 6f 00 l.F.r.e.e...C.o.
6e 00 76 00 65 00 72 00 74 00 53 00 69 00 64 00 n.v.e.r.t.S.i.d.
54 00 6f 00 53 00 74 00 72 00 69 00 6e 00 67 00 T.o.S.t.r.i.n.g.
53 00 69 00 64 00 00 00 75 00 6e 00 6b 00 6e 00 S.i.d...u.n.k.n.
6f 00 77 00 6e 00 20 00 6f 00 77 00 6e 00 65 00 o.w.n. .o.w.n.e.
72 00 00 00 4c 00 6f 00 6f 00 6b 00 75 00 70 00 r...L.o.o.k.u.p.
41 00 63 00 63 00 6f 00 75 00 6e 00 74 00 53 00 A.c.c.o.u.n.t.S.
69 00 64 00 00 00 00 00 49 00 73 00 56 00 61 00 i.d.....I.s.V.a.
6c 00 69 00 64 00 53 00 69 00 64 00 00 00 00 00 l.i.d.S.i.d.....
4e 00 6f 00 20 00 25 00 6c 00 73 00 20 00 69 00 N.o. .%.l.s. .i.
6e 00 20 00 73 00 65 00 63 00 75 00 72 00 69 00 n. .s.e.c.u.r.i.
74 00 79 00 20 00 64 00 65 00 73 00 63 00 72 00 t.y. .d.e.s.c.r.
69 00 70 00 74 00 6f 00 72 00 20 00 6f 00 66 00 i.p.t.o.r. .o.f.
20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 .'.%.l.s.'.....
6f 00 77 00 6e 00 65 00 72 00 00 00 00 00 00 00 o.w.n.e.r.......
55 00 6e 00 6b 00 6e 00 6f 00 77 00 6e 00 20 00 U.n.k.n.o.w.n. .
25 00 6c 00 73 00 20 00 27 00 25 00 6c 00 73 00 %.l.s. .'.%.l.s.
27 00 20 00 69 00 6e 00 20 00 73 00 65 00 63 00 '. .i.n. .s.e.c.
75 00 72 00 69 00 74 00 79 00 20 00 64 00 65 00 u.r.i.t.y. .d.e.
73 00 63 00 72 00 69 00 70 00 74 00 6f 00 72 00 s.c.r.i.p.t.o.r.
20 00 6f 00 66 00 20 00 27 00 25 00 6c 00 73 00 .o.f. .'.%.l.s.
27 00 0a 00 00 00 00 00 25 00 6c 00 73 00 28 00 '.......%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 25 00 6c 00 73 00 20 00 6f 00 66 00 20 00 .%.l.s. .o.f. .
27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 00 00 '.%.l.s.'.......
25 00 6c 00 73 00 28 00 29 00 20 00 66 00 61 00 %.l.s.(.). .f.a.
69 00 6c 00 65 00 64 00 20 00 66 00 6f 00 72 00 i.l.e.d. .f.o.r.
20 00 25 00 6c 00 73 00 20 00 6f 00 66 00 20 00 .%.l.s. .o.f. .
27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 00 00 '.%.l.s.'.......
49 00 73 00 56 00 61 00 6c 00 69 00 64 00 53 00 I.s.V.a.l.i.d.S.
65 00 63 00 75 00 72 00 69 00 74 00 79 00 44 00 e.c.u.r.i.t.y.D.
65 00 73 00 63 00 72 00 69 00 70 00 74 00 6f 00 e.s.c.r.i.p.t.o.
72 00 00 00 73 00 65 00 63 00 75 00 72 00 69 00 r...s.e.c.u.r.i.
74 00 79 00 20 00 64 00 65 00 73 00 63 00 72 00 t.y. .d.e.s.c.r.
69 00 70 00 74 00 6f 00 72 00 00 00 00 00 00 00 i.p.t.o.r.......
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 27 00 25 00 6c 00 .f.o.r. .'.%.l.
73 00 27 00 0a 00 00 00 47 00 65 00 74 00 4e 00 s.'.....G.e.t.N.
61 00 6d 00 65 00 64 00 53 00 65 00 63 00 75 00 a.m.e.d.S.e.c.u.
72 00 69 00 74 00 79 00 49 00 6e 00 66 00 6f 00 r.i.t.y.I.n.f.o.
00 00 00 00 46 00 69 00 6e 00 64 00 46 00 69 00 ....F.i.n.d.F.i.
72 00 73 00 74 00 46 00 69 00 6c 00 65 00 00 00 r.s.t.F.i.l.e...
46 00 69 00 6e 00 64 00 43 00 6c 00 6f 00 73 00 F.i.n.d.C.l.o.s.
65 00 00 00 46 00 69 00 6e 00 64 00 4e 00 65 00 e...F.i.n.d.N.e.
78 00 74 00 46 00 69 00 6c 00 65 00 00 00 00 00 x.t.F.i.l.e.....
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 70 00 61 00 74 00 .f.o.r. .p.a.t.
68 00 20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 h. .'.%.l.s.'...
00 00 00 00 00 00 00 00 4e 00 6f 00 20 00 77 00 ........N.o. .w.
69 00 6c 00 64 00 63 00 61 00 72 00 64 00 20 00 i.l.d.c.a.r.d. .
6d 00 61 00 74 00 63 00 68 00 20 00 66 00 6f 00 m.a.t.c.h. .f.o.
72 00 20 00 61 00 72 00 67 00 75 00 6d 00 65 00 r. .a.r.g.u.m.e.
6e 00 74 00 20 00 27 00 25 00 6c 00 73 00 27 00 n.t. .'.%.l.s.'.
21 00 0a 00 00 00 00 00 41 00 72 00 67 00 75 00 !.......A.r.g.u.
6d 00 65 00 6e 00 74 00 20 00 27 00 25 00 6c 00 m.e.n.t. .'.%.l.
73 00 27 00 20 00 65 00 78 00 63 00 65 00 65 00 s.'. .e.x.c.e.e.
64 00 73 00 20 00 4d 00 41 00 58 00 5f 00 50 00 d.s. .M.A.X._.P.
41 00 54 00 48 00 21 00 0a 00 00 00 00 00 00 00 A.T.H.!.........
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 61 00 72 00 67 00 .f.o.r. .a.r.g.
75 00 6d 00 65 00 6e 00 74 00 20 00 27 00 25 00 u.m.e.n.t. .'.%.
6c 00 73 00 27 00 0a 00 00 00 00 00 43 00 6c 00 l.s.'.......C.l.
6f 00 73 00 65 00 48 00 61 00 6e 00 64 00 6c 00 o.s.e.H.a.n.d.l.
65 00 00 00 41 00 64 00 6a 00 75 00 73 00 74 00 e...A.d.j.u.s.t.
54 00 6f 00 6b 00 65 00 6e 00 50 00 72 00 69 00 T.o.k.e.n.P.r.i.
76 00 69 00 6c 00 65 00 67 00 65 00 73 00 00 00 v.i.l.e.g.e.s...
4f 00 70 00 65 00 6e 00 50 00 72 00 6f 00 63 00 O.p.e.n.P.r.o.c.
65 00 73 00 73 00 54 00 6f 00 6b 00 65 00 6e 00 e.s.s.T.o.k.e.n.
00 00 00 00 00 00 00 00 4e 00 6f 00 20 00 61 00 ........N.o. .a.
72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 73 00 r.g.u.m.e.n.t.s.
3a 00 20 00 61 00 74 00 20 00 6c 00 65 00 61 00 :. .a.t. .l.e.a.
73 00 74 00 20 00 6f 00 6e 00 65 00 20 00 64 00 s.t. .o.n.e. .d.
69 00 72 00 65 00 63 00 74 00 6f 00 72 00 79 00 i.r.e.c.t.o.r.y.
20 00 6f 00 72 00 20 00 66 00 69 00 6c 00 65 00 .o.r. .f.i.l.e.
20 00 6e 00 61 00 6d 00 65 00 20 00 6d 00 75 00 .n.a.m.e. .m.u.
73 00 74 00 20 00 62 00 65 00 20 00 67 00 69 00 s.t. .b.e. .g.i.
76 00 65 00 6e 00 21 00 0a 00 00 00 43 00 6f 00 v.e.n.!.....C.o.
6d 00 6d 00 61 00 6e 00 64 00 4c 00 69 00 6e 00 m.m.a.n.d.L.i.n.
65 00 54 00 6f 00 41 00 72 00 67 00 76 00 00 00 e.T.o.A.r.g.v...
b9 79 37 9e 00 00 00 00 5c 00 00 00 45 54 41 44 .y7.....\...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 d0 28 01 00 00 00 00 00 00 00 00 00 .....(..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 84 29 00 00 00 00 00 00 00 00 00 00 .....)..........
96 2a 00 00 00 20 00 00 a8 29 00 00 00 00 00 00 .*... ...)......
00 00 00 00 84 2b 00 00 24 20 00 00 e4 29 00 00 .....+..$ ...)..
00 00 00 00 00 00 00 00 a0 2b 00 00 60 20 00 00 .........+..` ..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 ec 29 00 00 fa 29 00 00 14 2a 00 00 .....)...)...*..
28 2a 00 00 36 2a 00 00 52 2a 00 00 6a 2a 00 00 (*..6*..R*..j*..
82 2a 00 00 00 00 00 00 a4 2a 00 00 b4 2a 00 00 .*.......*...*..
c0 2a 00 00 d0 2a 00 00 dc 2a 00 00 ec 2a 00 00 .*...*...*...*..
fe 2a 00 00 0c 2b 00 00 22 2b 00 00 30 2b 00 00 .*...+.."+..0+..
42 2b 00 00 52 2b 00 00 66 2b 00 00 76 2b 00 00 B+..R+..f+..v+..
00 00 00 00 92 2b 00 00 00 00 00 00 83 01 49 73 .....+........Is
56 61 6c 69 64 41 63 6c 00 00 6c 00 43 6f 6e 76 ValidAcl..l.Conv
65 72 74 53 69 64 54 6f 53 74 72 69 6e 67 53 69 ertSidToStringSi
64 57 00 00 91 01 4c 6f 6f 6b 75 70 41 63 63 6f dW....LookupAcco
75 6e 74 53 69 64 57 00 86 01 49 73 56 61 6c 69 untSidW...IsVali
64 53 69 64 00 00 85 01 49 73 56 61 6c 69 64 53 dSid....IsValidS
65 63 75 72 69 74 79 44 65 73 63 72 69 70 74 6f ecurityDescripto
72 00 42 01 47 65 74 4e 61 6d 65 64 53 65 63 75 r.B.GetNamedSecu
72 69 74 79 49 6e 66 6f 57 00 1f 00 41 64 6a 75 rityInfoW...Adju
73 74 54 6f 6b 65 6e 50 72 69 76 69 6c 65 67 65 stTokenPrivilege
73 00 f7 01 4f 70 65 6e 50 72 6f 63 65 73 73 54 s...OpenProcessT
6f 6b 65 6e 00 00 41 44 56 41 50 49 33 32 2e 64 oken..ADVAPI32.d
6c 6c 00 00 24 05 57 72 69 74 65 43 6f 6e 73 6f ll..$.WriteConso
6c 65 57 00 48 03 4c 6f 63 61 6c 46 72 65 65 00 leW.H.LocalFree.
02 02 47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 ..GetLastError..
2e 01 46 69 6e 64 43 6c 6f 73 65 00 45 01 46 69 ..FindClose.E.Fi
6e 64 4e 65 78 74 46 69 6c 65 57 00 39 01 46 69 ndNextFileW.9.Fi
6e 64 46 69 72 73 74 46 69 6c 65 57 00 00 19 01 ndFirstFileW....
45 78 69 74 50 72 6f 63 65 73 73 00 ea 01 47 65 ExitProcess...Ge
74 46 69 6c 65 41 74 74 72 69 62 75 74 65 73 57 tFileAttributesW
00 00 52 00 43 6c 6f 73 65 48 61 6e 64 6c 65 00 ..R.CloseHandle.
87 01 47 65 74 43 6f 6d 6d 61 6e 64 4c 69 6e 65 ..GetCommandLine
57 00 64 02 47 65 74 53 74 64 48 61 6e 64 6c 65 W.d.GetStdHandle
00 00 c0 01 47 65 74 43 75 72 72 65 6e 74 50 72 ....GetCurrentPr
6f 63 65 73 73 00 73 04 53 65 74 4c 61 73 74 45 ocess.s.SetLastE
72 72 6f 72 00 00 44 03 4c 6f 63 61 6c 41 6c 6c rror..D.LocalAll
6f 63 00 00 4b 45 52 4e 45 4c 33 32 2e 64 6c 6c oc..KERNEL32.dll
00 00 35 03 77 76 73 70 72 69 6e 74 66 57 00 00 ..5.wvsprintfW..
55 53 45 52 33 32 2e 64 6c 6c 00 00 00 00 00 00 USER32.dll......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 04 00 00 00 00 00 01 00 ................
18 00 00 00 18 00 00 80 00 00 00 00 00 00 00 00 ................
04 00 00 00 00 00 01 00 01 00 00 00 30 00 00 80 ............0...
00 00 00 00 00 00 00 00 04 00 00 00 00 00 01 00 ................
09 04 00 00 48 00 00 00 58 30 00 00 8e 05 00 00 ....H...X0......
e4 04 00 00 00 00 00 00 3c 61 73 73 65 6d 62 6c ........<assembl
79 20 78 6d 6c 6e 73 3d 27 75 72 6e 3a 73 63 68 y xmlns='urn:sch
65 6d 61 73 2d 6d 69 63 72 6f 73 6f 66 74 2d 63 emas-microsoft-c
6f 6d 3a 61 73 6d 2e 76 31 27 20 6d 61 6e 69 66 om:asm.v1' manif
65 73 74 56 65 72 73 69 6f 6e 3d 27 31 2e 30 27 estVersion='1.0'
3e 0d 0a 20 20 20 20 3c 61 73 73 65 6d 62 6c 79 >.. <assembly
49 64 65 6e 74 69 74 79 20 6e 61 6d 65 3d 27 65 Identity name='e
53 4b 61 6d 61 74 69 6f 6e 2e 54 69 64 62 69 74 SKamation.Tidbit
73 2e 53 65 63 75 72 69 74 79 20 44 65 73 63 72 s.Security Descr
69 70 74 6f 72 20 49 6e 73 70 65 63 74 6f 72 27 iptor Inspector'
20 70 72 6f 63 65 73 73 6f 72 41 72 63 68 69 74 processorArchit
65 63 74 75 72 65 3d 27 2a 27 20 74 79 70 65 3d ecture='*' type=
27 77 69 6e 33 32 27 20 76 65 72 73 69 6f 6e 3d 'win32' version=
27 30 2e 38 2e 31 2e 35 27 20 2f 3e 0d 0a 20 20 '0.8.1.5' />..
20 20 3c 61 70 70 6c 69 63 61 74 69 6f 6e 20 78 <application x
6d 6c 6e 73 3d 27 75 72 6e 3a 73 63 68 65 6d 61 mlns='urn:schema
73 2d 6d 69 63 72 6f 73 6f 66 74 2d 63 6f 6d 3a s-microsoft-com:
61 73 6d 2e 76 33 27 3e 0d 0a 20 20 20 20 20 20 asm.v3'>..
20 20 3c 77 69 6e 64 6f 77 73 53 65 74 74 69 6e <windowsSettin
67 73 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 gs>..
20 3c 68 65 61 70 54 79 70 65 20 78 6d 6c 6e 73 <heapType xmlns
3d 27 68 74 74 70 3a 2f 2f 73 63 68 65 6d 61 73 ='http://schemas
2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f 53 .microsoft.com/S
4d 49 2f 32 30 32 30 2f 57 69 6e 64 6f 77 73 53 MI/2020/WindowsS
65 74 74 69 6e 67 73 27 3e 53 65 67 6d 65 6e 74 ettings'>Segment
48 65 61 70 3c 2f 68 65 61 70 54 79 70 65 3e 0d Heap</heapType>.
0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 6c 6f . <lo
6e 67 50 61 74 68 41 77 61 72 65 20 78 6d 6c 6e ngPathAware xmln
73 3d 27 68 74 74 70 3a 2f 2f 73 63 68 65 6d 61 s='http://schema
73 2e 6d 69 63 72 6f 73 6f 66 74 2e 63 6f 6d 2f s.microsoft.com/
53 4d 49 2f 32 30 31 36 2f 57 69 6e 64 6f 77 73 SMI/2016/Windows
53 65 74 74 69 6e 67 73 27 3e 74 72 75 65 3c 2f Settings'>true</
6c 6f 6e 67 50 61 74 68 41 77 61 72 65 3e 0d 0a longPathAware>..
20 20 20 20 20 20 20 20 3c 2f 77 69 6e 64 6f 77 </window
73 53 65 74 74 69 6e 67 73 3e 0d 0a 20 20 20 20 sSettings>..
3c 2f 61 70 70 6c 69 63 61 74 69 6f 6e 3e 0d 0a </application>..
20 20 20 20 3c 63 6f 6d 70 61 74 69 62 69 6c 69 <compatibili
74 79 20 78 6d 6c 6e 73 3d 27 75 72 6e 3a 73 63 ty xmlns='urn:sc
68 65 6d 61 73 2d 6d 69 63 72 6f 73 6f 66 74 2d hemas-microsoft-
63 6f 6d 3a 63 6f 6d 70 61 74 69 62 69 6c 69 74 com:compatibilit
79 2e 76 31 27 3e 0d 0a 20 20 20 20 20 20 20 20 y.v1'>..
3c 61 70 70 6c 69 63 61 74 69 6f 6e 3e 0d 0a 20 <application>..
20 20 20 20 20 20 20 20 20 20 20 3c 73 75 70 70 <supp
6f 72 74 65 64 4f 53 20 49 64 3d 27 7b 65 32 30 ortedOS Id='{e20
31 31 34 35 37 2d 31 35 34 36 2d 34 33 63 35 2d 11457-1546-43c5-
61 35 66 65 2d 30 30 38 64 65 65 65 33 64 33 66 a5fe-008deee3d3f
30 7d 27 20 2f 3e 0d 0a 20 20 20 20 20 20 20 20 0}' />..
20 20 20 20 3c 73 75 70 70 6f 72 74 65 64 4f 53 <supportedOS
20 49 64 3d 27 7b 33 35 31 33 38 62 39 61 2d 35 Id='{35138b9a-5
64 39 36 2d 34 66 62 64 2d 38 65 32 64 2d 61 32 d96-4fbd-8e2d-a2
34 34 30 32 32 35 66 39 33 61 7d 27 20 2f 3e 0d 440225f93a}' />.
0a 20 20 20 20 20 20 20 20 20 20 20 20 3c 73 75 . <su
70 70 6f 72 74 65 64 4f 53 20 49 64 3d 27 7b 34 pportedOS Id='{4
61 32 66 32 38 65 33 2d 35 33 62 39 2d 34 34 34 a2f28e3-53b9-444
31 2d 62 61 39 63 2d 64 36 39 64 34 61 34 61 36 1-ba9c-d69d4a4a6
65 33 38 7d 27 20 2f 3e 0d 0a 20 20 20 20 20 20 e38}' />..
20 20 20 20 20 20 3c 73 75 70 70 6f 72 74 65 64 <supported
4f 53 20 49 64 3d 27 7b 31 66 36 37 36 63 37 36 OS Id='{1f676c76
2d 38 30 65 31 2d 34 32 33 39 2d 39 35 62 62 2d -80e1-4239-95bb-
38 33 64 30 66 36 64 30 64 61 37 38 7d 27 20 2f 83d0f6d0da78}' /
3e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 3c >.. <
73 75 70 70 6f 72 74 65 64 4f 53 20 49 64 3d 27 supportedOS Id='
7b 38 65 30 66 37 61 31 32 2d 62 66 62 33 2d 34 {8e0f7a12-bfb3-4
66 65 38 2d 62 39 61 35 2d 34 38 66 64 35 30 61 fe8-b9a5-48fd50a
31 35 61 39 61 7d 27 20 2f 3e 0d 0a 20 20 20 20 15a9a}' />..
20 20 20 20 3c 2f 61 70 70 6c 69 63 61 74 69 6f </applicatio
6e 3e 0d 0a 20 20 20 20 3c 2f 63 6f 6d 70 61 74 n>.. </compat
69 62 69 6c 69 74 79 3e 0d 0a 20 20 20 20 3c 64 ibility>.. <d
65 73 63 72 69 70 74 69 6f 6e 3e 53 65 63 75 72 escription>Secur
69 74 79 20 44 65 73 63 72 69 70 74 6f 72 20 49 ity Descriptor I
6e 73 70 65 63 74 6f 72 3c 2f 64 65 73 63 72 69 nspector</descri
70 74 69 6f 6e 3e 0d 0a 20 20 20 20 3c 74 72 75 ption>.. <tru
73 74 49 6e 66 6f 20 78 6d 6c 6e 73 3d 27 75 72 stInfo xmlns='ur
6e 3a 73 63 68 65 6d 61 73 2d 6d 69 63 72 6f 73 n:schemas-micros
6f 66 74 2d 63 6f 6d 3a 61 73 6d 2e 76 32 27 3e oft-com:asm.v2'>
0d 0a 20 20 20 20 20 20 20 20 3c 73 65 63 75 72 .. <secur
69 74 79 3e 0d 0a 20 20 20 20 20 20 20 20 20 20 ity>..
20 20 3c 72 65 71 75 65 73 74 65 64 50 72 69 76 <requestedPriv
69 6c 65 67 65 73 3e 0d 0a 20 20 20 20 20 20 20 ileges>..
20 20 20 20 20 20 20 20 20 3c 72 65 71 75 65 73 <reques
74 65 64 45 78 65 63 75 74 69 6f 6e 4c 65 76 65 tedExecutionLeve
6c 20 6c 65 76 65 6c 3d 27 68 69 67 68 65 73 74 l level='highest
41 76 61 69 6c 61 62 6c 65 27 20 75 69 41 63 63 Available' uiAcc
65 73 73 3d 27 66 61 6c 73 65 27 20 2f 3e 0d 0a ess='false' />..
20 20 20 20 20 20 20 20 20 20 20 20 3c 2f 72 65 </re
71 75 65 73 74 65 64 50 72 69 76 69 6c 65 67 65 questedPrivilege
73 3e 0d 0a 20 20 20 20 20 20 20 20 3c 2f 73 65 s>.. </se
63 75 72 69 74 79 3e 0d 0a 20 20 20 20 3c 2f 74 curity>.. </t
72 75 73 74 49 6e 66 6f 3e 0d 0a 3c 2f 61 73 73 rustInfo>..</ass
65 6d 62 6c 79 3e 00 00 00 00 00 00 00 00 00 00 embly>..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file SECURITY.TXT
created in
step 5. to recreate the console application
Security Descriptor Inspector:
CERTUTIL.EXE /DecodeHex /V SECURITY.TXT SECURITY.COM
Input Length = 36992 Output Length = 8704 CertUtil: -decodehex command completed successfully.
SIDEREAL.COM
VER .\SIDEREAL.COMVer
Microsoft Windows [Version 10.0.19044.2486] S-1-0-0: well-known group 'NULL SID' S-1-1-0: well-known group 'Everyone' S-1-2-0: well-known group 'LOCAL' S-1-2-1: well-known group 'CONSOLE LOGON' S-1-3-0: well-known group 'CREATOR OWNER' S-1-3-1: well-known group 'CREATOR GROUP' S-1-3-2: well-known group 'CREATOR OWNER SERVER' S-1-3-3: well-known group 'CREATOR GROUP SERVER' S-1-3-4: well-known group 'OWNER RIGHTS' S-1-5: domain 'NT Pseudo Domain\NT Pseudo Domain' S-1-5-1: well-known group 'NT AUTHORITY\DIALUP' S-1-5-2: well-known group 'NT AUTHORITY\NETWORK' S-1-5-3: well-known group 'NT AUTHORITY\BATCH' S-1-5-4: well-known group 'NT AUTHORITY\INTERACTIVE' S-1-5-6: well-known group 'NT AUTHORITY\SERVICE' S-1-5-7: well-known group 'NT AUTHORITY\ANONYMOUS LOGON' S-1-5-8: well-known group 'NT AUTHORITY\PROXY' S-1-5-9: well-known group 'NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS' S-1-5-10: well-known group 'NT AUTHORITY\SELF' S-1-5-11: well-known group 'NT AUTHORITY\Authenticated Users' S-1-5-12: well-known group 'NT AUTHORITY\RESTRICTED' S-1-5-13: well-known group 'NT AUTHORITY\TERMINAL SERVER USER' S-1-5-14: well-known group 'NT AUTHORITY\REMOTE INTERACTIVE LOGON' S-1-5-15: well-known group 'NT AUTHORITY\This Organization' S-1-5-17: well-known group 'NT AUTHORITY\IUSR' S-1-5-18: well-known group 'NT AUTHORITY\SYSTEM' S-1-5-19: well-known group 'NT AUTHORITY\LOCAL SERVICE' S-1-5-20: well-known group 'NT AUTHORITY\NETWORK SERVICE' S-1-5-22: well-known group 'NT AUTHORITY\ENTERPRISE READ-ONLY DOMAIN CONTROLLERS BETA' S-1-5-32: domain 'BUILTIN\BUILTIN' S-1-5-32-544: alias 'BUILTIN\Administrators' S-1-5-32-545: alias 'BUILTIN\Users' S-1-5-32-546: alias 'BUILTIN\Guests' S-1-5-32-547: alias 'BUILTIN\Power Users' S-1-5-32-551: alias 'BUILTIN\Backup Operators' S-1-5-32-552: alias 'BUILTIN\Replicator' S-1-5-32-555: alias 'BUILTIN\Remote Desktop Users' S-1-5-32-556: alias 'BUILTIN\Network Configuration Operators' S-1-5-32-558: alias 'BUILTIN\Performance Monitor Users' S-1-5-32-559: alias 'BUILTIN\Performance Log Users' S-1-5-32-562: alias 'BUILTIN\Distributed COM Users' S-1-5-32-568: alias 'BUILTIN\IIS_IUSRS' S-1-5-32-569: alias 'BUILTIN\Cryptographic Operators' S-1-5-32-573: alias 'BUILTIN\Event Log Readers' S-1-5-32-578: alias 'BUILTIN\Hyper-V Administrators' S-1-5-32-579: alias 'BUILTIN\Access Control Assistance Operators' S-1-5-32-580: alias 'BUILTIN\Remote Management Users' S-1-5-32-581: alias 'BUILTIN\System Managed Accounts Group' S-1-5-32-583: alias 'BUILTIN\Device Owners' S-1-5-33: well-known group 'NT AUTHORITY\WRITE RESTRICTED' S-1-5-64-10: well-known group 'NT AUTHORITY\NTLM Authentication' S-1-5-64-14: well-known group 'NT AUTHORITY\SChannel Authentication' S-1-5-64-21: well-known group 'NT AUTHORITY\Digest Authentication' S-1-5-64-32: well-known group 'NT AUTHORITY\Microsoft Account Authentication' S-1-5-65-1: well-known group 'NT AUTHORITY\This Organization Certificate' S-1-5-80: domain 'NT SERVICE\NT SERVICE' S-1-5-80-0: well-known group 'NT SERVICE\ALL SERVICES' S-1-5-87: domain 'NT TASK\NT TASK' S-1-5-90: domain 'Window Manager\Window Manager' S-1-5-90-0: well-known group 'Window Manager\Window Manager Group' S-1-5-96: domain 'Font Driver Host\Font Driver Host' S-1-5-113: well-known group 'NT AUTHORITY\Local account' S-1-5-114: well-known group 'NT AUTHORITY\Local account and member of Administrators group' S-1-5-1000: well-known group 'NT AUTHORITY\Other Organization' S-1-7: domain 'Internet$\Internet$' S-1-15-2-1: well-known group 'APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES' S-1-15-3-1: well-known group 'APPLICATION PACKAGE AUTHORITY\Your Internet connection' S-1-15-3-2: well-known group 'APPLICATION PACKAGE AUTHORITY\Your Internet connection, including incoming connections from the Internet' S-1-15-3-3: well-known group 'APPLICATION PACKAGE AUTHORITY\Your home or work networks' S-1-15-3-4: well-known group 'APPLICATION PACKAGE AUTHORITY\Your pictures library' S-1-15-3-5: well-known group 'APPLICATION PACKAGE AUTHORITY\Your videos library' S-1-15-3-6: well-known group 'APPLICATION PACKAGE AUTHORITY\Your music library' S-1-15-3-7: well-known group 'APPLICATION PACKAGE AUTHORITY\Your documents library' S-1-15-3-8: well-known group 'APPLICATION PACKAGE AUTHORITY\Your Windows credentials' S-1-15-3-9: well-known group 'APPLICATION PACKAGE AUTHORITY\Software and hardware certificates or a smart card' S-1-15-3-10: well-known group 'APPLICATION PACKAGE AUTHORITY\Removable storage' S-1-15-3-11: well-known group 'APPLICATION PACKAGE AUTHORITY\Your Appointments' S-1-15-3-12: well-known group 'APPLICATION PACKAGE AUTHORITY\Your Contacts' S-1-16: domain 'Mandatory Label\Mandatory Label' S-1-16-0: label 'Mandatory Label\Untrusted Mandatory Level' S-1-16-4096: label 'Mandatory Label\Low Mandatory Level' S-1-16-8192: label 'Mandatory Label\Medium Mandatory Level' S-1-16-8448: label 'Mandatory Label\Medium Plus Mandatory Level' S-1-16-12288: label 'Mandatory Label\High Mandatory Level' S-1-16-16384: label 'Mandatory Label\System Mandatory Level' S-1-16-20480: label 'Mandatory Label\Protected Process Mandatory Level' S-1-18-1: well-known group 'Authentication authority asserted identity' S-1-18-2: well-known group 'Service asserted identity' S-1-18-3: well-known group 'Fresh public key identity' S-1-18-4: well-known group 'Key trust identity' S-1-18-5: well-known group 'Key property multi-factor authentication' S-1-18-6: well-known group 'Key property attestation' S-1-5-21-0-0-0-496: well-known group 'NT AUTHORITY\Compound Identity Present' S-1-5-21-0-0-0-497: well-known group 'NT AUTHORITY\Claims Valid' S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464: well-known group 'NT SERVICE\TrustedInstaller' S-1-5-84-0-0-0-0-0: well-known group 'NT AUTHORITY\USER MODE DRIVERS' S-1-5-21-820728443-44925810-1835867902: domain 'AMNESIAC' S-1-5-21-820728443-44925810-1835867902-500: user 'AMNESIAC\Administrator' S-1-5-21-820728443-44925810-1835867902-501: user 'AMNESIAC\Guest' S-1-5-21-820728443-44925810-1835867902-503: user 'AMNESIAC\DefaultAccount' S-1-5-21-820728443-44925810-1835867902-504: user 'AMNESIAC\WDAGUtilityAccount' S-1-5-21-820728443-44925810-1835867902-513: group 'AMNESIAC\None' S-1-5-21-820728443-44925810-1835867902-1000: user 'AMNESIAC\Stefan'
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and SIDEREAL.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file SIDEREAL.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <sddl.h>
#include <lmcons.h>
#ifndef SECURITY_LOCAL_LOGON_RID
#define SECURITY_LOCAL_LOGON_RID 1UL
#endif
#ifndef SECURITY_CREATOR_OWNER_RIGHTS_RID
#define SECURITY_CREATOR_OWNER_RIGHTS_RID 4UL
#endif
#ifndef DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS
#define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS 498UL
#endif
#ifndef DOMAIN_GROUP_RID_READONLY_CONTROLLERS
#define DOMAIN_GROUP_RID_READONLY_CONTROLLERS 521UL
#endif
#ifndef DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS
#define DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS 522UL
#endif
#ifndef DOMAIN_GROUP_RID_PROTECTED_USERS
#define DOMAIN_GROUP_RID_PROTECTED_USERS 525UL
#endif
#ifndef DOMAIN_GROUP_RID_KEY_ADMINS
#define DOMAIN_GROUP_RID_KEY_ADMINS 526UL
#endif
#ifndef DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS
#define DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS 527UL
#endif
#ifndef DOMAIN_ALIAS_RID_IUSERS
#define DOMAIN_ALIAS_RID_IUSERS 568UL
#endif
#ifndef DOMAIN_ALIAS_RID_CRYPTO_OPERATORS
#define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS 569UL
#endif
#ifndef DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP
#define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP 571UL
#endif
#ifndef DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP
#define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP 572UL
#endif
#ifndef DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP
#define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP 573UL
#endif
#ifndef DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP
#define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP 574UL
#endif
#ifndef DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS
#define DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS 575UL
#endif
#ifndef DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS
#define DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS 576UL
#endif
#ifndef DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS
#define DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS 577UL
#endif
#ifndef DOMAIN_ALIAS_RID_HYPER_V_ADMINS
#define DOMAIN_ALIAS_RID_HYPER_V_ADMINS 578UL
#endif
#ifndef DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS
#define DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS 579UL
#endif
#ifndef DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS
#define DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS 580UL
#endif
#ifndef DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT
#define DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT 581UL
#endif
#ifndef DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS
#define DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS 582UL
#endif
#ifndef DOMAIN_ALIAS_RID_DEVICE_OWNERS
#define DOMAIN_ALIAS_RID_DEVICE_OWNERS 583UL
#endif
#ifndef SECURITY_IUSER_RID
#define SECURITY_IUSER_RID 17UL
#endif
#ifndef SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID
#define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID 22UL
#endif
#ifndef SECURITY_WRITE_RESTRICTED_CODE_RID
#define SECURITY_WRITE_RESTRICTED_CODE_RID 33UL
#endif
#ifndef SECURITY_CRED_TYPE_BASE_RID
#define SECURITY_CRED_TYPE_BASE_RID 65UL
#endif
#ifndef SECURITY_CRED_TYPE_THIS_ORG_CERT_RID
#define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID 1UL
#endif
#ifndef SECURITY_SERVICE_ID_BASE_RID
#define SECURITY_SERVICE_ID_BASE_RID 80UL
#endif
#ifndef SECURITY_TRUSTED_INSTALLER_RID1
#define SECURITY_TRUSTED_INSTALLER_RID1 956008885UL
#define SECURITY_TRUSTED_INSTALLER_RID2 3418522649UL
#define SECURITY_TRUSTED_INSTALLER_RID3 1831038044UL
#define SECURITY_TRUSTED_INSTALLER_RID4 1853292631UL
#define SECURITY_TRUSTED_INSTALLER_RID5 2271478464UL
#endif
#ifndef SECURITY_RESERVED_ID_BASE_RID
#define SECURITY_RESERVED_ID_BASE_RID 81UL
#endif
#ifndef SECURITY_APPPOOL_ID_BASE_RID
#define SECURITY_APPPOOL_ID_BASE_RID 82UL
#endif
#ifndef SECURITY_VIRTUALSERVER_ID_BASE_RID
#define SECURITY_VIRTUALSERVER_ID_BASE_RID 83UL
#endif
#ifndef SECURITY_USERMODEDRIVERHOST_ID_BASE_RID
#define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID 84UL
#endif
#ifndef SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID
#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID 85UL
#endif
#ifndef SECURITY_WMIHOST_ID_BASE_RID
#define SECURITY_WMIHOST_ID_BASE_RID 86UL
#endif
#ifndef SECURITY_TASK_ID_BASE_RID
#define SECURITY_TASK_ID_BASE_RID 87UL
#endif
#ifndef SECURITY_NFS_ID_BASE_RID
#define SECURITY_NFS_ID_BASE_RID 88UL
#endif
#ifndef SECURITY_COM_ID_BASE_RID
#define SECURITY_COM_ID_BASE_RID 89UL
#endif
#ifndef SECURITY_WINDOW_MANAGER_BASE_RID
#define SECURITY_WINDOW_MANAGER_BASE_RID 90UL
#endif
#ifndef SECURITY_RDV_GFX_BASE_RID
#define SECURITY_RDV_GFX_BASE_RID 91UL
#endif
#ifndef SECURITY_DASHOST_ID_BASE_RID
#define SECURITY_DASHOST_ID_BASE_RID 92UL
#endif
#ifndef SECURITY_USERMANAGER_ID_BASE_RID
#define SECURITY_USERMANAGER_ID_BASE_RID 93UL
#endif
#ifndef SECURITY_WINRM_ID_BASE_RID
#define SECURITY_WINRM_ID_BASE_RID 94UL
#endif
#ifndef SECURITY_WINDOWSMOBILE_ID_BASE_RID
#define SECURITY_WINDOWSMOBILE_ID_BASE_RID 112UL
#endif
#ifndef SECURITY_LOCAL_ACCOUNT_RID
#define SECURITY_LOCAL_ACCOUNT_RID 113UL
#endif
#ifndef SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID
#define SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID 114UL
#endif
#ifndef SECURITY_SITESERVER_AUTHORITY
#define SECURITY_SITESERVER_AUTHORITY {0, 0, 0, 0, 0, 6}
#endif
#ifndef SECURITY_INTERNETSITE_AUTHORITY
#define SECURITY_INTERNETSITE_AUTHORITY {0, 0, 0, 0, 0, 7}
#endif
#ifndef SECURITY_EXCHANGE_AUTHORITY
#define SECURITY_EXCHANGE_AUTHORITY {0, 0, 0, 0, 0, 8}
#endif
#ifndef SECURITY_PASSPORT_AUTHORITY
#define SECURITY_PASSPORT_AUTHORITY {0, 0, 0, 0, 0, 10}
#endif
#define SECURITY_MICROSOFT_AUTHORITY {0, 0, 0, 0, 0, 11}
#ifndef SECURITY_APP_PACKAGE_AUTHORITY
#define SECURITY_APP_PACKAGE_AUTHORITY {0, 0, 0, 0, 0, 15}
#define SECURITY_APP_PACKAGE_BASE_RID 2UL
#define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE 1UL
#define SECURITY_CAPABILITY_BASE_RID 3UL
#define SECURITY_CAPABILITY_INTERNET_CLIENT 1UL
#define SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER 2UL
#define SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER 3UL
#define SECURITY_CAPABILITY_PICTURES_LIBRARY 4UL
#define SECURITY_CAPABILITY_VIDEOS_LIBRARY 5UL
#define SECURITY_CAPABILITY_MUSIC_LIBRARY 6UL
#define SECURITY_CAPABILITY_DOCUMENTS_LIBRARY 7UL
#define SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION 8UL
#define SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES 9UL
#define SECURITY_CAPABILITY_REMOVABLE_STORAGE 10UL
#define SECURITY_CAPABILITY_APPOINTMENTS 11UL
#define SECURITY_CAPABILITY_CONTACTS 12UL
#define SECURITY_CAPABILITY_APP_RID 1024UL
#define SECURITY_CAPABILITY_INTERNET_EXPLORER 4096UL
#endif
#ifndef SECURITY_MANDATORY_LABEL_AUTHORITY
#define SECURITY_MANDATORY_LABEL_AUTHORITY {0, 0, 0, 0, 0, 16}
#define SECURITY_MANDATORY_UNTRUSTED_RID 0UL
#define SECURITY_MANDATORY_LOW_RID 4096UL
#define SECURITY_MANDATORY_MEDIUM_RID 8192UL
#define SECURITY_MANDATORY_MEDIUM_PLUS_RID (SECURITY_MANDATORY_MEDIUM_RID + 256UL)
#define SECURITY_MANDATORY_HIGH_RID 12288UL
#define SECURITY_MANDATORY_SYSTEM_RID 16384UL
#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID 20480UL
#endif
#ifndef SECURITY_MANDATORY_SECURE_PROCESS_RID
#define SECURITY_MANDATORY_SECURE_PROCESS_RID 28672UL
#endif
#ifndef SECURITY_SCOPED_POLICY_ID_AUTHORITY
#define SECURITY_SCOPED_POLICY_ID_AUTHORITY {0, 0, 0, 0, 0, 17}
#endif
#ifndef SECURITY_AUTHENTICATION_AUTHORITY
#define SECURITY_AUTHENTICATION_AUTHORITY {0, 0, 0, 0, 0, 18}
#define SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID 1UL
#define SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID 2UL
#define SECURITY_AUTHENTICATION_FRESH_KEY_AUTH_RID 3UL
#define SECURITY_AUTHENTICATION_KEY_TRUST_RID 4UL
#define SECURITY_AUTHENTICATION_KEY_PROPERTY_MFA_RID 5UL
#define SECURITY_AUTHENTICATION_KEY_PROPERTY_ATTESTATION_RID 6UL
#endif
#ifndef SECURITY_PROCESS_TRUST_AUTHORITY
#define SECURITY_PROCESS_TRUST_AUTHORITY {0, 0, 0, 0, 0, 19}
#define SECURITY_PROCESS_PROTECTION_TYPE_NONE_RID 0UL
#define SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID 512UL
#define SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID 1024UL
#define SECURITY_PROCESS_PROTECTION_LEVEL_NONE_RID 0UL
#define SECURITY_PROCESS_PROTECTION_LEVEL_AUTHENTICODE_RID 1024UL
#define SECURITY_PROCESS_PROTECTION_LEVEL_APP_RID 2048UL
#define SECURITY_PROCESS_PROTECTION_LEVEL_WINDOWS_RID 4096UL
#define SECURITY_PROCESS_PROTECTION_LEVEL_WINTCB_RID 8192UL
#endif
struct _SID2
{
BYTE Revision;
BYTE SubAuthorityCount;
SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
DWORD SubAuthority[2];
}
const sid2[] =
{
// S-1-0 =
{SID_REVISION, 0, SECURITY_NULL_SID_AUTHORITY, {0, 0}},
// S-1-0-0 = 'NULL SID'
{SID_REVISION, 1, SECURITY_NULL_SID_AUTHORITY, {SECURITY_NULL_RID, 0}},
// S-1-1 =
{SID_REVISION, 0, SECURITY_WORLD_SID_AUTHORITY, {0, 0}},
// S-1-1-0 = 'Everyone'
{SID_REVISION, 1, SECURITY_WORLD_SID_AUTHORITY, {SECURITY_WORLD_RID, 0}},
// S-1-2 =
{SID_REVISION, 0, SECURITY_LOCAL_SID_AUTHORITY, {0, 0}},
// S-1-2-0 = 'LOCAL'
{SID_REVISION, 1, SECURITY_LOCAL_SID_AUTHORITY, {SECURITY_LOCAL_RID, 0}},
// S-1-2-1 = 'CONSOLE LOGON'
{SID_REVISION, 1, SECURITY_LOCAL_SID_AUTHORITY, {SECURITY_LOCAL_LOGON_RID, 0}},
// S-1-3 =
{SID_REVISION, 0, SECURITY_CREATOR_SID_AUTHORITY, {0, 0}},
// S-1-3-0 = 'CREATOR OWNER'
{SID_REVISION, 1, SECURITY_CREATOR_SID_AUTHORITY, {SECURITY_CREATOR_OWNER_RID, 0}},
// S-1-3-1 = 'CREATOR GROUP'
{SID_REVISION, 1, SECURITY_CREATOR_SID_AUTHORITY, {SECURITY_CREATOR_GROUP_RID, 0}},
// S-1-3-2 = 'CREATOR OWNER SERVER'
{SID_REVISION, 1, SECURITY_CREATOR_SID_AUTHORITY, {SECURITY_CREATOR_OWNER_SERVER_RID, 0}},
// S-1-3-3 = 'CREATOR GROUP SERVER'
{SID_REVISION, 1, SECURITY_CREATOR_SID_AUTHORITY, {SECURITY_CREATOR_GROUP_SERVER_RID, 0}},
// S-1-3-4 = 'OWNER RIGHTS'
{SID_REVISION, 1, SECURITY_CREATOR_SID_AUTHORITY, {SECURITY_CREATOR_OWNER_RIGHTS_RID, 0}},
// S-1-4 =
{SID_REVISION, 0, SECURITY_NON_UNIQUE_AUTHORITY, {0, 0}},
// S-1-4-0 =
{SID_REVISION, 1, SECURITY_NON_UNIQUE_AUTHORITY, {0, 0}},
// S-1-5 = 'NT Pseudo Domain\NT Pseudo Domain'
{SID_REVISION, 0, SECURITY_NT_AUTHORITY, {0, 0}},
// S-1-5-1 = 'NT AUTHORITY\DIALUP'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_DIALUP_RID, 0}},
// S-1-5-2 = 'NT AUTHORITY\NETWORK'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_NETWORK_RID, 0}},
// S-1-5-3 = 'NT AUTHORITY\BATCH'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_BATCH_RID, 0}},
// S-1-5-4 = 'NT AUTHORITY\INTERACTIVE'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_INTERACTIVE_RID, 0}},
// S-1-5-5 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_LOGON_IDS_RID, 0}},
// S-1-5-5-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_LOGON_IDS_RID, 0}},
// S-1-5-6 = 'NT AUTHORITY\SERVICE'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_SERVICE_RID, 0}},
// S-1-5-7 = 'NT AUTHORITY\ANONYMOUS LOGON'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_ANONYMOUS_LOGON_RID, 0}},
// S-1-5-8 = 'NT AUTHORITY\PROXY'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_PROXY_RID, 0}},
// S-1-5-9 = 'NT AUTHORITY\ENTERPRISE DOMAIN CONTROLLERS'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_ENTERPRISE_CONTROLLERS_RID, 0}},
// S-1-5-10 = 'NT AUTHORITY\SELF'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_PRINCIPAL_SELF_RID, 0}},
// S-1-5-11 = 'NT AUTHORITY\Authenticated Users'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_AUTHENTICATED_USER_RID, 0}},
// S-1-5-12 = 'NT AUTHORITY\RESTRICTED'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_RESTRICTED_CODE_RID, 0}},
// S-1-5-13 = 'NT AUTHORITY\TERMINAL SERVER USER'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_TERMINAL_SERVER_RID, 0}},
// S-1-5-14 = 'NT AUTHORITY\REMOTE INTERACTIVE LOGON'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_REMOTE_LOGON_RID, 0}},
// S-1-5-15 = 'NT AUTHORITY\This Organization'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_THIS_ORGANIZATION_RID, 0}},
// S-1-5-16 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {16, 0}},
// S-1-5-17 = 'NT AUTHORITY\IUSR'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_IUSER_RID, 0}},
// S-1-5-18 = 'NT AUTHORITY\SYSTEM'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_LOCAL_SYSTEM_RID, 0}},
// S-1-5-19 = 'NT AUTHORITY\LOCAL SERVICE'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_LOCAL_SERVICE_RID, 0}},
// S-1-5-20 = 'NT AUTHORITY\NETWORK SERVICE'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_NETWORK_SERVICE_RID, 0}},
// S-1-5-21 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_NT_NON_UNIQUE, 0}},
// S-1-5-21-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_NT_NON_UNIQUE, 0}},
// S-1-5-21-1 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_NT_NON_UNIQUE, 1}},
// S-1-5-22 = 'NT AUTHORITY\ENTERPRISE READ-ONLY DOMAIN CONTROLLERS BETA'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID, 0}},
// S-1-5-32 = 'BUILTIN\BUILTIN'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, 0}},
// S-1-5-32-498 = 'BUILTIN\Enterprise Read-Only Domain Controllers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS}},
// S-1-5-32-500 = 'BUILTIN\Administrator'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_USER_RID_ADMIN}},
// S-1-5-32-501 = 'BUILTIN\User'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_USER_RID_GUEST}},
// S-1-5-32-502 = 'BUILTIN\Kerberos Ticket Granting Ticket'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_USER_RID_KRBTGT}},
// S-1-5-32-512 = 'BUILTIN\Domain Administrators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_ADMINS}},
// S-1-5-32-513 = 'BUILTIN\Domain Users'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_USERS}},
// S-1-5-32-514 = 'BUILTIN\Domain Guests'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_GUESTS}},
// S-1-5-32-515 = 'BUILTIN\Domain Computers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_COMPUTERS}},
// S-1-5-32-516 = 'BUILTIN\Domain Controllers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_CONTROLLERS}},
// S-1-5-32-517 = 'BUILTIN\Certificate Server Administrators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_CERT_ADMINS}},
// S-1-5-32-518 = 'BUILTIN\Schema Administrators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_SCHEMA_ADMINS}},
// S-1-5-32-519 = 'BUILTIN\Enterprise Administrators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_ENTERPRISE_ADMINS}},
// S-1-5-32-520 = 'BUILTIN\Group Policy Administrators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_POLICY_ADMINS}},
// S-1-5-32-521 = 'BUILTIN\Read-Only Domain Controllers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_READONLY_CONTROLLERS}},
// S-1-5-32-522 = 'BUILTIN\Cloneable Controllers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS}},
// S-1-5-32-525 = 'BUILTIN\Protected Users'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_PROTECTED_USERS}},
// S-1-5-32-526 = 'BUILTIN\Key Admins'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_KEY_ADMINS}},
// S-1-5-32-527 = 'BUILTIN\Enterprise Key Admins'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS}},
// S-1-5-32-544 = 'BUILTIN\Administrators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS}},
// S-1-5-32-545 = 'BUILTIN\Users'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_USERS}},
// S-1-5-32-546 = 'BUILTIN\Guests'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_GUESTS}},
// S-1-5-32-547 = 'BUILTIN\Power Users'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_POWER_USERS}},
// S-1-5-32-548 = 'BUILTIN\Account Operators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ACCOUNT_OPS}},
// S-1-5-32-549 = 'BUILTIN\System Operators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_SYSTEM_OPS}},
// S-1-5-32-550 = 'BUILTIN\Print Operators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_PRINT_OPS}},
// S-1-5-32-551 = 'BUILTIN\Backup Operators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_BACKUP_OPS}},
// S-1-5-32-552 = 'BUILTIN\Replicator'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_REPLICATOR}},
// S-1-5-32-553 = 'BUILTIN\RAS Servers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_RAS_SERVERS}},
// S-1-5-32-554 = 'BUILTIN\Pre-Windows 2000 Compatible Access'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_PREW2KCOMPACCESS}},
// S-1-5-32-555 = 'BUILTIN\Remote Desktop Users'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS}},
// S-1-5-32-556 = 'BUILTIN\Network Configuration Operators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS}},
// S-1-5-32-557 = 'BUILTIN\Incoming Forest Trust Builders'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS}},
// S-1-5-32-558 = 'BUILTIN\Performance Monitor Users'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_MONITORING_USERS}},
// S-1-5-32-559 = 'BUILTIN\Performance Log Users'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_LOGGING_USERS}},
// S-1-5-32-560 = 'BUILTIN\Windows Authorization Access Group'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS}},
// S-1-5-32-561 = 'BUILTIN\Terminal Server License Servers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS}},
// S-1-5-32-562 = 'BUILTIN\Distributed COM Users'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_DCOM_USERS}},
// S-1-5-32-568 = 'BUILTIN\IIS IUSRS'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_IUSERS}},
// S-1-5-32-569 = 'BUILTIN\Cryptographic Operators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_CRYPTO_OPERATORS}},
// S-1-5-32-571 = 'BUILTIN\Allowed RODC Password Replication Group'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP}},
// S-1-5-32-572 = 'BUILTIN\Denied RODC Password Replication Group'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP}},
// S-1-5-32-573 = 'BUILTIN\Event Log Readers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP}},
// S-1-5-32-574 = 'BUILTIN\Certificate Service DCOM Access'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP}},
// S-1-5-32-575 = 'BUILTIN\RDS Remote Access Servers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS}},
// S-1-5-32-576 = 'BUILTIN\RDS Endpoint Servers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS}},
// S-1-5-32-577 = 'BUILTIN\RDS Management Servers'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS}},
// S-1-5-32-578 = 'BUILTIN\Hyper-V Administrators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_HYPER_V_ADMINS}},
// S-1-5-32-579 = 'BUILTIN\Access Control Assistance Operators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS}},
// S-1-5-32-580 = 'BUILTIN\Remote Management Users'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS}},
// S-1-5-32-581 = 'BUILTIN\System Managed Accounts Group'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT}},
// S-1-5-32-582 = 'BUILTIN\Storage Replica Administrators'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS}},
// S-1-5-32-583 = 'BUILTIN\Device Owners'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_DEVICE_OWNERS}},
// S-1-5-33 = 'NT AUTHORITY\WRITE RESTRICTED'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_WRITE_RESTRICTED_CODE_RID, 0}},
// S-1-5-64 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_PACKAGE_BASE_RID, 0}},
// S-1-5-64-10 = 'NT AUTHORITY\NTLM Authentication'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_PACKAGE_BASE_RID, SECURITY_PACKAGE_NTLM_RID}},
// S-1-5-64-14 = 'NT AUTHORITY\SChannel Authentication'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_PACKAGE_BASE_RID, SECURITY_PACKAGE_SCHANNEL_RID}},
// S-1-5-64-21 = 'NT AUTHORITY\Digest Authentication'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_PACKAGE_BASE_RID, SECURITY_PACKAGE_DIGEST_RID}},
// S-1-5-64-32 = 'NT AUTHORITY\Microsoft Account Authentication'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_PACKAGE_BASE_RID, 32}},
// S-1-5-65 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_CRED_TYPE_BASE_RID, 0}},
// S-1-5-65-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_CRED_TYPE_BASE_RID, 0}},
// S-1-5-65-1 = 'NT AUTHORITY\This Organization Certificate'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_CRED_TYPE_BASE_RID, SECURITY_CRED_TYPE_THIS_ORG_CERT_RID}},
// S-1-5-80 = 'NT SERVICE\NT SERVICE'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_SERVICE_ID_BASE_RID, 0}},
// S-1-5-80-0 = 'NT SERVICE\ALL SERVICES'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_SERVICE_ID_BASE_RID, 0}},
// S-1-5-80-1 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_SERVICE_ID_BASE_RID, 1}},
// S-1-5-81 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_RESERVED_ID_BASE_RID, 0}},
// S-1-5-81-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_RESERVED_ID_BASE_RID, 0}},
// S-1-5-82 = 'IIS APPPOOL\IIS APPPOOL'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_APPPOOL_ID_BASE_RID, 0}},
// S-1-5-82-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_APPPOOL_ID_BASE_RID, 0}},
// S-1-5-83 = 'NT VIRTUAL MACHINE\NT VIRTUAL MACHINE'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_VIRTUALSERVER_ID_BASE_RID, 0}},
// S-1-5-83-0 = 'NT VIRTUAL MACHINE\Virtual Machines'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_VIRTUALSERVER_ID_BASE_RID, 0}},
// S-1-5-84 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_USERMODEDRIVERHOST_ID_BASE_RID, 0}},
// S-1-5-84-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_USERMODEDRIVERHOST_ID_BASE_RID, 0}},
// S-1-5-85 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID, 0}},
// S-1-5-85-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID, 0}},
// S-1-5-86 = 'WMI\WMI'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_WMIHOST_ID_BASE_RID, 0}},
// S-1-5-86-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_WMIHOST_ID_BASE_RID, 0}},
// S-1-5-87 = 'NT TASK\NT TASK'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_TASK_ID_BASE_RID, 0}},
// S-1-5-87-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_TASK_ID_BASE_RID, 0}},
// S-1-5-88 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_NFS_ID_BASE_RID, 0}},
// S-1-5-88-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_NFS_ID_BASE_RID, 0}},
// S-1-5-89 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_COM_ID_BASE_RID, 0}},
// S-1-5-89-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_COM_ID_BASE_RID, 0}},
// S-1-5-90 = 'Window Manager\Window Manager'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_WINDOW_MANAGER_BASE_RID, 0}},
// S-1-5-90-0 = 'Window Manager\Window Manager Group'
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_WINDOW_MANAGER_BASE_RID, 0}},
// S-1-5-91 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_RDV_GFX_BASE_RID, 0}},
// S-1-5-91-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_RDV_GFX_BASE_RID, 0}},
// S-1-5-92 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_DASHOST_ID_BASE_RID, 0}},
// S-1-5-92-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_DASHOST_ID_BASE_RID, 0}},
// S-1-5-93 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_USERMANAGER_ID_BASE_RID, 0}},
// S-1-5-93-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_USERMANAGER_ID_BASE_RID, 0}},
// S-1-5-94 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_WINRM_ID_BASE_RID, 0}},
// S-1-5-94-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_WINRM_ID_BASE_RID, 0}},
// S-1-5-95 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {95, 0}},
// S-1-5-95-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {95, 0}},
// S-1-5-96 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {96, 0}},
// S-1-5-96-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {96, 0}},
// S-1-5-112 =
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_WINDOWSMOBILE_ID_BASE_RID, 0}},
// S-1-5-112-0 =
{SID_REVISION, 2, SECURITY_NT_AUTHORITY, {SECURITY_WINDOWSMOBILE_ID_BASE_RID, 0}},
// S-1-5-113 = 'NT AUTHORITY\Local Account'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_LOCAL_ACCOUNT_RID, 0}},
// S-1-5-114 = 'NT AUTHORITY\Local Account and Member of Administrators Group'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID, 0}},
// S-1-5-1000 = 'NT AUTHORITY\Other Organization'
{SID_REVISION, 1, SECURITY_NT_AUTHORITY, {SECURITY_OTHER_ORGANIZATION_RID, 0}},
// S-1-6 =
{SID_REVISION, 0, SECURITY_SITESERVER_AUTHORITY, {0, 0}},
// S-1-6-0 =
{SID_REVISION, 1, SECURITY_SITESERVER_AUTHORITY, {0, 0}},
// S-1-6-0-0 =
{SID_REVISION, 2, SECURITY_SITESERVER_AUTHORITY, {0, 0}},
// S-1-6-0-1 =
{SID_REVISION, 2, SECURITY_SITESERVER_AUTHORITY, {0, 1}},
// S-1-7 = 'Internet$\Internet$'
{SID_REVISION, 0, SECURITY_INTERNETSITE_AUTHORITY, {0, 0}},
// S-1-7-0 =
{SID_REVISION, 1, SECURITY_INTERNETSITE_AUTHORITY, {0, 0}},
// S-1-7-0-0 =
{SID_REVISION, 2, SECURITY_INTERNETSITE_AUTHORITY, {0, 0}},
// S-1-7-0-1 =
{SID_REVISION, 2, SECURITY_INTERNETSITE_AUTHORITY, {0, 1}},
// S-1-8 =
{SID_REVISION, 0, SECURITY_EXCHANGE_AUTHORITY, {0, 0}},
// S-1-8-0 =
{SID_REVISION, 1, SECURITY_EXCHANGE_AUTHORITY, {0, 0}},
// S-1-8-0-0 =
{SID_REVISION, 2, SECURITY_EXCHANGE_AUTHORITY, {0, 0}},
// S-1-8-0-1 =
{SID_REVISION, 2, SECURITY_EXCHANGE_AUTHORITY, {0, 1}},
// S-1-9 =
{SID_REVISION, 0, SECURITY_RESOURCE_MANAGER_AUTHORITY, {0, 0}},
// S-1-9-0 =
{SID_REVISION, 1, SECURITY_RESOURCE_MANAGER_AUTHORITY, {0, 0}},
// S-1-9-0-0 =
{SID_REVISION, 2, SECURITY_RESOURCE_MANAGER_AUTHORITY, {0, 0}},
// S-1-9-0-1 =
{SID_REVISION, 2, SECURITY_RESOURCE_MANAGER_AUTHORITY, {0, 1}},
// S-1-10 =
{SID_REVISION, 0, SECURITY_PASSPORT_AUTHORITY, {0, 0}},
// S-1-10-0 =
{SID_REVISION, 1, SECURITY_PASSPORT_AUTHORITY, {0, 0}},
// S-1-10-0-0 =
{SID_REVISION, 2, SECURITY_PASSPORT_AUTHORITY, {0, 0}},
// S-1-10-0-1 =
{SID_REVISION, 2, SECURITY_PASSPORT_AUTHORITY, {0, 1}},
// S-1-11 =
{SID_REVISION, 0, SECURITY_MICROSOFT_AUTHORITY, {0, 0}},
// S-1-11-96 =
{SID_REVISION, 1, SECURITY_MICROSOFT_AUTHORITY, {96, 0}},
// S-1-15 =
{SID_REVISION, 0, SECURITY_APP_PACKAGE_AUTHORITY, {0, 0}},
// S-1-15-0 =
{SID_REVISION, 1, SECURITY_APP_PACKAGE_AUTHORITY, {0, 0}},
// S-1-15-1 = 'APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES'
{SID_REVISION, 1, SECURITY_APP_PACKAGE_AUTHORITY, {1, 0}},
// S-1-15-2 =
{SID_REVISION, 1, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_APP_PACKAGE_BASE_RID, 0}},
// S-1-15-2-0 =
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_APP_PACKAGE_BASE_RID, 0}},
// S-1-15-2-1 =
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_APP_PACKAGE_BASE_RID, SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE}},
// S-1-15-3 =
{SID_REVISION, 1, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, 0}},
// S-1-15-3-0 =
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, 0}},
// S-1-15-3-1 = 'APPLICATION PACKAGE AUTHORITY\Your Internet connection'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_INTERNET_CLIENT}},
// S-1-15-3-2 = 'APPLICATION PACKAGE AUTHORITY\Your Internet connection, including incoming connections from the Internet'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER}},
// S-1-15-3-3 = 'APPLICATION PACKAGE AUTHORITY\Your home or work networks'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER}},
// S-1-15-3-4 = 'APPLICATION PACKAGE AUTHORITY\Your pictures library'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_PICTURES_LIBRARY}},
// S-1-15-3-5 = 'APPLICATION PACKAGE AUTHORITY\Your videos library'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_VIDEOS_LIBRARY}},
// S-1-15-3-6 = 'APPLICATION PACKAGE AUTHORITY\Your music library'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_MUSIC_LIBRARY}},
// S-1-15-3-7 = 'APPLICATION PACKAGE AUTHORITY\Your documents library'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_DOCUMENTS_LIBRARY}},
// S-1-15-3-8 = 'APPLICATION PACKAGE AUTHORITY\Your Windows credentials'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION}},
// S-1-15-3-9 = 'APPLICATION PACKAGE AUTHORITY\Software and hardware certificates or a smart card'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES}},
// S-1-15-3-10 = 'APPLICATION PACKAGE AUTHORITY\Removable storage'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_REMOVABLE_STORAGE}},
// S-1-15-3-11 = 'APPLICATION PACKAGE AUTHORITY\Your Appointments'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_APPOINTMENTS}},
// S-1-15-3-12 = 'APPLICATION PACKAGE AUTHORITY\Your Contacts'
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_CONTACTS}},
// S-1-15-3-1024 =
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_APP_RID}},
// S-1-15-3-4096 =
{SID_REVISION, 2, SECURITY_APP_PACKAGE_AUTHORITY, {SECURITY_CAPABILITY_BASE_RID, SECURITY_CAPABILITY_INTERNET_EXPLORER}},
// S-1-16 = 'Mandatory Label\Mandatory Label'
{SID_REVISION, 0, SECURITY_MANDATORY_LABEL_AUTHORITY, {0, 0}},
// S-1-16-0 = 'Mandatory Label\Untrusted Mandatory Level'
{SID_REVISION, 1, SECURITY_MANDATORY_LABEL_AUTHORITY, {SECURITY_MANDATORY_UNTRUSTED_RID, 0}},
// S-1-16-4096 = 'Mandatory Label\Low Mandatory Level'
{SID_REVISION, 1, SECURITY_MANDATORY_LABEL_AUTHORITY, {SECURITY_MANDATORY_LOW_RID, 0}},
// S-1-16-8192 = 'Mandatory Label\Medium Mandatory Level'
{SID_REVISION, 1, SECURITY_MANDATORY_LABEL_AUTHORITY, {SECURITY_MANDATORY_MEDIUM_RID, 0}},
// S-1-16-8448 = 'Mandatory Label\Medium Plus Mandatory Level'
{SID_REVISION, 1, SECURITY_MANDATORY_LABEL_AUTHORITY, {SECURITY_MANDATORY_MEDIUM_PLUS_RID, 0}},
// S-1-16-12288 = 'Mandatory Label\High Mandatory Level'
{SID_REVISION, 1, SECURITY_MANDATORY_LABEL_AUTHORITY, {SECURITY_MANDATORY_HIGH_RID, 0}},
// S-1-16-16384 = 'Mandatory Label\System Mandatory Level'
{SID_REVISION, 1, SECURITY_MANDATORY_LABEL_AUTHORITY, {SECURITY_MANDATORY_SYSTEM_RID, 0}},
// S-1-16-20480 = 'Mandatory Label\Protected Process Mandatory Level'
{SID_REVISION, 1, SECURITY_MANDATORY_LABEL_AUTHORITY, {SECURITY_MANDATORY_PROTECTED_PROCESS_RID, 0}},
// S-1-16-24576 =
{SID_REVISION, 1, SECURITY_MANDATORY_LABEL_AUTHORITY, {24576, 0}},
// S-1-16-28672 = 'Mandatory Label\Secure Process Mandatory Level'
{SID_REVISION, 1, SECURITY_MANDATORY_LABEL_AUTHORITY, {SECURITY_MANDATORY_SECURE_PROCESS_RID, 0}},
// S-1-17 =
{SID_REVISION, 0, SECURITY_SCOPED_POLICY_ID_AUTHORITY, {0, 0}},
// S-1-17-0 =
{SID_REVISION, 1, SECURITY_SCOPED_POLICY_ID_AUTHORITY, {0, 0}},
// S-1-18 =
{SID_REVISION, 0, SECURITY_AUTHENTICATION_AUTHORITY, {0, 0}},
// S-1-18-0 =
{SID_REVISION, 1, SECURITY_AUTHENTICATION_AUTHORITY, {0, 0}},
// S-1-18-1 = 'Authentication Authority Asserted Identity'
{SID_REVISION, 1, SECURITY_AUTHENTICATION_AUTHORITY, {SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID, 0}},
// S-1-18-2 = 'Service Asserted Identity'
{SID_REVISION, 1, SECURITY_AUTHENTICATION_AUTHORITY, {SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID, 0}},
// S-1-18-3 = 'Fresh Public Key Identity'
{SID_REVISION, 1, SECURITY_AUTHENTICATION_AUTHORITY, {SECURITY_AUTHENTICATION_FRESH_KEY_AUTH_RID, 0}},
// S-1-18-4 = 'Key Trust Identity'
{SID_REVISION, 1, SECURITY_AUTHENTICATION_AUTHORITY, {SECURITY_AUTHENTICATION_KEY_TRUST_RID, 0}},
// S-1-18-5 = 'Key Property Multi-factor Authentication'
{SID_REVISION, 1, SECURITY_AUTHENTICATION_AUTHORITY, {SECURITY_AUTHENTICATION_KEY_PROPERTY_MFA_RID, 0}},
// S-1-18-6 = 'Key Property Attestation'
{SID_REVISION, 1, SECURITY_AUTHENTICATION_AUTHORITY, {SECURITY_AUTHENTICATION_KEY_PROPERTY_ATTESTATION_RID, 0}},
// S-1-19 =
{SID_REVISION, 0, SECURITY_PROCESS_TRUST_AUTHORITY, {0, 0}},
// S-1-19-0 =
{SID_REVISION, 1, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_NONE_RID, 0}},
// S-1-19-0-0 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_NONE_RID, SECURITY_PROCESS_PROTECTION_LEVEL_NONE_RID}},
// S-1-19-512 =
{SID_REVISION, 1, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID, 0}},
// S-1-19-512-0 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID, SECURITY_PROCESS_PROTECTION_LEVEL_NONE_RID}},
// S-1-19-512-1024 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID, SECURITY_PROCESS_PROTECTION_LEVEL_AUTHENTICODE_RID}},
// S-1-19-512-2048 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID, SECURITY_PROCESS_PROTECTION_LEVEL_APP_RID}},
// S-1-19-512-4096 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID, SECURITY_PROCESS_PROTECTION_LEVEL_WINDOWS_RID}},
// S-1-19-512-8192 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID, SECURITY_PROCESS_PROTECTION_LEVEL_WINTCB_RID}},
// S-1-19-1024 =
{SID_REVISION, 1, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID, 0}},
// S-1-19-1024-0 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID, SECURITY_PROCESS_PROTECTION_LEVEL_NONE_RID}},
// S-1-19-1024-1024 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID, SECURITY_PROCESS_PROTECTION_LEVEL_AUTHENTICODE_RID}},
// S-1-19-1024-2048 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID, SECURITY_PROCESS_PROTECTION_LEVEL_APP_RID}},
// S-1-19-1024-4096 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID, SECURITY_PROCESS_PROTECTION_LEVEL_WINDOWS_RID}},
// S-1-19-1024-8192 =
{SID_REVISION, 2, SECURITY_PROCESS_TRUST_AUTHORITY, {SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID, SECURITY_PROCESS_PROTECTION_LEVEL_WINTCB_RID}}
};
struct _SID6
{
BYTE Revision;
BYTE SubAuthorityCount;
SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
DWORD SubAuthority[6];
}
const sid6[] =
{
// S-1-5-21-0-0-0-496 =
{SID_REVISION, 5, SECURITY_NT_AUTHORITY, {SECURITY_NT_NON_UNIQUE, 0, 0, 0, 496, 0}},
// S-1-5-21-0-0-0-497 =
{SID_REVISION, 5, SECURITY_NT_AUTHORITY, {SECURITY_NT_NON_UNIQUE, 0, 0, 0, 497, 0}},
// S-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464 = 'NT SERVICE\TrustedInstaller'
{SID_REVISION, 6, SECURITY_NT_AUTHORITY, {SECURITY_SERVICE_ID_BASE_RID, SECURITY_TRUSTED_INSTALLER_RID1, SECURITY_TRUSTED_INSTALLER_RID2, SECURITY_TRUSTED_INSTALLER_RID3, SECURITY_TRUSTED_INSTALLER_RID4, SECURITY_TRUSTED_INSTALLER_RID5}},
// S-1-5-84-0-0-0-0-0 = 'NT AUTHORITY\USER MODE DRIVERS'
{SID_REVISION, 6, SECURITY_NT_AUTHORITY, {SECURITY_USERMODEDRIVERHOST_ID_BASE_RID, 0, 0, 0, 0, 0}},
// S-1-5-86-615999462-62705297-2911207457-59056572-3668589837 = 'WMI\Network Service'
{SID_REVISION, 6, SECURITY_NT_AUTHORITY, {SECURITY_WMIHOST_ID_BASE_RID, 615999462, 62705297, 2911207457, 59056572, 3668589837}},
// S-1-5-86-1544737700-199408000-2549878335-3519669259-381336952 = 'WMI\Local Service'
{SID_REVISION, 6, SECURITY_NT_AUTHORITY, {SECURITY_WMIHOST_ID_BASE_RID, 1544737700, 199408000, 2549878335, 3519669259, 381336952}}
};
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
const LPCWSTR szSNU[] = {NULL,
L"user",
L"group",
L"domain",
L"alias",
L"well-known group",
L"deleted account",
L"invalid",
L"unknown",
L"computer",
L"label",
L"logon session"};
__declspec(safebuffers)
SID_NAME_USE WINAPI CheckSID(HANDLE hConsole, SID *sid)
{
LPWSTR lpStringSID;
DWORD dwError = ERROR_SUCCESS;
WCHAR szAccount[UNLEN + 1];
DWORD dwAccount = sizeof(szAccount) / sizeof(*szAccount);
WCHAR szDomain[GNLEN + 1];
DWORD dwDomain = sizeof(szDomain) / sizeof(*szDomain);
SID_NAME_USE snu = 0;
if (!ConvertSidToStringSid(sid, &lpStringSID))
PrintConsole(hConsole,
L"ConvertSidToStringSid() returned error %lu\n",
dwError = GetLastError());
else
{
if (!LookupAccountSid((LPCWSTR) NULL,
sid,
szAccount, &dwAccount,
szDomain, &dwDomain,
&snu))
{
dwError = GetLastError();
if (dwError != ERROR_NONE_MAPPED)
PrintConsole(hConsole,
L"LookupAccountSid() returned error %lu for security identifier \'%ls\'\n",
dwError, lpStringSID);
}
else
if (*szDomain == L'\0')
PrintConsole(hConsole,
L"%ls: %ls \'%ls\'\n",
lpStringSID, szSNU[snu], szAccount);
else if (*szAccount == L'\0')
PrintConsole(hConsole,
L"%ls: %ls \'%ls\'\n",
lpStringSID, szSNU[snu], szDomain);
else
PrintConsole(hConsole,
L"%ls: %ls \'%ls\\%ls\'\n",
lpStringSID, szSNU[snu], szDomain, szAccount);
if (LocalFree(lpStringSID) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
// SetLastError(dwError);
return snu;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
SID_NAME_USE snu;
WCHAR szAccount[UNLEN + 1];
DWORD dwAccount = sizeof(szAccount) / sizeof(*szAccount);
WCHAR szDomain[GNLEN + 1];
DWORD dwDomain = sizeof(szDomain) / sizeof(*szDomain);
BYTE sid[SECURITY_MAX_SID_SIZE];
BOOL bSid;
DWORD dwSid;
DWORD dw;
DWORD *lpRid;
DWORD dwError = ERROR_SUCCESS;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
for (dw = 0; dw < sizeof(sid2) / sizeof(*sid2); dw++)
CheckSID(hConsole, (SID *) &sid2[dw]);
for (dw = 0; dw < sizeof(sid6) / sizeof(*sid6); dw++)
CheckSID(hConsole, (SID *) &sid6[dw]);
for (dw = 0; dw < 128; dw++)
{
dwSid = sizeof(sid);
if (!CreateWellKnownSid((WELL_KNOWN_SID_TYPE) dw,
(SID *) NULL,
(SID *) sid,
&dwSid))
{
dwError = GetLastError();
if (dwError != ERROR_INVALID_PARAMETER)
PrintConsole(hConsole,
L"CreateWellKnownSid() returned error %lu\n",
dwError);
}
else
{
bSid = FALSE;
if (dwSid <= sizeof(*sid2))
{
for (dwSid = 0; dwSid < sizeof(sid2) / sizeof(*sid2); dwSid++)
if (bSid = EqualSid((SID *) sid, (SID *) &sid2[dwSid]))
break;
}
else if (dwSid == sizeof(*sid6))
{
for (dwSid = 0; dwSid < sizeof(sid6) / sizeof(*sid6); dwSid++)
if (bSid = EqualSid((SID *) sid, (SID *) &sid6[dwSid]))
break;
}
else
continue;
if (!bSid)
CheckSID(hConsole, (SID *) sid);
}
}
if (!GetComputerName(szAccount, &dwAccount))
PrintConsole(hConsole,
L"GetComputerName() returned error %lu\n",
dwError = GetLastError());
else
{
dwSid = sizeof(sid);
if (!LookupAccountName((LPCWSTR) NULL,
szAccount,
(SID *) sid, &dwSid,
szDomain, &dwDomain,
&snu))
PrintConsole(hConsole,
L"LookupAccountName() returned error %lu for \'%ls\'\n",
dwError = GetLastError(), szAccount);
else
{
CheckSID(hConsole, (SID *) sid);
lpRid = GetSidSubAuthority((SID *) sid, GetSidSubAuthorityCount((SID *) sid)[0]++);
for (lpRid[0] = FOREST_USER_RID_MAX - 1; lpRid[0] <= DOMAIN_USER_RID_MAX + 1; lpRid[0]++)
CheckSID(hConsole, (SID *) sid);
}
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
SIDEREAL.C
created in step 1., link the compiled
object file SIDEREAL.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.1 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeSIDEREAL.COM SIDEREAL.C ADVAPI32.LIB KERNEL32.LIB USER32.LIB ERASE SIDEREAL.OBJFor 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. SIDEREAL.C SIDEREAL.C(966) : warning C4706: assignment within conditional expression SIDEREAL.C(972) : warning C4706: assignment within conditional expression Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file SIDEREAL.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 04 00 00 ......#.........
00 16 00 00 00 00 00 00 7a 11 00 00 00 10 00 00 ........z.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 40 00 00 00 02 00 00 07 af 00 00 03 00 00 85 .@..............
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
88 32 00 00 50 00 00 00 00 00 00 00 00 00 00 00 .2..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 20 32 00 00 40 00 00 00 ........ 2..@...
00 00 00 00 00 00 00 00 00 20 00 00 48 00 00 00 ......... ..H...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
9e 03 00 00 00 10 00 00 00 04 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 58 14 00 00 00 20 00 00 .const..X.... ..
00 16 00 00 00 06 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 04 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 fc f7 ff ff 50 ff 15 40 20 40 00 8b f0 .......P..@ @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 fc f7 ff ff 50 ff 75 08 ff 15 20 20 40 00 85 .....P.u... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 18 04 00 00 83 65 f8 00 b8 01 01 00 00 ........e.......
89 45 f0 89 45 f4 8d 45 fc 50 ff 75 0c ff 15 00 .E..E..E.P.u....
20 40 00 85 c0 75 21 ff 15 28 20 40 00 50 68 18 @...u!..( @.Ph.
31 40 00 68 e4 30 40 00 ff 75 08 e8 70 ff ff ff 1@.h.0@..u..p...
83 c4 10 e9 db 00 00 00 53 56 8d 45 f8 50 8d 45 ........SV.E.P.E
f4 50 8d 85 e8 fb ff ff 50 8d 45 f0 50 8d 85 ec .P......P.E.P...
fd ff ff 50 ff 75 0c 6a 00 ff 15 18 20 40 00 8b ...P.u.j.... @..
35 28 20 40 00 8b 5d 08 85 c0 75 19 ff d6 3d 34 5( @..]...u...=4
05 00 00 74 79 ff 75 fc 50 68 c0 30 40 00 68 50 ...ty.u.Ph.0@.hP
30 40 00 eb 35 66 83 bd e8 fb ff ff 00 75 08 8d 0@..5f.......u..
85 ec fd ff ff eb 10 66 83 bd ec fd ff ff 00 75 .......f.......u
24 8d 85 e8 fb ff ff 50 8b 45 f8 ff 34 85 c0 2f $......P.E..4../
40 00 ff 75 fc 68 2c 30 40 00 53 e8 e0 fe ff ff @..u.h,0@.S.....
83 c4 14 eb 29 8d 85 ec fd ff ff 50 8d 85 e8 fb ....)......P....
ff ff 50 8b 45 f8 ff 34 85 c0 2f 40 00 ff 75 fc ..P.E..4../@..u.
68 04 30 40 00 53 e8 b5 fe ff ff 83 c4 18 ff 75 h.0@.S.........u
fc ff 15 24 20 40 00 85 c0 74 16 ff d6 50 68 f0 ...$ @...t...Ph.
2f 40 00 68 e4 30 40 00 53 e8 92 fe ff ff 83 c4 /@.h.0@.S.......
10 5e 5b 8b 45 f8 c9 c2 08 00 55 8b ec 81 ec 68 .^[.E.....U....h
04 00 00 83 65 f4 00 53 56 57 b8 01 01 00 00 6a ....e..SVW.....j
f4 89 45 ec 89 45 e8 ff 15 38 20 40 00 8b d8 89 ..E..E...8 @....
5d f8 83 fb ff 75 0e ff 15 28 20 40 00 89 45 f4 ]....u...( @..E.
e9 df 01 00 00 be 20 21 40 00 bf de 00 00 00 56 ...... !@......V
53 e8 88 fe ff ff 83 c6 10 4f 75 f3 6a 06 be 00 S........Ou.j...
2f 40 00 5f 56 53 e8 73 fe ff ff 83 c6 20 4f 75 /@._VS.s..... Ou
f3 21 7d f0 8b 3d 28 20 40 00 8b 35 14 20 40 00 .!}..=( @..5. @.
bb e4 30 40 00 8d 45 fc 50 8d 45 a0 50 6a 00 ff ..0@..E.P.E.Pj..
75 f0 c7 45 fc 44 00 00 00 ff 15 10 20 40 00 85 u..E.D...... @..
c0 75 1e ff d7 89 45 f4 83 f8 57 74 78 50 68 ec .u....E...WtxPh.
31 40 00 53 ff 75 f8 e8 d4 fd ff ff 83 c4 10 eb 1@.S.u..........
64 83 7d fc 10 77 28 33 c0 89 45 fc c1 e0 04 05 d.}..w(3..E.....
20 21 40 00 50 8d 45 a0 50 ff d6 85 c0 75 46 8b !@.P.E.P....uF.
45 fc 40 89 45 fc 3d de 00 00 00 72 df eb 2a 83 E.@.E.=....r..*.
7d fc 20 75 30 33 c0 89 45 fc c1 e0 05 05 00 2f }. u03..E....../
40 00 50 8d 45 a0 50 ff d6 85 c0 75 18 8b 45 fc @.P.E.P....u..E.
40 89 45 fc 83 f8 06 72 e1 8d 45 a0 50 ff 75 f8 @.E....r..E.P.u.
e8 b9 fd ff ff ff 45 f0 81 7d f0 80 00 00 00 0f ......E..}......
82 50 ff ff ff 8d 45 ec 50 8d 85 9c fd ff ff 50 .P....E.P......P
ff 15 34 20 40 00 85 c0 75 1c ff d7 50 68 cc 31 ..4 @...u...Ph.1
40 00 53 ff 75 f8 89 45 f4 e8 32 fd ff ff 83 c4 @.S.u..E..2.....
10 e9 9d 00 00 00 8d 45 e4 50 8d 45 e8 50 8d 85 .......E.P.E.P..
98 fb ff ff 50 8d 45 fc 50 8d 45 a0 50 8d 85 9c ....P.E.P.E.P...
fd ff ff 50 6a 00 c7 45 fc 44 00 00 00 ff 15 0c ...Pj..E.D......
20 40 00 85 c0 75 24 ff d7 8d 8d 9c fd ff ff 51 @...u$........Q
50 68 a8 31 40 00 68 60 31 40 00 ff 75 f8 89 45 Ph.1@.h`1@..u..E
f4 e8 da fc ff ff 83 c4 14 eb 48 8d 45 a0 50 ff ..........H.E.P.
75 f8 e8 17 fd ff ff 8d 45 a0 50 ff 15 08 20 40 u.......E.P... @
00 8a 08 0f b6 d1 fe c1 88 08 52 8d 45 a0 50 ff ..........R.E.P.
15 04 20 40 00 8b f0 c7 06 f2 01 00 00 8d 45 a0 .. @..........E.
50 ff 75 f8 e8 e5 fc ff ff ff 06 81 3e e8 03 00 P.u.........>...
00 76 ea ff 75 f8 ff 15 30 20 40 00 85 c0 75 14 .v..u...0 @...u.
ff d7 50 68 44 31 40 00 53 ff 75 f8 e8 6f fc ff ..PhD1@.S.u..o..
ff 83 c4 10 ff 75 f4 ff 15 2c 20 40 00 cc 00 00 .....u..., @....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
34 33 00 00 4e 33 00 00 64 33 00 00 7e 33 00 00 43..N3..d3..~3..
94 33 00 00 aa 33 00 00 20 33 00 00 00 00 00 00 .3...3.. 3......
c4 33 00 00 d4 33 00 00 e0 33 00 00 f0 33 00 00 .3...3...3...3..
fe 33 00 00 0c 34 00 00 20 34 00 00 00 00 00 00 .3...4.. 4......
3e 34 00 00 00 00 00 00 6c 00 6f 00 67 00 6f 00 >4......l.o.g.o.
6e 00 20 00 73 00 65 00 73 00 73 00 69 00 6f 00 n. .s.e.s.s.i.o.
6e 00 00 00 6c 00 61 00 62 00 65 00 6c 00 00 00 n...l.a.b.e.l...
63 00 6f 00 6d 00 70 00 75 00 74 00 65 00 72 00 c.o.m.p.u.t.e.r.
00 00 00 00 75 00 6e 00 6b 00 6e 00 6f 00 77 00 ....u.n.k.n.o.w.
6e 00 00 00 69 00 6e 00 76 00 61 00 6c 00 69 00 n...i.n.v.a.l.i.
64 00 00 00 64 00 65 00 6c 00 65 00 74 00 65 00 d...d.e.l.e.t.e.
64 00 20 00 61 00 63 00 63 00 6f 00 75 00 6e 00 d. .a.c.c.o.u.n.
74 00 00 00 77 00 65 00 6c 00 6c 00 2d 00 6b 00 t...w.e.l.l.-.k.
6e 00 6f 00 77 00 6e 00 20 00 67 00 72 00 6f 00 n.o.w.n. .g.r.o.
75 00 70 00 00 00 00 00 61 00 6c 00 69 00 61 00 u.p.....a.l.i.a.
73 00 00 00 64 00 6f 00 6d 00 61 00 69 00 6e 00 s...d.o.m.a.i.n.
00 00 00 00 67 00 72 00 6f 00 75 00 70 00 00 00 ....g.r.o.u.p...
75 00 73 00 65 00 72 00 00 00 00 00 00 00 00 00 u.s.e.r.........
01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 01 00 00 00 00 00 00 00 00 ................
01 00 00 00 00 00 00 02 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 02 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 02 01 00 00 00 00 00 00 00 ................
01 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 03 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 03 01 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 03 02 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 03 03 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 03 04 00 00 00 00 00 00 00 ................
01 00 00 00 00 00 00 04 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 04 00 00 00 00 00 00 00 00 ................
01 00 00 00 00 00 00 05 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 01 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 02 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 03 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 04 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 05 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 05 05 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 06 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 07 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 08 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 09 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 0a 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 0b 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 0c 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 0d 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 0e 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 0f 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 10 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 11 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 12 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 13 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 14 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 15 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 05 15 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 05 15 00 00 00 01 00 00 00 ................
01 01 00 00 00 00 00 05 16 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 05 20 00 00 00 00 00 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 f2 01 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 f4 01 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 f5 01 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 f6 01 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 00 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 01 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 02 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 03 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 04 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 05 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 06 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 07 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 08 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 09 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 0a 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 0d 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 0e 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 0f 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 20 02 00 00 ........ ... ...
01 02 00 00 00 00 00 05 20 00 00 00 21 02 00 00 ........ ...!...
01 02 00 00 00 00 00 05 20 00 00 00 22 02 00 00 ........ ..."...
01 02 00 00 00 00 00 05 20 00 00 00 23 02 00 00 ........ ...#...
01 02 00 00 00 00 00 05 20 00 00 00 24 02 00 00 ........ ...$...
01 02 00 00 00 00 00 05 20 00 00 00 25 02 00 00 ........ ...%...
01 02 00 00 00 00 00 05 20 00 00 00 26 02 00 00 ........ ...&...
01 02 00 00 00 00 00 05 20 00 00 00 27 02 00 00 ........ ...'...
01 02 00 00 00 00 00 05 20 00 00 00 28 02 00 00 ........ ...(...
01 02 00 00 00 00 00 05 20 00 00 00 29 02 00 00 ........ ...)...
01 02 00 00 00 00 00 05 20 00 00 00 2a 02 00 00 ........ ...*...
01 02 00 00 00 00 00 05 20 00 00 00 2b 02 00 00 ........ ...+...
01 02 00 00 00 00 00 05 20 00 00 00 2c 02 00 00 ........ ...,...
01 02 00 00 00 00 00 05 20 00 00 00 2d 02 00 00 ........ ...-...
01 02 00 00 00 00 00 05 20 00 00 00 2e 02 00 00 ........ .......
01 02 00 00 00 00 00 05 20 00 00 00 2f 02 00 00 ........ .../...
01 02 00 00 00 00 00 05 20 00 00 00 30 02 00 00 ........ ...0...
01 02 00 00 00 00 00 05 20 00 00 00 31 02 00 00 ........ ...1...
01 02 00 00 00 00 00 05 20 00 00 00 32 02 00 00 ........ ...2...
01 02 00 00 00 00 00 05 20 00 00 00 38 02 00 00 ........ ...8...
01 02 00 00 00 00 00 05 20 00 00 00 39 02 00 00 ........ ...9...
01 02 00 00 00 00 00 05 20 00 00 00 3b 02 00 00 ........ ...;...
01 02 00 00 00 00 00 05 20 00 00 00 3c 02 00 00 ........ ...<...
01 02 00 00 00 00 00 05 20 00 00 00 3d 02 00 00 ........ ...=...
01 02 00 00 00 00 00 05 20 00 00 00 3e 02 00 00 ........ ...>...
01 02 00 00 00 00 00 05 20 00 00 00 3f 02 00 00 ........ ...?...
01 02 00 00 00 00 00 05 20 00 00 00 40 02 00 00 ........ ...@...
01 02 00 00 00 00 00 05 20 00 00 00 41 02 00 00 ........ ...A...
01 02 00 00 00 00 00 05 20 00 00 00 42 02 00 00 ........ ...B...
01 02 00 00 00 00 00 05 20 00 00 00 43 02 00 00 ........ ...C...
01 02 00 00 00 00 00 05 20 00 00 00 44 02 00 00 ........ ...D...
01 02 00 00 00 00 00 05 20 00 00 00 45 02 00 00 ........ ...E...
01 02 00 00 00 00 00 05 20 00 00 00 46 02 00 00 ........ ...F...
01 02 00 00 00 00 00 05 20 00 00 00 47 02 00 00 ........ ...G...
01 01 00 00 00 00 00 05 21 00 00 00 00 00 00 00 ........!.......
01 01 00 00 00 00 00 05 40 00 00 00 00 00 00 00 ........@.......
01 02 00 00 00 00 00 05 40 00 00 00 0a 00 00 00 ........@.......
01 02 00 00 00 00 00 05 40 00 00 00 0e 00 00 00 ........@.......
01 02 00 00 00 00 00 05 40 00 00 00 15 00 00 00 ........@.......
01 02 00 00 00 00 00 05 40 00 00 00 20 00 00 00 ........@... ...
01 01 00 00 00 00 00 05 41 00 00 00 00 00 00 00 ........A.......
01 02 00 00 00 00 00 05 41 00 00 00 00 00 00 00 ........A.......
01 02 00 00 00 00 00 05 41 00 00 00 01 00 00 00 ........A.......
01 01 00 00 00 00 00 05 50 00 00 00 00 00 00 00 ........P.......
01 02 00 00 00 00 00 05 50 00 00 00 00 00 00 00 ........P.......
01 02 00 00 00 00 00 05 50 00 00 00 01 00 00 00 ........P.......
01 01 00 00 00 00 00 05 51 00 00 00 00 00 00 00 ........Q.......
01 02 00 00 00 00 00 05 51 00 00 00 00 00 00 00 ........Q.......
01 01 00 00 00 00 00 05 52 00 00 00 00 00 00 00 ........R.......
01 02 00 00 00 00 00 05 52 00 00 00 00 00 00 00 ........R.......
01 01 00 00 00 00 00 05 53 00 00 00 00 00 00 00 ........S.......
01 02 00 00 00 00 00 05 53 00 00 00 00 00 00 00 ........S.......
01 01 00 00 00 00 00 05 54 00 00 00 00 00 00 00 ........T.......
01 02 00 00 00 00 00 05 54 00 00 00 00 00 00 00 ........T.......
01 01 00 00 00 00 00 05 55 00 00 00 00 00 00 00 ........U.......
01 02 00 00 00 00 00 05 55 00 00 00 00 00 00 00 ........U.......
01 01 00 00 00 00 00 05 56 00 00 00 00 00 00 00 ........V.......
01 02 00 00 00 00 00 05 56 00 00 00 00 00 00 00 ........V.......
01 01 00 00 00 00 00 05 57 00 00 00 00 00 00 00 ........W.......
01 02 00 00 00 00 00 05 57 00 00 00 00 00 00 00 ........W.......
01 01 00 00 00 00 00 05 58 00 00 00 00 00 00 00 ........X.......
01 02 00 00 00 00 00 05 58 00 00 00 00 00 00 00 ........X.......
01 01 00 00 00 00 00 05 59 00 00 00 00 00 00 00 ........Y.......
01 02 00 00 00 00 00 05 59 00 00 00 00 00 00 00 ........Y.......
01 01 00 00 00 00 00 05 5a 00 00 00 00 00 00 00 ........Z.......
01 02 00 00 00 00 00 05 5a 00 00 00 00 00 00 00 ........Z.......
01 01 00 00 00 00 00 05 5b 00 00 00 00 00 00 00 ........[.......
01 02 00 00 00 00 00 05 5b 00 00 00 00 00 00 00 ........[.......
01 01 00 00 00 00 00 05 5c 00 00 00 00 00 00 00 ........\.......
01 02 00 00 00 00 00 05 5c 00 00 00 00 00 00 00 ........\.......
01 01 00 00 00 00 00 05 5d 00 00 00 00 00 00 00 ........].......
01 02 00 00 00 00 00 05 5d 00 00 00 00 00 00 00 ........].......
01 01 00 00 00 00 00 05 5e 00 00 00 00 00 00 00 ........^.......
01 02 00 00 00 00 00 05 5e 00 00 00 00 00 00 00 ........^.......
01 01 00 00 00 00 00 05 5f 00 00 00 00 00 00 00 ........_.......
01 02 00 00 00 00 00 05 5f 00 00 00 00 00 00 00 ........_.......
01 01 00 00 00 00 00 05 60 00 00 00 00 00 00 00 ........`.......
01 02 00 00 00 00 00 05 60 00 00 00 00 00 00 00 ........`.......
01 01 00 00 00 00 00 05 70 00 00 00 00 00 00 00 ........p.......
01 02 00 00 00 00 00 05 70 00 00 00 00 00 00 00 ........p.......
01 01 00 00 00 00 00 05 71 00 00 00 00 00 00 00 ........q.......
01 01 00 00 00 00 00 05 72 00 00 00 00 00 00 00 ........r.......
01 01 00 00 00 00 00 05 e8 03 00 00 00 00 00 00 ................
01 00 00 00 00 00 00 06 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 06 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 06 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 06 00 00 00 00 01 00 00 00 ................
01 00 00 00 00 00 00 07 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 07 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 07 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 07 00 00 00 00 01 00 00 00 ................
01 00 00 00 00 00 00 08 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 08 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 08 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 08 00 00 00 00 01 00 00 00 ................
01 00 00 00 00 00 00 09 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 09 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 09 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 09 00 00 00 00 01 00 00 00 ................
01 00 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 0a 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 0a 00 00 00 00 01 00 00 00 ................
01 00 00 00 00 00 00 0b 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 0b 60 00 00 00 00 00 00 00 ........`.......
01 00 00 00 00 00 00 0f 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 0f 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 0f 01 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 0f 02 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 0f 02 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 0f 02 00 00 00 01 00 00 00 ................
01 01 00 00 00 00 00 0f 03 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 01 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 02 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 03 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 04 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 05 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 06 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 07 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 08 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 09 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 0a 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 0b 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 0c 00 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 00 04 00 00 ................
01 02 00 00 00 00 00 0f 03 00 00 00 00 10 00 00 ................
01 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 10 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 10 00 10 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 10 00 20 00 00 00 00 00 00 ......... ......
01 01 00 00 00 00 00 10 00 21 00 00 00 00 00 00 .........!......
01 01 00 00 00 00 00 10 00 30 00 00 00 00 00 00 .........0......
01 01 00 00 00 00 00 10 00 40 00 00 00 00 00 00 .........@......
01 01 00 00 00 00 00 10 00 50 00 00 00 00 00 00 .........P......
01 01 00 00 00 00 00 10 00 60 00 00 00 00 00 00 .........`......
01 01 00 00 00 00 00 10 00 70 00 00 00 00 00 00 .........p......
01 00 00 00 00 00 00 11 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 11 00 00 00 00 00 00 00 00 ................
01 00 00 00 00 00 00 12 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 12 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 12 01 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 12 02 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 12 03 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 12 04 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 12 05 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 12 06 00 00 00 00 00 00 00 ................
01 00 00 00 00 00 00 13 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 13 00 00 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 13 00 00 00 00 00 00 00 00 ................
01 01 00 00 00 00 00 13 00 02 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 13 00 02 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 13 00 02 00 00 00 04 00 00 ................
01 02 00 00 00 00 00 13 00 02 00 00 00 08 00 00 ................
01 02 00 00 00 00 00 13 00 02 00 00 00 10 00 00 ................
01 02 00 00 00 00 00 13 00 02 00 00 00 20 00 00 ............. ..
01 01 00 00 00 00 00 13 00 04 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 13 00 04 00 00 00 00 00 00 ................
01 02 00 00 00 00 00 13 00 04 00 00 00 04 00 00 ................
01 02 00 00 00 00 00 13 00 04 00 00 00 08 00 00 ................
01 02 00 00 00 00 00 13 00 04 00 00 00 10 00 00 ................
01 02 00 00 00 00 00 13 00 04 00 00 00 20 00 00 ............. ..
01 05 00 00 00 00 00 05 15 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 f0 01 00 00 00 00 00 00 ................
01 05 00 00 00 00 00 05 15 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 f1 01 00 00 00 00 00 00 ................
01 06 00 00 00 00 00 05 50 00 00 00 b5 89 fb 38 ........P......8
19 84 c2 cb 5c 6c 23 6d 57 00 77 6e c0 02 64 87 ....\l#mW.wn..d.
01 06 00 00 00 00 00 05 54 00 00 00 00 00 00 00 ........T.......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
01 06 00 00 00 00 00 05 56 00 00 00 e6 67 b7 24 ........V....g.$
91 ce bc 03 21 80 85 ad bc 21 85 03 0d 3d aa da ....!....!...=..
01 06 00 00 00 00 00 05 56 00 00 00 a4 d3 12 5c ........V......\
80 b9 e2 0b 3f 0e fc 97 0b e4 c9 d1 78 bd ba 16 ....?.......x...
00 00 00 00 10 21 40 00 04 21 40 00 f4 20 40 00 .....!@..!@.. @.
e8 20 40 00 c4 20 40 00 a4 20 40 00 94 20 40 00 . @.. @.. @.. @.
84 20 40 00 70 20 40 00 64 20 40 00 48 20 40 00 . @.p @.d @.H @.
4c 00 6f 00 63 00 61 00 6c 00 46 00 72 00 65 00 L.o.c.a.l.F.r.e.
65 00 00 00 25 00 6c 00 73 00 3a 00 20 00 25 00 e...%.l.s.:. .%.
6c 00 73 00 20 00 27 00 25 00 6c 00 73 00 5c 00 l.s. .'.%.l.s.\.
25 00 6c 00 73 00 27 00 0a 00 00 00 25 00 6c 00 %.l.s.'.....%.l.
73 00 3a 00 20 00 25 00 6c 00 73 00 20 00 27 00 s.:. .%.l.s. .'.
25 00 6c 00 73 00 27 00 0a 00 00 00 00 00 00 00 %.l.s.'.........
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 73 00 65 00 63 00 .f.o.r. .s.e.c.
75 00 72 00 69 00 74 00 79 00 20 00 69 00 64 00 u.r.i.t.y. .i.d.
65 00 6e 00 74 00 69 00 66 00 69 00 65 00 72 00 e.n.t.i.f.i.e.r.
20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 .'.%.l.s.'.....
4c 00 6f 00 6f 00 6b 00 75 00 70 00 41 00 63 00 L.o.o.k.u.p.A.c.
63 00 6f 00 75 00 6e 00 74 00 53 00 69 00 64 00 c.o.u.n.t.S.i.d.
00 00 00 00 25 00 6c 00 73 00 28 00 29 00 20 00 ....%.l.s.(.). .
72 00 65 00 74 00 75 00 72 00 6e 00 65 00 64 00 r.e.t.u.r.n.e.d.
20 00 65 00 72 00 72 00 6f 00 72 00 20 00 25 00 .e.r.r.o.r. .%.
6c 00 75 00 0a 00 00 00 43 00 6f 00 6e 00 76 00 l.u.....C.o.n.v.
65 00 72 00 74 00 53 00 69 00 64 00 54 00 6f 00 e.r.t.S.i.d.T.o.
53 00 74 00 72 00 69 00 6e 00 67 00 53 00 69 00 S.t.r.i.n.g.S.i.
64 00 00 00 43 00 6c 00 6f 00 73 00 65 00 48 00 d...C.l.o.s.e.H.
61 00 6e 00 64 00 6c 00 65 00 00 00 00 00 00 00 a.n.d.l.e.......
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 27 00 25 00 6c 00 .f.o.r. .'.%.l.
73 00 27 00 0a 00 00 00 4c 00 6f 00 6f 00 6b 00 s.'.....L.o.o.k.
75 00 70 00 41 00 63 00 63 00 6f 00 75 00 6e 00 u.p.A.c.c.o.u.n.
74 00 4e 00 61 00 6d 00 65 00 00 00 47 00 65 00 t.N.a.m.e...G.e.
74 00 43 00 6f 00 6d 00 70 00 75 00 74 00 65 00 t.C.o.m.p.u.t.e.
72 00 4e 00 61 00 6d 00 65 00 00 00 43 00 72 00 r.N.a.m.e...C.r.
65 00 61 00 74 00 65 00 57 00 65 00 6c 00 6c 00 e.a.t.e.W.e.l.l.
4b 00 6e 00 6f 00 77 00 6e 00 53 00 69 00 64 00 K.n.o.w.n.S.i.d.
00 00 00 00 00 00 00 00 b9 79 37 9e 00 00 00 00 .........y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 18 32 40 00 .............2@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 d8 32 00 00 00 00 00 00 .........2......
00 00 00 00 b6 33 00 00 00 20 00 00 f8 32 00 00 .....3... ...2..
00 00 00 00 00 00 00 00 30 34 00 00 20 20 00 00 ........04.. ..
18 33 00 00 00 00 00 00 00 00 00 00 4c 34 00 00 .3..........L4..
40 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 @ ..............
00 00 00 00 00 00 00 00 34 33 00 00 4e 33 00 00 ........43..N3..
64 33 00 00 7e 33 00 00 94 33 00 00 aa 33 00 00 d3..~3...3...3..
20 33 00 00 00 00 00 00 c4 33 00 00 d4 33 00 00 3.......3...3..
e0 33 00 00 f0 33 00 00 fe 33 00 00 0c 34 00 00 .3...3...3...4..
20 34 00 00 00 00 00 00 3e 34 00 00 00 00 00 00 4......>4......
91 01 4c 6f 6f 6b 75 70 41 63 63 6f 75 6e 74 53 ..LookupAccountS
69 64 57 00 6c 00 43 6f 6e 76 65 72 74 53 69 64 idW.l.ConvertSid
54 6f 53 74 72 69 6e 67 53 69 64 57 00 00 57 01 ToStringSidW..W.
47 65 74 53 69 64 53 75 62 41 75 74 68 6f 72 69 GetSidSubAuthori
74 79 00 00 58 01 47 65 74 53 69 64 53 75 62 41 ty..X.GetSidSubA
75 74 68 6f 72 69 74 79 43 6f 75 6e 74 00 8f 01 uthorityCount...
4c 6f 6f 6b 75 70 41 63 63 6f 75 6e 74 4e 61 6d LookupAccountNam
65 57 00 00 83 00 43 72 65 61 74 65 57 65 6c 6c eW....CreateWell
4b 6e 6f 77 6e 53 69 64 00 00 07 01 45 71 75 61 KnownSid....Equa
6c 53 69 64 00 00 41 44 56 41 50 49 33 32 2e 64 lSid..ADVAPI32.d
6c 6c 00 00 24 05 57 72 69 74 65 43 6f 6e 73 6f ll..$.WriteConso
6c 65 57 00 48 03 4c 6f 63 61 6c 46 72 65 65 00 leW.H.LocalFree.
02 02 47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 ..GetLastError..
19 01 45 78 69 74 50 72 6f 63 65 73 73 00 52 00 ..ExitProcess.R.
43 6c 6f 73 65 48 61 6e 64 6c 65 00 8f 01 47 65 CloseHandle...Ge
74 43 6f 6d 70 75 74 65 72 4e 61 6d 65 57 00 00 tComputerNameW..
64 02 47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 d.GetStdHandle..
4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 KERNEL32.dll..5.
77 76 73 70 72 69 6e 74 66 57 00 00 55 53 45 52 wvsprintfW..USER
33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 32.dll..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file SIDEREAL.TXT
created in
step 3. to recreate the console application
Really Known SIDs Enumerator:
CERTUTIL.EXE /DecodeHex /V SIDEREAL.TXT SIDEREAL.COM
Input Length = 30464 Output Length = 7168 CertUtil: -decodehex command completed successfully.
.xrm-ms
) digital license file and match its base64
encoded certificateagainst an eventually present SLIC ACPI table in the machine’s BIOS.
.xrm-ms
) digital license file in the directory
%SystemRoot%\System32\OEM\
, and an
OEM:SLP
product key for the installed version and edition of
Windows.
Microsoft Software Licensing Tables (SLIC and MSDM)
Windows Activation Technologies in Windows 7
Note: a single 2731 byte
XrML
(.xrm-ms
) digital license file can also be installed
by an administrator with the following command line:
SLMGR.VBS /ILC ‹XrML digital license file›Slmgr.vbs Options
SLICHECK.COM ‹XrML digital license file›
SLICHECK.COM "%SystemRoot%\System32\OEM\FUJITSU_SIEMENS_COMPUTERS_GMBH.XRM-MS"
XrML digital license file 'C:\Windows\System32\OEM\FUJITSU_SIEMENS_COMPUTERS_GMBH.XRM-MS': size = 2731 Application ID: {55c92734-d682-4d71-983e-d6ec3f16059f} License ID: {178676e3-4199-4a57-8312-abb0e10d6921} License Version: 2.0 Date/Time of Issue: 2007-02-28T18:00:36Z Certificate: size = 146 Length: 146 Version: 2.0 OEM ID: "FSC " Exponent: 65537 Modulus: size = 128 Value: 0x6189C3AEC59A2E3E4C5360EF41A54CA4F2716C226674A4FEE1874FA75B58F6D661086DCE98A2BB8E9A973B01D6C227880F073BCED021303E53B902735AC617CD2D39D56923353E6593BC1D716CD1761766814B13357FAD13D284CDCFDCFEAA010A74FAEBABB20E4687E230EE83AFC38DBAA78A96D4AD8C298B41DB764CCEBDD7 Digest: size = 20 SHA-1 Hash: 0x1C48EA2A96492540B27CA7B290B123BBDEEC66B0 Signature: size = 256 Value: 0x9E445CA9DD2FED92C4DB977FAEBA28C9591517F70AA82ED443023F5137326897599820AE239DB2CD1560A93D373E66AF4B74A78D9F59427F2418B7863C27A61ED4C4294DE272BCB6AB7302A1831CD728C2DEE6171AEB45FD58F8A757D0B5FC299DEF3EFBCCB97DF4ABCCFAD6675F56594105744ED587D903FC9982B70D7C1EB7DDC67176EDDE33F785AEA998625ECCC631EF539C80847DACE836902980B2EF7C926F69E7014DE999CE0F5D4AFD273F7901118B4D3CE47AADE22E0AC1771C93E751192DF7D529EEA8DC683E93CD52687E35878BE340DF1B7F6159C52AADB2FAA008C5F282AEF78222D0F4FB62F88CEB546AAE80AE66552E71F56F0F6CF47AAA3E Modulus: size = 256 Value: 0xB28B599FEC3D8EE28F7FB6CC3BDACD16B881FB5D2FFEDF5BA3F5D61BEAF3A036F0FEE17820D679AC64488AD8884D8FDB238AC0364BF8679846FFC57118C6EABEA71A5C9AA744575AED7023826D73F709205F547F776B572D451440FD09D57B926E0CD1F3D4FF9699DCE6AD8276FCBB1AFDA966F03349E2CEA689D773C277CCE16BD08517046A6B5CA9DE9959358890459F24069561B75284A976517489C8414303F1FCF8284DB719B00EC683AD811B03F1FEE0C0DD9830A30ACF951C1F2D500EEAA13DC4F26A45975115F3C76DD423A75600AB6EF073A713CF9B0F493075A49E0BF4C0FE369BC78F638C655E7E2C9F9BC596D3AA13DCAF30A9EDC924C83EC7CF Exponent: size = 3 Value: 0x010001 'SLIC' 'ACPI' table: size = 374, checksum correct Signature: "SLIC" Length: 374 Revision: 0x01 Checksum: 0xD2 OEM ID: "FSC " OEM Table ID: "PC " OEM Revision: 0x06040000 Creator ID: " LTP" Creator Rev.: 0x00000000 CSP Name: Microsoft Enhanced RSA and AES Cryptographic Provider RSA Public Key Algorithm: OID = 1.2.840.113549.1.1.1 (RSA) RSA Public Key 'Magic Number': "RSA1" RSA Public Key Bits: 1024 RSA Public Key Exponent: 65537 'Windows' Marker Hash Algorithm: OID = Marker Check: OK Marker String: "WINDOWS " Marker Version: 2.1 OEM Activation: 2.0 OEM ID: "FSC " OEM Table ID: "PC " 'SLIC' 'ACPI' table matches 'Certificate' from XrML digital license 'C:\Windows\System32\OEM\FUJITSU_SIEMENS_COMPUTERS_GMBH.XRM-MS'
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and SLICHECK.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file SLICHECK.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <wincrypt.h>
#include <shellapi.h>
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
typedef struct _slic // 'Software License Internal Certificate' table
{
DWORD Signature; // "SLIC" = 0x43494C53 = 'CILS'
DWORD Length; // size of entire SLIC table: 0x00000176
BYTE Revision;
BYTE Checksum; // checksum of entire SLIC table
CHAR OEMId[6]; // OEM identification
CHAR OEMTableId[8];
DWORD OEMRevision;
CHAR CreatorId[4]; // creator identification
DWORD CreatorRevision;
DWORD RSAType; // RSA public key substructure: 0x00000000
DWORD RSALength; // size of RSA public key substructure: 0x0000009C
// the 4 fields following next form a BLOBHEADER alias PUBLICKEYSTRUC structure
BYTE RSAKeyType; // RSA public key: 0x06 = PUBLICKEYBLOB
BYTE RSABlobVersion; // blob version: 0x02 = CUR_BLOB_VERSION
WORD RSAReserved; // 0x0000
ALG_ID RSAAlgId; // algorithm id: 0x00002400 = CALG_RSA_SIGN
// the 3 fields following next form a RSAPUBKEY structure
DWORD RSAMagic; // magic number: "RSA1" = 0x31415352 = '1ASR'
DWORD RSABits; // bits in modulus: 0x00000400 = sizeof(RSAModulus) * 8
DWORD RSAExponent; // exponent: 0x00010001 = 65537
BYTE RSAModulus[128];// modulus (1024 bits)
DWORD SLSType; // marker substructure: 0x00000001
DWORD SLSLength; // size of marker substructure: 0x000000B6
// the 7 fields following next form the 'message';
// its SHA-256 hash must be verified against
// the 'signature' using the RSA public key!
DWORD SLSActivation; // OEM activation version: 0x00020000
CHAR SLSOEMId[6]; // OEM identification
CHAR SLSOEMTableId[8];
CHAR SLSMarker[8]; // marker: "WINDOWS "
WORD SLSMarkerLow; // marker version, low word
WORD SLSMarkerHigh; // marker version, high word
BYTE SLSReserved[16];
BYTE SLSSignature[128];
} SLIC;
// XrML signature is valid if RSA-signed SHA-1 hash of canonicalized
// content of node '<SignedInfo>' matches base64-decoded content
// of node '<SignatureValue>'
// XrML content is valid if SHA-1 hash of result of transforms
// from node '<Signature/SignedInfo/Reference/Transforms>'
// (licenseTransform and canonicalization) applied to entire XrML
// content matches base64-decoded content of node
// '<Signature/SignedInfo/Reference/DigestValue>'
typedef struct _xrm_ms // 'XrML digital license' (2731 bytes)
{
CHAR Node0[sizeof("<?xml version=\"1.0\" encoding=\"utf-8\"?>") - 1];
CHAR Node1[sizeof("<r:license xmlns:r=\"urn:mpeg:mpeg21:2003:01-REL-R-NS\" licenseId=\"{18e64a2e-ab21-4b1b-9603-b7f25a436d2b}\" xmlns:sx=\"urn:mpeg:mpeg21:2003:01-REL-SX-NS\" xmlns:mx=\"urn:mpeg:mpeg21:2003:01-REL-MX-NS\" xmlns:sl=\"http://www.microsoft.com/DRM/XrML2/SL/v2\" xmlns:tm=\"http://www.microsoft.com/DRM/XrML2/TM/v2\">") - 1];
CHAR Node2[sizeof("<r:title>") - 1];
CHAR Title[sizeof("OEM Certificate") - 1];
CHAR Node3[sizeof("</r:title>") - 1];
CHAR Node4[sizeof("<r:grant>") - 1];
CHAR Node5[sizeof("<sl:binding>") - 1];
CHAR Node6[sizeof("<sl:data Algorithm=\"msft:rm/algorithm/bios/4.0\">") - 1];
CHAR Certificate[sizeof("kgAAAAAAAgBGVUogICABAAEA66gIyLycU7jg4KrgkAjaWJaUhwzjNngUw7lB1kGft0SVrTilj7SCdA2t4PzYRfQqwsIP/sm3x07DeppgPIvW0c59I2YUpv7bwW0Vv+R72/GEKIyHB6oKdeViEdoi0Cot5fNZlU05WPDF97Il9UmQGXfER1Lp9y6pxMdbGlV7K8Q=") - 1];
CHAR Node7[sizeof("</sl:data>") - 1];
CHAR Node8[sizeof("</sl:binding>") - 1];
CHAR Node9[sizeof("<r:possessProperty/>") - 1];
CHAR Node10[sizeof("<sx:propertyUri definition=\"trustedOem\"/>") - 1];
CHAR Node11[sizeof("</r:grant>") - 1];
CHAR Node12[sizeof("<r:issuer>") - 1];
CHAR Node13[sizeof("<Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\">") - 1];
CHAR Node14[sizeof("<SignedInfo>") - 1];
CHAR Node15[sizeof("<CanonicalizationMethod Algorithm=\"http://www.microsoft.com/xrml/lwc14n\"/>") - 1];
CHAR Node16[sizeof("<SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>") - 1];
CHAR Node17[sizeof("<Reference>") - 1];
CHAR Node18[sizeof("<Transforms>") - 1];
CHAR Node19[sizeof("<Transform Algorithm=\"urn:mpeg:mpeg21:2003:01-REL-R-NS:licenseTransform\"/>") - 1];
CHAR Node20[sizeof("<Transform Algorithm=\"http://www.microsoft.com/xrml/lwc14n\"/>") - 1];
CHAR Node21[sizeof("</Transforms>") - 1];
CHAR Node22[sizeof("<DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>") - 1];
CHAR Node23[sizeof("<DigestValue>") - 1];
CHAR Digest[sizeof("jvrnrEHqfem3NAqRDvCSGr7fz2U=") - 1];
CHAR Node24[sizeof("</DigestValue>") - 1];
CHAR Node25[sizeof("</Reference>") - 1];
CHAR Node26[sizeof("</SignedInfo>") - 1];
CHAR Node27[sizeof("<SignatureValue>") - 1];
CHAR Signature[sizeof("KI3JpD6J+cKzPye4OCf0azsorDt4a269v9r9K6HTM3lLwWzhclyskr/1j1nf25ELXmqthBR050lAQ1/RD+e+i+rWFoELDlYnnGgChnR//O45T/PpHHh6Sg4SBrteHPT6rasHD73KDihI04UyZj+Xq8pNduqPrJBHJfjvWfSq2nAA5GWTt7ke2jCmVFSshW3Ax5R5SGmXAeBWujhXBBUfkJ+txOMdPYRbdGRR1WWKxOmhVH9dovWB1OzuH8TadpkTDUKD2LLfw4fsBZRx3lgWw9yuB36LOJLYHzeda9sQSbZTHEDIgXQkkUTXI6cYQevhM/asKkR1SU9bHQp3Y0MKiA==") - 1];
CHAR Node28[sizeof("</SignatureValue>") - 1];
CHAR Node29[sizeof("<KeyInfo>") - 1];
CHAR Node30[sizeof("<KeyValue>") - 1];
CHAR Node31[sizeof("<RSAKeyValue>") - 1];
CHAR Node32[sizeof("<Modulus>") - 1];
CHAR Modulus[sizeof("sotZn+w9juKPf7bMO9rNFriB+10v/t9bo/XWG+rzoDbw/uF4INZ5rGRIitiITY/bI4rANkv4Z5hG/8VxGMbqvqcaXJqnRFda7XAjgm1z9wkgX1R/d2tXLUUUQP0J1XuSbgzR89T/lpnc5q2Cdvy7Gv2pZvAzSeLOponXc8J3zOFr0IUXBGprXKnemVk1iJBFnyQGlWG3UoSpdlF0ichBQwPx/PgoTbcZsA7Gg62BGwPx/uDA3ZgwowrPlRwfLVAO6qE9xPJqRZdRFfPHbdQjp1YAq27wc6cTz5sPSTB1pJ4L9MD+NpvHj2OMZV5+LJ+bxZbTqhPcrzCp7ckkyD7Hzw==") - 1];
CHAR Node33[sizeof("</Modulus>") - 1];
CHAR Node34[sizeof("<Exponent>") - 1];
CHAR Exponent[sizeof("AQAB") - 1];
CHAR Node35[sizeof("</Exponent>") - 1];
CHAR Node36[sizeof("</RSAKeyValue>") - 1];
CHAR Node37[sizeof("</KeyValue>") - 1];
CHAR Node38[sizeof("</KeyInfo>") - 1];
CHAR Node39[sizeof("</Signature>") - 1];
CHAR Node40[sizeof("<r:details>") - 1];
CHAR Node41[sizeof("<r:timeOfIssue>") - 1];
CHAR TimeOfIssue[sizeof("2006-06-17T18:21:10Z") - 1];
CHAR Node42[sizeof("</r:timeOfIssue>") - 1];
CHAR Node43[sizeof("</r:details>") - 1];
CHAR Node44[sizeof("</r:issuer>") - 1];
CHAR Node45[sizeof("<r:otherInfo xmlns:r=\"urn:mpeg:mpeg21:2003:01-REL-R-NS\">") - 1];
CHAR Node46[sizeof("<tm:infoTables xmlns:tm=\"http://www.microsoft.com/DRM/XrML2/TM/v2\">") - 1];
CHAR Node47[sizeof("<tm:infoList tag=\"#global\">") - 1];
CHAR Node48[sizeof("<tm:infoStr name=\"applicationId\">") - 1];
CHAR ApplicationId[sizeof("{55c92734-d682-4d71-983e-d6ec3f16059f}") - 1];
CHAR Node49[sizeof("</tm:infoStr>") - 1];
CHAR Node50[sizeof("<tm:infoStr name=\"licenseCategory\">") - 1];
CHAR LicenseCategory[sizeof("msft:sl/PPD") - 1];
CHAR Node51[sizeof("</tm:infoStr>") - 1];
CHAR Node52[sizeof("<tm:infoStr name=\"licenseType\">") - 1];
CHAR LicenseType[sizeof("msft:sl/OEMCERT") - 1];
CHAR Node53[sizeof("</tm:infoStr>") - 1];
CHAR Node54[sizeof("<tm:infoStr name=\"licenseVersion\">") - 1];
CHAR LicenseVersion[sizeof("2.0") - 1];
CHAR Node55[sizeof("</tm:infoStr>") - 1];
CHAR Node56[sizeof("<tm:infoStr name=\"licensorUrl\">") - 1];
CHAR LicensorUrl[sizeof("http://licensing.microsoft.com") - 1];
CHAR Node57[sizeof("</tm:infoStr>") - 1];
CHAR Node58[sizeof("</tm:infoList>") - 1];
CHAR Node59[sizeof("</tm:infoTables>") - 1];
CHAR Node60[sizeof("</r:otherInfo>") - 1];
CHAR Node61[sizeof("</r:license>") - 1];
} XRM_MS;
#pragma pack(push, 1)
typedef struct _certificate // decoded 'Certificate'
{
DWORD length; // length of entire structure: 0x00000092
DWORD version; // windows marker version: 0x00020000
CHAR oemid[6]; // OEM identification
DWORD exponent; // RSA public key exponent: 0x00010001
BYTE modulus[128]; // RSA public key modulus
} CERTIFICATE;
#pragma pack(pop)
const ALG_ID aiHash = CALG_SHA_256;
__declspec(noreturn)
__declspec(safebuffers)
VOID CDECL wmainCRTStartup(VOID)
{
LPWSTR *lpArguments;
INT nArguments;
#ifdef VERBOSE
CCRYPT_OID_INFO *lpOIDInfo;
BYTE cbProvider[128];
DWORD dwProvider = sizeof(cbProvider);
#endif
HCRYPTPROV hProvider;
HCRYPTKEY hPublicKey;
HCRYPTHASH hHash;
CERTIFICATE cbCertificate;
DWORD dwCertificate = sizeof(cbCertificate);
BYTE cbDigest[20]; // SHA-1
DWORD dwDigest = sizeof(cbDigest);
BYTE cbSignature[256];
DWORD dwSignature = sizeof(cbSignature);
BYTE cbModulus[256];
DWORD dwModulus = sizeof(cbModulus);
BYTE cbExponent[3];
DWORD dwExponent = sizeof(cbExponent);
SLIC cbSLIC;
DWORD dwSLIC;
BYTE cbTemp;
DWORD dwTemp;
DWORD dwLeft;
DWORD dwRight;
DWORD dwError = ERROR_BAD_ARGUMENTS;
BOOL bMatch = FALSE;
FILETIME ftXrML;
SYSTEMTIME stXrML;
XRM_MS cbXrML;
CHAR szXrML[sizeof("2006-06-17T18:21:10Z")];
DWORD dwXrML;
HANDLE hXrML;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments != 2)
PrintConsole(hConsole,
L"No argument: a single (absolute or relative) path name of an XrML (*.xrm-ms)\n"
L" digital license file must be given!\n");
else
{
hXrML = CreateFile(lpArguments[1],
FILE_READ_DATA,
FILE_SHARE_READ,
(LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);
if (hXrML == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"CreateFile() returned error %lu\n",
dwError = GetLastError());
else
{
if (!ReadFile(hXrML,
&cbXrML,
sizeof(cbXrML) + 1,
&dwXrML,
(LPOVERLAPPED) NULL))
PrintConsole(hConsole,
L"ReadFile() returned error %lu\n",
dwError = GetLastError());
else
if ((dwXrML != sizeof(cbXrML))
|| memcmp("<?xml version=\"1.0\" encoding=\"utf-8\"?>", cbXrML.Node0, sizeof(cbXrML.Node0))
|| memcmp("<sx:propertyUri definition=\"trustedOem\"/>", cbXrML.Node10, sizeof(cbXrML.Node10))
|| memcmp("OEM Certificate", cbXrML.Title, sizeof(cbXrML.Title))
|| memcmp("msft:sl/PPD", cbXrML.LicenseCategory, sizeof(cbXrML.LicenseCategory))
|| memcmp("msft:sl/OEMCERT", cbXrML.LicenseType, sizeof(cbXrML.LicenseType))
|| memcmp("2.0", cbXrML.LicenseVersion, sizeof(cbXrML.LicenseVersion))
|| memcmp("http://licensing.microsoft.com", cbXrML.LicensorUrl, sizeof(cbXrML.LicensorUrl)))
PrintConsole(hConsole,
L"File \'%ls\' contains no XrML digital license!\n",
lpArguments[1]);
else
{
dwError = ERROR_SUCCESS;
if (!GetFileTime(hXrML,
(LPFILETIME) NULL,
(LPFILETIME) NULL,
&ftXrML))
PrintConsole(hConsole,
L"GetFileTime() returned error %lu\n",
dwError = GetLastError());
else
if (!FileTimeToSystemTime(&ftXrML,
&stXrML))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
dwError = GetLastError());
else
if (wsprintfA(szXrML,
"%04hu-%02hu-%02huT%02hu:%02hu:%02huZ",
stXrML.wYear,
stXrML.wMonth,
stXrML.wDay,
stXrML.wHour,
stXrML.wMinute,
stXrML.wSecond) != sizeof(cbXrML.TimeOfIssue))
PrintConsole(hConsole,
L"wsprintf() returned error %lu\n",
dwError = GetLastError());
else
if (memcmp(szXrML, cbXrML.TimeOfIssue, sizeof(cbXrML.TimeOfIssue)))
PrintConsole(hConsole,
L"Timestamp \'%hs\' of XrML digital license file \'%ls\' differs from time of issue \'%.20hs\'!\n",
szXrML, lpArguments[1], cbXrML.TimeOfIssue);
PrintConsole(hConsole,
L"XrML digital license file \'%ls\': size = %lu\n"
L"\tApplication ID:\t\t%.38hs\n"
L"\tLicense ID:\t\t%.38hs\n"
L"\tLicense Version:\t%.3hs\n"
L"\tDate/Time of Issue:\t%.20hs\n",
lpArguments[1], dwXrML,
cbXrML.ApplicationId,
cbXrML.Node1 + 65,
cbXrML.LicenseVersion,
cbXrML.TimeOfIssue);
if (!CryptStringToBinaryA(cbXrML.Certificate,
sizeof(cbXrML.Certificate),
CRYPT_STRING_BASE64,
(LPBYTE) &cbCertificate,
&dwCertificate,
(LPDWORD) NULL,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"CryptStringToBinary() returned error %lu\n",
dwError = GetLastError());
else
{
PrintConsole(hConsole,
L"\tCertificate: size = %lu\n"
L"\t\tLength:\t\t%lu\n"
L"\t\tVersion:\t%hu.%hu\n"
L"\t\tOEM ID:\t\t\"%.6hs\"\n"
L"\t\tExponent:\t%lu\n"
L"\t\tModulus: size = %lu"
L"\t\t\tValue:\t0x",
dwCertificate,
cbCertificate.length,
HIWORD(cbCertificate.version), LOWORD(cbCertificate.version),
cbCertificate.oemid,
cbCertificate.exponent,
sizeof(cbCertificate.modulus));
for (dwTemp = 0; dwTemp < sizeof(cbCertificate.modulus); dwTemp++)
PrintConsole(hConsole,
L"%02X",
cbCertificate.modulus[dwTemp]);
PrintConsole(hConsole,
L"\n");
}
if (!CryptStringToBinaryA(cbXrML.Digest,
sizeof(cbXrML.Digest),
CRYPT_STRING_BASE64,
cbDigest,
&dwDigest,
(LPDWORD) NULL,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"CryptStringToBinary() returned error %lu\n",
dwError = GetLastError());
else
{
PrintConsole(hConsole,
L"\tDigest: size = %lu\n"
L"\t\tSHA-1 Hash:\t0x",
dwDigest);
for (dwTemp = 0; dwTemp < dwDigest; dwTemp++)
PrintConsole(hConsole,
L"%02X",
cbDigest[dwTemp]);
PrintConsole(hConsole,
L"\n");
}
if (!CryptStringToBinaryA(cbXrML.Signature,
sizeof(cbXrML.Signature),
CRYPT_STRING_BASE64,
cbSignature,
&dwSignature,
(LPDWORD) NULL,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"CryptStringToBinary() returned error %lu\n",
dwError = GetLastError());
else
{
PrintConsole(hConsole,
L"\tSignature: size = %lu\n"
L"\t\tValue:\t\t0x",
dwSignature);
for (dwTemp = 0; dwTemp < dwSignature; dwTemp++)
PrintConsole(hConsole,
L"%02X",
cbSignature[dwTemp]);
PrintConsole(hConsole,
L"\n");
}
if (!CryptStringToBinaryA(cbXrML.Modulus,
sizeof(cbXrML.Modulus),
CRYPT_STRING_BASE64,
cbModulus,
&dwModulus,
(LPDWORD) NULL,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"CryptStringToBinary() returned error %lu\n",
dwError = GetLastError());
else
{
PrintConsole(hConsole,
L"\tModulus: size = %lu\n"
L"\t\tValue:\t\t0x",
dwModulus);
for (dwTemp = 0; dwTemp < dwModulus; dwTemp++)
PrintConsole(hConsole,
L"%02X",
cbModulus[dwTemp]);
PrintConsole(hConsole,
L"\n");
}
if (!CryptStringToBinaryA(cbXrML.Exponent,
sizeof(cbXrML.Exponent),
CRYPT_STRING_BASE64,
cbExponent,
&dwExponent,
(LPDWORD) NULL,
(LPDWORD) NULL))
PrintConsole(hConsole,
L"CryptStringToBinary() returned error %lu\n",
dwError = GetLastError());
else
{
PrintConsole(hConsole,
L"\tExponent: size = %lu\n"
L"\t\tValue:\t\t0x\n",
dwExponent);
for (dwTemp = 0; dwTemp < dwExponent; dwTemp++)
PrintConsole(hConsole,
L"%02X",
cbExponent[dwTemp]);
PrintConsole(hConsole,
L"\n");
}
dwSLIC = GetSystemFirmwareTable('ACPI', 'CILS', &cbSLIC, sizeof(cbSLIC));
if (dwSLIC == 0)
{
dwError = GetLastError();
if (dwError != ERROR_NOT_FOUND)
PrintConsole(hConsole,
L"GetSystemFirmwareTable() returned error %lu\n",
dwError);
else
PrintConsole(hConsole,
L"\'SLIC\' \'ACPI\' table not present!\n");
}
else
{
for (cbTemp = 0, dwTemp = cbSLIC.Length; dwTemp != 0; cbTemp += ((LPBYTE) &cbSLIC)[--dwTemp])
continue;
PrintConsole(hConsole,
L"\n"
L"\'SLIC\' \'ACPI\' table: size = %lu, checksum %ls\n"
L"\tSignature:\t\"%.4hs\"\n"
L"\tLength:\t\t%lu\n"
L"\tRevision:\t0x%02X\n"
L"\tChecksum:\t0x%02X\n"
L"\tOEM ID:\t\t\"%.6hs\"\n"
L"\tOEM Table ID:\t\"%.8hs\"\n"
L"\tOEM Revision:\t0x%08X\n"
L"\tCreator ID:\t\"%.4hs\"\n"
L"\tCreator Rev.:\t0x%08X\n",
dwSLIC, cbTemp ? L"wrong" : L"correct",
&cbSLIC.Signature,
cbSLIC.Length,
cbSLIC.Revision,
cbSLIC.Checksum,
cbSLIC.OEMId,
cbSLIC.OEMTableId,
cbSLIC.OEMRevision,
cbSLIC.CreatorId,
cbSLIC.CreatorRevision);
if ((cbSLIC.RSAType != 0)
|| (cbSLIC.RSALength != 156)
|| (cbSLIC.SLSType != 1)
|| (cbSLIC.SLSLength != 182))
PrintConsole(hConsole,
L"\'SLIC\' \'ACPI\' table has unknown layout!\n");
else
{ // Transpose signature from 'big endian' to 'little endian' form
dwLeft = ~0UL;
dwRight = sizeof(cbSLIC.SLSSignature);
while (++dwLeft < --dwRight)
{
cbTemp = cbSLIC.SLSSignature[dwLeft];
cbSLIC.SLSSignature[dwLeft] = cbSLIC.SLSSignature[dwRight];
cbSLIC.SLSSignature[dwRight] = cbTemp;
}
if (!CryptAcquireContext(&hProvider,
(LPCWSTR) NULL,
(LPCWSTR) NULL,
PROV_RSA_AES,
CRYPT_VERIFYCONTEXT))
PrintConsole(hConsole,
L"CryptAcquireContext() returned error %lu\n",
dwError = GetLastError());
else
{
if (!CryptImportKey(hProvider,
&cbSLIC.RSAKeyType,
cbSLIC.RSAModulus + sizeof(cbSLIC.RSAModulus) - &cbSLIC.RSAKeyType,
0,
0,
&hPublicKey))
PrintConsole(hConsole,
L"CryptImportKey() returned error %lu\n",
dwError = GetLastError());
else
{
#ifdef VERBOSE
if (!CryptGetProvParam(hProvider,
PP_NAME,
cbProvider,
&dwProvider,
0))
PrintConsole(hConsole,
L"CryptGetProvParam() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"CSP Name: %hs\n",
cbProvider);
lpOIDInfo = CryptFindOIDInfo(CRYPT_OID_INFO_ALGID_KEY,
&cbSLIC.RSAAlgId,
0);
if (lpOIDInfo != NULL)
PrintConsole(hConsole,
L"RSA Public Key Algorithm: OID = %hs (%ls)\n",
lpOIDInfo->pszOID, lpOIDInfo->pwszName);
else
PrintConsole(hConsole,
L"RSA Public Key Algorithm: OID = %hs\n",
CertAlgIdToOID(cbSLIC.RSAAlgId));
PrintConsole(hConsole,
L"RSA Public Key \'Magic Number\': \"%.4hs\"\n"
L"RSA Public Key Bits: %lu\n"
L"RSA Public Key Exponent: %lu\n",
&cbSLIC.RSAMagic,
cbSLIC.RSABits,
cbSLIC.RSAExponent);
lpOIDInfo = CryptFindOIDInfo(CRYPT_OID_INFO_ALGID_KEY,
&aiHash,
0);
if (lpOIDInfo != NULL)
PrintConsole(hConsole,
L"\'Windows\' Marker Signature Hash Algorithm: OID = %hs (%ls)\n",
lpOIDInfo->pszOID, lpOIDInfo->pwszName);
else
PrintConsole(hConsole,
L"\'Windows\' Marker Hash Algorithm: OID = %hs\n",
CertAlgIdToOID(aiHash));
#endif
if (!CryptCreateHash(hProvider,
aiHash,
0,
0,
&hHash))
PrintConsole(hConsole,
L"CryptCreateHash() returned error %lu\n",
dwError = GetLastError());
else
{
if (!CryptHashData(hHash,
(LPBYTE) &cbSLIC.SLSActivation,
cbSLIC.SLSSignature - (LPBYTE) &cbSLIC.SLSActivation,
0))
PrintConsole(hConsole,
L"CryptHashData() returned error %lu\n",
dwError = GetLastError());
else
if (!CryptVerifySignature(hHash,
cbSLIC.SLSSignature,
sizeof(cbSLIC.SLSSignature),
hPublicKey,
(LPCWSTR) NULL,
0))
PrintConsole(hConsole,
L"CryptVerifySignature() returned error %lu\n",
dwError = GetLastError());
else
bMatch = TRUE;
if (!CryptDestroyHash(hHash))
PrintConsole(hConsole,
L"CryptDestroyHash() returned error %lu\n",
GetLastError());
}
if (!CryptDestroyKey(hPublicKey))
PrintConsole(hConsole,
L"CryptDestroyKey() returned error %lu\n",
GetLastError());
}
if (!CryptReleaseContext(hProvider, 0))
PrintConsole(hConsole,
L"CryptReleaseContext() returned error %lu\n",
GetLastError());
}
PrintConsole(hConsole,
L"\t\tMarker Check:\t%ls\n"
L"\t\tMarker String:\t\"%.8hs\"\n"
L"\t\tMarker Version:\t%hu.%hu\n"
L"\t\tOEM Activation:\t%hu.%hu\n"
L"\t\tOEM ID:\t\t\"%.6hs\"\n"
L"\t\tOEM Table ID:\t\"%.8hs\"\n",
bMatch ? L"OK" : L"ERROR",
cbSLIC.SLSMarker,
cbSLIC.SLSMarkerHigh, cbSLIC.SLSMarkerLow,
HIWORD(cbSLIC.SLSActivation), LOWORD(cbSLIC.SLSActivation),
cbSLIC.SLSOEMId,
cbSLIC.SLSOEMTableId);
}
bMatch = (memcmp(cbSLIC.OEMId, cbCertificate.oemid, sizeof(cbCertificate.oemid)) == 0)
&& (cbSLIC.RSAExponent == cbCertificate.exponent)
&& (memcmp(cbSLIC.RSAModulus, cbCertificate.modulus, sizeof(cbCertificate.modulus)) == 0);
PrintConsole(hConsole,
L"\n"
L"\'SLIC\' \'ACPI\' table %ls \'Certificate\' from XrML digital license \'%ls\'\n",
bMatch ? L"matches" : L"does not match", lpArguments[1]);
}
}
if (!CloseHandle(hXrML))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
SLICHECK.C
created in step 1., link the compiled
object file SLICHECK.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.2 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /DVERBOSE /FeSLICHECK.COM SLICHECK.C ADVAPI32.LIB CRYPT32.LIB KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE SLICHECK.OBJFor 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. SLICHECK.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file SLICHECK.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 0e 00 00 ......#.........
00 14 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 02 00 00 00 2f 03 05 00 02 00 00 00 00 00 ....../.........
00 40 00 00 00 02 00 00 43 e4 00 00 03 00 00 85 .@......C.......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
a8 30 00 00 64 00 00 00 00 00 00 00 00 00 00 00 .0..d...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 40 30 00 00 40 00 00 00 ........@0..@...
00 00 00 00 00 00 00 00 00 20 00 00 80 00 00 00 ......... ......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
60 0c 00 00 00 10 00 00 00 0e 00 00 00 02 00 00 `...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 ae 13 00 00 00 20 00 00 .const....... ..
00 14 00 00 00 10 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 04 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 fc f7 ff ff 50 ff 15 78 20 40 00 8b f0 .......P..x @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 fc f7 ff ff 50 ff 75 08 ff 15 38 20 40 00 85 .....P.u...8 @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8d .t.3.9u....^..U.
6c 24 88 81 ec cc 0f 00 00 83 65 40 00 53 56 57 l$........e@.SVW
b8 00 01 00 00 bf 80 00 00 00 6a f4 89 7d 28 c7 ..........j..}(.
45 44 92 00 00 00 c7 45 60 14 00 00 00 89 45 4c ED.....E`.....EL
89 45 54 c7 45 5c 03 00 00 00 c7 45 70 a0 00 00 .ET.E\.....Ep...
00 ff 15 64 20 40 00 89 45 6c 83 f8 ff 75 0e ff ...d @..El...u..
15 60 20 40 00 89 45 70 e9 11 0a 00 00 8d 45 2c .` @..Ep......E,
50 ff 15 5c 20 40 00 50 e8 0b 0a 00 00 89 45 64 P..\ @.P......Ed
85 c0 75 2b ff 15 60 20 40 00 50 68 14 30 40 00 ..u+..` @.Ph.0@.
bb e0 2f 40 00 53 ff 75 6c 89 45 70 e8 1f ff ff ../@.S.ul.Ep....
ff 8b 35 60 20 40 00 8b 7d 6c e9 af 09 00 00 83 ..5` @..}l......
7d 2c 02 8b 35 60 20 40 00 bb e0 2f 40 00 74 17 },..5` @.../@.t.
68 e0 2e 40 00 ff 75 6c e8 f3 fe ff ff 8b 7d 6c h..@..ul......}l
59 59 e9 6b 09 00 00 6a 00 57 6a 03 6a 00 6a 01 YY.k...j.Wj.j.j.
6a 01 ff 70 04 ff 15 58 20 40 00 89 45 38 83 f8 j..p...X @..E8..
ff 75 22 ff d6 50 68 c4 2e 40 00 53 ff 75 6c 89 .u"..Ph..@.S.ul.
45 70 e8 b9 fe ff ff 8b 35 60 20 40 00 8b 7d 6c Ep......5` @..}l
e9 2a 09 00 00 6a 00 8d 4d 3c 51 68 ac 0a 00 00 .*...j..M<Qh....
8d 8d ac f0 ff ff 51 50 ff 15 54 20 40 00 85 c0 ......QP..T @...
75 1c ff d6 50 68 b0 2e 40 00 89 45 70 53 ff 75 u...Ph..@..EpS.u
6c e8 7a fe ff ff 83 c4 10 e9 cc 08 00 00 81 7d l.z............}
3c ab 0a 00 00 0f 85 a9 08 00 00 6a 13 59 8d bd <..........j.Y..
ac f0 ff ff be 88 2e 40 00 33 c0 66 f3 a7 0f 85 .......@.3.f....
90 08 00 00 6a 29 59 8d bd 53 f3 ff ff be 5c 2e ....j)Y..S....\.
40 00 33 c0 f3 a6 0f 85 78 08 00 00 6a 0f 59 8d @.3.....x...j.Y.
bd 06 f2 ff ff be 4c 2e 40 00 33 c0 f3 a6 0f 85 ......L.@.3.....
60 08 00 00 6a 0b 59 8d bd 50 fa ff ff be 40 2e `...j.Y..P....@.
40 00 33 c0 f3 a6 0f 85 48 08 00 00 6a 0f 59 8d @.3.....H...j.Y.
bd 87 fa ff ff be 30 2e 40 00 33 c0 f3 a6 0f 85 ......0.@.3.....
30 08 00 00 6a 03 59 8d bd c5 fa ff ff be 2c 2e 0...j.Y.......,.
40 00 33 c0 f3 a6 0f 85 18 08 00 00 6a 0f 59 8d @.3.........j.Y.
bd f4 fa ff ff be 0c 2e 40 00 33 c0 66 f3 a7 0f ........@.3.f...
85 ff 07 00 00 8d 4d 10 51 50 50 ff 75 38 89 45 ......M.QPP.u8.E
70 ff 15 50 20 40 00 85 c0 75 10 8b 35 60 20 40 p..P @...u..5` @
00 ff d6 50 68 f4 2d 40 00 eb 65 8d 45 18 50 8d ...Ph.-@..e.E.P.
45 10 50 ff 15 4c 20 40 00 85 c0 75 10 8b 35 60 E.P..L @...u..5`
20 40 00 ff d6 50 68 c8 2d 40 00 eb 43 0f b7 45 @...Ph.-@..C..E
24 50 0f b7 45 22 50 0f b7 45 20 50 0f b7 45 1e $P..E"P..E P..E.
50 0f b7 45 1a 50 0f b7 45 18 50 8d 45 f8 68 a0 P..E.P..E.P.E.h.
2d 40 00 50 ff 15 74 20 40 00 83 c4 20 83 f8 14 -@.P..t @... ...
74 20 8b 35 60 20 40 00 ff d6 50 68 8c 2d 40 00 t .5` @...Ph.-@.
8b 7d 6c 53 57 89 45 70 e8 23 fd ff ff 83 c4 10 .}lSW.Ep.#......
eb 3c 6a 05 59 8d bd 08 f9 ff ff 8d 75 f8 33 c0 .<j.Y.......u.3.
f3 a7 74 21 8d 85 08 f9 ff ff 50 8b 45 64 ff 70 ..t!......P.Ed.p
04 8d 45 f8 50 68 d8 2c 40 00 ff 75 6c e8 ee fc ..E.Ph.,@..ul...
ff ff 83 c4 14 8b 7d 6c 8b 35 60 20 40 00 8d 85 ......}l.5` @...
08 f9 ff ff 50 8d 85 c5 fa ff ff 50 8d 85 13 f1 ....P......P....
ff ff 50 8d 85 fa f9 ff ff 50 ff 75 3c 8b 45 64 ..P......P.u<.Ed
ff 70 04 68 b8 2b 40 00 57 e8 b2 fc ff ff 83 c4 .p.h.+@.W.......
20 6a 00 6a 00 8d 45 44 50 8d 85 d8 fd ff ff 50 j.j..EDP......P
6a 01 68 c4 00 00 00 8d 85 64 f2 ff ff 50 ff 15 j.h......d...P..
2c 20 40 00 85 c0 75 17 ff d6 50 68 8c 2b 40 00 , @...u...Ph.+@.
53 57 89 45 70 e8 76 fc ff ff 83 c4 10 eb 6e 68 SW.Ep.v.......nh
80 00 00 00 ff b5 e6 fd ff ff 8d 85 e0 fd ff ff ................
50 8b 85 dc fd ff ff 0f b7 c8 51 c1 e8 10 50 ff P.........Q...P.
b5 d8 fd ff ff ff 75 44 68 88 2a 40 00 57 e8 3d ......uDh.*@.W.=
fc ff ff 83 c4 24 83 65 74 00 8b 45 74 0f b6 84 .....$.et..Et...
05 ea fd ff ff 50 68 78 2a 40 00 57 e8 1f fc ff .....Phx*@.W....
ff 83 c4 0c ff 45 74 81 7d 74 80 00 00 00 72 da .....Et.}t....r.
68 74 2a 40 00 57 e8 05 fc ff ff 59 59 6a 00 6a ht*@.W.....YYj.j
00 8d 45 60 50 8d 45 e4 50 6a 01 6a 1c 8d 85 5f ..E`P.E.Pj.j..._
f5 ff ff 50 ff 15 2c 20 40 00 85 c0 75 17 ff d6 ...P.., @...u...
50 68 8c 2b 40 00 53 57 89 45 70 e8 d0 fb ff ff Ph.+@.SW.Ep.....
83 c4 10 eb 4a ff 75 60 68 28 2a 40 00 57 e8 bd ....J.u`h(*@.W..
fb ff ff 83 65 74 00 83 c4 0c 83 7d 60 00 76 22 ....et.....}`.v"
8b 45 74 0f b6 44 05 e4 50 68 78 2a 40 00 57 e8 .Et..D..Phx*@.W.
9c fb ff ff 83 c4 0c ff 45 74 8b 45 74 3b 45 60 ........Et.Et;E`
72 de 68 74 2a 40 00 57 e8 83 fb ff ff 59 59 6a r.ht*@.W.....YYj
00 6a 00 8d 45 4c 50 8d 85 58 fb ff ff 50 6a 01 .j..ELP..X...Pj.
68 58 01 00 00 8d 85 b2 f5 ff ff 50 ff 15 2c 20 hX.........P..,
40 00 85 c0 75 17 ff d6 50 68 8c 2b 40 00 53 57 @...u...Ph.+@.SW
89 45 70 e8 48 fb ff ff 83 c4 10 eb 4d ff 75 4c .Ep.H.......M.uL
68 e0 29 40 00 57 e8 35 fb ff ff 83 65 74 00 83 h.)@.W.5....et..
c4 0c 83 7d 4c 00 76 25 8b 45 74 0f b6 84 05 58 ...}L.v%.Et....X
fb ff ff 50 68 78 2a 40 00 57 e8 11 fb ff ff 83 ...Phx*@.W......
c4 0c ff 45 74 8b 45 74 3b 45 4c 72 db 68 74 2a ...Et.Et;ELr.ht*
40 00 57 e8 f8 fa ff ff 59 59 6a 00 6a 00 8d 45 @.W.....YYj.j..E
54 50 8d 85 58 fc ff ff 50 6a 01 68 58 01 00 00 TP..X...Pj.hX...
8d 85 44 f7 ff ff 50 ff 15 2c 20 40 00 85 c0 75 ..D...P.., @...u
17 ff d6 50 68 8c 2b 40 00 53 57 89 45 70 e8 bd ...Ph.+@.SW.Ep..
fa ff ff 83 c4 10 eb 4d ff 75 54 68 98 29 40 00 .......M.uTh.)@.
57 e8 aa fa ff ff 83 65 74 00 83 c4 0c 83 7d 54 W......et.....}T
00 76 25 8b 45 74 0f b6 84 05 58 fc ff ff 50 68 .v%.Et....X...Ph
78 2a 40 00 57 e8 86 fa ff ff 83 c4 0c ff 45 74 x*@.W.........Et
8b 45 74 3b 45 54 72 db 68 74 2a 40 00 57 e8 6d .Et;ETr.ht*@.W.m
fa ff ff 59 59 6a 00 6a 00 8d 45 5c 50 8d 45 30 ...YYj.j..E\P.E0
50 6a 01 6a 04 8d 85 b0 f8 ff ff 50 ff 15 2c 20 Pj.j.......P..,
40 00 85 c0 75 17 ff d6 50 68 8c 2b 40 00 53 57 @...u...Ph.+@.SW
89 45 70 e8 38 fa ff ff 83 c4 10 eb 4a ff 75 5c .Ep.8.......J.u\
68 50 29 40 00 57 e8 25 fa ff ff 83 65 74 00 83 hP)@.W.%....et..
c4 0c 83 7d 5c 00 76 22 8b 45 74 0f b6 44 05 30 ...}\.v".Et..D.0
50 68 78 2a 40 00 57 e8 04 fa ff ff 83 c4 0c ff Phx*@.W.........
45 74 8b 45 74 3b 45 5c 72 de 68 74 2a 40 00 57 Et.Et;E\r.ht*@.W
e8 eb f9 ff ff 59 59 68 78 01 00 00 8d 85 6c fe .....YYhx.....l.
ff ff 50 68 53 4c 49 43 68 49 50 43 41 ff 15 48 ..PhSLIChIPCA..H
20 40 00 85 c0 75 33 ff d6 89 45 70 3d 90 04 00 @...u3...Ep=...
00 74 15 50 68 1c 29 40 00 53 57 e8 b0 f9 ff ff .t.Ph.)@.SW.....
83 c4 10 e9 0b 04 00 00 68 d8 28 40 00 57 e8 9d ........h.(@.W..
f9 ff ff 59 59 e9 f9 03 00 00 8b 95 70 fe ff ff ...YY.......p...
32 c9 85 d2 74 15 02 8c 15 6b fe ff ff 4a 85 d2 2...t....k...J..
75 f4 84 c9 b9 c8 28 40 00 75 05 b9 b8 28 40 00 u.....(@.u...(@.
ff b5 8c fe ff ff 8d 95 88 fe ff ff 52 ff b5 84 ............R...
fe ff ff 8d 95 7c fe ff ff 52 8d 95 76 fe ff ff .....|...R..v...
52 0f b6 95 75 fe ff ff 52 0f b6 95 74 fe ff ff R...u...R...t...
52 ff b5 70 fe ff ff 8d 95 6c fe ff ff 52 51 50 R..p.....l...RQP
68 f8 26 40 00 57 e8 25 f9 ff ff 83 c4 34 83 bd h.&@.W.%.....4..
90 fe ff ff 00 0f 85 f8 02 00 00 81 bd 94 fe ff ................
ff 9c 00 00 00 0f 85 e8 02 00 00 83 bd 2c ff ff .............,..
ff 01 0f 85 db 02 00 00 81 bd 30 ff ff ff b6 00 ..........0.....
00 00 0f 85 cb 02 00 00 83 65 74 00 c7 45 58 7f .........et..EX.
00 00 00 8b 45 74 ff 45 74 8d 84 05 62 ff ff ff ....Et.Et...b...
8a 08 88 4d 6b 8b 4d 58 ff 4d 58 8d 8c 0d 62 ff ...Mk.MX.MX...b.
ff ff 8a 11 88 10 8a 45 6b 88 01 8b 45 74 3b 45 .......Ek...Et;E
58 72 d0 68 00 00 00 f0 6a 18 6a 00 6a 00 8d 45 Xr.h....j.j.j..E
50 50 ff 15 20 20 40 00 85 c0 75 1a ff d6 50 68 PP.. @...u...Ph
cc 26 40 00 53 57 89 45 70 e8 82 f8 ff ff 83 c4 .&@.SW.Ep.......
10 e9 14 02 00 00 8d 45 34 50 6a 00 6a 00 68 94 .......E4Pj.j.h.
00 00 00 8d 85 98 fe ff ff 50 ff 75 50 ff 15 1c .........P.uP...
20 40 00 85 c0 75 10 ff d6 50 89 45 70 68 ac 26 @...u...P.Eph.&
40 00 e9 ad 01 00 00 6a 00 8d 45 28 50 8d 85 58 @......j..E(P..X
fd ff ff 50 6a 04 ff 75 50 ff 15 18 20 40 00 85 ...Pj..uP... @..
c0 75 17 ff d6 50 68 88 26 40 00 53 57 89 45 70 .u...Ph.&@.SW.Ep
e8 1b f8 ff ff 83 c4 10 eb 15 8d 85 58 fd ff ff ............X...
50 68 68 26 40 00 57 e8 04 f8 ff ff 83 c4 0c 6a Phh&@.W........j
00 8d 85 9c fe ff ff 50 6a 03 ff 15 28 20 40 00 .......Pj...( @.
85 c0 74 16 ff 70 08 ff 70 04 68 10 26 40 00 57 ..t..p..p.h.&@.W
e8 db f7 ff ff 83 c4 10 eb 1b ff b5 9c fe ff ff ................
ff 15 30 20 40 00 50 68 c0 25 40 00 57 e8 be f7 ..0 @.Ph.%@.W...
ff ff 83 c4 0c ff b5 a8 fe ff ff 8d 85 a0 fe ff ................
ff ff b5 a4 fe ff ff 50 68 00 25 40 00 57 e8 9d .......Ph.%@.W..
f7 ff ff 83 c4 14 6a 00 68 80 20 40 00 6a 03 ff ......j.h. @.j..
15 28 20 40 00 85 c0 74 16 ff 70 08 ff 70 04 68 .( @...t..p..p.h
88 24 40 00 57 e8 76 f7 ff ff 83 c4 10 eb 1a 68 .$@.W.v........h
0c 80 00 00 ff 15 30 20 40 00 50 68 30 24 40 00 ......0 @.Ph0$@.
57 e8 5a f7 ff ff 83 c4 0c 8d 45 48 50 6a 00 6a W.Z.......EHPj.j
00 68 0c 80 00 00 ff 75 50 ff 15 14 20 40 00 85 .h.....uP... @..
c0 75 0d ff d6 50 89 45 70 68 0c 24 40 00 eb 75 .u...P.Eph.$@..u
6a 00 6a 2e 8d 85 34 ff ff ff 50 ff 75 48 ff 15 j.j...4...P.uH..
10 20 40 00 85 c0 75 0a ff d6 50 68 f0 23 40 00 . @...u...Ph.#@.
eb 28 6a 00 6a 00 ff 75 34 8d 85 62 ff ff ff 68 .(j.j..u4..b...h
80 00 00 00 50 ff 75 48 ff 15 0c 20 40 00 85 c0 ....P.uH... @...
75 17 ff d6 50 68 c4 23 40 00 53 57 89 45 70 e8 u...Ph.#@.SW.Ep.
dc f6 ff ff 83 c4 10 eb 07 c7 45 40 01 00 00 00 ..........E@....
ff 75 48 ff 15 08 20 40 00 85 c0 75 12 ff d6 50 .uH... @...u...P
68 a0 23 40 00 53 57 e8 b4 f6 ff ff 83 c4 10 ff h.#@.SW.........
75 34 ff 15 04 20 40 00 85 c0 75 12 ff d6 50 68 u4... @...u...Ph
80 23 40 00 53 57 e8 95 f6 ff ff 83 c4 10 6a 00 .#@.SW........j.
ff 75 50 ff 15 00 20 40 00 85 c0 75 12 ff d6 50 .uP... @...u...P
68 58 23 40 00 53 57 e8 74 f6 ff ff 83 c4 10 83 hX#@.SW.t.......
7d 40 00 b9 50 23 40 00 75 05 b9 44 23 40 00 8d }@..P#@.u..D#@..
85 3e ff ff ff 50 8d 85 38 ff ff ff 50 8b 85 34 .>...P..8...P..4
ff ff ff 0f b7 d0 52 c1 e8 10 50 0f b7 85 4e ff ......R...P...N.
ff ff 50 0f b7 85 50 ff ff ff 50 8d 85 46 ff ff ..P...P...P..F..
ff 50 51 68 28 22 40 00 57 e8 22 f6 ff ff 83 c4 .PQh("@.W.".....
28 eb 0d 68 d0 21 40 00 57 e8 12 f6 ff ff 59 59 (..h.!@.W.....YY
6a 03 59 8d bd e0 fd ff ff 8d b5 76 fe ff ff 33 j.Y........v...3
c0 66 f3 a7 75 28 8b 85 a8 fe ff ff 3b 85 e6 fd .f..u(......;...
ff ff 75 1a 6a 20 33 c0 59 8d bd ea fd ff ff 8d ..u.j 3.Y.......
b5 ac fe ff ff f3 a7 b8 c0 21 40 00 74 05 b8 a0 .........!@.t...
21 40 00 8b 4d 64 ff 71 04 50 68 10 21 40 00 e9 !@..Md.q.Ph.!@..
3a f7 ff ff 8b 45 64 ff 70 04 68 b0 20 40 00 ff :....Ed.p.h. @..
75 6c e8 a9 f5 ff ff 83 c4 0c 8b 35 60 20 40 00 ul.........5` @.
8b 7d 6c ff 75 38 ff 15 44 20 40 00 85 c0 75 12 .}l.u8..D @...u.
ff d6 50 68 98 20 40 00 53 57 e8 81 f5 ff ff 83 ..Ph. @.SW......
c4 10 ff 75 64 ff 15 40 20 40 00 85 c0 74 12 ff ...ud..@ @...t..
d6 50 68 84 20 40 00 53 57 e8 62 f5 ff ff 83 c4 .Ph. @.SW.b.....
10 57 ff 15 44 20 40 00 85 c0 75 12 ff d6 50 68 .W..D @...u...Ph
98 20 40 00 53 57 e8 45 f5 ff ff 83 c4 10 ff 75 . @.SW.E.......u
70 ff 15 3c 20 40 00 cc 55 8b ec 51 8b 45 08 53 p..< @..U..Q.E.S
56 33 f6 57 8b f8 89 75 08 89 75 fc 39 75 0c 0f V3.W...u..u.9u..
84 6a 01 00 00 3b c6 0f 84 62 01 00 00 0f b7 08 .j...;...b......
66 3b ce 0f 84 56 01 00 00 83 f9 20 74 0a 83 f9 f;...V..... t...
09 74 05 33 db 43 eb 02 33 db 39 75 08 75 2b 66 .t.3.C..3.9u.u+f
83 f9 20 74 06 66 83 f9 09 75 1f 89 75 fc 83 c0 .. t.f...u..u...
02 0f b7 08 83 f9 20 74 f5 83 f9 09 74 f0 33 c9 ...... t....t.3.
66 39 30 0f 95 c1 03 d9 eb 23 66 83 f9 5c 75 06 f90......#f..\u.
83 75 fc 01 eb 14 39 75 fc 75 0c 66 83 f9 22 75 .u....9u.u.f.."u
06 83 75 08 01 eb 03 89 75 fc 83 c0 02 0f b7 08 ..u.....u.......
66 3b ce 75 a5 2b c7 83 c0 02 d1 f8 8d 44 58 02 f;.u.+.......DX.
03 c0 50 6a 40 ff 15 6c 20 40 00 8b f0 33 d2 3b ..Pj@..l @...3.;
f2 0f 84 d0 00 00 00 8d 44 9e 04 33 db 89 06 89 ........D..3....
55 08 89 5d fc 83 7d 08 00 75 34 0f b7 0f 83 f9 U..]..}..u4.....
20 74 05 83 f9 09 75 27 33 d2 33 c9 66 89 08 83 t....u'3.3.f...
c7 02 0f b7 0f 83 f9 20 74 f5 83 f9 09 74 f0 66 ....... t....t.f
39 17 74 71 43 8b c7 89 5d fc 89 3c 9e eb 5c 0f 9.tqC...]..<..\.
b7 0f 83 f9 5c 75 03 42 eb 48 83 f9 22 75 41 6a ....\u.B.H.."uAj
02 8d 5a 01 d1 eb 59 f7 db 03 f9 8d 04 58 f6 c2 ..Z...Y......X..
01 74 0a 6a 22 5a 66 89 10 03 c1 eb 1c 83 7d 08 .t.j"Zf.......}.
00 74 12 66 83 3f 22 75 0c 6a 22 5a 66 89 10 03 .t.f.?"u.j"Zf...
c1 03 f9 eb 04 83 75 08 01 8b 5d fc 33 d2 eb 0b ......u...].3...
33 d2 66 89 08 83 c0 02 83 c7 02 66 83 3f 00 0f 3.f........f.?..
85 60 ff ff ff 33 c9 43 66 89 08 21 0c 9e 8b 45 .`...3.Cf..!...E
0c 89 18 39 4d 08 74 0f 68 a0 00 00 00 eb 02 6a ...9M.t.h......j
57 ff 15 68 20 40 00 5f 8b c6 5e 5b c9 c2 08 00 W..h @._..^[....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
8c 31 00 00 a2 31 00 00 b4 31 00 00 c8 31 00 00 .1...1...1...1..
e0 31 00 00 f0 31 00 00 02 32 00 00 16 32 00 00 .1...1...2...2..
28 32 00 00 00 00 00 00 60 32 00 00 74 32 00 00 (2......`2..t2..
4e 32 00 00 00 00 00 00 98 32 00 00 a8 32 00 00 N2.......2...2..
b6 32 00 00 c2 32 00 00 d0 32 00 00 ea 32 00 00 .2...2...2...2..
02 33 00 00 10 33 00 00 1c 33 00 00 2a 33 00 00 .3...3...3..*3..
3c 33 00 00 4c 33 00 00 5c 33 00 00 6c 33 00 00 <3..L3..\3..l3..
00 00 00 00 96 33 00 00 88 33 00 00 00 00 00 00 .....3...3......
0c 80 00 00 4c 00 6f 00 63 00 61 00 6c 00 46 00 ....L.o.c.a.l.F.
72 00 65 00 65 00 00 00 43 00 6c 00 6f 00 73 00 r.e.e...C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 e.H.a.n.d.l.e...
46 00 69 00 6c 00 65 00 20 00 27 00 25 00 6c 00 F.i.l.e. .'.%.l.
73 00 27 00 20 00 63 00 6f 00 6e 00 74 00 61 00 s.'. .c.o.n.t.a.
69 00 6e 00 73 00 20 00 6e 00 6f 00 20 00 58 00 i.n.s. .n.o. .X.
72 00 4d 00 4c 00 20 00 64 00 69 00 67 00 69 00 r.M.L. .d.i.g.i.
74 00 61 00 6c 00 20 00 6c 00 69 00 63 00 65 00 t.a.l. .l.i.c.e.
6e 00 73 00 65 00 21 00 0a 00 00 00 00 00 00 00 n.s.e.!.........
0a 00 27 00 53 00 4c 00 49 00 43 00 27 00 20 00 ..'.S.L.I.C.'. .
27 00 41 00 43 00 50 00 49 00 27 00 20 00 74 00 '.A.C.P.I.'. .t.
61 00 62 00 6c 00 65 00 20 00 25 00 6c 00 73 00 a.b.l.e. .%.l.s.
20 00 27 00 43 00 65 00 72 00 74 00 69 00 66 00 .'.C.e.r.t.i.f.
69 00 63 00 61 00 74 00 65 00 27 00 20 00 66 00 i.c.a.t.e.'. .f.
72 00 6f 00 6d 00 20 00 58 00 72 00 4d 00 4c 00 r.o.m. .X.r.M.L.
20 00 64 00 69 00 67 00 69 00 74 00 61 00 6c 00 .d.i.g.i.t.a.l.
20 00 6c 00 69 00 63 00 65 00 6e 00 73 00 65 00 .l.i.c.e.n.s.e.
20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 .'.%.l.s.'.....
64 00 6f 00 65 00 73 00 20 00 6e 00 6f 00 74 00 d.o.e.s. .n.o.t.
20 00 6d 00 61 00 74 00 63 00 68 00 00 00 00 00 .m.a.t.c.h.....
6d 00 61 00 74 00 63 00 68 00 65 00 73 00 00 00 m.a.t.c.h.e.s...
27 00 53 00 4c 00 49 00 43 00 27 00 20 00 27 00 '.S.L.I.C.'. .'.
41 00 43 00 50 00 49 00 27 00 20 00 74 00 61 00 A.C.P.I.'. .t.a.
62 00 6c 00 65 00 20 00 68 00 61 00 73 00 20 00 b.l.e. .h.a.s. .
75 00 6e 00 6b 00 6e 00 6f 00 77 00 6e 00 20 00 u.n.k.n.o.w.n. .
6c 00 61 00 79 00 6f 00 75 00 74 00 21 00 0a 00 l.a.y.o.u.t.!...
00 00 00 00 00 00 00 00 09 00 09 00 4d 00 61 00 ............M.a.
72 00 6b 00 65 00 72 00 20 00 43 00 68 00 65 00 r.k.e.r. .C.h.e.
63 00 6b 00 3a 00 09 00 25 00 6c 00 73 00 0a 00 c.k.:...%.l.s...
09 00 09 00 4d 00 61 00 72 00 6b 00 65 00 72 00 ....M.a.r.k.e.r.
20 00 53 00 74 00 72 00 69 00 6e 00 67 00 3a 00 .S.t.r.i.n.g.:.
09 00 22 00 25 00 2e 00 38 00 68 00 73 00 22 00 ..".%...8.h.s.".
0a 00 09 00 09 00 4d 00 61 00 72 00 6b 00 65 00 ......M.a.r.k.e.
72 00 20 00 56 00 65 00 72 00 73 00 69 00 6f 00 r. .V.e.r.s.i.o.
6e 00 3a 00 09 00 25 00 68 00 75 00 2e 00 25 00 n.:...%.h.u...%.
68 00 75 00 0a 00 09 00 09 00 4f 00 45 00 4d 00 h.u.......O.E.M.
20 00 41 00 63 00 74 00 69 00 76 00 61 00 74 00 .A.c.t.i.v.a.t.
69 00 6f 00 6e 00 3a 00 09 00 25 00 68 00 75 00 i.o.n.:...%.h.u.
2e 00 25 00 68 00 75 00 0a 00 09 00 09 00 4f 00 ..%.h.u.......O.
45 00 4d 00 20 00 49 00 44 00 3a 00 09 00 09 00 E.M. .I.D.:.....
22 00 25 00 2e 00 36 00 68 00 73 00 22 00 0a 00 ".%...6.h.s."...
09 00 09 00 4f 00 45 00 4d 00 20 00 54 00 61 00 ....O.E.M. .T.a.
62 00 6c 00 65 00 20 00 49 00 44 00 3a 00 09 00 b.l.e. .I.D.:...
22 00 25 00 2e 00 38 00 68 00 73 00 22 00 0a 00 ".%...8.h.s."...
00 00 00 00 45 00 52 00 52 00 4f 00 52 00 00 00 ....E.R.R.O.R...
4f 00 4b 00 00 00 00 00 43 00 72 00 79 00 70 00 O.K.....C.r.y.p.
74 00 52 00 65 00 6c 00 65 00 61 00 73 00 65 00 t.R.e.l.e.a.s.e.
43 00 6f 00 6e 00 74 00 65 00 78 00 74 00 00 00 C.o.n.t.e.x.t...
43 00 72 00 79 00 70 00 74 00 44 00 65 00 73 00 C.r.y.p.t.D.e.s.
74 00 72 00 6f 00 79 00 4b 00 65 00 79 00 00 00 t.r.o.y.K.e.y...
43 00 72 00 79 00 70 00 74 00 44 00 65 00 73 00 C.r.y.p.t.D.e.s.
74 00 72 00 6f 00 79 00 48 00 61 00 73 00 68 00 t.r.o.y.H.a.s.h.
00 00 00 00 43 00 72 00 79 00 70 00 74 00 56 00 ....C.r.y.p.t.V.
65 00 72 00 69 00 66 00 79 00 53 00 69 00 67 00 e.r.i.f.y.S.i.g.
6e 00 61 00 74 00 75 00 72 00 65 00 00 00 00 00 n.a.t.u.r.e.....
43 00 72 00 79 00 70 00 74 00 48 00 61 00 73 00 C.r.y.p.t.H.a.s.
68 00 44 00 61 00 74 00 61 00 00 00 43 00 72 00 h.D.a.t.a...C.r.
79 00 70 00 74 00 43 00 72 00 65 00 61 00 74 00 y.p.t.C.r.e.a.t.
65 00 48 00 61 00 73 00 68 00 00 00 00 00 00 00 e.H.a.s.h.......
27 00 57 00 69 00 6e 00 64 00 6f 00 77 00 73 00 '.W.i.n.d.o.w.s.
27 00 20 00 4d 00 61 00 72 00 6b 00 65 00 72 00 '. .M.a.r.k.e.r.
20 00 48 00 61 00 73 00 68 00 20 00 41 00 6c 00 .H.a.s.h. .A.l.
67 00 6f 00 72 00 69 00 74 00 68 00 6d 00 3a 00 g.o.r.i.t.h.m.:.
20 00 4f 00 49 00 44 00 20 00 3d 00 20 00 25 00 .O.I.D. .=. .%.
68 00 73 00 0a 00 00 00 27 00 57 00 69 00 6e 00 h.s.....'.W.i.n.
64 00 6f 00 77 00 73 00 27 00 20 00 4d 00 61 00 d.o.w.s.'. .M.a.
72 00 6b 00 65 00 72 00 20 00 53 00 69 00 67 00 r.k.e.r. .S.i.g.
6e 00 61 00 74 00 75 00 72 00 65 00 20 00 48 00 n.a.t.u.r.e. .H.
61 00 73 00 68 00 20 00 41 00 6c 00 67 00 6f 00 a.s.h. .A.l.g.o.
72 00 69 00 74 00 68 00 6d 00 3a 00 20 00 4f 00 r.i.t.h.m.:. .O.
49 00 44 00 20 00 3d 00 20 00 25 00 68 00 73 00 I.D. .=. .%.h.s.
20 00 28 00 25 00 6c 00 73 00 29 00 0a 00 00 00 .(.%.l.s.).....
52 00 53 00 41 00 20 00 50 00 75 00 62 00 6c 00 R.S.A. .P.u.b.l.
69 00 63 00 20 00 4b 00 65 00 79 00 20 00 27 00 i.c. .K.e.y. .'.
4d 00 61 00 67 00 69 00 63 00 20 00 4e 00 75 00 M.a.g.i.c. .N.u.
6d 00 62 00 65 00 72 00 27 00 3a 00 20 00 22 00 m.b.e.r.'.:. .".
25 00 2e 00 34 00 68 00 73 00 22 00 0a 00 52 00 %...4.h.s."...R.
53 00 41 00 20 00 50 00 75 00 62 00 6c 00 69 00 S.A. .P.u.b.l.i.
63 00 20 00 4b 00 65 00 79 00 20 00 42 00 69 00 c. .K.e.y. .B.i.
74 00 73 00 3a 00 20 00 25 00 6c 00 75 00 0a 00 t.s.:. .%.l.u...
52 00 53 00 41 00 20 00 50 00 75 00 62 00 6c 00 R.S.A. .P.u.b.l.
69 00 63 00 20 00 4b 00 65 00 79 00 20 00 45 00 i.c. .K.e.y. .E.
78 00 70 00 6f 00 6e 00 65 00 6e 00 74 00 3a 00 x.p.o.n.e.n.t.:.
20 00 25 00 6c 00 75 00 0a 00 00 00 00 00 00 00 .%.l.u.........
52 00 53 00 41 00 20 00 50 00 75 00 62 00 6c 00 R.S.A. .P.u.b.l.
69 00 63 00 20 00 4b 00 65 00 79 00 20 00 41 00 i.c. .K.e.y. .A.
6c 00 67 00 6f 00 72 00 69 00 74 00 68 00 6d 00 l.g.o.r.i.t.h.m.
3a 00 20 00 4f 00 49 00 44 00 20 00 3d 00 20 00 :. .O.I.D. .=. .
25 00 68 00 73 00 0a 00 00 00 00 00 00 00 00 00 %.h.s...........
52 00 53 00 41 00 20 00 50 00 75 00 62 00 6c 00 R.S.A. .P.u.b.l.
69 00 63 00 20 00 4b 00 65 00 79 00 20 00 41 00 i.c. .K.e.y. .A.
6c 00 67 00 6f 00 72 00 69 00 74 00 68 00 6d 00 l.g.o.r.i.t.h.m.
3a 00 20 00 4f 00 49 00 44 00 20 00 3d 00 20 00 :. .O.I.D. .=. .
25 00 68 00 73 00 20 00 28 00 25 00 6c 00 73 00 %.h.s. .(.%.l.s.
29 00 0a 00 00 00 00 00 43 00 53 00 50 00 20 00 ).......C.S.P. .
4e 00 61 00 6d 00 65 00 3a 00 20 00 25 00 68 00 N.a.m.e.:. .%.h.
73 00 0a 00 00 00 00 00 43 00 72 00 79 00 70 00 s.......C.r.y.p.
74 00 47 00 65 00 74 00 50 00 72 00 6f 00 76 00 t.G.e.t.P.r.o.v.
50 00 61 00 72 00 61 00 6d 00 00 00 43 00 72 00 P.a.r.a.m...C.r.
79 00 70 00 74 00 49 00 6d 00 70 00 6f 00 72 00 y.p.t.I.m.p.o.r.
74 00 4b 00 65 00 79 00 00 00 00 00 43 00 72 00 t.K.e.y.....C.r.
79 00 70 00 74 00 41 00 63 00 71 00 75 00 69 00 y.p.t.A.c.q.u.i.
72 00 65 00 43 00 6f 00 6e 00 74 00 65 00 78 00 r.e.C.o.n.t.e.x.
74 00 00 00 00 00 00 00 0a 00 27 00 53 00 4c 00 t.........'.S.L.
49 00 43 00 27 00 20 00 27 00 41 00 43 00 50 00 I.C.'. .'.A.C.P.
49 00 27 00 20 00 74 00 61 00 62 00 6c 00 65 00 I.'. .t.a.b.l.e.
3a 00 20 00 73 00 69 00 7a 00 65 00 20 00 3d 00 :. .s.i.z.e. .=.
20 00 25 00 6c 00 75 00 2c 00 20 00 63 00 68 00 .%.l.u.,. .c.h.
65 00 63 00 6b 00 73 00 75 00 6d 00 20 00 25 00 e.c.k.s.u.m. .%.
6c 00 73 00 0a 00 09 00 53 00 69 00 67 00 6e 00 l.s.....S.i.g.n.
61 00 74 00 75 00 72 00 65 00 3a 00 09 00 22 00 a.t.u.r.e.:...".
25 00 2e 00 34 00 68 00 73 00 22 00 0a 00 09 00 %...4.h.s.".....
4c 00 65 00 6e 00 67 00 74 00 68 00 3a 00 09 00 L.e.n.g.t.h.:...
09 00 25 00 6c 00 75 00 0a 00 09 00 52 00 65 00 ..%.l.u.....R.e.
76 00 69 00 73 00 69 00 6f 00 6e 00 3a 00 09 00 v.i.s.i.o.n.:...
30 00 78 00 25 00 30 00 32 00 58 00 0a 00 09 00 0.x.%.0.2.X.....
43 00 68 00 65 00 63 00 6b 00 73 00 75 00 6d 00 C.h.e.c.k.s.u.m.
3a 00 09 00 30 00 78 00 25 00 30 00 32 00 58 00 :...0.x.%.0.2.X.
0a 00 09 00 4f 00 45 00 4d 00 20 00 49 00 44 00 ....O.E.M. .I.D.
3a 00 09 00 09 00 22 00 25 00 2e 00 36 00 68 00 :.....".%...6.h.
73 00 22 00 0a 00 09 00 4f 00 45 00 4d 00 20 00 s.".....O.E.M. .
54 00 61 00 62 00 6c 00 65 00 20 00 49 00 44 00 T.a.b.l.e. .I.D.
3a 00 09 00 22 00 25 00 2e 00 38 00 68 00 73 00 :...".%...8.h.s.
22 00 0a 00 09 00 4f 00 45 00 4d 00 20 00 52 00 ".....O.E.M. .R.
65 00 76 00 69 00 73 00 69 00 6f 00 6e 00 3a 00 e.v.i.s.i.o.n.:.
09 00 30 00 78 00 25 00 30 00 38 00 58 00 0a 00 ..0.x.%.0.8.X...
09 00 43 00 72 00 65 00 61 00 74 00 6f 00 72 00 ..C.r.e.a.t.o.r.
20 00 49 00 44 00 3a 00 09 00 22 00 25 00 2e 00 .I.D.:...".%...
34 00 68 00 73 00 22 00 0a 00 09 00 43 00 72 00 4.h.s.".....C.r.
65 00 61 00 74 00 6f 00 72 00 20 00 52 00 65 00 e.a.t.o.r. .R.e.
76 00 2e 00 3a 00 09 00 30 00 78 00 25 00 30 00 v...:...0.x.%.0.
38 00 58 00 0a 00 00 00 63 00 6f 00 72 00 72 00 8.X.....c.o.r.r.
65 00 63 00 74 00 00 00 77 00 72 00 6f 00 6e 00 e.c.t...w.r.o.n.
67 00 00 00 00 00 00 00 27 00 53 00 4c 00 49 00 g.......'.S.L.I.
43 00 27 00 20 00 27 00 41 00 43 00 50 00 49 00 C.'. .'.A.C.P.I.
27 00 20 00 74 00 61 00 62 00 6c 00 65 00 20 00 '. .t.a.b.l.e. .
6e 00 6f 00 74 00 20 00 70 00 72 00 65 00 73 00 n.o.t. .p.r.e.s.
65 00 6e 00 74 00 21 00 0a 00 00 00 47 00 65 00 e.n.t.!.....G.e.
74 00 53 00 79 00 73 00 74 00 65 00 6d 00 46 00 t.S.y.s.t.e.m.F.
69 00 72 00 6d 00 77 00 61 00 72 00 65 00 54 00 i.r.m.w.a.r.e.T.
61 00 62 00 6c 00 65 00 00 00 00 00 00 00 00 00 a.b.l.e.........
09 00 45 00 78 00 70 00 6f 00 6e 00 65 00 6e 00 ..E.x.p.o.n.e.n.
74 00 3a 00 20 00 73 00 69 00 7a 00 65 00 20 00 t.:. .s.i.z.e. .
3d 00 20 00 25 00 6c 00 75 00 0a 00 09 00 09 00 =. .%.l.u.......
56 00 61 00 6c 00 75 00 65 00 3a 00 09 00 09 00 V.a.l.u.e.:.....
30 00 78 00 00 00 00 00 09 00 4d 00 6f 00 64 00 0.x.......M.o.d.
75 00 6c 00 75 00 73 00 3a 00 20 00 73 00 69 00 u.l.u.s.:. .s.i.
7a 00 65 00 20 00 3d 00 20 00 25 00 6c 00 75 00 z.e. .=. .%.l.u.
0a 00 09 00 09 00 56 00 61 00 6c 00 75 00 65 00 ......V.a.l.u.e.
3a 00 09 00 09 00 30 00 78 00 00 00 00 00 00 00 :.....0.x.......
09 00 53 00 69 00 67 00 6e 00 61 00 74 00 75 00 ..S.i.g.n.a.t.u.
72 00 65 00 3a 00 20 00 73 00 69 00 7a 00 65 00 r.e.:. .s.i.z.e.
20 00 3d 00 20 00 25 00 6c 00 75 00 0a 00 09 00 .=. .%.l.u.....
09 00 56 00 61 00 6c 00 75 00 65 00 3a 00 09 00 ..V.a.l.u.e.:...
09 00 30 00 78 00 00 00 09 00 44 00 69 00 67 00 ..0.x.....D.i.g.
65 00 73 00 74 00 3a 00 20 00 73 00 69 00 7a 00 e.s.t.:. .s.i.z.
65 00 20 00 3d 00 20 00 25 00 6c 00 75 00 0a 00 e. .=. .%.l.u...
09 00 09 00 53 00 48 00 41 00 2d 00 31 00 20 00 ....S.H.A.-.1. .
48 00 61 00 73 00 68 00 3a 00 09 00 30 00 78 00 H.a.s.h.:...0.x.
00 00 00 00 0a 00 00 00 25 00 30 00 32 00 58 00 ........%.0.2.X.
00 00 00 00 00 00 00 00 09 00 43 00 65 00 72 00 ..........C.e.r.
74 00 69 00 66 00 69 00 63 00 61 00 74 00 65 00 t.i.f.i.c.a.t.e.
3a 00 20 00 73 00 69 00 7a 00 65 00 20 00 3d 00 :. .s.i.z.e. .=.
20 00 25 00 6c 00 75 00 0a 00 09 00 09 00 4c 00 .%.l.u.......L.
65 00 6e 00 67 00 74 00 68 00 3a 00 09 00 09 00 e.n.g.t.h.:.....
25 00 6c 00 75 00 0a 00 09 00 09 00 56 00 65 00 %.l.u.......V.e.
72 00 73 00 69 00 6f 00 6e 00 3a 00 09 00 25 00 r.s.i.o.n.:...%.
68 00 75 00 2e 00 25 00 68 00 75 00 0a 00 09 00 h.u...%.h.u.....
09 00 4f 00 45 00 4d 00 20 00 49 00 44 00 3a 00 ..O.E.M. .I.D.:.
09 00 09 00 22 00 25 00 2e 00 36 00 68 00 73 00 ....".%...6.h.s.
22 00 0a 00 09 00 09 00 45 00 78 00 70 00 6f 00 ".......E.x.p.o.
6e 00 65 00 6e 00 74 00 3a 00 09 00 25 00 6c 00 n.e.n.t.:...%.l.
75 00 0a 00 09 00 09 00 4d 00 6f 00 64 00 75 00 u.......M.o.d.u.
6c 00 75 00 73 00 3a 00 20 00 73 00 69 00 7a 00 l.u.s.:. .s.i.z.
65 00 20 00 3d 00 20 00 25 00 6c 00 75 00 0a 00 e. .=. .%.l.u...
09 00 09 00 09 00 56 00 61 00 6c 00 75 00 65 00 ......V.a.l.u.e.
3a 00 09 00 30 00 78 00 00 00 00 00 43 00 72 00 :...0.x.....C.r.
79 00 70 00 74 00 53 00 74 00 72 00 69 00 6e 00 y.p.t.S.t.r.i.n.
67 00 54 00 6f 00 42 00 69 00 6e 00 61 00 72 00 g.T.o.B.i.n.a.r.
79 00 00 00 00 00 00 00 58 00 72 00 4d 00 4c 00 y.......X.r.M.L.
20 00 64 00 69 00 67 00 69 00 74 00 61 00 6c 00 .d.i.g.i.t.a.l.
20 00 6c 00 69 00 63 00 65 00 6e 00 73 00 65 00 .l.i.c.e.n.s.e.
20 00 66 00 69 00 6c 00 65 00 20 00 27 00 25 00 .f.i.l.e. .'.%.
6c 00 73 00 27 00 3a 00 20 00 73 00 69 00 7a 00 l.s.'.:. .s.i.z.
65 00 20 00 3d 00 20 00 25 00 6c 00 75 00 0a 00 e. .=. .%.l.u...
09 00 41 00 70 00 70 00 6c 00 69 00 63 00 61 00 ..A.p.p.l.i.c.a.
74 00 69 00 6f 00 6e 00 20 00 49 00 44 00 3a 00 t.i.o.n. .I.D.:.
09 00 09 00 25 00 2e 00 33 00 38 00 68 00 73 00 ....%...3.8.h.s.
0a 00 09 00 4c 00 69 00 63 00 65 00 6e 00 73 00 ....L.i.c.e.n.s.
65 00 20 00 49 00 44 00 3a 00 09 00 09 00 25 00 e. .I.D.:.....%.
2e 00 33 00 38 00 68 00 73 00 0a 00 09 00 4c 00 ..3.8.h.s.....L.
69 00 63 00 65 00 6e 00 73 00 65 00 20 00 56 00 i.c.e.n.s.e. .V.
65 00 72 00 73 00 69 00 6f 00 6e 00 3a 00 09 00 e.r.s.i.o.n.:...
25 00 2e 00 33 00 68 00 73 00 0a 00 09 00 44 00 %...3.h.s.....D.
61 00 74 00 65 00 2f 00 54 00 69 00 6d 00 65 00 a.t.e./.T.i.m.e.
20 00 6f 00 66 00 20 00 49 00 73 00 73 00 75 00 .o.f. .I.s.s.u.
65 00 3a 00 09 00 25 00 2e 00 32 00 30 00 68 00 e.:...%...2.0.h.
73 00 0a 00 00 00 00 00 54 00 69 00 6d 00 65 00 s.......T.i.m.e.
73 00 74 00 61 00 6d 00 70 00 20 00 27 00 25 00 s.t.a.m.p. .'.%.
68 00 73 00 27 00 20 00 6f 00 66 00 20 00 58 00 h.s.'. .o.f. .X.
72 00 4d 00 4c 00 20 00 64 00 69 00 67 00 69 00 r.M.L. .d.i.g.i.
74 00 61 00 6c 00 20 00 6c 00 69 00 63 00 65 00 t.a.l. .l.i.c.e.
6e 00 73 00 65 00 20 00 66 00 69 00 6c 00 65 00 n.s.e. .f.i.l.e.
20 00 27 00 25 00 6c 00 73 00 27 00 20 00 64 00 .'.%.l.s.'. .d.
69 00 66 00 66 00 65 00 72 00 73 00 20 00 66 00 i.f.f.e.r.s. .f.
72 00 6f 00 6d 00 20 00 74 00 69 00 6d 00 65 00 r.o.m. .t.i.m.e.
20 00 6f 00 66 00 20 00 69 00 73 00 73 00 75 00 .o.f. .i.s.s.u.
65 00 20 00 27 00 25 00 2e 00 32 00 30 00 68 00 e. .'.%...2.0.h.
73 00 27 00 21 00 0a 00 00 00 00 00 77 00 73 00 s.'.!.......w.s.
70 00 72 00 69 00 6e 00 74 00 66 00 00 00 00 00 p.r.i.n.t.f.....
25 30 34 68 75 2d 25 30 32 68 75 2d 25 30 32 68 %04hu-%02hu-%02h
75 54 25 30 32 68 75 3a 25 30 32 68 75 3a 25 30 uT%02hu:%02hu:%0
32 68 75 5a 00 00 00 00 46 00 69 00 6c 00 65 00 2huZ....F.i.l.e.
54 00 69 00 6d 00 65 00 54 00 6f 00 53 00 79 00 T.i.m.e.T.o.S.y.
73 00 74 00 65 00 6d 00 54 00 69 00 6d 00 65 00 s.t.e.m.T.i.m.e.
00 00 00 00 47 00 65 00 74 00 46 00 69 00 6c 00 ....G.e.t.F.i.l.
65 00 54 00 69 00 6d 00 65 00 00 00 68 74 74 70 e.T.i.m.e...http
3a 2f 2f 6c 69 63 65 6e 73 69 6e 67 2e 6d 69 63 ://licensing.mic
72 6f 73 6f 66 74 2e 63 6f 6d 00 00 32 2e 30 00 rosoft.com..2.0.
6d 73 66 74 3a 73 6c 2f 4f 45 4d 43 45 52 54 00 msft:sl/OEMCERT.
6d 73 66 74 3a 73 6c 2f 50 50 44 00 4f 45 4d 20 msft:sl/PPD.OEM
43 65 72 74 69 66 69 63 61 74 65 00 3c 73 78 3a Certificate.<sx:
70 72 6f 70 65 72 74 79 55 72 69 20 64 65 66 69 propertyUri defi
6e 69 74 69 6f 6e 3d 22 74 72 75 73 74 65 64 4f nition="trustedO
65 6d 22 2f 3e 00 00 00 3c 3f 78 6d 6c 20 76 65 em"/>...<?xml ve
72 73 69 6f 6e 3d 22 31 2e 30 22 20 65 6e 63 6f rsion="1.0" enco
64 69 6e 67 3d 22 75 74 66 2d 38 22 3f 3e 00 00 ding="utf-8"?>..
52 00 65 00 61 00 64 00 46 00 69 00 6c 00 65 00 R.e.a.d.F.i.l.e.
00 00 00 00 43 00 72 00 65 00 61 00 74 00 65 00 ....C.r.e.a.t.e.
46 00 69 00 6c 00 65 00 00 00 00 00 00 00 00 00 F.i.l.e.........
4e 00 6f 00 20 00 61 00 72 00 67 00 75 00 6d 00 N.o. .a.r.g.u.m.
65 00 6e 00 74 00 3a 00 20 00 61 00 20 00 73 00 e.n.t.:. .a. .s.
69 00 6e 00 67 00 6c 00 65 00 20 00 28 00 61 00 i.n.g.l.e. .(.a.
62 00 73 00 6f 00 6c 00 75 00 74 00 65 00 20 00 b.s.o.l.u.t.e. .
6f 00 72 00 20 00 72 00 65 00 6c 00 61 00 74 00 o.r. .r.e.l.a.t.
69 00 76 00 65 00 29 00 20 00 70 00 61 00 74 00 i.v.e.). .p.a.t.
68 00 20 00 6e 00 61 00 6d 00 65 00 20 00 6f 00 h. .n.a.m.e. .o.
66 00 20 00 61 00 6e 00 20 00 58 00 72 00 4d 00 f. .a.n. .X.r.M.
4c 00 20 00 28 00 2a 00 2e 00 78 00 72 00 6d 00 L. .(.*...x.r.m.
2d 00 6d 00 73 00 29 00 0a 00 20 00 20 00 20 00 -.m.s.)... . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 64 00 69 00 67 00 69 00 74 00 61 00 . .d.i.g.i.t.a.
6c 00 20 00 6c 00 69 00 63 00 65 00 6e 00 73 00 l. .l.i.c.e.n.s.
65 00 20 00 66 00 69 00 6c 00 65 00 20 00 6d 00 e. .f.i.l.e. .m.
75 00 73 00 74 00 20 00 62 00 65 00 20 00 67 00 u.s.t. .b.e. .g.
69 00 76 00 65 00 6e 00 21 00 0a 00 00 00 00 00 i.v.e.n.!.......
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
0a 00 00 00 43 00 6f 00 6d 00 6d 00 61 00 6e 00 ....C.o.m.m.a.n.
64 00 4c 00 69 00 6e 00 65 00 54 00 6f 00 41 00 d.L.i.n.e.T.o.A.
72 00 67 00 76 00 00 00 b9 79 37 9e 00 00 00 00 r.g.v....y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 38 30 40 00 ............80@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 0c 31 00 00 00 00 00 00 .........1......
00 00 00 00 40 32 00 00 00 20 00 00 34 31 00 00 ....@2... ..41..
00 00 00 00 00 00 00 00 8c 32 00 00 28 20 00 00 .........2..( ..
44 31 00 00 00 00 00 00 00 00 00 00 7a 33 00 00 D1..........z3..
38 20 00 00 80 31 00 00 00 00 00 00 00 00 00 00 8 ...1..........
a2 33 00 00 74 20 00 00 00 00 00 00 00 00 00 00 .3..t ..........
00 00 00 00 00 00 00 00 00 00 00 00 8c 31 00 00 .............1..
a2 31 00 00 b4 31 00 00 c8 31 00 00 e0 31 00 00 .1...1...1...1..
f0 31 00 00 02 32 00 00 16 32 00 00 28 32 00 00 .1...2...2..(2..
00 00 00 00 60 32 00 00 74 32 00 00 4e 32 00 00 ....`2..t2..N2..
00 00 00 00 98 32 00 00 a8 32 00 00 b6 32 00 00 .....2...2...2..
c2 32 00 00 d0 32 00 00 ea 32 00 00 02 33 00 00 .2...2...2...3..
10 33 00 00 1c 33 00 00 2a 33 00 00 3c 33 00 00 .3...3..*3..<3..
4c 33 00 00 5c 33 00 00 6c 33 00 00 00 00 00 00 L3..\3..l3......
96 33 00 00 88 33 00 00 00 00 00 00 cb 00 43 72 .3...3........Cr
79 70 74 52 65 6c 65 61 73 65 43 6f 6e 74 65 78 yptReleaseContex
74 00 b7 00 43 72 79 70 74 44 65 73 74 72 6f 79 t...CryptDestroy
4b 65 79 00 b6 00 43 72 79 70 74 44 65 73 74 72 Key...CryptDestr
6f 79 48 61 73 68 00 00 d6 00 43 72 79 70 74 56 oyHash....CryptV
65 72 69 66 79 53 69 67 6e 61 74 75 72 65 57 00 erifySignatureW.
c8 00 43 72 79 70 74 48 61 73 68 44 61 74 61 00 ..CryptHashData.
b3 00 43 72 79 70 74 43 72 65 61 74 65 48 61 73 ..CryptCreateHas
68 00 c6 00 43 72 79 70 74 47 65 74 50 72 6f 76 h...CryptGetProv
50 61 72 61 6d 00 ca 00 43 72 79 70 74 49 6d 70 Param...CryptImp
6f 72 74 4b 65 79 00 00 b1 00 43 72 79 70 74 41 ortKey....CryptA
63 71 75 69 72 65 43 6f 6e 74 65 78 74 57 00 00 cquireContextW..
41 44 56 41 50 49 33 32 2e 64 6c 6c 00 00 10 00 ADVAPI32.dll....
43 65 72 74 41 6c 67 49 64 54 6f 4f 49 44 00 00 CertAlgIdToOID..
93 00 43 72 79 70 74 46 69 6e 64 4f 49 44 49 6e ..CryptFindOIDIn
66 6f 00 00 d8 00 43 72 79 70 74 53 74 72 69 6e fo....CryptStrin
67 54 6f 42 69 6e 61 72 79 41 00 00 43 52 59 50 gToBinaryA..CRYP
54 33 32 2e 64 6c 6c 00 24 05 57 72 69 74 65 43 T32.dll.$.WriteC
6f 6e 73 6f 6c 65 57 00 19 01 45 78 69 74 50 72 onsoleW...ExitPr
6f 63 65 73 73 00 48 03 4c 6f 63 61 6c 46 72 65 ocess.H.LocalFre
65 00 52 00 43 6c 6f 73 65 48 61 6e 64 6c 65 00 e.R.CloseHandle.
72 02 47 65 74 53 79 73 74 65 6d 46 69 72 6d 77 r.GetSystemFirmw
61 72 65 54 61 62 6c 65 00 00 25 01 46 69 6c 65 areTable..%.File
54 69 6d 65 54 6f 53 79 73 74 65 6d 54 69 6d 65 TimeToSystemTime
00 00 f2 01 47 65 74 46 69 6c 65 54 69 6d 65 00 ....GetFileTime.
c0 03 52 65 61 64 46 69 6c 65 00 00 8f 00 43 72 ..ReadFile....Cr
65 61 74 65 46 69 6c 65 57 00 87 01 47 65 74 43 eateFileW...GetC
6f 6d 6d 61 6e 64 4c 69 6e 65 57 00 02 02 47 65 ommandLineW...Ge
74 4c 61 73 74 45 72 72 6f 72 00 00 64 02 47 65 tLastError..d.Ge
74 53 74 64 48 61 6e 64 6c 65 00 00 73 04 53 65 tStdHandle..s.Se
74 4c 61 73 74 45 72 72 6f 72 00 00 44 03 4c 6f tLastError..D.Lo
63 61 6c 41 6c 6c 6f 63 00 00 4b 45 52 4e 45 4c calAlloc..KERNEL
33 32 2e 64 6c 6c 00 00 35 03 77 76 73 70 72 69 32.dll..5.wvspri
6e 74 66 57 00 00 32 03 77 73 70 72 69 6e 74 66 ntfW..2.wsprintf
41 00 55 53 45 52 33 32 2e 64 6c 6c 00 00 00 00 A.USER32.dll....
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file SLICHECK.TXT
created in
step 3. to recreate the console application
SLIC ACPI Table & XrML Digital License Decoder:
CERTUTIL.EXE /DecodeHex /V SLICHECK.TXT SLICHECK.COM
Input Length = 39168 Output Length = 9216 CertUtil: -decodehex command completed successfully.
SYSTEM
Process LauncherNT AUTHORITY\SYSTEM
alias
LocalSystem
account on the
input desktop
of the interactive
window station
of the current
logon session.
About Window Stations and Desktops
Starting an Interactive Client Process in C++
SMSS.exe
, the
Session Manager Subsystem, is started by the kernel as
the only child of the (virtual) System Process with
process identifier 4 and runs in Session 0 under the
NT AUTHORITY\SYSTEM
alias
LocalSystem
account with all privileges assigned. Its
Access Token
is protected by the
Security Descriptor
O:BA
G:SY
D:
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;SY)
(A;;CCDCLCSWRPRC;;;BA)
S:AI
(ML;;NW;;;SI)
which allows members of the
BUILTIN\Administrators
group to
assign it as
primary token
of a process, to duplicate it, to impersonate it in a thread and to
query it.
Note: the
BUILTIN\Administrators
group has
the privilege SeImpersonatePrivilege
enabled by
default!
Client Logon Sessions
Client Impersonation
Impersonation Levels
Impersonation Tokens
Note: due to the mandatory integrity label, members
of the BUILTIN\Administrators
group can’t exercise their (implicit) Owner Right
Write DAC
from processes running with an Integrity Level lower than
Mandatory Label\System Mandatory Level
!
SYSIPHOS.COM [ ‹application› ] ‹quoted command line›Note: the optional first argument is the absolute or relative path name of the application; when omitted, the first token of the then first and only argument, a properly quoted command line, is used as file name of the application and searched in the
PATH
.
CreateProcessAsUser()
Note: Interactive
SYSTEM
Process Launcher
must be run elevated!
Note: Sysiphos
should not be confused with
the legendary Sisyphos
(Ancient Greek:
Σίσυφος
)
from Greek mythology!
SYSIPHOS.COM "CMD /D /K DIR /A \"%SystemDrive%\System Volume Information\"" SYSIPHOS.COM "%COMSPEC%" "CMD /D /K WHOAMI.EXE /ALL" SYSIPHOS.COM "%SystemRoot%\REGEDIT.EXE /M"
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and SYSIPHOS.COM, a
smallform without these extras.
SYSTEM
Process Launcher
is a pure Win32 console application, written in
ANSI C,
built with the Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
SYSTEM
Process Launcher
from the source presented hereafter.
Create the text file SYSIPHOS.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <userenv.h>
#include <tlhelp32.h>
#include <shellapi.h>
#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3UL // "SeAssignPrimaryTokenPrivilege"
typedef struct _token_sid
{
union
{
TOKEN_OWNER Owner;
TOKEN_PRIMARY_GROUP Group;
};
union
{
SID Sid;
BYTE Dummy[SECURITY_MAX_SID_SIZE];
};
} TOKEN_SID;
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
const TOKEN_PRIVILEGES tpToken = {1, {SE_ASSIGNPRIMARYTOKEN_PRIVILEGE, 0, SE_PRIVILEGE_ENABLED}};
const STARTUPINFO si = {sizeof(si)};
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
TOKEN_SID ts;
PROCESSENTRY32 pe /* = {sizeof(pe)} */;
PROCESS_INFORMATION pi;
INT nArguments;
LPWSTR *lpArguments;
LPWSTR lpBlock;
DWORD dwToken;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwProcessId = 0;
DWORD dwSessionId;
HANDLE hSnapshot;
HANDLE hToken;
HANDLE hThread = GetCurrentThread();
HANDLE hProcess = GetCurrentProcess();
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if ((nArguments < 2)
|| (*lpArguments[1] == L'\0')
|| (nArguments > 3))
PrintConsole(hConsole,
L"Bad arguments: either a (properly quoted) command line\n"
L" or the (absolute or relative) path name of an application\n"
L" followed by a (properly quoted) command line must be given!\n");
else
{
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"CreateToolhelp32Snapshot() returned error %lu\n",
dwError = GetLastError());
else
{
pe.dwSize = sizeof(pe);
if (!Process32First(hSnapshot, &pe))
PrintConsole(hConsole,
L"Process32First() returned error %lu\n",
dwError = GetLastError());
else
{
do
if ((pe.th32ParentProcessID == 4)
#if 0
&& (wcscmp(pe.szExeFile, L"smss.exe") == 0))
#elif 0
&& (wmemcmp(pe.szExeFile, L"smss.exe", sizeof("smss.exe")) == 0))
#else
&& (memcmp(pe.szExeFile, L"smss.exe", sizeof(L"smss.exe")) == 0))
#endif
dwProcessId = pe.th32ProcessID;
while (Process32Next(hSnapshot, &pe));
dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES)
PrintConsole(hConsole,
L"Process32Next() returned error %lu\n",
dwError);
}
if (!CloseHandle(hSnapshot))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
if (dwProcessId == 0)
{
PrintConsole(hConsole,
L"Process \'SMSS.exe\' not found!\n");
dwError = ERROR_NOT_FOUND;
}
else
{
if (!OpenProcessToken(hProcess,
TOKEN_QUERY,
&hToken))
PrintConsole(hConsole,
L"OpenProcessToken() returned error %lu\n",
dwError = GetLastError());
else
{
if (!GetTokenInformation(hToken,
TokenSessionId,
&dwSessionId,
sizeof(dwSessionId),
&dwToken))
PrintConsole(hConsole,
L"GetTokenInformation() returned error %lu\n",
GetLastError());
if (!CloseHandle(hToken))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION,
FALSE,
dwProcessId);
if (hProcess == NULL)
PrintConsole(hConsole,
L"OpenProcess() returned error %lu\n",
dwError = GetLastError());
else
{
if (!OpenProcessToken(hProcess,
TOKEN_DUPLICATE | TOKEN_QUERY,
&hToken))
PrintConsole(hConsole,
L"OpenProcessToken() returned error %lu\n",
dwError = GetLastError());
else
{
if (!ImpersonateLoggedOnUser(hToken))
PrintConsole(hConsole,
L"ImpersonateLoggedOnUser() returned error %lu\n",
dwError = GetLastError());
else
{
if (!CloseHandle(hToken))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
if (!OpenThreadToken(hThread,
#if 0 // BUG: SetTokenInformation() for TokenSessionId fails with
// ERROR_ACCESS_DENIED despite TOKEN_ADJUST_SESSIONID!
TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_SESSIONID | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY,
#else
TOKEN_ADJUST_DEFAULT | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_SESSIONID | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY,
#endif
FALSE,
&hToken))
PrintConsole(hConsole,
L"OpenThreadToken() returned error %lu\n",
dwError = GetLastError());
else
{
if (!GetTokenInformation(hToken,
TokenPrimaryGroup,
&ts,
sizeof(ts),
&dwToken))
PrintConsole(hConsole,
L"GetTokenInformation() returned error %lu\n",
GetLastError());
else
if (!SetTokenInformation(hToken,
TokenOwner,
&ts,
dwToken))
PrintConsole(hConsole,
L"SetTokenInformation() returned error %lu\n",
GetLastError());
if (!SetTokenInformation(hToken,
TokenSessionId,
&dwSessionId,
sizeof(dwSessionId)))
PrintConsole(hConsole,
L"SetTokenInformation() returned error %lu\n",
GetLastError());
AdjustTokenPrivileges(hToken,
FALSE,
&tpToken,
sizeof(tpToken),
(TOKEN_PRIVILEGES *) NULL,
(LPDWORD) NULL);
dwError = GetLastError();
if (dwError != ERROR_SUCCESS)
PrintConsole(hConsole,
L"AdjustTokenPrivileges() returned error %lu\n",
dwError);
else
if (!CreateEnvironmentBlock(&lpBlock, hToken, FALSE))
PrintConsole(hConsole,
L"CreateEnvironmentBlock() returned error %lu\n",
dwError = GetLastError());
else
{
if (!CreateProcessAsUser(hToken,
lpArguments[4 - nArguments],
lpArguments[nArguments - 1],
(LPSECURITY_ATTRIBUTES) NULL,
(LPSECURITY_ATTRIBUTES) NULL,
FALSE,
CREATE_DEFAULT_ERROR_MODE | CREATE_NEW_CONSOLE | CREATE_UNICODE_ENVIRONMENT,
lpBlock,
(LPCWSTR) NULL,
&si,
&pi))
PrintConsole(hConsole,
L"CreateProcessAsUser() returned error %lu\n",
dwError = GetLastError());
else
{
#ifdef SYNCHRONOUS
if (WaitForSingleObject(pi.hThread, INFINITE) == WAIT_FAILED)
PrintConsole(hConsole,
L"WaitForSingleObject() returned error %lu\n",
dwError = GetLastError());
#endif
if (!CloseHandle(pi.hThread))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
#ifdef SYNCHRONOUS
if (WaitForSingleObject(pi.hProcess, INFINITE) == WAIT_FAILED)
PrintConsole(hConsole,
L"WaitForSingleObject() returned error %lu\n",
dwError = GetLastError());
#endif
if (!CloseHandle(pi.hProcess))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
if (!DestroyEnvironmentBlock(lpBlock))
PrintConsole(hConsole,
L"DestroyEnvironmentBlock() returned error %lu\n",
GetLastError());
}
}
if (!RevertToSelf())
PrintConsole(hConsole,
L"RevertToSelf() returned error %lu\n",
dwError = GetLastError());
}
if (!CloseHandle(hToken))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hProcess))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
SYSIPHOS.C
created in step 1., link the compiled
object file SYSIPHOS.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:6.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeSYSIPHOS.COM SYSIPHOS.C ADVAPI32.LIB KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE SYSIPHOS.OBJFor 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. SYSIPHOS.C SYSIPHOS.C(36) : warning C4201: nonstandard extension used : nameless struct/union SYSIPHOS.C(42) : warning C4201: nonstandard extension used : nameless struct/union SYSIPHOS.C(258) : warning C4706: warning C4090: 'function' : different 'const' qualifiers SYSIPHOS.C(285) : warning C4706: warning C4090: 'function' : different 'const' qualifiers Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file SYSIPHOS.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 08 00 00 ......#.........
00 0a 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
06 00 00 00 00 00 2f 03 06 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 14 7f 00 00 03 00 00 85 .0..............
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
c8 25 00 00 64 00 00 00 00 00 00 00 00 00 00 00 .%..d...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 60 25 00 00 40 00 00 00 ........`%..@...
00 00 00 00 00 00 00 00 00 20 00 00 78 00 00 00 ......... ..x...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
b4 06 00 00 00 10 00 00 00 08 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 c4 08 00 00 00 20 00 00 .const....... ..
00 0a 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 64 20 40 00 8b f0 .......P..d @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 24 20 40 00 85 .....P.u...$ @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 81 ec .t.3.9u....^....
b0 02 00 00 83 64 24 04 00 56 57 bf a0 00 00 00 .....d$..VW.....
ff 15 54 20 40 00 89 44 24 28 ff 15 50 20 40 00 ..T @..D$(..P @.
6a f4 89 44 24 18 ff 15 4c 20 40 00 8b f0 89 74 j..D$...L @....t
24 1c 83 fe ff 75 0d ff 15 48 20 40 00 8b f8 e9 $....u...H @....
7f 04 00 00 53 55 8d 44 24 18 50 ff 15 44 20 40 ....SU.D$.P..D @
00 50 e8 75 04 00 00 8b 2d 48 20 40 00 89 44 24 .P.u....-H @..D$
2c 85 c0 75 14 ff d5 8b f8 57 68 34 25 40 00 bb ,..u.....Wh4%@..
00 25 40 00 e9 21 04 00 00 83 7c 24 18 02 bb 00 .%@..!....|$....
25 40 00 0f 82 ee 03 00 00 8b 40 04 66 83 38 00 %@........@.f.8.
0f 84 e1 03 00 00 83 7c 24 18 03 0f 87 d6 03 00 .......|$.......
00 6a 00 6a 02 ff 15 40 20 40 00 8b f8 89 7c 24 .j.j...@ @....|$
34 83 ff ff 75 17 ff d5 50 68 cc 24 40 00 53 56 4...u...Ph.$@.SV
e8 eb fe ff ff 83 c4 10 e9 b1 00 00 00 8d 84 24 ...............$
94 00 00 00 50 57 c7 84 24 9c 00 00 00 2c 02 00 ....PW..$....,..
00 ff 15 3c 20 40 00 85 c0 75 0a ff d5 50 68 ac ...< @...u...Ph.
24 40 00 eb 53 83 bc 24 ac 00 00 00 04 75 25 6a $@..S..$.....u%j
09 59 bf 98 24 40 00 8d b4 24 b8 00 00 00 33 c0 .Y..$@...$....3.
66 f3 a7 8b 74 24 24 75 0b 8b 84 24 9c 00 00 00 f...t$$u...$....
89 44 24 14 8b 7c 24 34 8d 84 24 94 00 00 00 50 .D$..|$4..$....P
57 ff 15 38 20 40 00 85 c0 75 ba ff d5 83 f8 12 W..8 @...u......
74 10 50 68 7c 24 40 00 53 56 e8 61 fe ff ff 83 t.Ph|$@.SV.a....
c4 10 57 ff 15 34 20 40 00 85 c0 75 15 ff d5 50 ..W..4 @...u...P
bf 64 24 40 00 57 53 56 e8 43 fe ff ff 83 c4 10 .d$@.WSV.C......
eb 05 bf 64 24 40 00 83 7c 24 14 00 75 15 68 24 ...d$@..|$..u.h$
24 40 00 56 e8 27 fe ff ff bf 90 04 00 00 e9 ef $@.V.'..........
02 00 00 8d 44 24 10 50 6a 08 ff 74 24 24 ff 15 ....D$.Pj..t$$..
1c 20 40 00 85 c0 75 0c ff d5 8b f8 57 68 00 24 . @...u.....Wh.$
40 00 eb 6d 8d 44 24 28 50 6a 04 8d 44 24 40 50 @..m.D$(Pj..D$@P
6a 0c ff 74 24 20 ff 15 18 20 40 00 85 c0 75 12 j..t$ ... @...u.
ff d5 50 68 d8 23 40 00 53 56 e8 d1 fd ff ff 83 ..Ph.#@.SV......
c4 10 ff 74 24 10 ff 15 34 20 40 00 85 c0 75 0e ...t$...4 @...u.
ff d5 50 57 53 56 e8 b5 fd ff ff 83 c4 10 ff 74 ..PWSV.........t
24 14 6a 00 68 00 10 00 00 ff 15 30 20 40 00 89 $.j.h......0 @..
44 24 1c 85 c0 75 19 ff d5 8b f8 57 68 c0 23 40 D$...u.....Wh.#@
00 53 56 e8 88 fd ff ff 83 c4 10 e9 54 02 00 00 .SV.........T...
8d 4c 24 10 51 6a 0a 50 ff 15 1c 20 40 00 85 c0 .L$.Qj.P... @...
75 0f ff d5 8b f8 57 68 00 24 40 00 e9 01 02 00 u.....Wh.$@.....
00 ff 74 24 10 ff 15 14 20 40 00 85 c0 75 0f ff ..t$.... @...u..
d5 8b f8 57 68 90 23 40 00 e9 c4 01 00 00 ff 74 ...Wh.#@.......t
24 10 ff 15 34 20 40 00 85 c0 75 0e ff d5 50 57 $...4 @...u...PW
53 56 e8 29 fd ff ff 83 c4 10 8d 44 24 10 50 6a SV.).......D$.Pj
00 68 af 01 00 00 ff 74 24 3c ff 15 10 20 40 00 .h.....t$<... @.
85 c0 75 0f ff d5 8b f8 57 68 70 23 40 00 e9 61 ..u.....Whp#@..a
01 00 00 8d 44 24 28 50 6a 48 8d 44 24 54 50 6a ....D$(PjH.D$TPj
05 ff 74 24 20 ff 15 18 20 40 00 bf 48 23 40 00 ..t$ ... @..H#@.
85 c0 75 0a ff d5 50 68 d8 23 40 00 eb 1d ff 74 ..u...Ph.#@....t
24 28 8d 44 24 50 50 6a 04 ff 74 24 1c ff 15 0c $(.D$PPj..t$....
20 40 00 85 c0 75 0e ff d5 50 57 53 56 e8 ae fc @...u...PWSV...
ff ff 83 c4 10 6a 04 8d 44 24 3c 50 6a 0c ff 74 .....j..D$<Pj..t
24 1c ff 15 0c 20 40 00 85 c0 75 0e ff d5 50 57 $.... @...u...PW
53 56 e8 89 fc ff ff 83 c4 10 33 c0 50 50 6a 10 SV........3.PPj.
68 78 20 40 00 50 ff 74 24 24 ff 15 08 20 40 00 hx @.P.t$$... @.
ff d5 8b f8 85 ff 74 0b 57 68 1c 23 40 00 e9 c1 ......t.Wh.#@...
00 00 00 6a 00 ff 74 24 14 8d 44 24 28 50 ff 15 ...j..t$..D$(P..
6c 20 40 00 85 c0 75 0f ff d5 8b f8 57 68 ec 22 l @...u.....Wh."
40 00 e9 9d 00 00 00 8b 4c 24 2c 8d 44 24 3c 50 @.......L$,.D$<P
68 88 20 40 00 33 c0 50 ff 74 24 2c 68 10 04 00 h. @.3.P.t$,h...
04 50 50 50 8b 44 24 38 ff 74 81 fc 6a 04 5a 2b .PPP.D$8.t..j.Z+
d0 ff 34 91 ff 74 24 38 ff 15 04 20 40 00 85 c0 ..4..t$8... @...
75 0c ff d5 8b f8 57 68 c4 22 40 00 eb 36 ff 74 u.....Wh."@..6.t
24 40 ff 15 34 20 40 00 85 c0 75 12 ff d5 50 68 $@..4 @...u...Ph
64 24 40 00 53 56 e8 d5 fb ff ff 83 c4 10 ff 74 d$@.SV.........t
24 3c ff 15 34 20 40 00 85 c0 75 12 ff d5 50 68 $<..4 @...u...Ph
64 24 40 00 53 56 e8 b5 fb ff ff 83 c4 10 ff 74 d$@.SV.........t
24 20 ff 15 70 20 40 00 85 c0 75 12 ff d5 50 68 $ ..p @...u...Ph
94 22 40 00 53 56 e8 95 fb ff ff 83 c4 10 ff 15 ."@.SV..........
00 20 40 00 85 c0 75 14 ff d5 8b f8 57 68 78 22 . @...u.....Whx"
40 00 53 56 e8 77 fb ff ff 83 c4 10 ff 74 24 10 @.SV.w.......t$.
ff 15 34 20 40 00 85 c0 75 12 ff d5 50 68 64 24 ..4 @...u...Phd$
40 00 53 56 e8 57 fb ff ff 83 c4 10 ff 74 24 1c @.SV.W.......t$.
ff 15 34 20 40 00 85 c0 75 1a ff d5 50 68 64 24 ..4 @...u...Phd$
40 00 e9 aa fd ff ff 68 e0 20 40 00 56 e8 2e fb @......h. @.V...
ff ff 59 59 ff 74 24 2c ff 15 2c 20 40 00 85 c0 ..YY.t$,.., @...
74 12 ff d5 50 68 cc 20 40 00 53 56 e8 0f fb ff t...Ph. @.SV....
ff 83 c4 10 56 ff 15 34 20 40 00 85 c0 75 12 ff ....V..4 @...u..
d5 50 68 64 24 40 00 53 56 e8 f2 fa ff ff 83 c4 .Phd$@.SV.......
10 5d 5b 57 ff 15 28 20 40 00 5f 5e 55 8b ec 51 .][W..( @._^U..Q
8b 45 08 53 56 33 f6 57 8b f8 89 75 08 89 75 fc .E.SV3.W...u..u.
39 75 0c 0f 84 6a 01 00 00 3b c6 0f 84 62 01 00 9u...j...;...b..
00 0f b7 08 66 3b ce 0f 84 56 01 00 00 83 f9 20 ....f;...V.....
74 0a 83 f9 09 74 05 33 db 43 eb 02 33 db 39 75 t....t.3.C..3.9u
08 75 2b 66 83 f9 20 74 06 66 83 f9 09 75 1f 89 .u+f.. t.f...u..
75 fc 83 c0 02 0f b7 08 83 f9 20 74 f5 83 f9 09 u......... t....
74 f0 33 c9 66 39 30 0f 95 c1 03 d9 eb 23 66 83 t.3.f90......#f.
f9 5c 75 06 83 75 fc 01 eb 14 39 75 fc 75 0c 66 .\u..u....9u.u.f
83 f9 22 75 06 83 75 08 01 eb 03 89 75 fc 83 c0 .."u..u.....u...
02 0f b7 08 66 3b ce 75 a5 2b c7 83 c0 02 d1 f8 ....f;.u.+......
8d 44 58 02 03 c0 50 6a 40 ff 15 5c 20 40 00 8b .DX...Pj@..\ @..
f0 33 d2 3b f2 0f 84 d0 00 00 00 8d 44 9e 04 33 .3.;........D..3
db 89 06 89 55 08 89 5d fc 83 7d 08 00 75 34 0f ....U..]..}..u4.
b7 0f 83 f9 20 74 05 83 f9 09 75 27 33 d2 33 c9 .... t....u'3.3.
66 89 08 83 c7 02 0f b7 0f 83 f9 20 74 f5 83 f9 f.......... t...
09 74 f0 66 39 17 74 71 43 8b c7 89 5d fc 89 3c .t.f9.tqC...]..<
9e eb 5c 0f b7 0f 83 f9 5c 75 03 42 eb 48 83 f9 ..\.....\u.B.H..
22 75 41 6a 02 8d 5a 01 d1 eb 59 f7 db 03 f9 8d "uAj..Z...Y.....
04 58 f6 c2 01 74 0a 6a 22 5a 66 89 10 03 c1 eb .X...t.j"Zf.....
1c 83 7d 08 00 74 12 66 83 3f 22 75 0c 6a 22 5a ..}..t.f.?"u.j"Z
66 89 10 03 c1 03 f9 eb 04 83 75 08 01 8b 5d fc f.........u...].
33 d2 eb 0b 33 d2 66 89 08 83 c0 02 83 c7 02 66 3...3.f........f
83 3f 00 0f 85 60 ff ff ff 33 c9 43 66 89 08 21 .?...`...3.Cf..!
0c 9e 8b 45 0c 89 18 39 4d 08 74 0f 68 a0 00 00 ...E...9M.t.h...
00 eb 02 6a 57 ff 15 58 20 40 00 5f 8b c6 5e 5b ...jW..X @._..^[
c9 c2 08 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
a4 26 00 00 b4 26 00 00 cc 26 00 00 e4 26 00 00 .&...&...&...&..
fa 26 00 00 0c 27 00 00 26 27 00 00 3c 27 00 00 .&...'..&'..<'..
00 00 00 00 5e 27 00 00 6e 27 00 00 7c 27 00 00 ....^'..n'..|'..
88 27 00 00 96 27 00 00 a4 27 00 00 b6 27 00 00 .'...'...'...'..
c8 27 00 00 e4 27 00 00 f6 27 00 00 06 28 00 00 .'...'...'...(..
16 28 00 00 2a 28 00 00 3e 28 00 00 4e 28 00 00 .(..*(..>(..N(..
00 00 00 00 6a 28 00 00 00 00 00 00 9e 28 00 00 ....j(.......(..
84 28 00 00 00 00 00 00 01 00 00 00 03 00 00 00 .(..............
00 00 00 00 02 00 00 00 44 00 00 00 00 00 00 00 ........D.......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 4c 00 6f 00 ............L.o.
63 00 61 00 6c 00 46 00 72 00 65 00 65 00 00 00 c.a.l.F.r.e.e...
42 00 61 00 64 00 20 00 61 00 72 00 67 00 75 00 B.a.d. .a.r.g.u.
6d 00 65 00 6e 00 74 00 73 00 3a 00 20 00 65 00 m.e.n.t.s.:. .e.
69 00 74 00 68 00 65 00 72 00 20 00 61 00 20 00 i.t.h.e.r. .a. .
28 00 70 00 72 00 6f 00 70 00 65 00 72 00 6c 00 (.p.r.o.p.e.r.l.
79 00 20 00 71 00 75 00 6f 00 74 00 65 00 64 00 y. .q.u.o.t.e.d.
29 00 20 00 63 00 6f 00 6d 00 6d 00 61 00 6e 00 ). .c.o.m.m.a.n.
64 00 20 00 6c 00 69 00 6e 00 65 00 0a 00 20 00 d. .l.i.n.e... .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 6f 00 72 00 . . . . . .o.r.
20 00 74 00 68 00 65 00 20 00 28 00 61 00 62 00 .t.h.e. .(.a.b.
73 00 6f 00 6c 00 75 00 74 00 65 00 20 00 6f 00 s.o.l.u.t.e. .o.
72 00 20 00 72 00 65 00 6c 00 61 00 74 00 69 00 r. .r.e.l.a.t.i.
76 00 65 00 29 00 20 00 70 00 61 00 74 00 68 00 v.e.). .p.a.t.h.
20 00 6e 00 61 00 6d 00 65 00 20 00 6f 00 66 00 .n.a.m.e. .o.f.
20 00 61 00 6e 00 20 00 61 00 70 00 70 00 6c 00 .a.n. .a.p.p.l.
69 00 63 00 61 00 74 00 69 00 6f 00 6e 00 0a 00 i.c.a.t.i.o.n...
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 66 00 . . . . . . .f.
6f 00 6c 00 6c 00 6f 00 77 00 65 00 64 00 20 00 o.l.l.o.w.e.d. .
62 00 79 00 20 00 61 00 20 00 28 00 70 00 72 00 b.y. .a. .(.p.r.
6f 00 70 00 65 00 72 00 6c 00 79 00 20 00 71 00 o.p.e.r.l.y. .q.
75 00 6f 00 74 00 65 00 64 00 29 00 20 00 63 00 u.o.t.e.d.). .c.
6f 00 6d 00 6d 00 61 00 6e 00 64 00 20 00 6c 00 o.m.m.a.n.d. .l.
69 00 6e 00 65 00 20 00 6d 00 75 00 73 00 74 00 i.n.e. .m.u.s.t.
20 00 62 00 65 00 20 00 67 00 69 00 76 00 65 00 .b.e. .g.i.v.e.
6e 00 21 00 0a 00 00 00 52 00 65 00 76 00 65 00 n.!.....R.e.v.e.
72 00 74 00 54 00 6f 00 53 00 65 00 6c 00 66 00 r.t.T.o.S.e.l.f.
00 00 00 00 44 00 65 00 73 00 74 00 72 00 6f 00 ....D.e.s.t.r.o.
79 00 45 00 6e 00 76 00 69 00 72 00 6f 00 6e 00 y.E.n.v.i.r.o.n.
6d 00 65 00 6e 00 74 00 42 00 6c 00 6f 00 63 00 m.e.n.t.B.l.o.c.
6b 00 00 00 43 00 72 00 65 00 61 00 74 00 65 00 k...C.r.e.a.t.e.
50 00 72 00 6f 00 63 00 65 00 73 00 73 00 41 00 P.r.o.c.e.s.s.A.
73 00 55 00 73 00 65 00 72 00 00 00 43 00 72 00 s.U.s.e.r...C.r.
65 00 61 00 74 00 65 00 45 00 6e 00 76 00 69 00 e.a.t.e.E.n.v.i.
72 00 6f 00 6e 00 6d 00 65 00 6e 00 74 00 42 00 r.o.n.m.e.n.t.B.
6c 00 6f 00 63 00 6b 00 00 00 00 00 41 00 64 00 l.o.c.k.....A.d.
6a 00 75 00 73 00 74 00 54 00 6f 00 6b 00 65 00 j.u.s.t.T.o.k.e.
6e 00 50 00 72 00 69 00 76 00 69 00 6c 00 65 00 n.P.r.i.v.i.l.e.
67 00 65 00 73 00 00 00 53 00 65 00 74 00 54 00 g.e.s...S.e.t.T.
6f 00 6b 00 65 00 6e 00 49 00 6e 00 66 00 6f 00 o.k.e.n.I.n.f.o.
72 00 6d 00 61 00 74 00 69 00 6f 00 6e 00 00 00 r.m.a.t.i.o.n...
4f 00 70 00 65 00 6e 00 54 00 68 00 72 00 65 00 O.p.e.n.T.h.r.e.
61 00 64 00 54 00 6f 00 6b 00 65 00 6e 00 00 00 a.d.T.o.k.e.n...
49 00 6d 00 70 00 65 00 72 00 73 00 6f 00 6e 00 I.m.p.e.r.s.o.n.
61 00 74 00 65 00 4c 00 6f 00 67 00 67 00 65 00 a.t.e.L.o.g.g.e.
64 00 4f 00 6e 00 55 00 73 00 65 00 72 00 00 00 d.O.n.U.s.e.r...
4f 00 70 00 65 00 6e 00 50 00 72 00 6f 00 63 00 O.p.e.n.P.r.o.c.
65 00 73 00 73 00 00 00 47 00 65 00 74 00 54 00 e.s.s...G.e.t.T.
6f 00 6b 00 65 00 6e 00 49 00 6e 00 66 00 6f 00 o.k.e.n.I.n.f.o.
72 00 6d 00 61 00 74 00 69 00 6f 00 6e 00 00 00 r.m.a.t.i.o.n...
4f 00 70 00 65 00 6e 00 50 00 72 00 6f 00 63 00 O.p.e.n.P.r.o.c.
65 00 73 00 73 00 54 00 6f 00 6b 00 65 00 6e 00 e.s.s.T.o.k.e.n.
00 00 00 00 50 00 72 00 6f 00 63 00 65 00 73 00 ....P.r.o.c.e.s.
73 00 20 00 27 00 53 00 4d 00 53 00 53 00 2e 00 s. .'.S.M.S.S...
65 00 78 00 65 00 27 00 20 00 6e 00 6f 00 74 00 e.x.e.'. .n.o.t.
20 00 66 00 6f 00 75 00 6e 00 64 00 21 00 0a 00 .f.o.u.n.d.!...
00 00 00 00 43 00 6c 00 6f 00 73 00 65 00 48 00 ....C.l.o.s.e.H.
61 00 6e 00 64 00 6c 00 65 00 00 00 50 00 72 00 a.n.d.l.e...P.r.
6f 00 63 00 65 00 73 00 73 00 33 00 32 00 4e 00 o.c.e.s.s.3.2.N.
65 00 78 00 74 00 00 00 73 00 6d 00 73 00 73 00 e.x.t...s.m.s.s.
2e 00 65 00 78 00 65 00 00 00 00 00 50 00 72 00 ..e.x.e.....P.r.
6f 00 63 00 65 00 73 00 73 00 33 00 32 00 46 00 o.c.e.s.s.3.2.F.
69 00 72 00 73 00 74 00 00 00 00 00 43 00 72 00 i.r.s.t.....C.r.
65 00 61 00 74 00 65 00 54 00 6f 00 6f 00 6c 00 e.a.t.e.T.o.o.l.
68 00 65 00 6c 00 70 00 33 00 32 00 53 00 6e 00 h.e.l.p.3.2.S.n.
61 00 70 00 73 00 68 00 6f 00 74 00 00 00 00 00 a.p.s.h.o.t.....
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
0a 00 00 00 43 00 6f 00 6d 00 6d 00 61 00 6e 00 ....C.o.m.m.a.n.
64 00 4c 00 69 00 6e 00 65 00 54 00 6f 00 41 00 d.L.i.n.e.T.o.A.
72 00 67 00 76 00 00 00 b9 79 37 9e 00 00 00 00 r.g.v....y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 58 25 40 00 ............X%@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2c 26 00 00 00 00 00 00 ........,&......
00 00 00 00 50 27 00 00 00 20 00 00 50 26 00 00 ....P'... ..P&..
00 00 00 00 00 00 00 00 5c 28 00 00 24 20 00 00 ........\(..$ ..
90 26 00 00 00 00 00 00 00 00 00 00 78 28 00 00 .&..........x(..
64 20 00 00 98 26 00 00 00 00 00 00 00 00 00 00 d ...&..........
b8 28 00 00 6c 20 00 00 00 00 00 00 00 00 00 00 .(..l ..........
00 00 00 00 00 00 00 00 00 00 00 00 a4 26 00 00 .............&..
b4 26 00 00 cc 26 00 00 e4 26 00 00 fa 26 00 00 .&...&...&...&..
0c 27 00 00 26 27 00 00 3c 27 00 00 00 00 00 00 .'..&'..<'......
5e 27 00 00 6e 27 00 00 7c 27 00 00 88 27 00 00 ^'..n'..|'...'..
96 27 00 00 a4 27 00 00 b6 27 00 00 c8 27 00 00 .'...'...'...'..
e4 27 00 00 f6 27 00 00 06 28 00 00 16 28 00 00 .'...'...(...(..
2a 28 00 00 3e 28 00 00 4e 28 00 00 00 00 00 00 *(..>(..N(......
6a 28 00 00 00 00 00 00 9e 28 00 00 84 28 00 00 j(.......(...(..
00 00 00 00 90 02 52 65 76 65 72 74 54 6f 53 65 ......RevertToSe
6c 66 00 00 7c 00 43 72 65 61 74 65 50 72 6f 63 lf..|.CreateProc
65 73 73 41 73 55 73 65 72 57 00 00 1f 00 41 64 essAsUserW....Ad
6a 75 73 74 54 6f 6b 65 6e 50 72 69 76 69 6c 65 justTokenPrivile
67 65 73 00 c2 02 53 65 74 54 6f 6b 65 6e 49 6e ges...SetTokenIn
66 6f 72 6d 61 74 69 6f 6e 00 fc 01 4f 70 65 6e formation...Open
54 68 72 65 61 64 54 6f 6b 65 6e 00 73 01 49 6d ThreadToken.s.Im
70 65 72 73 6f 6e 61 74 65 4c 6f 67 67 65 64 4f personateLoggedO
6e 55 73 65 72 00 5a 01 47 65 74 54 6f 6b 65 6e nUser.Z.GetToken
49 6e 66 6f 72 6d 61 74 69 6f 6e 00 f7 01 4f 70 Information...Op
65 6e 50 72 6f 63 65 73 73 54 6f 6b 65 6e 00 00 enProcessToken..
41 44 56 41 50 49 33 32 2e 64 6c 6c 00 00 24 05 ADVAPI32.dll..$.
57 72 69 74 65 43 6f 6e 73 6f 6c 65 57 00 19 01 WriteConsoleW...
45 78 69 74 50 72 6f 63 65 73 73 00 48 03 4c 6f ExitProcess.H.Lo
63 61 6c 46 72 65 65 00 80 03 4f 70 65 6e 50 72 calFree...OpenPr
6f 63 65 73 73 00 52 00 43 6c 6f 73 65 48 61 6e ocess.R.CloseHan
64 6c 65 00 98 03 50 72 6f 63 65 73 73 33 32 4e dle...Process32N
65 78 74 57 00 00 96 03 50 72 6f 63 65 73 73 33 extW....Process3
32 46 69 72 73 74 57 00 be 00 43 72 65 61 74 65 2FirstW...Create
54 6f 6f 6c 68 65 6c 70 33 32 53 6e 61 70 73 68 Toolhelp32Snapsh
6f 74 00 00 87 01 47 65 74 43 6f 6d 6d 61 6e 64 ot....GetCommand
4c 69 6e 65 57 00 02 02 47 65 74 4c 61 73 74 45 LineW...GetLastE
72 72 6f 72 00 00 64 02 47 65 74 53 74 64 48 61 rror..d.GetStdHa
6e 64 6c 65 00 00 c0 01 47 65 74 43 75 72 72 65 ndle....GetCurre
6e 74 50 72 6f 63 65 73 73 00 c4 01 47 65 74 43 ntProcess...GetC
75 72 72 65 6e 74 54 68 72 65 61 64 00 00 73 04 urrentThread..s.
53 65 74 4c 61 73 74 45 72 72 6f 72 00 00 44 03 SetLastError..D.
4c 6f 63 61 6c 41 6c 6c 6f 63 00 00 4b 45 52 4e LocalAlloc..KERN
45 4c 33 32 2e 64 6c 6c 00 00 35 03 77 76 73 70 EL32.dll..5.wvsp
72 69 6e 74 66 57 00 00 55 53 45 52 33 32 2e 64 rintfW..USER32.d
6c 6c 00 00 04 00 44 65 73 74 72 6f 79 45 6e 76 ll....DestroyEnv
69 72 6f 6e 6d 65 6e 74 42 6c 6f 63 6b 00 00 00 ironmentBlock...
43 72 65 61 74 65 45 6e 76 69 72 6f 6e 6d 65 6e CreateEnvironmen
74 42 6c 6f 63 6b 00 00 55 53 45 52 45 4e 56 2e tBlock..USERENV.
64 6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 dll.............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file SYSIPHOS.TXT
created in
step 3. to recreate the console application
Interactive SYSTEM
Process Launcher:
CERTUTIL.EXE /DecodeHex /V SYSIPHOS.TXT SYSIPHOS.COM
Input Length = 21760 Output Length = 5120 CertUtil: -decodehex command completed successfully.
TWIDDLER.COM { /ENABLE:‹privilege name› | /DISABLE:‹privilege name› | /REMOVE:‹privilege name› } …
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and TWIDDLER.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file TWIDDLER.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tlhelp32.h>
#include <shellapi.h>
#define SE_PRIVILEGE_DISABLED 0UL
#define SE_MIN_WELL_KNOWN_PRIVILEGE 2UL
#define SE_CREATE_TOKEN_PRIVILEGE 2UL // "SeCreateTokenPrivilege"
#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3UL // "SeAssignPrimaryTokenPrivilege"
#define SE_LOCK_MEMORY_PRIVILEGE 4UL // "SeLockMemoryPrivilege"
#define SE_INCREASE_QUOTA_PRIVILEGE 5UL // "SeIncreaseQuotaPrivilege"
// SE_UNSOLICITED_INPUT_PRIVILEGE 6UL // "SeUnsolicitedInputPrivilege"
#define SE_MACHINE_ACCOUNT_PRIVILEGE 6UL // "SeMachineAccountPrivilege"
#define SE_TCB_PRIVILEGE 7UL // "SeTcbPrivilege"
#define SE_SECURITY_PRIVILEGE 8UL // "SeSecurityPrivilege"
#define SE_TAKE_OWNERSHIP_PRIVILEGE 9UL // "SeTakeOwnershipPrivilege"
#define SE_LOAD_DRIVER_PRIVILEGE 10UL // "SeLoadDriverPrivilege"
#define SE_SYSTEM_PROFILE_PRIVILEGE 11UL // "SeSystemProfilePrivilege"
#define SE_SYSTEMTIME_PRIVILEGE 12UL // "SeSystemtimePrivilege"
#define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13UL // "SeProfileSingleProcessPrivilege"
#define SE_INC_BASE_PRIORITY_PRIVILEGE 14UL // "SeIncreaseBasePriorityPrivilege"
#define SE_CREATE_PAGEFILE_PRIVILEGE 15UL // "SeCreatePagefilePrivilege"
#define SE_CREATE_PERMANENT_PRIVILEGE 16UL // "SeCreatePermanentPrivilege"
#define SE_BACKUP_PRIVILEGE 17UL // "SeBackupPrivilege"
#define SE_RESTORE_PRIVILEGE 18UL // "SeRestorePrivilege"
#define SE_SHUTDOWN_PRIVILEGE 19UL // "SeShutdownPrivilege"
#define SE_DEBUG_PRIVILEGE 20UL // "SeDebugPrivilege"
#define SE_AUDIT_PRIVILEGE 21UL // "SeAuditPrivilege"
#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22UL // "SeSystemEnvironmentPrivilege"
#define SE_CHANGE_NOTIFY_PRIVILEGE 23UL // "SeChangeNotifyPrivilege"
#define SE_REMOTE_SHUTDOWN_PRIVILEGE 24UL // "SeRemoteShutdownPrivilege"
#define SE_UNDOCK_PRIVILEGE 25UL // "SeUndockPrivilege"
#define SE_SYNC_AGENT_PRIVILEGE 26UL // "SeSyncAgentPrivilege"
#define SE_ENABLE_DELEGATION_PRIVILEGE 27UL // "SeEnableDelegationPrivilege"
#define SE_MANAGE_VOLUME_PRIVILEGE 28UL // "SeManageVolumePrivilege"
#define SE_IMPERSONATE_PRIVILEGE 29UL // "SeImpersonatePrivilege"
#define SE_CREATE_GLOBAL_PRIVILEGE 30UL // "SeCreateGlobalPrivilege"
#define SE_TRUSTED_CREDMAN_ACCESS_PRIVILEGE 31UL // "SeTrustedCredManAccessPrivilege"
#define SE_RELABEL_PRIVILEGE 32UL // "SeRelabelPrivilege"
#define SE_INCREASE_WORKING_SET_PRIVILEGE 33UL // "SeIncreaseWorkingSetPrivilege"
#define SE_TIME_ZONE_PRIVILEGE 34UL // "SeTimeZonePrivilege"
#define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35UL // "SeCreateSymbolicLinkPrivilege"
#define SE_DELEGATE_SESSION_USER_IMPERSONATE_PRIVILEGE 36UL // "SeDelegateSessionUserImpersonatePrivilege"
#define SE_MAX_WELL_KNOWN_PRIVILEGE 36UL
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
INT nArgument = 1;
INT nArguments;
LPWSTR *lpArguments;
LPCWSTR lpPrivilege;
WCHAR szPrivilege[sizeof("SeDelegateSessionUserImpersonatePrivilege")];
DWORD dwPrivilege;
DWORD dwCurrentProcessId = GetCurrentProcessId();
DWORD dwParentProcessId = 0;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwTP;
TOKEN_PRIVILEGES *lpTP;
PROCESSENTRY32 pe /* = {sizeof(pe)} */;
HANDLE hSnapshot;
HANDLE hParent;
HANDLE hToken;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 2)
PrintConsole(hConsole,
L"At least one privilege to enable, disable or remove must be given by its name!\n");
else
{
dwTP = sizeof(TOKEN_PRIVILEGES) + sizeof(LUID_AND_ATTRIBUTES) * (nArguments - 1 - ANYSIZE_ARRAY);
lpTP = (TOKEN_PRIVILEGES *) LocalAlloc(LPTR, dwTP);
if (lpTP == NULL)
PrintConsole(hConsole,
L"LocalAlloc() returned error %lu\n",
dwError = GetLastError());
else
{
lpTP->PrivilegeCount = nArguments - 1;
do
{
lpPrivilege = NULL;
if (wcslen(lpArguments[nArgument]) > sizeof("/DISABLE:Se*Privilege"))
if (memcmp(lpArguments[nArgument], L"/DISABLE:", sizeof(L"/DISABLE:") - sizeof(L"")) == 0)
{
lpPrivilege = lpArguments[nArgument] + sizeof("/DISABLE");
// lpTP->Privileges[nArgument - 1].Attributes = SE_PRIVILEGE_DISABLED;
}
else if (memcmp(lpArguments[nArgument], L"/ENABLE:", sizeof(L"/ENABLE:") - sizeof(L"")) == 0)
{
lpPrivilege = lpArguments[nArgument] + sizeof("/ENABLE");
lpTP->Privileges[nArgument - 1].Attributes = SE_PRIVILEGE_ENABLED;
}
else if (memcmp(lpArguments[nArgument], L"/REMOVE:", sizeof(L"/REMOVE:") - sizeof(L"")) == 0)
{
lpPrivilege = lpArguments[nArgument] + sizeof("/REMOVE");
lpTP->Privileges[nArgument - 1].Attributes = SE_PRIVILEGE_REMOVED;
}
if (lpPrivilege == NULL)
{
PrintConsole(hConsole,
L"Invalid argument \'%ls\'!\n",
lpArguments[nArgument]);
lpTP->PrivilegeCount = 0;
}
else
if (!LookupPrivilegeValue((LPCWSTR) NULL,
lpPrivilege,
&lpTP->Privileges[nArgument - 1].Luid))
{
PrintConsole(hConsole,
L"LookupPrivilegeValue() returned error %lu for \'%ls\'\n",
dwError = GetLastError(), lpPrivilege);
lpTP->PrivilegeCount = 0;
}
} while (++nArgument < nArguments);
if (lpTP->PrivilegeCount > 0)
{
hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapshot == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"CreateToolhelp32Snapshot() returned error %lu\n",
dwError = GetLastError());
else
{
pe.dwSize = sizeof(pe);
if (!Process32First(hSnapshot, &pe))
PrintConsole(hConsole,
L"Process32First() returned error %lu\n",
dwError = GetLastError());
else
{
do
if (pe.th32ProcessID == dwCurrentProcessId)
dwParentProcessId = pe.th32ParentProcessID;
while (Process32Next(hSnapshot, &pe));
dwError = GetLastError();
if (dwError != ERROR_NO_MORE_FILES)
PrintConsole(hConsole,
L"Process32Next() returned error %lu\n",
dwError);
}
if (!CloseHandle(hSnapshot))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
if (dwParentProcessId == 0)
{
PrintConsole(hConsole,
L"Parent process of process %lu not found!\n",
dwCurrentProcessId);
dwError = ERROR_NOT_FOUND;
}
else
{
hParent = OpenProcess(PROCESS_QUERY_INFORMATION,
FALSE,
dwParentProcessId);
if (hParent == NULL)
PrintConsole(hConsole,
L"OpenProcess() returned error %lu\n",
dwError = GetLastError());
else
{
if (!OpenProcessToken(hParent,
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,
&hToken))
PrintConsole(hConsole,
L"OpenProcessToken() returned error %lu\n",
dwError = GetLastError());
else
{
if (!AdjustTokenPrivileges(hToken,
FALSE,
lpTP,
dwTP,
lpTP,
&dwTP))
PrintConsole(hConsole,
L"AdjustTokenPrivileges() returned error %lu\n",
dwError = GetLastError());
else
{
dwError = GetLastError();
if (lpTP->PrivilegeCount == 0)
if (dwError == ERROR_NOT_ALL_ASSIGNED)
PrintConsole(hConsole,
L"Not all privileges assigned, no privilege toggled in parent process %lu\n",
dwParentProcessId);
else
PrintConsole(hConsole,
L"No privilege toggled in parent process %lu\n",
dwParentProcessId);
else
{
if (dwError == ERROR_NOT_ALL_ASSIGNED)
PrintConsole(hConsole,
L"Not all privileges assigned, %lu privilege(s) toggled in parent process %lu:\n",
lpTP->PrivilegeCount, dwParentProcessId);
else
PrintConsole(hConsole,
L"%lu privilege(s) toggled in parent process %lu:\n",
lpTP->PrivilegeCount, dwParentProcessId);
dwTP = 0;
do
{
dwPrivilege = sizeof(szPrivilege) / sizeof(*szPrivilege);
if (!LookupPrivilegeName((LPCWSTR) NULL,
&lpTP->Privileges[dwTP].Luid,
szPrivilege,
&dwPrivilege))
PrintConsole(hConsole,
L"LookupPrivilegeName() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"\'%ls\'%lc",
szPrivilege, dwTP != lpTP->PrivilegeCount ? L' ' : L'\n');
}
while (++dwTP < lpTP->PrivilegeCount);
}
}
if (!CloseHandle(hToken))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hParent))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
}
}
}
if (LocalFree(lpTP) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
}
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
TWIDDLER.C
created in step 1., link the compiled
object file TWIDDLER.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeTWIDDLER.COM TWIDDLER.C ADVAPI32.LIB KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE TWIDDLER.OBJFor 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. TWIDDLER.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file TWIDDLER.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
e0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 08 00 00 ......#.........
00 0a 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
04 00 00 00 00 00 2f 03 04 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 79 0f 01 00 03 00 00 85 ..0.....y.......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
bc 26 00 00 50 00 00 00 00 00 00 00 00 00 00 00 .&..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 60 26 00 00 40 00 00 00 ........`&..@...
00 00 00 00 00 00 00 00 00 20 00 00 58 00 00 00 ......... ..X...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
02 07 00 00 00 10 00 00 00 08 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 e2 08 00 00 00 20 00 00 .const....... ..
00 0a 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 04 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 fc f7 ff ff 50 ff 15 50 20 40 00 8b f0 .......P..P @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 fc f7 ff ff 50 ff 75 08 ff 15 48 20 40 00 85 .....P.u...H @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 81 ec .t.3.9u....^....
b4 02 00 00 56 c7 44 24 18 01 00 00 00 ff 15 30 ....V.D$.......0
20 40 00 83 64 24 08 00 6a f4 89 44 24 28 c7 44 @..d$..j..D$(.D
24 08 a0 00 00 00 ff 15 2c 20 40 00 8b f0 89 74 $......., @....t
24 1c 83 fe ff 75 0f ff 15 28 20 40 00 89 44 24 $....u...( @..D$
04 e9 e3 04 00 00 53 8d 44 24 24 50 ff 15 44 20 ......S.D$$P..D
40 00 50 e8 dc 04 00 00 8b 1d 28 20 40 00 89 44 @.P.......( @..D
24 30 85 c0 75 11 ff d3 50 89 44 24 0c 68 30 26 $0..u...P.D$.h0&
40 00 e9 82 04 00 00 8b 44 24 24 83 f8 02 73 12 @.......D$$...s.
68 90 25 40 00 56 e8 25 ff ff ff 59 59 e9 51 04 h.%@.V.%...YY.Q.
00 00 83 c0 fe 6b c0 0c 55 83 c0 10 50 6a 40 89 .....k..U...Pj@.
44 24 1c ff 15 20 20 40 00 8b e8 85 ed 75 11 ff D$... @.....u..
d3 50 89 44 24 10 68 74 25 40 00 e9 14 04 00 00 .P.D$.ht%@......
8b 44 24 28 48 89 45 00 c7 44 24 18 0c 00 00 00 .D$(H.E..D$.....
57 8b 44 24 38 8b 4c 24 24 8d 14 88 8b 02 8b c8 W.D$8.L$$.......
8d 79 02 89 54 24 20 89 7c 24 40 66 8b 39 83 c1 .y..T$ .|$@f.9..
02 66 85 ff 75 f5 2b 4c 24 40 d1 f9 83 f9 16 0f .f..u.+L$@......
86 ce 00 00 00 6a 09 59 bf 60 25 40 00 8b f0 33 .....j.Y.`%@...3
d2 66 f3 a7 0f 84 aa 00 00 00 6a 09 59 bf 4c 25 .f........j.Y.L%
40 00 8b f0 33 d2 66 f3 a7 0f 84 95 00 00 00 6a @...3.f........j
09 59 bf 38 25 40 00 8b f0 33 d2 66 f3 a7 0f 84 .Y.8%@...3.f....
80 00 00 00 6a 04 59 bf 24 25 40 00 8b f0 33 d2 ....j.Y.$%@...3.
f3 a7 74 60 6a 04 59 bf 10 25 40 00 8b f0 33 d2 ..t`j.Y..%@...3.
f3 a7 74 50 6a 04 59 bf fc 24 40 00 8b f0 33 d2 ..tPj.Y..$@...3.
f3 a7 74 40 6a 04 59 bf e8 24 40 00 8b f0 33 d2 ..t@j.Y..$@...3.
f3 a7 74 20 6a 04 59 bf d4 24 40 00 8b f0 33 d2 ..t j.Y..$@...3.
f3 a7 74 10 6a 04 59 bf c0 24 40 00 8b f0 33 d2 ..t.j.Y..$@...3.
f3 a7 75 27 8d 70 10 8b 44 24 1c c7 04 28 04 00 ..u'.p..D$...(..
00 00 eb 13 8d 70 10 8b 44 24 1c c7 04 28 02 00 .....p..D$...(..
00 00 eb 03 8d 70 12 85 f6 75 1e 8b 54 24 20 8b .....p...u..T$ .
74 24 28 ff 32 68 8c 24 40 00 56 e8 d0 fd ff ff t$(.2h.$@.V.....
83 c4 0c 83 65 00 00 eb 3c 8b 44 24 1c 8d 44 28 ....e...<.D$..D(
f8 50 56 6a 00 ff 15 08 20 40 00 85 c0 75 22 ff .PVj.... @...u".
d3 56 50 68 60 24 40 00 68 18 24 40 00 ff 74 24 .VPh`$@.h.$@..t$
38 89 44 24 24 e8 96 fd ff ff 83 c4 14 83 65 00 8.D$$.........e.
00 8b 74 24 28 ff 44 24 24 8b 44 24 24 83 44 24 ..t$(.D$$.D$$.D$
1c 0c 3b 44 24 2c 0f 82 95 fe ff ff 83 7d 00 00 ..;D$,.......}..
0f 84 7a 02 00 00 6a 00 6a 02 ff 15 1c 20 40 00 ..z...j.j.... @.
8b f8 89 7c 24 20 83 ff ff 75 11 ff d3 50 89 44 ...|$ ...u...P.D
24 14 68 e4 23 40 00 e9 46 02 00 00 8d 84 24 98 $.h.#@..F.....$.
00 00 00 50 57 c7 84 24 a0 00 00 00 2c 02 00 00 ...PW..$....,...
ff 15 18 20 40 00 85 c0 75 19 ff d3 50 68 c4 23 ... @...u...Ph.#
40 00 bf 90 23 40 00 57 56 e8 12 fd ff ff 83 c4 @...#@.WV.......
10 eb 4b 8b 84 24 a0 00 00 00 3b 44 24 30 75 0b ..K..$....;D$0u.
8b 84 24 b0 00 00 00 89 44 24 14 8d 84 24 98 00 ..$.....D$...$..
00 00 50 57 ff 15 14 20 40 00 85 c0 75 d5 ff d3 ..PW... @...u...
83 f8 12 74 14 50 68 74 23 40 00 68 90 23 40 00 ...t.Pht#@.h.#@.
56 e8 ca fc ff ff 83 c4 10 bf 90 23 40 00 ff 74 V..........#@..t
24 20 ff 15 24 20 40 00 85 c0 75 12 ff d3 50 68 $ ..$ @...u...Ph
5c 23 40 00 57 56 e8 a5 fc ff ff 83 c4 10 83 7c \#@.WV.........|
24 14 00 75 1f ff 74 24 30 68 08 23 40 00 56 e8 $..u..t$0h.#@.V.
8c fc ff ff 83 c4 0c c7 44 24 10 90 04 00 00 e9 ........D$......
8c 01 00 00 ff 74 24 14 6a 00 68 00 04 00 00 ff .....t$.j.h.....
15 38 20 40 00 89 44 24 20 85 c0 75 12 ff d3 50 .8 @..D$ ..u...P
68 ec 22 40 00 89 44 24 18 57 e9 58 01 00 00 8d h."@..D$.W.X....
4c 24 34 51 6a 28 50 ff 15 04 20 40 00 85 c0 75 L$4Qj(P... @...u
11 ff d3 50 89 44 24 14 68 c8 22 40 00 e9 10 01 ...P.D$.h."@....
00 00 8d 44 24 18 50 55 ff 74 24 20 55 6a 00 ff ...D$.PU.t$ Uj..
74 24 48 ff 15 0c 20 40 00 85 c0 75 1b ff d3 50 t$H... @...u...P
68 9c 22 40 00 57 56 89 44 24 20 e8 00 fc ff ff h."@.WV.D$ .....
83 c4 10 e9 c4 00 00 00 ff d3 8b 4d 00 ff 74 24 ...........M..t$
14 89 44 24 14 85 c9 75 21 3d 14 05 00 00 75 07 ..D$...u!=....u.
68 08 22 40 00 eb 05 68 b0 21 40 00 56 e8 ce fb h."@...h.!@.V...
ff ff 83 c4 0c e9 92 00 00 00 51 3d 14 05 00 00 ..........Q=....
75 07 68 10 21 40 00 eb 05 68 a8 20 40 00 56 e8 u.h.!@...h. @.V.
ac fb ff ff 33 c0 83 c4 10 89 44 24 18 39 45 00 ....3.....D$.9E.
76 6a 6b c0 0c 8d 4c 24 3c 51 8d 4c 24 48 51 8d vjk...L$<Q.L$HQ.
44 28 04 50 6a 00 c7 44 24 4c 2a 00 00 00 ff 15 D(.Pj..D$L*.....
00 20 40 00 85 c0 75 0f ff d3 50 68 80 20 40 00 . @...u...Ph. @.
89 44 24 18 57 eb 1e 8b 4c 24 18 33 c0 3b 4d 00 .D$.W...L$.3.;M.
0f 94 c0 48 83 e0 16 83 c0 0a 50 8d 44 24 48 50 ...H......P.D$HP
68 6c 20 40 00 56 e8 45 fb ff ff 8b 44 24 28 83 hl @.V.E....D$(.
c4 10 40 89 44 24 18 3b 45 00 72 96 ff 74 24 34 ..@.D$.;E.r..t$4
ff 15 24 20 40 00 85 c0 75 12 ff d3 50 68 5c 23 ..$ @...u...Ph\#
40 00 57 56 e8 17 fb ff ff 83 c4 10 ff 74 24 20 @.WV.........t$
ff 15 24 20 40 00 85 c0 75 16 ff d3 50 68 5c 23 ..$ @...u...Ph\#
40 00 68 90 23 40 00 56 e8 f3 fa ff ff 83 c4 10 @.h.#@.V........
55 ff 15 3c 20 40 00 5f 85 c0 74 16 ff d3 50 68 U..< @._..t...Ph
58 20 40 00 68 90 23 40 00 56 e8 d1 fa ff ff 83 X @.h.#@.V......
c4 10 5d ff 74 24 30 ff 15 3c 20 40 00 85 c0 74 ..].t$0..< @...t
16 ff d3 50 68 58 20 40 00 68 90 23 40 00 56 e8 ...PhX @.h.#@.V.
ac fa ff ff 83 c4 10 56 ff 15 24 20 40 00 85 c0 .......V..$ @...
75 16 ff d3 50 68 5c 23 40 00 68 90 23 40 00 56 u...Ph\#@.h.#@.V
e8 8b fa ff ff 83 c4 10 5b ff 74 24 04 ff 15 40 ........[.t$...@
20 40 00 5e 55 8b ec 51 8b 45 08 53 56 33 f6 57 @.^U..Q.E.SV3.W
8b f8 89 75 08 89 75 fc 39 75 0c 0f 84 50 01 00 ...u..u.9u...P..
00 3b c6 0f 84 48 01 00 00 0f b7 08 66 3b ce 0f .;...H......f;..
84 3c 01 00 00 83 f9 20 74 0a 83 f9 09 74 05 33 .<..... t....t.3
db 43 eb 02 33 db 39 75 08 75 2b 66 83 f9 20 74 .C..3.9u.u+f.. t
06 66 83 f9 09 75 1f 83 c0 02 0f b7 08 83 f9 20 .f...u.........
74 f5 83 f9 09 74 f0 33 c9 66 39 30 89 75 fc 0f t....t.3.f90.u..
95 c1 03 d9 eb 21 66 83 f9 5c 75 05 f7 55 fc eb .....!f..\u..U..
13 39 75 fc 75 0b 66 83 f9 22 75 05 f7 55 08 eb .9u.u.f.."u..U..
03 89 75 fc 83 c0 02 0f b7 08 66 3b ce 75 a7 2b ..u.......f;.u.+
c7 83 c0 02 d1 f8 8d 44 58 02 03 c0 50 6a 40 ff .......DX...Pj@.
15 20 20 40 00 8b f0 33 d2 3b f2 0f 84 b8 00 00 . @...3.;......
00 8d 44 9e 04 89 06 89 55 08 33 db 83 7d 08 00 ..D.....U.3..}..
75 31 0f b7 0f 83 f9 20 74 05 83 f9 09 75 24 33 u1..... t....u$3
c9 66 89 08 83 c7 02 0f b7 0f 83 f9 20 74 f5 83 .f.......... t..
f9 09 74 f0 33 d2 66 39 17 74 4d 43 8b c7 89 3c ..t.3.f9.tMC...<
9e eb 45 0f b7 0f 83 f9 5c 75 0c 66 89 08 83 c0 ..E.....\u.f....
02 83 c7 02 42 eb 31 83 f9 22 75 21 8d 4a 01 d1 ....B.1.."u!.J..
e9 f7 d9 8d 04 48 f6 c2 01 75 0f 83 c7 02 66 83 .....H...u....f.
3f 22 75 38 83 7d 08 00 74 32 6a 22 59 66 89 08 ?"u8.}..t2j"Yf..
83 c0 02 83 c7 02 33 d2 66 83 3f 00 0f 85 7a ff ......3.f.?...z.
ff ff 33 c9 43 66 89 08 21 0c 9e 8b 45 0c 89 18 ..3.Cf..!...E...
39 4d 08 74 14 68 a0 00 00 00 eb 07 f7 55 08 eb 9M.t.h.......U..
d5 6a 57 ff 15 34 20 40 00 5f 8b c6 5e 5b c9 c2 .jW..4 @._..^[..
08 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
78 28 00 00 a8 28 00 00 bc 28 00 00 90 28 00 00 x(...(...(...(..
00 00 00 00 aa 27 00 00 bc 27 00 00 ce 27 00 00 .....'...'...'..
ea 27 00 00 9c 27 00 00 0a 28 00 00 1a 28 00 00 .'...'...(...(..
2a 28 00 00 40 28 00 00 8e 27 00 00 82 27 00 00 *(..@(...'...'..
74 27 00 00 f8 27 00 00 64 27 00 00 00 00 00 00 t'...'..d'......
5e 28 00 00 00 00 00 00 4c 00 6f 00 63 00 61 00 ^(......L.o.c.a.
6c 00 46 00 72 00 65 00 65 00 00 00 27 00 25 00 l.F.r.e.e...'.%.
6c 00 73 00 27 00 25 00 6c 00 63 00 00 00 00 00 l.s.'.%.l.c.....
4c 00 6f 00 6f 00 6b 00 75 00 70 00 50 00 72 00 L.o.o.k.u.p.P.r.
69 00 76 00 69 00 6c 00 65 00 67 00 65 00 4e 00 i.v.i.l.e.g.e.N.
61 00 6d 00 65 00 00 00 25 00 6c 00 75 00 20 00 a.m.e...%.l.u. .
70 00 72 00 69 00 76 00 69 00 6c 00 65 00 67 00 p.r.i.v.i.l.e.g.
65 00 28 00 73 00 29 00 20 00 74 00 6f 00 67 00 e.(.s.). .t.o.g.
67 00 6c 00 65 00 64 00 20 00 69 00 6e 00 20 00 g.l.e.d. .i.n. .
70 00 61 00 72 00 65 00 6e 00 74 00 20 00 70 00 p.a.r.e.n.t. .p.
72 00 6f 00 63 00 65 00 73 00 73 00 20 00 25 00 r.o.c.e.s.s. .%.
6c 00 75 00 3a 00 0a 00 00 00 00 00 00 00 00 00 l.u.:...........
4e 00 6f 00 74 00 20 00 61 00 6c 00 6c 00 20 00 N.o.t. .a.l.l. .
70 00 72 00 69 00 76 00 69 00 6c 00 65 00 67 00 p.r.i.v.i.l.e.g.
65 00 73 00 20 00 61 00 73 00 73 00 69 00 67 00 e.s. .a.s.s.i.g.
6e 00 65 00 64 00 2c 00 20 00 25 00 6c 00 75 00 n.e.d.,. .%.l.u.
20 00 70 00 72 00 69 00 76 00 69 00 6c 00 65 00 .p.r.i.v.i.l.e.
67 00 65 00 28 00 73 00 29 00 20 00 74 00 6f 00 g.e.(.s.). .t.o.
67 00 67 00 6c 00 65 00 64 00 20 00 69 00 6e 00 g.g.l.e.d. .i.n.
20 00 70 00 61 00 72 00 65 00 6e 00 74 00 20 00 .p.a.r.e.n.t. .
70 00 72 00 6f 00 63 00 65 00 73 00 73 00 20 00 p.r.o.c.e.s.s. .
25 00 6c 00 75 00 3a 00 0a 00 00 00 00 00 00 00 %.l.u.:.........
4e 00 6f 00 20 00 70 00 72 00 69 00 76 00 69 00 N.o. .p.r.i.v.i.
6c 00 65 00 67 00 65 00 20 00 74 00 6f 00 67 00 l.e.g.e. .t.o.g.
67 00 6c 00 65 00 64 00 20 00 69 00 6e 00 20 00 g.l.e.d. .i.n. .
70 00 61 00 72 00 65 00 6e 00 74 00 20 00 70 00 p.a.r.e.n.t. .p.
72 00 6f 00 63 00 65 00 73 00 73 00 20 00 25 00 r.o.c.e.s.s. .%.
6c 00 75 00 0a 00 00 00 4e 00 6f 00 74 00 20 00 l.u.....N.o.t. .
61 00 6c 00 6c 00 20 00 70 00 72 00 69 00 76 00 a.l.l. .p.r.i.v.
69 00 6c 00 65 00 67 00 65 00 73 00 20 00 61 00 i.l.e.g.e.s. .a.
73 00 73 00 69 00 67 00 6e 00 65 00 64 00 2c 00 s.s.i.g.n.e.d.,.
20 00 6e 00 6f 00 20 00 70 00 72 00 69 00 76 00 .n.o. .p.r.i.v.
69 00 6c 00 65 00 67 00 65 00 20 00 74 00 6f 00 i.l.e.g.e. .t.o.
67 00 67 00 6c 00 65 00 64 00 20 00 69 00 6e 00 g.g.l.e.d. .i.n.
20 00 70 00 61 00 72 00 65 00 6e 00 74 00 20 00 .p.a.r.e.n.t. .
70 00 72 00 6f 00 63 00 65 00 73 00 73 00 20 00 p.r.o.c.e.s.s. .
25 00 6c 00 75 00 0a 00 00 00 00 00 41 00 64 00 %.l.u.......A.d.
6a 00 75 00 73 00 74 00 54 00 6f 00 6b 00 65 00 j.u.s.t.T.o.k.e.
6e 00 50 00 72 00 69 00 76 00 69 00 6c 00 65 00 n.P.r.i.v.i.l.e.
67 00 65 00 73 00 00 00 4f 00 70 00 65 00 6e 00 g.e.s...O.p.e.n.
50 00 72 00 6f 00 63 00 65 00 73 00 73 00 54 00 P.r.o.c.e.s.s.T.
6f 00 6b 00 65 00 6e 00 00 00 00 00 4f 00 70 00 o.k.e.n.....O.p.
65 00 6e 00 50 00 72 00 6f 00 63 00 65 00 73 00 e.n.P.r.o.c.e.s.
73 00 00 00 00 00 00 00 50 00 61 00 72 00 65 00 s.......P.a.r.e.
6e 00 74 00 20 00 70 00 72 00 6f 00 63 00 65 00 n.t. .p.r.o.c.e.
73 00 73 00 20 00 6f 00 66 00 20 00 70 00 72 00 s.s. .o.f. .p.r.
6f 00 63 00 65 00 73 00 73 00 20 00 25 00 6c 00 o.c.e.s.s. .%.l.
75 00 20 00 6e 00 6f 00 74 00 20 00 66 00 6f 00 u. .n.o.t. .f.o.
75 00 6e 00 64 00 21 00 0a 00 00 00 43 00 6c 00 u.n.d.!.....C.l.
6f 00 73 00 65 00 48 00 61 00 6e 00 64 00 6c 00 o.s.e.H.a.n.d.l.
65 00 00 00 50 00 72 00 6f 00 63 00 65 00 73 00 e...P.r.o.c.e.s.
73 00 33 00 32 00 4e 00 65 00 78 00 74 00 00 00 s.3.2.N.e.x.t...
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
0a 00 00 00 50 00 72 00 6f 00 63 00 65 00 73 00 ....P.r.o.c.e.s.
73 00 33 00 32 00 46 00 69 00 72 00 73 00 74 00 s.3.2.F.i.r.s.t.
00 00 00 00 43 00 72 00 65 00 61 00 74 00 65 00 ....C.r.e.a.t.e.
54 00 6f 00 6f 00 6c 00 68 00 65 00 6c 00 70 00 T.o.o.l.h.e.l.p.
33 00 32 00 53 00 6e 00 61 00 70 00 73 00 68 00 3.2.S.n.a.p.s.h.
6f 00 74 00 00 00 00 00 25 00 6c 00 73 00 28 00 o.t.....%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 00 00 .'.%.l.s.'.....
4c 00 6f 00 6f 00 6b 00 75 00 70 00 50 00 72 00 L.o.o.k.u.p.P.r.
69 00 76 00 69 00 6c 00 65 00 67 00 65 00 56 00 i.v.i.l.e.g.e.V.
61 00 6c 00 75 00 65 00 00 00 00 00 49 00 6e 00 a.l.u.e.....I.n.
76 00 61 00 6c 00 69 00 64 00 20 00 61 00 72 00 v.a.l.i.d. .a.r.
67 00 75 00 6d 00 65 00 6e 00 74 00 20 00 27 00 g.u.m.e.n.t. .'.
25 00 6c 00 73 00 27 00 21 00 0a 00 00 00 00 00 %.l.s.'.!.......
2f 00 72 00 65 00 6d 00 6f 00 76 00 65 00 3a 00 /.r.e.m.o.v.e.:.
00 00 00 00 2f 00 52 00 65 00 6d 00 6f 00 76 00 ..../.R.e.m.o.v.
65 00 3a 00 00 00 00 00 2f 00 52 00 45 00 4d 00 e.:...../.R.E.M.
4f 00 56 00 45 00 3a 00 00 00 00 00 2f 00 65 00 O.V.E.:...../.e.
6e 00 61 00 62 00 6c 00 65 00 3a 00 00 00 00 00 n.a.b.l.e.:.....
2f 00 45 00 6e 00 61 00 62 00 6c 00 65 00 3a 00 /.E.n.a.b.l.e.:.
00 00 00 00 2f 00 45 00 4e 00 41 00 42 00 4c 00 ..../.E.N.A.B.L.
45 00 3a 00 00 00 00 00 2f 00 64 00 69 00 73 00 E.:...../.d.i.s.
61 00 62 00 6c 00 65 00 3a 00 00 00 2f 00 44 00 a.b.l.e.:.../.D.
69 00 73 00 61 00 62 00 6c 00 65 00 3a 00 00 00 i.s.a.b.l.e.:...
2f 00 44 00 49 00 53 00 41 00 42 00 4c 00 45 00 /.D.I.S.A.B.L.E.
3a 00 00 00 4c 00 6f 00 63 00 61 00 6c 00 41 00 :...L.o.c.a.l.A.
6c 00 6c 00 6f 00 63 00 00 00 00 00 00 00 00 00 l.l.o.c.........
41 00 74 00 20 00 6c 00 65 00 61 00 73 00 74 00 A.t. .l.e.a.s.t.
20 00 6f 00 6e 00 65 00 20 00 70 00 72 00 69 00 .o.n.e. .p.r.i.
76 00 69 00 6c 00 65 00 67 00 65 00 20 00 74 00 v.i.l.e.g.e. .t.
6f 00 20 00 65 00 6e 00 61 00 62 00 6c 00 65 00 o. .e.n.a.b.l.e.
2c 00 20 00 64 00 69 00 73 00 61 00 62 00 6c 00 ,. .d.i.s.a.b.l.
65 00 20 00 6f 00 72 00 20 00 72 00 65 00 6d 00 e. .o.r. .r.e.m.
6f 00 76 00 65 00 20 00 6d 00 75 00 73 00 74 00 o.v.e. .m.u.s.t.
20 00 62 00 65 00 20 00 67 00 69 00 76 00 65 00 .b.e. .g.i.v.e.
6e 00 20 00 62 00 79 00 20 00 69 00 74 00 73 00 n. .b.y. .i.t.s.
20 00 6e 00 61 00 6d 00 65 00 21 00 0a 00 00 00 .n.a.m.e.!.....
43 00 6f 00 6d 00 6d 00 61 00 6e 00 64 00 4c 00 C.o.m.m.a.n.d.L.
69 00 6e 00 65 00 54 00 6f 00 41 00 72 00 67 00 i.n.e.T.o.A.r.g.
76 00 00 00 00 00 00 00 b9 79 37 9e 00 00 00 00 v........y7.....
5c 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 \...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 58 26 40 00 ............X&@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 27 00 00 ............ '..
00 00 00 00 00 00 00 00 50 28 00 00 14 20 00 00 ........P(... ..
5c 27 00 00 00 00 00 00 00 00 00 00 6c 28 00 00 \'..........l(..
50 20 00 00 0c 27 00 00 00 00 00 00 00 00 00 00 P ...'..........
d4 28 00 00 00 20 00 00 00 00 00 00 00 00 00 00 .(... ..........
00 00 00 00 00 00 00 00 00 00 00 00 78 28 00 00 ............x(..
a8 28 00 00 bc 28 00 00 90 28 00 00 00 00 00 00 .(...(...(......
aa 27 00 00 bc 27 00 00 ce 27 00 00 ea 27 00 00 .'...'...'...'..
9c 27 00 00 0a 28 00 00 1a 28 00 00 2a 28 00 00 .'...(...(..*(..
40 28 00 00 8e 27 00 00 82 27 00 00 74 27 00 00 @(...'...'..t'..
f8 27 00 00 64 27 00 00 00 00 00 00 5e 28 00 00 .'..d'......^(..
00 00 00 00 24 05 57 72 69 74 65 43 6f 6e 73 6f ....$.WriteConso
6c 65 57 00 19 01 45 78 69 74 50 72 6f 63 65 73 leW...ExitProces
73 00 48 03 4c 6f 63 61 6c 46 72 65 65 00 80 03 s.H.LocalFree...
4f 70 65 6e 50 72 6f 63 65 73 73 00 52 00 43 6c OpenProcess.R.Cl
6f 73 65 48 61 6e 64 6c 65 00 98 03 50 72 6f 63 oseHandle...Proc
65 73 73 33 32 4e 65 78 74 57 00 00 96 03 50 72 ess32NextW....Pr
6f 63 65 73 73 33 32 46 69 72 73 74 57 00 be 00 ocess32FirstW...
43 72 65 61 74 65 54 6f 6f 6c 68 65 6c 70 33 32 CreateToolhelp32
53 6e 61 70 73 68 6f 74 00 00 44 03 4c 6f 63 61 Snapshot..D.Loca
6c 41 6c 6c 6f 63 00 00 87 01 47 65 74 43 6f 6d lAlloc....GetCom
6d 61 6e 64 4c 69 6e 65 57 00 02 02 47 65 74 4c mandLineW...GetL
61 73 74 45 72 72 6f 72 00 00 64 02 47 65 74 53 astError..d.GetS
74 64 48 61 6e 64 6c 65 00 00 c1 01 47 65 74 43 tdHandle....GetC
75 72 72 65 6e 74 50 72 6f 63 65 73 73 49 64 00 urrentProcessId.
73 04 53 65 74 4c 61 73 74 45 72 72 6f 72 00 00 s.SetLastError..
4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 KERNEL32.dll..5.
77 76 73 70 72 69 6e 74 66 57 00 00 55 53 45 52 wvsprintfW..USER
33 32 2e 64 6c 6c 00 00 95 01 4c 6f 6f 6b 75 70 32.dll....Lookup
50 72 69 76 69 6c 65 67 65 4e 61 6d 65 57 00 00 PrivilegeNameW..
1f 00 41 64 6a 75 73 74 54 6f 6b 65 6e 50 72 69 ..AdjustTokenPri
76 69 6c 65 67 65 73 00 f7 01 4f 70 65 6e 50 72 vileges...OpenPr
6f 63 65 73 73 54 6f 6b 65 6e 00 00 97 01 4c 6f ocessToken....Lo
6f 6b 75 70 50 72 69 76 69 6c 65 67 65 56 61 6c okupPrivilegeVal
75 65 57 00 41 44 56 41 50 49 33 32 2e 64 6c 6c ueW.ADVAPI32.dll
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file TWIDDLER.TXT
created in
step 3. to recreate the console application
Privilege Twiddler:
CERTUTIL.EXE /DecodeHex /V TWIDDLER.TXT TWIDDLER.COM
Input Length = 21760 Output Length = 5120 CertUtil: -decodehex command completed successfully.
longnames of files and directories on VFAT filesystems and superfluous
short(8.3) names of files and directories on NTFS filesystems, i.e.
longrespectively
short(8.3) names which differ only in case from their corresponding
short(8.3) or
longname.
longnames which differ only in case from their corresponding
short(8.3) name can generally be renamed to that
short(8.3) name and the superfluous
longor
short(8.3) name thereby (implicitly) removed.
The TechNet
article
The FAT File System
documents the format of directory entries and the layout of
directories: while a (mandatory) short
(8.3) name occupies
just a single directory entry, a(n optional) long
name
occupies at least 1 and up to 14 additional
directory entries.
The TechNet
article
The NTFS File System
documents that short
(8.3) names are needed only for legacy
DOS applications.
Note: 64-bit editions of Windows NT
don’t support
DOS applications,
thus short
(8.3) names can be removed completely there.
Note: the
SetFileShortName()
function but removes short
(8.3) names only on
NTFS
filesystems, only under Windows 7 and newer versions of
Windows NT, and requires the Restore
Privilege.
For additional information see the MSKB articles How to Disable the 8.3 Name Creation on NTFS Partitions, How Windows Generates 8.3 File Names from Long File Names and Short (8.3) File Names May Change When Copied. Using Long File Names
UPPERCUT.COM { ‹directory name› | ‹file name› } …
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and UPPERCUT.COM, a
smallform without these extras.
hiddenfiles and subdirectories, which are ignored, and reparse points, i.e. junctions and symbolic links, which are traversed, the following two command lines perform the same operation:
FOR /R "‹directory name›" %? IN (*) DO @IF NOT "%~nx?" == "%~snx?" IF /I "%~nx?" == "%~snx?" RENAME "%~f?" "%~snx?" FOR /D /R "‹directory name›" %? IN (*) DO @IF NOT "%~nx?" == "%~snx?" IF /I "%~nx?" == "%~snx?" RENAME "%~f?" "%~snx?"
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
Create the text file UPPERCUT.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define _CRT_SECURE_NO_WARNINGS
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#define memcpy __movsb
#define wmemcpy __movsw
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
__declspec(safebuffers)
DWORD WINAPI Traverse(HANDLE hConsole, WCHAR szPathName[32768], WCHAR sz8Dot3Name[32768])
{
WIN32_FIND_DATA wfd;
DWORD dwError;
DWORD dwPathName = wcslen(szPathName);
HANDLE hPathName;
#if 0
wcscat(szPathName, L"\\*");
#elif 0
wmemcpy(szPathName + dwPathName, L"\\*", sizeof("\\*"));
#elif 0
memcpy(szPathName + dwPathName, L"\\*", sizeof(L"\\*"));
#else
szPathName[dwPathName + 0] = L'\\';
szPathName[dwPathName + 1] = L'*';
szPathName[dwPathName + 2] = L'\0';
#endif
hPathName = FindFirstFile(szPathName, &wfd);
if (hPathName != INVALID_HANDLE_VALUE)
{
wmemcpy(sz8Dot3Name, szPathName, dwPathName + 1);
do
{
wcscpy(szPathName + dwPathName + 1, wfd.cFileName);
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
{
#if 0
if ((wcscmp(wfd.cFileName, L".") == 0)
|| (wcscmp(wfd.cFileName, L"..") == 0))
continue;
#elif 0
if ((wmemcmp(wfd.cFileName, L".", sizeof(".")) == 0)
|| (wmemcmp(wfd.cFileName, L"..", sizeof("..")) == 0))
continue;
#elif 0
if ((memcmp(wfd.cFileName, L".", sizeof(L".")) == 0)
|| (memcmp(wfd.cFileName, L"..", sizeof(L"..")) == 0))
continue;
#else
if ((wfd.cFileName[0] == L'.')
&& (wfd.cFileName[1] == L'\0'))
continue;
if ((wfd.cFileName[0] == L'.')
&& (wfd.cFileName[1] == L'.')
&& (wfd.cFileName[2] == L'\0'))
continue;
#endif
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) == 0)
dwError = Traverse(hConsole, szPathName, sz8Dot3Name);
}
if ((wcscmp(wfd.cFileName, wfd.cAlternateFileName) == 0)
|| (lstrcmpi(wfd.cFileName, wfd.cAlternateFileName) != 0))
continue;
wcscpy(sz8Dot3Name + dwPathName + 1, wfd.cAlternateFileName);
if (!MoveFile(szPathName, sz8Dot3Name))
PrintConsole(hConsole,
L"MoveFile(\"%ls\", \"%ls\") returned error %lu\n",
szPathName, sz8Dot3Name, dwError = GetLastError());
#if 0
else
if (!MoveFile(sz8Dot3Name, szPathName))
PrintConsole(hConsole,
L"MoveFile(\"%ls\", \"%ls\") returned error %lu\n",
sz8Dot3Name, szPathName, dwError = GetLastError());
#endif
}
while (FindNextFile(hPathName, &wfd));
dwError = GetLastError();
if (dwError == ERROR_NO_MORE_FILES)
dwError = ERROR_SUCCESS;
else
PrintConsole(hConsole,
L"FindNextFile() returned error %lu for path \'%ls\'\n",
dwError, szPathName);
if (!FindClose(hPathName))
PrintConsole(hConsole,
L"FindClose() returned error %lu for path \'%ls\'\n",
GetLastError(), szPathName);
}
else
{
dwError = GetLastError();
if (dwError == ERROR_FILE_NOT_FOUND)
dwError = ERROR_SUCCESS;
else
PrintConsole(hConsole,
L"FindFirstFile() returned error %lu for path \'%ls\'\n",
dwError, szPathName);
}
// szPathName[dwPathName] = L'\0';
return dwError;
}
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
WIN32_FIND_DATA wfd;
LPWSTR *lpArguments;
INT nArguments;
INT nArgument = 1;
WCHAR sz8Dot3Name[32768];
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwArgument;
WCHAR szArgument[32768];
LPWSTR lpArgument;
HANDLE hArgument;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 2)
PrintConsole(hConsole,
L"No arguments: at least one (wildcard) directory or file name must be given!\n");
else
do
{
hArgument = FindFirstFile(lpArguments[nArgument], &wfd);
if (hArgument == INVALID_HANDLE_VALUE)
PrintConsole(hConsole,
L"FindFirstFile() returned error %lu for argument \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
else
{
dwArgument = 0;
lpArgument = NULL;
do
{
sz8Dot3Name[dwArgument] = szArgument[dwArgument] = lpArguments[nArgument][dwArgument];
if (szArgument[dwArgument] == L'\\')
lpArgument = szArgument + dwArgument;
}
while (szArgument[dwArgument++] != L'\0');
if (dwArgument > MAX_PATH)
PrintConsole(hConsole,
L"Argument \'%ls\' exceeds MAX_PATH!\n",
szArgument);
if (lpArgument != NULL)
lpArgument++;
else
lpArgument = szArgument + 2 * (szArgument[1] == L':');
dwArgument = 0;
do
{
wcscpy(lpArgument, wfd.cFileName);
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0)
{
#if 0
if ((wcscmp(wfd.cFileName, L".") == 0)
|| (wcscmp(wfd.cFileName, L"..") == 0))
continue;
#elif 0
if ((wmemcmp(wfd.cFileName, L".", sizeof(".")) == 0)
|| (wmemcmp(wfd.cFileName, L"..", sizeof("..")) == 0))
continue;
#elif 0
if ((memcmp(wfd.cFileName, L".", sizeof(L".")) == 0)
|| (memcmp(wfd.cFileName, L"..", sizeof(L"..")) == 0))
continue;
#else
if ((wfd.cFileName[0] == L'.')
&& (wfd.cFileName[1] == L'\0'))
continue;
if ((wfd.cFileName[0] == L'.')
&& (wfd.cFileName[1] == L'.')
&& (wfd.cFileName[2] == L'\0'))
continue;
#endif
if ((wfd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) == 0)
dwError = Traverse(hConsole, szArgument, sz8Dot3Name);
}
dwArgument++;
if ((wcscmp(wfd.cFileName, wfd.cAlternateFileName) == 0)
|| (lstrcmpi(wfd.cFileName, wfd.cAlternateFileName) != 0))
continue;
wcscpy(lpArgument - szArgument + sz8Dot3Name, wfd.cAlternateFileName);
if (!MoveFile(szArgument, sz8Dot3Name))
PrintConsole(hConsole,
L"MoveFile(\"%ls\", \"%ls\") returned error %lu\n",
szArgument, sz8Dot3Name, dwError = GetLastError());
#if 0
else
if (!MoveFile(sz8Dot3Name, szArgument))
PrintConsole(hConsole,
L"MoveFile(\"%ls\", \"%ls\") returned error %lu\n",
sz8Dot3Name, szArgument, dwError = GetLastError());
#endif
}
while (FindNextFile(hArgument, &wfd));
dwError = GetLastError();
if (dwError == ERROR_NO_MORE_FILES)
dwError = ERROR_SUCCESS;
else
PrintConsole(hConsole,
L"FindNextFile() returned error %lu for argument \'%ls\'\n",
dwError, lpArguments[nArgument]);
if (dwArgument == 0)
PrintConsole(hConsole,
L"No wildcard match for argument \'%ls\'!\n",
lpArguments[nArgument]);
if (!FindClose(hArgument))
PrintConsole(hConsole,
L"FindClose() returned error %lu for argument \'%ls\'\n",
GetLastError(), lpArguments[nArgument]);
}
} while (++nArgument < nArguments);
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
UPPERCUT.C
created in step 1., link the compiled
object file UPPERCUT.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gs135168 /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /STACK:1048576,131072 /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeUPPERCUT.COM UPPERCUT.C KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE UPPERCUT.OBJFor 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. UPPERCUT.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file UPPERCUT.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
e0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 08 00 00 ......#.........
00 06 00 00 00 00 00 00 49 12 00 00 00 10 00 00 ........I.......
00 20 00 00 00 00 01 00 00 10 00 00 00 02 00 00 . ..............
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 fb bd 00 00 03 00 00 85 .0..............
00 00 10 00 00 00 02 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
c4 23 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 .#..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 68 23 00 00 40 00 00 00 ........h#..@...
00 00 00 00 00 00 00 00 00 20 00 00 44 00 00 00 ......... ..D...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
db 06 00 00 00 10 00 00 00 08 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 3a 05 00 00 00 20 00 00 .const..:.... ..
00 06 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 04 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 fc f7 ff ff 50 ff 15 3c 20 01 00 8b f0 .......P..< ....
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 fc f7 ff ff 50 ff 75 08 ff 15 00 20 01 00 85 .....P.u.... ...
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 81 ec 58 02 00 00 53 56 57 8b 7d 0c 8b c7 8d ...X...SVW.}....
50 02 66 8b 08 83 c0 02 66 85 c9 75 f5 2b c2 d1 P.f.....f..u.+..
f8 8b f0 6a 5c 8d 04 36 8d 1c 38 89 45 f8 58 66 ...j\..6..8.E.Xf
89 03 6a 2a 58 83 c3 02 66 89 03 33 c0 66 89 44 ..j*X...f..3.f.D
77 04 8d 85 a8 fd ff ff 50 57 ff 15 18 20 01 00 w.......PW... ..
89 45 fc 83 f8 ff 0f 84 6c 01 00 00 8b 7d 10 8d .E......l....}..
4e 01 8b 75 0c 8d 85 d4 fd ff ff 66 f3 a5 8b 3d N..u.......f...=
14 20 01 00 2b d8 8d 85 d4 fd ff ff 0f b7 08 66 . ..+..........f
89 0c 03 83 c0 02 66 85 c9 75 f1 f6 85 a8 fd ff ......f..u......
ff 10 74 48 66 83 bd d4 fd ff ff 2e 75 24 66 39 ..tHf.......u$f9
8d d6 fd ff ff 0f 84 c3 00 00 00 66 83 bd d6 fd ...........f....
ff ff 2e 75 0d 66 39 8d d8 fd ff ff 0f 84 ac 00 ...u.f9.........
00 00 f7 85 a8 fd ff ff 00 04 00 00 75 0e ff 75 ............u..u
10 ff 75 0c ff 75 08 e8 22 ff ff ff 8d 4d dc 8d ..u..u.."....M..
85 d4 fd ff ff 66 8b 10 66 3b 11 75 1e 66 85 d2 .....f..f;.u.f..
74 15 66 8b 50 02 66 3b 51 02 75 0f 83 c0 04 83 t.f.P.f;Q.u.....
c1 04 66 85 d2 75 de 33 c0 eb 05 1b c0 83 d8 ff ..f..u.3........
85 c0 74 5a 8d 45 dc 50 8d 85 d4 fd ff ff 50 ff ..tZ.E.P......P.
15 10 20 01 00 85 c0 75 45 8b 4d f8 8b 75 10 8d .. ....uE.M..u..
45 dc 8b d0 2b ca 8d 54 31 02 0f b7 08 66 89 0c E...+..T1....f..
02 83 c0 02 66 85 c9 75 f1 56 ff 75 0c ff 15 0c ....f..u.V.u....
20 01 00 85 c0 75 17 ff d7 50 56 ff 75 0c 68 f0 ....u...PV.u.h.
20 01 00 ff 75 08 e8 45 fe ff ff 83 c4 14 8d 85 ...u..E........
a8 fd ff ff 50 ff 75 fc ff 15 08 20 01 00 85 c0 ....P.u.... ....
0f 85 f0 fe ff ff ff d7 8b d8 be 98 20 01 00 83 ............ ...
fb 12 75 04 33 db eb 15 ff 75 0c 53 68 78 20 01 ..u.3....u.Shx .
00 56 ff 75 08 e8 06 fe ff ff 83 c4 14 ff 75 fc .V.u..........u.
ff 15 04 20 01 00 85 c0 75 36 ff 75 0c ff d7 50 ... ....u6.u...P
68 64 20 01 00 56 eb 1d ff 15 14 20 01 00 8b d8 hd ..V..... ....
83 fb 02 75 04 33 db eb 17 57 53 68 48 20 01 00 ...u.3...WShH ..
68 98 20 01 00 ff 75 08 e8 c3 fd ff ff 83 c4 14 h. ...u.........
5f 5e 8b c3 5b c9 c2 0c 00 55 8b ec 81 ec 6c 02 _^..[....U....l.
02 00 53 56 57 6a f4 c7 45 f0 01 00 00 00 be a0 ..SVWj..E.......
00 00 00 ff 15 2c 20 01 00 8b f8 89 7d fc 83 ff ....., .....}...
ff 75 0d ff 15 14 20 01 00 8b f0 e9 d6 02 00 00 .u.... .........
8d 45 e8 50 ff 15 28 20 01 00 50 e8 ce 02 00 00 .E.P..( ..P.....
8b 1d 14 20 01 00 89 45 e4 85 c0 75 0f ff d3 8b ... ...E...u....
f0 56 68 3c 23 01 00 e9 7b 02 00 00 83 7d e8 02 .Vh<#...{....}..
73 12 68 a0 22 01 00 57 e8 43 fd ff ff 59 59 e9 s.h."..W.C...YY.
4e 02 00 00 8d 78 04 8d 85 94 fd ff ff 50 ff 37 N....x.......P.7
ff 15 18 20 01 00 89 45 ec 83 f8 ff 75 11 ff d3 ... ...E....u...
ff 37 8b f0 56 68 48 20 01 00 e9 fe 01 00 00 33 .7..VhH .......3
f6 33 d2 89 75 f8 8b 07 0f b7 0c 50 8d 84 55 94 .3..u......P..U.
fd fe ff 66 89 08 66 89 8c 55 94 fd fd ff 0f b7 ...f..f..U......
c9 83 f9 5c 75 03 89 45 f8 42 66 3b ce 75 d7 81 ...\u..E.Bf;.u..
fa 04 01 00 00 76 12 ff 37 68 58 22 01 00 ff 75 .....v..7hX"...u
fc e8 ca fc ff ff 83 c4 0c 39 75 f8 74 06 83 45 .........9u.t..E
f8 02 eb 17 33 c0 66 83 bd 96 fd fe ff 3a 0f 94 ....3.f......:..
c0 8d 84 85 94 fd fe ff 89 45 f8 89 75 f4 8b 75 .........E..u..u
f8 8d 85 c0 fd ff ff 2b f0 8d 85 c0 fd ff ff 0f .......+........
b7 08 66 89 0c 06 83 c0 02 66 85 c9 75 f1 f6 85 ..f......f..u...
94 fd ff ff 10 74 44 66 83 bd c0 fd ff ff 2e 75 .....tDf.......u
24 66 39 8d c2 fd ff ff 0f 84 e3 00 00 00 66 83 $f9...........f.
bd c2 fd ff ff 2e 75 0d 66 39 8d c4 fd ff ff 0f ......u.f9......
84 cc 00 00 00 8d 85 94 fd fd ff 50 8d 85 94 fd ...........P....
fe ff 50 ff 75 fc e8 83 fc ff ff ff 45 f4 8d 4d ..P.u.......E..M
c8 8d 85 c0 fd ff ff 66 8b 10 66 3b 11 75 1e 66 .......f..f;.u.f
85 d2 74 15 66 8b 50 02 66 3b 51 02 75 0f 83 c0 ..t.f.P.f;Q.u...
04 83 c1 04 66 85 d2 75 de 33 c0 eb 05 1b c0 83 ....f..u.3......
d8 ff 85 c0 74 7b 8d 45 c8 50 8d 85 c0 fd ff ff ....t{.E.P......
50 ff 15 10 20 01 00 85 c0 75 66 8b 4d f8 8d 95 P... ....uf.M...
94 fd fe ff 2b ca d1 f9 8d 45 c8 8d 14 09 8b c8 ....+....E......
2b d1 8d 94 15 94 fd fd ff 0f b7 08 66 89 0c 02 +...........f...
83 c0 02 66 85 c9 75 f1 8d 85 94 fd fd ff 50 8d ...f..u.......P.
85 94 fd fe ff 50 ff 15 0c 20 01 00 85 c0 75 21 .....P... ....u!
ff d3 50 8d 85 94 fd fd ff 50 8d 85 94 fd fe ff ..P......P......
50 68 f0 20 01 00 ff 75 fc e8 82 fb ff ff 83 c4 Ph. ...u........
14 8d 85 94 fd ff ff 50 ff 75 ec ff 15 08 20 01 .......P.u.... .
00 85 c0 0f 85 d0 fe ff ff ff d3 8b f0 83 fe 12 ................
75 04 33 f6 eb 18 ff 37 56 68 78 20 01 00 68 f8 u.3....7Vhx ..h.
21 01 00 ff 75 fc e8 45 fb ff ff 83 c4 14 83 7d !...u..E.......}
f4 00 75 12 ff 37 68 a8 21 01 00 ff 75 fc e8 2d ..u..7h.!...u..-
fb ff ff 83 c4 0c ff 75 ec ff 15 04 20 01 00 85 .......u.... ...
c0 75 1a ff 37 ff d3 50 68 64 20 01 00 68 f8 21 .u..7..Phd ..h.!
01 00 ff 75 fc e8 06 fb ff ff 83 c4 14 ff 45 f0 ...u..........E.
8b 45 f0 83 c7 04 3b 45 e8 0f 82 b8 fd ff ff 8b .E....;E........
7d fc ff 75 e4 ff 15 24 20 01 00 85 c0 74 16 ff }..u...$ ....t..
d3 50 68 94 21 01 00 68 60 21 01 00 57 e8 ce fa .Ph.!..h`!..W...
ff ff 83 c4 10 57 ff 15 20 20 01 00 85 c0 75 16 .....W.. ....u.
ff d3 50 68 48 21 01 00 68 60 21 01 00 57 e8 ad ..PhH!..h`!..W..
fa ff ff 83 c4 10 56 ff 15 1c 20 01 00 cc 55 8b ......V... ...U.
ec 51 8b 45 08 53 56 33 f6 57 8b f8 89 75 08 89 .Q.E.SV3.W...u..
75 fc 39 75 0c 0f 84 4f 01 00 00 3b c6 0f 84 47 u.9u...O...;...G
01 00 00 0f b7 08 66 3b ce 0f 84 3b 01 00 00 83 ......f;...;....
f9 20 74 0a 83 f9 09 74 05 33 db 43 eb 02 33 db . t....t.3.C..3.
39 75 08 75 2b 66 83 f9 20 74 06 66 83 f9 09 75 9u.u+f.. t.f...u
1f 83 c0 02 0f b7 08 83 f9 20 74 f5 83 f9 09 74 ......... t....t
f0 33 c9 66 39 30 89 75 fc 0f 95 c1 03 d9 eb 21 .3.f90.u.......!
66 83 f9 5c 75 05 f7 55 fc eb 13 39 75 fc 75 0b f..\u..U...9u.u.
66 83 f9 22 75 05 f7 55 08 eb 03 89 75 fc 83 c0 f.."u..U....u...
02 0f b7 08 66 3b ce 75 a7 2b c7 83 c0 02 d1 f8 ....f;.u.+......
8d 44 58 02 03 c0 50 56 ff 15 34 20 01 00 8b f0 .DX...PV..4 ....
33 d2 3b f2 0f 84 b8 00 00 00 8d 44 9e 04 89 06 3.;........D....
89 55 08 33 db 83 7d 08 00 75 31 0f b7 0f 83 f9 .U.3..}..u1.....
20 74 05 83 f9 09 75 24 33 c9 66 89 08 83 c7 02 t....u$3.f.....
0f b7 0f 83 f9 20 74 f5 83 f9 09 74 f0 33 d2 66 ..... t....t.3.f
39 17 74 4d 43 8b c7 89 3c 9e eb 45 0f b7 0f 83 9.tMC...<..E....
f9 5c 75 0c 66 89 08 83 c0 02 83 c7 02 42 eb 31 .\u.f........B.1
83 f9 22 75 21 8d 4a 01 d1 e9 f7 d9 8d 04 48 f6 .."u!.J.......H.
c2 01 75 0f 83 c7 02 66 83 3f 22 75 38 83 7d 08 ..u....f.?"u8.}.
00 74 32 6a 22 59 66 89 08 83 c0 02 83 c7 02 33 .t2j"Yf........3
d2 66 83 3f 00 0f 85 7a ff ff ff 33 c9 43 66 89 .f.?...z...3.Cf.
08 21 0c 9e 8b 45 0c 89 18 39 4d 08 74 14 68 a0 .!...E...9M.t.h.
00 00 00 eb 07 f7 55 08 eb d5 6a 57 ff 15 30 20 ......U...jW..0
01 00 5f 8b c6 5e 5b c9 c2 08 00 00 00 00 00 00 .._..^[.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
44 24 00 00 54 24 00 00 60 24 00 00 70 24 00 00 D$..T$..`$..p$..
7c 24 00 00 88 24 00 00 98 24 00 00 aa 24 00 00 |$...$...$...$..
b8 24 00 00 c6 24 00 00 d2 24 00 00 e4 24 00 00 .$...$...$...$..
f4 24 00 00 04 25 00 00 00 00 00 00 20 25 00 00 .$...%...... %..
00 00 00 00 00 00 00 00 46 00 69 00 6e 00 64 00 ........F.i.n.d.
46 00 69 00 72 00 73 00 74 00 46 00 69 00 6c 00 F.i.r.s.t.F.i.l.
65 00 00 00 46 00 69 00 6e 00 64 00 43 00 6c 00 e...F.i.n.d.C.l.
6f 00 73 00 65 00 00 00 46 00 69 00 6e 00 64 00 o.s.e...F.i.n.d.
4e 00 65 00 78 00 74 00 46 00 69 00 6c 00 65 00 N.e.x.t.F.i.l.e.
00 00 00 00 00 00 00 00 25 00 6c 00 73 00 28 00 ........%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 70 00 61 00 74 00 68 00 20 00 27 00 25 00 .p.a.t.h. .'.%.
6c 00 73 00 27 00 0a 00 00 00 00 00 00 00 00 00 l.s.'...........
4d 00 6f 00 76 00 65 00 46 00 69 00 6c 00 65 00 M.o.v.e.F.i.l.e.
28 00 22 00 25 00 6c 00 73 00 22 00 2c 00 20 00 (.".%.l.s.".,. .
22 00 25 00 6c 00 73 00 22 00 29 00 20 00 72 00 ".%.l.s.".). .r.
65 00 74 00 75 00 72 00 6e 00 65 00 64 00 20 00 e.t.u.r.n.e.d. .
65 00 72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 e.r.r.o.r. .%.l.
75 00 0a 00 00 00 00 00 43 00 6c 00 6f 00 73 00 u.......C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 e.H.a.n.d.l.e...
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
0a 00 00 00 4c 00 6f 00 63 00 61 00 6c 00 46 00 ....L.o.c.a.l.F.
72 00 65 00 65 00 00 00 4e 00 6f 00 20 00 77 00 r.e.e...N.o. .w.
69 00 6c 00 64 00 63 00 61 00 72 00 64 00 20 00 i.l.d.c.a.r.d. .
6d 00 61 00 74 00 63 00 68 00 20 00 66 00 6f 00 m.a.t.c.h. .f.o.
72 00 20 00 61 00 72 00 67 00 75 00 6d 00 65 00 r. .a.r.g.u.m.e.
6e 00 74 00 20 00 27 00 25 00 6c 00 73 00 27 00 n.t. .'.%.l.s.'.
21 00 0a 00 00 00 00 00 25 00 6c 00 73 00 28 00 !.......%.l.s.(.
29 00 20 00 72 00 65 00 74 00 75 00 72 00 6e 00 ). .r.e.t.u.r.n.
65 00 64 00 20 00 65 00 72 00 72 00 6f 00 72 00 e.d. .e.r.r.o.r.
20 00 25 00 6c 00 75 00 20 00 66 00 6f 00 72 00 .%.l.u. .f.o.r.
20 00 61 00 72 00 67 00 75 00 6d 00 65 00 6e 00 .a.r.g.u.m.e.n.
74 00 20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 t. .'.%.l.s.'...
00 00 00 00 00 00 00 00 41 00 72 00 67 00 75 00 ........A.r.g.u.
6d 00 65 00 6e 00 74 00 20 00 27 00 25 00 6c 00 m.e.n.t. .'.%.l.
73 00 27 00 20 00 65 00 78 00 63 00 65 00 65 00 s.'. .e.x.c.e.e.
64 00 73 00 20 00 4d 00 41 00 58 00 5f 00 50 00 d.s. .M.A.X._.P.
41 00 54 00 48 00 21 00 0a 00 00 00 00 00 00 00 A.T.H.!.........
4e 00 6f 00 20 00 61 00 72 00 67 00 75 00 6d 00 N.o. .a.r.g.u.m.
65 00 6e 00 74 00 73 00 3a 00 20 00 61 00 74 00 e.n.t.s.:. .a.t.
20 00 6c 00 65 00 61 00 73 00 74 00 20 00 6f 00 .l.e.a.s.t. .o.
6e 00 65 00 20 00 28 00 77 00 69 00 6c 00 64 00 n.e. .(.w.i.l.d.
63 00 61 00 72 00 64 00 29 00 20 00 64 00 69 00 c.a.r.d.). .d.i.
72 00 65 00 63 00 74 00 6f 00 72 00 79 00 20 00 r.e.c.t.o.r.y. .
6f 00 72 00 20 00 66 00 69 00 6c 00 65 00 20 00 o.r. .f.i.l.e. .
6e 00 61 00 6d 00 65 00 20 00 6d 00 75 00 73 00 n.a.m.e. .m.u.s.
74 00 20 00 62 00 65 00 20 00 67 00 69 00 76 00 t. .b.e. .g.i.v.
65 00 6e 00 21 00 0a 00 00 00 00 00 43 00 6f 00 e.n.!.......C.o.
6d 00 6d 00 61 00 6e 00 64 00 4c 00 69 00 6e 00 m.m.a.n.d.L.i.n.
65 00 54 00 6f 00 41 00 72 00 67 00 76 00 00 00 e.T.o.A.r.g.v...
b9 79 37 9e 00 00 00 00 5c 00 00 00 45 54 41 44 .y7.....\...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 60 23 01 00 00 00 00 00 00 00 00 00 ....`#..........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 24 00 00 00 00 00 00 00 00 00 00 .....$..........
12 25 00 00 00 20 00 00 3c 24 00 00 00 00 00 00 .%... ..<$......
00 00 00 00 2e 25 00 00 3c 20 00 00 00 00 00 00 .....%..< ......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
44 24 00 00 54 24 00 00 60 24 00 00 70 24 00 00 D$..T$..`$..p$..
7c 24 00 00 88 24 00 00 98 24 00 00 aa 24 00 00 |$...$...$...$..
b8 24 00 00 c6 24 00 00 d2 24 00 00 e4 24 00 00 .$...$...$...$..
f4 24 00 00 04 25 00 00 00 00 00 00 20 25 00 00 .$...%...... %..
00 00 00 00 24 05 57 72 69 74 65 43 6f 6e 73 6f ....$.WriteConso
6c 65 57 00 2e 01 46 69 6e 64 43 6c 6f 73 65 00 leW...FindClose.
45 01 46 69 6e 64 4e 65 78 74 46 69 6c 65 57 00 E.FindNextFileW.
63 03 4d 6f 76 65 46 69 6c 65 57 00 45 05 6c 73 c.MoveFileW.E.ls
74 72 63 6d 70 69 57 00 02 02 47 65 74 4c 61 73 trcmpiW...GetLas
74 45 72 72 6f 72 00 00 39 01 46 69 6e 64 46 69 tError..9.FindFi
72 73 74 46 69 6c 65 57 00 00 19 01 45 78 69 74 rstFileW....Exit
50 72 6f 63 65 73 73 00 52 00 43 6c 6f 73 65 48 Process.R.CloseH
61 6e 64 6c 65 00 48 03 4c 6f 63 61 6c 46 72 65 andle.H.LocalFre
65 00 87 01 47 65 74 43 6f 6d 6d 61 6e 64 4c 69 e...GetCommandLi
6e 65 57 00 64 02 47 65 74 53 74 64 48 61 6e 64 neW.d.GetStdHand
6c 65 00 00 73 04 53 65 74 4c 61 73 74 45 72 72 le..s.SetLastErr
6f 72 00 00 44 03 4c 6f 63 61 6c 41 6c 6c 6f 63 or..D.LocalAlloc
00 00 4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 ..KERNEL32.dll..
35 03 77 76 73 70 72 69 6e 74 66 57 00 00 55 53 5.wvsprintfW..US
45 52 33 32 2e 64 6c 6c 00 00 00 00 00 00 00 00 ER32.dll........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file UPPERCUT.TXT
created in
step 3. to recreate the console application
8.3 File and Directory Name Changer:
CERTUTIL.EXE /DecodeHex /V UPPERCUT.TXT UPPERCUT.COM
Input Length = 17408 Output Length = 4096 CertUtil: -decodehex command completed successfully.
portable executableimage files, i.e. applications and DLLs. What is a DLL?
A VERSIONINFO resource contains a series of double-word aligned chunks, each identified by a key string, starting with a root chunk for the fix(-siz)ed binary file information, optionally followed by (empty) branch plus (non-empty) leaf chunks for variable-sized binary or textual file information.
VERSION.COM ‹module file name› …Note: the image files are located via DLL search order!
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and VERSION.COM, a
smallform without these extras.
Note: due to the design and implementation of
Windows’ (classic alias legacy) console, the
Win32 function
WriteConsole()
can only write to a console, not to a file nor a pipe, i.e.
redirection of standard error
or standard output
is
not supported!
The MSDN article Console Handles provides background information.
canonicalvariant uses the Win32 functions
GetFileVersionInfoSize()
,
GetFileVersionInfoSizeEx()
,
GetFileVersionInfo()
,
GetFileVersionInfoEx()
and
VerQueryValue()
provided by
Version.dll
,
which have but several drawbacks: each call of one of the
GetFileVersionInfo*()
functions loads (and unloads) the
portable executablemodule in question, and each call of the
VerQueryValue()
function parses the
VERSIONINFO
resource anew.
Additionally the paths of the information to query have to be known, i.e. enumeration of arbitrary or custom version information is generally not possible or fails completely!
customvariant uses the Win32 functions
LoadLibraryEx()
and
FreeLibrary()
to load (and finally unload) the portable executablemodule just once, the Win32 functions
FindResourceEx()
,
LoadResource()
and
LockResource()
to locate the
VS_VERSIONINFO
structure and obtain its memory address, plus the custom(recursive) function
Version()
to enumerate all parts
of (arbitrary)
VERSIONINFO
resources.
Create the text file VERSION.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#define memcpy __movsb
#define wmemcpy __movsw
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
const LPCWSTR szDayOfWeek[7] = {L"Sunday",
L"Monday",
L"Tuesday",
L"Wednesday",
L"Thursday",
L"Friday",
L"Saturday"};
const LPCWSTR szFileOSHigh[] = {L"Unknown", // VOS_UNKNOWN
L"MS-DOS", // VOS_DOS
L"OS/2 (16-bit)", // VOS_OS216
L"OS/2 (32-bit)", // VOS_OS232
L"Windows NT", // VOS_NT
L"Windows CE"}; // VOS_WINCE
const LPCWSTR szFileOSLow[] = {L"Base", // VOS__BASE
L"Windows (16-bit)", // VOS__WINDOWS16
L"Presentation Manager (16-bit)", // VOS__PM16
L"Presentation Manager (32-bit)", // VOS__PM32
L"Windows (32-bit)"}; // VOS__WINDOWS32
const LPCWSTR szFileType[] = {L"Unknown", // VFT_UNKNOWN
L"Application", // VFT_APP
L"DLL", // VFT_DLL
L"Driver", // VFT_DRV
L"Font", // VFT_FONT
L"Virtual Device", // VFT_VXD
L"Undefined",
L"Static Library"}; // VFT_STATIC_LIB
const LPCWSTR szFileDriverType[] = {L"Unknown", // VFT2_UNKNOWN
L"Printer", // VFT2_DRV_PRINTER
L"Keyboard", // VFT2_DRV_KEYBOARD
L"Language", // VFT2_DRV_LANGUAGE
L"Display", // VFT2_DRV_DISPLAY
L"Mouse", // VFT2_DRV_MOUSE
L"Network", // VFT2_DRV_NETWORK
L"System", // VFT2_DRV_SYSTEM
L"Installable", // VFT2_DRV_INSTALLABLE
L"Sound", // VFT2_DRV_SOUND
L"Communications", // VFT2_DRV_COMM
L"Input Method", // VFT2_DRV_INPUTMETHOD
L"Versioned Printer"}; // VFT2_DRV_VERSIONED_PRINTER
const LPCWSTR szFileFontType[] = {L"Unknown", // VFT2_UNKNOWN
L"Raster", // VFT2_FONT_RASTER
L"Vector", // VFT2_FONT_VECTOR
L"TrueType"}; // VFT2_FONT_TRUETYPE
const LPCWSTR szStandard[] = {L"Comments",
L"CompanyName",
L"FileDescription",
L"FileVersion",
L"InternalName",
L"LegalCopyright",
L"LegalTrademarks",
L"OleSelfRegister",
L"OriginalFilename",
L"PrivateBuild",
L"ProductName",
L"ProductVersion",
L"SpecialBuild"};
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
VS_FIXEDFILEINFO *lpFFI;
SYSTEMTIME st;
FILETIME ft;
LPWSTR *lpArguments;
INT nArguments;
INT nArgument = 1;
DWORD dwError = ERROR_BAD_ARGUMENTS;
DWORD dwHandle;
DWORD dwVersion;
LPBYTE lpVersion;
WCHAR szFileFlags[sizeof(", Debug, Inferred, Patched, Pre-Release, Private Build, Special Build")];
LPWSTR lpFileFlags;
LPCWSTR lpFileOSLow, lpFileOSHigh;
LPCWSTR lpFileType, lpFileSubtype;
UINT uiFFI, uiSFI, uiVFI;
DWORD *lpVFI;
WCHAR szSFI[sizeof("\\StringFileInfo\\00000000\\OriginalFilename")];
LPWSTR lpSFI;
WCHAR szLanguage[256];
DWORD dwLanguage;
DWORD dwStandard;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 2)
PrintConsole(hConsole,
L"No arguments: at least one (absolute or relative) path name of a binary module\n"
L" (eventually located per DLL search order) must be given!\n");
else
do
{
#ifdef NEUTRAL
dwVersion = GetFileVersionInfoSizeEx(FILE_VER_GET_NEUTRAL,
lpArguments[nArgument],
&dwHandle);
if (dwVersion == 0)
PrintConsole(hConsole,
L"GetFileVersionInfoSizeEx() returned error %lu for file \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
#else
dwVersion = GetFileVersionInfoSize(lpArguments[nArgument],
&dwHandle);
if (dwVersion == 0)
PrintConsole(hConsole,
L"GetFileVersionInfoSize() returned error %lu for file \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
#endif
else
{
lpVersion = LocalAlloc(LPTR, dwVersion);
if (lpVersion == NULL)
PrintConsole(hConsole,
L"LocalAlloc() returned error %lu\n",
dwError = GetLastError());
else
{
#ifdef NEUTRAL
if (!GetFileVersionInfoEx(FILE_VER_GET_NEUTRAL,
lpArguments[nArgument],
dwHandle,
dwVersion,
lpVersion))
PrintConsole(hConsole,
L"GetFileVersionInfoSizeEx() returned error %lu for file \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
#else
if (!GetFileVersionInfo(lpArguments[nArgument],
dwHandle,
dwVersion,
lpVersion))
PrintConsole(hConsole,
L"GetFileVersionInfoSize() returned error %lu for file \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
#endif
else
{
if (!VerQueryValue(lpVersion,
L"\\",
&lpFFI,
&uiFFI))
PrintConsole(hConsole,
L"VerQueryValue() returned error %lu\n",
dwError = GetLastError());
else
{
if ((lpFFI->dwFileFlags & lpFFI->dwFileFlagsMask) == 0)
#ifdef _CRT_SECURE_NO_WARNINGS
wcscpy(szFileFlags, L", None");
#elif 0
wmemcpy(szFileFlags, L", None", sizeof(", None"));
#else
memcpy(szFileFlags, L", None", sizeof(L", None"));
#endif
else
{
#ifdef _CRT_SECURE_NO_WARNINGS
*szFileFlags = L'\0';
if ((lpFFI->dwFileFlags & VS_FF_DEBUG) == VS_FF_DEBUG)
wcscat(szFileFlags, L", Debug");
if ((lpFFI->dwFileFlags & VS_FF_INFOINFERRED) == VS_FF_INFOINFERRED)
wcscat(szFileFlags, L", Inferred");
if ((lpFFI->dwFileFlags & VS_FF_PATCHED) == VS_FF_PATCHED)
wcscat(szFileFlags, L", Patched");
if ((lpFFI->dwFileFlags & VS_FF_PRERELEASE) == VS_FF_PRERELEASE)
wcscat(szFileFlags, L", Pre-Release");
if ((lpFFI->dwFileFlags & VS_FF_PRIVATEBUILD) == VS_FF_PRIVATEBUILD)
wcscat(szFileFlags, L", Private Build");
if ((lpFFI->dwFileFlags & VS_FF_SPECIALBUILD) == VS_FF_SPECIALBUILD)
wcscat(szFileFlags, L", Special Build");
#else // _CRT_SECURE_NO_WARNINGS
lpFileFlags = szFileFlags;
if ((lpFFI->dwFileFlags & VS_FF_DEBUG) == VS_FF_DEBUG)
{
memcpy(lpFileFlags, L", Debug", sizeof(L", Debug"));
lpFileFlags += sizeof(" Debug");
}
if ((lpFFI->dwFileFlags & VS_FF_INFOINFERRED) == VS_FF_INFOINFERRED)
{
memcpy(lpFileFlags, L", Inferred", sizeof(L", Inferred"));
lpFileFlags += sizeof(" Inferred");
}
if ((lpFFI->dwFileFlags & VS_FF_PATCHED) == VS_FF_PATCHED)
{
memcpy(lpFileFlags, L", Patched", sizeof(L", Patched"));
lpFileFlags += sizeof(" Patched");
}
if ((lpFFI->dwFileFlags & VS_FF_PRERELEASE) == VS_FF_PRERELEASE)
{
memcpy(lpFileFlags, L", Pre-Release", sizeof(L", Pre-Release"));
lpFileFlags += sizeof(" Pre-Release");
}
if ((lpFFI->dwFileFlags & VS_FF_PRIVATEBUILD) == VS_FF_PRIVATEBUILD)
{
memcpy(lpFileFlags, L", Private Build", sizeof(L", Private Build"));
lpFileFlags += sizeof(" Private Build");
}
if ((lpFFI->dwFileFlags & VS_FF_SPECIALBUILD) == VS_FF_SPECIALBUILD)
{
memcpy(lpFileFlags, L", Special Build", sizeof(L", Special Build"));
lpFileFlags += sizeof(" Special Build");
}
#endif // _CRT_SECURE_NO_WARNINGS
}
if (lpFFI->dwFileType < sizeof(szFileType) / sizeof(*szFileType))
lpFileType = szFileType[lpFFI->dwFileType];
else
lpFileType = L"Undefined";
if ((lpFFI->dwFileType == VFT_DRV)
&& (lpFFI->dwFileSubtype < sizeof(szFileDriverType) / sizeof(*szFileDriverType)))
lpFileSubtype = szFileDriverType[lpFFI->dwFileSubtype];
else if ((lpFFI->dwFileType == VFT_FONT)
&& (lpFFI->dwFileSubtype < sizeof(szFileFontType) / sizeof(*szFileFontType)))
lpFileSubtype = szFileFontType[lpFFI->dwFileSubtype];
else
lpFileSubtype = L"Undefined";
if (HIWORD(lpFFI->dwFileOS) < sizeof(szFileOSHigh) / sizeof(*szFileOSHigh))
lpFileOSHigh = szFileOSHigh[HIWORD(lpFFI->dwFileOS)];
else
lpFileOSHigh = L"Undefined";
if (LOWORD(lpFFI->dwFileOS) < sizeof(szFileOSLow) / sizeof(*szFileOSLow))
lpFileOSLow = szFileOSLow[LOWORD(lpFFI->dwFileOS)];
else
lpFileOSLow = L"Undefined";
PrintConsole(hConsole,
L"\n"
L"Product Version:\t%hu.%hu:%hu.%hu\n"
L"Module Version:\t\t%hu.%hu:%hu.%hu\n"
L"Module Flags:\t\t%ls\n"
L"Module Type:\t\t%ls\n"
L"Module Subtype:\t\t%ls\n",
HIWORD(lpFFI->dwProductVersionMS), LOWORD(lpFFI->dwProductVersionMS),
HIWORD(lpFFI->dwProductVersionLS), LOWORD(lpFFI->dwProductVersionLS),
HIWORD(lpFFI->dwFileVersionMS), LOWORD(lpFFI->dwFileVersionMS),
HIWORD(lpFFI->dwFileVersionLS), LOWORD(lpFFI->dwFileVersionLS),
szFileFlags + 2,
lpFileType,
lpFileSubtype);
if ((lpFFI->dwFileDateMS == 0)
&& (lpFFI->dwFileDateLS == 0))
PrintConsole(hConsole,
L"Module Date/Time Stamp:\tNone\n");
else
{
ft.dwHighDateTime = lpFFI->dwFileDateMS;
ft.dwLowDateTime = lpFFI->dwFileDateLS;
if (!FileTimeToSystemTime(&ft, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"Module Date/Time Stamp:\t%ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu.%03hu UTC\n",
szDayOfWeek[st.wDayOfWeek],
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
}
PrintConsole(hConsole,
L"Target OS:\t\t%ls, %ls\n",
lpFileOSHigh, lpFileOSLow);
}
if (!VerQueryValue(lpVersion,
L"\\VarFileInfo\\Translation",
&lpVFI,
&uiVFI))
PrintConsole(hConsole,
L"VerQueryValue() returned error %lu\n",
dwError = GetLastError());
else
for (dwLanguage = 0; dwLanguage < uiVFI / sizeof(*lpVFI); dwLanguage++)
{
if (VerLanguageName(LOWORD(lpVFI[dwLanguage]),
szLanguage,
sizeof(szLanguage) / sizeof(*szLanguage)) == 0)
PrintConsole(hConsole,
L"\n"
L"Language:\t0x%04hX\n"
L"Codepage:\t0x%04hX = %hu\n",
LOWORD(lpVFI[dwLanguage]),
HIWORD(lpVFI[dwLanguage]), HIWORD(lpVFI[dwLanguage]));
else
PrintConsole(hConsole,
L"\n"
L"Language:\t0x%04hX = %ls\n"
L"Codepage:\t0x%04hX = %hu\n",
LOWORD(lpVFI[dwLanguage]), szLanguage,
HIWORD(lpVFI[dwLanguage]), HIWORD(lpVFI[dwLanguage]));
for (dwStandard = 0; dwStandard < sizeof(szStandard) / sizeof(*szStandard); dwStandard++)
{
uiSFI = wsprintf(szSFI,
L"\\StringFileInfo\\%04hX%04hX\\%ls",
LOWORD(lpVFI[dwLanguage]), HIWORD(lpVFI[dwLanguage]), szStandard[dwStandard]);
#if 0
if (uiSFI != wcslen(L"\\StringFileInfo\\00000000\\") + wcslen(szStandard[dwStandard]))
#else
if (uiSFI != sizeof("\\StringFileInfo\\00000000\\") - 1 + wcslen(szStandard[dwStandard]))
#endif
PrintConsole(hConsole,
L"wsprintf() returned error %lu\n",
dwError = GetLastError());
else
if (VerQueryValue(lpVersion,
szSFI,
&lpSFI,
&uiSFI))
PrintConsole(hConsole,
wcslen(szStandard[dwStandard]) < 15 ? L"\t%ls:\t\t%ls\n" : L"\t%ls:\t%ls\n",
szStandard[dwStandard], lpSFI);
else
{
dwError = GetLastError();
if (dwError == ERROR_RESOURCE_TYPE_NOT_FOUND)
continue;
PrintConsole(hConsole,
L"VerQueryValue() returned error %lu\n",
dwError);
}
}
}
}
if (LocalFree(lpVersion) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
}
} while (++nArgument < nArguments);
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
VERSION.C
created in step 1., link the compiled
object file VERSION.OBJ
and cleanup afterwards:
SET CL=/DNEUTRAL /GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:6.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeVERSION.COM VERSION.C KERNEL32.LIB SHELL32.LIB USER32.LIB VERSION.LIB ERASE VERSION.OBJFor 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. VERSION.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file VERSION.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 08 00 00 ......#.........
00 10 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
06 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 e4 d7 00 00 03 00 00 85 .0..............
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
40 2d 00 00 50 00 00 00 00 00 00 00 00 00 00 00 @-..P...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 d8 2c 00 00 40 00 00 00 .........,..@...
00 00 00 00 00 00 00 00 00 20 00 00 4c 00 00 00 ......... ..L...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
3c 07 00 00 00 10 00 00 00 08 00 00 00 02 00 00 <...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 16 0f 00 00 00 20 00 00 .const....... ..
00 10 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 f7 ff ff 50 ff 15 34 20 40 00 8b f0 .......P..4 @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 f7 ff ff 50 ff 75 08 ff 15 00 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8d .t.3.9u....^..U.
6c 24 88 81 ec 38 03 00 00 53 56 57 6a f4 c7 45 l$...8...SVWj..E
60 01 00 00 00 c7 45 70 a0 00 00 00 ff 15 24 20 `.....Ep......$
40 00 8b f0 89 75 74 83 fe ff 75 0e ff 15 20 20 @....ut...u...
40 00 89 45 70 e9 10 05 00 00 8d 45 54 50 ff 15 @..Ep......ETP..
1c 20 40 00 50 e8 0a 05 00 00 8b 1d 20 20 40 00 . @.P....... @.
89 45 50 85 c0 75 10 ff d3 50 89 45 70 68 a8 2c .EP..u...P.Eph.,
40 00 e9 b4 04 00 00 83 7d 54 02 73 12 68 78 2b @.......}T.s.hx+
40 00 56 e8 38 ff ff ff 59 59 e9 87 04 00 00 8b @.V.8...YY......
45 50 8b 4d 60 8d 34 88 8d 45 2c 50 ff 36 6a 02 EP.M`.4..E,P.6j.
ff 15 40 20 40 00 8b f8 85 ff 75 22 ff d3 ff 36 ..@ @.....u"...6
89 45 70 50 68 44 2b 40 00 68 f0 2a 40 00 ff 75 .EpPhD+@.h.*@..u
74 e8 fa fe ff ff 83 c4 14 e9 36 04 00 00 57 6a t.........6...Wj
40 ff 15 18 20 40 00 89 45 5c 85 c0 75 10 ff d3 @... @..E\..u...
50 89 45 70 68 d8 2a 40 00 e9 06 04 00 00 50 57 P.Eph.*@......PW
ff 75 2c ff 36 6a 02 ff 15 3c 20 40 00 85 c0 75 .u,.6j...< @...u
22 ff d3 ff 36 89 45 70 50 68 44 2b 40 00 68 f0 "...6.EpPhD+@.h.
2a 40 00 ff 75 74 e8 a5 fe ff ff 83 c4 14 e9 bc *@..ut..........
03 00 00 8d 45 20 50 8d 45 4c 50 68 d4 2a 40 00 ....E P.ELPh.*@.
ff 75 5c ff 15 44 20 40 00 85 c0 75 1e ff d3 50 .u\..D @...u...P
68 b8 2a 40 00 bf 84 2a 40 00 57 ff 75 74 89 45 h.*@...*@.W.ut.E
70 e8 6a fe ff ff e9 ef 01 00 00 8b 45 4c 8b 48 p.j.........EL.H
1c 85 48 18 75 0c 8d 7d 94 be 74 2a 40 00 6a 0e ..H.u..}..t*@.j.
eb 7a 8d 55 94 f6 c1 01 74 0f 6a 10 8b fa be 64 .z.U....t.j....d
2a 40 00 59 f3 a4 8d 55 a2 f6 40 1c 10 74 0f 6a *@.Y...U..@..t.j
16 8b fa be 4c 2a 40 00 59 f3 a4 83 c2 14 f6 40 ....L*@.Y......@
1c 04 74 0f 6a 14 8b fa be 38 2a 40 00 59 f3 a4 ..t.j....8*@.Y..
83 c2 12 f6 40 1c 02 74 0f 6a 1c 8b fa be 1c 2a ....@..t.j.....*
40 00 59 f3 a4 83 c2 1a f6 40 1c 08 74 0f 6a 20 @.Y......@..t.j
8b fa be fc 29 40 00 59 f3 a4 83 c2 1e f6 40 1c ....)@.Y......@.
20 74 0c 8b fa be dc 29 40 00 6a 20 59 f3 a4 8b t.....)@.j Y...
48 24 be 38 24 40 00 83 f9 08 73 0c 8b 14 8d 70 H$.8$@....s....p
25 40 00 89 55 68 eb 03 89 75 68 83 f9 03 75 11 %@..Uh...uh...u.
8b 50 28 83 fa 0d 73 09 8b 14 95 90 25 40 00 eb .P(...s.....%@..
18 83 f9 04 75 11 8b 48 28 83 f9 04 73 09 8b 14 ....u..H(...s...
8d c4 25 40 00 eb 02 8b d6 0f b7 48 22 83 f9 07 ..%@.......H"...
73 0c 8b 0c 8d 3c 25 40 00 89 4d 6c eb 03 89 75 s....<%@..Ml...u
6c 0f b7 48 20 83 f9 06 73 09 8b 3c 8d 58 25 40 l..H ...s..<.X%@
00 eb 02 8b fe 52 ff 75 68 8d 4d 98 51 0f b7 48 .....R.uh.M.Q..H
0c 51 0f b7 48 0e 51 0f b7 48 08 51 0f b7 48 0a .Q..H.Q..H.Q..H.
8b 75 74 51 0f b7 48 14 51 0f b7 48 16 51 0f b7 .utQ..H.Q..H.Q..
48 10 0f b7 40 12 51 50 68 e0 28 40 00 56 e8 1d H...@.QPh.(@.V..
fd ff ff 8b 45 4c 8b 48 2c 83 c4 34 85 c9 75 14 ....EL.H,..4..u.
39 48 30 75 0f 68 a4 28 40 00 56 e8 00 fd ff ff 9H0u.h.(@.V.....
59 59 eb 72 89 4d 28 8b 40 30 89 45 24 8d 45 34 YY.r.M(.@0.E$.E4
50 8d 45 24 50 ff 15 14 20 40 00 85 c0 75 1b ff P.E$P... @...u..
d3 50 68 78 28 40 00 68 84 2a 40 00 56 89 45 70 .Phx(@.h.*@.V.Ep
e8 cb fc ff ff 83 c4 10 eb 3c 0f b7 45 42 50 0f .........<..EBP.
b7 45 40 50 0f b7 45 3e 50 0f b7 45 3c 50 0f b7 .E@P..E>P..E<P..
45 3a 50 0f b7 45 36 50 0f b7 45 34 50 0f b7 45 E:P..E6P..E4P..E
38 ff 34 85 20 25 40 00 68 d8 27 40 00 56 e8 8d 8.4. %@.h.'@.V..
fc ff ff 83 c4 28 57 ff 75 6c 68 ac 27 40 00 56 .....(W.ulh.'@.V
e8 7b fc ff ff bf 84 2a 40 00 83 c4 10 8d 45 48 .{.....*@.....EH
50 8d 45 64 50 68 78 27 40 00 ff 75 5c ff 15 44 P.EdPhx'@..u\..D
20 40 00 85 c0 75 1c ff d3 50 68 b8 2a 40 00 57 @...u...Ph.*@.W
ff 75 74 89 45 70 e8 45 fc ff ff 83 c4 10 e9 5c .ut.Ep.E.......\
01 00 00 83 65 68 00 f7 45 48 fc ff ff ff 0f 86 ....eh..EH......
4b 01 00 00 8b 75 68 68 00 01 00 00 8d 85 40 fd K....uhh......@.
ff ff 50 8b 45 64 0f b7 04 b0 50 ff 15 10 20 40 ..P.Ed....P... @
00 85 c0 8b 45 64 0f b7 4c b0 02 0f b7 04 b0 51 ....Ed..L......Q
51 75 13 50 68 20 27 40 00 ff 75 74 e8 ef fb ff Qu.Ph '@..ut....
ff 83 c4 14 eb 18 8d 8d 40 fd ff ff 51 50 68 b8 ........@...QPh.
26 40 00 ff 75 74 e8 d5 fb ff ff 83 c4 18 83 65 &@..ut.........e
6c 00 8b 45 6c 8b 88 d4 25 40 00 8b c1 8d 50 02 l..El...%@....P.
89 55 58 66 8b 10 83 c0 02 66 85 d2 75 f5 2b 45 .UXf.....f..u.+E
58 51 d1 f8 83 c0 19 89 45 44 8b 45 64 0f b7 4c XQ......ED.Ed..L
b0 02 0f b7 04 b0 51 50 8d 85 40 ff ff ff 68 78 ......QP..@...hx
26 40 00 50 ff 15 30 20 40 00 83 c4 14 3b 45 44 &@.P..0 @....;ED
74 0d ff d3 50 89 45 70 68 64 26 40 00 eb 64 8d t...P.Ephd&@..d.
45 44 50 8d 45 30 50 8d 85 40 ff ff ff 50 ff 75 EDP.E0P..@...P.u
5c ff 15 44 20 40 00 85 c0 74 36 8b 45 6c 8b 80 \..D @...t6.El..
d4 25 40 00 89 45 58 8d 50 02 66 8b 08 83 c0 02 .%@..EX.P.f.....
66 85 c9 75 f5 2b c2 d1 f8 83 f8 0f b8 4c 26 40 f..u.+.......L&@
00 72 05 b8 34 26 40 00 ff 75 30 ff 75 58 50 eb .r..4&@..u0.uXP.
13 ff d3 89 45 70 3d 15 07 00 00 74 12 50 68 b8 ....Ep=....t.Ph.
2a 40 00 57 ff 75 74 e8 04 fb ff ff 83 c4 10 83 *@.W.ut.........
45 6c 04 83 7d 6c 34 0f 82 25 ff ff ff 8b 45 48 El..}l4..%....EH
ff 45 68 c1 e8 02 39 45 68 0f 82 b5 fe ff ff ff .Eh...9Eh.......
75 5c ff 15 0c 20 40 00 85 c0 74 18 ff d3 50 68 u\... @...t...Ph
20 26 40 00 68 84 2a 40 00 ff 75 74 e8 bf fa ff &@.h.*@..ut....
ff 83 c4 10 ff 45 60 8b 45 60 3b 45 54 0f 82 7c .....E`.E`;ET..|
fb ff ff 8b 75 74 ff 75 50 ff 15 0c 20 40 00 85 ....ut.uP... @..
c0 74 16 ff d3 50 68 20 26 40 00 68 84 2a 40 00 .t...Ph &@.h.*@.
56 e8 8a fa ff ff 83 c4 10 56 ff 15 08 20 40 00 V........V... @.
85 c0 75 16 ff d3 50 68 08 26 40 00 68 84 2a 40 ..u...Ph.&@.h.*@
00 56 e8 69 fa ff ff 83 c4 10 ff 75 70 ff 15 04 .V.i.......up...
20 40 00 cc 55 8b ec 51 8b 45 08 53 56 33 f6 57 @..U..Q.E.SV3.W
8b f8 89 75 08 89 75 fc 39 75 0c 0f 84 6a 01 00 ...u..u.9u...j..
00 3b c6 0f 84 62 01 00 00 0f b7 08 66 3b ce 0f .;...b......f;..
84 56 01 00 00 83 f9 20 74 0a 83 f9 09 74 05 33 .V..... t....t.3
db 43 eb 02 33 db 39 75 08 75 2b 66 83 f9 20 74 .C..3.9u.u+f.. t
06 66 83 f9 09 75 1f 89 75 fc 83 c0 02 0f b7 08 .f...u..u.......
83 f9 20 74 f5 83 f9 09 74 f0 33 c9 66 39 30 0f .. t....t.3.f90.
95 c1 03 d9 eb 23 66 83 f9 5c 75 06 83 75 fc 01 .....#f..\u..u..
eb 14 39 75 fc 75 0c 66 83 f9 22 75 06 83 75 08 ..9u.u.f.."u..u.
01 eb 03 89 75 fc 83 c0 02 0f b7 08 66 3b ce 75 ....u.......f;.u
a5 2b c7 83 c0 02 d1 f8 8d 44 58 02 03 c0 50 6a .+.......DX...Pj
40 ff 15 18 20 40 00 8b f0 33 d2 3b f2 0f 84 d0 @... @...3.;....
00 00 00 8d 44 9e 04 33 db 89 06 89 55 08 89 5d ....D..3....U..]
fc 83 7d 08 00 75 34 0f b7 0f 83 f9 20 74 05 83 ..}..u4..... t..
f9 09 75 27 33 d2 33 c9 66 89 08 83 c7 02 0f b7 ..u'3.3.f.......
0f 83 f9 20 74 f5 83 f9 09 74 f0 66 39 17 74 71 ... t....t.f9.tq
43 8b c7 89 5d fc 89 3c 9e eb 5c 0f b7 0f 83 f9 C...]..<..\.....
5c 75 03 42 eb 48 83 f9 22 75 41 6a 02 8d 5a 01 \u.B.H.."uAj..Z.
d1 eb 59 f7 db 03 f9 8d 04 58 f6 c2 01 74 0a 6a ..Y......X...t.j
22 5a 66 89 10 03 c1 eb 1c 83 7d 08 00 74 12 66 "Zf.......}..t.f
83 3f 22 75 0c 6a 22 5a 66 89 10 03 c1 03 f9 eb .?"u.j"Zf.......
04 83 75 08 01 8b 5d fc 33 d2 eb 0b 33 d2 66 89 ..u...].3...3.f.
08 83 c0 02 83 c7 02 66 83 3f 00 0f 85 60 ff ff .......f.?...`..
ff 33 c9 43 66 89 08 21 0c 9e 8b 45 0c 89 18 39 .3.Cf..!...E...9
4d 08 74 0f 68 a0 00 00 00 eb 02 6a 57 ff 15 28 M.t.h......jW..(
20 40 00 5f 8b c6 5e 5b c9 c2 08 00 00 00 00 00 @._..^[........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
dc 2d 00 00 ec 2d 00 00 fa 2d 00 00 08 2e 00 00 .-...-...-......
14 2e 00 00 28 2e 00 00 40 2e 00 00 4e 2e 00 00 ....(...@...N...
60 2e 00 00 70 2e 00 00 80 2e 00 00 00 00 00 00 `...p...........
ac 2e 00 00 9e 2e 00 00 00 00 00 00 d6 2e 00 00 ................
ee 2e 00 00 c4 2e 00 00 00 00 00 00 00 00 00 00 ................
53 00 70 00 65 00 63 00 69 00 61 00 6c 00 42 00 S.p.e.c.i.a.l.B.
75 00 69 00 6c 00 64 00 00 00 00 00 50 00 72 00 u.i.l.d.....P.r.
6f 00 64 00 75 00 63 00 74 00 56 00 65 00 72 00 o.d.u.c.t.V.e.r.
73 00 69 00 6f 00 6e 00 00 00 00 00 50 00 72 00 s.i.o.n.....P.r.
6f 00 64 00 75 00 63 00 74 00 4e 00 61 00 6d 00 o.d.u.c.t.N.a.m.
65 00 00 00 50 00 72 00 69 00 76 00 61 00 74 00 e...P.r.i.v.a.t.
65 00 42 00 75 00 69 00 6c 00 64 00 00 00 00 00 e.B.u.i.l.d.....
4f 00 72 00 69 00 67 00 69 00 6e 00 61 00 6c 00 O.r.i.g.i.n.a.l.
46 00 69 00 6c 00 65 00 6e 00 61 00 6d 00 65 00 F.i.l.e.n.a.m.e.
00 00 00 00 4f 00 6c 00 65 00 53 00 65 00 6c 00 ....O.l.e.S.e.l.
66 00 52 00 65 00 67 00 69 00 73 00 74 00 65 00 f.R.e.g.i.s.t.e.
72 00 00 00 4c 00 65 00 67 00 61 00 6c 00 54 00 r...L.e.g.a.l.T.
72 00 61 00 64 00 65 00 6d 00 61 00 72 00 6b 00 r.a.d.e.m.a.r.k.
73 00 00 00 4c 00 65 00 67 00 61 00 6c 00 43 00 s...L.e.g.a.l.C.
6f 00 70 00 79 00 72 00 69 00 67 00 68 00 74 00 o.p.y.r.i.g.h.t.
00 00 00 00 49 00 6e 00 74 00 65 00 72 00 6e 00 ....I.n.t.e.r.n.
61 00 6c 00 4e 00 61 00 6d 00 65 00 00 00 00 00 a.l.N.a.m.e.....
46 00 69 00 6c 00 65 00 56 00 65 00 72 00 73 00 F.i.l.e.V.e.r.s.
69 00 6f 00 6e 00 00 00 46 00 69 00 6c 00 65 00 i.o.n...F.i.l.e.
44 00 65 00 73 00 63 00 72 00 69 00 70 00 74 00 D.e.s.c.r.i.p.t.
69 00 6f 00 6e 00 00 00 43 00 6f 00 6d 00 70 00 i.o.n...C.o.m.p.
61 00 6e 00 79 00 4e 00 61 00 6d 00 65 00 00 00 a.n.y.N.a.m.e...
43 00 6f 00 6d 00 6d 00 65 00 6e 00 74 00 73 00 C.o.m.m.e.n.t.s.
00 00 00 00 54 00 72 00 75 00 65 00 54 00 79 00 ....T.r.u.e.T.y.
70 00 65 00 00 00 00 00 56 00 65 00 63 00 74 00 p.e.....V.e.c.t.
6f 00 72 00 00 00 00 00 52 00 61 00 73 00 74 00 o.r.....R.a.s.t.
65 00 72 00 00 00 00 00 56 00 65 00 72 00 73 00 e.r.....V.e.r.s.
69 00 6f 00 6e 00 65 00 64 00 20 00 50 00 72 00 i.o.n.e.d. .P.r.
69 00 6e 00 74 00 65 00 72 00 00 00 49 00 6e 00 i.n.t.e.r...I.n.
70 00 75 00 74 00 20 00 4d 00 65 00 74 00 68 00 p.u.t. .M.e.t.h.
6f 00 64 00 00 00 00 00 43 00 6f 00 6d 00 6d 00 o.d.....C.o.m.m.
75 00 6e 00 69 00 63 00 61 00 74 00 69 00 6f 00 u.n.i.c.a.t.i.o.
6e 00 73 00 00 00 00 00 53 00 6f 00 75 00 6e 00 n.s.....S.o.u.n.
64 00 00 00 49 00 6e 00 73 00 74 00 61 00 6c 00 d...I.n.s.t.a.l.
6c 00 61 00 62 00 6c 00 65 00 00 00 53 00 79 00 l.a.b.l.e...S.y.
73 00 74 00 65 00 6d 00 00 00 00 00 4e 00 65 00 s.t.e.m.....N.e.
74 00 77 00 6f 00 72 00 6b 00 00 00 4d 00 6f 00 t.w.o.r.k...M.o.
75 00 73 00 65 00 00 00 44 00 69 00 73 00 70 00 u.s.e...D.i.s.p.
6c 00 61 00 79 00 00 00 4c 00 61 00 6e 00 67 00 l.a.y...L.a.n.g.
75 00 61 00 67 00 65 00 00 00 00 00 4b 00 65 00 u.a.g.e.....K.e.
79 00 62 00 6f 00 61 00 72 00 64 00 00 00 00 00 y.b.o.a.r.d.....
50 00 72 00 69 00 6e 00 74 00 65 00 72 00 00 00 P.r.i.n.t.e.r...
53 00 74 00 61 00 74 00 69 00 63 00 20 00 4c 00 S.t.a.t.i.c. .L.
69 00 62 00 72 00 61 00 72 00 79 00 00 00 00 00 i.b.r.a.r.y.....
56 00 69 00 72 00 74 00 75 00 61 00 6c 00 20 00 V.i.r.t.u.a.l. .
44 00 65 00 76 00 69 00 63 00 65 00 00 00 00 00 D.e.v.i.c.e.....
46 00 6f 00 6e 00 74 00 00 00 00 00 44 00 72 00 F.o.n.t.....D.r.
69 00 76 00 65 00 72 00 00 00 00 00 44 00 4c 00 i.v.e.r.....D.L.
4c 00 00 00 41 00 70 00 70 00 6c 00 69 00 63 00 L...A.p.p.l.i.c.
61 00 74 00 69 00 6f 00 6e 00 00 00 57 00 69 00 a.t.i.o.n...W.i.
6e 00 64 00 6f 00 77 00 73 00 20 00 28 00 33 00 n.d.o.w.s. .(.3.
32 00 2d 00 62 00 69 00 74 00 29 00 00 00 00 00 2.-.b.i.t.).....
50 00 72 00 65 00 73 00 65 00 6e 00 74 00 61 00 P.r.e.s.e.n.t.a.
74 00 69 00 6f 00 6e 00 20 00 4d 00 61 00 6e 00 t.i.o.n. .M.a.n.
61 00 67 00 65 00 72 00 20 00 28 00 33 00 32 00 a.g.e.r. .(.3.2.
2d 00 62 00 69 00 74 00 29 00 00 00 50 00 72 00 -.b.i.t.)...P.r.
65 00 73 00 65 00 6e 00 74 00 61 00 74 00 69 00 e.s.e.n.t.a.t.i.
6f 00 6e 00 20 00 4d 00 61 00 6e 00 61 00 67 00 o.n. .M.a.n.a.g.
65 00 72 00 20 00 28 00 31 00 36 00 2d 00 62 00 e.r. .(.1.6.-.b.
69 00 74 00 29 00 00 00 57 00 69 00 6e 00 64 00 i.t.)...W.i.n.d.
6f 00 77 00 73 00 20 00 28 00 31 00 36 00 2d 00 o.w.s. .(.1.6.-.
62 00 69 00 74 00 29 00 00 00 00 00 42 00 61 00 b.i.t.).....B.a.
73 00 65 00 00 00 00 00 55 00 6e 00 64 00 65 00 s.e.....U.n.d.e.
66 00 69 00 6e 00 65 00 64 00 00 00 57 00 69 00 f.i.n.e.d...W.i.
6e 00 64 00 6f 00 77 00 73 00 20 00 43 00 45 00 n.d.o.w.s. .C.E.
00 00 00 00 57 00 69 00 6e 00 64 00 6f 00 77 00 ....W.i.n.d.o.w.
73 00 20 00 4e 00 54 00 00 00 00 00 4f 00 53 00 s. .N.T.....O.S.
2f 00 32 00 20 00 28 00 33 00 32 00 2d 00 62 00 /.2. .(.3.2.-.b.
69 00 74 00 29 00 00 00 4f 00 53 00 2f 00 32 00 i.t.)...O.S./.2.
20 00 28 00 31 00 36 00 2d 00 62 00 69 00 74 00 .(.1.6.-.b.i.t.
29 00 00 00 4d 00 53 00 2d 00 44 00 4f 00 53 00 )...M.S.-.D.O.S.
00 00 00 00 55 00 6e 00 6b 00 6e 00 6f 00 77 00 ....U.n.k.n.o.w.
6e 00 00 00 53 00 61 00 74 00 75 00 72 00 00 00 n...S.a.t.u.r...
46 00 72 00 69 00 00 00 54 00 68 00 75 00 72 00 F.r.i...T.h.u.r.
73 00 00 00 57 00 65 00 64 00 6e 00 65 00 73 00 s...W.e.d.n.e.s.
00 00 00 00 54 00 75 00 65 00 73 00 00 00 00 00 ....T.u.e.s.....
4d 00 6f 00 6e 00 00 00 53 00 75 00 6e 00 00 00 M.o.n...S.u.n...
18 25 40 00 10 25 40 00 04 25 40 00 f4 24 40 00 .%@..%@..%@..$@.
e8 24 40 00 e0 24 40 00 d4 24 40 00 c4 24 40 00 .$@..$@..$@..$@.
b4 24 40 00 98 24 40 00 7c 24 40 00 64 24 40 00 .$@..$@.|$@.d$@.
4c 24 40 00 38 24 40 00 2c 24 40 00 08 24 40 00 L$@.8$@.,$@..$@.
cc 23 40 00 90 23 40 00 6c 23 40 00 38 24 40 00 .#@..#@.l#@.8$@.
c4 24 40 00 54 23 40 00 4c 23 40 00 3c 23 40 00 .$@.T#@.L#@.<#@.
30 23 40 00 10 23 40 00 38 24 40 00 f0 22 40 00 0#@..#@.8$@.."@.
c4 24 40 00 e0 22 40 00 cc 22 40 00 b8 22 40 00 .$@.."@.."@.."@.
a8 22 40 00 9c 22 40 00 8c 22 40 00 7c 22 40 00 ."@.."@.."@.|"@.
64 22 40 00 58 22 40 00 38 22 40 00 1c 22 40 00 d"@.X"@.8"@.."@.
f8 21 40 00 c4 24 40 00 e8 21 40 00 d8 21 40 00 .!@..$@..!@..!@.
c4 21 40 00 b0 21 40 00 98 21 40 00 78 21 40 00 .!@..!@..!@.x!@.
60 21 40 00 44 21 40 00 24 21 40 00 04 21 40 00 `!@.D!@.$!@..!@.
e4 20 40 00 c0 20 40 00 a4 20 40 00 8c 20 40 00 . @.. @.. @.. @.
6c 20 40 00 50 20 40 00 43 00 6c 00 6f 00 73 00 l @.P @.C.l.o.s.
65 00 48 00 61 00 6e 00 64 00 6c 00 65 00 00 00 e.H.a.n.d.l.e...
4c 00 6f 00 63 00 61 00 6c 00 46 00 72 00 65 00 L.o.c.a.l.F.r.e.
65 00 00 00 09 00 25 00 6c 00 73 00 3a 00 09 00 e.....%.l.s.:...
25 00 6c 00 73 00 0a 00 00 00 00 00 09 00 25 00 %.l.s.........%.
6c 00 73 00 3a 00 09 00 09 00 25 00 6c 00 73 00 l.s.:.....%.l.s.
0a 00 00 00 77 00 73 00 70 00 72 00 69 00 6e 00 ....w.s.p.r.i.n.
74 00 66 00 00 00 00 00 5c 00 53 00 74 00 72 00 t.f.....\.S.t.r.
69 00 6e 00 67 00 46 00 69 00 6c 00 65 00 49 00 i.n.g.F.i.l.e.I.
6e 00 66 00 6f 00 5c 00 25 00 30 00 34 00 68 00 n.f.o.\.%.0.4.h.
58 00 25 00 30 00 34 00 68 00 58 00 5c 00 25 00 X.%.0.4.h.X.\.%.
6c 00 73 00 00 00 00 00 0a 00 4c 00 61 00 6e 00 l.s.......L.a.n.
67 00 75 00 61 00 67 00 65 00 3a 00 09 00 30 00 g.u.a.g.e.:...0.
78 00 25 00 30 00 34 00 68 00 58 00 20 00 3d 00 x.%.0.4.h.X. .=.
20 00 25 00 6c 00 73 00 0a 00 43 00 6f 00 64 00 .%.l.s...C.o.d.
65 00 70 00 61 00 67 00 65 00 3a 00 09 00 30 00 e.p.a.g.e.:...0.
78 00 25 00 30 00 34 00 68 00 58 00 20 00 3d 00 x.%.0.4.h.X. .=.
20 00 25 00 68 00 75 00 0a 00 00 00 00 00 00 00 .%.h.u.........
0a 00 4c 00 61 00 6e 00 67 00 75 00 61 00 67 00 ..L.a.n.g.u.a.g.
65 00 3a 00 09 00 30 00 78 00 25 00 30 00 34 00 e.:...0.x.%.0.4.
68 00 58 00 0a 00 43 00 6f 00 64 00 65 00 70 00 h.X...C.o.d.e.p.
61 00 67 00 65 00 3a 00 09 00 30 00 78 00 25 00 a.g.e.:...0.x.%.
30 00 34 00 68 00 58 00 20 00 3d 00 20 00 25 00 0.4.h.X. .=. .%.
68 00 75 00 0a 00 00 00 5c 00 56 00 61 00 72 00 h.u.....\.V.a.r.
46 00 69 00 6c 00 65 00 49 00 6e 00 66 00 6f 00 F.i.l.e.I.n.f.o.
5c 00 54 00 72 00 61 00 6e 00 73 00 6c 00 61 00 \.T.r.a.n.s.l.a.
74 00 69 00 6f 00 6e 00 00 00 00 00 54 00 61 00 t.i.o.n.....T.a.
72 00 67 00 65 00 74 00 20 00 4f 00 53 00 3a 00 r.g.e.t. .O.S.:.
09 00 09 00 25 00 6c 00 73 00 2c 00 20 00 25 00 ....%.l.s.,. .%.
6c 00 73 00 0a 00 00 00 4d 00 6f 00 64 00 75 00 l.s.....M.o.d.u.
6c 00 65 00 20 00 44 00 61 00 74 00 65 00 2f 00 l.e. .D.a.t.e./.
54 00 69 00 6d 00 65 00 20 00 53 00 74 00 61 00 T.i.m.e. .S.t.a.
6d 00 70 00 3a 00 09 00 25 00 6c 00 73 00 64 00 m.p.:...%.l.s.d.
61 00 79 00 2c 00 20 00 25 00 30 00 34 00 68 00 a.y.,. .%.0.4.h.
75 00 2d 00 25 00 30 00 32 00 68 00 75 00 2d 00 u.-.%.0.2.h.u.-.
25 00 30 00 32 00 68 00 75 00 20 00 25 00 30 00 %.0.2.h.u. .%.0.
32 00 68 00 75 00 3a 00 25 00 30 00 32 00 68 00 2.h.u.:.%.0.2.h.
75 00 3a 00 25 00 30 00 32 00 68 00 75 00 2e 00 u.:.%.0.2.h.u...
25 00 30 00 33 00 68 00 75 00 20 00 55 00 54 00 %.0.3.h.u. .U.T.
43 00 0a 00 00 00 00 00 46 00 69 00 6c 00 65 00 C.......F.i.l.e.
54 00 69 00 6d 00 65 00 54 00 6f 00 53 00 79 00 T.i.m.e.T.o.S.y.
73 00 74 00 65 00 6d 00 54 00 69 00 6d 00 65 00 s.t.e.m.T.i.m.e.
00 00 00 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 ....M.o.d.u.l.e.
20 00 44 00 61 00 74 00 65 00 2f 00 54 00 69 00 .D.a.t.e./.T.i.
6d 00 65 00 20 00 53 00 74 00 61 00 6d 00 70 00 m.e. .S.t.a.m.p.
3a 00 09 00 4e 00 6f 00 6e 00 65 00 0a 00 00 00 :...N.o.n.e.....
0a 00 50 00 72 00 6f 00 64 00 75 00 63 00 74 00 ..P.r.o.d.u.c.t.
20 00 56 00 65 00 72 00 73 00 69 00 6f 00 6e 00 .V.e.r.s.i.o.n.
3a 00 09 00 25 00 68 00 75 00 2e 00 25 00 68 00 :...%.h.u...%.h.
75 00 3a 00 25 00 68 00 75 00 2e 00 25 00 68 00 u.:.%.h.u...%.h.
75 00 0a 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 u...M.o.d.u.l.e.
20 00 56 00 65 00 72 00 73 00 69 00 6f 00 6e 00 .V.e.r.s.i.o.n.
3a 00 09 00 09 00 25 00 68 00 75 00 2e 00 25 00 :.....%.h.u...%.
68 00 75 00 3a 00 25 00 68 00 75 00 2e 00 25 00 h.u.:.%.h.u...%.
68 00 75 00 0a 00 4d 00 6f 00 64 00 75 00 6c 00 h.u...M.o.d.u.l.
65 00 20 00 46 00 6c 00 61 00 67 00 73 00 3a 00 e. .F.l.a.g.s.:.
09 00 09 00 25 00 6c 00 73 00 0a 00 4d 00 6f 00 ....%.l.s...M.o.
64 00 75 00 6c 00 65 00 20 00 54 00 79 00 70 00 d.u.l.e. .T.y.p.
65 00 3a 00 09 00 09 00 25 00 6c 00 73 00 0a 00 e.:.....%.l.s...
4d 00 6f 00 64 00 75 00 6c 00 65 00 20 00 53 00 M.o.d.u.l.e. .S.
75 00 62 00 74 00 79 00 70 00 65 00 3a 00 09 00 u.b.t.y.p.e.:...
09 00 25 00 6c 00 73 00 0a 00 00 00 2c 00 20 00 ..%.l.s.....,. .
53 00 70 00 65 00 63 00 69 00 61 00 6c 00 20 00 S.p.e.c.i.a.l. .
42 00 75 00 69 00 6c 00 64 00 00 00 2c 00 20 00 B.u.i.l.d...,. .
50 00 72 00 69 00 76 00 61 00 74 00 65 00 20 00 P.r.i.v.a.t.e. .
42 00 75 00 69 00 6c 00 64 00 00 00 2c 00 20 00 B.u.i.l.d...,. .
50 00 72 00 65 00 2d 00 52 00 65 00 6c 00 65 00 P.r.e.-.R.e.l.e.
61 00 73 00 65 00 00 00 2c 00 20 00 50 00 61 00 a.s.e...,. .P.a.
74 00 63 00 68 00 65 00 64 00 00 00 2c 00 20 00 t.c.h.e.d...,. .
49 00 6e 00 66 00 65 00 72 00 72 00 65 00 64 00 I.n.f.e.r.r.e.d.
00 00 00 00 2c 00 20 00 44 00 65 00 62 00 75 00 ....,. .D.e.b.u.
67 00 00 00 2c 00 20 00 4e 00 6f 00 6e 00 65 00 g...,. .N.o.n.e.
00 00 00 00 25 00 6c 00 73 00 28 00 29 00 20 00 ....%.l.s.(.). .
72 00 65 00 74 00 75 00 72 00 6e 00 65 00 64 00 r.e.t.u.r.n.e.d.
20 00 65 00 72 00 72 00 6f 00 72 00 20 00 25 00 .e.r.r.o.r. .%.
6c 00 75 00 0a 00 00 00 56 00 65 00 72 00 51 00 l.u.....V.e.r.Q.
75 00 65 00 72 00 79 00 56 00 61 00 6c 00 75 00 u.e.r.y.V.a.l.u.
65 00 00 00 5c 00 00 00 4c 00 6f 00 63 00 61 00 e...\...L.o.c.a.
6c 00 41 00 6c 00 6c 00 6f 00 63 00 00 00 00 00 l.A.l.l.o.c.....
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 66 00 69 00 6c 00 .f.o.r. .f.i.l.
65 00 20 00 27 00 25 00 6c 00 73 00 27 00 0a 00 e. .'.%.l.s.'...
00 00 00 00 47 00 65 00 74 00 46 00 69 00 6c 00 ....G.e.t.F.i.l.
65 00 56 00 65 00 72 00 73 00 69 00 6f 00 6e 00 e.V.e.r.s.i.o.n.
49 00 6e 00 66 00 6f 00 53 00 69 00 7a 00 65 00 I.n.f.o.S.i.z.e.
45 00 78 00 00 00 00 00 4e 00 6f 00 20 00 61 00 E.x.....N.o. .a.
72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 73 00 r.g.u.m.e.n.t.s.
3a 00 20 00 61 00 74 00 20 00 6c 00 65 00 61 00 :. .a.t. .l.e.a.
73 00 74 00 20 00 6f 00 6e 00 65 00 20 00 28 00 s.t. .o.n.e. .(.
61 00 62 00 73 00 6f 00 6c 00 75 00 74 00 65 00 a.b.s.o.l.u.t.e.
20 00 6f 00 72 00 20 00 72 00 65 00 6c 00 61 00 .o.r. .r.e.l.a.
74 00 69 00 76 00 65 00 29 00 20 00 70 00 61 00 t.i.v.e.). .p.a.
74 00 68 00 20 00 6e 00 61 00 6d 00 65 00 20 00 t.h. .n.a.m.e. .
6f 00 66 00 20 00 61 00 20 00 62 00 69 00 6e 00 o.f. .a. .b.i.n.
61 00 72 00 79 00 20 00 6d 00 6f 00 64 00 75 00 a.r.y. .m.o.d.u.
6c 00 65 00 0a 00 20 00 20 00 20 00 20 00 20 00 l.e... . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 20 00 . . . . . . . .
20 00 28 00 65 00 76 00 65 00 6e 00 74 00 75 00 .(.e.v.e.n.t.u.
61 00 6c 00 6c 00 79 00 20 00 6c 00 6f 00 63 00 a.l.l.y. .l.o.c.
61 00 74 00 65 00 64 00 20 00 70 00 65 00 72 00 a.t.e.d. .p.e.r.
20 00 44 00 4c 00 4c 00 20 00 73 00 65 00 61 00 .D.L.L. .s.e.a.
72 00 63 00 68 00 20 00 6f 00 72 00 64 00 65 00 r.c.h. .o.r.d.e.
72 00 29 00 20 00 6d 00 75 00 73 00 74 00 20 00 r.). .m.u.s.t. .
62 00 65 00 20 00 67 00 69 00 76 00 65 00 6e 00 b.e. .g.i.v.e.n.
21 00 0a 00 00 00 00 00 43 00 6f 00 6d 00 6d 00 !.......C.o.m.m.
61 00 6e 00 64 00 4c 00 69 00 6e 00 65 00 54 00 a.n.d.L.i.n.e.T.
6f 00 41 00 72 00 67 00 76 00 00 00 00 00 00 00 o.A.r.g.v.......
b9 79 37 9e 00 00 00 00 68 00 00 00 45 54 41 44 .y7.....h...ETAD
10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 08 ................
00 00 00 00 d0 2c 40 00 00 00 00 00 00 00 00 00 .....,@.........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
90 2d 00 00 00 00 00 00 00 00 00 00 90 2e 00 00 .-..............
00 20 00 00 c0 2d 00 00 00 00 00 00 00 00 00 00 . ...-..........
b8 2e 00 00 30 20 00 00 cc 2d 00 00 00 00 00 00 ....0 ...-......
00 00 00 00 0a 2f 00 00 3c 20 00 00 00 00 00 00 ...../..< ......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
dc 2d 00 00 ec 2d 00 00 fa 2d 00 00 08 2e 00 00 .-...-...-......
14 2e 00 00 28 2e 00 00 40 2e 00 00 4e 2e 00 00 ....(...@...N...
60 2e 00 00 70 2e 00 00 80 2e 00 00 00 00 00 00 `...p...........
ac 2e 00 00 9e 2e 00 00 00 00 00 00 d6 2e 00 00 ................
ee 2e 00 00 c4 2e 00 00 00 00 00 00 24 05 57 72 ............$.Wr
69 74 65 43 6f 6e 73 6f 6c 65 57 00 19 01 45 78 iteConsoleW...Ex
69 74 50 72 6f 63 65 73 73 00 52 00 43 6c 6f 73 itProcess.R.Clos
65 48 61 6e 64 6c 65 00 48 03 4c 6f 63 61 6c 46 eHandle.H.LocalF
72 65 65 00 e3 04 56 65 72 4c 61 6e 67 75 61 67 ree...VerLanguag
65 4e 61 6d 65 57 00 00 25 01 46 69 6c 65 54 69 eNameW..%.FileTi
6d 65 54 6f 53 79 73 74 65 6d 54 69 6d 65 00 00 meToSystemTime..
44 03 4c 6f 63 61 6c 41 6c 6c 6f 63 00 00 87 01 D.LocalAlloc....
47 65 74 43 6f 6d 6d 61 6e 64 4c 69 6e 65 57 00 GetCommandLineW.
02 02 47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 ..GetLastError..
64 02 47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 d.GetStdHandle..
73 04 53 65 74 4c 61 73 74 45 72 72 6f 72 00 00 s.SetLastError..
4b 45 52 4e 45 4c 33 32 2e 64 6c 6c 00 00 35 03 KERNEL32.dll..5.
77 76 73 70 72 69 6e 74 66 57 00 00 33 03 77 73 wvsprintfW..3.ws
70 72 69 6e 74 66 57 00 55 53 45 52 33 32 2e 64 printfW.USER32.d
6c 6c 00 00 0e 00 56 65 72 51 75 65 72 79 56 61 ll....VerQueryVa
6c 75 65 57 00 00 02 00 47 65 74 46 69 6c 65 56 lueW....GetFileV
65 72 73 69 6f 6e 49 6e 66 6f 45 78 57 00 04 00 ersionInfoExW...
47 65 74 46 69 6c 65 56 65 72 73 69 6f 6e 49 6e GetFileVersionIn
66 6f 53 69 7a 65 45 78 57 00 56 45 52 53 49 4f foSizeExW.VERSIO
4e 2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 00 N.dll...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file VERSION.TXT
created in
step 3. to recreate the console application
Version Information Reader:
CERTUTIL.EXE /DecodeHex /V VERSION.TXT VERSION.COM
Input Length = 28288 Output Length = 6656 CertUtil: -decodehex command completed successfully.
Overwrite the text file VERSION.C
with the following
content:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define UNICODE
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <shellapi.h>
#define VS_BINARY 0U
#define VS_TEXT 1U
#pragma pack(push, 4)
typedef struct _VS_CHUNK
{
WORD wSize; // size of current chunk (tree, branch or leaf),
// including all subordinate chunks
WORD wCount; // = sizeof(dwValue) or sizeof(szValue) / sizeof(*szValue)
// (number of bytes in binary value or
// number of characters in string value,
// including the terminating NUL character,
// for root and leaf chunks; 0 for branch chunks)
WORD wType; // = VS_BINARY or VS_TEXT
#if 0
// leaf chunk (VS_VAR)
WCHAR szKey[sizeof("Translation")]; // = L"Translation"
WORD wPadding; // = 0 (alignment to DWORD)
DWORD dwValue[ANYSIZE_ARRAY]; // = {0x04B00409, ...}
// (pairs of codepage and language ids)
#elif 0
// branch chunk (VS_VARFILEINFO)
WCHAR szKey[sizeof("VarFileInfo")]; // = L"VarFileInfo"
WORD wPadding; // = 0 (alignment to DWORD)
// WCHAR szValue[0]; // NO value!
#elif 0
// leaf chunk (VS_STRING)
WCHAR szKey[sizeof("Comments")]; // = L"Comments"
// (mandatory key names are L"CompanyName",
// L"FileDescription", L"FileVersion",
// L"InternalName", L"OriginalFilename",
// L"ProductName", L"ProductVersion";
// optional key names are L"Comments",
// L"LegalCopyright", L"LegalTrademarks",
// L"OleSelfRegister", L"PrivateBuild"
// L"SpecialBuild", ...)
// (alignment to DWORD not necessary here)
WCHAR szValue[ANYSIZE_ARRAY]; // = L""
WORD wPadding; // = 0 (alignment to DWORD)
#elif 0
// lower branch chunk (VS_STRINGTABLE)
WCHAR szKey[sizeof("040904B0")]; // = L"040904B0"
// (alignment to DWORD not necessary here)
// WCHAR szValue[0]; // NO value!
#elif 0
// upper branch chunk (VS_STRINGFILEINFO)
WCHAR szKey[sizeof("StringFileInfo")];// = L"StringFileInfo"
// (alignment to DWORD not necessary here)
// WCHAR szValue[0]; // NO value!
#else
// root chunk (VS_VERSIONINFO)
WCHAR szKey[sizeof("VS_VERSION_INFO")];
WORD wPadding; // = 0 (alignment to DWORD)
#if 0
DWORD dwValue[13];
#else
VS_FIXEDFILEINFO vsFFI;
#endif
#endif
} VS_CHUNK;
#pragma pack(pop)
__declspec(safebuffers)
BOOL CDECL PrintConsole(HANDLE hConsole, [SA_FormatString(Style="printf")] LPCWSTR lpFormat, ...)
{
WCHAR szOutput[1024];
DWORD dwOutput;
DWORD dwConsole;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteConsole(hConsole, szOutput, dwOutput, &dwConsole, NULL))
return FALSE;
return dwConsole == dwOutput;
}
VOID WINAPI Version(HANDLE hConsole, VS_CHUNK *lpChunk, VS_CHUNK *lpLimit, DWORD dwLevel)
{
DWORD dwKey;
DWORD dwValue;
LPCWSTR lpValue;
while (lpChunk < lpLimit)
{
dwKey = wcslen(lpChunk->szKey);
lpValue = lpChunk->szKey + (dwKey + dwKey % 2 + 1);
if ((lpChunk->wCount == 0)
// && (lpChunk->wType == VS_TEXT)
&& (lpChunk->wSize + (BYTE *) lpChunk > (BYTE *) lpValue))
{
PrintConsole(hConsole,
L"\t\t\t%ls:\n" + 3 - dwLevel,
lpChunk->szKey);
Version(hConsole,
(VS_CHUNK *) lpValue,
(VS_CHUNK *) ((BYTE *) lpChunk + lpChunk->wSize),
dwLevel + 1);
}
else if (lpChunk->wType == VS_BINARY)
{
PrintConsole(hConsole,
L"\t\t\t%ls =" + 3 - dwLevel,
lpChunk->szKey);
for (dwValue = 0; dwValue < lpChunk->wCount / sizeof(WORD); dwValue++)
PrintConsole(hConsole,
dwValue % sizeof(WORD) ? L":%hu" : L" 0x%04hX",
lpValue[dwValue]);
PrintConsole(hConsole, L"\n");
}
else
PrintConsole(hConsole,
L"\t\t\t%-16ls = %ls\n" + 3 - dwLevel,
lpChunk->szKey, lpChunk->wCount != 0 ? lpValue : L"");
lpChunk = (VS_CHUNK *) ((BYTE *) lpChunk + lpChunk->wSize + lpChunk->wSize % sizeof(DWORD));
}
}
const LPCWSTR szDayOfWeek[7] = {L"Sunday",
L"Monday",
L"Tuesday",
L"Wednesday",
L"Thursday",
L"Friday",
L"Saturday"};
const LPCWSTR szFileOSHigh[] = {L"Unknown", // VOS_UNKNOWN
L"MS-DOS", // VOS_DOS
L"OS/2 (16-bit)", // VOS_OS216
L"OS/2 (32-bit)", // VOS_OS232
L"Windows NT", // VOS_NT
L"Windows CE", // VOS_WINCE
L"Undefined"};
const LPCWSTR szFileOSLow[] = {L"Base", // VOS__BASE
L"Windows (16-bit)", // VOS__WINDOWS16
L"Presentation Manager (16-bit)", // VOS__PM16
L"Presentation Manager (32-bit)", // VOS__PM32
L"Windows (32-bit)"}; // VOS__WINDOWS32
const LPCWSTR szFileType[] = {L"Unknown", // VFT_UNKNOWN
L"Application", // VFT_APP
L"DLL", // VFT_DLL
L"Driver", // VFT_DRV
L"Font", // VFT_FONT
L"Virtual Device", // VFT_VXD
L"Undefined",
L"Static Library"}; // VFT_STATIC_LIB
const LPCWSTR szFileDriverType[] = {L"Unknown", // VFT2_UNKNOWN
L"Printer", // VFT2_DRV_PRINTER
L"Keyboard", // VFT2_DRV_KEYBOARD
L"Language", // VFT2_DRV_LANGUAGE
L"Display", // VFT2_DRV_DISPLAY
L"Mouse", // VFT2_DRV_MOUSE
L"Network", // VFT2_DRV_NETWORK
L"System", // VFT2_DRV_SYSTEM
L"Installable", // VFT2_DRV_INSTALLABLE
L"Sound", // VFT2_DRV_SOUND
L"Communications", // VFT2_DRV_COMM
L"Input Method", // VFT2_DRV_INPUTMETHOD
L"Versioned Printer"}; // VFT2_DRV_VERSIONED_PRINTER
const LPCWSTR szFileFontType[] = {L"Unknown", // VFT2_UNKNOWN
L"Raster", // VFT2_FONT_RASTER
L"Vector", // VFT2_FONT_VECTOR
L"TrueType"}; // VFT2_FONT_TRUETYPE
__declspec(noreturn)
VOID CDECL wmainCRTStartup(VOID)
{
VS_CHUNK *lpVersion;
FILETIME ft;
SYSTEMTIME st;
LPWSTR *lpArguments;
INT nArguments;
INT nArgument = 1;
DWORD dwError = ERROR_BAD_ARGUMENTS;
HMODULE hModule;
HRSRC hResInfo;
HGLOBAL hResData;
WCHAR szFileFlags[sizeof(", Debug, Inferred, Patched, Pre-Release, Private Build, Special Build")];
LPWSTR lpFileFlags;
LPCWSTR lpFileOSLow, lpFileOSHigh;
LPCWSTR lpFileType, lpFileSubtype;
HANDLE hConsole = GetStdHandle(STD_ERROR_HANDLE);
if (hConsole == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
lpArguments = CommandLineToArgvW(GetCommandLine(), &nArguments);
if (lpArguments == NULL)
PrintConsole(hConsole,
L"CommandLineToArgv() returned error %lu\n",
dwError = GetLastError());
else
{
if (nArguments < 2)
PrintConsole(hConsole,
L"No argument: at least one (absolute or relative) path name of a binary module\n"
L" (eventually located per DLL search order) must be given!\n");
else
do
{
hModule = LoadLibraryEx(lpArguments[nArgument],
(HANDLE) NULL,
LOAD_LIBRARY_AS_DATAFILE);
if (hModule == NULL)
PrintConsole(hConsole,
L"LoadLibraryEx() returned error %lu for module \'%ls\'\n",
dwError = GetLastError(), lpArguments[nArgument]);
else
{
PrintConsole(hConsole,
L"Module \'%ls\' loaded at address 0x%p\n",
lpArguments[nArgument], hModule);
hResInfo = FindResource(hModule, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION);
if (hResInfo == NULL)
PrintConsole(hConsole,
L"FindResource() returned error %lu\n",
dwError = GetLastError());
else
{
hResData = LoadResource(hModule, hResInfo);
if (hResData == NULL)
PrintConsole(hConsole,
L"LoadResource() returned error %lu\n",
dwError = GetLastError());
else
{
lpVersion = LockResource(hResData);
if (lpVersion == NULL)
PrintConsole(hConsole,
L"LockResource() returned NULL\n");
else
{
if ((lpVersion->vsFFI.dwFileFlags & lpVersion->vsFFI.dwFileFlagsMask) == 0)
#ifdef _CRT_SECURE_NO_WARNINGS
wcscpy(szFileFlags, L", None");
#elif 0
wmemcpy(szFileFlags, L", None", sizeof(", None"));
#else
memcpy(szFileFlags, L", None", sizeof(L", None"));
#endif
else
{
#ifdef _CRT_SECURE_NO_WARNINGS
*szFileFlags = L'\0';
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_DEBUG) == VS_FF_DEBUG)
wcscat(szFileFlags, L", Debug");
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_INFOINFERRED) == VS_FF_INFOINFERRED)
wcscat(szFileFlags, L", Inferred");
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_PATCHED) == VS_FF_PATCHED)
wcscat(szFileFlags, L", Patched");
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_PRERELEASE) == VS_FF_PRERELEASE)
wcscat(szFileFlags, L", Pre-Release");
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_PRIVATEBUILD) == VS_FF_PRIVATEBUILD)
wcscat(szFileFlags, L", Private Build");
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_SPECIALBUILD) == VS_FF_SPECIALBUILD)
wcscat(szFileFlags, L", Special Build");
#else // _CRT_SECURE_NO_WARNINGS
lpFileFlags = szFileFlags;
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_DEBUG) == VS_FF_DEBUG)
{
memcpy(lpFileFlags, L", Debug", sizeof(L", Debug"));
lpFileFlags += sizeof(" Debug");
}
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_INFOINFERRED) == VS_FF_INFOINFERRED)
{
memcpy(lpFileFlags, L", Inferred", sizeof(L", Inferred"));
lpFileFlags += sizeof(" Inferred");
}
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_PATCHED) == VS_FF_PATCHED)
{
memcpy(lpFileFlags, L", Patched", sizeof(L", Patched"));
lpFileFlags += sizeof(" Patched");
}
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_PRERELEASE) == VS_FF_PRERELEASE)
{
memcpy(lpFileFlags, L", Pre-Release", sizeof(L", Pre-Release"));
lpFileFlags += sizeof(" Pre-Release");
}
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_PRIVATEBUILD) == VS_FF_PRIVATEBUILD)
{
memcpy(lpFileFlags, L", Private Build", sizeof(L", Private Build"));
lpFileFlags += sizeof(" Private Build");
}
if ((lpVersion->vsFFI.dwFileFlags & VS_FF_SPECIALBUILD) == VS_FF_SPECIALBUILD)
{
memcpy(lpFileFlags, L", Special Build", sizeof(L", Special Build"));
lpFileFlags += sizeof(" Special Build");
}
#endif // _CRT_SECURE_NO_WARNINGS
}
if (lpVersion->vsFFI.dwFileType < sizeof(szFileType) / sizeof(*szFileType))
lpFileType = szFileType[lpVersion->vsFFI.dwFileType];
else
lpFileType = L"Undefined";
if ((lpVersion->vsFFI.dwFileType == VFT_DRV)
&& (lpVersion->vsFFI.dwFileSubtype < sizeof(szFileDriverType) / sizeof(*szFileDriverType)))
lpFileSubtype = szFileDriverType[lpVersion->vsFFI.dwFileSubtype];
else if ((lpVersion->vsFFI.dwFileType == VFT_FONT)
&& (lpVersion->vsFFI.dwFileSubtype < sizeof(szFileFontType) / sizeof(*szFileFontType)))
lpFileSubtype = szFileFontType[lpVersion->vsFFI.dwFileSubtype];
else
lpFileSubtype = L"Undefined";
if (HIWORD(lpVersion->vsFFI.dwFileOS) < sizeof(szFileOSHigh) / sizeof(*szFileOSHigh))
lpFileOSHigh = szFileOSHigh[HIWORD(lpVersion->vsFFI.dwFileOS)];
else
lpFileOSHigh = L"Undefined";
if (LOWORD(lpVersion->vsFFI.dwFileOS) < sizeof(szFileOSLow) / sizeof(*szFileOSLow))
lpFileOSLow = szFileOSLow[LOWORD(lpVersion->vsFFI.dwFileOS)];
else
lpFileOSLow = L"Undefined";
PrintConsole(hConsole,
L"FixedFileInfo:\n"
L"\tProduct Version = %hu.%hu:%hu.%hu\n"
L"\tModule Version = %hu.%hu:%hu.%hu\n"
L"\tModule Flags = %ls\n"
L"\tModule Type = %ls\n"
L"\tModule Subtype = %ls\n",
HIWORD(lpVersion->vsFFI.dwProductVersionMS), LOWORD(lpVersion->vsFFI.dwProductVersionMS),
HIWORD(lpVersion->vsFFI.dwProductVersionLS), LOWORD(lpVersion->vsFFI.dwProductVersionLS),
HIWORD(lpVersion->vsFFI.dwFileVersionMS), LOWORD(lpVersion->vsFFI.dwFileVersionMS),
HIWORD(lpVersion->vsFFI.dwFileVersionLS), LOWORD(lpVersion->vsFFI.dwFileVersionLS),
szFileFlags + 2,
lpFileType,
lpFileSubtype);
if ((lpVersion->vsFFI.dwFileDateMS == 0)
&& (lpVersion->vsFFI.dwFileDateLS == 0))
PrintConsole(hConsole,
L"Module Time Stamp = None\n");
else
{
ft.dwHighDateTime = lpVersion->vsFFI.dwFileDateMS;
ft.dwLowDateTime = lpVersion->vsFFI.dwFileDateLS;
if (!FileTimeToSystemTime(&ft, &st))
PrintConsole(hConsole,
L"FileTimeToSystemTime() returned error %lu\n",
dwError = GetLastError());
else
PrintConsole(hConsole,
L"\tModule Time Stamp = %ls, %04hu-%02hu-%02hu %02hu:%02hu:%02hu.%03hu UTC\n",
szDayOfWeek[st.wDayOfWeek],
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
}
PrintConsole(hConsole,
L"\tTarget OS = %ls, %ls\n",
lpFileOSHigh, lpFileOSLow);
Version(hConsole,
lpVersion + 1,
(VS_CHUNK *) ((BYTE *) lpVersion + lpVersion->wSize),
0);
}
}
}
if (!FreeLibrary(hModule))
PrintConsole(hConsole,
L"FreeLibrary() returned error %lu\n",
GetLastError());
else
PrintConsole(hConsole,
L"Module \'%ls\' unloaded\n",
lpArguments[nArgument]);
}
} while (++nArgument < nArguments);
if (LocalFree(lpArguments) != NULL)
PrintConsole(hConsole,
L"LocalFree() returned error %lu\n",
GetLastError());
}
if (!CloseHandle(hConsole))
PrintConsole(hConsole,
L"CloseHandle() returned error %lu\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
VERSION.C
created in step 1., link the compiled
object file VERSION.OBJ
and cleanup afterwards:
SET CL=/DNEUTRAL /GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:wmainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeVERSION.COM VERSION.C KERNEL32.LIB SHELL32.LIB USER32.LIB ERASE VERSION.OBJFor 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. VERSION.C Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file VERSION.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
e0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 08 00 00 ......#.........
00 0e 00 00 00 00 00 00 6e 11 00 00 00 10 00 00 ........n.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 43 53 00 00 03 00 00 85 .0......CS......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
a8 2b 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 .+..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 40 2b 00 00 40 00 00 00 ........@+..@...
00 00 00 00 00 00 00 00 00 20 00 00 48 00 00 00 ......... ..H...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
ee 06 00 00 00 10 00 00 00 08 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 44 0d 00 00 00 20 00 00 .const..D.... ..
00 0e 00 00 00 0a 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 04 08 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 fc f7 ff ff 50 ff 15 40 20 40 00 8b f0 .......P..@ @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 fc f7 ff ff 50 ff 75 08 ff 15 00 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8b .t.3.9u....^..U.
ec 56 8b 75 0c 3b 75 10 0f 83 0b 01 00 00 53 8b .V.u.;u.......S.
5d 14 57 8d 56 06 8b c2 8d 48 02 66 8b 38 83 c0 ].W.V....H.f.8..
02 66 85 ff 75 f5 2b c1 d1 f8 8b c8 83 e1 01 03 .f..u.+.........
c8 0f b7 46 02 8d 7c 4e 08 66 85 c0 75 38 0f b7 ...F..|N.f..u8..
0e 03 ce 3b cf 76 2f 8d 04 1b 52 b9 be 24 40 00 ...;.v/...R..$@.
2b c8 51 ff 75 08 e8 55 ff ff ff 83 c4 0c 8d 43 +.Q.u..U.......C
01 50 0f b7 06 03 c6 50 57 ff 75 08 e8 8d ff ff .P.....PW.u.....
ff e9 8c 00 00 00 66 83 7e 04 01 75 24 66 85 c0 ......f.~..u$f..
75 05 bf b4 24 40 00 57 8d 04 1b 52 b9 96 24 40 u...$@.W...R..$@
00 2b c8 51 ff 75 08 e8 14 ff ff ff 83 c4 10 eb .+.Q.u..........
61 8d 04 1b 52 b9 82 24 40 00 2b c8 51 ff 75 08 a...R..$@.+.Q.u.
e8 fb fe ff ff 0f b7 46 02 83 c4 0c 33 db a9 fe .......F....3...
ff ff ff 76 2b b8 70 24 40 00 f6 c3 01 75 05 b8 ...v+.p$@....u..
5c 24 40 00 0f b7 0c 5f 51 50 ff 75 08 e8 ce fe \$@...._QP.u....
ff ff 0f b7 46 02 83 c4 0c 43 d1 e8 3b d8 72 d5 ....F....C..;.r.
68 58 24 40 00 ff 75 08 e8 b3 fe ff ff 8b 5d 14 hX$@..u.......].
59 59 0f b7 06 8b c8 83 e1 03 03 c8 03 f1 3b 75 YY............;u
10 0f 82 fc fe ff ff 5f 5b 5e 5d c2 10 00 55 8d ......._[^]...U.
6c 24 88 81 ec c4 00 00 00 53 56 57 6a f4 c7 45 l$.......SVWj..E
6c 01 00 00 00 c7 45 74 a0 00 00 00 ff 15 30 20 l.....Et......0
40 00 8b f8 89 7d 70 83 ff ff 75 0e ff 15 2c 20 @....}p...u...,
40 00 89 45 74 e9 a2 03 00 00 8d 45 60 50 ff 15 @..Et......E`P..
28 20 40 00 50 e8 9c 03 00 00 89 45 68 85 c0 75 ( @.P......Eh..u
14 ff 15 2c 20 40 00 50 89 45 74 68 14 2b 40 00 ..., @.P.Eth.+@.
e9 44 03 00 00 83 7d 60 02 73 12 68 e8 29 40 00 .D....}`.s.h.)@.
57 e8 1a fe ff ff 59 59 e9 13 03 00 00 8b 45 68 W.....YY......Eh
8b 4d 6c 6a 02 8d 34 88 6a 00 ff 36 89 75 48 ff .Mlj..4.j..6.uH.
15 24 20 40 00 8b d8 89 5d 4c 85 db 75 24 ff 15 .$ @....]L..u$..
2c 20 40 00 ff 36 89 45 74 50 68 c8 29 40 00 68 , @..6.EtPh.)@.h
70 29 40 00 57 e8 d6 fd ff ff 83 c4 14 e9 bf 02 p)@.W...........
00 00 53 ff 36 68 20 29 40 00 57 e8 c0 fd ff ff ..S.6h )@.W.....
83 c4 10 6a 10 6a 01 53 ff 15 20 20 40 00 85 c0 ...j.j.S.. @...
75 0e ff 15 2c 20 40 00 50 68 00 29 40 00 eb 18 u..., @.Ph.)@...
50 53 ff 15 1c 20 40 00 85 c0 75 22 ff 15 2c 20 PS... @...u"..,
40 00 50 68 e4 28 40 00 68 b0 28 40 00 57 89 45 @.Ph.(@.h.(@.W.E
74 e8 7a fd ff ff 83 c4 10 e9 2a 02 00 00 50 ff t.z.......*...P.
15 18 20 40 00 8b d8 85 db 75 12 68 74 28 40 00 .. @.....u.ht(@.
57 e8 5a fd ff ff 59 59 e9 0b 02 00 00 8b 4b 44 W.Z...YY......KD
85 4b 40 75 0f be 64 28 40 00 8d 7d b4 a5 a5 a5 .K@u..d(@..}....
66 a5 eb 7f 8d 45 b4 f6 c1 01 74 0f be 54 28 40 f....E....t..T(@
00 8d 7d b4 a5 a5 a5 a5 8d 45 c2 f6 43 44 10 74 ..}......E..CD.t
11 6a 05 8b f8 59 be 3c 28 40 00 f3 a5 66 a5 83 .j...Y.<(@...f..
c0 14 f6 43 44 04 74 0f 6a 05 8b f8 59 be 28 28 ...CD.t.j...Y.((
40 00 f3 a5 83 c0 12 f6 43 44 02 74 0f 6a 07 8b @.......CD.t.j..
f8 59 be 0c 28 40 00 f3 a5 83 c0 1a f6 43 44 08 .Y..(@.......CD.
74 0f 6a 08 8b f8 59 be ec 27 40 00 f3 a5 83 c0 t.j...Y..'@.....
1e f6 43 44 20 74 0c 6a 08 59 be cc 27 40 00 8b ..CD t.j.Y..'@..
f8 f3 a5 8b 43 4c ba bc 22 40 00 83 f8 08 73 0c ....CL.."@....s.
8b 0c 85 f4 23 40 00 89 4d 64 eb 03 89 55 64 83 ....#@..Md...Ud.
f8 03 75 11 8b 4b 50 83 f9 0d 73 09 8b 04 8d 14 ..u..KP...s.....
24 40 00 eb 18 83 f8 04 75 11 8b 43 50 83 f8 04 $@......u..CP...
73 09 8b 04 85 48 24 40 00 eb 02 8b c2 0f b7 4b s....H$@.......K
4a 83 f9 07 73 09 8b 3c 8d c0 23 40 00 eb 02 8b J...s..<..#@....
fa 0f b7 4b 48 83 f9 06 73 09 8b 34 8d dc 23 40 ...KH...s..4..#@
00 eb 02 8b f2 50 ff 75 64 8d 45 b8 50 0f b7 43 .....P.ud.E.P..C
34 50 0f b7 43 36 50 0f b7 43 30 50 0f b7 43 32 4P..C6P..C0P..C2
50 0f b7 43 3c 50 0f b7 43 3e 50 0f b7 43 38 50 P..C<P..C>P..C8P
0f b7 43 3a 50 68 80 26 40 00 ff 75 70 e8 0e fc ..C:Ph.&@..up...
ff ff 8b 43 54 83 c4 34 85 c0 75 16 39 43 58 75 ...CT..4..u.9CXu
11 68 44 26 40 00 ff 75 70 e8 f2 fb ff ff 59 59 .hD&@..up.....YY
eb 7a 89 45 44 8b 43 58 89 45 40 8d 45 50 50 8d .z.ED.CX.E@.EPP.
45 40 50 ff 15 14 20 40 00 85 c0 75 21 ff 15 2c E@P... @...u!..,
20 40 00 50 68 18 26 40 00 68 b0 28 40 00 ff 75 @.Ph.&@.h.(@..u
70 89 45 74 e8 b7 fb ff ff 83 c4 10 eb 3e 0f b7 p.Et.........>..
45 5e 50 0f b7 45 5c 50 0f b7 45 5a 50 0f b7 45 E^P..E\P..EZP..E
58 50 0f b7 45 56 50 0f b7 45 52 50 0f b7 45 50 XP..EVP..ERP..EP
50 0f b7 45 54 ff 34 85 a4 23 40 00 68 80 25 40 P..ET.4..#@.h.%@
00 ff 75 70 e8 77 fb ff ff 83 c4 28 56 57 68 40 ..up.w.....(VWh@
25 40 00 ff 75 70 e8 65 fb ff ff 0f b7 03 83 c4 %@..up.e........
10 6a 00 03 c3 50 83 c3 5c 53 ff 75 70 e8 9c fb .j...P..\S.up...
ff ff 8b 75 48 8b 7d 70 ff 75 4c ff 15 10 20 40 ...uH.}p.uL... @
00 85 c0 75 1c ff 15 2c 20 40 00 50 68 28 25 40 ...u..., @.Ph(%@
00 68 b0 28 40 00 57 e8 24 fb ff ff 83 c4 10 eb .h.(@.W.$.......
10 ff 36 68 f8 24 40 00 57 e8 12 fb ff ff 83 c4 ..6h.$@.W.......
0c ff 45 6c 8b 45 6c 3b 45 60 0f 82 ed fc ff ff ..El.El;E`......
ff 75 68 ff 15 0c 20 40 00 85 c0 74 1a ff 15 2c .uh... @...t...,
20 40 00 50 68 e4 24 40 00 68 b0 28 40 00 57 e8 @.Ph.$@.h.(@.W.
dc fa ff ff 83 c4 10 57 ff 15 08 20 40 00 85 c0 .......W... @...
75 1a ff 15 2c 20 40 00 50 68 cc 24 40 00 68 b0 u..., @.Ph.$@.h.
28 40 00 57 e8 b7 fa ff ff 83 c4 10 ff 75 74 ff (@.W.........ut.
15 04 20 40 00 cc 55 8b ec 51 8b 45 08 53 56 33 .. @..U..Q.E.SV3
f6 57 8b f8 89 75 08 89 75 fc 39 75 0c 0f 84 6a .W...u..u.9u...j
01 00 00 3b c6 0f 84 62 01 00 00 0f b7 08 66 3b ...;...b......f;
ce 0f 84 56 01 00 00 83 f9 20 74 0a 83 f9 09 74 ...V..... t....t
05 33 db 43 eb 02 33 db 39 75 08 75 2b 66 83 f9 .3.C..3.9u.u+f..
20 74 06 66 83 f9 09 75 1f 89 75 fc 83 c0 02 0f t.f...u..u.....
b7 08 83 f9 20 74 f5 83 f9 09 74 f0 33 c9 66 39 .... t....t.3.f9
30 0f 95 c1 03 d9 eb 23 66 83 f9 5c 75 06 83 75 0......#f..\u..u
fc 01 eb 14 39 75 fc 75 0c 66 83 f9 22 75 06 83 ....9u.u.f.."u..
75 08 01 eb 03 89 75 fc 83 c0 02 0f b7 08 66 3b u.....u.......f;
ce 75 a5 2b c7 83 c0 02 d1 f8 8d 44 58 02 03 c0 .u.+.......DX...
50 6a 40 ff 15 38 20 40 00 8b f0 33 d2 3b f2 0f Pj@..8 @...3.;..
84 d0 00 00 00 8d 44 9e 04 33 db 89 06 89 55 08 ......D..3....U.
89 5d fc 83 7d 08 00 75 34 0f b7 0f 83 f9 20 74 .]..}..u4..... t
05 83 f9 09 75 27 33 d2 33 c9 66 89 08 83 c7 02 ....u'3.3.f.....
0f b7 0f 83 f9 20 74 f5 83 f9 09 74 f0 66 39 17 ..... t....t.f9.
74 71 43 8b c7 89 5d fc 89 3c 9e eb 5c 0f b7 0f tqC...]..<..\...
83 f9 5c 75 03 42 eb 48 83 f9 22 75 41 6a 02 8d ..\u.B.H.."uAj..
5a 01 d1 eb 59 f7 db 03 f9 8d 04 58 f6 c2 01 74 Z...Y......X...t
0a 6a 22 5a 66 89 10 03 c1 eb 1c 83 7d 08 00 74 .j"Zf.......}..t
12 66 83 3f 22 75 0c 6a 22 5a 66 89 10 03 c1 03 .f.?"u.j"Zf.....
f9 eb 04 83 75 08 01 8b 5d fc 33 d2 eb 0b 33 d2 ....u...].3...3.
66 89 08 83 c0 02 83 c7 02 66 83 3f 00 0f 85 60 f........f.?...`
ff ff ff 33 c9 43 66 89 08 21 0c 9e 8b 45 0c 89 ...3.Cf..!...E..
18 39 4d 08 74 0f 68 a0 00 00 00 eb 02 6a 57 ff .9M.t.h......jW.
15 34 20 40 00 5f 8b c6 5e 5b c9 c2 08 00 00 00 .4 @._..^[......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
2c 2c 00 00 3c 2c 00 00 4a 2c 00 00 58 2c 00 00 ,,..<,..J,..X,..
64 2c 00 00 72 2c 00 00 8a 2c 00 00 9a 2c 00 00 d,..r,...,...,..
aa 2c 00 00 ba 2c 00 00 cc 2c 00 00 de 2c 00 00 .,...,...,...,..
ee 2c 00 00 fe 2c 00 00 0e 2d 00 00 00 00 00 00 .,...,...-......
2a 2d 00 00 00 00 00 00 54 00 72 00 75 00 65 00 *-......T.r.u.e.
54 00 79 00 70 00 65 00 00 00 00 00 56 00 65 00 T.y.p.e.....V.e.
63 00 74 00 6f 00 72 00 00 00 00 00 52 00 61 00 c.t.o.r.....R.a.
73 00 74 00 65 00 72 00 00 00 00 00 56 00 65 00 s.t.e.r.....V.e.
72 00 73 00 69 00 6f 00 6e 00 65 00 64 00 20 00 r.s.i.o.n.e.d. .
50 00 72 00 69 00 6e 00 74 00 65 00 72 00 00 00 P.r.i.n.t.e.r...
49 00 6e 00 70 00 75 00 74 00 20 00 4d 00 65 00 I.n.p.u.t. .M.e.
74 00 68 00 6f 00 64 00 00 00 00 00 43 00 6f 00 t.h.o.d.....C.o.
6d 00 6d 00 75 00 6e 00 69 00 63 00 61 00 74 00 m.m.u.n.i.c.a.t.
69 00 6f 00 6e 00 73 00 00 00 00 00 53 00 6f 00 i.o.n.s.....S.o.
75 00 6e 00 64 00 00 00 49 00 6e 00 73 00 74 00 u.n.d...I.n.s.t.
61 00 6c 00 6c 00 61 00 62 00 6c 00 65 00 00 00 a.l.l.a.b.l.e...
53 00 79 00 73 00 74 00 65 00 6d 00 00 00 00 00 S.y.s.t.e.m.....
4e 00 65 00 74 00 77 00 6f 00 72 00 6b 00 00 00 N.e.t.w.o.r.k...
4d 00 6f 00 75 00 73 00 65 00 00 00 44 00 69 00 M.o.u.s.e...D.i.
73 00 70 00 6c 00 61 00 79 00 00 00 4c 00 61 00 s.p.l.a.y...L.a.
6e 00 67 00 75 00 61 00 67 00 65 00 00 00 00 00 n.g.u.a.g.e.....
4b 00 65 00 79 00 62 00 6f 00 61 00 72 00 64 00 K.e.y.b.o.a.r.d.
00 00 00 00 50 00 72 00 69 00 6e 00 74 00 65 00 ....P.r.i.n.t.e.
72 00 00 00 53 00 74 00 61 00 74 00 69 00 63 00 r...S.t.a.t.i.c.
20 00 4c 00 69 00 62 00 72 00 61 00 72 00 79 00 .L.i.b.r.a.r.y.
00 00 00 00 56 00 69 00 72 00 74 00 75 00 61 00 ....V.i.r.t.u.a.
6c 00 20 00 44 00 65 00 76 00 69 00 63 00 65 00 l. .D.e.v.i.c.e.
00 00 00 00 46 00 6f 00 6e 00 74 00 00 00 00 00 ....F.o.n.t.....
44 00 72 00 69 00 76 00 65 00 72 00 00 00 00 00 D.r.i.v.e.r.....
44 00 4c 00 4c 00 00 00 41 00 70 00 70 00 6c 00 D.L.L...A.p.p.l.
69 00 63 00 61 00 74 00 69 00 6f 00 6e 00 00 00 i.c.a.t.i.o.n...
57 00 69 00 6e 00 64 00 6f 00 77 00 73 00 20 00 W.i.n.d.o.w.s. .
28 00 33 00 32 00 2d 00 62 00 69 00 74 00 29 00 (.3.2.-.b.i.t.).
00 00 00 00 50 00 72 00 65 00 73 00 65 00 6e 00 ....P.r.e.s.e.n.
74 00 61 00 74 00 69 00 6f 00 6e 00 20 00 4d 00 t.a.t.i.o.n. .M.
61 00 6e 00 61 00 67 00 65 00 72 00 20 00 28 00 a.n.a.g.e.r. .(.
33 00 32 00 2d 00 62 00 69 00 74 00 29 00 00 00 3.2.-.b.i.t.)...
50 00 72 00 65 00 73 00 65 00 6e 00 74 00 61 00 P.r.e.s.e.n.t.a.
74 00 69 00 6f 00 6e 00 20 00 4d 00 61 00 6e 00 t.i.o.n. .M.a.n.
61 00 67 00 65 00 72 00 20 00 28 00 31 00 36 00 a.g.e.r. .(.1.6.
2d 00 62 00 69 00 74 00 29 00 00 00 57 00 69 00 -.b.i.t.)...W.i.
6e 00 64 00 6f 00 77 00 73 00 20 00 28 00 31 00 n.d.o.w.s. .(.1.
36 00 2d 00 62 00 69 00 74 00 29 00 00 00 00 00 6.-.b.i.t.).....
42 00 61 00 73 00 65 00 00 00 00 00 55 00 6e 00 B.a.s.e.....U.n.
64 00 65 00 66 00 69 00 6e 00 65 00 64 00 00 00 d.e.f.i.n.e.d...
57 00 69 00 6e 00 64 00 6f 00 77 00 73 00 20 00 W.i.n.d.o.w.s. .
43 00 45 00 00 00 00 00 57 00 69 00 6e 00 64 00 C.E.....W.i.n.d.
6f 00 77 00 73 00 20 00 4e 00 54 00 00 00 00 00 o.w.s. .N.T.....
4f 00 53 00 2f 00 32 00 20 00 28 00 33 00 32 00 O.S./.2. .(.3.2.
2d 00 62 00 69 00 74 00 29 00 00 00 4f 00 53 00 -.b.i.t.)...O.S.
2f 00 32 00 20 00 28 00 31 00 36 00 2d 00 62 00 /.2. .(.1.6.-.b.
69 00 74 00 29 00 00 00 4d 00 53 00 2d 00 44 00 i.t.)...M.S.-.D.
4f 00 53 00 00 00 00 00 55 00 6e 00 6b 00 6e 00 O.S.....U.n.k.n.
6f 00 77 00 6e 00 00 00 53 00 61 00 74 00 75 00 o.w.n...S.a.t.u.
72 00 00 00 46 00 72 00 69 00 00 00 54 00 68 00 r...F.r.i...T.h.
75 00 72 00 73 00 00 00 57 00 65 00 64 00 6e 00 u.r.s...W.e.d.n.
65 00 73 00 00 00 00 00 54 00 75 00 65 00 73 00 e.s.....T.u.e.s.
00 00 00 00 4d 00 6f 00 6e 00 00 00 53 00 75 00 ....M.o.n...S.u.
6e 00 00 00 9c 23 40 00 94 23 40 00 88 23 40 00 n....#@..#@..#@.
78 23 40 00 6c 23 40 00 64 23 40 00 58 23 40 00 x#@.l#@.d#@.X#@.
48 23 40 00 38 23 40 00 1c 23 40 00 00 23 40 00 H#@.8#@..#@..#@.
e8 22 40 00 d0 22 40 00 bc 22 40 00 b0 22 40 00 ."@.."@.."@.."@.
8c 22 40 00 50 22 40 00 14 22 40 00 f0 21 40 00 ."@.P"@.."@..!@.
bc 22 40 00 48 23 40 00 d8 21 40 00 d0 21 40 00 ."@.H#@..!@..!@.
c0 21 40 00 b4 21 40 00 94 21 40 00 bc 22 40 00 .!@..!@..!@.."@.
74 21 40 00 48 23 40 00 64 21 40 00 50 21 40 00 t!@.H#@.d!@.P!@.
3c 21 40 00 2c 21 40 00 20 21 40 00 10 21 40 00 <!@.,!@. !@..!@.
00 21 40 00 e8 20 40 00 dc 20 40 00 bc 20 40 00 .!@.. @.. @.. @.
a0 20 40 00 7c 20 40 00 48 23 40 00 6c 20 40 00 . @.| @.H#@.l @.
5c 20 40 00 48 20 40 00 0a 00 00 00 20 00 30 00 \ @.H @..... .0.
78 00 25 00 30 00 34 00 68 00 58 00 00 00 00 00 x.%.0.4.h.X.....
3a 00 25 00 68 00 75 00 00 00 00 00 09 00 09 00 :.%.h.u.........
09 00 25 00 6c 00 73 00 20 00 3d 00 00 00 00 00 ..%.l.s. .=.....
09 00 09 00 09 00 25 00 2d 00 31 00 36 00 6c 00 ......%.-.1.6.l.
73 00 20 00 3d 00 20 00 25 00 6c 00 73 00 0a 00 s. .=. .%.l.s...
00 00 00 00 00 00 00 00 09 00 09 00 09 00 25 00 ..............%.
6c 00 73 00 3a 00 0a 00 00 00 00 00 43 00 6c 00 l.s.:.......C.l.
6f 00 73 00 65 00 48 00 61 00 6e 00 64 00 6c 00 o.s.e.H.a.n.d.l.
65 00 00 00 4c 00 6f 00 63 00 61 00 6c 00 46 00 e...L.o.c.a.l.F.
72 00 65 00 65 00 00 00 4d 00 6f 00 64 00 75 00 r.e.e...M.o.d.u.
6c 00 65 00 20 00 27 00 25 00 6c 00 73 00 27 00 l.e. .'.%.l.s.'.
20 00 75 00 6e 00 6c 00 6f 00 61 00 64 00 65 00 .u.n.l.o.a.d.e.
64 00 0a 00 00 00 00 00 46 00 72 00 65 00 65 00 d.......F.r.e.e.
4c 00 69 00 62 00 72 00 61 00 72 00 79 00 00 00 L.i.b.r.a.r.y...
09 00 54 00 61 00 72 00 67 00 65 00 74 00 20 00 ..T.a.r.g.e.t. .
4f 00 53 00 20 00 20 00 20 00 20 00 20 00 20 00 O.S. . . . . . .
20 00 20 00 20 00 3d 00 20 00 25 00 6c 00 73 00 . . .=. .%.l.s.
2c 00 20 00 25 00 6c 00 73 00 0a 00 00 00 00 00 ,. .%.l.s.......
09 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 20 00 ..M.o.d.u.l.e. .
54 00 69 00 6d 00 65 00 20 00 53 00 74 00 61 00 T.i.m.e. .S.t.a.
6d 00 70 00 20 00 3d 00 20 00 25 00 6c 00 73 00 m.p. .=. .%.l.s.
64 00 61 00 79 00 2c 00 20 00 25 00 30 00 34 00 d.a.y.,. .%.0.4.
68 00 75 00 2d 00 25 00 30 00 32 00 68 00 75 00 h.u.-.%.0.2.h.u.
2d 00 25 00 30 00 32 00 68 00 75 00 20 00 25 00 -.%.0.2.h.u. .%.
30 00 32 00 68 00 75 00 3a 00 25 00 30 00 32 00 0.2.h.u.:.%.0.2.
68 00 75 00 3a 00 25 00 30 00 32 00 68 00 75 00 h.u.:.%.0.2.h.u.
2e 00 25 00 30 00 33 00 68 00 75 00 20 00 55 00 ..%.0.3.h.u. .U.
54 00 43 00 0a 00 00 00 46 00 69 00 6c 00 65 00 T.C.....F.i.l.e.
54 00 69 00 6d 00 65 00 54 00 6f 00 53 00 79 00 T.i.m.e.T.o.S.y.
73 00 74 00 65 00 6d 00 54 00 69 00 6d 00 65 00 s.t.e.m.T.i.m.e.
00 00 00 00 09 00 4d 00 6f 00 64 00 75 00 6c 00 ......M.o.d.u.l.
65 00 20 00 54 00 69 00 6d 00 65 00 20 00 53 00 e. .T.i.m.e. .S.
74 00 61 00 6d 00 70 00 20 00 3d 00 20 00 4e 00 t.a.m.p. .=. .N.
6f 00 6e 00 65 00 0a 00 00 00 00 00 00 00 00 00 o.n.e...........
46 00 69 00 78 00 65 00 64 00 46 00 69 00 6c 00 F.i.x.e.d.F.i.l.
65 00 49 00 6e 00 66 00 6f 00 3a 00 0a 00 09 00 e.I.n.f.o.:.....
50 00 72 00 6f 00 64 00 75 00 63 00 74 00 20 00 P.r.o.d.u.c.t. .
56 00 65 00 72 00 73 00 69 00 6f 00 6e 00 20 00 V.e.r.s.i.o.n. .
20 00 20 00 3d 00 20 00 25 00 68 00 75 00 2e 00 . .=. .%.h.u...
25 00 68 00 75 00 3a 00 25 00 68 00 75 00 2e 00 %.h.u.:.%.h.u...
25 00 68 00 75 00 0a 00 09 00 4d 00 6f 00 64 00 %.h.u.....M.o.d.
75 00 6c 00 65 00 20 00 56 00 65 00 72 00 73 00 u.l.e. .V.e.r.s.
69 00 6f 00 6e 00 20 00 20 00 20 00 20 00 3d 00 i.o.n. . . . .=.
20 00 25 00 68 00 75 00 2e 00 25 00 68 00 75 00 .%.h.u...%.h.u.
3a 00 25 00 68 00 75 00 2e 00 25 00 68 00 75 00 :.%.h.u...%.h.u.
0a 00 09 00 4d 00 6f 00 64 00 75 00 6c 00 65 00 ....M.o.d.u.l.e.
20 00 46 00 6c 00 61 00 67 00 73 00 20 00 20 00 .F.l.a.g.s. . .
20 00 20 00 20 00 20 00 3d 00 20 00 25 00 6c 00 . . . .=. .%.l.
73 00 0a 00 09 00 4d 00 6f 00 64 00 75 00 6c 00 s.....M.o.d.u.l.
65 00 20 00 54 00 79 00 70 00 65 00 20 00 20 00 e. .T.y.p.e. . .
20 00 20 00 20 00 20 00 20 00 3d 00 20 00 25 00 . . . . .=. .%.
6c 00 73 00 0a 00 09 00 4d 00 6f 00 64 00 75 00 l.s.....M.o.d.u.
6c 00 65 00 20 00 53 00 75 00 62 00 74 00 79 00 l.e. .S.u.b.t.y.
70 00 65 00 20 00 20 00 20 00 20 00 3d 00 20 00 p.e. . . . .=. .
25 00 6c 00 73 00 0a 00 00 00 00 00 2c 00 20 00 %.l.s.......,. .
53 00 70 00 65 00 63 00 69 00 61 00 6c 00 20 00 S.p.e.c.i.a.l. .
42 00 75 00 69 00 6c 00 64 00 00 00 2c 00 20 00 B.u.i.l.d...,. .
50 00 72 00 69 00 76 00 61 00 74 00 65 00 20 00 P.r.i.v.a.t.e. .
42 00 75 00 69 00 6c 00 64 00 00 00 2c 00 20 00 B.u.i.l.d...,. .
50 00 72 00 65 00 2d 00 52 00 65 00 6c 00 65 00 P.r.e.-.R.e.l.e.
61 00 73 00 65 00 00 00 2c 00 20 00 50 00 61 00 a.s.e...,. .P.a.
74 00 63 00 68 00 65 00 64 00 00 00 2c 00 20 00 t.c.h.e.d...,. .
49 00 6e 00 66 00 65 00 72 00 72 00 65 00 64 00 I.n.f.e.r.r.e.d.
00 00 00 00 2c 00 20 00 44 00 65 00 62 00 75 00 ....,. .D.e.b.u.
67 00 00 00 2c 00 20 00 4e 00 6f 00 6e 00 65 00 g...,. .N.o.n.e.
00 00 00 00 4c 00 6f 00 63 00 6b 00 52 00 65 00 ....L.o.c.k.R.e.
73 00 6f 00 75 00 72 00 63 00 65 00 28 00 29 00 s.o.u.r.c.e.(.).
20 00 72 00 65 00 74 00 75 00 72 00 6e 00 65 00 .r.e.t.u.r.n.e.
64 00 20 00 4e 00 55 00 4c 00 4c 00 0a 00 00 00 d. .N.U.L.L.....
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
0a 00 00 00 4c 00 6f 00 61 00 64 00 52 00 65 00 ....L.o.a.d.R.e.
73 00 6f 00 75 00 72 00 63 00 65 00 00 00 00 00 s.o.u.r.c.e.....
46 00 69 00 6e 00 64 00 52 00 65 00 73 00 6f 00 F.i.n.d.R.e.s.o.
75 00 72 00 63 00 65 00 00 00 00 00 00 00 00 00 u.r.c.e.........
4d 00 6f 00 64 00 75 00 6c 00 65 00 20 00 27 00 M.o.d.u.l.e. .'.
25 00 6c 00 73 00 27 00 20 00 6c 00 6f 00 61 00 %.l.s.'. .l.o.a.
64 00 65 00 64 00 20 00 61 00 74 00 20 00 61 00 d.e.d. .a.t. .a.
64 00 64 00 72 00 65 00 73 00 73 00 20 00 30 00 d.d.r.e.s.s. .0.
78 00 25 00 70 00 0a 00 00 00 00 00 00 00 00 00 x.%.p...........
25 00 6c 00 73 00 28 00 29 00 20 00 72 00 65 00 %.l.s.(.). .r.e.
74 00 75 00 72 00 6e 00 65 00 64 00 20 00 65 00 t.u.r.n.e.d. .e.
72 00 72 00 6f 00 72 00 20 00 25 00 6c 00 75 00 r.r.o.r. .%.l.u.
20 00 66 00 6f 00 72 00 20 00 6d 00 6f 00 64 00 .f.o.r. .m.o.d.
75 00 6c 00 65 00 20 00 27 00 25 00 6c 00 73 00 u.l.e. .'.%.l.s.
27 00 0a 00 00 00 00 00 4c 00 6f 00 61 00 64 00 '.......L.o.a.d.
4c 00 69 00 62 00 72 00 61 00 72 00 79 00 45 00 L.i.b.r.a.r.y.E.
78 00 00 00 00 00 00 00 4e 00 6f 00 20 00 61 00 x.......N.o. .a.
72 00 67 00 75 00 6d 00 65 00 6e 00 74 00 3a 00 r.g.u.m.e.n.t.:.
20 00 61 00 74 00 20 00 6c 00 65 00 61 00 73 00 .a.t. .l.e.a.s.
74 00 20 00 6f 00 6e 00 65 00 20 00 28 00 61 00 t. .o.n.e. .(.a.
62 00 73 00 6f 00 6c 00 75 00 74 00 65 00 20 00 b.s.o.l.u.t.e. .
6f 00 72 00 20 00 72 00 65 00 6c 00 61 00 74 00 o.r. .r.e.l.a.t.
69 00 76 00 65 00 29 00 20 00 70 00 61 00 74 00 i.v.e.). .p.a.t.
68 00 20 00 6e 00 61 00 6d 00 65 00 20 00 6f 00 h. .n.a.m.e. .o.
66 00 20 00 61 00 20 00 62 00 69 00 6e 00 61 00 f. .a. .b.i.n.a.
72 00 79 00 20 00 6d 00 6f 00 64 00 75 00 6c 00 r.y. .m.o.d.u.l.
65 00 0a 00 20 00 20 00 20 00 20 00 20 00 20 00 e... . . . . . .
20 00 20 00 20 00 20 00 20 00 20 00 20 00 28 00 . . . . . . .(.
65 00 76 00 65 00 6e 00 74 00 75 00 61 00 6c 00 e.v.e.n.t.u.a.l.
6c 00 79 00 20 00 6c 00 6f 00 63 00 61 00 74 00 l.y. .l.o.c.a.t.
65 00 64 00 20 00 70 00 65 00 72 00 20 00 44 00 e.d. .p.e.r. .D.
4c 00 4c 00 20 00 73 00 65 00 61 00 72 00 63 00 L.L. .s.e.a.r.c.
68 00 20 00 6f 00 72 00 64 00 65 00 72 00 29 00 h. .o.r.d.e.r.).
20 00 6d 00 75 00 73 00 74 00 20 00 62 00 65 00 .m.u.s.t. .b.e.
20 00 67 00 69 00 76 00 65 00 6e 00 21 00 0a 00 .g.i.v.e.n.!...
00 00 00 00 43 00 6f 00 6d 00 6d 00 61 00 6e 00 ....C.o.m.m.a.n.
64 00 4c 00 69 00 6e 00 65 00 54 00 6f 00 41 00 d.L.i.n.e.T.o.A.
72 00 67 00 76 00 00 00 b9 79 37 9e 00 00 00 00 r.g.v....y7.....
68 00 00 00 45 54 41 44 10 00 00 00 00 00 00 00 h...ETAD........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 08 00 00 00 00 38 2b 40 00 ............8+@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 e4 2b 00 00 00 00 00 00 .........+......
00 00 00 00 1c 2d 00 00 00 20 00 00 24 2c 00 00 .....-... ..$,..
00 00 00 00 00 00 00 00 38 2d 00 00 40 20 00 00 ........8-..@ ..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 2c 2c 00 00 3c 2c 00 00 4a 2c 00 00 ....,,..<,..J,..
58 2c 00 00 64 2c 00 00 72 2c 00 00 8a 2c 00 00 X,..d,..r,...,..
9a 2c 00 00 aa 2c 00 00 ba 2c 00 00 cc 2c 00 00 .,...,...,...,..
de 2c 00 00 ee 2c 00 00 fe 2c 00 00 0e 2d 00 00 .,...,...,...-..
00 00 00 00 2a 2d 00 00 00 00 00 00 24 05 57 72 ....*-......$.Wr
69 74 65 43 6f 6e 73 6f 6c 65 57 00 19 01 45 78 iteConsoleW...Ex
69 74 50 72 6f 63 65 73 73 00 52 00 43 6c 6f 73 itProcess.R.Clos
65 48 61 6e 64 6c 65 00 48 03 4c 6f 63 61 6c 46 eHandle.H.LocalF
72 65 65 00 62 01 46 72 65 65 4c 69 62 72 61 72 ree.b.FreeLibrar
79 00 25 01 46 69 6c 65 54 69 6d 65 54 6f 53 79 y.%.FileTimeToSy
73 74 65 6d 54 69 6d 65 00 00 54 03 4c 6f 63 6b stemTime..T.Lock
52 65 73 6f 75 72 63 65 00 00 41 03 4c 6f 61 64 Resource..A.Load
52 65 73 6f 75 72 63 65 00 00 4e 01 46 69 6e 64 Resource..N.Find
52 65 73 6f 75 72 63 65 57 00 3e 03 4c 6f 61 64 ResourceW.>.Load
4c 69 62 72 61 72 79 45 78 57 00 00 87 01 47 65 LibraryExW....Ge
74 43 6f 6d 6d 61 6e 64 4c 69 6e 65 57 00 02 02 tCommandLineW...
47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 64 02 GetLastError..d.
47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 73 04 GetStdHandle..s.
53 65 74 4c 61 73 74 45 72 72 6f 72 00 00 44 03 SetLastError..D.
4c 6f 63 61 6c 41 6c 6c 6f 63 00 00 4b 45 52 4e LocalAlloc..KERN
45 4c 33 32 2e 64 6c 6c 00 00 35 03 77 76 73 70 EL32.dll..5.wvsp
72 69 6e 74 66 57 00 00 55 53 45 52 33 32 2e 64 rintfW..USER32.d
6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ll..............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file VERSION.TXT
created in
step 3. to recreate the console application
Version Information Reader:
CERTUTIL.EXE /DecodeHex /V VERSION.TXT VERSION.COM
Input Length = 26112 Output Length = 6144 CertUtil: -decodehex command completed successfully.
VERSION.DLL
with a custom
VERSIONINFO
resource from the resource script presented hereafter.
What is a DLL?
Create the text file VERSION.RC
with the following
content in the directory where you built VERSION.COM
:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
#include <winnt.h>
#include <winver.h>
VS_VERSION_INFO VERSIONINFO
FILEFLAGS VS_FF_PRIVATEBUILD | VS_FF_SPECIALBUILD
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEOS VOS_NT_WINDOWS32
FILETYPE VFT_DLL
FILESUBTYPE VFT2_UNKNOWN
FILEVERSION 0,8,1,5
PRODUCTVERSION 0,8,1,5
BEGIN
BLOCK "CustomFileInfo"
BEGIN
VALUE "", "Empty Key"
BLOCK "Empty Block"
BEGIN
END
VALUE "Empty Value"
BLOCK ""
BEGIN
VALUE "Custom", "Supercalifragilisticexpialidocious"
END
END
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904B0"
BEGIN
VALUE "Comments", "https://skanthak.hier-im-netz.de/tidbits.html"
VALUE "CompanyName", "eSKamation"
VALUE "FileDescription", "Version Information Reader Resource"
VALUE "FileVersion", "0.8.1.5"
VALUE "InternalName", "VERSION"
VALUE "LegalCopyright", "Copyright © 2004-2024, Stefan Kanthak"
VALUE "LegalTrademarks", ""
VALUE "OLESelfRegister", "Disabled"
VALUE "OriginalFilename", "VERSION.DLL"
VALUE "PrivateBuild", "NOMSVCRT"
VALUE "ProductName", "Version Information Reader"
VALUE "ProductVersion", "0.8.1.5"
VALUE "SpecialBuild", "Release"
VALUE "String", "String"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 0x04B0
VALUE "Variable", 0, 8, 1, 5
END
END
For details and reference see the
MSDN articles
Resource Compiler
and
Resource-Definition Statements
plus
VERSIONINFO resource,
StringFileInfo BLOCK statement
and
VarFileInfo BLOCK statement.
About Resource Files
Resource Structures
RESOURCEHEADER structure
ACCELERATORS resource
BITMAP resource
CURSOR resource
DIALOG resource
DIALOGEX resource
FONT resource
HTML resource
ICON resource
MENU resource
MENUEX resource
MESSAGETABLE resource
POPUP resource
RCDATA resource
STRINGTABLE resource
User-Defined Resource
Common Resource Attributes
CAPTION statement
CHARACTERISTICS statement
CLASS statement
EXSTYLE statement
FONT statement
LANGUAGE statement
MENU statement
MENUITEM statement
STYLE statement
VERSION statement
CONTROL control
Common Control Parameters
Run the following four command lines to compile the resource script
VERSION.RC
created in step 1., link the compiled
resource file VERSION.RES
and cleanup afterwards:
RC.EXE /L 0 VERSION.RC LINK.EXE /LINK /DLL /MACHINE:I386 /NODEFAULTLIB /NOENTRY VERSION.RES ERASE VERSION.OBJ VERSION.RESFor details and reference see the MSDN articles Using RC (The RC Command Line) 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) Windows (R) Resource Compiler Version 6.1.7600.16385 Copyright (C) Microsoft Corporation. All rights reserved. Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file VERSION.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
e0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 01 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 02 21 0b 01 0a 00 00 00 00 00 .......!........
00 06 00 00 00 00 00 00 00 00 00 00 00 10 00 00 ................
00 10 00 00 00 00 00 10 00 10 00 00 00 02 00 00 ................
03 00 33 00 00 00 2f 03 03 00 33 00 00 00 00 00 ..3.../..3......
00 20 00 00 00 02 00 00 f3 92 00 00 02 00 40 05 . ............@.
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 10 00 00 f0 05 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 72 73 72 63 00 00 00 .........rsrc...
f0 05 00 00 00 10 00 00 00 06 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 40 ............@..@
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 ................
10 00 00 00 18 00 00 80 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 01 00 01 00 00 00 30 00 00 80 ............0...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 ................
00 00 00 00 48 00 00 00 60 10 00 00 90 05 00 00 ....H...`.......
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
90 05 34 00 00 00 56 00 53 00 5f 00 56 00 45 00 ..4...V.S._.V.E.
52 00 53 00 49 00 4f 00 4e 00 5f 00 49 00 4e 00 R.S.I.O.N._.I.N.
46 00 4f 00 00 00 00 00 bd 04 ef fe 00 00 01 00 F.O.............
08 00 00 00 05 00 01 00 08 00 00 00 05 00 01 00 ................
3f 00 00 00 28 00 00 00 04 00 04 00 02 00 00 00 ?...(...........
00 00 00 00 00 00 00 00 00 00 00 00 e2 00 00 00 ................
01 00 43 00 75 00 73 00 74 00 6f 00 6d 00 46 00 ..C.u.s.t.o.m.F.
69 00 6c 00 65 00 49 00 6e 00 66 00 6f 00 00 00 i.l.e.I.n.f.o...
1c 00 0a 00 01 00 00 00 45 00 6d 00 70 00 74 00 ........E.m.p.t.
79 00 20 00 4b 00 65 00 79 00 00 00 20 00 00 00 y. .K.e.y... ...
01 00 45 00 6d 00 70 00 74 00 79 00 20 00 42 00 ..E.m.p.t.y. .B.
6c 00 6f 00 63 00 6b 00 00 00 00 00 20 00 00 00 l.o.c.k..... ...
01 00 45 00 6d 00 70 00 74 00 79 00 20 00 56 00 ..E.m.p.t.y. .V.
61 00 6c 00 75 00 65 00 00 00 00 00 62 00 00 00 a.l.u.e.....b...
01 00 00 00 5a 00 23 00 01 00 43 00 75 00 73 00 ....Z.#...C.u.s.
74 00 6f 00 6d 00 00 00 53 00 75 00 70 00 65 00 t.o.m...S.u.p.e.
72 00 63 00 61 00 6c 00 69 00 66 00 72 00 61 00 r.c.a.l.i.f.r.a.
67 00 69 00 6c 00 69 00 73 00 74 00 69 00 63 00 g.i.l.i.s.t.i.c.
65 00 78 00 70 00 69 00 61 00 6c 00 69 00 64 00 e.x.p.i.a.l.i.d.
6f 00 63 00 69 00 6f 00 75 00 73 00 00 00 00 00 o.c.i.o.u.s.....
ea 03 00 00 01 00 53 00 74 00 72 00 69 00 6e 00 ......S.t.r.i.n.
67 00 46 00 69 00 6c 00 65 00 49 00 6e 00 66 00 g.F.i.l.e.I.n.f.
6f 00 00 00 c6 03 00 00 01 00 30 00 34 00 30 00 o.........0.4.0.
39 00 30 00 34 00 42 00 30 00 00 00 7e 00 33 00 9.0.4.B.0...~.3.
01 00 43 00 6f 00 6d 00 6d 00 65 00 6e 00 74 00 ..C.o.m.m.e.n.t.
73 00 00 00 68 00 74 00 74 00 70 00 73 00 3a 00 s...h.t.t.p.s.:.
2f 00 2f 00 73 00 6b 00 61 00 6e 00 74 00 68 00 /./.s.k.a.n.t.h.
61 00 6b 00 2e 00 68 00 6f 00 6d 00 65 00 70 00 a.k...h.o.m.e.p.
61 00 67 00 65 00 2e 00 74 00 2d 00 6f 00 6e 00 a.g.e...t.-.o.n.
6c 00 69 00 6e 00 65 00 2e 00 64 00 65 00 2f 00 l.i.n.e...d.e./.
74 00 69 00 64 00 62 00 69 00 74 00 73 00 2e 00 t.i.d.b.i.t.s...
68 00 74 00 6d 00 6c 00 00 00 00 00 36 00 0b 00 h.t.m.l.....6...
01 00 43 00 6f 00 6d 00 70 00 61 00 6e 00 79 00 ..C.o.m.p.a.n.y.
4e 00 61 00 6d 00 65 00 00 00 00 00 65 00 53 00 N.a.m.e.....e.S.
4b 00 61 00 6d 00 61 00 74 00 69 00 6f 00 6e 00 K.a.m.a.t.i.o.n.
00 00 00 00 70 00 24 00 01 00 46 00 69 00 6c 00 ....p.$...F.i.l.
65 00 44 00 65 00 73 00 63 00 72 00 69 00 70 00 e.D.e.s.c.r.i.p.
74 00 69 00 6f 00 6e 00 00 00 00 00 56 00 65 00 t.i.o.n.....V.e.
72 00 73 00 69 00 6f 00 6e 00 20 00 49 00 6e 00 r.s.i.o.n. .I.n.
66 00 6f 00 72 00 6d 00 61 00 74 00 69 00 6f 00 f.o.r.m.a.t.i.o.
6e 00 20 00 52 00 65 00 61 00 64 00 65 00 72 00 n. .R.e.a.d.e.r.
20 00 52 00 65 00 73 00 6f 00 75 00 72 00 63 00 .R.e.s.o.u.r.c.
65 00 00 00 30 00 08 00 01 00 46 00 69 00 6c 00 e...0.....F.i.l.
65 00 56 00 65 00 72 00 73 00 69 00 6f 00 6e 00 e.V.e.r.s.i.o.n.
00 00 00 00 30 00 2e 00 38 00 2e 00 31 00 2e 00 ....0...8...1...
35 00 00 00 30 00 08 00 01 00 49 00 6e 00 74 00 5...0.....I.n.t.
65 00 72 00 6e 00 61 00 6c 00 4e 00 61 00 6d 00 e.r.n.a.l.N.a.m.
65 00 00 00 56 00 45 00 52 00 53 00 49 00 4f 00 e...V.E.R.S.I.O.
4e 00 00 00 70 00 26 00 01 00 4c 00 65 00 67 00 N...p.&...L.e.g.
61 00 6c 00 43 00 6f 00 70 00 79 00 72 00 69 00 a.l.C.o.p.y.r.i.
67 00 68 00 74 00 00 00 43 00 6f 00 70 00 79 00 g.h.t...C.o.p.y.
72 00 69 00 67 00 68 00 74 00 20 00 a9 00 20 00 r.i.g.h.t. ... .
32 00 30 00 30 00 34 00 2d 00 32 00 30 00 32 00 2.0.0.4.-.2.0.2.
34 00 2c 00 20 00 53 00 74 00 65 00 66 00 61 00 4.,. .S.t.e.f.a.
6e 00 20 00 4b 00 61 00 6e 00 74 00 68 00 61 00 n. .K.a.n.t.h.a.
6b 00 00 00 28 00 00 00 01 00 4c 00 65 00 67 00 k...(.....L.e.g.
61 00 6c 00 54 00 72 00 61 00 64 00 65 00 6d 00 a.l.T.r.a.d.e.m.
61 00 72 00 6b 00 73 00 00 00 00 00 3a 00 09 00 a.r.k.s.....:...
01 00 4f 00 4c 00 45 00 53 00 65 00 6c 00 66 00 ..O.L.E.S.e.l.f.
52 00 65 00 67 00 69 00 73 00 74 00 65 00 72 00 R.e.g.i.s.t.e.r.
00 00 00 00 44 00 69 00 73 00 61 00 62 00 6c 00 ....D.i.s.a.b.l.
65 00 64 00 00 00 00 00 40 00 0c 00 01 00 4f 00 e.d.....@.....O.
72 00 69 00 67 00 69 00 6e 00 61 00 6c 00 46 00 r.i.g.i.n.a.l.F.
69 00 6c 00 65 00 6e 00 61 00 6d 00 65 00 00 00 i.l.e.n.a.m.e...
56 00 45 00 52 00 53 00 49 00 4f 00 4e 00 2e 00 V.E.R.S.I.O.N...
44 00 4c 00 4c 00 00 00 32 00 09 00 01 00 50 00 D.L.L...2.....P.
72 00 69 00 76 00 61 00 74 00 65 00 42 00 75 00 r.i.v.a.t.e.B.u.
69 00 6c 00 64 00 00 00 4e 00 4f 00 4d 00 53 00 i.l.d...N.O.M.S.
56 00 43 00 52 00 54 00 00 00 00 00 56 00 1b 00 V.C.R.T.....V...
01 00 50 00 72 00 6f 00 64 00 75 00 63 00 74 00 ..P.r.o.d.u.c.t.
4e 00 61 00 6d 00 65 00 00 00 00 00 56 00 65 00 N.a.m.e.....V.e.
72 00 73 00 69 00 6f 00 6e 00 20 00 49 00 6e 00 r.s.i.o.n. .I.n.
66 00 6f 00 72 00 6d 00 61 00 74 00 69 00 6f 00 f.o.r.m.a.t.i.o.
6e 00 20 00 52 00 65 00 61 00 64 00 65 00 72 00 n. .R.e.a.d.e.r.
00 00 00 00 34 00 08 00 01 00 50 00 72 00 6f 00 ....4.....P.r.o.
64 00 75 00 63 00 74 00 56 00 65 00 72 00 73 00 d.u.c.t.V.e.r.s.
69 00 6f 00 6e 00 00 00 30 00 2e 00 38 00 2e 00 i.o.n...0...8...
31 00 2e 00 35 00 00 00 30 00 08 00 01 00 53 00 1...5...0.....S.
70 00 65 00 63 00 69 00 61 00 6c 00 42 00 75 00 p.e.c.i.a.l.B.u.
69 00 6c 00 64 00 00 00 52 00 65 00 6c 00 65 00 i.l.d...R.e.l.e.
61 00 73 00 65 00 00 00 22 00 07 00 01 00 53 00 a.s.e...".....S.
74 00 72 00 69 00 6e 00 67 00 00 00 53 00 74 00 t.r.i.n.g...S.t.
72 00 69 00 6e 00 67 00 00 00 00 00 64 00 00 00 r.i.n.g.....d...
01 00 56 00 61 00 72 00 46 00 69 00 6c 00 65 00 ..V.a.r.F.i.l.e.
49 00 6e 00 66 00 6f 00 00 00 00 00 24 00 04 00 I.n.f.o.....$...
00 00 54 00 72 00 61 00 6e 00 73 00 6c 00 61 00 ..T.r.a.n.s.l.a.
74 00 69 00 6f 00 6e 00 00 00 00 00 09 04 b0 04 t.i.o.n.........
20 00 08 00 00 00 56 00 61 00 72 00 69 00 61 00 .....V.a.r.i.a.
62 00 6c 00 65 00 00 00 00 00 08 00 01 00 05 00 b.l.e...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file VERSION.TXT
created in
step 3. to recreate the
DLL
VERSION.DLL
:
CERTUTIL.EXE /DecodeHex /V VERSION.TXT VERSION.DLL
Input Length = 8704 Output Length = 2048 CertUtil: -decodehex command completed successfully.
Finally execute the console application
VERSION.COM
built before to enumerate and display the custom
version information
embedded in VERSION.DLL
:
.\VERSION.COM .\VERSION.DLL
Module 'VERSION.DLL' loaded at address 0x00250001 FixedFileInfo: Product Version = 0.8:1.5 Module Version = 0.8:1.5 Module Flags = Private Build, Special Build Module Type = DLL Module Subtype = Undefined Module Time Stamp = None Target OS = Windows NT, Windows (32-bit) CustomFileInfo: = Empty Key Empty Block = Empty Value = : Custom = Supercalifragilisticexpialidocious StringFileInfo: 040904B0: Comments = https://skanthak.hier-im-netz.de/tidbits.html CompanyName = eSKamation FileDescription = Version Information Reader Resource FileVersion = 0.8.1.5 InternalName = VERSION LegalCopyright = Copyright © 2004-2024, Stefan Kanthak LegalTrademarks = OLESelfRegister = Disabled OriginalFilename = VERSION.DLL PrivateBuild = NOMSVCRT ProductName = Version Information Reader ProductVersion = 0.8.1.5 SpecialBuild = Release String = String VarFileInfo: Translation = 0x0409:1252 Variable = 0x0000:8 0x0001:5 Module 'VERSION.DLL' unloadedNote: empty blocks and empty values have identical layout and can’t be distinguished!
UUENCODE.COM <‹input file name› >‹output file name› ECHO ‹string› | UUENCODE.COM | MORE.COM
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and UUENCODE.COM, a
smallform without these extras.
Note:
UU Encoder
is a so-called filter
, it reads from standard input
,
writes to standard output
and prints error messages on
standard error
.
Create the text file UUENCODE.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#define memcpy __movsb
__declspec(safebuffers)
BOOL CDECL PrintFormat(HANDLE hFile, [SA_FormatString(Style="printf")] LPCSTR lpFormat, ...)
{
CHAR szOutput[1024];
DWORD dwOutput;
DWORD dwFile;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteFile(hFile, szOutput, dwOutput, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
return dwFile == dwOutput;
}
const CHAR szU2U[64] = "`!\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_";
__declspec(noreturn)
VOID CDECL mainCRTStartup(VOID)
{
DWORD dwError = ERROR_SUCCESS;
DWORD dwCount;
DWORD dwInOut;
DWORD dwInput;
BYTE cbInput[45];
BYTE cbOutput[sizeof(cbInput) / 3 * 4 + sizeof("\r\n")];
DWORD dwOutput;
HANDLE hOutput;
HANDLE hInput;
HANDLE hError = GetStdHandle(STD_ERROR_HANDLE);
if (hError == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOutput == INVALID_HANDLE_VALUE)
PrintFormat(hError,
"GetStdHandle(%ld) returned error %lu\r\n",
STD_OUTPUT_HANDLE, dwError = GetLastError());
else
{
hInput = GetStdHandle(STD_INPUT_HANDLE);
if (hInput == INVALID_HANDLE_VALUE)
PrintFormat(hError,
"GetStdHandle(%ld) returned error %lu\r\n",
STD_INPUT_HANDLE, dwError = GetLastError());
else
{
memcpy(cbOutput, "\r\nbegin 644 -\r\n", dwOutput = sizeof("\r\nbegin 644 -\r\n") - 1);
for (;;)
{
if (!WriteFile(hOutput, cbOutput, dwOutput, &dwCount, (LPOVERLAPPED) NULL))
PrintFormat(hError,
"WriteFile() returned error %lu\r\n",
dwError = GetLastError());
else if (dwCount != dwOutput)
PrintFormat(hError,
"WriteFile() failed, %lu of %lu characters written\r\n",
dwCount, dwOutput, dwError = ERROR_WRITE_FAULT);
else
if (!ReadFile(hInput, cbInput, sizeof(cbInput), &dwInput, (LPOVERLAPPED) NULL)
&& (GetLastError() != ERROR_BROKEN_PIPE))
PrintFormat(hError,
"ReadFile() returned error %lu\r\n",
dwError = GetLastError());
else if (dwInput == 0)
{
memcpy(cbOutput, "`\r\nend\r\n", dwOutput = sizeof("`\r\nend\r\n") - 1);
if (!WriteFile(hOutput, cbOutput, dwOutput, &dwCount, (LPOVERLAPPED) NULL))
PrintFormat(hError,
"WriteFile() returned error %lu\r\n",
dwError = GetLastError());
else if (dwCount != dwOutput)
PrintFormat(hError,
"WriteFile() failed, %lu of %lu characters written\r\n",
dwCount, dwOutput, dwError = ERROR_WRITE_FAULT);
// else
// dwError = ERROR_SUCCESS;
}
else
{
dwOutput = 0;
#if 0
cbOutput[dwOutput++] = szU2U[dwInput];
#else
cbOutput[dwOutput++] = (BYTE) (' ' + dwInput);
#endif
#if 0
while (dwInput % 3 != 0)
cbInput[dwInput++] = '\0';
#else
switch (dwInput % 3)
{
case 1:
cbInput[dwInput++] = '\0';
case 2:
cbInput[dwInput++] = '\0';
}
#endif
dwCount = dwInput;
dwInput = 0;
do
{
#if 0
dwInOut = cbInput[dwInput++];
dwInOut <<= 8;
dwInOut |= cbInput[dwInput++];
dwInOut <<= 8;
dwInOut |= cbInput[dwInput++];
cbOutput[dwOutput++] = szU2U[(dwInOut >> 18) & 63];
cbOutput[dwOutput++] = szU2U[(dwInOut >> 12) & 63];
cbOutput[dwOutput++] = szU2U[(dwInOut >> 6) & 63];
cbOutput[dwOutput++] = szU2U[dwInOut & 63];
#else
dwInOut = _byteswap_ulong(*(DWORD *) (cbInput + dwInput));
dwInput += 3;
*(DWORD *) (cbOutput + dwOutput) = szU2U[dwInOut >> 26]
| szU2U[(dwInOut >> 20) & 63] * 256
| szU2U[(dwInOut >> 14) & 63] * 65536
| szU2U[(dwInOut >> 8) & 63] * 16777216;
dwOutput += 4;
#endif
} while (dwInput < dwCount);
cbOutput[dwOutput++] = '\r';
cbOutput[dwOutput++] = '\n';
continue;
}
break;
}
if (!CloseHandle(hInput))
PrintFormat(hError,
"CloseHandle() returned error %lu\r\n",
GetLastError());
}
if (!CloseHandle(hOutput))
PrintFormat(hError,
"CloseHandle() returned error %lu\r\n",
GetLastError());
}
if (!CloseHandle(hError))
PrintFormat(hError,
"CloseHandle() returned error %lu\r\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
UUENCODE.C
created in step 1., link the compiled
object file UUENCODE.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:mainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /FeUUENCODE.COM UUENCODE.C KERNEL32.LIB USER32.LIB ERASE UUENCODE.OBJFor 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. UUENCODE.C UUENCODE.C(49) : warning C4295: 'szU2U' : array is too small to include a terminating null character Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file UUENCODE.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 04 00 00 ......#.........
00 02 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 ab 0e 00 00 03 00 00 85 .0..............
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
1c 21 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 .!..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 20 00 00 20 00 00 00 ......... .. ...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
43 02 00 00 00 10 00 00 00 04 00 00 00 02 00 00 C...............
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 e6 01 00 00 00 20 00 00 .const....... ..
00 02 00 00 00 06 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 04 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 fb ff ff 50 ff 15 18 20 40 00 8b f0 .......P... @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 fb ff ff 50 ff 75 08 ff 15 10 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8d .t.3.9u....^..U.
6c 24 88 81 ec 88 00 00 00 83 65 74 00 53 56 8b l$........et.SV.
35 0c 20 40 00 57 6a f4 ff d6 8b f8 89 7d 6c 83 5. @.Wj......}l.
ff ff 75 0e ff 15 08 20 40 00 89 45 74 e9 b7 01 ..u.... @..Et...
00 00 6a f5 ff d6 89 45 68 83 f8 ff 75 0b ff 15 ..j....Eh...u...
08 20 40 00 50 6a f5 eb 15 6a f6 ff d6 89 45 60 . @.Pj...j....E`
83 f8 ff 75 1f ff 15 08 20 40 00 50 6a f6 68 f4 ...u.... @.Pj.h.
20 40 00 57 89 45 74 e8 44 ff ff ff 83 c4 10 e9 @.W.Et.D.......
75 01 00 00 6a 0f 5b 8d 7d 20 be e4 20 40 00 8b u...j.[.} .. @..
cb f3 a4 8b 3d 10 20 40 00 e9 d4 00 00 00 39 5d ....=. @......9]
70 0f 85 37 01 00 00 6a 00 8d 45 64 50 6a 2d 8d p..7...j..EdPj-.
45 f0 50 ff 75 60 ff 15 04 20 40 00 85 c0 75 11 E.P.u`... @...u.
8b 35 08 20 40 00 ff d6 83 f8 6d 0f 85 bb 00 00 .5. @.....m.....
00 8b 4d 64 85 c9 0f 84 ba 00 00 00 8a 81 20 20 ..Md..........
40 00 88 45 20 6a 03 33 d2 8b c1 5e f7 f6 33 db @..E j.3...^..3.
43 4a 74 05 4a 74 08 eb 0c c6 44 0d f0 00 41 c6 CJt.Jt....D...A.
44 0d f0 00 41 89 4d 70 33 c9 8b 44 0d f0 0f c8 D...A.Mp3..D....
8b d0 c1 ea 14 8b f0 c1 ee 08 83 e6 3f 0f be b6 ............?...
20 20 40 00 83 e2 3f 0f be 92 20 20 40 00 c1 e6 @...?... @...
18 c1 e2 08 0b d6 8b f0 c1 ee 0e 83 e6 3f 0f be .............?..
b6 20 20 40 00 c1 e8 1a 0f be 80 20 20 40 00 c1 . @....... @..
e6 10 0b d6 0b d0 83 c1 03 89 54 1d 20 83 c3 04 ..........T. ...
3b 4d 70 72 a5 66 c7 44 1d 20 0d 0a 89 4d 64 83 ;Mpr.f.D. ...Md.
c3 02 6a 00 8d 45 70 50 53 8d 45 20 50 ff 75 68 ..j..EpPS.E P.uh
ff d7 85 c0 0f 85 14 ff ff ff eb 31 ff d6 50 68 ...........1..Ph
c4 20 40 00 eb 33 6a 08 5b 6a 00 8d 45 70 50 53 . @..3j.[j..EpPS
8d 45 20 50 ff 75 68 8d 7d 20 be b8 20 40 00 8b .E P.uh.} .. @..
cb f3 a4 ff 15 10 20 40 00 85 c0 75 1c ff 15 08 ...... @...u....
20 40 00 50 68 94 20 40 00 ff 75 6c 89 45 74 e8 @.Ph. @..ul.Et.
ec fd ff ff 83 c4 0c eb 20 39 5d 70 74 1b 6a 1d ........ 9]pt.j.
58 50 53 ff 75 70 89 45 74 68 60 20 40 00 ff 75 XPS.up.Eth` @..u
6c e8 ca fd ff ff 83 c4 14 ff 75 74 ff 15 00 20 l.........ut...
40 00 cc 00 00 00 00 00 00 00 00 00 00 00 00 00 @...............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
84 21 00 00 92 21 00 00 9e 21 00 00 ae 21 00 00 .!...!...!...!..
78 21 00 00 00 00 00 00 cc 21 00 00 00 00 00 00 x!.......!......
60 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f `!"#$%&'()*+,-./
30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 0123456789:;<=>?
40 41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f @ABCDEFGHIJKLMNO
50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f PQRSTUVWXYZ[\]^_
57 72 69 74 65 46 69 6c 65 28 29 20 66 61 69 6c WriteFile() fail
65 64 2c 20 25 6c 75 20 6f 66 20 25 6c 75 20 63 ed, %lu of %lu c
68 61 72 61 63 74 65 72 73 20 77 72 69 74 74 65 haracters writte
6e 0d 0a 00 57 72 69 74 65 46 69 6c 65 28 29 20 n...WriteFile()
72 65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 25 returned error %
6c 75 0d 0a 00 00 00 00 60 0d 0a 65 6e 64 0d 0a lu......`..end..
00 00 00 00 52 65 61 64 46 69 6c 65 28 29 20 72 ....ReadFile() r
65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 25 6c eturned error %l
75 0d 0a 00 0d 0a 62 65 67 69 6e 20 36 34 34 20 u.....begin 644
2d 0d 0a 00 47 65 74 53 74 64 48 61 6e 64 6c 65 -...GetStdHandle
28 25 6c 64 29 20 72 65 74 75 72 6e 65 64 20 65 (%ld) returned e
72 72 6f 72 20 25 6c 75 0d 0a 00 00 58 21 00 00 rror %lu....X!..
00 00 00 00 00 00 00 00 be 21 00 00 00 20 00 00 .........!... ..
70 21 00 00 00 00 00 00 00 00 00 00 da 21 00 00 p!...........!..
18 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 . ..............
00 00 00 00 00 00 00 00 84 21 00 00 92 21 00 00 .........!...!..
9e 21 00 00 ae 21 00 00 78 21 00 00 00 00 00 00 .!...!..x!......
cc 21 00 00 00 00 00 00 25 05 57 72 69 74 65 46 .!......%.WriteF
69 6c 65 00 19 01 45 78 69 74 50 72 6f 63 65 73 ile...ExitProces
73 00 c0 03 52 65 61 64 46 69 6c 65 00 00 02 02 s...ReadFile....
47 65 74 4c 61 73 74 45 72 72 6f 72 00 00 64 02 GetLastError..d.
47 65 74 53 74 64 48 61 6e 64 6c 65 00 00 4b 45 GetStdHandle..KE
52 4e 45 4c 33 32 2e 64 6c 6c 00 00 34 03 77 76 RNEL32.dll..4.wv
73 70 72 69 6e 74 66 41 00 00 55 53 45 52 33 32 sprintfA..USER32
2e 64 6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 .dll............
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file UUENCODE.TXT
created in
step 3. to recreate the console application
UU Encoder:
CERTUTIL.EXE /DecodeHex /V UUENCODE.TXT UUENCODE.COM
Input Length = 8704 Output Length = 2048 CertUtil: -decodehex command completed successfully.
The Base16, Base32, and Base64 Data Encodings.
MIME
is specified in
RFCs
1341,
1342,
1521
and
1522
2045,
2046,
2047,
2048
and
2049,
all titled Multipurpose Internet Mail Extensions (MIME)
.
The MSDN articles RFC 822 Message Format and MIME Message Format document the message format.
64ENCODE.COM <‹input file name› >‹output file name› ECHO ‹string› | 64ENCODE.COM | MORE.COM
bigform with embedded application manifest, version information, icon plus time-stamped digital signature, and 64ENCODE.COM, a
smallform without these extras.
Note:
Base64 Encoder
is a so-called filter
, it reads from standard input
,
writes to standard output
and prints error messages on
standard error
.
Create the text file 64ENCODE.C
with the following
content in an arbitrary, preferable empty directory:
// Copyright © 2004-2024, Stefan Kanthak <stefan.kanthak@nexgo.de>
// * The software is provided "as is" without any warranty, neither express
// nor implied.
// * In no event will the author be held liable for any damage(s) arising
// from the use of the software.
// * Redistribution of the software is allowed only in unmodified form.
// * Permission is granted to use the software solely for personal private
// and non-commercial purposes.
// * An individuals use of the software in his or her capacity or function
// as an agent, (independent) contractor, employee, member or officer of
// a business, corporation or organization (commercial or non-commercial)
// does not qualify as personal private and non-commercial purpose.
// * Without written approval from the author the software must not be used
// for a business, for commercial, corporate, governmental, military or
// organizational purposes of any kind, or in a commercial, corporate,
// governmental, military or organizational environment of any kind.
#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
__declspec(safebuffers)
BOOL CDECL PrintFormat(HANDLE hFile, [SA_FormatString(Style="printf")] LPCSTR lpFormat, ...)
{
CHAR szOutput[1024];
DWORD dwOutput;
DWORD dwFile;
va_list vaInput;
va_start(vaInput, lpFormat);
dwOutput = wvsprintf(szOutput, lpFormat, vaInput);
va_end(vaInput);
if (dwOutput == 0)
return FALSE;
if (!WriteFile(hFile, szOutput, dwOutput, &dwFile, (LPOVERLAPPED) NULL))
return FALSE;
return dwFile == dwOutput;
}
const CHAR szBase64[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789+/";
__declspec(noreturn)
VOID CDECL mainCRTStartup(VOID)
{
DWORD dwError = ERROR_SUCCESS;
DWORD dwCount;
DWORD dwInOut;
DWORD dwInput;
BYTE cbInput[57];
BYTE cbOutput[sizeof(cbInput) / 3 * 4 + sizeof("\r\n") - 1];
DWORD dwOutput;
HANDLE hOutput;
HANDLE hInput;
HANDLE hError = GetStdHandle(STD_ERROR_HANDLE);
if (hError == INVALID_HANDLE_VALUE)
dwError = GetLastError();
else
{
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOutput == INVALID_HANDLE_VALUE)
PrintFormat(hError,
"GetStdHandle(%s) returned error %lu\r\n",
"STD_OUTPUT_HANDLE", dwError = GetLastError());
else
{
hInput = GetStdHandle(STD_INPUT_HANDLE);
if (hInput == INVALID_HANDLE_VALUE)
PrintFormat(hError,
"GetStdHandle(%s) returned error %lu\r\n",
"STD_INPUT_HANDLE", dwError = GetLastError());
else
{
for (;;)
{
if (!ReadFile(hInput, cbInput, sizeof(cbInput), &dwInput, (LPOVERLAPPED) NULL)
&& (GetLastError() != ERROR_BROKEN_PIPE))
PrintFormat(hError,
"ReadFile() returned error %lu\r\n",
dwError = GetLastError());
else if (dwInput != 0)
{
if (dwInput < sizeof(cbInput))
cbInput[dwInput] = '\0';
dwCount = dwInput;
dwInput = 0;
dwOutput = 0;
do
{
dwInOut = _byteswap_ulong(*(DWORD *) (cbInput + dwInput));
dwInput += 3;
cbOutput[dwOutput++] = szBase64[dwInOut >> 26];
cbOutput[dwOutput++] = szBase64[(dwInOut >> 20) & 63];
cbOutput[dwOutput++] = szBase64[(dwInOut >> 14) & 63];
cbOutput[dwOutput++] = szBase64[(dwInOut >> 8) & 63];
}
while (dwInput < dwCount);
for (dwInOut = dwOutput; dwInput > dwCount; dwCount++)
cbOutput[--dwInOut] = '=';
cbOutput[dwOutput++] = '\r';
cbOutput[dwOutput++] = '\n';
if (!WriteFile(hOutput, cbOutput, dwOutput, &dwCount, (LPOVERLAPPED) NULL))
PrintFormat(hError,
"WriteFile() returned error %lu\r\n",
dwError = GetLastError());
else if (dwCount != dwOutput)
PrintFormat(hError,
"WriteFile() failed, %lu of %lu characters written\r\n",
dwCount, dwOutput, dwError = ERROR_WRITE_FAULT);
else
continue;
}
// else
// dwError = ERROR_SUCCESS;
break;
}
if (!CloseHandle(hInput))
PrintFormat(hError,
"CloseHandle() returned error %lu\r\n",
GetLastError());
}
if (!CloseHandle(hOutput))
PrintFormat(hError,
"CloseHandle() returned error %lu\r\n",
GetLastError());
}
if (!CloseHandle(hError))
PrintFormat(hError,
"CloseHandle() returned error %lu\r\n",
GetLastError());
}
ExitProcess(dwError);
}
Run the following four command lines to compile the source file
64ENCODE.C
created in step 1., link the compiled
object file 64ENCODE.OBJ
and cleanup afterwards:
SET CL=/GAFS /Gy /O2isy /W4 /Zl SET LINK=/ENTRY:mainCRTStartup /LARGEADDRESSAWARE /NOCOFFGRPINFO /NODEFAULTLIB /OSVERSION:5.0 /RELEASE /SUBSYSTEM:CONSOLE /SWAPRUN:CD,NET /VERSION:0.815 CL.EXE /Fe64ENCODE.COM 64ENCODE.C KERNEL32.LIB USER32.LIB ERASE 64ENCODE.OBJFor 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. 64ENCODE.C 64ENCODE.C(49) : warning C4295: 'szBase64' : array is too small to include a terminating null character Microsoft (R) Incremental Linker Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. …
Create the text file 64ENCODE.TXT
with the following
content in an arbitrary, preferable empty directory:
4d 5a 90 00 01 00 00 00 04 00 00 00 ff ff 00 00 MZ..............
d0 00 00 00 43 00 00 00 40 00 00 00 00 00 00 00 ....C...@.......
00 00 00 00 19 57 04 27 00 00 00 00 00 00 00 00 .....W.'........
00 00 00 00 00 00 00 00 00 00 00 00 90 00 00 00 ................
28 43 29 6f 70 79 72 69 67 68 74 20 32 30 30 34 (C)opyright 2004
2d 32 30 32 34 2c 20 53 74 65 66 61 6e 20 4b 61 -2024, Stefan Ka
6e 74 68 61 6b 20 3c 73 74 65 66 61 6e 2e 6b 61 nthak <stefan.ka
6e 74 68 61 6b 40 6e 65 78 67 6f 2e 64 65 3e 0d nthak@nexgo.de>.
0a 07 24 0e 1f 33 d2 b4 09 cd 21 b8 01 4c cd 21 ..$..3....!..L.!
50 45 00 00 4c 01 02 00 56 4f 49 44 00 00 00 00 PE..L...VOID....
00 00 00 00 e0 00 23 0d 0b 01 0a 00 00 02 00 00 ......#.........
00 02 00 00 00 00 00 00 4e 10 00 00 00 10 00 00 ........N.......
00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 . ....@.........
05 00 00 00 00 00 2f 03 05 00 00 00 00 00 00 00 ....../.........
00 30 00 00 00 02 00 00 3d 89 00 00 03 00 00 85 .0......=.......
00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00 ................
00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 ................
28 21 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 (!..<...........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 20 00 00 20 00 00 00 ......... .. ...
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 2e 63 6f 64 65 00 00 00 .........code...
e3 01 00 00 00 10 00 00 00 02 00 00 00 02 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ..`
2e 63 6f 6e 73 74 00 00 f2 01 00 00 00 20 00 00 .const....... ..
00 02 00 00 00 04 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 40 00 00 40 00 00 00 00 00 00 00 00 ....@..@........
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
55 8b ec 81 ec 08 04 00 00 56 8d 45 10 50 ff 75 U........V.E.P.u
0c 8d 85 f8 fb ff ff 50 ff 15 18 20 40 00 8b f0 .......P... @...
85 f6 75 04 33 c0 eb 23 6a 00 8d 45 fc 50 56 8d ..u.3..#j..E.PV.
85 f8 fb ff ff 50 ff 75 08 ff 15 10 20 40 00 85 .....P.u.... @..
c0 74 e1 33 c0 39 75 fc 0f 94 c0 5e c9 c3 55 8d .t.3.9u....^..U.
6c 24 88 81 ec a0 00 00 00 53 56 8b 35 0c 20 40 l$.......SV.5. @
00 57 6a f4 33 db ff d6 8b f8 89 7d 70 83 ff ff .Wj.3......}p...
75 0d ff 15 08 20 40 00 8b d8 e9 3a 01 00 00 6a u.... @....:...j
f5 ff d6 89 45 64 83 f8 ff 75 10 ff 15 08 20 40 ....Ed...u.... @
00 8b d8 53 68 14 21 40 00 eb 1a 6a f6 ff d6 89 ...Sh.!@...j....
45 68 83 f8 ff 75 21 ff 15 08 20 40 00 8b d8 53 Eh...u!... @...S
68 00 21 40 00 68 d8 20 40 00 57 e8 40 ff ff ff h.!@.h. @.W.@...
83 c4 10 e9 f1 00 00 00 8b 3d 08 20 40 00 33 f6 .........=. @.3.
56 8d 45 6c 50 6a 39 8d 45 d8 50 ff 75 68 ff 15 V.ElPj9.E.P.uh..
04 20 40 00 85 c0 75 0b ff d7 83 f8 6d 0f 85 cd . @...u.....m...
00 00 00 8b 45 6c 3b c6 0f 84 bb 00 00 00 83 f8 ....El;.........
39 73 04 88 5c 05 d8 89 45 74 33 c9 8b 44 0d d8 9s..\...Et3..D..
0f c8 8b d0 c1 ea 1a 8a 92 20 20 40 00 88 54 35 ......... @..T5
14 8b d0 c1 ea 14 83 e2 3f 8a 92 20 20 40 00 88 ........?.. @..
54 35 15 8b d0 c1 ea 0e c1 e8 08 83 e2 3f 8a 92 T5...........?..
20 20 40 00 83 e0 3f 8a 80 20 20 40 00 88 54 35 @...?.. @..T5
16 83 c1 03 88 44 35 17 83 c6 04 3b 4d 74 72 ac .....D5....;Mtr.
89 4d 6c 76 11 2b 4d 74 8d 44 35 14 01 4d 74 48 .Mlv.+Mt.D5..MtH
49 c6 00 3d 75 f9 6a 00 8d 45 74 50 66 c7 44 35 I..=u.j..EtPf.D5
14 0d 0a 83 c6 02 56 8d 45 14 50 ff 75 64 ff 15 ......V.E.P.ud..
10 20 40 00 85 c0 74 34 39 75 74 0f 84 2d ff ff . @...t49ut..-..
ff 6a 1d 5b 53 56 ff 75 74 68 a4 20 40 00 ff 75 .j.[SV.uth. @..u
70 e8 4a fe ff ff 83 c4 14 53 ff 15 00 20 40 00 p.J......S... @.
ff d7 8b d8 53 68 84 20 40 00 eb 0a ff d7 8b d8 ....Sh. @.......
53 68 60 20 40 00 ff 75 70 e8 22 fe ff ff 83 c4 Sh` @..up.".....
0c eb d6 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
90 21 00 00 9e 21 00 00 aa 21 00 00 ba 21 00 00 .!...!...!...!..
84 21 00 00 00 00 00 00 d8 21 00 00 00 00 00 00 .!.......!......
41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 ABCDEFGHIJKLMNOP
51 52 53 54 55 56 57 58 59 5a 61 62 63 64 65 66 QRSTUVWXYZabcdef
67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 ghijklmnopqrstuv
77 78 79 7a 30 31 32 33 34 35 36 37 38 39 2b 2f wxyz0123456789+/
57 72 69 74 65 46 69 6c 65 28 29 20 72 65 74 75 WriteFile() retu
72 6e 65 64 20 65 72 72 6f 72 20 25 6c 75 0d 0a rned error %lu..
00 00 00 00 52 65 61 64 46 69 6c 65 28 29 20 72 ....ReadFile() r
65 74 75 72 6e 65 64 20 65 72 72 6f 72 20 25 6c eturned error %l
75 0d 0a 00 57 72 69 74 65 46 69 6c 65 28 29 20 u...WriteFile()
66 61 69 6c 65 64 2c 20 25 6c 75 20 6f 66 20 25 failed, %lu of %
6c 75 20 63 68 61 72 61 63 74 65 72 73 20 77 72 lu characters wr
69 74 74 65 6e 0d 0a 00 47 65 74 53 74 64 48 61 itten...GetStdHa
6e 64 6c 65 28 25 73 29 20 72 65 74 75 72 6e 65 ndle(%s) returne
64 20 65 72 72 6f 72 20 25 6c 75 0d 0a 00 00 00 d error %lu.....
53 54 44 5f 49 4e 50 55 54 5f 48 41 4e 44 4c 45 STD_INPUT_HANDLE
00 00 00 00 53 54 44 5f 4f 55 54 50 55 54 5f 48 ....STD_OUTPUT_H
41 4e 44 4c 45 00 00 00 64 21 00 00 00 00 00 00 ANDLE...d!......
00 00 00 00 ca 21 00 00 00 20 00 00 7c 21 00 00 .....!... ..|!..
00 00 00 00 00 00 00 00 e6 21 00 00 18 20 00 00 .........!... ..
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00 00 00 00 90 21 00 00 9e 21 00 00 aa 21 00 00 .....!...!...!..
ba 21 00 00 84 21 00 00 00 00 00 00 d8 21 00 00 .!...!.......!..
00 00 00 00 25 05 57 72 69 74 65 46 69 6c 65 00 ....%.WriteFile.
19 01 45 78 69 74 50 72 6f 63 65 73 73 00 c0 03 ..ExitProcess...
52 65 61 64 46 69 6c 65 00 00 02 02 47 65 74 4c ReadFile....GetL
61 73 74 45 72 72 6f 72 00 00 64 02 47 65 74 53 astError..d.GetS
74 64 48 61 6e 64 6c 65 00 00 4b 45 52 4e 45 4c tdHandle..KERNEL
33 32 2e 64 6c 6c 00 00 34 03 77 76 73 70 72 69 32.dll..4.wvspri
6e 74 66 41 00 00 55 53 45 52 33 32 2e 64 6c 6c ntfA..USER32.dll
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
Decode the dump file 64ENCODE.TXT
created in
step 3. to recreate the console application
Base64 Encoder:
CERTUTIL.EXE /DecodeHex /V 64ENCODE.TXT 64ENCODE.COM
Input Length = 6528 Output Length = 1536 CertUtil: -decodehex command completed successfully.
_alloca()
amd
_chkstk()
for memory allocations on the stack, to the functions
memcpy()
and
memset()
for assignment and initialisation of arrays and structures, to the
(almost) undocumented helper routines
_alldiv()
,
_alldvrm()
,
_allmul()
,
_allrem()
, _allshl()
and
_allshr()
for signed 64-bit integer arithmetic and
shift operations, to the also (almost) undocumented helper routines
_aulldiv()
,
_aulldvrm()
, _aullrem()
and
_aullshr()
for unsigned 64-bit integer arithmetic and
shift operations, and to the helper routines _CIacos()
,
_CIasin()
,
_CIatan()
,
_CIatan2()
,
_CIcos()
,
_CIcosh()
,
_CIexp()
,
_CIfmod()
,
_CIlog()
,
_CIlog10()
,
_CIpow()
,
_CIsin()
,
_CIsinh()
,
_CIsqrt()
,
_CItan()
,
_CItanh()
and
_ftol()
for floating-point arithmetic.
Additionally
...
memchr()
,
memcmp()
,
memcpy()
,
memmove()
,
memset()
,
...
strcat()
,
strcat_s()
,
strchr()
,
strcmp()
,
strcpy()
,
strcpy_s()
,
strcspn()
,
strlen()
,
strncat()
,
strncat_s()
,
strncmp()
,
strncpy()
,
strncpy_s()
,
strnlen()
,
strpbrk()
,
strrchr()
,
strspn()
,
strstr()
,
strtok_s()
,
strtol()
,
strtoul()
,
...
wcscat()
,
wcscat_s()
,
wcschr()
,
wcscmp()
,
wcscpy()
,
wcscpy_s()
,
wcscspn()
,
wcslen()
,
wcsncat()
,
wcsncat_s()
,
wcsncmp()
,
wcsncpy()
,
wcsncpy_s()
,
wcsnlen()
,
wcspbrk()
,
wcsrchr()
,
wcsspn()
,
wcsstr()
,
wcstol()
,
wcstoul()
,
...
available from
...
on MSDN.
...
Shipped in the MSVCRT libraries, for static linkage. ...
Exported from NTDLL.dll
, ...
...
Caveat: the routines for 64-bit integer arithmetic are but SLOW, and the trigonometric floating-point routines are MUCH less accurate than claimed by Intel in their Software Developer’s Manuals.
My article Fast(est) Double-Word Integer Division presents division routines that are 4 to 6 times faster and a (branch-free) multiplication routine that is 3 to 9 times faster!
MSC_I386.LIB
and cleanup afterwards:
LINK.EXE /LIB /DEF /EXPORT:_CIcos /EXPORT:_CIlog /EXPORT:_CIpow /EXPORT:_CIsin /EXPORT:_CIsqrt /EXPORT:_alldiv /EXPORT:_alldvrm /EXPORT:_allmul /EXPORT:_alloca_probe /EXPORT:_alloca_probe_8 /EXPORT:_alloca_probe_16 /EXPORT:_allrem /EXPORT:_allshl /EXPORT:_allshr /EXPORT:_aulldiv /EXPORT:_aulldvrm /EXPORT:_aullrem /EXPORT:_aullshr /EXPORT:_chkstk /EXPORT:_fltused /EXPORT:_ftol /EXPORT:memchr /EXPORT:memcmp /EXPORT:memcpy /EXPORT:memmove /EXPORT:memset /MACHINE:I386 /NAME:NTDLL /NODEFAULTLIB /OUT:MSC_I386.LIB ERASE MSC_I386.EXPNote: if necessary, see the MSDN article Use the Microsoft C++ toolset from the command line for an introduction. LIB Reference
Microsoft (R) Library Manager Version 10.00.40219.386 Copyright (C) Microsoft Corporation. All rights reserved. Creating library msc_i386.lib and object msc_i386.exp
MSC_I386.LIB
instead of or
before the
MSVCRT
libraries.
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.
as iswithout any warranty, neither express nor implied.
cookiesin the web browser.
The web service is operated and provided by
Telekom Deutschland GmbH 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):