Advertisement
Guest User

ntapi.h

a guest
Jan 19th, 2017
523
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 96.84 KB | None | 0 0
  1. /*
  2. * ntapi.h
  3. *
  4. * Windows NT Native API
  5. *
  6. * Most structures in this file is obtained from Windows NT/2000 Native API
  7. * Reference by Gary Nebbett, ISBN 1578701996.
  8. *
  9. * This file is part of the w32api package.
  10. *
  11. * Contributors:
  12. *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
  13. *
  14. * THIS SOFTWARE IS NOT COPYRIGHTED
  15. *
  16. * This source code is offered for use in the public domain. You may
  17. * use, modify or distribute it freely.
  18. *
  19. * This code is distributed in the hope that it will be useful but
  20. * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
  21. * DISCLAIMED. This includes but is not limited to warranties of
  22. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  23. *
  24. */
  25.  
  26. #ifndef __NTAPI_H
  27. #define __NTAPI_H
  28.  
  29. #if __GNUC__ >= 3
  30. #pragma GCC system_header
  31. #endif
  32.  
  33. #ifdef __cplusplus
  34. extern "C" {
  35. #endif
  36.  
  37. #include <stdarg.h>
  38. // #include "winbase.h"
  39. #include "ntddk.h"
  40. #include "ntpoapi.h"
  41.  
  42. #define NTOSAPI __declspec(dllimport)
  43.  
  44. #pragma pack(push,4)
  45.  
  46.     typedef struct _PEB *PPEB;
  47.  
  48.     /* FIXME: Unknown definitions */
  49.     typedef PVOID POBJECT_TYPE_LIST;
  50.     typedef PVOID PLANGID;
  51.  
  52. #ifndef NtCurrentProcess
  53. #define NtCurrentProcess() ((HANDLE)0xFFFFFFFF)
  54. #endif /* NtCurrentProcess */
  55. #ifndef NtCurrentThread
  56. #define NtCurrentThread() ((HANDLE)0xFFFFFFFE)
  57. #endif /* NtCurrentThread */
  58.  
  59.     /* System information and control */
  60.  
  61.     typedef enum _SYSTEM_INFORMATION_CLASS {
  62.         SystemInformationClassMin = 0,
  63.         SystemBasicInformation = 0,
  64.         SystemProcessorInformation = 1,
  65.         SystemPerformanceInformation = 2,
  66.         SystemTimeOfDayInformation = 3,
  67.         SystemPathInformation = 4,
  68.         SystemNotImplemented1 = 4,
  69.         SystemProcessInformation = 5,
  70.         SystemProcessesAndThreadsInformation = 5,
  71.         SystemCallCountInfoInformation = 6,
  72.         SystemCallCounts = 6,
  73.         SystemDeviceInformation = 7,
  74.         SystemConfigurationInformation = 7,
  75.         SystemProcessorPerformanceInformation = 8,
  76.         SystemProcessorTimes = 8,
  77.         SystemFlagsInformation = 9,
  78.         SystemGlobalFlag = 9,
  79.         SystemCallTimeInformation = 10,
  80.         SystemNotImplemented2 = 10,
  81.         SystemModuleInformation = 11,
  82.         SystemLocksInformation = 12,
  83.         SystemLockInformation = 12,
  84.         SystemStackTraceInformation = 13,
  85.         SystemNotImplemented3 = 13,
  86.         SystemPagedPoolInformation = 14,
  87.         SystemNotImplemented4 = 14,
  88.         SystemNonPagedPoolInformation = 15,
  89.         SystemNotImplemented5 = 15,
  90.         SystemHandleInformation = 16,
  91.         SystemObjectInformation = 17,
  92.         SystemPageFileInformation = 18,
  93.         SystemPagefileInformation = 18,
  94.         SystemVdmInstemulInformation = 19,
  95.         SystemInstructionEmulationCounts = 19,
  96.         SystemVdmBopInformation = 20,
  97.         SystemInvalidInfoClass1 = 20,
  98.         SystemFileCacheInformation = 21,
  99.         SystemCacheInformation = 21,
  100.         SystemPoolTagInformation = 22,
  101.         SystemInterruptInformation = 23,
  102.         SystemProcessorStatistics = 23,
  103.         SystemDpcBehaviourInformation = 24,
  104.         SystemDpcInformation = 24,
  105.         SystemFullMemoryInformation = 25,
  106.         SystemNotImplemented6 = 25,
  107.         SystemLoadImage = 26,
  108.         SystemUnloadImage = 27,
  109.         SystemTimeAdjustmentInformation = 28,
  110.         SystemTimeAdjustment = 28,
  111.         SystemSummaryMemoryInformation = 29,
  112.         SystemNotImplemented7 = 29,
  113.         SystemNextEventIdInformation = 30,
  114.         SystemNotImplemented8 = 30,
  115.         SystemEventIdsInformation = 31,
  116.         SystemNotImplemented9 = 31,
  117.         SystemCrashDumpInformation = 32,
  118.         SystemExceptionInformation = 33,
  119.         SystemCrashDumpStateInformation = 34,
  120.         SystemKernelDebuggerInformation = 35,
  121.         SystemContextSwitchInformation = 36,
  122.         SystemRegistryQuotaInformation = 37,
  123.         SystemLoadAndCallImage = 38,
  124.         SystemPrioritySeparation = 39,
  125.         SystemPlugPlayBusInformation = 40,
  126.         SystemNotImplemented10 = 40,
  127.         SystemDockInformation = 41,
  128.         SystemNotImplemented11 = 41,
  129.         /* SystemPowerInformation = 42, Conflicts with POWER_INFORMATION_LEVEL 1 */
  130.         SystemInvalidInfoClass2 = 42,
  131.         SystemProcessorSpeedInformation = 43,
  132.         SystemInvalidInfoClass3 = 43,
  133.         SystemCurrentTimeZoneInformation = 44,
  134.         SystemTimeZoneInformation = 44,
  135.         SystemLookasideInformation = 45,
  136.         SystemSetTimeSlipEvent = 46,
  137.         SystemCreateSession = 47,
  138.         SystemDeleteSession = 48,
  139.         SystemInvalidInfoClass4 = 49,
  140.         SystemRangeStartInformation = 50,
  141.         SystemVerifierInformation = 51,
  142.         SystemAddVerifier = 52,
  143.         SystemSessionProcessesInformation = 53,
  144.         SystemInformationClassMax
  145.     } SYSTEM_INFORMATION_CLASS;
  146.  
  147.     typedef struct _SYSTEM_BASIC_INFORMATION {
  148.         ULONG  Unknown;
  149.         ULONG  MaximumIncrement;
  150.         ULONG  PhysicalPageSize;
  151.         ULONG  NumberOfPhysicalPages;
  152.         ULONG  LowestPhysicalPage;
  153.         ULONG  HighestPhysicalPage;
  154.         ULONG  AllocationGranularity;
  155.         ULONG  LowestUserAddress;
  156.         ULONG  HighestUserAddress;
  157.         ULONG  ActiveProcessors;
  158.         UCHAR  NumberProcessors;
  159.     } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
  160.  
  161.     typedef struct _SYSTEM_PROCESSOR_INFORMATION {
  162.         USHORT  ProcessorArchitecture;
  163.         USHORT  ProcessorLevel;
  164.         USHORT  ProcessorRevision;
  165.         USHORT  Unknown;
  166.         ULONG  FeatureBits;
  167.     } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
  168.  
  169.     typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
  170.         LARGE_INTEGER  IdleTime;
  171.         LARGE_INTEGER  ReadTransferCount;
  172.         LARGE_INTEGER  WriteTransferCount;
  173.         LARGE_INTEGER  OtherTransferCount;
  174.         ULONG  ReadOperationCount;
  175.         ULONG  WriteOperationCount;
  176.         ULONG  OtherOperationCount;
  177.         ULONG  AvailablePages;
  178.         ULONG  TotalCommittedPages;
  179.         ULONG  TotalCommitLimit;
  180.         ULONG  PeakCommitment;
  181.         ULONG  PageFaults;
  182.         ULONG  WriteCopyFaults;
  183.         ULONG  TransitionFaults;
  184.         ULONG  CacheTransitionFaults;
  185.         ULONG  DemandZeroFaults;
  186.         ULONG  PagesRead;
  187.         ULONG  PageReadIos;
  188.         ULONG    CacheReads;
  189.         ULONG    CacheIos;
  190.         ULONG  PagefilePagesWritten;
  191.         ULONG  PagefilePageWriteIos;
  192.         ULONG  MappedFilePagesWritten;
  193.         ULONG  MappedFilePageWriteIos;
  194.         ULONG  PagedPoolUsage;
  195.         ULONG  NonPagedPoolUsage;
  196.         ULONG  PagedPoolAllocs;
  197.         ULONG  PagedPoolFrees;
  198.         ULONG  NonPagedPoolAllocs;
  199.         ULONG  NonPagedPoolFrees;
  200.         ULONG  TotalFreeSystemPtes;
  201.         ULONG  SystemCodePage;
  202.         ULONG  TotalSystemDriverPages;
  203.         ULONG  TotalSystemCodePages;
  204.         ULONG  SmallNonPagedLookasideListAllocateHits;
  205.         ULONG  SmallPagedLookasideListAllocateHits;
  206.         ULONG  Reserved3;
  207.         ULONG  MmSystemCachePage;
  208.         ULONG  PagedPoolPage;
  209.         ULONG  SystemDriverPage;
  210.         ULONG  FastReadNoWait;
  211.         ULONG  FastReadWait;
  212.         ULONG  FastReadResourceMiss;
  213.         ULONG  FastReadNotPossible;
  214.         ULONG  FastMdlReadNoWait;
  215.         ULONG  FastMdlReadWait;
  216.         ULONG  FastMdlReadResourceMiss;
  217.         ULONG  FastMdlReadNotPossible;
  218.         ULONG  MapDataNoWait;
  219.         ULONG  MapDataWait;
  220.         ULONG  MapDataNoWaitMiss;
  221.         ULONG  MapDataWaitMiss;
  222.         ULONG  PinMappedDataCount;
  223.         ULONG  PinReadNoWait;
  224.         ULONG  PinReadWait;
  225.         ULONG  PinReadNoWaitMiss;
  226.         ULONG  PinReadWaitMiss;
  227.         ULONG  CopyReadNoWait;
  228.         ULONG  CopyReadWait;
  229.         ULONG  CopyReadNoWaitMiss;
  230.         ULONG  CopyReadWaitMiss;
  231.         ULONG  MdlReadNoWait;
  232.         ULONG  MdlReadWait;
  233.         ULONG  MdlReadNoWaitMiss;
  234.         ULONG  MdlReadWaitMiss;
  235.         ULONG  ReadAheadIos;
  236.         ULONG  LazyWriteIos;
  237.         ULONG  LazyWritePages;
  238.         ULONG  DataFlushes;
  239.         ULONG  DataPages;
  240.         ULONG  ContextSwitches;
  241.         ULONG  FirstLevelTbFills;
  242.         ULONG  SecondLevelTbFills;
  243.         ULONG  SystemCalls;
  244.     } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
  245.  
  246.     typedef struct _SYSTEM_TIME_OF_DAY_INFORMATION {
  247.         LARGE_INTEGER  BootTime;
  248.         LARGE_INTEGER  CurrentTime;
  249.         LARGE_INTEGER  TimeZoneBias;
  250.         ULONG  CurrentTimeZoneId;
  251.     } SYSTEM_TIME_OF_DAY_INFORMATION, *PSYSTEM_TIME_OF_DAY_INFORMATION;
  252.  
  253.     typedef enum _THREAD_STATE {
  254.         StateInitialized,
  255.         StateReady,
  256.         StateRunning,
  257.         StateStandby,
  258.         StateTerminated,
  259.         StateWait,
  260.         StateTransition,
  261.         StateUnknown
  262.     } THREAD_STATE;
  263.  
  264.     typedef struct _SYSTEM_THREADS {
  265.         LARGE_INTEGER  KernelTime;
  266.         LARGE_INTEGER  UserTime;
  267.         LARGE_INTEGER  CreateTime;
  268.         ULONG  WaitTime;
  269.         PVOID  StartAddress;
  270.         CLIENT_ID  ClientId;
  271.         KPRIORITY  Priority;
  272.         KPRIORITY  BasePriority;
  273.         ULONG  ContextSwitchCount;
  274.         THREAD_STATE  State;
  275.         KWAIT_REASON  WaitReason;
  276.     } SYSTEM_THREADS, *PSYSTEM_THREADS;
  277.  
  278.     typedef struct _SYSTEM_PROCESSES {
  279.         ULONG  NextEntryDelta;
  280.         ULONG  ThreadCount;
  281.         ULONG  Reserved1[6];
  282.         LARGE_INTEGER  CreateTime;
  283.         LARGE_INTEGER  UserTime;
  284.         LARGE_INTEGER  KernelTime;
  285.         UNICODE_STRING  ProcessName;
  286.         KPRIORITY  BasePriority;
  287.         ULONG  ProcessId;
  288.         ULONG  InheritedFromProcessId;
  289.         ULONG  HandleCount;
  290.         ULONG  Reserved2[2];
  291.         VM_COUNTERS  VmCounters;
  292.         IO_COUNTERS  IoCounters;
  293.         SYSTEM_THREADS  Threads[1];
  294.     } SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
  295.  
  296.     typedef struct _SYSTEM_CALLS_INFORMATION {
  297.         ULONG  Size;
  298.         ULONG  NumberOfDescriptorTables;
  299.         ULONG  NumberOfRoutinesInTable[1];
  300.         ULONG  CallCounts[ANYSIZE_ARRAY];
  301.     } SYSTEM_CALLS_INFORMATION, *PSYSTEM_CALLS_INFORMATION;
  302.  
  303.     typedef struct _SYSTEM_CONFIGURATION_INFORMATION {
  304.         ULONG  DiskCount;
  305.         ULONG  FloppyCount;
  306.         ULONG  CdRomCount;
  307.         ULONG  TapeCount;
  308.         ULONG  SerialCount;
  309.         ULONG  ParallelCount;
  310.     } SYSTEM_CONFIGURATION_INFORMATION, *PSYSTEM_CONFIGURATION_INFORMATION;
  311.  
  312.     typedef struct _SYSTEM_PROCESSOR_TIMES {
  313.         LARGE_INTEGER  IdleTime;
  314.         LARGE_INTEGER  KernelTime;
  315.         LARGE_INTEGER  UserTime;
  316.         LARGE_INTEGER  DpcTime;
  317.         LARGE_INTEGER  InterruptTime;
  318.         ULONG  InterruptCount;
  319.     } SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES;
  320.  
  321.     /* SYSTEM_GLOBAL_FLAG.GlobalFlag constants */
  322. #define FLG_STOP_ON_EXCEPTION             0x00000001
  323. #define FLG_SHOW_LDR_SNAPS                0x00000002
  324. #define FLG_DEBUG_INITIAL_COMMAND         0x00000004
  325. #define FLG_STOP_ON_HUNG_GUI              0x00000008
  326. #define FLG_HEAP_ENABLE_TAIL_CHECK        0x00000010
  327. #define FLG_HEAP_ENABLE_FREE_CHECK        0x00000020
  328. #define FLG_HEAP_VALIDATE_PARAMETERS      0x00000040
  329. #define FLG_HEAP_VALIDATE_ALL             0x00000080
  330. #define FLG_POOL_ENABLE_TAIL_CHECK        0x00000100
  331. #define FLG_POOL_ENABLE_FREE_CHECK        0x00000200
  332. #define FLG_POOL_ENABLE_TAGGING           0x00000400
  333. #define FLG_HEAP_ENABLE_TAGGING           0x00000800
  334. #define FLG_USER_STACK_TRACE_DB           0x00001000
  335. #define FLG_KERNEL_STACK_TRACE_DB         0x00002000
  336. #define FLG_MAINTAIN_OBJECT_TYPELIST      0x00004000
  337. #define FLG_HEAP_ENABLE_TAG_BY_DLL        0x00008000
  338. #define FLG_IGNORE_DEBUG_PRIV             0x00010000
  339. #define FLG_ENABLE_CSRDEBUG               0x00020000
  340. #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD     0x00040000
  341. #define FLG_DISABLE_PAGE_KERNEL_STACKS    0x00080000
  342. #define FLG_HEAP_ENABLE_CALL_TRACING      0x00100000
  343. #define FLG_HEAP_DISABLE_COALESCING       0x00200000
  344. #define FLG_ENABLE_CLOSE_EXCEPTIONS       0x00400000
  345. #define FLG_ENABLE_EXCEPTION_LOGGING      0x00800000
  346. #define FLG_ENABLE_DBGPRINT_BUFFERING     0x08000000
  347.  
  348.     typedef struct _SYSTEM_GLOBAL_FLAG {
  349.         ULONG  GlobalFlag;
  350.     } SYSTEM_GLOBAL_FLAG, *PSYSTEM_GLOBAL_FLAG;
  351.  
  352.     typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY {
  353.         ULONG    Unknown1;
  354.         ULONG    Unknown2;
  355.         PVOID  Base;
  356.         ULONG  Size;
  357.         ULONG  Flags;
  358.         USHORT  Index;
  359.         /* Length of module name not including the path, this
  360.         field contains valid value only for NTOSKRNL module */
  361.         USHORT  NameLength;
  362.         USHORT  LoadCount;
  363.         USHORT  PathLength;
  364.         CHAR  ImageName[256];
  365.     } SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;
  366.  
  367.     typedef struct _SYSTEM_MODULE_INFORMATION {
  368.         ULONG  Count;
  369.         SYSTEM_MODULE_INFORMATION_ENTRY Module[1];
  370.     } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
  371.  
  372.     typedef struct _SYSTEM_LOCK_INFORMATION {
  373.         PVOID  Address;
  374.         USHORT  Type;
  375.         USHORT  Reserved1;
  376.         ULONG  ExclusiveOwnerThreadId;
  377.         ULONG  ActiveCount;
  378.         ULONG  ContentionCount;
  379.         ULONG  Reserved2[2];
  380.         ULONG  NumberOfSharedWaiters;
  381.         ULONG  NumberOfExclusiveWaiters;
  382.     } SYSTEM_LOCK_INFORMATION, *PSYSTEM_LOCK_INFORMATION;
  383.  
  384.     /*SYSTEM_HANDLE_INFORMATION.Flags cosntants */
  385. #define PROTECT_FROM_CLOSE                0x01
  386. #define INHERIT                           0x02
  387.  
  388.     typedef struct _SYSTEM_HANDLE_INFORMATION {
  389.         ULONG  ProcessId;
  390.         UCHAR  ObjectTypeNumber;
  391.         UCHAR  Flags;
  392.         USHORT  Handle;
  393.         PVOID  Object;
  394.         ACCESS_MASK  GrantedAccess;
  395.     } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
  396.  
  397.     typedef struct _SYSTEM_OBJECT_TYPE_INFORMATION {
  398.         ULONG  NextEntryOffset;
  399.         ULONG  ObjectCount;
  400.         ULONG  HandleCount;
  401.         ULONG  TypeNumber;
  402.         ULONG  InvalidAttributes;
  403.         GENERIC_MAPPING  GenericMapping;
  404.         ACCESS_MASK  ValidAccessMask;
  405.         POOL_TYPE  PoolType;
  406.         UCHAR  Unknown;
  407.         UNICODE_STRING  Name;
  408.     } SYSTEM_OBJECT_TYPE_INFORMATION, *PSYSTEM_OBJECT_TYPE_INFORMATION;
  409.  
  410.     /* SYSTEM_OBJECT_INFORMATION.Flags constants */
  411. #define FLG_SYSOBJINFO_SINGLE_HANDLE_ENTRY    0x40
  412. #define FLG_SYSOBJINFO_DEFAULT_SECURITY_QUOTA 0x20
  413. #define FLG_SYSOBJINFO_PERMANENT              0x10
  414. #define FLG_SYSOBJINFO_EXCLUSIVE              0x08
  415. #define FLG_SYSOBJINFO_CREATOR_INFO           0x04
  416. #define FLG_SYSOBJINFO_KERNEL_MODE            0x02
  417.  
  418.     typedef struct _SYSTEM_OBJECT_INFORMATION {
  419.         ULONG  NextEntryOffset;
  420.         PVOID  Object;
  421.         ULONG  CreatorProcessId;
  422.         USHORT  Unknown;
  423.         USHORT  Flags;
  424.         ULONG  PointerCount;
  425.         ULONG  HandleCount;
  426.         ULONG  PagedPoolUsage;
  427.         ULONG  NonPagedPoolUsage;
  428.         ULONG  ExclusiveProcessId;
  429.         PSECURITY_DESCRIPTOR  SecurityDescriptor;
  430.         UNICODE_STRING  Name;
  431.     } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
  432.  
  433.     typedef struct _SYSTEM_PAGEFILE_INFORMATION {
  434.         ULONG  NextEntryOffset;
  435.         ULONG  CurrentSize;
  436.         ULONG  TotalUsed;
  437.         ULONG  PeakUsed;
  438.         UNICODE_STRING  FileName;
  439.     } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
  440.  
  441.     typedef struct _SYSTEM_INSTRUCTION_EMULATION_INFORMATION {
  442.         ULONG  SegmentNotPresent;
  443.         ULONG  TwoByteOpcode;
  444.         ULONG  ESprefix;
  445.         ULONG  CSprefix;
  446.         ULONG  SSprefix;
  447.         ULONG  DSprefix;
  448.         ULONG  FSPrefix;
  449.         ULONG  GSprefix;
  450.         ULONG  OPER32prefix;
  451.         ULONG  ADDR32prefix;
  452.         ULONG  INSB;
  453.         ULONG  INSW;
  454.         ULONG  OUTSB;
  455.         ULONG  OUTSW;
  456.         ULONG  PUSHFD;
  457.         ULONG  POPFD;
  458.         ULONG  INTnn;
  459.         ULONG  INTO;
  460.         ULONG  IRETD;
  461.         ULONG  INBimm;
  462.         ULONG  INWimm;
  463.         ULONG  OUTBimm;
  464.         ULONG  OUTWimm;
  465.         ULONG  INB;
  466.         ULONG  INW;
  467.         ULONG  OUTB;
  468.         ULONG  OUTW;
  469.         ULONG  LOCKprefix;
  470.         ULONG  REPNEprefix;
  471.         ULONG  REPprefix;
  472.         ULONG  HLT;
  473.         ULONG  CLI;
  474.         ULONG  STI;
  475.         ULONG  GenericInvalidOpcode;
  476.     } SYSTEM_INSTRUCTION_EMULATION_INFORMATION, *PSYSTEM_INSTRUCTION_EMULATION_INFORMATION;
  477.  
  478.     typedef struct _SYSTEM_POOL_TAG_INFORMATION {
  479.         CHAR  Tag[4];
  480.         ULONG  PagedPoolAllocs;
  481.         ULONG  PagedPoolFrees;
  482.         ULONG  PagedPoolUsage;
  483.         ULONG  NonPagedPoolAllocs;
  484.         ULONG  NonPagedPoolFrees;
  485.         ULONG  NonPagedPoolUsage;
  486.     } SYSTEM_POOL_TAG_INFORMATION, *PSYSTEM_POOL_TAG_INFORMATION;
  487.  
  488.     typedef struct _SYSTEM_PROCESSOR_STATISTICS {
  489.         ULONG  ContextSwitches;
  490.         ULONG  DpcCount;
  491.         ULONG  DpcRequestRate;
  492.         ULONG  TimeIncrement;
  493.         ULONG  DpcBypassCount;
  494.         ULONG  ApcBypassCount;
  495.     } SYSTEM_PROCESSOR_STATISTICS, *PSYSTEM_PROCESSOR_STATISTICS;
  496.  
  497.     typedef struct _SYSTEM_DPC_INFORMATION {
  498.         ULONG  Reserved;
  499.         ULONG  MaximumDpcQueueDepth;
  500.         ULONG  MinimumDpcRate;
  501.         ULONG  AdjustDpcThreshold;
  502.         ULONG  IdealDpcRate;
  503.     } SYSTEM_DPC_INFORMATION, *PSYSTEM_DPC_INFORMATION;
  504.  
  505.     typedef struct _SYSTEM_LOAD_IMAGE {
  506.         UNICODE_STRING  ModuleName;
  507.         PVOID  ModuleBase;
  508.         PVOID  SectionPointer;
  509.         PVOID  EntryPoint;
  510.         PVOID  ExportDirectory;
  511.     } SYSTEM_LOAD_IMAGE, *PSYSTEM_LOAD_IMAGE;
  512.  
  513.     typedef struct _SYSTEM_UNLOAD_IMAGE {
  514.         PVOID  ModuleBase;
  515.     } SYSTEM_UNLOAD_IMAGE, *PSYSTEM_UNLOAD_IMAGE;
  516.  
  517.     typedef struct _SYSTEM_QUERY_TIME_ADJUSTMENT {
  518.         ULONG  TimeAdjustment;
  519.         ULONG  MaximumIncrement;
  520.         BOOLEAN  TimeSynchronization;
  521.     } SYSTEM_QUERY_TIME_ADJUSTMENT, *PSYSTEM_QUERY_TIME_ADJUSTMENT;
  522.  
  523.     typedef struct _SYSTEM_SET_TIME_ADJUSTMENT {
  524.         ULONG  TimeAdjustment;
  525.         BOOLEAN  TimeSynchronization;
  526.     } SYSTEM_SET_TIME_ADJUSTMENT, *PSYSTEM_SET_TIME_ADJUSTMENT;
  527.  
  528.     typedef struct _SYSTEM_CRASH_DUMP_INFORMATION {
  529.         HANDLE  CrashDumpSectionHandle;
  530.         HANDLE  Unknown;
  531.     } SYSTEM_CRASH_DUMP_INFORMATION, *PSYSTEM_CRASH_DUMP_INFORMATION;
  532.  
  533.     typedef struct _SYSTEM_EXCEPTION_INFORMATION {
  534.         ULONG  AlignmentFixupCount;
  535.         ULONG  ExceptionDispatchCount;
  536.         ULONG  FloatingEmulationCount;
  537.         ULONG  Reserved;
  538.     } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
  539.  
  540.     typedef struct _SYSTEM_CRASH_DUMP_STATE_INFORMATION {
  541.         ULONG  CrashDumpSectionExists;
  542.         ULONG  Unknown;
  543.     } SYSTEM_CRASH_DUMP_STATE_INFORMATION, *PSYSTEM_CRASH_DUMP_STATE_INFORMATION;
  544.  
  545.     typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
  546.         BOOLEAN  DebuggerEnabled;
  547.         BOOLEAN  DebuggerNotPresent;
  548.     } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
  549.  
  550.     typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION {
  551.         ULONG  ContextSwitches;
  552.         ULONG  ContextSwitchCounters[11];
  553.     } SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION;
  554.  
  555.     typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
  556.         ULONG  RegistryQuota;
  557.         ULONG  RegistryQuotaInUse;
  558.         ULONG  PagedPoolSize;
  559.     } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
  560.  
  561.     typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE {
  562.         UNICODE_STRING  ModuleName;
  563.     } SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;
  564.  
  565.     typedef struct _SYSTEM_PRIORITY_SEPARATION {
  566.         ULONG  PrioritySeparation;
  567.     } SYSTEM_PRIORITY_SEPARATION, *PSYSTEM_PRIORITY_SEPARATION;
  568.  
  569.     typedef struct _SYSTEM_TIME_ZONE_INFORMATION {
  570.         LONG  Bias;
  571.         WCHAR  StandardName[32];
  572.         LARGE_INTEGER  StandardDate;
  573.         LONG  StandardBias;
  574.         WCHAR  DaylightName[32];
  575.         LARGE_INTEGER  DaylightDate;
  576.         LONG  DaylightBias;
  577.     } SYSTEM_TIME_ZONE_INFORMATION, *PSYSTEM_TIME_ZONE_INFORMATION;
  578.  
  579.     typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
  580.         USHORT  Depth;
  581.         USHORT  MaximumDepth;
  582.         ULONG  TotalAllocates;
  583.         ULONG  AllocateMisses;
  584.         ULONG  TotalFrees;
  585.         ULONG  FreeMisses;
  586.         POOL_TYPE  Type;
  587.         ULONG  Tag;
  588.         ULONG  Size;
  589.     } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
  590.  
  591.     typedef struct _SYSTEM_SET_TIME_SLIP_EVENT {
  592.         HANDLE  TimeSlipEvent;
  593.     } SYSTEM_SET_TIME_SLIP_EVENT, *PSYSTEM_SET_TIME_SLIP_EVENT;
  594.  
  595.     typedef struct _SYSTEM_CREATE_SESSION {
  596.         ULONG  SessionId;
  597.     } SYSTEM_CREATE_SESSION, *PSYSTEM_CREATE_SESSION;
  598.  
  599.     typedef struct _SYSTEM_DELETE_SESSION {
  600.         ULONG  SessionId;
  601.     } SYSTEM_DELETE_SESSION, *PSYSTEM_DELETE_SESSION;
  602.  
  603.     typedef struct _SYSTEM_RANGE_START_INFORMATION {
  604.         PVOID  SystemRangeStart;
  605.     } SYSTEM_RANGE_START_INFORMATION, *PSYSTEM_RANGE_START_INFORMATION;
  606.  
  607.     typedef struct _SYSTEM_SESSION_PROCESSES_INFORMATION {
  608.         ULONG  SessionId;
  609.         ULONG  BufferSize;
  610.         PVOID  Buffer;
  611.     } SYSTEM_SESSION_PROCESSES_INFORMATION, *PSYSTEM_SESSION_PROCESSES_INFORMATION;
  612.  
  613.     typedef struct _SYSTEM_POOL_BLOCK {
  614.         BOOLEAN  Allocated;
  615.         USHORT  Unknown;
  616.         ULONG  Size;
  617.         CHAR  Tag[4];
  618.     } SYSTEM_POOL_BLOCK, *PSYSTEM_POOL_BLOCK;
  619.  
  620.     typedef struct _SYSTEM_POOL_BLOCKS_INFORMATION {
  621.         ULONG  PoolSize;
  622.         PVOID  PoolBase;
  623.         USHORT  Unknown;
  624.         ULONG  NumberOfBlocks;
  625.         SYSTEM_POOL_BLOCK  PoolBlocks[1];
  626.     } SYSTEM_POOL_BLOCKS_INFORMATION, *PSYSTEM_POOL_BLOCKS_INFORMATION;
  627.  
  628.     typedef struct _SYSTEM_MEMORY_USAGE {
  629.         PVOID  Name;
  630.         USHORT  Valid;
  631.         USHORT  Standby;
  632.         USHORT  Modified;
  633.         USHORT  PageTables;
  634.     } SYSTEM_MEMORY_USAGE, *PSYSTEM_MEMORY_USAGE;
  635.  
  636.     typedef struct _SYSTEM_MEMORY_USAGE_INFORMATION {
  637.         ULONG  Reserved;
  638.         PVOID  EndOfData;
  639.         SYSTEM_MEMORY_USAGE  MemoryUsage[1];
  640.     } SYSTEM_MEMORY_USAGE_INFORMATION, *PSYSTEM_MEMORY_USAGE_INFORMATION;
  641.  
  642.     NTOSAPI
  643.         NTSTATUS
  644.         NTAPI
  645.         NtQuerySystemInformation(
  646.             /*IN*/ SYSTEM_INFORMATION_CLASS  SystemInformationClass,
  647.             /*IN OUT*/ PVOID  SystemInformation,
  648.             /*IN*/ ULONG  SystemInformationLength,
  649.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  650.  
  651.     NTOSAPI
  652.         NTSTATUS
  653.         NTAPI
  654.         ZwQuerySystemInformation(
  655.             /*IN*/ SYSTEM_INFORMATION_CLASS  SystemInformationClass,
  656.             /*IN OUT*/ PVOID  SystemInformation,
  657.             /*IN*/ ULONG  SystemInformationLength,
  658.             /*OUT*/ PULONG  ReturnLength  OPTIONAL);
  659.  
  660.     NTOSAPI
  661.         NTSTATUS
  662.         NTAPI
  663.         NtQueryFullAttributesFile(
  664.             /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
  665.             /*OUT*/ PFILE_NETWORK_OPEN_INFORMATION FileInformation);
  666.  
  667.     NTOSAPI
  668.         NTSTATUS
  669.         NTAPI
  670.         ZwQueryFullAttributesFile(
  671.             /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
  672.             /*OUT*/ PFILE_NETWORK_OPEN_INFORMATION FileInformation);
  673.  
  674.     NTOSAPI
  675.         NTSTATUS
  676.         NTAPI
  677.         NtSetSystemInformation(
  678.             /*IN*/ SYSTEM_INFORMATION_CLASS  SystemInformationClass,
  679.             /*IN OUT*/ PVOID  SystemInformation,
  680.             /*IN*/ ULONG  SystemInformationLength);
  681.  
  682.     NTOSAPI
  683.         NTSTATUS
  684.         NTAPI
  685.         ZwSetSystemInformation(
  686.             /*IN*/ SYSTEM_INFORMATION_CLASS  SystemInformationClass,
  687.             /*IN OUT*/ PVOID  SystemInformation,
  688.             /*IN*/ ULONG  SystemInformationLength);
  689.  
  690.     NTOSAPI
  691.         NTSTATUS
  692.         NTAPI
  693.         NtQuerySystemEnvironmentValue(
  694.             /*IN*/ PUNICODE_STRING  Name,
  695.             /*OUT*/ PVOID  Value,
  696.             /*IN*/ ULONG  ValueLength,
  697.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  698.  
  699.     NTOSAPI
  700.         NTSTATUS
  701.         NTAPI
  702.         ZwQuerySystemEnvironmentValue(
  703.             /*IN*/ PUNICODE_STRING  Name,
  704.             /*OUT*/ PVOID  Value,
  705.             /*IN*/ ULONG  ValueLength,
  706.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  707.  
  708.     NTOSAPI
  709.         NTSTATUS
  710.         NTAPI
  711.         NtSetSystemEnvironmentValue(
  712.             /*IN*/ PUNICODE_STRING  Name,
  713.             /*IN*/ PUNICODE_STRING  Value);
  714.  
  715.     NTOSAPI
  716.         NTSTATUS
  717.         NTAPI
  718.         ZwSetSystemEnvironmentValue(
  719.             /*IN*/ PUNICODE_STRING  Name,
  720.             /*IN*/ PUNICODE_STRING  Value);
  721.  
  722.     typedef enum _SHUTDOWN_ACTION {
  723.         ShutdownNoReboot,
  724.         ShutdownReboot,
  725.         ShutdownPowerOff
  726.     } SHUTDOWN_ACTION;
  727.  
  728.     NTOSAPI
  729.         NTSTATUS
  730.         NTAPI
  731.         NtShutdownSystem(
  732.             /*IN*/ SHUTDOWN_ACTION  Action);
  733.  
  734.     NTOSAPI
  735.         NTSTATUS
  736.         NTAPI
  737.         ZwShutdownSystem(
  738.             /*IN*/ SHUTDOWN_ACTION  Action);
  739.  
  740.     typedef enum _DEBUG_CONTROL_CODE {
  741.         DebugGetTraceInformation = 1,
  742.         DebugSetInternalBreakpoint,
  743.         DebugSetSpecialCall,
  744.         DebugClearSpecialCalls,
  745.         DebugQuerySpecialCalls,
  746.         DebugDbgBreakPoint,
  747.         DebugMaximum
  748.     } DEBUG_CONTROL_CODE;
  749.  
  750.  
  751.     NTOSAPI
  752.         NTSTATUS
  753.         NTAPI
  754.         NtSystemDebugControl(
  755.             /*IN*/ DEBUG_CONTROL_CODE  ControlCode,
  756.             /*IN*/ PVOID  InputBuffer  /*OPTIONAL*/,
  757.             /*IN*/ ULONG  InputBufferLength,
  758.             /*OUT*/ PVOID  OutputBuffer  /*OPTIONAL*/,
  759.             /*IN*/ ULONG  OutputBufferLength,
  760.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  761.  
  762.     NTOSAPI
  763.         NTSTATUS
  764.         NTAPI
  765.         ZwSystemDebugControl(
  766.             /*IN*/ DEBUG_CONTROL_CODE  ControlCode,
  767.             /*IN*/ PVOID  InputBuffer  /*OPTIONAL*/,
  768.             /*IN*/ ULONG  InputBufferLength,
  769.             /*OUT*/ PVOID  OutputBuffer  /*OPTIONAL*/,
  770.             /*IN*/ ULONG  OutputBufferLength,
  771.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  772.  
  773.  
  774.  
  775.     /* Objects, Object directories, and symbolic links */
  776.  
  777.     typedef enum _OBJECT_INFORMATION_CLASS {
  778.         ObjectBasicInformation,
  779.         ObjectNameInformation,
  780.         ObjectTypeInformation,
  781.         ObjectAllTypesInformation,
  782.         ObjectHandleInformation
  783.     } OBJECT_INFORMATION_CLASS;
  784.  
  785.     NTOSAPI
  786.         NTSTATUS
  787.         NTAPI
  788.         NtQueryObject(
  789.             /*IN*/ HANDLE  ObjectHandle,
  790.             /*IN*/ OBJECT_INFORMATION_CLASS  ObjectInformationClass,
  791.             /*OUT*/ PVOID  ObjectInformation,
  792.             /*IN*/ ULONG  ObjectInformationLength,
  793.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  794.  
  795.     NTOSAPI
  796.         NTSTATUS
  797.         NTAPI
  798.         ZwQueryObject(
  799.             /*IN*/ HANDLE  ObjectHandle,
  800.             /*IN*/ OBJECT_INFORMATION_CLASS  ObjectInformationClass,
  801.             /*OUT*/ PVOID  ObjectInformation,
  802.             /*IN*/ ULONG  ObjectInformationLength,
  803.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  804.  
  805.     NTOSAPI
  806.         NTSTATUS
  807.         NTAPI
  808.         NtSetInformationObject(
  809.             /*IN*/ HANDLE  ObjectHandle,
  810.             /*IN*/ OBJECT_INFORMATION_CLASS  ObjectInformationClass,
  811.             /*IN*/ PVOID  ObjectInformation,
  812.             /*IN*/ ULONG  ObjectInformationLength);
  813.  
  814.     NTOSAPI
  815.         NTSTATUS
  816.         NTAPI
  817.         ZwSetInformationObject(
  818.             /*IN*/ HANDLE  ObjectHandle,
  819.             /*IN*/ OBJECT_INFORMATION_CLASS  ObjectInformationClass,
  820.             /*IN*/ PVOID  ObjectInformation,
  821.             /*IN*/ ULONG  ObjectInformationLength);
  822.  
  823.     /* OBJECT_BASIC_INFORMATION.Attributes constants */
  824.     /* also in winbase.h */
  825. #define HANDLE_FLAG_INHERIT               0x01
  826. #define HANDLE_FLAG_PROTECT_FROM_CLOSE    0x02
  827.     /* end winbase.h */
  828. #define PERMANENT                         0x10
  829. #define EXCLUSIVE                         0x20
  830.  
  831.     typedef struct _OBJECT_BASIC_INFORMATION {
  832.         ULONG  Attributes;
  833.         ACCESS_MASK  GrantedAccess;
  834.         ULONG  HandleCount;
  835.         ULONG  PointerCount;
  836.         ULONG  PagedPoolUsage;
  837.         ULONG  NonPagedPoolUsage;
  838.         ULONG  Reserved[3];
  839.         ULONG  NameInformationLength;
  840.         ULONG  TypeInformationLength;
  841.         ULONG  SecurityDescriptorLength;
  842.         LARGE_INTEGER  CreateTime;
  843.     } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
  844. #if 0
  845.     /* FIXME: Enable later */
  846.     typedef struct _OBJECT_TYPE_INFORMATION {
  847.         UNICODE_STRING  Name;
  848.         ULONG  ObjectCount;
  849.         ULONG  HandleCount;
  850.         ULONG  Reserved1[4];
  851.         ULONG  PeakObjectCount;
  852.         ULONG  PeakHandleCount;
  853.         ULONG  Reserved2[4];
  854.         ULONG  InvalidAttributes;
  855.         GENERIC_MAPPING  GenericMapping;
  856.         ULONG  ValidAccess;
  857.         UCHAR  Unknown;
  858.         BOOLEAN  MaintainHandleDatabase;
  859.         POOL_TYPE  PoolType;
  860.         ULONG  PagedPoolUsage;
  861.         ULONG  NonPagedPoolUsage;
  862.     } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
  863.  
  864.     typedef struct _OBJECT_ALL_TYPES_INFORMATION {
  865.         ULONG  NumberOfTypes;
  866.         OBJECT_TYPE_INFORMATION  TypeInformation;
  867.     } OBJECT_ALL_TYPES_INFORMATION, *POBJECT_ALL_TYPES_INFORMATION;
  868. #endif
  869.     typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFORMATION {
  870.         BOOLEAN  Inherit;
  871.         BOOLEAN  ProtectFromClose;
  872.     } OBJECT_HANDLE_ATTRIBUTE_INFORMATION, *POBJECT_HANDLE_ATTRIBUTE_INFORMATION;
  873.  
  874.     NTOSAPI
  875.         NTSTATUS
  876.         NTAPI
  877.         NtDuplicateObject(
  878.             /*IN*/ HANDLE  SourceProcessHandle,
  879.             /*IN*/ HANDLE  SourceHandle,
  880.             /*IN*/ HANDLE  TargetProcessHandle,
  881.             /*OUT*/ PHANDLE  TargetHandle  /*OPTIONAL*/,
  882.             /*IN*/ ACCESS_MASK  DesiredAccess,
  883.             /*IN*/ ULONG  Attributes,
  884.             /*IN*/ ULONG  Options);
  885.  
  886.     NTOSAPI
  887.         NTSTATUS
  888.         NTAPI
  889.         ZwDuplicateObject(
  890.             /*IN*/ HANDLE  SourceProcessHandle,
  891.             /*IN*/ HANDLE  SourceHandle,
  892.             /*IN*/ HANDLE  TargetProcessHandle,
  893.             /*OUT*/ PHANDLE  TargetHandle  /*OPTIONAL*/,
  894.             /*IN*/ ACCESS_MASK  DesiredAccess,
  895.             /*IN*/ ULONG  Attributes,
  896.             /*IN*/ ULONG  Options);
  897.  
  898.     NTOSAPI
  899.         NTSTATUS
  900.         NTAPI
  901.         NtQuerySecurityObject(
  902.             /*IN*/ HANDLE Handle,
  903.             /*IN*/ SECURITY_INFORMATION  SecurityInformation,
  904.             /*OUT*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  905.             /*IN*/ ULONG  SecurityDescriptorLength,
  906.             /*OUT*/ PULONG  ReturnLength);
  907.  
  908.     NTOSAPI
  909.         NTSTATUS
  910.         NTAPI
  911.         ZwQuerySecurityObject(
  912.             /*IN*/ HANDLE Handle,
  913.             /*IN*/ SECURITY_INFORMATION  SecurityInformation,
  914.             /*OUT*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  915.             /*IN*/ ULONG  SecurityDescriptorLength,
  916.             /*OUT*/ PULONG  ReturnLength);
  917.  
  918.     NTOSAPI
  919.         NTSTATUS
  920.         NTAPI
  921.         NtSetSecurityObject(
  922.             /*IN*/ HANDLE  Handle,
  923.             /*IN*/ SECURITY_INFORMATION  SecurityInformation,
  924.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor);
  925.  
  926.     NTOSAPI
  927.         NTSTATUS
  928.         NTAPI
  929.         ZwSetSecurityObject(
  930.             /*IN*/ HANDLE  Handle,
  931.             /*IN*/ SECURITY_INFORMATION  SecurityInformation,
  932.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor);
  933.  
  934.     NTOSAPI
  935.         NTSTATUS
  936.         NTAPI
  937.         NtOpenDirectoryObject(
  938.             /*OUT*/ PHANDLE  DirectoryHandle,
  939.             /*IN*/ ACCESS_MASK  DesiredAccess,
  940.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes);
  941.  
  942.     NTOSAPI
  943.         NTSTATUS
  944.         NTAPI
  945.         ZwOpenDirectoryObject(
  946.             /*OUT*/ PHANDLE  DirectoryHandle,
  947.             /*IN*/ ACCESS_MASK  DesiredAccess,
  948.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes);
  949.  
  950.     NTOSAPI
  951.         NTSTATUS
  952.         NTAPI
  953.         NtQueryDirectoryObject(
  954.             /*IN*/ HANDLE  DirectoryHandle,
  955.             /*OUT*/ PVOID  Buffer,
  956.             /*IN*/ ULONG  BufferLength,
  957.             /*IN*/ BOOLEAN  ReturnSingleEntry,
  958.             /*IN*/ BOOLEAN  RestartScan,
  959.             /*IN OUT*/ PULONG  Context,
  960.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  961.  
  962.     NTOSAPI
  963.         NTSTATUS
  964.         NTAPI
  965.         ZwQueryDirectoryObject(
  966.             /*IN*/ HANDLE  DirectoryHandle,
  967.             /*OUT*/ PVOID  Buffer,
  968.             /*IN*/ ULONG  BufferLength,
  969.             /*IN*/ BOOLEAN  ReturnSingleEntry,
  970.             /*IN*/ BOOLEAN  RestartScan,
  971.             /*IN OUT*/ PULONG  Context,
  972.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  973.  
  974.     typedef struct _DIRECTORY_BASIC_INFORMATION {
  975.         UNICODE_STRING  ObjectName;
  976.         UNICODE_STRING  ObjectTypeName;
  977.     } DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
  978.  
  979.     NTOSAPI
  980.         NTSTATUS
  981.         NTAPI
  982.         NtCreateSymbolicLinkObject(
  983.             /*OUT*/ PHANDLE  SymbolicLinkHandle,
  984.             /*IN*/ ACCESS_MASK  DesiredAccess,
  985.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  986.             /*IN*/ PUNICODE_STRING  TargetName);
  987.  
  988.     NTOSAPI
  989.         NTSTATUS
  990.         NTAPI
  991.         ZwCreateSymbolicLinkObject(
  992.             /*OUT*/ PHANDLE  SymbolicLinkHandle,
  993.             /*IN*/ ACCESS_MASK  DesiredAccess,
  994.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  995.             /*IN*/ PUNICODE_STRING  TargetName);
  996.  
  997.  
  998.  
  999.  
  1000.     /* Virtual memory */
  1001.  
  1002.     typedef enum _MEMORY_INFORMATION_CLASS {
  1003.         MemoryBasicInformation,
  1004.         MemoryWorkingSetList,
  1005.         MemorySectionName,
  1006.         MemoryBasicVlmInformation
  1007.     } MEMORY_INFORMATION_CLASS;
  1008.  
  1009.     NTOSAPI
  1010.         NTSTATUS
  1011.         NTAPI
  1012.         NtAllocateVirtualMemory(
  1013.             /*IN*/ HANDLE  ProcessHandle,
  1014.             /*IN OUT*/ PVOID  *BaseAddress,
  1015.             /*IN*/ ULONG  ZeroBits,
  1016.             /*IN OUT*/ PULONG  AllocationSize,
  1017.             /*IN*/ ULONG  AllocationType,
  1018.             /*IN*/ ULONG  Protect);
  1019.  
  1020.     NTOSAPI
  1021.         NTSTATUS
  1022.         NTAPI
  1023.         ZwAllocateVirtualMemory(
  1024.             /*IN*/ HANDLE  ProcessHandle,
  1025.             /*IN OUT*/ PVOID  *BaseAddress,
  1026.             /*IN*/ ULONG  ZeroBits,
  1027.             /*IN OUT*/ PULONG  AllocationSize,
  1028.             /*IN*/ ULONG  AllocationType,
  1029.             /*IN*/ ULONG  Protect);
  1030.  
  1031.     NTOSAPI
  1032.         NTSTATUS
  1033.         NTAPI
  1034.         NtFreeVirtualMemory(
  1035.             /*IN*/ HANDLE  ProcessHandle,
  1036.             /*IN OUT*/ PVOID  *BaseAddress,
  1037.             /*IN OUT*/ PULONG  FreeSize,
  1038.             /*IN*/ ULONG  FreeType);
  1039.  
  1040.     NTOSAPI
  1041.         NTSTATUS
  1042.         NTAPI
  1043.         ZwFreeVirtualMemory(
  1044.             /*IN*/ HANDLE  ProcessHandle,
  1045.             /*IN OUT*/ PVOID  *BaseAddress,
  1046.             /*IN OUT*/ PULONG  FreeSize,
  1047.             /*IN*/ ULONG  FreeType);
  1048.  
  1049.     NTOSAPI
  1050.         NTSTATUS
  1051.         NTAPI
  1052.         NtQueryVirtualMemory(
  1053.             /*IN*/ HANDLE  ProcessHandle,
  1054.             /*IN*/ PVOID  BaseAddress,
  1055.             /*IN*/ MEMORY_INFORMATION_CLASS  MemoryInformationClass,
  1056.             /*OUT*/ PVOID  MemoryInformation,
  1057.             /*IN*/ ULONG  MemoryInformationLength,
  1058.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1059.  
  1060.     NTOSAPI
  1061.         NTSTATUS
  1062.         NTAPI
  1063.         ZwQueryVirtualMemory(
  1064.             /*IN*/ HANDLE  ProcessHandle,
  1065.             /*IN*/ PVOID  BaseAddress,
  1066.             /*IN*/ MEMORY_INFORMATION_CLASS  MemoryInformationClass,
  1067.             /*OUT*/ PVOID  MemoryInformation,
  1068.             /*IN*/ ULONG  MemoryInformationLength,
  1069.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1070.  
  1071.     /* MEMORY_WORKING_SET_LIST.WorkingSetList constants */
  1072. #define WSLE_PAGE_READONLY                0x001
  1073. #define WSLE_PAGE_EXECUTE                 0x002
  1074. #define WSLE_PAGE_READWRITE               0x004
  1075. #define WSLE_PAGE_EXECUTE_READ            0x003
  1076. #define WSLE_PAGE_WRITECOPY               0x005
  1077. #define WSLE_PAGE_EXECUTE_READWRITE       0x006
  1078. #define WSLE_PAGE_EXECUTE_WRITECOPY       0x007
  1079. #define WSLE_PAGE_SHARE_COUNT_MASK        0x0E0
  1080. #define WSLE_PAGE_SHAREABLE               0x100
  1081.  
  1082.     typedef struct _MEMORY_WORKING_SET_LIST {
  1083.         ULONG  NumberOfPages;
  1084.         ULONG  WorkingSetList[1];
  1085.     } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
  1086.  
  1087.     typedef struct _MEMORY_SECTION_NAME {
  1088.         UNICODE_STRING  SectionFileName;
  1089.     } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
  1090.  
  1091.     /* Zw[Lock|Unlock]VirtualMemory.LockType constants */
  1092. #define LOCK_VM_IN_WSL                    0x01
  1093. #define LOCK_VM_IN_RAM                    0x02
  1094.  
  1095.     NTOSAPI
  1096.         NTSTATUS
  1097.         NTAPI
  1098.         NtLockVirtualMemory(
  1099.             /*IN*/ HANDLE  ProcessHandle,
  1100.             /*IN OUT*/ PVOID  *BaseAddress,
  1101.             /*IN OUT*/ PULONG  LockSize,
  1102.             /*IN*/ ULONG  LockType);
  1103.  
  1104.     NTOSAPI
  1105.         NTSTATUS
  1106.         NTAPI
  1107.         ZwLockVirtualMemory(
  1108.             /*IN*/ HANDLE  ProcessHandle,
  1109.             /*IN OUT*/ PVOID  *BaseAddress,
  1110.             /*IN OUT*/ PULONG  LockSize,
  1111.             /*IN*/ ULONG  LockType);
  1112.  
  1113.     NTOSAPI
  1114.         NTSTATUS
  1115.         NTAPI
  1116.         NtUnlockVirtualMemory(
  1117.             /*IN*/ HANDLE  ProcessHandle,
  1118.             /*IN OUT*/ PVOID  *BaseAddress,
  1119.             /*IN OUT*/ PULONG  LockSize,
  1120.             /*IN*/ ULONG  LockType);
  1121.  
  1122.     NTOSAPI
  1123.         NTSTATUS
  1124.         NTAPI
  1125.         ZwUnlockVirtualMemory(
  1126.             /*IN*/ HANDLE  ProcessHandle,
  1127.             /*IN OUT*/ PVOID  *BaseAddress,
  1128.             /*IN OUT*/ PULONG  LockSize,
  1129.             /*IN*/ ULONG  LockType);
  1130.  
  1131.     NTOSAPI
  1132.         NTSTATUS
  1133.         NTAPI
  1134.         NtReadVirtualMemory(
  1135.             /*IN*/ HANDLE  ProcessHandle,
  1136.             /*IN*/ PVOID  BaseAddress,
  1137.             /*OUT*/ PVOID  Buffer,
  1138.             /*IN*/ ULONG  BufferLength,
  1139.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1140.  
  1141.     NTOSAPI
  1142.         NTSTATUS
  1143.         NTAPI
  1144.         ZwReadVirtualMemory(
  1145.             /*IN*/ HANDLE  ProcessHandle,
  1146.             /*IN*/ PVOID  BaseAddress,
  1147.             /*OUT*/ PVOID  Buffer,
  1148.             /*IN*/ ULONG  BufferLength,
  1149.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1150.  
  1151.     NTOSAPI
  1152.         NTSTATUS
  1153.         NTAPI
  1154.         NtWriteVirtualMemory(
  1155.             /*IN*/ HANDLE  ProcessHandle,
  1156.             /*IN*/ PVOID  BaseAddress,
  1157.             /*IN*/ PVOID  Buffer,
  1158.             /*IN*/ ULONG  BufferLength,
  1159.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1160.  
  1161.     NTOSAPI
  1162.         NTSTATUS
  1163.         NTAPI
  1164.         ZwWriteVirtualMemory(
  1165.             /*IN*/ HANDLE  ProcessHandle,
  1166.             /*IN*/ PVOID  BaseAddress,
  1167.             /*IN*/ PVOID  Buffer,
  1168.             /*IN*/ ULONG  BufferLength,
  1169.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1170.  
  1171.     NTOSAPI
  1172.         NTSTATUS
  1173.         NTAPI
  1174.         NtProtectVirtualMemory(
  1175.             /*IN*/ HANDLE  ProcessHandle,
  1176.             /*IN OUT*/ PVOID  *BaseAddress,
  1177.             /*IN OUT*/ PULONG  ProtectSize,
  1178.             /*IN*/ ULONG  NewProtect,
  1179.             /*OUT*/ PULONG  OldProtect);
  1180.  
  1181.     NTOSAPI
  1182.         NTSTATUS
  1183.         NTAPI
  1184.         ZwProtectVirtualMemory(
  1185.             /*IN*/ HANDLE  ProcessHandle,
  1186.             /*IN OUT*/ PVOID  *BaseAddress,
  1187.             /*IN OUT*/ PULONG  ProtectSize,
  1188.             /*IN*/ ULONG  NewProtect,
  1189.             /*OUT*/ PULONG  OldProtect);
  1190.  
  1191.     NTOSAPI
  1192.         NTSTATUS
  1193.         NTAPI
  1194.         NtFlushVirtualMemory(
  1195.             /*IN*/ HANDLE  ProcessHandle,
  1196.             /*IN OUT*/ PVOID  *BaseAddress,
  1197.             /*IN OUT*/ PULONG  FlushSize,
  1198.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock);
  1199.  
  1200.     NTOSAPI
  1201.         NTSTATUS
  1202.         NTAPI
  1203.         ZwFlushVirtualMemory(
  1204.             /*IN*/ HANDLE  ProcessHandle,
  1205.             /*IN OUT*/ PVOID  *BaseAddress,
  1206.             /*IN OUT*/ PULONG  FlushSize,
  1207.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock);
  1208.  
  1209.     NTOSAPI
  1210.         NTSTATUS
  1211.         NTAPI
  1212.         NtAllocateUserPhysicalPages(
  1213.             /*IN*/ HANDLE  ProcessHandle,
  1214.             /*IN*/ PULONG  NumberOfPages,
  1215.             /*OUT*/ PULONG  PageFrameNumbers);
  1216.  
  1217.     NTOSAPI
  1218.         NTSTATUS
  1219.         NTAPI
  1220.         ZwAllocateUserPhysicalPages(
  1221.             /*IN*/ HANDLE  ProcessHandle,
  1222.             /*IN*/ PULONG  NumberOfPages,
  1223.             /*OUT*/ PULONG  PageFrameNumbers);
  1224.  
  1225.     NTOSAPI
  1226.         NTSTATUS
  1227.         NTAPI
  1228.         NtFreeUserPhysicalPages(
  1229.             /*IN*/ HANDLE  ProcessHandle,
  1230.             /*IN OUT*/ PULONG  NumberOfPages,
  1231.             /*IN*/ PULONG  PageFrameNumbers);
  1232.  
  1233.     NTOSAPI
  1234.         NTSTATUS
  1235.         NTAPI
  1236.         ZwFreeUserPhysicalPages(
  1237.             /*IN*/ HANDLE  ProcessHandle,
  1238.             /*IN OUT*/ PULONG  NumberOfPages,
  1239.             /*IN*/ PULONG  PageFrameNumbers);
  1240.  
  1241.     NTOSAPI
  1242.         NTSTATUS
  1243.         NTAPI
  1244.         NtMapUserPhysicalPages(
  1245.             /*IN*/ PVOID  BaseAddress,
  1246.             /*IN*/ PULONG  NumberOfPages,
  1247.             /*IN*/ PULONG  PageFrameNumbers);
  1248.  
  1249.     NTOSAPI
  1250.         NTSTATUS
  1251.         NTAPI
  1252.         ZwMapUserPhysicalPages(
  1253.             /*IN*/ PVOID  BaseAddress,
  1254.             /*IN*/ PULONG  NumberOfPages,
  1255.             /*IN*/ PULONG  PageFrameNumbers);
  1256.  
  1257.     NTOSAPI
  1258.         NTSTATUS
  1259.         NTAPI
  1260.         NtMapUserPhysicalPagesScatter(
  1261.             /*IN*/ PVOID  *BaseAddresses,
  1262.             /*IN*/ PULONG  NumberOfPages,
  1263.             /*IN*/ PULONG  PageFrameNumbers);
  1264.  
  1265.     NTOSAPI
  1266.         NTSTATUS
  1267.         NTAPI
  1268.         ZwMapUserPhysicalPagesScatter(
  1269.             /*IN*/ PVOID  *BaseAddresses,
  1270.             /*IN*/ PULONG  NumberOfPages,
  1271.             /*IN*/ PULONG  PageFrameNumbers);
  1272.  
  1273.     NTOSAPI
  1274.         NTSTATUS
  1275.         NTAPI
  1276.         NtGetWriteWatch(
  1277.             /*IN*/ HANDLE  ProcessHandle,
  1278.             /*IN*/ ULONG  Flags,
  1279.             /*IN*/ PVOID  BaseAddress,
  1280.             /*IN*/ ULONG  RegionSize,
  1281.             /*OUT*/ PULONG  Buffer,
  1282.             /*IN OUT*/ PULONG  BufferEntries,
  1283.             /*OUT*/ PULONG  Granularity);
  1284.  
  1285.     NTOSAPI
  1286.         NTSTATUS
  1287.         NTAPI
  1288.         ZwGetWriteWatch(
  1289.             /*IN*/ HANDLE  ProcessHandle,
  1290.             /*IN*/ ULONG  Flags,
  1291.             /*IN*/ PVOID  BaseAddress,
  1292.             /*IN*/ ULONG  RegionSize,
  1293.             /*OUT*/ PULONG  Buffer,
  1294.             /*IN OUT*/ PULONG  BufferEntries,
  1295.             /*OUT*/ PULONG  Granularity);
  1296.  
  1297.     NTOSAPI
  1298.         NTSTATUS
  1299.         NTAPI
  1300.         NtResetWriteWatch(
  1301.             /*IN*/ HANDLE  ProcessHandle,
  1302.             /*IN*/ PVOID  BaseAddress,
  1303.             /*IN*/ ULONG  RegionSize);
  1304.  
  1305.     NTOSAPI
  1306.         NTSTATUS
  1307.         NTAPI
  1308.         ZwResetWriteWatch(
  1309.             /*IN*/ HANDLE  ProcessHandle,
  1310.             /*IN*/ PVOID  BaseAddress,
  1311.             /*IN*/ ULONG  RegionSize);
  1312.  
  1313.  
  1314.  
  1315.  
  1316.     /* Sections */
  1317.  
  1318.     typedef enum _SECTION_INFORMATION_CLASS {
  1319.         SectionBasicInformation,
  1320.         SectionImageInformation
  1321.     } SECTION_INFORMATION_CLASS;
  1322.  
  1323.     NTOSAPI
  1324.         NTSTATUS
  1325.         NTAPI
  1326.         NtCreateSection(
  1327.             /*OUT*/ PHANDLE  SectionHandle,
  1328.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1329.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  1330.             /*IN*/ PLARGE_INTEGER  SectionSize  /*OPTIONAL*/,
  1331.             /*IN*/ ULONG  Protect,
  1332.             /*IN*/ ULONG  Attributes,
  1333.             /*IN*/ HANDLE  FileHandle);
  1334.  
  1335.     NTOSAPI
  1336.         NTSTATUS
  1337.         NTAPI
  1338.         ZwCreateSection(
  1339.             /*OUT*/ PHANDLE  SectionHandle,
  1340.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1341.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  1342.             /*IN*/ PLARGE_INTEGER  SectionSize  /*OPTIONAL*/,
  1343.             /*IN*/ ULONG  Protect,
  1344.             /*IN*/ ULONG  Attributes,
  1345.             /*IN*/ HANDLE  FileHandle);
  1346.  
  1347.     NTOSAPI
  1348.         NTSTATUS
  1349.         NTAPI
  1350.         NtQuerySection(
  1351.             /*IN*/ HANDLE  SectionHandle,
  1352.             /*IN*/ SECTION_INFORMATION_CLASS  SectionInformationClass,
  1353.             /*OUT*/ PVOID  SectionInformation,
  1354.             /*IN*/ ULONG  SectionInformationLength,
  1355.             /*OUT*/ PULONG  ResultLength  /*OPTIONAL*/);
  1356.  
  1357.     NTOSAPI
  1358.         NTSTATUS
  1359.         NTAPI
  1360.         ZwQuerySection(
  1361.             /*IN*/ HANDLE  SectionHandle,
  1362.             /*IN*/ SECTION_INFORMATION_CLASS  SectionInformationClass,
  1363.             /*OUT*/ PVOID  SectionInformation,
  1364.             /*IN*/ ULONG  SectionInformationLength,
  1365.             /*OUT*/ PULONG  ResultLength  /*OPTIONAL*/);
  1366.  
  1367.     NTOSAPI
  1368.         NTSTATUS
  1369.         NTAPI
  1370.         NtExtendSection(
  1371.             /*IN*/ HANDLE  SectionHandle,
  1372.             /*IN*/ PLARGE_INTEGER  SectionSize);
  1373.  
  1374.     NTOSAPI
  1375.         NTSTATUS
  1376.         NTAPI
  1377.         ZwExtendSection(
  1378.             /*IN*/ HANDLE  SectionHandle,
  1379.             /*IN*/ PLARGE_INTEGER  SectionSize);
  1380.  
  1381.     NTOSAPI
  1382.         NTSTATUS
  1383.         NTAPI
  1384.         NtAreMappedFilesTheSame(
  1385.             /*IN*/ PVOID  Address1,
  1386.             /*IN*/ PVOID  Address2);
  1387.  
  1388.     NTOSAPI
  1389.         NTSTATUS
  1390.         NTAPI
  1391.         ZwAreMappedFilesTheSame(
  1392.             /*IN*/ PVOID  Address1,
  1393.             /*IN*/ PVOID  Address2);
  1394.  
  1395.  
  1396.  
  1397.  
  1398.     /* Threads */
  1399.  
  1400.     typedef struct _USER_STACK {
  1401.         PVOID  FixedStackBase;
  1402.         PVOID  FixedStackLimit;
  1403.         PVOID  ExpandableStackBase;
  1404.         PVOID  ExpandableStackLimit;
  1405.         PVOID  ExpandableStackBottom;
  1406.     } USER_STACK, *PUSER_STACK;
  1407.  
  1408.     NTOSAPI
  1409.         NTSTATUS
  1410.         NTAPI
  1411.         NtCreateThread(
  1412.             /*OUT*/ PHANDLE  ThreadHandle,
  1413.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1414.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  1415.             /*IN*/ HANDLE  ProcessHandle,
  1416.             /*OUT*/ PCLIENT_ID  ClientId,
  1417.             /*IN*/ PCONTEXT  ThreadContext,
  1418.             /*IN*/ PUSER_STACK  UserStack,
  1419.             /*IN*/ BOOLEAN  CreateSuspended);
  1420.  
  1421.     NTOSAPI
  1422.         NTSTATUS
  1423.         NTAPI
  1424.         ZwCreateThread(
  1425.             /*OUT*/ PHANDLE  ThreadHandle,
  1426.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1427.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  1428.             /*IN*/ HANDLE  ProcessHandle,
  1429.             /*OUT*/ PCLIENT_ID  ClientId,
  1430.             /*IN*/ PCONTEXT  ThreadContext,
  1431.             /*IN*/ PUSER_STACK  UserStack,
  1432.             /*IN*/ BOOLEAN  CreateSuspended);
  1433.  
  1434.     NTOSAPI
  1435.         NTSTATUS
  1436.         NTAPI
  1437.         NtOpenThread(
  1438.             /*OUT*/ PHANDLE  ThreadHandle,
  1439.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1440.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  1441.             /*IN*/ PCLIENT_ID  ClientId);
  1442.  
  1443.     NTOSAPI
  1444.         NTSTATUS
  1445.         NTAPI
  1446.         ZwOpenThread(
  1447.             /*OUT*/ PHANDLE  ThreadHandle,
  1448.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1449.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  1450.             /*IN*/ PCLIENT_ID  ClientId);
  1451.  
  1452.     NTOSAPI
  1453.         NTSTATUS
  1454.         NTAPI
  1455.         NtTerminateThread(
  1456.             /*IN*/ HANDLE  ThreadHandle  /*OPTIONAL*/,
  1457.             /*IN*/ NTSTATUS  ExitStatus);
  1458.  
  1459.     NTOSAPI
  1460.         NTSTATUS
  1461.         NTAPI
  1462.         ZwTerminateThread(
  1463.             /*IN*/ HANDLE  ThreadHandle  /*OPTIONAL*/,
  1464.             /*IN*/ NTSTATUS  ExitStatus);
  1465.  
  1466.     NTOSAPI
  1467.         NTSTATUS
  1468.         NTAPI
  1469.         NtQueryInformationThread(
  1470.             /*IN*/ HANDLE  ThreadHandle,
  1471.             /*IN*/ THREADINFOCLASS  ThreadInformationClass,
  1472.             /*OUT*/ PVOID  ThreadInformation,
  1473.             /*IN*/ ULONG  ThreadInformationLength,
  1474.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1475.  
  1476.     NTOSAPI
  1477.         NTSTATUS
  1478.         NTAPI
  1479.         ZwQueryInformationThread(
  1480.             /*IN*/ HANDLE  ThreadHandle,
  1481.             /*IN*/ THREADINFOCLASS  ThreadInformationClass,
  1482.             /*OUT*/ PVOID  ThreadInformation,
  1483.             /*IN*/ ULONG  ThreadInformationLength,
  1484.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1485.  
  1486.     NTOSAPI
  1487.         NTSTATUS
  1488.         NTAPI
  1489.         NtSetInformationThread(
  1490.             /*IN*/ HANDLE  ThreadHandle,
  1491.             /*IN*/ THREADINFOCLASS  ThreadInformationClass,
  1492.             /*IN*/ PVOID  ThreadInformation,
  1493.             /*IN*/ ULONG  ThreadInformationLength);
  1494.  
  1495.     NTOSAPI
  1496.         NTSTATUS
  1497.         NTAPI
  1498.         ZwSetInformationThread(
  1499.             /*IN*/ HANDLE  ThreadHandle,
  1500.             /*IN*/ THREADINFOCLASS  ThreadInformationClass,
  1501.             /*IN*/ PVOID  ThreadInformation,
  1502.             /*IN*/ ULONG  ThreadInformationLength);
  1503.  
  1504.     typedef struct _THREAD_BASIC_INFORMATION {
  1505.         NTSTATUS  ExitStatus;
  1506.         PNT_TIB  TebBaseAddress;
  1507.         CLIENT_ID  ClientId;
  1508.         KAFFINITY  AffinityMask;
  1509.         KPRIORITY  Priority;
  1510.         KPRIORITY  BasePriority;
  1511.     } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
  1512.  
  1513.  
  1514.     NTOSAPI
  1515.         NTSTATUS
  1516.         NTAPI
  1517.         NtSuspendThread(
  1518.             /*IN*/ HANDLE  ThreadHandle,
  1519.             /*OUT*/ PULONG  PreviousSuspendCount  /*OPTIONAL*/);
  1520.  
  1521.     NTOSAPI
  1522.         NTSTATUS
  1523.         NTAPI
  1524.         ZwSuspendThread(
  1525.             /*IN*/ HANDLE  ThreadHandle,
  1526.             /*OUT*/ PULONG  PreviousSuspendCount  /*OPTIONAL*/);
  1527.  
  1528.     NTOSAPI
  1529.         NTSTATUS
  1530.         NTAPI
  1531.         NtResumeThread(
  1532.             /*IN*/ HANDLE  ThreadHandle,
  1533.             /*OUT*/ PULONG  PreviousSuspendCount  /*OPTIONAL*/);
  1534.  
  1535.     NTOSAPI
  1536.         NTSTATUS
  1537.         NTAPI
  1538.         ZwResumeThread(
  1539.             /*IN*/ HANDLE  ThreadHandle,
  1540.             /*OUT*/ PULONG  PreviousSuspendCount  /*OPTIONAL*/);
  1541.  
  1542.     NTOSAPI
  1543.         NTSTATUS
  1544.         NTAPI
  1545.         NtGetContextThread(
  1546.             /*IN*/ HANDLE  ThreadHandle,
  1547.             /*OUT*/ PCONTEXT  Context);
  1548.  
  1549.     NTOSAPI
  1550.         NTSTATUS
  1551.         NTAPI
  1552.         ZwGetContextThread(
  1553.             /*IN*/ HANDLE  ThreadHandle,
  1554.             /*OUT*/ PCONTEXT  Context);
  1555.  
  1556.     NTOSAPI
  1557.         NTSTATUS
  1558.         NTAPI
  1559.         NtSetContextThread(
  1560.             /*IN*/ HANDLE  ThreadHandle,
  1561.             /*IN*/ PCONTEXT  Context);
  1562.  
  1563.     NTOSAPI
  1564.         NTSTATUS
  1565.         NTAPI
  1566.         ZwSetContextThread(
  1567.             /*IN*/ HANDLE  ThreadHandle,
  1568.             /*IN*/ PCONTEXT  Context);
  1569.  
  1570.     NTOSAPI
  1571.         NTSTATUS
  1572.         NTAPI
  1573.         NtQueueApcThread(
  1574.             /*IN*/ HANDLE  ThreadHandle,
  1575.             /*IN*/ int  ApcRoutine,
  1576.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  1577.             /*IN*/ PVOID  Argument1  /*OPTIONAL*/,
  1578.             /*IN*/ PVOID  Argument2  /*OPTIONAL*/);
  1579.  
  1580.     NTOSAPI
  1581.         NTSTATUS
  1582.         NTAPI
  1583.         ZwQueueApcThread(
  1584.             /*IN*/ HANDLE  ThreadHandle,
  1585.             /*IN*/ int  ApcRoutine,
  1586.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  1587.             /*IN*/ PVOID  Argument1  /*OPTIONAL*/,
  1588.             /*IN*/ PVOID  Argument2  /*OPTIONAL*/);
  1589.  
  1590.     NTOSAPI
  1591.         NTSTATUS
  1592.         NTAPI
  1593.         NtTestAlert(
  1594.             VOID);
  1595.  
  1596.     NTOSAPI
  1597.         NTSTATUS
  1598.         NTAPI
  1599.         ZwTestAlert(
  1600.             VOID);
  1601.  
  1602.     NTOSAPI
  1603.         NTSTATUS
  1604.         NTAPI
  1605.         NtAlertThread(
  1606.             /*IN*/ HANDLE  ThreadHandle);
  1607.  
  1608.     NTOSAPI
  1609.         NTSTATUS
  1610.         NTAPI
  1611.         ZwAlertThread(
  1612.             /*IN*/ HANDLE  ThreadHandle);
  1613.  
  1614.     NTOSAPI
  1615.         NTSTATUS
  1616.         NTAPI
  1617.         NtAlertResumeThread(
  1618.             /*IN*/ HANDLE  ThreadHandle,
  1619.             /*OUT*/ PULONG  PreviousSuspendCount  /*OPTIONAL*/);
  1620.  
  1621.     NTOSAPI
  1622.         NTSTATUS
  1623.         NTAPI
  1624.         ZwAlertResumeThread(
  1625.             /*IN*/ HANDLE  ThreadHandle,
  1626.             /*OUT*/ PULONG  PreviousSuspendCount  /*OPTIONAL*/);
  1627.  
  1628.     NTOSAPI
  1629.         NTSTATUS
  1630.         NTAPI
  1631.         NtRegisterThreadTerminatePort(
  1632.             /*IN*/ HANDLE  PortHandle);
  1633.  
  1634.     NTOSAPI
  1635.         NTSTATUS
  1636.         NTAPI
  1637.         ZwRegisterThreadTerminatePort(
  1638.             /*IN*/ HANDLE  PortHandle);
  1639.  
  1640.     NTOSAPI
  1641.         NTSTATUS
  1642.         NTAPI
  1643.         NtImpersonateThread(
  1644.             /*IN*/ HANDLE  ThreadHandle,
  1645.             /*IN*/ HANDLE  TargetThreadHandle,
  1646.             /*IN*/ PSECURITY_QUALITY_OF_SERVICE  SecurityQos);
  1647.  
  1648.     NTOSAPI
  1649.         NTSTATUS
  1650.         NTAPI
  1651.         ZwImpersonateThread(
  1652.             /*IN*/ HANDLE  ThreadHandle,
  1653.             /*IN*/ HANDLE  TargetThreadHandle,
  1654.             /*IN*/ PSECURITY_QUALITY_OF_SERVICE  SecurityQos);
  1655.  
  1656.     NTOSAPI
  1657.         NTSTATUS
  1658.         NTAPI
  1659.         NtImpersonateAnonymousToken(
  1660.             /*IN*/ HANDLE  ThreadHandle);
  1661.  
  1662.     NTOSAPI
  1663.         NTSTATUS
  1664.         NTAPI
  1665.         ZwImpersonateAnonymousToken(
  1666.             /*IN*/ HANDLE  ThreadHandle);
  1667.  
  1668.  
  1669.  
  1670.  
  1671.     /* Processes */
  1672.  
  1673.     NTOSAPI
  1674.         NTSTATUS
  1675.         NTAPI
  1676.         NtCreateProcess(
  1677.             /*OUT*/ PHANDLE  ProcessHandle,
  1678.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1679.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  1680.             /*IN*/ HANDLE  InheritFromProcessHandle,
  1681.             /*IN*/ BOOLEAN  InheritHandles,
  1682.             /*IN*/ HANDLE  SectionHandle  /*OPTIONAL*/,
  1683.             /*IN*/ HANDLE  DebugPort  /*OPTIONAL*/,
  1684.             /*IN*/ HANDLE  ExceptionPort  /*OPTIONAL*/);
  1685.  
  1686.     NTOSAPI
  1687.         NTSTATUS
  1688.         NTAPI
  1689.         ZwCreateProcess(
  1690.             /*OUT*/ PHANDLE  ProcessHandle,
  1691.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1692.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  1693.             /*IN*/ HANDLE  InheritFromProcessHandle,
  1694.             /*IN*/ BOOLEAN  InheritHandles,
  1695.             /*IN*/ HANDLE  SectionHandle  /*OPTIONAL*/,
  1696.             /*IN*/ HANDLE  DebugPort  /*OPTIONAL*/,
  1697.             /*IN*/ HANDLE  ExceptionPort  /*OPTIONAL*/);
  1698.  
  1699.     NTOSAPI
  1700.         NTSTATUS
  1701.         NTAPI
  1702.         NtTerminateProcess(
  1703.             /*IN*/ HANDLE  ProcessHandle  /*OPTIONAL*/,
  1704.             /*IN*/ NTSTATUS  ExitStatus);
  1705.  
  1706.     NTOSAPI
  1707.         NTSTATUS
  1708.         NTAPI
  1709.         ZwTerminateProcess(
  1710.             /*IN*/ HANDLE  ProcessHandle  /*OPTIONAL*/,
  1711.             /*IN*/ NTSTATUS  ExitStatus);
  1712.  
  1713.     NTOSAPI
  1714.         NTSTATUS
  1715.         NTAPI
  1716.         NtQueryInformationProcess(
  1717.             /*IN*/ HANDLE  ProcessHandle,
  1718.             /*IN*/ PROCESSINFOCLASS  ProcessInformationClass,
  1719.             /*OUT*/ PVOID  ProcessInformation,
  1720.             /*IN*/ ULONG  ProcessInformationLength,
  1721.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1722.  
  1723.     NTOSAPI
  1724.         NTSTATUS
  1725.         NTAPI
  1726.         ZwQueryInformationProcess(
  1727.             /*IN*/ HANDLE  ProcessHandle,
  1728.             /*IN*/ PROCESSINFOCLASS  ProcessInformationClass,
  1729.             /*OUT*/ PVOID  ProcessInformation,
  1730.             /*IN*/ ULONG  ProcessInformationLength,
  1731.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  1732.  
  1733.     NTOSAPI
  1734.         NTSTATUS
  1735.         NTAPI
  1736.         NtSetInformationProcess(
  1737.             /*IN*/ HANDLE  ProcessHandle,
  1738.             /*IN*/ PROCESSINFOCLASS  ProcessInformationClass,
  1739.             /*IN*/ PVOID  ProcessInformation,
  1740.             /*IN*/ ULONG  ProcessInformationLength);
  1741.  
  1742.     NTOSAPI
  1743.         NTSTATUS
  1744.         NTAPI
  1745.         ZwSetInformationProcess(
  1746.             /*IN*/ HANDLE  ProcessHandle,
  1747.             /*IN*/ PROCESSINFOCLASS  ProcessInformationClass,
  1748.             /*IN*/ PVOID  ProcessInformation,
  1749.             /*IN*/ ULONG  ProcessInformationLength);
  1750.  
  1751.     /* DefaultHardErrorMode constants */
  1752.     /* also in winbase.h */
  1753. #define SEM_FAILCRITICALERRORS            0x0001
  1754. #define SEM_NOGPFAULTERRORBOX             0x0002
  1755. #define SEM_NOALIGNMENTFAULTEXCEPT        0x0004
  1756. #define SEM_NOOPENFILEERRORBOX            0x8000
  1757.     /* end winbase.h */
  1758.  
  1759.     /* PROCESS_PRIORITY_CLASS.PriorityClass constants */
  1760. #define PC_IDLE                           1
  1761. #define PC_NORMAL                         2
  1762. #define PC_HIGH                           3
  1763. #define PC_REALTIME                       4
  1764. #define PC_BELOW_NORMAL                   5
  1765. #define PC_ABOVE_NORMAL                   6
  1766.  
  1767.     typedef struct _PROCESS_PRIORITY_CLASS {
  1768.         BOOLEAN  Foreground;
  1769.         UCHAR  PriorityClass;
  1770.     } PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
  1771.  
  1772.     /* PROCESS_DEVICEMAP_INFORMATION.DriveType constants */
  1773. #define DRIVE_UNKNOWN                     0
  1774. #define DRIVE_NO_ROOT_DIR                 1
  1775. #define DRIVE_REMOVABLE                   2
  1776. #define DRIVE_FIXED                       3
  1777. #define DRIVE_REMOTE                      4
  1778. #define DRIVE_CDROM                       5
  1779. #define DRIVE_RAMDISK                     6
  1780.  
  1781.  
  1782.     typedef struct _RTL_USER_PROCESS_PARAMETERS {
  1783.         ULONG  AllocationSize;
  1784.         ULONG  Size;
  1785.         ULONG  Flags;
  1786.         ULONG  DebugFlags;
  1787.         HANDLE  hConsole;
  1788.         ULONG  ProcessGroup;
  1789.         HANDLE  hStdInput;
  1790.         HANDLE  hStdOutput;
  1791.         HANDLE  hStdError;
  1792.         UNICODE_STRING  CurrentDirectoryName;
  1793.         HANDLE  CurrentDirectoryHandle;
  1794.         UNICODE_STRING  DllPath;
  1795.         UNICODE_STRING  ImagePathName;
  1796.         UNICODE_STRING  CommandLine;
  1797.         PWSTR  Environment;
  1798.         ULONG  dwX;
  1799.         ULONG  dwY;
  1800.         ULONG  dwXSize;
  1801.         ULONG  dwYSize;
  1802.         ULONG  dwXCountChars;
  1803.         ULONG  dwYCountChars;
  1804.         ULONG  dwFillAttribute;
  1805.         ULONG  dwFlags;
  1806.         ULONG  wShowWindow;
  1807.         UNICODE_STRING  WindowTitle;
  1808.         UNICODE_STRING  DesktopInfo;
  1809.         UNICODE_STRING  ShellInfo;
  1810.         UNICODE_STRING  RuntimeInfo;
  1811.     } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
  1812.  
  1813.     NTSTATUS
  1814.         NTAPI
  1815.         RtlCreateProcessParameters(
  1816.             /*OUT*/ PRTL_USER_PROCESS_PARAMETERS  *ProcessParameters,
  1817.             /*IN*/ PUNICODE_STRING  ImageFile,
  1818.             /*IN*/ PUNICODE_STRING  DllPath  /*OPTIONAL*/,
  1819.             /*IN*/ PUNICODE_STRING  CurrentDirectory  /*OPTIONAL*/,
  1820.             /*IN*/ PUNICODE_STRING  CommandLine  /*OPTIONAL*/,
  1821.             /*IN*/ PWSTR  Environment /*OPTIONAL*/,
  1822.             /*IN*/ PUNICODE_STRING  WindowTitle  /*OPTIONAL*/,
  1823.             /*IN*/ PUNICODE_STRING  DesktopInfo  /*OPTIONAL*/,
  1824.             /*IN*/ PUNICODE_STRING  ShellInfo  /*OPTIONAL*/,
  1825.             /*IN*/ PUNICODE_STRING  RuntimeInfo  /*OPTIONAL*/);
  1826.  
  1827.     NTSTATUS
  1828.         NTAPI
  1829.         RtlDestroyProcessParameters(
  1830.             /*IN*/ PRTL_USER_PROCESS_PARAMETERS  ProcessParameters);
  1831.  
  1832.     typedef struct _DEBUG_BUFFER {
  1833.         HANDLE  SectionHandle;
  1834.         PVOID  SectionBase;
  1835.         PVOID  RemoteSectionBase;
  1836.         ULONG  SectionBaseDelta;
  1837.         HANDLE  EventPairHandle;
  1838.         ULONG  Unknown[2];
  1839.         HANDLE  RemoteThreadHandle;
  1840.         ULONG  InfoClassMask;
  1841.         ULONG  SizeOfInfo;
  1842.         ULONG  AllocatedSize;
  1843.         ULONG  SectionSize;
  1844.         PVOID  ModuleInformation;
  1845.         PVOID  BackTraceInformation;
  1846.         PVOID  HeapInformation;
  1847.         PVOID  LockInformation;
  1848.         PVOID  Reserved[8];
  1849.     } DEBUG_BUFFER, *PDEBUG_BUFFER;
  1850.  
  1851.     PDEBUG_BUFFER
  1852.         NTAPI
  1853.         RtlCreateQueryDebugBuffer(
  1854.             /*IN*/ ULONG  Size,
  1855.             /*IN*/ BOOLEAN  EventPair);
  1856.  
  1857.     /* RtlQueryProcessDebugInformation.DebugInfoClassMask constants */
  1858. #define PDI_MODULES                       0x01
  1859. #define PDI_BACKTRACE                     0x02
  1860. #define PDI_HEAPS                         0x04
  1861. #define PDI_HEAP_TAGS                     0x08
  1862. #define PDI_HEAP_BLOCKS                   0x10
  1863. #define PDI_LOCKS                         0x20
  1864.  
  1865.     NTSTATUS
  1866.         NTAPI
  1867.         RtlQueryProcessDebugInformation(
  1868.             /*IN*/ ULONG  ProcessId,
  1869.             /*IN*/ ULONG  DebugInfoClassMask,
  1870.             /*IN OUT*/ PDEBUG_BUFFER  DebugBuffer);
  1871.  
  1872.     NTSTATUS
  1873.         NTAPI
  1874.         RtlDestroyQueryDebugBuffer(
  1875.             /*IN*/ PDEBUG_BUFFER  DebugBuffer);
  1876.  
  1877.     /* DEBUG_MODULE_INFORMATION.Flags constants */
  1878. #define LDRP_STATIC_LINK                  0x00000002
  1879. #define LDRP_IMAGE_DLL                    0x00000004
  1880. #define LDRP_LOAD_IN_PROGRESS             0x00001000
  1881. #define LDRP_UNLOAD_IN_PROGRESS           0x00002000
  1882. #define LDRP_ENTRY_PROCESSED              0x00004000
  1883. #define LDRP_ENTRY_INSERTED               0x00008000
  1884. #define LDRP_CURRENT_LOAD                 0x00010000
  1885. #define LDRP_FAILED_BUILTIN_LOAD          0x00020000
  1886. #define LDRP_DONT_CALL_FOR_THREADS        0x00040000
  1887. #define LDRP_PROCESS_ATTACH_CALLED        0x00080000
  1888. #define LDRP_DEBUG_SYMBOLS_LOADED         0x00100000
  1889. #define LDRP_IMAGE_NOT_AT_BASE            0x00200000
  1890. #define LDRP_WX86_IGNORE_MACHINETYPE      0x00400000
  1891.  
  1892.     typedef struct _DEBUG_MODULE_INFORMATION {
  1893.         ULONG  Reserved[2];
  1894.         ULONG  Base;
  1895.         ULONG  Size;
  1896.         ULONG  Flags;
  1897.         USHORT  Index;
  1898.         USHORT  Unknown;
  1899.         USHORT  LoadCount;
  1900.         USHORT  ModuleNameOffset;
  1901.         CHAR  ImageName[256];
  1902.     } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
  1903.  
  1904.     typedef struct _DEBUG_HEAP_INFORMATION {
  1905.         ULONG  Base;
  1906.         ULONG  Flags;
  1907.         USHORT  Granularity;
  1908.         USHORT  Unknown;
  1909.         ULONG  Allocated;
  1910.         ULONG  Committed;
  1911.         ULONG  TagCount;
  1912.         ULONG  BlockCount;
  1913.         ULONG  Reserved[7];
  1914.         PVOID  Tags;
  1915.         PVOID  Blocks;
  1916.     } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
  1917.  
  1918.     typedef struct _DEBUG_LOCK_INFORMATION {
  1919.         PVOID  Address;
  1920.         USHORT  Type;
  1921.         USHORT  CreatorBackTraceIndex;
  1922.         ULONG  OwnerThreadId;
  1923.         ULONG  ActiveCount;
  1924.         ULONG  ContentionCount;
  1925.         ULONG  EntryCount;
  1926.         ULONG  RecursionCount;
  1927.         ULONG  NumberOfSharedWaiters;
  1928.         ULONG  NumberOfExclusiveWaiters;
  1929.     } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
  1930.  
  1931.  
  1932.  
  1933.     /* Jobs */
  1934.  
  1935.     NTOSAPI
  1936.         NTSTATUS
  1937.         NTAPI
  1938.         NtCreateJobObject(
  1939.             /*OUT*/ PHANDLE  JobHandle,
  1940.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1941.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes);
  1942.  
  1943.     NTOSAPI
  1944.         NTSTATUS
  1945.         NTAPI
  1946.         ZwCreateJobObject(
  1947.             /*OUT*/ PHANDLE  JobHandle,
  1948.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1949.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes);
  1950.  
  1951.     NTOSAPI
  1952.         NTSTATUS
  1953.         NTAPI
  1954.         NtOpenJobObject(
  1955.             /*OUT*/ PHANDLE  JobHandle,
  1956.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1957.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes);
  1958.  
  1959.     NTOSAPI
  1960.         NTSTATUS
  1961.         NTAPI
  1962.         ZwOpenJobObject(
  1963.             /*OUT*/ PHANDLE  JobHandle,
  1964.             /*IN*/ ACCESS_MASK  DesiredAccess,
  1965.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes);
  1966.  
  1967.     NTOSAPI
  1968.         NTSTATUS
  1969.         NTAPI
  1970.         NtTerminateJobObject(
  1971.             /*IN*/ HANDLE  JobHandle,
  1972.             /*IN*/ NTSTATUS  ExitStatus);
  1973.  
  1974.     NTOSAPI
  1975.         NTSTATUS
  1976.         NTAPI
  1977.         ZwTerminateJobObject(
  1978.             /*IN*/ HANDLE  JobHandle,
  1979.             /*IN*/ NTSTATUS  ExitStatus);
  1980.  
  1981.     NTOSAPI
  1982.         NTSTATUS
  1983.         NTAPI
  1984.         NtAssignProcessToJobObject(
  1985.             /*IN*/ HANDLE  JobHandle,
  1986.             /*IN*/ HANDLE  ProcessHandle);
  1987.  
  1988.     NTOSAPI
  1989.         NTSTATUS
  1990.         NTAPI
  1991.         ZwAssignProcessToJobObject(
  1992.             /*IN*/ HANDLE  JobHandle,
  1993.             /*IN*/ HANDLE  ProcessHandle);
  1994.  
  1995.     NTOSAPI
  1996.         NTSTATUS
  1997.         NTAPI
  1998.         NtQueryInformationJobObject(
  1999.             /*IN*/ HANDLE  JobHandle,
  2000.             /*IN*/ int  JobInformationClass,
  2001.             /*OUT*/ PVOID  JobInformation,
  2002.             /*IN*/ ULONG  JobInformationLength,
  2003.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  2004.  
  2005.     NTOSAPI
  2006.         NTSTATUS
  2007.         NTAPI
  2008.         ZwQueryInformationJobObject(
  2009.             /*IN*/ HANDLE  JobHandle,
  2010.             /*IN*/ int  JobInformationClass,
  2011.             /*OUT*/ PVOID  JobInformation,
  2012.             /*IN*/ ULONG  JobInformationLength,
  2013.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  2014.  
  2015.     NTOSAPI
  2016.         NTSTATUS
  2017.         NTAPI
  2018.         NtSetInformationJobObject(
  2019.             /*IN*/ HANDLE  JobHandle,
  2020.             /*IN*/ int  JobInformationClass,
  2021.             /*IN*/ PVOID  JobInformation,
  2022.             /*IN*/ ULONG  JobInformationLength);
  2023.  
  2024.     NTOSAPI
  2025.         NTSTATUS
  2026.         NTAPI
  2027.         ZwSetInformationJobObject(
  2028.             /*IN*/ HANDLE  JobHandle,
  2029.             /*IN*/ int  JobInformationClass,
  2030.             /*IN*/ PVOID  JobInformation,
  2031.             /*IN*/ ULONG  JobInformationLength);
  2032.  
  2033.  
  2034.     /* Tokens */
  2035.  
  2036.     typedef enum tagTOKEN_TYPE {
  2037.         TokenPrimary = 1,
  2038.         TokenImpersonation
  2039.     } TOKEN_TYPE, *PTOKEN_TYPE;
  2040.  
  2041.  
  2042.     NTOSAPI
  2043.         NTSTATUS
  2044.         NTAPI
  2045.         NtCreateToken(
  2046.             /*OUT*/ PHANDLE TokenHandle,
  2047.             /*IN*/ ACCESS_MASK DesiredAccess,
  2048.             /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
  2049.             /*IN*/ TOKEN_TYPE Type,
  2050.             /*IN*/ PLUID AuthenticationId,
  2051.             /*IN*/ PLARGE_INTEGER ExpirationTime,
  2052.             /*IN*/ int User,
  2053.             /*IN*/ int Groups,
  2054.             /*IN*/ int Privileges,
  2055.             /*IN*/ int Owner,
  2056.             /*IN*/ int PrimaryGroup,
  2057.             /*IN*/ int DefaultDacl,
  2058.             /*IN*/ int Source
  2059.             );
  2060.  
  2061.     NTOSAPI
  2062.         NTSTATUS
  2063.         NTAPI
  2064.         ZwCreateToken(
  2065.             /*OUT*/ PHANDLE TokenHandle,
  2066.             /*IN*/ ACCESS_MASK DesiredAccess,
  2067.             /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
  2068.             /*IN*/ TOKEN_TYPE Type,
  2069.             /*IN*/ PLUID AuthenticationId,
  2070.             /*IN*/ PLARGE_INTEGER ExpirationTime,
  2071.             /*IN*/ int User,
  2072.             /*IN*/ int Groups,
  2073.             /*IN*/ int Privileges,
  2074.             /*IN*/ int Owner,
  2075.             /*IN*/ int PrimaryGroup,
  2076.             /*IN*/ int DefaultDacl,
  2077.             /*IN*/ int Source
  2078.             );
  2079.  
  2080.     NTOSAPI
  2081.         NTSTATUS
  2082.         NTAPI
  2083.         NtOpenProcessToken(
  2084.             /*IN*/ HANDLE  ProcessHandle,
  2085.             /*IN*/ ACCESS_MASK  DesiredAccess,
  2086.             /*OUT*/ PHANDLE  TokenHandle);
  2087.  
  2088.     NTOSAPI
  2089.         NTSTATUS
  2090.         NTAPI
  2091.         ZwOpenProcessToken(
  2092.             /*IN*/ HANDLE  ProcessHandle,
  2093.             /*IN*/ ACCESS_MASK  DesiredAccess,
  2094.             /*OUT*/ PHANDLE  TokenHandle);
  2095.  
  2096.     NTOSAPI
  2097.         NTSTATUS
  2098.         NTAPI
  2099.         NtOpenThreadToken(
  2100.             /*IN*/ HANDLE  ThreadHandle,
  2101.             /*IN*/ ACCESS_MASK  DesiredAccess,
  2102.             /*IN*/ BOOLEAN  OpenAsSelf,
  2103.             /*OUT*/ PHANDLE  TokenHandle);
  2104.  
  2105.     NTOSAPI
  2106.         NTSTATUS
  2107.         NTAPI
  2108.         ZwOpenThreadToken(
  2109.             /*IN*/ HANDLE  ThreadHandle,
  2110.             /*IN*/ ACCESS_MASK  DesiredAccess,
  2111.             /*IN*/ BOOLEAN  OpenAsSelf,
  2112.             /*OUT*/ PHANDLE  TokenHandle);
  2113.  
  2114.     NTOSAPI
  2115.         NTSTATUS
  2116.         NTAPI
  2117.         NtDuplicateToken(
  2118.             /*IN*/ HANDLE  ExistingTokenHandle,
  2119.             /*IN*/ ACCESS_MASK  DesiredAccess,
  2120.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  2121.             /*IN*/ BOOLEAN  EffectiveOnly,
  2122.             /*IN*/ TOKEN_TYPE  TokenType,
  2123.             /*OUT*/ PHANDLE  NewTokenHandle);
  2124.  
  2125.     NTOSAPI
  2126.         NTSTATUS
  2127.         NTAPI
  2128.         ZwDuplicateToken(
  2129.             /*IN*/ HANDLE  ExistingTokenHandle,
  2130.             /*IN*/ ACCESS_MASK  DesiredAccess,
  2131.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  2132.             /*IN*/ BOOLEAN  EffectiveOnly,
  2133.             /*IN*/ TOKEN_TYPE  TokenType,
  2134.             /*OUT*/ PHANDLE  NewTokenHandle);
  2135.  
  2136.     NTOSAPI
  2137.         NTSTATUS
  2138.         NTAPI
  2139.         NtFilterToken(
  2140.             /*IN*/ HANDLE  ExistingTokenHandle,
  2141.             /*IN*/ ULONG  Flags,
  2142.             /*IN*/ int  SidsToDisable,
  2143.             /*IN*/ int  PrivilegesToDelete,
  2144.             /*IN*/ int  SidsToRestricted,
  2145.             /*OUT*/ PHANDLE  NewTokenHandle);
  2146.  
  2147.     NTOSAPI
  2148.         NTSTATUS
  2149.         NTAPI
  2150.         ZwFilterToken(
  2151.             /*IN*/ HANDLE  ExistingTokenHandle,
  2152.             /*IN*/ ULONG  Flags,
  2153.             /*IN*/ int  SidsToDisable,
  2154.             /*IN*/ int  PrivilegesToDelete,
  2155.             /*IN*/ int  SidsToRestricted,
  2156.             /*OUT*/ PHANDLE  NewTokenHandle);
  2157.  
  2158.     NTOSAPI
  2159.         NTSTATUS
  2160.         NTAPI
  2161.         NtAdjustPrivilegesToken(
  2162.             /*IN*/ HANDLE  TokenHandle,
  2163.             /*IN*/ BOOLEAN  DisableAllPrivileges,
  2164.             /*IN*/ int  NewState,
  2165.             /*IN*/ ULONG  BufferLength,
  2166.             /*OUT*/ int  PreviousState  /*OPTIONAL*/,
  2167.             /*OUT*/ PULONG  ReturnLength);
  2168.  
  2169.     NTOSAPI
  2170.         NTSTATUS
  2171.         NTAPI
  2172.         ZwAdjustPrivilegesToken(
  2173.             /*IN*/ HANDLE  TokenHandle,
  2174.             /*IN*/ BOOLEAN  DisableAllPrivileges,
  2175.             /*IN*/ int  NewState,
  2176.             /*IN*/ ULONG  BufferLength,
  2177.             /*OUT*/ int  PreviousState  /*OPTIONAL*/,
  2178.             /*OUT*/ PULONG  ReturnLength);
  2179.  
  2180.     NTOSAPI
  2181.         NTSTATUS
  2182.         NTAPI
  2183.         NtAdjustGroupsToken(
  2184.             /*IN*/ HANDLE  TokenHandle,
  2185.             /*IN*/ BOOLEAN  ResetToDefault,
  2186.             /*IN*/ int  NewState,
  2187.             /*IN*/ ULONG  BufferLength,
  2188.             /*OUT*/ int  PreviousState  /*OPTIONAL*/,
  2189.             /*OUT*/ PULONG  ReturnLength);
  2190.  
  2191.     NTOSAPI
  2192.         NTSTATUS
  2193.         NTAPI
  2194.         ZwAdjustGroupsToken(
  2195.             /*IN*/ HANDLE  TokenHandle,
  2196.             /*IN*/ BOOLEAN  ResetToDefault,
  2197.             /*IN*/ int  NewState,
  2198.             /*IN*/ ULONG  BufferLength,
  2199.             /*OUT*/ int  PreviousState  /*OPTIONAL*/,
  2200.             /*OUT*/ PULONG  ReturnLength);
  2201.  
  2202.     NTOSAPI
  2203.         NTSTATUS
  2204.         NTAPI
  2205.         NtQueryInformationToken(
  2206.             /*IN*/ HANDLE  TokenHandle,
  2207.             /*IN*/ int  TokenInformationClass,
  2208.             /*OUT*/ PVOID  TokenInformation,
  2209.             /*IN*/ ULONG  TokenInformationLength,
  2210.             /*OUT*/ PULONG  ReturnLength);
  2211.  
  2212.     NTOSAPI
  2213.         NTSTATUS
  2214.         NTAPI
  2215.         ZwQueryInformationToken(
  2216.             /*IN*/ HANDLE  TokenHandle,
  2217.             /*IN*/ int  TokenInformationClass,
  2218.             /*OUT*/ PVOID  TokenInformation,
  2219.             /*IN*/ ULONG  TokenInformationLength,
  2220.             /*OUT*/ PULONG  ReturnLength);
  2221.  
  2222.     NTOSAPI
  2223.         NTSTATUS
  2224.         NTAPI
  2225.         NtSetInformationToken(
  2226.             /*IN*/ HANDLE  TokenHandle,
  2227.             /*IN*/ int  TokenInformationClass,
  2228.             /*IN*/ PVOID  TokenInformation,
  2229.             /*IN*/ ULONG  TokenInformationLength);
  2230.  
  2231.     NTOSAPI
  2232.         NTSTATUS
  2233.         NTAPI
  2234.         ZwSetInformationToken(
  2235.             /*IN*/ HANDLE  TokenHandle,
  2236.             /*IN*/ int  TokenInformationClass,
  2237.             /*IN*/ PVOID  TokenInformation,
  2238.             /*IN*/ ULONG  TokenInformationLength);
  2239.  
  2240.  
  2241.  
  2242.  
  2243.     /* Time */
  2244.  
  2245.     NTOSAPI
  2246.         NTSTATUS
  2247.         NTAPI
  2248.         NtQuerySystemTime(
  2249.             /*OUT*/ PLARGE_INTEGER  CurrentTime);
  2250.  
  2251.     NTOSAPI
  2252.         NTSTATUS
  2253.         NTAPI
  2254.         ZwQuerySystemTime(
  2255.             /*OUT*/ PLARGE_INTEGER  CurrentTime);
  2256.  
  2257.     NTOSAPI
  2258.         NTSTATUS
  2259.         NTAPI
  2260.         NtSetSystemTime(
  2261.             /*IN*/ PLARGE_INTEGER  NewTime,
  2262.             /*OUT*/ PLARGE_INTEGER  OldTime  /*OPTIONAL*/);
  2263.  
  2264.     NTOSAPI
  2265.         NTSTATUS
  2266.         NTAPI
  2267.         ZwSetSystemTime(
  2268.             /*IN*/ PLARGE_INTEGER  NewTime,
  2269.             /*OUT*/ PLARGE_INTEGER  OldTime  /*OPTIONAL*/);
  2270.  
  2271.     NTOSAPI
  2272.         NTSTATUS
  2273.         NTAPI
  2274.         NtQueryPerformanceCounter(
  2275.             /*OUT*/ PLARGE_INTEGER  PerformanceCount,
  2276.             /*OUT*/ PLARGE_INTEGER  PerformanceFrequency  /*OPTIONAL*/);
  2277.  
  2278.     NTOSAPI
  2279.         NTSTATUS
  2280.         NTAPI
  2281.         ZwQueryPerformanceCounter(
  2282.             /*OUT*/ PLARGE_INTEGER  PerformanceCount,
  2283.             /*OUT*/ PLARGE_INTEGER  PerformanceFrequency  /*OPTIONAL*/);
  2284.  
  2285.     NTOSAPI
  2286.         NTSTATUS
  2287.         NTAPI
  2288.         NtQueryTimerResolution(
  2289.             /*OUT*/ PULONG  CoarsestResolution,
  2290.             /*OUT*/ PULONG  FinestResolution,
  2291.             /*OUT*/ PULONG  ActualResolution);
  2292.  
  2293.     NTOSAPI
  2294.         NTSTATUS
  2295.         NTAPI
  2296.         ZwQueryTimerResolution(
  2297.             /*OUT*/ PULONG  CoarsestResolution,
  2298.             /*OUT*/ PULONG  FinestResolution,
  2299.             /*OUT*/ PULONG  ActualResolution);
  2300.  
  2301.     NTOSAPI
  2302.         NTSTATUS
  2303.         NTAPI
  2304.         NtDelayExecution(
  2305.             /*IN*/ BOOLEAN  Alertable,
  2306.             /*IN*/ PLARGE_INTEGER  Interval);
  2307.  
  2308.     NTOSAPI
  2309.         NTSTATUS
  2310.         NTAPI
  2311.         ZwDelayExecution(
  2312.             /*IN*/ BOOLEAN  Alertable,
  2313.             /*IN*/ PLARGE_INTEGER  Interval);
  2314.  
  2315.     NTOSAPI
  2316.         NTSTATUS
  2317.         NTAPI
  2318.         NtYieldExecution(
  2319.             VOID);
  2320.  
  2321.     NTOSAPI
  2322.         NTSTATUS
  2323.         NTAPI
  2324.         ZwYieldExecution(
  2325.             VOID);
  2326.  
  2327.     NTOSAPI
  2328.         ULONG
  2329.         NTAPI
  2330.         NtGetTickCount(
  2331.             VOID);
  2332.  
  2333.     NTOSAPI
  2334.         ULONG
  2335.         NTAPI
  2336.         ZwGetTickCount(
  2337.             VOID);
  2338.  
  2339.  
  2340.  
  2341.  
  2342.     /* Execution profiling */
  2343.  
  2344.     NTOSAPI
  2345.         NTSTATUS
  2346.         NTAPI
  2347.         NtCreateProfile(
  2348.             /*OUT*/ PHANDLE  ProfileHandle,
  2349.             /*IN*/ HANDLE  ProcessHandle,
  2350.             /*IN*/ PVOID  Base,
  2351.             /*IN*/ ULONG  Size,
  2352.             /*IN*/ ULONG  BucketShift,
  2353.             /*IN*/ PULONG  Buffer,
  2354.             /*IN*/ ULONG  BufferLength,
  2355.             /*IN*/ KPROFILE_SOURCE  Source,
  2356.             /*IN*/ ULONG  ProcessorMask);
  2357.  
  2358.     NTOSAPI
  2359.         NTSTATUS
  2360.         NTAPI
  2361.         ZwCreateProfile(
  2362.             /*OUT*/ PHANDLE  ProfileHandle,
  2363.             /*IN*/ HANDLE  ProcessHandle,
  2364.             /*IN*/ PVOID  Base,
  2365.             /*IN*/ ULONG  Size,
  2366.             /*IN*/ ULONG  BucketShift,
  2367.             /*IN*/ PULONG  Buffer,
  2368.             /*IN*/ ULONG  BufferLength,
  2369.             /*IN*/ KPROFILE_SOURCE  Source,
  2370.             /*IN*/ ULONG  ProcessorMask);
  2371.  
  2372.     NTOSAPI
  2373.         NTSTATUS
  2374.         NTAPI
  2375.         NtSetIntervalProfile(
  2376.             /*IN*/ ULONG  Interval,
  2377.             /*IN*/ KPROFILE_SOURCE  Source);
  2378.  
  2379.     NTOSAPI
  2380.         NTSTATUS
  2381.         NTAPI
  2382.         ZwSetIntervalProfile(
  2383.             /*IN*/ ULONG  Interval,
  2384.             /*IN*/ KPROFILE_SOURCE  Source);
  2385.  
  2386.     NTOSAPI
  2387.         NTSTATUS
  2388.         NTAPI
  2389.         NtQueryIntervalProfile(
  2390.             /*IN*/ KPROFILE_SOURCE  Source,
  2391.             /*OUT*/ PULONG  Interval);
  2392.  
  2393.     NTOSAPI
  2394.         NTSTATUS
  2395.         NTAPI
  2396.         ZwQueryIntervalProfile(
  2397.             /*IN*/ KPROFILE_SOURCE  Source,
  2398.             /*OUT*/ PULONG  Interval);
  2399.  
  2400.     NTOSAPI
  2401.         NTSTATUS
  2402.         NTAPI
  2403.         NtStartProfile(
  2404.             /*IN*/ HANDLE  ProfileHandle);
  2405.  
  2406.     NTOSAPI
  2407.         NTSTATUS
  2408.         NTAPI
  2409.         ZwStartProfile(
  2410.             /*IN*/ HANDLE  ProfileHandle);
  2411.  
  2412.     NTOSAPI
  2413.         NTSTATUS
  2414.         NTAPI
  2415.         NtStopProfile(
  2416.             /*IN*/ HANDLE  ProfileHandle);
  2417.  
  2418.     NTOSAPI
  2419.         NTSTATUS
  2420.         NTAPI
  2421.         ZwStopProfile(
  2422.             /*IN*/ HANDLE  ProfileHandle);
  2423.  
  2424.     /* Local Procedure Call (LPC) */
  2425.  
  2426.     typedef struct _LPC_MESSAGE {
  2427.         USHORT  DataSize;
  2428.         USHORT  MessageSize;
  2429.         USHORT  MessageType;
  2430.         USHORT  VirtualRangesOffset;
  2431.         CLIENT_ID  ClientId;
  2432.         ULONG  MessageId;
  2433.         ULONG  SectionSize;
  2434.         UCHAR  Data[ANYSIZE_ARRAY];
  2435.     } LPC_MESSAGE, *PLPC_MESSAGE;
  2436.  
  2437. #define LPC_MESSAGE_BASE_SIZE   24
  2438.  
  2439.     typedef enum _LPC_TYPE {
  2440.         LPC_NEW_MESSAGE,
  2441.         LPC_REQUEST,
  2442.         LPC_REPLY,
  2443.         LPC_DATAGRAM,
  2444.         LPC_LOST_REPLY,
  2445.         LPC_PORT_CLOSED,
  2446.         LPC_CLIENT_DIED,
  2447.         LPC_EXCEPTION,
  2448.         LPC_DEBUG_EVENT,
  2449.         LPC_ERROR_EVENT,
  2450.         LPC_CONNECTION_REQUEST,
  2451.         LPC_CONNECTION_REFUSED,
  2452.         LPC_MAXIMUM
  2453.     } LPC_TYPE;
  2454.  
  2455.     typedef struct _LPC_SECTION_WRITE {
  2456.         ULONG  Length;
  2457.         HANDLE  SectionHandle;
  2458.         ULONG  SectionOffset;
  2459.         ULONG  ViewSize;
  2460.         PVOID  ViewBase;
  2461.         PVOID  TargetViewBase;
  2462.     } LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
  2463.  
  2464.     typedef struct _LPC_SECTION_READ {
  2465.         ULONG  Length;
  2466.         ULONG  ViewSize;
  2467.         PVOID  ViewBase;
  2468.     } LPC_SECTION_READ, *PLPC_SECTION_READ;
  2469.  
  2470.     NTOSAPI
  2471.         NTSTATUS
  2472.         NTAPI
  2473.         NtCreatePort(
  2474.             /*OUT*/ PHANDLE  PortHandle,
  2475.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  2476.             /*IN*/ ULONG  MaxDataSize,
  2477.             /*IN*/ ULONG  MaxMessageSize,
  2478.             /*IN*/ ULONG  Reserved);
  2479.  
  2480.     NTOSAPI
  2481.         NTSTATUS
  2482.         NTAPI
  2483.         ZwCreatePort(
  2484.             /*OUT*/ PHANDLE  PortHandle,
  2485.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  2486.             /*IN*/ ULONG  MaxDataSize,
  2487.             /*IN*/ ULONG  MaxMessageSize,
  2488.             /*IN*/ ULONG  Reserved);
  2489.  
  2490.     NTOSAPI
  2491.         NTSTATUS
  2492.         NTAPI
  2493.         NtCreateWaitablePort(
  2494.             /*OUT*/ PHANDLE  PortHandle,
  2495.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  2496.             /*IN*/ ULONG  MaxDataSize,
  2497.             /*IN*/ ULONG  MaxMessageSize,
  2498.             /*IN*/ ULONG  Reserved);
  2499.  
  2500.     NTOSAPI
  2501.         NTSTATUS
  2502.         NTAPI
  2503.         ZwCreateWaitablePort(
  2504.             /*OUT*/ PHANDLE  PortHandle,
  2505.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes,
  2506.             /*IN*/ ULONG  MaxDataSize,
  2507.             /*IN*/ ULONG  MaxMessageSize,
  2508.             /*IN*/ ULONG  Reserved);
  2509.  
  2510.     NTOSAPI
  2511.         NTSTATUS
  2512.         NTAPI
  2513.         NtConnectPort(
  2514.             /*OUT*/ PHANDLE  PortHandle,
  2515.             /*IN*/ PUNICODE_STRING  PortName,
  2516.             /*IN*/ PSECURITY_QUALITY_OF_SERVICE  SecurityQos,
  2517.             /*IN OUT*/ PLPC_SECTION_WRITE  WriteSection  /*OPTIONAL*/,
  2518.             /*IN OUT*/ PLPC_SECTION_READ  ReadSection  /*OPTIONAL*/,
  2519.             /*OUT*/ PULONG  MaxMessageSize  /*OPTIONAL*/,
  2520.             /*IN OUT*/ PVOID  ConnectData  /*OPTIONAL*/,
  2521.             /*IN OUT*/ PULONG  ConnectDataLength  /*OPTIONAL*/);
  2522.  
  2523.     NTOSAPI
  2524.         NTSTATUS
  2525.         NTAPI
  2526.         ZwConnectPort(
  2527.             /*OUT*/ PHANDLE  PortHandle,
  2528.             /*IN*/ PUNICODE_STRING  PortName,
  2529.             /*IN*/ PSECURITY_QUALITY_OF_SERVICE  SecurityQos,
  2530.             /*IN OUT*/ PLPC_SECTION_WRITE  WriteSection  /*OPTIONAL*/,
  2531.             /*IN OUT*/ PLPC_SECTION_READ  ReadSection  /*OPTIONAL*/,
  2532.             /*OUT*/ PULONG  MaxMessageSize  /*OPTIONAL*/,
  2533.             /*IN OUT*/ PVOID  ConnectData  /*OPTIONAL*/,
  2534.             /*IN OUT*/ PULONG  ConnectDataLength  /*OPTIONAL*/);
  2535.  
  2536.     NTOSAPI
  2537.         NTSTATUS
  2538.         NTAPI
  2539.         NtListenPort(
  2540.             /*IN*/ HANDLE  PortHandle,
  2541.             /*OUT*/ PLPC_MESSAGE  Message);
  2542.  
  2543.     NTOSAPI
  2544.         NTSTATUS
  2545.         NTAPI
  2546.         ZwListenPort(
  2547.             /*IN*/ HANDLE  PortHandle,
  2548.             /*OUT*/ PLPC_MESSAGE  Message);
  2549.  
  2550.     NTOSAPI
  2551.         NTSTATUS
  2552.         NTAPI
  2553.         NtAcceptConnectPort(
  2554.             /*OUT*/ PHANDLE  PortHandle,
  2555.             /*IN*/ ULONG  PortIdentifier,
  2556.             /*IN*/ PLPC_MESSAGE  Message,
  2557.             /*IN*/ BOOLEAN  Accept,
  2558.             /*IN OUT*/ PLPC_SECTION_WRITE  WriteSection  /*OPTIONAL*/,
  2559.             /*IN OUT*/ PLPC_SECTION_READ  ReadSection  /*OPTIONAL*/);
  2560.  
  2561.     NTOSAPI
  2562.         NTSTATUS
  2563.         NTAPI
  2564.         ZwAcceptConnectPort(
  2565.             /*OUT*/ PHANDLE  PortHandle,
  2566.             /*IN*/ ULONG  PortIdentifier,
  2567.             /*IN*/ PLPC_MESSAGE  Message,
  2568.             /*IN*/ BOOLEAN  Accept,
  2569.             /*IN OUT*/ PLPC_SECTION_WRITE  WriteSection  /*OPTIONAL*/,
  2570.             /*IN OUT*/ PLPC_SECTION_READ  ReadSection  /*OPTIONAL*/);
  2571.  
  2572.     NTOSAPI
  2573.         NTSTATUS
  2574.         NTAPI
  2575.         NtCompleteConnectPort(
  2576.             /*IN*/ HANDLE  PortHandle);
  2577.  
  2578.     NTOSAPI
  2579.         NTSTATUS
  2580.         NTAPI
  2581.         ZwCompleteConnectPort(
  2582.             /*IN*/ HANDLE  PortHandle);
  2583.  
  2584.     NTOSAPI
  2585.         NTSTATUS
  2586.         NTAPI
  2587.         NtRequestPort(
  2588.             /*IN*/ HANDLE  PortHandle,
  2589.             /*IN*/ PLPC_MESSAGE  RequestMessage);
  2590.  
  2591.     NTOSAPI
  2592.         NTSTATUS
  2593.         NTAPI
  2594.         ZwRequestPort(
  2595.             /*IN*/ HANDLE  PortHandle,
  2596.             /*IN*/ PLPC_MESSAGE  RequestMessage);
  2597.  
  2598.     NTOSAPI
  2599.         NTSTATUS
  2600.         NTAPI
  2601.         NtRequestWaitReplyPort(
  2602.             /*IN*/ HANDLE  PortHandle,
  2603.             /*IN*/ PLPC_MESSAGE  RequestMessage,
  2604.             /*OUT*/ PLPC_MESSAGE  ReplyMessage);
  2605.  
  2606.     NTOSAPI
  2607.         NTSTATUS
  2608.         NTAPI
  2609.         ZwRequestWaitReplyPort(
  2610.             /*IN*/ HANDLE  PortHandle,
  2611.             /*IN*/ PLPC_MESSAGE  RequestMessage,
  2612.             /*OUT*/ PLPC_MESSAGE  ReplyMessage);
  2613.  
  2614.     NTOSAPI
  2615.         NTSTATUS
  2616.         NTAPI
  2617.         NtReplyPort(
  2618.             /*IN*/ HANDLE  PortHandle,
  2619.             /*IN*/ PLPC_MESSAGE  ReplyMessage);
  2620.  
  2621.     NTOSAPI
  2622.         NTSTATUS
  2623.         NTAPI
  2624.         ZwReplyPort(
  2625.             /*IN*/ HANDLE  PortHandle,
  2626.             /*IN*/ PLPC_MESSAGE  ReplyMessage);
  2627.  
  2628.     NTOSAPI
  2629.         NTSTATUS
  2630.         NTAPI
  2631.         NtReplyWaitReplyPort(
  2632.             /*IN*/ HANDLE  PortHandle,
  2633.             /*IN OUT*/ PLPC_MESSAGE  ReplyMessage);
  2634.  
  2635.     NTOSAPI
  2636.         NTSTATUS
  2637.         NTAPI
  2638.         ZwReplyWaitReplyPort(
  2639.             /*IN*/ HANDLE  PortHandle,
  2640.             /*IN OUT*/ PLPC_MESSAGE  ReplyMessage);
  2641.  
  2642.     NTOSAPI
  2643.         NTSTATUS
  2644.         NTAPI
  2645.         NtReplyWaitReceivePort(
  2646.             /*IN*/ HANDLE  PortHandle,
  2647.             /*OUT*/ PULONG  PortIdentifier  /*OPTIONAL*/,
  2648.             /*IN*/ PLPC_MESSAGE  ReplyMessage  /*OPTIONAL*/,
  2649.             /*OUT*/ PLPC_MESSAGE  Message);
  2650.  
  2651.     NTOSAPI
  2652.         NTSTATUS
  2653.         NTAPI
  2654.         ZwReplyWaitReceivePort(
  2655.             /*IN*/ HANDLE  PortHandle,
  2656.             /*OUT*/ PULONG  PortIdentifier  /*OPTIONAL*/,
  2657.             /*IN*/ PLPC_MESSAGE  ReplyMessage  /*OPTIONAL*/,
  2658.             /*OUT*/ PLPC_MESSAGE  Message);
  2659.  
  2660.     NTOSAPI
  2661.         NTSTATUS
  2662.         NTAPI
  2663.         NtReplyWaitReceivePortEx(
  2664.             /*IN*/ HANDLE  PortHandle,
  2665.             /*OUT*/ PULONG  PortIdentifier  /*OPTIONAL*/,
  2666.             /*IN*/ PLPC_MESSAGE  ReplyMessage  /*OPTIONAL*/,
  2667.             /*OUT*/ PLPC_MESSAGE  Message,
  2668.             /*IN*/ PLARGE_INTEGER  Timeout);
  2669.  
  2670.     NTOSAPI
  2671.         NTSTATUS
  2672.         NTAPI
  2673.         ZwReplyWaitReceivePortEx(
  2674.             /*IN*/ HANDLE  PortHandle,
  2675.             /*OUT*/ PULONG  PortIdentifier  /*OPTIONAL*/,
  2676.             /*IN*/ PLPC_MESSAGE  ReplyMessage  /*OPTIONAL*/,
  2677.             /*OUT*/ PLPC_MESSAGE  Message,
  2678.             /*IN*/ PLARGE_INTEGER  Timeout);
  2679.  
  2680.     NTOSAPI
  2681.         NTSTATUS
  2682.         NTAPI
  2683.         NtReadRequestData(
  2684.             /*IN*/ HANDLE  PortHandle,
  2685.             /*IN*/ PLPC_MESSAGE  Message,
  2686.             /*IN*/ ULONG  Index,
  2687.             /*OUT*/ PVOID  Buffer,
  2688.             /*IN*/ ULONG  BufferLength,
  2689.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  2690.  
  2691.     NTOSAPI
  2692.         NTSTATUS
  2693.         NTAPI
  2694.         ZwReadRequestData(
  2695.             /*IN*/ HANDLE  PortHandle,
  2696.             /*IN*/ PLPC_MESSAGE  Message,
  2697.             /*IN*/ ULONG  Index,
  2698.             /*OUT*/ PVOID  Buffer,
  2699.             /*IN*/ ULONG  BufferLength,
  2700.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  2701.  
  2702.     NTOSAPI
  2703.         NTSTATUS
  2704.         NTAPI
  2705.         NtWriteRequestData(
  2706.             /*IN*/ HANDLE  PortHandle,
  2707.             /*IN*/ PLPC_MESSAGE  Message,
  2708.             /*IN*/ ULONG  Index,
  2709.             /*IN*/ PVOID  Buffer,
  2710.             /*IN*/ ULONG  BufferLength,
  2711.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  2712.  
  2713.     NTOSAPI
  2714.         NTSTATUS
  2715.         NTAPI
  2716.         ZwWriteRequestData(
  2717.             /*IN*/ HANDLE  PortHandle,
  2718.             /*IN*/ PLPC_MESSAGE  Message,
  2719.             /*IN*/ ULONG  Index,
  2720.             /*IN*/ PVOID  Buffer,
  2721.             /*IN*/ ULONG  BufferLength,
  2722.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  2723.  
  2724.     typedef enum _PORT_INFORMATION_CLASS {
  2725.         PortBasicInformation
  2726.     } PORT_INFORMATION_CLASS;
  2727.  
  2728.     NTOSAPI
  2729.         NTSTATUS
  2730.         NTAPI
  2731.         NtQueryInformationPort(
  2732.             /*IN*/ HANDLE  PortHandle,
  2733.             /*IN*/ PORT_INFORMATION_CLASS  PortInformationClass,
  2734.             /*OUT*/ PVOID  PortInformation,
  2735.             /*IN*/ ULONG  PortInformationLength,
  2736.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  2737.  
  2738.     NTOSAPI
  2739.         NTSTATUS
  2740.         NTAPI
  2741.         ZwQueryInformationPort(
  2742.             /*IN*/ HANDLE  PortHandle,
  2743.             /*IN*/ PORT_INFORMATION_CLASS  PortInformationClass,
  2744.             /*OUT*/ PVOID  PortInformation,
  2745.             /*IN*/ ULONG  PortInformationLength,
  2746.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  2747.  
  2748.     NTOSAPI
  2749.         NTSTATUS
  2750.         NTAPI
  2751.         NtImpersonateClientOfPort(
  2752.             /*IN*/ HANDLE  PortHandle,
  2753.             /*IN*/ PLPC_MESSAGE  Message);
  2754.  
  2755.     NTOSAPI
  2756.         NTSTATUS
  2757.         NTAPI
  2758.         ZwImpersonateClientOfPort(
  2759.             /*IN*/ HANDLE  PortHandle,
  2760.             /*IN*/ PLPC_MESSAGE  Message);
  2761.  
  2762.  
  2763.  
  2764.  
  2765.     /* Files */
  2766.  
  2767.     NTOSAPI
  2768.         NTSTATUS
  2769.         NTAPI
  2770.         NtDeleteFile(
  2771.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes);
  2772.  
  2773.     NTOSAPI
  2774.         NTSTATUS
  2775.         NTAPI
  2776.         ZwDeleteFile(
  2777.             /*IN*/ POBJECT_ATTRIBUTES  ObjectAttributes);
  2778.  
  2779.     NTOSAPI
  2780.         NTSTATUS
  2781.         NTAPI
  2782.         NtFlushBuffersFile(
  2783.             /*IN*/ HANDLE  FileHandle,
  2784.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock);
  2785.  
  2786.     NTOSAPI
  2787.         NTSTATUS
  2788.         NTAPI
  2789.         ZwFlushBuffersFile(
  2790.             /*IN*/ HANDLE  FileHandle,
  2791.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock);
  2792.  
  2793.     NTOSAPI
  2794.         NTSTATUS
  2795.         NTAPI
  2796.         NtCancelIoFile(
  2797.             /*IN*/ HANDLE  FileHandle,
  2798.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock);
  2799.  
  2800.     NTOSAPI
  2801.         NTSTATUS
  2802.         NTAPI
  2803.         ZwCancelIoFile(
  2804.             /*IN*/ HANDLE  FileHandle,
  2805.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock);
  2806.  
  2807.     NTOSAPI
  2808.         NTSTATUS
  2809.         NTAPI
  2810.         NtReadFileScatter(
  2811.             /*IN*/ HANDLE  FileHandle,
  2812.             /*IN*/ HANDLE  Event /*OPTIONAL*/,
  2813.             /*IN*/ PIO_APC_ROUTINE  ApcRoutine  /*OPTIONAL*/,
  2814.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  2815.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock,
  2816.             /*IN*/ PFILE_SEGMENT_ELEMENT  Buffer,
  2817.             /*IN*/ ULONG  Length,
  2818.             /*IN*/ PLARGE_INTEGER  ByteOffset  /*OPTIONAL*/,
  2819.             /*IN*/ PULONG  Key  /*OPTIONAL*/);
  2820.  
  2821.     NTOSAPI
  2822.         NTSTATUS
  2823.         NTAPI
  2824.         ZwReadFileScatter(
  2825.             /*IN*/ HANDLE  FileHandle,
  2826.             /*IN*/ HANDLE  Event /*OPTIONAL*/,
  2827.             /*IN*/ PIO_APC_ROUTINE  ApcRoutine  /*OPTIONAL*/,
  2828.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  2829.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock,
  2830.             /*IN*/ PFILE_SEGMENT_ELEMENT  Buffer,
  2831.             /*IN*/ ULONG  Length,
  2832.             /*IN*/ PLARGE_INTEGER  ByteOffset  /*OPTIONAL*/,
  2833.             /*IN*/ PULONG  Key  /*OPTIONAL*/);
  2834.  
  2835.     NTOSAPI
  2836.         NTSTATUS
  2837.         NTAPI
  2838.         NtWriteFileGather(
  2839.             /*IN*/ HANDLE  FileHandle,
  2840.             /*IN*/ HANDLE  Event  /*OPTIONAL*/,
  2841.             /*IN*/ PIO_APC_ROUTINE  ApcRoutine  /*OPTIONAL*/,
  2842.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  2843.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock,
  2844.             /*IN*/ PFILE_SEGMENT_ELEMENT  Buffer,
  2845.             /*IN*/ ULONG  Length,
  2846.             /*IN*/ PLARGE_INTEGER  ByteOffset  /*OPTIONAL*/,
  2847.             /*IN*/ PULONG  Key  /*OPTIONAL*/);
  2848.  
  2849.     NTOSAPI
  2850.         NTSTATUS
  2851.         NTAPI
  2852.         ZwWriteFileGather(
  2853.             /*IN*/ HANDLE  FileHandle,
  2854.             /*IN*/ HANDLE  Event  /*OPTIONAL*/,
  2855.             /*IN*/ PIO_APC_ROUTINE  ApcRoutine  /*OPTIONAL*/,
  2856.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  2857.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock,
  2858.             /*IN*/ PFILE_SEGMENT_ELEMENT  Buffer,
  2859.             /*IN*/ ULONG  Length,
  2860.             /*IN*/ PLARGE_INTEGER  ByteOffset  /*OPTIONAL*/,
  2861.             /*IN*/ PULONG  Key  /*OPTIONAL*/);
  2862.  
  2863.  
  2864.  
  2865.  
  2866.     /* Registry keys */
  2867.  
  2868.     NTOSAPI
  2869.         NTSTATUS
  2870.         NTAPI
  2871.         NtSaveKey(
  2872.             /*IN*/ HANDLE  KeyHandle,
  2873.             /*IN*/ HANDLE  FileHandle);
  2874.  
  2875.     NTOSAPI
  2876.         NTSTATUS
  2877.         NTAPI
  2878.         ZwSaveKey(
  2879.             /*IN*/ HANDLE  KeyHandle,
  2880.             /*IN*/ HANDLE  FileHandle);
  2881.  
  2882.     NTOSAPI
  2883.         NTSTATUS
  2884.         NTAPI
  2885.         NtSaveMergedKeys(
  2886.             /*IN*/ HANDLE  KeyHandle1,
  2887.             /*IN*/ HANDLE  KeyHandle2,
  2888.             /*IN*/ HANDLE  FileHandle);
  2889.  
  2890.     NTOSAPI
  2891.         NTSTATUS
  2892.         NTAPI
  2893.         ZwSaveMergedKeys(
  2894.             /*IN*/ HANDLE  KeyHandle1,
  2895.             /*IN*/ HANDLE  KeyHandle2,
  2896.             /*IN*/ HANDLE  FileHandle);
  2897.  
  2898.     NTOSAPI
  2899.         NTSTATUS
  2900.         NTAPI
  2901.         NtRestoreKey(
  2902.             /*IN*/ HANDLE  KeyHandle,
  2903.             /*IN*/ HANDLE  FileHandle,
  2904.             /*IN*/ ULONG  Flags);
  2905.  
  2906.     NTOSAPI
  2907.         NTSTATUS
  2908.         NTAPI
  2909.         ZwRestoreKey(
  2910.             /*IN*/ HANDLE  KeyHandle,
  2911.             /*IN*/ HANDLE  FileHandle,
  2912.             /*IN*/ ULONG  Flags);
  2913.  
  2914.     NTOSAPI
  2915.         NTSTATUS
  2916.         NTAPI
  2917.         NtLoadKey(
  2918.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2919.             /*IN*/ POBJECT_ATTRIBUTES  FileObjectAttributes);
  2920.  
  2921.     NTOSAPI
  2922.         NTSTATUS
  2923.         NTAPI
  2924.         ZwLoadKey(
  2925.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2926.             /*IN*/ POBJECT_ATTRIBUTES  FileObjectAttributes);
  2927.  
  2928.     NTOSAPI
  2929.         NTSTATUS
  2930.         NTAPI
  2931.         NtLoadKey2(
  2932.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2933.             /*IN*/ POBJECT_ATTRIBUTES  FileObjectAttributes,
  2934.             /*IN*/ ULONG  Flags);
  2935.  
  2936.     NTOSAPI
  2937.         NTSTATUS
  2938.         NTAPI
  2939.         ZwLoadKey2(
  2940.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2941.             /*IN*/ POBJECT_ATTRIBUTES  FileObjectAttributes,
  2942.             /*IN*/ ULONG  Flags);
  2943.  
  2944.     NTOSAPI
  2945.         NTSTATUS
  2946.         NTAPI
  2947.         NtUnloadKey(
  2948.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes);
  2949.  
  2950.     NTOSAPI
  2951.         NTSTATUS
  2952.         NTAPI
  2953.         ZwUnloadKey(
  2954.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes);
  2955.  
  2956.     NTOSAPI
  2957.         NTSTATUS
  2958.         NTAPI
  2959.         NtQueryOpenSubKeys(
  2960.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2961.             /*OUT*/ PULONG  NumberOfKeys);
  2962.  
  2963.     NTOSAPI
  2964.         NTSTATUS
  2965.         NTAPI
  2966.         ZwQueryOpenSubKeys(
  2967.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2968.             /*OUT*/ PULONG  NumberOfKeys);
  2969.  
  2970.     NTOSAPI
  2971.         NTSTATUS
  2972.         NTAPI
  2973.         NtReplaceKey(
  2974.             /*IN*/ POBJECT_ATTRIBUTES  NewFileObjectAttributes,
  2975.             /*IN*/ HANDLE  KeyHandle,
  2976.             /*IN*/ POBJECT_ATTRIBUTES  OldFileObjectAttributes);
  2977.  
  2978.     NTOSAPI
  2979.         NTSTATUS
  2980.         NTAPI
  2981.         ZwReplaceKey(
  2982.             /*IN*/ POBJECT_ATTRIBUTES  NewFileObjectAttributes,
  2983.             /*IN*/ HANDLE  KeyHandle,
  2984.             /*IN*/ POBJECT_ATTRIBUTES  OldFileObjectAttributes);
  2985.  
  2986.     NTOSAPI
  2987.         NTSTATUS
  2988.         NTAPI
  2989.         NtSetInformationKey(
  2990.             /*IN*/ HANDLE  KeyHandle,
  2991.             /*IN*/ KEY_SET_INFORMATION_CLASS  KeyInformationClass,
  2992.             /*IN*/ PVOID  KeyInformation,
  2993.             /*IN*/ ULONG  KeyInformationLength);
  2994.     /*
  2995.     NTOSAPI
  2996.         NTSTATUS
  2997.         NTAPI
  2998.         ZwSetInformationKey(
  2999.             HANDLE  KeyHandle,
  3000.             KEY_SET_INFORMATION_CLASS  KeyInformationClass,
  3001.             PVOID  KeyInformation,
  3002.             ULONG  KeyInformationLength);
  3003.     */
  3004.     typedef struct _KEY_LAST_WRITE_TIME_INFORMATION {
  3005.         LARGE_INTEGER LastWriteTime;
  3006.     } KEY_LAST_WRITE_TIME_INFORMATION, *PKEY_LAST_WRITE_TIME_INFORMATION;
  3007.  
  3008.     NTOSAPI
  3009.         NTSTATUS
  3010.         NTAPI
  3011.         NtNotifyChangeKey(
  3012.             /*IN*/ HANDLE  KeyHandle,
  3013.             /*IN*/ HANDLE  EventHandle  /*OPTIONAL*/,
  3014.             /*IN*/ PIO_APC_ROUTINE  ApcRoutine  /*OPTIONAL*/,
  3015.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  3016.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock,
  3017.             /*IN*/ ULONG  NotifyFilter,
  3018.             /*IN*/ BOOLEAN  WatchSubtree,
  3019.             /*IN*/ PVOID  Buffer,
  3020.             /*IN*/ ULONG  BufferLength,
  3021.             /*IN*/ BOOLEAN  Asynchronous);
  3022.  
  3023.     NTOSAPI
  3024.         NTSTATUS
  3025.         NTAPI
  3026.         ZwNotifyChangeKey(
  3027.             /*IN*/ HANDLE  KeyHandle,
  3028.             /*IN*/ HANDLE  EventHandle  /*OPTIONAL*/,
  3029.             /*IN*/ PIO_APC_ROUTINE  ApcRoutine  /*OPTIONAL*/,
  3030.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  3031.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock,
  3032.             /*IN*/ ULONG  NotifyFilter,
  3033.             /*IN*/ BOOLEAN  WatchSubtree,
  3034.             /*IN*/ PVOID  Buffer,
  3035.             /*IN*/ ULONG  BufferLength,
  3036.             /*IN*/ BOOLEAN  Asynchronous);
  3037.  
  3038.     /* ZwNotifyChangeMultipleKeys.Flags constants */
  3039. #define REG_MONITOR_SINGLE_KEY            0x00
  3040. #define REG_MONITOR_SECOND_KEY            0x01
  3041.  
  3042.     NTOSAPI
  3043.         NTSTATUS
  3044.         NTAPI
  3045.         NtNotifyChangeMultipleKeys(
  3046.             /*IN*/ HANDLE  KeyHandle,
  3047.             /*IN*/ ULONG  Flags,
  3048.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes,
  3049.             /*IN*/ HANDLE  EventHandle  /*OPTIONAL*/,
  3050.             /*IN*/ PIO_APC_ROUTINE  ApcRoutine  /*OPTIONAL*/,
  3051.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  3052.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock,
  3053.             /*IN*/ ULONG  NotifyFilter,
  3054.             /*IN*/ BOOLEAN  WatchSubtree,
  3055.             /*IN*/ PVOID  Buffer,
  3056.             /*IN*/ ULONG  BufferLength,
  3057.             /*IN*/ BOOLEAN  Asynchronous);
  3058.  
  3059.     NTOSAPI
  3060.         NTSTATUS
  3061.         NTAPI
  3062.         ZwNotifyChangeMultipleKeys(
  3063.             /*IN*/ HANDLE  KeyHandle,
  3064.             /*IN*/ ULONG  Flags,
  3065.             /*IN*/ POBJECT_ATTRIBUTES  KeyObjectAttributes,
  3066.             /*IN*/ HANDLE  EventHandle  /*OPTIONAL*/,
  3067.             /*IN*/ PIO_APC_ROUTINE  ApcRoutine  /*OPTIONAL*/,
  3068.             /*IN*/ PVOID  ApcContext  /*OPTIONAL*/,
  3069.             /*OUT*/ PIO_STATUS_BLOCK  IoStatusBlock,
  3070.             /*IN*/ ULONG  NotifyFilter,
  3071.             /*IN*/ BOOLEAN  WatchSubtree,
  3072.             /*IN*/ PVOID  Buffer,
  3073.             /*IN*/ ULONG  BufferLength,
  3074.             /*IN*/ BOOLEAN  Asynchronous);
  3075.  
  3076.     NTOSAPI
  3077.         NTSTATUS
  3078.         NTAPI
  3079.         NtQueryMultipleValueKey(
  3080.             /*IN*/ HANDLE  KeyHandle,
  3081.             /*IN OUT*/  PKEY_VALUE_ENTRY  ValueList,
  3082.             /*IN*/ ULONG  NumberOfValues,
  3083.             /*OUT*/ PVOID  Buffer,
  3084.             /*IN OUT*/ PULONG  Length,
  3085.             /*OUT*/ PULONG  ReturnLength);
  3086.  
  3087.     NTOSAPI
  3088.         NTSTATUS
  3089.         NTAPI
  3090.         ZwQueryMultipleValueKey(
  3091.             /*IN*/ HANDLE  KeyHandle,
  3092.             /*IN OUT*/  PKEY_VALUE_ENTRY  ValueList,
  3093.             /*IN*/ ULONG  NumberOfValues,
  3094.             /*OUT*/ PVOID  Buffer,
  3095.             /*IN OUT*/ PULONG  Length,
  3096.             /*OUT*/ PULONG  ReturnLength);
  3097.  
  3098.     NTOSAPI
  3099.         NTSTATUS
  3100.         NTAPI
  3101.         NtInitializeRegistry(
  3102.             /*IN*/ BOOLEAN  Setup);
  3103.  
  3104.     NTOSAPI
  3105.         NTSTATUS
  3106.         NTAPI
  3107.         ZwInitializeRegistry(
  3108.             /*IN*/ BOOLEAN  Setup);
  3109.  
  3110.  
  3111.  
  3112.  
  3113.     /* Security and auditing */
  3114.  
  3115.     NTOSAPI
  3116.         NTSTATUS
  3117.         NTAPI
  3118.         NtPrivilegeCheck(
  3119.             /*IN*/ HANDLE  TokenHandle,
  3120.             /*IN*/ PPRIVILEGE_SET  RequiredPrivileges,
  3121.             /*OUT*/ PBOOLEAN  Result);
  3122.  
  3123.     NTOSAPI
  3124.         NTSTATUS
  3125.         NTAPI
  3126.         ZwPrivilegeCheck(
  3127.             /*IN*/ HANDLE  TokenHandle,
  3128.             /*IN*/ PPRIVILEGE_SET  RequiredPrivileges,
  3129.             /*OUT*/ PBOOLEAN  Result);
  3130.  
  3131.     NTOSAPI
  3132.         NTSTATUS
  3133.         NTAPI
  3134.         NtPrivilegeObjectAuditAlarm(
  3135.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3136.             /*IN*/ PVOID  HandleId,
  3137.             /*IN*/ HANDLE  TokenHandle,
  3138.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3139.             /*IN*/ PPRIVILEGE_SET  Privileges,
  3140.             /*IN*/ BOOLEAN  AccessGranted);
  3141.  
  3142.     NTOSAPI
  3143.         NTSTATUS
  3144.         NTAPI
  3145.         ZwPrivilegeObjectAuditAlarm(
  3146.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3147.             /*IN*/ PVOID  HandleId,
  3148.             /*IN*/ HANDLE  TokenHandle,
  3149.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3150.             /*IN*/ PPRIVILEGE_SET  Privileges,
  3151.             /*IN*/ BOOLEAN  AccessGranted);
  3152.  
  3153.     NTOSAPI
  3154.         NTSTATUS
  3155.         NTAPI
  3156.         NtAccessCheck(
  3157.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3158.             /*IN*/ HANDLE  TokenHandle,
  3159.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3160.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3161.             /*IN*/ PPRIVILEGE_SET  PrivilegeSet,
  3162.             /*IN*/ PULONG  PrivilegeSetLength,
  3163.             /*OUT*/ PACCESS_MASK  GrantedAccess,
  3164.             /*OUT*/ PBOOLEAN  AccessStatus);
  3165.  
  3166.     NTOSAPI
  3167.         NTSTATUS
  3168.         NTAPI
  3169.         ZwAccessCheck(
  3170.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3171.             /*IN*/ HANDLE  TokenHandle,
  3172.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3173.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3174.             /*IN*/ PPRIVILEGE_SET  PrivilegeSet,
  3175.             /*IN*/ PULONG  PrivilegeSetLength,
  3176.             /*OUT*/ PACCESS_MASK  GrantedAccess,
  3177.             /*OUT*/ PBOOLEAN  AccessStatus);
  3178.  
  3179.     NTOSAPI
  3180.         NTSTATUS
  3181.         NTAPI
  3182.         NtAccessCheckAndAuditAlarm(
  3183.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3184.             /*IN*/ PVOID  HandleId,
  3185.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3186.             /*IN*/ PUNICODE_STRING  ObjectName,
  3187.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3188.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3189.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3190.             /*IN*/ BOOLEAN  ObjectCreation,
  3191.             /*OUT*/ PACCESS_MASK  GrantedAccess,
  3192.             /*OUT*/ PBOOLEAN  AccessStatus,
  3193.             /*OUT*/ PBOOLEAN  GenerateOnClose);
  3194.  
  3195.     NTOSAPI
  3196.         NTSTATUS
  3197.         NTAPI
  3198.         ZwAccessCheckAndAuditAlarm(
  3199.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3200.             /*IN*/ PVOID  HandleId,
  3201.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3202.             /*IN*/ PUNICODE_STRING  ObjectName,
  3203.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3204.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3205.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3206.             /*IN*/ BOOLEAN  ObjectCreation,
  3207.             /*OUT*/ PACCESS_MASK  GrantedAccess,
  3208.             /*OUT*/ PBOOLEAN  AccessStatus,
  3209.             /*OUT*/ PBOOLEAN  GenerateOnClose);
  3210.  
  3211.     NTOSAPI
  3212.         NTSTATUS
  3213.         NTAPI
  3214.         NtAccessCheckByType(
  3215.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3216.             /*IN*/ PSID  PrincipalSelfSid,
  3217.             /*IN*/ HANDLE  TokenHandle,
  3218.             /*IN*/ ULONG  DesiredAccess,
  3219.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3220.             /*IN*/ ULONG  ObjectTypeListLength,
  3221.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3222.             /*IN*/ PPRIVILEGE_SET  PrivilegeSet,
  3223.             /*IN*/ PULONG  PrivilegeSetLength,
  3224.             /*OUT*/ PACCESS_MASK  GrantedAccess,
  3225.             /*OUT*/ PULONG  AccessStatus);
  3226.  
  3227.     NTOSAPI
  3228.         NTSTATUS
  3229.         NTAPI
  3230.         ZwAccessCheckByType(
  3231.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3232.             /*IN*/ PSID  PrincipalSelfSid,
  3233.             /*IN*/ HANDLE  TokenHandle,
  3234.             /*IN*/ ULONG  DesiredAccess,
  3235.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3236.             /*IN*/ ULONG  ObjectTypeListLength,
  3237.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3238.             /*IN*/ PPRIVILEGE_SET  PrivilegeSet,
  3239.             /*IN*/ PULONG  PrivilegeSetLength,
  3240.             /*OUT*/ PACCESS_MASK  GrantedAccess,
  3241.             /*OUT*/ PULONG  AccessStatus);
  3242.  
  3243.     typedef enum _AUDIT_EVENT_TYPE {
  3244.         AuditEventObjectAccess,
  3245.         AuditEventDirectoryServiceAccess
  3246.     } AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
  3247.  
  3248.     NTOSAPI
  3249.         NTSTATUS
  3250.         NTAPI
  3251.         NtAccessCheckByTypeAndAuditAlarm(
  3252.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3253.             /*IN*/ PVOID  HandleId,
  3254.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3255.             /*IN*/ PUNICODE_STRING  ObjectName,
  3256.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3257.             /*IN*/ PSID  PrincipalSelfSid,
  3258.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3259.             /*IN*/ AUDIT_EVENT_TYPE  AuditType,
  3260.             /*IN*/ ULONG  Flags,
  3261.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3262.             /*IN*/ ULONG  ObjectTypeListLength,
  3263.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3264.             /*IN*/ BOOLEAN  ObjectCreation,
  3265.             /*OUT*/ PACCESS_MASK  GrantedAccess,
  3266.             /*OUT*/ PULONG  AccessStatus,
  3267.             /*OUT*/ PBOOLEAN  GenerateOnClose);
  3268.  
  3269.     NTOSAPI
  3270.         NTSTATUS
  3271.         NTAPI
  3272.         ZwAccessCheckByTypeAndAuditAlarm(
  3273.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3274.             /*IN*/ PVOID  HandleId,
  3275.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3276.             /*IN*/ PUNICODE_STRING  ObjectName,
  3277.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3278.             /*IN*/ PSID  PrincipalSelfSid,
  3279.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3280.             /*IN*/ AUDIT_EVENT_TYPE  AuditType,
  3281.             /*IN*/ ULONG  Flags,
  3282.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3283.             /*IN*/ ULONG  ObjectTypeListLength,
  3284.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3285.             /*IN*/ BOOLEAN  ObjectCreation,
  3286.             /*OUT*/ PACCESS_MASK  GrantedAccess,
  3287.             /*OUT*/ PULONG  AccessStatus,
  3288.             /*OUT*/ PBOOLEAN  GenerateOnClose);
  3289.  
  3290.     NTOSAPI
  3291.         NTSTATUS
  3292.         NTAPI
  3293.         NtAccessCheckByTypeResultList(
  3294.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3295.             /*IN*/ PSID  PrincipalSelfSid,
  3296.             /*IN*/ HANDLE  TokenHandle,
  3297.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3298.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3299.             /*IN*/ ULONG  ObjectTypeListLength,
  3300.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3301.             /*IN*/ PPRIVILEGE_SET  PrivilegeSet,
  3302.             /*IN*/ PULONG  PrivilegeSetLength,
  3303.             /*OUT*/ PACCESS_MASK  GrantedAccessList,
  3304.             /*OUT*/ PULONG  AccessStatusList);
  3305.  
  3306.     NTOSAPI
  3307.         NTSTATUS
  3308.         NTAPI
  3309.         ZwAccessCheckByTypeResultList(
  3310.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3311.             /*IN*/ PSID  PrincipalSelfSid,
  3312.             /*IN*/ HANDLE  TokenHandle,
  3313.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3314.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3315.             /*IN*/ ULONG  ObjectTypeListLength,
  3316.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3317.             /*IN*/ PPRIVILEGE_SET  PrivilegeSet,
  3318.             /*IN*/ PULONG  PrivilegeSetLength,
  3319.             /*OUT*/ PACCESS_MASK  GrantedAccessList,
  3320.             /*OUT*/ PULONG  AccessStatusList);
  3321.  
  3322.     NTOSAPI
  3323.         NTSTATUS
  3324.         NTAPI
  3325.         NtAccessCheckByTypeResultListAndAuditAlarm(
  3326.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3327.             /*IN*/ PVOID  HandleId,
  3328.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3329.             /*IN*/ PUNICODE_STRING  ObjectName,
  3330.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3331.             /*IN*/ PSID  PrincipalSelfSid,
  3332.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3333.             /*IN*/ AUDIT_EVENT_TYPE  AuditType,
  3334.             /*IN*/ ULONG  Flags,
  3335.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3336.             /*IN*/ ULONG  ObjectTypeListLength,
  3337.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3338.             /*IN*/ BOOLEAN  ObjectCreation,
  3339.             /*OUT*/ PACCESS_MASK  GrantedAccessList,
  3340.             /*OUT*/ PULONG  AccessStatusList,
  3341.             /*OUT*/ PULONG  GenerateOnClose);
  3342.  
  3343.     NTOSAPI
  3344.         NTSTATUS
  3345.         NTAPI
  3346.         ZwAccessCheckByTypeResultListAndAuditAlarm(
  3347.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3348.             /*IN*/ PVOID  HandleId,
  3349.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3350.             /*IN*/ PUNICODE_STRING  ObjectName,
  3351.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3352.             /*IN*/ PSID  PrincipalSelfSid,
  3353.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3354.             /*IN*/ AUDIT_EVENT_TYPE  AuditType,
  3355.             /*IN*/ ULONG  Flags,
  3356.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3357.             /*IN*/ ULONG  ObjectTypeListLength,
  3358.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3359.             /*IN*/ BOOLEAN  ObjectCreation,
  3360.             /*OUT*/ PACCESS_MASK  GrantedAccessList,
  3361.             /*OUT*/ PULONG  AccessStatusList,
  3362.             /*OUT*/ PULONG  GenerateOnClose);
  3363.  
  3364.     NTOSAPI
  3365.         NTSTATUS
  3366.         NTAPI
  3367.         NtAccessCheckByTypeResultListAndAuditAlarmByHandle(
  3368.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3369.             /*IN*/ PVOID  HandleId,
  3370.             /*IN*/ HANDLE  TokenHandle,
  3371.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3372.             /*IN*/ PUNICODE_STRING  ObjectName,
  3373.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3374.             /*IN*/ PSID  PrincipalSelfSid,
  3375.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3376.             /*IN*/ AUDIT_EVENT_TYPE  AuditType,
  3377.             /*IN*/ ULONG  Flags,
  3378.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3379.             /*IN*/ ULONG  ObjectTypeListLength,
  3380.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3381.             /*IN*/ BOOLEAN  ObjectCreation,
  3382.             /*OUT*/ PACCESS_MASK  GrantedAccessList,
  3383.             /*OUT*/ PULONG  AccessStatusList,
  3384.             /*OUT*/ PULONG  GenerateOnClose);
  3385.  
  3386.     NTOSAPI
  3387.         NTSTATUS
  3388.         NTAPI
  3389.         ZwAccessCheckByTypeResultListAndAuditAlarmByHandle(
  3390.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3391.             /*IN*/ PVOID  HandleId,
  3392.             /*IN*/ HANDLE  TokenHandle,
  3393.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3394.             /*IN*/ PUNICODE_STRING  ObjectName,
  3395.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3396.             /*IN*/ PSID  PrincipalSelfSid,
  3397.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3398.             /*IN*/ AUDIT_EVENT_TYPE  AuditType,
  3399.             /*IN*/ ULONG  Flags,
  3400.             /*IN*/ POBJECT_TYPE_LIST  ObjectTypeList,
  3401.             /*IN*/ ULONG  ObjectTypeListLength,
  3402.             /*IN*/ PGENERIC_MAPPING  GenericMapping,
  3403.             /*IN*/ BOOLEAN  ObjectCreation,
  3404.             /*OUT*/ PACCESS_MASK  GrantedAccessList,
  3405.             /*OUT*/ PULONG  AccessStatusList,
  3406.             /*OUT*/ PULONG  GenerateOnClose);
  3407.  
  3408.     NTOSAPI
  3409.         NTSTATUS
  3410.         NTAPI
  3411.         NtOpenObjectAuditAlarm(
  3412.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3413.             /*IN*/ PVOID  *HandleId,
  3414.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3415.             /*IN*/ PUNICODE_STRING  ObjectName,
  3416.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3417.             /*IN*/ HANDLE  TokenHandle,
  3418.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3419.             /*IN*/ ACCESS_MASK  GrantedAccess,
  3420.             /*IN*/ PPRIVILEGE_SET  Privileges  /*OPTIONAL*/,
  3421.             /*IN*/ BOOLEAN  ObjectCreation,
  3422.             /*IN*/ BOOLEAN  AccessGranted,
  3423.             /*OUT*/ PBOOLEAN  GenerateOnClose);
  3424.  
  3425.     NTOSAPI
  3426.         NTSTATUS
  3427.         NTAPI
  3428.         ZwOpenObjectAuditAlarm(
  3429.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3430.             /*IN*/ PVOID  *HandleId,
  3431.             /*IN*/ PUNICODE_STRING  ObjectTypeName,
  3432.             /*IN*/ PUNICODE_STRING  ObjectName,
  3433.             /*IN*/ PSECURITY_DESCRIPTOR  SecurityDescriptor,
  3434.             /*IN*/ HANDLE  TokenHandle,
  3435.             /*IN*/ ACCESS_MASK  DesiredAccess,
  3436.             /*IN*/ ACCESS_MASK  GrantedAccess,
  3437.             /*IN*/ PPRIVILEGE_SET  Privileges  /*OPTIONAL*/,
  3438.             /*IN*/ BOOLEAN  ObjectCreation,
  3439.             /*IN*/ BOOLEAN  AccessGranted,
  3440.             /*OUT*/ PBOOLEAN  GenerateOnClose);
  3441.  
  3442.     NTOSAPI
  3443.         NTSTATUS
  3444.         NTAPI
  3445.         NtCloseObjectAuditAlarm(
  3446.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3447.             /*IN*/ PVOID  HandleId,
  3448.             /*IN*/ BOOLEAN  GenerateOnClose);
  3449.  
  3450.     NTOSAPI
  3451.         NTSTATUS
  3452.         NTAPI
  3453.         ZwCloseObjectAuditAlarm(
  3454.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3455.             /*IN*/ PVOID  HandleId,
  3456.             /*IN*/ BOOLEAN  GenerateOnClose);
  3457.  
  3458.     NTOSAPI
  3459.         NTSTATUS
  3460.         NTAPI
  3461.         NtDeleteObjectAuditAlarm(
  3462.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3463.             /*IN*/ PVOID  HandleId,
  3464.             /*IN*/ BOOLEAN  GenerateOnClose);
  3465.  
  3466.     NTOSAPI
  3467.         NTSTATUS
  3468.         NTAPI
  3469.         ZwDeleteObjectAuditAlarm(
  3470.             /*IN*/ PUNICODE_STRING  SubsystemName,
  3471.             /*IN*/ PVOID  HandleId,
  3472.             /*IN*/ BOOLEAN  GenerateOnClose);
  3473.  
  3474.  
  3475.  
  3476.  
  3477.     /* Plug and play and power management */
  3478.  
  3479.     NTOSAPI
  3480.         NTSTATUS
  3481.         NTAPI
  3482.         ZwRequestWakeupLatency(
  3483.             /*IN*/ LATENCY_TIME  Latency);
  3484.  
  3485.     NTOSAPI
  3486.         NTSTATUS
  3487.         NTAPI
  3488.         ZwRequestDeviceWakeup(
  3489.             /*IN*/ HANDLE  DeviceHandle);
  3490.  
  3491.     NTOSAPI
  3492.         NTSTATUS
  3493.         NTAPI
  3494.         ZwCancelDeviceWakeupRequest(
  3495.             /*IN*/ HANDLE  DeviceHandle);
  3496.  
  3497.     NTOSAPI
  3498.         BOOLEAN
  3499.         NTAPI
  3500.         ZwIsSystemResumeAutomatic(
  3501.             VOID);
  3502.  
  3503.     NTOSAPI
  3504.         NTSTATUS
  3505.         NTAPI
  3506.         ZwSetThreadExecutionState(
  3507.             /*IN*/ EXECUTION_STATE  ExecutionState,
  3508.             /*OUT*/ PEXECUTION_STATE  PreviousExecutionState);
  3509.  
  3510.     NTOSAPI
  3511.         NTSTATUS
  3512.         NTAPI
  3513.         ZwGetDevicePowerState(
  3514.             /*IN*/ HANDLE  DeviceHandle,
  3515.             /*OUT*/ PDEVICE_POWER_STATE  DevicePowerState);
  3516.  
  3517.     NTOSAPI
  3518.         NTSTATUS
  3519.         NTAPI
  3520.         ZwSetSystemPowerState(
  3521.             /*IN*/ POWER_ACTION  SystemAction,
  3522.             /*IN*/ SYSTEM_POWER_STATE  MinSystemState,
  3523.             /*IN*/ ULONG  Flags);
  3524.  
  3525.     NTOSAPI
  3526.         NTSTATUS
  3527.         NTAPI
  3528.         ZwInitiatePowerAction(
  3529.             /*IN*/ POWER_ACTION  SystemAction,
  3530.             /*IN*/ SYSTEM_POWER_STATE  MinSystemState,
  3531.             /*IN*/ ULONG  Flags,
  3532.             /*IN*/ BOOLEAN  Asynchronous);
  3533.  
  3534.     NTOSAPI
  3535.         NTSTATUS
  3536.         NTAPI
  3537.         ZwPowerInformation(
  3538.             /*IN*/ POWER_INFORMATION_LEVEL  PowerInformationLevel,
  3539.             /*IN*/ PVOID  InputBuffer  /*OPTIONAL*/,
  3540.             /*IN*/ ULONG  InputBufferLength,
  3541.             /*OUT*/ PVOID  OutputBuffer  /*OPTIONAL*/,
  3542.             /*IN*/ ULONG  OutputBufferLength);
  3543.  
  3544.     NTOSAPI
  3545.         NTSTATUS
  3546.         NTAPI
  3547.         NtPlugPlayControl(
  3548.             /*IN*/ ULONG  ControlCode,
  3549.             /*IN OUT*/ PVOID  Buffer,
  3550.             /*IN*/ ULONG  BufferLength);
  3551.  
  3552.     NTOSAPI
  3553.         NTSTATUS
  3554.         NTAPI
  3555.         ZwPlugPlayControl(
  3556.             /*IN*/ ULONG  ControlCode,
  3557.             /*IN OUT*/ PVOID  Buffer,
  3558.             /*IN*/ ULONG  BufferLength);
  3559.  
  3560.     NTOSAPI
  3561.         NTSTATUS
  3562.         NTAPI
  3563.         NtGetPlugPlayEvent(
  3564.             /*IN*/ ULONG  Reserved1,
  3565.             /*IN*/ ULONG  Reserved2,
  3566.             /*OUT*/ PVOID  Buffer,
  3567.             /*IN*/ ULONG  BufferLength);
  3568.  
  3569.     NTOSAPI
  3570.         NTSTATUS
  3571.         NTAPI
  3572.         ZwGetPlugPlayEvent(
  3573.             /*IN*/ ULONG  Reserved1,
  3574.             /*IN*/ ULONG  Reserved2,
  3575.             /*OUT*/ PVOID  Buffer,
  3576.             /*IN*/ ULONG  BufferLength);
  3577.  
  3578.  
  3579.  
  3580.  
  3581.     /* Miscellany */
  3582.  
  3583.     NTOSAPI
  3584.         NTSTATUS
  3585.         NTAPI
  3586.         NtRaiseException(
  3587.             /*IN*/ PEXCEPTION_RECORD  ExceptionRecord,
  3588.             /*IN*/ PCONTEXT  Context,
  3589.             /*IN*/ BOOLEAN  SearchFrames);
  3590.  
  3591.     NTOSAPI
  3592.         NTSTATUS
  3593.         NTAPI
  3594.         ZwRaiseException(
  3595.             /*IN*/ PEXCEPTION_RECORD  ExceptionRecord,
  3596.             /*IN*/ PCONTEXT  Context,
  3597.             /*IN*/ BOOLEAN  SearchFrames);
  3598.  
  3599.     NTOSAPI
  3600.         NTSTATUS
  3601.         NTAPI
  3602.         NtContinue(
  3603.             /*IN*/ PCONTEXT  Context,
  3604.             /*IN*/ BOOLEAN  TestAlert);
  3605.  
  3606.     NTOSAPI
  3607.         NTSTATUS
  3608.         NTAPI
  3609.         ZwContinue(
  3610.             /*IN*/ PCONTEXT  Context,
  3611.             /*IN*/ BOOLEAN  TestAlert);
  3612.  
  3613.     NTOSAPI
  3614.         NTSTATUS
  3615.         NTAPI
  3616.         ZwW32Call(
  3617.             /*IN*/ ULONG  RoutineIndex,
  3618.             /*IN*/ PVOID  Argument,
  3619.             /*IN*/ ULONG  ArgumentLength,
  3620.             /*OUT*/ PVOID  *Result  /*OPTIONAL*/,
  3621.             /*OUT*/ PULONG  ResultLength  /*OPTIONAL*/);
  3622.  
  3623.     NTOSAPI
  3624.         NTSTATUS
  3625.         NTAPI
  3626.         NtSetLowWaitHighThread(
  3627.             VOID);
  3628.  
  3629.     NTOSAPI
  3630.         NTSTATUS
  3631.         NTAPI
  3632.         ZwSetLowWaitHighThread(
  3633.             VOID);
  3634.  
  3635.     NTOSAPI
  3636.         NTSTATUS
  3637.         NTAPI
  3638.         NtSetHighWaitLowThread(
  3639.             VOID);
  3640.  
  3641.     NTOSAPI
  3642.         NTSTATUS
  3643.         NTAPI
  3644.         ZwSetHighWaitLowThread(
  3645.             VOID);
  3646.  
  3647.     NTOSAPI
  3648.         NTSTATUS
  3649.         NTAPI
  3650.         NtLoadDriver(
  3651.             /*IN*/ PUNICODE_STRING  DriverServiceName);
  3652.  
  3653.     NTOSAPI
  3654.         NTSTATUS
  3655.         NTAPI
  3656.         ZwLoadDriver(
  3657.             /*IN*/ PUNICODE_STRING  DriverServiceName);
  3658.  
  3659.     NTOSAPI
  3660.         NTSTATUS
  3661.         NTAPI
  3662.         NtUnloadDriver(
  3663.             /*IN*/ PUNICODE_STRING  DriverServiceName);
  3664.  
  3665.     NTOSAPI
  3666.         NTSTATUS
  3667.         NTAPI
  3668.         ZwUnloadDriver(
  3669.             /*IN*/ PUNICODE_STRING  DriverServiceName);
  3670.  
  3671.     NTOSAPI
  3672.         NTSTATUS
  3673.         NTAPI
  3674.         NtFlushInstructionCache(
  3675.             /*IN*/ HANDLE  ProcessHandle,
  3676.             /*IN*/ PVOID  BaseAddress  /*OPTIONAL*/,
  3677.             /*IN*/ ULONG  FlushSize);
  3678.  
  3679.     NTOSAPI
  3680.         NTSTATUS
  3681.         NTAPI
  3682.         ZwFlushInstructionCache(
  3683.             /*IN*/ HANDLE  ProcessHandle,
  3684.             /*IN*/ PVOID  BaseAddress  /*OPTIONAL*/,
  3685.             /*IN*/ ULONG  FlushSize);
  3686.  
  3687.     NTOSAPI
  3688.         NTSTATUS
  3689.         NTAPI
  3690.         NtFlushWriteBuffer(
  3691.             VOID);
  3692.  
  3693.     NTOSAPI
  3694.         NTSTATUS
  3695.         NTAPI
  3696.         ZwFlushWriteBuffer(
  3697.             VOID);
  3698.  
  3699.     NTOSAPI
  3700.         NTSTATUS
  3701.         NTAPI
  3702.         NtQueryDefaultLocale(
  3703.             /*IN*/ BOOLEAN  ThreadOrSystem,
  3704.             /*OUT*/ PLCID  Locale);
  3705.  
  3706.     NTOSAPI
  3707.         NTSTATUS
  3708.         NTAPI
  3709.         ZwQueryDefaultLocale(
  3710.             /*IN*/ BOOLEAN  ThreadOrSystem,
  3711.             /*OUT*/ PLCID  Locale);
  3712.  
  3713.     NTOSAPI
  3714.         NTSTATUS
  3715.         NTAPI
  3716.         NtSetDefaultLocale(
  3717.             /*IN*/ BOOLEAN  ThreadOrSystem,
  3718.             /*IN*/ LCID  Locale);
  3719.  
  3720.     NTOSAPI
  3721.         NTSTATUS
  3722.         NTAPI
  3723.         ZwSetDefaultLocale(
  3724.             /*IN*/ BOOLEAN  ThreadOrSystem,
  3725.             /*IN*/ LCID  Locale);
  3726.  
  3727.     NTOSAPI
  3728.         NTSTATUS
  3729.         NTAPI
  3730.         NtQueryDefaultUILanguage(
  3731.             /*OUT*/ PLANGID  LanguageId);
  3732.  
  3733.     NTOSAPI
  3734.         NTSTATUS
  3735.         NTAPI
  3736.         ZwQueryDefaultUILanguage(
  3737.             /*OUT*/ PLANGID  LanguageId);
  3738.  
  3739.     NTOSAPI
  3740.         NTSTATUS
  3741.         NTAPI
  3742.         NtSetDefaultUILanguage(
  3743.             /*IN*/ LANGID  LanguageId);
  3744.  
  3745.     NTOSAPI
  3746.         NTSTATUS
  3747.         NTAPI
  3748.         ZwSetDefaultUILanguage(
  3749.             /*IN*/ LANGID  LanguageId);
  3750.  
  3751.     NTOSAPI
  3752.         NTSTATUS
  3753.         NTAPI
  3754.         NtQueryInstallUILanguage(
  3755.             /*OUT*/ PLANGID  LanguageId);
  3756.  
  3757.     NTOSAPI
  3758.         NTSTATUS
  3759.         NTAPI
  3760.         ZwQueryInstallUILanguage(
  3761.             /*OUT*/ PLANGID  LanguageId);
  3762.  
  3763.     NTOSAPI
  3764.         NTSTATUS
  3765.         NTAPI
  3766.         NtAllocateLocallyUniqueId(
  3767.             /*OUT*/ PLUID  Luid);
  3768.  
  3769.     NTOSAPI
  3770.         NTSTATUS
  3771.         NTAPI
  3772.         NtAllocateUuids(
  3773.             /*OUT*/ PLARGE_INTEGER  UuidLastTimeAllocated,
  3774.             /*OUT*/ PULONG  UuidDeltaTime,
  3775.             /*OUT*/ PULONG  UuidSequenceNumber,
  3776.             /*OUT*/ PUCHAR  UuidSeed);
  3777.  
  3778.     NTOSAPI
  3779.         NTSTATUS
  3780.         NTAPI
  3781.         ZwAllocateUuids(
  3782.             /*OUT*/ PLARGE_INTEGER  UuidLastTimeAllocated,
  3783.             /*OUT*/ PULONG  UuidDeltaTime,
  3784.             /*OUT*/ PULONG  UuidSequenceNumber,
  3785.             /*OUT*/ PUCHAR  UuidSeed);
  3786.  
  3787.     NTOSAPI
  3788.         NTSTATUS
  3789.         NTAPI
  3790.         NtSetUuidSeed(
  3791.             /*IN*/ PUCHAR  UuidSeed);
  3792.  
  3793.     NTOSAPI
  3794.         NTSTATUS
  3795.         NTAPI
  3796.         ZwSetUuidSeed(
  3797.             /*IN*/ PUCHAR  UuidSeed);
  3798.  
  3799.     typedef enum _HARDERROR_RESPONSE_OPTION {
  3800.         OptionAbortRetryIgnore,
  3801.         OptionOk,
  3802.         OptionOkCancel,
  3803.         OptionRetryCancel,
  3804.         OptionYesNo,
  3805.         OptionYesNoCancel,
  3806.         OptionShutdownSystem
  3807.     } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
  3808.  
  3809.     typedef enum _HARDERROR_RESPONSE {
  3810.         ResponseReturnToCaller,
  3811.         ResponseNotHandled,
  3812.         ResponseAbort,
  3813.         ResponseCancel,
  3814.         ResponseIgnore,
  3815.         ResponseNo,
  3816.         ResponseOk,
  3817.         ResponseRetry,
  3818.         ResponseYes
  3819.     } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
  3820.  
  3821.     NTOSAPI
  3822.         NTSTATUS
  3823.         NTAPI
  3824.         NtRaiseHardError(
  3825.             /*IN*/ NTSTATUS  Status,
  3826.             /*IN*/ ULONG  NumberOfArguments,
  3827.             /*IN*/ ULONG  StringArgumentsMask,
  3828.             /*IN*/ PULONG  Arguments,
  3829.             /*IN*/ HARDERROR_RESPONSE_OPTION  ResponseOption,
  3830.             /*OUT*/ PHARDERROR_RESPONSE  Response);
  3831.  
  3832.     NTOSAPI
  3833.         NTSTATUS
  3834.         NTAPI
  3835.         ZwRaiseHardError(
  3836.             /*IN*/ NTSTATUS  Status,
  3837.             /*IN*/ ULONG  NumberOfArguments,
  3838.             /*IN*/ ULONG  StringArgumentsMask,
  3839.             /*IN*/ PULONG  Arguments,
  3840.             /*IN*/ HARDERROR_RESPONSE_OPTION  ResponseOption,
  3841.             /*OUT*/ PHARDERROR_RESPONSE  Response);
  3842.  
  3843.     NTOSAPI
  3844.         NTSTATUS
  3845.         NTAPI
  3846.         NtSetDefaultHardErrorPort(
  3847.             /*IN*/ HANDLE  PortHandle);
  3848.  
  3849.     NTOSAPI
  3850.         NTSTATUS
  3851.         NTAPI
  3852.         ZwSetDefaultHardErrorPort(
  3853.             /*IN*/ HANDLE  PortHandle);
  3854.  
  3855.     NTOSAPI
  3856.         NTSTATUS
  3857.         NTAPI
  3858.         NtDisplayString(
  3859.             /*IN*/ PUNICODE_STRING  String);
  3860.  
  3861.     NTOSAPI
  3862.         NTSTATUS
  3863.         NTAPI
  3864.         ZwDisplayString(
  3865.             /*IN*/ PUNICODE_STRING  String);
  3866.  
  3867.     NTOSAPI
  3868.         NTSTATUS
  3869.         NTAPI
  3870.         NtCreatePagingFile(
  3871.             /*IN*/ PUNICODE_STRING  FileName,
  3872.             /*IN*/ PULARGE_INTEGER  InitialSize,
  3873.             /*IN*/ PULARGE_INTEGER  MaximumSize,
  3874.             /*IN*/ ULONG  Reserved);
  3875.  
  3876.     NTOSAPI
  3877.         NTSTATUS
  3878.         NTAPI
  3879.         ZwCreatePagingFile(
  3880.             /*IN*/ PUNICODE_STRING  FileName,
  3881.             /*IN*/ PULARGE_INTEGER  InitialSize,
  3882.             /*IN*/ PULARGE_INTEGER  MaximumSize,
  3883.             /*IN*/ ULONG  Reserved);
  3884.  
  3885.     typedef USHORT RTL_ATOM, *PRTL_ATOM;
  3886.  
  3887.     NTOSAPI
  3888.         NTSTATUS
  3889.         NTAPI
  3890.         NtAddAtom(
  3891.             /*IN*/ PWSTR  AtomName,
  3892.             /*IN*/ ULONG  AtomNameLength,
  3893.             /*OUT*/ PRTL_ATOM  Atom);
  3894.  
  3895.     NTOSAPI
  3896.         NTSTATUS
  3897.         NTAPI
  3898.         ZwAddAtom(
  3899.             /*IN*/ PWSTR  AtomName,
  3900.             /*IN*/ ULONG  AtomNameLength,
  3901.             /*OUT*/ PRTL_ATOM  Atom);
  3902.  
  3903.     NTOSAPI
  3904.         NTSTATUS
  3905.         NTAPI
  3906.         NtFindAtom(
  3907.             /*IN*/ PWSTR  AtomName,
  3908.             /*IN*/ ULONG  AtomNameLength,
  3909.             /*OUT*/ PRTL_ATOM  Atom);
  3910.  
  3911.     NTOSAPI
  3912.         NTSTATUS
  3913.         NTAPI
  3914.         ZwFindAtom(
  3915.             /*IN*/ PWSTR  AtomName,
  3916.             /*IN*/ ULONG  AtomNameLength,
  3917.             /*OUT*/ PRTL_ATOM  Atom);
  3918.  
  3919.     NTOSAPI
  3920.         NTSTATUS
  3921.         NTAPI
  3922.         NtDeleteAtom(
  3923.             /*IN*/ RTL_ATOM  Atom);
  3924.  
  3925.     NTOSAPI
  3926.         NTSTATUS
  3927.         NTAPI
  3928.         ZwDeleteAtom(
  3929.             /*IN*/ RTL_ATOM  Atom);
  3930.  
  3931.     typedef enum _ATOM_INFORMATION_CLASS {
  3932.         AtomBasicInformation,
  3933.         AtomListInformation
  3934.     } ATOM_INFORMATION_CLASS;
  3935.  
  3936.     NTOSAPI
  3937.         NTSTATUS
  3938.         NTAPI
  3939.         NtQueryInformationAtom(
  3940.             /*IN*/ RTL_ATOM  Atom,
  3941.             /*IN*/ ATOM_INFORMATION_CLASS  AtomInformationClass,
  3942.             /*OUT*/ PVOID  AtomInformation,
  3943.             /*IN*/ ULONG  AtomInformationLength,
  3944.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  3945.  
  3946.     NTOSAPI
  3947.         NTSTATUS
  3948.         NTAPI
  3949.         ZwQueryInformationAtom(
  3950.             /*IN*/ RTL_ATOM  Atom,
  3951.             /*IN*/ ATOM_INFORMATION_CLASS  AtomInformationClass,
  3952.             /*OUT*/ PVOID  AtomInformation,
  3953.             /*IN*/ ULONG  AtomInformationLength,
  3954.             /*OUT*/ PULONG  ReturnLength  /*OPTIONAL*/);
  3955.  
  3956.     typedef struct _ATOM_BASIC_INFORMATION {
  3957.         USHORT  ReferenceCount;
  3958.         USHORT  Pinned;
  3959.         USHORT  NameLength;
  3960.         WCHAR  Name[1];
  3961.     } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
  3962.  
  3963.     typedef struct _ATOM_LIST_INFORMATION {
  3964.         ULONG  NumberOfAtoms;
  3965.         int  Atoms[1];
  3966.     } ATOM_LIST_INFORMATION, *PATOM_LIST_INFORMATION;
  3967.  
  3968.     typedef struct _LDT_ENTRY {
  3969.         short  LimitLow;
  3970.         short  BaseLow;
  3971.         union {
  3972.             struct {
  3973.                 char BaseMid;
  3974.                 char Flags1;
  3975.                 char Flags2;
  3976.                 char BaseHi;
  3977.             } Bytes;
  3978.             struct {
  3979.                 int BaseMid : 8;
  3980.                 int Type : 5;
  3981.                 int Dpl : 2;
  3982.                 int Pres : 1;
  3983.                 int LimitHi : 4;
  3984.                 int Sys : 1;
  3985.                 int Reserved_0 : 1;
  3986.                 int Default_Big : 1;
  3987.                 int Granularity : 1;
  3988.                 int BaseHi : 8;
  3989.             } Bits;
  3990.         } HighWord;
  3991.     } LDT_ENTRY, *PLDT_ENTRY;
  3992.  
  3993.     NTOSAPI
  3994.         NTSTATUS
  3995.         NTAPI
  3996.         NtSetLdtEntries(
  3997.             /*IN*/ ULONG  Selector1,
  3998.             /*IN*/ LDT_ENTRY  LdtEntry1,
  3999.             /*IN*/ ULONG  Selector2,
  4000.             /*IN*/ LDT_ENTRY  LdtEntry2);
  4001.  
  4002.     NTOSAPI
  4003.         NTSTATUS
  4004.         NTAPI
  4005.         ZwSetLdtEntries(
  4006.             /*IN*/ ULONG  Selector1,
  4007.             /*IN*/ LDT_ENTRY  LdtEntry1,
  4008.             /*IN*/ ULONG  Selector2,
  4009.             /*IN*/ LDT_ENTRY  LdtEntry2);
  4010.  
  4011.     NTOSAPI
  4012.         NTSTATUS
  4013.         NTAPI
  4014.         NtVdmControl(
  4015.             /*IN*/ ULONG  ControlCode,
  4016.             /*IN*/ PVOID  ControlData);
  4017.  
  4018.     NTOSAPI
  4019.         NTSTATUS
  4020.         NTAPI
  4021.         ZwVdmControl(
  4022.             /*IN*/ ULONG  ControlCode,
  4023.             /*IN*/ PVOID  ControlData);
  4024.  
  4025. #pragma pack(pop)
  4026.  
  4027. #ifdef __cplusplus
  4028. }
  4029. #endif
  4030.  
  4031. #endif /* __NTAPI_H */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement