OSDN Git Service

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