mingw-5.1.4/win32/include/winnt.h
changeset 0 76b1f169d9fe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mingw-5.1.4/win32/include/winnt.h	Fri Apr 03 17:16:45 2009 +0100
@@ -0,0 +1,3929 @@
+#ifndef _WINNT_H
+#define _WINNT_H
+#if __GNUC__ >= 3
+#pragma GCC system_header
+#endif
+
+/* translate GCC target defines to MS equivalents. Keep this synchronized
+   with windows.h. */
+#if defined(__i686__) && !defined(_M_IX86)
+#define _M_IX86 600
+#elif defined(__i586__) && !defined(_M_IX86)
+#define _M_IX86 500
+#elif defined(__i486__) && !defined(_M_IX86)
+#define _M_IX86 400
+#elif defined(__i386__) && !defined(_M_IX86)
+#define _M_IX86 300
+#endif
+#if defined(_M_IX86) && !defined(_X86_)
+#define _X86_
+#elif defined(_M_ALPHA) && !defined(_ALPHA_)
+#define _ALPHA_
+#elif defined(_M_PPC) && !defined(_PPC_)
+#define _PPC_
+#elif defined(_M_MRX000) && !defined(_MIPS_)
+#define _MIPS_
+#elif defined(_M_M68K) && !defined(_68K_)
+#define _68K_
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <winerror.h>
+
+#ifndef RC_INVOKED
+#include <string.h>
+
+/* FIXME: add more architectures. Is there a way to specify this in GCC? */
+#ifdef _X86_
+#define UNALIGNED
+#else
+#define UNALIGNED
+#endif
+
+#ifndef DECLSPEC_ALIGN
+#ifdef __GNUC__
+#define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
+#else
+#define DECLSPEC_ALIGN(x)
+#endif
+#endif
+
+#ifndef DECLSPEC_SELECTANY
+#if (__GNUC__ >= 4)
+#define DECLSPEC_SELECTANY  __attribute__((selectany))
+#else
+#define DECLSPEC_SELECTANY
+#endif
+#endif
+
+#ifndef FORCEINLINE
+#if (__GNUC__ >= 3)
+#define FORCEINLINE __inline  __attribute__((always_inline))
+#else
+#define FORCEINLINE __inline
+#endif
+#endif
+
+#ifndef C_ASSERT
+#define C_ASSERT(expr) typedef char __C_ASSERT__[(expr)?1:-1]
+#endif
+
+#ifndef VOID
+#define VOID void
+#endif
+typedef char CHAR;
+typedef short SHORT;
+typedef long LONG;
+typedef char CCHAR, *PCCHAR;
+typedef unsigned char UCHAR,*PUCHAR;
+typedef unsigned short USHORT,*PUSHORT;
+typedef unsigned long ULONG,*PULONG;
+typedef char *PSZ;
+
+typedef void *PVOID,*LPVOID;
+
+/* FIXME for __WIN64 */
+#ifndef  __ptr64
+#define __ptr64
+#endif
+typedef void* __ptr64 PVOID64;
+
+#ifndef _WCHAR_T_DEFINED
+#define _WCHAR_T_DEFINED
+#ifndef _WCHAR_T_
+#define _WCHAR_T_
+#undef __need_wchar_t
+#ifndef __cplusplus
+typedef unsigned short wchar_t;
+#endif
+#endif
+#endif
+
+typedef wchar_t WCHAR;
+typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR;
+typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR;
+typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR;
+typedef CONST CHAR *LPCCH,*PCSTR,*LPCSTR;
+#ifndef _TCHAR_DEFINED
+#define _TCHAR_DEFINED
+#ifdef UNICODE
+/*
+ * NOTE: This tests UNICODE, which is different from the _UNICODE define
+ *       used to differentiate standard C runtime calls.
+ */
+typedef WCHAR TCHAR;
+typedef WCHAR _TCHAR;
+#else
+typedef CHAR TCHAR;
+typedef CHAR _TCHAR;
+#endif
+#endif
+typedef TCHAR TBYTE,*PTCH,*PTBYTE;
+typedef TCHAR *LPTCH,*PTSTR,*LPTSTR,*LP,*PTCHAR;
+typedef const TCHAR *LPCTSTR;
+#ifdef UNICODE
+/*
+ * __TEXT is a private macro whose specific use is to force the expansion of a
+ * macro passed as an argument to the macro TEXT.  DO NOT use this
+ * macro within your programs.  It's name and function could change without
+ * notice.
+ */
+#define __TEXT(q) L##q
+#else
+#define __TEXT(q) q
+#endif
+/*
+ * UNICODE a constant string when UNICODE is defined, else returns the string
+ * unmodified.
+ * The corresponding macros  _TEXT() and _T() for mapping _UNICODE strings
+ * passed to C runtime functions are defined in mingw/tchar.h
+ */
+#define TEXT(q) __TEXT(q)    
+typedef SHORT *PSHORT;
+typedef LONG *PLONG;
+#ifdef STRICT
+typedef void *HANDLE;
+#define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
+#else
+typedef PVOID HANDLE;
+#define DECLARE_HANDLE(n) typedef HANDLE n
+#endif
+typedef HANDLE *PHANDLE,*LPHANDLE;
+typedef DWORD LCID;
+typedef PDWORD PLCID;
+typedef WORD LANGID;
+#ifdef __GNUC__
+#define _HAVE_INT64
+#define _INTEGRAL_MAX_BITS 64
+#undef __int64
+#define __int64 long long
+#elif defined(__WATCOMC__) && (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64 )
+#define _HAVE_INT64
+#endif /* __GNUC__/__WATCOMC */
+#if defined(_HAVE_INT64) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)
+typedef __int64 LONGLONG;
+typedef unsigned __int64 DWORDLONG;
+#else
+typedef double LONGLONG,DWORDLONG;
+#endif
+typedef LONGLONG *PLONGLONG;
+typedef DWORDLONG *PDWORDLONG;
+typedef DWORDLONG ULONGLONG,*PULONGLONG;
+typedef LONGLONG USN;
+#ifdef _HAVE_INT64
+#define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b))
+#define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b))
+#define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b))
+#define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b))
+#define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
+#endif
+#define ANSI_NULL '\0'
+#define UNICODE_NULL L'\0'
+typedef BYTE BOOLEAN,*PBOOLEAN;
+#endif
+typedef BYTE FCHAR;
+typedef WORD FSHORT;
+typedef DWORD FLONG;
+
+#define NTAPI __stdcall
+#include <basetsd.h>
+#define ACE_OBJECT_TYPE_PRESENT           0x00000001
+#define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x00000002
+#define APPLICATION_ERROR_MASK       0x20000000
+#define ERROR_SEVERITY_SUCCESS       0x00000000
+#define ERROR_SEVERITY_INFORMATIONAL 0x40000000
+#define ERROR_SEVERITY_WARNING       0x80000000
+#define ERROR_SEVERITY_ERROR         0xC0000000
+/* also in ddk/ntifs.h */
+#define COMPRESSION_FORMAT_NONE         (0x0000)
+#define COMPRESSION_FORMAT_DEFAULT      (0x0001)
+#define COMPRESSION_FORMAT_LZNT1        (0x0002)
+#define COMPRESSION_ENGINE_STANDARD     (0x0000)
+#define COMPRESSION_ENGINE_MAXIMUM      (0x0100)
+#define COMPRESSION_ENGINE_HIBER        (0x0200)
+#define ACCESS_ALLOWED_ACE_TYPE         (0x0)
+#define ACCESS_DENIED_ACE_TYPE          (0x1)
+#define SYSTEM_AUDIT_ACE_TYPE           (0x2)
+#define SYSTEM_ALARM_ACE_TYPE           (0x3)
+/*end ntifs.h */
+#define ANYSIZE_ARRAY 1
+#define OBJECT_INHERIT_ACE	1
+#define CONTAINER_INHERIT_ACE	2
+#define NO_PROPAGATE_INHERIT_ACE	4
+#define INHERIT_ONLY_ACE	8
+#define INHERITED_ACE	16
+#define VALID_INHERIT_FLAGS \
+	| OBJECT_INHERIT_ACE \
+	| CONTAINER_INHERIT_ACE \
+	| NO_PROPAGATE_INHERIT_ACE \
+	| INHERIT_ONLY_ACE \
+	| INHERITED_ACE
+#define SUCCESSFUL_ACCESS_ACE_FLAG	64
+#define FAILED_ACCESS_ACE_FLAG	128
+#define DELETE	0x00010000L
+#define READ_CONTROL	0x20000L
+#define WRITE_DAC	0x40000L
+#define WRITE_OWNER	0x80000L
+#define SYNCHRONIZE	0x100000L
+#define STANDARD_RIGHTS_REQUIRED	0xF0000
+#define STANDARD_RIGHTS_READ	0x20000
+#define STANDARD_RIGHTS_WRITE	0x20000
+#define STANDARD_RIGHTS_EXECUTE	0x20000
+#define STANDARD_RIGHTS_ALL	0x1F0000
+#define SPECIFIC_RIGHTS_ALL	0xFFFF
+#define ACCESS_SYSTEM_SECURITY	0x1000000
+
+#define MAXIMUM_ALLOWED	0x2000000
+#define GENERIC_READ	0x80000000
+#define GENERIC_WRITE	0x40000000
+#define GENERIC_EXECUTE	0x20000000
+#define GENERIC_ALL	0x10000000
+
+#define INVALID_FILE_ATTRIBUTES	((DWORD)-1)
+
+/* Also in ddk/winddk.h */
+#define FILE_LIST_DIRECTORY		0x00000001
+#define FILE_READ_DATA			0x00000001
+#define FILE_ADD_FILE			0x00000002
+#define FILE_WRITE_DATA			0x00000002
+#define FILE_ADD_SUBDIRECTORY		0x00000004
+#define FILE_APPEND_DATA		0x00000004
+#define FILE_CREATE_PIPE_INSTANCE	0x00000004
+#define FILE_READ_EA			0x00000008
+#define FILE_READ_PROPERTIES		0x00000008
+#define FILE_WRITE_EA			0x00000010
+#define FILE_WRITE_PROPERTIES		0x00000010
+#define FILE_EXECUTE			0x00000020
+#define FILE_TRAVERSE			0x00000020
+#define FILE_DELETE_CHILD		0x00000040
+#define FILE_READ_ATTRIBUTES		0x00000080
+#define FILE_WRITE_ATTRIBUTES		0x00000100
+
+#define FILE_SHARE_READ			0x00000001
+#define FILE_SHARE_WRITE		0x00000002
+#define FILE_SHARE_DELETE		0x00000004
+#define FILE_SHARE_VALID_FLAGS		0x00000007
+			
+#define FILE_ATTRIBUTE_READONLY			0x00000001
+#define FILE_ATTRIBUTE_HIDDEN			0x00000002
+#define FILE_ATTRIBUTE_SYSTEM			0x00000004
+#define FILE_ATTRIBUTE_DIRECTORY		0x00000010
+#define FILE_ATTRIBUTE_ARCHIVE			0x00000020
+#define FILE_ATTRIBUTE_DEVICE			0x00000040
+#define FILE_ATTRIBUTE_NORMAL			0x00000080
+#define FILE_ATTRIBUTE_TEMPORARY		0x00000100
+#define FILE_ATTRIBUTE_SPARSE_FILE		0x00000200
+#define FILE_ATTRIBUTE_REPARSE_POINT		0x00000400
+#define FILE_ATTRIBUTE_COMPRESSED		0x00000800
+#define FILE_ATTRIBUTE_OFFLINE			0x00001000
+#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED	0x00002000
+#define FILE_ATTRIBUTE_ENCRYPTED		0x00004000
+#define FILE_ATTRIBUTE_VALID_FLAGS		0x00007fb7
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS		0x000031a7
+				
+#define FILE_COPY_STRUCTURED_STORAGE		0x00000041
+#define FILE_STRUCTURED_STORAGE			0x00000441
+			
+#define FILE_VALID_OPTION_FLAGS			0x00ffffff
+#define FILE_VALID_PIPE_OPTION_FLAGS		0x00000032
+#define FILE_VALID_MAILSLOT_OPTION_FLAGS	0x00000032
+#define FILE_VALID_SET_FLAGS			0x00000036
+			
+#define FILE_SUPERSEDE			0x00000000
+#define FILE_OPEN			0x00000001
+#define FILE_CREATE			0x00000002
+#define FILE_OPEN_IF			0x00000003
+#define FILE_OVERWRITE			0x00000004
+#define FILE_OVERWRITE_IF		0x00000005
+#define FILE_MAXIMUM_DISPOSITION	0x00000005
+			
+#define FILE_DIRECTORY_FILE		0x00000001
+#define FILE_WRITE_THROUGH		0x00000002
+#define FILE_SEQUENTIAL_ONLY		0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING	0x00000008
+#define FILE_SYNCHRONOUS_IO_ALERT	0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT	0x00000020
+#define FILE_NON_DIRECTORY_FILE		0x00000040
+#define FILE_CREATE_TREE_CONNECTION	0x00000080
+#define FILE_COMPLETE_IF_OPLOCKED	0x00000100
+#define FILE_NO_EA_KNOWLEDGE		0x00000200
+#define FILE_OPEN_FOR_RECOVERY		0x00000400
+#define FILE_RANDOM_ACCESS		0x00000800
+#define FILE_DELETE_ON_CLOSE		0x00001000
+#define FILE_OPEN_BY_FILE_ID		0x00002000
+#define FILE_OPEN_FOR_BACKUP_INTENT	0x00004000
+#define FILE_NO_COMPRESSION		0x00008000
+#define FILE_RESERVE_OPFILTER		0x00100000
+#define FILE_OPEN_REPARSE_POINT		0x00200000
+#define FILE_OPEN_NO_RECALL		0x00400000
+#define FILE_OPEN_FOR_FREE_SPACE_QUERY	0x00800000
+
+#define FILE_ALL_ACCESS \
+  (STANDARD_RIGHTS_REQUIRED | \
+   SYNCHRONIZE | \
+   0x1FF)
+
+#define FILE_GENERIC_EXECUTE \
+  (STANDARD_RIGHTS_EXECUTE | \
+   FILE_READ_ATTRIBUTES | \
+   FILE_EXECUTE | \
+   SYNCHRONIZE)
+
+#define FILE_GENERIC_READ \
+  (STANDARD_RIGHTS_READ | \
+   FILE_READ_DATA | \
+   FILE_READ_ATTRIBUTES | \
+   FILE_READ_EA | \
+   SYNCHRONIZE)
+
+#define FILE_GENERIC_WRITE \
+  (STANDARD_RIGHTS_WRITE | \
+   FILE_WRITE_DATA | \
+   FILE_WRITE_ATTRIBUTES | \
+   FILE_WRITE_EA | \
+   FILE_APPEND_DATA | \
+   SYNCHRONIZE)
+/* end winddk.h */
+/* also in ddk/ntifs.h */
+#define FILE_NOTIFY_CHANGE_FILE_NAME	0x00000001
+#define FILE_NOTIFY_CHANGE_DIR_NAME	0x00000002
+#define FILE_NOTIFY_CHANGE_NAME		0x00000003
+#define FILE_NOTIFY_CHANGE_ATTRIBUTES	0x00000004
+#define FILE_NOTIFY_CHANGE_SIZE		0x00000008
+#define FILE_NOTIFY_CHANGE_LAST_WRITE	0x00000010
+#define FILE_NOTIFY_CHANGE_LAST_ACCESS	0x00000020
+#define FILE_NOTIFY_CHANGE_CREATION	0x00000040
+#define FILE_NOTIFY_CHANGE_EA		0x00000080
+#define FILE_NOTIFY_CHANGE_SECURITY	0x00000100
+#define FILE_NOTIFY_CHANGE_STREAM_NAME	0x00000200
+#define FILE_NOTIFY_CHANGE_STREAM_SIZE	0x00000400
+#define FILE_NOTIFY_CHANGE_STREAM_WRITE	0x00000800
+#define FILE_NOTIFY_VALID_MASK		0x00000fff
+
+#define FILE_CASE_SENSITIVE_SEARCH      0x00000001
+#define FILE_CASE_PRESERVED_NAMES       0x00000002
+#define FILE_UNICODE_ON_DISK            0x00000004
+#define FILE_PERSISTENT_ACLS            0x00000008
+#define FILE_FILE_COMPRESSION           0x00000010
+#define FILE_VOLUME_QUOTAS              0x00000020
+#define FILE_SUPPORTS_SPARSE_FILES      0x00000040
+#define FILE_SUPPORTS_REPARSE_POINTS    0x00000080
+#define FILE_SUPPORTS_REMOTE_STORAGE    0x00000100
+#define FS_LFN_APIS                     0x00004000
+#define FILE_VOLUME_IS_COMPRESSED       0x00008000
+#define FILE_SUPPORTS_OBJECT_IDS        0x00010000
+#define FILE_SUPPORTS_ENCRYPTION        0x00020000
+#define FILE_NAMED_STREAMS              0x00040000
+#define FILE_READ_ONLY_VOLUME           0x00080000
+
+#define IO_COMPLETION_QUERY_STATE       0x0001
+#define IO_COMPLETION_MODIFY_STATE      0x0002
+#define IO_COMPLETION_ALL_ACCESS        (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
+/* end ntifs.h */
+
+/* also in ddk/winddk.h */
+#define DUPLICATE_CLOSE_SOURCE		0x00000001
+#define DUPLICATE_SAME_ACCESS		0x00000002
+#define DUPLICATE_SAME_ATTRIBUTES	0x00000004
+/* end winddk.k */
+
+#define MAILSLOT_NO_MESSAGE	((DWORD)-1)
+#define MAILSLOT_WAIT_FOREVER	((DWORD)-1)
+#define PROCESS_TERMINATE	1
+#define PROCESS_CREATE_THREAD	2
+#define PROCESS_SET_SESSIONID	4
+#define PROCESS_VM_OPERATION	8
+#define PROCESS_VM_READ	16
+#define PROCESS_VM_WRITE	32
+#define PROCESS_DUP_HANDLE	64
+#define PROCESS_CREATE_PROCESS	128
+#define PROCESS_SET_QUOTA	256
+#define PROCESS_SET_INFORMATION	512
+#define PROCESS_QUERY_INFORMATION	1024
+#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xFFF)
+#define THREAD_TERMINATE	1
+#define THREAD_SUSPEND_RESUME	2
+#define THREAD_GET_CONTEXT	8
+#define THREAD_SET_CONTEXT	16
+#define THREAD_SET_INFORMATION	32
+#define THREAD_QUERY_INFORMATION	64
+#define THREAD_SET_THREAD_TOKEN	128
+#define THREAD_IMPERSONATE	256
+#define THREAD_DIRECT_IMPERSONATION	0x200
+#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3FF)
+#define THREAD_BASE_PRIORITY_LOWRT	15
+#define THREAD_BASE_PRIORITY_MAX	2
+#define THREAD_BASE_PRIORITY_MIN	(-2)
+#define THREAD_BASE_PRIORITY_IDLE	(-15)
+#define EXCEPTION_NONCONTINUABLE	1
+#define EXCEPTION_MAXIMUM_PARAMETERS 15
+#define MUTANT_QUERY_STATE	0x0001
+#define MUTANT_ALL_ACCESS	(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
+#define TIMER_QUERY_STATE	0x0001
+#define TIMER_MODIFY_STATE	0x0002
+#define TIMER_ALL_ACCESS	(STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
+/*
+ * To prevent gcc compiler warnings, bracket these defines when initialising
+ * a  SID_IDENTIFIER_AUTHORITY, eg.
+ * SID_IDENTIFIER_AUTHORITY aNullSidAuthority = {SECURITY_NULL_SID_AUTHORITY};
+ */
+#define SECURITY_NULL_SID_AUTHORITY	{0,0,0,0,0,0}
+#define SECURITY_WORLD_SID_AUTHORITY	{0,0,0,0,0,1}
+#define SECURITY_LOCAL_SID_AUTHORITY	{0,0,0,0,0,2}
+#define SECURITY_CREATOR_SID_AUTHORITY	{0,0,0,0,0,3}
+#define SECURITY_NON_UNIQUE_AUTHORITY	{0,0,0,0,0,4}
+#define SECURITY_NT_AUTHORITY	{0,0,0,0,0,5}
+#define SECURITY_NULL_RID	0
+#define SECURITY_WORLD_RID	(0x00000000L)
+#define SECURITY_LOCAL_RID	0
+#define SECURITY_CREATOR_OWNER_RID	0
+#define SECURITY_CREATOR_GROUP_RID	1
+#define SECURITY_DIALUP_RID	1
+#define SECURITY_NETWORK_RID	2
+#define SECURITY_BATCH_RID	3
+#define SECURITY_INTERACTIVE_RID	4
+#define SECURITY_LOGON_IDS_RID	5
+#define SECURITY_SERVICE_RID	6
+#define SECURITY_LOCAL_SYSTEM_RID	18
+#define SECURITY_BUILTIN_DOMAIN_RID   32
+#define SECURITY_PRINCIPAL_SELF_RID   10
+#define SECURITY_CREATOR_OWNER_SERVER_RID 0x2
+#define SECURITY_CREATOR_GROUP_SERVER_RID 0x3
+#define SECURITY_LOGON_IDS_RID_COUNT 0x3
+#define SECURITY_ANONYMOUS_LOGON_RID 0x7
+#define SECURITY_PROXY_RID 0x8
+#define SECURITY_ENTERPRISE_CONTROLLERS_RID 0x9
+#define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
+#define SECURITY_AUTHENTICATED_USER_RID 0xB
+#define SECURITY_RESTRICTED_CODE_RID 0xC
+#define SECURITY_NT_NON_UNIQUE_RID 0x15
+#define SID_REVISION 1
+#define DOMAIN_USER_RID_ADMIN 0x1F4L
+#define DOMAIN_USER_RID_GUEST 0x1F5L
+#define DOMAIN_GROUP_RID_ADMINS	0x200L
+#define DOMAIN_GROUP_RID_USERS	0x201L
+#define DOMAIN_ALIAS_RID_ADMINS	0x220L
+#define DOMAIN_ALIAS_RID_USERS	0x221L
+#define DOMAIN_ALIAS_RID_GUESTS	0x222L
+#define DOMAIN_ALIAS_RID_POWER_USERS	0x223L
+#define DOMAIN_ALIAS_RID_ACCOUNT_OPS	0x224L
+#define DOMAIN_ALIAS_RID_SYSTEM_OPS	0x225L
+#define DOMAIN_ALIAS_RID_PRINT_OPS	0x226L
+#define DOMAIN_ALIAS_RID_BACKUP_OPS	0x227L
+#define DOMAIN_ALIAS_RID_REPLICATOR	0x228L
+#define SE_CREATE_TOKEN_NAME	TEXT("SeCreateTokenPrivilege")
+#define SE_ASSIGNPRIMARYTOKEN_NAME	TEXT("SeAssignPrimaryTokenPrivilege")
+#define SE_LOCK_MEMORY_NAME	TEXT("SeLockMemoryPrivilege")
+#define SE_INCREASE_QUOTA_NAME	TEXT("SeIncreaseQuotaPrivilege")
+#define SE_UNSOLICITED_INPUT_NAME	TEXT("SeUnsolicitedInputPrivilege")
+#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
+#define SE_TCB_NAME	TEXT("SeTcbPrivilege")
+#define SE_SECURITY_NAME	TEXT("SeSecurityPrivilege")
+#define SE_TAKE_OWNERSHIP_NAME	TEXT("SeTakeOwnershipPrivilege")
+#define SE_LOAD_DRIVER_NAME	TEXT("SeLoadDriverPrivilege")
+#define SE_SYSTEM_PROFILE_NAME	TEXT("SeSystemProfilePrivilege")
+#define SE_SYSTEMTIME_NAME	TEXT("SeSystemtimePrivilege")
+#define SE_PROF_SINGLE_PROCESS_NAME	TEXT("SeProfileSingleProcessPrivilege")
+#define SE_INC_BASE_PRIORITY_NAME	TEXT("SeIncreaseBasePriorityPrivilege")
+#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
+#define SE_CREATE_PERMANENT_NAME	TEXT("SeCreatePermanentPrivilege")
+#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
+#define SE_RESTORE_NAME	TEXT("SeRestorePrivilege")
+#define SE_SHUTDOWN_NAME	TEXT("SeShutdownPrivilege")
+#define SE_DEBUG_NAME	TEXT("SeDebugPrivilege")
+#define SE_AUDIT_NAME	TEXT("SeAuditPrivilege")
+#define SE_SYSTEM_ENVIRONMENT_NAME	TEXT("SeSystemEnvironmentPrivilege")
+#define SE_CHANGE_NOTIFY_NAME	TEXT("SeChangeNotifyPrivilege")
+#define SE_REMOTE_SHUTDOWN_NAME	TEXT("SeRemoteShutdownPrivilege")
+#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
+#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
+#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
+#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
+#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
+#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
+#define SE_TRUSTED_CREDMAN_ACCESS_NAME	TEXT("SeTrustedCredManAccessPrivilege")
+#define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")
+#define SE_INCREASE_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")
+#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
+#define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")
+#define SE_GROUP_MANDATORY 1
+#define SE_GROUP_ENABLED_BY_DEFAULT 2
+#define SE_GROUP_ENABLED 4
+#define SE_GROUP_OWNER 8
+#define SE_GROUP_USE_FOR_DENY_ONLY 16
+#define SE_GROUP_LOGON_ID 3221225472U
+#define SE_GROUP_RESOURCE 536870912
+#define LANG_NEUTRAL	0x00
+#define LANG_ARABIC 	0x01
+#define LANG_BULGARIAN 	0x02
+#define LANG_CATALAN 	0x03
+#define LANG_CHINESE	0x04
+#define LANG_CZECH	0x05
+#define LANG_DANISH	0x06
+#define LANG_GERMAN	0x07
+#define LANG_GREEK	0x08
+#define LANG_ENGLISH	0x09
+#define LANG_SPANISH	0x0a
+#define LANG_FINNISH	0x0b
+#define LANG_FRENCH	0x0c
+#define LANG_HEBREW	0x0d
+#define LANG_HUNGARIAN	0x0e
+#define LANG_ICELANDIC	0x0f
+#define LANG_ITALIAN	0x10
+#define LANG_JAPANESE	0x11
+#define LANG_KOREAN	0x12
+#define LANG_DUTCH	0x13
+#define LANG_NORWEGIAN	0x14
+#define LANG_POLISH	0x15
+#define LANG_PORTUGUESE	0x16
+#define LANG_ROMANIAN	0x18
+#define LANG_RUSSIAN	0x19
+#define LANG_CROATIAN	0x1a
+#define LANG_SERBIAN	0x1a
+#define LANG_SERBIAN_NEUTRAL 0x7c1a
+#define LANG_BOSNIAN	0x1a
+#define LANG_BOSNIAN_NEUTRAL 0x781a
+#define LANG_SLOVAK	0x1b
+#define LANG_ALBANIAN	0x1c
+#define LANG_SWEDISH	0x1d
+#define LANG_THAI	0x1e
+#define LANG_TURKISH	0x1f
+#define LANG_URDU	0x20
+#define LANG_INDONESIAN	0x21
+#define LANG_UKRAINIAN	0x22
+#define LANG_BELARUSIAN	0x23
+#define LANG_SLOVENIAN	0x24
+#define LANG_ESTONIAN	0x25
+#define LANG_LATVIAN	0x26
+#define LANG_LITHUANIAN	0x27
+#define LANG_PERSIAN    0x29
+#define LANG_FARSI	LANG_PERSIAN
+#define LANG_VIETNAMESE	0x2a
+#define LANG_ARMENIAN	0x2b
+#define LANG_AZERI	0x2c
+#define LANG_BASQUE	0x2d
+#define LANG_LOWER_SORBIAN	0x2e
+#define LANG_UPPER_SORBIAN	0x2e
+#define LANG_MACEDONIAN	0x2f
+#define LANG_TSWANA	0x32
+#define LANG_XHOSA	0x34
+#define LANG_ZULU	0x35
+#define LANG_AFRIKAANS	0x36
+#define LANG_GEORGIAN	0x37
+#define LANG_FAEROESE	0x38
+#define LANG_HINDI	0x39
+#define LANG_MALTESE	0x3a
+#define LANG_SAMI	0x3b
+#define LANG_IRISH	0x3c
+#define LANG_MALAY	0x3e
+#define LANG_KAZAK	0x3f
+#define LANG_KYRGYZ	0x40
+#define LANG_SWAHILI	0x41
+#define LANG_UZBEK	0x43
+#define LANG_TATAR	0x44
+#define LANG_BENGALI	0x45
+#define LANG_PUNJABI	0x46
+#define LANG_GUJARATI	0x47
+#define LANG_ORIYA	0x48
+#define LANG_TAMIL	0x49
+#define LANG_TELUGU	0x4a
+#define LANG_KANNADA	0x4b
+#define LANG_MALAYALAM	0x4c
+#define LANG_ASSAMESE	0x4d
+#define LANG_MARATHI	0x4e
+#define LANG_SANSKRIT	0x4f
+#define LANG_MONGOLIAN	0x50
+#define LANG_TIBETAN	0x51
+#define LANG_WELSH	0x52
+#define LANG_KHMER	0x53
+#define LANG_LAO	0x54
+#define LANG_GALICIAN	0x56
+#define LANG_KONKANI	0x57
+#define LANG_MANIPURI	0x58
+#define LANG_SINDHI	0x59
+#define LANG_SYRIAC	0x5a
+#define LANG_SINHALESE	0x5b
+#define LANG_INUKTITUT	0x5d
+#define LANG_AMHARIC	0x5e
+#define LANG_TAMAZIGHT	0x5f
+#define LANG_KASHMIRI	0x60
+#define LANG_NEPALI	0x61
+#define LANG_FRISIAN	0x62
+#define LANG_PASHTO	0x63
+#define LANG_FILIPINO	0x64
+#define LANG_DIVEHI	0x65
+#define LANG_HAUSA	0x68
+#define LANG_YORUBA	0x6a
+#define LANG_QUECHUA	0x6b
+#define LANG_SOTHO	0x6c
+#define LANG_BASHKIR	0x6d
+#define LANG_LUXEMBOURGISH	0x6e
+#define LANG_GREENLANDIC	0x6f
+#define LANG_IGBO	0x70
+#define LANG_TIGRIGNA	0x73
+#define LANG_YI	0x78
+#define LANG_MAPUDUNGUN	0x7a
+#define LANG_MOHAWK	0x7c
+#define LANG_BRETON	0x7e
+#define LANG_INVARIANT	0x7f
+#define LANG_UIGHUR	0x80
+#define LANG_MAORI	0x81
+#define LANG_OCCITAN	0x82
+#define LANG_CORSICAN	0x83
+#define LANG_ALSATIAN	0x84
+#define LANG_YAKUT	0x85
+#define LANG_KICHE	0x86
+#define LANG_KINYARWANDA	0x87
+#define LANG_WOLOF	0x88
+#define LANG_DARI	0x8c
+#define LANG_MALAGASY	0x8d
+#define SUBLANG_NEUTRAL	0x00
+#define SUBLANG_DEFAULT	0x01
+#define SUBLANG_SYS_DEFAULT	0x02
+#define SUBLANG_CUSTOM_DEFAULT	0x03
+#define SUBLANG_CUSTOM_UNSPECIFIED	0x04
+#define SUBLANG_UI_CUSTOM_DEFAULT	0x03
+#define SUBLANG_AFRIKAANS_SOUTH_AFRICA	0x01
+#define SUBLANG_ALBANIAN_ALBANIA	0x01
+#define SUBLANG_ALSATIAN_FRANCE	0x01
+#define SUBLANG_AMHARIC_ETHIOPIA	0x01
+#define SUBLANG_ARABIC_SAUDI_ARABIA	0x01
+#define SUBLANG_ARABIC_IRAQ	0x02
+#define SUBLANG_ARABIC_EGYPT	0x03
+#define SUBLANG_ARABIC_LIBYA	0x04
+#define SUBLANG_ARABIC_ALGERIA	0x05
+#define SUBLANG_ARABIC_MOROCCO	0x06
+#define SUBLANG_ARABIC_TUNISIA	0x07
+#define SUBLANG_ARABIC_OMAN	0x08
+#define SUBLANG_ARABIC_YEMEN	0x09
+#define SUBLANG_ARABIC_SYRIA	0x0a
+#define SUBLANG_ARABIC_JORDAN	0x0b
+#define SUBLANG_ARABIC_LEBANON	0x0c
+#define SUBLANG_ARABIC_KUWAIT	0x0d
+#define SUBLANG_ARABIC_UAE	0x0e
+#define SUBLANG_ARABIC_BAHRAIN	0x0f
+#define SUBLANG_ARABIC_QATAR	0x10
+#define SUBLANG_ARMENIAN_ARMENIA	0x01
+#define SUBLANG_ASSAMESE_INDIA	0x01
+#define SUBLANG_AZERI_LATIN	0x01
+#define SUBLANG_AZERI_CYRILLIC	0x02
+#define SUBLANG_BASHKIR_RUSSIA	0x01
+#define SUBLANG_BASQUE_BASQUE	0x01
+#define SUBLANG_BELARUSIAN_BELARUS	0x01
+#define SUBLANG_BENGALI_INDIA	0x01
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN	0x05
+#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC	0x08
+#define SUBLANG_BRETON_FRANCE	0x01
+#define SUBLANG_BULGARIAN_BULGARIA	0x01
+#define SUBLANG_CATALAN_CATALAN	0x01
+#define SUBLANG_CHINESE_TRADITIONAL	0x01
+#define SUBLANG_CHINESE_SIMPLIFIED	0x02
+#define SUBLANG_CHINESE_HONGKONG	0x03
+#define SUBLANG_CHINESE_SINGAPORE	0x04
+#define SUBLANG_CHINESE_MACAU	0x05
+#define SUBLANG_CORSICAN_FRANCE	0x01
+#define SUBLANG_CZECH_CZECH_REPUBLIC	0x01
+#define SUBLANG_CROATIAN_CROATIA	0x01
+#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN	0x04
+#define SUBLANG_DANISH_DENMARK	0x01
+#define SUBLANG_DIVEHI_MALDIVES	0x01
+#define SUBLANG_DUTCH	0x01
+#define SUBLANG_DUTCH_BELGIAN	0x02
+#define SUBLANG_ENGLISH_US	0x01
+#define SUBLANG_ENGLISH_UK	0x02
+#define SUBLANG_ENGLISH_AUS	0x03
+#define SUBLANG_ENGLISH_CAN	0x04
+#define SUBLANG_ENGLISH_NZ	0x05
+#if (WINVER >= 0x0600)
+#define SUBLANG_ENGLISH_IRELAND	0x06
+#endif
+#define SUBLANG_ENGLISH_EIRE	0x06
+#define SUBLANG_ENGLISH_SOUTH_AFRICA	0x07
+#define SUBLANG_ENGLISH_JAMAICA	0x08
+#define SUBLANG_ENGLISH_CARIBBEAN	0x09
+#define SUBLANG_ENGLISH_BELIZE	0x0a
+#define SUBLANG_ENGLISH_TRINIDAD	0x0b
+#define SUBLANG_ENGLISH_ZIMBABWE	0x0c
+#define SUBLANG_ENGLISH_PHILIPPINES	0x0d
+#define SUBLANG_ENGLISH_INDIA	0x10
+#define SUBLANG_ENGLISH_MALAYSIA	0x11
+#define SUBLANG_ENGLISH_SINGAPORE	0x12
+#define SUBLANG_ESTONIAN_ESTONIA	0x01
+#define SUBLANG_FAEROESE_FAROE_ISLANDS	0x01
+#define SUBLANG_FILIPINO_PHILIPPINES	0x01
+#define SUBLANG_FINNISH_FINLAND	0x01
+#define SUBLANG_FRENCH	0x01
+#define SUBLANG_FRENCH_BELGIAN	0x02
+#define SUBLANG_FRENCH_CANADIAN	0x03
+#define SUBLANG_FRENCH_SWISS	0x04
+#define SUBLANG_FRENCH_LUXEMBOURG	0x05
+#define SUBLANG_FRENCH_MONACO	0x06
+#define SUBLANG_FRISIAN_NETHERLANDS	0x01
+#define SUBLANG_GALICIAN_GALICIAN	0x01
+#define SUBLANG_GEORGIAN_GEORGIA	0x01
+#define SUBLANG_GERMAN	0x01
+#define SUBLANG_GERMAN_SWISS	0x02
+#define SUBLANG_GERMAN_AUSTRIAN	0x03
+#define SUBLANG_GERMAN_LUXEMBOURG	0x04
+#define SUBLANG_GERMAN_LIECHTENSTEIN	0x05
+#define SUBLANG_GREEK_GREECE	0x01
+#define SUBLANG_GREENLANDIC_GREENLAND	0x01
+#define SUBLANG_GUJARATI_INDIA	0x01
+#define SUBLANG_HAUSA_NIGERIA	0x01
+#define SUBLANG_HEBREW_ISRAEL	0x01
+#define SUBLANG_HINDI_INDIA	0x01
+#define SUBLANG_HUNGARIAN_HUNGARY	0x01
+#define SUBLANG_ICELANDIC_ICELAND	0x01
+#define SUBLANG_IGBO_NIGERIA	0x01
+#define SUBLANG_INDONESIAN_INDONESIA	0x01
+#define SUBLANG_INUKTITUT_CANADA	0x01
+#define SUBLANG_INUKTITUT_CANADA_LATIN	0x01
+#define SUBLANG_IRISH_IRELAND	0x01
+#define SUBLANG_ITALIAN	0x01
+#define SUBLANG_ITALIAN_SWISS	0x02
+#define SUBLANG_JAPANESE_JAPAN	0x01
+#define SUBLANG_KASHMIRI_INDIA	0x02
+#define SUBLANG_KASHMIRI_SASIA	0x02
+#define SUBLANG_KAZAK_KAZAKHSTAN	0x01
+#define SUBLANG_KHMER_CAMBODIA	0x01
+#define SUBLANG_KICHE_GUATEMALA	0x01
+#define SUBLANG_KINYARWANDA_RWANDA	0x01
+#define SUBLANG_KONKANI_INDIA	0x01
+#define SUBLANG_KOREAN	0x01
+#define SUBLANG_KYRGYZ_KYRGYZSTAN	0x01
+#define SUBLANG_LAO_LAO_PDR	0x01
+#define SUBLANG_LATVIAN_LATVIA	0x01
+#if (WINVER >= 0x0600)
+#define SUBLANG_LITHUANIAN_LITHUANIA	0x01
+#endif
+#define SUBLANG_LITHUANIAN	0x01
+#define SUBLANG_LOWER_SORBIAN_GERMANY	0x01
+#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG	0x01
+#define SUBLANG_MACEDONIAN_MACEDONIA	0x01
+#define SUBLANG_MALAY_MALAYSIA	0x01
+#define SUBLANG_MALAY_BRUNEI_DARUSSALAM	0x02
+#define SUBLANG_MALAYALAM_INDIA	0x01
+#define SUBLANG_MALTESE_MALTA	0x01
+#define SUBLANG_MAORI_NEW_ZEALAND	0x01
+#define SUBLANG_MAPUDUNGUN_CHILE	0x01
+#define SUBLANG_MARATHI_INDIA	0x01
+#define SUBLANG_MOHAWK_MOHAWK	0x01
+#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA	0x01
+#define SUBLANG_MONGOLIAN_PRC	0x02
+#define SUBLANG_NEPALI_NEPAL	0x01
+#define SUBLANG_NEPALI_INDIA	0x02
+#define SUBLANG_NORWEGIAN_BOKMAL	0x01
+#define SUBLANG_NORWEGIAN_NYNORSK	0x02
+#define SUBLANG_OCCITAN_FRANCE	0x01
+#define SUBLANG_ORIYA_INDIA	0x01
+#define SUBLANG_PASHTO_AFGHANISTAN	0x01
+#define SUBLANG_PERSIAN_IRAN	0x01
+#define SUBLANG_POLISH_POLAND	0x01
+#define SUBLANG_PORTUGUESE_BRAZILIAN	0x01
+#if (WINVER >= 0x0600)
+#define SUBLANG_PORTUGUESE_PORTUGAL	0x02
+#endif
+#define SUBLANG_PORTUGUESE	0x02
+#define SUBLANG_PUNJABI_INDIA	0x01
+#define SUBLANG_QUECHUA_BOLIVIA	0x01
+#define SUBLANG_QUECHUA_ECUADOR	0x02
+#define SUBLANG_QUECHUA_PERU	0x03
+#define SUBLANG_ROMANIAN_ROMANIA	0x01
+#define SUBLANG_ROMANSH_SWITZERLAND	0x01
+#define SUBLANG_RUSSIAN_RUSSIA	0x01
+#define SUBLANG_SAMI_NORTHERN_NORWAY	0x01
+#define SUBLANG_SAMI_NORTHERN_SWEDEN	0x02
+#define SUBLANG_SAMI_NORTHERN_FINLAND	0x03
+#define SUBLANG_SAMI_LULE_NORWAY	0x04
+#define SUBLANG_SAMI_LULE_SWEDEN	0x05
+#define SUBLANG_SAMI_SOUTHERN_NORWAY	0x06
+#define SUBLANG_SAMI_SOUTHERN_SWEDEN	0x07
+#define SUBLANG_SAMI_SKOLT_FINLAND	0x03
+#define SUBLANG_SAMI_INARI_FINLAND	0x03
+#define SUBLANG_SANSKRIT_INDIA	0x01
+#define SUBLANG_SERBIAN_LATIN	0x02
+#define SUBLANG_SERBIAN_CYRILLIC	0x03
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN	0x06
+#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC	0x07
+#define SUBLANG_SINDHI_AFGHANISTAN	0x02
+#define SUBLANG_SINHALESE_SRI_LANKA	0x01
+#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA	0x01
+#define SUBLANG_SLOVAK_SLOVAKIA	0x01
+#define SUBLANG_SLOVENIAN_SLOVENIA	0x01
+#define SUBLANG_SPANISH	0x01
+#define SUBLANG_SPANISH_MEXICAN	0x02
+#define SUBLANG_SPANISH_MODERN	0x03
+#define SUBLANG_SPANISH_GUATEMALA	0x04
+#define SUBLANG_SPANISH_COSTA_RICA	0x05
+#define SUBLANG_SPANISH_PANAMA	0x06
+#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC	0x07
+#define SUBLANG_SPANISH_VENEZUELA	0x08
+#define SUBLANG_SPANISH_COLOMBIA	0x09
+#define SUBLANG_SPANISH_PERU	0x0a
+#define SUBLANG_SPANISH_ARGENTINA	0x0b
+#define SUBLANG_SPANISH_ECUADOR	0x0c
+#define SUBLANG_SPANISH_CHILE	0x0d
+#define SUBLANG_SPANISH_URUGUAY	0x0e
+#define SUBLANG_SPANISH_PARAGUAY	0x0f
+#define SUBLANG_SPANISH_BOLIVIA	0x10
+#define SUBLANG_SPANISH_EL_SALVADOR	0x11
+#define SUBLANG_SPANISH_HONDURAS	0x12
+#define SUBLANG_SPANISH_NICARAGUA	0x13
+#define SUBLANG_SPANISH_PUERTO_RICO	0x14
+#define SUBLANG_SPANISH_US	0x15
+#if (WINVER >= 0x0600)
+#define SUBLANG_SWEDISH_SWEDEN	0x01
+#endif
+#define SUBLANG_SWEDISH	0x01
+#define SUBLANG_SWEDISH_FINLAND	0x02
+#define SUBLANG_SYRIAC	0x01
+#define SUBLANG_TAJIK_TAJIKISTAN	0x01
+#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN	0x02
+#define SUBLANG_TAMIL_INDIA	0x01
+#define SUBLANG_TATAR_RUSSIA	0x01
+#define SUBLANG_TELUGU_INDIA	0x01
+#define SUBLANG_THAI_THAILAND	0x01
+#define SUBLANG_TIBETAN_PRC	0x01
+#define SUBLANG_TIBETAN_BHUTAN	0x01
+#define SUBLANG_TIGRIGNA_ERITREA	0x01
+#define SUBLANG_TSWANA_SOUTH_AFRICA	0x01
+#define SUBLANG_TURKISH_TURKEY	0x01
+#define SUBLANG_TURKMEN_TURKMENISTAN	0x01
+#define SUBLANG_UIGHUR_PRC	0x01
+#define SUBLANG_UKRAINIAN_UKRAINE	0x01
+#define SUBLANG_UPPER_SORBIAN_GERMANY	0x01
+#define SUBLANG_URDU_PAKISTAN	0x01
+#define SUBLANG_URDU_INDIA	0x02
+#define SUBLANG_UZBEK_LATIN	0x01
+#define SUBLANG_UZBEK_CYRILLIC	0x02
+#define SUBLANG_VIETNAMESE_VIETNAM	0x01
+#define SUBLANG_WELSH_UNITED_KINGDOM	0x01
+#define SUBLANG_WOLOF_SENEGAL	0x01
+#define SUBLANG_YORUBA_NIGERIA	0x01
+#define SUBLANG_XHOSA_SOUTH_AFRICA	0x01
+#define SUBLANG_YAKUT_RUSSIA	0x01
+#define SUBLANG_YI_PRC	0x01
+#define SUBLANG_ZULU_SOUTH_AFRICA	0x01
+#define NLS_VALID_LOCALE_MASK	1048575
+#define SORT_DEFAULT	0
+#define SORT_JAPANESE_XJIS	0
+#define SORT_JAPANESE_UNICODE	1
+#define SORT_CHINESE_BIG5	0
+#define SORT_CHINESE_PRCP	0
+#define SORT_CHINESE_UNICODE	1
+#define SORT_CHINESE_PRC	2
+#define SORT_CHINESE_BOPOMOFO	3
+#define SORT_KOREAN_KSC	0
+#define SORT_KOREAN_UNICODE	1
+#define SORT_GERMAN_PHONE_BOOK	1
+#define SORT_HUNGARIAN_DEFAULT	0
+#define SORT_HUNGARIAN_TECHNICAL	1
+#define SORT_GEORGIAN_TRADITIONAL	0
+#define SORT_GEORGIAN_MODERN	1
+#define MAKELANGID(p,s)	((((WORD)(s))<<10)|(WORD)(p))
+#define MAKELCID(l,s) ((DWORD)((((DWORD)((WORD)(s)))<<16)|((DWORD)((WORD)(l)))))
+#define PRIMARYLANGID(l)	((WORD)(l)&0x3ff)
+#define SORTIDFROMLCID(l)	((WORD)((((DWORD)(l))&NLS_VALID_LOCALE_MASK)>>16))
+#define SORTVERSIONFROMLCID(l) ((WORD)((((DWORD)(l))>>20)&0xf))
+#define SUBLANGID(l)	((WORD)(l)>>10)
+#define LANGIDFROMLCID(l)	((WORD)(l))
+#define LANG_SYSTEM_DEFAULT	MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT)
+#define LANG_USER_DEFAULT	MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT)
+#define LOCALE_NEUTRAL	MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)
+#define ACL_REVISION	2
+#define ACL_REVISION_DS 4
+#define ACL_REVISION1 1
+#define ACL_REVISION2 2
+#define ACL_REVISION3 3
+#define ACL_REVISION4 4
+#define MIN_ACL_REVISION 2
+#define MAX_ACL_REVISION 4
+#define MINCHAR	0x80
+#define MAXCHAR	0x7f
+#define MINSHORT	0x8000
+#define MAXSHORT	0x7fff
+#define MINLONG	0x80000000
+#define MAXLONG	0x7fffffff
+#define MAXBYTE	0xff
+#define MAXWORD	0xffff
+#define MAXDWORD	0xffffffff
+#define PROCESSOR_INTEL_386 386
+#define PROCESSOR_INTEL_486 486
+#define PROCESSOR_INTEL_PENTIUM 586
+#define PROCESSOR_MIPS_R4000 4000
+#define PROCESSOR_ALPHA_21064 21064
+#define PROCESSOR_INTEL_IA64 2200
+#define PROCESSOR_ARCHITECTURE_INTEL 0
+#define PROCESSOR_ARCHITECTURE_MIPS 1
+#define PROCESSOR_ARCHITECTURE_ALPHA 2
+#define PROCESSOR_ARCHITECTURE_PPC 3
+#define PROCESSOR_ARCHITECTURE_SHX 4
+#define PROCESSOR_ARCHITECTURE_ARM 5
+#define PROCESSOR_ARCHITECTURE_IA64 6
+#define PROCESSOR_ARCHITECTURE_ALPHA64 7
+#define PROCESSOR_ARCHITECTURE_MSIL 8
+#define PROCESSOR_ARCHITECTURE_AMD64 9
+#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
+#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
+#define PF_FLOATING_POINT_PRECISION_ERRATA 0
+#define PF_FLOATING_POINT_EMULATED 1
+#define PF_COMPARE_EXCHANGE_DOUBLE 2
+#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
+#define PF_PPC_MOVEMEM_64BIT_OK 4
+#define PF_ALPHA_BYTE_INSTRUCTIONS 5
+#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
+#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
+#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
+#define PF_PAE_ENABLED 9
+#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
+/* also in ddk/ntifs.h */
+#define FILE_ACTION_ADDED                   0x00000001
+#define FILE_ACTION_REMOVED                 0x00000002
+#define FILE_ACTION_MODIFIED                0x00000003
+#define FILE_ACTION_RENAMED_OLD_NAME        0x00000004
+#define FILE_ACTION_RENAMED_NEW_NAME        0x00000005
+#define FILE_ACTION_ADDED_STREAM            0x00000006
+#define FILE_ACTION_REMOVED_STREAM          0x00000007
+#define FILE_ACTION_MODIFIED_STREAM         0x00000008
+#define FILE_ACTION_REMOVED_BY_DELETE       0x00000009
+#define FILE_ACTION_ID_NOT_TUNNELLED        0x0000000A
+#define FILE_ACTION_TUNNELLED_ID_COLLISION  0x0000000B
+/* end ntifs.h */
+#define HEAP_NO_SERIALIZE 1
+#define HEAP_GROWABLE 2
+#define HEAP_GENERATE_EXCEPTIONS 4
+#define HEAP_ZERO_MEMORY 8
+#define HEAP_REALLOC_IN_PLACE_ONLY 16
+#define HEAP_TAIL_CHECKING_ENABLED 32
+#define HEAP_FREE_CHECKING_ENABLED 64
+#define HEAP_DISABLE_COALESCE_ON_FREE 128
+#define HEAP_CREATE_ALIGN_16 0x0000
+#define HEAP_CREATE_ENABLE_TRACING 0x20000
+#define HEAP_MAXIMUM_TAG 0xFFF
+#define HEAP_PSEUDO_TAG_FLAG 0x8000
+#define HEAP_TAG_SHIFT 16
+#define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b)+(o)<<16)))
+#define KEY_QUERY_VALUE 1
+#define KEY_SET_VALUE 2
+#define KEY_CREATE_SUB_KEY 4
+#define KEY_ENUMERATE_SUB_KEYS 8
+#define KEY_NOTIFY 16
+#define KEY_CREATE_LINK 32
+#define KEY_WRITE 0x20006
+#define KEY_EXECUTE 0x20019
+#define KEY_READ 0x20019
+#define KEY_ALL_ACCESS 0xf003f
+#define REG_WHOLE_HIVE_VOLATILE	1
+#define REG_REFRESH_HIVE	2
+#define REG_NO_LAZY_FLUSH	4
+#define REG_OPTION_RESERVED	0
+#define REG_OPTION_NON_VOLATILE	0
+#define REG_OPTION_VOLATILE	1
+#define REG_OPTION_CREATE_LINK	2
+#define REG_OPTION_BACKUP_RESTORE	4
+#define REG_OPTION_OPEN_LINK	8
+#define REG_LEGAL_OPTION	15
+#define OWNER_SECURITY_INFORMATION 1
+#define GROUP_SECURITY_INFORMATION 2
+#define DACL_SECURITY_INFORMATION 4
+#define SACL_SECURITY_INFORMATION 8
+#define MAXIMUM_PROCESSORS 32
+#define PAGE_NOACCESS	0x0001
+#define PAGE_READONLY	0x0002
+#define PAGE_READWRITE	0x0004
+#define PAGE_WRITECOPY	0x0008
+#define PAGE_EXECUTE	0x0010
+#define PAGE_EXECUTE_READ	0x0020
+#define PAGE_EXECUTE_READWRITE	0x0040
+#define PAGE_EXECUTE_WRITECOPY	0x0080
+#define PAGE_GUARD		0x0100
+#define PAGE_NOCACHE		0x0200
+#define MEM_COMMIT           0x1000
+#define MEM_RESERVE          0x2000
+#define MEM_DECOMMIT         0x4000
+#define MEM_RELEASE          0x8000
+#define MEM_FREE            0x10000
+#define MEM_PRIVATE         0x20000
+#define MEM_MAPPED          0x40000
+#define MEM_RESET           0x80000
+#define MEM_TOP_DOWN       0x100000
+#define MEM_WRITE_WATCH	   0x200000 /* 98/Me */
+#define MEM_PHYSICAL	   0x400000
+#define MEM_4MB_PAGES    0x80000000
+/* also in ddk/ntifs.h */
+#define MEM_IMAGE        SEC_IMAGE
+#define SEC_BASED	0x00200000
+#define SEC_NO_CHANGE	0x00400000
+#define SEC_FILE	0x00800000
+#define SEC_IMAGE	0x01000000
+#define SEC_VLM		0x02000000
+#define SEC_RESERVE	0x04000000
+#define SEC_COMMIT	0x08000000
+#define SEC_NOCACHE	0x10000000
+/* end ntifs.h */
+#define SECTION_EXTEND_SIZE 16
+#define SECTION_MAP_READ 4
+#define SECTION_MAP_WRITE 2
+#define SECTION_QUERY 1
+#define SECTION_MAP_EXECUTE 8
+#define SECTION_ALL_ACCESS 0xf001f
+#define MESSAGE_RESOURCE_UNICODE 1
+#define RTL_CRITSECT_TYPE 0
+#define RTL_RESOURCE_TYPE 1
+/* Also in winddk.h */
+#define FIELD_OFFSET(t,f) ((LONG)&(((t*)0)->f))
+#ifndef CONTAINING_RECORD
+#define CONTAINING_RECORD(address, type, field) \
+  ((type*)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
+#endif
+/* end winddk.h */
+#define IMAGE_SIZEOF_FILE_HEADER	20
+#define IMAGE_FILE_RELOCS_STRIPPED	1
+#define IMAGE_FILE_EXECUTABLE_IMAGE	2
+#define IMAGE_FILE_LINE_NUMS_STRIPPED	4
+#define IMAGE_FILE_LOCAL_SYMS_STRIPPED	8
+#define IMAGE_FILE_AGGRESIVE_WS_TRIM 	16
+#define IMAGE_FILE_LARGE_ADDRESS_AWARE	32
+#define IMAGE_FILE_BYTES_REVERSED_LO	128
+#define IMAGE_FILE_32BIT_MACHINE	256
+#define IMAGE_FILE_DEBUG_STRIPPED	512
+#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP	1024
+#define IMAGE_FILE_NET_RUN_FROM_SWAP	2048
+#define IMAGE_FILE_SYSTEM	4096
+#define IMAGE_FILE_DLL	8192
+#define IMAGE_FILE_UP_SYSTEM_ONLY	16384
+#define IMAGE_FILE_BYTES_REVERSED_HI	32768
+
+#define IMAGE_FILE_MACHINE_UNKNOWN	0x0000
+#define IMAGE_FILE_MACHINE_AM33		0x01d3 /* Matsushita AM33 */
+#define IMAGE_FILE_MACHINE_AMD64	0x8664 /* x64 */
+#define IMAGE_FILE_MACHINE_ARM		0x01c0 /* ARM little endian */
+#define IMAGE_FILE_MACHINE_EBC		0x0ebc /* EFI byte code */
+#define IMAGE_FILE_MACHINE_I386		0x014c /* Intel 386 or later processors 
+						  and compatible processors */
+#define IMAGE_FILE_MACHINE_IA64		0x0200 /* Intel Itanium processor family */
+#define IMAGE_FILE_MACHINE_M32R		0x9041 /* Mitsubishi M32R little endian */
+#define IMAGE_FILE_MACHINE_MIPS16	0x0266 /* MIPS16 */
+#define IMAGE_FILE_MACHINE_MIPSFPU	0x0366 /* MIPS with FPU */
+#define IMAGE_FILE_MACHINE_MIPSFPU16	0x0466 /* MIPS16 with FPU */
+#define IMAGE_FILE_MACHINE_POWERPC	0x01f0 /* Power PC little endian */
+#define IMAGE_FILE_MACHINE_POWERPCFP	0x01f1 /* Power PC with floating point support */
+#define IMAGE_FILE_MACHINE_R4000	0x0166 /* MIPS little endian */
+#define IMAGE_FILE_MACHINE_SH3		0x01a2 /* Hitachi SH3 */
+#define IMAGE_FILE_MACHINE_SH3DSP	0x01a3 /* Hitachi SH3 DSP */
+#define IMAGE_FILE_MACHINE_SH4		0x01a6 /* Hitachi SH4 */
+#define IMAGE_FILE_MACHINE_SH5		0x01a8 /* Hitachi SH5 */
+#define IMAGE_FILE_MACHINE_THUMB	0x01c2 /* Thumb */
+#define IMAGE_FILE_MACHINE_WCEMIPSV2	0x0169 /* MIPS little-endian WCE v2 */
+
+#define IMAGE_DOS_SIGNATURE 0x5A4D
+#define IMAGE_OS2_SIGNATURE 0x454E
+#define IMAGE_OS2_SIGNATURE_LE 0x454C
+#define IMAGE_VXD_SIGNATURE 0x454C
+#define IMAGE_NT_SIGNATURE 0x00004550
+#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
+#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
+#ifdef _WIN64
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
+#else
+#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
+#endif
+#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
+#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
+#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
+#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
+#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
+#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER 224
+#define IMAGE_SIZEOF_SHORT_NAME 8
+#define IMAGE_SIZEOF_SECTION_HEADER 40
+#define IMAGE_SIZEOF_SYMBOL 18
+#define IMAGE_SIZEOF_AUX_SYMBOL 18
+#define IMAGE_SIZEOF_RELOCATION 10
+#define IMAGE_SIZEOF_BASE_RELOCATION 8
+#define IMAGE_SIZEOF_LINENUMBER 6
+#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
+#define SIZEOF_RFPO_DATA 16
+
+#define IMAGE_SUBSYSTEM_UNKNOWN	0
+#define IMAGE_SUBSYSTEM_NATIVE	1
+#define IMAGE_SUBSYSTEM_WINDOWS_GUI	2
+#define IMAGE_SUBSYSTEM_WINDOWS_CUI	3
+#define IMAGE_SUBSYSTEM_OS2_CUI		5  /* Not in PECOFF v8 spec */
+#define IMAGE_SUBSYSTEM_POSIX_CUI	7
+#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS	8  /* Not in PECOFF v8 spec */
+#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI	9
+#define IMAGE_SUBSYSTEM_EFI_APPLICATION	10
+#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER	11
+#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER	12
+#define IMAGE_SUBSYSTEM_EFI_ROM	13
+#define IMAGE_SUBSYSTEM_XBOX	14
+
+#define IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE		0x0040
+#define IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY	0x0080
+#define IMAGE_DLL_CHARACTERISTICS_NX_COMPAT		0x0100
+#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION		0x0200
+#define IMAGE_DLLCHARACTERISTICS_NO_SEH			0x0400
+#define IMAGE_DLLCHARACTERISTICS_NO_BIND		0x0800
+#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER		0x2000
+#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE	0x8000
+
+#define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((DWORD)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEADERS)(h))->FileHeader.SizeOfOptionalHeader))
+#define IMAGE_DIRECTORY_ENTRY_EXPORT	0
+#define IMAGE_DIRECTORY_ENTRY_IMPORT	1
+#define IMAGE_DIRECTORY_ENTRY_RESOURCE	2
+#define IMAGE_DIRECTORY_ENTRY_EXCEPTION	3
+#define IMAGE_DIRECTORY_ENTRY_SECURITY	4
+#define IMAGE_DIRECTORY_ENTRY_BASERELOC	5
+#define IMAGE_DIRECTORY_ENTRY_DEBUG	6
+#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT	7
+#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE	7
+#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR	8
+#define IMAGE_DIRECTORY_ENTRY_TLS	9
+#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG	10
+#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT	11
+#define IMAGE_DIRECTORY_ENTRY_IAT	12
+#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT	13
+#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR	14
+#define IMAGE_SCN_TYPE_REG 0
+#define IMAGE_SCN_TYPE_DSECT 1
+#define IMAGE_SCN_TYPE_NOLOAD 2
+#define IMAGE_SCN_TYPE_GROUP 4
+#define IMAGE_SCN_TYPE_NO_PAD 8
+#define IMAGE_SCN_TYPE_COPY 16
+#define IMAGE_SCN_CNT_CODE 32
+#define IMAGE_SCN_CNT_INITIALIZED_DATA 64
+#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 128
+#define IMAGE_SCN_LNK_OTHER 256
+#define IMAGE_SCN_LNK_INFO 512
+#define IMAGE_SCN_TYPE_OVER 1024
+#define IMAGE_SCN_LNK_REMOVE 2048
+#define IMAGE_SCN_LNK_COMDAT 4096
+#define IMAGE_SCN_GPREL	0x8000 /*  Valid only for IA64 */
+#define IMAGE_SCN_MEM_FARDATA 0x8000 /* Not in PECOFF v8 spec */
+#define IMAGE_SCN_MEM_PURGEABLE 0x20000
+#define IMAGE_SCN_MEM_16BIT 0x20000
+#define IMAGE_SCN_MEM_LOCKED  0x40000
+#define IMAGE_SCN_MEM_PRELOAD 0x80000
+#define IMAGE_SCN_ALIGN_1BYTES 0x100000
+#define IMAGE_SCN_ALIGN_2BYTES 0x200000
+#define IMAGE_SCN_ALIGN_4BYTES 0x300000
+#define IMAGE_SCN_ALIGN_8BYTES 0x400000
+#define IMAGE_SCN_ALIGN_16BYTES 0x500000
+#define IMAGE_SCN_ALIGN_32BYTES 0x600000
+#define IMAGE_SCN_ALIGN_64BYTES 0x700000
+#define IMAGE_SCN_ALIGN_128BYTES 0x800000
+#define IMAGE_SCN_ALIGN_256BYTES 0x900000
+#define IMAGE_SCN_ALIGN_512BYTES 0xa00000
+#define IMAGE_SCN_ALIGN_1024BYTES 0xb00000
+#define IMAGE_SCN_ALIGN_2048BYTES 0xc00000
+#define IMAGE_SCN_ALIGN_4096BYTES 0xd00000
+#define IMAGE_SCN_ALIGN_8192BYTES 0xe00000
+#define IMAGE_SCN_LNK_NRELOC_OVFL 0x1000000
+#define IMAGE_SCN_MEM_DISCARDABLE 0x2000000
+#define IMAGE_SCN_MEM_NOT_CACHED 0x4000000
+#define IMAGE_SCN_MEM_NOT_PAGED 0x8000000
+#define IMAGE_SCN_MEM_SHARED 0x10000000
+#define IMAGE_SCN_MEM_EXECUTE 0x20000000
+#define IMAGE_SCN_MEM_READ 0x40000000
+#define IMAGE_SCN_MEM_WRITE 0x80000000
+#define IMAGE_SYM_UNDEFINED	0
+#define IMAGE_SYM_ABSOLUTE (-1)
+#define IMAGE_SYM_DEBUG	(-2)
+#define IMAGE_SYM_TYPE_NULL 0
+#define IMAGE_SYM_TYPE_VOID 1
+#define IMAGE_SYM_TYPE_CHAR 2
+#define IMAGE_SYM_TYPE_SHORT 3
+#define IMAGE_SYM_TYPE_INT 4
+#define IMAGE_SYM_TYPE_LONG 5
+#define IMAGE_SYM_TYPE_FLOAT 6
+#define IMAGE_SYM_TYPE_DOUBLE 7
+#define IMAGE_SYM_TYPE_STRUCT 8
+#define IMAGE_SYM_TYPE_UNION 9
+#define IMAGE_SYM_TYPE_ENUM 10
+#define IMAGE_SYM_TYPE_MOE 11
+#define IMAGE_SYM_TYPE_BYTE 12
+#define IMAGE_SYM_TYPE_WORD 13
+#define IMAGE_SYM_TYPE_UINT 14
+#define IMAGE_SYM_TYPE_DWORD 15
+#define IMAGE_SYM_TYPE_PCODE 32768
+#define IMAGE_SYM_DTYPE_NULL 0
+#define IMAGE_SYM_DTYPE_POINTER 1
+#define IMAGE_SYM_DTYPE_FUNCTION 2
+#define IMAGE_SYM_DTYPE_ARRAY 3
+#define IMAGE_SYM_CLASS_END_OF_FUNCTION	(-1)
+#define IMAGE_SYM_CLASS_NULL 0
+#define IMAGE_SYM_CLASS_AUTOMATIC 1
+#define IMAGE_SYM_CLASS_EXTERNAL 2
+#define IMAGE_SYM_CLASS_STATIC 3
+#define IMAGE_SYM_CLASS_REGISTER 4
+#define IMAGE_SYM_CLASS_EXTERNAL_DEF 5
+#define IMAGE_SYM_CLASS_LABEL 6
+#define IMAGE_SYM_CLASS_UNDEFINED_LABEL 7
+#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8
+#define IMAGE_SYM_CLASS_ARGUMENT 9
+#define IMAGE_SYM_CLASS_STRUCT_TAG 10
+#define IMAGE_SYM_CLASS_MEMBER_OF_UNION 11
+#define IMAGE_SYM_CLASS_UNION_TAG 12
+#define IMAGE_SYM_CLASS_TYPE_DEFINITION 13
+#define IMAGE_SYM_CLASS_UNDEFINED_STATIC 14
+#define IMAGE_SYM_CLASS_ENUM_TAG 15
+#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16
+#define IMAGE_SYM_CLASS_REGISTER_PARAM 17
+#define IMAGE_SYM_CLASS_BIT_FIELD 18
+#define IMAGE_SYM_CLASS_FAR_EXTERNAL 68 /* Not in PECOFF v8 spec */
+#define IMAGE_SYM_CLASS_BLOCK 100
+#define IMAGE_SYM_CLASS_FUNCTION 101
+#define IMAGE_SYM_CLASS_END_OF_STRUCT 102
+#define IMAGE_SYM_CLASS_FILE 103
+#define IMAGE_SYM_CLASS_SECTION 104
+#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 105
+#define IMAGE_SYM_CLASS_CLR_TOKEN 107
+
+#define IMAGE_COMDAT_SELECT_NODUPLICATES 1
+#define IMAGE_COMDAT_SELECT_ANY 2
+#define IMAGE_COMDAT_SELECT_SAME_SIZE 3
+#define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
+#define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
+#define IMAGE_COMDAT_SELECT_LARGEST 6
+#define IMAGE_COMDAT_SELECT_NEWEST 7 /* Not in PECOFF v8 spec */
+
+#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
+#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
+#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
+
+#define IMAGE_REL_I386_ABSOLUTE	0x0000
+#define IMAGE_REL_I386_DIR16	0x0001
+#define IMAGE_REL_I386_REL16	0x0002
+#define IMAGE_REL_I386_DIR32	0x0006
+#define IMAGE_REL_I386_DIR32NB	0x0007
+#define IMAGE_REL_I386_SEG12	0x0009
+#define IMAGE_REL_I386_SECTION	0x000A
+#define IMAGE_REL_I386_SECREL	0x000B
+#define IMAGE_REL_I386_TOKEN	0x000C
+#define IMAGE_REL_I386_SECREL7	0x000D
+#define IMAGE_REL_I386_REL32	0x0014
+
+#define IMAGE_REL_AMD64_ABSOLUTE	0x0000
+#define IMAGE_REL_AMD64_ADDR64		0x0001
+#define IMAGE_REL_AMD64_ADDR32		0x0002
+#define IMAGE_REL_AMD64_ADDR32NB	0x0003
+#define IMAGE_REL_AMD64_REL32		0x0004
+#define IMAGE_REL_AMD64_REL32_1		0x0005
+#define IMAGE_REL_AMD64_REL32_2		0x0006
+#define IMAGE_REL_AMD64_REL32_3		0x0007
+#define IMAGE_REL_AMD64_REL32_4		0x0008
+#define IMAGE_REL_AMD64_REL32_5		0x0009
+#define IMAGE_REL_AMD64_SECTION		0x000A
+#define IMAGE_REL_AMD64_SECREL		0x000B
+#define IMAGE_REL_AMD64_SECREL7		0x000C
+#define IMAGE_REL_AMD64_TOKEN		0x000D
+#define IMAGE_REL_AMD64_SREL32		0x000E
+#define IMAGE_REL_AMD64_PAIR		0x000F
+#define IMAGE_REL_AMD64_SSPAN32		0x0010
+
+#define IMAGE_REL_IA64_ABSOLUTE		0x0000
+#define IMAGE_REL_IA64_IMM14		0x0001
+#define IMAGE_REL_IA64_IMM22		0x0002
+#define IMAGE_REL_IA64_IMM64		0x0003
+#define IMAGE_REL_IA64_DIR32		0x0004
+#define IMAGE_REL_IA64_DIR64		0x0005
+#define IMAGE_REL_IA64_PCREL21B		0x0006
+#define IMAGE_REL_IA64_PCREL21M		0x0007
+#define IMAGE_REL_IA64_PCREL21F		0x0008
+#define IMAGE_REL_IA64_GPREL22		0x0009
+#define IMAGE_REL_IA64_LTOFF22		0x000A
+#define IMAGE_REL_IA64_SECTION		0x000B
+#define IMAGE_REL_IA64_SECREL22		0x000C
+#define IMAGE_REL_IA64_SECREL64I	0x000D
+#define IMAGE_REL_IA64_SECREL32		0x000E
+#define IMAGE_REL_IA64_DIR32NB		0x0010
+#define IMAGE_REL_IA64_SREL14		0x0011
+#define IMAGE_REL_IA64_SREL22		0x0012
+#define IMAGE_REL_IA64_SREL32		0x0013
+#define IMAGE_REL_IA64_UREL32		0x0014
+#define IMAGE_REL_IA64_PCREL60X		0x0015
+#define IMAGE_REL_IA64_PCREL60B		0x0016
+#define IMAGE_REL_IA64_PCREL60F		0x0017
+#define IMAGE_REL_IA64_PCREL60I		0x0018
+#define IMAGE_REL_IA64_PCREL60M		0x0019
+#define IMAGE_REL_IA64_IMMGPREL64	0x001a
+#define IMAGE_REL_IA64_TOKEN		0x001b
+#define IMAGE_REL_IA64_GPREL32		0x001c
+#define IMAGE_REL_IA64_ADDEND		0x001F
+
+#define	IMAGE_REL_SH3_ABSOLUTE		0x0000
+#define	IMAGE_REL_SH3_DIRECT16		0x0001
+#define	IMAGE_REL_SH3_DIRECT32		0x0002
+#define	IMAGE_REL_SH3_DIRECT8		0x0003
+#define	IMAGE_REL_SH3_DIRECT8_WORD	0x0004
+#define	IMAGE_REL_SH3_DIRECT8_LONG	0x0005
+#define	IMAGE_REL_SH3_DIRECT4		0x0006
+#define	IMAGE_REL_SH3_DIRECT4_WORD	0x0007
+#define	IMAGE_REL_SH3_DIRECT4_LONG	0x0008
+#define	IMAGE_REL_SH3_PCREL8_WORD	0x0009
+#define	IMAGE_REL_SH3_PCREL8_LONG	0x000A
+#define	IMAGE_REL_SH3_PCREL12_WORD	0x000B
+#define	IMAGE_REL_SH3_STARTOF_SECTION	0x000C
+#define	IMAGE_REL_SH3_SIZEOF_SECTION	0x000D
+#define	IMAGE_REL_SH3_SECTION		0x000E
+#define	IMAGE_REL_SH3_SECREL		0x000F
+#define	IMAGE_REL_SH3_DIRECT32_NB	0x0010
+#define	IMAGE_REL_SH3_GPREL4_LONG	0x0011
+#define	IMAGE_REL_SH3_TOKEN		0x0012
+#define	IMAGE_REL_SHM_PCRELPT		0x0013
+#define	IMAGE_REL_SHM_REFLO		0x0014
+#define	IMAGE_REL_SHM_REFHALF		0x0015
+#define	IMAGE_REL_SHM_RELLO		0x0016
+#define	IMAGE_REL_SHM_RELHALF		0x0017
+#define	IMAGE_REL_SHM_PAIR		0x0018
+#define	IMAGE_REL_SHM_NOMODE		0x8000
+
+#define	IMAGE_REL_M32R_ABSOLUTE	0x0000
+#define	IMAGE_REL_M32R_ADDR32	0x0001
+#define	IMAGE_REL_M32R_ADDR32NB	0x0002
+#define	IMAGE_REL_M32R_ADDR24	0x0003
+#define	IMAGE_REL_M32R_GPREL16	0x0004
+#define	IMAGE_REL_M32R_PCREL24	0x0005
+#define	IMAGE_REL_M32R_PCREL16	0x0006
+#define	IMAGE_REL_M32R_PCREL8	0x0007
+#define	IMAGE_REL_M32R_REFHALF	0x0008
+#define	IMAGE_REL_M32R_REFHI	0x0009
+#define	IMAGE_REL_M32R_REFLO	0x000A
+#define	IMAGE_REL_M32R_PAIR	0x000B
+#define	IMAGE_REL_M32R_SECTION	0x000C
+#define	IMAGE_REL_M32R_SECREL	0x000D
+#define	IMAGE_REL_M32R_TOKEN	0x000E
+
+#define	IMAGE_REL_MIPS_ABSOLUTE	0x0000
+#define	IMAGE_REL_MIPS_REFHALF	0x0001
+#define	IMAGE_REL_MIPS_REFWORD	0x0002
+#define	IMAGE_REL_MIPS_JMPADDR	0x0003
+#define	IMAGE_REL_MIPS_REFHI	0x0004
+#define	IMAGE_REL_MIPS_REFLO	0x0005
+#define	IMAGE_REL_MIPS_GPREL	0x0006
+#define	IMAGE_REL_MIPS_LITERAL	0x0007
+#define	IMAGE_REL_MIPS_SECTION	0x000A
+#define	IMAGE_REL_MIPS_SECREL	0x000B
+#define	IMAGE_REL_MIPS_SECRELLO	0x000C
+#define	IMAGE_REL_MIPS_SECRELHI	0x000D
+#define	IMAGE_REL_MIPS_JMPADDR16	0x0010
+#define	IMAGE_REL_MIPS_REFWORDNB	0x0022
+#define	IMAGE_REL_MIPS_PAIR	0x0025
+
+#define IMAGE_REL_ALPHA_ABSOLUTE 0
+#define IMAGE_REL_ALPHA_REFLONG 1
+#define IMAGE_REL_ALPHA_REFQUAD 2
+#define IMAGE_REL_ALPHA_GPREL32 3
+#define IMAGE_REL_ALPHA_LITERAL 4
+#define IMAGE_REL_ALPHA_LITUSE 5
+#define IMAGE_REL_ALPHA_GPDISP 6
+#define IMAGE_REL_ALPHA_BRADDR 7
+#define IMAGE_REL_ALPHA_HINT 8
+#define IMAGE_REL_ALPHA_INLINE_REFLONG 9
+#define IMAGE_REL_ALPHA_REFHI 10
+#define IMAGE_REL_ALPHA_REFLO 11
+#define IMAGE_REL_ALPHA_PAIR 12
+#define IMAGE_REL_ALPHA_MATCH 13
+#define IMAGE_REL_ALPHA_SECTION 14
+#define IMAGE_REL_ALPHA_SECREL 15
+#define IMAGE_REL_ALPHA_REFLONGNB 16
+#define IMAGE_REL_ALPHA_SECRELLO 17
+#define IMAGE_REL_ALPHA_SECRELHI 18
+#define IMAGE_REL_PPC_ABSOLUTE 0
+#define IMAGE_REL_PPC_ADDR64 1
+#define IMAGE_REL_PPC_ADDR32 2
+#define IMAGE_REL_PPC_ADDR24 3
+#define IMAGE_REL_PPC_ADDR16 4
+#define IMAGE_REL_PPC_ADDR14 5
+#define IMAGE_REL_PPC_REL24 6
+#define IMAGE_REL_PPC_REL14 7
+#define IMAGE_REL_PPC_TOCREL16 8
+#define IMAGE_REL_PPC_TOCREL14 9
+#define IMAGE_REL_PPC_ADDR32NB 10
+#define IMAGE_REL_PPC_SECREL 11
+#define IMAGE_REL_PPC_SECTION 12
+#define IMAGE_REL_PPC_IFGLUE 13
+#define IMAGE_REL_PPC_IMGLUE 14
+#define IMAGE_REL_PPC_SECREL16 15
+#define IMAGE_REL_PPC_REFHI 16
+#define IMAGE_REL_PPC_REFLO 17
+#define IMAGE_REL_PPC_PAIR 18
+#define IMAGE_REL_PPC_TYPEMASK 255
+#define IMAGE_REL_PPC_NEG 256
+#define IMAGE_REL_PPC_BRTAKEN 512
+#define IMAGE_REL_PPC_BRNTAKEN 1024
+#define IMAGE_REL_PPC_TOCDEFN 2048
+#define IMAGE_REL_BASED_ABSOLUTE 0
+#define IMAGE_REL_BASED_HIGH 1
+#define IMAGE_REL_BASED_LOW 2
+#define IMAGE_REL_BASED_HIGHLOW 3
+#define IMAGE_REL_BASED_HIGHADJ 4
+#define IMAGE_REL_BASED_MIPS_JMPADDR 5
+#define IMAGE_ARCHIVE_START_SIZE 8
+#define IMAGE_ARCHIVE_START "!<arch>\n"
+#define IMAGE_ARCHIVE_END "`\n"
+#define IMAGE_ARCHIVE_PAD "\n"
+#define IMAGE_ARCHIVE_LINKER_MEMBER "/               "
+#define IMAGE_ARCHIVE_LONGNAMES_MEMBER "//              "
+#define IMAGE_ORDINAL_FLAG32 0x80000000
+#define IMAGE_SNAP_BY_ORDINAL32(o) ((o&IMAGE_ORDINAL_FLAG32)!=0)
+#define IMAGE_ORDINAL32(o) (o&0xffff)
+#define IMAGE_ORDINAL_FLAG64 0x8000000000000000ULL
+#define IMAGE_SNAP_BY_ORDINAL64(o) ((o&IMAGE_ORDINAL_FLAG64)!=0)
+#define IMAGE_ORDINAL64(o) (o&0xffff)
+#ifdef _WIN64
+#define IMAGE_ORDINAL_FLAG		IMAGE_ORDINAL_FLAG64
+#define IMAGE_SNAP_BY_ORDINAL(o)	IMAGE_SNAP_BY_ORDINAL64(o)
+#define IMAGE_ORDINAL(o)		IMAGE_ORDINAL64(o)
+#else
+#define IMAGE_ORDINAL_FLAG		IMAGE_ORDINAL_FLAG32
+#define IMAGE_SNAP_BY_ORDINAL(o)	IMAGE_SNAP_BY_ORDINAL32(o)
+#define IMAGE_ORDINAL(o)		IMAGE_ORDINAL32(o)
+#endif
+#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
+#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
+#define IMAGE_DEBUG_TYPE_UNKNOWN 0
+#define IMAGE_DEBUG_TYPE_COFF 1
+#define IMAGE_DEBUG_TYPE_CODEVIEW 2
+#define IMAGE_DEBUG_TYPE_FPO 3
+#define IMAGE_DEBUG_TYPE_MISC 4
+#define IMAGE_DEBUG_TYPE_EXCEPTION 5
+#define IMAGE_DEBUG_TYPE_FIXUP 6
+#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
+#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
+#define IMAGE_DEBUG_TYPE_BORLAND 9
+#define FRAME_FPO 0
+#define FRAME_TRAP 1
+#define FRAME_TSS 2
+#define FRAME_NONFPO 3
+#define IMAGE_DEBUG_MISC_EXENAME 1
+#define N_BTMASK 0x000F
+#define N_TMASK 0x0030
+#define N_TMASK1 0x00C0
+#define N_TMASK2 0x00F0
+#define N_BTSHFT 4
+#define N_TSHIFT 2
+#define IS_TEXT_UNICODE_ASCII16 1
+#define IS_TEXT_UNICODE_REVERSE_ASCII16 16
+#define IS_TEXT_UNICODE_STATISTICS 2
+#define IS_TEXT_UNICODE_REVERSE_STATISTICS 32
+#define IS_TEXT_UNICODE_CONTROLS 4
+#define IS_TEXT_UNICODE_REVERSE_CONTROLS 64
+#define IS_TEXT_UNICODE_SIGNATURE 8
+#define IS_TEXT_UNICODE_REVERSE_SIGNATURE 128
+#define IS_TEXT_UNICODE_ILLEGAL_CHARS 256
+#define IS_TEXT_UNICODE_ODD_LENGTH 512
+#define IS_TEXT_UNICODE_NULL_BYTES 4096
+#define IS_TEXT_UNICODE_UNICODE_MASK 15
+#define IS_TEXT_UNICODE_REVERSE_MASK 240
+#define IS_TEXT_UNICODE_NOT_UNICODE_MASK 3840
+#define IS_TEXT_UNICODE_NOT_ASCII_MASK 61440
+#define SERVICE_KERNEL_DRIVER 1
+#define SERVICE_FILE_SYSTEM_DRIVER 2
+#define SERVICE_ADAPTER 4
+#define SERVICE_RECOGNIZER_DRIVER 8
+#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER|SERVICE_FILE_SYSTEM_DRIVER|SERVICE_RECOGNIZER_DRIVER)
+#define SERVICE_WIN32_OWN_PROCESS 16
+#define SERVICE_WIN32_SHARE_PROCESS 32
+#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS|SERVICE_WIN32_SHARE_PROCESS)
+#define SERVICE_INTERACTIVE_PROCESS 256
+#define SERVICE_TYPE_ALL (SERVICE_WIN32|SERVICE_ADAPTER|SERVICE_DRIVER|SERVICE_INTERACTIVE_PROCESS)
+#define SERVICE_BOOT_START 0
+#define SERVICE_SYSTEM_START 1
+#define SERVICE_AUTO_START 2
+#define SERVICE_DEMAND_START 3
+#define SERVICE_DISABLED 4
+#define SERVICE_ERROR_IGNORE 0
+#define SERVICE_ERROR_NORMAL 1
+#define SERVICE_ERROR_SEVERE 2
+#define SERVICE_ERROR_CRITICAL 3
+#define SE_OWNER_DEFAULTED 1
+#define SE_GROUP_DEFAULTED 2
+#define SE_DACL_PRESENT 4
+#define SE_DACL_DEFAULTED 8
+#define SE_SACL_PRESENT 16
+#define SE_SACL_DEFAULTED 32
+#define SE_DACL_AUTO_INHERIT_REQ 256
+#define SE_SACL_AUTO_INHERIT_REQ 512
+#define SE_DACL_AUTO_INHERITED 1024
+#define SE_SACL_AUTO_INHERITED 2048
+#define SE_DACL_PROTECTED 4096
+#define SE_SACL_PROTECTED 8192
+#define SE_SELF_RELATIVE 0x8000
+#define SECURITY_DESCRIPTOR_MIN_LENGTH 20
+#define SECURITY_DESCRIPTOR_REVISION 1
+#define SECURITY_DESCRIPTOR_REVISION1 1
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT 1
+#define SE_PRIVILEGE_ENABLED 2
+#define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
+#define PRIVILEGE_SET_ALL_NECESSARY 1
+#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
+#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
+#define SECURITY_DYNAMIC_TRACKING TRUE
+#define SECURITY_STATIC_TRACKING FALSE
+/* also in ddk/ntifs.h */
+#define TOKEN_ASSIGN_PRIMARY            (0x0001)
+#define TOKEN_DUPLICATE                 (0x0002)
+#define TOKEN_IMPERSONATE               (0x0004)
+#define TOKEN_QUERY                     (0x0008)
+#define TOKEN_QUERY_SOURCE              (0x0010)
+#define TOKEN_ADJUST_PRIVILEGES         (0x0020)
+#define TOKEN_ADJUST_GROUPS             (0x0040)
+#define TOKEN_ADJUST_DEFAULT            (0x0080)
+#define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
+                          TOKEN_ASSIGN_PRIMARY     |\
+                          TOKEN_DUPLICATE          |\
+                          TOKEN_IMPERSONATE        |\
+                          TOKEN_QUERY              |\
+                          TOKEN_QUERY_SOURCE       |\
+                          TOKEN_ADJUST_PRIVILEGES  |\
+                          TOKEN_ADJUST_GROUPS      |\
+                          TOKEN_ADJUST_DEFAULT)
+#define TOKEN_READ       (STANDARD_RIGHTS_READ     |\
+                          TOKEN_QUERY)
+#define TOKEN_WRITE      (STANDARD_RIGHTS_WRITE    |\
+                          TOKEN_ADJUST_PRIVILEGES  |\
+                          TOKEN_ADJUST_GROUPS      |\
+                          TOKEN_ADJUST_DEFAULT)
+
+#define TOKEN_EXECUTE    (STANDARD_RIGHTS_EXECUTE)
+#define TOKEN_SOURCE_LENGTH 8
+/* end ddk/ntifs.h */
+#define DLL_PROCESS_DETACH	0
+#define DLL_PROCESS_ATTACH	1
+#define DLL_THREAD_ATTACH	2
+#define DLL_THREAD_DETACH	3
+#define DBG_CONTINUE 0x10002
+#define DBG_TERMINATE_THREAD 0x40010003
+#define DBG_TERMINATE_PROCESS 0x40010004
+#define DBG_CONTROL_C 0x40010005
+#define DBG_CONTROL_BREAK 0x40010008
+#define DBG_EXCEPTION_NOT_HANDLED 0x80010001
+#define TAPE_ABSOLUTE_POSITION 0
+#define TAPE_LOGICAL_POSITION 1
+#define TAPE_PSEUDO_LOGICAL_POSITION 2
+#define TAPE_REWIND 0
+#define TAPE_ABSOLUTE_BLOCK 1
+#define TAPE_LOGICAL_BLOCK 2
+#define TAPE_PSEUDO_LOGICAL_BLOCK 3
+#define TAPE_SPACE_END_OF_DATA 4
+#define TAPE_SPACE_RELATIVE_BLOCKS 5
+#define TAPE_SPACE_FILEMARKS 6
+#define TAPE_SPACE_SEQUENTIAL_FMKS 7
+#define TAPE_SPACE_SETMARKS 8
+#define TAPE_SPACE_SEQUENTIAL_SMKS 9
+#define TAPE_DRIVE_FIXED 1
+#define TAPE_DRIVE_SELECT 2
+#define TAPE_DRIVE_INITIATOR 4
+#define TAPE_DRIVE_ERASE_SHORT 16
+#define TAPE_DRIVE_ERASE_LONG 32
+#define TAPE_DRIVE_ERASE_BOP_ONLY 64
+#define TAPE_DRIVE_ERASE_IMMEDIATE 128
+#define TAPE_DRIVE_TAPE_CAPACITY 256
+#define TAPE_DRIVE_TAPE_REMAINING 512
+#define TAPE_DRIVE_FIXED_BLOCK 1024
+#define TAPE_DRIVE_VARIABLE_BLOCK 2048
+#define TAPE_DRIVE_WRITE_PROTECT 4096
+#define TAPE_DRIVE_EOT_WZ_SIZE 8192
+#define TAPE_DRIVE_ECC 0x10000
+#define TAPE_DRIVE_COMPRESSION 0x20000
+#define TAPE_DRIVE_PADDING 0x40000
+#define TAPE_DRIVE_REPORT_SMKS 0x80000
+#define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x100000
+#define TAPE_DRIVE_GET_LOGICAL_BLK 0x200000
+#define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x400000
+#define TAPE_DRIVE_EJECT_MEDIA 0x1000000
+#define TAPE_DRIVE_CLEAN_REQUESTS 0x2000000
+#define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x4000000
+#define TAPE_DRIVE_RESERVED_BIT 0x80000000
+#define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
+#define TAPE_DRIVE_TENSION 0x80000002
+#define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
+#define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
+#define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
+#define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
+#define TAPE_DRIVE_TENSION_IMMED 0x80000040
+#define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
+#define TAPE_DRIVE_SET_ECC 0x80000100
+#define TAPE_DRIVE_SET_COMPRESSION 0x80000200
+#define TAPE_DRIVE_SET_PADDING 0x80000400
+#define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
+#define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
+#define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
+#define TAPE_DRIVE_LOGICAL_BLK 0x80004000
+#define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
+#define TAPE_DRIVE_END_OF_DATA 0x80010000
+#define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
+#define TAPE_DRIVE_FILEMARKS 0x80040000
+#define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
+#define TAPE_DRIVE_SETMARKS 0x80100000
+#define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
+#define TAPE_DRIVE_REVERSE_POSITION 0x80400000
+#define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
+#define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
+#define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
+#define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
+#define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
+#define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
+#define TAPE_DRIVE_FORMAT 0xA0000000
+#define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
+#define TAPE_DRIVE_HIGH_FEATURES 0x80000000
+#define TAPE_FIXED_PARTITIONS	0
+#define TAPE_INITIATOR_PARTITIONS	2
+#define TAPE_SELECT_PARTITIONS	1
+#define TAPE_FILEMARKS	1
+#define TAPE_LONG_FILEMARKS	3
+#define TAPE_SETMARKS	0
+#define TAPE_SHORT_FILEMARKS	2
+#define TAPE_ERASE_LONG 1
+#define TAPE_ERASE_SHORT 0
+#define TAPE_LOAD 0
+#define TAPE_UNLOAD 1
+#define TAPE_TENSION 2
+#define TAPE_LOCK 3
+#define TAPE_UNLOCK 4
+#define TAPE_FORMAT 5
+#if (_WIN32_WINNT >= 0x0500)
+#define VER_MINORVERSION 0x0000001
+#define VER_MAJORVERSION 0x0000002
+#define VER_BUILDNUMBER 0x0000004
+#define VER_PLATFORMID 0x0000008
+#define VER_SERVICEPACKMINOR 0x0000010
+#define VER_SERVICEPACKMAJOR 0x0000020
+#define VER_SUITENAME 0x0000040
+#define VER_PRODUCT_TYPE 0x0000080
+#define VER_EQUAL 1
+#define VER_GREATER 2
+#define VER_GREATER_EQUAL 3
+#define VER_LESS 4
+#define VER_LESS_EQUAL 5
+#define VER_AND 6
+#define VER_OR 7
+#endif
+#define VER_PLATFORM_WIN32s 0
+#define VER_PLATFORM_WIN32_WINDOWS 1
+#define VER_PLATFORM_WIN32_NT 2
+#define VER_NT_WORKSTATION 1
+#define VER_NT_DOMAIN_CONTROLLER 2
+#define VER_NT_SERVER 3
+#define VER_SUITE_SMALLBUSINESS 1
+#define VER_SUITE_ENTERPRISE 2
+#define VER_SUITE_BACKOFFICE 4
+#define VER_SUITE_TERMINAL 16
+#define VER_SUITE_SMALLBUSINESS_RESTRICTED 32
+#define VER_SUITE_EMBEDDEDNT 64
+#define VER_SUITE_DATACENTER 128
+#define VER_SUITE_SINGLEUSERTS 256
+#define VER_SUITE_PERSONAL 512
+#define VER_SUITE_BLADE 1024
+#define VER_SUITE_STORAGE_SERVER 8192
+#define VER_SUITE_COMPUTE_SERVER 16384
+#define WT_EXECUTEDEFAULT 0x00000000                           
+#define WT_EXECUTEINIOTHREAD 0x00000001                           
+#define WT_EXECUTEINWAITTHREAD 0x00000004                           
+#define WT_EXECUTEONLYONCE 0x00000008                           
+#define WT_EXECUTELONGFUNCTION 0x00000010                           
+#define WT_EXECUTEINTIMERTHREAD 0x00000020                           
+#define WT_EXECUTEINPERSISTENTTHREAD 0x00000080                      
+#define WT_TRANSFER_IMPERSONATION 0x00000100                         
+#if (_WIN32_WINNT >= 0x0501)
+#define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
+#define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
+#define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
+#define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
+#define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
+#define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
+#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
+#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
+#endif /* (_WIN32_WINNT >= 0x0501) */
+#define BTYPE(x) ((x)&N_BTMASK)
+#define ISPTR(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT))
+#define ISFCN(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION<<N_BTSHFT))
+#define ISARY(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY<<N_BTSHFT))
+#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG||(x)==IMAGE_SYM_CLASS_UNION_TAG||(x)==IMAGE_SYM_CLASS_ENUM_TAG)
+#define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
+#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
+#define TLS_MINIMUM_AVAILABLE 64
+#define REPARSE_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_DATA_BUFFER, GenericReparseBuffer)
+#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE   FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
+#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE 16384
+#define IO_REPARSE_TAG_RESERVED_ZERO 0
+#define IO_REPARSE_TAG_RESERVED_ONE 1
+#define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
+#define IsReparseTagMicrosoft(x) ((x)&0x80000000)
+#define IsReparseTagHighLatency(x) ((x)&0x40000000)
+#define IsReparseTagNameSurrogate(x) ((x)&0x20000000)
+#define IO_REPARSE_TAG_VALID_VALUES 0xE000FFFF
+#define IsReparseTagValid(x) (!((x)&~IO_REPARSE_TAG_VALID_VALUES)&&((x)>IO_REPARSE_TAG_RESERVED_RANGE))
+#define IO_REPARSE_TAG_SYMBOLIC_LINK IO_REPARSE_TAG_RESERVED_ZERO
+#define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003
+#define IO_REPARSE_TAG_SYMLINK 0xA000000C
+#define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) ((Flags)|=(Limit)<<16)
+#ifndef RC_INVOKED
+typedef DWORD ACCESS_MASK, *PACCESS_MASK;
+
+#ifdef _GUID_DEFINED
+# warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
+#endif
+
+#if ! (defined _GUID_DEFINED || defined GUID_DEFINED) /* also defined in basetyps.h */
+#define GUID_DEFINED
+typedef struct _GUID {
+	unsigned long  Data1;
+	unsigned short Data2;
+	unsigned short Data3;
+	unsigned char  Data4[8];
+} GUID, *REFGUID, *LPGUID;
+#define SYSTEM_LUID { 0x3e7, 0x0 }
+#endif /* GUID_DEFINED */
+typedef struct _GENERIC_MAPPING {
+	ACCESS_MASK GenericRead;
+	ACCESS_MASK GenericWrite;
+	ACCESS_MASK GenericExecute;
+	ACCESS_MASK GenericAll;
+} GENERIC_MAPPING, *PGENERIC_MAPPING;
+typedef struct _ACE_HEADER {
+	BYTE AceType;
+	BYTE AceFlags;
+	WORD AceSize;
+} ACE_HEADER, *PACE_HEADER;
+typedef struct _ACCESS_ALLOWED_ACE {
+	ACE_HEADER Header;
+	ACCESS_MASK Mask;
+	DWORD SidStart;
+} ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
+typedef struct _ACCESS_DENIED_ACE {
+	ACE_HEADER Header;
+	ACCESS_MASK Mask;
+	DWORD SidStart;
+} ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
+typedef struct _SYSTEM_AUDIT_ACE {
+	ACE_HEADER Header;
+	ACCESS_MASK Mask;
+	DWORD SidStart;
+} SYSTEM_AUDIT_ACE;
+typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
+typedef struct _SYSTEM_ALARM_ACE {
+	ACE_HEADER Header;
+	ACCESS_MASK Mask;
+	DWORD SidStart;
+} SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
+typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
+	ACE_HEADER Header;
+	ACCESS_MASK Mask;
+	DWORD Flags;
+	GUID ObjectType;
+	GUID InheritedObjectType;
+	DWORD SidStart;
+} ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
+typedef struct _ACCESS_DENIED_OBJECT_ACE {
+	ACE_HEADER Header;
+	ACCESS_MASK Mask;
+	DWORD Flags;
+	GUID ObjectType;
+	GUID InheritedObjectType;
+	DWORD SidStart;
+} ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
+typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
+	ACE_HEADER Header;
+	ACCESS_MASK Mask;
+	DWORD Flags;
+	GUID ObjectType;
+	GUID InheritedObjectType;
+	DWORD SidStart;
+} SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
+typedef struct _SYSTEM_ALARM_OBJECT_ACE {
+	ACE_HEADER Header;
+	ACCESS_MASK Mask;
+	DWORD Flags;
+	GUID ObjectType;
+	GUID InheritedObjectType;
+	DWORD SidStart;
+} SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
+typedef struct _ACL {
+	BYTE AclRevision;
+	BYTE Sbz1;
+	WORD AclSize;
+	WORD AceCount;
+	WORD Sbz2;
+} ACL,*PACL;
+typedef struct _ACL_REVISION_INFORMATION {
+	DWORD AclRevision;
+} ACL_REVISION_INFORMATION;
+typedef struct _ACL_SIZE_INFORMATION {
+	DWORD   AceCount;
+	DWORD   AclBytesInUse;
+	DWORD   AclBytesFree;
+} ACL_SIZE_INFORMATION;
+
+/* FIXME: add more machines */
+#ifdef _X86_
+#define SIZE_OF_80387_REGISTERS	80
+#define CONTEXT_i386	0x10000
+#define CONTEXT_i486	0x10000
+#define CONTEXT_CONTROL	(CONTEXT_i386|0x00000001L)
+#define CONTEXT_INTEGER	(CONTEXT_i386|0x00000002L)
+#define CONTEXT_SEGMENTS	(CONTEXT_i386|0x00000004L)
+#define CONTEXT_FLOATING_POINT	(CONTEXT_i386|0x00000008L)
+#define CONTEXT_DEBUG_REGISTERS	(CONTEXT_i386|0x00000010L)
+#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
+#define CONTEXT_FULL	(CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
+#define MAXIMUM_SUPPORTED_EXTENSION  512
+typedef struct _FLOATING_SAVE_AREA {
+	DWORD	ControlWord;
+	DWORD	StatusWord;
+	DWORD	TagWord;
+	DWORD	ErrorOffset;
+	DWORD	ErrorSelector;
+	DWORD	DataOffset;
+	DWORD	DataSelector;
+	BYTE	RegisterArea[80];
+	DWORD	Cr0NpxState;
+} FLOATING_SAVE_AREA;
+typedef struct _CONTEXT {
+	DWORD	ContextFlags;
+	DWORD	Dr0;
+	DWORD	Dr1;
+	DWORD	Dr2;
+	DWORD	Dr3;
+	DWORD	Dr6;
+	DWORD	Dr7;
+	FLOATING_SAVE_AREA FloatSave;
+	DWORD	SegGs;
+	DWORD	SegFs;
+	DWORD	SegEs;
+	DWORD	SegDs;
+	DWORD	Edi;
+	DWORD	Esi;
+	DWORD	Ebx;
+	DWORD	Edx;
+	DWORD	Ecx;
+	DWORD	Eax;
+	DWORD	Ebp;
+	DWORD	Eip;
+	DWORD	SegCs;
+	DWORD	EFlags;
+	DWORD	Esp;
+	DWORD	SegSs;
+	BYTE	ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
+} CONTEXT;
+#elif defined(_PPC_)
+#define CONTEXT_CONTROL	1L
+#define CONTEXT_FLOATING_POINT	2L
+#define CONTEXT_INTEGER	4L
+#define CONTEXT_DEBUG_REGISTERS	8L
+#define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
+typedef struct {
+	double Fpr0;
+	double Fpr1;
+	double Fpr2;
+	double Fpr3;
+	double Fpr4;
+	double Fpr5;
+	double Fpr6;
+	double Fpr7;
+	double Fpr8;
+	double Fpr9;
+	double Fpr10;
+	double Fpr11;
+	double Fpr12;
+	double Fpr13;
+	double Fpr14;
+	double Fpr15;
+	double Fpr16;
+	double Fpr17;
+	double Fpr18;
+	double Fpr19;
+	double Fpr20;
+	double Fpr21;
+	double Fpr22;
+	double Fpr23;
+	double Fpr24;
+	double Fpr25;
+	double Fpr26;
+	double Fpr27;
+	double Fpr28;
+	double Fpr29;
+	double Fpr30;
+	double Fpr31;
+	double Fpscr;
+	DWORD Gpr0;
+	DWORD Gpr1;
+	DWORD Gpr2;
+	DWORD Gpr3;
+	DWORD Gpr4;
+	DWORD Gpr5;
+	DWORD Gpr6;
+	DWORD Gpr7;
+	DWORD Gpr8;
+	DWORD Gpr9;
+	DWORD Gpr10;
+	DWORD Gpr11;
+	DWORD Gpr12;
+	DWORD Gpr13;
+	DWORD Gpr14;
+	DWORD Gpr15;
+	DWORD Gpr16;
+	DWORD Gpr17;
+	DWORD Gpr18;
+	DWORD Gpr19;
+	DWORD Gpr20;
+	DWORD Gpr21;
+	DWORD Gpr22;
+	DWORD Gpr23;
+	DWORD Gpr24;
+	DWORD Gpr25;
+	DWORD Gpr26;
+	DWORD Gpr27;
+	DWORD Gpr28;
+	DWORD Gpr29;
+	DWORD Gpr30;
+	DWORD Gpr31;
+	DWORD Cr;
+	DWORD Xer;
+	DWORD Msr;
+	DWORD Iar;
+	DWORD Lr;
+	DWORD Ctr;
+	DWORD ContextFlags;
+	DWORD Fill[3];
+	DWORD Dr0;
+	DWORD Dr1;
+	DWORD Dr2;
+	DWORD Dr3;
+	DWORD Dr4;
+	DWORD Dr5;
+	DWORD Dr6;
+	DWORD Dr7;
+} CONTEXT;
+#elif defined(_ALPHA_)
+#define CONTEXT_ALPHA	0x20000
+#define CONTEXT_CONTROL	(CONTEXT_ALPHA|1L)
+#define CONTEXT_FLOATING_POINT	(CONTEXT_ALPHA|2L)
+#define CONTEXT_INTEGER	(CONTEXT_ALPHA|4L)
+#define CONTEXT_FULL	(CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
+typedef struct _CONTEXT {
+	ULONGLONG FltF0;
+	ULONGLONG FltF1;
+	ULONGLONG FltF2;
+	ULONGLONG FltF3;
+	ULONGLONG FltF4;
+	ULONGLONG FltF5;
+	ULONGLONG FltF6;
+	ULONGLONG FltF7;
+	ULONGLONG FltF8;
+	ULONGLONG FltF9;
+	ULONGLONG FltF10;
+	ULONGLONG FltF11;
+	ULONGLONG FltF12;
+	ULONGLONG FltF13;
+	ULONGLONG FltF14;
+	ULONGLONG FltF15;
+	ULONGLONG FltF16;
+	ULONGLONG FltF17;
+	ULONGLONG FltF18;
+	ULONGLONG FltF19;
+	ULONGLONG FltF20;
+	ULONGLONG FltF21;
+	ULONGLONG FltF22;
+	ULONGLONG FltF23;
+	ULONGLONG FltF24;
+	ULONGLONG FltF25;
+	ULONGLONG FltF26;
+	ULONGLONG FltF27;
+	ULONGLONG FltF28;
+	ULONGLONG FltF29;
+	ULONGLONG FltF30;
+	ULONGLONG FltF31;
+	ULONGLONG IntV0;
+	ULONGLONG IntT0;
+	ULONGLONG IntT1;
+	ULONGLONG IntT2;
+	ULONGLONG IntT3;
+	ULONGLONG IntT4;
+	ULONGLONG IntT5;
+	ULONGLONG IntT6;
+	ULONGLONG IntT7;
+	ULONGLONG IntS0;
+	ULONGLONG IntS1;
+	ULONGLONG IntS2;
+	ULONGLONG IntS3;
+	ULONGLONG IntS4;
+	ULONGLONG IntS5;
+	ULONGLONG IntFp;
+	ULONGLONG IntA0;
+	ULONGLONG IntA1;
+	ULONGLONG IntA2;
+	ULONGLONG IntA3;
+	ULONGLONG IntA4;
+	ULONGLONG IntA5;
+	ULONGLONG IntT8;
+	ULONGLONG IntT9;
+	ULONGLONG IntT10;
+	ULONGLONG IntT11;
+	ULONGLONG IntRa;
+	ULONGLONG IntT12;
+	ULONGLONG IntAt;
+	ULONGLONG IntGp;
+	ULONGLONG IntSp;
+	ULONGLONG IntZero;
+	ULONGLONG Fpcr;
+	ULONGLONG SoftFpcr;
+	ULONGLONG Fir;
+	DWORD Psr;
+	DWORD ContextFlags;
+	DWORD Fill[4];
+} CONTEXT;
+#elif defined(SHx)
+
+/* These are the debug or break registers on the SH3 */
+typedef struct _DEBUG_REGISTERS {
+	ULONG  BarA;
+	UCHAR  BasrA;
+	UCHAR  BamrA;
+	USHORT BbrA;
+	ULONG  BarB;
+	UCHAR  BasrB;
+	UCHAR  BamrB;
+	USHORT BbrB;
+	ULONG  BdrB;
+	ULONG  BdmrB;
+	USHORT Brcr;
+	USHORT Align;
+} DEBUG_REGISTERS, *PDEBUG_REGISTERS;
+
+/* The following flags control the contents of the CONTEXT structure. */
+
+#define CONTEXT_SH3		0x00000040
+#define CONTEXT_SH4		0x000000c0	/* CONTEXT_SH3 | 0x80 - must contain the SH3 bits */
+
+#ifdef SH3
+#define CONTEXT_CONTROL         (CONTEXT_SH3 | 0x00000001L)
+#define CONTEXT_INTEGER         (CONTEXT_SH3 | 0x00000002L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH3 | 0x00000008L)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS)
+#else	/* SH4 */
+#define CONTEXT_CONTROL         (CONTEXT_SH4 | 0x00000001L)
+#define CONTEXT_INTEGER         (CONTEXT_SH4 | 0x00000002L)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH4 | 0x00000008L)
+#define CONTEXT_FLOATING_POINT  (CONTEXT_SH4 | 0x00000004L)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS | CONTEXT_FLOATING_POINT)
+#endif
+
+/* Context Frame */
+
+/*  This frame is used to store a limited processor context into the */
+/* Thread structure for CPUs which have no floating point support. */
+
+typedef struct _CONTEXT {
+	/* The flags values within this flag control the contents of */
+	/* a CONTEXT record. */
+
+	/* If the context record is used as an input parameter, then */
+	/* for each portion of the context record controlled by a flag */
+	/* whose value is set, it is assumed that that portion of the */
+	/* context record contains valid context. If the context record */
+	/* is being used to modify a thread's context, then only that */
+	/* portion of the threads context will be modified. */
+
+	/* If the context record is used as an IN OUT parameter to capture */
+	/* the context of a thread, then only those portions of the thread's */
+	/* context corresponding to set flags will be returned. */
+
+	/* The context record is never used as an OUT only parameter. */
+
+
+	ULONG ContextFlags;
+
+	/* This section is specified/returned if the ContextFlags word contains */
+	/* the flag CONTEXT_INTEGER. */
+
+	/* N.B. The registers RA and R15 are defined in this section, but are */
+	/*  considered part of the control context rather than part of the integer */
+	/*  context. */
+
+	ULONG PR;
+	ULONG MACH;
+	ULONG MACL;
+	ULONG GBR;
+	ULONG R0;
+	ULONG R1;
+	ULONG R2;
+	ULONG R3;
+	ULONG R4;
+	ULONG R5;
+	ULONG R6;
+	ULONG R7;
+	ULONG R8;
+	ULONG R9;
+	ULONG R10;
+	ULONG R11;
+	ULONG R12;
+	ULONG R13;
+	ULONG R14;
+	ULONG R15;
+
+	/* This section is specified/returned if the ContextFlags word contains */
+	/* the flag CONTEXT_CONTROL. */
+
+	/* N.B. The registers r15 and ra are defined in the integer section, */
+	/*   but are considered part of the control context rather than part of */
+	/*   the integer context. */
+
+	ULONG Fir;
+	ULONG Psr;
+
+#if !defined(SH3e) && !defined(SH4)
+	ULONG	OldStuff[2];
+	DEBUG_REGISTERS DebugRegisters;
+#else
+	ULONG	Fpscr;
+	ULONG	Fpul;
+	ULONG	FRegs[16];
+#if defined(SH4)
+	ULONG	xFRegs[16];
+#endif
+#endif
+} CONTEXT;
+
+#elif defined(MIPS)
+
+/* The following flags control the contents of the CONTEXT structure. */
+
+#define CONTEXT_R4000   0x00010000    /* r4000 context */
+
+#define CONTEXT_CONTROL         (CONTEXT_R4000 | 0x00000001L)
+#define CONTEXT_FLOATING_POINT  (CONTEXT_R4000 | 0x00000002L)
+#define CONTEXT_INTEGER         (CONTEXT_R4000 | 0x00000004L)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
+
+/* Context Frame */
+
+/*  N.B. This frame must be exactly a multiple of 16 bytes in length. */
+
+/*  This frame has a several purposes: 1) it is used as an argument to */
+/*  NtContinue, 2) it is used to constuct a call frame for APC delivery, */
+/*  3) it is used to construct a call frame for exception dispatching */
+/*  in user mode, and 4) it is used in the user level thread creation */
+/*  routines. */
+
+/*  The layout of the record conforms to a standard call frame. */
+
+
+typedef struct _CONTEXT {
+
+	/* This section is always present and is used as an argument build */
+	/* area. */
+
+	DWORD Argument[4];
+
+	/* This section is specified/returned if the ContextFlags word contains */
+	/* the flag CONTEXT_FLOATING_POINT. */
+
+	DWORD FltF0;
+	DWORD FltF1;
+	DWORD FltF2;
+	DWORD FltF3;
+	DWORD FltF4;
+	DWORD FltF5;
+	DWORD FltF6;
+	DWORD FltF7;
+	DWORD FltF8;
+	DWORD FltF9;
+	DWORD FltF10;
+	DWORD FltF11;
+	DWORD FltF12;
+	DWORD FltF13;
+	DWORD FltF14;
+	DWORD FltF15;
+	DWORD FltF16;
+	DWORD FltF17;
+	DWORD FltF18;
+	DWORD FltF19;
+	DWORD FltF20;
+	DWORD FltF21;
+	DWORD FltF22;
+	DWORD FltF23;
+	DWORD FltF24;
+	DWORD FltF25;
+	DWORD FltF26;
+	DWORD FltF27;
+	DWORD FltF28;
+	DWORD FltF29;
+	DWORD FltF30;
+	DWORD FltF31;
+
+	/* This section is specified/returned if the ContextFlags word contains */
+	/* the flag CONTEXT_INTEGER. */
+
+	/* N.B. The registers gp, sp, and ra are defined in this section, but are */
+	/*  considered part of the control context rather than part of the integer */
+	/*  context. */
+
+	/* N.B. Register zero is not stored in the frame. */
+
+	DWORD IntZero;
+	DWORD IntAt;
+	DWORD IntV0;
+	DWORD IntV1;
+	DWORD IntA0;
+	DWORD IntA1;
+	DWORD IntA2;
+	DWORD IntA3;
+	DWORD IntT0;
+	DWORD IntT1;
+	DWORD IntT2;
+	DWORD IntT3;
+	DWORD IntT4;
+	DWORD IntT5;
+	DWORD IntT6;
+	DWORD IntT7;
+	DWORD IntS0;
+	DWORD IntS1;
+	DWORD IntS2;
+	DWORD IntS3;
+	DWORD IntS4;
+	DWORD IntS5;
+	DWORD IntS6;
+	DWORD IntS7;
+	DWORD IntT8;
+	DWORD IntT9;
+	DWORD IntK0;
+	DWORD IntK1;
+	DWORD IntGp;
+	DWORD IntSp;
+	DWORD IntS8;
+	DWORD IntRa;
+	DWORD IntLo;
+	DWORD IntHi;
+
+	/* This section is specified/returned if the ContextFlags word contains */
+	/* the flag CONTEXT_FLOATING_POINT. */
+
+	DWORD Fsr;
+
+	/* This section is specified/returned if the ContextFlags word contains */
+	/* the flag CONTEXT_CONTROL. */
+
+	/* N.B. The registers gp, sp, and ra are defined in the integer section, */
+	/*   but are considered part of the control context rather than part of */
+	/*   the integer context. */
+
+	DWORD Fir;
+	DWORD Psr;
+
+	/* The flags values within this flag control the contents of */
+	/* a CONTEXT record. */
+
+	/* If the context record is used as an input parameter, then */
+	/* for each portion of the context record controlled by a flag */
+	/* whose value is set, it is assumed that that portion of the */
+	/* context record contains valid context. If the context record */
+	/* is being used to modify a thread's context, then only that */
+	/* portion of the threads context will be modified. */
+
+	/* If the context record is used as an IN OUT parameter to capture */
+	/* the context of a thread, then only those portions of the thread's */
+	/* context corresponding to set flags will be returned. */
+
+	/* The context record is never used as an OUT only parameter. */
+
+	DWORD ContextFlags;
+
+	DWORD Fill[2];
+
+} CONTEXT;
+#elif defined(ARM)
+
+/* The following flags control the contents of the CONTEXT structure. */
+
+#define CONTEXT_ARM    0x0000040
+#define CONTEXT_CONTROL         (CONTEXT_ARM | 0x00000001L)
+#define CONTEXT_INTEGER         (CONTEXT_ARM | 0x00000002L)
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
+
+typedef struct _CONTEXT {
+	/* The flags values within this flag control the contents of
+	   a CONTEXT record.
+	  
+	   If the context record is used as an input parameter, then
+	   for each portion of the context record controlled by a flag
+	   whose value is set, it is assumed that that portion of the
+	   context record contains valid context. If the context record
+	   is being used to modify a thread's context, then only that
+	   portion of the threads context will be modified.
+	  
+	   If the context record is used as an IN OUT parameter to capture
+	   the context of a thread, then only those portions of the thread's
+	   context corresponding to set flags will be returned.
+	  
+	   The context record is never used as an OUT only parameter. */
+
+	ULONG ContextFlags;
+
+	/* This section is specified/returned if the ContextFlags word contains
+	   the flag CONTEXT_INTEGER. */
+	ULONG R0;
+	ULONG R1;
+	ULONG R2;
+	ULONG R3;
+	ULONG R4;
+	ULONG R5;
+	ULONG R6;
+	ULONG R7;
+	ULONG R8;
+	ULONG R9;
+	ULONG R10;
+	ULONG R11;
+	ULONG R12;
+
+	ULONG Sp;
+	ULONG Lr;
+	ULONG Pc;
+	ULONG Psr;
+} CONTEXT;
+
+#else
+#error "undefined processor type"
+#endif
+typedef CONTEXT *PCONTEXT,*LPCONTEXT;
+typedef struct _EXCEPTION_RECORD {
+	DWORD ExceptionCode;
+	DWORD ExceptionFlags;
+	struct _EXCEPTION_RECORD *ExceptionRecord;
+	PVOID ExceptionAddress;
+	DWORD NumberParameters;
+	DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD,*PEXCEPTION_RECORD,*LPEXCEPTION_RECORD;
+typedef struct _EXCEPTION_POINTERS {
+	PEXCEPTION_RECORD ExceptionRecord;
+	PCONTEXT ContextRecord;
+} EXCEPTION_POINTERS,*PEXCEPTION_POINTERS,*LPEXCEPTION_POINTERS;
+typedef union _LARGE_INTEGER {
+  struct {
+    DWORD LowPart;
+    LONG  HighPart;
+  } u;
+#if ! defined(NONAMELESSUNION) || defined(__cplusplus)
+  _ANONYMOUS_STRUCT struct {
+    DWORD LowPart;
+    LONG  HighPart;
+  };
+#endif /* NONAMELESSUNION */
+  LONGLONG QuadPart;
+} LARGE_INTEGER, *PLARGE_INTEGER;
+typedef union _ULARGE_INTEGER {
+  struct {
+    DWORD LowPart;
+    DWORD HighPart;
+  } u;
+#if ! defined(NONAMELESSUNION) || defined(__cplusplus)
+  _ANONYMOUS_STRUCT struct {
+    DWORD LowPart;
+    DWORD HighPart;
+  };
+#endif /* NONAMELESSUNION */
+  ULONGLONG QuadPart;
+} ULARGE_INTEGER, *PULARGE_INTEGER;
+typedef struct _LUID {
+  DWORD LowPart;
+  LONG HighPart;
+} LUID, *PLUID;
+#pragma pack(push,4)
+typedef struct _LUID_AND_ATTRIBUTES {
+	LUID   Luid;
+	DWORD  Attributes;
+} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
+#pragma pack(pop)
+typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
+typedef struct _PRIVILEGE_SET {
+	DWORD PrivilegeCount;
+	DWORD Control;
+	LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+} PRIVILEGE_SET,*PPRIVILEGE_SET;
+typedef struct _SECURITY_ATTRIBUTES {
+	DWORD nLength;
+	LPVOID lpSecurityDescriptor;
+	BOOL bInheritHandle;
+} SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;
+typedef enum _SECURITY_IMPERSONATION_LEVEL {
+	SecurityAnonymous,
+	SecurityIdentification,
+	SecurityImpersonation,
+	SecurityDelegation
+} SECURITY_IMPERSONATION_LEVEL,*PSECURITY_IMPERSONATION_LEVEL;
+typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+	DWORD Length;
+	SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+	SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
+	BOOLEAN EffectiveOnly;
+} SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
+typedef PVOID PACCESS_TOKEN;
+typedef struct _SE_IMPERSONATION_STATE {
+	PACCESS_TOKEN Token;
+	BOOLEAN CopyOnOpen;
+	BOOLEAN EffectiveOnly;
+	SECURITY_IMPERSONATION_LEVEL Level;
+} SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
+typedef struct _SID_IDENTIFIER_AUTHORITY {
+	BYTE Value[6];
+} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
+typedef PVOID PSID;
+typedef struct _SID {
+   BYTE  Revision;
+   BYTE  SubAuthorityCount;
+   SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+   DWORD SubAuthority[ANYSIZE_ARRAY];
+} SID, *PISID;
+typedef struct _SID_AND_ATTRIBUTES {
+	PSID Sid;
+	DWORD Attributes;
+} SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
+typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
+typedef struct _TOKEN_SOURCE {
+	CHAR SourceName[TOKEN_SOURCE_LENGTH];
+	LUID SourceIdentifier;
+} TOKEN_SOURCE,*PTOKEN_SOURCE;
+typedef struct _TOKEN_CONTROL {
+	LUID TokenId;
+	LUID AuthenticationId;
+	LUID ModifiedId;
+	TOKEN_SOURCE TokenSource;
+} TOKEN_CONTROL,*PTOKEN_CONTROL;
+typedef struct _TOKEN_DEFAULT_DACL {
+	PACL DefaultDacl;
+} TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
+typedef struct _TOKEN_GROUPS {
+	DWORD GroupCount;
+	SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
+} TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
+typedef struct _TOKEN_OWNER {
+	PSID Owner;
+} TOKEN_OWNER,*PTOKEN_OWNER;
+typedef struct _TOKEN_PRIMARY_GROUP {
+	PSID PrimaryGroup;
+} TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
+typedef struct _TOKEN_PRIVILEGES {
+	DWORD PrivilegeCount;
+	LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
+} TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
+typedef enum tagTOKEN_TYPE {
+	TokenPrimary = 1,
+	TokenImpersonation
+} TOKEN_TYPE,*PTOKEN_TYPE;
+typedef struct _TOKEN_STATISTICS {
+	LUID TokenId;
+	LUID AuthenticationId;
+	LARGE_INTEGER ExpirationTime;
+	TOKEN_TYPE TokenType;
+	SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+	DWORD DynamicCharged;
+	DWORD DynamicAvailable;
+	DWORD GroupCount;
+	DWORD PrivilegeCount;
+	LUID ModifiedId;
+} TOKEN_STATISTICS, *PTOKEN_STATISTICS;
+typedef struct _TOKEN_USER {
+	SID_AND_ATTRIBUTES User;
+} TOKEN_USER, *PTOKEN_USER;
+typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
+typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
+typedef struct _SECURITY_DESCRIPTOR {
+	BYTE Revision;
+	BYTE Sbz1;
+	SECURITY_DESCRIPTOR_CONTROL Control;
+	PSID Owner;
+	PSID Group;
+	PACL Sacl;
+	PACL Dacl;
+} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
+typedef enum _TOKEN_INFORMATION_CLASS {
+	TokenUser=1,
+	TokenGroups,
+	TokenPrivileges,
+	TokenOwner,
+	TokenPrimaryGroup,
+	TokenDefaultDacl,
+	TokenSource,
+	TokenType,
+	TokenImpersonationLevel,
+	TokenStatistics,
+	TokenRestrictedSids,
+	TokenSessionId,
+	TokenGroupsAndPrivileges,
+	TokenSessionReference,
+	TokenSandBoxInert,
+	TokenAuditPolicy,
+	TokenOrigin  
+} TOKEN_INFORMATION_CLASS;
+typedef enum _SID_NAME_USE {
+	SidTypeUser=1,
+	SidTypeGroup,
+	SidTypeDomain,
+	SidTypeAlias,
+	SidTypeWellKnownGroup,
+	SidTypeDeletedAccount,
+	SidTypeInvalid,
+	SidTypeUnknown,
+	SidTypeComputer
+} SID_NAME_USE,*PSID_NAME_USE;
+typedef struct _QUOTA_LIMITS {
+	SIZE_T PagedPoolLimit;
+	SIZE_T NonPagedPoolLimit;
+	SIZE_T MinimumWorkingSetSize;
+	SIZE_T MaximumWorkingSetSize;
+	SIZE_T PagefileLimit;
+	LARGE_INTEGER TimeLimit;
+} QUOTA_LIMITS,*PQUOTA_LIMITS;
+typedef struct _IO_COUNTERS {
+	ULONGLONG  ReadOperationCount;
+	ULONGLONG  WriteOperationCount;
+	ULONGLONG  OtherOperationCount;
+	ULONGLONG ReadTransferCount;
+	ULONGLONG WriteTransferCount;
+	ULONGLONG OtherTransferCount;
+} IO_COUNTERS, *PIO_COUNTERS;
+typedef struct _FILE_NOTIFY_INFORMATION {
+	DWORD NextEntryOffset;
+	DWORD Action;
+	DWORD FileNameLength;
+	WCHAR FileName[1];
+} FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
+typedef struct _TAPE_ERASE {
+	DWORD Type;
+	BOOLEAN Immediate;
+} TAPE_ERASE,*PTAPE_ERASE;
+typedef struct _TAPE_GET_DRIVE_PARAMETERS {
+	BOOLEAN ECC;
+	BOOLEAN Compression;
+	BOOLEAN DataPadding;
+	BOOLEAN ReportSetmarks;
+ 	DWORD DefaultBlockSize;
+ 	DWORD MaximumBlockSize;
+ 	DWORD MinimumBlockSize;
+ 	DWORD MaximumPartitionCount;
+ 	DWORD FeaturesLow;
+ 	DWORD FeaturesHigh;
+ 	DWORD EOTWarningZoneSize;
+} TAPE_GET_DRIVE_PARAMETERS,*PTAPE_GET_DRIVE_PARAMETERS;
+typedef struct _TAPE_GET_MEDIA_PARAMETERS {
+	LARGE_INTEGER Capacity;
+	LARGE_INTEGER Remaining;
+	DWORD BlockSize;
+	DWORD PartitionCount;
+	BOOLEAN WriteProtected;
+} TAPE_GET_MEDIA_PARAMETERS,*PTAPE_GET_MEDIA_PARAMETERS;
+typedef struct _TAPE_GET_POSITION {
+	ULONG Type;
+	ULONG Partition;
+	ULONG OffsetLow;
+	ULONG OffsetHigh;
+} TAPE_GET_POSITION,*PTAPE_GET_POSITION;
+typedef struct _TAPE_PREPARE {
+	DWORD Operation;
+	BOOLEAN Immediate;
+} TAPE_PREPARE,*PTAPE_PREPARE;
+typedef struct _TAPE_SET_DRIVE_PARAMETERS {
+	BOOLEAN ECC;
+	BOOLEAN Compression;
+	BOOLEAN DataPadding;
+	BOOLEAN ReportSetmarks;
+	ULONG EOTWarningZoneSize;
+} TAPE_SET_DRIVE_PARAMETERS,*PTAPE_SET_DRIVE_PARAMETERS;
+typedef struct _TAPE_SET_MEDIA_PARAMETERS {
+	ULONG BlockSize;
+} TAPE_SET_MEDIA_PARAMETERS,*PTAPE_SET_MEDIA_PARAMETERS;
+typedef struct _TAPE_SET_POSITION {
+	DWORD Method;
+	DWORD Partition;
+	LARGE_INTEGER Offset;
+	BOOLEAN Immediate;
+} TAPE_SET_POSITION,*PTAPE_SET_POSITION;
+typedef struct _TAPE_WRITE_MARKS {
+	DWORD Type;
+	DWORD Count;
+	BOOLEAN Immediate;
+} TAPE_WRITE_MARKS,*PTAPE_WRITE_MARKS;
+typedef struct _TAPE_CREATE_PARTITION {
+	DWORD Method;
+	DWORD Count;
+	DWORD Size;
+} TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
+typedef struct _MEMORY_BASIC_INFORMATION {
+	PVOID BaseAddress;
+	PVOID AllocationBase;
+	DWORD AllocationProtect;
+	DWORD RegionSize;
+	DWORD State;
+	DWORD Protect;
+	DWORD Type;
+} MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
+typedef struct _MESSAGE_RESOURCE_ENTRY {
+	WORD Length;
+	WORD Flags;
+	BYTE Text[1];
+} MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
+typedef struct _MESSAGE_RESOURCE_BLOCK {
+	DWORD LowId;
+	DWORD HighId;
+	DWORD OffsetToEntries;
+} MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
+typedef struct _MESSAGE_RESOURCE_DATA {
+	DWORD NumberOfBlocks;
+	MESSAGE_RESOURCE_BLOCK Blocks[1];
+} MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
+typedef struct _LIST_ENTRY {
+	struct _LIST_ENTRY *Flink;
+	struct _LIST_ENTRY *Blink;
+} LIST_ENTRY,*PLIST_ENTRY;
+typedef struct _SINGLE_LIST_ENTRY {
+	struct _SINGLE_LIST_ENTRY *Next;
+} SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
+
+#ifndef _SLIST_HEADER_
+#define _SLIST_HEADER_
+#define SLIST_ENTRY SINGLE_LIST_ENTRY
+#define _SLIST_ENTRY _SINGLE_LIST_ENTRY
+#define PSLIST_ENTRY PSINGLE_LIST_ENTRY
+typedef union _SLIST_HEADER {
+	ULONGLONG Alignment;
+	_ANONYMOUS_STRUCT struct {
+		SLIST_ENTRY Next;
+		WORD Depth;
+		WORD Sequence;
+	} DUMMYSTRUCTNAME;
+} SLIST_HEADER,*PSLIST_HEADER;
+#endif /* !_SLIST_HEADER_ */
+
+typedef struct _RTL_CRITICAL_SECTION_DEBUG {
+	WORD Type;
+	WORD CreatorBackTraceIndex;
+	struct _RTL_CRITICAL_SECTION *CriticalSection;
+	LIST_ENTRY ProcessLocksList;
+	DWORD EntryCount;
+	DWORD ContentionCount;
+	DWORD Spare[2];
+} RTL_CRITICAL_SECTION_DEBUG,*PRTL_CRITICAL_SECTION_DEBUG;
+typedef struct _RTL_CRITICAL_SECTION {
+	PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
+	LONG LockCount;
+	LONG RecursionCount;
+	HANDLE OwningThread;
+	HANDLE LockSemaphore;
+	DWORD Reserved;
+} RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
+typedef struct _EVENTLOGRECORD {
+	DWORD Length;
+	DWORD Reserved;
+	DWORD RecordNumber;
+	DWORD TimeGenerated;
+	DWORD TimeWritten;
+	DWORD EventID;
+	WORD EventType;
+	WORD NumStrings;
+	WORD EventCategory;
+	WORD ReservedFlags;
+	DWORD ClosingRecordNumber;
+	DWORD StringOffset;
+	DWORD UserSidLength;
+	DWORD UserSidOffset;
+	DWORD DataLength;
+	DWORD DataOffset;
+} EVENTLOGRECORD,*PEVENTLOGRECORD;
+typedef struct _OSVERSIONINFOA {
+	DWORD dwOSVersionInfoSize;
+	DWORD dwMajorVersion;
+	DWORD dwMinorVersion;
+	DWORD dwBuildNumber;
+	DWORD dwPlatformId;
+	CHAR szCSDVersion[128];
+} OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
+typedef struct _OSVERSIONINFOW {
+	DWORD dwOSVersionInfoSize;
+	DWORD dwMajorVersion;
+	DWORD dwMinorVersion;
+	DWORD dwBuildNumber;
+	DWORD dwPlatformId;
+	WCHAR szCSDVersion[128];
+} OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW;
+typedef struct _OSVERSIONINFOEXA {
+	DWORD dwOSVersionInfoSize;
+	DWORD dwMajorVersion;
+	DWORD dwMinorVersion;
+	DWORD dwBuildNumber;
+	DWORD dwPlatformId;
+	CHAR szCSDVersion[128];
+	WORD wServicePackMajor;
+	WORD wServicePackMinor;
+	WORD wSuiteMask;
+	BYTE wProductType;
+	BYTE wReserved;
+} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
+typedef struct _OSVERSIONINFOEXW {
+	DWORD dwOSVersionInfoSize;
+	DWORD dwMajorVersion;
+	DWORD dwMinorVersion;
+	DWORD dwBuildNumber;
+	DWORD dwPlatformId;
+	WCHAR szCSDVersion[128];
+	WORD wServicePackMajor;
+	WORD wServicePackMinor;
+	WORD wSuiteMask;
+	BYTE wProductType;
+	BYTE wReserved;
+} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
+#pragma pack(push,2)
+typedef struct _IMAGE_VXD_HEADER {
+	WORD e32_magic;
+	BYTE e32_border;
+	BYTE e32_worder;
+	DWORD e32_level;
+	WORD e32_cpu;
+	WORD e32_os;
+	DWORD e32_ver;
+	DWORD e32_mflags;
+	DWORD e32_mpages;
+	DWORD e32_startobj;
+	DWORD e32_eip;
+	DWORD e32_stackobj;
+	DWORD e32_esp;
+	DWORD e32_pagesize;
+	DWORD e32_lastpagesize;
+	DWORD e32_fixupsize;
+	DWORD e32_fixupsum;
+	DWORD e32_ldrsize;
+	DWORD e32_ldrsum;
+	DWORD e32_objtab;
+	DWORD e32_objcnt;
+	DWORD e32_objmap;
+	DWORD e32_itermap;
+	DWORD e32_rsrctab;
+	DWORD e32_rsrccnt;
+	DWORD e32_restab;
+	DWORD e32_enttab;
+	DWORD e32_dirtab;
+	DWORD e32_dircnt;
+	DWORD e32_fpagetab;
+	DWORD e32_frectab;
+	DWORD e32_impmod;
+	DWORD e32_impmodcnt;
+	DWORD e32_impproc;
+	DWORD e32_pagesum;
+	DWORD e32_datapage;
+	DWORD e32_preload;
+	DWORD e32_nrestab;
+	DWORD e32_cbnrestab;
+	DWORD e32_nressum;
+	DWORD e32_autodata;
+	DWORD e32_debuginfo;
+	DWORD e32_debuglen;
+	DWORD e32_instpreload;
+	DWORD e32_instdemand;
+	DWORD e32_heapsize;
+	BYTE e32_res3[12];
+	DWORD e32_winresoff;
+	DWORD e32_winreslen;
+	WORD e32_devid;
+	WORD e32_ddkver;
+} IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
+#pragma pack(pop)
+#pragma pack(push,4)
+typedef struct _IMAGE_FILE_HEADER {
+	WORD Machine;
+	WORD NumberOfSections;
+	DWORD TimeDateStamp;
+	DWORD PointerToSymbolTable;
+	DWORD NumberOfSymbols;
+	WORD SizeOfOptionalHeader;
+	WORD Characteristics;
+} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
+typedef struct _IMAGE_DATA_DIRECTORY {
+	DWORD VirtualAddress;
+	DWORD Size;
+} IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
+typedef struct _IMAGE_OPTIONAL_HEADER {
+	WORD Magic;
+	BYTE MajorLinkerVersion;
+	BYTE MinorLinkerVersion;
+	DWORD SizeOfCode;
+	DWORD SizeOfInitializedData;
+	DWORD SizeOfUninitializedData;
+	DWORD AddressOfEntryPoint;
+	DWORD BaseOfCode;
+	DWORD BaseOfData;
+	DWORD ImageBase;
+	DWORD SectionAlignment;
+	DWORD FileAlignment;
+	WORD MajorOperatingSystemVersion;
+	WORD MinorOperatingSystemVersion;
+	WORD MajorImageVersion;
+	WORD MinorImageVersion;
+	WORD MajorSubsystemVersion;
+	WORD MinorSubsystemVersion;
+	DWORD Win32VersionValue;
+	DWORD SizeOfImage;
+	DWORD SizeOfHeaders;
+	DWORD CheckSum;
+	WORD Subsystem;
+	WORD DllCharacteristics;
+	DWORD SizeOfStackReserve;
+	DWORD SizeOfStackCommit;
+	DWORD SizeOfHeapReserve;
+	DWORD SizeOfHeapCommit;
+	DWORD LoaderFlags;
+	DWORD NumberOfRvaAndSizes;
+	IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
+typedef struct _IMAGE_OPTIONAL_HEADER64 {
+	WORD Magic;
+	BYTE MajorLinkerVersion;
+	BYTE MinorLinkerVersion;
+	DWORD SizeOfCode;
+	DWORD SizeOfInitializedData;
+	DWORD SizeOfUninitializedData;
+	DWORD AddressOfEntryPoint;
+	DWORD BaseOfCode;
+	ULONGLONG ImageBase;
+	DWORD SectionAlignment;
+	DWORD FileAlignment;
+	WORD MajorOperatingSystemVersion;
+	WORD MinorOperatingSystemVersion;
+	WORD MajorImageVersion;
+	WORD MinorImageVersion;
+	WORD MajorSubsystemVersion;
+	WORD MinorSubsystemVersion;
+	DWORD Win32VersionValue;
+	DWORD SizeOfImage;
+	DWORD SizeOfHeaders;
+	DWORD CheckSum;
+	WORD Subsystem;
+	WORD DllCharacteristics;
+	ULONGLONG SizeOfStackReserve;
+	ULONGLONG SizeOfStackCommit;
+	ULONGLONG SizeOfHeapReserve;
+	ULONGLONG SizeOfHeapCommit;
+	DWORD LoaderFlags;
+	DWORD NumberOfRvaAndSizes;
+	IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
+} IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
+#ifdef _WIN64
+typedef IMAGE_OPTIONAL_HEADER64		IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER64	PIMAGE_OPTIONAL_HEADER;
+#else
+typedef IMAGE_OPTIONAL_HEADER32		IMAGE_OPTIONAL_HEADER;
+typedef PIMAGE_OPTIONAL_HEADER32	PIMAGE_OPTIONAL_HEADER;
+#endif
+typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
+	WORD Magic;
+	BYTE MajorLinkerVersion;
+	BYTE MinorLinkerVersion;
+	DWORD SizeOfCode;
+	DWORD SizeOfInitializedData;
+	DWORD SizeOfUninitializedData;
+	DWORD AddressOfEntryPoint;
+	DWORD BaseOfCode;
+	DWORD BaseOfData;
+	DWORD BaseOfBss;
+	DWORD GprMask;
+	DWORD CprMask[4];
+	DWORD GpValue;
+} IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
+#pragma pack(pop)
+#pragma pack(push,2)
+typedef struct _IMAGE_DOS_HEADER {
+	WORD e_magic;
+	WORD e_cblp;
+	WORD e_cp;
+	WORD e_crlc;
+	WORD e_cparhdr;
+	WORD e_minalloc;
+	WORD e_maxalloc;
+	WORD e_ss;
+	WORD e_sp;
+	WORD e_csum;
+	WORD e_ip;
+	WORD e_cs;
+	WORD e_lfarlc;
+	WORD e_ovno;
+	WORD e_res[4];
+	WORD e_oemid;
+	WORD e_oeminfo;
+	WORD e_res2[10];
+	LONG e_lfanew;
+} IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
+typedef struct _IMAGE_OS2_HEADER {
+	WORD ne_magic;
+	CHAR ne_ver;
+	CHAR ne_rev;
+	WORD ne_enttab;
+	WORD ne_cbenttab;
+	LONG ne_crc;
+	WORD ne_flags;
+	WORD ne_autodata;
+	WORD ne_heap;
+	WORD ne_stack;
+	LONG ne_csip;
+	LONG ne_sssp;
+	WORD ne_cseg;
+	WORD ne_cmod;
+	WORD ne_cbnrestab;
+	WORD ne_segtab;
+	WORD ne_rsrctab;
+	WORD ne_restab;
+	WORD ne_modtab;
+	WORD ne_imptab;
+	LONG ne_nrestab;
+	WORD ne_cmovent;
+	WORD ne_align;
+	WORD ne_cres;
+	BYTE ne_exetyp;
+	BYTE ne_flagsothers;
+	WORD ne_pretthunks;
+	WORD ne_psegrefbytes;
+	WORD ne_swaparea;
+	WORD ne_expver;
+} IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
+#pragma pack(pop)
+#pragma pack(push,4)
+typedef struct _IMAGE_NT_HEADERS {
+	DWORD Signature;
+	IMAGE_FILE_HEADER FileHeader;
+	IMAGE_OPTIONAL_HEADER OptionalHeader;
+} IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
+typedef struct _IMAGE_NT_HEADERS64 {
+	DWORD Signature;
+	IMAGE_FILE_HEADER FileHeader;
+	IMAGE_OPTIONAL_HEADER OptionalHeader;
+} IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;
+#ifdef _WIN64
+typedef IMAGE_NT_HEADERS64	IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS64	PIMAGE_NT_HEADERS;
+#else
+typedef IMAGE_NT_HEADERS32	IMAGE_NT_HEADERS;
+typedef PIMAGE_NT_HEADERS32	PIMAGE_NT_HEADERS;
+#endif
+typedef struct _IMAGE_ROM_HEADERS {
+	IMAGE_FILE_HEADER FileHeader;
+	IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
+} IMAGE_ROM_HEADERS,*PIMAGE_ROM_HEADERS;
+typedef struct _IMAGE_SECTION_HEADER {
+	BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
+	union {
+		DWORD PhysicalAddress;
+		DWORD VirtualSize;
+	} Misc;
+	DWORD VirtualAddress;
+	DWORD SizeOfRawData;
+	DWORD PointerToRawData;
+	DWORD PointerToRelocations;
+	DWORD PointerToLinenumbers;
+	WORD NumberOfRelocations;
+	WORD NumberOfLinenumbers;
+	DWORD Characteristics;
+} IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
+#pragma pack(pop)
+#pragma pack(push,2)
+typedef struct _IMAGE_SYMBOL {
+	union {
+		BYTE ShortName[8];
+		struct {
+			DWORD Short;
+			DWORD Long;
+		} Name;
+		PBYTE LongName[2];
+	} N;
+	DWORD Value;
+	SHORT SectionNumber;
+	WORD Type;
+	BYTE StorageClass;
+	BYTE NumberOfAuxSymbols;
+} IMAGE_SYMBOL,*PIMAGE_SYMBOL;
+typedef union _IMAGE_AUX_SYMBOL {
+	struct {
+		DWORD TagIndex;
+		union {
+			struct {
+				WORD Linenumber;
+				WORD Size;
+			} LnSz;
+			DWORD TotalSize;
+		} Misc;
+		union {
+			struct {
+				DWORD PointerToLinenumber;
+				DWORD PointerToNextFunction;
+			} Function;
+			struct {
+				WORD Dimension[4];
+			} Array;
+		} FcnAry;
+		WORD TvIndex;
+	} Sym;
+	struct {
+		BYTE Name[IMAGE_SIZEOF_SYMBOL];
+	} File;
+	struct {
+		DWORD Length;
+		WORD NumberOfRelocations;
+		WORD NumberOfLinenumbers;
+		DWORD CheckSum;
+		SHORT Number;
+		BYTE Selection;
+	} Section;
+} IMAGE_AUX_SYMBOL,*PIMAGE_AUX_SYMBOL;
+typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
+	DWORD NumberOfSymbols;
+	DWORD LvaToFirstSymbol;
+	DWORD NumberOfLinenumbers;
+	DWORD LvaToFirstLinenumber;
+	DWORD RvaToFirstByteOfCode;
+	DWORD RvaToLastByteOfCode;
+	DWORD RvaToFirstByteOfData;
+	DWORD RvaToLastByteOfData;
+} IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
+typedef struct _IMAGE_RELOCATION {
+	_ANONYMOUS_UNION union {
+		DWORD VirtualAddress;
+		DWORD RelocCount;
+	} DUMMYUNIONNAME;
+	DWORD SymbolTableIndex;
+	WORD Type;
+} IMAGE_RELOCATION,*PIMAGE_RELOCATION;
+#pragma pack(pop)
+#pragma pack(push,4)
+typedef struct _IMAGE_BASE_RELOCATION {
+	DWORD VirtualAddress;
+	DWORD SizeOfBlock;
+} IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
+#pragma pack(pop)
+#pragma pack(push,2)
+typedef struct _IMAGE_LINENUMBER {
+	union {
+		DWORD SymbolTableIndex;
+		DWORD VirtualAddress;
+	} Type;
+	WORD Linenumber;
+} IMAGE_LINENUMBER,*PIMAGE_LINENUMBER;
+#pragma pack(pop)
+#pragma pack(push,4)
+typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
+	BYTE Name[16];
+	BYTE Date[12];
+	BYTE UserID[6];
+	BYTE GroupID[6];
+	BYTE Mode[8];
+	BYTE Size[10];
+	BYTE EndHeader[2];
+} IMAGE_ARCHIVE_MEMBER_HEADER,*PIMAGE_ARCHIVE_MEMBER_HEADER;
+typedef struct _IMAGE_EXPORT_DIRECTORY {
+	DWORD Characteristics;
+	DWORD TimeDateStamp;
+	WORD MajorVersion;
+	WORD MinorVersion;
+	DWORD Name;
+	DWORD Base;
+	DWORD NumberOfFunctions;
+	DWORD NumberOfNames;
+	DWORD AddressOfFunctions;
+	DWORD AddressOfNames;
+	DWORD AddressOfNameOrdinals;
+} IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
+typedef struct _IMAGE_IMPORT_BY_NAME {
+	WORD Hint;
+	BYTE Name[1];
+} IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
+typedef struct _IMAGE_THUNK_DATA32 {
+	union {
+		DWORD ForwarderString;
+		DWORD Function;
+		DWORD Ordinal;
+		DWORD AddressOfData;
+	} u1;
+} IMAGE_THUNK_DATA32,*PIMAGE_THUNK_DATA32;
+typedef struct _IMAGE_THUNK_DATA64 {
+	union {
+		ULONGLONG ForwarderString;
+		ULONGLONG Function;
+		ULONGLONG Ordinal;
+		ULONGLONG AddressOfData;
+	} u1;
+} IMAGE_THUNK_DATA64, *PIMAGE_THUNK_DATA64;
+#ifdef __WIN64
+typedef IMAGE_THUNK_DATA64	IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA64	PIMAGE_THUNK_DATA;
+#else
+typedef IMAGE_THUNK_DATA32	IMAGE_THUNK_DATA;
+typedef PIMAGE_THUNK_DATA32	PIMAGE_THUNK_DATA;
+#endif
+typedef struct _IMAGE_IMPORT_DESCRIPTOR {
+	_ANONYMOUS_UNION union {
+		DWORD Characteristics;
+		DWORD OriginalFirstThunk;
+	} DUMMYUNIONNAME;
+	DWORD TimeDateStamp;
+	DWORD ForwarderChain;
+	DWORD Name;
+	DWORD FirstThunk;
+} IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
+typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
+	DWORD TimeDateStamp;
+	WORD OffsetModuleName;
+	WORD NumberOfModuleForwarderRefs;
+} IMAGE_BOUND_IMPORT_DESCRIPTOR,*PIMAGE_BOUND_IMPORT_DESCRIPTOR;
+typedef struct _IMAGE_BOUND_FORWARDER_REF {
+	DWORD TimeDateStamp;
+	WORD OffsetModuleName;
+	WORD Reserved;
+} IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
+typedef void(NTAPI *PIMAGE_TLS_CALLBACK)(PVOID,DWORD,PVOID);
+typedef struct _IMAGE_TLS_DIRECTORY32 {
+	DWORD StartAddressOfRawData;
+	DWORD EndAddressOfRawData;
+	DWORD AddressOfIndex;
+	DWORD AddressOfCallBacks;
+	DWORD SizeOfZeroFill;
+	DWORD Characteristics;
+} IMAGE_TLS_DIRECTORY32,*PIMAGE_TLS_DIRECTORY32;
+typedef struct _IMAGE_TLS_DIRECTORY64 {
+	ULONGLONG StartAddressOfRawData;
+	ULONGLONG EndAddressOfRawData;
+	ULONGLONG AddressOfIndex;
+	ULONGLONG AddressOfCallBacks;
+	DWORD SizeOfZeroFill;
+	DWORD Characteristics;
+} IMAGE_TLS_DIRECTORY64, *PIMAGE_TLS_DIRECTORY64;
+#ifdef __WIN64
+typedef IMAGE_TLS_DIRECTORY64	IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY64	PIMAGE_TLS_DIRECTORY;
+#else
+typedef IMAGE_TLS_DIRECTORY32	IMAGE_TLS_DIRECTORY;
+typedef PIMAGE_TLS_DIRECTORY32	PIMAGE_TLS_DIRECTORY;
+#endif
+typedef struct _IMAGE_RESOURCE_DIRECTORY {
+	DWORD Characteristics;
+	DWORD TimeDateStamp;
+	WORD MajorVersion;
+	WORD MinorVersion;
+	WORD NumberOfNamedEntries;
+	WORD NumberOfIdEntries;
+} IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
+_ANONYMOUS_STRUCT typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
+	_ANONYMOUS_UNION union {
+		_ANONYMOUS_STRUCT struct {
+			DWORD NameOffset:31;
+			DWORD NameIsString:1;
+		}DUMMYSTRUCTNAME;
+		DWORD Name;
+		WORD Id;
+	} DUMMYUNIONNAME;
+	_ANONYMOUS_UNION union {
+		DWORD OffsetToData;
+		_ANONYMOUS_STRUCT struct {
+			DWORD OffsetToDirectory:31;
+			DWORD DataIsDirectory:1;
+		} DUMMYSTRUCTNAME2;
+	} DUMMYUNIONNAME2;
+} IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
+typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
+	WORD Length;
+	CHAR NameString[1];
+} IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
+typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
+	WORD Length;
+	WCHAR NameString[1];
+} IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
+typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
+	DWORD OffsetToData;
+	DWORD Size;
+	DWORD CodePage;
+	DWORD Reserved;
+} IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
+typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
+	DWORD Characteristics;
+	DWORD TimeDateStamp;
+	WORD MajorVersion;
+	WORD MinorVersion;
+	DWORD GlobalFlagsClear;
+	DWORD GlobalFlagsSet;
+	DWORD CriticalSectionDefaultTimeout;
+	DWORD DeCommitFreeBlockThreshold;
+	DWORD DeCommitTotalFreeThreshold;
+	PVOID LockPrefixTable;
+	DWORD MaximumAllocationSize;
+	DWORD VirtualMemoryThreshold;
+	DWORD ProcessHeapFlags;
+	DWORD Reserved[4];
+} IMAGE_LOAD_CONFIG_DIRECTORY,*PIMAGE_LOAD_CONFIG_DIRECTORY;
+typedef struct {
+	DWORD Characteristics;
+	DWORD TimeDateStamp;
+	WORD MajorVersion;
+	WORD MinorVersion;
+	DWORD GlobalFlagsClear;
+	DWORD GlobalFlagsSet;
+	DWORD CriticalSectionDefaultTimeout;
+	ULONGLONG DeCommitFreeBlockThreshold;
+	ULONGLONG DeCommitTotalFreeThreshold;
+	ULONGLONG LockPrefixTable;
+	ULONGLONG MaximumAllocationSize;
+	ULONGLONG VirtualMemoryThreshold;
+	ULONGLONG ProcessAffinityMask;
+	DWORD ProcessHeapFlags;
+	WORD CSDFlags;
+	WORD Reserved1;
+	ULONGLONG EditList;
+	DWORD Reserved[2];
+} IMAGE_LOAD_CONFIG_DIRECTORY64,*PIMAGE_LOAD_CONFIG_DIRECTORY64;
+typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
+	DWORD BeginAddress;
+	DWORD EndAddress;
+	PVOID ExceptionHandler;
+	PVOID HandlerData;
+	DWORD PrologEndAddress;
+} IMAGE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_RUNTIME_FUNCTION_ENTRY;
+typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
+	unsigned int FuncStart:32;
+	unsigned int PrologLen:8;
+	unsigned int FuncLen:22;
+	unsigned int ThirtyTwoBit:1;
+	unsigned int ExceptionFlag:1;
+} IMAGE_CE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;
+typedef struct _IMAGE_DEBUG_DIRECTORY {
+	DWORD Characteristics;
+	DWORD TimeDateStamp;
+	WORD MajorVersion;
+	WORD MinorVersion;
+	DWORD Type;
+	DWORD SizeOfData;
+	DWORD AddressOfRawData;
+	DWORD PointerToRawData;
+} IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
+typedef struct _FPO_DATA {
+	DWORD ulOffStart;
+	DWORD cbProcSize;
+	DWORD cdwLocals;
+	WORD cdwParams;
+	WORD cbProlog:8;
+	WORD cbRegs:3;
+	WORD fHasSEH:1;
+	WORD fUseBP:1;
+	WORD reserved:1;
+	WORD cbFrame:2;
+} FPO_DATA,*PFPO_DATA;
+typedef struct _IMAGE_DEBUG_MISC {
+	DWORD DataType;
+	DWORD Length;
+	BOOLEAN Unicode;
+	BYTE Reserved[3];
+	BYTE Data[1];
+} IMAGE_DEBUG_MISC,*PIMAGE_DEBUG_MISC;
+typedef struct _IMAGE_FUNCTION_ENTRY {
+	DWORD StartingAddress;
+	DWORD EndingAddress;
+	DWORD EndOfPrologue;
+} IMAGE_FUNCTION_ENTRY,*PIMAGE_FUNCTION_ENTRY;
+typedef struct _IMAGE_FUNCTION_ENTRY64 {
+	ULONGLONG StartingAddress;
+	ULONGLONG EndingAddress;
+	_ANONYMOUS_UNION union {
+		ULONGLONG EndOfPrologue;
+		ULONGLONG UnwindInfoAddress;
+	} DUMMYUNIONNAME;
+} IMAGE_FUNCTION_ENTRY64,*PIMAGE_FUNCTION_ENTRY64;
+typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
+	WORD Signature;
+	WORD Flags;
+	WORD Machine;
+	WORD Characteristics;
+	DWORD TimeDateStamp;
+	DWORD CheckSum;
+	DWORD ImageBase;
+	DWORD SizeOfImage;
+	DWORD NumberOfSections;
+	DWORD ExportedNamesSize;
+	DWORD DebugDirectorySize;
+	DWORD SectionAlignment;
+	DWORD Reserved[2];
+} IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
+#pragma pack(pop)
+typedef enum _CM_SERVICE_NODE_TYPE {
+	DriverType=SERVICE_KERNEL_DRIVER,
+	FileSystemType=SERVICE_FILE_SYSTEM_DRIVER,
+	Win32ServiceOwnProcess=SERVICE_WIN32_OWN_PROCESS,
+	Win32ServiceShareProcess=SERVICE_WIN32_SHARE_PROCESS,
+	AdapterType=SERVICE_ADAPTER,
+	RecognizerType=SERVICE_RECOGNIZER_DRIVER
+} SERVICE_NODE_TYPE;
+typedef enum _CM_SERVICE_LOAD_TYPE {
+	BootLoad=SERVICE_BOOT_START,
+	SystemLoad=SERVICE_SYSTEM_START,
+	AutoLoad=SERVICE_AUTO_START,
+	DemandLoad=SERVICE_DEMAND_START,
+	DisableLoad=SERVICE_DISABLED
+} SERVICE_LOAD_TYPE;
+typedef enum _CM_ERROR_CONTROL_TYPE {
+	IgnoreError=SERVICE_ERROR_IGNORE,
+	NormalError=SERVICE_ERROR_NORMAL,
+	SevereError=SERVICE_ERROR_SEVERE,
+	CriticalError=SERVICE_ERROR_CRITICAL
+} SERVICE_ERROR_TYPE;
+typedef struct _NT_TIB {
+	struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+	PVOID StackBase;
+	PVOID StackLimit;
+	PVOID SubSystemTib;
+	_ANONYMOUS_UNION union {
+		PVOID FiberData;
+		DWORD Version;
+	} DUMMYUNIONNAME;
+	PVOID ArbitraryUserPointer;
+	struct _NT_TIB *Self;
+} NT_TIB,*PNT_TIB;
+typedef struct _REPARSE_DATA_BUFFER {
+	DWORD  ReparseTag;
+	WORD   ReparseDataLength;
+	WORD   Reserved;
+	_ANONYMOUS_UNION union {
+		struct {
+			WORD   SubstituteNameOffset;
+			WORD   SubstituteNameLength;
+			WORD   PrintNameOffset;
+			WORD   PrintNameLength;
+			ULONG  Flags;
+			WCHAR PathBuffer[1];
+		} SymbolicLinkReparseBuffer;
+		struct {
+			WORD   SubstituteNameOffset;
+			WORD   SubstituteNameLength;
+			WORD   PrintNameOffset;
+			WORD   PrintNameLength;
+			WCHAR PathBuffer[1];
+		} MountPointReparseBuffer;
+		struct {
+			BYTE   DataBuffer[1];
+		} GenericReparseBuffer;
+	} DUMMYUNIONNAME;
+} REPARSE_DATA_BUFFER, *PREPARSE_DATA_BUFFER;
+typedef struct _REPARSE_GUID_DATA_BUFFER {
+	DWORD  ReparseTag;
+	WORD   ReparseDataLength;
+	WORD   Reserved;
+	GUID   ReparseGuid;
+	struct {
+		BYTE   DataBuffer[1];
+	} GenericReparseBuffer;
+} REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
+typedef struct _REPARSE_POINT_INFORMATION {
+	WORD   ReparseDataLength;
+	WORD   UnparsedNameLength;
+} REPARSE_POINT_INFORMATION, *PREPARSE_POINT_INFORMATION;
+
+typedef union _FILE_SEGMENT_ELEMENT {
+	PVOID64 Buffer;
+	ULONGLONG Alignment;
+}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
+
+/* JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags constants */
+#define JOB_OBJECT_LIMIT_WORKINGSET                 0x0001
+#define JOB_OBJECT_LIMIT_PROCESS_TIME               0x0002
+#define JOB_OBJECT_LIMIT_JOB_TIME                   0x0004
+#define JOB_OBJECT_LIMIT_ACTIVE_PROCESS             0x0008
+#define JOB_OBJECT_LIMIT_AFFINITY                   0x0010
+#define JOB_OBJECT_LIMIT_PRIORITY_CLASS             0x0020
+#define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME          0x0040
+#define JOB_OBJECT_LIMIT_SCHEDULING_CLASS           0x0080
+#define JOB_OBJECT_LIMIT_PROCESS_MEMORY             0x0100
+#define JOB_OBJECT_LIMIT_JOB_MEMORY                 0x0200
+#define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x0400
+#define JOB_OBJECT_BREAKAWAY_OK                     0x0800
+#define JOB_OBJECT_SILENT_BREAKAWAY                 0x1000
+
+/* JOBOBJECT_BASIC_UI_RESTRICTIONS.UIRestrictionsClass constants */
+#define JOB_OBJECT_UILIMIT_HANDLES          0x0001
+#define JOB_OBJECT_UILIMIT_READCLIPBOARD    0x0002
+#define JOB_OBJECT_UILIMIT_WRITECLIPBOARD   0x0004
+#define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x0008
+#define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS  0x0010
+#define JOB_OBJECT_UILIMIT_GLOBALATOMS      0x0020
+#define JOB_OBJECT_UILIMIT_DESKTOP          0x0040
+#define JOB_OBJECT_UILIMIT_EXITWINDOWS      0x0080
+
+/* JOBOBJECT_SECURITY_LIMIT_INFORMATION.SecurityLimitFlags constants */
+#define JOB_OBJECT_SECURITY_NO_ADMIN          0x0001
+#define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN  0x0002
+#define JOB_OBJECT_SECURITY_ONLY_TOKEN        0x0004
+#define JOB_OBJECT_SECURITY_FILTER_TOKENS     0x0008
+
+/* JOBOBJECT_END_OF_JOB_TIME_INFORMATION.EndOfJobTimeAction constants */
+#define JOB_OBJECT_TERMINATE_AT_END_OF_JOB  0
+#define JOB_OBJECT_POST_AT_END_OF_JOB       1
+
+#define JOB_OBJECT_MSG_END_OF_JOB_TIME        1
+#define JOB_OBJECT_MSG_END_OF_PROCESS_TIME    2
+#define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT   3
+#define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO    4
+#define JOB_OBJECT_MSG_NEW_PROCESS            6
+#define JOB_OBJECT_MSG_EXIT_PROCESS           7
+#define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS  8
+#define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT   9
+#define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT       10
+
+typedef enum _JOBOBJECTINFOCLASS {
+	JobObjectBasicAccountingInformation = 1,
+	JobObjectBasicLimitInformation,
+	JobObjectBasicProcessIdList,
+	JobObjectBasicUIRestrictions,
+	JobObjectSecurityLimitInformation,
+	JobObjectEndOfJobTimeInformation,
+	JobObjectAssociateCompletionPortInformation,
+	JobObjectBasicAndIoAccountingInformation,
+	JobObjectExtendedLimitInformation,
+	JobObjectJobSetInformation,
+	MaxJobObjectInfoClass
+} JOBOBJECTINFOCLASS;
+typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
+	LARGE_INTEGER TotalUserTime;
+	LARGE_INTEGER TotalKernelTime;
+	LARGE_INTEGER ThisPeriodTotalUserTime;
+	LARGE_INTEGER ThisPeriodTotalKernelTime;
+	DWORD TotalPageFaultCount;
+	DWORD TotalProcesses;
+	DWORD ActiveProcesses;
+	DWORD TotalTerminatedProcesses;
+} JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
+typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
+	LARGE_INTEGER PerProcessUserTimeLimit;
+	LARGE_INTEGER PerJobUserTimeLimit;
+	DWORD LimitFlags;
+	SIZE_T MinimumWorkingSetSize;
+	SIZE_T MaximumWorkingSetSize;
+	DWORD ActiveProcessLimit;
+	ULONG_PTR Affinity;
+	DWORD PriorityClass;
+	DWORD SchedulingClass;
+} JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;
+typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
+	DWORD NumberOfAssignedProcesses;
+	DWORD NumberOfProcessIdsInList;
+	ULONG_PTR ProcessIdList[1];
+} JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST;
+typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
+	DWORD UIRestrictionsClass;
+} JOBOBJECT_BASIC_UI_RESTRICTIONS,*PJOBOBJECT_BASIC_UI_RESTRICTIONS;
+typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
+	DWORD SecurityLimitFlags;
+	HANDLE JobToken;
+	PTOKEN_GROUPS SidsToDisable;
+	PTOKEN_PRIVILEGES PrivilegesToDelete;
+	PTOKEN_GROUPS RestrictedSids;
+} JOBOBJECT_SECURITY_LIMIT_INFORMATION,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
+typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
+	DWORD EndOfJobTimeAction;
+} JOBOBJECT_END_OF_JOB_TIME_INFORMATION,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
+typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
+	PVOID CompletionKey;
+	HANDLE CompletionPort;
+} JOBOBJECT_ASSOCIATE_COMPLETION_PORT,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
+typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
+	JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
+	IO_COUNTERS IoInfo;
+} JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
+typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
+	JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
+	IO_COUNTERS IoInfo;
+	SIZE_T ProcessMemoryLimit;
+	SIZE_T JobMemoryLimit;
+	SIZE_T PeakProcessMemoryUsed;
+	SIZE_T PeakJobMemoryUsed;
+} JOBOBJECT_EXTENDED_LIMIT_INFORMATION,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
+typedef struct _JOBOBJECT_JOBSET_INFORMATION {
+	DWORD MemberLevel;
+} JOBOBJECT_JOBSET_INFORMATION,*PJOBOBJECT_JOBSET_INFORMATION;
+
+/* Fixme: Making these defines conditional on WINVER will break ddk includes */ 
+#if 1 /* (WINVER >= 0x0500) */
+#include <pshpack4.h>
+
+#define ES_SYSTEM_REQUIRED                0x00000001
+#define ES_DISPLAY_REQUIRED               0x00000002
+#define ES_USER_PRESENT                   0x00000004
+#define ES_CONTINUOUS                     0x80000000
+
+typedef enum _LATENCY_TIME {
+	LT_DONT_CARE,
+	LT_LOWEST_LATENCY
+} LATENCY_TIME, *PLATENCY_TIME;
+
+typedef enum _SYSTEM_POWER_STATE {
+	PowerSystemUnspecified,
+	PowerSystemWorking,
+	PowerSystemSleeping1,
+	PowerSystemSleeping2,
+	PowerSystemSleeping3,
+	PowerSystemHibernate,
+	PowerSystemShutdown,
+	PowerSystemMaximum
+} SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
+#define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
+
+typedef enum {
+	PowerActionNone,
+	PowerActionReserved,
+	PowerActionSleep,
+	PowerActionHibernate,
+	PowerActionShutdown,
+	PowerActionShutdownReset,
+	PowerActionShutdownOff,
+	PowerActionWarmEject
+} POWER_ACTION, *PPOWER_ACTION;
+
+typedef enum _DEVICE_POWER_STATE {
+	PowerDeviceUnspecified,
+	PowerDeviceD0,
+	PowerDeviceD1,
+	PowerDeviceD2,
+	PowerDeviceD3,
+	PowerDeviceMaximum
+} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
+
+typedef struct {
+	DWORD  Granularity;
+	DWORD  Capacity;
+} BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
+
+typedef struct _POWER_ACTION_POLICY {
+	POWER_ACTION  Action;
+	ULONG  Flags;
+	ULONG  EventCode;
+} POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
+
+/* POWER_ACTION_POLICY.Flags constants */
+#define POWER_ACTION_QUERY_ALLOWED        0x00000001
+#define POWER_ACTION_UI_ALLOWED           0x00000002
+#define POWER_ACTION_OVERRIDE_APPS        0x00000004
+#define POWER_ACTION_LIGHTEST_FIRST       0x10000000
+#define POWER_ACTION_LOCK_CONSOLE         0x20000000
+#define POWER_ACTION_DISABLE_WAKES        0x40000000
+#define POWER_ACTION_CRITICAL             0x80000000
+
+/* POWER_ACTION_POLICY.EventCode constants */
+#define POWER_LEVEL_USER_NOTIFY_TEXT      0x00000001
+#define POWER_LEVEL_USER_NOTIFY_SOUND     0x00000002
+#define POWER_LEVEL_USER_NOTIFY_EXEC      0x00000004
+#define POWER_USER_NOTIFY_BUTTON          0x00000008
+#define POWER_USER_NOTIFY_SHUTDOWN        0x00000010
+#define POWER_FORCE_TRIGGER_RESET         0x80000000
+
+#define DISCHARGE_POLICY_CRITICAL	0
+#define DISCHARGE_POLICY_LOW		1
+#define NUM_DISCHARGE_POLICIES		4
+
+#define PO_THROTTLE_NONE	0
+#define PO_THROTTLE_CONSTANT	1
+#define PO_THROTTLE_DEGRADE	2
+#define PO_THROTTLE_ADAPTIVE	3
+#define PO_THROTTLE_MAXIMUM	4
+
+typedef struct _SYSTEM_POWER_LEVEL {
+	BOOLEAN  Enable;
+	UCHAR  Spare[3];
+	ULONG  BatteryLevel;
+	POWER_ACTION_POLICY  PowerPolicy;
+	SYSTEM_POWER_STATE  MinSystemState;
+} SYSTEM_POWER_LEVEL, *PSYSTEM_POWER_LEVEL;
+
+typedef struct _SYSTEM_POWER_POLICY {
+	ULONG  Revision;
+	POWER_ACTION_POLICY  PowerButton;
+	POWER_ACTION_POLICY  SleepButton;
+	POWER_ACTION_POLICY  LidClose;
+	SYSTEM_POWER_STATE  LidOpenWake;
+	ULONG  Reserved;
+	POWER_ACTION_POLICY  Idle;
+	ULONG  IdleTimeout;
+	UCHAR  IdleSensitivity;
+	UCHAR  DynamicThrottle;
+	UCHAR  Spare2[2];
+	SYSTEM_POWER_STATE  MinSleep;
+	SYSTEM_POWER_STATE  MaxSleep;
+	SYSTEM_POWER_STATE  ReducedLatencySleep;
+	ULONG  WinLogonFlags;
+	ULONG  Spare3;
+	ULONG  DozeS4Timeout;
+	ULONG  BroadcastCapacityResolution;
+	SYSTEM_POWER_LEVEL  DischargePolicy[NUM_DISCHARGE_POLICIES];
+	ULONG  VideoTimeout;
+	BOOLEAN  VideoDimDisplay;
+	ULONG  VideoReserved[3];
+	ULONG  SpindownTimeout;
+	BOOLEAN  OptimizeForPower;
+	UCHAR  FanThrottleTolerance;
+	UCHAR  ForcedThrottle;
+	UCHAR  MinThrottle;
+	POWER_ACTION_POLICY  OverThrottled;
+} SYSTEM_POWER_POLICY, *PSYSTEM_POWER_POLICY;
+
+typedef struct _SYSTEM_POWER_CAPABILITIES {
+	BOOLEAN  PowerButtonPresent;
+	BOOLEAN  SleepButtonPresent;
+	BOOLEAN  LidPresent;
+	BOOLEAN  SystemS1;
+	BOOLEAN  SystemS2;
+	BOOLEAN  SystemS3;
+	BOOLEAN  SystemS4;
+	BOOLEAN  SystemS5;
+	BOOLEAN  HiberFilePresent;
+	BOOLEAN  FullWake;
+	BOOLEAN  VideoDimPresent;
+	BOOLEAN  ApmPresent;
+	BOOLEAN  UpsPresent;
+	BOOLEAN  ThermalControl;
+	BOOLEAN  ProcessorThrottle;
+	UCHAR  ProcessorMinThrottle;
+	UCHAR  ProcessorMaxThrottle;
+	UCHAR  spare2[4];
+	BOOLEAN  DiskSpinDown;
+	UCHAR  spare3[8];
+	BOOLEAN  SystemBatteriesPresent;
+	BOOLEAN  BatteriesAreShortTerm;
+	BATTERY_REPORTING_SCALE  BatteryScale[3];
+	SYSTEM_POWER_STATE  AcOnLineWake;
+	SYSTEM_POWER_STATE  SoftLidWake;
+	SYSTEM_POWER_STATE  RtcWake;
+	SYSTEM_POWER_STATE  MinDeviceWakeState;
+	SYSTEM_POWER_STATE  DefaultLowLatencyWake;
+} SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
+
+typedef struct _SYSTEM_BATTERY_STATE {
+	BOOLEAN  AcOnLine;
+	BOOLEAN  BatteryPresent;
+	BOOLEAN  Charging;
+	BOOLEAN  Discharging;
+	BOOLEAN  Spare1[4];
+	ULONG  MaxCapacity;
+	ULONG  RemainingCapacity;
+	ULONG  Rate;
+	ULONG  EstimatedTime;
+	ULONG  DefaultAlert1;
+	ULONG  DefaultAlert2;
+} SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
+
+typedef enum _POWER_INFORMATION_LEVEL {
+	SystemPowerPolicyAc,
+	SystemPowerPolicyDc,
+	VerifySystemPolicyAc,
+	VerifySystemPolicyDc,
+	SystemPowerCapabilities,
+	SystemBatteryState,
+	SystemPowerStateHandler,
+	ProcessorStateHandler,
+	SystemPowerPolicyCurrent,
+	AdministratorPowerPolicy,
+	SystemReserveHiberFile,
+	ProcessorInformation,
+	SystemPowerInformation,
+	ProcessorStateHandler2,
+	LastWakeTime,
+	LastSleepTime,
+	SystemExecutionState,
+	SystemPowerStateNotifyHandler,
+	ProcessorPowerPolicyAc,
+	ProcessorPowerPolicyDc,
+	VerifyProcessorPowerPolicyAc,
+	VerifyProcessorPowerPolicyDc,
+	ProcessorPowerPolicyCurrent
+} POWER_INFORMATION_LEVEL;
+
+#if (_WIN32_WINNT >= 0x0500)
+typedef LONG (WINAPI *PVECTORED_EXCEPTION_HANDLER)(PEXCEPTION_POINTERS);
+#endif
+#if 1 /* (WIN32_WINNT >= 0x0500) */
+typedef struct _SYSTEM_POWER_INFORMATION {
+	ULONG  MaxIdlenessAllowed;
+	ULONG  Idleness;
+	ULONG  TimeRemaining;
+	UCHAR  CoolingMode;
+} SYSTEM_POWER_INFORMATION,*PSYSTEM_POWER_INFORMATION;
+#endif
+
+#if (_WIN32_WINNT >= 0x0501)
+typedef enum _HEAP_INFORMATION_CLASS {
+	HeapCompatibilityInformation
+} HEAP_INFORMATION_CLASS;
+typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
+	ActivationContextBasicInformation = 1,
+	ActivationContextDetailedInformation,
+	AssemblyDetailedInformationInActivationContext,
+	FileInformationInAssemblyOfAssemblyInActivationContext
+} ACTIVATION_CONTEXT_INFO_CLASS;
+typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
+	DWORD ulFlags;
+	DWORD ulEncodedAssemblyIdentityLength;
+	DWORD ulManifestPathType;
+	DWORD ulManifestPathLength;
+	LARGE_INTEGER liManifestLastWriteTime;
+	DWORD ulPolicyPathType;
+	DWORD ulPolicyPathLength;
+	LARGE_INTEGER liPolicyLastWriteTime;
+	DWORD ulMetadataSatelliteRosterIndex;
+	DWORD ulManifestVersionMajor;
+	DWORD ulManifestVersionMinor;
+	DWORD ulPolicyVersionMajor;
+	DWORD ulPolicyVersionMinor;
+	DWORD ulAssemblyDirectoryNameLength;
+	PCWSTR lpAssemblyEncodedAssemblyIdentity;
+	PCWSTR lpAssemblyManifestPath;
+	PCWSTR lpAssemblyPolicyPath;
+	PCWSTR lpAssemblyDirectoryName;
+} ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
+typedef const ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
+typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
+	DWORD dwFlags;
+	DWORD ulFormatVersion;
+	DWORD ulAssemblyCount;
+	DWORD ulRootManifestPathType;
+	DWORD ulRootManifestPathChars;
+	DWORD ulRootConfigurationPathType;
+	DWORD ulRootConfigurationPathChars;
+	DWORD ulAppDirPathType;
+	DWORD ulAppDirPathChars;
+	PCWSTR lpRootManifestPath;
+	PCWSTR lpRootConfigurationPath;
+	PCWSTR lpAppDirPath;
+} ACTIVATION_CONTEXT_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_DETAILED_INFORMATION;
+typedef const ACTIVATION_CONTEXT_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_DETAILED_INFORMATION;
+typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
+	ULONG ulAssemblyIndex;
+	ULONG ulFileIndexInAssembly;
+} ACTIVATION_CONTEXT_QUERY_INDEX,*PACTIVATION_CONTEXT_QUERY_INDEX;
+typedef const ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
+typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
+	DWORD ulFlags;
+	DWORD ulFilenameLength;
+	DWORD ulPathLength;
+	PCWSTR lpFileName;
+	PCWSTR lpFilePath;
+} ASSEMBLY_FILE_DETAILED_INFORMATION,*PASSEMBLY_FILE_DETAILED_INFORMATION;
+typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
+#endif /* (WIN32_WINNT >= 0x0501) */
+
+typedef struct _PROCESSOR_POWER_POLICY_INFO {
+	ULONG  TimeCheck;
+	ULONG  DemoteLimit;
+	ULONG  PromoteLimit;
+	UCHAR  DemotePercent;
+	UCHAR  PromotePercent;
+	UCHAR  Spare[2];
+	ULONG  AllowDemotion : 1;
+	ULONG  AllowPromotion : 1;
+	ULONG  Reserved : 30;
+} PROCESSOR_POWER_POLICY_INFO, *PPROCESSOR_POWER_POLICY_INFO;
+typedef struct _PROCESSOR_POWER_POLICY {
+	ULONG  Revision;
+	UCHAR  DynamicThrottle;
+	UCHAR  Spare[3];
+	ULONG  Reserved;
+	ULONG  PolicyCount;
+	PROCESSOR_POWER_POLICY_INFO  Policy[3];
+} PROCESSOR_POWER_POLICY, *PPROCESSOR_POWER_POLICY;
+typedef struct _ADMINISTRATOR_POWER_POLICY {
+	SYSTEM_POWER_STATE  MinSleep;
+	SYSTEM_POWER_STATE  MaxSleep;
+	ULONG  MinVideoTimeout;
+	ULONG  MaxVideoTimeout;
+	ULONG  MinSpindownTimeout;
+	ULONG  MaxSpindownTimeout;
+} ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
+#include <poppack.h>
+#endif /* WINVER >= 0x0500 */
+
+#if (_WIN32_WINNT >= 0x0500)
+typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN);
+#endif
+
+#ifdef UNICODE
+typedef OSVERSIONINFOW OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
+typedef OSVERSIONINFOEXW OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
+#else
+typedef OSVERSIONINFOA OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
+typedef OSVERSIONINFOEXA OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
+#endif
+
+#if (_WIN32_WINNT >= 0x0500)
+ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
+#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType)  \
+	((ConditionMask) = VerSetConditionMask((ConditionMask), \
+	(TypeBitMask), (ComparisonType)))
+#endif
+
+#ifdef _X86_
+#if defined(__GNUC__)
+#if (__GNUC__ >= 3)
+/* Support -masm=intel.  */
+static __inline__ PVOID GetCurrentFiber(void)
+{
+    void* ret;
+    __asm__ __volatile__ (
+	"mov{l}	{%%fs:0x10,%0|%0,%%fs:0x10}"
+	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
+	);
+    return ret;
+}
+
+static __inline__ PVOID GetFiberData(void)
+{
+    void* ret;
+    __asm__ __volatile__ (
+	"mov{l}	{%%fs:0x10,%0|%0,%%fs:0x10}\n\t"
+	"mov{l}	{(%0),%0|%0,[%0]}"
+	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
+	);
+    return ret;
+}
+
+static __inline__ struct _TEB * NtCurrentTeb(void)
+{
+    struct _TEB *ret;
+
+    __asm__ __volatile__ (
+        "mov{l} {%%fs:0x18,%0|%0,%%fs:0x18}\n"
+        : "=r" (ret)
+        : /* no inputs */
+    );
+
+    return ret;
+}
+
+#else /* __GNUC__ >= 3 */
+static __inline__ PVOID GetCurrentFiber(void)
+{
+    void* ret;
+    __asm__ __volatile__ (
+	"movl	%%fs:0x10,%0"
+	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
+	);
+    return ret;
+}
+
+static __inline__ PVOID GetFiberData(void)
+{
+    void* ret;
+    __asm__ __volatile__ (
+	"movl	%%fs:0x10,%0\n\t"
+	"movl	(%0),%0"
+	: "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
+	);
+    return ret;
+}
+
+static __inline__ struct _TEB * NtCurrentTeb(void)
+{
+    struct _TEB *ret;
+
+    __asm__ __volatile__ (
+        "movl %%fs:0x18, %0\n"
+        : "=r" (ret)
+        : /* no inputs */
+    );
+    return ret;
+}
+#endif /* __GNUC__ >= 3 */
+
+#else
+
+PVOID GetCurrentFiber(void);
+#pragma aux GetCurrentFiber = \
+        "mov	eax, dword ptr fs:0x10" \
+        value [eax] \
+        modify [eax];
+
+PVOID GetFiberData(void);
+#pragma aux GetFiberData = \
+	"mov	eax, dword ptr fs:0x10" \
+	"mov	eax, [eax]" \
+        value [eax] \
+        modify [eax];
+           
+struct _TEB * NtCurrentTeb(void);
+#pragma aux NtCurrentTeb = \
+        "mov	eax, dword ptr fs:0x18" \
+        value [eax] \
+        modify [eax];
+        
+#endif /* __GNUC__ */
+#endif /* _X86_ */
+
+#endif /* RC_INVOKED */
+
+#ifdef __cplusplus
+}
+#endif
+#endif