4 * Windows NT Device Driver Kit
6 * This file is part of the ReactOS DDK package.
10 * Timo Kreuzer (timo.kreuzer@reactos.org)
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
28 #if !defined(_NTHAL_) && !defined(_NTIFS_)
29 #define _NTDDK_INCLUDED_
36 #define _CTYPE_DISABLE_MACROS
48 #include <stdarg.h> // FIXME
49 #include <basetyps.h> // FIXME
65 #endif /* _NTLSA_AUDIT_ */
66 #endif /* _NTLSA_IFS_ */
70 struct _LOADER_PARAMETER_BLOCK
;
72 struct _DRIVE_LAYOUT_INFORMATION_EX
;
73 struct _SET_PARTITION_INFORMATION_EX
;
75 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
76 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
77 #if defined(_NTHAL_INCLUDED_)
78 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
80 typedef struct _PEB
*PPEB
;
84 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
85 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
88 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
90 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
93 #endif /* _NTIMAGE_ */
95 #define PsGetCurrentProcess IoGetCurrentProcess
97 #if (NTDDI_VERSION >= NTDDI_VISTA)
98 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
99 #elif (NTDDI_VERSION >= NTDDI_WINXP)
100 extern NTSYSAPI CCHAR KeNumberProcessors
;
102 extern PCCHAR KeNumberProcessors
;
109 #define KERNEL_STACK_SIZE 12288
110 #define KERNEL_LARGE_STACK_SIZE 61440
111 #define KERNEL_LARGE_STACK_COMMIT 12288
113 #define SIZE_OF_80387_REGISTERS 80
115 #if !defined(RC_INVOKED)
117 #define CONTEXT_i386 0x10000
118 #define CONTEXT_i486 0x10000
119 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
120 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
121 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
122 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
123 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
124 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
126 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
127 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
128 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
129 CONTEXT_EXTENDED_REGISTERS)
131 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
133 #endif /* !defined(RC_INVOKED) */
135 typedef struct _FLOATING_SAVE_AREA
{
143 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
145 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
147 #include "pshpack4.h"
148 typedef struct _CONTEXT
{
156 FLOATING_SAVE_AREA FloatSave
;
173 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
181 #define KERNEL_STACK_SIZE 0x6000
182 #define KERNEL_LARGE_STACK_SIZE 0x12000
183 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
185 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
187 #define EXCEPTION_READ_FAULT 0
188 #define EXCEPTION_WRITE_FAULT 1
189 #define EXCEPTION_EXECUTE_FAULT 8
191 #if !defined(RC_INVOKED)
193 #define CONTEXT_AMD64 0x100000
195 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
196 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
197 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
198 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
199 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
201 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
202 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
204 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
206 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
207 #define CONTEXT_SERVICE_ACTIVE 0x10000000
208 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
209 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
211 #endif /* !defined(RC_INVOKED) */
213 #define INITIAL_MXCSR 0x1f80
214 #define INITIAL_FPCSR 0x027f
216 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
256 XMM_SAVE_AREA32 FltSave
;
278 M128A VectorRegister
[26];
279 ULONG64 VectorControl
;
280 ULONG64 DebugControl
;
281 ULONG64 LastBranchToRip
;
282 ULONG64 LastBranchFromRip
;
283 ULONG64 LastExceptionToRip
;
284 ULONG64 LastExceptionFromRip
;
292 $
include (haltypes
.h
)
297 $
include (rtltypes
.h
)
301 $
include (halfuncs
.h
)
307 $
include (rtlfuncs
.h
)
314 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
315 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
316 (TypeBitMask), (ComparisonType)))
318 #if (NTDDI_VERSION >= NTDDI_WIN2K)
323 IN ULONGLONG ConditionMask
,
328 typedef struct _KEY_NAME_INFORMATION
{
331 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
333 typedef struct _KEY_CACHED_INFORMATION
{
334 LARGE_INTEGER LastWriteTime
;
339 ULONG MaxValueNameLen
;
340 ULONG MaxValueDataLen
;
342 } KEY_CACHED_INFORMATION
, *PKEY_CACHED_INFORMATION
;
344 typedef struct _KEY_VIRTUALIZATION_INFORMATION
{
345 ULONG VirtualizationCandidate
:1;
346 ULONG VirtualizationEnabled
:1;
347 ULONG VirtualTarget
:1;
348 ULONG VirtualStore
:1;
349 ULONG VirtualSource
:1;
351 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
353 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
354 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
355 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
356 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
357 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
359 typedef struct _QUOTA_LIMITS
{
360 SIZE_T PagedPoolLimit
;
361 SIZE_T NonPagedPoolLimit
;
362 SIZE_T MinimumWorkingSetSize
;
363 SIZE_T MaximumWorkingSetSize
;
364 SIZE_T PagefileLimit
;
365 LARGE_INTEGER TimeLimit
;
366 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
368 typedef union _RATE_QUOTA_LIMIT
{
374 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
376 typedef struct _QUOTA_LIMITS_EX
{
377 SIZE_T PagedPoolLimit
;
378 SIZE_T NonPagedPoolLimit
;
379 SIZE_T MinimumWorkingSetSize
;
380 SIZE_T MaximumWorkingSetSize
;
381 SIZE_T PagefileLimit
;
382 LARGE_INTEGER TimeLimit
;
383 SIZE_T WorkingSetLimit
;
388 RATE_QUOTA_LIMIT CpuRateLimit
;
389 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
391 typedef struct _IO_COUNTERS
{
392 ULONGLONG ReadOperationCount
;
393 ULONGLONG WriteOperationCount
;
394 ULONGLONG OtherOperationCount
;
395 ULONGLONG ReadTransferCount
;
396 ULONGLONG WriteTransferCount
;
397 ULONGLONG OtherTransferCount
;
398 } IO_COUNTERS
, *PIO_COUNTERS
;
400 typedef struct _VM_COUNTERS
{
401 SIZE_T PeakVirtualSize
;
403 ULONG PageFaultCount
;
404 SIZE_T PeakWorkingSetSize
;
405 SIZE_T WorkingSetSize
;
406 SIZE_T QuotaPeakPagedPoolUsage
;
407 SIZE_T QuotaPagedPoolUsage
;
408 SIZE_T QuotaPeakNonPagedPoolUsage
;
409 SIZE_T QuotaNonPagedPoolUsage
;
410 SIZE_T PagefileUsage
;
411 SIZE_T PeakPagefileUsage
;
412 } VM_COUNTERS
, *PVM_COUNTERS
;
414 typedef struct _VM_COUNTERS_EX
{
415 SIZE_T PeakVirtualSize
;
417 ULONG PageFaultCount
;
418 SIZE_T PeakWorkingSetSize
;
419 SIZE_T WorkingSetSize
;
420 SIZE_T QuotaPeakPagedPoolUsage
;
421 SIZE_T QuotaPagedPoolUsage
;
422 SIZE_T QuotaPeakNonPagedPoolUsage
;
423 SIZE_T QuotaNonPagedPoolUsage
;
424 SIZE_T PagefileUsage
;
425 SIZE_T PeakPagefileUsage
;
427 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
429 #define MAX_HW_COUNTERS 16
430 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
432 typedef enum _HARDWARE_COUNTER_TYPE
{
434 MaxHardwareCounterType
435 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
437 typedef struct _HARDWARE_COUNTER
{
438 HARDWARE_COUNTER_TYPE Type
;
441 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
443 typedef struct _POOLED_USAGE_AND_LIMITS
{
444 SIZE_T PeakPagedPoolUsage
;
445 SIZE_T PagedPoolUsage
;
446 SIZE_T PagedPoolLimit
;
447 SIZE_T PeakNonPagedPoolUsage
;
448 SIZE_T NonPagedPoolUsage
;
449 SIZE_T NonPagedPoolLimit
;
450 SIZE_T PeakPagefileUsage
;
451 SIZE_T PagefileUsage
;
452 SIZE_T PagefileLimit
;
453 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
455 typedef struct _PROCESS_ACCESS_TOKEN
{
458 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
460 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
461 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
463 typedef struct _PROCESS_EXCEPTION_PORT
{
464 IN HANDLE ExceptionPortHandle
;
465 IN OUT ULONG StateFlags
;
466 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
468 typedef struct _KERNEL_USER_TIMES
{
469 LARGE_INTEGER CreateTime
;
470 LARGE_INTEGER ExitTime
;
471 LARGE_INTEGER KernelTime
;
472 LARGE_INTEGER UserTime
;
473 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
475 /* NtXxx Functions */
481 OUT PHANDLE ProcessHandle
,
482 IN ACCESS_MASK DesiredAccess
,
483 IN POBJECT_ATTRIBUTES ObjectAttributes
,
484 IN PCLIENT_ID ClientId OPTIONAL
);
489 NtQueryInformationProcess(
490 IN HANDLE ProcessHandle
,
491 IN PROCESSINFOCLASS ProcessInformationClass
,
492 OUT PVOID ProcessInformation OPTIONAL
,
493 IN ULONG ProcessInformationLength
,
494 OUT PULONG ReturnLength OPTIONAL
);
496 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
497 SystemFirmwareTable_Enumerate
,
498 SystemFirmwareTable_Get
499 } SYSTEM_FIRMWARE_TABLE_ACTION
;
501 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
502 ULONG ProviderSignature
;
503 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
505 ULONG TableBufferLength
;
506 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
507 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
511 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
513 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
514 ULONG ProviderSignature
;
516 PFNFTH FirmwareTableHandler
;
518 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
521 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
524 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
525 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
526 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
527 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
529 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
530 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
531 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
532 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
533 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
535 #define MAX_WOW64_SHARED_ENTRIES 16
537 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
538 #define NX_SUPPORT_POLICY_ALWAYSON 1
539 #define NX_SUPPORT_POLICY_OPTIN 2
540 #define NX_SUPPORT_POLICY_OPTOUT 3
542 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
543 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
545 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
546 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
548 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
549 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
551 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
552 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
553 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
555 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
556 #define SHARED_GLOBAL_FLAGS_SPARE \
557 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
559 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
560 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
561 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
563 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
564 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
565 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
567 #define EX_INIT_BITS(Flags, Bit) \
568 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
570 #define EX_TEST_SET_BIT(Flags, Bit) \
571 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
573 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
574 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
576 typedef struct _KUSER_SHARED_DATA
{
577 ULONG TickCountLowDeprecated
;
578 ULONG TickCountMultiplier
;
579 volatile KSYSTEM_TIME InterruptTime
;
580 volatile KSYSTEM_TIME SystemTime
;
581 volatile KSYSTEM_TIME TimeZoneBias
;
582 USHORT ImageNumberLow
;
583 USHORT ImageNumberHigh
;
584 WCHAR NtSystemRoot
[260];
585 ULONG MaxStackTraceDepth
;
586 ULONG CryptoExponent
;
588 ULONG LargePageMinimum
;
590 NT_PRODUCT_TYPE NtProductType
;
591 BOOLEAN ProductTypeIsValid
;
592 ULONG NtMajorVersion
;
593 ULONG NtMinorVersion
;
594 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
597 volatile ULONG TimeSlip
;
598 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
599 ULONG AltArchitecturePad
[1];
600 LARGE_INTEGER SystemExpirationDate
;
602 BOOLEAN KdDebuggerEnabled
;
603 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
604 UCHAR NXSupportPolicy
;
606 volatile ULONG ActiveConsoleId
;
607 volatile ULONG DismountCount
;
608 ULONG ComPlusPackage
;
609 ULONG LastSystemRITEventTickCount
;
610 ULONG NumberOfPhysicalPages
;
611 BOOLEAN SafeBootMode
;
612 #if (NTDDI_VERSION >= NTDDI_WIN7)
616 UCHAR TscQpcEnabled
:1;
617 UCHAR TscQpcSpareFlag
:1;
623 #if (NTDDI_VERSION >= NTDDI_VISTA)
625 ULONG SharedDataFlags
;
627 ULONG DbgErrorPortPresent
:1;
628 ULONG DbgElevationEnabled
:1;
629 ULONG DbgVirtEnabled
:1;
630 ULONG DbgInstallerDetectEnabled
:1;
631 ULONG DbgSystemDllRelocated
:1;
632 ULONG DbgDynProcessorEnabled
:1;
633 ULONG DbgSEHValidationEnabled
:1;
640 ULONG DataFlagsPad
[1];
641 ULONGLONG TestRetInstruction
;
643 ULONG SystemCallReturn
;
644 ULONGLONG SystemCallPad
[3];
645 _ANONYMOUS_UNION
union {
646 volatile KSYSTEM_TIME TickCount
;
647 volatile ULONG64 TickCountQuad
;
648 _ANONYMOUS_STRUCT
struct {
649 ULONG ReservedTickCountOverlay
[3];
650 ULONG TickCountPad
[1];
655 #if (NTDDI_VERSION >= NTDDI_WS03)
656 LONGLONG ConsoleSessionForegroundProcessId
;
657 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
659 #if (NTDDI_VERSION >= NTDDI_VISTA)
660 #if (NTDDI_VERSION >= NTDDI_WIN7)
661 USHORT UserModeGlobalLogger
[16];
663 USHORT UserModeGlobalLogger
[8];
664 ULONG HeapTracingPid
[2];
665 ULONG CritSecTracingPid
[2];
667 ULONG ImageFileExecutionOptions
;
668 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
669 ULONG LangGenerationCount
;
671 /* 4 bytes padding */
674 volatile ULONG64 InterruptTimeBias
;
676 #if (NTDDI_VERSION >= NTDDI_WIN7)
677 volatile ULONG64 TscQpcBias
;
678 volatile ULONG ActiveProcessorCount
;
679 volatile USHORT ActiveGroupCount
;
681 volatile ULONG AitSamplingValue
;
682 volatile ULONG AppCompatFlag
;
683 ULONGLONG SystemDllNativeRelocation
;
684 ULONG SystemDllWowRelocation
;
686 XSTATE_CONFIGURATION XState
;
688 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
690 #define CmResourceTypeMaximum 8
692 typedef struct _CM_PCCARD_DEVICE_DATA
{
698 ULONG LegacyBaseAddress
;
700 } CM_PCCARD_DEVICE_DATA
, *PCM_PCCARD_DEVICE_DATA
;
702 #define PCCARD_MAP_ERROR 0x01
703 #define PCCARD_DEVICE_PCI 0x10
705 #define PCCARD_SCAN_DISABLED 0x01
706 #define PCCARD_MAP_ZERO 0x02
707 #define PCCARD_NO_TIMER 0x03
708 #define PCCARD_NO_PIC 0x04
709 #define PCCARD_NO_LEGACY_BASE 0x05
710 #define PCCARD_DUP_LEGACY_BASE 0x06
711 #define PCCARD_NO_CONTROLLERS 0x07
713 #if defined(_X86_) || defined(_AMD64_)
714 #define PAUSE_PROCESSOR YieldProcessor();
715 #elif defined(_IA64_)
716 #define PAUSE_PROCESSOR __yield();
719 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
721 /* Filesystem runtime library routines */
723 #if (NTDDI_VERSION >= NTDDI_WIN2K)
727 FsRtlIsTotalDeviceFailure(
731 /* FIXME : These definitions below doesn't belong to NTDDK */
735 extern NTKERNELAPI PVOID MmHighestUserAddress
;
736 extern NTKERNELAPI PVOID MmSystemRangeStart
;
737 extern NTKERNELAPI ULONG MmUserProbeAddress
;
739 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
740 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
741 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
742 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
743 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
745 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
747 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
748 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
749 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
750 #if !defined (_X86PAE_)
751 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
753 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
756 #define KeGetPcr() PCR
758 #define PCR_MINOR_VERSION 1
759 #define PCR_MAJOR_VERSION 1
761 typedef struct _KPCR
{
765 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
766 PVOID Used_StackBase
;
769 ULONG ContextSwitches
;
770 KAFFINITY SetMemberCopy
;
774 struct _KPCR
*SelfPcr
;
780 PVOID KdVersionBlock
;
781 struct _KIDTENTRY
*IDT
;
782 struct _KGDTENTRY
*GDT
;
787 ULONG StallScaleFactor
;
791 UCHAR SecondLevelCacheAssociativity
;
793 ULONG KernelReserved
[14];
794 ULONG SecondLevelCacheSize
;
795 ULONG HalReserved
[16];
800 KeGetCurrentProcessorNumber(VOID
)
802 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
805 typedef enum _INTERLOCKED_RESULT
{
806 ResultNegative
= RESULT_NEGATIVE
,
807 ResultZero
= RESULT_ZERO
,
808 ResultPositive
= RESULT_POSITIVE
809 } INTERLOCKED_RESULT
;
814 Exfi386InterlockedIncrementLong(
815 IN OUT LONG
volatile *Addend
);
820 Exfi386InterlockedDecrementLong(
826 Exfi386InterlockedExchangeUlong(
834 #define PTI_SHIFT 12L
835 #define PDI_SHIFT 21L
836 #define PPI_SHIFT 30L
837 #define PXI_SHIFT 39L
838 #define PTE_PER_PAGE 512
839 #define PDE_PER_PAGE 512
840 #define PPE_PER_PAGE 512
841 #define PXE_PER_PAGE 512
842 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
843 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
844 #define PPI_MASK (PPE_PER_PAGE - 1)
845 #define PXI_MASK (PXE_PER_PAGE - 1)
847 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
848 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
849 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
850 #define PDE_BASE 0xFFFFF6FB40000000ULL
851 #define PTE_BASE 0xFFFFF68000000000ULL
852 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
853 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
854 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
855 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
857 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
858 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
859 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
860 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
861 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
862 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
866 _ANONYMOUS_UNION
union
869 _ANONYMOUS_STRUCT
struct
871 union _KGDTENTRY64
*GdtBase
;
872 struct _KTSS64
*TssBase
;
875 struct _KPRCB
*CurrentPrcb
;
876 PKSPIN_LOCK_QUEUE LockArray
;
880 union _KIDTENTRY64
*IdtBase
;
883 UCHAR SecondLevelCacheAssociativity
;
884 UCHAR ObsoleteNumber
;
889 ULONG StallScaleFactor
;
891 ULONG KernelReserved
[15];
892 ULONG SecondLevelCacheSize
;
893 ULONG HalReserved
[16];
895 PVOID KdVersionBlock
;
904 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
909 KeGetCurrentProcessorNumber(VOID
)
911 return (ULONG
)__readgsword(0x184);