source: vendor/w32api/current/include/ddk/ntapi.h

Last change on this file was 2720, checked in by bird, 19 years ago

w32api v3.6

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