- Sync with trunk up to r46941.
authorAmine Khaldi <amine.khaldi@reactos.org>
Mon, 10 May 2010 19:04:41 +0000 (19:04 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Mon, 10 May 2010 19:04:41 +0000 (19:04 +0000)
[VMWINST]
- Rename FileExists() to DoesFileExist() to avoid clashing with the real API.

svn path=/branches/header-work/; revision=47155

256 files changed:
1  2 
ReactOS-arm.rbuild
base/applications/cmdutils/reg/reg.rbuild
base/applications/downloader/downloader.rbuild
base/applications/fontview/fontview.rbuild
base/applications/kbswitch/kbswitch.rbuild
base/applications/magnify/magnify.rbuild
base/applications/mplay32/mplay32.rbuild
base/applications/mscutils/eventvwr/eventvwr.rbuild
base/applications/network/ping/ping.c
base/applications/notepad/settings.c
base/applications/notepad/text.c
base/applications/paint/lang/it-IT.rc
base/applications/rapps/rapps.rbuild
base/applications/rapps/rapps/firefox3.txt
base/applications/rapps/rapps/mirandaim.txt
base/applications/rapps/rapps/openttd.txt
base/applications/rapps/rapps/scite.txt
base/applications/rapps/rapps/scummvm.txt
base/applications/rapps/rapps/seamonkey.txt
base/applications/rapps/rapps/thunderbird.txt
base/applications/taskmgr/applpage.c
base/applications/taskmgr/perfdata.c
base/applications/taskmgr/perfdata.h
base/applications/taskmgr/procpage.c
base/applications/taskmgr/taskmgr.c
base/applications/winhlp32/hlpfile.c
base/applications/winver/winver.rbuild
base/services/rpcss/rpcss.rbuild
base/services/telnetd/telnetd.rbuild
base/services/tftpd/tftpd.rbuild
base/setup/usetup/bootsup.c
base/setup/vmwinst/vmwinst.c
base/shell/cmd/console.c
base/shell/cmd/filecomp.c
base/system/format/format.c
base/system/runonce/runonce.rbuild
boot/bootdata/bootcd/bootcd.rbuild
boot/bootdata/livecd/livecd.rbuild
boot/bootdata/packages/reactos.dff
boot/bootdata/txtsetup.sif
boot/freeldr/freeldr/arch/amd64/arch.S
boot/freeldr/freeldr/arch/amd64/boot.S
boot/freeldr/freeldr/arch/amd64/drvmap.S
boot/freeldr/freeldr/arch/amd64/i386cpu.S
boot/freeldr/freeldr/arch/amd64/i386pnp.S
boot/freeldr/freeldr/arch/amd64/i386trap.S
boot/freeldr/freeldr/arch/amd64/int386.S
boot/freeldr/freeldr/arch/amd64/loader.c
boot/freeldr/freeldr/arch/amd64/mb.S
boot/freeldr/freeldr/arch/i386/hardware.c
boot/freeldr/freeldr/freeldr_arch.rbuild
boot/freeldr/freeldr/freeldr_base.rbuild
boot/freeldr/freeldr/include/arch/amd64/amd64.h
boot/freeldr/freeldr/windows/amd64/wlmemory.c
dll/cpl/desk/appearance.c
dll/cpl/desk/background.c
dll/cpl/desk/effappdlg.c
dll/directx/bdaplgin/pincontrol.cpp
dll/directx/ksproxy/allocator.cpp
dll/directx/ksproxy/enumpins.cpp
dll/directx/ksproxy/input_pin.cpp
dll/directx/ksproxy/mediasample.cpp
dll/directx/ksproxy/output_pin.cpp
dll/directx/ksproxy/precomp.h
dll/directx/ksproxy/proxy.cpp
dll/directx/msdvbnp/enumpins.cpp
dll/directx/msdvbnp/msdvbnp.cpp
dll/directx/msdvbnp/precomp.h
dll/directx/qedit/samplegrabber.c
dll/directx/quartz/avidec.c
dll/directx/quartz/avisplit.c
dll/win32/activeds/activeds.spec
dll/win32/activeds/activeds_main.c
dll/win32/actxprxy/actxprxy.rbuild
dll/win32/atl/atl_ax.c
dll/win32/avifil32/rsrc.rc
dll/win32/cabinet/fdi.c
dll/win32/crypt32/base64.c
dll/win32/devmgr/lang/cs-CZ.rc
dll/win32/gdi32/objects/dc.c
dll/win32/gdi32/objects/region.c
dll/win32/kernel32/file/dir.c
dll/win32/msacm32/msacm32.rbuild
dll/win32/mscoree/mscoree.spec
dll/win32/mscoree/mscoree_main.c
dll/win32/msimtf/activeimmapp.c
dll/win32/netcfgx/lang/cs-CZ.rc
dll/win32/netid/lang/cs-CZ.rc
dll/win32/netid/lang/it-IT.rc
dll/win32/netshell/lang/cs-CZ.rc
dll/win32/ntmarta/ntmarta.c
dll/win32/ole32/compobj.c
dll/win32/setupapi/lang/cs-CZ.rc
dll/win32/shell32/dialogs.c
dll/win32/shell32/fprop.c
dll/win32/shell32/lang/bg-BG.rc
dll/win32/shell32/lang/ca-ES.rc
dll/win32/shell32/lang/cs-CZ.rc
dll/win32/shell32/lang/da-DK.rc
dll/win32/shell32/lang/de-DE.rc
dll/win32/shell32/lang/el-GR.rc
dll/win32/shell32/lang/en-GB.rc
dll/win32/shell32/lang/en-US.rc
dll/win32/shell32/lang/es-ES.rc
dll/win32/shell32/lang/fi-FI.rc
dll/win32/shell32/lang/fr-FR.rc
dll/win32/shell32/lang/hu-HU.rc
dll/win32/shell32/lang/it-IT.rc
dll/win32/shell32/lang/ja-JP.rc
dll/win32/shell32/lang/ko-KR.rc
dll/win32/shell32/lang/nl-NL.rc
dll/win32/shell32/lang/no-NO.rc
dll/win32/shell32/lang/pl-PL.rc
dll/win32/shell32/lang/pt-BR.rc
dll/win32/shell32/lang/pt-PT.rc
dll/win32/shell32/lang/ro-RO.rc
dll/win32/shell32/lang/ru-RU.rc
dll/win32/shell32/lang/sk-SK.rc
dll/win32/shell32/lang/sl-SI.rc
dll/win32/shell32/lang/sv-SE.rc
dll/win32/shell32/lang/tr-TR.rc
dll/win32/shell32/lang/uk-UA.rc
dll/win32/shell32/lang/zh-CN.rc
dll/win32/shell32/lang/zh-TW.rc
dll/win32/shell32/she_ocmenu.c
dll/win32/shell32/shfldr_cpanel.c
dll/win32/shell32/shfldr_fonts.c
dll/win32/shell32/shresdef.h
dll/win32/shell32/shv_def_cmenu.c
dll/win32/syssetup/lang/it-IT.rc
dll/win32/user32/misc/stubs.c
dll/win32/userenv/lang/cs-CZ.rc
dll/win32/userenv/setup.c
drivers/bus/acpi/acpi.rbuild
drivers/bus/directory.rbuild
drivers/bus/isapnp/fdo.c
drivers/bus/isapnp/hardware.c
drivers/bus/isapnp/isapnp.c
drivers/bus/isapnp/isapnp.h
drivers/bus/isapnp/isapnp.rbuild
drivers/bus/isapnp/isapnphw.h
drivers/bus/isapnp/pdo.c
drivers/bus/pci/pdo.c
drivers/bus/pcmcia/fdo.c
drivers/bus/pcmcia/pcmcia.c
drivers/bus/pcmcia/pcmcia.h
drivers/bus/pcmcia/pcmcia.rbuild
drivers/bus/pcmcia/pcmcia.rc
drivers/bus/pcmcia/pdo.c
drivers/ksfilter/ks/allocators.c
drivers/ksfilter/ks/api.c
drivers/ksfilter/ks/bag.c
drivers/ksfilter/ks/clocks.c
drivers/ksfilter/ks/connectivity.c
drivers/ksfilter/ks/device.c
drivers/ksfilter/ks/deviceinterface.c
drivers/ksfilter/ks/driver.c
drivers/ksfilter/ks/filter.c
drivers/ksfilter/ks/filterfactory.c
drivers/ksfilter/ks/irp.c
drivers/ksfilter/ks/ksfunc.h
drivers/ksfilter/ks/ksiface.h
drivers/ksfilter/ks/kstypes.h
drivers/ksfilter/ks/methods.c
drivers/ksfilter/ks/misc.c
drivers/ksfilter/ks/pin.c
drivers/ksfilter/ks/priv.h
drivers/ksfilter/ks/property.c
drivers/ksfilter/ks/topology.c
drivers/multimedia/bdasup/precomp.h
drivers/network/ndis/ndis.rbuild
drivers/network/ndis/ndis.spec
drivers/network/tdi/misc/tdi.spec
drivers/network/tdi/tdi.rbuild
drivers/storage/class/cdrom/cdrom.c
drivers/storage/class/ramdisk/ramdisk.c
drivers/storage/ide/uniata/id_ata.cpp
drivers/usb/usbehci/common.c
drivers/usb/usbehci/fdo.c
drivers/usb/usbehci/irp.c
drivers/usb/usbehci/pdo.c
drivers/usb/usbehci/urbreq.c
drivers/usb/usbehci/usbehci.c
drivers/usb/usbehci/usbehci.h
drivers/usb/usbehci/usbiffn.c
drivers/usb/usbehci/usbiffn.h
hal/halx86/directory.rbuild
hal/halx86/generic/acpi/halpnpdd.c
hal/halx86/generic/halinit.c
hal/halx86/hal_generic.rbuild
hal/halx86/hal_mini.rbuild
hal/halx86/halamd64.rbuild
include/ddk/hubbusif.h
include/ddk/ntddk.h
include/ddk/usbbusif.h
include/dxsdk/bdamedia.h
include/ndk/amd64/ketypes.h
include/psdk/ks.h
include/psdk/ksmedia.h
include/psdk/ntdef.h
include/psdk/objbase.h
include/psdk/wingdi.h
include/psdk/winnt.h
include/psdk/winuser.h
include/reactos/arm/armddk.h
include/reactos/asm.h
include/reactos/win32k/ntgdityp.h
include/xdk/exfuncs.h
lib/cmlib/cmlib.h
lib/cmlib/hivecell.c
lib/cmlib/hivewrt.c
lib/drivers/sound/mmixer/wave.c
lib/rtl/sprintf.c
lib/rtl/swprintf.c
media/inf/cpu.inf
media/inf/fdc.inf
media/inf/hdc.inf
media/inf/machine.inf
ntoskrnl/config/cmapi.c
ntoskrnl/config/cmboot.c
ntoskrnl/config/cmhvlist.c
ntoskrnl/config/cminit.c
ntoskrnl/config/cmkcbncb.c
ntoskrnl/config/cmparse.c
ntoskrnl/config/cmsysini.c
ntoskrnl/include/internal/cm.h
ntoskrnl/include/internal/i386/intrin_i.h
ntoskrnl/include/internal/io.h
ntoskrnl/io/iomgr/device.c
ntoskrnl/io/iomgr/deviface.c
ntoskrnl/io/iomgr/driver.c
ntoskrnl/io/iomgr/iomgr.c
ntoskrnl/io/pnpmgr/pnpinit.c
ntoskrnl/io/pnpmgr/pnpmgr.c
ntoskrnl/io/pnpmgr/pnpreport.c
ntoskrnl/io/pnpmgr/pnproot.c
ntoskrnl/io/pnpmgr/pnputil.c
ntoskrnl/mm/ARM3/miarm.h
ntoskrnl/ntoskrnl-generic.rbuild
ntoskrnl/ntoskrnl.pspec
ntoskrnl/se/semgr.c
rosbuild.bat
subsystems/win32/win32k/include/coord.h
subsystems/win32/win32k/include/dc.h
subsystems/win32/win32k/include/gdiobj.h
subsystems/win32/win32k/include/pdevobj.h
subsystems/win32/win32k/include/surface.h
subsystems/win32/win32k/ntuser/input.c
subsystems/win32/win32k/ntuser/keyboard.c
subsystems/win32/win32k/objects/brush.c
subsystems/win32/win32k/objects/coord.c
subsystems/win32/win32k/objects/dclife.c
subsystems/win32/win32k/objects/dcutil.c
subsystems/win32/win32k/objects/device.c
subsystems/win32/win32k/objects/font.c
subsystems/win32/win32k/objects/gdibatch.c

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 8f51303,0000000..e53860c
mode 100644,000000..100644
--- /dev/null
@@@ -1,1084 -1,0 +1,1084 @@@
- FileExists(WCHAR *Path, WCHAR *File)
 +/*
 + * ReactOS VMware(r) driver installation utility
 + * Copyright (C) 2004 ReactOS Team
 + *
 + * This library is free software; you can redistribute it and/or
 + * modify it under the terms of the GNU Lesser General Public
 + * License as published by the Free Software Foundation; either
 + * version 2.1 of the License, or (at your option) any later version.
 + *
 + * This library is distributed in the hope that it will be useful,
 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 + * Lesser General Public License for more details.
 + *
 + * You should have received a copy of the GNU Lesser General Public
 + * License along with this library; if not, write to the Free Software
 + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 + *
 + * VMware is a registered trademark of VMware, Inc.
 + *
 + * COPYRIGHT:   See COPYING in the top level directory
 + * PROJECT:     ReactOS VMware(r) driver installation utility
 + * FILE:        subsys/system/vmwinst/vmwinst.c
 + * PROGRAMMERS: Thomas Weidenmueller (w3seek@users.sourceforge.net)
 + *              Klemens Friedl (frik85@hotmail.com)
 + */
 +#include <windows.h>
 +#include <commctrl.h>
 +#include <newdev.h>
 +#include <stdio.h>
 +#include <string.h>
 +#include <pseh/pseh2.h>
 +#include "vmwinst.h"
 +#include <debug.h>
 +
 +extern VOID CALLBACK InstallHinfSectionW(HWND hwnd, HINSTANCE ModuleHandle,
 +                                         PCWSTR CmdLineBuffer, INT nCmdShow);
 +
 +
 +HINSTANCE hAppInstance;
 +BOOL StartVMwConfigWizard, DriverFilesFound, ActivateVBE = FALSE, UninstallDriver = FALSE;
 +
 +static WCHAR DestinationDriversPath[MAX_PATH+1];
 +static WCHAR CDDrive = L'\0';
 +static WCHAR PathToVideoDrivers60[MAX_PATH+1] = L"X:\\program files\\VMWare\\VMWare Tools\\Drivers\\video\\2k\\32bit\\";
 +static WCHAR PathToVideoDrivers55[MAX_PATH+1] = L"X:\\program files\\VMware\\VMware Tools\\Drivers\\video\\winnt2k\\32Bit\\";
 +static WCHAR PathToVideoDrivers45[MAX_PATH+1] = L"X:\\program files\\VMware\\VMware Tools\\Drivers\\video\\winnt2k\\";
 +static WCHAR PathToVideoDrivers40[MAX_PATH+1] = L"X:\\video\\winnt2k\\";
 +static WCHAR DestinationPath[MAX_PATH+1];
 +static WCHAR *vmx_fb = L"vmx_fb.dll";
 +static WCHAR *vmx_mode = L"vmx_mode.dll";
 +static WCHAR *vmx_mode_v6 = L"vmx mode.dll";
 +static WCHAR *vmx_svga = L"vmx_svga.sys";
 +
 +static WCHAR *SrcPath = PathToVideoDrivers45;
 +
 +static HANDLE hInstallationThread = NULL;
 +static HWND hInstallationNotifyWnd = NULL;
 +static LONG AbortInstall = 0;
 +#define WM_INSTABORT        (WM_USER + 2)
 +#define WM_INSTCOMPLETE     (WM_USER + 3)
 +#define WM_INSTSTATUSUPDATE (WM_USER + 4)
 +
 +/* Helper functions */
 +BOOL
 +DetectVMware(int *Version)
 +{
 +    int magic, ver;
 +
 +    magic = 0;
 +    ver = 0;
 +
 +      _SEH2_TRY
 +      {
 +              /* Try using a VMware I/O port. If not running in VMware this'll throw an
 +              exception! */
 +#if defined(__GNUC__)
 +              __asm__ __volatile__("inl  %%dx, %%eax"
 +                      : "=a" (ver), "=b" (magic)
 +                      : "0" (0x564d5868), "d" (0x5658), "c" (0xa));
 +#elif defined(_MSC_VER)
 +              __asm
 +              {
 +                      push ebx
 +                      mov  ecx, 0xa
 +                      mov  edx, 0x5658
 +                      mov  eax, 0x564d5868
 +                      in   eax, dx
 +                      mov  [ver],   eax
 +                      mov  [magic], ebx
 +                      pop  ebx
 +              }
 +#else
 +#error TODO
 +#endif
 +      }
 +      _SEH2_EXCEPT(_SEH2_GetExceptionCode() == EXCEPTION_PRIV_INSTRUCTION ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH)
 +      {
 +              return FALSE;
 +      }
 +      _SEH2_END;
 +
 +    if(magic == 0x564d5868)
 +    {
 +        *Version = ver;
 +        return TRUE;
 +    }
 +
 +    return FALSE;
 +}
 +
 +/* try to open the file */
 +static BOOL
-             if(FileExists(SrcPath, vmx_fb) &&
-                 (FileExists(SrcPath, vmx_mode) || FileExists(SrcPath, vmx_mode_v6)) &&
-                 FileExists(SrcPath, vmx_svga))
++DoesFileExist(WCHAR *Path, WCHAR *File)
 +{
 +    WCHAR FileName[MAX_PATH + 1];
 +    HANDLE FileHandle;
 +
 +    FileName[0] = L'\0';
 +    wcscat(FileName, Path);
 +    wcscat(FileName, File);
 +
 +    FileHandle = CreateFile(FileName, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
 +
 +    if(FileHandle == INVALID_HANDLE_VALUE)
 +    {
 +        /* If it was a sharing violation the file must already exist */
 +        return GetLastError() == ERROR_SHARING_VIOLATION;
 +    }
 +
 +    if(GetFileSize(FileHandle, NULL) <= 0)
 +    {
 +        CloseHandle(FileHandle);
 +        return FALSE;
 +    }
 +
 +    CloseHandle(FileHandle);
 +    return TRUE;
 +}
 +
 +static VOID
 +CenterWindow(HWND hWnd)
 +{
 +    HWND hWndParent;
 +    RECT rcParent;
 +    RECT rcWindow;
 +
 +    hWndParent = GetParent(hWnd);
 +    if (hWndParent == NULL)
 +        hWndParent = GetDesktopWindow();
 +
 +    GetWindowRect(hWndParent, &rcParent);
 +    GetWindowRect(hWnd, &rcWindow);
 +
 +    SetWindowPos(hWnd,
 +        HWND_TOP,
 +        ((rcParent.right - rcParent.left) - (rcWindow.right - rcWindow.left)) / 2,
 +        ((rcParent.bottom - rcParent.top) - (rcWindow.bottom - rcWindow.top)) / 2,
 +        0,
 +        0,
 +        SWP_NOSIZE);
 +}
 +
 +
 +/* Find the drive with the inserted VMware cd-rom */
 +static BOOL
 +IsVMwareCDInDrive(WCHAR *Drv)
 +{
 +    static WCHAR Drive[4] = L"X:\\";
 +    WCHAR Current;
 +
 +    *Drv = L'\0';
 +    for(Current = 'C'; Current <= 'Z'; Current++)
 +    {
 +        Drive[0] = Current;
 +#if CHECKDRIVETYPE
 +        if(GetDriveType(Drive) == DRIVE_CDROM)
 +        {
 +#endif
 +            PathToVideoDrivers60[0] = Current;
 +            PathToVideoDrivers55[0] = Current;
 +            PathToVideoDrivers40[0] = Current;
 +            PathToVideoDrivers45[0] = Current;
 +            if(SetCurrentDirectory(PathToVideoDrivers60))
 +                SrcPath = PathToVideoDrivers60;
 +            else if(SetCurrentDirectory(PathToVideoDrivers55))
 +                SrcPath = PathToVideoDrivers55;
 +            else if(SetCurrentDirectory(PathToVideoDrivers45))
 +                SrcPath = PathToVideoDrivers45;
 +            else if(SetCurrentDirectory(PathToVideoDrivers40))
 +                SrcPath = PathToVideoDrivers40;
 +            else
 +            {
 +                SetCurrentDirectory(DestinationPath);
 +                continue;
 +            }
 +
-     DriverFilesFound = FileExists(DestinationPath, vmx_fb) &&
-         FileExists(DestinationPath, vmx_mode) &&
-         FileExists(DestinationDriversPath, vmx_svga);
++            if(DoesFileExist(SrcPath, vmx_fb) &&
++                (DoesFileExist(SrcPath, vmx_mode) || DoesFileExist(SrcPath, vmx_mode_v6)) &&
++                DoesFileExist(SrcPath, vmx_svga))
 +            {
 +                *Drv = Current;
 +                return TRUE;
 +            }
 +#if CHECKDRIVETYPE
 +        }
 +#endif
 +    }
 +
 +    return FALSE;
 +}
 +
 +static BOOL
 +LoadResolutionSettings(DWORD *ResX, DWORD *ResY, DWORD *ColDepth)
 +{
 +    HKEY hReg;
 +    DWORD Type, Size = sizeof(DWORD);
 +
 +    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
 +        L"SYSTEM\\CurrentControlSet\\Services\\vmx_svga\\Device0",
 +        0, KEY_QUERY_VALUE, &hReg) != ERROR_SUCCESS)
 +    {
 +        DEVMODE CurrentDevMode;
 +
 +        /* If this key is absent, just get current settings */
 +        memset(&CurrentDevMode, 0, sizeof(CurrentDevMode));
 +        CurrentDevMode.dmSize = sizeof(CurrentDevMode);
 +        if (EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &CurrentDevMode) == TRUE)
 +        {
 +            *ColDepth = CurrentDevMode.dmBitsPerPel;
 +            *ResX = CurrentDevMode.dmPelsWidth;
 +            *ResY = CurrentDevMode.dmPelsHeight;
 +
 +            return TRUE;
 +        }
 +    }
 +
 +    if(RegQueryValueEx(hReg, L"DefaultSettings.BitsPerPel", 0, &Type, (BYTE*)ColDepth, &Size) != ERROR_SUCCESS ||
 +        Type != REG_DWORD)
 +    {
 +        *ColDepth = 8;
 +        Size = sizeof(DWORD);
 +    }
 +
 +    if(RegQueryValueEx(hReg, L"DefaultSettings.XResolution", 0, &Type, (BYTE*)ResX, &Size) != ERROR_SUCCESS ||
 +        Type != REG_DWORD)
 +    {
 +        *ResX = 640;
 +        Size = sizeof(DWORD);
 +    }
 +
 +    if(RegQueryValueEx(hReg, L"DefaultSettings.YResolution", 0, &Type, (BYTE*)ResY, &Size) != ERROR_SUCCESS ||
 +        Type != REG_DWORD)
 +    {
 +        *ResY = 480;
 +    }
 +
 +    RegCloseKey(hReg);
 +    return TRUE;
 +}
 +
 +static BOOL
 +IsVmwSVGAEnabled(VOID)
 +{
 +    HKEY hReg;
 +    DWORD Type, Size, Value;
 +
 +    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
 +        L"SYSTEM\\CurrentControlSet\\Services\\vmx_svga",
 +        0, KEY_QUERY_VALUE, &hReg) != ERROR_SUCCESS)
 +    {
 +        return FALSE;
 +    }
 +    Size = sizeof(DWORD);
 +    if(RegQueryValueEx(hReg, L"Start", 0, &Type, (BYTE*)&Value, &Size) != ERROR_SUCCESS ||
 +        Type != REG_DWORD)
 +    {
 +        RegCloseKey(hReg);
 +        return FALSE;
 +    }
 +
 +    RegCloseKey(hReg);
 +    return (Value == 1);
 +}
 +
 +
 +
 +static BOOL
 +SaveResolutionSettings(DWORD ResX, DWORD ResY, DWORD ColDepth)
 +{
 +    HKEY hReg;
 +    DWORD VFreq = 85;
 +
 +    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,
 +        L"SYSTEM\\CurrentControlSet\\Services\\vmx_svga\\Device0",
 +        0, KEY_SET_VALUE, &hReg) != ERROR_SUCCESS)
 +    {
 +        return FALSE;
 +    }
 +    if(RegSetValueEx(hReg, L"DefaultSettings.BitsPerPel", 0, REG_DWORD, (BYTE*)&ColDepth, sizeof(DWORD)) != ERROR_SUCCESS)
 +    {
 +        RegCloseKey(hReg);
 +        return FALSE;
 +    }
 +
 +    if(RegSetValueEx(hReg, L"DefaultSettings.XResolution", 0, REG_DWORD, (BYTE*)&ResX, sizeof(DWORD)) != ERROR_SUCCESS)
 +    {
 +        RegCloseKey(hReg);
 +        return FALSE;
 +    }
 +
 +    if(RegSetValueEx(hReg, L"DefaultSettings.YResolution", 0, REG_DWORD, (BYTE*)&ResY, sizeof(DWORD)) != ERROR_SUCCESS)
 +    {
 +        RegCloseKey(hReg);
 +        return FALSE;
 +    }
 +
 +    if(RegSetValueEx(hReg, L"DefaultSettings.VRefresh", 0, REG_DWORD, (BYTE*)&VFreq, sizeof(DWORD)) != ERROR_SUCCESS)
 +    {
 +        RegCloseKey(hReg);
 +        return FALSE;
 +    }
 +
 +    RegCloseKey(hReg);
 +    return TRUE;
 +}
 +
 +static BOOL
 +EnableDriver(WCHAR *Key, BOOL Enable)
 +{
 +    DWORD Value;
 +    HKEY hReg;
 +
 +    Value = (Enable ? 1 : 4);
 +
 +    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_SET_VALUE, &hReg) != ERROR_SUCCESS)
 +    {
 +        return FALSE;
 +    }
 +    if(RegSetValueEx(hReg, L"Start", 0, REG_DWORD, (BYTE*)&Value, sizeof(DWORD)) != ERROR_SUCCESS)
 +    {
 +        RegCloseKey(hReg);
 +        return FALSE;
 +    }
 +
 +    RegCloseKey(hReg);
 +    return TRUE;
 +}
 +
 +/* Activate the vmware driver and deactivate the others */
 +static BOOL
 +EnableVmwareDriver(BOOL VBE, BOOL VGA, BOOL VMX)
 +{
 +    if(!EnableDriver(L"SYSTEM\\CurrentControlSet\\Services\\VBE", VBE))
 +    {
 +        return FALSE;
 +    }
 +    if(!EnableDriver(L"SYSTEM\\CurrentControlSet\\Services\\vga", VGA))
 +    {
 +        return FALSE;
 +    }
 +    if(!EnableDriver(L"SYSTEM\\CurrentControlSet\\Services\\vmx_svga", VMX))
 +    {
 +        return FALSE;
 +    }
 +
 +    return TRUE;
 +}
 +
 +/* GUI */
 +
 +
 +/* Property page dialog callback */
 +static INT_PTR CALLBACK
 +PageWelcomeProc(
 +                HWND hwndDlg,
 +                UINT uMsg,
 +                WPARAM wParam,
 +                LPARAM lParam
 +                )
 +{
 +    LPNMHDR pnmh = (LPNMHDR)lParam;
 +    switch(uMsg)
 +    {
 +    case WM_NOTIFY:
 +        {
 +            HWND hwndControl;
 +
 +            /* Center the wizard window */
 +            hwndControl = GetParent(hwndDlg);
 +            CenterWindow (hwndControl);
 +
 +            switch(pnmh->code)
 +            {
 +            case PSN_SETACTIVE:
 +                {
 +                    PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT);
 +                    break;
 +                }
 +            case PSN_WIZNEXT:
 +                {
 +                    if(DriverFilesFound)
 +                    {
 +                        SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_CONFIG);
 +                        return TRUE;
 +                    }
 +                    break;
 +                }
 +            }
 +            break;
 +        }
 +    }
 +    return FALSE;
 +}
 +
 +/* Property page dialog callback */
 +static INT_PTR CALLBACK
 +PageInsertDiscProc(
 +                   HWND hwndDlg,
 +                   UINT uMsg,
 +                   WPARAM wParam,
 +                   LPARAM lParam
 +                   )
 +{
 +    switch(uMsg)
 +    {
 +    case WM_NOTIFY:
 +        {
 +            LPNMHDR pnmh = (LPNMHDR)lParam;
 +            switch(pnmh->code)
 +            {
 +            case PSN_SETACTIVE:
 +                PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
 +                break;
 +            case PSN_WIZNEXT:
 +                SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_INSTALLING_VMWARE_TOOLS);
 +                break;
 +            }
 +            break;
 +        }
 +    }
 +    return FALSE;
 +}
 +
 +static VOID
 +InstTerminateInstaller(BOOL Wait)
 +{
 +    if(hInstallationThread != NULL)
 +    {
 +        if(Wait)
 +        {
 +            InterlockedExchange((LONG*)&AbortInstall, 2);
 +            WaitForSingleObject(hInstallationThread, INFINITE);
 +        }
 +        else
 +        {
 +            InterlockedExchange((LONG*)&AbortInstall, 1);
 +        }
 +    }
 +}
 +
 +static DWORD WINAPI
 +InstInstallationThread(LPVOID lpParameter)
 +{
 +    HANDLE hThread;
 +    WCHAR InfFileName[1024];
 +    BOOL DriveAvailable;
 +    int DrivesTested = 0;
 +
 +    if(AbortInstall != 0) goto done;
 +    PostMessage(hInstallationNotifyWnd, WM_INSTSTATUSUPDATE, IDS_SEARCHINGFORCDROM, 0);
 +
 +    while(AbortInstall == 0)
 +    {
 +        Sleep(500);
 +        DriveAvailable = IsVMwareCDInDrive(&CDDrive);
 +        if(DriveAvailable)
 +            break;
 +        if(DrivesTested++ > 20)
 +        {
 +            PostMessage(hInstallationNotifyWnd, WM_INSTABORT, IDS_FAILEDTOLOCATEDRIVERS, 0);
 +            goto cleanup;
 +        }
 +    }
 +
 +    if(AbortInstall != 0) goto done;
 +    PostMessage(hInstallationNotifyWnd, WM_INSTSTATUSUPDATE, IDS_COPYINGFILES, 0);
 +
 +    wcscpy(InfFileName, SrcPath);
 +    wcscat(InfFileName, L"vmx_svga.inf");
 +    DPRINT1("Calling UpdateDriverForPlugAndPlayDevices()\n");
 +    if (!UpdateDriverForPlugAndPlayDevices(
 +        hInstallationNotifyWnd,
 +        L"PCI\\VEN_15AD&DEV_0405&SUBSYS_040515AD&REV_00",
 +        InfFileName,
 +        0,
 +        NULL))
 +    {
 +        AbortInstall = 1;
 +    }
 +    else
 +    {
 +        AbortInstall = 0;
 +    }
 +
 +done:
 +    switch(AbortInstall)
 +    {
 +    case 0:
 +        SendMessage(hInstallationNotifyWnd, WM_INSTCOMPLETE, 0, 0);
 +        break;
 +    case 1:
 +        SendMessage(hInstallationNotifyWnd, WM_INSTABORT, 0, 0);
 +        break;
 +    }
 +
 +cleanup:
 +    hThread = InterlockedExchangePointer((PVOID*)&hInstallationThread, 0);
 +    if(hThread != NULL)
 +    {
 +        CloseHandle(hThread);
 +    }
 +    return 0;
 +}
 +
 +static BOOL
 +InstStartInstallationThread(HWND hwndNotify)
 +{
 +    if(hInstallationThread == NULL)
 +    {
 +        DWORD ThreadId;
 +        hInstallationNotifyWnd = hwndNotify;
 +        AbortInstall = 0;
 +        hInstallationThread = CreateThread(NULL,
 +            0,
 +            InstInstallationThread,
 +            NULL,
 +            CREATE_SUSPENDED,
 +            &ThreadId);
 +        if(hInstallationThread == NULL)
 +        {
 +            return FALSE;
 +        }
 +
 +        ResumeThread(hInstallationThread);
 +        return TRUE;
 +    }
 +
 +    return FALSE;
 +}
 +
 +/* Property page dialog callback */
 +static INT_PTR CALLBACK
 +PageInstallingProc(
 +                   HWND hwndDlg,
 +                   UINT uMsg,
 +                   WPARAM wParam,
 +                   LPARAM lParam
 +                   )
 +{
 +    switch(uMsg)
 +    {
 +    case WM_NOTIFY:
 +        {
 +            LPNMHDR pnmh = (LPNMHDR)lParam;
 +            switch(pnmh->code)
 +            {
 +            case PSN_SETACTIVE:
 +                SetDlgItemText(hwndDlg, IDC_INSTALLINGSTATUS, L"");
 +                SendDlgItemMessage(hwndDlg, IDC_INSTALLINGPROGRESS, PBM_SETMARQUEE, TRUE, 50);
 +                PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK);
 +                InstStartInstallationThread(hwndDlg);
 +                break;
 +            case PSN_RESET:
 +                InstTerminateInstaller(TRUE);
 +                break;
 +            case PSN_WIZBACK:
 +                if(hInstallationThread != NULL)
 +                {
 +                    PropSheet_SetWizButtons(GetParent(hwndDlg), 0);
 +                    InstTerminateInstaller(FALSE);
 +                    SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, -1);
 +                    return -1;
 +                }
 +                else
 +                {
 +                    SendDlgItemMessage(hwndDlg, IDC_INSTALLINGPROGRESS, PBM_SETMARQUEE, FALSE, 0);
 +                    SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_INSERT_VMWARE_TOOLS);
 +                }
 +                break;
 +            }
 +            break;
 +        }
 +    case WM_INSTABORT:
 +        /* go back in case we aborted the installation thread */
 +        SendDlgItemMessage(hwndDlg, IDC_INSTALLINGPROGRESS, PBM_SETMARQUEE, FALSE, 0);
 +        PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_INSERT_VMWARE_TOOLS);
 +        if(wParam != 0)
 +        {
 +            WCHAR Msg[1024];
 +            LoadString(hAppInstance, wParam, Msg, sizeof(Msg) / sizeof(WCHAR));
 +            MessageBox(GetParent(hwndDlg), Msg, NULL, MB_ICONWARNING);
 +        }
 +        break;
 +    case WM_INSTCOMPLETE:
 +        SendDlgItemMessage(hwndDlg, IDC_INSTALLINGPROGRESS, PBM_SETMARQUEE, FALSE, 0);
 +        PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT);
 +        PropSheet_SetCurSelByID(GetParent(hwndDlg), IDD_CONFIG);
 +        break;
 +    case WM_INSTSTATUSUPDATE:
 +        {
 +            WCHAR Msg[1024];
 +            LoadString(hAppInstance, wParam, Msg, sizeof(Msg) / sizeof(WCHAR));
 +            SetDlgItemText(hwndDlg, IDC_INSTALLINGSTATUS, Msg);
 +            break;
 +        }
 +    }
 +    return FALSE;
 +}
 +
 +/* Property page dialog callback */
 +static INT_PTR CALLBACK
 +PageInstallFailedProc(
 +                      HWND hwndDlg,
 +                      UINT uMsg,
 +                      WPARAM wParam,
 +                      LPARAM lParam
 +                      )
 +{
 +    switch(uMsg)
 +    {
 +    case WM_NOTIFY:
 +        {
 +            LPNMHDR pnmh = (LPNMHDR)lParam;
 +            switch(pnmh->code)
 +            {
 +            case PSN_SETACTIVE:
 +                PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_FINISH);
 +                break;
 +            }
 +            break;
 +        }
 +    }
 +    return FALSE;
 +}
 +
 +static void
 +FillComboBox(HWND Dlg, int idComboBox, int From, int To)
 +{
 +    int i;
 +    WCHAR Text[256];
 +
 +    for(i = From; i <= To; i++)
 +    {
 +        if(LoadString(hAppInstance, i, Text, 255) > 0)
 +        {
 +            SendDlgItemMessage(Dlg, idComboBox, CB_ADDSTRING, 0, (LPARAM)Text);
 +        }
 +    }
 +}
 +
 +typedef struct
 +{
 +    int ControlID;
 +    int ResX;
 +    int ResY;
 +} MAPCTLRES;
 +
 +/* Property page dialog callback */
 +static INT_PTR CALLBACK
 +PageConfigProc(
 +               HWND hwndDlg,
 +               UINT uMsg,
 +               WPARAM wParam,
 +               LPARAM lParam
 +               )
 +{
 +    LPNMHDR pnmh = (LPNMHDR)lParam;
 +    switch(uMsg)
 +    {
 +    case WM_INITDIALOG:
 +        {
 +            DWORD ResX = 0, ResY = 0, ColDepth = 0;
 +            int cbSel;
 +
 +            FillComboBox(hwndDlg, IDC_COLORQUALITY, 10001, 10003);
 +            if(LoadResolutionSettings(&ResX, &ResY, &ColDepth))
 +            {
 +                SendDlgItemMessage(hwndDlg, ResX + ResY, BM_SETCHECK, BST_CHECKED, 0);
 +                switch(ColDepth)
 +                {
 +                case 8:
 +                    cbSel = 0;
 +                    break;
 +                case 16:
 +                    cbSel = 1;
 +                    break;
 +                case 32:
 +                    cbSel = 2;
 +                    break;
 +                default:
 +                    cbSel = -1;
 +                    break;
 +                }
 +                SendDlgItemMessage(hwndDlg, IDC_COLORQUALITY, CB_SETCURSEL, cbSel, 0);
 +            }
 +            break;
 +        }
 +    case WM_NOTIFY:
 +        {
 +            HWND hwndControl;
 +
 +            /* Center the wizard window */
 +            hwndControl = GetParent(hwndDlg);
 +            CenterWindow (hwndControl);
 +
 +            switch(pnmh->code)
 +            {
 +            case PSN_SETACTIVE:
 +                {
 +                    PropSheet_SetWizButtons(GetParent(hwndDlg), ((StartVMwConfigWizard || DriverFilesFound) ? PSWIZB_FINISH | PSWIZB_BACK : PSWIZB_FINISH));
 +                    break;
 +                }
 +            case PSN_WIZBACK:
 +                {
 +                    if(StartVMwConfigWizard)
 +                    {
 +                        SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_CHOOSEACTION);
 +                        return TRUE;
 +                    }
 +                    if(DriverFilesFound)
 +                    {
 +                        SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_WELCOMEPAGE);
 +                        return TRUE;
 +                    }
 +                    break;
 +                }
 +            case PSN_WIZFINISH:
 +                {
 +                    DWORD rx = 800, ry = 600, cd = 32;
 +                    int i;
 +                    static MAPCTLRES Resolutions[11] = {
 +                        {540, 640, 480},
 +                        {1400, 800, 600},
 +                        {1792, 1024, 768},
 +                        {2016, 1152, 864},
 +                        {2240, 1280, 960},
 +                        {2304, 1280, 1024},
 +                        {2450, 1400, 1050},
 +                        {2800, 1600, 1200},
 +                        {3136, 1792, 1344},
 +                        {3248, 1856, 1392},
 +                        {3360, 1920, 1440}
 +                    };
 +                    for(i = 0; i < 11; i++)
 +                    {
 +                        if(SendDlgItemMessage(hwndDlg, Resolutions[i].ControlID, BM_GETCHECK, 0, 0) == BST_CHECKED)
 +                        {
 +                            rx = Resolutions[i].ResX;
 +                            ry = Resolutions[i].ResY;
 +                            break;
 +                        }
 +                    }
 +
 +                    switch(SendDlgItemMessage(hwndDlg, IDC_COLORQUALITY, CB_GETCURSEL, 0, 0))
 +                    {
 +                    case 0:
 +                        cd = 8;
 +                        break;
 +                    case 1:
 +                        cd = 16;
 +                        break;
 +                    case 2:
 +                        cd = 32;
 +                        break;
 +                    }
 +
 +                    SaveResolutionSettings(rx, ry, cd);
 +                    break;
 +                }
 +            }
 +            break;
 +        }
 +    }
 +    return FALSE;
 +}
 +
 +/* Property page dialog callback */
 +static INT_PTR CALLBACK
 +PageChooseActionProc(
 +                     HWND hwndDlg,
 +                     UINT uMsg,
 +                     WPARAM wParam,
 +                     LPARAM lParam
 +                     )
 +{
 +    switch(uMsg)
 +    {
 +    case WM_INITDIALOG:
 +        SendDlgItemMessage(hwndDlg, IDC_CONFIGSETTINGS, BM_SETCHECK, BST_CHECKED, 0);
 +        break;
 +    case WM_NOTIFY:
 +        {
 +            LPNMHDR pnmh = (LPNMHDR)lParam;
 +            switch(pnmh->code)
 +            {
 +            case PSN_SETACTIVE:
 +                PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT);
 +                break;
 +            case PSN_WIZBACK:
 +                {
 +                    SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_CHOOSEACTION);
 +                    return TRUE;
 +                }
 +            case PSN_WIZNEXT:
 +                {
 +                    static ULONG SelPage[4] = {IDD_CONFIG, IDD_SELECTDRIVER, IDD_SELECTDRIVER, IDD_CHOOSEACTION};
 +                    int i;
 +
 +                    for(i = IDC_CONFIGSETTINGS; i <= IDC_UNINSTALL; i++)
 +                    {
 +                        if(SendDlgItemMessage(hwndDlg, i, BM_GETCHECK, 0, 0) == BST_CHECKED)
 +                        {
 +                            break;
 +                        }
 +                    }
 +
 +                    UninstallDriver = (i == IDC_UNINSTALL);
 +
 +                    SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, SelPage[i - IDC_CONFIGSETTINGS]);
 +                    return TRUE;
 +                }
 +            }
 +            break;
 +        }
 +    }
 +    return FALSE;
 +}
 +
 +/* Property page dialog callback */
 +static INT_PTR CALLBACK
 +PageSelectDriverProc(
 +                     HWND hwndDlg,
 +                     UINT uMsg,
 +                     WPARAM wParam,
 +                     LPARAM lParam
 +                     )
 +{
 +    switch(uMsg)
 +    {
 +    case WM_INITDIALOG:
 +        SendDlgItemMessage(hwndDlg, IDC_VBE, BM_SETCHECK, BST_CHECKED, 0);
 +        break;
 +    case WM_NOTIFY:
 +        {
 +            LPNMHDR pnmh = (LPNMHDR)lParam;
 +            switch(pnmh->code)
 +            {
 +            case PSN_SETACTIVE:
 +                PropSheet_SetWizButtons(GetParent(hwndDlg), (UninstallDriver ? PSWIZB_NEXT | PSWIZB_BACK : PSWIZB_BACK | PSWIZB_FINISH));
 +                break;
 +            case PSN_WIZBACK:
 +                {
 +                    SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_CHOOSEACTION);
 +                    return TRUE;
 +                }
 +            case PSN_WIZNEXT:
 +                {
 +                    ActivateVBE = (SendDlgItemMessage(hwndDlg, IDC_VBE, BM_GETCHECK, 0, 0) == BST_CHECKED);
 +
 +                    if(UninstallDriver)
 +                    {
 +                        return FALSE;
 +                    }
 +                    return TRUE;
 +                }
 +            case PSN_WIZFINISH:
 +                {
 +                    if(UninstallDriver)
 +                    {
 +                        return FALSE;
 +                    }
 +                    ActivateVBE = (SendDlgItemMessage(hwndDlg, IDC_VBE, BM_GETCHECK, 0, 0) == BST_CHECKED);
 +                    if(!EnableVmwareDriver(ActivateVBE,
 +                        TRUE,
 +                        FALSE))
 +                    {
 +                        WCHAR Msg[1024];
 +                        LoadString(hAppInstance, (ActivateVBE ? IDS_FAILEDTOSELVBEDRIVER : IDS_FAILEDTOSELVGADRIVER), Msg, sizeof(Msg) / sizeof(WCHAR));
 +                        MessageBox(GetParent(hwndDlg), Msg, NULL, MB_ICONWARNING);
 +                        SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_SELECTDRIVER);
 +                        return TRUE;
 +                    }
 +                    break;
 +                }
 +            }
 +            break;
 +        }
 +    }
 +    return FALSE;
 +}
 +
 +static VOID
 +ShowUninstNotice(HWND Owner)
 +{
 +    WCHAR Msg[1024];
 +    LoadString(hAppInstance, IDS_UNINSTNOTICE, Msg, sizeof(Msg) / sizeof(WCHAR));
 +    MessageBox(Owner, Msg, NULL, MB_ICONINFORMATION);
 +}
 +
 +static INT_PTR CALLBACK
 +PageDoUninstallProc(
 +                    HWND hwndDlg,
 +                    UINT uMsg,
 +                    WPARAM wParam,
 +                    LPARAM lParam
 +                    )
 +{
 +    switch(uMsg)
 +    {
 +    case WM_NOTIFY:
 +        {
 +            LPNMHDR pnmh = (LPNMHDR)lParam;
 +            switch(pnmh->code)
 +            {
 +            case PSN_SETACTIVE:
 +                PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_FINISH);
 +                break;
 +            case PSN_WIZFINISH:
 +                {
 +                    if(UninstallDriver)
 +                    {
 +                        if(!EnableVmwareDriver(ActivateVBE,
 +                            TRUE,
 +                            FALSE))
 +                        {
 +                            WCHAR Msg[1024];
 +                            LoadString(hAppInstance, (ActivateVBE ? IDS_FAILEDTOSELVBEDRIVER : IDS_FAILEDTOSELVGADRIVER), Msg, sizeof(Msg) / sizeof(WCHAR));
 +                            MessageBox(GetParent(hwndDlg), Msg, NULL, MB_ICONWARNING);
 +                            SetWindowLongPtr(hwndDlg, DWL_MSGRESULT, IDD_SELECTDRIVER);
 +                            return TRUE;
 +                        }
 +                        ShowUninstNotice(GetParent(hwndDlg));
 +                    }
 +                    return FALSE;
 +                }
 +            }
 +            break;
 +        }
 +    }
 +    return FALSE;
 +}
 +
 +static LONG
 +CreateWizard(VOID)
 +{
 +    PROPSHEETHEADER psh;
 +    HPROPSHEETPAGE ahpsp[8];
 +    PROPSHEETPAGE psp;
 +    WCHAR Caption[1024];
 +
 +    LoadString(hAppInstance, IDS_WIZARD_NAME, Caption, sizeof(Caption) / sizeof(TCHAR));
 +
 +    /* Create the Welcome page */
 +    ZeroMemory (&psp, sizeof(PROPSHEETPAGE));
 +    psp.dwSize = sizeof(PROPSHEETPAGE);
 +    psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER;
 +    psp.hInstance = hAppInstance;
 +    psp.pfnDlgProc = PageWelcomeProc;
 +    psp.pszTemplate = MAKEINTRESOURCE(IDD_WELCOMEPAGE);
 +    ahpsp[0] = CreatePropertySheetPage(&psp);
 +
 +    /* Create the INSERT_VMWARE_TOOLS page */
 +    psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
 +    psp.pszHeaderTitle = MAKEINTRESOURCE(IDD_INSERT_VMWARE_TOOLSTITLE);
 +    psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDD_INSERT_VMWARE_TOOLSSUBTITLE);
 +    psp.pszTemplate = MAKEINTRESOURCE(IDD_INSERT_VMWARE_TOOLS);
 +    psp.pfnDlgProc = PageInsertDiscProc;
 +    ahpsp[1] = CreatePropertySheetPage(&psp);
 +
 +    /* Create the INSTALLING_VMWARE_TOOLS page */
 +    psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
 +    psp.pszHeaderTitle = MAKEINTRESOURCE(IDD_INSTALLING_VMWARE_TOOLSTITLE);
 +    psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDD_INSTALLING_VMWARE_TOOLSSUBTITLE);
 +    psp.pszTemplate = MAKEINTRESOURCE(IDD_INSTALLING_VMWARE_TOOLS);
 +    psp.pfnDlgProc = PageInstallingProc;
 +    ahpsp[2] = CreatePropertySheetPage(&psp);
 +
 +    /* Create the CONFIG page */
 +    psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
 +    psp.pszHeaderTitle = MAKEINTRESOURCE(IDD_CONFIGTITLE);
 +    psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDD_CONFIGSUBTITLE);
 +    psp.pfnDlgProc = PageConfigProc;
 +    psp.pszTemplate = MAKEINTRESOURCE(IDD_CONFIG);
 +    ahpsp[3] = CreatePropertySheetPage(&psp);
 +
 +    /* Create the INSTALLATION_FAILED page */
 +    psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
 +    psp.pszHeaderTitle = MAKEINTRESOURCE(IDD_INSTALLATION_FAILEDTITLE);
 +    psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDD_INSTALLATION_FAILEDSUBTITLE);
 +    psp.pfnDlgProc = PageInstallFailedProc;
 +    psp.pszTemplate = MAKEINTRESOURCE(IDD_INSTALLATION_FAILED);
 +    ahpsp[4] = CreatePropertySheetPage(&psp);
 +
 +    /* Create the CHOOSEACTION page */
 +    psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
 +    psp.pszHeaderTitle = MAKEINTRESOURCE(IDD_CHOOSEACTIONTITLE);
 +    psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDD_CHOOSEACTIONSUBTITLE);
 +    psp.pfnDlgProc = PageChooseActionProc;
 +    psp.pszTemplate = MAKEINTRESOURCE(IDD_CHOOSEACTION);
 +    ahpsp[5] = CreatePropertySheetPage(&psp);
 +
 +    /* Create the SELECTDRIVER page */
 +    psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
 +    psp.pszHeaderTitle = MAKEINTRESOURCE(IDD_SELECTDRIVERTITLE);
 +    psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDD_SELECTDRIVERSUBTITLE);
 +    psp.pfnDlgProc = PageSelectDriverProc;
 +    psp.pszTemplate = MAKEINTRESOURCE(IDD_SELECTDRIVER);
 +    ahpsp[6] = CreatePropertySheetPage(&psp);
 +
 +    /* Create the DOUNINSTALL page */
 +    psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
 +    psp.pszHeaderTitle = MAKEINTRESOURCE(IDD_DOUNINSTALLTITLE);
 +    psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDD_DOUNINSTALLSUBTITLE);
 +    psp.pfnDlgProc = PageDoUninstallProc;
 +    psp.pszTemplate = MAKEINTRESOURCE(IDD_DOUNINSTALL);
 +    ahpsp[7] = CreatePropertySheetPage(&psp);
 +
 +    /* Create the property sheet */
 +    psh.dwSize = sizeof(PROPSHEETHEADER);
 +    psh.dwFlags = PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER;
 +    psh.hInstance = hAppInstance;
 +    psh.hwndParent = NULL;
 +    psh.nPages = 7;
 +    psh.nStartPage = (StartVMwConfigWizard ? 5 : 0);
 +    psh.phpage = ahpsp;
 +    psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK);
 +    psh.pszbmHeader = MAKEINTRESOURCE(IDB_HEADER);
 +
 +    /* Display the wizard */
 +    return (LONG)(PropertySheet(&psh) != -1);
 +}
 +
 +int WINAPI
 +wWinMain(HINSTANCE hInstance,
 +         HINSTANCE hPrevInstance,
 +         LPWSTR lpszCmdLine,
 +         int nCmdShow)
 +{
 +
 +    int Version;
 +    WCHAR *lc;
 +
 +    hAppInstance = hInstance;
 +
 +    if(!DetectVMware(&Version))
 +    {
 +        return 1;
 +    }
 +
 +    lc = DestinationPath;
 +    lc += GetSystemDirectory(DestinationPath, MAX_PATH) - 1;
 +    if(lc >= DestinationPath && *lc != L'\\')
 +    {
 +        wcscat(DestinationPath, L"\\");
 +    }
 +    DestinationDriversPath[0] = L'\0';
 +    wcscat(DestinationDriversPath, DestinationPath);
 +    wcscat(DestinationDriversPath, L"drivers\\");
 +
 +    SetCurrentDirectory(DestinationPath);
 +
++    DriverFilesFound = DoesFileExist(DestinationPath, vmx_fb) &&
++        DoesFileExist(DestinationPath, vmx_mode) &&
++        DoesFileExist(DestinationDriversPath, vmx_svga);
 +
 +    StartVMwConfigWizard = DriverFilesFound && IsVmwSVGAEnabled();
 +
 +    /* Show the wizard */
 +    CreateWizard();
 +
 +    return 2;
 +}
 +
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,51a0f4b..51a0f4b
mode 000000,100644..100644
--- /dev/null
index 0000000,99e5d44..99e5d44
mode 000000,100644..100644
--- /dev/null
Simple merge
Simple merge
Simple merge
index 0000000,aec8719..aec8719
mode 000000,100644..100644
--- /dev/null
index 0000000,0292f20..0292f20
mode 000000,100644..100644
--- /dev/null
Simple merge
index 0000000,348fd1c..348fd1c
mode 000000,100644..100644
--- /dev/null
index 0000000,54d23da..54d23da
mode 000000,100644..100644
--- /dev/null
index 0000000,32dd5f2..32dd5f2
mode 000000,100644..100644
--- /dev/null
index 0000000,2d33ce5..2d33ce5
mode 000000,100644..100644
--- /dev/null
index 0000000,1395816..1395816
mode 000000,100644..100644
--- /dev/null
index 0000000,0e4d168..0e4d168
mode 000000,100644..100644
--- /dev/null
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,bd3eaea..bd3eaea
mode 000000,100644..100644
--- /dev/null
index 0000000,a181064..a181064
mode 000000,100644..100644
--- /dev/null
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,a7baed4..a7baed4
mode 000000,100644..100644
--- /dev/null
Simple merge
Simple merge
index 73aa6d6,0000000..5c03ef7
mode 100644,000000..100644
--- /dev/null
@@@ -1,5648 -1,0 +1,5649 @@@
- #ifdef _X86_
 +/*
 + * ntddk.h
 + *
 + * Windows NT Device Driver Kit
 + *
 + * This file is part of the ReactOS DDK package.
 + *
 + * Contributors:
 + *   Amine Khaldi
 + *   Timo Kreuzer (timo.kreuzer@reactos.org)
 + *
 + * THIS SOFTWARE IS NOT COPYRIGHTED
 + *
 + * This source code is offered for use in the public domain. You may
 + * use, modify or distribute it freely.
 + *
 + * This code is distributed in the hope that it will be useful but
 + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 + * DISCLAIMED. This includes but is not limited to warranties of
 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 + *
 + */
 +
 +#pragma once
 +
 +#define _NTDDK_
 +
 +#if !defined(_NTHAL_) && !defined(_NTIFS_)
 +#define _NTDDK_INCLUDED_
 +#define _DDK_DRIVER_
 +#endif
 +
 +/* Dependencies */
 +
 +#define NT_INCLUDED
 +#define _CTYPE_DISABLE_MACROS
 +
 +#include <wdm.h>
 +#include <excpt.h>
 +#include <ntdef.h>
 +#include <ntstatus.h>
 +#include <mce.h>
 +#include <bugcodes.h>
 +#include <ntiologc.h>
 +
 +#include <stdarg.h> // FIXME
 +#include <basetyps.h> // FIXME
 +
 +
 +#ifdef __cplusplus
 +extern "C" {
 +#endif
 +
 +/* GUID and UUID */
 +#ifndef _NTLSA_IFS_
 +#ifndef _NTLSA_AUDIT_
 +#define _NTLSA_AUDIT_
 +
 +#ifndef GUID_DEFINED
 +#include <guiddef.h>
 +#endif
 +
 +#endif /* _NTLSA_AUDIT_ */
 +#endif /* _NTLSA_IFS_ */
 +
 +typedef GUID UUID;
 +
 +struct _LOADER_PARAMETER_BLOCK;
 +struct _CREATE_DISK;
 +struct _DRIVE_LAYOUT_INFORMATION_EX;
 +struct _SET_PARTITION_INFORMATION_EX;
 +
 +typedef struct _BUS_HANDLER *PBUS_HANDLER;
 +typedef struct _DEVICE_HANDLER_OBJECT *PDEVICE_HANDLER_OBJECT;
 +#if defined(_NTHAL_INCLUDED_)
 +typedef struct _KAFFINITY_EX *PKAFFINITY_EX;
 +#endif
 +typedef struct _PEB *PPEB;
 +
 +#ifndef _NTIMAGE_
 +
 +typedef struct _IMAGE_NT_HEADERS *PIMAGE_NT_HEADERS32;
 +typedef struct _IMAGE_NT_HEADERS64 *PIMAGE_NT_HEADERS64;
 +
 +#ifdef _WIN64
 +typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
 +#else
 +typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
 +#endif
 +
 +#endif /* _NTIMAGE_ */
 +
 +/******************************************************************************
 + *                            Executive Types                                 *
 + ******************************************************************************/
 +typedef struct _ZONE_SEGMENT_HEADER {
 +  SINGLE_LIST_ENTRY SegmentList;
 +  PVOID Reserved;
 +} ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
 +
 +typedef struct _ZONE_HEADER {
 +  SINGLE_LIST_ENTRY FreeList;
 +  SINGLE_LIST_ENTRY SegmentList;
 +  ULONG BlockSize;
 +  ULONG TotalSegmentSize;
 +} ZONE_HEADER, *PZONE_HEADER;
 +
 +#define PROTECTED_POOL                    0x80000000
 +
 +/******************************************************************************
 + *                         I/O Manager Types                                  *
 + ******************************************************************************/
 +
 +/* DEVICE_OBJECT.Flags */
 +#define DO_DEVICE_HAS_NAME                0x00000040
 +#define DO_SYSTEM_BOOT_PARTITION          0x00000100
 +#define DO_LONG_TERM_REQUESTS             0x00000200
 +#define DO_NEVER_LAST_DEVICE              0x00000400
 +#define DO_LOW_PRIORITY_FILESYSTEM        0x00010000
 +#define DO_SUPPORTS_TRANSACTIONS          0x00040000
 +#define DO_FORCE_NEITHER_IO               0x00080000
 +#define DO_VOLUME_DEVICE_OBJECT           0x00100000
 +#define DO_SYSTEM_SYSTEM_PARTITION        0x00200000
 +#define DO_SYSTEM_CRITICAL_PARTITION      0x00400000
 +#define DO_DISALLOW_EXECUTE               0x00800000
 +
 +#ifndef _ARC_DDK_
 +#define _ARC_DDK_
 +typedef enum _CONFIGURATION_TYPE {
 +  ArcSystem,
 +  CentralProcessor,
 +  FloatingPointProcessor,
 +  PrimaryIcache,
 +  PrimaryDcache,
 +  SecondaryIcache,
 +  SecondaryDcache,
 +  SecondaryCache,
 +  EisaAdapter,
 +  TcAdapter,
 +  ScsiAdapter,
 +  DtiAdapter,
 +  MultiFunctionAdapter,
 +  DiskController,
 +  TapeController,
 +  CdromController,
 +  WormController,
 +  SerialController,
 +  NetworkController,
 +  DisplayController,
 +  ParallelController,
 +  PointerController,
 +  KeyboardController,
 +  AudioController,
 +  OtherController,
 +  DiskPeripheral,
 +  FloppyDiskPeripheral,
 +  TapePeripheral,
 +  ModemPeripheral,
 +  MonitorPeripheral,
 +  PrinterPeripheral,
 +  PointerPeripheral,
 +  KeyboardPeripheral,
 +  TerminalPeripheral,
 +  OtherPeripheral,
 +  LinePeripheral,
 +  NetworkPeripheral,
 +  SystemMemory,
 +  DockingInformation,
 +  RealModeIrqRoutingTable,
 +  RealModePCIEnumeration,
 +  MaximumType
 +} CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
 +#endif /* !_ARC_DDK_ */
 +
 +/*
 +** IRP function codes
 +*/
 +
 +#define IRP_MN_QUERY_DIRECTORY            0x01
 +#define IRP_MN_NOTIFY_CHANGE_DIRECTORY    0x02
 +
 +#define IRP_MN_USER_FS_REQUEST            0x00
 +#define IRP_MN_MOUNT_VOLUME               0x01
 +#define IRP_MN_VERIFY_VOLUME              0x02
 +#define IRP_MN_LOAD_FILE_SYSTEM           0x03
 +#define IRP_MN_TRACK_LINK                 0x04
 +#define IRP_MN_KERNEL_CALL                0x04
 +
 +#define IRP_MN_LOCK                       0x01
 +#define IRP_MN_UNLOCK_SINGLE              0x02
 +#define IRP_MN_UNLOCK_ALL                 0x03
 +#define IRP_MN_UNLOCK_ALL_BY_KEY          0x04
 +
 +#define IRP_MN_FLUSH_AND_PURGE          0x01
 +
 +#define IRP_MN_NORMAL                     0x00
 +#define IRP_MN_DPC                        0x01
 +#define IRP_MN_MDL                        0x02
 +#define IRP_MN_COMPLETE                   0x04
 +#define IRP_MN_COMPRESSED                 0x08
 +
 +#define IRP_MN_MDL_DPC                    (IRP_MN_MDL | IRP_MN_DPC)
 +#define IRP_MN_COMPLETE_MDL               (IRP_MN_COMPLETE | IRP_MN_MDL)
 +#define IRP_MN_COMPLETE_MDL_DPC           (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
 +
 +#define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
 +
 +#define IO_CHECK_CREATE_PARAMETERS      0x0200
 +#define IO_ATTACH_DEVICE                0x0400
 +#define IO_IGNORE_SHARE_ACCESS_CHECK    0x0800
 +
 +typedef NTSTATUS
 +(NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
 +  IN PVOID Context,
 +  IN PUNICODE_STRING PathName,
 +  IN INTERFACE_TYPE BusType,
 +  IN ULONG BusNumber,
 +  IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
 +  IN CONFIGURATION_TYPE ControllerType,
 +  IN ULONG ControllerNumber,
 +  IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
 +  IN CONFIGURATION_TYPE PeripheralType,
 +  IN ULONG PeripheralNumber,
 +  IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
 +
 +typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
 +  IoQueryDeviceIdentifier = 0,
 +  IoQueryDeviceConfigurationData,
 +  IoQueryDeviceComponentInformation,
 +  IoQueryDeviceMaxData
 +} IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
 +
 +typedef VOID
 +(NTAPI *PDRIVER_REINITIALIZE)(
 +  IN struct _DRIVER_OBJECT *DriverObject,
 +  IN PVOID Context OPTIONAL,
 +  IN ULONG Count);
 +
 +typedef struct _CONTROLLER_OBJECT {
 +  CSHORT Type;
 +  CSHORT Size;
 +  PVOID ControllerExtension;
 +  KDEVICE_QUEUE DeviceWaitQueue;
 +  ULONG Spare1;
 +  LARGE_INTEGER Spare2;
 +} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
 +
 +#define DRVO_REINIT_REGISTERED          0x00000008
 +#define DRVO_INITIALIZED                0x00000010
 +#define DRVO_BOOTREINIT_REGISTERED      0x00000020
 +#define DRVO_LEGACY_RESOURCES           0x00000040
 +
 +typedef struct _CONFIGURATION_INFORMATION {
 +  ULONG DiskCount;
 +  ULONG FloppyCount;
 +  ULONG CdRomCount;
 +  ULONG TapeCount;
 +  ULONG ScsiPortCount;
 +  ULONG SerialCount;
 +  ULONG ParallelCount;
 +  BOOLEAN AtDiskPrimaryAddressClaimed;
 +  BOOLEAN AtDiskSecondaryAddressClaimed;
 +  ULONG Version;
 +  ULONG MediumChangerCount;
 +} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
 +
 +typedef struct _DISK_SIGNATURE {
 +  ULONG PartitionStyle;
 +  _ANONYMOUS_UNION union {
 +    struct {
 +      ULONG Signature;
 +      ULONG CheckSum;
 +    } Mbr;
 +    struct {
 +      GUID DiskId;
 +    } Gpt;
 +  } DUMMYUNIONNAME;
 +} DISK_SIGNATURE, *PDISK_SIGNATURE;
 +
 +typedef struct _TXN_PARAMETER_BLOCK {
 +  USHORT Length;
 +  USHORT TxFsContext;
 +  PVOID TransactionObject;
 +} TXN_PARAMETER_BLOCK, *PTXN_PARAMETER_BLOCK;
 +
 +#define TXF_MINIVERSION_DEFAULT_VIEW        (0xFFFE)
 +
 +typedef struct _IO_DRIVER_CREATE_CONTEXT {
 +  CSHORT Size;
 +  struct _ECP_LIST *ExtraCreateParameter;
 +  PVOID DeviceObjectHint;
 +  PTXN_PARAMETER_BLOCK TxnParameters;
 +} IO_DRIVER_CREATE_CONTEXT, *PIO_DRIVER_CREATE_CONTEXT;
 +
 +typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD {
 +  USHORT Size;
 +  USHORT Version;
 +  PVOID Context;
 +  PINTERFACE_REFERENCE InterfaceReference;
 +  PINTERFACE_DEREFERENCE InterfaceDereference;
 +  PGET_SET_DEVICE_DATA SetBusData;
 +  PGET_SET_DEVICE_DATA GetBusData;
 +  UCHAR CapabilityID;
 +} AGP_TARGET_BUS_INTERFACE_STANDARD, *PAGP_TARGET_BUS_INTERFACE_STANDARD;
 +
 +typedef NTSTATUS
 +(NTAPI *PGET_LOCATION_STRING)(
 +  IN OUT PVOID Context OPTIONAL,
 +  OUT PWCHAR *LocationStrings);
 +
 +typedef struct _PNP_LOCATION_INTERFACE {
 +  USHORT Size;
 +  USHORT Version;
 +  PVOID Context;
 +  PINTERFACE_REFERENCE InterfaceReference;
 +  PINTERFACE_DEREFERENCE InterfaceDereference;
 +  PGET_LOCATION_STRING GetLocationString;
 +} PNP_LOCATION_INTERFACE, *PPNP_LOCATION_INTERFACE;
 +
 +typedef enum _ARBITER_ACTION {
 +  ArbiterActionTestAllocation,
 +  ArbiterActionRetestAllocation,
 +  ArbiterActionCommitAllocation,
 +  ArbiterActionRollbackAllocation,
 +  ArbiterActionQueryAllocatedResources,
 +  ArbiterActionWriteReservedResources,
 +  ArbiterActionQueryConflict,
 +  ArbiterActionQueryArbitrate,
 +  ArbiterActionAddReserved,
 +  ArbiterActionBootAllocation
 +} ARBITER_ACTION, *PARBITER_ACTION;
 +
 +typedef struct _ARBITER_CONFLICT_INFO {
 +  PDEVICE_OBJECT OwningObject;
 +  ULONGLONG Start;
 +  ULONGLONG End;
 +} ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
 +
 +typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS {
 +  IN OUT PLIST_ENTRY ArbitrationList;
 +  IN ULONG AllocateFromCount;
 +  IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
 +} ARBITER_TEST_ALLOCATION_PARAMETERS, *PARBITER_TEST_ALLOCATION_PARAMETERS;
 +
 +typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS {
 +  IN OUT PLIST_ENTRY ArbitrationList;
 +  IN ULONG AllocateFromCount;
 +  IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
 +} ARBITER_RETEST_ALLOCATION_PARAMETERS, *PARBITER_RETEST_ALLOCATION_PARAMETERS;
 +
 +typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS {
 +  IN OUT PLIST_ENTRY ArbitrationList;
 +} ARBITER_BOOT_ALLOCATION_PARAMETERS, *PARBITER_BOOT_ALLOCATION_PARAMETERS;
 +
 +typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS {
 +  OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources;
 +} ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS;
 +
 +typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS {
 +  IN PDEVICE_OBJECT PhysicalDeviceObject;
 +  IN PIO_RESOURCE_DESCRIPTOR ConflictingResource;
 +  OUT PULONG ConflictCount;
 +  OUT PARBITER_CONFLICT_INFO *Conflicts;
 +} ARBITER_QUERY_CONFLICT_PARAMETERS, *PARBITER_QUERY_CONFLICT_PARAMETERS;
 +
 +typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS {
 +  IN PLIST_ENTRY ArbitrationList;
 +} ARBITER_QUERY_ARBITRATE_PARAMETERS, *PARBITER_QUERY_ARBITRATE_PARAMETERS;
 +
 +typedef struct _ARBITER_ADD_RESERVED_PARAMETERS {
 +  IN PDEVICE_OBJECT ReserveDevice;
 +} ARBITER_ADD_RESERVED_PARAMETERS, *PARBITER_ADD_RESERVED_PARAMETERS;
 +
 +typedef struct _ARBITER_PARAMETERS {
 +  union {
 +    ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation;
 +    ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation;
 +    ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation;
 +    ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources;
 +    ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict;
 +    ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate;
 +    ARBITER_ADD_RESERVED_PARAMETERS AddReserved;
 +  } Parameters;
 +} ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
 +
 +typedef enum _ARBITER_REQUEST_SOURCE {
 +  ArbiterRequestUndefined = -1,
 +  ArbiterRequestLegacyReported,
 +  ArbiterRequestHalReported,
 +  ArbiterRequestLegacyAssigned,
 +  ArbiterRequestPnpDetected,
 +  ArbiterRequestPnpEnumerated
 +} ARBITER_REQUEST_SOURCE;
 +
 +typedef enum _ARBITER_RESULT {
 +  ArbiterResultUndefined = -1,
 +  ArbiterResultSuccess,
 +  ArbiterResultExternalConflict,
 +  ArbiterResultNullRequest
 +} ARBITER_RESULT;
 +
 +#define ARBITER_FLAG_BOOT_CONFIG 0x00000001
 +
 +typedef struct _ARBITER_LIST_ENTRY {
 +  LIST_ENTRY ListEntry;
 +  ULONG AlternativeCount;
 +  PIO_RESOURCE_DESCRIPTOR Alternatives;
 +  PDEVICE_OBJECT PhysicalDeviceObject;
 +  ARBITER_REQUEST_SOURCE RequestSource;
 +  ULONG Flags;
 +  LONG_PTR WorkSpace;
 +  INTERFACE_TYPE InterfaceType;
 +  ULONG SlotNumber;
 +  ULONG BusNumber;
 +  PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment;
 +  PIO_RESOURCE_DESCRIPTOR SelectedAlternative;
 +  ARBITER_RESULT Result;
 +} ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
 +
 +typedef NTSTATUS
 +(NTAPI *PARBITER_HANDLER)(
 +  IN OUT PVOID Context,
 +  IN ARBITER_ACTION Action,
 +  IN OUT PARBITER_PARAMETERS Parameters);
 +
 +#define ARBITER_PARTIAL 0x00000001
 +
 +typedef struct _ARBITER_INTERFACE {
 +  USHORT Size;
 +  USHORT Version;
 +  PVOID Context;
 +  PINTERFACE_REFERENCE InterfaceReference;
 +  PINTERFACE_DEREFERENCE InterfaceDereference;
 +  PARBITER_HANDLER ArbiterHandler;
 +  ULONG Flags;
 +} ARBITER_INTERFACE, *PARBITER_INTERFACE;
 +
 +typedef enum _RESOURCE_TRANSLATION_DIRECTION {
 +  TranslateChildToParent,
 +  TranslateParentToChild
 +} RESOURCE_TRANSLATION_DIRECTION;
 +
 +typedef NTSTATUS
 +(NTAPI *PTRANSLATE_RESOURCE_HANDLER)(
 +  IN OUT PVOID Context OPTIONAL,
 +  IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
 +  IN RESOURCE_TRANSLATION_DIRECTION Direction,
 +  IN ULONG AlternativesCount OPTIONAL,
 +  IN IO_RESOURCE_DESCRIPTOR Alternatives[],
 +  IN PDEVICE_OBJECT PhysicalDeviceObject,
 +  OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target);
 +
 +typedef NTSTATUS
 +(NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
 +  IN OUT PVOID Context OPTIONAL,
 +  IN PIO_RESOURCE_DESCRIPTOR Source,
 +  IN PDEVICE_OBJECT PhysicalDeviceObject,
 +  OUT PULONG TargetCount,
 +  OUT PIO_RESOURCE_DESCRIPTOR *Target);
 +
 +typedef struct _TRANSLATOR_INTERFACE {
 +  USHORT Size;
 +  USHORT Version;
 +  PVOID Context;
 +  PINTERFACE_REFERENCE InterfaceReference;
 +  PINTERFACE_DEREFERENCE InterfaceDereference;
 +  PTRANSLATE_RESOURCE_HANDLER TranslateResources;
 +  PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
 +} TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
 +
 +typedef struct _PCI_AGP_CAPABILITY {
 +  PCI_CAPABILITIES_HEADER Header;
 +  USHORT Minor:4;
 +  USHORT Major:4;
 +  USHORT Rsvd1:8;
 +  struct _PCI_AGP_STATUS {
 +    ULONG Rate:3;
 +    ULONG Agp3Mode:1;
 +    ULONG FastWrite:1;
 +    ULONG FourGB:1;
 +    ULONG HostTransDisable:1;
 +    ULONG Gart64:1;
 +    ULONG ITA_Coherent:1;
 +    ULONG SideBandAddressing:1;
 +    ULONG CalibrationCycle:3;
 +    ULONG AsyncRequestSize:3;
 +    ULONG Rsvd1:1;
 +    ULONG Isoch:1;
 +    ULONG Rsvd2:6;
 +    ULONG RequestQueueDepthMaximum:8;
 +  } AGPStatus;
 +  struct _PCI_AGP_COMMAND {
 +    ULONG Rate:3;
 +    ULONG Rsvd1:1;
 +    ULONG FastWriteEnable:1;
 +    ULONG FourGBEnable:1;
 +    ULONG Rsvd2:1;
 +    ULONG Gart64:1;
 +    ULONG AGPEnable:1;
 +    ULONG SBAEnable:1;
 +    ULONG CalibrationCycle:3;
 +    ULONG AsyncReqSize:3;
 +    ULONG Rsvd3:8;
 +    ULONG RequestQueueDepth:8;
 +  } AGPCommand;
 +} PCI_AGP_CAPABILITY, *PPCI_AGP_CAPABILITY;
 +
 +typedef enum _EXTENDED_AGP_REGISTER {
 +  IsochStatus,
 +  AgpControl,
 +  ApertureSize,
 +  AperturePageSize,
 +  GartLow,
 +  GartHigh,
 +  IsochCommand
 +} EXTENDED_AGP_REGISTER, *PEXTENDED_AGP_REGISTER;
 +
 +typedef struct _PCI_AGP_ISOCH_STATUS {
 +  ULONG ErrorCode:2;
 +  ULONG Rsvd1:1;
 +  ULONG Isoch_L:3;
 +  ULONG Isoch_Y:2;
 +  ULONG Isoch_N:8;
 +  ULONG Rsvd2:16;
 +} PCI_AGP_ISOCH_STATUS, *PPCI_AGP_ISOCH_STATUS;
 +
 +typedef struct _PCI_AGP_CONTROL {
 +  ULONG Rsvd1:7;
 +  ULONG GTLB_Enable:1;
 +  ULONG AP_Enable:1;
 +  ULONG CAL_Disable:1;
 +  ULONG Rsvd2:22;
 +} PCI_AGP_CONTROL, *PPCI_AGP_CONTROL;
 +
 +typedef struct _PCI_AGP_APERTURE_PAGE_SIZE {
 +  USHORT PageSizeMask:11;
 +  USHORT Rsvd1:1;
 +  USHORT PageSizeSelect:4;
 +} PCI_AGP_APERTURE_PAGE_SIZE, *PPCI_AGP_APERTURE_PAGE_SIZE;
 +
 +typedef struct _PCI_AGP_ISOCH_COMMAND {
 +  USHORT Rsvd1:6;
 +  USHORT Isoch_Y:2;
 +  USHORT Isoch_N:8;
 +} PCI_AGP_ISOCH_COMMAND, *PPCI_AGP_ISOCH_COMMAND;
 +
 +typedef struct PCI_AGP_EXTENDED_CAPABILITY {
 +  PCI_AGP_ISOCH_STATUS IsochStatus;
 +  PCI_AGP_CONTROL AgpControl;
 +  USHORT ApertureSize;
 +  PCI_AGP_APERTURE_PAGE_SIZE AperturePageSize;
 +  ULONG GartLow;
 +  ULONG GartHigh;
 +  PCI_AGP_ISOCH_COMMAND IsochCommand;
 +} PCI_AGP_EXTENDED_CAPABILITY, *PPCI_AGP_EXTENDED_CAPABILITY;
 +
 +#define PCI_AGP_RATE_1X     0x1
 +#define PCI_AGP_RATE_2X     0x2
 +#define PCI_AGP_RATE_4X     0x4
 +
 +#define PCIX_MODE_CONVENTIONAL_PCI  0x0
 +#define PCIX_MODE1_66MHZ            0x1
 +#define PCIX_MODE1_100MHZ           0x2
 +#define PCIX_MODE1_133MHZ           0x3
 +#define PCIX_MODE2_266_66MHZ        0x9
 +#define PCIX_MODE2_266_100MHZ       0xA
 +#define PCIX_MODE2_266_133MHZ       0xB
 +#define PCIX_MODE2_533_66MHZ        0xD
 +#define PCIX_MODE2_533_100MHZ       0xE
 +#define PCIX_MODE2_533_133MHZ       0xF
 +
 +#define PCIX_VERSION_MODE1_ONLY     0x0
 +#define PCIX_VERSION_MODE2_ECC      0x1
 +#define PCIX_VERSION_DUAL_MODE_ECC  0x2
 +
 +typedef struct _PCIX_BRIDGE_CAPABILITY {
 +  PCI_CAPABILITIES_HEADER Header;
 +  union {
 +    _ANONYMOUS_STRUCT struct {
 +      USHORT Bus64Bit:1;
 +      USHORT Bus133MHzCapable:1;
 +      USHORT SplitCompletionDiscarded:1;
 +      USHORT UnexpectedSplitCompletion:1;
 +      USHORT SplitCompletionOverrun:1;
 +      USHORT SplitRequestDelayed:1;
 +      USHORT BusModeFrequency:4;
 +      USHORT Rsvd:2;
 +      USHORT Version:2;
 +      USHORT Bus266MHzCapable:1;
 +      USHORT Bus533MHzCapable:1;
 +    } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +  } SecondaryStatus;
 +  union {
 +    _ANONYMOUS_STRUCT struct {
 +      ULONG FunctionNumber:3;
 +      ULONG DeviceNumber:5;
 +      ULONG BusNumber:8;
 +      ULONG Device64Bit:1;
 +      ULONG Device133MHzCapable:1;
 +      ULONG SplitCompletionDiscarded:1;
 +      ULONG UnexpectedSplitCompletion:1;
 +      ULONG SplitCompletionOverrun:1;
 +      ULONG SplitRequestDelayed:1;
 +      ULONG Rsvd:7;
 +      ULONG DIMCapable:1;
 +      ULONG Device266MHzCapable:1;
 +      ULONG Device533MHzCapable:1;
 +    } DUMMYSTRUCTNAME;
 +    ULONG AsULONG;
 +  } BridgeStatus;
 +  USHORT UpstreamSplitTransactionCapacity;
 +  USHORT UpstreamSplitTransactionLimit;
 +  USHORT DownstreamSplitTransactionCapacity;
 +  USHORT DownstreamSplitTransactionLimit;
 +  union {
 +    _ANONYMOUS_STRUCT struct {
 +      ULONG SelectSecondaryRegisters:1;
 +      ULONG ErrorPresentInOtherBank:1;
 +      ULONG AdditionalCorrectableError:1;
 +      ULONG AdditionalUncorrectableError:1;
 +      ULONG ErrorPhase:3;
 +      ULONG ErrorCorrected:1;
 +      ULONG Syndrome:8;
 +      ULONG ErrorFirstCommand:4;
 +      ULONG ErrorSecondCommand:4;
 +      ULONG ErrorUpperAttributes:4;
 +      ULONG ControlUpdateEnable:1;
 +      ULONG Rsvd:1;
 +      ULONG DisableSingleBitCorrection:1;
 +      ULONG EccMode:1;
 +    } DUMMYSTRUCTNAME;
 +  ULONG AsULONG;
 +  } EccControlStatus;
 +  ULONG EccFirstAddress;
 +  ULONG EccSecondAddress;
 +  ULONG EccAttribute;
 +} PCIX_BRIDGE_CAPABILITY, *PPCIX_BRIDGE_CAPABILITY;
 +
 +typedef struct _PCI_SUBSYSTEM_IDS_CAPABILITY {
 +  PCI_CAPABILITIES_HEADER Header;
 +  USHORT Reserved;
 +  USHORT SubVendorID;
 +  USHORT SubSystemID;
 +} PCI_SUBSYSTEM_IDS_CAPABILITY, *PPCI_SUBSYSTEM_IDS_CAPABILITY;
 +
 +#define OSC_FIRMWARE_FAILURE                            0x02
 +#define OSC_UNRECOGNIZED_UUID                           0x04
 +#define OSC_UNRECOGNIZED_REVISION                       0x08
 +#define OSC_CAPABILITIES_MASKED                         0x10
 +
 +#define PCI_ROOT_BUS_OSC_METHOD_CAPABILITY_REVISION     0x01
 +
 +typedef struct _PCI_ROOT_BUS_OSC_SUPPORT_FIELD {
 +  union {
 +    _ANONYMOUS_STRUCT struct {
 +      ULONG ExtendedConfigOpRegions:1;
 +      ULONG ActiveStatePowerManagement:1;
 +      ULONG ClockPowerManagement:1;
 +      ULONG SegmentGroups:1;
 +      ULONG MessageSignaledInterrupts:1;
 +      ULONG WindowsHardwareErrorArchitecture:1;
 +      ULONG Reserved:26;
 +    } DUMMYSTRUCTNAME;
 +    ULONG AsULONG;
 +  } u;
 +} PCI_ROOT_BUS_OSC_SUPPORT_FIELD, *PPCI_ROOT_BUS_OSC_SUPPORT_FIELD;
 +
 +typedef struct _PCI_ROOT_BUS_OSC_CONTROL_FIELD {
 +  union {
 +    _ANONYMOUS_STRUCT struct {
 +      ULONG ExpressNativeHotPlug:1;
 +      ULONG ShpcNativeHotPlug:1;
 +      ULONG ExpressNativePME:1;
 +      ULONG ExpressAdvancedErrorReporting:1;
 +      ULONG ExpressCapabilityStructure:1;
 +      ULONG Reserved:27;
 +    } DUMMYSTRUCTNAME;
 +  ULONG AsULONG;
 +  } u;
 +} PCI_ROOT_BUS_OSC_CONTROL_FIELD, *PPCI_ROOT_BUS_OSC_CONTROL_FIELD;
 +
 +typedef enum _PCI_HARDWARE_INTERFACE {
 +  PciConventional,
 +  PciXMode1,
 +  PciXMode2,
 +  PciExpress
 +} PCI_HARDWARE_INTERFACE, *PPCI_HARDWARE_INTERFACE;
 +
 +typedef enum {
 +  BusWidth32Bits,
 +  BusWidth64Bits
 +} PCI_BUS_WIDTH;
 +
 +typedef struct _PCI_ROOT_BUS_HARDWARE_CAPABILITY {
 +  PCI_HARDWARE_INTERFACE SecondaryInterface;
 +  _ANONYMOUS_STRUCT struct {
 +    BOOLEAN BusCapabilitiesFound;
 +    ULONG CurrentSpeedAndMode;
 +    ULONG SupportedSpeedsAndModes;
 +    BOOLEAN DeviceIDMessagingCapable;
 +    PCI_BUS_WIDTH SecondaryBusWidth;
 +  } DUMMYSTRUCTNAME;
 +  PCI_ROOT_BUS_OSC_SUPPORT_FIELD OscFeatureSupport;
 +  PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlRequest;
 +  PCI_ROOT_BUS_OSC_CONTROL_FIELD OscControlGranted;
 +} PCI_ROOT_BUS_HARDWARE_CAPABILITY, *PPCI_ROOT_BUS_HARDWARE_CAPABILITY;
 +
 +typedef union _PCI_EXPRESS_CAPABILITIES_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT CapabilityVersion:4;
 +    USHORT DeviceType:4;
 +    USHORT SlotImplemented:1;
 +    USHORT InterruptMessageNumber:5;
 +    USHORT Rsvd:2;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_CAPABILITIES_REGISTER, *PPCI_EXPRESS_CAPABILITIES_REGISTER;
 +
 +typedef union _PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    ULONG MaxPayloadSizeSupported:3;
 +    ULONG PhantomFunctionsSupported:2;
 +    ULONG ExtendedTagSupported:1;
 +    ULONG L0sAcceptableLatency:3;
 +    ULONG L1AcceptableLatency:3;
 +    ULONG Undefined:3;
 +    ULONG RoleBasedErrorReporting:1;
 +    ULONG Rsvd1:2;
 +    ULONG CapturedSlotPowerLimit:8;
 +    ULONG CapturedSlotPowerLimitScale:2;
 +    ULONG Rsvd2:4;
 +  } DUMMYSTRUCTNAME;
 +  ULONG AsULONG;
 +} PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER, *PPCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER;
 +
 +#define PCI_EXPRESS_AER_DEVICE_CONTROL_MASK 0x07;
 +
 +typedef union _PCI_EXPRESS_DEVICE_CONTROL_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT CorrectableErrorEnable:1;
 +    USHORT NonFatalErrorEnable:1;
 +    USHORT FatalErrorEnable:1;
 +    USHORT UnsupportedRequestErrorEnable:1;
 +    USHORT EnableRelaxedOrder:1;
 +    USHORT MaxPayloadSize:3;
 +    USHORT ExtendedTagEnable:1;
 +    USHORT PhantomFunctionsEnable:1;
 +    USHORT AuxPowerEnable:1;
 +    USHORT NoSnoopEnable:1;
 +    USHORT MaxReadRequestSize:3;
 +    USHORT BridgeConfigRetryEnable:1;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_DEVICE_CONTROL_REGISTER, *PPCI_EXPRESS_DEVICE_CONTROL_REGISTER;
 +
 +#define PCI_EXPRESS_AER_DEVICE_STATUS_MASK 0x0F;
 +
 +typedef union _PCI_EXPRESS_DEVICE_STATUS_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT CorrectableErrorDetected:1;
 +    USHORT NonFatalErrorDetected:1;
 +    USHORT FatalErrorDetected:1;
 +    USHORT UnsupportedRequestDetected:1;
 +    USHORT AuxPowerDetected:1;
 +    USHORT TransactionsPending:1;
 +    USHORT Rsvd:10;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_DEVICE_STATUS_REGISTER, *PPCI_EXPRESS_DEVICE_STATUS_REGISTER;
 +
 +typedef union _PCI_EXPRESS_LINK_CAPABILITIES_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    ULONG MaximumLinkSpeed:4;
 +    ULONG MaximumLinkWidth:6;
 +    ULONG ActiveStatePMSupport:2;
 +    ULONG L0sExitLatency:3;
 +    ULONG L1ExitLatency:3;
 +    ULONG ClockPowerManagement:1;
 +    ULONG SurpriseDownErrorReportingCapable:1;
 +    ULONG DataLinkLayerActiveReportingCapable:1;
 +    ULONG Rsvd:3;
 +    ULONG PortNumber:8;
 +  } DUMMYSTRUCTNAME;
 +  ULONG AsULONG;
 +} PCI_EXPRESS_LINK_CAPABILITIES_REGISTER, *PPCI_EXPRESS_LINK_CAPABILITIES_REGISTER;
 +
 +typedef union _PCI_EXPRESS_LINK_CONTROL_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT ActiveStatePMControl:2;
 +    USHORT Rsvd1:1;
 +    USHORT ReadCompletionBoundary:1;
 +    USHORT LinkDisable:1;
 +    USHORT RetrainLink:1;
 +    USHORT CommonClockConfig:1;
 +    USHORT ExtendedSynch:1;
 +    USHORT EnableClockPowerManagement:1;
 +    USHORT Rsvd2:7;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_LINK_CONTROL_REGISTER, *PPCI_EXPRESS_LINK_CONTROL_REGISTER;
 +
 +typedef union _PCI_EXPRESS_LINK_STATUS_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT LinkSpeed:4;
 +    USHORT LinkWidth:6;
 +    USHORT Undefined:1;
 +    USHORT LinkTraining:1;
 +    USHORT SlotClockConfig:1;
 +    USHORT DataLinkLayerActive:1;
 +    USHORT Rsvd:2;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_LINK_STATUS_REGISTER, *PPCI_EXPRESS_LINK_STATUS_REGISTER;
 +
 +typedef union _PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    ULONG AttentionButtonPresent:1;
 +    ULONG PowerControllerPresent:1;
 +    ULONG MRLSensorPresent:1;
 +    ULONG AttentionIndicatorPresent:1;
 +    ULONG PowerIndicatorPresent:1;
 +    ULONG HotPlugSurprise:1;
 +    ULONG HotPlugCapable:1;
 +    ULONG SlotPowerLimit:8;
 +    ULONG SlotPowerLimitScale:2;
 +    ULONG ElectromechanicalLockPresent:1;
 +    ULONG NoCommandCompletedSupport:1;
 +    ULONG PhysicalSlotNumber:13;
 +  } DUMMYSTRUCTNAME;
 +  ULONG AsULONG;
 +} PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_SLOT_CAPABILITIES_REGISTER;
 +
 +typedef union _PCI_EXPRESS_SLOT_CONTROL_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT AttentionButtonEnable:1;
 +    USHORT PowerFaultDetectEnable:1;
 +    USHORT MRLSensorEnable:1;
 +    USHORT PresenceDetectEnable:1;
 +    USHORT CommandCompletedEnable:1;
 +    USHORT HotPlugInterruptEnable:1;
 +    USHORT AttentionIndicatorControl:2;
 +    USHORT PowerIndicatorControl:2;
 +    USHORT PowerControllerControl:1;
 +    USHORT ElectromechanicalLockControl:1;
 +    USHORT DataLinkStateChangeEnable:1;
 +    USHORT Rsvd:3;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_SLOT_CONTROL_REGISTER, *PPCI_EXPRESS_SLOT_CONTROL_REGISTER;
 +
 +typedef union _PCI_EXPRESS_SLOT_STATUS_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT AttentionButtonPressed:1;
 +    USHORT PowerFaultDetected:1;
 +    USHORT MRLSensorChanged:1;
 +    USHORT PresenceDetectChanged:1;
 +    USHORT CommandCompleted:1;
 +    USHORT MRLSensorState:1;
 +    USHORT PresenceDetectState:1;
 +    USHORT ElectromechanicalLockEngaged:1;
 +    USHORT DataLinkStateChanged:1;
 +    USHORT Rsvd:7;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_SLOT_STATUS_REGISTER, *PPCI_EXPRESS_SLOT_STATUS_REGISTER;
 +
 +typedef union _PCI_EXPRESS_ROOT_CONTROL_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT CorrectableSerrEnable:1;
 +    USHORT NonFatalSerrEnable:1;
 +    USHORT FatalSerrEnable:1;
 +    USHORT PMEInterruptEnable:1;
 +    USHORT CRSSoftwareVisibilityEnable:1;
 +    USHORT Rsvd:11;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_ROOT_CONTROL_REGISTER, *PPCI_EXPRESS_ROOT_CONTROL_REGISTER;
 +
 +typedef union _PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT CRSSoftwareVisibility:1;
 +    USHORT Rsvd:15;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER, *PPCI_EXPRESS_ROOT_CAPABILITIES_REGISTER;
 +
 +typedef union _PCI_EXPRESS_ROOT_STATUS_REGISTER {
 +  _ANONYMOUS_STRUCT struct {
 +    ULONG PMERequestorId:16;
 +    ULONG PMEStatus:1;
 +    ULONG PMEPending:1;
 +    ULONG Rsvd:14;
 +  } DUMMYSTRUCTNAME;
 +  ULONG AsULONG;
 +} PCI_EXPRESS_ROOT_STATUS_REGISTER, *PPCI_EXPRESS_ROOT_STATUS_REGISTER;
 +
 +typedef struct _PCI_EXPRESS_CAPABILITY {
 +  PCI_CAPABILITIES_HEADER Header;
 +  PCI_EXPRESS_CAPABILITIES_REGISTER ExpressCapabilities;
 +  PCI_EXPRESS_DEVICE_CAPABILITIES_REGISTER DeviceCapabilities;
 +  PCI_EXPRESS_DEVICE_CONTROL_REGISTER DeviceControl;
 +  PCI_EXPRESS_DEVICE_STATUS_REGISTER DeviceStatus;
 +  PCI_EXPRESS_LINK_CAPABILITIES_REGISTER LinkCapabilities;
 +  PCI_EXPRESS_LINK_CONTROL_REGISTER LinkControl;
 +  PCI_EXPRESS_LINK_STATUS_REGISTER LinkStatus;
 +  PCI_EXPRESS_SLOT_CAPABILITIES_REGISTER SlotCapabilities;
 +  PCI_EXPRESS_SLOT_CONTROL_REGISTER SlotControl;
 +  PCI_EXPRESS_SLOT_STATUS_REGISTER SlotStatus;
 +  PCI_EXPRESS_ROOT_CONTROL_REGISTER RootControl;
 +  PCI_EXPRESS_ROOT_CAPABILITIES_REGISTER RootCapabilities;
 +  PCI_EXPRESS_ROOT_STATUS_REGISTER RootStatus;
 +} PCI_EXPRESS_CAPABILITY, *PPCI_EXPRESS_CAPABILITY;
 +
 +typedef enum {
 +  MRLClosed = 0,
 +  MRLOpen
 +} PCI_EXPRESS_MRL_STATE;
 +
 +typedef enum {
 +  SlotEmpty = 0,
 +  CardPresent
 +} PCI_EXPRESS_CARD_PRESENCE;
 +
 +typedef enum {
 +  IndicatorOn = 1,
 +  IndicatorBlink,
 +  IndicatorOff
 +} PCI_EXPRESS_INDICATOR_STATE;
 +
 +typedef enum {
 +  PowerOn = 0,
 +  PowerOff
 +} PCI_EXPRESS_POWER_STATE;
 +
 +typedef enum {
 +  L0sEntrySupport = 1,
 +  L0sAndL1EntrySupport = 3
 +} PCI_EXPRESS_ASPM_SUPPORT;
 +
 +typedef enum {
 +  L0sAndL1EntryDisabled,
 +  L0sEntryEnabled,
 +  L1EntryEnabled,
 +  L0sAndL1EntryEnabled
 +} PCI_EXPRESS_ASPM_CONTROL;
 +
 +typedef enum {
 +  L0s_Below64ns = 0,
 +  L0s_64ns_128ns,
 +  L0s_128ns_256ns,
 +  L0s_256ns_512ns,
 +  L0s_512ns_1us,
 +  L0s_1us_2us,
 +  L0s_2us_4us,
 +  L0s_Above4us
 +} PCI_EXPRESS_L0s_EXIT_LATENCY;
 +
 +typedef enum {
 +  L1_Below1us = 0,
 +  L1_1us_2us,
 +  L1_2us_4us,
 +  L1_4us_8us,
 +  L1_8us_16us,
 +  L1_16us_32us,
 +  L1_32us_64us,
 +  L1_Above64us
 +} PCI_EXPRESS_L1_EXIT_LATENCY;
 +
 +typedef enum {
 +  PciExpressEndpoint = 0,
 +  PciExpressLegacyEndpoint,
 +  PciExpressRootPort = 4,
 +  PciExpressUpstreamSwitchPort,
 +  PciExpressDownstreamSwitchPort,
 +  PciExpressToPciXBridge,
 +  PciXToExpressBridge,
 +  PciExpressRootComplexIntegratedEndpoint,
 +  PciExpressRootComplexEventCollector
 +} PCI_EXPRESS_DEVICE_TYPE;
 +
 +typedef enum {
 +  MaxPayload128Bytes = 0,
 +  MaxPayload256Bytes,
 +  MaxPayload512Bytes,
 +  MaxPayload1024Bytes,
 +  MaxPayload2048Bytes,
 +  MaxPayload4096Bytes
 +} PCI_EXPRESS_MAX_PAYLOAD_SIZE;
 +
 +typedef union _PCI_EXPRESS_PME_REQUESTOR_ID {
 +  _ANONYMOUS_STRUCT struct {
 +    USHORT FunctionNumber:3;
 +    USHORT DeviceNumber:5;
 +    USHORT BusNumber:8;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID;
 +
 +typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE {
 +  ResourceTypeSingle = 0,
 +  ResourceTypeRange,
 +  ResourceTypeExtendedCounterConfiguration,
 +  ResourceTypeOverflow,
 +  ResourceTypeMax
 +} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE;
 +
 +typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR {
 +  PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type;
 +  ULONG Flags;
 +  union {
 +    ULONG CounterIndex;
 +    ULONG ExtendedRegisterAddress;
 +    struct {
 +      ULONG Begin;
 +      ULONG End;
 +    } Range;
 +  } u;
 +} PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR;
 +
 +typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST {
 +  ULONG Count;
 +  PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors[ANYSIZE_ARRAY];
 +} PHYSICAL_COUNTER_RESOURCE_LIST, *PPHYSICAL_COUNTER_RESOURCE_LIST;
 +
 +typedef VOID
 +(NTAPI *PciPin2Line)(
 +  IN struct _BUS_HANDLER *BusHandler,
 +  IN struct _BUS_HANDLER *RootHandler,
 +  IN PCI_SLOT_NUMBER SlotNumber,
 +  IN PPCI_COMMON_CONFIG PciData);
 +
 +typedef VOID
 +(NTAPI *PciLine2Pin)(
 +  IN struct _BUS_HANDLER *BusHandler,
 +  IN struct _BUS_HANDLER *RootHandler,
 +  IN PCI_SLOT_NUMBER SlotNumber,
 +  IN PPCI_COMMON_CONFIG PciNewData,
 +  IN PPCI_COMMON_CONFIG PciOldData);
 +
 +typedef VOID
 +(NTAPI *PciReadWriteConfig)(
 +  IN struct _BUS_HANDLER *BusHandler,
 +  IN PCI_SLOT_NUMBER Slot,
 +  IN PVOID Buffer,
 +  IN ULONG Offset,
 +  IN ULONG Length);
 +
 +#define PCI_DATA_TAG ' ICP'
 +#define PCI_DATA_VERSION 1
 +
 +typedef struct _PCIBUSDATA {
 +  ULONG Tag;
 +  ULONG Version;
 +  PciReadWriteConfig ReadConfig;
 +  PciReadWriteConfig WriteConfig;
 +  PciPin2Line Pin2Line;
 +  PciLine2Pin Line2Pin;
 +  PCI_SLOT_NUMBER ParentSlot;
 +  PVOID Reserved[4];
 +} PCIBUSDATA, *PPCIBUSDATA;
 +
 +#ifndef _PCIINTRF_X_
 +#define _PCIINTRF_X_
 +
 +typedef ULONG
 +(NTAPI *PCI_READ_WRITE_CONFIG)(
 +  IN PVOID Context,
 +  IN ULONG BusOffset,
 +  IN ULONG Slot,
 +  IN PVOID Buffer,
 +  IN ULONG Offset,
 +  IN ULONG Length);
 +
 +typedef VOID
 +(NTAPI *PCI_PIN_TO_LINE)(
 +  IN PVOID Context,
 +  IN PPCI_COMMON_CONFIG PciData);
 +
 +typedef VOID
 +(NTAPI *PCI_LINE_TO_PIN)(
 +  IN PVOID Context,
 +  IN PPCI_COMMON_CONFIG PciNewData,
 +  IN PPCI_COMMON_CONFIG PciOldData);
 +
 +typedef VOID
 +(NTAPI *PCI_ROOT_BUS_CAPABILITY)(
 +  IN PVOID Context,
 +  OUT PPCI_ROOT_BUS_HARDWARE_CAPABILITY HardwareCapability);
 +
 +typedef VOID
 +(NTAPI *PCI_EXPRESS_WAKE_CONTROL)(
 +  IN PVOID Context,
 +  IN BOOLEAN EnableWake);
 +
 +typedef struct _PCI_BUS_INTERFACE_STANDARD {
 +  USHORT Size;
 +  USHORT Version;
 +  PVOID Context;
 +  PINTERFACE_REFERENCE InterfaceReference;
 +  PINTERFACE_DEREFERENCE InterfaceDereference;
 +  PCI_READ_WRITE_CONFIG ReadConfig;
 +  PCI_READ_WRITE_CONFIG WriteConfig;
 +  PCI_PIN_TO_LINE PinToLine;
 +  PCI_LINE_TO_PIN LineToPin;
 +  PCI_ROOT_BUS_CAPABILITY RootBusCapability;
 +  PCI_EXPRESS_WAKE_CONTROL ExpressWakeControl;
 +} PCI_BUS_INTERFACE_STANDARD, *PPCI_BUS_INTERFACE_STANDARD;
 +
 +#define PCI_BUS_INTERFACE_STANDARD_VERSION 1
 +
 +#endif /* _PCIINTRF_X_ */
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +
 +#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX     0x00004000
 +#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX    0x00008000
 +#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
 +  (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
 +   FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
 +
 +#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
 +#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
 +#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
 +
 +#else
 +
 +#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL     0x00000200
 +#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL    0x00000300
 +#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK        0x00000300
 +
 +#define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
 +#define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
 +#define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 +
 +#define FILE_CHARACTERISTICS_PROPAGATED (FILE_REMOVABLE_MEDIA  | \
 +                                         FILE_READ_ONLY_DEVICE | \
 +                                         FILE_FLOPPY_DISKETTE  | \
 +                                         FILE_WRITE_ONCE_MEDIA | \
 +                                         FILE_DEVICE_SECURE_OPEN)
 +
 +typedef struct _FILE_ALIGNMENT_INFORMATION {
 +  ULONG AlignmentRequirement;
 +} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
 +
 +typedef struct _FILE_NAME_INFORMATION {
 +  ULONG FileNameLength;
 +  WCHAR FileName[1];
 +} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
 +
 +
 +typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
 +  ULONG FileAttributes;
 +  ULONG ReparseTag;
 +} FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
 +
 +typedef struct _FILE_DISPOSITION_INFORMATION {
 +  BOOLEAN DeleteFile;
 +} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
 +
 +typedef struct _FILE_END_OF_FILE_INFORMATION {
 +  LARGE_INTEGER EndOfFile;
 +} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
 +
 +typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
 +  LARGE_INTEGER ValidDataLength;
 +} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
 +
 +typedef struct _FILE_FS_LABEL_INFORMATION {
 +  ULONG VolumeLabelLength;
 +  WCHAR VolumeLabel[1];
 +} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
 +
 +typedef struct _FILE_FS_VOLUME_INFORMATION {
 +  LARGE_INTEGER VolumeCreationTime;
 +  ULONG VolumeSerialNumber;
 +  ULONG VolumeLabelLength;
 +  BOOLEAN SupportsObjects;
 +  WCHAR VolumeLabel[1];
 +} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
 +
 +typedef struct _FILE_FS_SIZE_INFORMATION {
 +  LARGE_INTEGER TotalAllocationUnits;
 +  LARGE_INTEGER AvailableAllocationUnits;
 +  ULONG SectorsPerAllocationUnit;
 +  ULONG BytesPerSector;
 +} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
 +
 +typedef struct _FILE_FS_FULL_SIZE_INFORMATION {
 +  LARGE_INTEGER TotalAllocationUnits;
 +  LARGE_INTEGER CallerAvailableAllocationUnits;
 +  LARGE_INTEGER ActualAvailableAllocationUnits;
 +  ULONG SectorsPerAllocationUnit;
 +  ULONG BytesPerSector;
 +} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
 +
 +typedef struct _FILE_FS_OBJECTID_INFORMATION {
 +  UCHAR ObjectId[16];
 +  UCHAR ExtendedInfo[48];
 +} FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION;
 +
 +typedef union _FILE_SEGMENT_ELEMENT {
 +  PVOID64 Buffer;
 +  ULONGLONG Alignment;
 +}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
 +
 +#define IOCTL_AVIO_ALLOCATE_STREAM      CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
 +#define IOCTL_AVIO_FREE_STREAM          CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
 +#define IOCTL_AVIO_MODIFY_STREAM        CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
 +
 +typedef enum _BUS_DATA_TYPE {
 +  ConfigurationSpaceUndefined = -1,
 +  Cmos,
 +  EisaConfiguration,
 +  Pos,
 +  CbusConfiguration,
 +  PCIConfiguration,
 +  VMEConfiguration,
 +  NuBusConfiguration,
 +  PCMCIAConfiguration,
 +  MPIConfiguration,
 +  MPSAConfiguration,
 +  PNPISAConfiguration,
 +  SgiInternalConfiguration,
 +  MaximumBusDataType
 +} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
 +
 +/* Hardware Abstraction Layer Types */
 +
 +typedef BOOLEAN
 +(NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
 +  IN ULONG Columns,
 +  IN ULONG Rows);
 +
 +typedef PBUS_HANDLER
 +(FASTCALL *pHalHandlerForBus)(
 +  IN INTERFACE_TYPE InterfaceType,
 +  IN ULONG BusNumber);
 +
 +typedef VOID
 +(FASTCALL *pHalReferenceBusHandler)(
 +  IN PBUS_HANDLER BusHandler);
 +
 +typedef enum _HAL_QUERY_INFORMATION_CLASS {
 +  HalInstalledBusInformation,
 +  HalProfileSourceInformation,
 +  HalInformationClassUnused1,
 +  HalPowerInformation,
 +  HalProcessorSpeedInformation,
 +  HalCallbackInformation,
 +  HalMapRegisterInformation,
 +  HalMcaLogInformation,
 +  HalFrameBufferCachingInformation,
 +  HalDisplayBiosInformation,
 +  HalProcessorFeatureInformation,
 +  HalNumaTopologyInterface,
 +  HalErrorInformation,
 +  HalCmcLogInformation,
 +  HalCpeLogInformation,
 +  HalQueryMcaInterface,
 +  HalQueryAMLIIllegalIOPortAddresses,
 +  HalQueryMaxHotPlugMemoryAddress,
 +  HalPartitionIpiInterface,
 +  HalPlatformInformation,
 +  HalQueryProfileSourceList,
 +  HalInitLogInformation,
 +  HalFrequencyInformation,
 +  HalProcessorBrandString,
 +  HalHypervisorInformation,
 +  HalPlatformTimerInformation,
 +  HalAcpiAuditInformation
 +} HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
 +
 +typedef enum _HAL_SET_INFORMATION_CLASS {
 +  HalProfileSourceInterval,
 +  HalProfileSourceInterruptHandler,
 +  HalMcaRegisterDriver,
 +  HalKernelErrorHandler,
 +  HalCmcRegisterDriver,
 +  HalCpeRegisterDriver,
 +  HalMcaLog,
 +  HalCmcLog,
 +  HalCpeLog,
 +  HalGenerateCmcInterrupt,
 +  HalProfileSourceTimerHandler,
 +  HalEnlightenment,
 +  HalProfileDpgoSourceInterruptHandler
 +} HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
 +
 +typedef NTSTATUS
 +(NTAPI *pHalQuerySystemInformation)(
 +  IN HAL_QUERY_INFORMATION_CLASS InformationClass,
 +  IN ULONG BufferSize,
 +  IN OUT PVOID Buffer,
 +  OUT PULONG ReturnedLength);
 +
 +typedef NTSTATUS
 +(NTAPI *pHalSetSystemInformation)(
 +  IN HAL_SET_INFORMATION_CLASS InformationClass,
 +  IN ULONG BufferSize,
 +  IN PVOID Buffer);
 +
 +typedef VOID
 +(FASTCALL *pHalExamineMBR)(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG SectorSize,
 +  IN ULONG MBRTypeIdentifier,
 +  OUT PVOID *Buffer);
 +
 +typedef NTSTATUS
 +(FASTCALL *pHalIoReadPartitionTable)(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG SectorSize,
 +  IN BOOLEAN ReturnRecognizedPartitions,
 +  OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
 +
 +typedef NTSTATUS
 +(FASTCALL *pHalIoSetPartitionInformation)(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG SectorSize,
 +  IN ULONG PartitionNumber,
 +  IN ULONG PartitionType);
 +
 +typedef NTSTATUS
 +(FASTCALL *pHalIoWritePartitionTable)(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG SectorSize,
 +  IN ULONG SectorsPerTrack,
 +  IN ULONG NumberOfHeads,
 +  IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
 +
 +typedef NTSTATUS
 +(NTAPI *pHalQueryBusSlots)(
 +  IN PBUS_HANDLER BusHandler,
 +  IN ULONG BufferSize,
 +  OUT PULONG SlotNumbers,
 +  OUT PULONG ReturnedLength);
 +
 +typedef NTSTATUS
 +(NTAPI *pHalInitPnpDriver)(
 +  VOID);
 +
 +typedef struct _PM_DISPATCH_TABLE {
 +  ULONG Signature;
 +  ULONG Version;
 +  PVOID Function[1];
 +} PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
 +
 +typedef NTSTATUS
 +(NTAPI *pHalInitPowerManagement)(
 +  IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
 +  OUT PPM_DISPATCH_TABLE *PmHalDispatchTable);
 +
 +typedef struct _DMA_ADAPTER*
 +(NTAPI *pHalGetDmaAdapter)(
 +  IN PVOID Context,
 +  IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
 +  OUT PULONG NumberOfMapRegisters);
 +
 +typedef NTSTATUS
 +(NTAPI *pHalGetInterruptTranslator)(
 +  IN INTERFACE_TYPE ParentInterfaceType,
 +  IN ULONG ParentBusNumber,
 +  IN INTERFACE_TYPE BridgeInterfaceType,
 +  IN USHORT Size,
 +  IN USHORT Version,
 +  OUT PTRANSLATOR_INTERFACE Translator,
 +  OUT PULONG BridgeBusNumber);
 +
 +typedef NTSTATUS
 +(NTAPI *pHalStartMirroring)(
 +  VOID);
 +
 +typedef NTSTATUS
 +(NTAPI *pHalEndMirroring)(
 +  IN ULONG PassNumber);
 +
 +typedef NTSTATUS
 +(NTAPI *pHalMirrorPhysicalMemory)(
 +  IN PHYSICAL_ADDRESS PhysicalAddress,
 +  IN LARGE_INTEGER NumberOfBytes);
 +
 +typedef NTSTATUS
 +(NTAPI *pHalMirrorVerify)(
 +  IN PHYSICAL_ADDRESS PhysicalAddress,
 +  IN LARGE_INTEGER NumberOfBytes);
 +
 +typedef BOOLEAN
 +(NTAPI *pHalTranslateBusAddress)(
 +  IN INTERFACE_TYPE InterfaceType,
 +  IN ULONG BusNumber,
 +  IN PHYSICAL_ADDRESS BusAddress,
 +  IN OUT PULONG AddressSpace,
 +  OUT PPHYSICAL_ADDRESS TranslatedAddress);
 +
 +typedef NTSTATUS
 +(NTAPI *pHalAssignSlotResources)(
 +  IN PUNICODE_STRING RegistryPath,
 +  IN PUNICODE_STRING DriverClassName OPTIONAL,
 +  IN PDRIVER_OBJECT DriverObject,
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN INTERFACE_TYPE BusType,
 +  IN ULONG BusNumber,
 +  IN ULONG SlotNumber,
 +  IN OUT PCM_RESOURCE_LIST *AllocatedResources);
 +
 +typedef VOID
 +(NTAPI *pHalHaltSystem)(
 +  VOID);
 +
 +typedef BOOLEAN
 +(NTAPI *pHalResetDisplay)(
 +  VOID);
 +
 +typedef struct _MAP_REGISTER_ENTRY {
 +  PVOID MapRegister;
 +  BOOLEAN WriteToDevice;
 +} MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
 +
 +typedef UCHAR
 +(NTAPI *pHalVectorToIDTEntry)(
 +  ULONG Vector);
 +
 +typedef BOOLEAN
 +(NTAPI *pHalFindBusAddressTranslation)(
 +  IN PHYSICAL_ADDRESS BusAddress,
 +  IN OUT PULONG AddressSpace,
 +  OUT PPHYSICAL_ADDRESS TranslatedAddress,
 +  IN OUT PULONG_PTR Context,
 +  IN BOOLEAN NextBus);
 +
 +typedef VOID
 +(NTAPI *pHalEndOfBoot)(
 +  VOID);
 +
 +typedef PVOID
 +(NTAPI *pHalGetAcpiTable)(
 +  IN ULONG Signature,
 +  IN PCSTR OemId OPTIONAL,
 +  IN PCSTR OemTableId OPTIONAL);
 +
 +#if defined(_IA64_)
 +typedef NTSTATUS
 +(*pHalGetErrorCapList)(
 +  IN OUT PULONG CapsListLength,
 +  IN OUT PUCHAR ErrorCapList);
 +
 +typedef NTSTATUS
 +(*pHalInjectError)(
 +  IN ULONG BufferLength,
 +  IN PUCHAR Buffer);
 +#endif
 +
 +typedef VOID
 +(NTAPI *PCI_ERROR_HANDLER_CALLBACK)(
 +  VOID);
 +
 +typedef VOID
 +(NTAPI *pHalSetPciErrorHandlerCallback)(
 +  IN PCI_ERROR_HANDLER_CALLBACK Callback);
 +
 +#if 1 /* Not present in WDK 7600 */
 +typedef VOID
 +(FASTCALL *pHalIoAssignDriveLetters)(
 +  IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
 +  IN PSTRING NtDeviceName,
 +  OUT PUCHAR NtSystemPath,
 +  OUT PSTRING NtSystemPathString);
 +#endif
 +
 +typedef struct {
 +  ULONG Version;
 +  pHalQuerySystemInformation HalQuerySystemInformation;
 +  pHalSetSystemInformation HalSetSystemInformation;
 +  pHalQueryBusSlots HalQueryBusSlots;
 +  ULONG Spare1;
 +  pHalExamineMBR HalExamineMBR;
 +#if 1 /* Not present in WDK 7600 */
 +  pHalIoAssignDriveLetters HalIoAssignDriveLetters;
 +#endif
 +  pHalIoReadPartitionTable HalIoReadPartitionTable;
 +  pHalIoSetPartitionInformation HalIoSetPartitionInformation;
 +  pHalIoWritePartitionTable HalIoWritePartitionTable;
 +  pHalHandlerForBus HalReferenceHandlerForBus;
 +  pHalReferenceBusHandler HalReferenceBusHandler;
 +  pHalReferenceBusHandler HalDereferenceBusHandler;
 +  pHalInitPnpDriver HalInitPnpDriver;
 +  pHalInitPowerManagement HalInitPowerManagement;
 +  pHalGetDmaAdapter HalGetDmaAdapter;
 +  pHalGetInterruptTranslator HalGetInterruptTranslator;
 +  pHalStartMirroring HalStartMirroring;
 +  pHalEndMirroring HalEndMirroring;
 +  pHalMirrorPhysicalMemory HalMirrorPhysicalMemory;
 +  pHalEndOfBoot HalEndOfBoot;
 +  pHalMirrorVerify HalMirrorVerify;
 +  pHalGetAcpiTable HalGetCachedAcpiTable;
 +  pHalSetPciErrorHandlerCallback  HalSetPciErrorHandlerCallback;
 +#if defined(_IA64_)
 +  pHalGetErrorCapList HalGetErrorCapList;
 +  pHalInjectError HalInjectError;
 +#endif
 +} HAL_DISPATCH, *PHAL_DISPATCH;
 +
 +/* GCC/MSVC and WDK compatible declaration */
 +extern NTKERNELAPI HAL_DISPATCH HalDispatchTable;
 +
 +#if defined(_NTOSKRNL_) || defined(_BLDR_)
 +#define HALDISPATCH (&HalDispatchTable)
 +#else
 +/* This is a WDK compatibility definition */
 +#define HalDispatchTable (&HalDispatchTable)
 +#define HALDISPATCH HalDispatchTable
 +#endif
 +
 +#define HAL_DISPATCH_VERSION            3 /* FIXME: when to use 4? */
 +#define HalDispatchTableVersion         HALDISPATCH->Version
 +#define HalQuerySystemInformation       HALDISPATCH->HalQuerySystemInformation
 +#define HalSetSystemInformation         HALDISPATCH->HalSetSystemInformation
 +#define HalQueryBusSlots                HALDISPATCH->HalQueryBusSlots
 +#define HalReferenceHandlerForBus       HALDISPATCH->HalReferenceHandlerForBus
 +#define HalReferenceBusHandler          HALDISPATCH->HalReferenceBusHandler
 +#define HalDereferenceBusHandler        HALDISPATCH->HalDereferenceBusHandler
 +#define HalInitPnpDriver                HALDISPATCH->HalInitPnpDriver
 +#define HalInitPowerManagement          HALDISPATCH->HalInitPowerManagement
 +#define HalGetDmaAdapter                HALDISPATCH->HalGetDmaAdapter
 +#define HalGetInterruptTranslator       HALDISPATCH->HalGetInterruptTranslator
 +#define HalStartMirroring               HALDISPATCH->HalStartMirroring
 +#define HalEndMirroring                 HALDISPATCH->HalEndMirroring
 +#define HalMirrorPhysicalMemory         HALDISPATCH->HalMirrorPhysicalMemory
 +#define HalEndOfBoot                    HALDISPATCH->HalEndOfBoot
 +#define HalMirrorVerify                 HALDISPATCH->HalMirrorVerify
 +#define HalGetCachedAcpiTable           HALDISPATCH->HalGetCachedAcpiTable
 +#define HalSetPciErrorHandlerCallback   HALDISPATCH->HalSetPciErrorHandlerCallback
 +#if defined(_IA64_)
 +#define HalGetErrorCapList              HALDISPATCH->HalGetErrorCapList
 +#define HalInjectError                  HALDISPATCH->HalInjectError
 +#endif
 +
 +typedef struct _HAL_BUS_INFORMATION {
 +  INTERFACE_TYPE BusType;
 +  BUS_DATA_TYPE ConfigurationType;
 +  ULONG BusNumber;
 +  ULONG Reserved;
 +} HAL_BUS_INFORMATION, *PHAL_BUS_INFORMATION;
 +
 +typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
 +  KPROFILE_SOURCE Source;
 +  BOOLEAN Supported;
 +  ULONG Interval;
 +} HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
 +
 +typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX {
 +  KPROFILE_SOURCE Source;
 +  BOOLEAN Supported;
 +  ULONG_PTR Interval;
 +  ULONG_PTR DefInterval;
 +  ULONG_PTR MaxInterval;
 +  ULONG_PTR MinInterval;
 +} HAL_PROFILE_SOURCE_INFORMATION_EX, *PHAL_PROFILE_SOURCE_INFORMATION_EX;
 +
 +typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
 +  KPROFILE_SOURCE Source;
 +  ULONG_PTR Interval;
 +} HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
 +
 +typedef struct _HAL_PROFILE_SOURCE_LIST {
 +  KPROFILE_SOURCE Source;
 +  PWSTR Description;
 +} HAL_PROFILE_SOURCE_LIST, *PHAL_PROFILE_SOURCE_LIST;
 +
 +typedef enum _HAL_DISPLAY_BIOS_INFORMATION {
 +  HalDisplayInt10Bios,
 +  HalDisplayEmulatedBios,
 +  HalDisplayNoBios
 +} HAL_DISPLAY_BIOS_INFORMATION, *PHAL_DISPLAY_BIOS_INFORMATION;
 +
 +typedef struct _HAL_POWER_INFORMATION {
 +  ULONG TBD;
 +} HAL_POWER_INFORMATION, *PHAL_POWER_INFORMATION;
 +
 +typedef struct _HAL_PROCESSOR_SPEED_INFO {
 +  ULONG ProcessorSpeed;
 +} HAL_PROCESSOR_SPEED_INFORMATION, *PHAL_PROCESSOR_SPEED_INFORMATION;
 +
 +typedef struct _HAL_CALLBACKS {
 +  PCALLBACK_OBJECT SetSystemInformation;
 +  PCALLBACK_OBJECT BusCheck;
 +} HAL_CALLBACKS, *PHAL_CALLBACKS;
 +
 +typedef struct _HAL_PROCESSOR_FEATURE {
 +  ULONG UsableFeatureBits;
 +} HAL_PROCESSOR_FEATURE;
 +
 +typedef NTSTATUS
 +(NTAPI *PHALIOREADWRITEHANDLER)(
 +  IN BOOLEAN fRead,
 +  IN ULONG dwAddr,
 +  IN ULONG dwSize,
 +  IN OUT PULONG pdwData);
 +
 +typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST {
 +  ULONG BadAddrBegin;
 +  ULONG BadAddrSize;
 +  ULONG OSVersionTrigger;
 +  PHALIOREADWRITEHANDLER IOHandler;
 +} HAL_AMLI_BAD_IO_ADDRESS_LIST, *PHAL_AMLI_BAD_IO_ADDRESS_LIST;
 +
 +#if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
 +
 +typedef VOID
 +(NTAPI *PHALMCAINTERFACELOCK)(
 +  VOID);
 +
 +typedef VOID
 +(NTAPI *PHALMCAINTERFACEUNLOCK)(
 +  VOID);
 +
 +typedef NTSTATUS
 +(NTAPI *PHALMCAINTERFACEREADREGISTER)(
 +  IN UCHAR BankNumber,
 +  IN OUT PVOID Exception);
 +
 +typedef struct _HAL_MCA_INTERFACE {
 +  PHALMCAINTERFACELOCK Lock;
 +  PHALMCAINTERFACEUNLOCK Unlock;
 +  PHALMCAINTERFACEREADREGISTER ReadRegister;
 +} HAL_MCA_INTERFACE;
 +
 +typedef enum {
 +  ApicDestinationModePhysical = 1,
 +  ApicDestinationModeLogicalFlat,
 +  ApicDestinationModeLogicalClustered,
 +  ApicDestinationModeUnknown
 +} HAL_APIC_DESTINATION_MODE, *PHAL_APIC_DESTINATION_MODE;
 +
 +#if defined(_AMD64_)
 +
 +struct _KTRAP_FRAME;
 +struct _KEXCEPTION_FRAME;
 +
 +typedef ERROR_SEVERITY
 +(NTAPI *PDRIVER_EXCPTN_CALLBACK)(
 +  IN PVOID Context,
 +  IN struct _KTRAP_FRAME *TrapFrame,
 +  IN struct _KEXCEPTION_FRAME *ExceptionFrame,
 +  IN PMCA_EXCEPTION Exception);
 +
 +#endif
 +
 +#if defined(_X86_) || defined(_IA64_)
 +typedef
 +#if defined(_IA64_)
 +ERROR_SEVERITY
 +#else
 +VOID
 +#endif
 +(NTAPI *PDRIVER_EXCPTN_CALLBACK)(
 +  IN PVOID Context,
 +  IN PMCA_EXCEPTION BankLog);
 +#endif
 +
 +typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK;
 +
 +typedef struct _MCA_DRIVER_INFO {
 +  PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback;
 +  PKDEFERRED_ROUTINE DpcCallback;
 +  PVOID DeviceContext;
 +} MCA_DRIVER_INFO, *PMCA_DRIVER_INFO;
 +
 +typedef struct _HAL_ERROR_INFO {
 +  ULONG Version;
 +  ULONG InitMaxSize;
 +  ULONG McaMaxSize;
 +  ULONG McaPreviousEventsCount;
 +  ULONG McaCorrectedEventsCount;
 +  ULONG McaKernelDeliveryFails;
 +  ULONG McaDriverDpcQueueFails;
 +  ULONG McaReserved;
 +  ULONG CmcMaxSize;
 +  ULONG CmcPollingInterval;
 +  ULONG CmcInterruptsCount;
 +  ULONG CmcKernelDeliveryFails;
 +  ULONG CmcDriverDpcQueueFails;
 +  ULONG CmcGetStateFails;
 +  ULONG CmcClearStateFails;
 +  ULONG CmcReserved;
 +  ULONGLONG CmcLogId;
 +  ULONG CpeMaxSize;
 +  ULONG CpePollingInterval;
 +  ULONG CpeInterruptsCount;
 +  ULONG CpeKernelDeliveryFails;
 +  ULONG CpeDriverDpcQueueFails;
 +  ULONG CpeGetStateFails;
 +  ULONG CpeClearStateFails;
 +  ULONG CpeInterruptSources;
 +  ULONGLONG CpeLogId;
 +  ULONGLONG KernelReserved[4];
 +} HAL_ERROR_INFO, *PHAL_ERROR_INFO;
 +
 +#define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
 +#define HAL_MCE_DISABLED          ((ULONG)0)
 +
 +#define HAL_CMC_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
 +#define HAL_CMC_DISABLED          HAL_MCE_DISABLED
 +
 +#define HAL_CPE_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
 +#define HAL_CPE_DISABLED          HAL_MCE_DISABLED
 +
 +#define HAL_MCA_INTERRUPTS_BASED  HAL_MCE_INTERRUPTS_BASED
 +#define HAL_MCA_DISABLED          HAL_MCE_DISABLED
 +
 +typedef VOID
 +(NTAPI *PDRIVER_CMC_EXCEPTION_CALLBACK)(
 +  IN PVOID Context,
 +  IN PCMC_EXCEPTION CmcLog);
 +
 +typedef VOID
 +(NTAPI *PDRIVER_CPE_EXCEPTION_CALLBACK)(
 +  IN PVOID Context,
 +  IN PCPE_EXCEPTION CmcLog);
 +
 +typedef struct _CMC_DRIVER_INFO {
 +  PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback;
 +  PKDEFERRED_ROUTINE DpcCallback;
 +  PVOID DeviceContext;
 +} CMC_DRIVER_INFO, *PCMC_DRIVER_INFO;
 +
 +typedef struct _CPE_DRIVER_INFO {
 +  PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback;
 +  PKDEFERRED_ROUTINE DpcCallback;
 +  PVOID DeviceContext;
 +} CPE_DRIVER_INFO, *PCPE_DRIVER_INFO;
 +
 +#endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
 +
 +#if defined(_IA64_)
 +
 +typedef NTSTATUS
 +(*HALSENDCROSSPARTITIONIPI)(
 +  IN USHORT ProcessorID,
 +  IN UCHAR HardwareVector);
 +
 +typedef NTSTATUS
 +(*HALRESERVECROSSPARTITIONINTERRUPTVECTOR)(
 +  OUT PULONG Vector,
 +  OUT PKIRQL Irql,
 +  IN OUT PGROUP_AFFINITY Affinity,
 +  OUT PUCHAR HardwareVector);
 +
 +typedef VOID
 +(*HALFREECROSSPARTITIONINTERRUPTVECTOR)(
 +  IN ULONG Vector,
 +  IN PGROUP_AFFINITY Affinity);
 +
 +typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE {
 +  HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi;
 +  HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector;
 +  HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector;
 +} HAL_CROSS_PARTITION_IPI_INTERFACE;
 +
 +#define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
 +    FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE,    \
 +                 HalFreeCrossPartitionInterruptVector)
 +
 +#endif /* defined(_IA64_) */
 +
 +typedef struct _HAL_PLATFORM_INFORMATION {
 +  ULONG PlatformFlags;
 +} HAL_PLATFORM_INFORMATION, *PHAL_PLATFORM_INFORMATION;
 +
 +#define HAL_PLATFORM_DISABLE_WRITE_COMBINING      0x01L
 +#define HAL_PLATFORM_DISABLE_PTCG                 0x04L
 +#define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY       0x08L
 +#define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO  0x10L
 +#define HAL_PLATFORM_ACPI_TABLES_CACHED           0x20L
 +
 +/******************************************************************************
 + *                              Kernel Types                                  *
 + ******************************************************************************/
 +
 +#define NX_SUPPORT_POLICY_ALWAYSOFF 0
 +#define NX_SUPPORT_POLICY_ALWAYSON 1
 +#define NX_SUPPORT_POLICY_OPTIN 2
 +#define NX_SUPPORT_POLICY_OPTOUT 3
 +
 +typedef VOID
 +(NTAPI *PEXPAND_STACK_CALLOUT)(
 +  IN PVOID Parameter OPTIONAL);
 +
 +typedef VOID
 +(NTAPI *PTIMER_APC_ROUTINE)(
 +  IN PVOID TimerContext,
 +  IN ULONG TimerLowValue,
 +  IN LONG TimerHighValue);
 +
 +typedef enum _TIMER_SET_INFORMATION_CLASS {
 +  TimerSetCoalescableTimer,
 +  MaxTimerInfoClass 
 +} TIMER_SET_INFORMATION_CLASS;
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO {
 +  IN LARGE_INTEGER DueTime;
 +  IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL;
 +  IN PVOID TimerContext OPTIONAL;
 +  IN struct _COUNTED_REASON_CONTEXT *WakeContext OPTIONAL;
 +  IN ULONG Period OPTIONAL;
 +  IN ULONG TolerableDelay;
 +  OUT PBOOLEAN PreviousState OPTIONAL;
 +} TIMER_SET_COALESCABLE_TIMER_INFO, *PTIMER_SET_COALESCABLE_TIMER_INFO;
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 +
 +#define XSTATE_LEGACY_FLOATING_POINT        0
 +#define XSTATE_LEGACY_SSE                   1
 +#define XSTATE_GSSE                         2
 +
 +#define XSTATE_MASK_LEGACY_FLOATING_POINT   (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
 +#define XSTATE_MASK_LEGACY_SSE              (1i64 << (XSTATE_LEGACY_SSE))
 +#define XSTATE_MASK_LEGACY                  (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
 +#define XSTATE_MASK_GSSE                    (1i64 << (XSTATE_GSSE))
 +
 +#define MAXIMUM_XSTATE_FEATURES             64
 +
 +typedef struct _XSTATE_FEATURE {
 +  ULONG Offset;
 +  ULONG Size;
 +} XSTATE_FEATURE, *PXSTATE_FEATURE;
 +
 +typedef struct _XSTATE_CONFIGURATION {
 +  ULONG64 EnabledFeatures;
 +  ULONG Size;
 +  ULONG OptimizedSave:1;
 +  XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
 +} XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION;
 +
 +#define MAX_WOW64_SHARED_ENTRIES 16
 +
 +typedef struct _KUSER_SHARED_DATA {
 +  ULONG TickCountLowDeprecated;
 +  ULONG TickCountMultiplier;
 +  volatile KSYSTEM_TIME InterruptTime;
 +  volatile KSYSTEM_TIME SystemTime;
 +  volatile KSYSTEM_TIME TimeZoneBias;
 +  USHORT ImageNumberLow;
 +  USHORT ImageNumberHigh;
 +  WCHAR NtSystemRoot[260];
 +  ULONG MaxStackTraceDepth;
 +  ULONG CryptoExponent;
 +  ULONG TimeZoneId;
 +  ULONG LargePageMinimum;
 +  ULONG Reserved2[7];
 +  NT_PRODUCT_TYPE NtProductType;
 +  BOOLEAN ProductTypeIsValid;
 +  ULONG NtMajorVersion;
 +  ULONG NtMinorVersion;
 +  BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
 +  ULONG Reserved1;
 +  ULONG Reserved3;
 +  volatile ULONG TimeSlip;
 +  ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
 +  ULONG AltArchitecturePad[1];
 +  LARGE_INTEGER SystemExpirationDate;
 +  ULONG SuiteMask;
 +  BOOLEAN KdDebuggerEnabled;
 +#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
 +  UCHAR NXSupportPolicy;
 +#endif
 +  volatile ULONG ActiveConsoleId;
 +  volatile ULONG DismountCount;
 +  ULONG ComPlusPackage;
 +  ULONG LastSystemRITEventTickCount;
 +  ULONG NumberOfPhysicalPages;
 +  BOOLEAN SafeBootMode;
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +  _ANONYMOUS_UNION union {
 +    UCHAR TscQpcData;
 +    _ANONYMOUS_STRUCT struct {
 +      UCHAR TscQpcEnabled:1;
 +      UCHAR TscQpcSpareFlag:1;
 +      UCHAR TscQpcShift:6;
 +    } DUMMYSTRUCTNAME;
 +  } DUMMYUNIONNAME;
 +  UCHAR TscQpcPad[2];
 +#endif
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +  _ANONYMOUS_UNION union {
 +    ULONG SharedDataFlags;
 +    _ANONYMOUS_STRUCT struct {
 +      ULONG DbgErrorPortPresent:1;
 +      ULONG DbgElevationEnabled:1;
 +      ULONG DbgVirtEnabled:1;
 +      ULONG DbgInstallerDetectEnabled:1;
 +      ULONG DbgSystemDllRelocated:1;
 +      ULONG DbgDynProcessorEnabled:1;
 +      ULONG DbgSEHValidationEnabled:1;
 +      ULONG SpareBits:25;
 +    } DUMMYSTRUCTNAME2;
 +  } DUMMYUNIONNAME2;
 +#else
 +  ULONG TraceLogging;
 +#endif
 +  ULONG DataFlagsPad[1];
 +  ULONGLONG TestRetInstruction;
 +  ULONG SystemCall;
 +  ULONG SystemCallReturn;
 +  ULONGLONG SystemCallPad[3];
 +  _ANONYMOUS_UNION union {
 +    volatile KSYSTEM_TIME TickCount;
 +    volatile ULONG64 TickCountQuad;
 +    _ANONYMOUS_STRUCT struct {
 +      ULONG ReservedTickCountOverlay[3];
 +      ULONG TickCountPad[1];
 +    } DUMMYSTRUCTNAME;
 +  } DUMMYUNIONNAME3;
 +  ULONG Cookie;
 +  ULONG CookiePad[1];
 +#if (NTDDI_VERSION >= NTDDI_WS03)
 +  LONGLONG ConsoleSessionForegroundProcessId;
 +  ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
 +#endif
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +  USHORT UserModeGlobalLogger[16];
 +#else
 +  USHORT UserModeGlobalLogger[8];
 +  ULONG HeapTracingPid[2];
 +  ULONG CritSecTracingPid[2];
 +#endif
 +  ULONG ImageFileExecutionOptions;
 +#if (NTDDI_VERSION >= NTDDI_VISTASP1)
 +  ULONG LangGenerationCount;
 +#else
 +  /* 4 bytes padding */
 +#endif
 +  ULONGLONG Reserved5;
 +  volatile ULONG64 InterruptTimeBias;
 +#endif
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +  volatile ULONG64 TscQpcBias;
 +  volatile ULONG ActiveProcessorCount;
 +  volatile USHORT ActiveGroupCount;
 +  USHORT Reserved4;
 +  volatile ULONG AitSamplingValue;
 +  volatile ULONG AppCompatFlag;
 +  ULONGLONG SystemDllNativeRelocation;
 +  ULONG SystemDllWowRelocation;
 +  ULONG XStatePad[1];
 +  XSTATE_CONFIGURATION XState;
 +#endif
 +} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
 +
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +extern NTSYSAPI volatile CCHAR KeNumberProcessors;
 +#elif (NTDDI_VERSION >= NTDDI_WINXP)
 +extern NTSYSAPI CCHAR KeNumberProcessors;
 +#else
 +extern PCCHAR KeNumberProcessors;
 +#endif
 +
 +
 +/******************************************************************************
 + *                          Kernel Debugger Types                             *
 + ******************************************************************************/
 +typedef struct _DEBUG_DEVICE_ADDRESS {
 +  UCHAR Type;
 +  BOOLEAN Valid;
 +  UCHAR Reserved[2];
 +  PUCHAR TranslatedAddress;
 +  ULONG Length;
 +} DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS;
 +
 +typedef struct _DEBUG_MEMORY_REQUIREMENTS {
 +  PHYSICAL_ADDRESS Start;
 +  PHYSICAL_ADDRESS MaxEnd;
 +  PVOID VirtualAddress;
 +  ULONG Length;
 +  BOOLEAN Cached;
 +  BOOLEAN Aligned;
 +} DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS;
 +
 +typedef struct _DEBUG_DEVICE_DESCRIPTOR {
 +  ULONG Bus;
 +  ULONG Slot;
 +  USHORT Segment;
 +  USHORT VendorID;
 +  USHORT DeviceID;
 +  UCHAR BaseClass;
 +  UCHAR SubClass;
 +  UCHAR ProgIf;
 +  BOOLEAN Initialized;
 +  BOOLEAN Configured;
 +  DEBUG_DEVICE_ADDRESS BaseAddress[6];
 +  DEBUG_MEMORY_REQUIREMENTS Memory;
 +} DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
 +
 +typedef NTSTATUS
 +(NTAPI *pKdSetupPciDeviceForDebugging)(
 +  IN PVOID LoaderBlock OPTIONAL,
 +  IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
 +
 +typedef NTSTATUS
 +(NTAPI *pKdReleasePciDeviceForDebugging)(
 +  IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
 +
 +typedef PVOID
 +(NTAPI *pKdGetAcpiTablePhase0)(
 +  IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
 +  IN ULONG Signature);
 +
 +typedef VOID
 +(NTAPI *pKdCheckPowerButton)(
 +  VOID);
 +
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +typedef PVOID
 +(NTAPI *pKdMapPhysicalMemory64)(
 +  IN PHYSICAL_ADDRESS PhysicalAddress,
 +  IN ULONG NumberPages,
 +  IN BOOLEAN FlushCurrentTLB);
 +
 +typedef VOID
 +(NTAPI *pKdUnmapVirtualAddress)(
 +  IN PVOID VirtualAddress,
 +  IN ULONG NumberPages,
 +  IN BOOLEAN FlushCurrentTLB);
 +#else
 +typedef PVOID
 +(NTAPI *pKdMapPhysicalMemory64)(
 +  IN PHYSICAL_ADDRESS PhysicalAddress,
 +  IN ULONG NumberPages);
 +
 +typedef VOID
 +(NTAPI *pKdUnmapVirtualAddress)(
 +  IN PVOID VirtualAddress,
 +  IN ULONG NumberPages);
 +#endif
 +
 +typedef ULONG
 +(NTAPI *pKdGetPciDataByOffset)(
 +  IN ULONG BusNumber,
 +  IN ULONG SlotNumber,
 +  OUT PVOID Buffer,
 +  IN ULONG Offset,
 +  IN ULONG Length);
 +
 +typedef ULONG
 +(NTAPI *pKdSetPciDataByOffset)(
 +  IN ULONG BusNumber,
 +  IN ULONG SlotNumber,
 +  IN PVOID Buffer,
 +  IN ULONG Offset,
 +  IN ULONG Length);
 +/******************************************************************************
 + *                         Memory manager Types                               *
 + ******************************************************************************/
 +
 +typedef struct _PHYSICAL_MEMORY_RANGE {
 +  PHYSICAL_ADDRESS BaseAddress;
 +  LARGE_INTEGER NumberOfBytes;
 +} PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
 +
 +typedef NTSTATUS
 +(NTAPI *PMM_ROTATE_COPY_CALLBACK_FUNCTION)(
 +  IN PMDL DestinationMdl,
 +  IN PMDL SourceMdl,
 +  IN PVOID Context);
 +
 +typedef enum _MM_ROTATE_DIRECTION {
 +  MmToFrameBuffer,
 +  MmToFrameBufferNoCopy,
 +  MmToRegularMemory,
 +  MmToRegularMemoryNoCopy,
 +  MmMaximumRotateDirection
 +} MM_ROTATE_DIRECTION, *PMM_ROTATE_DIRECTION;
 +
 +
 +/******************************************************************************
 + *                           Process Manager Types                            *
 + ******************************************************************************/
 +
 +#define QUOTA_LIMITS_HARDWS_MIN_ENABLE  0x00000001
 +#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
 +#define QUOTA_LIMITS_HARDWS_MAX_ENABLE  0x00000004
 +#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
 +#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
 +
 +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 union _RATE_QUOTA_LIMIT {
 +  ULONG RateData;
 +  _ANONYMOUS_STRUCT struct {
 +    ULONG RatePercent:7;
 +    ULONG Reserved0:25;
 +  } DUMMYSTRUCTNAME;
 +} RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
 +
 +typedef struct _QUOTA_LIMITS_EX {
 +  SIZE_T PagedPoolLimit;
 +  SIZE_T NonPagedPoolLimit;
 +  SIZE_T MinimumWorkingSetSize;
 +  SIZE_T MaximumWorkingSetSize;
 +  SIZE_T PagefileLimit;
 +  LARGE_INTEGER TimeLimit;
 +  SIZE_T WorkingSetLimit;
 +  SIZE_T Reserved2;
 +  SIZE_T Reserved3;
 +  SIZE_T Reserved4;
 +  ULONG Flags;
 +  RATE_QUOTA_LIMIT CpuRateLimit;
 +} QUOTA_LIMITS_EX, *PQUOTA_LIMITS_EX;
 +
 +typedef struct _IO_COUNTERS {
 +  ULONGLONG ReadOperationCount;
 +  ULONGLONG WriteOperationCount;
 +  ULONGLONG OtherOperationCount;
 +  ULONGLONG ReadTransferCount;
 +  ULONGLONG WriteTransferCount;
 +  ULONGLONG OtherTransferCount;
 +} IO_COUNTERS, *PIO_COUNTERS;
 +
 +typedef struct _VM_COUNTERS {
 +  SIZE_T PeakVirtualSize;
 +  SIZE_T VirtualSize;
 +  ULONG PageFaultCount;
 +  SIZE_T PeakWorkingSetSize;
 +  SIZE_T WorkingSetSize;
 +  SIZE_T QuotaPeakPagedPoolUsage;
 +  SIZE_T QuotaPagedPoolUsage;
 +  SIZE_T QuotaPeakNonPagedPoolUsage;
 +  SIZE_T QuotaNonPagedPoolUsage;
 +  SIZE_T PagefileUsage;
 +  SIZE_T PeakPagefileUsage;
 +} VM_COUNTERS, *PVM_COUNTERS;
 +
 +typedef struct _VM_COUNTERS_EX {
 +  SIZE_T PeakVirtualSize;
 +  SIZE_T VirtualSize;
 +  ULONG PageFaultCount;
 +  SIZE_T PeakWorkingSetSize;
 +  SIZE_T WorkingSetSize;
 +  SIZE_T QuotaPeakPagedPoolUsage;
 +  SIZE_T QuotaPagedPoolUsage;
 +  SIZE_T QuotaPeakNonPagedPoolUsage;
 +  SIZE_T QuotaNonPagedPoolUsage;
 +  SIZE_T PagefileUsage;
 +  SIZE_T PeakPagefileUsage;
 +  SIZE_T PrivateUsage;
 +} VM_COUNTERS_EX, *PVM_COUNTERS_EX;
 +
 +#define MAX_HW_COUNTERS 16
 +#define THREAD_PROFILING_FLAG_DISPATCH  0x00000001
 +
 +typedef enum _HARDWARE_COUNTER_TYPE {
 +  PMCCounter,
 +  MaxHardwareCounterType
 +} HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE;
 +
 +typedef struct _HARDWARE_COUNTER {
 +  HARDWARE_COUNTER_TYPE Type;
 +  ULONG Reserved;
 +  ULONG64 Index;
 +} HARDWARE_COUNTER, *PHARDWARE_COUNTER;
 +
 +typedef struct _POOLED_USAGE_AND_LIMITS {
 +  SIZE_T PeakPagedPoolUsage;
 +  SIZE_T PagedPoolUsage;
 +  SIZE_T PagedPoolLimit;
 +  SIZE_T PeakNonPagedPoolUsage;
 +  SIZE_T NonPagedPoolUsage;
 +  SIZE_T NonPagedPoolLimit;
 +  SIZE_T PeakPagefileUsage;
 +  SIZE_T PagefileUsage;
 +  SIZE_T PagefileLimit;
 +} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
 +
 +typedef struct _PROCESS_ACCESS_TOKEN {
 +  HANDLE Token;
 +  HANDLE Thread;
 +} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
 +
 +#define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS     0x00000003UL
 +#define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS    ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
 +
 +typedef struct _PROCESS_EXCEPTION_PORT {
 +  IN HANDLE ExceptionPortHandle;
 +  IN OUT ULONG StateFlags;
 +} PROCESS_EXCEPTION_PORT, *PPROCESS_EXCEPTION_PORT;
 +
 +typedef VOID
 +(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)(
 +  IN HANDLE ParentId,
 +  IN HANDLE ProcessId,
 +  IN BOOLEAN Create);
 +
 +typedef struct _PS_CREATE_NOTIFY_INFO {
 +  IN SIZE_T Size;
 +  _ANONYMOUS_UNION union {
 +    IN ULONG Flags;
 +    _ANONYMOUS_STRUCT struct {
 +      IN ULONG FileOpenNameAvailable:1;
 +      IN ULONG Reserved:31;
 +    } DUMMYSTRUCTNAME;
 +  } DUMMYUNIONNAME;
 +  IN HANDLE ParentProcessId;
 +  IN CLIENT_ID CreatingThreadId;
 +  IN OUT struct _FILE_OBJECT *FileObject;
 +  IN PCUNICODE_STRING ImageFileName;
 +  IN PCUNICODE_STRING CommandLine OPTIONAL;
 +  IN OUT NTSTATUS CreationStatus;
 +} PS_CREATE_NOTIFY_INFO, *PPS_CREATE_NOTIFY_INFO;
 +
 +typedef VOID
 +(NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE_EX)(
 +  IN OUT PEPROCESS Process,
 +  IN HANDLE ProcessId,
 +  IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL);
 +
 +typedef VOID
 +(NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)(
 +  IN HANDLE ProcessId,
 +  IN HANDLE ThreadId,
 +  IN BOOLEAN Create);
 +
 +#define IMAGE_ADDRESSING_MODE_32BIT       3
 +
 +typedef struct _IMAGE_INFO {
 +  _ANONYMOUS_UNION union {
 +    ULONG Properties;
 +    _ANONYMOUS_STRUCT struct {
 +      ULONG ImageAddressingMode:8;
 +      ULONG SystemModeImage:1;
 +      ULONG ImageMappedToAllPids:1;
 +      ULONG ExtendedInfoPresent:1;
 +      ULONG Reserved:21;
 +    } DUMMYSTRUCTNAME;
 +  } DUMMYUNIONNAME;
 +  PVOID ImageBase;
 +  ULONG ImageSelector;
 +  SIZE_T ImageSize;
 +  ULONG ImageSectionNumber;
 +} IMAGE_INFO, *PIMAGE_INFO;
 +
 +typedef struct _IMAGE_INFO_EX {
 +  SIZE_T Size;
 +  IMAGE_INFO ImageInfo;
 +  struct _FILE_OBJECT *FileObject;
 +} IMAGE_INFO_EX, *PIMAGE_INFO_EX;
 +
 +typedef VOID
 +(NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
 +  IN PUNICODE_STRING FullImageName,
 +  IN HANDLE ProcessId,
 +  IN PIMAGE_INFO ImageInfo);
 +
 +#define THREAD_CSWITCH_PMU_DISABLE  FALSE
 +#define THREAD_CSWITCH_PMU_ENABLE   TRUE
 +
 +#define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
 +
 +#define PROCESS_HANDLE_TRACING_MAX_STACKS 16
 +
 +typedef struct _NT_TIB {
 +  struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
 +  PVOID StackBase;
 +  PVOID StackLimit;
 +  PVOID SubSystemTib;
 +  _ANONYMOUS_UNION union {
 +    PVOID FiberData;
 +    ULONG Version;
 +  } DUMMYUNIONNAME;
 +  PVOID ArbitraryUserPointer;
 +  struct _NT_TIB *Self;
 +} NT_TIB, *PNT_TIB;
 +
 +typedef struct _NT_TIB32 {
 +  ULONG ExceptionList;
 +  ULONG StackBase;
 +  ULONG StackLimit;
 +  ULONG SubSystemTib;
 +  _ANONYMOUS_UNION union {
 +    ULONG FiberData;
 +    ULONG Version;
 +  } DUMMYUNIONNAME;
 +  ULONG ArbitraryUserPointer;
 +  ULONG Self;
 +} NT_TIB32,*PNT_TIB32;
 +
 +typedef struct _NT_TIB64 {
 +  ULONG64 ExceptionList;
 +  ULONG64 StackBase;
 +  ULONG64 StackLimit;
 +  ULONG64 SubSystemTib;
 +  _ANONYMOUS_UNION union {
 +    ULONG64 FiberData;
 +    ULONG Version;
 +  } DUMMYUNIONNAME;
 +  ULONG64 ArbitraryUserPointer;
 +  ULONG64 Self;
 +} NT_TIB64,*PNT_TIB64;
 +
 +typedef enum _PROCESSINFOCLASS {
 +  ProcessBasicInformation,
 +  ProcessQuotaLimits,
 +  ProcessIoCounters,
 +  ProcessVmCounters,
 +  ProcessTimes,
 +  ProcessBasePriority,
 +  ProcessRaisePriority,
 +  ProcessDebugPort,
 +  ProcessExceptionPort,
 +  ProcessAccessToken,
 +  ProcessLdtInformation,
 +  ProcessLdtSize,
 +  ProcessDefaultHardErrorMode,
 +  ProcessIoPortHandlers,
 +  ProcessPooledUsageAndLimits,
 +  ProcessWorkingSetWatch,
 +  ProcessUserModeIOPL,
 +  ProcessEnableAlignmentFaultFixup,
 +  ProcessPriorityClass,
 +  ProcessWx86Information,
 +  ProcessHandleCount,
 +  ProcessAffinityMask,
 +  ProcessPriorityBoost,
 +  ProcessDeviceMap,
 +  ProcessSessionInformation,
 +  ProcessForegroundInformation,
 +  ProcessWow64Information,
 +  ProcessImageFileName,
 +  ProcessLUIDDeviceMapsEnabled,
 +  ProcessBreakOnTermination,
 +  ProcessDebugObjectHandle,
 +  ProcessDebugFlags,
 +  ProcessHandleTracing,
 +  ProcessIoPriority,
 +  ProcessExecuteFlags,
 +  ProcessTlsInformation,
 +  ProcessCookie,
 +  ProcessImageInformation,
 +  ProcessCycleTime,
 +  ProcessPagePriority,
 +  ProcessInstrumentationCallback,
 +  ProcessThreadStackAllocation,
 +  ProcessWorkingSetWatchEx,
 +  ProcessImageFileNameWin32,
 +  ProcessImageFileMapping,
 +  ProcessAffinityUpdateMode,
 +  ProcessMemoryAllocationMode,
 +  ProcessGroupInformation,
 +  ProcessTokenVirtualizationEnabled,
 +  ProcessConsoleHostProcess,
 +  ProcessWindowInformation,
 +  MaxProcessInfoClass
 +} PROCESSINFOCLASS;
 +
 +typedef enum _THREADINFOCLASS {
 +  ThreadBasicInformation,
 +  ThreadTimes,
 +  ThreadPriority,
 +  ThreadBasePriority,
 +  ThreadAffinityMask,
 +  ThreadImpersonationToken,
 +  ThreadDescriptorTableEntry,
 +  ThreadEnableAlignmentFaultFixup,
 +  ThreadEventPair_Reusable,
 +  ThreadQuerySetWin32StartAddress,
 +  ThreadZeroTlsCell,
 +  ThreadPerformanceCount,
 +  ThreadAmILastThread,
 +  ThreadIdealProcessor,
 +  ThreadPriorityBoost,
 +  ThreadSetTlsArrayAddress,
 +  ThreadIsIoPending,
 +  ThreadHideFromDebugger,
 +  ThreadBreakOnTermination,
 +  ThreadSwitchLegacyState,
 +  ThreadIsTerminated,
 +  ThreadLastSystemCall,
 +  ThreadIoPriority,
 +  ThreadCycleTime,
 +  ThreadPagePriority,
 +  ThreadActualBasePriority,
 +  ThreadTebInformation,
 +  ThreadCSwitchMon,
 +  ThreadCSwitchPmu,
 +  ThreadWow64Context,
 +  ThreadGroupInformation,
 +  ThreadUmsInformation,
 +  ThreadCounterProfiling,
 +  ThreadIdealProcessorEx,
 +  MaxThreadInfoClass
 +} THREADINFOCLASS;
 +
 +typedef struct _PAGE_PRIORITY_INFORMATION {
 +  ULONG PagePriority;
 +} PAGE_PRIORITY_INFORMATION, *PPAGE_PRIORITY_INFORMATION;
 +
 +typedef struct _PROCESS_WS_WATCH_INFORMATION {
 +  PVOID FaultingPc;
 +  PVOID FaultingVa;
 +} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
 +
 +typedef struct _PROCESS_BASIC_INFORMATION {
 +  NTSTATUS ExitStatus;
 +  struct _PEB *PebBaseAddress;
 +  ULONG_PTR AffinityMask;
 +  KPRIORITY BasePriority;
 +  ULONG_PTR UniqueProcessId;
 +  ULONG_PTR InheritedFromUniqueProcessId;
 +} PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
 +
 +typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION {
 +  SIZE_T Size;
 +  PROCESS_BASIC_INFORMATION BasicInfo;
 +  _ANONYMOUS_UNION union {
 +    ULONG Flags;
 +    _ANONYMOUS_STRUCT struct {
 +      ULONG IsProtectedProcess:1;
 +      ULONG IsWow64Process:1;
 +      ULONG IsProcessDeleting:1;
 +      ULONG IsCrossSessionCreate:1;
 +      ULONG SpareBits:28;
 +    } DUMMYSTRUCTNAME;
 +  } DUMMYUNIONNAME;
 +} PROCESS_EXTENDED_BASIC_INFORMATION, *PPROCESS_EXTENDED_BASIC_INFORMATION;
 +
 +typedef struct _PROCESS_DEVICEMAP_INFORMATION {
 +  _ANONYMOUS_UNION union {
 +    struct {
 +      HANDLE DirectoryHandle;
 +    } Set;
 +    struct {
 +      ULONG DriveMap;
 +      UCHAR DriveType[32];
 +    } Query;
 +  } DUMMYUNIONNAME;
 +} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
 +
 +typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX {
 +  _ANONYMOUS_UNION union {
 +    struct {
 +      HANDLE DirectoryHandle;
 +    } Set;
 +    struct {
 +      ULONG DriveMap;
 +      UCHAR DriveType[32];
 +    } Query;
 +  } DUMMYUNIONNAME;
 +  ULONG Flags;
 +} PROCESS_DEVICEMAP_INFORMATION_EX, *PPROCESS_DEVICEMAP_INFORMATION_EX;
 +
 +typedef struct _PROCESS_SESSION_INFORMATION {
 +  ULONG SessionId;
 +} PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
 +
 +typedef struct _PROCESS_HANDLE_TRACING_ENABLE {
 +  ULONG Flags;
 +} PROCESS_HANDLE_TRACING_ENABLE, *PPROCESS_HANDLE_TRACING_ENABLE;
 +
 +typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX {
 +  ULONG Flags;
 +  ULONG TotalSlots;
 +} PROCESS_HANDLE_TRACING_ENABLE_EX, *PPROCESS_HANDLE_TRACING_ENABLE_EX;
 +
 +typedef struct _PROCESS_HANDLE_TRACING_ENTRY {
 +  HANDLE Handle;
 +  CLIENT_ID ClientId;
 +  ULONG Type;
 +  PVOID Stacks[PROCESS_HANDLE_TRACING_MAX_STACKS];
 +} PROCESS_HANDLE_TRACING_ENTRY, *PPROCESS_HANDLE_TRACING_ENTRY;
 +
 +typedef struct _PROCESS_HANDLE_TRACING_QUERY {
 +  HANDLE Handle;
 +  ULONG TotalTraces;
 +  PROCESS_HANDLE_TRACING_ENTRY HandleTrace[1];
 +} PROCESS_HANDLE_TRACING_QUERY, *PPROCESS_HANDLE_TRACING_QUERY;
 +
 +extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
 +
 +
 +/******************************************************************************
 + *                           Runtime Library Types                            *
 + ******************************************************************************/
 +
 +
 +#ifndef _RTL_RUN_ONCE_DEF
 +#define _RTL_RUN_ONCE_DEF
 +
 +#define RTL_RUN_ONCE_INIT {0}
 +
 +#define RTL_RUN_ONCE_CHECK_ONLY     0x00000001UL
 +#define RTL_RUN_ONCE_ASYNC          0x00000002UL
 +#define RTL_RUN_ONCE_INIT_FAILED    0x00000004UL
 +
 +#define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
 +
 +#define RTL_HASH_ALLOCATED_HEADER            0x00000001
 +
 +#define RTL_HASH_RESERVED_SIGNATURE 0
 +
 +/* RtlVerifyVersionInfo() ComparisonType */
 +
 +#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
 +
 +#define VER_CONDITION_MASK              7
 +#define VER_NUM_BITS_PER_CONDITION_MASK 3
 +
 +/* RtlVerifyVersionInfo() TypeMask */
 +
 +#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_NT_WORKSTATION              0x0000001
 +#define VER_NT_DOMAIN_CONTROLLER        0x0000002
 +#define VER_NT_SERVER                   0x0000003
 +
 +#define VER_PLATFORM_WIN32s             0
 +#define VER_PLATFORM_WIN32_WINDOWS      1
 +#define VER_PLATFORM_WIN32_NT           2
 +
 +typedef union _RTL_RUN_ONCE {
 +  PVOID Ptr;
 +} RTL_RUN_ONCE, *PRTL_RUN_ONCE;
 +
 +typedef ULONG /* LOGICAL */
 +(NTAPI *PRTL_RUN_ONCE_INIT_FN) (
 +  IN OUT PRTL_RUN_ONCE RunOnce,
 +  IN OUT PVOID Parameter OPTIONAL,
 +  IN OUT PVOID *Context OPTIONAL);
 +
 +#endif /* _RTL_RUN_ONCE_DEF */
 +
 +typedef enum _TABLE_SEARCH_RESULT {
 +  TableEmptyTree,
 +  TableFoundNode,
 +  TableInsertAsLeft,
 +  TableInsertAsRight
 +} TABLE_SEARCH_RESULT;
 +
 +typedef enum _RTL_GENERIC_COMPARE_RESULTS {
 +  GenericLessThan,
 +  GenericGreaterThan,
 +  GenericEqual
 +} RTL_GENERIC_COMPARE_RESULTS;
 +
 +// Forwarder
 +struct _RTL_AVL_TABLE;
 +
 +typedef RTL_GENERIC_COMPARE_RESULTS
 +(NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
 +  IN struct _RTL_AVL_TABLE *Table,
 +  IN PVOID FirstStruct,
 +  IN PVOID SecondStruct);
 +
 +typedef PVOID
 +(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
 +  IN struct _RTL_AVL_TABLE *Table,
 +  IN CLONG ByteSize);
 +
 +typedef VOID
 +(NTAPI *PRTL_AVL_FREE_ROUTINE) (
 +  IN struct _RTL_AVL_TABLE *Table,
 +  IN PVOID Buffer);
 +
 +typedef NTSTATUS
 +(NTAPI *PRTL_AVL_MATCH_FUNCTION) (
 +  IN struct _RTL_AVL_TABLE *Table,
 +  IN PVOID UserData,
 +  IN PVOID MatchData);
 +
 +typedef struct _RTL_BALANCED_LINKS {
 +  struct _RTL_BALANCED_LINKS *Parent;
 +  struct _RTL_BALANCED_LINKS *LeftChild;
 +  struct _RTL_BALANCED_LINKS *RightChild;
 +  CHAR Balance;
 +  UCHAR Reserved[3];
 +} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
 +
 +typedef struct _RTL_AVL_TABLE {
 +  RTL_BALANCED_LINKS BalancedRoot;
 +  PVOID OrderedPointer;
 +  ULONG WhichOrderedElement;
 +  ULONG NumberGenericTableElements;
 +  ULONG DepthOfTree;
 +  PRTL_BALANCED_LINKS RestartKey;
 +  ULONG DeleteCount;
 +  PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
 +  PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
 +  PRTL_AVL_FREE_ROUTINE FreeRoutine;
 +  PVOID TableContext;
 +} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
 +
 +#ifndef RTL_USE_AVL_TABLES
 +
 +struct _RTL_GENERIC_TABLE;
 +
 +typedef RTL_GENERIC_COMPARE_RESULTS
 +(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
 +  IN struct _RTL_GENERIC_TABLE *Table,
 +  IN PVOID FirstStruct,
 +  IN PVOID SecondStruct);
 +
 +typedef PVOID
 +(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
 +  IN struct _RTL_GENERIC_TABLE *Table,
 +  IN CLONG ByteSize);
 +
 +typedef VOID
 +(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
 +  IN struct _RTL_GENERIC_TABLE *Table,
 +  IN PVOID Buffer);
 +
 +typedef struct _RTL_SPLAY_LINKS {
 +  struct _RTL_SPLAY_LINKS *Parent;
 +  struct _RTL_SPLAY_LINKS *LeftChild;
 +  struct _RTL_SPLAY_LINKS *RightChild;
 +} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
 +
 +typedef struct _RTL_GENERIC_TABLE {
 +  PRTL_SPLAY_LINKS TableRoot;
 +  LIST_ENTRY InsertOrderList;
 +  PLIST_ENTRY OrderedPointer;
 +  ULONG WhichOrderedElement;
 +  ULONG NumberGenericTableElements;
 +  PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
 +  PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
 +  PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
 +  PVOID TableContext;
 +} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
 +
 +#endif /* !RTL_USE_AVL_TABLES */
 +
 +#ifdef RTL_USE_AVL_TABLES
 +
 +#undef PRTL_GENERIC_COMPARE_ROUTINE
 +#undef RTL_GENERIC_COMPARE_ROUTINE
 +#undef PRTL_GENERIC_ALLOCATE_ROUTINE
 +#undef RTL_GENERIC_ALLOCATE_ROUTINE
 +#undef PRTL_GENERIC_FREE_ROUTINE
 +#undef RTL_GENERIC_FREE_ROUTINE
 +#undef RTL_GENERIC_TABLE
 +#undef PRTL_GENERIC_TABLE
 +
 +#define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
 +#define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
 +#define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
 +#define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
 +#define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
 +#define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
 +#define RTL_GENERIC_TABLE RTL_AVL_TABLE
 +#define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
 +
 +#endif /* RTL_USE_AVL_TABLES */
 +
 +typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY {
 +  LIST_ENTRY Linkage;
 +  ULONG_PTR Signature;
 +} RTL_DYNAMIC_HASH_TABLE_ENTRY, *PRTL_DYNAMIC_HASH_TABLE_ENTRY;
 +
 +typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT {
 +  PLIST_ENTRY ChainHead;
 +  PLIST_ENTRY PrevLinkage;
 +  ULONG_PTR Signature;
 +} RTL_DYNAMIC_HASH_TABLE_CONTEXT, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT;
 +
 +typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR {
 +  RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry;
 +  PLIST_ENTRY ChainHead;
 +  ULONG BucketIndex;
 +} RTL_DYNAMIC_HASH_TABLE_ENUMERATOR, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR;
 +
 +typedef struct _RTL_DYNAMIC_HASH_TABLE {
 +  ULONG Flags;
 +  ULONG Shift;
 +  ULONG TableSize;
 +  ULONG Pivot;
 +  ULONG DivisorMask;
 +  ULONG NumEntries;
 +  ULONG NonEmptyBuckets;
 +  ULONG NumEnumerators;
 +  PVOID Directory;
 +} RTL_DYNAMIC_HASH_TABLE, *PRTL_DYNAMIC_HASH_TABLE;
 +
 +typedef struct _OSVERSIONINFOA {
 +  ULONG dwOSVersionInfoSize;
 +  ULONG dwMajorVersion;
 +  ULONG dwMinorVersion;
 +  ULONG dwBuildNumber;
 +  ULONG dwPlatformId;
 +  CHAR szCSDVersion[128];
 +} OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
 +
 +typedef struct _OSVERSIONINFOW {
 +  ULONG dwOSVersionInfoSize;
 +  ULONG dwMajorVersion;
 +  ULONG dwMinorVersion;
 +  ULONG dwBuildNumber;
 +  ULONG dwPlatformId;
 +  WCHAR szCSDVersion[128];
 +} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
 +
 +typedef struct _OSVERSIONINFOEXA {
 +  ULONG dwOSVersionInfoSize;
 +  ULONG dwMajorVersion;
 +  ULONG dwMinorVersion;
 +  ULONG dwBuildNumber;
 +  ULONG dwPlatformId;
 +  CHAR szCSDVersion[128];
 +  USHORT wServicePackMajor;
 +  USHORT wServicePackMinor;
 +  USHORT wSuiteMask;
 +  UCHAR wProductType;
 +  UCHAR wReserved;
 +} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
 +
 +typedef struct _OSVERSIONINFOEXW {
 +  ULONG dwOSVersionInfoSize;
 +  ULONG dwMajorVersion;
 +  ULONG dwMinorVersion;
 +  ULONG dwBuildNumber;
 +  ULONG dwPlatformId;
 +  WCHAR szCSDVersion[128];
 +  USHORT wServicePackMajor;
 +  USHORT wServicePackMinor;
 +  USHORT wSuiteMask;
 +  UCHAR wProductType;
 +  UCHAR wReserved;
 +} OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
 +
 +#ifdef UNICODE
 +typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
 +typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
 +typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
 +typedef OSVERSIONINFOW OSVERSIONINFO;
 +typedef POSVERSIONINFOW POSVERSIONINFO;
 +typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
 +#else
 +typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
 +typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
 +typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
 +typedef OSVERSIONINFOA OSVERSIONINFO;
 +typedef POSVERSIONINFOA POSVERSIONINFO;
 +typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
 +#endif /* UNICODE */
 +
 +#define HASH_ENTRY_KEY(x)    ((x)->Signature)
 +
 +/******************************************************************************
 + *                            Security Manager Types                          *
 + ******************************************************************************/
 +#define SE_UNSOLICITED_INPUT_PRIVILEGE    6
 +
 +typedef enum _WELL_KNOWN_SID_TYPE {
 +  WinNullSid = 0,
 +  WinWorldSid = 1,
 +  WinLocalSid = 2,
 +  WinCreatorOwnerSid = 3,
 +  WinCreatorGroupSid = 4,
 +  WinCreatorOwnerServerSid = 5,
 +  WinCreatorGroupServerSid = 6,
 +  WinNtAuthoritySid = 7,
 +  WinDialupSid = 8,
 +  WinNetworkSid = 9,
 +  WinBatchSid = 10,
 +  WinInteractiveSid = 11,
 +  WinServiceSid = 12,
 +  WinAnonymousSid = 13,
 +  WinProxySid = 14,
 +  WinEnterpriseControllersSid = 15,
 +  WinSelfSid = 16,
 +  WinAuthenticatedUserSid = 17,
 +  WinRestrictedCodeSid = 18,
 +  WinTerminalServerSid = 19,
 +  WinRemoteLogonIdSid = 20,
 +  WinLogonIdsSid = 21,
 +  WinLocalSystemSid = 22,
 +  WinLocalServiceSid = 23,
 +  WinNetworkServiceSid = 24,
 +  WinBuiltinDomainSid = 25,
 +  WinBuiltinAdministratorsSid = 26,
 +  WinBuiltinUsersSid = 27,
 +  WinBuiltinGuestsSid = 28,
 +  WinBuiltinPowerUsersSid = 29,
 +  WinBuiltinAccountOperatorsSid = 30,
 +  WinBuiltinSystemOperatorsSid = 31,
 +  WinBuiltinPrintOperatorsSid = 32,
 +  WinBuiltinBackupOperatorsSid = 33,
 +  WinBuiltinReplicatorSid = 34,
 +  WinBuiltinPreWindows2000CompatibleAccessSid = 35,
 +  WinBuiltinRemoteDesktopUsersSid = 36,
 +  WinBuiltinNetworkConfigurationOperatorsSid = 37,
 +  WinAccountAdministratorSid = 38,
 +  WinAccountGuestSid = 39,
 +  WinAccountKrbtgtSid = 40,
 +  WinAccountDomainAdminsSid = 41,
 +  WinAccountDomainUsersSid = 42,
 +  WinAccountDomainGuestsSid = 43,
 +  WinAccountComputersSid = 44,
 +  WinAccountControllersSid = 45,
 +  WinAccountCertAdminsSid = 46,
 +  WinAccountSchemaAdminsSid = 47,
 +  WinAccountEnterpriseAdminsSid = 48,
 +  WinAccountPolicyAdminsSid = 49,
 +  WinAccountRasAndIasServersSid = 50,
 +  WinNTLMAuthenticationSid = 51,
 +  WinDigestAuthenticationSid = 52,
 +  WinSChannelAuthenticationSid = 53,
 +  WinThisOrganizationSid = 54,
 +  WinOtherOrganizationSid = 55,
 +  WinBuiltinIncomingForestTrustBuildersSid = 56,
 +  WinBuiltinPerfMonitoringUsersSid = 57,
 +  WinBuiltinPerfLoggingUsersSid = 58,
 +  WinBuiltinAuthorizationAccessSid = 59,
 +  WinBuiltinTerminalServerLicenseServersSid = 60,
 +  WinBuiltinDCOMUsersSid = 61,
 +  WinBuiltinIUsersSid = 62,
 +  WinIUserSid = 63,
 +  WinBuiltinCryptoOperatorsSid = 64,
 +  WinUntrustedLabelSid = 65,
 +  WinLowLabelSid = 66,
 +  WinMediumLabelSid = 67,
 +  WinHighLabelSid = 68,
 +  WinSystemLabelSid = 69,
 +  WinWriteRestrictedCodeSid = 70,
 +  WinCreatorOwnerRightsSid = 71,
 +  WinCacheablePrincipalsGroupSid = 72,
 +  WinNonCacheablePrincipalsGroupSid = 73,
 +  WinEnterpriseReadonlyControllersSid = 74,
 +  WinAccountReadonlyControllersSid = 75,
 +  WinBuiltinEventLogReadersGroup = 76,
 +  WinNewEnterpriseReadonlyControllersSid = 77,
 +  WinBuiltinCertSvcDComAccessGroup = 78,
 +  WinMediumPlusLabelSid = 79,
 +  WinLocalLogonSid = 80,
 +  WinConsoleLogonSid = 81,
 +  WinThisOrganizationCertificateSid = 82,
 +} WELL_KNOWN_SID_TYPE;
 +
 +#if defined(_M_IX86)
 +
 +#define PAUSE_PROCESSOR YieldProcessor();
 +
 +#define KERNEL_STACK_SIZE                   12288
 +#define KERNEL_LARGE_STACK_SIZE             61440
 +#define KERNEL_LARGE_STACK_COMMIT           12288
 +
 +#define SIZE_OF_80387_REGISTERS   80
 +
 +#if !defined(RC_INVOKED)
 +
 +#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 CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS |  \
 +                     CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS |      \
 +                     CONTEXT_EXTENDED_REGISTERS)
 +
 +#define CONTEXT_XSTATE          (CONTEXT_i386 | 0x00000040L)
 +
 +#endif /* !defined(RC_INVOKED) */
 +
 +typedef struct _FLOATING_SAVE_AREA {
 +  ULONG ControlWord;
 +  ULONG StatusWord;
 +  ULONG TagWord;
 +  ULONG ErrorOffset;
 +  ULONG ErrorSelector;
 +  ULONG DataOffset;
 +  ULONG DataSelector;
 +  UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
 +  ULONG Cr0NpxState;
 +} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
 +
 +#include "pshpack4.h"
 +typedef struct _CONTEXT {
 +  ULONG ContextFlags;
 +  ULONG Dr0;
 +  ULONG Dr1;
 +  ULONG Dr2;
 +  ULONG Dr3;
 +  ULONG Dr6;
 +  ULONG Dr7;
 +  FLOATING_SAVE_AREA FloatSave;
 +  ULONG SegGs;
 +  ULONG SegFs;
 +  ULONG SegEs;
 +  ULONG SegDs;
 +  ULONG Edi;
 +  ULONG Esi;
 +  ULONG Ebx;
 +  ULONG Edx;
 +  ULONG Ecx;
 +  ULONG Eax;
 +  ULONG Ebp;
 +  ULONG Eip;
 +  ULONG SegCs;
 +  ULONG EFlags;
 +  ULONG Esp;
 +  ULONG SegSs;
 +  UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
 +} CONTEXT;
 +#include "poppack.h"
 +
 +#define KeGetPcr()                      PCR
 +
 +#define PCR_MINOR_VERSION 1
 +#define PCR_MAJOR_VERSION 1
 +
 +typedef struct _KPCR {
 +  union {
 +    NT_TIB NtTib;
 +    struct {
 +      struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
 +      PVOID Used_StackBase;
 +      PVOID Spare2;
 +      PVOID TssCopy;
 +      ULONG ContextSwitches;
 +      KAFFINITY SetMemberCopy;
 +      PVOID Used_Self;
 +    };
 +  };
 +  struct _KPCR *SelfPcr;
 +  struct _KPRCB *Prcb;
 +  KIRQL Irql;
 +  ULONG IRR;
 +  ULONG IrrActive;
 +  ULONG IDR;
 +  PVOID KdVersionBlock;
 +  struct _KIDTENTRY *IDT;
 +  struct _KGDTENTRY *GDT;
 +  struct _KTSS *TSS;
 +  USHORT MajorVersion;
 +  USHORT MinorVersion;
 +  KAFFINITY SetMember;
 +  ULONG StallScaleFactor;
 +  UCHAR SpareUnused;
 +  UCHAR Number;
 +  UCHAR Spare0;
 +  UCHAR SecondLevelCacheAssociativity;
 +  ULONG VdmAlert;
 +  ULONG KernelReserved[14];
 +  ULONG SecondLevelCacheSize;
 +  ULONG HalReserved[16];
 +} KPCR, *PKPCR;
 +
 +FORCEINLINE
 +ULONG
 +KeGetCurrentProcessorNumber(VOID)
 +{
 +    return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number));
 +}
 +
 +
 +
 +
 +
 +
 +extern NTKERNELAPI PVOID MmHighestUserAddress;
 +extern NTKERNELAPI PVOID MmSystemRangeStart;
 +extern NTKERNELAPI ULONG MmUserProbeAddress;
 +
 +#define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
 +#define MM_SYSTEM_RANGE_START MmSystemRangeStart
 +#if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
 +#define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
 +extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_;
 +#else
 +#define MM_USER_PROBE_ADDRESS MmUserProbeAddress
 +#endif
 +#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
 +#define MM_KSEG0_BASE       MM_SYSTEM_RANGE_START
 +#define MM_SYSTEM_SPACE_END 0xFFFFFFFF
 +#if !defined (_X86PAE_)
 +#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
 +#else
 +#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
 +#endif
 +
 +#elif defined(_M_AMD64)
 +
 +#define PAUSE_PROCESSOR YieldProcessor();
 +
 +#define KERNEL_STACK_SIZE 0x6000
 +#define KERNEL_LARGE_STACK_SIZE 0x12000
 +#define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
 +
 +#define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
 +
 +#define EXCEPTION_READ_FAULT    0
 +#define EXCEPTION_WRITE_FAULT   1
 +#define EXCEPTION_EXECUTE_FAULT 8
 +
 +#if !defined(RC_INVOKED)
 +
 +#define CONTEXT_AMD64 0x100000
 +
 +#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
 +#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
 +#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
 +#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
 +#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
 +
 +#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
 +#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
 +
 +#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
 +
 +#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
 +#define CONTEXT_SERVICE_ACTIVE 0x10000000
 +#define CONTEXT_EXCEPTION_REQUEST 0x40000000
 +#define CONTEXT_EXCEPTION_REPORTING 0x80000000
 +
 +#endif /* !defined(RC_INVOKED) */
 +
 +#define INITIAL_MXCSR                  0x1f80
 +#define INITIAL_FPCSR                  0x027f
 +
 +typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
 +  ULONG64 P1Home;
 +  ULONG64 P2Home;
 +  ULONG64 P3Home;
 +  ULONG64 P4Home;
 +  ULONG64 P5Home;
 +  ULONG64 P6Home;
 +  ULONG ContextFlags;
 +  ULONG MxCsr;
 +  USHORT SegCs;
 +  USHORT SegDs;
 +  USHORT SegEs;
 +  USHORT SegFs;
 +  USHORT SegGs;
 +  USHORT SegSs;
 +  ULONG EFlags;
 +  ULONG64 Dr0;
 +  ULONG64 Dr1;
 +  ULONG64 Dr2;
 +  ULONG64 Dr3;
 +  ULONG64 Dr6;
 +  ULONG64 Dr7;
 +  ULONG64 Rax;
 +  ULONG64 Rcx;
 +  ULONG64 Rdx;
 +  ULONG64 Rbx;
 +  ULONG64 Rsp;
 +  ULONG64 Rbp;
 +  ULONG64 Rsi;
 +  ULONG64 Rdi;
 +  ULONG64 R8;
 +  ULONG64 R9;
 +  ULONG64 R10;
 +  ULONG64 R11;
 +  ULONG64 R12;
 +  ULONG64 R13;
 +  ULONG64 R14;
 +  ULONG64 R15;
 +  ULONG64 Rip;
 +  union {
 +    XMM_SAVE_AREA32 FltSave;
 +    struct {
 +      M128A Header[2];
 +      M128A Legacy[8];
 +      M128A Xmm0;
 +      M128A Xmm1;
 +      M128A Xmm2;
 +      M128A Xmm3;
 +      M128A Xmm4;
 +      M128A Xmm5;
 +      M128A Xmm6;
 +      M128A Xmm7;
 +      M128A Xmm8;
 +      M128A Xmm9;
 +      M128A Xmm10;
 +      M128A Xmm11;
 +      M128A Xmm12;
 +      M128A Xmm13;
 +      M128A Xmm14;
 +      M128A Xmm15;
 +    } DUMMYSTRUCTNAME;
 +  } DUMMYUNIONNAME;
 +  M128A VectorRegister[26];
 +  ULONG64 VectorControl;
 +  ULONG64 DebugControl;
 +  ULONG64 LastBranchToRip;
 +  ULONG64 LastBranchFromRip;
 +  ULONG64 LastExceptionToRip;
 +  ULONG64 LastExceptionFromRip;
 +} CONTEXT;
 +
 +#define PCR_MINOR_VERSION 1
 +#define PCR_MAJOR_VERSION 1
 +
 +typedef struct _KPCR
 +{
 +    _ANONYMOUS_UNION union
 +    {
 +        NT_TIB NtTib;
 +        _ANONYMOUS_STRUCT struct
 +        {
 +            union _KGDTENTRY64 *GdtBase;
 +            struct _KTSS64 *TssBase;
 +            ULONG64 UserRsp;
 +            struct _KPCR *Self;
 +            struct _KPRCB *CurrentPrcb;
 +            PKSPIN_LOCK_QUEUE LockArray;
 +            PVOID Used_Self;
 +        };
 +    };
 +    union _KIDTENTRY64 *IdtBase;
 +    ULONG64 Unused[2];
 +    KIRQL Irql;
 +    UCHAR SecondLevelCacheAssociativity;
 +    UCHAR ObsoleteNumber;
 +    UCHAR Fill0;
 +    ULONG Unused0[3];
 +    USHORT MajorVersion;
 +    USHORT MinorVersion;
 +    ULONG StallScaleFactor;
 +    PVOID Unused1[3];
 +    ULONG KernelReserved[15];
 +    ULONG SecondLevelCacheSize;
 +    ULONG HalReserved[16];
 +    ULONG Unused2;
 +    PVOID KdVersionBlock;
 +    PVOID Unused3;
 +    ULONG PcrAlign1[24];
 +} KPCR, *PKPCR;
 +
 +FORCEINLINE
 +PKPCR
 +KeGetPcr(VOID)
 +{
 +    return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self));
 +}
 +
 +FORCEINLINE
 +ULONG
 +KeGetCurrentProcessorNumber(VOID)
 +{
 +    return (ULONG)__readgsword(0x184);
 +}
 +
 +
 +#define PTI_SHIFT  12L
 +#define PDI_SHIFT  21L
 +#define PPI_SHIFT  30L
 +#define PXI_SHIFT  39L
 +#define PTE_PER_PAGE 512
 +#define PDE_PER_PAGE 512
 +#define PPE_PER_PAGE 512
 +#define PXE_PER_PAGE 512
 +#define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
 +#define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
 +#define PPI_MASK (PPE_PER_PAGE - 1)
 +#define PXI_MASK (PXE_PER_PAGE - 1)
 +
 +#define PXE_BASE    0xFFFFF6FB7DBED000ULL
 +#define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
 +#define PPE_BASE    0xFFFFF6FB7DA00000ULL
 +#define PDE_BASE    0xFFFFF6FB40000000ULL
 +#define PTE_BASE    0xFFFFF68000000000ULL
 +#define PXE_TOP     0xFFFFF6FB7DBEDFFFULL
 +#define PPE_TOP     0xFFFFF6FB7DBFFFFFULL
 +#define PDE_TOP     0xFFFFF6FB7FFFFFFFULL
 +#define PTE_TOP     0xFFFFF6FFFFFFFFFFULL
 +
 +extern NTKERNELAPI PVOID MmHighestUserAddress;
 +extern NTKERNELAPI PVOID MmSystemRangeStart;
 +extern NTKERNELAPI ULONG64 MmUserProbeAddress;
 +
 +#define MM_HIGHEST_USER_ADDRESS           MmHighestUserAddress
 +#define MM_SYSTEM_RANGE_START             MmSystemRangeStart
 +#define MM_USER_PROBE_ADDRESS             MmUserProbeAddress
 +#define MM_LOWEST_USER_ADDRESS   (PVOID)0x10000
 +#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
 +
 +
 +#elif defined(_M_IA64)
 +
 +#elif defined(_M_PPC)
 +
 +
 +#elif defined(_M_MIPS)
 +
 +#elif defined(_M_ARM)
 +#else
 +#error Unknown Architecture
 +#endif
 +
 +/******************************************************************************
 + *                          Executive Functions                               *
 + ******************************************************************************/
 +
 +static __inline PVOID
 +ExAllocateFromZone(
 +  IN PZONE_HEADER Zone)
 +{
 +  if (Zone->FreeList.Next)
 +    Zone->FreeList.Next = Zone->FreeList.Next->Next;
 +  return (PVOID) Zone->FreeList.Next;
 +}
 +
 +static __inline PVOID
 +ExFreeToZone(
 +  IN PZONE_HEADER Zone,
 +  IN PVOID Block)
 +{
 +  ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
 +  Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
 +  return ((PSINGLE_LIST_ENTRY) Block)->Next;
 +}
 +
 +/*
 + * PVOID
 + * ExInterlockedAllocateFromZone(
 + *   IN PZONE_HEADER  Zone,
 + *   IN PKSPIN_LOCK  Lock)
 + */
 +#define ExInterlockedAllocateFromZone(Zone, Lock) \
 +    ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
 +
 +/* PVOID
 + * ExInterlockedFreeToZone(
 + *  IN PZONE_HEADER  Zone,
 + *  IN PVOID  Block,
 + *  IN PKSPIN_LOCK  Lock);
 + */
 +#define ExInterlockedFreeToZone(Zone, Block, Lock) \
 +    ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
 +
 +/*
 + * BOOLEAN
 + * ExIsFullZone(
 + *  IN PZONE_HEADER  Zone)
 + */
 +#define ExIsFullZone(Zone) \
 +  ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
 +
 +/* BOOLEAN
 + * ExIsObjectInFirstZoneSegment(
 + *     IN PZONE_HEADER Zone,
 + *     IN PVOID Object);
 + */
 +#define ExIsObjectInFirstZoneSegment(Zone,Object) \
 +    ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
 +                ((PUCHAR)(Object) <  (PUCHAR)(Zone)->SegmentList.Next + \
 +                         (Zone)->TotalSegmentSize)) )
 +
 +#define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
 +#define ExAcquireResourceShared ExAcquireResourceSharedLite
 +#define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
 +#define ExDeleteResource ExDeleteResourceLite
 +#define ExInitializeResource ExInitializeResourceLite
 +#define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
 +#define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
 +#define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
 +#define ExReleaseResourceForThread ExReleaseResourceForThreadLite
 +
++#ifdef _X86_
++
 +typedef enum _INTERLOCKED_RESULT {
 +  ResultNegative = RESULT_NEGATIVE,
 +  ResultZero = RESULT_ZERO,
 +  ResultPositive = RESULT_POSITIVE
 +} INTERLOCKED_RESULT;
 +
 +NTKERNELAPI
 +INTERLOCKED_RESULT
 +FASTCALL
 +Exfi386InterlockedIncrementLong(
 +  IN OUT LONG volatile *Addend);
 +
 +NTKERNELAPI
 +INTERLOCKED_RESULT
 +FASTCALL
 +Exfi386InterlockedDecrementLong(
 +  IN PLONG  Addend);
 +
 +NTKERNELAPI
 +ULONG
 +FASTCALL
 +Exfi386InterlockedExchangeUlong(
 +  IN PULONG  Target,
 +  IN ULONG  Value);
 +#endif
 +
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +ExExtendZone(
 +  IN OUT PZONE_HEADER Zone,
 +  IN OUT PVOID Segment,
 +  IN ULONG SegmentSize);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +ExInitializeZone(
 +  OUT PZONE_HEADER Zone,
 +  IN ULONG BlockSize,
 +  IN OUT PVOID InitialSegment,
 +  IN ULONG InitialSegmentSize);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +ExInterlockedExtendZone(
 +  IN OUT PZONE_HEADER Zone,
 +  IN OUT PVOID Segment,
 +  IN ULONG SegmentSize,
 +  IN OUT PKSPIN_LOCK Lock);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +ExUuidCreate(
 +  OUT UUID *Uuid);
 +
 +NTKERNELAPI
 +DECLSPEC_NORETURN
 +VOID
 +NTAPI
 +ExRaiseAccessViolation(VOID);
 +
 +NTKERNELAPI
 +DECLSPEC_NORETURN
 +VOID
 +NTAPI
 +ExRaiseDatatypeMisalignment(VOID);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 +
 +
 +/* Hardware Abstraction Layer Functions */
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +
 +#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
 +
 +/* Nothing here */
 +
 +#else /* USE_DMA_MACROS ... */
 +
 +//DECLSPEC_DEPRECATED_DDK
 +NTHALAPI
 +VOID
 +NTAPI
 +IoFreeAdapterChannel(
 +  IN PADAPTER_OBJECT AdapterObject);
 +
 +//DECLSPEC_DEPRECATED_DDK
 +NTHALAPI
 +BOOLEAN
 +NTAPI
 +IoFlushAdapterBuffers(
 +  IN PADAPTER_OBJECT AdapterObject,
 +  IN PMDL Mdl,
 +  IN PVOID MapRegisterBase,
 +  IN PVOID CurrentVa,
 +  IN ULONG Length,
 +  IN BOOLEAN WriteToDevice);
 +
 +//DECLSPEC_DEPRECATED_DDK
 +NTHALAPI
 +VOID
 +NTAPI
 +IoFreeMapRegisters(
 +  IN PADAPTER_OBJECT AdapterObject,
 +  IN PVOID MapRegisterBase,
 +  IN ULONG NumberOfMapRegisters);
 +
 +//DECLSPEC_DEPRECATED_DDK
 +NTHALAPI
 +PVOID
 +NTAPI
 +HalAllocateCommonBuffer(
 +  IN PADAPTER_OBJECT AdapterObject,
 +  IN ULONG Length,
 +  OUT PPHYSICAL_ADDRESS LogicalAddress,
 +  IN BOOLEAN CacheEnabled);
 +
 +//DECLSPEC_DEPRECATED_DDK
 +NTHALAPI
 +VOID
 +NTAPI
 +HalFreeCommonBuffer(
 +  IN PADAPTER_OBJECT AdapterObject,
 +  IN ULONG Length,
 +  IN PHYSICAL_ADDRESS LogicalAddress,
 +  IN PVOID VirtualAddress,
 +  IN BOOLEAN CacheEnabled);
 +
 +//DECLSPEC_DEPRECATED_DDK
 +NTHALAPI
 +ULONG
 +NTAPI
 +HalReadDmaCounter(
 +  IN PADAPTER_OBJECT AdapterObject);
 +
 +NTHALAPI
 +NTSTATUS
 +NTAPI
 +HalAllocateAdapterChannel(
 +  IN PADAPTER_OBJECT  AdapterObject,
 +  IN PWAIT_CONTEXT_BLOCK  Wcb,
 +  IN ULONG  NumberOfMapRegisters,
 +  IN PDRIVER_CONTROL  ExecutionRoutine);
 +
 +#endif /* USE_DMA_MACROS ... */
 +
 +#if !defined(NO_LEGACY_DRIVERS)
 +NTHALAPI
 +NTSTATUS
 +NTAPI
 +HalAssignSlotResources(
 +  IN PUNICODE_STRING RegistryPath,
 +  IN PUNICODE_STRING DriverClassName,
 +  IN PDRIVER_OBJECT DriverObject,
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN INTERFACE_TYPE BusType,
 +  IN ULONG BusNumber,
 +  IN ULONG SlotNumber,
 +  IN OUT PCM_RESOURCE_LIST *AllocatedResources);
 +
 +NTHALAPI
 +ULONG
 +NTAPI
 +HalGetInterruptVector(
 +  IN INTERFACE_TYPE InterfaceType,
 +  IN ULONG BusNumber,
 +  IN ULONG BusInterruptLevel,
 +  IN ULONG BusInterruptVector,
 +  OUT PKIRQL Irql,
 +  OUT PKAFFINITY Affinity);
 +
 +NTHALAPI
 +ULONG
 +NTAPI
 +HalSetBusData(
 +  IN BUS_DATA_TYPE BusDataType,
 +  IN ULONG BusNumber,
 +  IN ULONG SlotNumber,
 +  IN PVOID Buffer,
 +  IN ULONG Length);
 +
 +NTHALAPI
 +ULONG
 +NTAPI
 +HalGetBusData(
 +  IN BUS_DATA_TYPE BusDataType,
 +  IN ULONG BusNumber,
 +  IN ULONG SlotNumber,
 +  OUT PVOID Buffer,
 +  IN ULONG Length);
 +
 +NTHALAPI
 +BOOLEAN
 +NTAPI
 +HalMakeBeep(
 +  IN ULONG Frequency);
 +#endif /* !defined(NO_LEGACY_DRIVERS) */
 +
 +NTHALAPI
 +PADAPTER_OBJECT
 +NTAPI
 +HalGetAdapter(
 +  IN PDEVICE_DESCRIPTION DeviceDescription,
 +  OUT PULONG NumberOfMapRegisters);
 +
 +VOID
 +NTAPI
 +HalPutDmaAdapter(
 +  IN PADAPTER_OBJECT DmaAdapter);
 +
 +NTHALAPI
 +VOID
 +NTAPI
 +HalAcquireDisplayOwnership(
 +  IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
 +
 +NTHALAPI
 +ULONG
 +NTAPI
 +HalGetBusDataByOffset(
 +  IN BUS_DATA_TYPE BusDataType,
 +  IN ULONG BusNumber,
 +  IN ULONG SlotNumber,
 +  OUT PVOID Buffer,
 +  IN ULONG Offset,
 +  IN ULONG Length);
 +
 +NTHALAPI
 +ULONG
 +NTAPI
 +HalSetBusDataByOffset(
 +  IN BUS_DATA_TYPE BusDataType,
 +  IN ULONG BusNumber,
 +  IN ULONG SlotNumber,
 +  IN PVOID Buffer,
 +  IN ULONG Offset,
 +  IN ULONG Length);
 +
 +NTHALAPI
 +BOOLEAN
 +NTAPI
 +HalTranslateBusAddress(
 +  IN INTERFACE_TYPE InterfaceType,
 +  IN ULONG BusNumber,
 +  IN PHYSICAL_ADDRESS BusAddress,
 +  IN OUT PULONG AddressSpace,
 +  OUT PPHYSICAL_ADDRESS TranslatedAddress);
 +
 +NTHALAPI
 +PVOID
 +NTAPI
 +HalAllocateCrashDumpRegisters(
 +  IN PADAPTER_OBJECT AdapterObject,
 +  IN OUT PULONG NumberOfMapRegisters);
 +
 +NTSTATUS
 +NTAPI
 +HalGetScatterGatherList(
 +  IN PADAPTER_OBJECT DmaAdapter,
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN PMDL Mdl,
 +  IN PVOID CurrentVa,
 +  IN ULONG Length,
 +  IN PDRIVER_LIST_CONTROL ExecutionRoutine,
 +  IN PVOID Context,
 +  IN BOOLEAN WriteToDevice);
 +
 +VOID
 +NTAPI
 +HalPutScatterGatherList(
 +  IN PADAPTER_OBJECT DmaAdapter,
 +  IN PSCATTER_GATHER_LIST ScatterGather,
 +  IN BOOLEAN WriteToDevice);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WINXP)
 +NTKERNELAPI
 +VOID
 +FASTCALL
 +HalExamineMBR(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG SectorSize,
 +  IN ULONG MBRTypeIdentifier,
 +  OUT PVOID *Buffer);
 +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +
 +NTSTATUS
 +NTAPI
 +HalAllocateHardwareCounters(
 +  IN PGROUP_AFFINITY GroupAffinty,
 +  IN ULONG GroupCount,
 +  IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList,
 +  OUT PHANDLE CounterSetHandle);
 +
 +NTSTATUS
 +NTAPI
 +HalFreeHardwareCounters(
 +  IN HANDLE CounterSetHandle);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 +
 +#if defined(_IA64_)
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +NTHALAPI
 +ULONG
 +NTAPI
 +HalGetDmaAlignmentRequirement(VOID);
 +#endif
 +#endif /* defined(_IA64_) */
 +
 +#if defined(_M_IX86) || defined(_M_AMD64)
 +#define HalGetDmaAlignmentRequirement() 1L
 +#endif
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +
 +typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR *PWHEA_ERROR_SOURCE_DESCRIPTOR;
 +typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
 +
 +NTHALAPI
 +VOID
 +NTAPI
 +HalBugCheckSystem(
 +  IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource,
 +  IN PWHEA_ERROR_RECORD ErrorRecord);
 +
 +#else
 +
 +typedef struct _WHEA_ERROR_RECORD *PWHEA_ERROR_RECORD;
 +
 +NTHALAPI
 +VOID
 +NTAPI
 +HalBugCheckSystem(
 +  IN PWHEA_ERROR_RECORD ErrorRecord);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 +
 +/******************************************************************************
 + *                         I/O Manager Functions                              *
 + ******************************************************************************/
 +
 +/*
 + * VOID IoAssignArcName(
 + *   IN PUNICODE_STRING  ArcName,
 + *   IN PUNICODE_STRING  DeviceName);
 + */
 +#define IoAssignArcName(_ArcName, _DeviceName) ( \
 +  IoCreateSymbolicLink((_ArcName), (_DeviceName)))
 +
 +/*
 + * VOID
 + * IoDeassignArcName(
 + *   IN PUNICODE_STRING  ArcName)
 + */
 +#define IoDeassignArcName IoDeleteSymbolicLink
 +
 +VOID
 +FORCEINLINE
 +NTAPI
 +IoInitializeDriverCreateContext(
 +  PIO_DRIVER_CREATE_CONTEXT DriverContext)
 +{
 +  RtlZeroMemory(DriverContext, sizeof(IO_DRIVER_CREATE_CONTEXT));
 +  DriverContext->Size = sizeof(IO_DRIVER_CREATE_CONTEXT);
 +}
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +
 +#if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoAllocateAdapterChannel(
 +  IN PADAPTER_OBJECT AdapterObject,
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG NumberOfMapRegisters,
 +  IN PDRIVER_CONTROL ExecutionRoutine,
 +  IN PVOID Context);
 +#endif
 +
 +#if !defined(DMA_MACROS_DEFINED)
 +//DECLSPEC_DEPRECATED_DDK
 +NTHALAPI
 +PHYSICAL_ADDRESS
 +NTAPI
 +IoMapTransfer(
 +  IN PADAPTER_OBJECT AdapterObject,
 +  IN PMDL Mdl,
 +  IN PVOID MapRegisterBase,
 +  IN PVOID CurrentVa,
 +  IN OUT PULONG Length,
 +  IN BOOLEAN WriteToDevice);
 +#endif
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +IoAllocateController(
 +  IN PCONTROLLER_OBJECT ControllerObject,
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN PDRIVER_CONTROL ExecutionRoutine,
 +  IN PVOID Context OPTIONAL);
 +
 +NTKERNELAPI
 +PCONTROLLER_OBJECT
 +NTAPI
 +IoCreateController(
 +  IN ULONG Size);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +IoDeleteController(
 +  IN PCONTROLLER_OBJECT ControllerObject);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +IoFreeController(
 +  IN PCONTROLLER_OBJECT ControllerObject);
 +
 +NTKERNELAPI
 +PCONFIGURATION_INFORMATION
 +NTAPI
 +IoGetConfigurationInformation(VOID);
 +
 +NTKERNELAPI
 +PDEVICE_OBJECT
 +NTAPI
 +IoGetDeviceToVerify(
 +  IN PETHREAD Thread);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +IoCancelFileOpen(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN PFILE_OBJECT FileObject);
 +
 +NTKERNELAPI
 +PGENERIC_MAPPING
 +NTAPI
 +IoGetFileObjectGenericMapping(VOID);
 +
 +NTKERNELAPI
 +PIRP
 +NTAPI
 +IoMakeAssociatedIrp(
 +  IN PIRP Irp,
 +  IN CCHAR StackSize);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoQueryDeviceDescription(
 +  IN PINTERFACE_TYPE BusType OPTIONAL,
 +  IN PULONG BusNumber OPTIONAL,
 +  IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
 +  IN PULONG ControllerNumber OPTIONAL,
 +  IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
 +  IN PULONG PeripheralNumber OPTIONAL,
 +  IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
 +  IN OUT PVOID Context OPTIONAL);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +IoRaiseHardError(
 +  IN PIRP Irp,
 +  IN PVPB Vpb OPTIONAL,
 +  IN PDEVICE_OBJECT RealDeviceObject);
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +IoRaiseInformationalHardError(
 +  IN NTSTATUS ErrorStatus,
 +  IN PUNICODE_STRING String OPTIONAL,
 +  IN PKTHREAD Thread OPTIONAL);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +IoRegisterBootDriverReinitialization(
 +  IN PDRIVER_OBJECT DriverObject,
 +  IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
 +  IN PVOID Context OPTIONAL);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +IoRegisterDriverReinitialization(
 +  IN PDRIVER_OBJECT DriverObject,
 +  IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
 +  IN PVOID Context OPTIONAL);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoAttachDeviceByPointer(
 +  IN PDEVICE_OBJECT SourceDevice,
 +  IN PDEVICE_OBJECT TargetDevice);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoReportDetectedDevice(
 +  IN PDRIVER_OBJECT DriverObject,
 +  IN INTERFACE_TYPE LegacyBusType,
 +  IN ULONG BusNumber,
 +  IN ULONG SlotNumber,
 +  IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
 +  IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
 +  IN BOOLEAN ResourceAssigned,
 +  IN OUT PDEVICE_OBJECT *DeviceObject OPTIONAL);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoReportResourceForDetection(
 +  IN PDRIVER_OBJECT DriverObject,
 +  IN PCM_RESOURCE_LIST DriverList OPTIONAL,
 +  IN ULONG DriverListSize OPTIONAL,
 +  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
 +  IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
 +  IN ULONG DeviceListSize OPTIONAL,
 +  OUT PBOOLEAN ConflictDetected);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoReportResourceUsage(
 +  IN PUNICODE_STRING DriverClassName OPTIONAL,
 +  IN PDRIVER_OBJECT DriverObject,
 +  IN PCM_RESOURCE_LIST DriverList OPTIONAL,
 +  IN ULONG DriverListSize OPTIONAL,
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
 +  IN ULONG DeviceListSize OPTIONAL,
 +  IN BOOLEAN OverrideConflict,
 +  OUT PBOOLEAN ConflictDetected);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +IoSetHardErrorOrVerifyDevice(
 +  IN PIRP Irp,
 +  IN PDEVICE_OBJECT DeviceObject);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoAssignResources(
 +  IN PUNICODE_STRING RegistryPath,
 +  IN PUNICODE_STRING DriverClassName OPTIONAL,
 +  IN PDRIVER_OBJECT DriverObject,
 +  IN PDEVICE_OBJECT DeviceObject OPTIONAL,
 +  IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
 +  IN OUT PCM_RESOURCE_LIST *AllocatedResources);
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +IoSetThreadHardErrorMode(
 +  IN BOOLEAN EnableHardErrors);
 +
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +IoIsFileOriginRemote(
 +  IN PFILE_OBJECT FileObject);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoSetFileOrigin(
 +  IN PFILE_OBJECT FileObject,
 +  IN BOOLEAN Remote);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2KSP3) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WINXP)
 +
 +NTKERNELAPI
 +NTSTATUS
 +FASTCALL
 +IoReadPartitionTable(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG SectorSize,
 +  IN BOOLEAN ReturnRecognizedPartitions,
 +  OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
 +
 +NTKERNELAPI
 +NTSTATUS
 +FASTCALL
 +IoSetPartitionInformation(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG SectorSize,
 +  IN ULONG PartitionNumber,
 +  IN ULONG PartitionType);
 +
 +NTKERNELAPI
 +NTSTATUS
 +FASTCALL
 +IoWritePartitionTable(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG SectorSize,
 +  IN ULONG SectorsPerTrack,
 +  IN ULONG NumberOfHeads,
 +  IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoCreateDisk(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN struct _CREATE_DISK* Disk OPTIONAL);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoReadDiskSignature(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG BytesPerSector,
 +  OUT PDISK_SIGNATURE Signature);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoReadPartitionTableEx(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  OUT struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoSetPartitionInformationEx(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN ULONG PartitionNumber,
 +  IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoSetSystemPartition(
 +  IN PUNICODE_STRING VolumeNameString);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoVerifyPartitionTable(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN BOOLEAN FixErrors);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoVolumeDeviceToDosName(
 +  IN PVOID VolumeDeviceObject,
 +  OUT PUNICODE_STRING DosName);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoWritePartitionTableEx(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoCreateFileSpecifyDeviceObjectHint(
 +  OUT PHANDLE FileHandle,
 +  IN ACCESS_MASK DesiredAccess,
 +  IN POBJECT_ATTRIBUTES ObjectAttributes,
 +  OUT PIO_STATUS_BLOCK IoStatusBlock,
 +  IN PLARGE_INTEGER AllocationSize OPTIONAL,
 +  IN ULONG FileAttributes,
 +  IN ULONG ShareAccess,
 +  IN ULONG Disposition,
 +  IN ULONG CreateOptions,
 +  IN PVOID EaBuffer OPTIONAL,
 +  IN ULONG EaLength,
 +  IN CREATE_FILE_TYPE CreateFileType,
 +  IN PVOID InternalParameters OPTIONAL,
 +  IN ULONG Options,
 +  IN PVOID DeviceObject OPTIONAL);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoAttachDeviceToDeviceStackSafe(
 +  IN PDEVICE_OBJECT SourceDevice,
 +  IN PDEVICE_OBJECT TargetDevice,
 +  OUT PDEVICE_OBJECT *AttachedToDeviceObject);
 +
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WS03)
 +NTKERNELAPI
 +IO_PAGING_PRIORITY
 +FASTCALL
 +IoGetPagingIoPriority(
 +  IN PIRP Irp);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
 +#if (NTDDI_VERSION >= NTDDI_WS03SP1)
 +
 +BOOLEAN
 +NTAPI
 +IoTranslateBusAddress(
 +  IN INTERFACE_TYPE InterfaceType,
 +  IN ULONG BusNumber,
 +  IN PHYSICAL_ADDRESS BusAddress,
 +  IN OUT PULONG AddressSpace,
 +  OUT PPHYSICAL_ADDRESS TranslatedAddress);
 +#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
 +
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoUpdateDiskGeometry(
 +  IN PDEVICE_OBJECT DeviceObject,
 +  IN struct _DISK_GEOMETRY_EX* OldDiskGeometry,
 +  IN struct _DISK_GEOMETRY_EX* NewDiskGeometry);
 +
 +PTXN_PARAMETER_BLOCK
 +NTAPI
 +IoGetTransactionParameterBlock(
 +  IN PFILE_OBJECT FileObject);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +IoCreateFileEx(
 +  OUT PHANDLE FileHandle,
 +  IN ACCESS_MASK DesiredAccess,
 +  IN POBJECT_ATTRIBUTES ObjectAttributes,
 +  OUT PIO_STATUS_BLOCK IoStatusBlock,
 +  IN PLARGE_INTEGER AllocationSize OPTIONAL,
 +  IN ULONG FileAttributes,
 +  IN ULONG ShareAccess,
 +  IN ULONG Disposition,
 +  IN ULONG CreateOptions,
 +  IN PVOID EaBuffer OPTIONAL,
 +  IN ULONG EaLength,
 +  IN CREATE_FILE_TYPE CreateFileType,
 +  IN PVOID InternalParameters OPTIONAL,
 +  IN ULONG Options,
 +  IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL);
 +
 +NTSTATUS
 +NTAPI
 +IoSetIrpExtraCreateParameter(
 +  IN OUT PIRP Irp,
 +  IN struct _ECP_LIST *ExtraCreateParameter);
 +
 +VOID
 +NTAPI
 +IoClearIrpExtraCreateParameter(
 +  IN OUT PIRP Irp);
 +
 +NTSTATUS
 +NTAPI
 +IoGetIrpExtraCreateParameter(
 +  IN PIRP Irp,
 +  OUT struct _ECP_LIST **ExtraCreateParameter OPTIONAL);
 +
 +BOOLEAN
 +NTAPI
 +IoIsFileObjectIgnoringSharing(
 +  IN PFILE_OBJECT FileObject);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +
 +NTSTATUS
 +NTAPI
 +IoSetFileObjectIgnoreSharing(
 +  IN PFILE_OBJECT FileObject);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 +
 +/******************************************************************************
 + *                          Kernel Debugger Functions                         *
 + ******************************************************************************/
 +NTSYSAPI
 +ULONG
 +NTAPI
 +DbgPrompt(
 +  IN PCCH Prompt,
 +  OUT PCH Response,
 +  IN ULONG MaximumResponseLength);
 +
 +/******************************************************************************
 + *                              Kernel Functions                              *
 + ******************************************************************************/
 +
 +NTKERNELAPI
 +VOID
 +FASTCALL
 +KeInvalidateRangeAllCaches(
 +  IN PVOID BaseAddress,
 +  IN ULONG Length);
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +KeSetImportanceDpc(
 +  IN OUT PRKDPC Dpc,
 +  IN KDPC_IMPORTANCE Importance);
 +
 +NTKERNELAPI
 +LONG
 +NTAPI
 +KePulseEvent(
 +  IN OUT PRKEVENT Event,
 +  IN KPRIORITY Increment,
 +  IN BOOLEAN Wait);
 +
 +NTKERNELAPI
 +LONG
 +NTAPI
 +KeSetBasePriorityThread(
 +  IN OUT PRKTHREAD Thread,
 +  IN LONG Increment);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +KeEnterCriticalRegion(VOID);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +KeLeaveCriticalRegion(VOID);
 +
 +NTKERNELAPI
 +DECLSPEC_NORETURN
 +VOID
 +NTAPI
 +KeBugCheck(
 +  IN ULONG BugCheckCode);
 +#if defined(SINGLE_GROUP_LEGACY_API)
 +
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +KeSetTargetProcessorDpc(
 +  IN OUT PRKDPC Dpc,
 +  IN CCHAR Number);
 +
 +NTKERNELAPI
 +KAFFINITY
 +NTAPI
 +KeQueryActiveProcessors(VOID);
 +#endif /* defined(SINGLE_GROUP_LEGACY_API) */
 +
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WINXP)
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +KeAreApcsDisabled(VOID);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WS03)
 +
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +KeInvalidateAllCaches(VOID);
 +#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
 +#if (NTDDI_VERSION >= NTDDI_WS03SP1)
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +KeExpandKernelStackAndCallout(
 +  IN PEXPAND_STACK_CALLOUT Callout,
 +  IN PVOID Parameter OPTIONAL,
 +  IN SIZE_T Size);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +KeEnterGuardedRegion(VOID);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +KeLeaveGuardedRegion(VOID);
 +#endif /* (NTDDI_VERSION >= NTDDI_WS03SP1) */
 +
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +#if defined(SINGLE_GROUP_LEGACY_API)
 +
 +NTKERNELAPI
 +ULONG
 +NTAPI
 +KeQueryActiveProcessorCount(
 +  OUT PKAFFINITY ActiveProcessors OPTIONAL);
 +
 +NTKERNELAPI
 +ULONG
 +NTAPI
 +KeQueryMaximumProcessorCount(VOID);
 +#endif /* SINGLE_GROUP_LEGACY_API */
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +
 +NTKERNELAPI
 +ULONG
 +NTAPI
 +KeQueryActiveProcessorCountEx(
 +  IN USHORT GroupNumber);
 +
 +NTKERNELAPI
 +ULONG
 +NTAPI
 +KeQueryMaximumProcessorCountEx(
 +  IN USHORT GroupNumber);
 +
 +NTKERNELAPI
 +USHORT
 +NTAPI
 +KeQueryActiveGroupCount(VOID);
 +
 +NTKERNELAPI
 +USHORT
 +NTAPI
 +KeQueryMaximumGroupCount(VOID);
 +
 +NTKERNELAPI
 +KAFFINITY
 +NTAPI
 +KeQueryGroupAffinity(
 +  IN USHORT GroupNumber);
 +
 +NTKERNELAPI
 +ULONG
 +NTAPI
 +KeGetCurrentProcessorNumberEx(
 +  OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +KeQueryNodeActiveAffinity(
 +  IN USHORT NodeNumber,
 +  OUT PGROUP_AFFINITY Affinity OPTIONAL,
 +  OUT PUSHORT Count OPTIONAL);
 +
 +NTKERNELAPI
 +USHORT
 +NTAPI
 +KeQueryNodeMaximumProcessorCount(
 +  IN USHORT NodeNumber);
 +
 +NTKERNELAPI
 +USHORT
 +NTAPI
 +KeQueryHighestNodeNumber(VOID);
 +
 +NTKERNELAPI
 +USHORT
 +NTAPI
 +KeGetCurrentNodeNumber(VOID);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +KeQueryLogicalProcessorRelationship(
 +  IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL,
 +  IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType,
 +  OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL,
 +  IN OUT PULONG Length);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +KeSetHardwareCounterConfiguration(
 +  IN PHARDWARE_COUNTER CounterArray,
 +  IN ULONG Count);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +KeQueryHardwareCounterConfiguration(
 +  OUT PHARDWARE_COUNTER CounterArray,
 +  IN ULONG MaximumCount,
 +  OUT PULONG Count);
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 +
 +/******************************************************************************
 + *                       Memory manager Functions                             *
 + ******************************************************************************/
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +
 +NTKERNELAPI
 +PPHYSICAL_MEMORY_RANGE
 +NTAPI
 +MmGetPhysicalMemoryRanges(VOID);
 +
 +NTKERNELAPI
 +PHYSICAL_ADDRESS
 +NTAPI
 +MmGetPhysicalAddress(
 +  IN PVOID BaseAddress);
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +MmIsNonPagedSystemAddressValid(
 +  IN PVOID VirtualAddress);
 +
 +NTKERNELAPI
 +PVOID
 +NTAPI
 +MmAllocateNonCachedMemory(
 +  IN SIZE_T NumberOfBytes);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +MmFreeNonCachedMemory(
 +  IN PVOID BaseAddress,
 +  IN SIZE_T NumberOfBytes);
 +
 +NTKERNELAPI
 +PVOID
 +NTAPI
 +MmGetVirtualForPhysical(
 +  IN PHYSICAL_ADDRESS PhysicalAddress);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmMapUserAddressesToPage(
 +  IN PVOID BaseAddress,
 +  IN SIZE_T NumberOfBytes,
 +  IN PVOID PageAddress);
 +
 +NTKERNELAPI
 +PVOID
 +NTAPI
 +MmMapVideoDisplay(
 +  IN PHYSICAL_ADDRESS PhysicalAddress,
 +  IN SIZE_T NumberOfBytes,
 +  IN MEMORY_CACHING_TYPE CacheType);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmMapViewInSessionSpace(
 +  IN PVOID Section,
 +  OUT PVOID *MappedBase,
 +  IN OUT PSIZE_T ViewSize);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmMapViewInSystemSpace(
 +  IN PVOID Section,
 +  OUT PVOID *MappedBase,
 +  IN OUT PSIZE_T ViewSize);
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +MmIsAddressValid(
 +  IN PVOID VirtualAddress);
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +MmIsThisAnNtAsSystem(VOID);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +MmLockPagableSectionByHandle(
 +  IN PVOID ImageSectionHandle);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmUnmapViewInSessionSpace(
 +  IN PVOID MappedBase);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmUnmapViewInSystemSpace(
 +  IN PVOID MappedBase);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +MmUnsecureVirtualMemory(
 +  IN HANDLE SecureHandle);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmRemovePhysicalMemory(
 +  IN PPHYSICAL_ADDRESS StartAddress,
 +  IN OUT PLARGE_INTEGER NumberOfBytes);
 +
 +NTKERNELAPI
 +HANDLE
 +NTAPI
 +MmSecureVirtualMemory(
 +  IN PVOID Address,
 +  IN SIZE_T Size,
 +  IN ULONG ProbeMode);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +MmUnmapVideoDisplay(
 +  IN PVOID BaseAddress,
 +  IN SIZE_T NumberOfBytes);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmAddPhysicalMemory(
 +  IN PPHYSICAL_ADDRESS StartAddress,
 +  IN OUT PLARGE_INTEGER NumberOfBytes);
 +
 +NTKERNELAPI
 +PVOID
 +NTAPI
 +MmAllocateContiguousMemory(
 +  IN SIZE_T NumberOfBytes,
 +  IN PHYSICAL_ADDRESS HighestAcceptableAddress);
 +
 +NTKERNELAPI
 +PVOID
 +NTAPI
 +MmAllocateContiguousMemorySpecifyCache(
 +  IN SIZE_T NumberOfBytes,
 +  IN PHYSICAL_ADDRESS LowestAcceptableAddress,
 +  IN PHYSICAL_ADDRESS HighestAcceptableAddress,
 +  IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
 +  IN MEMORY_CACHING_TYPE CacheType);
 +
 +NTKERNELAPI
 +PVOID
 +NTAPI
 +MmAllocateContiguousMemorySpecifyCacheNode(
 +  IN SIZE_T NumberOfBytes,
 +  IN PHYSICAL_ADDRESS LowestAcceptableAddress,
 +  IN PHYSICAL_ADDRESS HighestAcceptableAddress,
 +  IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL,
 +  IN MEMORY_CACHING_TYPE CacheType,
 +  IN NODE_REQUIREMENT PreferredNode);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +MmFreeContiguousMemory(
 +  IN PVOID BaseAddress);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +MmFreeContiguousMemorySpecifyCache(
 +  IN PVOID BaseAddress,
 +  IN SIZE_T NumberOfBytes,
 +  IN MEMORY_CACHING_TYPE CacheType);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 +
 +
 +
 +#if (NTDDI_VERSION >= NTDDI_WS03)
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmCreateMirror(VOID);
 +#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
 +
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +NTSTATUS
 +NTAPI
 +MmRotatePhysicalView(
 +  IN PVOID VirtualAddress,
 +  IN OUT PSIZE_T NumberOfBytes,
 +  IN PMDLX NewMdl OPTIONAL,
 +  IN MM_ROTATE_DIRECTION Direction,
 +  IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction,
 +  IN PVOID Context OPTIONAL);
 +#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 +
 +/******************************************************************************
 + *                          Process Manager Functions                         *
 + ******************************************************************************/
 +
 +NTSYSCALLAPI
 +NTSTATUS
 +NTAPI
 +NtOpenProcess(
 +  OUT PHANDLE ProcessHandle,
 +  IN ACCESS_MASK DesiredAccess,
 +  IN POBJECT_ATTRIBUTES ObjectAttributes,
 +  IN PCLIENT_ID ClientId OPTIONAL);
 +
 +NTSYSCALLAPI
 +NTSTATUS
 +NTAPI
 +NtQueryInformationProcess(
 +  IN HANDLE ProcessHandle,
 +  IN PROCESSINFOCLASS ProcessInformationClass,
 +  OUT PVOID ProcessInformation OPTIONAL,
 +  IN ULONG ProcessInformationLength,
 +  OUT PULONG ReturnLength OPTIONAL);
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +PsSetCreateProcessNotifyRoutine(
 +  IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
 +  IN BOOLEAN Remove);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +PsSetCreateThreadNotifyRoutine(
 +  IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +PsSetLoadImageNotifyRoutine(
 +  IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
 +
 +NTKERNELAPI
 +HANDLE
 +NTAPI
 +PsGetCurrentProcessId(VOID);
 +
 +NTKERNELAPI
 +HANDLE
 +NTAPI
 +PsGetCurrentThreadId(VOID);
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +PsGetVersion(
 +  OUT PULONG MajorVersion OPTIONAL,
 +  OUT PULONG MinorVersion OPTIONAL,
 +  OUT PULONG BuildNumber OPTIONAL,
 +  OUT PUNICODE_STRING CSDVersion OPTIONAL);
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 +#if (NTDDI_VERSION >= NTDDI_WINXP)
 +
 +NTKERNELAPI
 +HANDLE
 +NTAPI
 +PsGetProcessId(
 +  IN PEPROCESS Process);
 +
 +NTKERNELAPI
 +HANDLE
 +NTAPI
 +PsGetThreadId(
 +  IN PETHREAD Thread);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +PsRemoveCreateThreadNotifyRoutine(
 +  IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +PsRemoveLoadImageNotifyRoutine(
 +  IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
 +
 +NTKERNELAPI
 +LONGLONG
 +NTAPI
 +PsGetProcessCreateTimeQuadPart(
 +  IN PEPROCESS Process);
 +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WS03)
 +NTKERNELAPI
 +HANDLE
 +NTAPI
 +PsGetThreadProcessId(
 +  IN PETHREAD Thread);
 +#endif /* (NTDDI_VERSION >= NTDDI_WS03) */
 +
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +PsSetCurrentThreadPrefetching(
 +  IN BOOLEAN Prefetching);
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +PsIsCurrentThreadPrefetching(VOID);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 +
 +#if (NTDDI_VERSION >= NTDDI_VISTASP1)
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +PsSetCreateProcessNotifyRoutineEx(
 +  IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine,
 +  IN BOOLEAN Remove);
 +#endif /* (NTDDI_VERSION >= NTDDI_VISTASP1) */
 +/******************************************************************************
 + *                         Runtime Library Functions                          *
 + ******************************************************************************/
 +
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +
 +
 +#ifndef RTL_USE_AVL_TABLES
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlInitializeGenericTable(
 +  OUT PRTL_GENERIC_TABLE Table,
 +  IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine,
 +  IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine,
 +  IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine,
 +  IN PVOID TableContext OPTIONAL);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlInsertElementGenericTable(
 +  IN PRTL_GENERIC_TABLE Table,
 +  IN PVOID Buffer,
 +  IN CLONG BufferSize,
 +  OUT PBOOLEAN NewElement OPTIONAL);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlInsertElementGenericTableFull(
 +  IN PRTL_GENERIC_TABLE Table,
 +  IN PVOID Buffer,
 +  IN CLONG BufferSize,
 +  OUT PBOOLEAN NewElement OPTIONAL,
 +  IN PVOID NodeOrParent,
 +  IN TABLE_SEARCH_RESULT SearchResult);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlDeleteElementGenericTable(
 +  IN PRTL_GENERIC_TABLE Table,
 +  IN PVOID Buffer);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlLookupElementGenericTable(
 +  IN PRTL_GENERIC_TABLE Table,
 +  IN PVOID Buffer);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlLookupElementGenericTableFull(
 +  IN PRTL_GENERIC_TABLE Table,
 +  IN PVOID Buffer,
 +  OUT PVOID *NodeOrParent,
 +  OUT TABLE_SEARCH_RESULT *SearchResult);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlEnumerateGenericTable(
 +  IN PRTL_GENERIC_TABLE Table,
 +  IN BOOLEAN Restart);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlEnumerateGenericTableWithoutSplaying(
 +  IN PRTL_GENERIC_TABLE Table,
 +  IN OUT PVOID *RestartKey);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlGetElementGenericTable(
 +  IN PRTL_GENERIC_TABLE Table,
 +  IN ULONG I);
 +
 +NTSYSAPI
 +ULONG
 +NTAPI
 +RtlNumberGenericTableElements(
 +  IN PRTL_GENERIC_TABLE Table);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlIsGenericTableEmpty(
 +  IN PRTL_GENERIC_TABLE Table);
 +
 +#endif /* !RTL_USE_AVL_TABLES */
 +
 +#define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT     8
 +
 +NTSYSAPI
 +PRTL_SPLAY_LINKS
 +NTAPI
 +RtlSplay(
 +  IN OUT PRTL_SPLAY_LINKS Links);
 +
 +NTSYSAPI
 +PRTL_SPLAY_LINKS
 +NTAPI
 +RtlDelete(
 +  IN PRTL_SPLAY_LINKS Links);
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlDeleteNoSplay(
 +  IN PRTL_SPLAY_LINKS Links,
 +  IN OUT PRTL_SPLAY_LINKS *Root);
 +
 +NTSYSAPI
 +PRTL_SPLAY_LINKS
 +NTAPI
 +RtlSubtreeSuccessor(
 +  IN PRTL_SPLAY_LINKS Links);
 +
 +NTSYSAPI
 +PRTL_SPLAY_LINKS
 +NTAPI
 +RtlSubtreePredecessor(
 +  IN PRTL_SPLAY_LINKS Links);
 +
 +NTSYSAPI
 +PRTL_SPLAY_LINKS
 +NTAPI
 +RtlRealSuccessor(
 +  IN PRTL_SPLAY_LINKS Links);
 +
 +NTSYSAPI
 +PRTL_SPLAY_LINKS
 +NTAPI
 +RtlRealPredecessor(
 +  IN PRTL_SPLAY_LINKS Links);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlPrefixUnicodeString(
 +  IN PCUNICODE_STRING  String1,
 +  IN PCUNICODE_STRING  String2,
 +  IN BOOLEAN  CaseInSensitive);
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlUpperString(
 +  IN OUT PSTRING  DestinationString,
 +  IN const PSTRING  SourceString);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +RtlUpcaseUnicodeString(
 +  IN OUT PUNICODE_STRING DestinationString,
 +  IN PCUNICODE_STRING  SourceString,
 +  IN BOOLEAN  AllocateDestinationString);
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlMapGenericMask(
 +  IN OUT PACCESS_MASK AccessMask,
 +  IN PGENERIC_MAPPING GenericMapping);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +RtlVolumeDeviceToDosName(
 +  IN PVOID VolumeDeviceObject,
 +  OUT PUNICODE_STRING DosName);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +RtlGetVersion(
 +  IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +RtlVerifyVersionInfo(
 +  IN PRTL_OSVERSIONINFOEXW VersionInfo,
 +  IN ULONG TypeMask,
 +  IN ULONGLONG ConditionMask);
 +
 +NTSYSAPI
 +LONG
 +NTAPI
 +RtlCompareString(
 +  IN const PSTRING String1,
 +  IN const PSTRING String2,
 +  IN BOOLEAN CaseInSensitive);
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlCopyString(
 +  OUT PSTRING DestinationString,
 +  IN const PSTRING SourceString OPTIONAL);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlEqualString(
 +  IN const PSTRING String1,
 +  IN const PSTRING String2,
 +  IN BOOLEAN CaseInSensitive);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +RtlCharToInteger(
 +  IN PCSZ String,
 +  IN ULONG Base OPTIONAL,
 +  OUT PULONG Value);
 +
 +NTSYSAPI
 +CHAR
 +NTAPI
 +RtlUpperChar(
 +  IN CHAR Character);
 +
 +NTSYSAPI
 +ULONG
 +NTAPI
 +RtlWalkFrameChain(
 +  OUT PVOID *Callers,
 +  IN ULONG Count,
 +  IN ULONG Flags);
 +
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 +
 +
 +#if (NTDDI_VERSION >= NTDDI_WINXP)
 +
 +
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlInitializeGenericTableAvl(
 +  OUT PRTL_AVL_TABLE Table,
 +  IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
 +  IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
 +  IN PRTL_AVL_FREE_ROUTINE FreeRoutine,
 +  IN PVOID TableContext OPTIONAL);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlInsertElementGenericTableAvl(
 +  IN PRTL_AVL_TABLE Table,
 +  IN PVOID Buffer,
 +  IN CLONG BufferSize,
 +  OUT PBOOLEAN NewElement OPTIONAL);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlInsertElementGenericTableFullAvl(
 +  IN PRTL_AVL_TABLE Table,
 +  IN PVOID Buffer,
 +  IN CLONG BufferSize,
 +  OUT PBOOLEAN NewElement OPTIONAL,
 +  IN PVOID NodeOrParent,
 +  IN TABLE_SEARCH_RESULT SearchResult);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlDeleteElementGenericTableAvl(
 +  IN PRTL_AVL_TABLE Table,
 +  IN PVOID Buffer);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlLookupElementGenericTableAvl(
 +  IN PRTL_AVL_TABLE Table,
 +  IN PVOID Buffer);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlLookupElementGenericTableFullAvl(
 +  IN PRTL_AVL_TABLE Table,
 +  IN PVOID Buffer,
 +  OUT PVOID *NodeOrParent,
 +  OUT TABLE_SEARCH_RESULT *SearchResult);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlEnumerateGenericTableAvl(
 +  IN PRTL_AVL_TABLE Table,
 +  IN BOOLEAN Restart);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlEnumerateGenericTableWithoutSplayingAvl(
 +  IN PRTL_AVL_TABLE Table,
 +  IN OUT PVOID *RestartKey);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlLookupFirstMatchingElementGenericTableAvl(
 +  IN PRTL_AVL_TABLE Table,
 +  IN PVOID Buffer,
 +  OUT PVOID *RestartKey);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlEnumerateGenericTableLikeADirectory(
 +  IN PRTL_AVL_TABLE Table,
 +  IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL,
 +  IN PVOID MatchData OPTIONAL,
 +  IN ULONG NextFlag,
 +  IN OUT PVOID *RestartKey,
 +  IN OUT PULONG DeleteCount,
 +  IN PVOID Buffer);
 +
 +NTSYSAPI
 +PVOID
 +NTAPI
 +RtlGetElementGenericTableAvl(
 +  IN PRTL_AVL_TABLE Table,
 +  IN ULONG I);
 +
 +NTSYSAPI
 +ULONG
 +NTAPI
 +RtlNumberGenericTableElementsAvl(
 +  IN PRTL_AVL_TABLE Table);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlIsGenericTableEmptyAvl(
 +  IN PRTL_AVL_TABLE Table);
 +
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 +
 +
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlRunOnceInitialize(
 +  OUT PRTL_RUN_ONCE RunOnce);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +RtlRunOnceExecuteOnce(
 +  IN OUT PRTL_RUN_ONCE RunOnce,
 +  IN PRTL_RUN_ONCE_INIT_FN InitFn,
 +  IN OUT PVOID Parameter OPTIONAL,
 +  OUT PVOID *Context OPTIONAL);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +RtlRunOnceBeginInitialize(
 +  IN OUT PRTL_RUN_ONCE RunOnce,
 +  IN ULONG Flags,
 +  OUT PVOID *Context OPTIONAL);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +RtlRunOnceComplete(
 +  IN OUT PRTL_RUN_ONCE RunOnce,
 +  IN ULONG Flags,
 +  IN PVOID Context OPTIONAL);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlGetProductInfo(
 +  IN ULONG OSMajorVersion,
 +  IN ULONG OSMinorVersion,
 +  IN ULONG SpMajorVersion,
 +  IN ULONG SpMinorVersion,
 +  OUT PULONG ReturnedProductType);
 +
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlCreateHashTable(
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE *HashTable OPTIONAL,
 +  IN ULONG Shift,
 +  IN ULONG Flags);
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlDeleteHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlInsertEntryHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
 +  IN ULONG_PTR Signature,
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlRemoveEntryHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry,
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
 +
 +NTSYSAPI
 +PRTL_DYNAMIC_HASH_TABLE_ENTRY
 +NTAPI
 +RtlLookupEntryHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  IN ULONG_PTR Signature,
 +  OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL);
 +
 +NTSYSAPI
 +PRTL_DYNAMIC_HASH_TABLE_ENTRY
 +NTAPI
 +RtlGetNextEntryHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlInitEnumerationHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
 +
 +NTSYSAPI
 +PRTL_DYNAMIC_HASH_TABLE_ENTRY
 +NTAPI
 +RtlEnumerateEntryHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlEndEnumerationHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlInitWeakEnumerationHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
 +
 +NTSYSAPI
 +PRTL_DYNAMIC_HASH_TABLE_ENTRY
 +NTAPI
 +RtlWeaklyEnumerateEntryHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
 +
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlEndWeakEnumerationHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable,
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlExpandHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable);
 +
 +NTSYSAPI
 +BOOLEAN
 +NTAPI
 +RtlContractHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable);
 +
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 +
 +
 +#if defined(_AMD64_) || defined(_IA64_)
 +
 +
 +
 +//DECLSPEC_DEPRECATED_DDK_WINXP
 +FORCEINLINE
 +LARGE_INTEGER
 +NTAPI_INLINE
 +RtlLargeIntegerDivide(
 +  IN LARGE_INTEGER Dividend,
 +  IN LARGE_INTEGER Divisor,
 +  OUT PLARGE_INTEGER Remainder OPTIONAL)
 +{
 +  LARGE_INTEGER ret;
 +  ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
 +  if (Remainder)
 +    Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
 +  return ret;
 +}
 +
 +#else
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +NTSYSAPI
 +LARGE_INTEGER
 +NTAPI
 +RtlLargeIntegerDivide(
 +  IN LARGE_INTEGER Dividend,
 +  IN LARGE_INTEGER Divisor,
 +  OUT PLARGE_INTEGER Remainder OPTIONAL);
 +#endif
 +
 +
 +#endif /* defined(_AMD64_) || defined(_IA64_) */
 +
 +
 +
 +#ifdef RTL_USE_AVL_TABLES
 +
 +#define RtlInitializeGenericTable               RtlInitializeGenericTableAvl
 +#define RtlInsertElementGenericTable            RtlInsertElementGenericTableAvl
 +#define RtlInsertElementGenericTableFull        RtlInsertElementGenericTableFullAvl
 +#define RtlDeleteElementGenericTable            RtlDeleteElementGenericTableAvl
 +#define RtlLookupElementGenericTable            RtlLookupElementGenericTableAvl
 +#define RtlLookupElementGenericTableFull        RtlLookupElementGenericTableFullAvl
 +#define RtlEnumerateGenericTable                RtlEnumerateGenericTableAvl
 +#define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
 +#define RtlGetElementGenericTable               RtlGetElementGenericTableAvl
 +#define RtlNumberGenericTableElements           RtlNumberGenericTableElementsAvl
 +#define RtlIsGenericTableEmpty                  RtlIsGenericTableEmptyAvl
 +
 +#endif /* RTL_USE_AVL_TABLES */
 +
 +#define RtlInitializeSplayLinks(Links) {    \
 +  PRTL_SPLAY_LINKS _SplayLinks;            \
 +  _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
 +  _SplayLinks->Parent = _SplayLinks;   \
 +  _SplayLinks->LeftChild = NULL;       \
 +  _SplayLinks->RightChild = NULL;      \
 +}
 +
 +#define RtlIsLeftChild(Links) \
 +    (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
 +
 +#define RtlIsRightChild(Links) \
 +    (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
 +
 +#define RtlRightChild(Links) \
 +    ((PRTL_SPLAY_LINKS)(Links))->RightChild
 +
 +#define RtlIsRoot(Links) \
 +    (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
 +
 +#define RtlLeftChild(Links) \
 +    ((PRTL_SPLAY_LINKS)(Links))->LeftChild
 +
 +#define RtlParent(Links) \
 +    ((PRTL_SPLAY_LINKS)(Links))->Parent
 +
 +#define RtlInsertAsLeftChild(ParentLinks,ChildLinks)    \
 +    {                                                   \
 +        PRTL_SPLAY_LINKS _SplayParent;                  \
 +        PRTL_SPLAY_LINKS _SplayChild;                   \
 +        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
 +        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
 +        _SplayParent->LeftChild = _SplayChild;          \
 +        _SplayChild->Parent = _SplayParent;             \
 +    }
 +
 +#define RtlInsertAsRightChild(ParentLinks,ChildLinks)   \
 +    {                                                   \
 +        PRTL_SPLAY_LINKS _SplayParent;                  \
 +        PRTL_SPLAY_LINKS _SplayChild;                   \
 +        _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
 +        _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks);   \
 +        _SplayParent->RightChild = _SplayChild;         \
 +        _SplayChild->Parent = _SplayParent;             \
 +    }
 +
 +#if !defined(MIDL_PASS)
 +
 +FORCEINLINE
 +LUID
 +NTAPI_INLINE
 +RtlConvertLongToLuid(
 +  IN LONG Val)
 +{
 +  LUID Luid;
 +  LARGE_INTEGER Temp;
 +
 +  Temp.QuadPart = Val;
 +  Luid.LowPart = Temp.u.LowPart;
 +  Luid.HighPart = Temp.u.HighPart;
 +  return Luid;
 +}
 +
 +FORCEINLINE
 +LUID
 +NTAPI_INLINE
 +RtlConvertUlongToLuid(
 +  IN ULONG Val)
 +{
 +  LUID Luid;
 +
 +  Luid.LowPart = Val;
 +  Luid.HighPart = 0;
 +  return Luid;
 +}
 +
 +#endif /* !defined(MIDL_PASS) */
 +
 +#if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
 +#define RtlGetCallersAddress(CallersAddress, CallersCaller) \
 +    *CallersAddress = (PVOID)_ReturnAddress(); \
 +    *CallersCaller = NULL;
 +#else
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +NTSYSAPI
 +VOID
 +NTAPI
 +RtlGetCallersAddress(
 +  OUT PVOID *CallersAddress,
 +  OUT PVOID *CallersCaller);
 +#endif
 +#endif
 +
 +#if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +
 +FORCEINLINE
 +VOID
 +NTAPI
 +RtlInitHashTableContext(
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
 +{
 +  Context->ChainHead = NULL;
 +  Context->PrevLinkage = NULL;
 +}
 +
 +FORCEINLINE
 +VOID
 +NTAPI
 +RtlInitHashTableContextFromEnumerator(
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context,
 +  IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator)
 +{
 +  Context->ChainHead = Enumerator->ChainHead;
 +  Context->PrevLinkage = Enumerator->HashEntry.Linkage.Blink;
 +}
 +
 +FORCEINLINE
 +VOID
 +NTAPI
 +RtlReleaseHashTableContext(
 +  IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context)
 +{
 +  UNREFERENCED_PARAMETER(Context);
 +  return;
 +}
 +
 +FORCEINLINE
 +ULONG
 +NTAPI
 +RtlTotalBucketsHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
 +{
 +  return HashTable->TableSize;
 +}
 +
 +FORCEINLINE
 +ULONG
 +NTAPI
 +RtlNonEmptyBucketsHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
 +{
 +  return HashTable->NonEmptyBuckets;
 +}
 +
 +FORCEINLINE
 +ULONG
 +NTAPI
 +RtlEmptyBucketsHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
 +{
 +  return HashTable->TableSize - HashTable->NonEmptyBuckets;
 +}
 +
 +FORCEINLINE
 +ULONG
 +NTAPI
 +RtlTotalEntriesHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
 +{
 +  return HashTable->NumEntries;
 +}
 +
 +FORCEINLINE
 +ULONG
 +NTAPI
 +RtlActiveEnumeratorsHashTable(
 +  IN PRTL_DYNAMIC_HASH_TABLE HashTable)
 +{
 +  return HashTable->NumEnumerators;
 +}
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 +
 +#endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
 +
 +/******************************************************************************
 + *                            Security Manager Functions                      *
 + ******************************************************************************/
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +SeSinglePrivilegeCheck(
 +  IN LUID PrivilegeValue,
 +  IN KPROCESSOR_MODE PreviousMode);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 +
 +
 +/******************************************************************************
 + *                            ZwXxx Functions                                 *
 + ******************************************************************************/
 +
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +ZwAllocateLocallyUniqueId(
 +  OUT PLUID Luid);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +ZwTerminateProcess(
 +  IN HANDLE ProcessHandle OPTIONAL,
 +  IN NTSTATUS ExitStatus);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +ZwOpenProcess(
 +  OUT PHANDLE ProcessHandle,
 +  IN ACCESS_MASK DesiredAccess,
 +  IN POBJECT_ATTRIBUTES ObjectAttributes,
 +  IN PCLIENT_ID ClientId OPTIONAL);
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +
 +NTSTATUS
 +NTAPI
 +ZwCancelTimer(
 +  IN HANDLE TimerHandle,
 +  OUT PBOOLEAN CurrentState OPTIONAL);
 +
 +NTSTATUS
 +NTAPI
 +ZwCreateTimer(
 +  OUT PHANDLE TimerHandle,
 +  IN ACCESS_MASK DesiredAccess,
 +  IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
 +  IN TIMER_TYPE TimerType);
 +
 +NTSTATUS
 +NTAPI
 +ZwOpenTimer(
 +  OUT PHANDLE TimerHandle,
 +  IN ACCESS_MASK DesiredAccess,
 +  IN POBJECT_ATTRIBUTES ObjectAttributes);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +ZwSetInformationThread(
 +  IN HANDLE ThreadHandle,
 +  IN THREADINFOCLASS ThreadInformationClass,
 +  IN PVOID ThreadInformation,
 +  IN ULONG ThreadInformationLength);
 +
 +NTSTATUS
 +NTAPI
 +ZwSetTimer(
 +  IN HANDLE TimerHandle,
 +  IN PLARGE_INTEGER DueTime,
 +  IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL,
 +  IN PVOID TimerContext OPTIONAL,
 +  IN BOOLEAN ResumeTimer,
 +  IN LONG Period OPTIONAL,
 +  OUT PBOOLEAN PreviousState OPTIONAL);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +ZwDisplayString(
 +  IN PUNICODE_STRING String);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +ZwPowerInformation(
 +  IN POWER_INFORMATION_LEVEL PowerInformationLevel,
 +  IN PVOID InputBuffer OPTIONAL,
 +  IN ULONG InputBufferLength,
 +  OUT PVOID OutputBuffer OPTIONAL,
 +  IN ULONG OutputBufferLength);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +ZwQueryVolumeInformationFile(
 +  IN HANDLE FileHandle,
 +  OUT PIO_STATUS_BLOCK IoStatusBlock,
 +  OUT PVOID FsInformation,
 +  IN ULONG Length,
 +  IN FS_INFORMATION_CLASS FsInformationClass);
 +
 +NTSYSAPI
 +NTSTATUS
 +NTAPI
 +ZwDeviceIoControlFile(
 +  IN HANDLE FileHandle,
 +  IN HANDLE Event OPTIONAL,
 +  IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 +  IN PVOID ApcContext OPTIONAL,
 +  OUT PIO_STATUS_BLOCK IoStatusBlock,
 +  IN ULONG IoControlCode,
 +  IN PVOID InputBuffer OPTIONAL,
 +  IN ULONG InputBufferLength,
 +  OUT PVOID OutputBuffer OPTIONAL,
 +  IN ULONG OutputBufferLength);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
 +
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN7)
 +
 +NTSTATUS
 +NTAPI
 +ZwSetTimerEx(
 +  IN HANDLE TimerHandle,
 +  IN TIMER_SET_INFORMATION_CLASS TimerSetInformationClass,
 +  IN OUT PVOID TimerSetInformation,
 +  IN ULONG TimerSetInformationLength);
 +#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 +
 +
 +
 +/* UNSORTED */
 +
 +#define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
 +  ((ConditionMask) = VerSetConditionMask((ConditionMask),             \
 +  (TypeBitMask), (ComparisonType)))
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +NTSYSAPI
 +ULONGLONG
 +NTAPI
 +VerSetConditionMask(
 +  IN ULONGLONG ConditionMask,
 +  IN ULONG TypeMask,
 +  IN UCHAR Condition);
 +#endif
 +
 +typedef struct _KERNEL_USER_TIMES {
 +  LARGE_INTEGER CreateTime;
 +  LARGE_INTEGER ExitTime;
 +  LARGE_INTEGER KernelTime;
 +  LARGE_INTEGER UserTime;
 +} KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
 +
 +/* NtXxx Functions */
 +
 +typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION {
 +  SystemFirmwareTable_Enumerate,
 +  SystemFirmwareTable_Get
 +} SYSTEM_FIRMWARE_TABLE_ACTION;
 +
 +typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION {
 +  ULONG ProviderSignature;
 +  SYSTEM_FIRMWARE_TABLE_ACTION Action;
 +  ULONG TableID;
 +  ULONG TableBufferLength;
 +  UCHAR TableBuffer[ANYSIZE_ARRAY];
 +} SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION;
 +
 +typedef NTSTATUS
 +(__cdecl *PFNFTH)(
 +  IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo);
 +
 +typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER {
 +  ULONG ProviderSignature;
 +  BOOLEAN Register;
 +  PFNFTH FirmwareTableHandler;
 +  PVOID DriverObject;
 +} SYSTEM_FIRMWARE_TABLE_HANDLER, *PSYSTEM_FIRMWARE_TABLE_HANDLER;
 +
 +typedef ULONG_PTR
 +(NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
 +  IN PVOID Context);
 +
 +typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
 +  PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
 +  PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
 +} DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
 +
 +#define DRIVER_VERIFIER_SPECIAL_POOLING             0x0001
 +#define DRIVER_VERIFIER_FORCE_IRQL_CHECKING         0x0002
 +#define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES  0x0004
 +#define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS      0x0008
 +#define DRIVER_VERIFIER_IO_CHECKING                 0x0010
 +
 +#define SHARED_GLOBAL_FLAGS_ERROR_PORT_V        0x0
 +#define SHARED_GLOBAL_FLAGS_ERROR_PORT          (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
 +
 +#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
 +#define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED   (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
 +
 +#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V      0x2
 +#define SHARED_GLOBAL_FLAGS_VIRT_ENABLED        (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
 +
 +#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V  0x3
 +#define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED    \
 +  (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
 +
 +#define SHARED_GLOBAL_FLAGS_SPARE_V                     0x4
 +#define SHARED_GLOBAL_FLAGS_SPARE                       \
 +  (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
 +
 +#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V      0x5
 +#define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED        \
 +  (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
 +
 +#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V    0x6
 +#define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED        \
 +  (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
 +
 +#define EX_INIT_BITS(Flags, Bit) \
 +  *((Flags)) |= (Bit)             // Safe to use before concurrently accessible
 +
 +#define EX_TEST_SET_BIT(Flags, Bit) \
 +  InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
 +
 +#define EX_TEST_CLEAR_BIT(Flags, Bit) \
 +  InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
 +
 +#define PCCARD_MAP_ERROR               0x01
 +#define PCCARD_DEVICE_PCI              0x10
 +
 +#define PCCARD_SCAN_DISABLED           0x01
 +#define PCCARD_MAP_ZERO                0x02
 +#define PCCARD_NO_TIMER                0x03
 +#define PCCARD_NO_PIC                  0x04
 +#define PCCARD_NO_LEGACY_BASE          0x05
 +#define PCCARD_DUP_LEGACY_BASE         0x06
 +#define PCCARD_NO_CONTROLLERS          0x07
 +
 +#define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
 +
 +/* Filesystem runtime library routines */
 +
 +#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +NTKERNELAPI
 +BOOLEAN
 +NTAPI
 +FsRtlIsTotalDeviceFailure(
 +  IN NTSTATUS Status);
 +#endif
 +
 +#ifdef __cplusplus
 +}
 +#endif
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index a2e0852,0000000..ef2037d
mode 100644,000000..100644
--- /dev/null
@@@ -1,5116 -1,0 +1,5124 @@@
 +#ifndef _WINNT_H
 +#define _WINNT_H
 +
 +#if !defined(__ROS_LONG64__)
 +#ifdef __WINESRC__
 +#define __ROS_LONG64__
 +#endif
 +#endif
 +
 +#ifdef __GNUC__
 +#include <msvctarget.h>
 +#endif
 +
 +#if defined(_M_IX86) && !defined(_X86_)
 +#define _X86_
 +#elif defined(_M_ALPHA) && !defined(_ALPHA_)
 +#define _ALPHA_
 +#elif defined(_M_ARM) && !defined(_ARM_)
 +#define _ARM_
 +#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
 +
 +#ifndef DECLSPEC_ALIGN
 +# if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
 +#  define DECLSPEC_ALIGN(x) __declspec(align(x))
 +# elif defined(__GNUC__)
 +#  define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
 +# else
 +#  define DECLSPEC_ALIGN(x)
 +# endif
 +#endif
 +
 +# define DECLSPEC_HIDDEN
 +
 +#ifdef __cplusplus
 +extern "C" {
 +#endif
 +
 +#include <excpt.h>
 +#include <basetsd.h>
 +#include <guiddef.h>
 +
 +#include <ctype.h>
 +#undef __need_wchar_t
 +
 +#include <winerror.h>
 +#include <stddef.h>
 +#include <sdkddkver.h>
 +
 +#ifndef RC_INVOKED
 +#include <string.h>
 +
 +/* FIXME: add more architectures. Is there a way to specify this in GCC? */
 +#if defined(_M_AMD64)
 +#undef UNALIGNED
 +#define UNALIGNED __unaligned
 +#else
 +#define UNALIGNED
 +#endif
 +
++#ifndef DECLSPEC_NOVTABLE
++# if defined(_MSC_VER) && (_MSC_VER >= 1100) && defined(__cplusplus)
++#  define DECLSPEC_NOVTABLE __declspec(novtable)
++# else
++#  define DECLSPEC_NOVTABLE
++# endif
++#endif
++
 +#ifndef DECLSPEC_ADDRSAFE
 +#if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
 +#define DECLSPEC_ADDRSAFE __declspec(address_safe)
 +#else
 +#define DECLSPEC_ADDRSAFE
 +#endif
 +#endif
 +
 +/*#ifdef _WINE*/
 +#if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
 +#define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
 +#else
 +#define __WINE_ALLOC_SIZE(x)
 +#endif
 +/*#endif*/
 +
 +#ifndef FORCEINLINE
 +#if (_MSC_VER >= 1200)
 +#define FORCEINLINE __forceinline
 +#elif (_MSC_VER)
 +#define FORCEINLINE __inline
 +#else
 +#define FORCEINLINE static __inline__ __attribute__((always_inline))
 +#endif
 +#endif
 +
 +#if !defined(_NTSYSTEM_)
 +#define NTSYSAPI     DECLSPEC_IMPORT
 +#define NTSYSCALLAPI DECLSPEC_IMPORT
 +#else
 +#define NTSYSAPI
 +#if defined(_NTDLLBUILD_)
 +#define NTSYSCALLAPI
 +#else
 +#define NTSYSCALLAPI DECLSPEC_ADDRSAFE
 +#endif
 +#endif
 +
 +#ifndef VOID
 +#define VOID void
 +#endif
 +typedef char CHAR;
 +typedef short SHORT;
 +#if !defined(__ROS_LONG64__) || defined(_M_AMD64)
 +typedef long LONG;
 +#else
 +typedef int LONG;
 +#endif
 +typedef char CCHAR, *PCCHAR;
 +typedef void *PVOID;
 +
 +/* FIXME for __WIN64 */
 +#ifndef  __ptr64
 +#define __ptr64
 +#endif
 +typedef void* __ptr64 PVOID64;
 +
 +#ifdef __cplusplus
 +# define EXTERN_C    extern "C"
 +#else
 +# define EXTERN_C    extern
 +#endif
 +
 +#define STDMETHODCALLTYPE       __stdcall
 +#define STDMETHODVCALLTYPE      __cdecl
 +#define STDAPICALLTYPE          __stdcall
 +#define STDAPIVCALLTYPE         __cdecl
 +
 +#define STDAPI                  EXTERN_C HRESULT STDAPICALLTYPE
 +#define STDAPI_(type)           EXTERN_C type STDAPICALLTYPE
 +#define STDMETHODIMP            HRESULT STDMETHODCALLTYPE
 +#define STDMETHODIMP_(type)     type STDMETHODCALLTYPE
 +#define STDAPIV                 EXTERN_C HRESULT STDAPIVCALLTYPE
 +#define STDAPIV_(type)          EXTERN_C type STDAPIVCALLTYPE
 +#define STDMETHODIMPV           HRESULT STDMETHODVCALLTYPE
 +#define STDMETHODIMPV_(type)    type STDMETHODVCALLTYPE
 +
 +/* C99 restrict support */
 +#if defined(ENABLE_RESTRICTED) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
 +  #if defined(_MSC_VER) && defined(_M_MRX000)
 +    #define RESTRICTED_POINTER __restrict
 +  #elif defined(__GNUC__) && ((__GNUC__ > 2) || ((__GNUC__ == 2) && (__GNUC_MINOR__ >= 95)))
 +    #define RESTRICTED_POINTER __restrict
 +  #else
 +    #define RESTRICTED_POINTER
 +  #endif
 +#else
 +  #define RESTRICTED_POINTER
 +#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,*PCCH,*PCSTR,*LPCSTR;
 +typedef PWSTR *PZPWSTR;
 +typedef CONST PWSTR *PCZPWSTR;
 +typedef WCHAR UNALIGNED *LPUWSTR,*PUWSTR;
 +typedef PCWSTR *PZPCWSTR;
 +typedef CONST WCHAR UNALIGNED *LPCUWSTR,*PCUWSTR;
 +typedef PSTR *PZPSTR;
 +typedef CONST PSTR *PCZPSTR;
 +typedef PCSTR *PZPCSTR;
 +
 +#ifdef UNICODE
 +#ifndef _TCHAR_DEFINED
 +#define _TCHAR_DEFINED
 +  typedef WCHAR TCHAR,*PTCHAR;
 +  typedef WCHAR TBYTE ,*PTBYTE;
 +#endif
 +  typedef LPWSTR LPTCH,PTCH,PTSTR,LPTSTR,LP;
 +  typedef LPCWSTR PCTSTR,LPCTSTR;
 +  typedef LPUWSTR PUTSTR,LPUTSTR;
 +  typedef LPCUWSTR PCUTSTR,LPCUTSTR;
 +#define __TEXT(quote) L##quote
 +#else
 +#ifndef _TCHAR_DEFINED
 +#define _TCHAR_DEFINED
 +  typedef char TCHAR,*PTCHAR;
 +  typedef unsigned char TBYTE ,*PTBYTE;
 +#endif
 +  typedef LPSTR LPTCH,PTCH,PTSTR,LPTSTR,PUTSTR,LPUTSTR;
 +  typedef LPCSTR PCTSTR,LPCTSTR,PCUTSTR,LPCUTSTR;
 +#define __TEXT(quote) quote
 +#endif
 +
 +#define TEXT(quote) __TEXT(quote)
 +
 +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;
 +typedef DWORD LCID;
 +typedef PDWORD PLCID;
 +typedef WORD LANGID;
 +#ifdef __GNUC__
 +#define _HAVE_INT64
 +#ifndef _INTEGRAL_MAX_BITS
 +# define _INTEGRAL_MAX_BITS 64
 +#endif
 +#undef __int64
 +#define __int64 long long
 +#elif (defined(__WATCOMC__) || defined(_MSC_VER)) && (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 ((CHAR)0)
 +#define UNICODE_NULL ((WCHAR)0)
 +typedef BYTE BOOLEAN,*PBOOLEAN;
 +#endif
 +typedef BYTE FCHAR;
 +typedef WORD FSHORT;
 +typedef DWORD FLONG;
 +
 +#define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
 +
 +#include "intrin.h"
 +
 +#define NTAPI __stdcall
 +#include <basetsd.h>
 +
 +#ifdef _MSC_VER
 +#pragma warning(push)
 +#pragma warning(disable:4201)
 +#pragma warning(disable:4214)
 +#pragma warning(disable:4820)
 +#endif
 +
 +#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 10
 +#define VALID_INHERIT_FLAGS   0x1F
 +#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 REG_STANDARD_FORMAT 1
 +#define REG_LATEST_FORMAT   2
 +#define REG_NO_COMPRESSION  4
 +
 +#ifndef WIN32_NO_STATUS
 +
 +#define STATUS_WAIT_0                    ((DWORD)0x00000000)
 +#define STATUS_ABANDONED_WAIT_0          ((DWORD)0x00000080)
 +#define STATUS_USER_APC                  ((DWORD)0x000000C0)
 +#define STATUS_TIMEOUT                   ((DWORD)0x00000102)
 +#define STATUS_PENDING                   ((DWORD)0x00000103)
 +#define STATUS_SEGMENT_NOTIFICATION      ((DWORD)0x40000005)
 +#define STATUS_GUARD_PAGE_VIOLATION      ((DWORD)0x80000001)
 +#define STATUS_DATATYPE_MISALIGNMENT     ((DWORD)0x80000002)
 +#define STATUS_BREAKPOINT                ((DWORD)0x80000003)
 +#define STATUS_SINGLE_STEP               ((DWORD)0x80000004)
 +#define STATUS_ACCESS_VIOLATION          ((DWORD)0xC0000005)
 +#define STATUS_IN_PAGE_ERROR             ((DWORD)0xC0000006)
 +#define STATUS_INVALID_HANDLE            ((DWORD)0xC0000008)
 +#define STATUS_NO_MEMORY                 ((DWORD)0xC0000017)
 +#define STATUS_ILLEGAL_INSTRUCTION       ((DWORD)0xC000001D)
 +#define STATUS_NONCONTINUABLE_EXCEPTION  ((DWORD)0xC0000025)
 +#define STATUS_INVALID_DISPOSITION       ((DWORD)0xC0000026)
 +#define STATUS_ARRAY_BOUNDS_EXCEEDED     ((DWORD)0xC000008C)
 +#define STATUS_FLOAT_DENORMAL_OPERAND    ((DWORD)0xC000008D)
 +#define STATUS_FLOAT_DIVIDE_BY_ZERO      ((DWORD)0xC000008E)
 +#define STATUS_FLOAT_INEXACT_RESULT      ((DWORD)0xC000008F)
 +#define STATUS_FLOAT_INVALID_OPERATION   ((DWORD)0xC0000090)
 +#define STATUS_FLOAT_OVERFLOW            ((DWORD)0xC0000091)
 +#define STATUS_FLOAT_STACK_CHECK         ((DWORD)0xC0000092)
 +#define STATUS_FLOAT_UNDERFLOW           ((DWORD)0xC0000093)
 +#define STATUS_INTEGER_DIVIDE_BY_ZERO    ((DWORD)0xC0000094)
 +#define STATUS_INTEGER_OVERFLOW          ((DWORD)0xC0000095)
 +#define STATUS_PRIVILEGED_INSTRUCTION    ((DWORD)0xC0000096)
 +#define STATUS_STACK_OVERFLOW            ((DWORD)0xC00000FD)
 +#define STATUS_CONTROL_C_EXIT            ((DWORD)0xC000013A)
 +#define STATUS_FLOAT_MULTIPLE_FAULTS     ((DWORD)0xC00002B4)
 +#define STATUS_FLOAT_MULTIPLE_TRAPS      ((DWORD)0xC00002B5)
 +#define STATUS_REG_NAT_CONSUMPTION       ((DWORD)0xC00002C9)
 +#define STATUS_SXS_EARLY_DEACTIVATION    ((DWORD)0xC015000F)
 +#define STATUS_SXS_INVALID_DEACTIVATION  ((DWORD)0xC0150010)
 +
 +#define DBG_EXCEPTION_HANDLED       ((DWORD)0x00010001)
 +#define DBG_CONTINUE                ((DWORD)0x00010002)
 +#define DBG_TERMINATE_THREAD        ((DWORD)0x40010003)
 +#define DBG_TERMINATE_PROCESS       ((DWORD)0x40010004)
 +#define DBG_CONTROL_C               ((DWORD)0x40010005)
 +#define DBG_CONTROL_BREAK           ((DWORD)0x40010008)
 +#define DBG_COMMAND_EXCEPTION       ((DWORD)0x40010009)
 +#define DBG_EXCEPTION_NOT_HANDLED   ((DWORD)0x80010001)
 +
 +#endif /* WIN32_NO_STATUS */
 +
 +#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_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_REMOTE_INSTANCE     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 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
 +/* 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_CREATE_PROCESS        128
 +#define PROCESS_SET_QUOTA     256
 +#define PROCESS_SET_INFORMATION       512
 +#define PROCESS_QUERY_INFORMATION     1024
 +#define PROCESS_SUSPEND_RESUME        2048
 +#define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
 +#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xFFF)
 +#define PROCESS_DUP_HANDLE    64
 +#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 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)
 +#define THREAD_BASE_PRIORITY_LOWRT    15
 +#define THREAD_BASE_PRIORITY_MAX      2
 +#define THREAD_BASE_PRIORITY_MIN      (-2)
 +#define THREAD_BASE_PRIORITY_IDLE     (-15)
 +/*
 + * To prevent gcc compiler warnings, bracket these defines when initialising
 + * a  SID_IDENTIFIER_AUTHORITY, eg.
 + * SID_IDENTIFIER_AUTHORITY aNullSidAuthority = {SECURITY_NULL_SID_AUTHORITY};
 + */
 +#define SID_MAX_SUB_AUTHORITIES     15
 +
 +/* security entities */
 +#define SECURITY_NULL_RID                     (0x00000000L)
 +#define SECURITY_WORLD_RID                    (0x00000000L)
 +#define SECURITY_LOCAL_RID                    (0X00000000L)
 +
 +#define SECURITY_NULL_SID_AUTHORITY           {0,0,0,0,0,0}
 +
 +/* S-1-1 */
 +#define SECURITY_WORLD_SID_AUTHORITY          {0,0,0,0,0,1}
 +
 +/* S-1-2 */
 +#define SECURITY_LOCAL_SID_AUTHORITY          {0,0,0,0,0,2}
 +
 +/* S-1-3 */
 +#define SECURITY_CREATOR_SID_AUTHORITY                {0,0,0,0,0,3}
 +#define SECURITY_CREATOR_OWNER_RID            (0x00000000L)
 +#define SECURITY_CREATOR_GROUP_RID            (0x00000001L)
 +#define SECURITY_CREATOR_OWNER_SERVER_RID     (0x00000002L)
 +#define SECURITY_CREATOR_GROUP_SERVER_RID     (0x00000003L)
 +
 +/* S-1-4 */
 +#define SECURITY_NON_UNIQUE_AUTHORITY         {0,0,0,0,0,4}
 +
 +/* S-1-5 */
 +#define SECURITY_NT_AUTHORITY                 {0,0,0,0,0,5}
 +#define SECURITY_DIALUP_RID                     0x00000001L
 +#define SECURITY_NETWORK_RID                    0x00000002L
 +#define SECURITY_BATCH_RID                      0x00000003L
 +#define SECURITY_INTERACTIVE_RID                0x00000004L
 +#define SECURITY_LOGON_IDS_RID                  0x00000005L
 +#define SECURITY_SERVICE_RID                    0x00000006L
 +#define SECURITY_ANONYMOUS_LOGON_RID            0x00000007L
 +#define SECURITY_PROXY_RID                      0x00000008L
 +#define SECURITY_ENTERPRISE_CONTROLLERS_RID     0x00000009L
 +#define SECURITY_SERVER_LOGON_RID               SECURITY_ENTERPRISE_CONTROLLERS_RID
 +#define SECURITY_PRINCIPAL_SELF_RID             0x0000000AL
 +#define SECURITY_AUTHENTICATED_USER_RID         0x0000000BL
 +#define SECURITY_RESTRICTED_CODE_RID            0x0000000CL
 +#define SECURITY_TERMINAL_SERVER_RID            0x0000000DL
 +#define SECURITY_REMOTE_LOGON_RID               0x0000000EL
 +#define SECURITY_THIS_ORGANIZATION_RID          0x0000000FL
 +#define SECURITY_LOCAL_SYSTEM_RID               0x00000012L
 +#define SECURITY_LOCAL_SERVICE_RID              0x00000013L
 +#define SECURITY_NETWORK_SERVICE_RID            0x00000014L
 +#define SECURITY_NT_NON_UNIQUE                  0x00000015L
 +#define SECURITY_BUILTIN_DOMAIN_RID             0x00000020L
 +
 +#define SECURITY_PACKAGE_BASE_RID               0x00000040L
 +#define SECURITY_PACKAGE_NTLM_RID               0x0000000AL
 +#define SECURITY_PACKAGE_SCHANNEL_RID           0x0000000EL
 +#define SECURITY_PACKAGE_DIGEST_RID             0x00000015L
 +#define SECURITY_OTHER_ORGANIZATION_RID         0x000003E8L
 +
 +#define SECURITY_LOGON_IDS_RID_COUNT 0x3
 +#define SID_REVISION 1
 +
 +#define FOREST_USER_RID_MAX                     0x000001F3L
 +#define DOMAIN_USER_RID_ADMIN                   0x000001F4L
 +#define DOMAIN_USER_RID_GUEST                   0x000001F5L
 +#define DOMAIN_USER_RID_KRBTGT                  0x000001F6L
 +#define DOMAIN_USER_RID_MAX                     0x000003E7L
 +
 +#define DOMAIN_GROUP_RID_ADMINS                 0x00000200L
 +#define DOMAIN_GROUP_RID_USERS                  0x00000201L
 +#define DOMAIN_GROUP_RID_GUESTS                 0x00000202L
 +#define DOMAIN_GROUP_RID_COMPUTERS              0x00000203L
 +#define DOMAIN_GROUP_RID_CONTROLLERS            0x00000204L
 +#define DOMAIN_GROUP_RID_CERT_ADMINS            0x00000205L
 +#define DOMAIN_GROUP_RID_SCHEMA_ADMINS          0x00000206L
 +#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS      0x00000207L
 +#define DOMAIN_GROUP_RID_POLICY_ADMINS          0x00000208L
 +
 +#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
 +#define SECURITY_MANDATORY_UNTRUSTED_RID        0x00000000L
 +#define SECURITY_MANDATORY_LOW_RID              0x00001000L
 +#define SECURITY_MANDATORY_MEDIUM_RID           0x00002000L
 +#define SECURITY_MANDATORY_HIGH_RID             0x00003000L
 +#define SECURITY_MANDATORY_SYSTEM_RID           0x00004000L
 +#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID 0x00005000L
 +
 +#define DOMAIN_ALIAS_RID_ADMINS                 0x00000220L
 +#define DOMAIN_ALIAS_RID_USERS                  0x00000221L
 +#define DOMAIN_ALIAS_RID_GUESTS                 0x00000222L
 +#define DOMAIN_ALIAS_RID_POWER_USERS            0x00000223L
 +
 +#define DOMAIN_ALIAS_RID_ACCOUNT_OPS            0x00000224L
 +#define DOMAIN_ALIAS_RID_SYSTEM_OPS             0x00000225L
 +#define DOMAIN_ALIAS_RID_PRINT_OPS              0x00000226L
 +#define DOMAIN_ALIAS_RID_BACKUP_OPS             0x00000227L
 +
 +#define DOMAIN_ALIAS_RID_REPLICATOR             0x00000228L
 +#define DOMAIN_ALIAS_RID_RAS_SERVERS            0x00000229L
 +#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS       0x0000022AL
 +#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS   0x0000022BL
 +#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS 0x0000022CL
 +#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS 0x0000022DL
 +
 +#define DOMAIN_ALIAS_RID_MONITORING_USERS       0x0000022EL
 +#define DOMAIN_ALIAS_RID_LOGGING_USERS          0x0000022FL
 +#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS    0x00000230L
 +#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS     0x00000231L
 +#define DOMAIN_ALIAS_RID_DCOM_USERS             0x00000232L
 +
 +#define SECURITY_MANDATORY_LABEL_AUTHORITY  {0,0,0,0,0,16}
 +
 +typedef enum {
 +    WinNullSid                                  = 0,
 +    WinWorldSid                                 = 1,
 +    WinLocalSid                                 = 2,
 +    WinCreatorOwnerSid                          = 3,
 +    WinCreatorGroupSid                          = 4,
 +    WinCreatorOwnerServerSid                    = 5,
 +    WinCreatorGroupServerSid                    = 6,
 +    WinNtAuthoritySid                           = 7,
 +    WinDialupSid                                = 8,
 +    WinNetworkSid                               = 9,
 +    WinBatchSid                                 = 10,
 +    WinInteractiveSid                           = 11,
 +    WinServiceSid                               = 12,
 +    WinAnonymousSid                             = 13,
 +    WinProxySid                                 = 14,
 +    WinEnterpriseControllersSid                 = 15,
 +    WinSelfSid                                  = 16,
 +    WinAuthenticatedUserSid                     = 17,
 +    WinRestrictedCodeSid                        = 18,
 +    WinTerminalServerSid                        = 19,
 +    WinRemoteLogonIdSid                         = 20,
 +    WinLogonIdsSid                              = 21,
 +    WinLocalSystemSid                           = 22,
 +    WinLocalServiceSid                          = 23,
 +    WinNetworkServiceSid                        = 24,
 +    WinBuiltinDomainSid                         = 25,
 +    WinBuiltinAdministratorsSid                 = 26,
 +    WinBuiltinUsersSid                          = 27,
 +    WinBuiltinGuestsSid                         = 28,
 +    WinBuiltinPowerUsersSid                     = 29,
 +    WinBuiltinAccountOperatorsSid               = 30,
 +    WinBuiltinSystemOperatorsSid                = 31,
 +    WinBuiltinPrintOperatorsSid                 = 32,
 +    WinBuiltinBackupOperatorsSid                = 33,
 +    WinBuiltinReplicatorSid                     = 34,
 +    WinBuiltinPreWindows2000CompatibleAccessSid = 35,
 +    WinBuiltinRemoteDesktopUsersSid             = 36,
 +    WinBuiltinNetworkConfigurationOperatorsSid  = 37,
 +    WinAccountAdministratorSid                  = 38,
 +    WinAccountGuestSid                          = 39,
 +    WinAccountKrbtgtSid                         = 40,
 +    WinAccountDomainAdminsSid                   = 41,
 +    WinAccountDomainUsersSid                    = 42,
 +    WinAccountDomainGuestsSid                   = 43,
 +    WinAccountComputersSid                      = 44,
 +    WinAccountControllersSid                    = 45,
 +    WinAccountCertAdminsSid                     = 46,
 +    WinAccountSchemaAdminsSid                   = 47,
 +    WinAccountEnterpriseAdminsSid               = 48,
 +    WinAccountPolicyAdminsSid                   = 49,
 +    WinAccountRasAndIasServersSid               = 50,
 +    WinNTLMAuthenticationSid                    = 51,
 +    WinDigestAuthenticationSid                  = 52,
 +    WinSChannelAuthenticationSid                = 53,
 +    WinThisOrganizationSid                      = 54,
 +    WinOtherOrganizationSid                     = 55,
 +    WinBuiltinIncomingForestTrustBuildersSid    = 56,
 +    WinBuiltinPerfMonitoringUsersSid            = 57,
 +    WinBuiltinPerfLoggingUsersSid               = 58,
 +    WinBuiltinAuthorizationAccessSid            = 59,
 +    WinBuiltinTerminalServerLicenseServersSid   = 60,
 +    WinBuiltinDCOMUsersSid                      = 61,
 +    WinBuiltinIUsersSid                         = 62,
 +    WinIUserSid                                 = 63,
 +    WinBuiltinCryptoOperatorsSid                = 64,
 +    WinUntrustedLabelSid                        = 65,
 +    WinLowLabelSid                              = 66,
 +    WinMediumLabelSid                           = 67,
 +    WinHighLabelSid                             = 68,
 +    WinSystemLabelSid                           = 69,
 +    WinWriteRestrictedCodeSid                   = 70,
 +    WinCreatorOwnerRightsSid                    = 71,
 +    WinCacheablePrincipalsGroupSid              = 72,
 +    WinNonCacheablePrincipalsGroupSid           = 73,
 +    WinEnterpriseReadonlyControllersSid         = 74,
 +    WinAccountReadonlyControllersSid            = 75,
 +    WinBuiltinEventLogReadersGroup              = 76
 +} WELL_KNOWN_SID_TYPE;
 +
 +#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("SeSystemEnvironment