a636e7531bb76c588be1c4b5745a191a08c33375
[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 VOID
612 (NTAPI *pKdCheckPowerButton)(
613 VOID);
614
615 typedef
616 PVOID
617 (NTAPI *pKdMapPhysicalMemory64)(
618 IN PHYSICAL_ADDRESS PhysicalAddress,
619 IN ULONG NumberPages,
620 IN BOOLEAN FlushCurrentTLB);
621
622 typedef
623 VOID
624 (NTAPI *pKdUnmapVirtualAddress)(
625 IN PVOID VirtualAddress,
626 IN ULONG NumberPages,
627 IN BOOLEAN FlushCurrentTLB);
628
629 typedef
630 ULONG
631 (NTAPI *pKdGetPciDataByOffset)(
632 IN ULONG BusNumber,
633 IN ULONG SlotNumber,
634 OUT PVOID Buffer,
635 IN ULONG Offset,
636 IN ULONG Length);
637
638 typedef
639 ULONG
640 (NTAPI *pKdSetPciDataByOffset)(
641 IN ULONG BusNumber,
642 IN ULONG SlotNumber,
643 IN PVOID Buffer,
644 IN ULONG Offset,
645 IN ULONG Length);
646
647 typedef BOOLEAN
648 (NTAPI *PHAL_RESET_DISPLAY_PARAMETERS)(
649 IN ULONG Columns,
650 IN ULONG Rows);
651
652 typedef struct _HAL_DISPATCH {
653 ULONG Version;
654 pHalQuerySystemInformation HalQuerySystemInformation;
655 pHalSetSystemInformation HalSetSystemInformation;
656 pHalQueryBusSlots HalQueryBusSlots;
657 ULONG Spare1;
658 pHalExamineMBR HalExamineMBR;
659 pHalIoReadPartitionTable HalIoReadPartitionTable;
660 pHalIoSetPartitionInformation HalIoSetPartitionInformation;
661 pHalIoWritePartitionTable HalIoWritePartitionTable;
662 pHalHandlerForBus HalReferenceHandlerForBus;
663 pHalReferenceBusHandler HalReferenceBusHandler;
664 pHalReferenceBusHandler HalDereferenceBusHandler;
665 pHalInitPnpDriver HalInitPnpDriver;
666 pHalInitPowerManagement HalInitPowerManagement;
667 pHalGetDmaAdapter HalGetDmaAdapter;
668 pHalGetInterruptTranslator HalGetInterruptTranslator;
669 pHalStartMirroring HalStartMirroring;
670 pHalEndMirroring HalEndMirroring;
671 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory;
672 pHalEndOfBoot HalEndOfBoot;
673 pHalMirrorVerify HalMirrorVerify;
674 pHalGetAcpiTable HalGetCachedAcpiTable;
675 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback;
676 #if defined(_IA64_)
677 pHalGetErrorCapList HalGetErrorCapList;
678 pHalInjectError HalInjectError;
679 #endif
680 } HAL_DISPATCH, *PHAL_DISPATCH;
681
682 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTIFS_) || defined(_NTHAL_)
683
684 extern PHAL_DISPATCH HalDispatchTable;
685 #define HALDISPATCH HalDispatchTable
686
687 #else
688
689 extern HAL_DISPATCH HalDispatchTable;
690 #define HALDISPATCH (&HalDispatchTable)
691
692 #endif
693
694 #define HAL_DISPATCH_VERSION 3
695 #define HalDispatchTableVersion HALDISPATCH->Version
696 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
697 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
698 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
699 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
700 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
701 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
702 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
703 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
704 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
705 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
706 #define HalStartMirroring HALDISPATCH->HalStartMirroring
707 #define HalEndMirroring HALDISPATCH->HalEndMirroring
708 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
709 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
710 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
711
712 typedef struct _FILE_ALIGNMENT_INFORMATION {
713 ULONG AlignmentRequirement;
714 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION;
715
716 typedef struct _FILE_NAME_INFORMATION {
717 ULONG FileNameLength;
718 WCHAR FileName[1];
719 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
720
721
722 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION {
723 ULONG FileAttributes;
724 ULONG ReparseTag;
725 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
726
727 typedef struct _FILE_DISPOSITION_INFORMATION {
728 BOOLEAN DeleteFile;
729 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
730
731 typedef struct _FILE_END_OF_FILE_INFORMATION {
732 LARGE_INTEGER EndOfFile;
733 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
734
735 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION {
736 LARGE_INTEGER ValidDataLength;
737 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
738
739 typedef union _FILE_SEGMENT_ELEMENT {
740 PVOID64 Buffer;
741 ULONGLONG Alignment;
742 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
743
744 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
745
746 #if (NTDDI_VERSION >= NTDDI_WIN2K)
747 NTSYSAPI
748 ULONGLONG
749 NTAPI
750 VerSetConditionMask(
751 IN ULONGLONG ConditionMask,
752 IN ULONG TypeMask,
753 IN UCHAR Condition);
754 #endif
755
756 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
757 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
758 (TypeBitMask), (ComparisonType)))
759
760 /* RtlVerifyVersionInfo() TypeMask */
761
762 #define VER_MINORVERSION 0x0000001
763 #define VER_MAJORVERSION 0x0000002
764 #define VER_BUILDNUMBER 0x0000004
765 #define VER_PLATFORMID 0x0000008
766 #define VER_SERVICEPACKMINOR 0x0000010
767 #define VER_SERVICEPACKMAJOR 0x0000020
768 #define VER_SUITENAME 0x0000040
769 #define VER_PRODUCT_TYPE 0x0000080
770
771 /* RtlVerifyVersionInfo() ComparisonType */
772
773 #define VER_EQUAL 1
774 #define VER_GREATER 2
775 #define VER_GREATER_EQUAL 3
776 #define VER_LESS 4
777 #define VER_LESS_EQUAL 5
778 #define VER_AND 6
779 #define VER_OR 7
780
781 #define VER_CONDITION_MASK 7
782 #define VER_NUM_BITS_PER_CONDITION_MASK 3
783
784 typedef struct _IMAGE_INFO {
785 _ANONYMOUS_UNION union {
786 ULONG Properties;
787 _ANONYMOUS_STRUCT struct {
788 ULONG ImageAddressingMode:8;
789 ULONG SystemModeImage:1;
790 ULONG ImageMappedToAllPids:1;
791 ULONG ExtendedInfoPresent:1;
792 ULONG Reserved:22;
793 } DUMMYSTRUCTNAME;
794 } DUMMYUNIONNAME;
795 PVOID ImageBase;
796 ULONG ImageSelector;
797 SIZE_T ImageSize;
798 ULONG ImageSectionNumber;
799 } IMAGE_INFO, *PIMAGE_INFO;
800
801 #define IMAGE_ADDRESSING_MODE_32BIT 3
802
803 typedef enum _BUS_DATA_TYPE {
804 ConfigurationSpaceUndefined = -1,
805 Cmos,
806 EisaConfiguration,
807 Pos,
808 CbusConfiguration,
809 PCIConfiguration,
810 VMEConfiguration,
811 NuBusConfiguration,
812 PCMCIAConfiguration,
813 MPIConfiguration,
814 MPSAConfiguration,
815 PNPISAConfiguration,
816 SgiInternalConfiguration,
817 MaximumBusDataType
818 } BUS_DATA_TYPE, *PBUS_DATA_TYPE;
819
820 typedef struct _NT_TIB {
821 struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
822 PVOID StackBase;
823 PVOID StackLimit;
824 PVOID SubSystemTib;
825 _ANONYMOUS_UNION union {
826 PVOID FiberData;
827 ULONG Version;
828 } DUMMYUNIONNAME;
829 PVOID ArbitraryUserPointer;
830 struct _NT_TIB *Self;
831 } NT_TIB, *PNT_TIB;
832
833 typedef struct _NT_TIB32 {
834 ULONG ExceptionList;
835 ULONG StackBase;
836 ULONG StackLimit;
837 ULONG SubSystemTib;
838 __GNU_EXTENSION union {
839 ULONG FiberData;
840 ULONG Version;
841 };
842 ULONG ArbitraryUserPointer;
843 ULONG Self;
844 } NT_TIB32,*PNT_TIB32;
845
846 typedef struct _NT_TIB64 {
847 ULONG64 ExceptionList;
848 ULONG64 StackBase;
849 ULONG64 StackLimit;
850 ULONG64 SubSystemTib;
851 __GNU_EXTENSION union {
852 ULONG64 FiberData;
853 ULONG Version;
854 };
855 ULONG64 ArbitraryUserPointer;
856 ULONG64 Self;
857 } NT_TIB64,*PNT_TIB64;
858
859 typedef enum _PROCESSINFOCLASS {
860 ProcessBasicInformation,
861 ProcessQuotaLimits,
862 ProcessIoCounters,
863 ProcessVmCounters,
864 ProcessTimes,
865 ProcessBasePriority,
866 ProcessRaisePriority,
867 ProcessDebugPort,
868 ProcessExceptionPort,
869 ProcessAccessToken,
870 ProcessLdtInformation,
871 ProcessLdtSize,
872 ProcessDefaultHardErrorMode,
873 ProcessIoPortHandlers,
874 ProcessPooledUsageAndLimits,
875 ProcessWorkingSetWatch,
876 ProcessUserModeIOPL,
877 ProcessEnableAlignmentFaultFixup,
878 ProcessPriorityClass,
879 ProcessWx86Information,
880 ProcessHandleCount,
881 ProcessAffinityMask,
882 ProcessPriorityBoost,
883 ProcessDeviceMap,
884 ProcessSessionInformation,
885 ProcessForegroundInformation,
886 ProcessWow64Information,
887 ProcessImageFileName,
888 ProcessLUIDDeviceMapsEnabled,
889 ProcessBreakOnTermination,
890 ProcessDebugObjectHandle,
891 ProcessDebugFlags,
892 ProcessHandleTracing,
893 ProcessIoPriority,
894 ProcessExecuteFlags,
895 ProcessTlsInformation,
896 ProcessCookie,
897 ProcessImageInformation,
898 ProcessCycleTime,
899 ProcessPagePriority,
900 ProcessInstrumentationCallback,
901 ProcessThreadStackAllocation,
902 ProcessWorkingSetWatchEx,
903 ProcessImageFileNameWin32,
904 ProcessImageFileMapping,
905 ProcessAffinityUpdateMode,
906 ProcessMemoryAllocationMode,
907 ProcessGroupInformation,
908 ProcessTokenVirtualizationEnabled,
909 ProcessConsoleHostProcess,
910 ProcessWindowInformation,
911 MaxProcessInfoClass
912 } PROCESSINFOCLASS;
913
914 typedef enum _THREADINFOCLASS {
915 ThreadBasicInformation,
916 ThreadTimes,
917 ThreadPriority,
918 ThreadBasePriority,
919 ThreadAffinityMask,
920 ThreadImpersonationToken,
921 ThreadDescriptorTableEntry,
922 ThreadEnableAlignmentFaultFixup,
923 ThreadEventPair_Reusable,
924 ThreadQuerySetWin32StartAddress,
925 ThreadZeroTlsCell,
926 ThreadPerformanceCount,
927 ThreadAmILastThread,
928 ThreadIdealProcessor,
929 ThreadPriorityBoost,
930 ThreadSetTlsArrayAddress,
931 ThreadIsIoPending,
932 ThreadHideFromDebugger,
933 ThreadBreakOnTermination,
934 ThreadSwitchLegacyState,
935 ThreadIsTerminated,
936 ThreadLastSystemCall,
937 ThreadIoPriority,
938 ThreadCycleTime,
939 ThreadPagePriority,
940 ThreadActualBasePriority,
941 ThreadTebInformation,
942 ThreadCSwitchMon,
943 ThreadCSwitchPmu,
944 ThreadWow64Context,
945 ThreadGroupInformation,
946 ThreadUmsInformation,
947 ThreadCounterProfiling,
948 ThreadIdealProcessorEx,
949 MaxThreadInfoClass
950 } THREADINFOCLASS;
951
952 typedef struct _PROCESS_BASIC_INFORMATION {
953 NTSTATUS ExitStatus;
954 struct _PEB *PebBaseAddress;
955 ULONG_PTR AffinityMask;
956 KPRIORITY BasePriority;
957 ULONG_PTR UniqueProcessId;
958 ULONG_PTR InheritedFromUniqueProcessId;
959 } PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION;
960
961 typedef struct _PROCESS_WS_WATCH_INFORMATION {
962 PVOID FaultingPc;
963 PVOID FaultingVa;
964 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;
965
966 typedef struct _PROCESS_DEVICEMAP_INFORMATION {
967 __GNU_EXTENSION union {
968 struct {
969 HANDLE DirectoryHandle;
970 } Set;
971 struct {
972 ULONG DriveMap;
973 UCHAR DriveType[32];
974 } Query;
975 };
976 } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
977
978 typedef struct _KERNEL_USER_TIMES {
979 LARGE_INTEGER CreateTime;
980 LARGE_INTEGER ExitTime;
981 LARGE_INTEGER KernelTime;
982 LARGE_INTEGER UserTime;
983 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
984
985 typedef struct _PROCESS_ACCESS_TOKEN {
986 HANDLE Token;
987 HANDLE Thread;
988 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;
989
990 typedef struct _PROCESS_SESSION_INFORMATION {
991 ULONG SessionId;
992 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION;
993
994 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT {
995 IoQueryDeviceIdentifier = 0,
996 IoQueryDeviceConfigurationData,
997 IoQueryDeviceComponentInformation,
998 IoQueryDeviceMaxData
999 } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT;
1000
1001 typedef struct _DISK_SIGNATURE {
1002 ULONG PartitionStyle;
1003 _ANONYMOUS_UNION union {
1004 struct {
1005 ULONG Signature;
1006 ULONG CheckSum;
1007 } Mbr;
1008 struct {
1009 GUID DiskId;
1010 } Gpt;
1011 } DUMMYUNIONNAME;
1012 } DISK_SIGNATURE, *PDISK_SIGNATURE;
1013
1014 typedef ULONG_PTR
1015 (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)(
1016 IN PVOID Context);
1017
1018 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS {
1019 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
1020 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
1021 } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
1022
1023 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1024 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1025 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1026 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1027 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1028
1029 typedef VOID
1030 (NTAPI *PTIMER_APC_ROUTINE)(
1031 IN PVOID TimerContext,
1032 IN ULONG TimerLowValue,
1033 IN LONG TimerHighValue);
1034
1035 typedef struct _KUSER_SHARED_DATA
1036 {
1037 ULONG TickCountLowDeprecated;
1038 ULONG TickCountMultiplier;
1039 volatile KSYSTEM_TIME InterruptTime;
1040 volatile KSYSTEM_TIME SystemTime;
1041 volatile KSYSTEM_TIME TimeZoneBias;
1042 USHORT ImageNumberLow;
1043 USHORT ImageNumberHigh;
1044 WCHAR NtSystemRoot[260];
1045 ULONG MaxStackTraceDepth;
1046 ULONG CryptoExponent;
1047 ULONG TimeZoneId;
1048 ULONG LargePageMinimum;
1049 ULONG Reserved2[7];
1050 NT_PRODUCT_TYPE NtProductType;
1051 BOOLEAN ProductTypeIsValid;
1052 ULONG NtMajorVersion;
1053 ULONG NtMinorVersion;
1054 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
1055 ULONG Reserved1;
1056 ULONG Reserved3;
1057 volatile ULONG TimeSlip;
1058 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
1059 ULONG AltArchitecturePad[1];
1060 LARGE_INTEGER SystemExpirationDate;
1061 ULONG SuiteMask;
1062 BOOLEAN KdDebuggerEnabled;
1063 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1064 UCHAR NXSupportPolicy;
1065 #endif
1066 volatile ULONG ActiveConsoleId;
1067 volatile ULONG DismountCount;
1068 ULONG ComPlusPackage;
1069 ULONG LastSystemRITEventTickCount;
1070 ULONG NumberOfPhysicalPages;
1071 BOOLEAN SafeBootMode;
1072 #if (NTDDI_VERSION >= NTDDI_WIN7)
1073 union {
1074 UCHAR TscQpcData;
1075 struct {
1076 UCHAR TscQpcEnabled:1;
1077 UCHAR TscQpcSpareFlag:1;
1078 UCHAR TscQpcShift:6;
1079 } DUMMYSTRUCTNAME;
1080 } DUMMYUNIONNAME;
1081 UCHAR TscQpcPad[2];
1082 #endif
1083 #if (NTDDI_VERSION >= NTDDI_VISTA)
1084 union {
1085 ULONG SharedDataFlags;
1086 struct {
1087 ULONG DbgErrorPortPresent:1;
1088 ULONG DbgElevationEnabled:1;
1089 ULONG DbgVirtEnabled:1;
1090 ULONG DbgInstallerDetectEnabled:1;
1091 ULONG DbgSystemDllRelocated:1;
1092 ULONG DbgDynProcessorEnabled:1;
1093 ULONG DbgSEHValidationEnabled:1;
1094 ULONG SpareBits:25;
1095 } DUMMYSTRUCTNAME2;
1096 } DUMMYUNIONNAME2;
1097 #else
1098 ULONG TraceLogging;
1099 #endif
1100 ULONG DataFlagsPad[1];
1101 ULONGLONG TestRetInstruction;
1102 ULONG SystemCall;
1103 ULONG SystemCallReturn;
1104 ULONGLONG SystemCallPad[3];
1105 _ANONYMOUS_UNION union {
1106 volatile KSYSTEM_TIME TickCount;
1107 volatile ULONG64 TickCountQuad;
1108 _ANONYMOUS_STRUCT struct {
1109 ULONG ReservedTickCountOverlay[3];
1110 ULONG TickCountPad[1];
1111 } DUMMYSTRUCTNAME;
1112 } DUMMYUNIONNAME3;
1113 ULONG Cookie;
1114 ULONG CookiePad[1];
1115 #if (NTDDI_VERSION >= NTDDI_WS03)
1116 LONGLONG ConsoleSessionForegroundProcessId;
1117 ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
1118 #endif
1119 #if (NTDDI_VERSION >= NTDDI_VISTA)
1120 #if (NTDDI_VERSION >= NTDDI_WIN7)
1121 USHORT UserModeGlobalLogger[16];
1122 #else
1123 USHORT UserModeGlobalLogger[8];
1124 ULONG HeapTracingPid[2];
1125 ULONG CritSecTracingPid[2];
1126 #endif
1127 ULONG ImageFileExecutionOptions;
1128 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1129 ULONG LangGenerationCount;
1130 #else
1131 /* 4 bytes padding */
1132 #endif
1133 ULONGLONG Reserved5;
1134 volatile ULONG64 InterruptTimeBias;
1135 #endif
1136 #if (NTDDI_VERSION >= NTDDI_WIN7)
1137 volatile ULONG64 TscQpcBias;
1138 volatile ULONG ActiveProcessorCount;
1139 volatile USHORT ActiveGroupCount;
1140 USHORT Reserved4;
1141 volatile ULONG AitSamplingValue;
1142 volatile ULONG AppCompatFlag;
1143 ULONGLONG SystemDllNativeRelocation;
1144 ULONG SystemDllWowRelocation;
1145 ULONG XStatePad[1];
1146 XSTATE_CONFIGURATION XState;
1147 #endif
1148 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
1149
1150 #ifdef _X86_
1151
1152 #define KERNEL_STACK_SIZE 12288
1153 #define KERNEL_LARGE_STACK_SIZE 61440
1154 #define KERNEL_LARGE_STACK_COMMIT 12288
1155
1156 #define SIZE_OF_80387_REGISTERS 80
1157
1158 #define PCR_MINOR_VERSION 1
1159 #define PCR_MAJOR_VERSION 1
1160
1161 #if !defined(RC_INVOKED)
1162
1163 #define CONTEXT_i386 0x10000
1164 #define CONTEXT_i486 0x10000
1165 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
1166 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
1167 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
1168 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
1169 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
1170 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
1171
1172 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
1173
1174 #endif /* !defined(RC_INVOKED) */
1175
1176 typedef struct _KPCR {
1177 union {
1178 NT_TIB NtTib;
1179 struct {
1180 struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList;
1181 PVOID Used_StackBase;
1182 PVOID Spare2;
1183 PVOID TssCopy;
1184 ULONG ContextSwitches;
1185 KAFFINITY SetMemberCopy;
1186 PVOID Used_Self;
1187 };
1188 };
1189 struct _KPCR *SelfPcr;
1190 struct _KPRCB *Prcb;
1191 KIRQL Irql;
1192 ULONG IRR;
1193 ULONG IrrActive;
1194 ULONG IDR;
1195 PVOID KdVersionBlock;
1196 struct _KIDTENTRY *IDT;
1197 struct _KGDTENTRY *GDT;
1198 struct _KTSS *TSS;
1199 USHORT MajorVersion;
1200 USHORT MinorVersion;
1201 KAFFINITY SetMember;
1202 ULONG StallScaleFactor;
1203 UCHAR SpareUnused;
1204 UCHAR Number;
1205 UCHAR Spare0;
1206 UCHAR SecondLevelCacheAssociativity;
1207 ULONG VdmAlert;
1208 ULONG KernelReserved[14];
1209 ULONG SecondLevelCacheSize;
1210 ULONG HalReserved[16];
1211 } KPCR, *PKPCR;
1212
1213 typedef struct _FLOATING_SAVE_AREA {
1214 ULONG ControlWord;
1215 ULONG StatusWord;
1216 ULONG TagWord;
1217 ULONG ErrorOffset;
1218 ULONG ErrorSelector;
1219 ULONG DataOffset;
1220 ULONG DataSelector;
1221 UCHAR RegisterArea[SIZE_OF_80387_REGISTERS];
1222 ULONG Cr0NpxState;
1223 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
1224
1225 #include "pshpack4.h"
1226 typedef struct _CONTEXT {
1227 ULONG ContextFlags;
1228 ULONG Dr0;
1229 ULONG Dr1;
1230 ULONG Dr2;
1231 ULONG Dr3;
1232 ULONG Dr6;
1233 ULONG Dr7;
1234 FLOATING_SAVE_AREA FloatSave;
1235 ULONG SegGs;
1236 ULONG SegFs;
1237 ULONG SegEs;
1238 ULONG SegDs;
1239 ULONG Edi;
1240 ULONG Esi;
1241 ULONG Ebx;
1242 ULONG Edx;
1243 ULONG Ecx;
1244 ULONG Eax;
1245 ULONG Ebp;
1246 ULONG Eip;
1247 ULONG SegCs;
1248 ULONG EFlags;
1249 ULONG Esp;
1250 ULONG SegSs;
1251 UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
1252 } CONTEXT;
1253 #include "poppack.h"
1254
1255 #endif /* _X86_ */
1256
1257 #ifdef _AMD64_
1258
1259 #if !defined(RC_INVOKED)
1260
1261 #define CONTEXT_AMD64 0x100000
1262
1263 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1264 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1265 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1266 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1267 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1268
1269 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1270 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1271
1272 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
1273
1274 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1275 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1276 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1277 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1278
1279 #endif /* RC_INVOKED */
1280
1281 #endif /* _AMD64_ */
1282
1283 typedef enum _INTERLOCKED_RESULT {
1284 ResultNegative = RESULT_NEGATIVE,
1285 ResultZero = RESULT_ZERO,
1286 ResultPositive = RESULT_POSITIVE
1287 } INTERLOCKED_RESULT;
1288
1289 typedef struct _OSVERSIONINFOA {
1290 ULONG dwOSVersionInfoSize;
1291 ULONG dwMajorVersion;
1292 ULONG dwMinorVersion;
1293 ULONG dwBuildNumber;
1294 ULONG dwPlatformId;
1295 CHAR szCSDVersion[128];
1296 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA;
1297
1298 typedef struct _OSVERSIONINFOW {
1299 ULONG dwOSVersionInfoSize;
1300 ULONG dwMajorVersion;
1301 ULONG dwMinorVersion;
1302 ULONG dwBuildNumber;
1303 ULONG dwPlatformId;
1304 WCHAR szCSDVersion[128];
1305 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
1306
1307 typedef struct _OSVERSIONINFOEXA {
1308 ULONG dwOSVersionInfoSize;
1309 ULONG dwMajorVersion;
1310 ULONG dwMinorVersion;
1311 ULONG dwBuildNumber;
1312 ULONG dwPlatformId;
1313 CHAR szCSDVersion[128];
1314 USHORT wServicePackMajor;
1315 USHORT wServicePackMinor;
1316 USHORT wSuiteMask;
1317 UCHAR wProductType;
1318 UCHAR wReserved;
1319 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
1320
1321 typedef struct _OSVERSIONINFOEXW {
1322 ULONG dwOSVersionInfoSize;
1323 ULONG dwMajorVersion;
1324 ULONG dwMinorVersion;
1325 ULONG dwBuildNumber;
1326 ULONG dwPlatformId;
1327 WCHAR szCSDVersion[128];
1328 USHORT wServicePackMajor;
1329 USHORT wServicePackMinor;
1330 USHORT wSuiteMask;
1331 UCHAR wProductType;
1332 UCHAR wReserved;
1333 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
1334
1335 #ifdef UNICODE
1336 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
1337 typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
1338 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
1339 typedef OSVERSIONINFOW OSVERSIONINFO;
1340 typedef POSVERSIONINFOW POSVERSIONINFO;
1341 typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
1342 #else
1343 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
1344 typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
1345 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
1346 typedef OSVERSIONINFOA OSVERSIONINFO;
1347 typedef POSVERSIONINFOA POSVERSIONINFO;
1348 typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
1349 #endif /* UNICODE */
1350
1351 /* Executive Types */
1352
1353 #define PROTECTED_POOL 0x80000000
1354
1355 typedef struct _ZONE_SEGMENT_HEADER {
1356 SINGLE_LIST_ENTRY SegmentList;
1357 PVOID Reserved;
1358 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER;
1359
1360 typedef struct _ZONE_HEADER {
1361 SINGLE_LIST_ENTRY FreeList;
1362 SINGLE_LIST_ENTRY SegmentList;
1363 ULONG BlockSize;
1364 ULONG TotalSegmentSize;
1365 } ZONE_HEADER, *PZONE_HEADER;
1366
1367 /* Executive Functions */
1368
1369 static __inline PVOID
1370 ExAllocateFromZone(
1371 IN PZONE_HEADER Zone)
1372 {
1373 if (Zone->FreeList.Next)
1374 Zone->FreeList.Next = Zone->FreeList.Next->Next;
1375 return (PVOID) Zone->FreeList.Next;
1376 }
1377
1378 static __inline PVOID
1379 ExFreeToZone(
1380 IN PZONE_HEADER Zone,
1381 IN PVOID Block)
1382 {
1383 ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next;
1384 Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block);
1385 return ((PSINGLE_LIST_ENTRY) Block)->Next;
1386 }
1387
1388 /*
1389 * PVOID
1390 * ExInterlockedAllocateFromZone(
1391 * IN PZONE_HEADER Zone,
1392 * IN PKSPIN_LOCK Lock)
1393 */
1394 #define ExInterlockedAllocateFromZone(Zone, Lock) \
1395 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
1396
1397 /* PVOID
1398 * ExInterlockedFreeToZone(
1399 * IN PZONE_HEADER Zone,
1400 * IN PVOID Block,
1401 * IN PKSPIN_LOCK Lock);
1402 */
1403 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
1404 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
1405
1406 /*
1407 * BOOLEAN
1408 * ExIsFullZone(
1409 * IN PZONE_HEADER Zone)
1410 */
1411 #define ExIsFullZone(Zone) \
1412 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
1413
1414 /* BOOLEAN
1415 * ExIsObjectInFirstZoneSegment(
1416 * IN PZONE_HEADER Zone,
1417 * IN PVOID Object);
1418 */
1419 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
1420 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
1421 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
1422 (Zone)->TotalSegmentSize)) )
1423
1424 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
1425 #define ExAcquireResourceShared ExAcquireResourceSharedLite
1426 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
1427 #define ExDeleteResource ExDeleteResourceLite
1428 #define ExInitializeResource ExInitializeResourceLite
1429 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
1430 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
1431 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
1432 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
1433
1434 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1435
1436 NTKERNELAPI
1437 NTSTATUS
1438 NTAPI
1439 ExExtendZone(
1440 IN OUT PZONE_HEADER Zone,
1441 IN OUT PVOID Segment,
1442 IN ULONG SegmentSize);
1443
1444 NTKERNELAPI
1445 NTSTATUS
1446 NTAPI
1447 ExInitializeZone(
1448 OUT PZONE_HEADER Zone,
1449 IN ULONG BlockSize,
1450 IN OUT PVOID InitialSegment,
1451 IN ULONG InitialSegmentSize);
1452
1453 NTKERNELAPI
1454 NTSTATUS
1455 NTAPI
1456 ExInterlockedExtendZone(
1457 IN OUT PZONE_HEADER Zone,
1458 IN OUT PVOID Segment,
1459 IN ULONG SegmentSize,
1460 IN OUT PKSPIN_LOCK Lock);
1461
1462 NTKERNELAPI
1463 NTSTATUS
1464 NTAPI
1465 ExUuidCreate(
1466 OUT UUID *Uuid);
1467
1468 NTKERNELAPI
1469 DECLSPEC_NORETURN
1470 VOID
1471 NTAPI
1472 ExRaiseAccessViolation(
1473 VOID);
1474
1475 NTKERNELAPI
1476 DECLSPEC_NORETURN
1477 VOID
1478 NTAPI
1479 ExRaiseDatatypeMisalignment(
1480 VOID);
1481
1482 #endif
1483
1484 #ifdef _X86_
1485
1486 NTKERNELAPI
1487 INTERLOCKED_RESULT
1488 FASTCALL
1489 Exfi386InterlockedIncrementLong(
1490 IN OUT LONG volatile *Addend);
1491
1492 NTKERNELAPI
1493 INTERLOCKED_RESULT
1494 FASTCALL
1495 Exfi386InterlockedDecrementLong(
1496 IN PLONG Addend);
1497
1498 NTKERNELAPI
1499 ULONG
1500 FASTCALL
1501 Exfi386InterlockedExchangeUlong(
1502 IN PULONG Target,
1503 IN ULONG Value);
1504
1505 #endif /* _X86_ */
1506
1507 #ifndef _ARC_DDK_
1508 #define _ARC_DDK_
1509 typedef enum _CONFIGURATION_TYPE {
1510 ArcSystem,
1511 CentralProcessor,
1512 FloatingPointProcessor,
1513 PrimaryIcache,
1514 PrimaryDcache,
1515 SecondaryIcache,
1516 SecondaryDcache,
1517 SecondaryCache,
1518 EisaAdapter,
1519 TcAdapter,
1520 ScsiAdapter,
1521 DtiAdapter,
1522 MultiFunctionAdapter,
1523 DiskController,
1524 TapeController,
1525 CdromController,
1526 WormController,
1527 SerialController,
1528 NetworkController,
1529 DisplayController,
1530 ParallelController,
1531 PointerController,
1532 KeyboardController,
1533 AudioController,
1534 OtherController,
1535 DiskPeripheral,
1536 FloppyDiskPeripheral,
1537 TapePeripheral,
1538 ModemPeripheral,
1539 MonitorPeripheral,
1540 PrinterPeripheral,
1541 PointerPeripheral,
1542 KeyboardPeripheral,
1543 TerminalPeripheral,
1544 OtherPeripheral,
1545 LinePeripheral,
1546 NetworkPeripheral,
1547 SystemMemory,
1548 DockingInformation,
1549 RealModeIrqRoutingTable,
1550 RealModePCIEnumeration,
1551 MaximumType
1552 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
1553 #endif /* !_ARC_DDK_ */
1554
1555 typedef struct _CONTROLLER_OBJECT {
1556 CSHORT Type;
1557 CSHORT Size;
1558 PVOID ControllerExtension;
1559 KDEVICE_QUEUE DeviceWaitQueue;
1560 ULONG Spare1;
1561 LARGE_INTEGER Spare2;
1562 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
1563
1564 typedef struct _CONFIGURATION_INFORMATION {
1565 ULONG DiskCount;
1566 ULONG FloppyCount;
1567 ULONG CdRomCount;
1568 ULONG TapeCount;
1569 ULONG ScsiPortCount;
1570 ULONG SerialCount;
1571 ULONG ParallelCount;
1572 BOOLEAN AtDiskPrimaryAddressClaimed;
1573 BOOLEAN AtDiskSecondaryAddressClaimed;
1574 ULONG Version;
1575 ULONG MediumChangerCount;
1576 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
1577
1578 typedef
1579 NTSTATUS
1580 (NTAPI *PIO_QUERY_DEVICE_ROUTINE)(
1581 IN PVOID Context,
1582 IN PUNICODE_STRING PathName,
1583 IN INTERFACE_TYPE BusType,
1584 IN ULONG BusNumber,
1585 IN PKEY_VALUE_FULL_INFORMATION *BusInformation,
1586 IN CONFIGURATION_TYPE ControllerType,
1587 IN ULONG ControllerNumber,
1588 IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
1589 IN CONFIGURATION_TYPE PeripheralType,
1590 IN ULONG PeripheralNumber,
1591 IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation);
1592
1593 typedef
1594 VOID
1595 (NTAPI DRIVER_REINITIALIZE)(
1596 IN struct _DRIVER_OBJECT *DriverObject,
1597 IN PVOID Context,
1598 IN ULONG Count);
1599
1600 typedef DRIVER_REINITIALIZE *PDRIVER_REINITIALIZE;
1601
1602 /** Filesystem runtime library routines **/
1603
1604 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1605 NTKERNELAPI
1606 BOOLEAN
1607 NTAPI
1608 FsRtlIsTotalDeviceFailure(
1609 IN NTSTATUS Status);
1610 #endif
1611
1612 /* Hardware Abstraction Layer Types */
1613
1614 typedef VOID
1615 (NTAPI *PciPin2Line)(
1616 IN struct _BUS_HANDLER *BusHandler,
1617 IN struct _BUS_HANDLER *RootHandler,
1618 IN PCI_SLOT_NUMBER SlotNumber,
1619 IN PPCI_COMMON_CONFIG PciData);
1620
1621 typedef VOID
1622 (NTAPI *PciLine2Pin)(
1623 IN struct _BUS_HANDLER *BusHandler,
1624 IN struct _BUS_HANDLER *RootHandler,
1625 IN PCI_SLOT_NUMBER SlotNumber,
1626 IN PPCI_COMMON_CONFIG PciNewData,
1627 IN PPCI_COMMON_CONFIG PciOldData);
1628
1629 typedef VOID
1630 (NTAPI *PciReadWriteConfig)(
1631 IN struct _BUS_HANDLER *BusHandler,
1632 IN PCI_SLOT_NUMBER Slot,
1633 IN PVOID Buffer,
1634 IN ULONG Offset,
1635 IN ULONG Length);
1636
1637 #define PCI_DATA_TAG ' ICP'
1638 #define PCI_DATA_VERSION 1
1639
1640 typedef struct _PCIBUSDATA {
1641 ULONG Tag;
1642 ULONG Version;
1643 PciReadWriteConfig ReadConfig;
1644 PciReadWriteConfig WriteConfig;
1645 PciPin2Line Pin2Line;
1646 PciLine2Pin Line2Pin;
1647 PCI_SLOT_NUMBER ParentSlot;
1648 PVOID Reserved[4];
1649 } PCIBUSDATA, *PPCIBUSDATA;
1650
1651 typedef
1652 PVOID
1653 (NTAPI *pHalGetAcpiTable)(
1654 IN ULONG Signature,
1655 IN PCSTR OemId OPTIONAL,
1656 IN PCSTR OemTableId OPTIONAL);
1657
1658 typedef
1659 VOID
1660 (NTAPI *PCI_ERROR_HANDLER_CALLBACK)(
1661 VOID);
1662
1663 typedef
1664 VOID
1665 (NTAPI *pHalSetPciErrorHandlerCallback)(
1666 IN PCI_ERROR_HANDLER_CALLBACK Callback);
1667
1668 #if 1 /* Not present in WDK 7600 */
1669 typedef VOID
1670 (FASTCALL *pHalIoAssignDriveLetters)(
1671 IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
1672 IN PSTRING NtDeviceName,
1673 OUT PUCHAR NtSystemPath,
1674 OUT PSTRING NtSystemPathString);
1675 #endif
1676
1677 /* Hardware Abstraction Layer Functions */
1678
1679 #if !defined(NO_LEGACY_DRIVERS)
1680
1681 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1682
1683 NTHALAPI
1684 NTSTATUS
1685 NTAPI
1686 HalAssignSlotResources(
1687 IN PUNICODE_STRING RegistryPath,
1688 IN PUNICODE_STRING DriverClassName,
1689 IN PDRIVER_OBJECT DriverObject,
1690 IN PDEVICE_OBJECT DeviceObject,
1691 IN INTERFACE_TYPE BusType,
1692 IN ULONG BusNumber,
1693 IN ULONG SlotNumber,
1694 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
1695
1696 NTHALAPI
1697 ULONG
1698 NTAPI
1699 HalGetInterruptVector(
1700 IN INTERFACE_TYPE InterfaceType,
1701 IN ULONG BusNumber,
1702 IN ULONG BusInterruptLevel,
1703 IN ULONG BusInterruptVector,
1704 OUT PKIRQL Irql,
1705 OUT PKAFFINITY Affinity);
1706
1707 NTHALAPI
1708 ULONG
1709 NTAPI
1710 HalSetBusData(
1711 IN BUS_DATA_TYPE BusDataType,
1712 IN ULONG BusNumber,
1713 IN ULONG SlotNumber,
1714 IN PVOID Buffer,
1715 IN ULONG Length);
1716
1717 #endif
1718
1719 #endif /* !defined(NO_LEGACY_DRIVERS) */
1720
1721 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1722
1723 NTHALAPI
1724 PADAPTER_OBJECT
1725 NTAPI
1726 HalGetAdapter(
1727 IN PDEVICE_DESCRIPTION DeviceDescription,
1728 IN OUT PULONG NumberOfMapRegisters);
1729
1730 NTHALAPI
1731 BOOLEAN
1732 NTAPI
1733 HalMakeBeep(
1734 IN ULONG Frequency);
1735
1736 VOID
1737 NTAPI
1738 HalPutDmaAdapter(
1739 IN PADAPTER_OBJECT DmaAdapter);
1740
1741 NTHALAPI
1742 VOID
1743 NTAPI
1744 HalAcquireDisplayOwnership(
1745 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters);
1746
1747 NTHALAPI
1748 ULONG
1749 NTAPI
1750 HalGetBusData(
1751 IN BUS_DATA_TYPE BusDataType,
1752 IN ULONG BusNumber,
1753 IN ULONG SlotNumber,
1754 OUT PVOID Buffer,
1755 IN ULONG Length);
1756
1757 NTHALAPI
1758 ULONG
1759 NTAPI
1760 HalGetBusDataByOffset(
1761 IN BUS_DATA_TYPE BusDataType,
1762 IN ULONG BusNumber,
1763 IN ULONG SlotNumber,
1764 OUT PVOID Buffer,
1765 IN ULONG Offset,
1766 IN ULONG Length);
1767
1768 NTHALAPI
1769 ULONG
1770 NTAPI
1771 HalSetBusDataByOffset(
1772 IN BUS_DATA_TYPE BusDataType,
1773 IN ULONG BusNumber,
1774 IN ULONG SlotNumber,
1775 IN PVOID Buffer,
1776 IN ULONG Offset,
1777 IN ULONG Length);
1778
1779 NTHALAPI
1780 BOOLEAN
1781 NTAPI
1782 HalTranslateBusAddress(
1783 IN INTERFACE_TYPE InterfaceType,
1784 IN ULONG BusNumber,
1785 IN PHYSICAL_ADDRESS BusAddress,
1786 IN OUT PULONG AddressSpace,
1787 OUT PPHYSICAL_ADDRESS TranslatedAddress);
1788
1789 #endif
1790
1791 #if (NTDDI_VERSION >= NTDDI_WINXP)
1792 NTKERNELAPI
1793 VOID
1794 FASTCALL
1795 HalExamineMBR(
1796 IN PDEVICE_OBJECT DeviceObject,
1797 IN ULONG SectorSize,
1798 IN ULONG MBRTypeIdentifier,
1799 OUT PVOID *Buffer);
1800 #endif
1801
1802 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
1803 // nothing here
1804 #else
1805
1806 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1807 //DECLSPEC_DEPRECATED_DDK
1808 NTHALAPI
1809 VOID
1810 NTAPI
1811 IoFreeAdapterChannel(
1812 IN PADAPTER_OBJECT AdapterObject);
1813
1814 //DECLSPEC_DEPRECATED_DDK
1815 NTHALAPI
1816 BOOLEAN
1817 NTAPI
1818 IoFlushAdapterBuffers(
1819 IN PADAPTER_OBJECT AdapterObject,
1820 IN PMDL Mdl,
1821 IN PVOID MapRegisterBase,
1822 IN PVOID CurrentVa,
1823 IN ULONG Length,
1824 IN BOOLEAN WriteToDevice);
1825
1826 //DECLSPEC_DEPRECATED_DDK
1827 NTHALAPI
1828 VOID
1829 NTAPI
1830 IoFreeMapRegisters(
1831 IN PADAPTER_OBJECT AdapterObject,
1832 IN PVOID MapRegisterBase,
1833 IN ULONG NumberOfMapRegisters);
1834
1835 //DECLSPEC_DEPRECATED_DDK
1836 NTHALAPI
1837 PVOID
1838 NTAPI
1839 HalAllocateCommonBuffer(
1840 IN PADAPTER_OBJECT AdapterObject,
1841 IN ULONG Length,
1842 OUT PPHYSICAL_ADDRESS LogicalAddress,
1843 IN BOOLEAN CacheEnabled);
1844
1845 //DECLSPEC_DEPRECATED_DDK
1846 NTHALAPI
1847 VOID
1848 NTAPI
1849 HalFreeCommonBuffer(
1850 IN PADAPTER_OBJECT AdapterObject,
1851 IN ULONG Length,
1852 IN PHYSICAL_ADDRESS LogicalAddress,
1853 IN PVOID VirtualAddress,
1854 IN BOOLEAN CacheEnabled);
1855
1856 //DECLSPEC_DEPRECATED_DDK
1857 NTHALAPI
1858 ULONG
1859 NTAPI
1860 HalReadDmaCounter(
1861 IN PADAPTER_OBJECT AdapterObject);
1862
1863 NTHALAPI
1864 NTSTATUS
1865 NTAPI
1866 HalAllocateAdapterChannel(
1867 IN PADAPTER_OBJECT AdapterObject,
1868 IN PWAIT_CONTEXT_BLOCK Wcb,
1869 IN ULONG NumberOfMapRegisters,
1870 IN PDRIVER_CONTROL ExecutionRoutine);
1871
1872 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
1873
1874 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
1875
1876 /* I/O Manager Functions */
1877
1878 /*
1879 * VOID IoAssignArcName(
1880 * IN PUNICODE_STRING ArcName,
1881 * IN PUNICODE_STRING DeviceName);
1882 */
1883 #define IoAssignArcName(_ArcName, _DeviceName) ( \
1884 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
1885
1886 /*
1887 * VOID
1888 * IoDeassignArcName(
1889 * IN PUNICODE_STRING ArcName)
1890 */
1891 #define IoDeassignArcName IoDeleteSymbolicLink
1892
1893 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1894
1895 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
1896 NTKERNELAPI
1897 NTSTATUS
1898 NTAPI
1899 IoAllocateAdapterChannel(
1900 IN PADAPTER_OBJECT AdapterObject,
1901 IN PDEVICE_OBJECT DeviceObject,
1902 IN ULONG NumberOfMapRegisters,
1903 IN PDRIVER_CONTROL ExecutionRoutine,
1904 IN PVOID Context);
1905 #endif
1906
1907 //DECLSPEC_DEPRECATED_DDK
1908 NTHALAPI
1909 PHYSICAL_ADDRESS
1910 NTAPI
1911 IoMapTransfer(
1912 IN PADAPTER_OBJECT AdapterObject,
1913 IN PMDL Mdl,
1914 IN PVOID MapRegisterBase,
1915 IN PVOID CurrentVa,
1916 IN OUT PULONG Length,
1917 IN BOOLEAN WriteToDevice);
1918
1919 NTKERNELAPI
1920 VOID
1921 NTAPI
1922 IoAllocateController(
1923 IN PCONTROLLER_OBJECT ControllerObject,
1924 IN PDEVICE_OBJECT DeviceObject,
1925 IN PDRIVER_CONTROL ExecutionRoutine,
1926 IN PVOID Context OPTIONAL);
1927
1928 NTKERNELAPI
1929 PCONTROLLER_OBJECT
1930 NTAPI
1931 IoCreateController(
1932 IN ULONG Size);
1933
1934 NTKERNELAPI
1935 VOID
1936 NTAPI
1937 IoDeleteController(
1938 IN PCONTROLLER_OBJECT ControllerObject);
1939
1940 NTKERNELAPI
1941 VOID
1942 NTAPI
1943 IoFreeController(
1944 IN PCONTROLLER_OBJECT ControllerObject);
1945
1946 NTKERNELAPI
1947 PCONFIGURATION_INFORMATION
1948 NTAPI
1949 IoGetConfigurationInformation(
1950 VOID);
1951
1952 NTKERNELAPI
1953 PDEVICE_OBJECT
1954 NTAPI
1955 IoGetDeviceToVerify(
1956 IN PETHREAD Thread);
1957
1958 NTKERNELAPI
1959 VOID
1960 NTAPI
1961 IoCancelFileOpen(
1962 IN PDEVICE_OBJECT DeviceObject,
1963 IN PFILE_OBJECT FileObject);
1964
1965 NTKERNELAPI
1966 PGENERIC_MAPPING
1967 NTAPI
1968 IoGetFileObjectGenericMapping(
1969 VOID);
1970
1971 NTKERNELAPI
1972 PIRP
1973 NTAPI
1974 IoMakeAssociatedIrp(
1975 IN PIRP Irp,
1976 IN CCHAR StackSize);
1977
1978 NTKERNELAPI
1979 NTSTATUS
1980 NTAPI
1981 IoQueryDeviceDescription(
1982 IN PINTERFACE_TYPE BusType OPTIONAL,
1983 IN PULONG BusNumber OPTIONAL,
1984 IN PCONFIGURATION_TYPE ControllerType OPTIONAL,
1985 IN PULONG ControllerNumber OPTIONAL,
1986 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL,
1987 IN PULONG PeripheralNumber OPTIONAL,
1988 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
1989 IN OUT PVOID Context OPTIONAL);
1990
1991 NTKERNELAPI
1992 VOID
1993 NTAPI
1994 IoRaiseHardError(
1995 IN PIRP Irp,
1996 IN PVPB Vpb OPTIONAL,
1997 IN PDEVICE_OBJECT RealDeviceObject);
1998
1999 NTKERNELAPI
2000 BOOLEAN
2001 NTAPI
2002 IoRaiseInformationalHardError(
2003 IN NTSTATUS ErrorStatus,
2004 IN PUNICODE_STRING String OPTIONAL,
2005 IN PKTHREAD Thread OPTIONAL);
2006
2007 NTKERNELAPI
2008 VOID
2009 NTAPI
2010 IoRegisterBootDriverReinitialization(
2011 IN PDRIVER_OBJECT DriverObject,
2012 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
2013 IN PVOID Context OPTIONAL);
2014
2015 NTKERNELAPI
2016 VOID
2017 NTAPI
2018 IoRegisterDriverReinitialization(
2019 IN PDRIVER_OBJECT DriverObject,
2020 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine,
2021 IN PVOID Context OPTIONAL);
2022
2023 NTKERNELAPI
2024 NTSTATUS
2025 NTAPI
2026 IoAttachDeviceByPointer(
2027 IN PDEVICE_OBJECT SourceDevice,
2028 IN PDEVICE_OBJECT TargetDevice);
2029
2030 NTKERNELAPI
2031 NTSTATUS
2032 NTAPI
2033 IoReportDetectedDevice(
2034 IN PDRIVER_OBJECT DriverObject,
2035 IN INTERFACE_TYPE LegacyBusType,
2036 IN ULONG BusNumber,
2037 IN ULONG SlotNumber,
2038 IN PCM_RESOURCE_LIST ResourceList OPTIONAL,
2039 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL,
2040 IN BOOLEAN ResourceAssigned,
2041 IN OUT PDEVICE_OBJECT *DeviceObject);
2042
2043 NTKERNELAPI
2044 NTSTATUS
2045 NTAPI
2046 IoReportResourceForDetection(
2047 IN PDRIVER_OBJECT DriverObject,
2048 IN PCM_RESOURCE_LIST DriverList OPTIONAL,
2049 IN ULONG DriverListSize OPTIONAL,
2050 IN PDEVICE_OBJECT DeviceObject OPTIONAL,
2051 IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
2052 IN ULONG DeviceListSize OPTIONAL,
2053 OUT PBOOLEAN ConflictDetected);
2054
2055 NTKERNELAPI
2056 NTSTATUS
2057 NTAPI
2058 IoReportResourceUsage(
2059 IN PUNICODE_STRING DriverClassName OPTIONAL,
2060 IN PDRIVER_OBJECT DriverObject,
2061 IN PCM_RESOURCE_LIST DriverList OPTIONAL,
2062 IN ULONG DriverListSize OPTIONAL,
2063 IN PDEVICE_OBJECT DeviceObject,
2064 IN PCM_RESOURCE_LIST DeviceList OPTIONAL,
2065 IN ULONG DeviceListSize OPTIONAL,
2066 IN BOOLEAN OverrideConflict,
2067 OUT PBOOLEAN ConflictDetected);
2068
2069 NTKERNELAPI
2070 VOID
2071 NTAPI
2072 IoSetHardErrorOrVerifyDevice(
2073 IN PIRP Irp,
2074 IN PDEVICE_OBJECT DeviceObject);
2075
2076 NTKERNELAPI
2077 NTSTATUS
2078 NTAPI
2079 IoAssignResources(
2080 IN PUNICODE_STRING RegistryPath,
2081 IN PUNICODE_STRING DriverClassName OPTIONAL,
2082 IN PDRIVER_OBJECT DriverObject,
2083 IN PDEVICE_OBJECT DeviceObject OPTIONAL,
2084 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL,
2085 IN OUT PCM_RESOURCE_LIST *AllocatedResources);
2086
2087 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2088
2089 #if (NTDDI_VERSION >= NTDDI_WINXP)
2090
2091 NTKERNELAPI
2092 NTSTATUS
2093 NTAPI
2094 IoCreateDisk(
2095 IN PDEVICE_OBJECT DeviceObject,
2096 IN struct _CREATE_DISK* Disk OPTIONAL);
2097
2098 NTKERNELAPI
2099 NTSTATUS
2100 NTAPI
2101 IoReadDiskSignature(
2102 IN PDEVICE_OBJECT DeviceObject,
2103 IN ULONG BytesPerSector,
2104 OUT PDISK_SIGNATURE Signature);
2105
2106 NTKERNELAPI
2107 NTSTATUS
2108 FASTCALL
2109 IoReadPartitionTable(
2110 IN PDEVICE_OBJECT DeviceObject,
2111 IN ULONG SectorSize,
2112 IN BOOLEAN ReturnRecognizedPartitions,
2113 OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer);
2114
2115 NTKERNELAPI
2116 NTSTATUS
2117 NTAPI
2118 IoReadPartitionTableEx(
2119 IN PDEVICE_OBJECT DeviceObject,
2120 IN struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer);
2121
2122 NTKERNELAPI
2123 NTSTATUS
2124 FASTCALL
2125 IoSetPartitionInformation(
2126 IN PDEVICE_OBJECT DeviceObject,
2127 IN ULONG SectorSize,
2128 IN ULONG PartitionNumber,
2129 IN ULONG PartitionType);
2130
2131 NTKERNELAPI
2132 NTSTATUS
2133 NTAPI
2134 IoSetPartitionInformationEx(
2135 IN PDEVICE_OBJECT DeviceObject,
2136 IN ULONG PartitionNumber,
2137 IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo);
2138
2139 NTKERNELAPI
2140 NTSTATUS
2141 NTAPI
2142 IoSetSystemPartition(
2143 IN PUNICODE_STRING VolumeNameString);
2144
2145 NTKERNELAPI
2146 BOOLEAN
2147 NTAPI
2148 IoSetThreadHardErrorMode(
2149 IN BOOLEAN EnableHardErrors);
2150
2151 NTKERNELAPI
2152 NTSTATUS
2153 NTAPI
2154 IoVerifyPartitionTable(
2155 IN PDEVICE_OBJECT DeviceObject,
2156 IN BOOLEAN FixErrors);
2157
2158 NTKERNELAPI
2159 NTSTATUS
2160 NTAPI
2161 IoVolumeDeviceToDosName(
2162 IN PVOID VolumeDeviceObject,
2163 OUT PUNICODE_STRING DosName);
2164
2165 NTKERNELAPI
2166 NTSTATUS
2167 FASTCALL
2168 IoWritePartitionTable(
2169 IN PDEVICE_OBJECT DeviceObject,
2170 IN ULONG SectorSize,
2171 IN ULONG SectorsPerTrack,
2172 IN ULONG NumberOfHeads,
2173 IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer);
2174
2175 NTKERNELAPI
2176 NTSTATUS
2177 NTAPI
2178 IoWritePartitionTableEx(
2179 IN PDEVICE_OBJECT DeviceObject,
2180 IN struct _DRIVE_LAYOUT_INFORMATION_EX *DriveLayout);
2181
2182 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2183
2184 /** Kernel debugger routines **/
2185
2186 NTSYSAPI
2187 ULONG
2188 NTAPI
2189 DbgPrompt(
2190 IN PCCH Prompt,
2191 OUT PCH Response,
2192 IN ULONG MaximumResponseLength);
2193
2194 /* Kernel Functions */
2195
2196 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2197
2198 NTKERNELAPI
2199 DECLSPEC_NORETURN
2200 VOID
2201 NTAPI
2202 KeBugCheck(
2203 IN ULONG BugCheckCode);
2204
2205 NTKERNELAPI
2206 LONG
2207 NTAPI
2208 KePulseEvent(
2209 IN OUT PRKEVENT Event,
2210 IN KPRIORITY Increment,
2211 IN BOOLEAN Wait);
2212
2213 NTKERNELAPI
2214 LONG
2215 NTAPI
2216 KeSetBasePriorityThread(
2217 IN OUT PRKTHREAD Thread,
2218 IN LONG Increment);
2219
2220 #endif
2221
2222 /* Memory Manager Types */
2223
2224 typedef struct _PHYSICAL_MEMORY_RANGE {
2225 PHYSICAL_ADDRESS BaseAddress;
2226 LARGE_INTEGER NumberOfBytes;
2227 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
2228
2229 /* Memory Manager Functions */
2230
2231 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2232
2233 NTKERNELAPI
2234 PPHYSICAL_MEMORY_RANGE
2235 NTAPI
2236 MmGetPhysicalMemoryRanges(
2237 VOID);
2238
2239 NTKERNELAPI
2240 PHYSICAL_ADDRESS
2241 NTAPI
2242 MmGetPhysicalAddress(
2243 IN PVOID BaseAddress);
2244
2245 NTKERNELAPI
2246 BOOLEAN
2247 NTAPI
2248 MmIsNonPagedSystemAddressValid(
2249 IN PVOID VirtualAddress);
2250
2251 NTKERNELAPI
2252 PVOID
2253 NTAPI
2254 MmAllocateNonCachedMemory(
2255 IN SIZE_T NumberOfBytes);
2256
2257 NTKERNELAPI
2258 VOID
2259 NTAPI
2260 MmFreeNonCachedMemory(
2261 IN PVOID BaseAddress,
2262 IN SIZE_T NumberOfBytes);
2263
2264 NTKERNELAPI
2265 PVOID
2266 NTAPI
2267 MmGetVirtualForPhysical(
2268 IN PHYSICAL_ADDRESS PhysicalAddress);
2269
2270 NTKERNELAPI
2271 NTSTATUS
2272 NTAPI
2273 MmMapUserAddressesToPage(
2274 IN PVOID BaseAddress,
2275 IN SIZE_T NumberOfBytes,
2276 IN PVOID PageAddress);
2277
2278 NTKERNELAPI
2279 PVOID
2280 NTAPI
2281 MmMapVideoDisplay(
2282 IN PHYSICAL_ADDRESS PhysicalAddress,
2283 IN SIZE_T NumberOfBytes,
2284 IN MEMORY_CACHING_TYPE CacheType);
2285
2286 NTKERNELAPI
2287 NTSTATUS
2288 NTAPI
2289 MmMapViewInSessionSpace(
2290 IN PVOID Section,
2291 OUT PVOID *MappedBase,
2292 IN OUT PSIZE_T ViewSize);
2293
2294 NTKERNELAPI
2295 NTSTATUS
2296 NTAPI
2297 MmMapViewInSystemSpace(
2298 IN PVOID Section,
2299 OUT PVOID *MappedBase,
2300 IN OUT PSIZE_T ViewSize);
2301
2302 NTKERNELAPI
2303 BOOLEAN
2304 NTAPI
2305 MmIsAddressValid(
2306 IN PVOID VirtualAddress);
2307
2308 NTKERNELAPI
2309 BOOLEAN
2310 NTAPI
2311 MmIsThisAnNtAsSystem(
2312 VOID);
2313
2314 NTKERNELAPI
2315 VOID
2316 NTAPI
2317 MmLockPagableSectionByHandle(
2318 IN PVOID ImageSectionHandle);
2319
2320 NTKERNELAPI
2321 NTSTATUS
2322 NTAPI
2323 MmUnmapViewInSessionSpace(
2324 IN PVOID MappedBase);
2325
2326 NTKERNELAPI
2327 NTSTATUS
2328 NTAPI
2329 MmUnmapViewInSystemSpace(
2330 IN PVOID MappedBase);
2331
2332 NTKERNELAPI
2333 VOID
2334 NTAPI
2335 MmUnsecureVirtualMemory(
2336 IN HANDLE SecureHandle);
2337
2338 NTKERNELAPI
2339 NTSTATUS
2340 NTAPI
2341 MmRemovePhysicalMemory(
2342 IN PPHYSICAL_ADDRESS StartAddress,
2343 IN OUT PLARGE_INTEGER NumberOfBytes);
2344
2345 NTKERNELAPI
2346 HANDLE
2347 NTAPI
2348 MmSecureVirtualMemory(
2349 IN PVOID Address,
2350 IN SIZE_T Size,
2351 IN ULONG ProbeMode);
2352
2353 NTKERNELAPI
2354 VOID
2355 NTAPI
2356 MmUnmapVideoDisplay(
2357 IN PVOID BaseAddress,
2358 IN SIZE_T NumberOfBytes);
2359
2360 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2361
2362 /* NtXxx Functions */
2363
2364 NTSYSCALLAPI
2365 NTSTATUS
2366 NTAPI
2367 NtOpenProcess(
2368 OUT PHANDLE ProcessHandle,
2369 IN ACCESS_MASK DesiredAccess,
2370 IN POBJECT_ATTRIBUTES ObjectAttributes,
2371 IN PCLIENT_ID ClientId OPTIONAL);
2372
2373 NTSYSCALLAPI
2374 NTSTATUS
2375 NTAPI
2376 NtQueryInformationProcess(
2377 IN HANDLE ProcessHandle,
2378 IN PROCESSINFOCLASS ProcessInformationClass,
2379 OUT PVOID ProcessInformation OPTIONAL,
2380 IN ULONG ProcessInformationLength,
2381 OUT PULONG ReturnLength OPTIONAL);
2382
2383 /** Process manager types **/
2384
2385 typedef VOID
2386 (NTAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)(
2387 IN HANDLE ParentId,
2388 IN HANDLE ProcessId,
2389 IN BOOLEAN Create);
2390
2391 typedef VOID
2392 (NTAPI *PCREATE_THREAD_NOTIFY_ROUTINE)(
2393 IN HANDLE ProcessId,
2394 IN HANDLE ThreadId,
2395 IN BOOLEAN Create);
2396
2397 typedef VOID
2398 (NTAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)(
2399 IN PUNICODE_STRING FullImageName,
2400 IN HANDLE ProcessId,
2401 IN PIMAGE_INFO ImageInfo);
2402
2403 /** Process manager routines **/
2404
2405 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2406
2407 NTKERNELAPI
2408 NTSTATUS
2409 NTAPI
2410 PsSetLoadImageNotifyRoutine(
2411 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
2412
2413 NTKERNELAPI
2414 NTSTATUS
2415 NTAPI
2416 PsSetCreateThreadNotifyRoutine(
2417 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
2418
2419 NTKERNELAPI
2420 NTSTATUS
2421 NTAPI
2422 PsSetCreateProcessNotifyRoutine(
2423 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
2424 IN BOOLEAN Remove);
2425
2426 NTKERNELAPI
2427 HANDLE
2428 NTAPI
2429 PsGetCurrentProcessId(
2430 VOID);
2431
2432 NTKERNELAPI
2433 HANDLE
2434 NTAPI
2435 PsGetCurrentThreadId(
2436 VOID);
2437
2438 NTKERNELAPI
2439 BOOLEAN
2440 NTAPI
2441 PsGetVersion(
2442 OUT PULONG MajorVersion OPTIONAL,
2443 OUT PULONG MinorVersion OPTIONAL,
2444 OUT PULONG BuildNumber OPTIONAL,
2445 OUT PUNICODE_STRING CSDVersion OPTIONAL);
2446
2447 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2448
2449 #if (NTDDI_VERSION >= NTDDI_WINXP)
2450
2451 NTKERNELAPI
2452 HANDLE
2453 NTAPI
2454 PsGetProcessId(
2455 IN PEPROCESS Process);
2456
2457 NTKERNELAPI
2458 NTSTATUS
2459 NTAPI
2460 PsRemoveCreateThreadNotifyRoutine(
2461 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine);
2462
2463 NTKERNELAPI
2464 NTSTATUS
2465 NTAPI
2466 PsRemoveLoadImageNotifyRoutine(
2467 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine);
2468
2469 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2470
2471 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess;
2472
2473 /* RTL Types */
2474
2475 typedef struct _RTL_SPLAY_LINKS {
2476 struct _RTL_SPLAY_LINKS *Parent;
2477 struct _RTL_SPLAY_LINKS *LeftChild;
2478 struct _RTL_SPLAY_LINKS *RightChild;
2479 } RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
2480
2481 /* RTL Functions */
2482
2483 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2484
2485 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2486 *CallersAddress = (PVOID)_ReturnAddress(); \
2487 *CallersCaller = NULL;
2488 #else
2489
2490 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2491 NTSYSAPI
2492 VOID
2493 NTAPI
2494 RtlGetCallersAddress(
2495 OUT PVOID *CallersAddress,
2496 OUT PVOID *CallersCaller);
2497 #endif
2498
2499 #endif
2500
2501 #if !defined(MIDL_PASS)
2502
2503 FORCEINLINE
2504 LUID
2505 NTAPI_INLINE
2506 RtlConvertLongToLuid(
2507 IN LONG Val)
2508 {
2509 LUID Luid;
2510 LARGE_INTEGER Temp;
2511
2512 Temp.QuadPart = Val;
2513 Luid.LowPart = Temp.u.LowPart;
2514 Luid.HighPart = Temp.u.HighPart;
2515 return Luid;
2516 }
2517
2518 FORCEINLINE
2519 LUID
2520 NTAPI_INLINE
2521 RtlConvertUlongToLuid(
2522 IN ULONG Val)
2523 {
2524 LUID Luid;
2525
2526 Luid.LowPart = Val;
2527 Luid.HighPart = 0;
2528 return Luid;
2529 }
2530
2531 #endif
2532
2533 #if defined(_AMD64_) || defined(_IA64_)
2534 //DECLSPEC_DEPRECATED_DDK_WINXP
2535 __inline
2536 LARGE_INTEGER
2537 NTAPI_INLINE
2538 RtlLargeIntegerDivide(
2539 IN LARGE_INTEGER Dividend,
2540 IN LARGE_INTEGER Divisor,
2541 OUT PLARGE_INTEGER Remainder OPTIONAL)
2542 {
2543 LARGE_INTEGER ret;
2544 ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart;
2545 if (Remainder)
2546 Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart;
2547 return ret;
2548 }
2549
2550 #else
2551
2552 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2553 NTSYSAPI
2554 LARGE_INTEGER
2555 NTAPI
2556 RtlLargeIntegerDivide(
2557 IN LARGE_INTEGER Dividend,
2558 IN LARGE_INTEGER Divisor,
2559 OUT PLARGE_INTEGER Remainder OPTIONAL);
2560 #endif
2561
2562 #endif /* defined(_AMD64_) || defined(_IA64_) */
2563
2564 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2565
2566 NTSYSAPI
2567 BOOLEAN
2568 NTAPI
2569 RtlPrefixUnicodeString(
2570 IN PCUNICODE_STRING String1,
2571 IN PCUNICODE_STRING String2,
2572 IN BOOLEAN CaseInSensitive);
2573
2574 NTSYSAPI
2575 VOID
2576 NTAPI
2577 RtlUpperString(
2578 IN OUT PSTRING DestinationString,
2579 IN const PSTRING SourceString);
2580
2581 NTSYSAPI
2582 NTSTATUS
2583 NTAPI
2584 RtlUpcaseUnicodeString(
2585 IN OUT PUNICODE_STRING DestinationString,
2586 IN PCUNICODE_STRING SourceString,
2587 IN BOOLEAN AllocateDestinationString);
2588
2589 NTSYSAPI
2590 VOID
2591 NTAPI
2592 RtlMapGenericMask(
2593 IN OUT PACCESS_MASK AccessMask,
2594 IN PGENERIC_MAPPING GenericMapping);
2595
2596 NTSYSAPI
2597 NTSTATUS
2598 NTAPI
2599 RtlVolumeDeviceToDosName(
2600 IN PVOID VolumeDeviceObject,
2601 OUT PUNICODE_STRING DosName);
2602
2603 NTSYSAPI
2604 NTSTATUS
2605 NTAPI
2606 RtlGetVersion(
2607 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation);
2608
2609 NTSYSAPI
2610 NTSTATUS
2611 NTAPI
2612 RtlVerifyVersionInfo(
2613 IN PRTL_OSVERSIONINFOEXW VersionInfo,
2614 IN ULONG TypeMask,
2615 IN ULONGLONG ConditionMask);
2616
2617 NTSYSAPI
2618 LONG
2619 NTAPI
2620 RtlCompareString(
2621 IN const PSTRING String1,
2622 IN const PSTRING String2,
2623 BOOLEAN CaseInSensitive);
2624
2625 NTSYSAPI
2626 VOID
2627 NTAPI
2628 RtlCopyString(
2629 OUT PSTRING DestinationString,
2630 IN const PSTRING SourceString OPTIONAL);
2631
2632 NTSYSAPI
2633 BOOLEAN
2634 NTAPI
2635 RtlEqualString(
2636 IN const PSTRING String1,
2637 IN const PSTRING String2,
2638 IN BOOLEAN CaseInSensitive);
2639
2640 NTSYSAPI
2641 NTSTATUS
2642 NTAPI
2643 RtlCharToInteger(
2644 IN PCSZ String,
2645 IN ULONG Base OPTIONAL,
2646 OUT PULONG Value);
2647
2648 NTSYSAPI
2649 CHAR
2650 NTAPI
2651 RtlUpperChar(
2652 IN CHAR Character);
2653
2654 NTSYSAPI
2655 ULONG
2656 NTAPI
2657 RtlWalkFrameChain(
2658 OUT PVOID *Callers,
2659 IN ULONG Count,
2660 IN ULONG Flags);
2661
2662 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2663
2664 /* Security reference monitor routines */
2665
2666 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2667 NTKERNELAPI
2668 BOOLEAN
2669 NTAPI
2670 SeSinglePrivilegeCheck(
2671 IN LUID PrivilegeValue,
2672 IN KPROCESSOR_MODE PreviousMode);
2673 #endif
2674
2675 /* ZwXxx Functions */
2676
2677 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2678
2679 NTSTATUS
2680 NTAPI
2681 ZwCancelTimer(
2682 IN HANDLE TimerHandle,
2683 OUT PBOOLEAN CurrentState OPTIONAL);
2684
2685 NTSTATUS
2686 NTAPI
2687 ZwCreateTimer(
2688 OUT PHANDLE TimerHandle,
2689 IN ACCESS_MASK DesiredAccess,
2690 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
2691 IN TIMER_TYPE TimerType);
2692
2693 NTSTATUS
2694 NTAPI
2695 ZwOpenTimer(
2696 OUT PHANDLE TimerHandle,
2697 IN ACCESS_MASK DesiredAccess,
2698 IN POBJECT_ATTRIBUTES ObjectAttributes);
2699
2700 NTSYSAPI
2701 NTSTATUS
2702 NTAPI
2703 ZwSetInformationThread(
2704 IN HANDLE ThreadHandle,
2705 IN THREADINFOCLASS ThreadInformationClass,
2706 IN PVOID ThreadInformation,
2707 IN ULONG ThreadInformationLength);
2708
2709 NTSTATUS
2710 NTAPI
2711 ZwSetTimer(
2712 IN HANDLE TimerHandle,
2713 IN PLARGE_INTEGER DueTime,
2714 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL,
2715 IN PVOID TimerContext OPTIONAL,
2716 IN BOOLEAN ResumeTimer,
2717 IN LONG Period OPTIONAL,
2718 OUT PBOOLEAN PreviousState OPTIONAL);
2719
2720 #endif
2721
2722 /* Windows Device Driver Kit */
2723 #include "winddk.h"
2724
2725 #ifdef __cplusplus
2726 }
2727 #endif
2728
2729
2730 #endif /* _NTDDK_ */