OSDN Git Service

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