home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / ntapi.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  65KB  |  2,907 lines

  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. #pragma pack(push,4)
  43.  
  44. typedef struct _PEB *PPEB;
  45.  
  46. /* FIXME: Unknown definitions */
  47. typedef PVOID POBJECT_TYPE_LIST;
  48. typedef PVOID PEXECUTION_STATE;
  49. typedef PVOID PLANGID;
  50.  
  51. #ifndef NtCurrentProcess
  52. #define NtCurrentProcess() ((HANDLE)0xFFFFFFFF)
  53. #endif /* NtCurrentProcess */
  54. #ifndef NtCurrentThread
  55. #define NtCurrentThread() ((HANDLE)0xFFFFFFFE)
  56. #endif /* NtCurrentThread */
  57.  
  58. /* System information and control */
  59.  
  60. typedef enum _SYSTEM_INFORMATION_CLASS {
  61.     SystemInformationClassMin = 0,
  62.     SystemBasicInformation = 0,
  63.     SystemProcessorInformation = 1,
  64.     SystemPerformanceInformation = 2,
  65.     SystemTimeOfDayInformation = 3,
  66.     SystemPathInformation = 4,
  67.     SystemNotImplemented1 = 4,
  68.     SystemProcessInformation = 5,
  69.     SystemProcessesAndThreadsInformation = 5,
  70.     SystemCallCountInfoInformation = 6,
  71.     SystemCallCounts = 6,
  72.     SystemDeviceInformation = 7,
  73.     SystemConfigurationInformation = 7,
  74.     SystemProcessorPerformanceInformation = 8,
  75.     SystemProcessorTimes = 8,
  76.     SystemFlagsInformation = 9,
  77.     SystemGlobalFlag = 9,
  78.     SystemCallTimeInformation = 10,
  79.     SystemNotImplemented2 = 10,
  80.     SystemModuleInformation = 11,
  81.     SystemLocksInformation = 12,
  82.     SystemLockInformation = 12,
  83.     SystemStackTraceInformation = 13,
  84.     SystemNotImplemented3 = 13,
  85.     SystemPagedPoolInformation = 14,
  86.     SystemNotImplemented4 = 14,
  87.     SystemNonPagedPoolInformation = 15,
  88.     SystemNotImplemented5 = 15,
  89.     SystemHandleInformation = 16,
  90.     SystemObjectInformation = 17,
  91.     SystemPageFileInformation = 18,
  92.     SystemPagefileInformation = 18,
  93.     SystemVdmInstemulInformation = 19,
  94.     SystemInstructionEmulationCounts = 19,
  95.     SystemVdmBopInformation = 20,
  96.     SystemInvalidInfoClass1 = 20,    
  97.     SystemFileCacheInformation = 21,
  98.     SystemCacheInformation = 21,
  99.     SystemPoolTagInformation = 22,
  100.     SystemInterruptInformation = 23,
  101.     SystemProcessorStatistics = 23,
  102.     SystemDpcBehaviourInformation = 24,
  103.     SystemDpcInformation = 24,
  104.     SystemFullMemoryInformation = 25,
  105.     SystemNotImplemented6 = 25,
  106.     SystemLoadImage = 26,
  107.     SystemUnloadImage = 27,
  108.     SystemTimeAdjustmentInformation = 28,
  109.     SystemTimeAdjustment = 28,
  110.     SystemSummaryMemoryInformation = 29,
  111.     SystemNotImplemented7 = 29,
  112.     SystemNextEventIdInformation = 30,
  113.     SystemNotImplemented8 = 30,
  114.     SystemEventIdsInformation = 31,
  115.     SystemNotImplemented9 = 31,
  116.     SystemCrashDumpInformation = 32,
  117.     SystemExceptionInformation = 33,
  118.     SystemCrashDumpStateInformation = 34,
  119.     SystemKernelDebuggerInformation = 35,
  120.     SystemContextSwitchInformation = 36,
  121.     SystemRegistryQuotaInformation = 37,
  122.     SystemLoadAndCallImage = 38,
  123.     SystemPrioritySeparation = 39,
  124.     SystemPlugPlayBusInformation = 40,
  125.     SystemNotImplemented10 = 40,
  126.     SystemDockInformation = 41,
  127.     SystemNotImplemented11 = 41,
  128.     /* SystemPowerInformation = 42, Conflicts with POWER_INFORMATION_LEVEL 1 */
  129.     SystemInvalidInfoClass2 = 42,
  130.     SystemProcessorSpeedInformation = 43,
  131.     SystemInvalidInfoClass3 = 43,
  132.     SystemCurrentTimeZoneInformation = 44,
  133.     SystemTimeZoneInformation = 44,
  134.     SystemLookasideInformation = 45,
  135.     SystemSetTimeSlipEvent = 46,
  136.     SystemCreateSession = 47,
  137.     SystemDeleteSession = 48,
  138.     SystemInvalidInfoClass4 = 49,
  139.     SystemRangeStartInformation = 50,
  140.     SystemVerifierInformation = 51,
  141.     SystemAddVerifier = 52,
  142.     SystemSessionProcessesInformation    = 53,
  143.     SystemInformationClassMax
  144. } SYSTEM_INFORMATION_CLASS;
  145.  
  146. typedef struct _SYSTEM_BASIC_INFORMATION {
  147.     ULONG  Unknown;
  148.     ULONG  MaximumIncrement;
  149.     ULONG  PhysicalPageSize;
  150.     ULONG  NumberOfPhysicalPages;
  151.     ULONG  LowestPhysicalPage;
  152.     ULONG  HighestPhysicalPage;
  153.     ULONG  AllocationGranularity;
  154.     ULONG  LowestUserAddress;
  155.     ULONG  HighestUserAddress;
  156.     ULONG  ActiveProcessors;
  157.     UCHAR  NumberProcessors;
  158. } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
  159.  
  160. typedef struct _SYSTEM_PROCESSOR_INFORMATION {
  161.     USHORT  ProcessorArchitecture;
  162.     USHORT  ProcessorLevel;
  163.     USHORT  ProcessorRevision;
  164.     USHORT  Unknown;
  165.     ULONG  FeatureBits;
  166. } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
  167.  
  168. typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
  169.     LARGE_INTEGER  IdleTime;
  170.     LARGE_INTEGER  ReadTransferCount;
  171.     LARGE_INTEGER  WriteTransferCount;
  172.     LARGE_INTEGER  OtherTransferCount;
  173.     ULONG  ReadOperationCount;
  174.     ULONG  WriteOperationCount;
  175.     ULONG  OtherOperationCount;
  176.     ULONG  AvailablePages;
  177.     ULONG  TotalCommittedPages;
  178.     ULONG  TotalCommitLimit;
  179.     ULONG  PeakCommitment;
  180.     ULONG  PageFaults;
  181.     ULONG  WriteCopyFaults;
  182.     ULONG  TransitionFaults;
  183.     ULONG  CacheTransitionFaults;
  184.     ULONG  DemandZeroFaults;
  185.     ULONG  PagesRead;
  186.     ULONG  PageReadIos;
  187.     ULONG     CacheReads;
  188.     ULONG     CacheIos;
  189.     ULONG  PagefilePagesWritten;
  190.     ULONG  PagefilePageWriteIos;
  191.     ULONG  MappedFilePagesWritten;
  192.     ULONG  MappedFilePageWriteIos;
  193.     ULONG  PagedPoolUsage;
  194.     ULONG  NonPagedPoolUsage;
  195.     ULONG  PagedPoolAllocs;
  196.     ULONG  PagedPoolFrees;
  197.     ULONG  NonPagedPoolAllocs;
  198.     ULONG  NonPagedPoolFrees;
  199.     ULONG  TotalFreeSystemPtes;
  200.     ULONG  SystemCodePage;
  201.     ULONG  TotalSystemDriverPages;
  202.     ULONG  TotalSystemCodePages;
  203.     ULONG  SmallNonPagedLookasideListAllocateHits;
  204.     ULONG  SmallPagedLookasideListAllocateHits;
  205.     ULONG  Reserved3;
  206.     ULONG  MmSystemCachePage;
  207.     ULONG  PagedPoolPage;
  208.     ULONG  SystemDriverPage;
  209.     ULONG  FastReadNoWait;
  210.     ULONG  FastReadWait;
  211.     ULONG  FastReadResourceMiss;
  212.     ULONG  FastReadNotPossible;
  213.     ULONG  FastMdlReadNoWait;
  214.     ULONG  FastMdlReadWait;
  215.     ULONG  FastMdlReadResourceMiss;
  216.     ULONG  FastMdlReadNotPossible;
  217.     ULONG  MapDataNoWait;
  218.     ULONG  MapDataWait;
  219.     ULONG  MapDataNoWaitMiss;
  220.     ULONG  MapDataWaitMiss;
  221.     ULONG  PinMappedDataCount;
  222.     ULONG  PinReadNoWait;
  223.     ULONG  PinReadWait;
  224.     ULONG  PinReadNoWaitMiss;
  225.     ULONG  PinReadWaitMiss;
  226.     ULONG  CopyReadNoWait;
  227.     ULONG  CopyReadWait;
  228.     ULONG  CopyReadNoWaitMiss;
  229.     ULONG  CopyReadWaitMiss;
  230.     ULONG  MdlReadNoWait;
  231.     ULONG  MdlReadWait;
  232.     ULONG  MdlReadNoWaitMiss;
  233.     ULONG  MdlReadWaitMiss;
  234.     ULONG  ReadAheadIos;
  235.     ULONG  LazyWriteIos;
  236.     ULONG  LazyWritePages;
  237.     ULONG  DataFlushes;
  238.     ULONG  DataPages;
  239.     ULONG  ContextSwitches;
  240.     ULONG  FirstLevelTbFills;
  241.     ULONG  SecondLevelTbFills;
  242.     ULONG  SystemCalls;
  243. } SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
  244.  
  245. typedef struct _SYSTEM_TIME_OF_DAY_INFORMATION {
  246.     LARGE_INTEGER  BootTime;
  247.     LARGE_INTEGER  CurrentTime;
  248.     LARGE_INTEGER  TimeZoneBias;
  249.     ULONG  CurrentTimeZoneId;
  250. } SYSTEM_TIME_OF_DAY_INFORMATION, *PSYSTEM_TIME_OF_DAY_INFORMATION;
  251.  
  252. typedef struct _VM_COUNTERS {
  253.     ULONG  PeakVirtualSize;
  254.     ULONG  VirtualSize;
  255.     ULONG  PageFaultCount;
  256.     ULONG  PeakWorkingSetSize;
  257.     ULONG  WorkingSetSize;
  258.     ULONG  QuotaPeakPagedPoolUsage;
  259.     ULONG  QuotaPagedPoolUsage;
  260.     ULONG  QuotaPeakNonPagedPoolUsage;
  261.     ULONG  QuotaNonPagedPoolUsage;
  262.     ULONG  PagefileUsage;
  263.     ULONG  PeakPagefileUsage;
  264. } VM_COUNTERS;
  265.  
  266. typedef enum _THREAD_STATE {
  267.     StateInitialized,
  268.     StateReady,
  269.     StateRunning,
  270.     StateStandby,
  271.     StateTerminated,
  272.     StateWait,
  273.     StateTransition,
  274.     StateUnknown
  275. } THREAD_STATE;
  276.  
  277. typedef struct _SYSTEM_THREADS {
  278.     LARGE_INTEGER  KernelTime;
  279.     LARGE_INTEGER  UserTime;
  280.     LARGE_INTEGER  CreateTime;
  281.     ULONG  WaitTime;
  282.     PVOID  StartAddress;
  283.     CLIENT_ID  ClientId;
  284.     KPRIORITY  Priority;
  285.     KPRIORITY  BasePriority;
  286.     ULONG  ContextSwitchCount;
  287.     THREAD_STATE  State;
  288.     KWAIT_REASON  WaitReason;
  289. } SYSTEM_THREADS, *PSYSTEM_THREADS;
  290.  
  291. typedef struct _SYSTEM_PROCESSES {
  292.     ULONG  NextEntryDelta;
  293.     ULONG  ThreadCount;
  294.     ULONG  Reserved1[6];
  295.     LARGE_INTEGER  CreateTime;
  296.     LARGE_INTEGER  UserTime;
  297.     LARGE_INTEGER  KernelTime;
  298.     UNICODE_STRING  ProcessName;
  299.     KPRIORITY  BasePriority;
  300.     ULONG  ProcessId;
  301.     ULONG  InheritedFromProcessId;
  302.     ULONG  HandleCount;
  303.     ULONG  Reserved2[2];
  304.     VM_COUNTERS  VmCounters;
  305.     IO_COUNTERS  IoCounters;
  306.     SYSTEM_THREADS  Threads[1];
  307. } SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
  308.  
  309. typedef struct _SYSTEM_CALLS_INFORMATION {
  310.     ULONG  Size;
  311.     ULONG  NumberOfDescriptorTables;
  312.     ULONG  NumberOfRoutinesInTable[1];
  313.     ULONG  CallCounts[ANYSIZE_ARRAY];
  314. } SYSTEM_CALLS_INFORMATION, *PSYSTEM_CALLS_INFORMATION;
  315.  
  316. typedef struct _SYSTEM_CONFIGURATION_INFORMATION {
  317.     ULONG  DiskCount;
  318.     ULONG  FloppyCount;
  319.     ULONG  CdRomCount;
  320.     ULONG  TapeCount;
  321.     ULONG  SerialCount;
  322.     ULONG  ParallelCount;
  323. } SYSTEM_CONFIGURATION_INFORMATION, *PSYSTEM_CONFIGURATION_INFORMATION;
  324.  
  325. typedef struct _SYSTEM_PROCESSOR_TIMES {
  326.     LARGE_INTEGER  IdleTime;
  327.     LARGE_INTEGER  KernelTime;
  328.     LARGE_INTEGER  UserTime;
  329.     LARGE_INTEGER  DpcTime;
  330.     LARGE_INTEGER  InterruptTime;
  331.     ULONG  InterruptCount;
  332. } SYSTEM_PROCESSOR_TIMES, *PSYSTEM_PROCESSOR_TIMES;
  333.  
  334. /* SYSTEM_GLOBAL_FLAG.GlobalFlag constants */
  335. #define FLG_STOP_ON_EXCEPTION             0x00000001
  336. #define FLG_SHOW_LDR_SNAPS                0x00000002
  337. #define FLG_DEBUG_INITIAL_COMMAND         0x00000004
  338. #define FLG_STOP_ON_HUNG_GUI              0x00000008
  339. #define FLG_HEAP_ENABLE_TAIL_CHECK        0x00000010
  340. #define FLG_HEAP_ENABLE_FREE_CHECK        0x00000020
  341. #define FLG_HEAP_VALIDATE_PARAMETERS      0x00000040
  342. #define FLG_HEAP_VALIDATE_ALL             0x00000080
  343. #define FLG_POOL_ENABLE_TAIL_CHECK        0x00000100
  344. #define FLG_POOL_ENABLE_FREE_CHECK        0x00000200
  345. #define FLG_POOL_ENABLE_TAGGING           0x00000400
  346. #define FLG_HEAP_ENABLE_TAGGING           0x00000800
  347. #define FLG_USER_STACK_TRACE_DB           0x00001000
  348. #define FLG_KERNEL_STACK_TRACE_DB         0x00002000
  349. #define FLG_MAINTAIN_OBJECT_TYPELIST      0x00004000
  350. #define FLG_HEAP_ENABLE_TAG_BY_DLL        0x00008000
  351. #define FLG_IGNORE_DEBUG_PRIV             0x00010000
  352. #define FLG_ENABLE_CSRDEBUG               0x00020000
  353. #define FLG_ENABLE_KDEBUG_SYMBOL_LOAD     0x00040000
  354. #define FLG_DISABLE_PAGE_KERNEL_STACKS    0x00080000
  355. #define FLG_HEAP_ENABLE_CALL_TRACING      0x00100000
  356. #define FLG_HEAP_DISABLE_COALESCING       0x00200000
  357. #define FLG_ENABLE_CLOSE_EXCEPTIONS       0x00400000
  358. #define FLG_ENABLE_EXCEPTION_LOGGING      0x00800000
  359. #define FLG_ENABLE_DBGPRINT_BUFFERING     0x08000000
  360.  
  361. typedef struct _SYSTEM_GLOBAL_FLAG {
  362.   ULONG  GlobalFlag;
  363. } SYSTEM_GLOBAL_FLAG, *PSYSTEM_GLOBAL_FLAG;
  364.  
  365. typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY {
  366.     ULONG     Unknown1;
  367.     ULONG     Unknown2;
  368.     PVOID  Base;
  369.     ULONG  Size;
  370.     ULONG  Flags;
  371.     USHORT  Index;
  372.   /* Length of module name not including the path, this
  373.      field contains valid value only for NTOSKRNL module */
  374.     USHORT    NameLength;
  375.     USHORT  LoadCount;
  376.     USHORT  PathLength;
  377.     CHAR  ImageName[256];
  378. } SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;
  379.  
  380. typedef struct _SYSTEM_MODULE_INFORMATION {
  381.     ULONG  Count;
  382.   SYSTEM_MODULE_INFORMATION_ENTRY Module[1];
  383. } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
  384.  
  385. typedef struct _SYSTEM_LOCK_INFORMATION {
  386.     PVOID  Address;
  387.     USHORT  Type;
  388.     USHORT  Reserved1;
  389.     ULONG  ExclusiveOwnerThreadId;
  390.     ULONG  ActiveCount;
  391.     ULONG  ContentionCount;
  392.     ULONG  Reserved2[2];
  393.     ULONG  NumberOfSharedWaiters;
  394.     ULONG  NumberOfExclusiveWaiters;
  395. } SYSTEM_LOCK_INFORMATION, *PSYSTEM_LOCK_INFORMATION;
  396.  
  397. /*SYSTEM_HANDLE_INFORMATION.Flags cosntants */
  398. #define PROTECT_FROM_CLOSE                0x01
  399. #define INHERIT                           0x02
  400.  
  401. typedef struct _SYSTEM_HANDLE_INFORMATION {
  402.     ULONG  ProcessId;
  403.     UCHAR  ObjectTypeNumber;
  404.     UCHAR  Flags;
  405.     USHORT  Handle;
  406.     PVOID  Object;
  407.     ACCESS_MASK  GrantedAccess;
  408. } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
  409.  
  410. typedef struct _SYSTEM_OBJECT_TYPE_INFORMATION {
  411.     ULONG  NextEntryOffset;
  412.     ULONG  ObjectCount;
  413.     ULONG  HandleCount;
  414.     ULONG  TypeNumber;
  415.     ULONG  InvalidAttributes;
  416.     GENERIC_MAPPING  GenericMapping;
  417.     ACCESS_MASK  ValidAccessMask;
  418.     POOL_TYPE  PoolType;
  419.     UCHAR  Unknown;
  420.     UNICODE_STRING  Name;
  421. } SYSTEM_OBJECT_TYPE_INFORMATION, *PSYSTEM_OBJECT_TYPE_INFORMATION;
  422.  
  423. /* SYSTEM_OBJECT_INFORMATION.Flags constants */
  424. #define FLG_SYSOBJINFO_SINGLE_HANDLE_ENTRY    0x40
  425. #define FLG_SYSOBJINFO_DEFAULT_SECURITY_QUOTA 0x20
  426. #define FLG_SYSOBJINFO_PERMANENT              0x10
  427. #define FLG_SYSOBJINFO_EXCLUSIVE              0x08
  428. #define FLG_SYSOBJINFO_CREATOR_INFO           0x04
  429. #define FLG_SYSOBJINFO_KERNEL_MODE            0x02
  430.  
  431. typedef struct _SYSTEM_OBJECT_INFORMATION {
  432.     ULONG  NextEntryOffset;
  433.     PVOID  Object;
  434.     ULONG  CreatorProcessId;
  435.     USHORT  Unknown;
  436.     USHORT  Flags;
  437.     ULONG  PointerCount;
  438.     ULONG  HandleCount;
  439.     ULONG  PagedPoolUsage;
  440.     ULONG  NonPagedPoolUsage;
  441.     ULONG  ExclusiveProcessId;
  442.     PSECURITY_DESCRIPTOR  SecurityDescriptor;
  443.     UNICODE_STRING  Name;
  444. } SYSTEM_OBJECT_INFORMATION, *PSYSTEM_OBJECT_INFORMATION;
  445.  
  446. typedef struct _SYSTEM_PAGEFILE_INFORMATION {
  447.     ULONG  NextEntryOffset;
  448.     ULONG  CurrentSize;
  449.     ULONG  TotalUsed;
  450.     ULONG  PeakUsed;
  451.     UNICODE_STRING  FileName;
  452. } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
  453.  
  454. typedef struct _SYSTEM_INSTRUCTION_EMULATION_INFORMATION {
  455.     ULONG  SegmentNotPresent;
  456.     ULONG  TwoByteOpcode;
  457.     ULONG  ESprefix;
  458.     ULONG  CSprefix;
  459.     ULONG  SSprefix;
  460.     ULONG  DSprefix;
  461.     ULONG  FSPrefix;
  462.     ULONG  GSprefix;
  463.     ULONG  OPER32prefix;
  464.     ULONG  ADDR32prefix;
  465.     ULONG  INSB;
  466.     ULONG  INSW;
  467.     ULONG  OUTSB;
  468.     ULONG  OUTSW;
  469.     ULONG  PUSHFD;
  470.     ULONG  POPFD;
  471.     ULONG  INTnn;
  472.     ULONG  INTO;
  473.     ULONG  IRETD;
  474.     ULONG  INBimm;
  475.     ULONG  INWimm;
  476.     ULONG  OUTBimm;
  477.     ULONG  OUTWimm;
  478.     ULONG  INB;
  479.     ULONG  INW;
  480.     ULONG  OUTB;
  481.     ULONG  OUTW;
  482.     ULONG  LOCKprefix;
  483.     ULONG  REPNEprefix;
  484.     ULONG  REPprefix;
  485.     ULONG  HLT;
  486.     ULONG  CLI;
  487.     ULONG  STI;
  488.     ULONG  GenericInvalidOpcode;
  489. } SYSTEM_INSTRUCTION_EMULATION_INFORMATION, *PSYSTEM_INSTRUCTION_EMULATION_INFORMATION;
  490.  
  491. typedef struct _SYSTEM_POOL_TAG_INFORMATION {
  492.     CHAR  Tag[4];
  493.     ULONG  PagedPoolAllocs;
  494.     ULONG  PagedPoolFrees;
  495.     ULONG  PagedPoolUsage;
  496.     ULONG  NonPagedPoolAllocs;
  497.     ULONG  NonPagedPoolFrees;
  498.     ULONG  NonPagedPoolUsage;
  499. } SYSTEM_POOL_TAG_INFORMATION, *PSYSTEM_POOL_TAG_INFORMATION;
  500.  
  501. typedef struct _SYSTEM_PROCESSOR_STATISTICS {
  502.     ULONG  ContextSwitches;
  503.     ULONG  DpcCount;
  504.     ULONG  DpcRequestRate;
  505.     ULONG  TimeIncrement;
  506.     ULONG  DpcBypassCount;
  507.     ULONG  ApcBypassCount;
  508. } SYSTEM_PROCESSOR_STATISTICS, *PSYSTEM_PROCESSOR_STATISTICS;
  509.  
  510. typedef struct _SYSTEM_DPC_INFORMATION {
  511.     ULONG  Reserved;
  512.     ULONG  MaximumDpcQueueDepth;
  513.     ULONG  MinimumDpcRate;
  514.     ULONG  AdjustDpcThreshold;
  515.     ULONG  IdealDpcRate;
  516. } SYSTEM_DPC_INFORMATION, *PSYSTEM_DPC_INFORMATION;
  517.  
  518. typedef struct _SYSTEM_LOAD_IMAGE {
  519.     UNICODE_STRING  ModuleName;
  520.     PVOID  ModuleBase;
  521.     PVOID  SectionPointer;
  522.     PVOID  EntryPoint;
  523.     PVOID  ExportDirectory;
  524. } SYSTEM_LOAD_IMAGE, *PSYSTEM_LOAD_IMAGE;
  525.  
  526. typedef struct _SYSTEM_UNLOAD_IMAGE {
  527.   PVOID  ModuleBase;
  528. } SYSTEM_UNLOAD_IMAGE, *PSYSTEM_UNLOAD_IMAGE;
  529.  
  530. typedef struct _SYSTEM_QUERY_TIME_ADJUSTMENT {
  531.     ULONG  TimeAdjustment;
  532.     ULONG  MaximumIncrement;
  533.     BOOLEAN  TimeSynchronization;
  534. } SYSTEM_QUERY_TIME_ADJUSTMENT, *PSYSTEM_QUERY_TIME_ADJUSTMENT;
  535.  
  536. typedef struct _SYSTEM_SET_TIME_ADJUSTMENT {
  537.     ULONG  TimeAdjustment;
  538.     BOOLEAN  TimeSynchronization;
  539. } SYSTEM_SET_TIME_ADJUSTMENT, *PSYSTEM_SET_TIME_ADJUSTMENT;
  540.  
  541. typedef struct _SYSTEM_CRASH_DUMP_INFORMATION {
  542.     HANDLE  CrashDumpSectionHandle;
  543.     HANDLE  Unknown;
  544. } SYSTEM_CRASH_DUMP_INFORMATION, *PSYSTEM_CRASH_DUMP_INFORMATION;
  545.  
  546. typedef struct _SYSTEM_EXCEPTION_INFORMATION {
  547.     ULONG  AlignmentFixupCount;
  548.     ULONG  ExceptionDispatchCount;
  549.     ULONG  FloatingEmulationCount;
  550.     ULONG  Reserved;
  551. } SYSTEM_EXCEPTION_INFORMATION, *PSYSTEM_EXCEPTION_INFORMATION;
  552.  
  553. typedef struct _SYSTEM_CRASH_DUMP_STATE_INFORMATION {
  554.     ULONG  CrashDumpSectionExists;
  555.     ULONG  Unknown;
  556. } SYSTEM_CRASH_DUMP_STATE_INFORMATION, *PSYSTEM_CRASH_DUMP_STATE_INFORMATION;
  557.  
  558. typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION {
  559.     BOOLEAN  DebuggerEnabled;
  560.     BOOLEAN  DebuggerNotPresent;
  561. } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION;
  562.  
  563. typedef struct _SYSTEM_CONTEXT_SWITCH_INFORMATION {
  564.     ULONG  ContextSwitches;
  565.     ULONG  ContextSwitchCounters[11];
  566. } SYSTEM_CONTEXT_SWITCH_INFORMATION, *PSYSTEM_CONTEXT_SWITCH_INFORMATION;
  567.  
  568. typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
  569.     ULONG  RegistryQuota;
  570.     ULONG  RegistryQuotaInUse;
  571.     ULONG  PagedPoolSize;
  572. } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
  573.  
  574. typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE {
  575.   UNICODE_STRING  ModuleName;
  576. } SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;
  577.  
  578. typedef struct _SYSTEM_PRIORITY_SEPARATION {
  579.   ULONG  PrioritySeparation;
  580. } SYSTEM_PRIORITY_SEPARATION, *PSYSTEM_PRIORITY_SEPARATION;
  581.  
  582. typedef struct _SYSTEM_TIME_ZONE_INFORMATION {
  583.     LONG  Bias;
  584.     WCHAR  StandardName[32];
  585.     LARGE_INTEGER  StandardDate;
  586.     LONG  StandardBias;
  587.     WCHAR  DaylightName[32];
  588.     LARGE_INTEGER  DaylightDate;
  589.     LONG  DaylightBias;
  590. } SYSTEM_TIME_ZONE_INFORMATION, *PSYSTEM_TIME_ZONE_INFORMATION;
  591.  
  592. typedef struct _SYSTEM_LOOKASIDE_INFORMATION {
  593.     USHORT  Depth;
  594.     USHORT  MaximumDepth;
  595.     ULONG  TotalAllocates;
  596.     ULONG  AllocateMisses;
  597.     ULONG  TotalFrees;
  598.     ULONG  FreeMisses;
  599.     POOL_TYPE  Type;
  600.     ULONG  Tag;
  601.     ULONG  Size;
  602. } SYSTEM_LOOKASIDE_INFORMATION, *PSYSTEM_LOOKASIDE_INFORMATION;
  603.  
  604. typedef struct _SYSTEM_SET_TIME_SLIP_EVENT {
  605.   HANDLE  TimeSlipEvent;
  606. } SYSTEM_SET_TIME_SLIP_EVENT, *PSYSTEM_SET_TIME_SLIP_EVENT;
  607.  
  608. typedef struct _SYSTEM_CREATE_SESSION {
  609.   ULONG  SessionId;
  610. } SYSTEM_CREATE_SESSION, *PSYSTEM_CREATE_SESSION;
  611.  
  612. typedef struct _SYSTEM_DELETE_SESSION {
  613.   ULONG  SessionId;
  614. } SYSTEM_DELETE_SESSION, *PSYSTEM_DELETE_SESSION;
  615.  
  616. typedef struct _SYSTEM_RANGE_START_INFORMATION {
  617.   PVOID  SystemRangeStart;
  618. } SYSTEM_RANGE_START_INFORMATION, *PSYSTEM_RANGE_START_INFORMATION;
  619.  
  620. typedef struct _SYSTEM_SESSION_PROCESSES_INFORMATION {
  621.     ULONG  SessionId;
  622.     ULONG  BufferSize;
  623.     PVOID  Buffer;
  624. } SYSTEM_SESSION_PROCESSES_INFORMATION, *PSYSTEM_SESSION_PROCESSES_INFORMATION;
  625.  
  626. typedef struct _SYSTEM_POOL_BLOCK {
  627.     BOOLEAN  Allocated;
  628.     USHORT  Unknown;
  629.     ULONG  Size;
  630.     CHAR  Tag[4];
  631. } SYSTEM_POOL_BLOCK, *PSYSTEM_POOL_BLOCK;
  632.  
  633. typedef struct _SYSTEM_POOL_BLOCKS_INFORMATION {
  634.     ULONG  PoolSize;
  635.     PVOID  PoolBase;
  636.     USHORT  Unknown;
  637.     ULONG  NumberOfBlocks;
  638.     SYSTEM_POOL_BLOCK  PoolBlocks[1];
  639. } SYSTEM_POOL_BLOCKS_INFORMATION, *PSYSTEM_POOL_BLOCKS_INFORMATION;
  640.  
  641. typedef struct _SYSTEM_MEMORY_USAGE {
  642.     PVOID  Name;
  643.     USHORT  Valid;
  644.     USHORT  Standby;
  645.     USHORT  Modified;
  646.     USHORT  PageTables;
  647. } SYSTEM_MEMORY_USAGE, *PSYSTEM_MEMORY_USAGE;
  648.  
  649. typedef struct _SYSTEM_MEMORY_USAGE_INFORMATION {
  650.       ULONG  Reserved;
  651.     PVOID  EndOfData;
  652.     SYSTEM_MEMORY_USAGE  MemoryUsage[1];
  653. } SYSTEM_MEMORY_USAGE_INFORMATION, *PSYSTEM_MEMORY_USAGE_INFORMATION;
  654.  
  655. NTOSAPI
  656. NTSTATUS
  657. NTAPI
  658. NtQuerySystemInformation(
  659.   IN SYSTEM_INFORMATION_CLASS  SystemInformationClass,
  660.   IN OUT PVOID  SystemInformation,
  661.   IN ULONG  SystemInformationLength,
  662.   OUT PULONG  ReturnLength  OPTIONAL);
  663.  
  664. NTOSAPI
  665. NTSTATUS
  666. NTAPI
  667. ZwQuerySystemInformation(
  668.   IN SYSTEM_INFORMATION_CLASS  SystemInformationClass,
  669.   IN OUT PVOID  SystemInformation,
  670.   IN ULONG  SystemInformationLength,
  671.   OUT PULONG  ReturnLength  OPTIONAL);
  672.  
  673. NTOSAPI
  674. NTAPI
  675. NTSTATUS
  676. NtQueryFullAttributesFile(
  677.     IN POBJECT_ATTRIBUTES ObjectAttributes,
  678.     OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation);
  679.  
  680. NTOSAPI
  681. NTAPI
  682. NTSTATUS
  683. ZwQueryFullAttributesFile(
  684.     IN POBJECT_ATTRIBUTES ObjectAttributes,
  685.      OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation);
  686.  
  687. NTOSAPI
  688. NTSTATUS
  689. NTAPI
  690. ZwSetSystemInformation(
  691.     IN SYSTEM_INFORMATION_CLASS  SystemInformationClass,
  692.     IN OUT PVOID  SystemInformation,
  693.     IN ULONG  SystemInformationLength);
  694.  
  695. NTOSAPI
  696. NTSTATUS
  697. NTAPI
  698. ZwQuerySystemEnvironmentValue(
  699.     IN PUNICODE_STRING  Name,
  700.     OUT PVOID  Value,
  701.     IN ULONG  ValueLength,
  702.     OUT PULONG  ReturnLength  OPTIONAL);
  703.  
  704. NTOSAPI
  705. NTSTATUS
  706. NTAPI
  707. ZwSetSystemEnvironmentValue(
  708.     IN PUNICODE_STRING  Name,
  709.     IN PUNICODE_STRING  Value);
  710.  
  711. typedef enum _SHUTDOWN_ACTION {
  712.     ShutdownNoReboot,
  713.     ShutdownReboot,
  714.     ShutdownPowerOff
  715. } SHUTDOWN_ACTION;
  716.  
  717. NTOSAPI
  718. NTSTATUS
  719. NTAPI
  720. NtShutdownSystem(
  721.   IN SHUTDOWN_ACTION  Action);
  722.  
  723. typedef enum _DEBUG_CONTROL_CODE {
  724.   DebugGetTraceInformation = 1,
  725.     DebugSetInternalBreakpoint,
  726.     DebugSetSpecialCall,
  727.     DebugClearSpecialCalls,
  728.     DebugQuerySpecialCalls,
  729.     DebugDbgBreakPoint,
  730.     DebugMaximum
  731. } DEBUG_CONTROL_CODE;
  732.  
  733.  
  734. NTOSAPI
  735. NTSTATUS
  736. NTAPI
  737. ZwSystemDebugControl(
  738.     IN DEBUG_CONTROL_CODE  ControlCode,
  739.     IN PVOID  InputBuffer  OPTIONAL,
  740.     IN ULONG  InputBufferLength,
  741.     OUT PVOID  OutputBuffer  OPTIONAL,
  742.     IN ULONG  OutputBufferLength,
  743.     OUT PULONG  ReturnLength  OPTIONAL);
  744.  
  745.  
  746.  
  747. /* Objects, Object directories, and symbolic links */
  748.  
  749. typedef enum _OBJECT_INFORMATION_CLASS {
  750.     ObjectBasicInformation,
  751.     ObjectNameInformation,
  752.     ObjectTypeInformation,
  753.     ObjectAllTypesInformation,
  754.     ObjectHandleInformation
  755. } OBJECT_INFORMATION_CLASS;
  756.  
  757. NTOSAPI
  758. NTSTATUS
  759. NTAPI
  760. ZwQueryObject(
  761.     IN HANDLE  ObjectHandle,
  762.     IN OBJECT_INFORMATION_CLASS  ObjectInformationClass,
  763.     OUT PVOID  ObjectInformation,
  764.     IN ULONG  ObjectInformationLength,
  765.     OUT PULONG  ReturnLength  OPTIONAL);
  766.  
  767. NTOSAPI
  768. NTSTATUS
  769. NTAPI
  770. ZwSetInformationObject(
  771.     IN HANDLE  ObjectHandle,
  772.     IN OBJECT_INFORMATION_CLASS  ObjectInformationClass,
  773.     IN PVOID  ObjectInformation,
  774.     IN ULONG  ObjectInformationLength);
  775.  
  776. /* OBJECT_BASIC_INFORMATION.Attributes constants */
  777. /* also in winbase.h */
  778. #define HANDLE_FLAG_INHERIT               0x01
  779. #define HANDLE_FLAG_PROTECT_FROM_CLOSE    0x02
  780. /* end winbase.h */
  781. #define PERMANENT                         0x10
  782. #define EXCLUSIVE                         0x20
  783.  
  784. typedef struct _OBJECT_BASIC_INFORMATION {
  785.     ULONG  Attributes;
  786.     ACCESS_MASK  GrantedAccess;
  787.     ULONG  HandleCount;
  788.     ULONG  PointerCount;
  789.     ULONG  PagedPoolUsage;
  790.     ULONG  NonPagedPoolUsage;
  791.     ULONG  Reserved[3];
  792.     ULONG  NameInformationLength;
  793.     ULONG  TypeInformationLength;
  794.     ULONG  SecurityDescriptorLength;
  795.     LARGE_INTEGER  CreateTime;
  796. } OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
  797. #if 0
  798. /* FIXME: Enable later */
  799. typedef struct _OBJECT_TYPE_INFORMATION {
  800.     UNICODE_STRING  Name;
  801.     ULONG  ObjectCount;
  802.     ULONG  HandleCount;
  803.     ULONG  Reserved1[4];
  804.     ULONG  PeakObjectCount;
  805.     ULONG  PeakHandleCount;
  806.     ULONG  Reserved2[4];
  807.     ULONG  InvalidAttributes;
  808.     GENERIC_MAPPING  GenericMapping;
  809.     ULONG  ValidAccess;
  810.     UCHAR  Unknown;
  811.     BOOLEAN  MaintainHandleDatabase;
  812.     POOL_TYPE  PoolType;
  813.     ULONG  PagedPoolUsage;
  814.     ULONG  NonPagedPoolUsage;
  815. } OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
  816.  
  817. typedef struct _OBJECT_ALL_TYPES_INFORMATION {
  818.   ULONG  NumberOfTypes;
  819.   OBJECT_TYPE_INFORMATION  TypeInformation;
  820. } OBJECT_ALL_TYPES_INFORMATION, *POBJECT_ALL_TYPES_INFORMATION;
  821. #endif
  822. typedef struct _OBJECT_HANDLE_ATTRIBUTE_INFORMATION {
  823.   BOOLEAN  Inherit;
  824.   BOOLEAN  ProtectFromClose;
  825. } OBJECT_HANDLE_ATTRIBUTE_INFORMATION, *POBJECT_HANDLE_ATTRIBUTE_INFORMATION;
  826.  
  827. NTOSAPI
  828. NTSTATUS
  829. NTAPI
  830. NtDuplicateObject(
  831.   IN HANDLE  SourceProcessHandle,
  832.   IN HANDLE  SourceHandle,
  833.   IN HANDLE  TargetProcessHandle,
  834.   OUT PHANDLE  TargetHandle  OPTIONAL,
  835.   IN ACCESS_MASK  DesiredAccess,
  836.   IN ULONG  Attributes,
  837.   IN ULONG  Options);
  838.  
  839. NTOSAPI
  840. NTSTATUS
  841. NTAPI
  842. ZwDuplicateObject(
  843.   IN HANDLE  SourceProcessHandle,
  844.   IN HANDLE  SourceHandle,
  845.   IN HANDLE  TargetProcessHandle,
  846.   OUT PHANDLE  TargetHandle  OPTIONAL,
  847.   IN ACCESS_MASK  DesiredAccess,
  848.   IN ULONG  Attributes,
  849.   IN ULONG  Options);
  850.  
  851. NTOSAPI
  852. NTSTATUS
  853. NTAPI
  854. NtQuerySecurityObject(
  855.   IN HANDLE Handle,
  856.   IN SECURITY_INFORMATION  SecurityInformation,
  857.   OUT PSECURITY_DESCRIPTOR  SecurityDescriptor,
  858.   IN ULONG  SecurityDescriptorLength,
  859.   OUT PULONG  ReturnLength);
  860.  
  861. NTOSAPI
  862. NTSTATUS
  863. NTAPI
  864. ZwQuerySecurityObject(
  865.   IN HANDLE Handle,
  866.   IN SECURITY_INFORMATION  SecurityInformation,
  867.   OUT PSECURITY_DESCRIPTOR  SecurityDescriptor,
  868.   IN ULONG  SecurityDescriptorLength,
  869.   OUT PULONG  ReturnLength);
  870.  
  871. NTOSAPI
  872. NTSTATUS
  873. NTAPI
  874. NtSetSecurityObject(
  875.   IN HANDLE  Handle,
  876.   IN SECURITY_INFORMATION  SecurityInformation,
  877.   IN PSECURITY_DESCRIPTOR  SecurityDescriptor);
  878.  
  879. NTOSAPI
  880. NTSTATUS
  881. NTAPI
  882. ZwSetSecurityObject(
  883.   IN HANDLE  Handle,
  884.   IN SECURITY_INFORMATION  SecurityInformation,
  885.   IN PSECURITY_DESCRIPTOR  SecurityDescriptor);
  886.  
  887. NTOSAPI
  888. NTSTATUS
  889. NTAPI
  890. ZwOpenDirectoryObject(
  891.   OUT PHANDLE  DirectoryHandle,
  892.   IN ACCESS_MASK  DesiredAccess,
  893.   IN POBJECT_ATTRIBUTES  ObjectAttributes);
  894.  
  895. NTOSAPI
  896. NTSTATUS
  897. NTAPI
  898. ZwQueryDirectoryObject(
  899.   IN HANDLE  DirectoryHandle,
  900.   OUT PVOID  Buffer,
  901.   IN ULONG  BufferLength,
  902.   IN BOOLEAN  ReturnSingleEntry,
  903.   IN BOOLEAN  RestartScan,
  904.   IN OUT PULONG  Context,
  905.   OUT PULONG  ReturnLength  OPTIONAL);
  906.  
  907. typedef struct _DIRECTORY_BASIC_INFORMATION {
  908.   UNICODE_STRING  ObjectName;
  909.   UNICODE_STRING  ObjectTypeName;
  910. } DIRECTORY_BASIC_INFORMATION, *PDIRECTORY_BASIC_INFORMATION;
  911.  
  912. NTOSAPI
  913. NTSTATUS
  914. NTAPI
  915. ZwCreateSymbolicLinkObject(
  916.   OUT PHANDLE  SymbolicLinkHandle,
  917.   IN ACCESS_MASK  DesiredAccess,
  918.   IN POBJECT_ATTRIBUTES  ObjectAttributes,
  919.   IN PUNICODE_STRING  TargetName);
  920.  
  921.  
  922.  
  923.  
  924. /* Virtual memory */
  925.  
  926. typedef enum _MEMORY_INFORMATION_CLASS {
  927. MemoryBasicInformation,
  928. MemoryWorkingSetList,
  929. MemorySectionName,
  930. MemoryBasicVlmInformation
  931. } MEMORY_INFORMATION_CLASS;
  932.  
  933. NTOSAPI
  934. NTSTATUS
  935. NTAPI
  936. NtAllocateVirtualMemory(
  937.   IN HANDLE  ProcessHandle,
  938.   IN OUT PVOID  *BaseAddress,
  939.   IN ULONG  ZeroBits,
  940.   IN OUT PULONG  AllocationSize,
  941.   IN ULONG  AllocationType,
  942.   IN ULONG  Protect);
  943.  
  944. NTOSAPI
  945. NTSTATUS
  946. NTAPI
  947. ZwAllocateVirtualMemory(
  948.   IN HANDLE  ProcessHandle,
  949.   IN OUT PVOID  *BaseAddress,
  950.   IN ULONG  ZeroBits,
  951.   IN OUT PULONG  AllocationSize,
  952.   IN ULONG  AllocationType,
  953.   IN ULONG  Protect);
  954.  
  955. NTOSAPI
  956. NTSTATUS
  957. NTAPI
  958. NtFreeVirtualMemory(
  959.   IN HANDLE  ProcessHandle,
  960.   IN OUT PVOID  *BaseAddress,
  961.   IN OUT PULONG  FreeSize,
  962.   IN ULONG  FreeType);
  963.  
  964. NTOSAPI
  965. NTSTATUS
  966. NTAPI
  967. ZwFreeVirtualMemory(
  968.   IN HANDLE  ProcessHandle,
  969.   IN OUT PVOID  *BaseAddress,
  970.   IN OUT PULONG  FreeSize,
  971.   IN ULONG  FreeType);
  972.  
  973. NTOSAPI
  974. NTSTATUS
  975. NTAPI
  976. ZwQueryVirtualMemory(
  977.     IN HANDLE  ProcessHandle,
  978.     IN PVOID  BaseAddress,
  979.     IN MEMORY_INFORMATION_CLASS  MemoryInformationClass,
  980.     OUT PVOID  MemoryInformation,
  981.     IN ULONG  MemoryInformationLength,
  982.     OUT PULONG  ReturnLength  OPTIONAL);
  983.  
  984. /* MEMORY_WORKING_SET_LIST.WorkingSetList constants */
  985. #define WSLE_PAGE_READONLY                0x001
  986. #define WSLE_PAGE_EXECUTE                 0x002
  987. #define WSLE_PAGE_READWRITE               0x004
  988. #define WSLE_PAGE_EXECUTE_READ            0x003
  989. #define WSLE_PAGE_WRITECOPY               0x005
  990. #define WSLE_PAGE_EXECUTE_READWRITE       0x006
  991. #define WSLE_PAGE_EXECUTE_WRITECOPY       0x007
  992. #define WSLE_PAGE_SHARE_COUNT_MASK        0x0E0
  993. #define WSLE_PAGE_SHAREABLE               0x100
  994.  
  995. typedef struct _MEMORY_WORKING_SET_LIST {
  996.   ULONG  NumberOfPages;
  997.   ULONG  WorkingSetList[1];
  998. } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
  999.  
  1000. typedef struct _MEMORY_SECTION_NAME {
  1001.   UNICODE_STRING  SectionFileName;
  1002. } MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
  1003.  
  1004. /* Zw[Lock|Unlock]VirtualMemory.LockType constants */
  1005. #define LOCK_VM_IN_WSL                    0x01
  1006. #define LOCK_VM_IN_RAM                    0x02
  1007.  
  1008. NTOSAPI
  1009. NTSTATUS
  1010. NTAPI
  1011. ZwLockVirtualMemory(
  1012.     IN HANDLE  ProcessHandle,
  1013.     IN OUT PVOID  *BaseAddress,
  1014.     IN OUT PULONG  LockSize,
  1015.     IN ULONG  LockType);
  1016.  
  1017. NTOSAPI
  1018. NTSTATUS
  1019. NTAPI
  1020. ZwUnlockVirtualMemory(
  1021.     IN HANDLE  ProcessHandle,
  1022.     IN OUT PVOID  *BaseAddress,
  1023.     IN OUT PULONG  LockSize,
  1024.     IN ULONG  LockType);
  1025.  
  1026. NTOSAPI
  1027. NTSTATUS
  1028. NTAPI
  1029. ZwReadVirtualMemory(
  1030.     IN HANDLE  ProcessHandle,
  1031.     IN PVOID  BaseAddress,
  1032.     OUT PVOID  Buffer,
  1033.     IN ULONG  BufferLength,
  1034.     OUT PULONG  ReturnLength  OPTIONAL);
  1035.  
  1036. NTOSAPI
  1037. NTSTATUS
  1038. NTAPI
  1039. ZwWriteVirtualMemory(
  1040.     IN HANDLE  ProcessHandle,
  1041.     IN PVOID  BaseAddress,
  1042.     IN PVOID  Buffer,
  1043.     IN ULONG  BufferLength,
  1044.     OUT PULONG  ReturnLength  OPTIONAL);
  1045.  
  1046. NTOSAPI
  1047. NTSTATUS
  1048. NTAPI
  1049. ZwProtectVirtualMemory(
  1050.     IN HANDLE  ProcessHandle,
  1051.     IN OUT PVOID  *BaseAddress,
  1052.     IN OUT PULONG  ProtectSize,
  1053.     IN ULONG  NewProtect,
  1054.     OUT PULONG  OldProtect);
  1055.  
  1056. NTOSAPI
  1057. NTSTATUS
  1058. NTAPI
  1059. ZwFlushVirtualMemory(
  1060.     IN HANDLE  ProcessHandle,
  1061.     IN OUT PVOID  *BaseAddress,
  1062.     IN OUT PULONG  FlushSize,
  1063.     OUT PIO_STATUS_BLOCK  IoStatusBlock);
  1064.  
  1065. NTOSAPI
  1066. NTSTATUS
  1067. NTAPI
  1068. ZwAllocateUserPhysicalPages(
  1069.     IN HANDLE  ProcessHandle,
  1070.     IN PULONG  NumberOfPages,
  1071.     OUT PULONG  PageFrameNumbers);
  1072.  
  1073. NTOSAPI
  1074. NTSTATUS
  1075. NTAPI
  1076. ZwFreeUserPhysicalPages(
  1077.     IN HANDLE  ProcessHandle,
  1078.     IN OUT PULONG  NumberOfPages,
  1079.     IN PULONG  PageFrameNumbers);
  1080.  
  1081. NTOSAPI
  1082. NTSTATUS
  1083. NTAPI
  1084. ZwMapUserPhysicalPages(
  1085.     IN PVOID  BaseAddress,
  1086.     IN PULONG  NumberOfPages,
  1087.     IN PULONG  PageFrameNumbers);
  1088.  
  1089. NTOSAPI
  1090. NTSTATUS
  1091. NTAPI
  1092. ZwMapUserPhysicalPagesScatter(
  1093.     IN PVOID  *BaseAddresses,
  1094.     IN PULONG  NumberOfPages,
  1095.     IN PULONG  PageFrameNumbers);
  1096.  
  1097. NTOSAPI
  1098. NTSTATUS
  1099. NTAPI
  1100. ZwGetWriteWatch(
  1101.     IN HANDLE  ProcessHandle,
  1102.     IN ULONG  Flags,
  1103.     IN PVOID  BaseAddress,
  1104.     IN ULONG  RegionSize,
  1105.     OUT PULONG  Buffer,
  1106.     IN OUT PULONG  BufferEntries,
  1107.     OUT PULONG  Granularity);
  1108.  
  1109. NTOSAPI
  1110. NTSTATUS
  1111. NTAPI
  1112. ZwResetWriteWatch(
  1113.     IN HANDLE  ProcessHandle,
  1114.     IN PVOID  BaseAddress,
  1115.     IN ULONG  RegionSize);
  1116.  
  1117.  
  1118.  
  1119.  
  1120. /* Sections */
  1121.  
  1122. typedef enum _SECTION_INFORMATION_CLASS {
  1123.   SectionBasicInformation,
  1124.   SectionImageInformation
  1125. } SECTION_INFORMATION_CLASS;
  1126.  
  1127. NTOSAPI
  1128. NTSTATUS
  1129. NTAPI
  1130. NtCreateSection(
  1131.   OUT PHANDLE  SectionHandle,
  1132.   IN ACCESS_MASK  DesiredAccess,
  1133.   IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1134.   IN PLARGE_INTEGER  SectionSize  OPTIONAL,
  1135.   IN ULONG  Protect,
  1136.   IN ULONG  Attributes,
  1137.   IN HANDLE  FileHandle);
  1138.  
  1139. NTOSAPI
  1140. NTSTATUS
  1141. NTAPI
  1142. ZwCreateSection(
  1143.   OUT PHANDLE  SectionHandle,
  1144.   IN ACCESS_MASK  DesiredAccess,
  1145.   IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1146.   IN PLARGE_INTEGER  SectionSize  OPTIONAL,
  1147.   IN ULONG  Protect,
  1148.   IN ULONG  Attributes,
  1149.   IN HANDLE  FileHandle);
  1150.  
  1151. NTOSAPI
  1152. NTSTATUS
  1153. NTAPI
  1154. ZwQuerySection(
  1155.     IN HANDLE  SectionHandle,
  1156.     IN SECTION_INFORMATION_CLASS  SectionInformationClass,
  1157.     OUT PVOID  SectionInformation,
  1158.     IN ULONG  SectionInformationLength,
  1159.   OUT PULONG  ResultLength  OPTIONAL);
  1160.  
  1161. NTOSAPI
  1162. NTSTATUS
  1163. NTAPI
  1164. ZwExtendSection(
  1165.     IN HANDLE  SectionHandle,
  1166.     IN PLARGE_INTEGER  SectionSize);
  1167.  
  1168. NTOSAPI
  1169. NTSTATUS
  1170. NTAPI
  1171. ZwAreMappedFilesTheSame(
  1172.     IN PVOID  Address1,
  1173.     IN PVOID  Address2);
  1174.  
  1175.  
  1176.  
  1177.  
  1178. /* Threads */
  1179.  
  1180. typedef struct _USER_STACK {
  1181.     PVOID  FixedStackBase;
  1182.     PVOID  FixedStackLimit;
  1183.     PVOID  ExpandableStackBase;
  1184.     PVOID  ExpandableStackLimit;
  1185.     PVOID  ExpandableStackBottom;
  1186. } USER_STACK, *PUSER_STACK;
  1187.  
  1188. NTOSAPI
  1189. NTSTATUS
  1190. NTAPI
  1191. ZwCreateThread(
  1192.     OUT PHANDLE  ThreadHandle,
  1193.     IN ACCESS_MASK  DesiredAccess,
  1194.     IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1195.     IN HANDLE  ProcessHandle,
  1196.     OUT PCLIENT_ID  ClientId,
  1197.     IN PCONTEXT  ThreadContext,
  1198.     IN PUSER_STACK  UserStack,
  1199.     IN BOOLEAN  CreateSuspended);
  1200.  
  1201. NTOSAPI
  1202. NTSTATUS
  1203. NTAPI
  1204. NtOpenThread(
  1205.   OUT PHANDLE  ThreadHandle,
  1206.   IN ACCESS_MASK  DesiredAccess,
  1207.   IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1208.   IN PCLIENT_ID  ClientId);
  1209.  
  1210. NTOSAPI
  1211. NTSTATUS
  1212. NTAPI
  1213. ZwOpenThread(
  1214.   OUT PHANDLE  ThreadHandle,
  1215.   IN ACCESS_MASK  DesiredAccess,
  1216.   IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1217.   IN PCLIENT_ID  ClientId);
  1218.  
  1219. NTOSAPI
  1220. NTSTATUS
  1221. NTAPI
  1222. ZwTerminateThread(
  1223.     IN HANDLE  ThreadHandle  OPTIONAL,
  1224.     IN NTSTATUS  ExitStatus);
  1225.  
  1226. NTOSAPI
  1227. NTSTATUS
  1228. NTAPI
  1229. NtQueryInformationThread(
  1230.   IN HANDLE  ThreadHandle,
  1231.   IN THREADINFOCLASS  ThreadInformationClass,
  1232.   OUT PVOID  ThreadInformation,
  1233.   IN ULONG  ThreadInformationLength,
  1234.   OUT PULONG  ReturnLength  OPTIONAL);
  1235.  
  1236. NTOSAPI
  1237. NTSTATUS
  1238. NTAPI
  1239. ZwQueryInformationThread(
  1240.   IN HANDLE  ThreadHandle,
  1241.   IN THREADINFOCLASS  ThreadInformationClass,
  1242.   OUT PVOID  ThreadInformation,
  1243.   IN ULONG  ThreadInformationLength,
  1244.   OUT PULONG  ReturnLength  OPTIONAL);
  1245.  
  1246. NTOSAPI
  1247. NTSTATUS
  1248. NTAPI
  1249. NtSetInformationThread(
  1250.   IN HANDLE  ThreadHandle,
  1251.   IN THREADINFOCLASS  ThreadInformationClass,
  1252.   IN PVOID  ThreadInformation,
  1253.   IN ULONG  ThreadInformationLength);
  1254.  
  1255. typedef struct _THREAD_BASIC_INFORMATION {
  1256.     NTSTATUS  ExitStatus;
  1257.     PNT_TIB  TebBaseAddress;
  1258.     CLIENT_ID  ClientId;
  1259.     KAFFINITY  AffinityMask;
  1260.     KPRIORITY  Priority;
  1261.     KPRIORITY  BasePriority;
  1262. } THREAD_BASIC_INFORMATION, *PTHREAD_BASIC_INFORMATION;
  1263.  
  1264. typedef struct _KERNEL_USER_TIMES {
  1265.     LARGE_INTEGER  CreateTime;
  1266.     LARGE_INTEGER  ExitTime;
  1267.     LARGE_INTEGER  KernelTime;
  1268.     LARGE_INTEGER  UserTime;
  1269. } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
  1270.  
  1271. NTOSAPI
  1272. NTSTATUS
  1273. NTAPI
  1274. ZwSuspendThread(
  1275.   IN HANDLE  ThreadHandle,
  1276.   OUT PULONG  PreviousSuspendCount  OPTIONAL);
  1277.  
  1278. NTOSAPI
  1279. NTSTATUS
  1280. NTAPI
  1281. ZwResumeThread(
  1282.   IN HANDLE  ThreadHandle,
  1283.   OUT PULONG  PreviousSuspendCount  OPTIONAL);
  1284.  
  1285. NTOSAPI
  1286. NTSTATUS
  1287. NTAPI
  1288. ZwGetContextThread(
  1289.   IN HANDLE  ThreadHandle,
  1290.   OUT PCONTEXT  Context);
  1291.  
  1292. NTOSAPI
  1293. NTSTATUS
  1294. NTAPI
  1295. ZwSetContextThread(
  1296.     IN HANDLE  ThreadHandle,
  1297.     IN PCONTEXT  Context);
  1298.  
  1299. NTOSAPI
  1300. NTSTATUS
  1301. NTAPI
  1302. ZwQueueApcThread(
  1303.     IN HANDLE  ThreadHandle,
  1304.     IN PKNORMAL_ROUTINE  ApcRoutine,
  1305.     IN PVOID  ApcContext  OPTIONAL,
  1306.     IN PVOID  Argument1  OPTIONAL,
  1307.     IN PVOID  Argument2  OPTIONAL);
  1308.  
  1309. NTOSAPI
  1310. NTSTATUS
  1311. NTAPI
  1312. ZwTestAlert(
  1313.   VOID);
  1314.  
  1315. NTOSAPI
  1316. NTSTATUS
  1317. NTAPI
  1318. ZwAlertThread(
  1319.   IN HANDLE  ThreadHandle);
  1320.  
  1321. NTOSAPI
  1322. NTSTATUS
  1323. NTAPI
  1324. ZwAlertResumeThread(
  1325.   IN HANDLE  ThreadHandle,
  1326.   OUT PULONG  PreviousSuspendCount  OPTIONAL);
  1327.  
  1328. NTOSAPI
  1329. NTSTATUS
  1330. NTAPI
  1331. ZwRegisterThreadTerminatePort(
  1332.   IN HANDLE  PortHandle);
  1333.  
  1334. NTOSAPI
  1335. NTSTATUS
  1336. NTAPI
  1337. ZwImpersonateThread(
  1338.     IN HANDLE  ThreadHandle,
  1339.     IN HANDLE  TargetThreadHandle,
  1340.     IN PSECURITY_QUALITY_OF_SERVICE  SecurityQos);
  1341.  
  1342. NTOSAPI
  1343. NTSTATUS
  1344. NTAPI
  1345. ZwImpersonateAnonymousToken(
  1346.   IN HANDLE  ThreadHandle);
  1347.  
  1348.  
  1349.  
  1350.  
  1351. /* Processes */
  1352.  
  1353. NTOSAPI
  1354. NTSTATUS
  1355. NTAPI
  1356. ZwCreateProcess(
  1357.     OUT PHANDLE  ProcessHandle,
  1358.     IN ACCESS_MASK  DesiredAccess,
  1359.     IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1360.     IN HANDLE  InheritFromProcessHandle,
  1361.     IN BOOLEAN  InheritHandles,
  1362.     IN HANDLE  SectionHandle  OPTIONAL,
  1363.     IN HANDLE  DebugPort  OPTIONAL,
  1364.     IN HANDLE  ExceptionPort  OPTIONAL);
  1365.  
  1366. NTOSAPI
  1367. NTSTATUS
  1368. NTAPI
  1369. ZwCreateProcess(
  1370.     OUT PHANDLE  ProcessHandle,
  1371.     IN ACCESS_MASK  DesiredAccess,
  1372.     IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1373.     IN HANDLE  InheritFromProcessHandle,
  1374.     IN BOOLEAN  InheritHandles,
  1375.     IN HANDLE  SectionHandle  OPTIONAL,
  1376.     IN HANDLE  DebugPort  OPTIONAL,
  1377.     IN HANDLE  ExceptionPort  OPTIONAL);
  1378.  
  1379. NTOSAPI
  1380. NTSTATUS
  1381. NTAPI
  1382. ZwTerminateProcess(
  1383.     IN HANDLE  ProcessHandle  OPTIONAL,
  1384.     IN NTSTATUS  ExitStatus);
  1385.  
  1386. NTOSAPI
  1387. NTSTATUS
  1388. NTAPI
  1389. ZwQueryInformationProcess(
  1390.   IN HANDLE  ProcessHandle,
  1391.   IN PROCESSINFOCLASS  ProcessInformationClass,
  1392.   OUT PVOID  ProcessInformation,
  1393.   IN ULONG  ProcessInformationLength,
  1394.   OUT PULONG  ReturnLength  OPTIONAL);
  1395.  
  1396. NTOSAPI
  1397. NTSTATUS
  1398. NTAPI
  1399. NtSetInformationProcess(
  1400.   IN HANDLE  ProcessHandle,
  1401.   IN PROCESSINFOCLASS  ProcessInformationClass,
  1402.   IN PVOID  ProcessInformation,
  1403.   IN ULONG  ProcessInformationLength);
  1404.  
  1405. NTOSAPI
  1406. NTSTATUS
  1407. NTAPI
  1408. ZwSetInformationProcess(
  1409.   IN HANDLE  ProcessHandle,
  1410.   IN PROCESSINFOCLASS  ProcessInformationClass,
  1411.   IN PVOID  ProcessInformation,
  1412.   IN ULONG  ProcessInformationLength);
  1413.  
  1414. typedef struct _PROCESS_BASIC_INFORMATION {
  1415.     NTSTATUS  ExitStatus;
  1416.     PPEB  PebBaseAddress;
  1417.     KAFFINITY  AffinityMask;
  1418.     KPRIORITY  BasePriority;
  1419.     ULONG  UniqueProcessId;
  1420.     ULONG  InheritedFromUniqueProcessId;
  1421. } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
  1422.  
  1423. typedef struct _PROCESS_ACCESS_TOKEN {
  1424.   HANDLE  Token;
  1425.   HANDLE  Thread;
  1426. } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
  1427.  
  1428. /* DefaultHardErrorMode constants */
  1429. /* also in winbase.h */
  1430. #define SEM_FAILCRITICALERRORS            0x0001
  1431. #define SEM_NOGPFAULTERRORBOX             0x0002
  1432. #define SEM_NOALIGNMENTFAULTEXCEPT        0x0004
  1433. #define SEM_NOOPENFILEERRORBOX            0x8000
  1434. /* end winbase.h */
  1435. typedef struct _POOLED_USAGE_AND_LIMITS {
  1436.     ULONG  PeakPagedPoolUsage;
  1437.     ULONG  PagedPoolUsage;
  1438.     ULONG  PagedPoolLimit;
  1439.     ULONG  PeakNonPagedPoolUsage;
  1440.     ULONG  NonPagedPoolUsage;
  1441.     ULONG  NonPagedPoolLimit;
  1442.     ULONG  PeakPagefileUsage;
  1443.     ULONG  PagefileUsage;
  1444.     ULONG  PagefileLimit;
  1445. } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
  1446.  
  1447. typedef struct _PROCESS_WS_WATCH_INFORMATION {
  1448.   PVOID  FaultingPc;
  1449.   PVOID  FaultingVa;
  1450. } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
  1451.  
  1452. /* PROCESS_PRIORITY_CLASS.PriorityClass constants */
  1453. #define PC_IDLE                           1
  1454. #define PC_NORMAL                         2
  1455. #define PC_HIGH                           3
  1456. #define PC_REALTIME                       4
  1457. #define PC_BELOW_NORMAL                   5
  1458. #define PC_ABOVE_NORMAL                   6
  1459.  
  1460. typedef struct _PROCESS_PRIORITY_CLASS {
  1461.   BOOLEAN  Foreground;
  1462.   UCHAR  PriorityClass;
  1463. } PROCESS_PRIORITY_CLASS, *PPROCESS_PRIORITY_CLASS;
  1464.  
  1465. /* PROCESS_DEVICEMAP_INFORMATION.DriveType constants */
  1466. #define DRIVE_UNKNOWN                     0
  1467. #define DRIVE_NO_ROOT_DIR                 1
  1468. #define DRIVE_REMOVABLE                   2
  1469. #define DRIVE_FIXED                       3
  1470. #define DRIVE_REMOTE                      4
  1471. #define DRIVE_CDROM                       5
  1472. #define DRIVE_RAMDISK                     6
  1473.  
  1474. typedef struct _PROCESS_DEVICEMAP_INFORMATION {
  1475.     _ANONYMOUS_UNION union {
  1476.         struct {
  1477.           HANDLE  DirectoryHandle;
  1478.         } Set;
  1479.         struct {
  1480.           ULONG  DriveMap;
  1481.           UCHAR  DriveType[32];
  1482.         } Query;
  1483.     } DUMMYUNIONNAME;
  1484. } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
  1485.  
  1486. typedef struct _PROCESS_SESSION_INFORMATION {
  1487.   ULONG  SessionId;
  1488. } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
  1489.  
  1490. typedef struct _RTL_USER_PROCESS_PARAMETERS {
  1491.     ULONG  AllocationSize;
  1492.     ULONG  Size;
  1493.     ULONG  Flags;
  1494.     ULONG  DebugFlags;
  1495.     HANDLE  hConsole;
  1496.     ULONG  ProcessGroup;
  1497.     HANDLE  hStdInput;
  1498.     HANDLE  hStdOutput;
  1499.     HANDLE  hStdError;
  1500.     UNICODE_STRING  CurrentDirectoryName;
  1501.     HANDLE  CurrentDirectoryHandle;
  1502.     UNICODE_STRING  DllPath;
  1503.     UNICODE_STRING  ImagePathName;
  1504.     UNICODE_STRING  CommandLine;
  1505.     PWSTR  Environment;
  1506.     ULONG  dwX;
  1507.     ULONG  dwY;
  1508.     ULONG  dwXSize;
  1509.     ULONG  dwYSize;
  1510.     ULONG  dwXCountChars;
  1511.     ULONG  dwYCountChars;
  1512.     ULONG  dwFillAttribute;
  1513.     ULONG  dwFlags;
  1514.     ULONG  wShowWindow;
  1515.     UNICODE_STRING  WindowTitle;
  1516.     UNICODE_STRING  DesktopInfo;
  1517.     UNICODE_STRING  ShellInfo;
  1518.     UNICODE_STRING  RuntimeInfo;
  1519. } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS;
  1520.  
  1521. NTSTATUS
  1522. NTAPI
  1523. RtlCreateProcessParameters(
  1524.     OUT PRTL_USER_PROCESS_PARAMETERS  *ProcessParameters,
  1525.     IN PUNICODE_STRING  ImageFile,
  1526.     IN PUNICODE_STRING  DllPath  OPTIONAL,
  1527.     IN PUNICODE_STRING  CurrentDirectory  OPTIONAL,
  1528.     IN PUNICODE_STRING  CommandLine  OPTIONAL,
  1529.     IN PWSTR  Environment OPTIONAL,
  1530.     IN PUNICODE_STRING  WindowTitle  OPTIONAL,
  1531.     IN PUNICODE_STRING  DesktopInfo  OPTIONAL,
  1532.     IN PUNICODE_STRING  ShellInfo  OPTIONAL,
  1533.     IN PUNICODE_STRING  RuntimeInfo  OPTIONAL);
  1534.  
  1535. NTSTATUS
  1536. NTAPI
  1537. RtlDestroyProcessParameters(
  1538.   IN PRTL_USER_PROCESS_PARAMETERS  ProcessParameters);
  1539.  
  1540. typedef struct _DEBUG_BUFFER {
  1541.     HANDLE  SectionHandle;
  1542.     PVOID  SectionBase;
  1543.     PVOID  RemoteSectionBase;
  1544.     ULONG  SectionBaseDelta;
  1545.     HANDLE  EventPairHandle;
  1546.     ULONG  Unknown[2];
  1547.     HANDLE  RemoteThreadHandle;
  1548.     ULONG  InfoClassMask;
  1549.     ULONG  SizeOfInfo;
  1550.     ULONG  AllocatedSize;
  1551.     ULONG  SectionSize;
  1552.     PVOID  ModuleInformation;
  1553.     PVOID  BackTraceInformation;
  1554.     PVOID  HeapInformation;
  1555.     PVOID  LockInformation;
  1556.     PVOID  Reserved[8];
  1557. } DEBUG_BUFFER, *PDEBUG_BUFFER;
  1558.  
  1559. PDEBUG_BUFFER
  1560. NTAPI
  1561. RtlCreateQueryDebugBuffer(
  1562.     IN ULONG  Size,
  1563.     IN BOOLEAN  EventPair);
  1564.  
  1565. /* RtlQueryProcessDebugInformation.DebugInfoClassMask constants */
  1566. #define PDI_MODULES                       0x01
  1567. #define PDI_BACKTRACE                     0x02
  1568. #define PDI_HEAPS                         0x04
  1569. #define PDI_HEAP_TAGS                     0x08
  1570. #define PDI_HEAP_BLOCKS                   0x10
  1571. #define PDI_LOCKS                         0x20
  1572.  
  1573. NTSTATUS
  1574. NTAPI
  1575. RtlQueryProcessDebugInformation(
  1576.     IN ULONG  ProcessId,
  1577.     IN ULONG  DebugInfoClassMask,
  1578.     IN OUT PDEBUG_BUFFER  DebugBuffer);
  1579.  
  1580. NTSTATUS
  1581. NTAPI
  1582. RtlDestroyQueryDebugBuffer(
  1583.   IN PDEBUG_BUFFER  DebugBuffer);
  1584.  
  1585. /* DEBUG_MODULE_INFORMATION.Flags constants */
  1586. #define LDRP_STATIC_LINK                  0x00000002
  1587. #define LDRP_IMAGE_DLL                    0x00000004
  1588. #define LDRP_LOAD_IN_PROGRESS             0x00001000
  1589. #define LDRP_UNLOAD_IN_PROGRESS           0x00002000
  1590. #define LDRP_ENTRY_PROCESSED              0x00004000
  1591. #define LDRP_ENTRY_INSERTED               0x00008000
  1592. #define LDRP_CURRENT_LOAD                 0x00010000
  1593. #define LDRP_FAILED_BUILTIN_LOAD          0x00020000
  1594. #define LDRP_DONT_CALL_FOR_THREADS        0x00040000
  1595. #define LDRP_PROCESS_ATTACH_CALLED        0x00080000
  1596. #define LDRP_DEBUG_SYMBOLS_LOADED         0x00100000
  1597. #define LDRP_IMAGE_NOT_AT_BASE            0x00200000
  1598. #define LDRP_WX86_IGNORE_MACHINETYPE      0x00400000
  1599.  
  1600. typedef struct _DEBUG_MODULE_INFORMATION {
  1601.     ULONG  Reserved[2];
  1602.     ULONG  Base;
  1603.     ULONG  Size;
  1604.     ULONG  Flags;
  1605.     USHORT  Index;
  1606.     USHORT  Unknown;
  1607.     USHORT  LoadCount;
  1608.     USHORT  ModuleNameOffset;
  1609.     CHAR  ImageName[256];
  1610. } DEBUG_MODULE_INFORMATION, *PDEBUG_MODULE_INFORMATION;
  1611.  
  1612. typedef struct _DEBUG_HEAP_INFORMATION {
  1613.     ULONG  Base;
  1614.     ULONG  Flags;
  1615.     USHORT  Granularity;
  1616.     USHORT  Unknown;
  1617.     ULONG  Allocated;
  1618.     ULONG  Committed;
  1619.     ULONG  TagCount;
  1620.     ULONG  BlockCount;
  1621.     ULONG  Reserved[7];
  1622.     PVOID  Tags;
  1623.     PVOID  Blocks;
  1624. } DEBUG_HEAP_INFORMATION, *PDEBUG_HEAP_INFORMATION;
  1625.  
  1626. typedef struct _DEBUG_LOCK_INFORMATION {
  1627.     PVOID  Address;
  1628.     USHORT  Type;
  1629.     USHORT  CreatorBackTraceIndex;
  1630.     ULONG  OwnerThreadId;
  1631.     ULONG  ActiveCount;
  1632.     ULONG  ContentionCount;
  1633.     ULONG  EntryCount;
  1634.     ULONG  RecursionCount;
  1635.     ULONG  NumberOfSharedWaiters;
  1636.     ULONG  NumberOfExclusiveWaiters;
  1637. } DEBUG_LOCK_INFORMATION, *PDEBUG_LOCK_INFORMATION;
  1638.  
  1639.  
  1640.  
  1641. /* Jobs */
  1642.  
  1643. NTOSAPI
  1644. NTSTATUS
  1645. NTAPI
  1646. ZwCreateJobObject(
  1647.     OUT PHANDLE  JobHandle,
  1648.     IN ACCESS_MASK  DesiredAccess,
  1649.     IN POBJECT_ATTRIBUTES  ObjectAttributes);
  1650.  
  1651. NTOSAPI
  1652. NTSTATUS
  1653. NTAPI
  1654. ZwOpenJobObject(
  1655.     OUT PHANDLE  JobHandle,
  1656.     IN ACCESS_MASK  DesiredAccess,
  1657.     IN POBJECT_ATTRIBUTES  ObjectAttributes);
  1658.  
  1659. NTOSAPI
  1660. NTSTATUS
  1661. NTAPI
  1662. ZwTerminateJobObject(
  1663.     IN HANDLE  JobHandle,
  1664.     IN NTSTATUS  ExitStatus);
  1665.  
  1666. NTOSAPI
  1667. NTSTATUS
  1668. NTAPI
  1669. ZwAssignProcessToJobObject(
  1670.     IN HANDLE  JobHandle,
  1671.     IN HANDLE  ProcessHandle);
  1672.  
  1673. NTOSAPI
  1674. NTSTATUS
  1675. NTAPI
  1676. ZwQueryInformationJobObject(
  1677.     IN HANDLE  JobHandle,
  1678.     IN JOBOBJECTINFOCLASS  JobInformationClass,
  1679.     OUT PVOID  JobInformation,
  1680.     IN ULONG  JobInformationLength,
  1681.     OUT PULONG  ReturnLength  OPTIONAL);
  1682.  
  1683. NTOSAPI
  1684. NTSTATUS
  1685. NTAPI
  1686. ZwSetInformationJobObject(
  1687.     IN HANDLE  JobHandle,
  1688.     IN JOBOBJECTINFOCLASS  JobInformationClass,
  1689.     IN PVOID  JobInformation,
  1690.     IN ULONG  JobInformationLength);
  1691.  
  1692.  
  1693. /* Tokens */
  1694.  
  1695. NTOSAPI
  1696. NTSTATUS
  1697. NTAPI
  1698. ZwCreateToken(
  1699. OUT PHANDLE TokenHandle,
  1700. IN ACCESS_MASK DesiredAccess,
  1701. IN POBJECT_ATTRIBUTES ObjectAttributes,
  1702. IN TOKEN_TYPE Type,
  1703. IN PLUID AuthenticationId,
  1704. IN PLARGE_INTEGER ExpirationTime,
  1705. IN PTOKEN_USER User,
  1706. IN PTOKEN_GROUPS Groups,
  1707. IN PTOKEN_PRIVILEGES Privileges,
  1708. IN PTOKEN_OWNER Owner,
  1709. IN PTOKEN_PRIMARY_GROUP PrimaryGroup,
  1710. IN PTOKEN_DEFAULT_DACL DefaultDacl,
  1711. IN PTOKEN_SOURCE Source
  1712. );
  1713.  
  1714. NTOSAPI
  1715. NTSTATUS
  1716. NTAPI
  1717. NtOpenProcessToken(
  1718.   IN HANDLE  ProcessHandle,
  1719.   IN ACCESS_MASK  DesiredAccess,
  1720.   OUT PHANDLE  TokenHandle);
  1721.  
  1722. NTOSAPI
  1723. NTSTATUS
  1724. NTAPI
  1725. ZwOpenProcessToken(
  1726.   IN HANDLE  ProcessHandle,
  1727.   IN ACCESS_MASK  DesiredAccess,
  1728.   OUT PHANDLE  TokenHandle);
  1729.  
  1730. NTOSAPI
  1731. NTSTATUS
  1732. NTAPI
  1733. NtOpenThreadToken(
  1734.   IN HANDLE  ThreadHandle,
  1735.   IN ACCESS_MASK  DesiredAccess,
  1736.   IN BOOLEAN  OpenAsSelf,
  1737.   OUT PHANDLE  TokenHandle);
  1738.  
  1739. NTOSAPI
  1740. NTSTATUS
  1741. NTAPI
  1742. ZwOpenThreadToken(
  1743.   IN HANDLE  ThreadHandle,
  1744.   IN ACCESS_MASK  DesiredAccess,
  1745.   IN BOOLEAN  OpenAsSelf,
  1746.   OUT PHANDLE  TokenHandle);
  1747.  
  1748. NTOSAPI
  1749. NTSTATUS
  1750. NTAPI
  1751. NtDuplicateToken(
  1752.   IN HANDLE  ExistingTokenHandle,
  1753.   IN ACCESS_MASK  DesiredAccess,
  1754.   IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1755.   IN BOOLEAN  EffectiveOnly,
  1756.   IN TOKEN_TYPE  TokenType,
  1757.   OUT PHANDLE  NewTokenHandle);
  1758.  
  1759. NTOSAPI
  1760. NTSTATUS
  1761. NTAPI
  1762. ZwDuplicateToken(
  1763.   IN HANDLE  ExistingTokenHandle,
  1764.   IN ACCESS_MASK  DesiredAccess,
  1765.   IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1766.   IN BOOLEAN  EffectiveOnly,
  1767.   IN TOKEN_TYPE  TokenType,
  1768.   OUT PHANDLE  NewTokenHandle);
  1769.  
  1770. NTOSAPI
  1771. NTSTATUS
  1772. NTAPI
  1773. ZwFilterToken(
  1774.     IN HANDLE  ExistingTokenHandle,
  1775.     IN ULONG  Flags,
  1776.     IN PTOKEN_GROUPS  SidsToDisable,
  1777.     IN PTOKEN_PRIVILEGES  PrivilegesToDelete,
  1778.     IN PTOKEN_GROUPS  SidsToRestricted,
  1779.     OUT PHANDLE  NewTokenHandle);
  1780.  
  1781. NTOSAPI
  1782. NTSTATUS
  1783. NTAPI
  1784. NtAdjustPrivilegesToken(
  1785.   IN HANDLE  TokenHandle,
  1786.   IN BOOLEAN  DisableAllPrivileges,
  1787.   IN PTOKEN_PRIVILEGES  NewState,
  1788.   IN ULONG  BufferLength,
  1789.   OUT PTOKEN_PRIVILEGES  PreviousState  OPTIONAL,
  1790.   OUT PULONG  ReturnLength);
  1791.  
  1792. NTOSAPI
  1793. NTSTATUS
  1794. NTAPI
  1795. ZwAdjustPrivilegesToken(
  1796.   IN HANDLE  TokenHandle,
  1797.   IN BOOLEAN  DisableAllPrivileges,
  1798.   IN PTOKEN_PRIVILEGES  NewState,
  1799.   IN ULONG  BufferLength,
  1800.   OUT PTOKEN_PRIVILEGES  PreviousState  OPTIONAL,
  1801.   OUT PULONG  ReturnLength);
  1802.  
  1803. NTOSAPI
  1804. NTSTATUS
  1805. NTAPI
  1806. ZwAdjustGroupsToken(
  1807.     IN HANDLE  TokenHandle,
  1808.     IN BOOLEAN  ResetToDefault,
  1809.     IN PTOKEN_GROUPS  NewState,
  1810.     IN ULONG  BufferLength,
  1811.     OUT PTOKEN_GROUPS  PreviousState  OPTIONAL,
  1812.     OUT PULONG  ReturnLength);
  1813.  
  1814. NTOSAPI
  1815. NTSTATUS
  1816. NTAPI
  1817. NtQueryInformationToken(
  1818.   IN HANDLE  TokenHandle,
  1819.   IN TOKEN_INFORMATION_CLASS  TokenInformationClass,
  1820.   OUT PVOID  TokenInformation,
  1821.   IN ULONG  TokenInformationLength,
  1822.   OUT PULONG  ReturnLength);
  1823.  
  1824. NTOSAPI
  1825. NTSTATUS
  1826. NTAPI
  1827. ZwQueryInformationToken(
  1828.   IN HANDLE  TokenHandle,
  1829.   IN TOKEN_INFORMATION_CLASS  TokenInformationClass,
  1830.   OUT PVOID  TokenInformation,
  1831.   IN ULONG  TokenInformationLength,
  1832.   OUT PULONG  ReturnLength);
  1833.  
  1834. NTOSAPI
  1835. NTSTATUS
  1836. NTAPI
  1837. ZwSetInformationToken(
  1838.     IN HANDLE  TokenHandle,
  1839.     IN TOKEN_INFORMATION_CLASS  TokenInformationClass,
  1840.     IN PVOID  TokenInformation,
  1841.   IN ULONG  TokenInformationLength);
  1842.  
  1843.  
  1844.  
  1845.  
  1846. /* Time */
  1847.  
  1848. NTOSAPI
  1849. NTSTATUS
  1850. NTAPI
  1851. ZwQuerySystemTime(
  1852.   OUT PLARGE_INTEGER  CurrentTime);
  1853.  
  1854. NTOSAPI
  1855. NTSTATUS
  1856. NTAPI
  1857. ZwSetSystemTime(
  1858.   IN PLARGE_INTEGER  NewTime,
  1859.   OUT PLARGE_INTEGER  OldTime  OPTIONAL);
  1860.  
  1861. NTOSAPI
  1862. NTSTATUS
  1863. NTAPI
  1864. ZwQueryPerformanceCounter(
  1865.   OUT PLARGE_INTEGER  PerformanceCount,
  1866.   OUT PLARGE_INTEGER  PerformanceFrequency  OPTIONAL);
  1867.  
  1868. NTOSAPI
  1869. NTSTATUS
  1870. NTAPI
  1871. ZwQueryPerformanceCounter(
  1872.   OUT PLARGE_INTEGER  PerformanceCount,
  1873.   OUT PLARGE_INTEGER  PerformanceFrequency  OPTIONAL);
  1874.  
  1875. NTOSAPI
  1876. NTSTATUS
  1877. NTAPI
  1878. ZwQueryTimerResolution(
  1879.     OUT PULONG  CoarsestResolution,
  1880.     OUT PULONG  FinestResolution,
  1881.     OUT PULONG  ActualResolution);
  1882.  
  1883. NTOSAPI
  1884. NTSTATUS
  1885. NTAPI
  1886. ZwDelayExecution(
  1887.   IN BOOLEAN  Alertable,
  1888.   IN PLARGE_INTEGER  Interval);
  1889.  
  1890. NTOSAPI
  1891. NTSTATUS
  1892. NTAPI
  1893. ZwYieldExecution(
  1894.   VOID);
  1895.  
  1896. NTOSAPI
  1897. ULONG
  1898. NTAPI
  1899. ZwGetTickCount(
  1900.   VOID);
  1901.  
  1902.  
  1903.  
  1904.  
  1905. /* Execution profiling */
  1906.  
  1907. NTOSAPI
  1908. NTSTATUS
  1909. NTAPI
  1910. ZwCreateProfile(
  1911.     OUT PHANDLE  ProfileHandle,
  1912.     IN HANDLE  ProcessHandle,
  1913.     IN PVOID  Base,
  1914.     IN ULONG  Size,
  1915.     IN ULONG  BucketShift,
  1916.     IN PULONG  Buffer,
  1917.     IN ULONG  BufferLength,
  1918.     IN KPROFILE_SOURCE  Source,
  1919.     IN ULONG  ProcessorMask);
  1920.  
  1921. NTOSAPI
  1922. NTSTATUS
  1923. NTAPI
  1924. ZwSetIntervalProfile(
  1925.   IN ULONG  Interval,
  1926.   IN KPROFILE_SOURCE  Source);
  1927.  
  1928. NTOSAPI
  1929. NTSTATUS
  1930. NTAPI
  1931. ZwQueryIntervalProfile(
  1932.     IN KPROFILE_SOURCE  Source,
  1933.     OUT PULONG  Interval);
  1934.  
  1935. NTOSAPI
  1936. NTSTATUS
  1937. NTAPI
  1938. ZwStartProfile(
  1939.   IN HANDLE  ProfileHandle);
  1940.  
  1941. NTOSAPI
  1942. NTSTATUS
  1943. NTAPI
  1944. ZwStopProfile(
  1945.   IN HANDLE  ProfileHandle);
  1946.  
  1947. /* Local Procedure Call (LPC) */
  1948.  
  1949. typedef struct _LPC_MESSAGE {
  1950.     USHORT  DataSize;
  1951.     USHORT  MessageSize;
  1952.     USHORT  MessageType;
  1953.     USHORT  VirtualRangesOffset;
  1954.     CLIENT_ID  ClientId;
  1955.     ULONG  MessageId;
  1956.     ULONG  SectionSize;
  1957.     UCHAR  Data[ANYSIZE_ARRAY];
  1958. } LPC_MESSAGE, *PLPC_MESSAGE;
  1959.  
  1960. #define LPC_MESSAGE_BASE_SIZE    24
  1961.  
  1962. typedef enum _LPC_TYPE {
  1963.     LPC_NEW_MESSAGE,
  1964.     LPC_REQUEST,
  1965.     LPC_REPLY,
  1966.     LPC_DATAGRAM,
  1967.     LPC_LOST_REPLY,
  1968.     LPC_PORT_CLOSED,
  1969.     LPC_CLIENT_DIED,
  1970.     LPC_EXCEPTION,
  1971.     LPC_DEBUG_EVENT,
  1972.     LPC_ERROR_EVENT,
  1973.     LPC_CONNECTION_REQUEST,
  1974.     LPC_CONNECTION_REFUSED,
  1975.   LPC_MAXIMUM
  1976. } LPC_TYPE;
  1977.  
  1978. typedef struct _LPC_SECTION_WRITE {
  1979.     ULONG  Length;
  1980.     HANDLE  SectionHandle;
  1981.     ULONG  SectionOffset;
  1982.     ULONG  ViewSize;
  1983.     PVOID  ViewBase;
  1984.     PVOID  TargetViewBase;
  1985. } LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
  1986.  
  1987. typedef struct _LPC_SECTION_READ {
  1988.     ULONG  Length;
  1989.     ULONG  ViewSize;
  1990.     PVOID  ViewBase;
  1991. } LPC_SECTION_READ, *PLPC_SECTION_READ;
  1992.  
  1993. NTOSAPI
  1994. NTSTATUS
  1995. NTAPI
  1996. ZwCreatePort(
  1997.     OUT PHANDLE  PortHandle,
  1998.     IN POBJECT_ATTRIBUTES  ObjectAttributes,
  1999.     IN ULONG  MaxDataSize,
  2000.     IN ULONG  MaxMessageSize,
  2001.     IN ULONG  Reserved);
  2002.  
  2003. NTOSAPI
  2004. NTSTATUS
  2005. NTAPI
  2006. ZwCreateWaitablePort(
  2007.     OUT PHANDLE  PortHandle,
  2008.     IN POBJECT_ATTRIBUTES  ObjectAttributes,
  2009.     IN ULONG  MaxDataSize,
  2010.     IN ULONG  MaxMessageSize,
  2011.     IN ULONG  Reserved);
  2012.  
  2013. NTOSAPI
  2014. NTSTATUS
  2015. NTAPI
  2016. NtConnectPort(
  2017.   OUT PHANDLE  PortHandle,
  2018.   IN PUNICODE_STRING  PortName,
  2019.   IN PSECURITY_QUALITY_OF_SERVICE  SecurityQos,
  2020.   IN OUT PLPC_SECTION_WRITE  WriteSection  OPTIONAL,
  2021.   IN OUT PLPC_SECTION_READ  ReadSection  OPTIONAL,
  2022.   OUT PULONG  MaxMessageSize  OPTIONAL,
  2023.   IN OUT PVOID  ConnectData  OPTIONAL,
  2024.   IN OUT PULONG  ConnectDataLength  OPTIONAL);
  2025.  
  2026. NTOSAPI
  2027. NTSTATUS
  2028. NTAPI
  2029. ZwConnectPort(
  2030.   OUT PHANDLE  PortHandle,
  2031.   IN PUNICODE_STRING  PortName,
  2032.   IN PSECURITY_QUALITY_OF_SERVICE  SecurityQos,
  2033.   IN OUT PLPC_SECTION_WRITE  WriteSection  OPTIONAL,
  2034.   IN OUT PLPC_SECTION_READ  ReadSection  OPTIONAL,
  2035.   OUT PULONG  MaxMessageSize  OPTIONAL,
  2036.   IN OUT PVOID  ConnectData  OPTIONAL,
  2037.   IN OUT PULONG  ConnectDataLength  OPTIONAL);
  2038.  
  2039. NTOSAPI
  2040. NTSTATUS
  2041. NTAPI
  2042. ZwConnectPort(
  2043.     OUT PHANDLE  PortHandle,
  2044.     IN PUNICODE_STRING  PortName,
  2045.     IN PSECURITY_QUALITY_OF_SERVICE  SecurityQos,
  2046.     IN OUT PLPC_SECTION_WRITE  WriteSection  OPTIONAL,
  2047.     IN OUT PLPC_SECTION_READ  ReadSection  OPTIONAL,
  2048.     OUT PULONG  MaxMessageSize  OPTIONAL,
  2049.     IN OUT PVOID  ConnectData  OPTIONAL,
  2050.     IN OUT PULONG  ConnectDataLength  OPTIONAL);
  2051.  
  2052. NTOSAPI
  2053. NTSTATUS
  2054. NTAPI
  2055. ZwListenPort(
  2056.   IN HANDLE  PortHandle,
  2057.   OUT PLPC_MESSAGE  Message);
  2058.  
  2059. NTOSAPI
  2060. NTSTATUS
  2061. NTAPI
  2062. ZwAcceptConnectPort(
  2063.     OUT PHANDLE  PortHandle,
  2064.     IN ULONG  PortIdentifier,
  2065.     IN PLPC_MESSAGE  Message,
  2066.     IN BOOLEAN  Accept,
  2067.     IN OUT PLPC_SECTION_WRITE  WriteSection  OPTIONAL,
  2068.     IN OUT PLPC_SECTION_READ  ReadSection  OPTIONAL);
  2069.  
  2070. NTOSAPI
  2071. NTSTATUS
  2072. NTAPI
  2073. ZwCompleteConnectPort(
  2074.   IN HANDLE  PortHandle);
  2075.  
  2076. NTOSAPI
  2077. NTSTATUS
  2078. NTAPI
  2079. NtRequestPort(
  2080.   IN HANDLE  PortHandle,
  2081.   IN PLPC_MESSAGE  RequestMessage);
  2082.  
  2083. NTOSAPI
  2084. NTSTATUS
  2085. NTAPI
  2086. NtRequestWaitReplyPort(
  2087.   IN HANDLE  PortHandle,
  2088.   IN PLPC_MESSAGE  RequestMessage,
  2089.   OUT PLPC_MESSAGE  ReplyMessage);
  2090.  
  2091. NTOSAPI
  2092. NTSTATUS
  2093. NTAPI
  2094. ZwRequestWaitReplyPort(
  2095.   IN HANDLE  PortHandle,
  2096.   IN PLPC_MESSAGE  RequestMessage,
  2097.   OUT PLPC_MESSAGE  ReplyMessage);
  2098.  
  2099. NTOSAPI
  2100. NTSTATUS
  2101. NTAPI
  2102. ZwReplyPort(
  2103.     IN HANDLE  PortHandle,
  2104.     IN PLPC_MESSAGE  ReplyMessage);
  2105.  
  2106. NTOSAPI
  2107. NTSTATUS
  2108. NTAPI
  2109. ZwReplyWaitReplyPort(
  2110.     IN HANDLE  PortHandle,
  2111.     IN OUT PLPC_MESSAGE  ReplyMessage);
  2112.  
  2113. NTOSAPI
  2114. NTSTATUS
  2115. NTAPI
  2116. ZwReplyWaitReceivePort(
  2117.     IN HANDLE  PortHandle,
  2118.     OUT PULONG  PortIdentifier  OPTIONAL,
  2119.     IN PLPC_MESSAGE  ReplyMessage  OPTIONAL,
  2120.     OUT PLPC_MESSAGE  Message);
  2121.  
  2122. NTOSAPI
  2123. NTSTATUS
  2124. NTAPI
  2125. ZwReplyWaitReceivePortEx(
  2126.     IN HANDLE  PortHandle,
  2127.     OUT PULONG  PortIdentifier  OPTIONAL,
  2128.     IN PLPC_MESSAGE  ReplyMessage  OPTIONAL,
  2129.     OUT PLPC_MESSAGE  Message,
  2130.     IN PLARGE_INTEGER  Timeout);
  2131.  
  2132. NTOSAPI
  2133. NTSTATUS
  2134. NTAPI
  2135. ZwReadRequestData(
  2136.     IN HANDLE  PortHandle,
  2137.     IN PLPC_MESSAGE  Message,
  2138.     IN ULONG  Index,
  2139.     OUT PVOID  Buffer,
  2140.     IN ULONG  BufferLength,
  2141.     OUT PULONG  ReturnLength  OPTIONAL);
  2142.  
  2143. NTOSAPI
  2144. NTSTATUS
  2145. NTAPI
  2146. ZwWriteRequestData(
  2147.     IN HANDLE  PortHandle,
  2148.     IN PLPC_MESSAGE  Message,
  2149.     IN ULONG  Index,
  2150.     IN PVOID  Buffer,
  2151.     IN ULONG  BufferLength,
  2152.     OUT PULONG  ReturnLength  OPTIONAL);
  2153.  
  2154. typedef enum _PORT_INFORMATION_CLASS {
  2155.   PortBasicInformation
  2156. } PORT_INFORMATION_CLASS;
  2157.  
  2158. NTOSAPI
  2159. NTSTATUS
  2160. NTAPI
  2161. ZwQueryInformationPort(
  2162.     IN HANDLE  PortHandle,
  2163.     IN PORT_INFORMATION_CLASS  PortInformationClass,
  2164.     OUT PVOID  PortInformation,
  2165.     IN ULONG  PortInformationLength,
  2166.   OUT PULONG  ReturnLength  OPTIONAL);
  2167.  
  2168. NTOSAPI
  2169. NTSTATUS
  2170. NTAPI
  2171. ZwImpersonateClientOfPort(
  2172.   IN HANDLE  PortHandle,
  2173.   IN PLPC_MESSAGE  Message);
  2174.  
  2175.  
  2176.  
  2177.  
  2178. /* Files */
  2179.  
  2180. NTOSAPI
  2181. NTSTATUS
  2182. NTAPI
  2183. NtDeleteFile(
  2184.   IN POBJECT_ATTRIBUTES  ObjectAttributes);
  2185.  
  2186. NTOSAPI
  2187. NTSTATUS
  2188. NTAPI
  2189. ZwDeleteFile(
  2190.   IN POBJECT_ATTRIBUTES  ObjectAttributes);
  2191.  
  2192. NTOSAPI
  2193. NTSTATUS
  2194. NTAPI
  2195. ZwFlushBuffersFile(
  2196.     IN HANDLE  FileHandle,
  2197.     OUT PIO_STATUS_BLOCK  IoStatusBlock);
  2198.  
  2199. NTOSAPI
  2200. NTSTATUS
  2201. NTAPI
  2202. ZwCancelIoFile(
  2203.     IN HANDLE  FileHandle,
  2204.     OUT PIO_STATUS_BLOCK  IoStatusBlock);
  2205.  
  2206. NTOSAPI
  2207. NTSTATUS
  2208. NTAPI
  2209. ZwReadFileScatter(
  2210.     IN HANDLE  FileHandle,
  2211.     IN HANDLE  Event OPTIONAL,
  2212.     IN PIO_APC_ROUTINE  ApcRoutine  OPTIONAL,
  2213.     IN PVOID  ApcContext  OPTIONAL,
  2214.     OUT PIO_STATUS_BLOCK  IoStatusBlock,
  2215.     IN PFILE_SEGMENT_ELEMENT  Buffer,
  2216.     IN ULONG  Length,
  2217.     IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
  2218.     IN PULONG  Key  OPTIONAL);
  2219.  
  2220. NTOSAPI
  2221. NTSTATUS
  2222. NTAPI
  2223. ZwWriteFileGather(
  2224.     IN HANDLE  FileHandle,
  2225.     IN HANDLE  Event  OPTIONAL,
  2226.     IN PIO_APC_ROUTINE  ApcRoutine  OPTIONAL,
  2227.     IN PVOID  ApcContext  OPTIONAL,
  2228.     OUT PIO_STATUS_BLOCK  IoStatusBlock,
  2229.     IN PFILE_SEGMENT_ELEMENT  Buffer,
  2230.     IN ULONG  Length,
  2231.     IN PLARGE_INTEGER  ByteOffset  OPTIONAL,
  2232.     IN PULONG  Key  OPTIONAL);
  2233.  
  2234.  
  2235.  
  2236.  
  2237. /* Registry keys */
  2238.  
  2239. NTOSAPI
  2240. NTSTATUS
  2241. NTAPI
  2242. ZwSaveKey(
  2243.     IN HANDLE  KeyHandle,
  2244.     IN HANDLE  FileHandle);
  2245.  
  2246. NTOSAPI
  2247. NTSTATUS
  2248. NTAPI
  2249. ZwSaveMergedKeys(
  2250.     IN HANDLE  KeyHandle1,
  2251.     IN HANDLE  KeyHandle2,
  2252.     IN HANDLE  FileHandle);
  2253.  
  2254. NTOSAPI
  2255. NTSTATUS
  2256. NTAPI
  2257. ZwRestoreKey(
  2258.   IN HANDLE  KeyHandle,
  2259.   IN HANDLE  FileHandle,
  2260.   IN ULONG  Flags);
  2261.  
  2262. NTOSAPI
  2263. NTSTATUS
  2264. NTAPI
  2265. ZwLoadKey(
  2266.   IN POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2267.   IN POBJECT_ATTRIBUTES  FileObjectAttributes);
  2268.  
  2269. NTOSAPI
  2270. NTSTATUS
  2271. NTAPI
  2272. ZwLoadKey2(
  2273.     IN POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2274.     IN POBJECT_ATTRIBUTES  FileObjectAttributes,
  2275.     IN ULONG  Flags);
  2276.  
  2277. NTOSAPI
  2278. NTSTATUS
  2279. NTAPI
  2280. ZwUnloadKey(
  2281.   IN POBJECT_ATTRIBUTES  KeyObjectAttributes);
  2282.  
  2283. NTOSAPI
  2284. NTSTATUS
  2285. NTAPI
  2286. ZwQueryOpenSubKeys(
  2287.     IN POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2288.     OUT PULONG  NumberOfKeys);
  2289.  
  2290. NTOSAPI
  2291. NTSTATUS
  2292. NTAPI
  2293. ZwReplaceKey(
  2294.     IN POBJECT_ATTRIBUTES  NewFileObjectAttributes,
  2295.     IN HANDLE  KeyHandle,
  2296.     IN POBJECT_ATTRIBUTES  OldFileObjectAttributes);
  2297.  
  2298. typedef enum _KEY_SET_INFORMATION_CLASS {
  2299.   KeyLastWriteTimeInformation
  2300. } KEY_SET_INFORMATION_CLASS;
  2301.  
  2302. NTOSAPI
  2303. NTSTATUS
  2304. NTAPI
  2305. ZwSetInformationKey(
  2306.     IN HANDLE  KeyHandle,
  2307.     IN KEY_SET_INFORMATION_CLASS  KeyInformationClass,
  2308.     IN PVOID  KeyInformation,
  2309.     IN ULONG  KeyInformationLength);
  2310.  
  2311. typedef struct _KEY_LAST_WRITE_TIME_INFORMATION {
  2312.   LARGE_INTEGER LastWriteTime;
  2313. } KEY_LAST_WRITE_TIME_INFORMATION, *PKEY_LAST_WRITE_TIME_INFORMATION;
  2314.  
  2315. typedef struct _KEY_NAME_INFORMATION {
  2316.     ULONG NameLength;
  2317.     WCHAR Name[1];
  2318. } KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
  2319.  
  2320. NTOSAPI
  2321. NTSTATUS
  2322. NTAPI
  2323. ZwNotifyChangeKey(
  2324.     IN HANDLE  KeyHandle,
  2325.     IN HANDLE  EventHandle  OPTIONAL,
  2326.     IN PIO_APC_ROUTINE  ApcRoutine  OPTIONAL,
  2327.     IN PVOID  ApcContext  OPTIONAL,
  2328.     OUT PIO_STATUS_BLOCK  IoStatusBlock,
  2329.     IN ULONG  NotifyFilter,
  2330.     IN BOOLEAN  WatchSubtree,
  2331.     IN PVOID  Buffer,
  2332.     IN ULONG  BufferLength,
  2333.     IN BOOLEAN  Asynchronous);
  2334.  
  2335. /* ZwNotifyChangeMultipleKeys.Flags constants */
  2336. #define REG_MONITOR_SINGLE_KEY            0x00
  2337. #define REG_MONITOR_SECOND_KEY            0x01
  2338.  
  2339. NTOSAPI
  2340. NTSTATUS
  2341. NTAPI
  2342. ZwNotifyChangeMultipleKeys(
  2343.     IN HANDLE  KeyHandle,
  2344.     IN ULONG  Flags,
  2345.     IN POBJECT_ATTRIBUTES  KeyObjectAttributes,
  2346.     IN HANDLE  EventHandle  OPTIONAL,
  2347.     IN PIO_APC_ROUTINE  ApcRoutine  OPTIONAL,
  2348.     IN PVOID  ApcContext  OPTIONAL,
  2349.     OUT PIO_STATUS_BLOCK  IoStatusBlock,
  2350.     IN ULONG  NotifyFilter,
  2351.     IN BOOLEAN  WatchSubtree,
  2352.     IN PVOID  Buffer,
  2353.     IN ULONG  BufferLength,
  2354.     IN BOOLEAN  Asynchronous);
  2355.  
  2356. NTOSAPI
  2357. NTSTATUS
  2358. NTAPI
  2359. ZwQueryMultipleValueKey(
  2360.     IN HANDLE  KeyHandle,
  2361.     IN OUT  PKEY_VALUE_ENTRY  ValueList,
  2362.     IN ULONG  NumberOfValues,
  2363.     OUT PVOID  Buffer,
  2364.     IN OUT PULONG  Length,
  2365.     OUT PULONG  ReturnLength);
  2366.  
  2367. NTOSAPI
  2368. NTSTATUS
  2369. NTAPI
  2370. ZwInitializeRegistry(
  2371.   IN BOOLEAN  Setup);
  2372.  
  2373.  
  2374.  
  2375.  
  2376. /* Security and auditing */
  2377.  
  2378. NTOSAPI
  2379. NTSTATUS
  2380. NTAPI
  2381. ZwPrivilegeCheck(
  2382.     IN HANDLE  TokenHandle,
  2383.     IN PPRIVILEGE_SET  RequiredPrivileges,
  2384.     OUT PBOOLEAN  Result);
  2385.  
  2386. NTOSAPI
  2387. NTSTATUS
  2388. NTAPI
  2389. ZwPrivilegeObjectAuditAlarm(
  2390.     IN PUNICODE_STRING  SubsystemName,
  2391.     IN PVOID  HandleId,
  2392.     IN HANDLE  TokenHandle,
  2393.     IN ACCESS_MASK  DesiredAccess,
  2394.     IN PPRIVILEGE_SET  Privileges,
  2395.     IN BOOLEAN  AccessGranted);
  2396.  
  2397. NTOSAPI
  2398. NTSTATUS
  2399. NTAPI
  2400. ZwPrivilegeObjectAuditAlarm(
  2401.     IN PUNICODE_STRING  SubsystemName,
  2402.     IN PVOID  HandleId,
  2403.     IN HANDLE  TokenHandle,
  2404.     IN ACCESS_MASK  DesiredAccess,
  2405.     IN PPRIVILEGE_SET  Privileges,
  2406.     IN BOOLEAN  AccessGranted);
  2407.  
  2408. NTOSAPI
  2409. NTSTATUS
  2410. NTAPI
  2411. ZwAccessCheck(
  2412.     IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
  2413.     IN HANDLE  TokenHandle,
  2414.     IN ACCESS_MASK  DesiredAccess,
  2415.     IN PGENERIC_MAPPING  GenericMapping,
  2416.     IN PPRIVILEGE_SET  PrivilegeSet,
  2417.     IN PULONG  PrivilegeSetLength,
  2418.     OUT PACCESS_MASK  GrantedAccess,
  2419.     OUT PBOOLEAN  AccessStatus);
  2420.  
  2421. NTOSAPI
  2422. NTSTATUS
  2423. NTAPI
  2424. ZwAccessCheckAndAuditAlarm(
  2425.     IN PUNICODE_STRING  SubsystemName,
  2426.     IN PVOID  HandleId,
  2427.     IN PUNICODE_STRING  ObjectTypeName,
  2428.     IN PUNICODE_STRING  ObjectName,
  2429.     IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
  2430.     IN ACCESS_MASK  DesiredAccess,
  2431.     IN PGENERIC_MAPPING  GenericMapping,
  2432.     IN BOOLEAN  ObjectCreation,
  2433.     OUT PACCESS_MASK  GrantedAccess,
  2434.     OUT PBOOLEAN  AccessStatus,
  2435.     OUT PBOOLEAN  GenerateOnClose);
  2436.  
  2437. NTOSAPI
  2438. NTSTATUS
  2439. NTAPI
  2440. ZwAccessCheckByType(
  2441.     IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
  2442.     IN PSID  PrincipalSelfSid,
  2443.     IN HANDLE  TokenHandle,
  2444.     IN ULONG  DesiredAccess,
  2445.     IN POBJECT_TYPE_LIST  ObjectTypeList,
  2446.     IN ULONG  ObjectTypeListLength,
  2447.     IN PGENERIC_MAPPING  GenericMapping,
  2448.     IN PPRIVILEGE_SET  PrivilegeSet,
  2449.     IN PULONG  PrivilegeSetLength,
  2450.     OUT PACCESS_MASK  GrantedAccess,
  2451.     OUT PULONG  AccessStatus);
  2452.  
  2453. typedef enum _AUDIT_EVENT_TYPE {
  2454.     AuditEventObjectAccess,
  2455.     AuditEventDirectoryServiceAccess
  2456. } AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
  2457.  
  2458. NTOSAPI
  2459. NTSTATUS
  2460. NTAPI
  2461. ZwAccessCheckByTypeAndAuditAlarm(
  2462.     IN PUNICODE_STRING  SubsystemName,
  2463.     IN PVOID  HandleId,
  2464.     IN PUNICODE_STRING  ObjectTypeName,
  2465.     IN PUNICODE_STRING  ObjectName,
  2466.     IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
  2467.     IN PSID  PrincipalSelfSid,
  2468.     IN ACCESS_MASK  DesiredAccess,
  2469.     IN AUDIT_EVENT_TYPE  AuditType,
  2470.     IN ULONG  Flags,
  2471.     IN POBJECT_TYPE_LIST  ObjectTypeList,
  2472.     IN ULONG  ObjectTypeListLength,
  2473.     IN PGENERIC_MAPPING  GenericMapping,
  2474.     IN BOOLEAN  ObjectCreation,
  2475.     OUT PACCESS_MASK  GrantedAccess,
  2476.     OUT PULONG  AccessStatus,
  2477.     OUT PBOOLEAN  GenerateOnClose);
  2478.  
  2479. NTOSAPI
  2480. NTSTATUS
  2481. NTAPI
  2482. ZwAccessCheckByTypeResultList(
  2483.     IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
  2484.     IN PSID  PrincipalSelfSid,
  2485.     IN HANDLE  TokenHandle,
  2486.     IN ACCESS_MASK  DesiredAccess,
  2487.     IN POBJECT_TYPE_LIST  ObjectTypeList,
  2488.     IN ULONG  ObjectTypeListLength,
  2489.     IN PGENERIC_MAPPING  GenericMapping,
  2490.     IN PPRIVILEGE_SET  PrivilegeSet,
  2491.     IN PULONG  PrivilegeSetLength,
  2492.     OUT PACCESS_MASK  GrantedAccessList,
  2493.     OUT PULONG  AccessStatusList);
  2494.  
  2495. NTOSAPI
  2496. NTSTATUS
  2497. NTAPI
  2498. ZwAccessCheckByTypeResultListAndAuditAlarm(
  2499.     IN PUNICODE_STRING  SubsystemName,
  2500.     IN PVOID  HandleId,
  2501.     IN PUNICODE_STRING  ObjectTypeName,
  2502.     IN PUNICODE_STRING  ObjectName,
  2503.     IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
  2504.     IN PSID  PrincipalSelfSid,
  2505.     IN ACCESS_MASK  DesiredAccess,
  2506.     IN AUDIT_EVENT_TYPE  AuditType,
  2507.     IN ULONG  Flags,
  2508.     IN POBJECT_TYPE_LIST  ObjectTypeList,
  2509.     IN ULONG  ObjectTypeListLength,
  2510.     IN PGENERIC_MAPPING  GenericMapping,
  2511.     IN BOOLEAN  ObjectCreation,
  2512.     OUT PACCESS_MASK  GrantedAccessList,
  2513.     OUT PULONG  AccessStatusList,
  2514.     OUT PULONG  GenerateOnClose);
  2515.  
  2516. NTOSAPI
  2517. NTSTATUS
  2518. NTAPI
  2519. ZwAccessCheckByTypeResultListAndAuditAlarmByHandle(
  2520.     IN PUNICODE_STRING  SubsystemName,
  2521.     IN PVOID  HandleId,
  2522.     IN HANDLE  TokenHandle,
  2523.     IN PUNICODE_STRING  ObjectTypeName,
  2524.     IN PUNICODE_STRING  ObjectName,
  2525.     IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
  2526.     IN PSID  PrincipalSelfSid,
  2527.     IN ACCESS_MASK  DesiredAccess,
  2528.     IN AUDIT_EVENT_TYPE  AuditType,
  2529.     IN ULONG  Flags,
  2530.     IN POBJECT_TYPE_LIST  ObjectTypeList,
  2531.     IN ULONG  ObjectTypeListLength,
  2532.     IN PGENERIC_MAPPING  GenericMapping,
  2533.     IN BOOLEAN  ObjectCreation,
  2534.     OUT PACCESS_MASK  GrantedAccessList,
  2535.     OUT PULONG  AccessStatusList,
  2536.     OUT PULONG  GenerateOnClose);
  2537.  
  2538. NTOSAPI
  2539. NTSTATUS
  2540. NTAPI
  2541. ZwOpenObjectAuditAlarm(
  2542.     IN PUNICODE_STRING  SubsystemName,
  2543.     IN PVOID  *HandleId,
  2544.     IN PUNICODE_STRING  ObjectTypeName,
  2545.     IN PUNICODE_STRING  ObjectName,
  2546.     IN PSECURITY_DESCRIPTOR  SecurityDescriptor,
  2547.     IN HANDLE  TokenHandle,
  2548.     IN ACCESS_MASK  DesiredAccess,
  2549.     IN ACCESS_MASK  GrantedAccess,
  2550.     IN PPRIVILEGE_SET  Privileges  OPTIONAL,
  2551.     IN BOOLEAN  ObjectCreation,
  2552.     IN BOOLEAN  AccessGranted,
  2553.     OUT PBOOLEAN  GenerateOnClose);
  2554.  
  2555. NTOSAPI
  2556. NTSTATUS
  2557. NTAPI
  2558. ZwCloseObjectAuditAlarm(
  2559.   IN PUNICODE_STRING  SubsystemName,
  2560.   IN PVOID  HandleId,
  2561.   IN BOOLEAN  GenerateOnClose);
  2562.  
  2563. NTOSAPI
  2564. NTSTATUS
  2565. NTAPI
  2566. ZwDeleteObjectAuditAlarm(
  2567.   IN PUNICODE_STRING  SubsystemName,
  2568.   IN PVOID  HandleId,
  2569.   IN BOOLEAN  GenerateOnClose);
  2570.  
  2571.  
  2572.  
  2573.  
  2574. /* Plug and play and power management */
  2575.  
  2576. NTOSAPI
  2577. NTSTATUS
  2578. NTAPI
  2579. ZwRequestWakeupLatency(
  2580.   IN LATENCY_TIME  Latency);
  2581.  
  2582. NTOSAPI
  2583. NTSTATUS
  2584. NTAPI
  2585. ZwRequestDeviceWakeup(
  2586.   IN HANDLE  DeviceHandle);
  2587.  
  2588. NTOSAPI
  2589. NTSTATUS
  2590. NTAPI
  2591. ZwCancelDeviceWakeupRequest(
  2592.   IN HANDLE  DeviceHandle);
  2593.  
  2594. NTOSAPI
  2595. BOOLEAN
  2596. NTAPI
  2597. ZwIsSystemResumeAutomatic(
  2598.   VOID);
  2599.  
  2600. NTOSAPI
  2601. NTSTATUS
  2602. NTAPI
  2603. ZwSetThreadExecutionState(
  2604.     IN EXECUTION_STATE  ExecutionState,
  2605.     OUT PEXECUTION_STATE  PreviousExecutionState);
  2606.  
  2607. NTOSAPI
  2608. NTSTATUS
  2609. NTAPI
  2610. ZwGetDevicePowerState(
  2611.   IN HANDLE  DeviceHandle,
  2612.   OUT PDEVICE_POWER_STATE  DevicePowerState);
  2613.  
  2614. NTOSAPI
  2615. NTSTATUS
  2616. NTAPI
  2617. ZwSetSystemPowerState(
  2618.     IN POWER_ACTION  SystemAction,
  2619.     IN SYSTEM_POWER_STATE  MinSystemState,
  2620.     IN ULONG  Flags);
  2621.  
  2622. NTOSAPI
  2623. NTSTATUS
  2624. NTAPI
  2625. ZwInitiatePowerAction(
  2626.     IN POWER_ACTION  SystemAction,
  2627.     IN SYSTEM_POWER_STATE  MinSystemState,
  2628.     IN ULONG  Flags,
  2629.     IN BOOLEAN  Asynchronous);
  2630.  
  2631. NTOSAPI
  2632. NTSTATUS
  2633. NTAPI
  2634. ZwPowerInformation(
  2635.     IN POWER_INFORMATION_LEVEL  PowerInformationLevel,
  2636.     IN PVOID  InputBuffer  OPTIONAL,
  2637.     IN ULONG  InputBufferLength,
  2638.     OUT PVOID  OutputBuffer  OPTIONAL,
  2639.     IN ULONG  OutputBufferLength);
  2640.  
  2641. NTOSAPI
  2642. NTSTATUS
  2643. NTAPI
  2644. ZwPlugPlayControl(
  2645.   IN ULONG  ControlCode,
  2646.   IN OUT PVOID  Buffer,
  2647.   IN ULONG  BufferLength);
  2648.  
  2649. NTOSAPI
  2650. NTSTATUS
  2651. NTAPI
  2652. ZwGetPlugPlayEvent(
  2653.     IN ULONG  Reserved1,
  2654.     IN ULONG  Reserved2,
  2655.     OUT PVOID  Buffer,
  2656.     IN ULONG  BufferLength);
  2657.  
  2658.  
  2659.  
  2660.  
  2661. /* Miscellany */
  2662.  
  2663. NTOSAPI
  2664. NTSTATUS
  2665. NTAPI
  2666. ZwRaiseException(
  2667.   IN PEXCEPTION_RECORD  ExceptionRecord,
  2668.   IN PCONTEXT  Context,
  2669.   IN BOOLEAN  SearchFrames);
  2670.  
  2671. NTOSAPI
  2672. NTSTATUS
  2673. NTAPI
  2674. ZwContinue(
  2675.   IN PCONTEXT  Context,
  2676.   IN BOOLEAN  TestAlert);
  2677.  
  2678. NTOSAPI
  2679. NTSTATUS
  2680. NTAPI
  2681. ZwW32Call(
  2682.     IN ULONG  RoutineIndex,
  2683.     IN PVOID  Argument,
  2684.     IN ULONG  ArgumentLength,
  2685.     OUT PVOID  *Result  OPTIONAL,
  2686.     OUT PULONG  ResultLength  OPTIONAL);
  2687.  
  2688. NTOSAPI
  2689. NTSTATUS
  2690. NTAPI
  2691. ZwSetLowWaitHighThread(
  2692.   VOID);
  2693.  
  2694. NTOSAPI
  2695. NTSTATUS
  2696. NTAPI
  2697. ZwSetHighWaitLowThread(
  2698.   VOID);
  2699.  
  2700. NTOSAPI
  2701. NTSTATUS
  2702. NTAPI
  2703. ZwLoadDriver(
  2704.   IN PUNICODE_STRING  DriverServiceName);
  2705.  
  2706. NTOSAPI
  2707. NTSTATUS
  2708. NTAPI
  2709. ZwUnloadDriver(
  2710.   IN PUNICODE_STRING  DriverServiceName);
  2711.  
  2712. NTOSAPI
  2713. NTSTATUS
  2714. NTAPI
  2715. ZwFlushInstructionCache(
  2716.     IN HANDLE  ProcessHandle,
  2717.     IN PVOID  BaseAddress  OPTIONAL,
  2718.     IN ULONG  FlushSize);
  2719.  
  2720. NTOSAPI
  2721. NTSTATUS
  2722. NTAPI
  2723. ZwFlushWriteBuffer(
  2724.   VOID);
  2725.  
  2726. NTOSAPI
  2727. NTSTATUS
  2728. NTAPI
  2729. ZwQueryDefaultLocale(
  2730.     IN BOOLEAN  ThreadOrSystem,
  2731.     OUT PLCID  Locale);
  2732.  
  2733. NTOSAPI
  2734. NTSTATUS
  2735. NTAPI
  2736. ZwSetDefaultLocale(
  2737.   IN BOOLEAN  ThreadOrSystem,
  2738.   IN LCID  Locale);
  2739.  
  2740. NTOSAPI
  2741. NTSTATUS
  2742. NTAPI
  2743. ZwQueryDefaultUILanguage(
  2744.   OUT PLANGID  LanguageId);
  2745.  
  2746. NTOSAPI
  2747. NTSTATUS
  2748. NTAPI
  2749. ZwSetDefaultUILanguage(
  2750.   IN LANGID  LanguageId);
  2751.  
  2752. NTOSAPI
  2753. NTSTATUS
  2754. NTAPI
  2755. ZwQueryInstallUILanguage(
  2756.   OUT PLANGID  LanguageId);
  2757.  
  2758. NTOSAPI
  2759. NTSTATUS
  2760. NTAPI
  2761. NtAllocateLocallyUniqueId(
  2762.   OUT PLUID  Luid);
  2763.  
  2764. NTOSAPI
  2765. NTSTATUS
  2766. NTAPI
  2767. NtAllocateUuids(
  2768.   OUT PLARGE_INTEGER  UuidLastTimeAllocated,
  2769.   OUT PULONG  UuidDeltaTime,
  2770.   OUT PULONG  UuidSequenceNumber,
  2771.   OUT PUCHAR  UuidSeed);
  2772.  
  2773. NTOSAPI
  2774. NTSTATUS
  2775. NTAPI
  2776. ZwSetUuidSeed(
  2777.   IN PUCHAR  UuidSeed);
  2778.  
  2779. typedef enum _HARDERROR_RESPONSE_OPTION {
  2780.     OptionAbortRetryIgnore,
  2781.     OptionOk,
  2782.     OptionOkCancel,
  2783.     OptionRetryCancel,
  2784.     OptionYesNo,
  2785.     OptionYesNoCancel,
  2786.     OptionShutdownSystem
  2787. } HARDERROR_RESPONSE_OPTION, *PHARDERROR_RESPONSE_OPTION;
  2788.  
  2789. typedef enum _HARDERROR_RESPONSE {
  2790.     ResponseReturnToCaller,
  2791.     ResponseNotHandled,
  2792.     ResponseAbort,
  2793.     ResponseCancel,
  2794.     ResponseIgnore,
  2795.     ResponseNo,
  2796.     ResponseOk,
  2797.     ResponseRetry,
  2798.     ResponseYes
  2799. } HARDERROR_RESPONSE, *PHARDERROR_RESPONSE;
  2800.  
  2801. NTOSAPI
  2802. NTSTATUS
  2803. NTAPI
  2804. ZwRaiseHardError(
  2805.     IN NTSTATUS  Status,
  2806.     IN ULONG  NumberOfArguments,
  2807.     IN ULONG  StringArgumentsMask,
  2808.     IN PULONG  Arguments,
  2809.     IN HARDERROR_RESPONSE_OPTION  ResponseOption,
  2810.     OUT PHARDERROR_RESPONSE  Response);
  2811.  
  2812. NTOSAPI
  2813. NTSTATUS
  2814. NTAPI
  2815. ZwSetDefaultHardErrorPort(
  2816.   IN HANDLE  PortHandle);
  2817.  
  2818. NTOSAPI
  2819. NTSTATUS
  2820. NTAPI
  2821. ZwDisplayString(
  2822.   IN PUNICODE_STRING  String);
  2823.  
  2824. NTOSAPI
  2825. NTSTATUS
  2826. NTAPI
  2827. ZwCreatePagingFile(
  2828.   IN PUNICODE_STRING  FileName,
  2829.   IN PULARGE_INTEGER  InitialSize,
  2830.   IN PULARGE_INTEGER  MaximumSize,
  2831.   IN ULONG  Reserved);
  2832.  
  2833. typedef USHORT RTL_ATOM, *PRTL_ATOM;
  2834.  
  2835. NTOSAPI
  2836. NTSTATUS
  2837. NTAPI
  2838. NtAddAtom(
  2839.   IN PWSTR  AtomName,
  2840.   IN ULONG  AtomNameLength,
  2841.   OUT PRTL_ATOM  Atom);
  2842.  
  2843. NTOSAPI
  2844. NTSTATUS
  2845. NTAPI
  2846. NtFindAtom(
  2847.   IN PWSTR  AtomName,
  2848.   IN ULONG  AtomNameLength,
  2849.   OUT PRTL_ATOM  Atom);
  2850.  
  2851. NTOSAPI
  2852. NTSTATUS
  2853. NTAPI
  2854. NtDeleteAtom(
  2855.   IN RTL_ATOM  Atom);
  2856.  
  2857. typedef enum _ATOM_INFORMATION_CLASS {
  2858.     AtomBasicInformation,
  2859.     AtomListInformation
  2860. } ATOM_INFORMATION_CLASS;
  2861.  
  2862. NTOSAPI
  2863. NTSTATUS
  2864. NTAPI
  2865. NtQueryInformationAtom(
  2866.   IN RTL_ATOM  Atom,
  2867.   IN ATOM_INFORMATION_CLASS  AtomInformationClass,
  2868.   OUT PVOID  AtomInformation,
  2869.   IN ULONG  AtomInformationLength,
  2870.   OUT PULONG  ReturnLength  OPTIONAL);
  2871.  
  2872. typedef struct _ATOM_BASIC_INFORMATION {
  2873.     USHORT  ReferenceCount;
  2874.     USHORT  Pinned;
  2875.     USHORT  NameLength;
  2876.     WCHAR  Name[1];
  2877. } ATOM_BASIC_INFORMATION, *PATOM_BASIC_INFORMATION;
  2878.  
  2879. typedef struct _ATOM_LIST_INFORMATION {
  2880.   ULONG  NumberOfAtoms;
  2881.   ATOM  Atoms[1];
  2882. } ATOM_LIST_INFORMATION, *PATOM_LIST_INFORMATION;
  2883.  
  2884. NTOSAPI
  2885. NTSTATUS
  2886. NTAPI
  2887. ZwSetLdtEntries(
  2888.     IN ULONG  Selector1,
  2889.     IN LDT_ENTRY  LdtEntry1,
  2890.     IN ULONG  Selector2,
  2891.     IN LDT_ENTRY  LdtEntry2);
  2892.  
  2893. NTOSAPI
  2894. NTSTATUS
  2895. NTAPI
  2896. NtVdmControl(
  2897.   IN ULONG  ControlCode,
  2898.   IN PVOID  ControlData);
  2899.  
  2900. #pragma pack(pop)
  2901.  
  2902. #ifdef __cplusplus
  2903. }
  2904. #endif
  2905.  
  2906. #endif /* __NTAPI_H */
  2907.