4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
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.
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
31 #if !defined(_NTHAL_) && !defined(_NTIFS_)
32 #define _NTDDK_INCLUDED_
39 #define _CTYPE_DISABLE_MACROS
51 #include <stdarg.h> // FIXME
52 #include <basetyps.h> // FIXME
59 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
60 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
61 #if defined(_NTHAL_INCLUDED_)
62 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
64 typedef struct _PEB
*PPEB
;
65 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
66 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
69 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
71 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
74 #define PsGetCurrentProcess IoGetCurrentProcess
76 #if (NTDDI_VERSION >= NTDDI_VISTA)
77 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
78 #elif (NTDDI_VERSION >= NTDDI_WINXP)
79 extern NTSYSAPI CCHAR KeNumberProcessors
;
81 extern PCCHAR KeNumberProcessors
;
90 #define KERNEL_STACK_SIZE 12288
91 #define KERNEL_LARGE_STACK_SIZE 61440
92 #define KERNEL_LARGE_STACK_COMMIT 12288
94 #define SIZE_OF_80387_REGISTERS 80
96 #if !defined(RC_INVOKED)
98 #define CONTEXT_i386 0x10000
99 #define CONTEXT_i486 0x10000
100 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
101 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
102 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
103 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
104 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
105 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
107 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
108 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
109 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
110 CONTEXT_EXTENDED_REGISTERS)
112 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
114 #endif /* !defined(RC_INVOKED) */
116 typedef struct _FLOATING_SAVE_AREA
{
124 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
126 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
128 #include "pshpack4.h"
129 typedef struct _CONTEXT
{
137 FLOATING_SAVE_AREA FloatSave
;
154 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
155 } CONTEXT
, *PCONTEXT
;
162 #define KERNEL_STACK_SIZE 0x6000
163 #define KERNEL_LARGE_STACK_SIZE 0x12000
164 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
166 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
168 #define EXCEPTION_READ_FAULT 0
169 #define EXCEPTION_WRITE_FAULT 1
170 #define EXCEPTION_EXECUTE_FAULT 8
172 #if !defined(RC_INVOKED)
174 #define CONTEXT_AMD64 0x100000
176 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
177 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
178 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
179 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
180 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
182 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
183 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
185 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
187 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
188 #define CONTEXT_SERVICE_ACTIVE 0x10000000
189 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
190 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
192 #endif /* !defined(RC_INVOKED) */
194 #define INITIAL_MXCSR 0x1f80
195 #define INITIAL_FPCSR 0x027f
197 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
237 XMM_SAVE_AREA32 FltSave
;
259 M128A VectorRegister
[26];
260 ULONG64 VectorControl
;
261 ULONG64 DebugControl
;
262 ULONG64 LastBranchToRip
;
263 ULONG64 LastBranchFromRip
;
264 ULONG64 LastExceptionToRip
;
265 ULONG64 LastExceptionFromRip
;
266 } CONTEXT
, *PCONTEXT
;
270 typedef enum _WELL_KNOWN_SID_TYPE
{
274 WinCreatorOwnerSid
= 3,
275 WinCreatorGroupSid
= 4,
276 WinCreatorOwnerServerSid
= 5,
277 WinCreatorGroupServerSid
= 6,
278 WinNtAuthoritySid
= 7,
282 WinInteractiveSid
= 11,
284 WinAnonymousSid
= 13,
286 WinEnterpriseControllersSid
= 15,
288 WinAuthenticatedUserSid
= 17,
289 WinRestrictedCodeSid
= 18,
290 WinTerminalServerSid
= 19,
291 WinRemoteLogonIdSid
= 20,
293 WinLocalSystemSid
= 22,
294 WinLocalServiceSid
= 23,
295 WinNetworkServiceSid
= 24,
296 WinBuiltinDomainSid
= 25,
297 WinBuiltinAdministratorsSid
= 26,
298 WinBuiltinUsersSid
= 27,
299 WinBuiltinGuestsSid
= 28,
300 WinBuiltinPowerUsersSid
= 29,
301 WinBuiltinAccountOperatorsSid
= 30,
302 WinBuiltinSystemOperatorsSid
= 31,
303 WinBuiltinPrintOperatorsSid
= 32,
304 WinBuiltinBackupOperatorsSid
= 33,
305 WinBuiltinReplicatorSid
= 34,
306 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
307 WinBuiltinRemoteDesktopUsersSid
= 36,
308 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
309 WinAccountAdministratorSid
= 38,
310 WinAccountGuestSid
= 39,
311 WinAccountKrbtgtSid
= 40,
312 WinAccountDomainAdminsSid
= 41,
313 WinAccountDomainUsersSid
= 42,
314 WinAccountDomainGuestsSid
= 43,
315 WinAccountComputersSid
= 44,
316 WinAccountControllersSid
= 45,
317 WinAccountCertAdminsSid
= 46,
318 WinAccountSchemaAdminsSid
= 47,
319 WinAccountEnterpriseAdminsSid
= 48,
320 WinAccountPolicyAdminsSid
= 49,
321 WinAccountRasAndIasServersSid
= 50,
322 WinNTLMAuthenticationSid
= 51,
323 WinDigestAuthenticationSid
= 52,
324 WinSChannelAuthenticationSid
= 53,
325 WinThisOrganizationSid
= 54,
326 WinOtherOrganizationSid
= 55,
327 WinBuiltinIncomingForestTrustBuildersSid
= 56,
328 WinBuiltinPerfMonitoringUsersSid
= 57,
329 WinBuiltinPerfLoggingUsersSid
= 58,
330 WinBuiltinAuthorizationAccessSid
= 59,
331 WinBuiltinTerminalServerLicenseServersSid
= 60,
332 WinBuiltinDCOMUsersSid
= 61,
333 WinBuiltinIUsersSid
= 62,
335 WinBuiltinCryptoOperatorsSid
= 64,
336 WinUntrustedLabelSid
= 65,
338 WinMediumLabelSid
= 67,
339 WinHighLabelSid
= 68,
340 WinSystemLabelSid
= 69,
341 WinWriteRestrictedCodeSid
= 70,
342 WinCreatorOwnerRightsSid
= 71,
343 WinCacheablePrincipalsGroupSid
= 72,
344 WinNonCacheablePrincipalsGroupSid
= 73,
345 WinEnterpriseReadonlyControllersSid
= 74,
346 WinAccountReadonlyControllersSid
= 75,
347 WinBuiltinEventLogReadersGroup
= 76,
348 WinNewEnterpriseReadonlyControllersSid
= 77,
349 WinBuiltinCertSvcDComAccessGroup
= 78,
350 WinMediumPlusLabelSid
= 79,
351 WinLocalLogonSid
= 80,
352 WinConsoleLogonSid
= 81,
353 WinThisOrganizationCertificateSid
= 82,
354 } WELL_KNOWN_SID_TYPE
;
356 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
358 #ifndef _RTL_RUN_ONCE_DEF
359 #define _RTL_RUN_ONCE_DEF
361 #define RTL_RUN_ONCE_INIT {0}
363 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
364 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
365 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
367 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
369 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
371 #define RTL_HASH_RESERVED_SIGNATURE 0
373 /* RtlVerifyVersionInfo() ComparisonType */
376 #define VER_GREATER 2
377 #define VER_GREATER_EQUAL 3
379 #define VER_LESS_EQUAL 5
383 #define VER_CONDITION_MASK 7
384 #define VER_NUM_BITS_PER_CONDITION_MASK 3
386 /* RtlVerifyVersionInfo() TypeMask */
388 #define VER_MINORVERSION 0x0000001
389 #define VER_MAJORVERSION 0x0000002
390 #define VER_BUILDNUMBER 0x0000004
391 #define VER_PLATFORMID 0x0000008
392 #define VER_SERVICEPACKMINOR 0x0000010
393 #define VER_SERVICEPACKMAJOR 0x0000020
394 #define VER_SUITENAME 0x0000040
395 #define VER_PRODUCT_TYPE 0x0000080
397 #define VER_NT_WORKSTATION 0x0000001
398 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
399 #define VER_NT_SERVER 0x0000003
401 #define VER_PLATFORM_WIN32s 0
402 #define VER_PLATFORM_WIN32_WINDOWS 1
403 #define VER_PLATFORM_WIN32_NT 2
405 typedef union _RTL_RUN_ONCE
{
407 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
409 typedef ULONG
/* LOGICAL */
410 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
411 IN OUT PRTL_RUN_ONCE RunOnce
,
412 IN OUT PVOID Parameter OPTIONAL
,
413 IN OUT PVOID
*Context OPTIONAL
);
415 #endif /* _RTL_RUN_ONCE_DEF */
417 typedef enum _TABLE_SEARCH_RESULT
{
422 } TABLE_SEARCH_RESULT
;
424 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
428 } RTL_GENERIC_COMPARE_RESULTS
;
431 struct _RTL_AVL_TABLE
;
433 typedef RTL_GENERIC_COMPARE_RESULTS
434 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
435 IN
struct _RTL_AVL_TABLE
*Table
,
436 IN PVOID FirstStruct
,
437 IN PVOID SecondStruct
);
440 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
441 IN
struct _RTL_AVL_TABLE
*Table
,
445 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
446 IN
struct _RTL_AVL_TABLE
*Table
,
450 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
451 IN
struct _RTL_AVL_TABLE
*Table
,
455 typedef struct _RTL_BALANCED_LINKS
{
456 struct _RTL_BALANCED_LINKS
*Parent
;
457 struct _RTL_BALANCED_LINKS
*LeftChild
;
458 struct _RTL_BALANCED_LINKS
*RightChild
;
461 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
463 typedef struct _RTL_AVL_TABLE
{
464 RTL_BALANCED_LINKS BalancedRoot
;
465 PVOID OrderedPointer
;
466 ULONG WhichOrderedElement
;
467 ULONG NumberGenericTableElements
;
469 PRTL_BALANCED_LINKS RestartKey
;
471 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
472 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
473 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
475 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
477 #ifndef RTL_USE_AVL_TABLES
479 struct _RTL_GENERIC_TABLE
;
481 typedef RTL_GENERIC_COMPARE_RESULTS
482 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
483 IN
struct _RTL_GENERIC_TABLE
*Table
,
484 IN PVOID FirstStruct
,
485 IN PVOID SecondStruct
);
488 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
489 IN
struct _RTL_GENERIC_TABLE
*Table
,
493 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
494 IN
struct _RTL_GENERIC_TABLE
*Table
,
497 typedef struct _RTL_SPLAY_LINKS
{
498 struct _RTL_SPLAY_LINKS
*Parent
;
499 struct _RTL_SPLAY_LINKS
*LeftChild
;
500 struct _RTL_SPLAY_LINKS
*RightChild
;
501 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
503 typedef struct _RTL_GENERIC_TABLE
{
504 PRTL_SPLAY_LINKS TableRoot
;
505 LIST_ENTRY InsertOrderList
;
506 PLIST_ENTRY OrderedPointer
;
507 ULONG WhichOrderedElement
;
508 ULONG NumberGenericTableElements
;
509 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
510 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
511 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
513 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
515 #if (NTDDI_VERSION >= NTDDI_WIN2K)
520 RtlInitializeGenericTable(
521 OUT PRTL_GENERIC_TABLE Table
,
522 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
523 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
524 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
525 IN PVOID TableContext OPTIONAL
);
530 RtlInsertElementGenericTable(
531 IN PRTL_GENERIC_TABLE Table
,
534 OUT PBOOLEAN NewElement OPTIONAL
);
539 RtlInsertElementGenericTableFull(
540 IN PRTL_GENERIC_TABLE Table
,
543 OUT PBOOLEAN NewElement OPTIONAL
,
544 IN PVOID NodeOrParent
,
545 IN TABLE_SEARCH_RESULT SearchResult
);
550 RtlDeleteElementGenericTable(
551 IN PRTL_GENERIC_TABLE Table
,
557 RtlLookupElementGenericTable(
558 IN PRTL_GENERIC_TABLE Table
,
564 RtlLookupElementGenericTableFull(
565 IN PRTL_GENERIC_TABLE Table
,
567 OUT PVOID
*NodeOrParent
,
568 OUT TABLE_SEARCH_RESULT
*SearchResult
);
573 RtlEnumerateGenericTable(
574 IN PRTL_GENERIC_TABLE Table
,
580 RtlEnumerateGenericTableWithoutSplaying(
581 IN PRTL_GENERIC_TABLE Table
,
582 IN OUT PVOID
*RestartKey
);
587 RtlGetElementGenericTable(
588 IN PRTL_GENERIC_TABLE Table
,
594 RtlNumberGenericTableElements(
595 IN PRTL_GENERIC_TABLE Table
);
600 RtlIsGenericTableEmpty(
601 IN PRTL_GENERIC_TABLE Table
);
603 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
605 #endif /* RTL_USE_AVL_TABLES */
607 #ifdef RTL_USE_AVL_TABLES
609 #undef PRTL_GENERIC_COMPARE_ROUTINE
610 #undef RTL_GENERIC_COMPARE_ROUTINE
611 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
612 #undef RTL_GENERIC_ALLOCATE_ROUTINE
613 #undef PRTL_GENERIC_FREE_ROUTINE
614 #undef RTL_GENERIC_FREE_ROUTINE
615 #undef RTL_GENERIC_TABLE
616 #undef PRTL_GENERIC_TABLE
618 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
619 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
620 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
621 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
622 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
623 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
624 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
625 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
627 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
628 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
629 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
630 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
631 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
632 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
633 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
634 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
635 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
636 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
637 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
639 #endif /* RTL_USE_AVL_TABLES */
641 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
644 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
646 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
647 PLIST_ENTRY ChainHead
;
648 PLIST_ENTRY PrevLinkage
;
650 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
652 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
653 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
654 PLIST_ENTRY ChainHead
;
656 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
658 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
665 ULONG NonEmptyBuckets
;
666 ULONG NumEnumerators
;
668 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
670 typedef struct _OSVERSIONINFOA
{
671 ULONG dwOSVersionInfoSize
;
672 ULONG dwMajorVersion
;
673 ULONG dwMinorVersion
;
676 CHAR szCSDVersion
[128];
677 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
679 typedef struct _OSVERSIONINFOW
{
680 ULONG dwOSVersionInfoSize
;
681 ULONG dwMajorVersion
;
682 ULONG dwMinorVersion
;
685 WCHAR szCSDVersion
[128];
686 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
688 typedef struct _OSVERSIONINFOEXA
{
689 ULONG dwOSVersionInfoSize
;
690 ULONG dwMajorVersion
;
691 ULONG dwMinorVersion
;
694 CHAR szCSDVersion
[128];
695 USHORT wServicePackMajor
;
696 USHORT wServicePackMinor
;
700 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
702 typedef struct _OSVERSIONINFOEXW
{
703 ULONG dwOSVersionInfoSize
;
704 ULONG dwMajorVersion
;
705 ULONG dwMinorVersion
;
708 WCHAR szCSDVersion
[128];
709 USHORT wServicePackMajor
;
710 USHORT wServicePackMinor
;
714 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
717 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
718 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
719 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
720 typedef OSVERSIONINFOW OSVERSIONINFO
;
721 typedef POSVERSIONINFOW POSVERSIONINFO
;
722 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
724 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
725 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
726 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
727 typedef OSVERSIONINFOA OSVERSIONINFO
;
728 typedef POSVERSIONINFOA POSVERSIONINFO
;
729 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
732 #define HASH_ENTRY_KEY(x) ((x)->Signature)
734 #define RtlInitializeSplayLinks(Links) { \
735 PRTL_SPLAY_LINKS _SplayLinks; \
736 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
737 _SplayLinks->Parent = _SplayLinks; \
738 _SplayLinks->LeftChild = NULL; \
739 _SplayLinks->RightChild = NULL; \
742 #define RtlIsLeftChild(Links) \
743 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
745 #define RtlIsRightChild(Links) \
746 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
748 #define RtlRightChild(Links) \
749 ((PRTL_SPLAY_LINKS)(Links))->RightChild
751 #define RtlIsRoot(Links) \
752 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
754 #define RtlLeftChild(Links) \
755 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
757 #define RtlParent(Links) \
758 ((PRTL_SPLAY_LINKS)(Links))->Parent
760 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
762 PRTL_SPLAY_LINKS _SplayParent; \
763 PRTL_SPLAY_LINKS _SplayChild; \
764 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
765 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
766 _SplayParent->LeftChild = _SplayChild; \
767 _SplayChild->Parent = _SplayParent; \
770 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
772 PRTL_SPLAY_LINKS _SplayParent; \
773 PRTL_SPLAY_LINKS _SplayChild; \
774 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
775 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
776 _SplayParent->RightChild = _SplayChild; \
777 _SplayChild->Parent = _SplayParent; \
780 #if !defined(MIDL_PASS)
785 RtlConvertLongToLuid(
792 Luid
.LowPart
= Temp
.u
.LowPart
;
793 Luid
.HighPart
= Temp
.u
.HighPart
;
800 RtlConvertUlongToLuid(
810 #endif /* !defined(MIDL_PASS) */
812 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
813 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
814 *CallersAddress = (PVOID)_ReturnAddress(); \
815 *CallersCaller = NULL;
817 #if (NTDDI_VERSION >= NTDDI_WIN2K)
821 RtlGetCallersAddress(
822 OUT PVOID
*CallersAddress
,
823 OUT PVOID
*CallersCaller
);
827 #if (NTDDI_VERSION >= NTDDI_WIN2K)
829 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
835 IN OUT PRTL_SPLAY_LINKS Links
);
841 IN PRTL_SPLAY_LINKS Links
);
847 IN PRTL_SPLAY_LINKS Links
,
848 IN OUT PRTL_SPLAY_LINKS
*Root
);
854 IN PRTL_SPLAY_LINKS Links
);
859 RtlSubtreePredecessor(
860 IN PRTL_SPLAY_LINKS Links
);
866 IN PRTL_SPLAY_LINKS Links
);
872 IN PRTL_SPLAY_LINKS Links
);
877 RtlPrefixUnicodeString(
878 IN PCUNICODE_STRING String1
,
879 IN PCUNICODE_STRING String2
,
880 IN BOOLEAN CaseInSensitive
);
886 IN OUT PSTRING DestinationString
,
887 IN
const PSTRING SourceString
);
892 RtlUpcaseUnicodeString(
893 IN OUT PUNICODE_STRING DestinationString
,
894 IN PCUNICODE_STRING SourceString
,
895 IN BOOLEAN AllocateDestinationString
);
901 IN OUT PACCESS_MASK AccessMask
,
902 IN PGENERIC_MAPPING GenericMapping
);
907 RtlVolumeDeviceToDosName(
908 IN PVOID VolumeDeviceObject
,
909 OUT PUNICODE_STRING DosName
);
915 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
920 RtlVerifyVersionInfo(
921 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
923 IN ULONGLONG ConditionMask
);
929 IN
const PSTRING String1
,
930 IN
const PSTRING String2
,
931 IN BOOLEAN CaseInSensitive
);
937 OUT PSTRING DestinationString
,
938 IN
const PSTRING SourceString OPTIONAL
);
944 IN
const PSTRING String1
,
945 IN
const PSTRING String2
,
946 IN BOOLEAN CaseInSensitive
);
953 IN ULONG Base OPTIONAL
,
970 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
972 #if (NTDDI_VERSION >= NTDDI_WINXP)
977 RtlInitializeGenericTableAvl(
978 OUT PRTL_AVL_TABLE Table
,
979 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
980 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
981 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
982 IN PVOID TableContext OPTIONAL
);
987 RtlInsertElementGenericTableAvl(
988 IN PRTL_AVL_TABLE Table
,
991 OUT PBOOLEAN NewElement OPTIONAL
);
996 RtlInsertElementGenericTableFullAvl(
997 IN PRTL_AVL_TABLE Table
,
1000 OUT PBOOLEAN NewElement OPTIONAL
,
1001 IN PVOID NodeOrParent
,
1002 IN TABLE_SEARCH_RESULT SearchResult
);
1007 RtlDeleteElementGenericTableAvl(
1008 IN PRTL_AVL_TABLE Table
,
1014 RtlLookupElementGenericTableAvl(
1015 IN PRTL_AVL_TABLE Table
,
1021 RtlLookupElementGenericTableFullAvl(
1022 IN PRTL_AVL_TABLE Table
,
1024 OUT PVOID
*NodeOrParent
,
1025 OUT TABLE_SEARCH_RESULT
*SearchResult
);
1030 RtlEnumerateGenericTableAvl(
1031 IN PRTL_AVL_TABLE Table
,
1032 IN BOOLEAN Restart
);
1037 RtlEnumerateGenericTableWithoutSplayingAvl(
1038 IN PRTL_AVL_TABLE Table
,
1039 IN OUT PVOID
*RestartKey
);
1044 RtlLookupFirstMatchingElementGenericTableAvl(
1045 IN PRTL_AVL_TABLE Table
,
1047 OUT PVOID
*RestartKey
);
1052 RtlEnumerateGenericTableLikeADirectory(
1053 IN PRTL_AVL_TABLE Table
,
1054 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
1055 IN PVOID MatchData OPTIONAL
,
1057 IN OUT PVOID
*RestartKey
,
1058 IN OUT PULONG DeleteCount
,
1064 RtlGetElementGenericTableAvl(
1065 IN PRTL_AVL_TABLE Table
,
1071 RtlNumberGenericTableElementsAvl(
1072 IN PRTL_AVL_TABLE Table
);
1077 RtlIsGenericTableEmptyAvl(
1078 IN PRTL_AVL_TABLE Table
);
1081 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1083 #if (NTDDI_VERSION >= NTDDI_VISTA)
1088 RtlRunOnceInitialize(
1089 OUT PRTL_RUN_ONCE RunOnce
);
1094 RtlRunOnceExecuteOnce(
1095 IN OUT PRTL_RUN_ONCE RunOnce
,
1096 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
1097 IN OUT PVOID Parameter OPTIONAL
,
1098 OUT PVOID
*Context OPTIONAL
);
1103 RtlRunOnceBeginInitialize(
1104 IN OUT PRTL_RUN_ONCE RunOnce
,
1106 OUT PVOID
*Context OPTIONAL
);
1112 IN OUT PRTL_RUN_ONCE RunOnce
,
1114 IN PVOID Context OPTIONAL
);
1120 IN ULONG OSMajorVersion
,
1121 IN ULONG OSMinorVersion
,
1122 IN ULONG SpMajorVersion
,
1123 IN ULONG SpMinorVersion
,
1124 OUT PULONG ReturnedProductType
);
1126 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1128 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
1130 #if (NTDDI_VERSION >= NTDDI_WIN7)
1135 RtlInitHashTableContext(
1136 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
1138 Context
->ChainHead
= NULL
;
1139 Context
->PrevLinkage
= NULL
;
1145 RtlInitHashTableContextFromEnumerator(
1146 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
1147 IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
1149 Context
->ChainHead
= Enumerator
->ChainHead
;
1150 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
1156 RtlReleaseHashTableContext(
1157 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
1159 UNREFERENCED_PARAMETER(Context
);
1166 RtlTotalBucketsHashTable(
1167 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1169 return HashTable
->TableSize
;
1175 RtlNonEmptyBucketsHashTable(
1176 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1178 return HashTable
->NonEmptyBuckets
;
1184 RtlEmptyBucketsHashTable(
1185 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1187 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
1193 RtlTotalEntriesHashTable(
1194 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1196 return HashTable
->NumEntries
;
1202 RtlActiveEnumeratorsHashTable(
1203 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1205 return HashTable
->NumEnumerators
;
1208 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1210 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
1212 #if (NTDDI_VERSION >= NTDDI_WIN7)
1218 IN OUT PRTL_DYNAMIC_HASH_TABLE
*HashTable OPTIONAL
,
1226 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1231 RtlInsertEntryHashTable(
1232 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1233 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
1234 IN ULONG_PTR Signature
,
1235 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1240 RtlRemoveEntryHashTable(
1241 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1242 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
1243 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1246 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1248 RtlLookupEntryHashTable(
1249 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1250 IN ULONG_PTR Signature
,
1251 OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1254 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1256 RtlGetNextEntryHashTable(
1257 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1258 IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
1263 RtlInitEnumerationHashTable(
1264 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1265 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1268 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1270 RtlEnumerateEntryHashTable(
1271 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1272 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1277 RtlEndEnumerationHashTable(
1278 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1279 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1284 RtlInitWeakEnumerationHashTable(
1285 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1286 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1289 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1291 RtlWeaklyEnumerateEntryHashTable(
1292 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1293 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1298 RtlEndWeakEnumerationHashTable(
1299 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1300 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1306 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1311 RtlContractHashTable(
1312 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1314 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1316 #if defined(_AMD64_) || defined(_IA64_)
1317 //DECLSPEC_DEPRECATED_DDK_WINXP
1321 RtlLargeIntegerDivide(
1322 IN LARGE_INTEGER Dividend
,
1323 IN LARGE_INTEGER Divisor
,
1324 OUT PLARGE_INTEGER Remainder OPTIONAL
)
1327 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
1329 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
1335 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1339 RtlLargeIntegerDivide(
1340 IN LARGE_INTEGER Dividend
,
1341 IN LARGE_INTEGER Divisor
,
1342 OUT PLARGE_INTEGER Remainder OPTIONAL
);
1345 #endif /* defined(_AMD64_) || defined(_IA64_) */
1347 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1348 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1349 (TypeBitMask), (ComparisonType)))
1351 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1355 VerSetConditionMask(
1356 IN ULONGLONG ConditionMask
,
1358 IN UCHAR Condition
);
1361 /** Kernel debugger routines **/
1369 IN ULONG MaximumResponseLength
);
1371 #if (NTDDI_VERSION >= NTDDI_WIN7)
1373 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
1374 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
1375 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
1376 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
1377 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
1379 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
1380 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
1381 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
1385 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
1386 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
1387 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
1389 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
1390 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
1391 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
1393 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1395 #define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \
1396 FILE_READ_ONLY_DEVICE | \
1397 FILE_FLOPPY_DISKETTE | \
1398 FILE_WRITE_ONCE_MEDIA | \
1399 FILE_DEVICE_SECURE_OPEN )
1401 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1402 ULONG AlignmentRequirement
;
1403 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1405 typedef struct _FILE_NAME_INFORMATION
{
1406 ULONG FileNameLength
;
1408 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1411 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1412 ULONG FileAttributes
;
1414 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1416 typedef struct _FILE_DISPOSITION_INFORMATION
{
1418 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1420 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1421 LARGE_INTEGER EndOfFile
;
1422 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1424 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1425 LARGE_INTEGER ValidDataLength
;
1426 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1428 typedef struct _FILE_FS_LABEL_INFORMATION
{
1429 ULONG VolumeLabelLength
;
1430 WCHAR VolumeLabel
[1];
1431 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1433 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1434 LARGE_INTEGER VolumeCreationTime
;
1435 ULONG VolumeSerialNumber
;
1436 ULONG VolumeLabelLength
;
1437 BOOLEAN SupportsObjects
;
1438 WCHAR VolumeLabel
[1];
1439 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1441 typedef struct _FILE_FS_SIZE_INFORMATION
{
1442 LARGE_INTEGER TotalAllocationUnits
;
1443 LARGE_INTEGER AvailableAllocationUnits
;
1444 ULONG SectorsPerAllocationUnit
;
1445 ULONG BytesPerSector
;
1446 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1448 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1449 LARGE_INTEGER TotalAllocationUnits
;
1450 LARGE_INTEGER CallerAvailableAllocationUnits
;
1451 LARGE_INTEGER ActualAvailableAllocationUnits
;
1452 ULONG SectorsPerAllocationUnit
;
1453 ULONG BytesPerSector
;
1454 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1456 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
1458 UCHAR ExtendedInfo
[48];
1459 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1461 typedef union _FILE_SEGMENT_ELEMENT
{
1463 ULONGLONG Alignment
;
1464 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1466 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1467 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1468 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1470 typedef enum _BUS_DATA_TYPE
{
1471 ConfigurationSpaceUndefined
= -1,
1479 PCMCIAConfiguration
,
1482 PNPISAConfiguration
,
1483 SgiInternalConfiguration
,
1485 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1487 typedef struct _KEY_NAME_INFORMATION
{
1490 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
1492 typedef struct _KEY_CACHED_INFORMATION
{
1493 LARGE_INTEGER LastWriteTime
;
1498 ULONG MaxValueNameLen
;
1499 ULONG MaxValueDataLen
;
1501 } KEY_CACHED_INFORMATION
, *PKEY_CACHED_INFORMATION
;
1503 typedef struct _KEY_VIRTUALIZATION_INFORMATION
{
1504 ULONG VirtualizationCandidate
:1;
1505 ULONG VirtualizationEnabled
:1;
1506 ULONG VirtualTarget
:1;
1507 ULONG VirtualStore
:1;
1508 ULONG VirtualSource
:1;
1510 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
1512 #define THREAD_CSWITCH_PMU_DISABLE FALSE
1513 #define THREAD_CSWITCH_PMU_ENABLE TRUE
1515 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
1517 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
1519 typedef struct _NT_TIB
{
1520 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1524 _ANONYMOUS_UNION
union {
1528 PVOID ArbitraryUserPointer
;
1529 struct _NT_TIB
*Self
;
1532 typedef struct _NT_TIB32
{
1533 ULONG ExceptionList
;
1537 __GNU_EXTENSION
union {
1541 ULONG ArbitraryUserPointer
;
1543 } NT_TIB32
,*PNT_TIB32
;
1545 typedef struct _NT_TIB64
{
1546 ULONG64 ExceptionList
;
1549 ULONG64 SubSystemTib
;
1550 __GNU_EXTENSION
union {
1554 ULONG64 ArbitraryUserPointer
;
1556 } NT_TIB64
,*PNT_TIB64
;
1558 typedef enum _PROCESSINFOCLASS
{
1559 ProcessBasicInformation
,
1564 ProcessBasePriority
,
1565 ProcessRaisePriority
,
1567 ProcessExceptionPort
,
1569 ProcessLdtInformation
,
1571 ProcessDefaultHardErrorMode
,
1572 ProcessIoPortHandlers
,
1573 ProcessPooledUsageAndLimits
,
1574 ProcessWorkingSetWatch
,
1575 ProcessUserModeIOPL
,
1576 ProcessEnableAlignmentFaultFixup
,
1577 ProcessPriorityClass
,
1578 ProcessWx86Information
,
1580 ProcessAffinityMask
,
1581 ProcessPriorityBoost
,
1583 ProcessSessionInformation
,
1584 ProcessForegroundInformation
,
1585 ProcessWow64Information
,
1586 ProcessImageFileName
,
1587 ProcessLUIDDeviceMapsEnabled
,
1588 ProcessBreakOnTermination
,
1589 ProcessDebugObjectHandle
,
1591 ProcessHandleTracing
,
1593 ProcessExecuteFlags
,
1594 ProcessTlsInformation
,
1596 ProcessImageInformation
,
1598 ProcessPagePriority
,
1599 ProcessInstrumentationCallback
,
1600 ProcessThreadStackAllocation
,
1601 ProcessWorkingSetWatchEx
,
1602 ProcessImageFileNameWin32
,
1603 ProcessImageFileMapping
,
1604 ProcessAffinityUpdateMode
,
1605 ProcessMemoryAllocationMode
,
1606 ProcessGroupInformation
,
1607 ProcessTokenVirtualizationEnabled
,
1608 ProcessConsoleHostProcess
,
1609 ProcessWindowInformation
,
1613 typedef enum _THREADINFOCLASS
{
1614 ThreadBasicInformation
,
1619 ThreadImpersonationToken
,
1620 ThreadDescriptorTableEntry
,
1621 ThreadEnableAlignmentFaultFixup
,
1622 ThreadEventPair_Reusable
,
1623 ThreadQuerySetWin32StartAddress
,
1625 ThreadPerformanceCount
,
1626 ThreadAmILastThread
,
1627 ThreadIdealProcessor
,
1628 ThreadPriorityBoost
,
1629 ThreadSetTlsArrayAddress
,
1631 ThreadHideFromDebugger
,
1632 ThreadBreakOnTermination
,
1633 ThreadSwitchLegacyState
,
1635 ThreadLastSystemCall
,
1639 ThreadActualBasePriority
,
1640 ThreadTebInformation
,
1644 ThreadGroupInformation
,
1645 ThreadUmsInformation
,
1646 ThreadCounterProfiling
,
1647 ThreadIdealProcessorEx
,
1651 typedef struct _PAGE_PRIORITY_INFORMATION
{
1653 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
1655 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1658 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1660 typedef struct _PROCESS_BASIC_INFORMATION
{
1661 NTSTATUS ExitStatus
;
1662 struct _PEB
*PebBaseAddress
;
1663 ULONG_PTR AffinityMask
;
1664 KPRIORITY BasePriority
;
1665 ULONG_PTR UniqueProcessId
;
1666 ULONG_PTR InheritedFromUniqueProcessId
;
1667 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1669 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
1671 PROCESS_BASIC_INFORMATION BasicInfo
;
1675 ULONG IsProtectedProcess
:1;
1676 ULONG IsWow64Process
:1;
1677 ULONG IsProcessDeleting
:1;
1678 ULONG IsCrossSessionCreate
:1;
1682 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
1684 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1685 __GNU_EXTENSION
union {
1687 HANDLE DirectoryHandle
;
1691 UCHAR DriveType
[32];
1694 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1696 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
1699 HANDLE DirectoryHandle
;
1703 UCHAR DriveType
[32];
1707 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
1709 typedef struct _PROCESS_SESSION_INFORMATION
{
1711 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1713 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
1715 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
1717 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
1720 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
1722 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
1726 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
1727 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
1729 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
1732 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
1733 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
1735 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
1736 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
1737 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
1738 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
1739 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
1741 typedef struct _QUOTA_LIMITS
{
1742 SIZE_T PagedPoolLimit
;
1743 SIZE_T NonPagedPoolLimit
;
1744 SIZE_T MinimumWorkingSetSize
;
1745 SIZE_T MaximumWorkingSetSize
;
1746 SIZE_T PagefileLimit
;
1747 LARGE_INTEGER TimeLimit
;
1748 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
1750 typedef union _RATE_QUOTA_LIMIT
{
1753 ULONG RatePercent
:7;
1756 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
1758 typedef struct _QUOTA_LIMITS_EX
{
1759 SIZE_T PagedPoolLimit
;
1760 SIZE_T NonPagedPoolLimit
;
1761 SIZE_T MinimumWorkingSetSize
;
1762 SIZE_T MaximumWorkingSetSize
;
1763 SIZE_T PagefileLimit
;
1764 LARGE_INTEGER TimeLimit
;
1765 SIZE_T WorkingSetLimit
;
1770 RATE_QUOTA_LIMIT CpuRateLimit
;
1771 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
1773 typedef struct _IO_COUNTERS
{
1774 ULONGLONG ReadOperationCount
;
1775 ULONGLONG WriteOperationCount
;
1776 ULONGLONG OtherOperationCount
;
1777 ULONGLONG ReadTransferCount
;
1778 ULONGLONG WriteTransferCount
;
1779 ULONGLONG OtherTransferCount
;
1780 } IO_COUNTERS
, *PIO_COUNTERS
;
1782 typedef struct _VM_COUNTERS
{
1783 SIZE_T PeakVirtualSize
;
1785 ULONG PageFaultCount
;
1786 SIZE_T PeakWorkingSetSize
;
1787 SIZE_T WorkingSetSize
;
1788 SIZE_T QuotaPeakPagedPoolUsage
;
1789 SIZE_T QuotaPagedPoolUsage
;
1790 SIZE_T QuotaPeakNonPagedPoolUsage
;
1791 SIZE_T QuotaNonPagedPoolUsage
;
1792 SIZE_T PagefileUsage
;
1793 SIZE_T PeakPagefileUsage
;
1794 } VM_COUNTERS
, *PVM_COUNTERS
;
1796 typedef struct _VM_COUNTERS_EX
{
1797 SIZE_T PeakVirtualSize
;
1799 ULONG PageFaultCount
;
1800 SIZE_T PeakWorkingSetSize
;
1801 SIZE_T WorkingSetSize
;
1802 SIZE_T QuotaPeakPagedPoolUsage
;
1803 SIZE_T QuotaPagedPoolUsage
;
1804 SIZE_T QuotaPeakNonPagedPoolUsage
;
1805 SIZE_T QuotaNonPagedPoolUsage
;
1806 SIZE_T PagefileUsage
;
1807 SIZE_T PeakPagefileUsage
;
1808 SIZE_T PrivateUsage
;
1809 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1811 #define MAX_HW_COUNTERS 16
1812 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
1814 typedef enum _HARDWARE_COUNTER_TYPE
{
1816 MaxHardwareCounterType
1817 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
1819 typedef struct _HARDWARE_COUNTER
{
1820 HARDWARE_COUNTER_TYPE Type
;
1823 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
1825 typedef struct _POOLED_USAGE_AND_LIMITS
{
1826 SIZE_T PeakPagedPoolUsage
;
1827 SIZE_T PagedPoolUsage
;
1828 SIZE_T PagedPoolLimit
;
1829 SIZE_T PeakNonPagedPoolUsage
;
1830 SIZE_T NonPagedPoolUsage
;
1831 SIZE_T NonPagedPoolLimit
;
1832 SIZE_T PeakPagefileUsage
;
1833 SIZE_T PagefileUsage
;
1834 SIZE_T PagefileLimit
;
1835 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1837 typedef struct _PROCESS_ACCESS_TOKEN
{
1840 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1842 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
1843 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
1845 typedef struct _PROCESS_EXCEPTION_PORT
{
1846 IN HANDLE ExceptionPortHandle
;
1847 IN OUT ULONG StateFlags
;
1848 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
1850 typedef struct _KERNEL_USER_TIMES
{
1851 LARGE_INTEGER CreateTime
;
1852 LARGE_INTEGER ExitTime
;
1853 LARGE_INTEGER KernelTime
;
1854 LARGE_INTEGER UserTime
;
1855 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1857 /* NtXxx Functions */
1863 OUT PHANDLE ProcessHandle
,
1864 IN ACCESS_MASK DesiredAccess
,
1865 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1866 IN PCLIENT_ID ClientId OPTIONAL
);
1871 NtQueryInformationProcess(
1872 IN HANDLE ProcessHandle
,
1873 IN PROCESSINFOCLASS ProcessInformationClass
,
1874 OUT PVOID ProcessInformation OPTIONAL
,
1875 IN ULONG ProcessInformationLength
,
1876 OUT PULONG ReturnLength OPTIONAL
);
1878 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
1879 SystemFirmwareTable_Enumerate
,
1880 SystemFirmwareTable_Get
1881 } SYSTEM_FIRMWARE_TABLE_ACTION
;
1883 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
1884 ULONG ProviderSignature
;
1885 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
1887 ULONG TableBufferLength
;
1888 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
1889 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
1893 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
1895 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
1896 ULONG ProviderSignature
;
1898 PFNFTH FirmwareTableHandler
;
1900 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
1903 (NTAPI
*PTIMER_APC_ROUTINE
)(
1904 IN PVOID TimerContext
,
1905 IN ULONG TimerLowValue
,
1906 IN LONG TimerHighValue
);
1908 typedef enum _TIMER_SET_INFORMATION_CLASS
{
1909 TimerSetCoalescableTimer
,
1911 } TIMER_SET_INFORMATION_CLASS
;
1913 #if (NTDDI_VERSION >= NTDDI_WIN7)
1914 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
1915 IN LARGE_INTEGER DueTime
;
1916 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
;
1917 IN PVOID TimerContext OPTIONAL
;
1918 IN
struct _COUNTED_REASON_CONTEXT
*WakeContext OPTIONAL
;
1919 IN ULONG Period OPTIONAL
;
1920 IN ULONG TolerableDelay
;
1921 OUT PBOOLEAN PreviousState OPTIONAL
;
1922 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
1923 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1926 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1929 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1930 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1931 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1932 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1934 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1935 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1936 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1937 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1938 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1940 #define XSTATE_LEGACY_FLOATING_POINT 0
1941 #define XSTATE_LEGACY_SSE 1
1942 #define XSTATE_GSSE 2
1944 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
1945 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
1946 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1947 #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
1949 #define MAXIMUM_XSTATE_FEATURES 64
1951 typedef struct _XSTATE_FEATURE
{
1954 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1956 typedef struct _XSTATE_CONFIGURATION
{
1957 ULONG64 EnabledFeatures
;
1959 ULONG OptimizedSave
:1;
1960 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1961 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1963 #define MAX_WOW64_SHARED_ENTRIES 16
1965 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
1966 #define NX_SUPPORT_POLICY_ALWAYSON 1
1967 #define NX_SUPPORT_POLICY_OPTIN 2
1968 #define NX_SUPPORT_POLICY_OPTOUT 3
1970 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
1971 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
1973 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
1974 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
1976 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
1977 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
1979 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
1980 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
1981 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
1983 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
1984 #define SHARED_GLOBAL_FLAGS_SPARE \
1985 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
1987 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
1988 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
1989 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
1991 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
1992 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
1993 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
1995 #define EX_INIT_BITS(Flags, Bit) \
1996 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
1998 #define EX_TEST_SET_BIT(Flags, Bit) \
1999 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
2001 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
2002 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
2004 typedef struct _KUSER_SHARED_DATA
{
2005 ULONG TickCountLowDeprecated
;
2006 ULONG TickCountMultiplier
;
2007 volatile KSYSTEM_TIME InterruptTime
;
2008 volatile KSYSTEM_TIME SystemTime
;
2009 volatile KSYSTEM_TIME TimeZoneBias
;
2010 USHORT ImageNumberLow
;
2011 USHORT ImageNumberHigh
;
2012 WCHAR NtSystemRoot
[260];
2013 ULONG MaxStackTraceDepth
;
2014 ULONG CryptoExponent
;
2016 ULONG LargePageMinimum
;
2018 NT_PRODUCT_TYPE NtProductType
;
2019 BOOLEAN ProductTypeIsValid
;
2020 ULONG NtMajorVersion
;
2021 ULONG NtMinorVersion
;
2022 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
2025 volatile ULONG TimeSlip
;
2026 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
2027 ULONG AltArchitecturePad
[1];
2028 LARGE_INTEGER SystemExpirationDate
;
2030 BOOLEAN KdDebuggerEnabled
;
2031 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2032 UCHAR NXSupportPolicy
;
2034 volatile ULONG ActiveConsoleId
;
2035 volatile ULONG DismountCount
;
2036 ULONG ComPlusPackage
;
2037 ULONG LastSystemRITEventTickCount
;
2038 ULONG NumberOfPhysicalPages
;
2039 BOOLEAN SafeBootMode
;
2040 #if (NTDDI_VERSION >= NTDDI_WIN7)
2044 UCHAR TscQpcEnabled
:1;
2045 UCHAR TscQpcSpareFlag
:1;
2046 UCHAR TscQpcShift
:6;
2051 #if (NTDDI_VERSION >= NTDDI_VISTA)
2053 ULONG SharedDataFlags
;
2055 ULONG DbgErrorPortPresent
:1;
2056 ULONG DbgElevationEnabled
:1;
2057 ULONG DbgVirtEnabled
:1;
2058 ULONG DbgInstallerDetectEnabled
:1;
2059 ULONG DbgSystemDllRelocated
:1;
2060 ULONG DbgDynProcessorEnabled
:1;
2061 ULONG DbgSEHValidationEnabled
:1;
2068 ULONG DataFlagsPad
[1];
2069 ULONGLONG TestRetInstruction
;
2071 ULONG SystemCallReturn
;
2072 ULONGLONG SystemCallPad
[3];
2073 _ANONYMOUS_UNION
union {
2074 volatile KSYSTEM_TIME TickCount
;
2075 volatile ULONG64 TickCountQuad
;
2076 _ANONYMOUS_STRUCT
struct {
2077 ULONG ReservedTickCountOverlay
[3];
2078 ULONG TickCountPad
[1];
2083 #if (NTDDI_VERSION >= NTDDI_WS03)
2084 LONGLONG ConsoleSessionForegroundProcessId
;
2085 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
2087 #if (NTDDI_VERSION >= NTDDI_VISTA)
2088 #if (NTDDI_VERSION >= NTDDI_WIN7)
2089 USHORT UserModeGlobalLogger
[16];
2091 USHORT UserModeGlobalLogger
[8];
2092 ULONG HeapTracingPid
[2];
2093 ULONG CritSecTracingPid
[2];
2095 ULONG ImageFileExecutionOptions
;
2096 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
2097 ULONG LangGenerationCount
;
2099 /* 4 bytes padding */
2101 ULONGLONG Reserved5
;
2102 volatile ULONG64 InterruptTimeBias
;
2104 #if (NTDDI_VERSION >= NTDDI_WIN7)
2105 volatile ULONG64 TscQpcBias
;
2106 volatile ULONG ActiveProcessorCount
;
2107 volatile USHORT ActiveGroupCount
;
2109 volatile ULONG AitSamplingValue
;
2110 volatile ULONG AppCompatFlag
;
2111 ULONGLONG SystemDllNativeRelocation
;
2112 ULONG SystemDllWowRelocation
;
2114 XSTATE_CONFIGURATION XState
;
2116 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
2118 #define CmResourceTypeMaximum 8
2120 typedef struct _CM_PCCARD_DEVICE_DATA
{
2126 ULONG LegacyBaseAddress
;
2128 } CM_PCCARD_DEVICE_DATA
, *PCM_PCCARD_DEVICE_DATA
;
2130 #define PCCARD_MAP_ERROR 0x01
2131 #define PCCARD_DEVICE_PCI 0x10
2133 #define PCCARD_SCAN_DISABLED 0x01
2134 #define PCCARD_MAP_ZERO 0x02
2135 #define PCCARD_NO_TIMER 0x03
2136 #define PCCARD_NO_PIC 0x04
2137 #define PCCARD_NO_LEGACY_BASE 0x05
2138 #define PCCARD_DUP_LEGACY_BASE 0x06
2139 #define PCCARD_NO_CONTROLLERS 0x07
2143 typedef enum _CONFIGURATION_TYPE
{
2146 FloatingPointProcessor
,
2156 MultiFunctionAdapter
,
2170 FloppyDiskPeripheral
,
2183 RealModeIrqRoutingTable
,
2184 RealModePCIEnumeration
,
2186 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
2187 #endif /* !_ARC_DDK_ */
2189 #if (NTDDI_VERSION < NTDDI_WIN7) || defined(_X86_) || !defined(NT_PROCESSOR_GROUPS)
2190 #define SINGLE_GROUP_LEGACY_API 1
2193 #if defined(_X86_) || defined(_AMD64_)
2194 #define PAUSE_PROCESSOR YieldProcessor();
2195 #elif defined(_IA64_)
2196 #define PAUSE_PROCESSOR __yield();
2199 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
2202 (NTAPI
*PEXPAND_STACK_CALLOUT
) (
2203 IN PVOID Parameter OPTIONAL
);
2205 /* Kernel Functions */
2207 #if (NTDDI_VERSION >= NTDDI_WIN2K) && defined(SINGLE_GROUP_LEGACY_API)
2212 KeSetTargetProcessorDpc(
2219 KeQueryActiveProcessors(VOID
);
2223 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2230 IN KDPC_IMPORTANCE Importance
);
2236 IN OUT PRKEVENT Event
,
2237 IN KPRIORITY Increment
,
2243 KeSetBasePriorityThread(
2244 IN OUT PRKTHREAD Thread
,
2250 KeEnterCriticalRegion(VOID
);
2255 KeLeaveCriticalRegion(VOID
);
2262 IN ULONG BugCheckCode
);
2264 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2266 #if (NTDDI_VERSION >= NTDDI_WINXP)
2270 KeAreApcsDisabled(VOID
);
2273 #if (NTDDI_VERSION >= NTDDI_WS03)
2277 KeInvalidateAllCaches(VOID
);
2280 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
2285 KeExpandKernelStackAndCallout(
2286 IN PEXPAND_STACK_CALLOUT Callout
,
2287 IN PVOID Parameter OPTIONAL
,
2293 KeEnterGuardedRegion(VOID
);
2298 KeLeaveGuardedRegion(VOID
);
2302 #if (NTDDI_VERSION >= NTDDI_VISTA) && defined(SINGLE_GROUP_LEGACY_API)
2307 KeQueryActiveProcessorCount(
2308 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
2313 KeQueryMaximumProcessorCount(VOID
);
2317 #if (NTDDI_VERSION >= NTDDI_WIN7)
2322 KeQueryActiveProcessorCountEx(
2323 IN USHORT GroupNumber
);
2328 KeQueryMaximumProcessorCountEx(
2329 IN USHORT GroupNumber
);
2334 KeQueryActiveGroupCount(VOID
);
2339 KeQueryMaximumGroupCount(VOID
);
2344 KeQueryGroupAffinity(
2345 IN USHORT GroupNumber
);
2350 KeGetCurrentProcessorNumberEx(
2351 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
2356 KeQueryNodeActiveAffinity(
2357 IN USHORT NodeNumber
,
2358 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
2359 OUT PUSHORT Count OPTIONAL
);
2364 KeQueryNodeMaximumProcessorCount(
2365 IN USHORT NodeNumber
);
2370 KeQueryHighestNodeNumber(VOID
);
2375 KeGetCurrentNodeNumber(VOID
);
2380 KeQueryLogicalProcessorRelationship(
2381 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
2382 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
2383 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
2384 IN OUT PULONG Length
);
2389 KeSetHardwareCounterConfiguration(
2390 IN PHARDWARE_COUNTER CounterArray
,
2396 KeQueryHardwareCounterConfiguration(
2397 OUT PHARDWARE_COUNTER CounterArray
,
2398 IN ULONG MaximumCount
,
2401 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2406 KeInvalidateRangeAllCaches(
2407 IN PVOID BaseAddress
,
2412 /* Executive Types */
2414 typedef struct _ZONE_SEGMENT_HEADER
{
2415 SINGLE_LIST_ENTRY SegmentList
;
2417 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2419 typedef struct _ZONE_HEADER
{
2420 SINGLE_LIST_ENTRY FreeList
;
2421 SINGLE_LIST_ENTRY SegmentList
;
2423 ULONG TotalSegmentSize
;
2424 } ZONE_HEADER
, *PZONE_HEADER
;
2426 #if defined(POOL_TAGGING)
2427 #define ExFreePool(a) ExFreePoolWithTag(a,0)
2430 #define PROTECTED_POOL 0x80000000
2432 /* Executive Functions */
2434 static __inline PVOID
2436 IN PZONE_HEADER Zone
)
2438 if (Zone
->FreeList
.Next
)
2439 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2440 return (PVOID
) Zone
->FreeList
.Next
;
2443 static __inline PVOID
2445 IN PZONE_HEADER Zone
,
2448 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2449 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2450 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2455 * ExInterlockedAllocateFromZone(
2456 * IN PZONE_HEADER Zone,
2457 * IN PKSPIN_LOCK Lock)
2459 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2460 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2463 * ExInterlockedFreeToZone(
2464 * IN PZONE_HEADER Zone,
2466 * IN PKSPIN_LOCK Lock);
2468 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2469 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2474 * IN PZONE_HEADER Zone)
2476 #define ExIsFullZone(Zone) \
2477 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2480 * ExIsObjectInFirstZoneSegment(
2481 * IN PZONE_HEADER Zone,
2484 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2485 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2486 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2487 (Zone)->TotalSegmentSize)) )
2489 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2490 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2491 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2492 #define ExDeleteResource ExDeleteResourceLite
2493 #define ExInitializeResource ExInitializeResourceLite
2494 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2495 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2496 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2497 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2499 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2505 IN OUT PZONE_HEADER Zone
,
2506 IN OUT PVOID Segment
,
2507 IN ULONG SegmentSize
);
2513 OUT PZONE_HEADER Zone
,
2515 IN OUT PVOID InitialSegment
,
2516 IN ULONG InitialSegmentSize
);
2521 ExInterlockedExtendZone(
2522 IN OUT PZONE_HEADER Zone
,
2523 IN OUT PVOID Segment
,
2524 IN ULONG SegmentSize
,
2525 IN OUT PKSPIN_LOCK Lock
);
2537 ExRaiseAccessViolation(VOID
);
2543 ExRaiseDatatypeMisalignment(VOID
);
2545 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2547 /* Memory Manager Types */
2549 typedef struct _PHYSICAL_MEMORY_RANGE
{
2550 PHYSICAL_ADDRESS BaseAddress
;
2551 LARGE_INTEGER NumberOfBytes
;
2552 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2555 (*PMM_ROTATE_COPY_CALLBACK_FUNCTION
) (
2556 IN PMDL DestinationMdl
,
2560 typedef enum _MM_ROTATE_DIRECTION
{
2562 MmToFrameBufferNoCopy
,
2564 MmToRegularMemoryNoCopy
,
2565 MmMaximumRotateDirection
2566 } MM_ROTATE_DIRECTION
, *PMM_ROTATE_DIRECTION
;
2568 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2569 typedef ULONG NODE_REQUIREMENT
;
2570 #define MM_ANY_NODE_OK 0x80000000
2573 /* Memory Manager Functions */
2575 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2578 PPHYSICAL_MEMORY_RANGE
2580 MmGetPhysicalMemoryRanges(VOID
);
2585 MmGetPhysicalAddress(
2586 IN PVOID BaseAddress
);
2591 MmIsNonPagedSystemAddressValid(
2592 IN PVOID VirtualAddress
);
2597 MmAllocateNonCachedMemory(
2598 IN SIZE_T NumberOfBytes
);
2603 MmFreeNonCachedMemory(
2604 IN PVOID BaseAddress
,
2605 IN SIZE_T NumberOfBytes
);
2610 MmGetVirtualForPhysical(
2611 IN PHYSICAL_ADDRESS PhysicalAddress
);
2616 MmMapUserAddressesToPage(
2617 IN PVOID BaseAddress
,
2618 IN SIZE_T NumberOfBytes
,
2619 IN PVOID PageAddress
);
2625 IN PHYSICAL_ADDRESS PhysicalAddress
,
2626 IN SIZE_T NumberOfBytes
,
2627 IN MEMORY_CACHING_TYPE CacheType
);
2632 MmMapViewInSessionSpace(
2634 OUT PVOID
*MappedBase
,
2635 IN OUT PSIZE_T ViewSize
);
2640 MmMapViewInSystemSpace(
2642 OUT PVOID
*MappedBase
,
2643 IN OUT PSIZE_T ViewSize
);
2649 IN PVOID VirtualAddress
);
2654 MmIsThisAnNtAsSystem(VOID
);
2659 MmLockPagableSectionByHandle(
2660 IN PVOID ImageSectionHandle
);
2665 MmUnmapViewInSessionSpace(
2666 IN PVOID MappedBase
);
2671 MmUnmapViewInSystemSpace(
2672 IN PVOID MappedBase
);
2677 MmUnsecureVirtualMemory(
2678 IN HANDLE SecureHandle
);
2683 MmRemovePhysicalMemory(
2684 IN PPHYSICAL_ADDRESS StartAddress
,
2685 IN OUT PLARGE_INTEGER NumberOfBytes
);
2690 MmSecureVirtualMemory(
2693 IN ULONG ProbeMode
);
2698 MmUnmapVideoDisplay(
2699 IN PVOID BaseAddress
,
2700 IN SIZE_T NumberOfBytes
);
2705 MmAddPhysicalMemory(
2706 IN PPHYSICAL_ADDRESS StartAddress
,
2707 IN OUT PLARGE_INTEGER NumberOfBytes
);
2712 MmAllocateContiguousMemory(
2713 IN SIZE_T NumberOfBytes
,
2714 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
2719 MmAllocateContiguousMemorySpecifyCache(
2720 IN SIZE_T NumberOfBytes
,
2721 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
2722 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
2723 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
2724 IN MEMORY_CACHING_TYPE CacheType
);
2729 MmAllocateContiguousMemorySpecifyCacheNode(
2730 IN SIZE_T NumberOfBytes
,
2731 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
2732 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
2733 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
2734 IN MEMORY_CACHING_TYPE CacheType
,
2735 IN NODE_REQUIREMENT PreferredNode
);
2740 MmFreeContiguousMemory(
2741 IN PVOID BaseAddress
);
2746 MmFreeContiguousMemorySpecifyCache(
2747 IN PVOID BaseAddress
,
2748 IN SIZE_T NumberOfBytes
,
2749 IN MEMORY_CACHING_TYPE CacheType
);
2751 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2753 #if (NTDDI_VERSION >= NTDDI_WS03)
2757 MmCreateMirror(VOID
);
2760 #if (NTDDI_VERSION >= NTDDI_VISTA)
2763 MmRotatePhysicalView(
2764 IN PVOID VirtualAddress
,
2765 IN OUT PSIZE_T NumberOfBytes
,
2766 IN PMDLX NewMdl OPTIONAL
,
2767 IN MM_ROTATE_DIRECTION Direction
,
2768 IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
,
2769 IN PVOID Context OPTIONAL
);
2772 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2776 SeSinglePrivilegeCheck(
2777 IN LUID PrivilegeValue
,
2778 IN KPROCESSOR_MODE PreviousMode
);
2781 struct _LOADER_PARAMETER_BLOCK
;
2782 struct _CREATE_DISK
;
2783 struct _DRIVE_LAYOUT_INFORMATION_EX
;
2784 struct _SET_PARTITION_INFORMATION_EX
;
2789 #ifndef GUID_DEFINED
2790 #include <guiddef.h>
2794 ** IRP function codes
2797 #define IRP_MN_QUERY_DIRECTORY 0x01
2798 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
2800 #define IRP_MN_USER_FS_REQUEST 0x00
2801 #define IRP_MN_MOUNT_VOLUME 0x01
2802 #define IRP_MN_VERIFY_VOLUME 0x02
2803 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
2804 #define IRP_MN_TRACK_LINK 0x04
2805 #define IRP_MN_KERNEL_CALL 0x04
2807 #define IRP_MN_LOCK 0x01
2808 #define IRP_MN_UNLOCK_SINGLE 0x02
2809 #define IRP_MN_UNLOCK_ALL 0x03
2810 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
2812 #define IRP_MN_FLUSH_AND_PURGE 0x01
2814 #define IRP_MN_NORMAL 0x00
2815 #define IRP_MN_DPC 0x01
2816 #define IRP_MN_MDL 0x02
2817 #define IRP_MN_COMPLETE 0x04
2818 #define IRP_MN_COMPRESSED 0x08
2820 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
2821 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
2822 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
2824 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
2826 /* DEVICE_OBJECT.Flags */
2828 #define DO_DEVICE_HAS_NAME 0x00000040
2829 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
2830 #define DO_LONG_TERM_REQUESTS 0x00000200
2831 #define DO_NEVER_LAST_DEVICE 0x00000400
2832 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
2833 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
2834 #define DO_FORCE_NEITHER_IO 0x00080000
2835 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
2836 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
2837 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
2838 #define DO_DISALLOW_EXECUTE 0x00800000
2840 #define DRVO_REINIT_REGISTERED 0x00000008
2841 #define DRVO_INITIALIZED 0x00000010
2842 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
2843 #define DRVO_LEGACY_RESOURCES 0x00000040
2845 typedef enum _ARBITER_REQUEST_SOURCE
{
2846 ArbiterRequestUndefined
= -1,
2847 ArbiterRequestLegacyReported
,
2848 ArbiterRequestHalReported
,
2849 ArbiterRequestLegacyAssigned
,
2850 ArbiterRequestPnpDetected
,
2851 ArbiterRequestPnpEnumerated
2852 } ARBITER_REQUEST_SOURCE
;
2854 typedef enum _ARBITER_RESULT
{
2855 ArbiterResultUndefined
= -1,
2856 ArbiterResultSuccess
,
2857 ArbiterResultExternalConflict
,
2858 ArbiterResultNullRequest
2861 typedef enum _ARBITER_ACTION
{
2862 ArbiterActionTestAllocation
,
2863 ArbiterActionRetestAllocation
,
2864 ArbiterActionCommitAllocation
,
2865 ArbiterActionRollbackAllocation
,
2866 ArbiterActionQueryAllocatedResources
,
2867 ArbiterActionWriteReservedResources
,
2868 ArbiterActionQueryConflict
,
2869 ArbiterActionQueryArbitrate
,
2870 ArbiterActionAddReserved
,
2871 ArbiterActionBootAllocation
2872 } ARBITER_ACTION
, *PARBITER_ACTION
;
2874 typedef struct _ARBITER_CONFLICT_INFO
{
2875 PDEVICE_OBJECT OwningObject
;
2878 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
2880 typedef struct _ARBITER_PARAMETERS
{
2883 IN OUT PLIST_ENTRY ArbitrationList
;
2884 IN ULONG AllocateFromCount
;
2885 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2888 IN OUT PLIST_ENTRY ArbitrationList
;
2889 IN ULONG AllocateFromCount
;
2890 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
2893 IN OUT PLIST_ENTRY ArbitrationList
;
2896 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
2897 } QueryAllocatedResources
;
2899 IN PDEVICE_OBJECT PhysicalDeviceObject
;
2900 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
2901 OUT PULONG ConflictCount
;
2902 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
2905 IN PLIST_ENTRY ArbitrationList
;
2908 IN PDEVICE_OBJECT ReserveDevice
;
2911 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
2913 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
2915 typedef struct _ARBITER_LIST_ENTRY
{
2916 LIST_ENTRY ListEntry
;
2917 ULONG AlternativeCount
;
2918 PIO_RESOURCE_DESCRIPTOR Alternatives
;
2919 PDEVICE_OBJECT PhysicalDeviceObject
;
2920 ARBITER_REQUEST_SOURCE RequestSource
;
2923 INTERFACE_TYPE InterfaceType
;
2926 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
2927 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
2928 ARBITER_RESULT Result
;
2929 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
2932 (NTAPI
*PARBITER_HANDLER
)(
2933 IN OUT PVOID Context
,
2934 IN ARBITER_ACTION Action
,
2935 IN OUT PARBITER_PARAMETERS Parameters
);
2937 #define ARBITER_PARTIAL 0x00000001
2939 typedef struct _ARBITER_INTERFACE
{
2943 PINTERFACE_REFERENCE InterfaceReference
;
2944 PINTERFACE_DEREFERENCE InterfaceDereference
;
2945 PARBITER_HANDLER ArbiterHandler
;
2947 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
2949 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
2950 HalInstalledBusInformation
,
2951 HalProfileSourceInformation
,
2952 HalInformationClassUnused1
,
2953 HalPowerInformation
,
2954 HalProcessorSpeedInformation
,
2955 HalCallbackInformation
,
2956 HalMapRegisterInformation
,
2957 HalMcaLogInformation
,
2958 HalFrameBufferCachingInformation
,
2959 HalDisplayBiosInformation
,
2960 HalProcessorFeatureInformation
,
2961 HalNumaTopologyInterface
,
2962 HalErrorInformation
,
2963 HalCmcLogInformation
,
2964 HalCpeLogInformation
,
2965 HalQueryMcaInterface
,
2966 HalQueryAMLIIllegalIOPortAddresses
,
2967 HalQueryMaxHotPlugMemoryAddress
,
2968 HalPartitionIpiInterface
,
2969 HalPlatformInformation
,
2970 HalQueryProfileSourceList
,
2971 HalInitLogInformation
,
2972 HalFrequencyInformation
,
2973 HalProcessorBrandString
,
2974 HalHypervisorInformation
,
2975 HalPlatformTimerInformation
,
2976 HalAcpiAuditInformation
2977 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
2979 typedef enum _HAL_SET_INFORMATION_CLASS
{
2980 HalProfileSourceInterval
,
2981 HalProfileSourceInterruptHandler
,
2982 HalMcaRegisterDriver
,
2983 HalKernelErrorHandler
,
2984 HalCmcRegisterDriver
,
2985 HalCpeRegisterDriver
,
2989 HalGenerateCmcInterrupt
,
2990 HalProfileSourceTimerHandler
,
2992 HalProfileDpgoSourceInterruptHandler
2993 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
2995 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
2996 KPROFILE_SOURCE Source
;
2998 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
3000 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
3001 KPROFILE_SOURCE Source
;
3004 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
3006 typedef struct _MAP_REGISTER_ENTRY
{
3008 BOOLEAN WriteToDevice
;
3009 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
3011 typedef struct _DEBUG_DEVICE_ADDRESS
{
3015 PUCHAR TranslatedAddress
;
3017 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
3019 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
3020 PHYSICAL_ADDRESS Start
;
3021 PHYSICAL_ADDRESS MaxEnd
;
3022 PVOID VirtualAddress
;
3026 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
3028 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
3037 BOOLEAN Initialized
;
3039 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
3040 DEBUG_MEMORY_REQUIREMENTS Memory
;
3041 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
3043 typedef struct _PM_DISPATCH_TABLE
{
3047 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
3049 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
3050 TranslateChildToParent
,
3051 TranslateParentToChild
3052 } RESOURCE_TRANSLATION_DIRECTION
;
3055 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
3056 IN OUT PVOID Context
,
3057 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
3058 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
3059 IN ULONG AlternativesCount OPTIONAL
,
3060 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
3061 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3062 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
3065 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
3066 IN PVOID Context OPTIONAL
,
3067 IN PIO_RESOURCE_DESCRIPTOR Source
,
3068 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3069 OUT PULONG TargetCount
,
3070 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
3072 typedef struct _TRANSLATOR_INTERFACE
{
3076 PINTERFACE_REFERENCE InterfaceReference
;
3077 PINTERFACE_DEREFERENCE InterfaceDereference
;
3078 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
3079 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
3080 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
3083 (FASTCALL
*pHalExamineMBR
)(
3084 IN PDEVICE_OBJECT DeviceObject
,
3085 IN ULONG SectorSize
,
3086 IN ULONG MBRTypeIdentifier
,
3090 (FASTCALL
*pHalIoReadPartitionTable
)(
3091 IN PDEVICE_OBJECT DeviceObject
,
3092 IN ULONG SectorSize
,
3093 IN BOOLEAN ReturnRecognizedPartitions
,
3094 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
3097 (FASTCALL
*pHalIoSetPartitionInformation
)(
3098 IN PDEVICE_OBJECT DeviceObject
,
3099 IN ULONG SectorSize
,
3100 IN ULONG PartitionNumber
,
3101 IN ULONG PartitionType
);
3104 (FASTCALL
*pHalIoWritePartitionTable
)(
3105 IN PDEVICE_OBJECT DeviceObject
,
3106 IN ULONG SectorSize
,
3107 IN ULONG SectorsPerTrack
,
3108 IN ULONG NumberOfHeads
,
3109 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
3111 typedef PBUS_HANDLER
3112 (FASTCALL
*pHalHandlerForBus
)(
3113 IN INTERFACE_TYPE InterfaceType
,
3114 IN ULONG BusNumber
);
3117 (FASTCALL
*pHalReferenceBusHandler
)(
3118 IN PBUS_HANDLER BusHandler
);
3121 (NTAPI
*pHalQuerySystemInformation
)(
3122 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
3123 IN ULONG BufferSize
,
3124 IN OUT PVOID Buffer
,
3125 OUT PULONG ReturnedLength
);
3128 (NTAPI
*pHalSetSystemInformation
)(
3129 IN HAL_SET_INFORMATION_CLASS InformationClass
,
3130 IN ULONG BufferSize
,
3134 (NTAPI
*pHalQueryBusSlots
)(
3135 IN PBUS_HANDLER BusHandler
,
3136 IN ULONG BufferSize
,
3137 OUT PULONG SlotNumbers
,
3138 OUT PULONG ReturnedLength
);
3141 (NTAPI
*pHalInitPnpDriver
)(
3145 (NTAPI
*pHalInitPowerManagement
)(
3146 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
3147 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
3149 typedef struct _DMA_ADAPTER
*
3150 (NTAPI
*pHalGetDmaAdapter
)(
3152 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
3153 OUT PULONG NumberOfMapRegisters
);
3156 (NTAPI
*pHalGetInterruptTranslator
)(
3157 IN INTERFACE_TYPE ParentInterfaceType
,
3158 IN ULONG ParentBusNumber
,
3159 IN INTERFACE_TYPE BridgeInterfaceType
,
3162 OUT PTRANSLATOR_INTERFACE Translator
,
3163 OUT PULONG BridgeBusNumber
);
3166 (NTAPI
*pHalStartMirroring
)(
3170 (NTAPI
*pHalEndMirroring
)(
3171 IN ULONG PassNumber
);
3174 (NTAPI
*pHalMirrorPhysicalMemory
)(
3175 IN PHYSICAL_ADDRESS PhysicalAddress
,
3176 IN LARGE_INTEGER NumberOfBytes
);
3179 (NTAPI
*pHalMirrorVerify
)(
3180 IN PHYSICAL_ADDRESS PhysicalAddress
,
3181 IN LARGE_INTEGER NumberOfBytes
);
3184 (NTAPI
*pHalEndOfBoot
)(
3189 (NTAPI
*pHalTranslateBusAddress
)(
3190 IN INTERFACE_TYPE InterfaceType
,
3192 IN PHYSICAL_ADDRESS BusAddress
,
3193 IN OUT PULONG AddressSpace
,
3194 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3198 (NTAPI
*pHalAssignSlotResources
)(
3199 IN PUNICODE_STRING RegistryPath
,
3200 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3201 IN PDRIVER_OBJECT DriverObject
,
3202 IN PDEVICE_OBJECT DeviceObject
,
3203 IN INTERFACE_TYPE BusType
,
3205 IN ULONG SlotNumber
,
3206 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3210 (NTAPI
*pHalHaltSystem
)(
3215 (NTAPI
*pHalResetDisplay
)(
3220 (NTAPI
*pHalVectorToIDTEntry
)(
3225 (NTAPI
*pHalFindBusAddressTranslation
)(
3226 IN PHYSICAL_ADDRESS BusAddress
,
3227 IN OUT PULONG AddressSpace
,
3228 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
3229 IN OUT PULONG_PTR Context
,
3230 IN BOOLEAN NextBus
);
3234 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
3235 IN PVOID LoaderBlock OPTIONAL
,
3236 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
3240 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
3241 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
3245 (NTAPI
*pKdGetAcpiTablePhase0
)(
3246 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
3247 IN ULONG Signature
);
3251 (NTAPI
*pHalGetAcpiTable
)(
3253 IN PCSTR OemId OPTIONAL
,
3254 IN PCSTR OemTableId OPTIONAL
);
3258 (NTAPI
*pKdCheckPowerButton
)(
3261 #if (NTDDI_VERSION >= NTDDI_VISTA)
3264 (NTAPI
*pKdMapPhysicalMemory64
)(
3265 IN PHYSICAL_ADDRESS PhysicalAddress
,
3266 IN ULONG NumberPages
,
3267 IN BOOLEAN FlushCurrentTLB
);
3271 (NTAPI
*pKdUnmapVirtualAddress
)(
3272 IN PVOID VirtualAddress
,
3273 IN ULONG NumberPages
,
3274 IN BOOLEAN FlushCurrentTLB
);
3278 (NTAPI
*pKdMapPhysicalMemory64
)(
3279 IN PHYSICAL_ADDRESS PhysicalAddress
,
3280 IN ULONG NumberPages
);
3284 (NTAPI
*pKdUnmapVirtualAddress
)(
3285 IN PVOID VirtualAddress
,
3286 IN ULONG NumberPages
);
3292 (NTAPI
*pKdGetPciDataByOffset
)(
3294 IN ULONG SlotNumber
,
3301 (NTAPI
*pKdSetPciDataByOffset
)(
3303 IN ULONG SlotNumber
,
3309 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
3315 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
3320 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
3321 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
3323 #if 1 /* Not present in WDK 7600 */
3325 (FASTCALL
*pHalIoAssignDriveLetters
)(
3326 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
3327 IN PSTRING NtDeviceName
,
3328 OUT PUCHAR NtSystemPath
,
3329 OUT PSTRING NtSystemPathString
);
3334 pHalQuerySystemInformation HalQuerySystemInformation
;
3335 pHalSetSystemInformation HalSetSystemInformation
;
3336 pHalQueryBusSlots HalQueryBusSlots
;
3338 pHalExamineMBR HalExamineMBR
;
3339 #if 1 /* Not present in WDK 7600 */
3340 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
3342 pHalIoReadPartitionTable HalIoReadPartitionTable
;
3343 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
3344 pHalIoWritePartitionTable HalIoWritePartitionTable
;
3345 pHalHandlerForBus HalReferenceHandlerForBus
;
3346 pHalReferenceBusHandler HalReferenceBusHandler
;
3347 pHalReferenceBusHandler HalDereferenceBusHandler
;
3348 pHalInitPnpDriver HalInitPnpDriver
;
3349 pHalInitPowerManagement HalInitPowerManagement
;
3350 pHalGetDmaAdapter HalGetDmaAdapter
;
3351 pHalGetInterruptTranslator HalGetInterruptTranslator
;
3352 pHalStartMirroring HalStartMirroring
;
3353 pHalEndMirroring HalEndMirroring
;
3354 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
3355 pHalEndOfBoot HalEndOfBoot
;
3356 pHalMirrorVerify HalMirrorVerify
;
3357 pHalGetAcpiTable HalGetCachedAcpiTable
;
3358 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
3360 pHalGetErrorCapList HalGetErrorCapList
;
3361 pHalInjectError HalInjectError
;
3363 } HAL_DISPATCH
, *PHAL_DISPATCH
;
3365 /* GCC/MSVC and WDK compatible declaration */
3366 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
3368 #if defined(_NTOSKRNL_) || defined(_BLDR_)
3369 #define HALDISPATCH (&HalDispatchTable)
3371 /* This is a WDK compatibility definition */
3372 #define HalDispatchTable (&HalDispatchTable)
3373 #define HALDISPATCH HalDispatchTable
3376 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
3377 #define HalDispatchTableVersion HALDISPATCH->Version
3378 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
3379 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
3380 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
3381 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
3382 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
3383 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
3384 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
3385 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
3386 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
3387 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
3388 #define HalStartMirroring HALDISPATCH->HalStartMirroring
3389 #define HalEndMirroring HALDISPATCH->HalEndMirroring
3390 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
3391 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
3392 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
3394 typedef struct _IMAGE_INFO
{
3395 _ANONYMOUS_UNION
union {
3397 _ANONYMOUS_STRUCT
struct {
3398 ULONG ImageAddressingMode
:8;
3399 ULONG SystemModeImage
:1;
3400 ULONG ImageMappedToAllPids
:1;
3401 ULONG ExtendedInfoPresent
:1;
3406 ULONG ImageSelector
;
3408 ULONG ImageSectionNumber
;
3409 } IMAGE_INFO
, *PIMAGE_INFO
;
3411 #define IMAGE_ADDRESSING_MODE_32BIT 3
3413 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
3414 IoQueryDeviceIdentifier
= 0,
3415 IoQueryDeviceConfigurationData
,
3416 IoQueryDeviceComponentInformation
,
3417 IoQueryDeviceMaxData
3418 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
3420 typedef struct _DISK_SIGNATURE
{
3421 ULONG PartitionStyle
;
3422 _ANONYMOUS_UNION
union {
3431 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
3433 extern NTKERNELAPI PVOID MmHighestUserAddress
;
3434 extern NTKERNELAPI PVOID MmSystemRangeStart
;
3435 extern NTKERNELAPI ULONG MmUserProbeAddress
;
3440 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3441 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3442 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
3443 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
3444 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
3446 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3448 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3449 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
3450 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
3451 #if !defined (_X86PAE_)
3452 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
3454 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
3457 #define KeGetPcr() PCR
3459 #define PCR_MINOR_VERSION 1
3460 #define PCR_MAJOR_VERSION 1
3462 typedef struct _KPCR
{
3466 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
3467 PVOID Used_StackBase
;
3470 ULONG ContextSwitches
;
3471 KAFFINITY SetMemberCopy
;
3475 struct _KPCR
*SelfPcr
;
3476 struct _KPRCB
*Prcb
;
3481 PVOID KdVersionBlock
;
3482 struct _KIDTENTRY
*IDT
;
3483 struct _KGDTENTRY
*GDT
;
3485 USHORT MajorVersion
;
3486 USHORT MinorVersion
;
3487 KAFFINITY SetMember
;
3488 ULONG StallScaleFactor
;
3492 UCHAR SecondLevelCacheAssociativity
;
3494 ULONG KernelReserved
[14];
3495 ULONG SecondLevelCacheSize
;
3496 ULONG HalReserved
[16];
3501 KeGetCurrentProcessorNumber(VOID
)
3503 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
3510 #define PTI_SHIFT 12L
3511 #define PDI_SHIFT 21L
3512 #define PPI_SHIFT 30L
3513 #define PXI_SHIFT 39L
3514 #define PTE_PER_PAGE 512
3515 #define PDE_PER_PAGE 512
3516 #define PPE_PER_PAGE 512
3517 #define PXE_PER_PAGE 512
3518 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
3519 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
3520 #define PPI_MASK (PPE_PER_PAGE - 1)
3521 #define PXI_MASK (PXE_PER_PAGE - 1)
3523 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
3524 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
3525 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
3526 #define PDE_BASE 0xFFFFF6FB40000000ULL
3527 #define PTE_BASE 0xFFFFF68000000000ULL
3528 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
3529 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
3530 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
3531 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
3533 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
3534 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
3535 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
3536 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
3537 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
3538 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
3540 typedef struct _KPCR
3542 _ANONYMOUS_UNION
union
3545 _ANONYMOUS_STRUCT
struct
3547 union _KGDTENTRY64
*GdtBase
;
3548 struct _KTSS64
*TssBase
;
3551 struct _KPRCB
*CurrentPrcb
;
3552 PKSPIN_LOCK_QUEUE LockArray
;
3556 union _KIDTENTRY64
*IdtBase
;
3559 UCHAR SecondLevelCacheAssociativity
;
3560 UCHAR ObsoleteNumber
;
3563 USHORT MajorVersion
;
3564 USHORT MinorVersion
;
3565 ULONG StallScaleFactor
;
3567 ULONG KernelReserved
[15];
3568 ULONG SecondLevelCacheSize
;
3569 ULONG HalReserved
[16];
3571 PVOID KdVersionBlock
;
3573 ULONG PcrAlign1
[24];
3580 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
3585 KeGetCurrentProcessorNumber(VOID
)
3587 return (ULONG
)__readgsword(0x184);
3590 #endif /* _AMD64_ */
3592 typedef enum _INTERLOCKED_RESULT
{
3593 ResultNegative
= RESULT_NEGATIVE
,
3594 ResultZero
= RESULT_ZERO
,
3595 ResultPositive
= RESULT_POSITIVE
3596 } INTERLOCKED_RESULT
;
3603 Exfi386InterlockedIncrementLong(
3604 IN OUT LONG
volatile *Addend
);
3609 Exfi386InterlockedDecrementLong(
3615 Exfi386InterlockedExchangeUlong(
3621 typedef struct _CONTROLLER_OBJECT
{
3624 PVOID ControllerExtension
;
3625 KDEVICE_QUEUE DeviceWaitQueue
;
3627 LARGE_INTEGER Spare2
;
3628 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
3630 typedef struct _CONFIGURATION_INFORMATION
{
3635 ULONG ScsiPortCount
;
3637 ULONG ParallelCount
;
3638 BOOLEAN AtDiskPrimaryAddressClaimed
;
3639 BOOLEAN AtDiskSecondaryAddressClaimed
;
3641 ULONG MediumChangerCount
;
3642 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
3646 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
3648 IN PUNICODE_STRING PathName
,
3649 IN INTERFACE_TYPE BusType
,
3651 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
3652 IN CONFIGURATION_TYPE ControllerType
,
3653 IN ULONG ControllerNumber
,
3654 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
3655 IN CONFIGURATION_TYPE PeripheralType
,
3656 IN ULONG PeripheralNumber
,
3657 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
3661 (NTAPI DRIVER_REINITIALIZE
)(
3662 IN
struct _DRIVER_OBJECT
*DriverObject
,
3666 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
3668 /** Filesystem runtime library routines **/
3670 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3674 FsRtlIsTotalDeviceFailure(
3675 IN NTSTATUS Status
);
3678 /* Hardware Abstraction Layer Types */
3681 (NTAPI
*PciPin2Line
)(
3682 IN
struct _BUS_HANDLER
*BusHandler
,
3683 IN
struct _BUS_HANDLER
*RootHandler
,
3684 IN PCI_SLOT_NUMBER SlotNumber
,
3685 IN PPCI_COMMON_CONFIG PciData
);
3688 (NTAPI
*PciLine2Pin
)(
3689 IN
struct _BUS_HANDLER
*BusHandler
,
3690 IN
struct _BUS_HANDLER
*RootHandler
,
3691 IN PCI_SLOT_NUMBER SlotNumber
,
3692 IN PPCI_COMMON_CONFIG PciNewData
,
3693 IN PPCI_COMMON_CONFIG PciOldData
);
3696 (NTAPI
*PciReadWriteConfig
)(
3697 IN
struct _BUS_HANDLER
*BusHandler
,
3698 IN PCI_SLOT_NUMBER Slot
,
3703 #define PCI_DATA_TAG ' ICP'
3704 #define PCI_DATA_VERSION 1
3706 typedef struct _PCIBUSDATA
{
3709 PciReadWriteConfig ReadConfig
;
3710 PciReadWriteConfig WriteConfig
;
3711 PciPin2Line Pin2Line
;
3712 PciLine2Pin Line2Pin
;
3713 PCI_SLOT_NUMBER ParentSlot
;
3715 } PCIBUSDATA
, *PPCIBUSDATA
;
3717 /* Hardware Abstraction Layer Functions */
3719 #if !defined(NO_LEGACY_DRIVERS)
3721 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3726 HalAssignSlotResources(
3727 IN PUNICODE_STRING RegistryPath
,
3728 IN PUNICODE_STRING DriverClassName
,
3729 IN PDRIVER_OBJECT DriverObject
,
3730 IN PDEVICE_OBJECT DeviceObject
,
3731 IN INTERFACE_TYPE BusType
,
3733 IN ULONG SlotNumber
,
3734 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3739 HalGetInterruptVector(
3740 IN INTERFACE_TYPE InterfaceType
,
3742 IN ULONG BusInterruptLevel
,
3743 IN ULONG BusInterruptVector
,
3745 OUT PKAFFINITY Affinity
);
3751 IN BUS_DATA_TYPE BusDataType
,
3753 IN ULONG SlotNumber
,
3759 #endif /* !defined(NO_LEGACY_DRIVERS) */
3761 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3767 IN PDEVICE_DESCRIPTION DeviceDescription
,
3768 IN OUT PULONG NumberOfMapRegisters
);
3774 IN ULONG Frequency
);
3779 IN PADAPTER_OBJECT DmaAdapter
);
3784 HalAcquireDisplayOwnership(
3785 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
3791 IN BUS_DATA_TYPE BusDataType
,
3793 IN ULONG SlotNumber
,
3800 HalGetBusDataByOffset(
3801 IN BUS_DATA_TYPE BusDataType
,
3803 IN ULONG SlotNumber
,
3811 HalSetBusDataByOffset(
3812 IN BUS_DATA_TYPE BusDataType
,
3814 IN ULONG SlotNumber
,
3822 HalTranslateBusAddress(
3823 IN INTERFACE_TYPE InterfaceType
,
3825 IN PHYSICAL_ADDRESS BusAddress
,
3826 IN OUT PULONG AddressSpace
,
3827 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3831 #if (NTDDI_VERSION >= NTDDI_WINXP)
3836 IN PDEVICE_OBJECT DeviceObject
,
3837 IN ULONG SectorSize
,
3838 IN ULONG MBRTypeIdentifier
,
3842 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
3846 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3847 //DECLSPEC_DEPRECATED_DDK
3851 IoFreeAdapterChannel(
3852 IN PADAPTER_OBJECT AdapterObject
);
3854 //DECLSPEC_DEPRECATED_DDK
3858 IoFlushAdapterBuffers(
3859 IN PADAPTER_OBJECT AdapterObject
,
3861 IN PVOID MapRegisterBase
,
3864 IN BOOLEAN WriteToDevice
);
3866 //DECLSPEC_DEPRECATED_DDK
3871 IN PADAPTER_OBJECT AdapterObject
,
3872 IN PVOID MapRegisterBase
,
3873 IN ULONG NumberOfMapRegisters
);
3875 //DECLSPEC_DEPRECATED_DDK
3879 HalAllocateCommonBuffer(
3880 IN PADAPTER_OBJECT AdapterObject
,
3882 OUT PPHYSICAL_ADDRESS LogicalAddress
,
3883 IN BOOLEAN CacheEnabled
);
3885 //DECLSPEC_DEPRECATED_DDK
3889 HalFreeCommonBuffer(
3890 IN PADAPTER_OBJECT AdapterObject
,
3892 IN PHYSICAL_ADDRESS LogicalAddress
,
3893 IN PVOID VirtualAddress
,
3894 IN BOOLEAN CacheEnabled
);
3896 //DECLSPEC_DEPRECATED_DDK
3901 IN PADAPTER_OBJECT AdapterObject
);
3906 HalAllocateAdapterChannel(
3907 IN PADAPTER_OBJECT AdapterObject
,
3908 IN PWAIT_CONTEXT_BLOCK Wcb
,
3909 IN ULONG NumberOfMapRegisters
,
3910 IN PDRIVER_CONTROL ExecutionRoutine
);
3912 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3914 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
3916 /* I/O Manager Functions */
3919 * VOID IoAssignArcName(
3920 * IN PUNICODE_STRING ArcName,
3921 * IN PUNICODE_STRING DeviceName);
3923 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3924 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3928 * IoDeassignArcName(
3929 * IN PUNICODE_STRING ArcName)
3931 #define IoDeassignArcName IoDeleteSymbolicLink
3933 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3935 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3939 IoAllocateAdapterChannel(
3940 IN PADAPTER_OBJECT AdapterObject
,
3941 IN PDEVICE_OBJECT DeviceObject
,
3942 IN ULONG NumberOfMapRegisters
,
3943 IN PDRIVER_CONTROL ExecutionRoutine
,
3947 //DECLSPEC_DEPRECATED_DDK
3952 IN PADAPTER_OBJECT AdapterObject
,
3954 IN PVOID MapRegisterBase
,
3956 IN OUT PULONG Length
,
3957 IN BOOLEAN WriteToDevice
);
3962 IoAllocateController(
3963 IN PCONTROLLER_OBJECT ControllerObject
,
3964 IN PDEVICE_OBJECT DeviceObject
,
3965 IN PDRIVER_CONTROL ExecutionRoutine
,
3966 IN PVOID Context OPTIONAL
);
3978 IN PCONTROLLER_OBJECT ControllerObject
);
3984 IN PCONTROLLER_OBJECT ControllerObject
);
3987 PCONFIGURATION_INFORMATION
3989 IoGetConfigurationInformation(
3995 IoGetDeviceToVerify(
3996 IN PETHREAD Thread
);
4002 IN PDEVICE_OBJECT DeviceObject
,
4003 IN PFILE_OBJECT FileObject
);
4008 IoGetFileObjectGenericMapping(
4014 IoMakeAssociatedIrp(
4016 IN CCHAR StackSize
);
4021 IoQueryDeviceDescription(
4022 IN PINTERFACE_TYPE BusType OPTIONAL
,
4023 IN PULONG BusNumber OPTIONAL
,
4024 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
4025 IN PULONG ControllerNumber OPTIONAL
,
4026 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
4027 IN PULONG PeripheralNumber OPTIONAL
,
4028 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
4029 IN OUT PVOID Context OPTIONAL
);
4036 IN PVPB Vpb OPTIONAL
,
4037 IN PDEVICE_OBJECT RealDeviceObject
);
4042 IoRaiseInformationalHardError(
4043 IN NTSTATUS ErrorStatus
,
4044 IN PUNICODE_STRING String OPTIONAL
,
4045 IN PKTHREAD Thread OPTIONAL
);
4050 IoRegisterBootDriverReinitialization(
4051 IN PDRIVER_OBJECT DriverObject
,
4052 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4053 IN PVOID Context OPTIONAL
);
4058 IoRegisterDriverReinitialization(
4059 IN PDRIVER_OBJECT DriverObject
,
4060 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
4061 IN PVOID Context OPTIONAL
);
4066 IoAttachDeviceByPointer(
4067 IN PDEVICE_OBJECT SourceDevice
,
4068 IN PDEVICE_OBJECT TargetDevice
);
4073 IoReportDetectedDevice(
4074 IN PDRIVER_OBJECT DriverObject
,
4075 IN INTERFACE_TYPE LegacyBusType
,
4077 IN ULONG SlotNumber
,
4078 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
4079 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
4080 IN BOOLEAN ResourceAssigned
,
4081 IN OUT PDEVICE_OBJECT
*DeviceObject
);
4086 IoReportResourceForDetection(
4087 IN PDRIVER_OBJECT DriverObject
,
4088 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
4089 IN ULONG DriverListSize OPTIONAL
,
4090 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
4091 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
4092 IN ULONG DeviceListSize OPTIONAL
,
4093 OUT PBOOLEAN ConflictDetected
);
4098 IoReportResourceUsage(
4099 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4100 IN PDRIVER_OBJECT DriverObject
,
4101 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
4102 IN ULONG DriverListSize OPTIONAL
,
4103 IN PDEVICE_OBJECT DeviceObject
,
4104 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
4105 IN ULONG DeviceListSize OPTIONAL
,
4106 IN BOOLEAN OverrideConflict
,
4107 OUT PBOOLEAN ConflictDetected
);
4112 IoSetHardErrorOrVerifyDevice(
4114 IN PDEVICE_OBJECT DeviceObject
);
4120 IN PUNICODE_STRING RegistryPath
,
4121 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4122 IN PDRIVER_OBJECT DriverObject
,
4123 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
4124 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
4125 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
4127 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4129 #if (NTDDI_VERSION >= NTDDI_WINXP)
4135 IN PDEVICE_OBJECT DeviceObject
,
4136 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
4141 IoReadDiskSignature(
4142 IN PDEVICE_OBJECT DeviceObject
,
4143 IN ULONG BytesPerSector
,
4144 OUT PDISK_SIGNATURE Signature
);
4149 IoReadPartitionTable(
4150 IN PDEVICE_OBJECT DeviceObject
,
4151 IN ULONG SectorSize
,
4152 IN BOOLEAN ReturnRecognizedPartitions
,
4153 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
4158 IoReadPartitionTableEx(
4159 IN PDEVICE_OBJECT DeviceObject
,
4160 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
4165 IoSetPartitionInformation(
4166 IN PDEVICE_OBJECT DeviceObject
,
4167 IN ULONG SectorSize
,
4168 IN ULONG PartitionNumber
,
4169 IN ULONG PartitionType
);
4174 IoSetPartitionInformationEx(
4175 IN PDEVICE_OBJECT DeviceObject
,
4176 IN ULONG PartitionNumber
,
4177 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
4182 IoSetSystemPartition(
4183 IN PUNICODE_STRING VolumeNameString
);
4188 IoSetThreadHardErrorMode(
4189 IN BOOLEAN EnableHardErrors
);
4194 IoVerifyPartitionTable(
4195 IN PDEVICE_OBJECT DeviceObject
,
4196 IN BOOLEAN FixErrors
);
4201 IoVolumeDeviceToDosName(
4202 IN PVOID VolumeDeviceObject
,
4203 OUT PUNICODE_STRING DosName
);
4208 IoWritePartitionTable(
4209 IN PDEVICE_OBJECT DeviceObject
,
4210 IN ULONG SectorSize
,
4211 IN ULONG SectorsPerTrack
,
4212 IN ULONG NumberOfHeads
,
4213 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
4218 IoWritePartitionTableEx(
4219 IN PDEVICE_OBJECT DeviceObject
,
4220 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
4222 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4224 /** Process manager types **/
4227 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
4229 IN HANDLE ProcessId
,
4233 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
4234 IN HANDLE ProcessId
,
4239 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
4240 IN PUNICODE_STRING FullImageName
,
4241 IN HANDLE ProcessId
,
4242 IN PIMAGE_INFO ImageInfo
);
4244 /** Process manager routines **/
4246 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4251 PsSetLoadImageNotifyRoutine(
4252 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4257 PsSetCreateThreadNotifyRoutine(
4258 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4263 PsSetCreateProcessNotifyRoutine(
4264 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
4270 PsGetCurrentProcessId(
4276 PsGetCurrentThreadId(
4283 OUT PULONG MajorVersion OPTIONAL
,
4284 OUT PULONG MinorVersion OPTIONAL
,
4285 OUT PULONG BuildNumber OPTIONAL
,
4286 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
4288 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4290 #if (NTDDI_VERSION >= NTDDI_WINXP)
4296 IN PEPROCESS Process
);
4301 PsRemoveCreateThreadNotifyRoutine(
4302 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
4307 PsRemoveLoadImageNotifyRoutine(
4308 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
4310 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
4312 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
4314 /* ZwXxx Functions */
4316 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4321 IN HANDLE TimerHandle
,
4322 OUT PBOOLEAN CurrentState OPTIONAL
);
4327 OUT PHANDLE TimerHandle
,
4328 IN ACCESS_MASK DesiredAccess
,
4329 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4330 IN TIMER_TYPE TimerType
);
4335 OUT PHANDLE TimerHandle
,
4336 IN ACCESS_MASK DesiredAccess
,
4337 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4342 ZwSetInformationThread(
4343 IN HANDLE ThreadHandle
,
4344 IN THREADINFOCLASS ThreadInformationClass
,
4345 IN PVOID ThreadInformation
,
4346 IN ULONG ThreadInformationLength
);
4351 IN HANDLE TimerHandle
,
4352 IN PLARGE_INTEGER DueTime
,
4353 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
4354 IN PVOID TimerContext OPTIONAL
,
4355 IN BOOLEAN ResumeTimer
,
4356 IN LONG Period OPTIONAL
,
4357 OUT PBOOLEAN PreviousState OPTIONAL
);
4365 IN PUNICODE_STRING String
4368 #if (VER_PRODUCTBUILD >= 2195)
4373 ZwPowerInformation (
4374 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
4375 IN PVOID InputBuffer OPTIONAL
,
4376 IN ULONG InputBufferLength
,
4377 OUT PVOID OutputBuffer OPTIONAL
,
4378 IN ULONG OutputBufferLength
4381 #endif /* (VER_PRODUCTBUILD >= 2195) */
4386 ZwTerminateProcess (
4387 IN HANDLE ProcessHandle OPTIONAL
,
4388 IN NTSTATUS ExitStatus
4395 OUT PHANDLE ProcessHandle
,
4396 IN ACCESS_MASK DesiredAccess
,
4397 IN POBJECT_ATTRIBUTES ObjectAttributes
,
4398 IN PCLIENT_ID ClientId OPTIONAL
4404 ZwQueryVolumeInformationFile(
4405 IN HANDLE FileHandle
,
4406 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4407 OUT PVOID FsInformation
,
4409 IN FS_INFORMATION_CLASS FsInformationClass
);
4414 ZwDeviceIoControlFile(
4415 IN HANDLE FileHandle
,
4416 IN HANDLE Event OPTIONAL
,
4417 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
4418 IN PVOID ApcContext OPTIONAL
,
4419 OUT PIO_STATUS_BLOCK IoStatusBlock
,
4420 IN ULONG IoControlCode
,
4421 IN PVOID InputBuffer OPTIONAL
,
4422 IN ULONG InputBufferLength
,
4423 OUT PVOID OutputBuffer OPTIONAL
,
4424 IN ULONG OutputBufferLength
);