Sync with trunk head.
authorAmine Khaldi <amine.khaldi@reactos.org>
Thu, 25 Mar 2010 18:04:58 +0000 (18:04 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Thu, 25 Mar 2010 18:04:58 +0000 (18:04 +0000)
svn path=/branches/header-work/; revision=46444

305 files changed:
1  2 
base/applications/paint/paint.exe.amd64.manifest
base/applications/paint/rsrc.rc
base/applications/rapps/rapps/firefox3.txt
base/applications/rapps/rapps/mirandaim.txt
base/applications/rapps/rapps/openttd.txt
base/applications/rapps/rapps/opera.txt
base/applications/rapps/rapps/sambatng.txt
base/applications/rapps/rapps/seamonkey.txt
base/applications/rapps/rapps/smplayer.txt
base/applications/rapps/rapps/thunderbird.txt
base/applications/sndrec32/audio_wavein.hpp
base/applications/sndrec32/audio_waveout.hpp
base/setup/usetup/partlist.c
base/shell/cmd/cmd.c
baseaddress.rbuild
boot/bootdata/bootcd/bootcd.rbuild
boot/bootdata/livecd/livecd.rbuild
boot/bootdata/packages/reactos.dff
boot/freeldr/freeldr/debug.c
dll/directx/bdaplgin/controlnode.cpp
dll/directx/bdaplgin/devicecontrol.cpp
dll/directx/bdaplgin/digitaldemo.cpp
dll/directx/bdaplgin/frequencyfilter.cpp
dll/directx/bdaplgin/lnbinfo.cpp
dll/directx/bdaplgin/pincontrol.cpp
dll/directx/bdaplgin/precomp.h
dll/directx/bdaplgin/signalstatistics.cpp
dll/directx/ksproxy/allocator.cpp
dll/directx/ksproxy/basicaudio.cpp
dll/directx/ksproxy/clockforward.cpp
dll/directx/ksproxy/cvpconfig.cpp
dll/directx/ksproxy/cvpvbiconfig.cpp
dll/directx/ksproxy/datatype.cpp
dll/directx/ksproxy/enum_mediatypes.cpp
dll/directx/ksproxy/enumpins.cpp
dll/directx/ksproxy/input_pin.cpp
dll/directx/ksproxy/interface.cpp
dll/directx/ksproxy/ksproxy.cpp
dll/directx/ksproxy/ksproxy.rbuild
dll/directx/ksproxy/mediasample.cpp
dll/directx/ksproxy/node.cpp
dll/directx/ksproxy/output_pin.cpp
dll/directx/ksproxy/precomp.h
dll/directx/ksproxy/proxy.cpp
dll/directx/ksproxy/qualityforward.cpp
dll/directx/qedit/samplegrabber.c
dll/directx/quartz/filtermapper.c
dll/nls/idndl/idndl.rbuild
dll/nls/idndl/idndl.spec
dll/ntdll/dbg/dbgui.c
dll/ntdll/dispatch/dispatch.c
dll/ntdll/ldr/startup.c
dll/ntdll/ldr/utils.c
dll/ntdll/rtl/libsupp.c
dll/win32/acledit/acledit.c
dll/win32/acledit/stubs.c
dll/win32/advapi32/reg/reg.c
dll/win32/advapi32/sec/misc.c
dll/win32/avicap32/avicap32.c
dll/win32/avifil32/api.c
dll/win32/batt/batt.c
dll/win32/batt/batt.rbuild
dll/win32/batt/batt.rc
dll/win32/batt/batt.spec
dll/win32/batt/resource.h
dll/win32/batt/resources/battery.ico
dll/win32/beepmidi/beepmidi.c
dll/win32/crypt32/chain.c
dll/win32/crypt32/main.c
dll/win32/crypt32/oid.c
dll/win32/dbghelp/dbghelp_private.h
dll/win32/dbghelp/dwarf.c
dll/win32/dbghelp/elf_module.c
dll/win32/dbghelp/image_private.h
dll/win32/dbghelp/macho_module.c
dll/win32/dbghelp/module.c
dll/win32/dbghelp/pe_module.c
dll/win32/dbghelp/symbol.c
dll/win32/fusion/fusion.c
dll/win32/fusion/fusion.spec
dll/win32/gdiplus/brush.c
dll/win32/gdiplus/image.c
dll/win32/hlink/browse_ctx.c
dll/win32/hlink/hlink_main.c
dll/win32/hlink/link.c
dll/win32/iphlpapi/iphlpapi_private.h
dll/win32/iphlpapi/resinfo_reactos.c
dll/win32/kernel32/misc/dllmain.c
dll/win32/kernel32/misc/toolhelp.c
dll/win32/kernel32/synch/critical.c
dll/win32/kernel32/thread/fiber.c
dll/win32/mshtml/De.rc
dll/win32/mshtml/Fr.rc
dll/win32/mshtml/It.rc
dll/win32/mshtml/Ja.rc
dll/win32/mshtml/Lt.rc
dll/win32/mshtml/No.rc
dll/win32/mshtml/Si.rc
dll/win32/mshtml/htmldoc.c
dll/win32/mshtml/htmldoc3.c
dll/win32/mshtml/htmlelem2.c
dll/win32/mshtml/htmlevent.c
dll/win32/mshtml/htmlevent.h
dll/win32/mshtml/htmlimg.c
dll/win32/mshtml/htmlwindow.c
dll/win32/mshtml/mshtml_private.h
dll/win32/mshtml/mutation.c
dll/win32/mshtml/navigate.c
dll/win32/mshtml/nsevents.c
dll/win32/mshtml/nsio.c
dll/win32/mshtml/omnavigator.c
dll/win32/mshtml/persist.c
dll/win32/msi/database.c
dll/win32/msi/msi_De.rc
dll/win32/msi/msi_Fr.rc
dll/win32/msi/msi_It.rc
dll/win32/msi/msi_Lt.rc
dll/win32/msi/msi_Ro.rc
dll/win32/msi/msi_Ru.rc
dll/win32/msi/msi_Si.rc
dll/win32/msi/msiquery.c
dll/win32/msi/msiserver.idl
dll/win32/msvcrt/msvcrt.def
dll/win32/msxml3/domdoc.c
dll/win32/ole32/compobj.c
dll/win32/ole32/stg_bigblockfile.c
dll/win32/ole32/stg_prop.c
dll/win32/ole32/storage32.c
dll/win32/ole32/storage32.h
dll/win32/oleaut32/typelib.c
dll/win32/oleaut32/typelib2.c
dll/win32/oledlg/oledlg_De.rc
dll/win32/oledlg/oledlg_Fr.rc
dll/win32/oledlg/oledlg_Ja.rc
dll/win32/oledlg/oledlg_Lt.rc
dll/win32/oledlg/oledlg_Si.rc
dll/win32/riched20/caret.c
dll/win32/riched20/clipboard.c
dll/win32/riched20/editor.c
dll/win32/riched20/editor.h
dll/win32/riched20/editstr.h
dll/win32/riched20/list.c
dll/win32/riched20/paint.c
dll/win32/riched20/para.c
dll/win32/riched20/reader.c
dll/win32/riched20/richole.c
dll/win32/riched20/rtf.h
dll/win32/riched20/run.c
dll/win32/riched20/style.c
dll/win32/riched20/table.c
dll/win32/riched20/txthost.c
dll/win32/riched20/txtsrv.c
dll/win32/riched20/undo.c
dll/win32/riched20/wrap.c
dll/win32/riched20/writer.c
dll/win32/rpcrt4/cproxy.c
dll/win32/rpcrt4/cpsf.c
dll/win32/rpcrt4/cpsf.h
dll/win32/rpcrt4/cstub.c
dll/win32/rpcrt4/ndr_contexthandle.c
dll/win32/rpcrt4/ndr_fullpointer.c
dll/win32/rpcrt4/ndr_marshall.c
dll/win32/rpcrt4/ndr_misc.h
dll/win32/rpcrt4/ndr_ole.c
dll/win32/rpcrt4/rpc_transport.c
dll/win32/rsaenh/implglue.c
dll/win32/rsaenh/implglue.h
dll/win32/rsaenh/rsaenh.c
dll/win32/rsaenh/rsaenh.rbuild
dll/win32/rsaenh/sha2.c
dll/win32/rsaenh/sha2.h
dll/win32/shdocvw/dochost.c
dll/win32/shdocvw/iexplore.c
dll/win32/shdocvw/navigate.c
dll/win32/shdocvw/oleobject.c
dll/win32/shdocvw/shdocvw.h
dll/win32/shdocvw/webbrowser.c
dll/win32/shell32/autocomplete.c
dll/win32/shlwapi/ordinal.c
dll/win32/shlwapi/shlwapi.spec
dll/win32/shlwapi/string.c
dll/win32/shlwapi/url.c
dll/win32/syssetup/install.c
dll/win32/urlmon/internet.c
dll/win32/urlmon/sec_mgr.c
dll/win32/urlmon/uri.c
dll/win32/urlmon/urlmon.spec
dll/win32/user32/include/dde_private.h
dll/win32/user32/include/user32.h
dll/win32/user32/misc/dllmain.c
dll/win32/user32/windows/defwnd.c
dll/win32/user32/windows/draw.c
dll/win32/user32/windows/menu.c
dll/win32/user32/windows/message.c
dll/win32/usp10/usp10.c
dll/win32/version/info.c
dll/win32/version/resource.c
dll/win32/win32.rbuild
dll/win32/windowscodecs/info.c
dll/win32/windowscodecs/jpegformat.c
dll/win32/windowscodecs/pngformat.c
dll/win32/wininet/http.c
dll/win32/wininet/internet.c
dll/win32/wininet/internet.h
dll/win32/ws2_32/misc/stubs.c
drivers/base/bootvid/bootvid.rbuild
drivers/base/bootvid/i386/bootvid.c
drivers/base/bootvid/i386/vga.c
drivers/battery/battc/battc.c
drivers/bus/acpi/acpi.rbuild
drivers/bus/acpi/busmgr/bus.c
drivers/bus/acpi/busmgr/button.c
drivers/bus/acpi/buspdo.c
drivers/bus/acpi/cmbatt/cmbatt.c
drivers/bus/acpi/cmbatt/cmbatt.h
drivers/bus/acpi/cmbatt/cmbatt.rbuild
drivers/bus/acpi/cmbatt/cmbpnp.c
drivers/bus/acpi/cmbatt/cmbwmi.c
drivers/bus/acpi/cmbatt/cmexec.c
drivers/bus/acpi/compbatt/compbatt.c
drivers/bus/acpi/compbatt/compbatt.h
drivers/bus/acpi/compbatt/compbatt.rbuild
drivers/bus/acpi/compbatt/compbatt.rc
drivers/bus/acpi/compbatt/compmisc.c
drivers/bus/acpi/compbatt/comppnp.c
drivers/bus/acpi/eval.c
drivers/bus/acpi/include/acpi_bus.h
drivers/bus/acpi/include/acpisys.h
drivers/bus/acpi/interface.c
drivers/bus/acpi/main.c
drivers/bus/acpi/osl.c
drivers/bus/isapnp/isapnp.c
drivers/directx/dxapi/dxapi_driver.h
drivers/directx/dxg/ddhmg.c
drivers/directx/dxg/dxg_int.h
drivers/filesystems/ntfs/attrib.c
drivers/input/i8042prt/keyboard.c
drivers/network/dd/ne2000/include/ne2000.h
drivers/network/dd/ne2000/ne2000/8390.c
drivers/network/ndis/include/ndissys.h
drivers/network/ndis/ndis/io.c
drivers/network/ndis/ndis/miniport.c
drivers/network/ndis/ndis/misc.c
drivers/network/tcpip/datalink/lan.c
drivers/network/tcpip/tcpip/dispatch.c
drivers/serial/serenum/detect.c
drivers/serial/serial/devctrl.c
drivers/storage/class/class2/class2.c
drivers/storage/floppy/floppy.c
drivers/storage/ide/atapi/atapi.c
drivers/storage/scsiport/scsiport.c
drivers/storage/scsiport/scsiport.pspec
drivers/storage/scsiport/scsiport.rbuild
drivers/storage/scsiport/stubs.c
drivers/video/displays/framebuf_new/framebuf_new.rbuild
drivers/video/displays/vga/main/enable.c
drivers/video/font/bmfd/font.c
drivers/video/font/bmfd/glyph.c
drivers/video/videoprt/agp.c
drivers/video/videoprt/int10.c
drivers/video/videoprt/interrupt.c
drivers/video/videoprt/resource.c
drivers/video/videoprt/services.c
drivers/video/videoprt/videoprt.c
drivers/wdm/audio/legacy/wdmaud/interface.h
include/ddk/ntddk.h
include/ddk/wdm.h
include/ndk/peb_teb.h
include/ndk/pstypes.h
include/ndk/rtlfuncs.h
include/ndk/rtltypes.h
include/ndk/umtypes.h
include/psdk/cfgmgr32.h
include/psdk/urlmon.idl
include/psdk/wincodec.idl
include/psdk/wincrypt.h
include/reactos/win32k/ntuser.h
include/reactos/wine/config.h
include/reactos/wine/port.h
lib/sdk/crt/math/i386/pow_asm.s
media/doc/README.WINE
media/inf/battery.inf
media/inf/cpu.inf
media/inf/inf.rbuild
ntoskrnl/dbgk/dbgkutil.c
ntoskrnl/include/internal/i386/ke.h
ntoskrnl/include/internal/ke.h
ntoskrnl/include/internal/trap_x.h
ntoskrnl/io/iomgr/drvrlist.c
ntoskrnl/io/pnpmgr/pnpmgr.c
ntoskrnl/ke/i386/usercall.c
ntoskrnl/mm/ARM3/procsup.c
ntoskrnl/mm/mminit.c
ntoskrnl/po/power.c
ntoskrnl/rtl/libsupp.c
ntoskrnl/se/semgr.c
ntoskrnl/se/token.c
subsystems/win32/win32k/eng/surface.c
subsystems/win32/win32k/include/menu.h
subsystems/win32/win32k/include/msgqueue.h
subsystems/win32/win32k/ntuser/keyboard.c
subsystems/win32/win32k/ntuser/menu.c
subsystems/win32/win32k/ntuser/message.c
subsystems/win32/win32k/objects/gdibatch.c
subsystems/win32/win32k/pch.h

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,e7c4b1f..e7c4b1f
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
index 0000000,acb2b50..acb2b50
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
index 0000000,0a46a39..0a46a39
mode 000000,100644..100644
--- /dev/null
index 0000000,221bc3d..221bc3d
mode 000000,100644..100644
--- /dev/null
index 0000000,5d3f1c7..5d3f1c7
mode 000000,100644..100644
--- /dev/null
index 0000000,efb53f5..efb53f5
mode 000000,100644..100644
--- /dev/null
index 0000000,d506679..d506679
mode 000000,100644..100644
--- /dev/null
index 0000000,fae1017..fae1017
mode 000000,100644..100644
Binary files differ
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,b768deb..b768deb
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
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,559323c..559323c
mode 000000,100644..100644
--- /dev/null
index 0000000,2dda412..2dda412
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
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 b945615,0000000..7e4854c
mode 100644,000000..100644
--- /dev/null
@@@ -1,373 -1,0 +1,356 @@@
-   NTSTATUS Status;
 +/*
 + * PROJECT:         ReactOS Kernel
 + * LICENSE:         GPL - See COPYING in the top level directory
 + * FILE:            drivers/battery/battc/battc.c
 + * PURPOSE:         Battery Class Driver
 + * PROGRAMMERS:     Cameron Gutman (cameron.gutman@reactos.org)
 + */
 +
 +#include <battc.h>
 +
 +#define NDEBUG
 +#include <debug.h>
 +
 +NTSTATUS
 +NTAPI
 +DriverEntry(PDRIVER_OBJECT DriverObject,
 +            PUNICODE_STRING RegistryPath)
 +{
 +  DPRINT("Battery class driver initialized\n");
 +
 +  return STATUS_SUCCESS;
 +}
 +
 +BCLASSAPI
 +NTSTATUS
 +NTAPI
 +BatteryClassUnload(PVOID ClassData)
 +{
 +  PBATTERY_CLASS_DATA BattClass = ClassData;
 +
 +  DPRINT("Battery 0x%x is being unloaded\n");
 +
 +  if (BattClass->InterfaceName.Length != 0)
 +  {
 +      IoSetDeviceInterfaceState(&BattClass->InterfaceName, FALSE);
 +      RtlFreeUnicodeString(&BattClass->InterfaceName);
 +  }
 +
 +  ExFreePoolWithTag(BattClass,
 +                    BATTERY_CLASS_DATA_TAG);
 +
 +  return STATUS_SUCCESS;
 +}
 +
 +BCLASSAPI
 +NTSTATUS
 +NTAPI
 +BatteryClassSystemControl(PVOID ClassData,
 +                          PVOID WmiLibContext,
 +                          PDEVICE_OBJECT DeviceObject,
 +                          PIRP Irp,
 +                          PVOID Disposition)
 +{
-   /* FIXME: Uncomment when WmiCompleteRequest is implemented */
- #if 0
-   Status = STATUS_WMI_GUID_NOT_FOUND;
-   WmiCompleteRequest(DeviceObject,
-                      Irp,
-                      Status,
-                      0,
-                      IO_NO_INCREMENT);
- #else
-   Irp->IoStatus.Status = Status = STATUS_WMI_GUID_NOT_FOUND;
-   Irp->IoStatus.Information = 0;
-   IoCompleteRequest(Irp, IO_NO_INCREMENT);
- #endif
-   return Status;
 +  UNIMPLEMENTED
 +
++  return STATUS_WMI_GUID_NOT_FOUND;
 +}
 +
 +BCLASSAPI
 +NTSTATUS
 +NTAPI
 +BatteryClassQueryWmiDataBlock(PVOID ClassData,
 +                              PDEVICE_OBJECT DeviceObject,
 +                              PIRP Irp,
 +                              ULONG GuidIndex,
 +                              PULONG InstanceLengthArray,
 +                              ULONG OutBufferSize,
 +                              PUCHAR Buffer)
 +{
 +  UNIMPLEMENTED
 +
 +  return STATUS_WMI_GUID_NOT_FOUND;
 +}
 +
 +BCLASSAPI
 +NTSTATUS
 +NTAPI
 +BatteryClassStatusNotify(PVOID ClassData)
 +{
 +  PBATTERY_CLASS_DATA BattClass = ClassData;
 +  PBATTERY_WAIT_STATUS BattWait = BattClass->EventTriggerContext;
 +  BATTERY_STATUS BattStatus;
 +  NTSTATUS Status;
 +
 +  DPRINT("Received battery status notification from 0x%x\n", ClassData);
 +
 +  ExAcquireFastMutex(&BattClass->Mutex);
 +  if (!BattClass->Waiting)
 +  {
 +      ExReleaseFastMutex(&BattClass->Mutex);
 +      return STATUS_SUCCESS;
 +  }
 +
 +  switch (BattClass->EventTrigger)
 +  {
 +     case EVENT_BATTERY_TAG:
 +       ExReleaseFastMutex(&BattClass->Mutex);
 +       DPRINT1("Waiting for battery is UNIMPLEMENTED!\n");
 +       break;
 +
 +     case EVENT_BATTERY_STATUS:
 +       ExReleaseFastMutex(&BattClass->Mutex);
 +       Status = BattClass->MiniportInfo.QueryStatus(BattClass->MiniportInfo.Context,
 +                                                    BattWait->BatteryTag,
 +                                                    &BattStatus);
 +       if (!NT_SUCCESS(Status))
 +           return Status;
 +
 +       ExAcquireFastMutex(&BattClass->Mutex);
 +
 +       if (!(BattWait->PowerState & BattStatus.PowerState) ||
 +           (BattWait->HighCapacity > BattStatus.Capacity) ||
 +           (BattWait->LowCapacity < BattStatus.Capacity))
 +       {
 +           KeSetEvent(&BattClass->WaitEvent, IO_NO_INCREMENT, FALSE);
 +       }
 +
 +       ExReleaseFastMutex(&BattClass->Mutex);
 +       break;
 +
 +     default:
 +       ExReleaseFastMutex(&BattClass->Mutex);
 +       ASSERT(FALSE);
 +       break;
 +  }
 +
 +  return STATUS_SUCCESS;
 +}
 +
 +BCLASSAPI
 +NTSTATUS
 +NTAPI
 +BatteryClassInitializeDevice(PBATTERY_MINIPORT_INFO MiniportInfo,
 +                             PVOID *ClassData)
 +{
 +  NTSTATUS Status;
 +  PBATTERY_CLASS_DATA BattClass = ExAllocatePoolWithTag(NonPagedPool,
 +                                                        sizeof(BATTERY_CLASS_DATA),
 +                                                        BATTERY_CLASS_DATA_TAG);
 +
 +  if (!BattClass)
 +      return STATUS_INSUFFICIENT_RESOURCES;
 +
 +  RtlZeroMemory(BattClass, sizeof(BATTERY_CLASS_DATA));
 +
 +  RtlCopyMemory(&BattClass->MiniportInfo,
 +                MiniportInfo,
 +                sizeof(BattClass->MiniportInfo));
 +
 +  KeInitializeEvent(&BattClass->WaitEvent, SynchronizationEvent, FALSE);
 +
 +  ExInitializeFastMutex(&BattClass->Mutex);
 +
 +  Status = IoRegisterDeviceInterface(MiniportInfo->Pdo,
 +                                     &GUID_DEVICE_BATTERY,
 +                                     NULL,
 +                                     &BattClass->InterfaceName);
 +  if (NT_SUCCESS(Status))
 +  {
 +      DPRINT("Initialized battery interface: %wZ\n", &BattClass->InterfaceName);
 +      IoSetDeviceInterfaceState(&BattClass->InterfaceName, TRUE);
 +  }
 +  else
 +  {
 +      DPRINT1("IoRegisterDeviceInterface failed (0x%x)\n", Status);
 +  }
 +
 +  *ClassData = BattClass;
 +
 +  return STATUS_SUCCESS;
 +}
 +
 +BCLASSAPI
 +NTSTATUS
 +NTAPI
 +BatteryClassIoctl(PVOID ClassData,
 +                  PIRP Irp)
 +{
 +  PBATTERY_CLASS_DATA BattClass = ClassData;
 +  PIO_STACK_LOCATION IrpSp = IoGetCurrentIrpStackLocation(Irp);
 +  NTSTATUS Status;
 +  ULONG WaitTime;
 +  PBATTERY_WAIT_STATUS BattWait;
 +  PBATTERY_QUERY_INFORMATION BattQueryInfo;
 +  PBATTERY_SET_INFORMATION BattSetInfo;
 +  LARGE_INTEGER Timeout;
 +  PBATTERY_STATUS BattStatus;
 +  BATTERY_NOTIFY BattNotify;
 +
 +  Irp->IoStatus.Information = 0;
 +
 +  DPRINT("Received IOCTL %x for 0x%x\n", IrpSp->Parameters.DeviceIoControl.IoControlCode,
 +         ClassData);
 +
 +  switch (IrpSp->Parameters.DeviceIoControl.IoControlCode)
 +  {
 +    case IOCTL_BATTERY_QUERY_TAG:
 +      if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(ULONG) ||
 +          IrpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG))
 +      {
 +          Status = STATUS_BUFFER_TOO_SMALL;
 +          break;
 +      }
 +
 +      WaitTime = *(PULONG)Irp->AssociatedIrp.SystemBuffer;
 +
 +      Timeout.QuadPart = Int32x32To64(WaitTime, -1000);
 +
 +      Status = BattClass->MiniportInfo.QueryTag(BattClass->MiniportInfo.Context,
 +                                                (PULONG)Irp->AssociatedIrp.SystemBuffer);
 +      if (!NT_SUCCESS(Status))
 +      {
 +          ExAcquireFastMutex(&BattClass->Mutex);
 +          BattClass->EventTrigger = EVENT_BATTERY_TAG;
 +          BattClass->Waiting = TRUE;
 +          ExReleaseFastMutex(&BattClass->Mutex);
 +
 +          Status = KeWaitForSingleObject(&BattClass->WaitEvent,
 +                                         Executive,
 +                                         KernelMode,
 +                                         FALSE,
 +                                         WaitTime != -1 ? &Timeout : NULL);
 +
 +          ExAcquireFastMutex(&BattClass->Mutex);
 +          BattClass->Waiting = FALSE;
 +          ExReleaseFastMutex(&BattClass->Mutex);
 +
 +          if (Status == STATUS_SUCCESS)
 +          {
 +              Status = BattClass->MiniportInfo.QueryTag(BattClass->MiniportInfo.Context,
 +                                                        (PULONG)Irp->AssociatedIrp.SystemBuffer);
 +              if (NT_SUCCESS(Status))
 +                  Irp->IoStatus.Information = sizeof(ULONG);
 +          }
 +          else
 +          {
 +              Status = STATUS_NO_SUCH_DEVICE;
 +          }
 +      }
 +      else
 +          Irp->IoStatus.Information = sizeof(ULONG);
 +      break;
 +
 +    case IOCTL_BATTERY_QUERY_STATUS:
 +      if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(*BattWait) ||
 +          IrpSp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(BATTERY_STATUS))
 +      {
 +          Status = STATUS_BUFFER_TOO_SMALL;
 +          break;
 +      }
 +
 +      BattWait = Irp->AssociatedIrp.SystemBuffer;
 +
 +      Timeout.QuadPart = Int32x32To64(BattWait->Timeout, -1000);
 +
 +      Status = BattClass->MiniportInfo.QueryStatus(BattClass->MiniportInfo.Context,
 +                                                   BattWait->BatteryTag,
 +                                                   (PBATTERY_STATUS)Irp->AssociatedIrp.SystemBuffer);
 +
 +      BattStatus = Irp->AssociatedIrp.SystemBuffer;
 +
 +      if (!NT_SUCCESS(Status) ||
 +          ((BattWait->PowerState & BattStatus->PowerState) &&
 +           (BattWait->HighCapacity <= BattStatus->Capacity) &&
 +           (BattWait->LowCapacity >= BattStatus->Capacity)))
 +      {
 +          BattNotify.PowerState = BattWait->PowerState;
 +          BattNotify.HighCapacity = BattWait->HighCapacity;
 +          BattNotify.LowCapacity = BattWait->LowCapacity;
 +
 +          BattClass->MiniportInfo.SetStatusNotify(BattClass->MiniportInfo.Context,
 +                                                  BattWait->BatteryTag,
 +                                                  &BattNotify);
 +
 +          ExAcquireFastMutex(&BattClass->Mutex);
 +          BattClass->EventTrigger = EVENT_BATTERY_STATUS;
 +          BattClass->EventTriggerContext = BattWait;
 +          BattClass->Waiting = TRUE;
 +          ExReleaseFastMutex(&BattClass->Mutex);
 +
 +          Status = KeWaitForSingleObject(&BattClass->WaitEvent,
 +                                         Executive,
 +                                         KernelMode,
 +                                         FALSE,
 +                                         BattWait->Timeout != -1 ? &Timeout : NULL);
 +
 +          ExAcquireFastMutex(&BattClass->Mutex);
 +          BattClass->Waiting = FALSE;
 +          ExReleaseFastMutex(&BattClass->Mutex);
 +
 +          BattClass->MiniportInfo.DisableStatusNotify(BattClass->MiniportInfo.Context);
 +
 +          if (Status == STATUS_SUCCESS)
 +          {
 +              Status = BattClass->MiniportInfo.QueryStatus(BattClass->MiniportInfo.Context,
 +                                                           BattWait->BatteryTag,
 +                                                           (PBATTERY_STATUS)Irp->AssociatedIrp.SystemBuffer);
 +              if (NT_SUCCESS(Status))
 +                  Irp->IoStatus.Information = sizeof(ULONG);
 +          }
 +          else
 +          {
 +              Status = STATUS_NO_SUCH_DEVICE;
 +          }
 +      }
 +      else
 +          Irp->IoStatus.Information = sizeof(BATTERY_STATUS);
 +      break;
 +
 +    case IOCTL_BATTERY_QUERY_INFORMATION:
 +      if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(*BattQueryInfo))
 +      {
 +          Status = STATUS_BUFFER_TOO_SMALL;
 +          break;
 +      }
 +
 +      BattQueryInfo = Irp->AssociatedIrp.SystemBuffer;
 +
 +      Status = BattClass->MiniportInfo.QueryInformation(BattClass->MiniportInfo.Context,
 +                                                        BattQueryInfo->BatteryTag,
 +                                                        BattQueryInfo->InformationLevel,
 +                                                        BattQueryInfo->AtRate,
 +                                                        Irp->AssociatedIrp.SystemBuffer,
 +                                                        IrpSp->Parameters.DeviceIoControl.OutputBufferLength,
 +                                                        &Irp->IoStatus.Information);
 +      if (!NT_SUCCESS(Status))
 +          DPRINT1("QueryInformation failed (0x%x)\n", Status);
 +      break;
 +    case IOCTL_BATTERY_SET_INFORMATION:
 +      if (IrpSp->Parameters.DeviceIoControl.InputBufferLength < sizeof(*BattSetInfo))
 +      {
 +          Status = STATUS_BUFFER_TOO_SMALL;
 +          break;
 +      }
 +
 +      BattSetInfo = Irp->AssociatedIrp.SystemBuffer;
 +
 +      Status = BattClass->MiniportInfo.SetInformation(BattClass->MiniportInfo.Context,
 +                                                      BattSetInfo->BatteryTag,
 +                                                      BattSetInfo->InformationLevel,
 +                                                      BattSetInfo->Buffer);
 +      if (!NT_SUCCESS(Status))
 +          DPRINT1("SetInformation failed (0x%x)\n", Status);
 +      break;
 +
 +    default:
 +      DPRINT1("Received unsupported IRP %x\n", IrpSp->Parameters.DeviceIoControl.IoControlCode);
 +      /* Do NOT complete the irp */
 +      return STATUS_NOT_SUPPORTED;
 +  }
 +
 +  Irp->IoStatus.Status = Status;
 +  IoCompleteRequest(Irp, IO_NO_INCREMENT);
 +
 +  return Status;
 +}
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,68af857..68af857
mode 000000,100644..100644
--- /dev/null
Simple merge
Simple merge
index 0000000,5971705..5971705
mode 000000,100644..100644
--- /dev/null
Simple merge
Simple merge
Simple merge
index 322d6d1,0000000..996353c
mode 100644,000000..100644
--- /dev/null
@@@ -1,155 -1,0 +1,155 @@@
- #include <ddk/ntddk.h>
- #include <ddk/ntddmou.h>
- #include <ddk/ntifs.h>
- #include <ddk/tvout.h>
- #include <ndk/ntndk.h>
 +
 +/* DDK/NDK/SDK Headers */
- #include <ddk/ddkmapi.h>
++#include <ntddk.h>
++#include <ntddmou.h>
++#include <ntifs.h>
++#include <tvout.h>
++#include <ntndk.h>
 +
 +#include <stdarg.h>
 +#include <windef.h>
 +#include <winerror.h>
 +#include <wingdi.h>
 +#define NT_BUILD_ENVIRONMENT
 +#include <winddi.h>
 +#include <prntfont.h>
 +#include <dde.h>
 +
 +
++#include <ddkmapi.h>
 +
 +/* Prototypes */
 +VOID DxGetVersionNumber(PVOID lpvInBuffer, LPDDGETVERSIONNUMBER lpvOutBuffer);
 +VOID DxCloseHandle(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxOpenDirectDraw(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxOpenSurface(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxOpenVideoPort(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxGetKernelCaps(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxGetFieldNumber(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxSetFieldNumber(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxSetSkipPattern(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxGetSurfaceState(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxSetSurfaceState(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxLock(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxFlipOverlay(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxFlipVideoPort(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxGetCurrentAutoflip(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxGetPreviousAutoflip(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxRegisterEvent(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxUnregisterEvent(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxGetPolarity(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxOpenVpCatureDevice(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxAddVpCaptureBuffer(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +VOID DxFlushVpCaptureBuffs(PVOID lpvInBuffer, PVOID lpvOutBuffer);
 +
 +/* Internal driver table being use as looking up table for correct size of structs */
 +DWORD tblCheckInBuffer [] =
 +{
 +    /* DD_DXAPI_GETVERSIONNUMBER */
 +    0,
 +    /* DD_DXAPI_CLOSEHANDLE */
 +    sizeof(DDCLOSEHANDLE),
 +    0, // DD_DXAPI_OPENDIRECTDRAW
 +    0, // DD_DXAPI_OPENSURFACE
 +    0, // DD_DXAPI_OPENVIDEOPORT
 +    /* DD_DXAPI_GETKERNELCAPS */
 +    sizeof(HANDLE),
 +    /* DD_DXAPI_GET_VP_FIELD_NUMBER */
 +    sizeof(DDGETFIELDNUMIN),
 +    0, // DD_DXAPI_SET_VP_FIELD_NUMBER
 +    0, // DD_DXAPI_SET_VP_SKIP_FIELD
 +    0, // DD_DXAPI_GET_SURFACE_STATE
 +    0, // DD_DXAPI_SET_SURFACE_STATE
 +    0, // DD_DXAPI_LOCK
 +    /* DD_DXAPI_FLIP_OVERLAY */
 +    sizeof(DDFLIPOVERLAY),
 +    /* DD_DXAPI_FLIP_VP */
 +    sizeof(DDFLIPVIDEOPORT),
 +    /* DD_DXAPI_GET_CURRENT_VP_AUTOFLIP_SURFACE */
 +    sizeof(DDGETAUTOFLIPIN),
 +    /* DD_DXAPI_GET_LAST_VP_AUTOFLIP_SURFACE */
 +    sizeof(DDGETAUTOFLIPIN),
 +    /* DD_DXAPI_REGISTER_CALLBACK */
 +    sizeof(DDREGISTERCALLBACK),
 +    /* DD_DXAPI_UNREGISTER_CALLBACK */
 +    sizeof(DDREGISTERCALLBACK),
 +    /* DD_DXAPI_GET_POLARITY */
 +    sizeof(DDGETPOLARITYIN),
 +    /* DD_DXAPI_OPENVPCAPTUREDEVICE */
 +    sizeof(DDOPENVPCAPTUREDEVICEIN),
 +    /* DD_DXAPI_ADDVPCAPTUREBUFFER */
 +    sizeof(DDADDVPCAPTUREBUFF),
 +    /* DD_DXAPI_FLUSHVPCAPTUREBUFFERS */
 +    sizeof(HANDLE)
 +};
 +
 +DWORD tblCheckOutBuffer [] =
 +{
 +    /* DD_DXAPI_GETVERSIONNUMBER */
 +    sizeof(DDGETVERSIONNUMBER),
 +    /* DD_DXAPI_CLOSEHANDLE */
 +    sizeof(DWORD),
 +    0, // DD_DXAPI_OPENDIRECTDRAW
 +    0, // DD_DXAPI_OPENSURFACE
 +    0, // DD_DXAPI_OPENVIDEOPORT
 +    /* DD_DXAPI_GETKERNELCAPS */
 +    sizeof(DDGETKERNELCAPSOUT),
 +    /* DD_DXAPI_GET_VP_FIELD_NUMBER */
 +    sizeof(DDGETFIELDNUMOUT),
 +    0, // DD_DXAPI_SET_VP_FIELD_NUMBER
 +    0, // DD_DXAPI_SET_VP_SKIP_FIELD
 +    0, // DD_DXAPI_GET_SURFACE_STATE
 +    0, // DD_DXAPI_SET_SURFACE_STATE
 +    0, // DD_DXAPI_LOCK
 +    /* DD_DXAPI_FLIP_OVERLAY */
 +    sizeof(DWORD),
 +    /* DD_DXAPI_FLIP_VP */
 +    sizeof(DWORD),
 +    /* DD_DXAPI_GET_CURRENT_VP_AUTOFLIP_SURFACE */
 +    sizeof(DDGETAUTOFLIPOUT),
 +    /* DD_DXAPI_GET_LAST_VP_AUTOFLIP_SURFACE */
 +    sizeof(DDGETAUTOFLIPOUT),
 +    /* DD_DXAPI_REGISTER_CALLBACK */
 +    sizeof(DWORD),
 +    /* DD_DXAPI_UNREGISTER_CALLBACK */
 +    sizeof(DWORD),
 +    /* DD_DXAPI_GET_POLARITY */
 +    sizeof(DDGETPOLARITYOUT),
 +    /* DD_DXAPI_OPENVPCAPTUREDEVICE */
 +    sizeof(DDOPENVPCAPTUREDEVICEOUT),
 +    /* DD_DXAPI_ADDVPCAPTUREBUFFER */
 +    sizeof(DWORD),
 +    /* DD_DXAPI_FLUSHVPCAPTUREBUFFERS */
 +    sizeof(DWORD)
 +};
 +
 +
 +/* Internal driver function */
 +DRVFN gDxApiEntryPoint [] = 
 +{
 +    {DD_DXAPI_GETVERSIONNUMBER - DD_FIRST_DXAPI, (PFN) DxGetVersionNumber},
 +    {DD_DXAPI_CLOSEHANDLE - DD_FIRST_DXAPI, (PFN) DxCloseHandle},
 +    {DD_DXAPI_OPENDIRECTDRAW - DD_FIRST_DXAPI, (PFN) DxOpenDirectDraw},
 +    {DD_DXAPI_OPENSURFACE - DD_FIRST_DXAPI, (PFN) DxOpenSurface},
 +    {DD_DXAPI_OPENVIDEOPORT - DD_FIRST_DXAPI, (PFN) DxOpenVideoPort},
 +    {DD_DXAPI_GETKERNELCAPS - DD_FIRST_DXAPI, (PFN) DxGetKernelCaps},
 +    {DD_DXAPI_GET_VP_FIELD_NUMBER - DD_FIRST_DXAPI, (PFN) DxGetFieldNumber},
 +    {DD_DXAPI_SET_VP_FIELD_NUMBER - DD_FIRST_DXAPI, (PFN) DxSetFieldNumber},
 +    {DD_DXAPI_SET_VP_SKIP_FIELD - DD_FIRST_DXAPI, (PFN) DxSetSkipPattern},
 +    {DD_DXAPI_GET_SURFACE_STATE - DD_FIRST_DXAPI, (PFN) DxGetSurfaceState},
 +    {DD_DXAPI_SET_SURFACE_STATE - DD_FIRST_DXAPI, (PFN) DxSetSurfaceState},
 +    {DD_DXAPI_LOCK - DD_FIRST_DXAPI, (PFN) DxLock},
 +    {DD_DXAPI_FLIP_OVERLAY - DD_FIRST_DXAPI, (PFN) DxFlipOverlay},
 +    {DD_DXAPI_FLIP_VP - DD_FIRST_DXAPI, (PFN) DxFlipVideoPort},
 +    {DD_DXAPI_GET_CURRENT_VP_AUTOFLIP_SURFACE - DD_FIRST_DXAPI, (PFN) DxGetCurrentAutoflip},
 +    {DD_DXAPI_GET_LAST_VP_AUTOFLIP_SURFACE - DD_FIRST_DXAPI, (PFN) DxGetPreviousAutoflip},
 +    {DD_DXAPI_REGISTER_CALLBACK - DD_FIRST_DXAPI, (PFN) DxRegisterEvent},
 +    {DD_DXAPI_UNREGISTER_CALLBACK - DD_FIRST_DXAPI, (PFN) DxUnregisterEvent},
 +    {DD_DXAPI_GET_POLARITY - DD_FIRST_DXAPI, (PFN) DxGetPolarity},
 +    {DD_DXAPI_OPENVPCAPTUREDEVICE - DD_FIRST_DXAPI, (PFN) DxOpenVpCatureDevice},
 +    {DD_DXAPI_ADDVPCAPTUREBUFFER - DD_FIRST_DXAPI, (PFN) DxAddVpCaptureBuffer},
 +    {DD_DXAPI_FLUSHVPCAPTUREBUFFERS - DD_FIRST_DXAPI, (PFN) DxFlushVpCaptureBuffs}
 +};
 +
 +
 +
Simple merge
index b457e6d,0000000..ccb2204
mode 100644,000000..100644
--- /dev/null
@@@ -1,112 -1,0 +1,112 @@@
- #include <ddk/ntddk.h>
- #include <ddk/ntddmou.h>
- #include <ddk/ntifs.h>
- #include <ddk/tvout.h>
- #include <ndk/ntndk.h>
 +/* DDK/NDK/SDK Headers */
++#include <ntddk.h>
++#include <ntddmou.h>
++#include <ntifs.h>
++#include <tvout.h>
++#include <ntndk.h>
 +
 +/* Win32 Headers */
 +#define WINBASEAPI
 +#define STARTF_USESIZE 2
 +#define STARTF_USEPOSITION 4
 +#define INTERNAL_CALL NTAPI
 +#define NT_BUILD_ENVIRONMENT
 +
 +#include <stdarg.h>
 +#include <windef.h>
 +#include <winerror.h>
 +#include <wingdi.h>
 +#include <winddi.h>
 +#include <prntfont.h>
 +#include <dde.h>
 +
 +/* DXG treats this as opaque */
 +typedef PVOID PDC;
 +typedef PVOID PW32THREAD;
 +
 +typedef struct _DD_BASEOBJECT
 +{
 +  HGDIOBJ     hHmgr;
 +  ULONG       ulShareCount;
 +  USHORT      cExclusiveLock;
 +  USHORT      BaseFlags;
 +  PW32THREAD  Tid;
 +} DD_BASEOBJECT, *PDD_BASEOBJECT;
 +
 +#include <drivers/directx/directxint.h>
 +#include <drivers/directx/dxg.h>
 +#include <drivers/directx/dxeng.h>
 +
 +#include "tags.h"
 +
 +#define ObjType_DDSURFACE_TYPE    2
 +#define ObjType_DDVIDEOPORT_TYPE  4
 +#define ObjType_DDMOTIONCOMP_TYPE 5
 +
 + typedef struct _DD_ENTRY
 +{
 +    union
 +    {
 +        PDD_BASEOBJECT pobj;
 +        HANDLE hFree;
 +    };
 +    union
 +    {
 +         ULONG ulObj;
 +         struct
 +         {
 +                USHORT Count;
 +                USHORT Lock;
 +                HANDLE Pid;
 +         };
 +    } ObjectOwner;
 +    USHORT FullUnique;
 +    UCHAR Objt;
 +    UCHAR Flags;
 +    PVOID pUser;
 +} DD_ENTRY, *PDD_ENTRY;
 +
 +typedef struct _EDD_SURFACE_LOCAL
 +{
 +     DD_BASEOBJECT Object;
 +     DD_SURFACE_LOCAL Surfacelcl;
 +} EDD_SURFACE_LOCAL, *PEDD_SURFACE_LOCAL;
 +
 +/* exported functions */
 +NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2);
 +NTSTATUS NTAPI GsDriverEntry(IN PVOID Context1, IN PVOID Context2);
 +NTSTATUS APIENTRY DxDdCleanupDxGraphics(VOID);
 +
 +/* Global pointers */
 +extern ULONG gcSizeDdHmgr;
 +extern PDD_ENTRY gpentDdHmgr;
 +extern ULONG gcMaxDdHmgr;
 +extern PDD_ENTRY gpentDdHmgrLast;
 +extern HANDLE ghFreeDdHmgr;
 +extern HSEMAPHORE ghsemHmgr;
 +extern LONG gcDummyPageRefCnt;
 +extern HSEMAPHORE ghsemDummyPage;
 +extern VOID *gpDummyPage;
 +extern PEPROCESS gpepSession;
 +extern PLARGE_INTEGER gpLockShortDelay;
 +
 +/* Driver list export functions */
 +DWORD NTAPI DxDxgGenericThunk(ULONG_PTR ulIndex, ULONG_PTR ulHandle, SIZE_T *pdwSizeOfPtr1, PVOID pvPtr1, SIZE_T *pdwSizeOfPtr2, PVOID pvPtr2);
 +DWORD NTAPI DxDdIoctl(ULONG ulIoctl, PVOID pBuffer, ULONG ulBufferSize);
 +PDD_SURFACE_LOCAL NTAPI DxDdLockDirectDrawSurface(HANDLE hDdSurface);
 +BOOL NTAPI DxDdUnlockDirectDrawSurface(PDD_SURFACE_LOCAL pSurface);
 +
 +/* Internal functions */
 +BOOL FASTCALL VerifyObjectOwner(PDD_ENTRY pEntry);
 +BOOL FASTCALL DdHmgCreate(VOID);
 +BOOL FASTCALL DdHmgDestroy(VOID);
 +PVOID FASTCALL DdHmgLock(HANDLE DdHandle, UCHAR ObjectType, BOOLEAN LockOwned);
 +
 +/* define stuff */
 +#define drvDxEngLockDC          gpEngFuncs[DXENG_INDEX_DxEngLockDC]
 +#define drvDxEngGetDCState      gpEngFuncs[DXENG_INDEX_DxEngGetDCState]
 +#define drvDxEngGetHdevData     gpEngFuncs[DXENG_INDEX_DxEngGetHdevData]
 +#define drvDxEngUnlockDC        gpEngFuncs[DXENG_INDEX_DxEngUnlockDC]
 +#define drvDxEngUnlockHdev      gpEngFuncs[DXENG_INDEX_DxEngUnlockHdev]
 +#define drvDxEngLockHdev        gpEngFuncs[DXENG_INDEX_DxEngLockHdev]
 +
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,0000000..478c35b
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,246 @@@
++/*
++ * COPYRIGHT:       See COPYING in the top level directory
++ * PROJECT:         ReactOS Storage Stack
++ * FILE:            drivers/storage/scsiport/stubs.c
++ * PURPOSE:         SCSI port driver
++ * PROGRAMMER:      Timo Kreuzer (timo.kreuzer@reactos.org)
++ */
++
++/* INCLUDES *****************************************************************/
++
++#include <ntddk.h>
++#include <srb.h>
++
++#define NDEBUG
++#include <debug.h>
++
++SCSI_PHYSICAL_ADDRESS
++NTAPI
++ScsiPortConvertUlongToPhysicalAddress(
++    IN ULONG  UlongAddress)
++{
++    return RtlConvertUlongToLargeInteger(UlongAddress);
++}
++
++VOID
++NTAPI
++ScsiPortReadPortBufferUchar(
++    IN PUCHAR Port,
++    IN PUCHAR Buffer,
++    IN ULONG  Count)
++{
++    READ_PORT_BUFFER_UCHAR(Port, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortReadPortBufferUshort(
++    IN PUSHORT Port,
++    IN PUSHORT Buffer,
++    IN ULONG   Count)
++{
++    READ_PORT_BUFFER_USHORT(Port, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortReadPortBufferUlong(
++    IN PULONG Port,
++    IN PULONG Buffer,
++    IN ULONG  Count)
++{
++    READ_PORT_BUFFER_ULONG(Port, Buffer, Count);
++}
++
++UCHAR
++NTAPI
++ScsiPortReadPortUchar(
++    IN PUCHAR Port)
++{
++    return READ_PORT_UCHAR(Port);
++}
++
++USHORT
++NTAPI
++ScsiPortReadPortUshort(
++    IN PUSHORT Port)
++{
++    return READ_PORT_USHORT(Port);
++}
++
++ULONG
++NTAPI
++ScsiPortReadPortUlong(
++    IN PULONG Port)
++{
++    return READ_PORT_ULONG(Port);
++}
++
++VOID
++NTAPI
++ScsiPortReadRegisterBufferUchar(
++    IN PUCHAR Register,
++    IN PUCHAR Buffer,
++    IN ULONG Count)
++{
++    READ_REGISTER_BUFFER_UCHAR(Register, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortReadRegisterBufferUshort(
++    IN PUSHORT Register,
++    IN PUSHORT Buffer,
++    IN ULONG Count)
++{
++    READ_REGISTER_BUFFER_USHORT(Register, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortReadRegisterBufferUlong(
++    IN PULONG Register,
++    IN PULONG Buffer,
++    IN ULONG Count)
++{
++    READ_REGISTER_BUFFER_ULONG(Register, Buffer, Count);
++}
++
++UCHAR
++NTAPI
++ScsiPortReadRegisterUchar(
++    IN PUCHAR Register)
++{
++    return READ_REGISTER_UCHAR(Register);
++}
++
++USHORT
++NTAPI
++ScsiPortReadRegisterUshort(
++    IN PUSHORT Register)
++{
++    return READ_REGISTER_USHORT(Register);
++}
++
++ULONG
++NTAPI
++ScsiPortReadRegisterUlong(
++    IN PULONG Register)
++{
++    return READ_REGISTER_ULONG(Register);
++}
++
++VOID
++NTAPI
++ScsiPortWritePortBufferUchar(
++    IN PUCHAR Port,
++    IN PUCHAR Buffer,
++    IN ULONG Count)
++{
++    WRITE_PORT_BUFFER_UCHAR(Port, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortWritePortBufferUshort(
++    IN PUSHORT Port,
++    IN PUSHORT Buffer,
++    IN ULONG Count)
++{
++    WRITE_PORT_BUFFER_USHORT(Port, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortWritePortBufferUlong(
++    IN PULONG Port,
++    IN PULONG Buffer,
++    IN ULONG Count)
++{
++    WRITE_PORT_BUFFER_ULONG(Port, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortWritePortUchar(
++    IN PUCHAR Port,
++    IN UCHAR Value)
++{
++    WRITE_PORT_UCHAR(Port, Value);
++}
++
++VOID
++NTAPI
++ScsiPortWritePortUshort(
++    IN PUSHORT Port,
++    IN USHORT Value)
++{
++    WRITE_PORT_USHORT(Port, Value);
++}
++
++VOID
++NTAPI
++ScsiPortWritePortUlong(
++    IN PULONG Port,
++    IN ULONG Value)
++{
++    WRITE_PORT_ULONG(Port, Value);
++}
++
++VOID
++NTAPI
++ScsiPortWriteRegisterBufferUchar(
++    IN PUCHAR Register,
++    IN PUCHAR Buffer,
++    IN ULONG Count)
++{
++    WRITE_REGISTER_BUFFER_UCHAR(Register, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortWriteRegisterBufferUshort(
++    IN PUSHORT Register,
++    IN PUSHORT Buffer,
++    IN ULONG Count)
++{
++    WRITE_REGISTER_BUFFER_USHORT(Register, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortWriteRegisterBufferUlong(
++    IN PULONG Register,
++    IN PULONG Buffer,
++    IN ULONG Count)
++{
++    WRITE_REGISTER_BUFFER_ULONG(Register, Buffer, Count);
++}
++
++VOID
++NTAPI
++ScsiPortWriteRegisterUchar(
++    IN PUCHAR  Register,
++    IN ULONG  Value)
++{
++    WRITE_REGISTER_UCHAR(Register, Value);
++}
++
++VOID
++NTAPI
++ScsiPortWriteRegisterUshort(
++    IN PUSHORT Register,
++    IN USHORT Value)
++{
++    WRITE_REGISTER_USHORT(Register, Value);
++}
++
++VOID
++NTAPI
++ScsiPortWriteRegisterUlong(
++    IN PULONG Register,
++    IN ULONG Value)
++{
++    WRITE_REGISTER_ULONG(Register, Value);
++}
++
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 7ccfa08,0000000..61c23d3
mode 100644,000000..100644
--- /dev/null
@@@ -1,5768 -1,0 +1,5760 @@@
- #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
 +/*
 + * 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>
 +
 +/* FIXME
 +#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 {
 +    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 {
 +    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 {
 +    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 {
 +    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 {
 +    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;
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  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 {
 +  struct {
 +    USHORT FunctionNumber:3;
 +    USHORT DeviceNumber:5;
 +    USHORT BusNumber:8;
 +  } DUMMYSTRUCTNAME;
 +  USHORT AsUSHORT;
 +} PCI_EXPRESS_PME_REQUESTOR_ID, *PPCI_EXPRESS_PME_REQUESTOR_ID;
 +
 +#if defined(_WIN64)
 +
 +#ifndef USE_DMA_MACROS
 +#define USE_DMA_MACROS
 +#endif
 +
 +#ifndef NO_LEGACY_DRIVERS
 +#define NO_LEGACY_DRIVERS
 +#endif
 +
 +#endif /* defined(_WIN64) */
 +
 +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)
 +  union {
 +    UCHAR TscQpcData;
 +    struct {
 +      UCHAR TscQpcEnabled:1;
 +      UCHAR TscQpcSpareFlag:1;
 +      UCHAR TscQpcShift:6;
 +    } DUMMYSTRUCTNAME;
 +  } DUMMYUNIONNAME;
 +  UCHAR TscQpcPad[2];
 +#endif
 +#if (NTDDI_VERSION >= NTDDI_VISTA)
 +  union {
 +    ULONG SharedDataFlags;
 +    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;
 +  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;
 +  union {
 +    IN ULONG Flags;
 +    struct {
 +      IN ULONG FileOpenNameAvailable:1;
 +      IN ULONG Reserved:31;
 +    };
 +  };
 +  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;
 +  __GNU_EXTENSION union {
 +    ULONG FiberData;
 +    ULONG Version;
 +  };
 +  ULONG ArbitraryUserPointer;
 +  ULONG Self;
 +} NT_TIB32,*PNT_TIB32;
 +
 +typedef struct _NT_TIB64 {
 +  ULONG64 ExceptionList;
 +  ULONG64 StackBase;
 +  ULONG64 StackLimit;
 +  ULONG64 SubSystemTib;
 +  __GNU_EXTENSION union {
 +    ULONG64 FiberData;
 +    ULONG Version;
 +  };
 +  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;
 +  union {
 +    ULONG Flags;
 +    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 {
 +  __GNU_EXTENSION union {
 +    struct {
 +      HANDLE DirectoryHandle;
 +    } Set;
 +    struct {
 +      ULONG DriveMap;
 +      UCHAR DriveType[32];
 +    } Query;
 +  };
 +} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
 +
 +typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX {
 +  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
 +
 +typedef enum _INTERLOCKED_RESULT {
 +  ResultNegative = RESULT_NEGATIVE,
 +  ResultZero = RESULT_ZERO,
 +  ResultPositive = RESULT_POSITIVE
 +} INTERLOCKED_RESULT;
 +
 +#ifdef _X86_
 +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 */
 +
- #else
++#if (NTDDI_VERSION >= NTDDI_WIN2K)
 +
++#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
 +
++/* Nothing here */
 +
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
++#else /* USE_DMA_MACROS ... */
 +
- #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
- #endif
 +//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);
 +
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
++#endif /* USE_DMA_MACROS ... */
 +
 +#if !defined(NO_LEGACY_DRIVERS)
- #endif
 +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);
- #if (NTDDI_VERSION >= NTDDI_WIN2K)
 +#endif /* !defined(NO_LEGACY_DRIVERS) */
 +
- #endif
 +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
++#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
 +
 +#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_WINXP)
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmAdvanceMdl(
 +  IN OUT PMDL Mdl,
 +  IN ULONG NumberOfBytes);
 +
 +NTKERNELAPI
 +PVOID
 +NTAPI
 +MmAllocateMappingAddress(
 +  IN SIZE_T NumberOfBytes,
 +  IN ULONG PoolTag);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +MmFreeMappingAddress(
 +  IN PVOID BaseAddress,
 +  IN ULONG PoolTag);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmIsVerifierEnabled(
 +  OUT PULONG VerifierFlags);
 +
 +NTKERNELAPI
 +PVOID
 +NTAPI
 +MmMapLockedPagesWithReservedMapping(
 +  IN PVOID MappingAddress,
 +  IN ULONG PoolTag,
 +  IN PMDL MemoryDescriptorList,
 +  IN MEMORY_CACHING_TYPE CacheType);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmProtectMdlSystemAddress(
 +  IN PMDL MemoryDescriptorList,
 +  IN ULONG NewProtect);
 +
 +NTKERNELAPI
 +VOID
 +NTAPI
 +MmUnmapReservedMapping(
 +  IN PVOID BaseAddress,
 +  IN ULONG PoolTag,
 +  IN PMDL MemoryDescriptorList);
 +
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmAddVerifierThunks(
 +  IN PVOID ThunkBuffer,
 +  IN ULONG ThunkBufferSize);
 +
 +#endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
 +
 +#if (NTDDI_VERSION >= NTDDI_WS03)
 +NTKERNELAPI
 +NTSTATUS
 +NTAPI
 +MmCreateMirror(VOID);
 +#endif
 +
 +
 +#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
 +
 +/******************************************************************************
 + *                          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
 +
 +/* FIXME : These definitions below doesn't belong to NTDDK */
 +
 +#ifdef __cplusplus
 +}
 +#endif
index a8d34bc,0000000..2742d75
mode 100644,000000..100644
--- /dev/null
@@@ -1,16014 -1,0 +1,16017 @@@
- extern PBOOLEAN Mm64BitPhysicalAddress;
 +/*
 + * wdm.h
 + *
 + * Windows NT WDM Driver Developer 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
 +
 +#ifndef _WDMDDK_
 +#define _WDMDDK_
 +
 +/* Included via ntddk.h? */
 +#ifndef _NTDDK_
 +#define _NTDDK_
 +#define _WDM_INCLUDED_
 +#define _DDK_DRIVER_
 +#define NO_INTERLOCKED_INTRINSICS
 +#endif /* _NTDDK_ */
 +
 +/* Dependencies */
 +#define NT_INCLUDED
 +#include <excpt.h>
 +#include <ntdef.h>
 +#include <ntstatus.h>
 +#include <ntiologc.h>
 +
 +#ifndef GUID_DEFINED
 +#include <guiddef.h>
 +#endif
 +
 +#ifdef _MAC
 +#ifndef _INC_STRING
 +#include <string.h>
 +#endif /* _INC_STRING */
 +#else
 +#include <string.h>
 +#endif /* _MAC */
 +
 +#ifndef _KTMTYPES_
 +typedef GUID UOW, *PUOW;
 +#endif
 +
 +typedef GUID *PGUID;
 +
 +#if (NTDDI_VERSION >= NTDDI_WINXP)
 +#include <dpfilter.h>
 +#endif
 +
 +#include "intrin.h"
 +
 +#ifdef __cplusplus
 +extern "C" {
 +#endif
 +
 +#if !defined(_NTHALDLL_) && !defined(_BLDR_)
 +#define NTHALAPI DECLSPEC_IMPORT
 +#else
 +#define NTHALAPI
 +#endif
 +
 +/* For ReactOS */
 +#if !defined(_NTOSKRNL_) && !defined(_BLDR_)
 +#define NTKERNELAPI DECLSPEC_IMPORT
 +#else
 +#define NTKERNELAPI
 +#endif
 +
 +#if defined(_X86_) && !defined(_NTHAL_)
 +#define _DECL_HAL_KE_IMPORT  DECLSPEC_IMPORT
 +#elif defined(_X86_)
 +#define _DECL_HAL_KE_IMPORT
 +#else
 +#define _DECL_HAL_KE_IMPORT NTKERNELAPI
 +#endif
 +
 +#if defined(_WIN64)
 +#define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
 +#else
 +#define POINTER_ALIGNMENT
 +#endif
 +
 +/* Helper macro to enable gcc's extension.  */
 +#ifndef __GNU_EXTENSION
 +#ifdef __GNUC__
 +#define __GNU_EXTENSION __extension__
 +#else
 +#define __GNU_EXTENSION
 +#endif
 +#endif
 +
 +#if defined(_MSC_VER)
 +
 +/* Disable some warnings */
 +#pragma warning(disable:4115) /* Named type definition in parentheses */
 +#pragma warning(disable:4201) /* Nameless unions and structs */
 +#pragma warning(disable:4214) /* Bit fields of other types than int */
 +#pragma warning(disable:4820) /* Padding added, due to alignemnet requirement */
 +
 +/* Indicate if #pragma alloc_text() is supported */
 +#if defined(_M_IX86) || defined(_M_AMD64) || defined(_M_IA64)
 +#define ALLOC_PRAGMA 1
 +#endif
 +
 +/* Indicate if #pragma data_seg() is supported */
 +#if defined(_M_IX86) || defined(_M_AMD64)
 +#define ALLOC_DATA_PRAGMA 1
 +#endif
 +
 +#endif
 +
 +/* Forward declarations */
 +struct _IRP;
 +struct _MDL;
 +struct _KAPC;
 +struct _KDPC;
 +struct _FILE_OBJECT;
 +struct _DMA_ADAPTER;
 +struct _DEVICE_OBJECT;
 +struct _DRIVER_OBJECT;
 +struct _IO_STATUS_BLOCK;
 +struct _DEVICE_DESCRIPTION;
 +struct _SCATTER_GATHER_LIST;
 +struct _DRIVE_LAYOUT_INFORMATION;
 +struct _COMPRESSED_DATA_INFO;
 +struct _IO_RESOURCE_DESCRIPTOR;
 +
 +/* Structures not exposed to drivers */
 +typedef struct _OBJECT_TYPE *POBJECT_TYPE;
 +typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE;
 +typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE;
 +typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
 +typedef struct _EPROCESS *PEPROCESS;
 +typedef struct _ETHREAD *PETHREAD;
 +typedef struct _IO_TIMER *PIO_TIMER;
 +typedef struct _KINTERRUPT *PKINTERRUPT;
 +typedef struct _KPROCESS *PKPROCESS;
 +typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
 +typedef struct _CONTEXT *PCONTEXT;
 +
 +#if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && ( defined(_NTDDK_) || defined(_NTDRIVER_) || defined(_NTOSP_))
 +typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
 +#elif defined(_WDM_INCLUDED_)
 +typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
 +#else
 +typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT; 
 +#endif
 +
 +#ifndef DEFINE_GUIDEX
 +#ifdef _MSC_VER
 +#define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
 +#else
 +#define DEFINE_GUIDEX(name) EXTERN_C const GUID name
 +#endif
 +#endif /* DEFINE_GUIDEX */
 +
 +#ifndef STATICGUIDOF
 +#define STATICGUIDOF(guid) STATIC_##guid
 +#endif
 +
 +/* GUID Comparison */
 +#ifndef __IID_ALIGNED__
 +#define __IID_ALIGNED__
 +#ifdef __cplusplus
 +inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
 +{
 +    return ( (*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && 
 +             (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)) );
 +}
 +#else
 +#define IsEqualGUIDAligned(guid1, guid2) \
 +           ( (*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && \
 +             (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)) )
 +#endif /* __cplusplus */
 +#endif /* !__IID_ALIGNED__ */
 +
 +
 +/******************************************************************************
 + *                           INTERLOCKED Functions                            *
 + ******************************************************************************/
 +//
 +// Intrinsics (note: taken from our winnt.h)
 +// FIXME: 64-bit
 +//
 +#if defined(__GNUC__)
 +
 +static __inline__ BOOLEAN
 +InterlockedBitTestAndSet(
 +  IN LONG volatile *Base,
 +  IN LONG Bit)
 +{
 +#if defined(_M_IX86)
 +  LONG OldBit;
 +  __asm__ __volatile__("lock "
 +                       "btsl %2,%1\n\t"
 +                       "sbbl %0,%0\n\t"
 +                       :"=r" (OldBit),"+m" (*Base)
 +                       :"Ir" (Bit)
 +                       : "memory");
 +  return OldBit;
 +#else
 +  return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1;
 +#endif
 +}
 +
 +static __inline__ BOOLEAN
 +InterlockedBitTestAndReset(
 +  IN LONG volatile *Base,
 +  IN LONG Bit)
 +{
 +#if defined(_M_IX86)
 +  LONG OldBit;
 +  __asm__ __volatile__("lock "
 +                       "btrl %2,%1\n\t"
 +                       "sbbl %0,%0\n\t"
 +                       :"=r" (OldBit),"+m" (*Base)
 +                       :"Ir" (Bit)
 +                       : "memory");
 +  return OldBit;
 +#else
 +  return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1;
 +#endif
 +}
 +
 +#endif /* defined(__GNUC__) */
 +
 +#define BitScanForward _BitScanForward
 +#define BitScanReverse _BitScanReverse
 +#define BitTest _bittest
 +#define BitTestAndComplement _bittestandcomplement
 +#define BitTestAndSet _bittestandset
 +#define BitTestAndReset _bittestandreset
 +#define InterlockedBitTestAndSet _interlockedbittestandset
 +#define InterlockedBitTestAndReset _interlockedbittestandreset
 +
 +#ifdef _M_AMD64
 +#define BitTest64 _bittest64
 +#define BitTestAndComplement64 _bittestandcomplement64
 +#define BitTestAndSet64 _bittestandset64
 +#define BitTestAndReset64 _bittestandreset64
 +#define InterlockedBitTestAndSet64 _interlockedbittestandset64
 +#define InterlockedBitTestAndReset64 _interlockedbittestandreset64
 +#endif
 +
 +#if !defined(__INTERLOCKED_DECLARED)
 +#define __INTERLOCKED_DECLARED
 +
 +#if defined (_X86_)
 +#if defined(NO_INTERLOCKED_INTRINSICS)
 +NTKERNELAPI
 +LONG
 +FASTCALL
 +InterlockedIncrement(
 +  IN OUT LONG volatile *Addend);
 +
 +NTKERNELAPI
 +LONG
 +FASTCALL
 +InterlockedDecrement(
 +  IN OUT LONG volatile *Addend);
 +
 +NTKERNELAPI
 +LONG
 +FASTCALL
 +InterlockedCompareExchange(
 +  IN OUT LONG volatile *Destination,
 +  IN LONG Exchange,
 +  IN LONG Comparand);
 +
 +NTKERNELAPI
 +LONG
 +FASTCALL
 +InterlockedExchange(
 +  IN OUT LONG volatile *Destination,
 +  IN LONG Value);
 +
 +NTKERNELAPI
 +LONG
 +FASTCALL
 +InterlockedExchangeAdd(
 +  IN OUT LONG volatile *Addend,
 +  IN LONG  Value);
 +
 +#else /* !defined(NO_INTERLOCKED_INTRINSICS) */
 +
 +#define InterlockedExchange _InterlockedExchange
 +#define InterlockedIncrement _InterlockedIncrement
 +#define InterlockedDecrement _InterlockedDecrement
 +#define InterlockedExchangeAdd _InterlockedExchangeAdd
 +#define InterlockedCompareExchange _InterlockedCompareExchange
 +#define InterlockedOr _InterlockedOr
 +#define InterlockedAnd _InterlockedAnd
 +#define InterlockedXor _InterlockedXor
 +
 +#endif /* !defined(NO_INTERLOCKED_INTRINSICS) */
 +
 +#endif /* defined (_X86_) */
 +
 +#if !defined (_WIN64)
 +/*
 + * PVOID
 + * InterlockedExchangePointer(
 + *   IN OUT PVOID volatile  *Target,
 + *   IN PVOID  Value)
 + */
 +#define InterlockedExchangePointer(Target, Value) \
 +  ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
 +
 +/*
 + * PVOID
 + * InterlockedCompareExchangePointer(
 + *   IN OUT PVOID  *Destination,
 + *   IN PVOID  Exchange,
 + *   IN PVOID  Comparand)
 + */
 +#define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
 +  ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
 +
 +#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
 +#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
 +#define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
 +
 +#endif // !defined (_WIN64)
 +
 +#if defined (_M_AMD64)
 +
 +#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
 +#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
 +#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
 +#define InterlockedAnd _InterlockedAnd
 +#define InterlockedOr _InterlockedOr
 +#define InterlockedXor _InterlockedXor
 +#define InterlockedIncrement _InterlockedIncrement
 +#define InterlockedDecrement _InterlockedDecrement
 +#define InterlockedAdd _InterlockedAdd
 +#define InterlockedExchange _InterlockedExchange
 +#define InterlockedExchangeAdd _InterlockedExchangeAdd
 +#define InterlockedCompareExchange _InterlockedCompareExchange
 +#define InterlockedAnd64 _InterlockedAnd64
 +#define InterlockedOr64 _InterlockedOr64
 +#define InterlockedXor64 _InterlockedXor64
 +#define InterlockedIncrement64 _InterlockedIncrement64
 +#define InterlockedDecrement64 _InterlockedDecrement64
 +#define InterlockedAdd64 _InterlockedAdd64
 +#define InterlockedExchange64 _InterlockedExchange64
 +#define InterlockedExchangeAdd64 _I