50315d11f2c71104f243bc9843c331e00a43420b
[reactos.git] / include / ddk / ntddk.h
1 /*
2 * ntddk.h
3 *
4 * Windows Device Driver Kit
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 * DEFINES:
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
25 */
26
27 #ifndef _NTDDK_
28 #define _NTDDK_
29
30 #if !defined(_NTHAL_) && !defined(_NTIFS_)
31 #define _NTDDK_INCLUDED_
32 #define _DDK_DRIVER_
33 #endif
34
35 /* Dependencies */
36
37 #define NT_INCLUDED
38 #define _CTYPE_DISABLE_MACROS
39
40 #include <wdm.h>
41 #include <excpt.h>
42 #include <ntdef.h>
43 #include <ntstatus.h>
44
45 /* FIXME
46 #include <bugcodes.h>
47 #include <ntiologc.h>
48 */
49
50 #include <stdarg.h> // FIXME
51 #include <basetyps.h> // FIXME
52
53
54 #ifdef __cplusplus
55 extern "C" {
56 #endif
57
58 struct _LOADER_PARAMETER_BLOCK;
59 struct _CREATE_DISK;
60 struct _DRIVE_LAYOUT_INFORMATION_EX;
61 struct _SET_PARTITION_INFORMATION_EX;
62
63 //
64 // GUID and UUID
65 //
66 #ifndef GUID_DEFINED
67 #include <guiddef.h>
68 #endif
69 typedef GUID UUID;
70
71 typedef struct _BUS_HANDLER *PBUS_HANDLER;
72
73 #define EXCEPTION_READ_FAULT 0
74 #define EXCEPTION_WRITE_FAULT 1
75 #define EXCEPTION_EXECUTE_FAULT 8
76
77 #if (NTDDI_VERSION >= NTDDI_VISTA)
78 extern NTSYSAPI volatile CCHAR KeNumberProcessors;
79 #elif (NTDDI_VERSION >= NTDDI_WINXP)
80 extern NTSYSAPI CCHAR KeNumberProcessors;
81 #else
82 extern PCCHAR KeNumberProcessors;
83 #endif
84
85 #define MAX_WOW64_SHARED_ENTRIES 16
86
87 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
88 #define NX_SUPPORT_POLICY_ALWAYSON 1
89 #define NX_SUPPORT_POLICY_OPTIN 2
90 #define NX_SUPPORT_POLICY_OPTOUT 3
91
92 /*
93 ** IRP function codes
94 */
95
96 #define IRP_MN_QUERY_DIRECTORY 0x01
97 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
98
99 #define IRP_MN_USER_FS_REQUEST 0x00
100 #define IRP_MN_MOUNT_VOLUME 0x01
101 #define IRP_MN_VERIFY_VOLUME 0x02
102 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
103 #define IRP_MN_TRACK_LINK 0x04
104 #define IRP_MN_KERNEL_CALL 0x04
105
106 #define IRP_MN_LOCK 0x01
107 #define IRP_MN_UNLOCK_SINGLE 0x02
108 #define IRP_MN_UNLOCK_ALL 0x03
109 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
110
111 #define IRP_MN_FLUSH_AND_PURGE 0x01
112
113 #define IRP_MN_NORMAL 0x00
114 #define IRP_MN_DPC 0x01
115 #define IRP_MN_MDL 0x02
116 #define IRP_MN_COMPLETE 0x04
117 #define IRP_MN_COMPRESSED 0x08
118
119 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
120 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
121 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
122
123 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
124
125 typedef struct _IO_COUNTERS {
126 ULONGLONG ReadOperationCount;
127 ULONGLONG WriteOperationCount;
128 ULONGLONG OtherOperationCount;
129 ULONGLONG ReadTransferCount;
130 ULONGLONG WriteTransferCount;
131 ULONGLONG OtherTransferCount;
132 } IO_COUNTERS, *PIO_COUNTERS;
133
134 typedef struct _VM_COUNTERS {
135 SIZE_T PeakVirtualSize;
136 SIZE_T VirtualSize;
137 ULONG PageFaultCount;
138 SIZE_T PeakWorkingSetSize;
139 SIZE_T WorkingSetSize;
140 SIZE_T QuotaPeakPagedPoolUsage;
141 SIZE_T QuotaPagedPoolUsage;
142 SIZE_T QuotaPeakNonPagedPoolUsage;
143 SIZE_T QuotaNonPagedPoolUsage;
144 SIZE_T PagefileUsage;
145 SIZE_T PeakPagefileUsage;
146 } VM_COUNTERS, *PVM_COUNTERS;
147
148 typedef struct _VM_COUNTERS_EX
149 {
150 SIZE_T PeakVirtualSize;
151 SIZE_T VirtualSize;
152 ULONG PageFaultCount;
153 SIZE_T PeakWorkingSetSize;
154 SIZE_T WorkingSetSize;
155 SIZE_T QuotaPeakPagedPoolUsage;
156 SIZE_T QuotaPagedPoolUsage;
157 SIZE_T QuotaPeakNonPagedPoolUsage;
158 SIZE_T QuotaNonPagedPoolUsage;
159 SIZE_T PagefileUsage;
160 SIZE_T PeakPagefileUsage;
161 SIZE_T PrivateUsage;
162 } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
163
164 typedef struct _POOLED_USAGE_AND_LIMITS
165 {
166 SIZE_T PeakPagedPoolUsage;
167 SIZE_T PagedPoolUsage;
168 SIZE_T PagedPoolLimit;
169 SIZE_T PeakNonPagedPoolUsage;
170 SIZE_T NonPagedPoolUsage;
171 SIZE_T NonPagedPoolLimit;
172 SIZE_T PeakPagefileUsage;
173 SIZE_T PagefileUsage;
174 SIZE_T PagefileLimit;
175 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;
176
177 /* DEVICE_OBJECT.Flags */
178
179 #define DO_VERIFY_VOLUME 0x00000002
180 #define DO_BUFFERED_IO 0x00000004
181 #define DO_EXCLUSIVE 0x00000008
182 #define DO_DIRECT_IO 0x00000010
183 #define DO_MAP_IO_BUFFER 0x00000020
184 #define DO_DEVICE_HAS_NAME 0x00000040
185 #define DO_DEVICE_INITIALIZING 0x00000080
186 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
187 #define DO_LONG_TERM_REQUESTS 0x00000200
188 #define DO_NEVER_LAST_DEVICE 0x00000400
189 #define DO_SHUTDOWN_REGISTERED 0x00000800
190 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
191 #define DO_POWER_PAGABLE 0x00002000
192 #define DO_POWER_INRUSH 0x00004000
193 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
194 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
195 #define DO_FORCE_NEITHER_IO 0x00080000
196 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
197 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
198 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
199 #define DO_DISALLOW_EXECUTE 0x00800000
200
201 #define DRVO_REINIT_REGISTERED 0x00000008
202 #define DRVO_INITIALIZED 0x00000010
203 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
204 #define DRVO_LEGACY_RESOURCES 0x00000040
205
206 typedef enum _ARBITER_REQUEST_SOURCE {
207 ArbiterRequestUndefined = -1,
208 ArbiterRequestLegacyReported,
209 ArbiterRequestHalReported,
210 ArbiterRequestLegacyAssigned,
211 ArbiterRequestPnpDetected,
212 ArbiterRequestPnpEnumerated
213 } ARBITER_REQUEST_SOURCE;
214
215 typedef enum _ARBITER_RESULT {
216 ArbiterResultUndefined = -1,
217 ArbiterResultSuccess,
218 ArbiterResultExternalConflict,
219 ArbiterResultNullRequest
220 } ARBITER_RESULT;
221
222 typedef enum _ARBITER_ACTION {
223 ArbiterActionTestAllocation,
224 ArbiterActionRetestAllocation,
225 ArbiterActionCommitAllocation,
226 ArbiterActionRollbackAllocation,
227 ArbiterActionQueryAllocatedResources,
228 ArbiterActionWriteReservedResources,
229 ArbiterActionQueryConflict,
230 ArbiterActionQueryArbitrate,
231 ArbiterActionAddReserved,
232 ArbiterActionBootAllocation
233 } ARBITER_ACTION, *PARBITER_ACTION;
234
235 typedef struct _ARBITER_CONFLICT_INFO {
236 PDEVICE_OBJECT OwningObject;
237 ULONGLONG Start;
238 ULONGLONG End;
239 } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO;
240
241 typedef struct _ARBITER_PARAMETERS {
242 union {
243 struct {
244 IN OUT PLIST_ENTRY ArbitrationList;
245 IN ULONG AllocateFromCount;
246 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
247 } TestAllocation;
248 struct {
249 IN OUT PLIST_ENTRY ArbitrationList;
250 IN ULONG AllocateFromCount;
251 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom;
252 } RetestAllocation;
253 struct {
254 IN OUT PLIST_ENTRY ArbitrationList;
255 } BootAllocation;
256 struct {
257 OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources;
258 } QueryAllocatedResources;
259 struct {
260 IN PDEVICE_OBJECT PhysicalDeviceObject;
261 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource;
262 OUT PULONG ConflictCount;
263 OUT PARBITER_CONFLICT_INFO *Conflicts;
264 } QueryConflict;
265 struct {
266 IN PLIST_ENTRY ArbitrationList;
267 } QueryArbitrate;
268 struct {
269 IN PDEVICE_OBJECT ReserveDevice;
270 } AddReserved;
271 } Parameters;
272 } ARBITER_PARAMETERS, *PARBITER_PARAMETERS;
273
274 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
275
276 typedef struct _ARBITER_LIST_ENTRY {
277 LIST_ENTRY ListEntry;
278 ULONG AlternativeCount;
279 PIO_RESOURCE_DESCRIPTOR Alternatives;
280 PDEVICE_OBJECT PhysicalDeviceObject;
281 ARBITER_REQUEST_SOURCE RequestSource;
282 ULONG Flags;
283 LONG_PTR WorkSpace;
284 INTERFACE_TYPE InterfaceType;
285 ULONG SlotNumber;
286 ULONG BusNumber;
287 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment;
288 PIO_RESOURCE_DESCRIPTOR SelectedAlternative;
289 ARBITER_RESULT Result;
290 } ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY;
291
292 typedef NTSTATUS
293 (NTAPI *PARBITER_HANDLER)(
294 IN OUT PVOID Context,
295 IN ARBITER_ACTION Action,
296 IN OUT PARBITER_PARAMETERS Parameters);
297
298 #define ARBITER_PARTIAL 0x00000001
299
300 typedef struct _ARBITER_INTERFACE {
301 USHORT Size;
302 USHORT Version;
303 PVOID Context;
304 PINTERFACE_REFERENCE InterfaceReference;
305 PINTERFACE_DEREFERENCE InterfaceDereference;
306 PARBITER_HANDLER ArbiterHandler;
307 ULONG Flags;
308 } ARBITER_INTERFACE, *PARBITER_INTERFACE;
309
310 typedef enum _HAL_QUERY_INFORMATION_CLASS {
311 HalInstalledBusInformation,
312 HalProfileSourceInformation,
313 HalInformationClassUnused1,
314 HalPowerInformation,
315 HalProcessorSpeedInformation,
316 HalCallbackInformation,
317 HalMapRegisterInformation,
318 HalMcaLogInformation,
319 HalFrameBufferCachingInformation,
320 HalDisplayBiosInformation,
321 HalProcessorFeatureInformation,
322 HalNumaTopologyInterface,
323 HalErrorInformation,
324 HalCmcLogInformation,
325 HalCpeLogInformation,
326 HalQueryMcaInterface,
327 HalQueryAMLIIllegalIOPortAddresses,
328 HalQueryMaxHotPlugMemoryAddress,
329 HalPartitionIpiInterface,
330 HalPlatformInformation,
331 HalQueryProfileSourceList,
332 HalInitLogInformation,
333 HalFrequencyInformation,
334 HalProcessorBrandString,
335 HalHypervisorInformation,
336 HalPlatformTimerInformation,
337 HalAcpiAuditInformation
338 } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS;
339
340 typedef enum _HAL_SET_INFORMATION_CLASS {
341 HalProfileSourceInterval,
342 HalProfileSourceInterruptHandler,
343 HalMcaRegisterDriver,
344 HalKernelErrorHandler,
345 HalCmcRegisterDriver,
346 HalCpeRegisterDriver,
347 HalMcaLog,
348 HalCmcLog,
349 HalCpeLog,
350 HalGenerateCmcInterrupt,
351 HalProfileSourceTimerHandler,
352 HalEnlightenment,
353 HalProfileDpgoSourceInterruptHandler
354 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS;
355
356 typedef struct _HAL_PROFILE_SOURCE_INTERVAL {
357 KPROFILE_SOURCE Source;
358 ULONG_PTR Interval;
359 } HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL;
360
361 typedef struct _HAL_PROFILE_SOURCE_INFORMATION {
362 KPROFILE_SOURCE Source;
363 BOOLEAN Supported;
364 ULONG Interval;
365 } HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION;
366
367 typedef struct _MAP_REGISTER_ENTRY {
368 PVOID MapRegister;
369 BOOLEAN WriteToDevice;
370 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY;
371
372 typedef struct _DEBUG_DEVICE_ADDRESS {
373 UCHAR Type;
374 BOOLEAN Valid;
375 UCHAR Reserved[2];
376 PUCHAR TranslatedAddress;
377 ULONG Length;
378 } DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS;
379
380 typedef struct _DEBUG_MEMORY_REQUIREMENTS {
381 PHYSICAL_ADDRESS Start;
382 PHYSICAL_ADDRESS MaxEnd;
383 PVOID VirtualAddress;
384 ULONG Length;
385 BOOLEAN Cached;
386 BOOLEAN Aligned;
387 } DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS;
388
389 typedef struct _DEBUG_DEVICE_DESCRIPTOR {
390 ULONG Bus;
391 ULONG Slot;
392 USHORT Segment;
393 USHORT VendorID;
394 USHORT DeviceID;
395 UCHAR BaseClass;
396 UCHAR SubClass;
397 UCHAR ProgIf;
398 BOOLEAN Initialized;
399 BOOLEAN Configured;
400 DEBUG_DEVICE_ADDRESS BaseAddress[6];
401 DEBUG_MEMORY_REQUIREMENTS Memory;
402 } DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR;
403
404 typedef struct _PM_DISPATCH_TABLE {
405 ULONG Signature;
406 ULONG Version;
407 PVOID Function[1];
408 } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE;
409
410 typedef enum _RESOURCE_TRANSLATION_DIRECTION {
411 TranslateChildToParent,
412 TranslateParentToChild
413 } RESOURCE_TRANSLATION_DIRECTION;
414
415 typedef NTSTATUS
416 (NTAPI *PTRANSLATE_RESOURCE_HANDLER)(
417 IN OUT PVOID Context,
418 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source,
419 IN RESOURCE_TRANSLATION_DIRECTION Direction,
420 IN ULONG AlternativesCount OPTIONAL,
421 IN IO_RESOURCE_DESCRIPTOR Alternatives[],
422 IN PDEVICE_OBJECT PhysicalDeviceObject,
423 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target);
424
425 typedef NTSTATUS
426 (NTAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)(
427 IN PVOID Context OPTIONAL,
428 IN PIO_RESOURCE_DESCRIPTOR Source,
429 IN PDEVICE_OBJECT PhysicalDeviceObject,
430 OUT PULONG TargetCount,
431 OUT PIO_RESOURCE_DESCRIPTOR *Target);
432
433 typedef struct _TRANSLATOR_INTERFACE {
434 USHORT Size;
435 USHORT Version;
436 PVOID Context;
437 PINTERFACE_REFERENCE InterfaceReference;
438 PINTERFACE_DEREFERENCE InterfaceDereference;
439 PTRANSLATE_RESOURCE_HANDLER TranslateResources;
440 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements;
441 } TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE;
442
443 typedef VOID
444 (FASTCALL *pHalExamineMBR)(
445 IN PDEVICE_OBJECT DeviceObject,
446 IN ULONG SectorSize,
447 IN ULONG MBRTypeIdentifier,
448 OUT PVOID *Buffer);
449
450 typedef NTSTATUS
451 (FASTCALL *pHalIoReadPartitionTable)(
452 IN PDEVICE_OBJECT DeviceObject,
453 IN ULONG SectorSize,
454 IN BOOLEAN ReturnRecognizedPartitions,
455 OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
456
457 typedef NTSTATUS
458 (FASTCALL *pHalIoSetPartitionInformation)(
459 IN PDEVICE_OBJECT DeviceObject,
460 IN ULONG SectorSize,
461 IN ULONG PartitionNumber,
462 IN ULONG PartitionType);
463
464 typedef NTSTATUS
465 (FASTCALL *pHalIoWritePartitionTable)(
466 IN PDEVICE_OBJECT DeviceObject,
467 IN ULONG SectorSize,
468 IN ULONG SectorsPerTrack,
469 IN ULONG NumberOfHeads,
470 IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
471
472 typedef PBUS_HANDLER
473 (FASTCALL *pHalHandlerForBus)(
474 IN INTERFACE_TYPE InterfaceType,
475 IN ULONG BusNumber);
476
477 typedef VOID
478 (FASTCALL *pHalReferenceBusHandler)(
479 IN PBUS_HANDLER BusHandler);
480
481 typedef NTSTATUS
482 (NTAPI *pHalQuerySystemInformation)(
483 IN HAL_QUERY_INFORMATION_CLASS InformationClass,
484 IN ULONG BufferSize,
485 IN OUT PVOID Buffer,
486 OUT PULONG ReturnedLength);
487
488 typedef NTSTATUS
489 (NTAPI *pHalSetSystemInformation)(
490 IN HAL_SET_INFORMATION_CLASS InformationClass,
491 IN ULONG BufferSize,
492 IN PVOID Buffer);
493
494 typedef NTSTATUS
495 (NTAPI *pHalQueryBusSlots)(
496 IN PBUS_HANDLER BusHandler,
497 IN ULONG BufferSize,
498 OUT PULONG SlotNumbers,
499 OUT PULONG ReturnedLength);
500
501 typedef NTSTATUS
502 (NTAPI *pHalInitPnpDriver)(
503 VOID);
504
505 typedef NTSTATUS
506 (NTAPI *pHalInitPowerManagement)(
507 IN PPM_DISPATCH_TABLE PmDriverDispatchTable,
508 OUT PPM_DISPATCH_TABLE *PmHalDispatchTable);
509
510 typedef struct _DMA_ADAPTER*
511 (NTAPI *pHalGetDmaAdapter)(
512 IN PVOID Context,
513 IN struct _DEVICE_DESCRIPTION *DeviceDescriptor,
514 OUT PULONG NumberOfMapRegisters);
515
516 typedef NTSTATUS
517 (NTAPI *pHalGetInterruptTranslator)(
518 IN INTERFACE_TYPE ParentInterfaceType,
519 IN ULONG ParentBusNumber,
520 IN INTERFACE_TYPE BridgeInterfaceType,
521 IN USHORT Size,
522 IN USHORT Version,
523 OUT PTRANSLATOR_INTERFACE Translator,
524 OUT PULONG BridgeBusNumber);
525
526 typedef NTSTATUS
527 (NTAPI *pHalStartMirroring)(
528 VOID);
529
530 typedef NTSTATUS
531 (NTAPI *pHalEndMirroring)(
532 IN ULONG PassNumber);
533
534 typedef NTSTATUS
535 (NTAPI *pHalMirrorPhysicalMemory)(
536 IN PHYSICAL_ADDRESS PhysicalAddress,
537 IN LARGE_INTEGER NumberOfBytes);
538
539 typedef NTSTATUS
540 (NTAPI *pHalMirrorVerify)(
541 IN PHYSICAL_ADDRESS PhysicalAddress,
542 IN LARGE_INTEGER NumberOfBytes);
543
544 typedef VOID
545 (NTAPI *pHalEndOfBoot)(
546 VOID);
547
548 typedef
549 BOOLEAN
550 (NTAPI *pHalTranslateBusAddress)(
551 IN INTERFACE_TYPE InterfaceType,
552 IN ULONG BusNumber,
553 IN PHYSICAL_ADDRESS BusAddress,
554 IN OUT PULONG AddressSpace,
555 OUT PPHYSICAL_ADDRESS TranslatedAddress);
556
557 typedef
558 NTSTATUS
559 (NTAPI *pHalAssignSlotResources)(
560 IN PUNICODE_STRING RegistryPath,
561 IN PUNICODE_STRING DriverClassName OPTIONAL,
562 IN PDRIVER_OBJECT DriverObject,
563 IN PDEVICE_OBJECT DeviceObject,
564 IN INTERFACE_TYPE BusType,
565 IN ULONG BusNumber,
566 IN ULONG SlotNumber,
567 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
568
569 typedef
570 VOID
571 (NTAPI *pHalHaltSystem)(
572 VOID);
573
574 typedef
575 BOOLEAN
576 (NTAPI *pHalResetDisplay)(
577 VOID);
578
579 typedef
580 UCHAR
581 (NTAPI *pHalVectorToIDTEntry)(
582 ULONG Vector);
583
584 typedef
585 BOOLEAN
586 (NTAPI *pHalFindBusAddressTranslation)(
587 IN PHYSICAL_ADDRESS BusAddress,
588 IN OUT PULONG AddressSpace,
589 OUT PPHYSICAL_ADDRESS TranslatedAddress,
590 IN OUT PULONG_PTR Context,
591 IN BOOLEAN NextBus);
592
593 typedef
594 NTSTATUS
595 (NTAPI *pKdSetupPciDeviceForDebugging)(
596 IN PVOID LoaderBlock OPTIONAL,
597 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
598
599 typedef
600 NTSTATUS
601 (NTAPI *pKdReleasePciDeviceForDebugging)(
602 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice);
603
604 typedef
605 PVOID
606 (NTAPI *pKdGetAcpiTablePhase0)(
607 IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
608 IN ULONG Signature);
609
610 typedef
611 PVOID
612 (NTAPI *pHalGetAcpiTable)(
613 IN ULONG Signature,
614 IN PCSTR OemId OPTIONAL,
615 IN PCSTR OemTableId OPTIONAL);
616
617 typedef
618 VOID
619 (NTAPI *pKdCheckPowerButton)(
620 VOID);
621
622 #if (NTDDI_VERSION >= NTDDI_VISTA)
623 typedef
624 PVOID
625 (NTAPI *pKdMapPhysicalMemory64)(
626 IN PHYSICAL_ADDRESS PhysicalAddress,
627 IN ULONG NumberPages,
628 IN BOOLEAN FlushCurrentTLB);
629
630 typedef
631 VOID
632 (NTAPI *pKdUnmapVirtualAddress)(
633 IN PVOID VirtualAddress,
634 IN ULONG NumberPages,
635 IN BOOLEAN FlushCurrentTLB);
636 #else
637 typedef
638 PVOID
639 (NTAPI *pKdMapPhysicalMemory64)(
640 IN PHYSICAL_ADDRESS PhysicalAddress,
641 IN ULONG NumberPages);
642
643 typedef
644 VOID
645 (NTAPI *pKdUnmapVirtualAddress)(
646 IN PVOID VirtualAddress,
647 IN ULONG NumberPages);
648 #endif
649
650
651 typedef
652 ULONG
653 (NTAPI *pKdGetPciDataByOffset)(
654 IN ULONG BusNumber,
655 IN ULONG SlotNumber,
656 OUT PVOID Buffer,
657 IN ULONG Offset,
658 IN ULONG Length);
659
660 typedef
661 ULONG
662 (NTAPI *pKdSetPciDataByOffset)(
663 IN ULONG BusNumber,
664 IN ULONG SlotNumber,
665 IN PVOID Buffer,
666 IN ULONG Offset,
667 IN ULONG Length);
668
669 typedef BOOLEAN
670 (NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
671 IN ULONG Columns,
672 IN ULONG Rows);
673
674 typedef
675 VOID
676 (NTAPI *PCI_ERROR_HANDLER_CALLBACK)(
677 VOID);
678
679 typedef
680 VOID
681 (NTAPI *pHalSetPciErrorHandlerCallback)(
682 IN PCI_ERROR_HANDLER_CALLBACK Callback);
683
684 #if 1 /* Not present in WDK 7600 */
685 typedef VOID
686 (FASTCALL *pHalIoAssignDriveLetters)(
687 IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
688 IN PSTRING NtDeviceName,
689 OUT PUCHAR NtSystemPath,
690 OUT PSTRING NtSystemPathString);
691 #endif
692
693 typedef struct {
694 ULONG Version;
695 pHalQuerySystemInformation HalQuerySystemInformation;
696 pHalSetSystemInformation HalSetSystemInformation;
697 pHalQueryBusSlots HalQueryBusSlots;
698 ULONG Spare1;
699 pHalExamineMBR HalExamineMBR;
700 #if 1 /* Not present in WDK 7600 */
701 pHalIoAssignDriveLetters HalIoAssignDriveLetters;
702 #endif
703 pHalIoReadPartitionTable HalIoReadPartitionTable;
704 pHalIoSetPartitionInformation HalIoSetPartitionInformation;
705 pHalIoWritePartitionTable HalIoWritePartitionTable;
706 pHalHandlerForBus HalReferenceHandlerForBus;
707 pHalReferenceBusHandler HalReferenceBusHandler;
708 pHalReferenceBusHandler HalDereferenceBusHandler;
709 pHalInitPnpDriver HalInitPnpDriver;
710 pHalInitPowerManagement HalInitPowerManagement;
711 pHalGetDmaAdapter HalGetDmaAdapter;
712 pHalGetInterruptTranslator HalGetInterruptTranslator;
713 pHalStartMirroring HalStartMirroring;
714 pHalEndMirroring HalEndMirroring;
715 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory;
716 pHalEndOfBoot HalEndOfBoot;
717 pHalMirrorVerify HalMirrorVerify;
718 pHalGetAcpiTable HalGetCachedAcpiTable;
719 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback;
720 #if defined(_IA64_)
721 pHalGetErrorCapList HalGetErrorCapList;
722 pHalInjectError HalInjectError;
723 #endif
724 } HAL_DISPATCH, *PHAL_DISPATCH;
725
726 /* GCC/MSVC and WDK compatible declaration */
727 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable;
728
729 #if defined(_NTOSKRNL_) || defined(_BLDR_)
730 #define HALDISPATCH (&HalDispatchTable)
731 #else
732 /* This is a WDK compatibility definition */
733 #define HalDispatchTable (&HalDispatchTable)
734 #define HALDISPATCH HalDispatchTable
735 #endif
736
737 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
738 #define HalDispatchTableVersion HALDISPATCH->Version
739 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
740 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
741 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
742 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
743 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
744 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
745 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
746 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
747 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
748 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
749 #define HalStartMirroring HALDISPATCH->HalStartMirroring
750 #define HalEndMirroring HALDISPATCH->HalEndMirroring
751 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
752 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
753 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
754
755 typedef struct _FILE_ALIGNMENT_INFORMATION {
756 ULONG AlignmentRequirement;
757 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
758
759 typedef struct _FILE_NAME_INFORMATION {
760 ULONG FileNameLength;
761 WCHAR FileName[1];
762 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
763
764
765 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
766 ULONG FileAttributes;
767 ULONG ReparseTag;
768 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
769
770 typedef struct _FILE_DISPOSITION_INFORMATION {
771 BOOLEAN DeleteFile;
772 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
773
774 typedef struct _FILE_END_OF_FILE_INFORMATION {
775 LARGE_INTEGER EndOfFile;
776 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
777
778 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
779 LARGE_INTEGER ValidDataLength;
780 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
781
782 typedef union _FILE_SEGMENT_ELEMENT {
783 PVOID64 Buffer;
784 ULONGLONG Alignment;
785 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
786
787 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
788
789 #if (NTDDI_VERSION >= NTDDI_WIN2K)
790 NTSYSAPI
791 ULONGLONG
792 NTAPI
793 VerSetConditionMask(
794 IN ULONGLONG ConditionMask,
795 IN ULONG TypeMask,
796 IN UCHAR Condition);
797 #endif
798
799 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
800 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
801 (TypeBitMask), (ComparisonType)))
802
803 /* RtlVerifyVersionInfo() TypeMask */
804
805 #define VER_MINORVERSION 0x0000001
806 #define VER_MAJORVERSION 0x0000002
807 #define VER_BUILDNUMBER 0x0000004
808 #define VER_PLATFORMID 0x0000008
809 #define VER_SERVICEPACKMINOR 0x0000010
810 #define VER_SERVICEPACKMAJOR 0x0000020
811 #define VER_SUITENAME 0x0000040
812 #define VER_PRODUCT_TYPE 0x0000080
813
814 /* RtlVerifyVersionInfo() ComparisonType */
815
816 #define VER_EQUAL 1
817 #define VER_GREATER 2
818 #define VER_GREATER_EQUAL 3
819 #define VER_LESS 4
820 #define VER_LESS_EQUAL 5
821 #define VER_AND 6
822 #define VER_OR 7
823
824 #define VER_CONDITION_MASK 7
825 #define VER_NUM_BITS_PER_CONDITION_MASK 3
826
827 typedef struct _IMAGE_INFO {
828 _ANONYMOUS_UNION union {
829 ULONG Properties;
830 _ANONYMOUS_STRUCT struct {
831 ULONG ImageAddressingMode:8;
832 ULONG SystemModeImage:1;
833 ULONG ImageMappedToAllPids:1;
834 ULONG ExtendedInfoPresent:1;
835 ULONG Reserved:22;
836 } DUMMYSTRUCTNAME;
837 } DUMMYUNIONNAME;
838 PVOID ImageBase;
839 ULONG ImageSelector;
840 SIZE_T ImageSize;
841 ULONG ImageSectionNumber;
842 } IMAGE_INFO, *PIMAGE_INFO;
843
844 #define IMAGE_ADDRESSING_MODE_32BIT 3
845
846 typedef enum _BUS_DATA_TYPE {
847 ConfigurationSpaceUndefined = -1,
848 Cmos,
849 EisaConfiguration,
850 Pos,
851 CbusConfiguration,
852 PCIConfiguration,
853 VMEConfiguration,
854 NuBusConfiguration,
855 PCMCIAConfiguration,
856 MPIConfiguration,
857 MPSAConfiguration,
858 PNPISAConfiguration,
859 SgiInternalConfiguration,
860 MaximumBusDataType
861 } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
862
863 typedef struct _NT_TIB {
864 struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
865 PVOID StackBase;
866 PVOID StackLimit;
867 PVOID SubSystemTib;
868 _ANONYMOUS_UNION union {
869 PVOID FiberData;
870 ULONG Version;
871 } DUMMYUNIONNAME;
872 PVOID ArbitraryUserPointer;
873 struct _NT_TIB *Self;
874 } NT_TIB, *PNT_TIB;
875
876 typedef struct _NT_TIB32 {
877 ULONG ExceptionList;
878 ULONG StackBase;
879 ULONG StackLimit;
880 ULONG SubSystemTib;
881 __GNU_EXTENSION union {
882 ULONG FiberData;
883 ULONG Version;
884 };
885 ULONG ArbitraryUserPointer;
886 ULONG Self;
887 } NT_TIB32,*PNT_TIB32;
888
889 typedef struct _NT_TIB64 {
890 ULONG64 ExceptionList;
891 ULONG64 StackBase;
892 ULONG64 StackLimit;
893 ULONG64 SubSystemTib;
894 __GNU_EXTENSION union {
895 ULONG64 FiberData;
896 ULONG Version;
897 };
898 ULONG64 ArbitraryUserPointer;
899 ULONG64 Self;
900 } NT_TIB64,*PNT_TIB64;
901
902 typedef enum _PROCESSINFOCLASS {
903 ProcessBasicInformation,
904 ProcessQuotaLimits,
905 ProcessIoCounters,
906 ProcessVmCounters,
907 ProcessTimes,
908 ProcessBasePriority,
909 ProcessRaisePriority,
910 ProcessDebugPort,
911 ProcessExceptionPort,
912 ProcessAccessToken,
913 ProcessLdtInformation,
914 ProcessLdtSize,
915 ProcessDefaultHardErrorMode,
916 ProcessIoPortHandlers,
917 ProcessPooledUsageAndLimits,
918 ProcessWorkingSetWatch,
919 ProcessUserModeIOPL,
920 ProcessEnableAlignmentFaultFixup,
921 ProcessPriorityClass,
922 ProcessWx86Information,
923 ProcessHandleCount,
924 ProcessAffinityMask,
925 ProcessPriorityBoost,
926 ProcessDeviceMap,
927 ProcessSessionInformation,
928 ProcessForegroundInformation,
929 ProcessWow64Information,
930 ProcessImageFileName,
931 ProcessLUIDDeviceMapsEnabled,
932 ProcessBreakOnTermination,
933 ProcessDebugObjectHandle,
934 ProcessDebugFlags,
935 ProcessHandleTracing,
936 ProcessIoPriority,
937 ProcessExecuteFlags,
938 ProcessTlsInformation,
939 ProcessCookie,
940 ProcessImageInformation,
941 ProcessCycleTime,
942 ProcessPagePriority,
943 ProcessInstrumentationCallback,
944 ProcessThreadStackAllocation,
945 ProcessWorkingSetWatchEx,
946 ProcessImageFileNameWin32,
947 ProcessImageFileMapping,
948 ProcessAffinityUpdateMode,
949 ProcessMemoryAllocationMode,
950 ProcessGroupInformation,
951 ProcessTokenVirtualizationEnabled,
952 ProcessConsoleHostProcess,
953 ProcessWindowInformation,
954 MaxProcessInfoClass
955 } PROCESSINFOCLASS;
956
957 typedef enum _THREADINFOCLASS {
958 ThreadBasicInformation,
959 ThreadTimes,
960 ThreadPriority,
961 ThreadBasePriority,
962 ThreadAffinityMask,
963 ThreadImpersonationToken,
964 ThreadDescriptorTableEntry,
965 ThreadEnableAlignmentFaultFixup,
966 ThreadEventPair_Reusable,
967 ThreadQuerySetWin32StartAddress,
968 ThreadZeroTlsCell,
969 ThreadPerformanceCount,
970 ThreadAmILastThread,
971 ThreadIdealProcessor,
972 ThreadPriorityBoost,
973 ThreadSetTlsArrayAddress,
974 ThreadIsIoPending,
975 ThreadHideFromDebugger,
976 ThreadBreakOnTermination,
977 ThreadSwitchLegacyState,
978 ThreadIsTerminated,
979 ThreadLastSystemCall,
980 ThreadIoPriority,
981 ThreadCycleTime,
982 ThreadPagePriority,
983 ThreadActualBasePriority,
984 ThreadTebInformation,
985 ThreadCSwitchMon,
986 ThreadCSwitchPmu,
987 ThreadWow64Context,
988 ThreadGroupInformation,
989 ThreadUmsInformation,
990 ThreadCounterProfiling,
991 ThreadIdealProcessorEx,
992 MaxThreadInfoClass
993 } THREADINFOCLASS;
994
995 typedef struct _PROCESS_BASIC_INFORMATION {
996 NTSTATUS ExitStatus;
997 struct _PEB *PebBaseAddress;
998 ULONG_PTR AffinityMask;
999 KPRIORITY BasePriority;
1000 ULONG_PTR UniqueProcessId;
1001 ULONG_PTR InheritedFromUniqueProcessId;
1002 } PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
1003
1004 typedef struct _PROCESS_WS_WATCH_INFORMATION {
1005 PVOID FaultingPc;
1006 PVOID FaultingVa;
1007 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
1008
1009 typedef struct _PROCESS_DEVICEMAP_INFORMATION {
1010 __GNU_EXTENSION union {
1011 struct {
1012 HANDLE DirectoryHandle;
1013 } Set;
1014 struct {
1015 ULONG DriveMap;
1016 UCHAR DriveType[32];
1017 } Query;
1018 };
1019 } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
1020
1021 typedef struct _KERNEL_USER_TIMES {
1022 LARGE_INTEGER CreateTime;
1023 LARGE_INTEGER ExitTime;
1024 LARGE_INTEGER KernelTime;
1025 LARGE_INTEGER UserTime;
1026 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
1027
1028 typedef struct _PROCESS_ACCESS_TOKEN {
1029 HANDLE Token;
1030 HANDLE Thread;
1031 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
1032
1033 typedef struct _PROCESS_SESSION_INFORMATION {
1034 ULONG SessionId;
1035 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
1036
1037 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
1038 IoQueryDeviceIdentifier = 0,
1039 IoQueryDeviceConfigurationData,
1040 IoQueryDeviceComponentInformation,
1041 IoQueryDeviceMaxData
1042 } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
1043
1044 typedef struct _DISK_SIGNATURE {
1045 ULONG PartitionStyle;
1046 _ANONYMOUS_UNION union {
1047 struct {
1048 ULONG Signature;
1049 ULONG CheckSum;
1050 } Mbr;
1051 struct {
1052 GUID DiskId;
1053 } Gpt;
1054 } DUMMYUNIONNAME;
1055 } DISK_SIGNATURE, *PDISK_SIGNATURE;
1056
1057 typedef ULONG_PTR
1058 (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
1059 IN PVOID Context);
1060
1061 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
1062 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
1063 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
1064 } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
1065
1066 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1067 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1068 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1069 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1070 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1071
1072 typedef VOID
1073 (NTAPI *PTIMER_APC_ROUTINE)(
1074 IN PVOID TimerContext,
1075 IN ULONG TimerLowValue,
1076 IN LONG TimerHighValue);
1077
1078 typedef struct _KUSER_SHARED_DATA
1079 {
1080 ULONG TickCountLowDeprecated;
1081 ULONG TickCountMultiplier;
1082 volatile KSYSTEM_TIME InterruptTime;
1083 volatile KSYSTEM_TIME SystemTime;
1084 volatile KSYSTEM_TIME TimeZoneBias;
1085 USHORT ImageNumberLow;
1086 USHORT ImageNumberHigh;
1087 WCHAR NtSystemRoot[260];
1088 ULONG MaxStackTraceDepth;
1089 ULONG CryptoExponent;
1090 ULONG TimeZoneId;
1091 ULONG LargePageMinimum;
1092 ULONG Reserved2[7];
1093 NT_PRODUCT_TYPE NtProductType;
1094 BOOLEAN ProductTypeIsValid;
1095 ULONG NtMajorVersion;
1096 ULONG NtMinorVersion;
1097 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
1098 ULONG Reserved1;
1099 ULONG Reserved3;
1100 volatile ULONG TimeSlip;
1101 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
1102 ULONG AltArchitecturePad[1];
1103 LARGE_INTEGER SystemExpirationDate;
1104 ULONG SuiteMask;
1105 BOOLEAN KdDebuggerEnabled;
1106 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1107 UCHAR NXSupportPolicy;
1108 #endif
1109 volatile ULONG ActiveConsoleId;
1110 volatile ULONG DismountCount;
1111 ULONG ComPlusPackage;
1112 ULONG LastSystemRITEventTickCount;
1113 ULONG NumberOfPhysicalPages;
1114 BOOLEAN SafeBootMode;
1115 #if (NTDDI_VERSION >= NTDDI_WIN7)
1116 union {
1117 UCHAR TscQpcData;
1118 struct {
1119 UCHAR TscQpcEnabled:1;
1120 UCHAR TscQpcSpareFlag:1;
1121 UCHAR TscQpcShift:6;
1122 } DUMMYSTRUCTNAME;
1123 } DUMMYUNIONNAME;
1124 UCHAR TscQpcPad[2];
1125 #endif
1126 #if (NTDDI_VERSION >= NTDDI_VISTA)
1127 union {
1128 ULONG SharedDataFlags;
1129 struct {
1130 ULONG DbgErrorPortPresent:1;
1131 ULONG DbgElevationEnabled:1;
1132 ULONG DbgVirtEnabled:1;
1133 ULONG DbgInstallerDetectEnabled:1;
1134 ULONG DbgSystemDllRelocated:1;
1135 ULONG DbgDynProcessorEnabled:1;
1136 ULONG DbgSEHValidationEnabled:1;
1137 ULONG SpareBits:25;
1138 } DUMMYSTRUCTNAME2;
1139 } DUMMYUNIONNAME2;
1140 #else
1141 ULONG TraceLogging;
1142 #endif
1143 ULONG DataFlagsPad[1];
1144 ULONGLONG TestRetInstruction;
1145 ULONG SystemCall;
1146 ULONG SystemCallReturn;
1147 ULONGLONG SystemCallPad[3];
1148 _ANONYMOUS_UNION union {
1149 volatile KSYSTEM_TIME TickCount;
1150 volatile ULONG64 TickCountQuad;
1151 _ANONYMOUS_STRUCT struct {
1152 ULONG ReservedTickCountOverlay[3];
1153 ULONG TickCountPad[1];
1154 } DUMMYSTRUCTNAME;
1155 } DUMMYUNIONNAME3;
1156 ULONG Cookie;
1157 ULONG CookiePad[1];
1158 #if (NTDDI_VERSION >= NTDDI_WS03)
1159 LONGLONG ConsoleSessionForegroundProcessId;
1160 ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
1161 #endif
1162 #if (NTDDI_VERSION >= NTDDI_VISTA)
1163 #if (NTDDI_VERSION >= NTDDI_WIN7)
1164 USHORT UserModeGlobalLogger[16];
1165 #else
1166 USHORT UserModeGlobalLogger[8];
1167 ULONG HeapTracingPid[2];
1168 ULONG CritSecTracingPid[2];
1169 #endif
1170 ULONG ImageFileExecutionOptions;
1171 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1172 ULONG LangGenerationCount;
1173 #else
1174 /* 4 bytes padding */
1175 #endif
1176 ULONGLONG Reserved5;
1177 volatile ULONG64 InterruptTimeBias;
1178 #endif
1179 #if (NTDDI_VERSION >= NTDDI_WIN7)
1180 volatile ULONG64 TscQpcBias;
1181 volatile ULONG ActiveProcessorCount;
1182 volatile USHORT ActiveGroupCount;
1183 USHORT Reserved4;
1184 volatile ULONG AitSamplingValue;
1185 volatile ULONG AppCompatFlag;
1186 ULONGLONG SystemDllNativeRelocation;
1187 ULONG SystemDllWowRelocation;
1188 ULONG XStatePad[1];
1189 XSTATE_CONFIGURATION XState;
1190 #endif
1191 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
1192
1193 #ifdef _X86_
1194
1195 #define KERNEL_STACK_SIZE 12288
1196 #define KERNEL_LARGE_STACK_SIZE 61440
1197 #define KERNEL_LARGE_STACK_COMMIT 12288
1198
1199 #define SIZE_OF_80387_REGISTERS 80
1200
1201 #define PCR_MINOR_VERSION 1
1202 #define PCR_MAJOR_VERSION 1
1203
1204 #if !defined(RC_INVOKED)
1205
1206 #define CONTEXT_i386 0x10000
1207 #define CONTEXT_i486 0x10000
1208 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1209 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1210 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1211 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1212 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1213 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1214
1215 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1216
1217 #endif /* !defined(RC_INVOKED) */
1218
1219 typedef struct _KPCR {
1220 union {
1221 NT_TIB NtTib;
1222 struct {
1223 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
1224 PVOID Used_StackBase;
1225 PVOID Spare2;
1226 PVOID TssCopy;
1227 ULONG ContextSwitches;
1228 KAFFINITY SetMemberCopy;
1229 PVOID Used_Self;
1230 };
1231 };
1232 struct _KPCR *SelfPcr;
1233 struct _KPRCB *Prcb;
1234 KIRQL Irql;
1235 ULONG IRR;
1236 ULONG IrrActive;
1237 ULONG IDR;
1238 PVOID KdVersionBlock;
1239 struct _KIDTENTRY *IDT;
1240 struct _KGDTENTRY *GDT;
1241 struct _KTSS *TSS;
1242 USHORT MajorVersion;
1243 USHORT MinorVersion;
1244 KAFFINITY SetMember;
1245 ULONG StallScaleFactor;
1246 UCHAR SpareUnused;
1247 UCHAR Number;
1248 UCHAR Spare0;
1249 UCHAR SecondLevelCacheAssociativity;
1250 ULONG VdmAlert;
1251 ULONG KernelReserved[14];
1252 ULONG SecondLevelCacheSize;
1253 ULONG HalReserved[16];
1254 } KPCR, *PKPCR;
1255
1256 typedef struct _FLOATING_SAVE_AREA {
1257 ULONG ControlWord;
1258 ULONG StatusWord;
1259 ULONG TagWord;
1260 ULONG ErrorOffset;
1261 ULONG ErrorSelector;
1262 ULONG DataOffset;
1263 ULONG DataSelector;
1264 UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
1265 ULONG Cr0NpxState;
1266 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
1267
1268 #include "pshpack4.h"
1269 typedef struct _CONTEXT {
1270 ULONG ContextFlags;
1271 ULONG Dr0;
1272 ULONG Dr1;
1273 ULONG Dr2;
1274 ULONG Dr3;
1275 ULONG Dr6;
1276 ULONG Dr7;
1277 FLOATING_SAVE_AREA FloatSave;
1278 ULONG SegGs;
1279 ULONG SegFs;
1280 ULONG SegEs;
1281 ULONG SegDs;
1282 ULONG Edi;
1283 ULONG Esi;
1284 ULONG Ebx;
1285 ULONG Edx;
1286 ULONG Ecx;
1287 ULONG Eax;
1288 ULONG Ebp;
1289 ULONG Eip;
1290 ULONG SegCs;
1291 ULONG EFlags;
1292 ULONG Esp;
1293 ULONG SegSs;
1294 UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
1295 } CONTEXT;
1296 #include "poppack.h"
1297
1298 #endif /* _X86_ */
1299
1300 #ifdef _AMD64_
1301
1302 #if !defined(RC_INVOKED)
1303
1304 #define CONTEXT_AMD64 0x100000
1305
1306 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1307 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1308 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1309 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1310 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1311
1312 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1313 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1314
1315 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
1316
1317 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1318 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1319 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1320 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1321
1322 #endif /* RC_INVOKED */
1323
1324 #endif /* _AMD64_ */
1325
1326 typedef enum _INTERLOCKED_RESULT {
1327 ResultNegative = RESULT_NEGATIVE,
1328 ResultZero = RESULT_ZERO,
1329 ResultPositive = RESULT_POSITIVE
1330 } INTERLOCKED_RESULT;
1331
1332 typedef struct _OSVERSIONINFOA {
1333 ULONG dwOSVersionInfoSize;
1334 ULONG dwMajorVersion;
1335 ULONG dwMinorVersion;
1336 ULONG dwBuildNumber;
1337 ULONG dwPlatformId;
1338 CHAR szCSDVersion[128];
1339 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
1340
1341 typedef struct _OSVERSIONINFOW {
1342 ULONG dwOSVersionInfoSize;
1343 ULONG dwMajorVersion;
1344 ULONG dwMinorVersion;
1345 ULONG dwBuildNumber;
1346 ULONG dwPlatformId;
1347 WCHAR szCSDVersion[128];
1348 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
1349
1350 typedef struct _OSVERSIONINFOEXA {
1351 ULONG dwOSVersionInfoSize;
1352 ULONG dwMajorVersion;
1353 ULONG dwMinorVersion;
1354 ULONG dwBuildNumber;
1355 ULONG dwPlatformId;
1356 CHAR szCSDVersion[128];
1357 USHORT wServicePackMajor;
1358 USHORT wServicePackMinor;
1359 USHORT wSuiteMask;
1360 UCHAR wProductType;
1361 UCHAR wReserved;
1362 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
1363
1364 typedef struct _OSVERSIONINFOEXW {
1365 ULONG dwOSVersionInfoSize;
1366 ULONG dwMajorVersion;
1367 ULONG dwMinorVersion;
1368 ULONG dwBuildNumber;
1369 ULONG dwPlatformId;
1370 WCHAR szCSDVersion[128];
1371 USHORT wServicePackMajor;
1372 USHORT wServicePackMinor;
1373 USHORT wSuiteMask;
1374 UCHAR wProductType;
1375 UCHAR wReserved;
1376 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
1377
1378 #ifdef UNICODE
1379 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
1380 typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
1381 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
1382 typedef OSVERSIONINFOW OSVERSIONINFO;
1383 typedef POSVERSIONINFOW POSVERSIONINFO;
1384 typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
1385 #else
1386 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
1387 typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
1388 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
1389 typedef OSVERSIONINFOA OSVERSIONINFO;
1390 typedef POSVERSIONINFOA POSVERSIONINFO;
1391 typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
1392 #endif /* UNICODE */
1393
1394 /* Executive Types */
1395
1396 #define PROTECTED_POOL 0x80000000
1397
1398 typedef struct _ZONE_SEGMENT_HEADER {
1399 SINGLE_LIST_ENTRY SegmentList;
1400 PVOID Reserved;
1401 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
1402
1403 typedef struct _ZONE_HEADER {
1404 SINGLE_LIST_ENTRY FreeList;
1405 SINGLE_LIST_ENTRY SegmentList;
1406 ULONG BlockSize;
1407 ULONG TotalSegmentSize;
1408 } ZONE_HEADER, *PZONE_HEADER;
1409
1410 /* Executive Functions */
1411
1412 static __inline PVOID
1413 ExAllocateFromZone(
1414 IN PZONE_HEADER Zone)
1415 {
1416 if (Zone->FreeList.Next)
1417 Zone->FreeList.Next = Zone->FreeList.Next->Next;
1418 return (PVOID) Zone->FreeList.Next;
1419 }
1420
1421 static __inline PVOID
1422 ExFreeToZone(
1423 IN PZONE_HEADER Zone,
1424 IN PVOID Block)
1425 {
1426 ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
1427 Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
1428 return ((PSINGLE_LIST_ENTRY) Block)->Next;
1429 }
1430
1431 /*
1432 * PVOID
1433 * ExInterlockedAllocateFromZone(
1434 * IN PZONE_HEADER Zone,
1435 * IN PKSPIN_LOCK Lock)
1436 */
1437 #define ExInterlockedAllocateFromZone(Zone, Lock) \
1438 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
1439
1440 /* PVOID
1441 * ExInterlockedFreeToZone(
1442 * IN PZONE_HEADER Zone,
1443 * IN PVOID Block,
1444 * IN PKSPIN_LOCK Lock);
1445 */
1446 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
1447 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
1448
1449 /*
1450 * BOOLEAN
1451 * ExIsFullZone(
1452 * IN PZONE_HEADER Zone)
1453 */
1454 #define ExIsFullZone(Zone) \
1455 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
1456
1457 /* BOOLEAN
1458 * ExIsObjectInFirstZoneSegment(
1459 * IN PZONE_HEADER Zone,
1460 * IN PVOID Object);
1461 */
1462 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
1463 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
1464 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
1465 (Zone)->TotalSegmentSize)) )
1466
1467 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
1468 #define ExAcquireResourceShared ExAcquireResourceSharedLite
1469 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
1470 #define ExDeleteResource ExDeleteResourceLite
1471 #define ExInitializeResource ExInitializeResourceLite
1472 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
1473 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
1474 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
1475 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
1476
1477 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1478
1479 NTKERNELAPI
1480 NTSTATUS
1481 NTAPI
1482 ExExtendZone(
1483 IN OUT PZONE_HEADER Zone,
1484 IN OUT PVOID Segment,
1485 IN ULONG SegmentSize);
1486
1487 NTKERNELAPI
1488 NTSTATUS
1489 NTAPI
1490 ExInitializeZone(
1491 OUT PZONE_HEADER Zone,
1492 IN ULONG BlockSize,
1493 IN OUT PVOID InitialSegment,
1494 IN ULONG InitialSegmentSize);
1495
1496 NTKERNELAPI
1497 NTSTATUS
1498 NTAPI
1499 ExInterlockedExtendZone(
1500 IN OUT PZONE_HEADER Zone,
1501 IN OUT PVOID Segment,
1502 IN ULONG SegmentSize,
1503 IN OUT PKSPIN_LOCK Lock);
1504
1505 NTKERNELAPI
1506 NTSTATUS
1507 NTAPI
1508 ExUuidCreate(
1509 OUT UUID *Uuid);
1510
1511 NTKERNELAPI
1512 DECLSPEC_NORETURN
1513 VOID
1514 NTAPI
1515 ExRaiseAccessViolation(
1516 VOID);
1517
1518 NTKERNELAPI
1519 DECLSPEC_NORETURN
1520 VOID
1521 NTAPI
1522 ExRaiseDatatypeMisalignment(
1523 VOID);
1524
1525 #endif
1526
1527 #ifdef _X86_
1528
1529 NTKERNELAPI
1530 INTERLOCKED_RESULT
1531 FASTCALL
1532 Exfi386InterlockedIncrementLong(
1533 IN OUT LONG volatile *Addend);
1534
1535 NTKERNELAPI
1536 INTERLOCKED_RESULT
1537 FASTCALL
1538 Exfi386InterlockedDecrementLong(
1539 IN PLONG Addend);
1540
1541 NTKERNELAPI
1542 ULONG
1543 FASTCALL
1544 Exfi386InterlockedExchangeUlong(
1545 IN PULONG Target,
1546 IN ULONG Value);
1547
1548 #endif /* _X86_ */
1549
1550 #ifndef _ARC_DDK_
1551 #define _ARC_DDK_
1552 typedef enum _CONFIGURATION_TYPE {
1553 ArcSystem,
1554 CentralProcessor,
1555 FloatingPointProcessor,
1556 PrimaryIcache,
1557 PrimaryDcache,
1558 SecondaryIcache,
1559 SecondaryDcache,
1560 SecondaryCache,
1561 EisaAdapter,
1562 TcAdapter,
1563 ScsiAdapter,
1564 DtiAdapter,
1565 MultiFunctionAdapter,
1566 DiskController,
1567 TapeController,
1568 CdromController,
1569 WormController,
1570 SerialController,
1571 NetworkController,
1572 DisplayController,
1573 ParallelController,
1574 PointerController,
1575 KeyboardController,
1576 AudioController,
1577 OtherController,
1578 DiskPeripheral,
1579 FloppyDiskPeripheral,
1580 TapePeripheral,
1581 ModemPeripheral,
1582 MonitorPeripheral,
1583 PrinterPeripheral,
1584 PointerPeripheral,
1585 KeyboardPeripheral,
1586 TerminalPeripheral,
1587 OtherPeripheral,
1588 LinePeripheral,
1589 NetworkPeripheral,
1590 SystemMemory,
1591 DockingInformation,
1592 RealModeIrqRoutingTable,
1593 RealModePCIEnumeration,
1594 MaximumType
1595 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
1596 #endif /* !_ARC_DDK_ */
1597
1598 typedef struct _CONTROLLER_OBJECT {
1599 CSHORT Type;
1600 CSHORT Size;
1601 PVOID ControllerExtension;
1602 KDEVICE_QUEUE DeviceWaitQueue;
1603 ULONG Spare1;
1604 LARGE_INTEGER Spare2;
1605 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
1606
1607 typedef struct _CONFIGURATION_INFORMATION {
1608 ULONG DiskCount;
1609 ULONG FloppyCount;
1610 ULONG CdRomCount;
1611 ULONG TapeCount;
1612 ULONG ScsiPortCount;
1613 ULONG SerialCount;
1614 ULONG ParallelCount;
1615 BOOLEAN AtDiskPrimaryAddressClaimed;
1616 BOOLEAN AtDiskSecondaryAddressClaimed;
1617 ULONG Version;
1618 ULONG MediumChangerCount;
1619 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
1620
1621 typedef
1622 NTSTATUS
1623 (NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
1624 IN PVOID Context,
1625 IN PUNICODE_STRING PathName,
1626 IN INTERFACE_TYPE BusType,
1627 IN ULONG BusNumber,
1628 IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
1629 IN CONFIGURATION_TYPE ControllerType,
1630 IN ULONG ControllerNumber,
1631 IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
1632 IN CONFIGURATION_TYPE PeripheralType,
1633 IN ULONG PeripheralNumber,
1634 IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
1635
1636 typedef
1637 VOID
1638 (NTAPI DRIVER_REINITIALIZE)(
1639 IN struct _DRIVER_OBJECT *DriverObject,
1640 IN PVOID Context,
1641 IN ULONG Count);
1642
1643 typedef DRIVER_REINITIALIZE *PDRIVER_REINITIALIZE;
1644
1645 /** Filesystem runtime library routines **/
1646
1647 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1648 NTKERNELAPI
1649 BOOLEAN
1650 NTAPI
1651 FsRtlIsTotalDeviceFailure(
1652 IN NTSTATUS Status);
1653 #endif
1654
1655 /* Hardware Abstraction Layer Types */
1656
1657 typedef VOID
1658 (NTAPI *PciPin2Line)(
1659 IN struct _BUS_HANDLER *BusHandler,
1660 IN struct _BUS_HANDLER *RootHandler,
1661 IN PCI_SLOT_NUMBER SlotNumber,
1662 IN PPCI_COMMON_CONFIG PciData);
1663
1664 typedef VOID
1665 (NTAPI *PciLine2Pin)(
1666 IN struct _BUS_HANDLER *BusHandler,
1667 IN struct _BUS_HANDLER *RootHandler,
1668 IN PCI_SLOT_NUMBER SlotNumber,
1669 IN PPCI_COMMON_CONFIG PciNewData,
1670 IN PPCI_COMMON_CONFIG PciOldData);
1671
1672 typedef VOID
1673 (NTAPI *PciReadWriteConfig)(
1674 IN struct _BUS_HANDLER *BusHandler,
1675 IN PCI_SLOT_NUMBER Slot,
1676 IN PVOID Buffer,
1677 IN ULONG Offset,
1678 IN ULONG Length);
1679
1680 #define PCI_DATA_TAG ' ICP'
1681 #define PCI_DATA_VERSION 1
1682
1683 typedef struct _PCIBUSDATA {
1684 ULONG Tag;
1685 ULONG Version;
1686 PciReadWriteConfig ReadConfig;
1687 PciReadWriteConfig WriteConfig;
1688 PciPin2Line Pin2Line;
1689 PciLine2Pin Line2Pin;
1690 PCI_SLOT_NUMBER ParentSlot;
1691 PVOID Reserved[4];
1692 } PCIBUSDATA, *PPCIBUSDATA;
1693
1694 /* Hardware Abstraction Layer Functions */
1695
1696 #if !defined(NO_LEGACY_DRIVERS)
1697
1698 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1699
1700 NTHALAPI
1701 NTSTATUS
1702 NTAPI
1703 HalAssignSlotResources(
1704 IN PUNICODE_STRING RegistryPath,
1705 IN PUNICODE_STRING DriverClassName,
1706 IN PDRIVER_OBJECT DriverObject,
1707 IN PDEVICE_OBJECT DeviceObject,
1708 IN INTERFACE_TYPE BusType,
1709 IN ULONG BusNumber,
1710 IN ULONG SlotNumber,
1711 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
1712
1713 NTHALAPI
1714 ULONG
1715 NTAPI
1716 HalGetInterruptVector(
1717 IN INTERFACE_TYPE InterfaceType,
1718 IN ULONG BusNumber,
1719 IN ULONG BusInterruptLevel,
1720 IN ULONG BusInterruptVector,
1721 OUT PKIRQL Irql,
1722 OUT PKAFFINITY Affinity);
1723
1724 NTHALAPI
1725 ULONG
1726 NTAPI
1727 HalSetBusData(
1728 IN BUS_DATA_TYPE BusDataType,
1729 IN ULONG BusNumber,
1730 IN ULONG SlotNumber,
1731 IN PVOID Buffer,
1732 IN ULONG Length);
1733
1734 #endif
1735
1736 #endif /* !defined(NO_LEGACY_DRIVERS) */
1737
1738 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1739
1740 NTHALAPI
1741 PADAPTER_OBJECT
1742 NTAPI
1743 HalGetAdapter(
1744 IN PDEVICE_DESCRIPTION DeviceDescription,
1745 IN OUT PULONG NumberOfMapRegisters);
1746
1747 NTHALAPI
1748 BOOLEAN
1749 NTAPI
1750 HalMakeBeep(
1751 IN ULONG Frequency);
1752
1753 VOID
1754 NTAPI
1755 HalPutDmaAdapter(
1756 IN PADAPTER_OBJECT DmaAdapter);
1757
1758 NTHALAPI
1759 VOID
1760 NTAPI
1761 HalAcquireDisplayOwnership(
1762 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
1763
1764 NTHALAPI
1765 ULONG
1766 NTAPI
1767 HalGetBusData(
1768 IN BUS_DATA_TYPE BusDataType,
1769 IN ULONG BusNumber,
1770 IN ULONG SlotNumber,
1771 OUT PVOID Buffer,
1772 IN ULONG Length);
1773
1774 NTHALAPI
1775 ULONG
1776 NTAPI
1777 HalGetBusDataByOffset(
1778 IN BUS_DATA_TYPE BusDataType,
1779 IN ULONG BusNumber,
1780 IN ULONG SlotNumber,
1781 OUT PVOID Buffer,
1782 IN ULONG Offset,
1783 IN ULONG Length);
1784
1785 NTHALAPI
1786 ULONG
1787 NTAPI
1788 HalSetBusDataByOffset(
1789 IN BUS_DATA_TYPE BusDataType,
1790 IN ULONG BusNumber,
1791 IN ULONG SlotNumber,
1792 IN PVOID Buffer,
1793 IN ULONG Offset,
1794 IN ULONG Length);
1795
1796 NTHALAPI
1797 BOOLEAN
1798 NTAPI
1799 HalTranslateBusAddress(
1800 IN INTERFACE_TYPE InterfaceType,
1801 IN ULONG BusNumber,
1802 IN PHYSICAL_ADDRESS BusAddress,
1803 IN OUT PULONG AddressSpace,
1804 OUT PPHYSICAL_ADDRESS TranslatedAddress);
1805
1806 #endif
1807
1808 #if (NTDDI_VERSION >= NTDDI_WINXP)
1809 NTKERNELAPI
1810 VOID
1811 FASTCALL
1812 HalExamineMBR(
1813 IN PDEVICE_OBJECT DeviceObject,
1814 IN ULONG SectorSize,
1815 IN ULONG MBRTypeIdentifier,
1816 OUT PVOID *Buffer);
1817 #endif
1818
1819 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
1820 // nothing here
1821 #else
1822
1823 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1824 //DECLSPEC_DEPRECATED_DDK
1825 NTHALAPI
1826 VOID
1827 NTAPI
1828 IoFreeAdapterChannel(
1829 IN PADAPTER_OBJECT AdapterObject);
1830
1831 //DECLSPEC_DEPRECATED_DDK
1832 NTHALAPI
1833 BOOLEAN
1834 NTAPI
1835 IoFlushAdapterBuffers(
1836 IN PADAPTER_OBJECT AdapterObject,
1837 IN PMDL Mdl,
1838 IN PVOID MapRegisterBase,
1839 IN PVOID CurrentVa,
1840 IN ULONG Length,
1841 IN BOOLEAN WriteToDevice);
1842
1843 //DECLSPEC_DEPRECATED_DDK
1844 NTHALAPI
1845 VOID
1846 NTAPI
1847 IoFreeMapRegisters(
1848 IN PADAPTER_OBJECT AdapterObject,
1849 IN PVOID MapRegisterBase,
1850 IN ULONG NumberOfMapRegisters);
1851
1852 //DECLSPEC_DEPRECATED_DDK
1853 NTHALAPI
1854 PVOID
1855 NTAPI
1856 HalAllocateCommonBuffer(
1857 IN PADAPTER_OBJECT AdapterObject,
1858 IN ULONG Length,
1859 OUT PPHYSICAL_ADDRESS LogicalAddress,
1860 IN BOOLEAN CacheEnabled);
1861
1862 //DECLSPEC_DEPRECATED_DDK
1863 NTHALAPI
1864 VOID
1865 NTAPI
1866 HalFreeCommonBuffer(
1867 IN PADAPTER_OBJECT AdapterObject,
1868 IN ULONG Length,
1869 IN PHYSICAL_ADDRESS LogicalAddress,
1870 IN PVOID VirtualAddress,
1871 IN BOOLEAN CacheEnabled);
1872
1873 //DECLSPEC_DEPRECATED_DDK
1874 NTHALAPI
1875 ULONG
1876 NTAPI
1877 HalReadDmaCounter(
1878 IN PADAPTER_OBJECT AdapterObject);
1879
1880 NTHALAPI
1881 NTSTATUS
1882 NTAPI
1883 HalAllocateAdapterChannel(
1884 IN PADAPTER_OBJECT AdapterObject,
1885 IN PWAIT_CONTEXT_BLOCK Wcb,
1886 IN ULONG NumberOfMapRegisters,
1887 IN PDRIVER_CONTROL ExecutionRoutine);
1888
1889 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1890
1891 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
1892
1893 /* I/O Manager Functions */
1894
1895 /*
1896 * VOID IoAssignArcName(
1897 * IN PUNICODE_STRING ArcName,
1898 * IN PUNICODE_STRING DeviceName);
1899 */
1900 #define IoAssignArcName(_ArcName, _DeviceName) ( \
1901 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
1902
1903 /*
1904 * VOID
1905 * IoDeassignArcName(
1906 * IN PUNICODE_STRING ArcName)
1907 */
1908 #define IoDeassignArcName IoDeleteSymbolicLink
1909
1910 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1911
1912 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
1913 NTKERNELAPI
1914 NTSTATUS
1915 NTAPI
1916 IoAllocateAdapterChannel(
1917 IN PADAPTER_OBJECT AdapterObject,
1918 IN PDEVICE_OBJECT DeviceObject,
1919 IN ULONG NumberOfMapRegisters,
1920 IN PDRIVER_CONTROL ExecutionRoutine,
1921 IN PVOID Context);
1922 #endif
1923
1924 //DECLSPEC_DEPRECATED_DDK
1925 NTHALAPI
1926 PHYSICAL_ADDRESS
1927 NTAPI
1928 IoMapTransfer(
1929 IN PADAPTER_OBJECT AdapterObject,
1930 IN PMDL Mdl,
1931 IN PVOID MapRegisterBase,
1932 IN PVOID CurrentVa,
1933 IN OUT PULONG Length,
1934 IN BOOLEAN WriteToDevice);
1935
1936 NTKERNELAPI
1937 VOID
1938 NTAPI
1939 IoAllocateController(
1940 IN PCONTROLLER_OBJECT ControllerObject,
1941 IN PDEVICE_OBJECT DeviceObject,
1942 IN PDRIVER_CONTROL ExecutionRoutine,
1943 IN PVOID Context OPTIONAL);
1944
1945 NTKERNELAPI
1946 PCONTROLLER_OBJECT
1947 NTAPI
1948 IoCreateController(
1949 IN ULONG Size);
1950
1951 NTKERNELAPI
1952 VOID
1953 NTAPI
1954 IoDeleteController(
1955 IN PCONTROLLER_OBJECT ControllerObject);
1956
1957 NTKERNELAPI
1958 VOID
1959 NTAPI
1960 IoFreeController(
1961 IN PCONTROLLER_OBJECT ControllerObject);
1962
1963 NTKERNELAPI
1964 PCONFIGURATION_INFORMATION
1965 NTAPI
1966 IoGetConfigurationInformation(
1967 VOID);
1968
1969 NTKERNELAPI
1970 PDEVICE_OBJECT
1971 NTAPI
1972 IoGetDeviceToVerify(
1973 IN PETHREAD Thread);
1974
1975 NTKERNELAPI
1976 VOID
1977 NTAPI
1978 IoCancelFileOpen(
1979 IN PDEVICE_OBJECT DeviceObject,
1980 IN PFILE_OBJECT FileObject);
1981
1982 NTKERNELAPI
1983 PGENERIC_MAPPING
1984 NTAPI
1985 IoGetFileObjectGenericMapping(
1986 VOID);
1987
1988 NTKERNELAPI
1989 PIRP
1990 NTAPI
1991 IoMakeAssociatedIrp(
1992 IN PIRP Irp,
1993 IN CCHAR StackSize);
1994
1995 NTKERNELAPI
1996 NTSTATUS
1997 NTAPI
1998 IoQueryDeviceDescription(
1999 IN PINTERFACE_TYPE BusType OPTIONAL,
2000 IN PULONG BusNumber OPTIONAL,
2001 IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
2002 IN PULONG ControllerNumber OPTIONAL,
2003 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
2004 IN PULONG PeripheralNumber OPTIONAL,
2005 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
2006 IN OUT PVOID Context OPTIONAL);
2007
2008 NTKERNELAPI
2009 VOID
2010 NTAPI
2011 IoRaiseHardError(
2012 IN PIRP Irp,
2013 IN PVPB Vpb OPTIONAL,
2014 IN PDEVICE_OBJECT RealDeviceObject);
2015
2016 NTKERNELAPI
2017 BOOLEAN
2018 NTAPI
2019 IoRaiseInformationalHardError(
2020 IN NTSTATUS ErrorStatus,
2021 IN PUNICODE_STRING String OPTIONAL,
2022 IN PKTHREAD Thread OPTIONAL);
2023
2024 NTKERNELAPI
2025 VOID
2026 NTAPI
2027 IoRegisterBootDriverReinitialization(
2028 IN PDRIVER_OBJECT DriverObject,
2029 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
2030 IN PVOID Context OPTIONAL);
2031
2032 NTKERNELAPI
2033 VOID
2034 NTAPI
2035 IoRegisterDriverReinitialization(
2036 IN PDRIVER_OBJECT DriverObject,
2037 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
2038 IN PVOID Context OPTIONAL);
2039
2040 NTKERNELAPI
2041 NTSTATUS
2042 NTAPI
2043 IoAttachDeviceByPointer(
2044 IN PDEVICE_OBJECT SourceDevice,
2045 IN PDEVICE_OBJECT TargetDevice);
2046
2047 NTKERNELAPI
2048 NTSTATUS
2049 NTAPI
2050 IoReportDetectedDevice(
2051 IN PDRIVER_OBJECT DriverObject,
2052 IN INTERFACE_TYPE LegacyBusType,
2053 IN ULONG BusNumber,
2054 IN ULONG SlotNumber,
2055 IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
2056 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
2057 IN BOOLEAN ResourceAssigned,
2058 IN OUT PDEVICE_OBJECT *DeviceObject);
2059
2060 NTKERNELAPI
2061 NTSTATUS
2062 NTAPI
2063 IoReportResourceForDetection(
2064 IN PDRIVER_OBJECT DriverObject,
2065 IN PCM_RESOURCE_LIST DriverList OPTIONAL,
2066 IN ULONG DriverListSize OPTIONAL,
2067 IN PDEVICE_OBJECT DeviceObject OPTIONAL,
2068 IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
2069 IN ULONG DeviceListSize OPTIONAL,
2070 OUT PBOOLEAN ConflictDetected);
2071
2072 NTKERNELAPI
2073 NTSTATUS
2074 NTAPI
2075 IoReportResourceUsage(
2076 IN PUNICODE_STRING DriverClassName OPTIONAL,
2077 IN PDRIVER_OBJECT DriverObject,
2078 IN PCM_RESOURCE_LIST DriverList OPTIONAL,
2079 IN ULONG DriverListSize OPTIONAL,
2080 IN PDEVICE_OBJECT DeviceObject,
2081 IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
2082 IN ULONG DeviceListSize OPTIONAL,
2083 IN BOOLEAN OverrideConflict,
2084 OUT PBOOLEAN ConflictDetected);
2085
2086 NTKERNELAPI
2087 VOID
2088 NTAPI
2089 IoSetHardErrorOrVerifyDevice(
2090 IN PIRP Irp,
2091 IN PDEVICE_OBJECT DeviceObject);
2092
2093 NTKERNELAPI
2094 NTSTATUS
2095 NTAPI
2096 IoAssignResources(
2097 IN PUNICODE_STRING RegistryPath,
2098 IN PUNICODE_STRING DriverClassName OPTIONAL,
2099 IN PDRIVER_OBJECT DriverObject,
2100 IN PDEVICE_OBJECT DeviceObject OPTIONAL,
2101 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
2102 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
2103
2104 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2105
2106 #if (NTDDI_VERSION >= NTDDI_WINXP)
2107
2108 NTKERNELAPI
2109 NTSTATUS
2110 NTAPI
2111 IoCreateDisk(
2112 IN PDEVICE_OBJECT DeviceObject,
2113 IN struct _CREATE_DISK* Disk OPTIONAL);
2114
2115 NTKERNELAPI
2116 NTSTATUS
2117 NTAPI
2118 IoReadDiskSignature(
2119 IN PDEVICE_OBJECT DeviceObject,
2120 IN ULONG BytesPerSector,
2121 OUT PDISK_SIGNATURE Signature);
2122
2123 NTKERNELAPI
2124 NTSTATUS
2125 FASTCALL
2126 IoReadPartitionTable(
2127 IN PDEVICE_OBJECT DeviceObject,
2128 IN ULONG SectorSize,
2129 IN BOOLEAN ReturnRecognizedPartitions,
2130 OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
2131
2132 NTKERNELAPI
2133 NTSTATUS
2134 NTAPI
2135 IoReadPartitionTableEx(
2136 IN PDEVICE_OBJECT DeviceObject,
2137 IN struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
2138
2139 NTKERNELAPI
2140 NTSTATUS
2141 FASTCALL
2142 IoSetPartitionInformation(
2143 IN PDEVICE_OBJECT DeviceObject,
2144 IN ULONG SectorSize,
2145 IN ULONG PartitionNumber,
2146 IN ULONG PartitionType);
2147
2148 NTKERNELAPI
2149 NTSTATUS
2150 NTAPI
2151 IoSetPartitionInformationEx(
2152 IN PDEVICE_OBJECT DeviceObject,
2153 IN ULONG PartitionNumber,
2154 IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
2155
2156 NTKERNELAPI
2157 NTSTATUS
2158 NTAPI
2159 IoSetSystemPartition(
2160 IN PUNICODE_STRING VolumeNameString);
2161
2162 NTKERNELAPI
2163 BOOLEAN
2164 NTAPI
2165 IoSetThreadHardErrorMode(
2166 IN BOOLEAN EnableHardErrors);
2167
2168 NTKERNELAPI
2169 NTSTATUS
2170 NTAPI
2171 IoVerifyPartitionTable(
2172 IN PDEVICE_OBJECT DeviceObject,
2173 IN BOOLEAN FixErrors);
2174
2175 NTKERNELAPI
2176 NTSTATUS
2177 NTAPI
2178 IoVolumeDeviceToDosName(
2179 IN PVOID VolumeDeviceObject,
2180 OUT PUNICODE_STRING DosName);
2181
2182 NTKERNELAPI
2183 NTSTATUS
2184 FASTCALL
2185 IoWritePartitionTable(
2186 IN PDEVICE_OBJECT DeviceObject,
2187 IN ULONG SectorSize,
2188 IN ULONG SectorsPerTrack,
2189 IN ULONG NumberOfHeads,
2190 IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
2191
2192 NTKERNELAPI
2193 NTSTATUS
2194 NTAPI
2195 IoWritePartitionTableEx(
2196 IN PDEVICE_OBJECT DeviceObject,
2197 IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
2198
2199 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2200
2201 /** Kernel debugger routines **/
2202
2203 NTSYSAPI
2204 ULONG
2205 NTAPI
2206 DbgPrompt(
2207 IN PCCH Prompt,
2208 OUT PCH Response,
2209 IN ULONG MaximumResponseLength);
2210
2211 /* Kernel Functions */
2212
2213 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2214
2215 NTKERNELAPI
2216 DECLSPEC_NORETURN
2217 VOID
2218 NTAPI
2219 KeBugCheck(
2220 IN ULONG BugCheckCode);
2221
2222 NTKERNELAPI
2223 LONG
2224 NTAPI
2225 KePulseEvent(
2226 IN OUT PRKEVENT Event,
2227 IN KPRIORITY Increment,
2228 IN BOOLEAN Wait);
2229
2230 NTKERNELAPI
2231 LONG
2232 NTAPI
2233 KeSetBasePriorityThread(
2234 IN OUT PRKTHREAD Thread,
2235 IN LONG Increment);
2236
2237 #endif
2238
2239 /* Memory Manager Types */
2240
2241 typedef struct _PHYSICAL_MEMORY_RANGE {
2242 PHYSICAL_ADDRESS BaseAddress;
2243 LARGE_INTEGER NumberOfBytes;
2244 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
2245
2246 /* Memory Manager Functions */
2247
2248 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2249
2250 NTKERNELAPI
2251 PPHYSICAL_MEMORY_RANGE
2252 NTAPI
2253 MmGetPhysicalMemoryRanges(
2254 VOID);
2255
2256 NTKERNELAPI
2257 PHYSICAL_ADDRESS
2258 NTAPI
2259 MmGetPhysicalAddress(
2260 IN PVOID BaseAddress);
2261
2262 NTKERNELAPI
2263 BOOLEAN
2264 NTAPI
2265 MmIsNonPagedSystemAddressValid(
2266 IN PVOID VirtualAddress);
2267
2268 NTKERNELAPI
2269 PVOID
2270 NTAPI
2271 MmAllocateNonCachedMemory(
2272 IN SIZE_T NumberOfBytes);
2273
2274 NTKERNELAPI
2275 VOID
2276 NTAPI
2277 MmFreeNonCachedMemory(
2278 IN PVOID BaseAddress,
2279 IN SIZE_T NumberOfBytes);
2280
2281 NTKERNELAPI
2282 PVOID
2283 NTAPI
2284 MmGetVirtualForPhysical(
2285 IN PHYSICAL_ADDRESS PhysicalAddress);
2286
2287 NTKERNELAPI
2288 NTSTATUS
2289 NTAPI
2290 MmMapUserAddressesToPage(
2291 IN PVOID BaseAddress,
2292 IN SIZE_T NumberOfBytes,
2293 IN PVOID PageAddress);
2294
2295 NTKERNELAPI
2296 PVOID
2297 NTAPI
2298 MmMapVideoDisplay(
2299 IN PHYSICAL_ADDRESS PhysicalAddress,
2300 IN SIZE_T NumberOfBytes,
2301 IN MEMORY_CACHING_TYPE CacheType);
2302
2303 NTKERNELAPI
2304 NTSTATUS
2305 NTAPI
2306 MmMapViewInSessionSpace(
2307 IN PVOID Section,
2308 OUT PVOID *MappedBase,
2309 IN OUT PSIZE_T ViewSize);
2310
2311 NTKERNELAPI
2312 NTSTATUS
2313 NTAPI
2314 MmMapViewInSystemSpace(
2315 IN PVOID Section,
2316 OUT PVOID *MappedBase,
2317 IN OUT PSIZE_T ViewSize);
2318
2319 NTKERNELAPI
2320 BOOLEAN
2321 NTAPI
2322 MmIsAddressValid(
2323 IN PVOID VirtualAddress);
2324
2325 NTKERNELAPI
2326 BOOLEAN
2327 NTAPI
2328 MmIsThisAnNtAsSystem(
2329 VOID);
2330
2331 NTKERNELAPI
2332 VOID
2333 NTAPI
2334 MmLockPagableSectionByHandle(
2335 IN PVOID ImageSectionHandle);
2336
2337 NTKERNELAPI
2338 NTSTATUS
2339 NTAPI
2340 MmUnmapViewInSessionSpace(
2341 IN PVOID MappedBase);
2342
2343 NTKERNELAPI
2344 NTSTATUS
2345 NTAPI
2346 MmUnmapViewInSystemSpace(
2347 IN PVOID MappedBase);
2348
2349 NTKERNELAPI
2350 VOID
2351 NTAPI
2352 MmUnsecureVirtualMemory(
2353 IN HANDLE SecureHandle);
2354
2355 NTKERNELAPI
2356 NTSTATUS
2357 NTAPI
2358 MmRemovePhysicalMemory(
2359 IN PPHYSICAL_ADDRESS StartAddress,
2360 IN OUT PLARGE_INTEGER NumberOfBytes);
2361
2362 NTKERNELAPI
2363 HANDLE
2364 NTAPI
2365 MmSecureVirtualMemory(
2366 IN PVOID Address,
2367 IN SIZE_T Size,
2368 IN ULONG ProbeMode);
2369
2370 NTKERNELAPI
2371 VOID
2372 NTAPI
2373 MmUnmapVideoDisplay(
2374 IN PVOID BaseAddress,
2375 IN SIZE_T NumberOfBytes);
2376
2377 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2378
2379 /* NtXxx Functions */
2380
2381 NTSYSCALLAPI
2382 NTSTATUS
2383 NTAPI
2384 NtOpenProcess(
2385 OUT PHANDLE ProcessHandle,
2386 IN ACCESS_MASK DesiredAccess,
2387 IN POBJECT_ATTRIBUTES ObjectAttributes,
2388 IN PCLIENT_ID ClientId OPTIONAL);
2389
2390 NTSYSCALLAPI
2391 NTSTATUS
2392 NTAPI
2393 NtQueryInformationProcess(
2394 IN HANDLE ProcessHandle,
2395 IN PROCESSINFOCLASS ProcessInformationClass,
2396 OUT PVOID ProcessInformation OPTIONAL,
2397 IN ULONG ProcessInformationLength,
2398 OUT PULONG ReturnLength OPTIONAL);
2399
2400 /** Process manager types **/
2401
2402 typedef VOID
2403 (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)(
2404 IN HANDLE ParentId,
2405 IN HANDLE ProcessId,
2406 IN BOOLEAN Create);
2407
2408 typedef VOID
2409 (NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)(
2410 IN HANDLE ProcessId,
2411 IN HANDLE ThreadId,
2412 IN BOOLEAN Create);
2413
2414 typedef VOID
2415 (NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
2416 IN PUNICODE_STRING FullImageName,
2417 IN HANDLE ProcessId,
2418 IN PIMAGE_INFO ImageInfo);
2419
2420 /** Process manager routines **/
2421
2422 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2423
2424 NTKERNELAPI
2425 NTSTATUS
2426 NTAPI
2427 PsSetLoadImageNotifyRoutine(
2428 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
2429
2430 NTKERNELAPI
2431 NTSTATUS
2432 NTAPI
2433 PsSetCreateThreadNotifyRoutine(
2434 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
2435
2436 NTKERNELAPI
2437 NTSTATUS
2438 NTAPI
2439 PsSetCreateProcessNotifyRoutine(
2440 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
2441 IN BOOLEAN Remove);
2442
2443 NTKERNELAPI
2444 HANDLE
2445 NTAPI
2446 PsGetCurrentProcessId(
2447 VOID);
2448
2449 NTKERNELAPI
2450 HANDLE
2451 NTAPI
2452 PsGetCurrentThreadId(
2453 VOID);
2454
2455 NTKERNELAPI
2456 BOOLEAN
2457 NTAPI
2458 PsGetVersion(
2459 OUT PULONG MajorVersion OPTIONAL,
2460 OUT PULONG MinorVersion OPTIONAL,
2461 OUT PULONG BuildNumber OPTIONAL,
2462 OUT PUNICODE_STRING CSDVersion OPTIONAL);
2463
2464 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2465
2466 #if (NTDDI_VERSION >= NTDDI_WINXP)
2467
2468 NTKERNELAPI
2469 HANDLE
2470 NTAPI
2471 PsGetProcessId(
2472 IN PEPROCESS Process);
2473
2474 NTKERNELAPI
2475 NTSTATUS
2476 NTAPI
2477 PsRemoveCreateThreadNotifyRoutine(
2478 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
2479
2480 NTKERNELAPI
2481 NTSTATUS
2482 NTAPI
2483 PsRemoveLoadImageNotifyRoutine(
2484 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
2485
2486 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2487
2488 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
2489
2490 /* RTL Types */
2491
2492 typedef struct _RTL_SPLAY_LINKS {
2493 struct _RTL_SPLAY_LINKS *Parent;
2494 struct _RTL_SPLAY_LINKS *LeftChild;
2495 struct _RTL_SPLAY_LINKS *RightChild;
2496 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
2497
2498 /* RTL Functions */
2499
2500 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2501
2502 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2503 *CallersAddress = (PVOID)_ReturnAddress(); \
2504 *CallersCaller = NULL;
2505 #else
2506
2507 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2508 NTSYSAPI
2509 VOID
2510 NTAPI
2511 RtlGetCallersAddress(
2512 OUT PVOID *CallersAddress,
2513 OUT PVOID *CallersCaller);
2514 #endif
2515
2516 #endif
2517
2518 #if !defined(MIDL_PASS)
2519
2520 FORCEINLINE
2521 LUID
2522 NTAPI_INLINE
2523 RtlConvertLongToLuid(
2524 IN LONG Val)
2525 {
2526 LUID Luid;
2527 LARGE_INTEGER Temp;
2528
2529 Temp.QuadPart = Val;
2530 Luid.LowPart = Temp.u.LowPart;
2531 Luid.HighPart = Temp.u.HighPart;
2532 return Luid;
2533 }
2534
2535 FORCEINLINE
2536 LUID
2537 NTAPI_INLINE
2538 RtlConvertUlongToLuid(
2539 IN ULONG Val)
2540 {
2541 LUID Luid;
2542
2543 Luid.LowPart = Val;
2544 Luid.HighPart = 0;
2545 return Luid;
2546 }
2547
2548 #endif
2549
2550 #if defined(_AMD64_) || defined(_IA64_)
2551 //DECLSPEC_DEPRECATED_DDK_WINXP
2552 __inline
2553 LARGE_INTEGER
2554 NTAPI_INLINE
2555 RtlLargeIntegerDivide(
2556 IN LARGE_INTEGER Dividend,
2557 IN LARGE_INTEGER Divisor,
2558 OUT PLARGE_INTEGER Remainder OPTIONAL)
2559 {
2560 LARGE_INTEGER ret;
2561 ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
2562 if (Remainder)
2563 Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
2564 return ret;
2565 }
2566
2567 #else
2568
2569 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2570 NTSYSAPI
2571 LARGE_INTEGER
2572 NTAPI
2573 RtlLargeIntegerDivide(
2574 IN LARGE_INTEGER Dividend,
2575 IN LARGE_INTEGER Divisor,
2576 OUT PLARGE_INTEGER Remainder OPTIONAL);
2577 #endif
2578
2579 #endif /* defined(_AMD64_) || defined(_IA64_) */
2580
2581 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2582
2583 NTSYSAPI
2584 BOOLEAN
2585 NTAPI
2586 RtlPrefixUnicodeString(
2587 IN PCUNICODE_STRING String1,
2588 IN PCUNICODE_STRING String2,
2589 IN BOOLEAN CaseInSensitive);
2590
2591 NTSYSAPI
2592 VOID
2593 NTAPI
2594 RtlUpperString(
2595 IN OUT PSTRING DestinationString,
2596 IN const PSTRING SourceString);
2597
2598 NTSYSAPI
2599 NTSTATUS
2600 NTAPI
2601 RtlUpcaseUnicodeString(
2602 IN OUT PUNICODE_STRING DestinationString,
2603 IN PCUNICODE_STRING SourceString,
2604 IN BOOLEAN AllocateDestinationString);
2605
2606 NTSYSAPI
2607 VOID
2608 NTAPI
2609 RtlMapGenericMask(
2610 IN OUT PACCESS_MASK AccessMask,
2611 IN PGENERIC_MAPPING GenericMapping);
2612
2613 NTSYSAPI
2614 NTSTATUS
2615 NTAPI
2616 RtlVolumeDeviceToDosName(
2617 IN PVOID VolumeDeviceObject,
2618 OUT PUNICODE_STRING DosName);
2619
2620 NTSYSAPI
2621 NTSTATUS
2622 NTAPI
2623 RtlGetVersion(
2624 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
2625
2626 NTSYSAPI
2627 NTSTATUS
2628 NTAPI
2629 RtlVerifyVersionInfo(
2630 IN PRTL_OSVERSIONINFOEXW VersionInfo,
2631 IN ULONG TypeMask,
2632 IN ULONGLONG ConditionMask);
2633
2634 NTSYSAPI
2635 LONG
2636 NTAPI
2637 RtlCompareString(
2638 IN const PSTRING String1,
2639 IN const PSTRING String2,
2640 BOOLEAN CaseInSensitive);
2641
2642 NTSYSAPI
2643 VOID
2644 NTAPI
2645 RtlCopyString(
2646 OUT PSTRING DestinationString,
2647 IN const PSTRING SourceString OPTIONAL);
2648
2649 NTSYSAPI
2650 BOOLEAN
2651 NTAPI
2652 RtlEqualString(
2653 IN const PSTRING String1,
2654 IN const PSTRING String2,
2655 IN BOOLEAN CaseInSensitive);
2656
2657 NTSYSAPI
2658 NTSTATUS
2659 NTAPI
2660 RtlCharToInteger(
2661 IN PCSZ String,
2662 IN ULONG Base OPTIONAL,
2663 OUT PULONG Value);
2664
2665 NTSYSAPI
2666 CHAR
2667 NTAPI
2668 RtlUpperChar(
2669 IN CHAR Character);
2670
2671 NTSYSAPI
2672 ULONG
2673 NTAPI
2674 RtlWalkFrameChain(
2675 OUT PVOID *Callers,
2676 IN ULONG Count,
2677 IN ULONG Flags);
2678
2679 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2680
2681 /* Security reference monitor routines */
2682
2683 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2684 NTKERNELAPI
2685 BOOLEAN
2686 NTAPI
2687 SeSinglePrivilegeCheck(
2688 IN LUID PrivilegeValue,
2689 IN KPROCESSOR_MODE PreviousMode);
2690 #endif
2691
2692 /* ZwXxx Functions */
2693
2694 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2695
2696 NTSTATUS
2697 NTAPI
2698 ZwCancelTimer(
2699 IN HANDLE TimerHandle,
2700 OUT PBOOLEAN CurrentState OPTIONAL);
2701
2702 NTSTATUS
2703 NTAPI
2704 ZwCreateTimer(
2705 OUT PHANDLE TimerHandle,
2706 IN ACCESS_MASK DesiredAccess,
2707 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
2708 IN TIMER_TYPE TimerType);
2709
2710 NTSTATUS
2711 NTAPI
2712 ZwOpenTimer(
2713 OUT PHANDLE TimerHandle,
2714 IN ACCESS_MASK DesiredAccess,
2715 IN POBJECT_ATTRIBUTES ObjectAttributes);
2716
2717 NTSYSAPI
2718 NTSTATUS
2719 NTAPI
2720 ZwSetInformationThread(
2721 IN HANDLE ThreadHandle,
2722 IN THREADINFOCLASS ThreadInformationClass,
2723 IN PVOID ThreadInformation,
2724 IN ULONG ThreadInformationLength);
2725
2726 NTSTATUS
2727 NTAPI
2728 ZwSetTimer(
2729 IN HANDLE TimerHandle,
2730 IN PLARGE_INTEGER DueTime,
2731 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL,
2732 IN PVOID TimerContext OPTIONAL,
2733 IN BOOLEAN ResumeTimer,
2734 IN LONG Period OPTIONAL,
2735 OUT PBOOLEAN PreviousState OPTIONAL);
2736
2737 #endif
2738
2739 /* Windows Device Driver Kit */
2740 #include "winddk.h"
2741
2742 #ifdef __cplusplus
2743 }
2744 #endif
2745
2746
2747 #endif /* _NTDDK_ */