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 struct _LOADER_PARAMETER_BLOCK
;
61 struct _DRIVE_LAYOUT_INFORMATION_EX
;
62 struct _SET_PARTITION_INFORMATION_EX
;
64 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
65 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
66 #if defined(_NTHAL_INCLUDED_)
67 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
69 typedef struct _PEB
*PPEB
;
73 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
74 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
77 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
79 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
82 #endif /* _NTIMAGE_ */
84 #define PsGetCurrentProcess IoGetCurrentProcess
86 #if (NTDDI_VERSION >= NTDDI_VISTA)
87 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
88 #elif (NTDDI_VERSION >= NTDDI_WINXP)
89 extern NTSYSAPI CCHAR KeNumberProcessors
;
91 extern PCCHAR KeNumberProcessors
;
98 #define KERNEL_STACK_SIZE 12288
99 #define KERNEL_LARGE_STACK_SIZE 61440
100 #define KERNEL_LARGE_STACK_COMMIT 12288
102 #define SIZE_OF_80387_REGISTERS 80
104 #if !defined(RC_INVOKED)
106 #define CONTEXT_i386 0x10000
107 #define CONTEXT_i486 0x10000
108 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
109 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
110 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
111 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
112 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
113 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
115 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
116 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
117 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
118 CONTEXT_EXTENDED_REGISTERS)
120 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
122 #endif /* !defined(RC_INVOKED) */
124 typedef struct _FLOATING_SAVE_AREA
{
132 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
134 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
136 #include "pshpack4.h"
137 typedef struct _CONTEXT
{
145 FLOATING_SAVE_AREA FloatSave
;
162 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
170 #define KERNEL_STACK_SIZE 0x6000
171 #define KERNEL_LARGE_STACK_SIZE 0x12000
172 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
174 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
176 #define EXCEPTION_READ_FAULT 0
177 #define EXCEPTION_WRITE_FAULT 1
178 #define EXCEPTION_EXECUTE_FAULT 8
180 #if !defined(RC_INVOKED)
182 #define CONTEXT_AMD64 0x100000
184 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
185 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
186 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
187 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
188 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
190 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
191 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
193 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
195 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
196 #define CONTEXT_SERVICE_ACTIVE 0x10000000
197 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
198 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
200 #endif /* !defined(RC_INVOKED) */
202 #define INITIAL_MXCSR 0x1f80
203 #define INITIAL_FPCSR 0x027f
205 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
245 XMM_SAVE_AREA32 FltSave
;
267 M128A VectorRegister
[26];
268 ULONG64 VectorControl
;
269 ULONG64 DebugControl
;
270 ULONG64 LastBranchToRip
;
271 ULONG64 LastBranchFromRip
;
272 ULONG64 LastExceptionToRip
;
273 ULONG64 LastExceptionFromRip
;
278 typedef enum _WELL_KNOWN_SID_TYPE
{
282 WinCreatorOwnerSid
= 3,
283 WinCreatorGroupSid
= 4,
284 WinCreatorOwnerServerSid
= 5,
285 WinCreatorGroupServerSid
= 6,
286 WinNtAuthoritySid
= 7,
290 WinInteractiveSid
= 11,
292 WinAnonymousSid
= 13,
294 WinEnterpriseControllersSid
= 15,
296 WinAuthenticatedUserSid
= 17,
297 WinRestrictedCodeSid
= 18,
298 WinTerminalServerSid
= 19,
299 WinRemoteLogonIdSid
= 20,
301 WinLocalSystemSid
= 22,
302 WinLocalServiceSid
= 23,
303 WinNetworkServiceSid
= 24,
304 WinBuiltinDomainSid
= 25,
305 WinBuiltinAdministratorsSid
= 26,
306 WinBuiltinUsersSid
= 27,
307 WinBuiltinGuestsSid
= 28,
308 WinBuiltinPowerUsersSid
= 29,
309 WinBuiltinAccountOperatorsSid
= 30,
310 WinBuiltinSystemOperatorsSid
= 31,
311 WinBuiltinPrintOperatorsSid
= 32,
312 WinBuiltinBackupOperatorsSid
= 33,
313 WinBuiltinReplicatorSid
= 34,
314 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
315 WinBuiltinRemoteDesktopUsersSid
= 36,
316 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
317 WinAccountAdministratorSid
= 38,
318 WinAccountGuestSid
= 39,
319 WinAccountKrbtgtSid
= 40,
320 WinAccountDomainAdminsSid
= 41,
321 WinAccountDomainUsersSid
= 42,
322 WinAccountDomainGuestsSid
= 43,
323 WinAccountComputersSid
= 44,
324 WinAccountControllersSid
= 45,
325 WinAccountCertAdminsSid
= 46,
326 WinAccountSchemaAdminsSid
= 47,
327 WinAccountEnterpriseAdminsSid
= 48,
328 WinAccountPolicyAdminsSid
= 49,
329 WinAccountRasAndIasServersSid
= 50,
330 WinNTLMAuthenticationSid
= 51,
331 WinDigestAuthenticationSid
= 52,
332 WinSChannelAuthenticationSid
= 53,
333 WinThisOrganizationSid
= 54,
334 WinOtherOrganizationSid
= 55,
335 WinBuiltinIncomingForestTrustBuildersSid
= 56,
336 WinBuiltinPerfMonitoringUsersSid
= 57,
337 WinBuiltinPerfLoggingUsersSid
= 58,
338 WinBuiltinAuthorizationAccessSid
= 59,
339 WinBuiltinTerminalServerLicenseServersSid
= 60,
340 WinBuiltinDCOMUsersSid
= 61,
341 WinBuiltinIUsersSid
= 62,
343 WinBuiltinCryptoOperatorsSid
= 64,
344 WinUntrustedLabelSid
= 65,
346 WinMediumLabelSid
= 67,
347 WinHighLabelSid
= 68,
348 WinSystemLabelSid
= 69,
349 WinWriteRestrictedCodeSid
= 70,
350 WinCreatorOwnerRightsSid
= 71,
351 WinCacheablePrincipalsGroupSid
= 72,
352 WinNonCacheablePrincipalsGroupSid
= 73,
353 WinEnterpriseReadonlyControllersSid
= 74,
354 WinAccountReadonlyControllersSid
= 75,
355 WinBuiltinEventLogReadersGroup
= 76,
356 WinNewEnterpriseReadonlyControllersSid
= 77,
357 WinBuiltinCertSvcDComAccessGroup
= 78,
358 WinMediumPlusLabelSid
= 79,
359 WinLocalLogonSid
= 80,
360 WinConsoleLogonSid
= 81,
361 WinThisOrganizationCertificateSid
= 82,
362 } WELL_KNOWN_SID_TYPE
;
364 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
366 #ifndef _RTL_RUN_ONCE_DEF
367 #define _RTL_RUN_ONCE_DEF
369 #define RTL_RUN_ONCE_INIT {0}
371 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
372 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
373 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
375 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
377 #define RTL_HASH_ALLOCATED_HEADER 0x00000001
379 #define RTL_HASH_RESERVED_SIGNATURE 0
381 /* RtlVerifyVersionInfo() ComparisonType */
384 #define VER_GREATER 2
385 #define VER_GREATER_EQUAL 3
387 #define VER_LESS_EQUAL 5
391 #define VER_CONDITION_MASK 7
392 #define VER_NUM_BITS_PER_CONDITION_MASK 3
394 /* RtlVerifyVersionInfo() TypeMask */
396 #define VER_MINORVERSION 0x0000001
397 #define VER_MAJORVERSION 0x0000002
398 #define VER_BUILDNUMBER 0x0000004
399 #define VER_PLATFORMID 0x0000008
400 #define VER_SERVICEPACKMINOR 0x0000010
401 #define VER_SERVICEPACKMAJOR 0x0000020
402 #define VER_SUITENAME 0x0000040
403 #define VER_PRODUCT_TYPE 0x0000080
405 #define VER_NT_WORKSTATION 0x0000001
406 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
407 #define VER_NT_SERVER 0x0000003
409 #define VER_PLATFORM_WIN32s 0
410 #define VER_PLATFORM_WIN32_WINDOWS 1
411 #define VER_PLATFORM_WIN32_NT 2
413 typedef union _RTL_RUN_ONCE
{
415 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
417 typedef ULONG
/* LOGICAL */
418 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
419 IN OUT PRTL_RUN_ONCE RunOnce
,
420 IN OUT PVOID Parameter OPTIONAL
,
421 IN OUT PVOID
*Context OPTIONAL
);
423 #endif /* _RTL_RUN_ONCE_DEF */
425 typedef enum _TABLE_SEARCH_RESULT
{
430 } TABLE_SEARCH_RESULT
;
432 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
436 } RTL_GENERIC_COMPARE_RESULTS
;
439 struct _RTL_AVL_TABLE
;
441 typedef RTL_GENERIC_COMPARE_RESULTS
442 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
443 IN
struct _RTL_AVL_TABLE
*Table
,
444 IN PVOID FirstStruct
,
445 IN PVOID SecondStruct
);
448 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
449 IN
struct _RTL_AVL_TABLE
*Table
,
453 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
454 IN
struct _RTL_AVL_TABLE
*Table
,
458 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
459 IN
struct _RTL_AVL_TABLE
*Table
,
463 typedef struct _RTL_BALANCED_LINKS
{
464 struct _RTL_BALANCED_LINKS
*Parent
;
465 struct _RTL_BALANCED_LINKS
*LeftChild
;
466 struct _RTL_BALANCED_LINKS
*RightChild
;
469 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
471 typedef struct _RTL_AVL_TABLE
{
472 RTL_BALANCED_LINKS BalancedRoot
;
473 PVOID OrderedPointer
;
474 ULONG WhichOrderedElement
;
475 ULONG NumberGenericTableElements
;
477 PRTL_BALANCED_LINKS RestartKey
;
479 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
480 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
481 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
483 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
485 #ifndef RTL_USE_AVL_TABLES
487 struct _RTL_GENERIC_TABLE
;
489 typedef RTL_GENERIC_COMPARE_RESULTS
490 (NTAPI
*PRTL_GENERIC_COMPARE_ROUTINE
) (
491 IN
struct _RTL_GENERIC_TABLE
*Table
,
492 IN PVOID FirstStruct
,
493 IN PVOID SecondStruct
);
496 (NTAPI
*PRTL_GENERIC_ALLOCATE_ROUTINE
) (
497 IN
struct _RTL_GENERIC_TABLE
*Table
,
501 (NTAPI
*PRTL_GENERIC_FREE_ROUTINE
) (
502 IN
struct _RTL_GENERIC_TABLE
*Table
,
505 typedef struct _RTL_SPLAY_LINKS
{
506 struct _RTL_SPLAY_LINKS
*Parent
;
507 struct _RTL_SPLAY_LINKS
*LeftChild
;
508 struct _RTL_SPLAY_LINKS
*RightChild
;
509 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
511 typedef struct _RTL_GENERIC_TABLE
{
512 PRTL_SPLAY_LINKS TableRoot
;
513 LIST_ENTRY InsertOrderList
;
514 PLIST_ENTRY OrderedPointer
;
515 ULONG WhichOrderedElement
;
516 ULONG NumberGenericTableElements
;
517 PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
;
518 PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
;
519 PRTL_GENERIC_FREE_ROUTINE FreeRoutine
;
521 } RTL_GENERIC_TABLE
, *PRTL_GENERIC_TABLE
;
523 #if (NTDDI_VERSION >= NTDDI_WIN2K)
528 RtlInitializeGenericTable(
529 OUT PRTL_GENERIC_TABLE Table
,
530 IN PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine
,
531 IN PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine
,
532 IN PRTL_GENERIC_FREE_ROUTINE FreeRoutine
,
533 IN PVOID TableContext OPTIONAL
);
538 RtlInsertElementGenericTable(
539 IN PRTL_GENERIC_TABLE Table
,
542 OUT PBOOLEAN NewElement OPTIONAL
);
547 RtlInsertElementGenericTableFull(
548 IN PRTL_GENERIC_TABLE Table
,
551 OUT PBOOLEAN NewElement OPTIONAL
,
552 IN PVOID NodeOrParent
,
553 IN TABLE_SEARCH_RESULT SearchResult
);
558 RtlDeleteElementGenericTable(
559 IN PRTL_GENERIC_TABLE Table
,
565 RtlLookupElementGenericTable(
566 IN PRTL_GENERIC_TABLE Table
,
572 RtlLookupElementGenericTableFull(
573 IN PRTL_GENERIC_TABLE Table
,
575 OUT PVOID
*NodeOrParent
,
576 OUT TABLE_SEARCH_RESULT
*SearchResult
);
581 RtlEnumerateGenericTable(
582 IN PRTL_GENERIC_TABLE Table
,
588 RtlEnumerateGenericTableWithoutSplaying(
589 IN PRTL_GENERIC_TABLE Table
,
590 IN OUT PVOID
*RestartKey
);
595 RtlGetElementGenericTable(
596 IN PRTL_GENERIC_TABLE Table
,
602 RtlNumberGenericTableElements(
603 IN PRTL_GENERIC_TABLE Table
);
608 RtlIsGenericTableEmpty(
609 IN PRTL_GENERIC_TABLE Table
);
611 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
613 #endif /* RTL_USE_AVL_TABLES */
615 #ifdef RTL_USE_AVL_TABLES
617 #undef PRTL_GENERIC_COMPARE_ROUTINE
618 #undef RTL_GENERIC_COMPARE_ROUTINE
619 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
620 #undef RTL_GENERIC_ALLOCATE_ROUTINE
621 #undef PRTL_GENERIC_FREE_ROUTINE
622 #undef RTL_GENERIC_FREE_ROUTINE
623 #undef RTL_GENERIC_TABLE
624 #undef PRTL_GENERIC_TABLE
626 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
627 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
628 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
629 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
630 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
631 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
632 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
633 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
635 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
636 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
637 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
638 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
639 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
640 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
641 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
642 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
643 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
644 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
645 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
647 #endif /* RTL_USE_AVL_TABLES */
649 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENTRY
{
652 } RTL_DYNAMIC_HASH_TABLE_ENTRY
, *PRTL_DYNAMIC_HASH_TABLE_ENTRY
;
654 typedef struct _RTL_DYNAMIC_HASH_TABLE_CONTEXT
{
655 PLIST_ENTRY ChainHead
;
656 PLIST_ENTRY PrevLinkage
;
658 } RTL_DYNAMIC_HASH_TABLE_CONTEXT
, *PRTL_DYNAMIC_HASH_TABLE_CONTEXT
;
660 typedef struct _RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
{
661 RTL_DYNAMIC_HASH_TABLE_ENTRY HashEntry
;
662 PLIST_ENTRY ChainHead
;
664 } RTL_DYNAMIC_HASH_TABLE_ENUMERATOR
, *PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR
;
666 typedef struct _RTL_DYNAMIC_HASH_TABLE
{
673 ULONG NonEmptyBuckets
;
674 ULONG NumEnumerators
;
676 } RTL_DYNAMIC_HASH_TABLE
, *PRTL_DYNAMIC_HASH_TABLE
;
678 typedef struct _OSVERSIONINFOA
{
679 ULONG dwOSVersionInfoSize
;
680 ULONG dwMajorVersion
;
681 ULONG dwMinorVersion
;
684 CHAR szCSDVersion
[128];
685 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
687 typedef struct _OSVERSIONINFOW
{
688 ULONG dwOSVersionInfoSize
;
689 ULONG dwMajorVersion
;
690 ULONG dwMinorVersion
;
693 WCHAR szCSDVersion
[128];
694 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
696 typedef struct _OSVERSIONINFOEXA
{
697 ULONG dwOSVersionInfoSize
;
698 ULONG dwMajorVersion
;
699 ULONG dwMinorVersion
;
702 CHAR szCSDVersion
[128];
703 USHORT wServicePackMajor
;
704 USHORT wServicePackMinor
;
708 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
710 typedef struct _OSVERSIONINFOEXW
{
711 ULONG dwOSVersionInfoSize
;
712 ULONG dwMajorVersion
;
713 ULONG dwMinorVersion
;
716 WCHAR szCSDVersion
[128];
717 USHORT wServicePackMajor
;
718 USHORT wServicePackMinor
;
722 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
725 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
726 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
727 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
728 typedef OSVERSIONINFOW OSVERSIONINFO
;
729 typedef POSVERSIONINFOW POSVERSIONINFO
;
730 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
732 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
733 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
734 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
735 typedef OSVERSIONINFOA OSVERSIONINFO
;
736 typedef POSVERSIONINFOA POSVERSIONINFO
;
737 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
740 #define HASH_ENTRY_KEY(x) ((x)->Signature)
742 #define RtlInitializeSplayLinks(Links) { \
743 PRTL_SPLAY_LINKS _SplayLinks; \
744 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
745 _SplayLinks->Parent = _SplayLinks; \
746 _SplayLinks->LeftChild = NULL; \
747 _SplayLinks->RightChild = NULL; \
750 #define RtlIsLeftChild(Links) \
751 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
753 #define RtlIsRightChild(Links) \
754 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
756 #define RtlRightChild(Links) \
757 ((PRTL_SPLAY_LINKS)(Links))->RightChild
759 #define RtlIsRoot(Links) \
760 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
762 #define RtlLeftChild(Links) \
763 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
765 #define RtlParent(Links) \
766 ((PRTL_SPLAY_LINKS)(Links))->Parent
768 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
770 PRTL_SPLAY_LINKS _SplayParent; \
771 PRTL_SPLAY_LINKS _SplayChild; \
772 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
773 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
774 _SplayParent->LeftChild = _SplayChild; \
775 _SplayChild->Parent = _SplayParent; \
778 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
780 PRTL_SPLAY_LINKS _SplayParent; \
781 PRTL_SPLAY_LINKS _SplayChild; \
782 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
783 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
784 _SplayParent->RightChild = _SplayChild; \
785 _SplayChild->Parent = _SplayParent; \
788 #if !defined(MIDL_PASS)
793 RtlConvertLongToLuid(
800 Luid
.LowPart
= Temp
.u
.LowPart
;
801 Luid
.HighPart
= Temp
.u
.HighPart
;
808 RtlConvertUlongToLuid(
818 #endif /* !defined(MIDL_PASS) */
820 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
821 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
822 *CallersAddress = (PVOID)_ReturnAddress(); \
823 *CallersCaller = NULL;
825 #if (NTDDI_VERSION >= NTDDI_WIN2K)
829 RtlGetCallersAddress(
830 OUT PVOID
*CallersAddress
,
831 OUT PVOID
*CallersCaller
);
835 #if (NTDDI_VERSION >= NTDDI_WIN2K)
837 #define RTL_STACK_WALKING_MODE_FRAMES_TO_SKIP_SHIFT 8
843 IN OUT PRTL_SPLAY_LINKS Links
);
849 IN PRTL_SPLAY_LINKS Links
);
855 IN PRTL_SPLAY_LINKS Links
,
856 IN OUT PRTL_SPLAY_LINKS
*Root
);
862 IN PRTL_SPLAY_LINKS Links
);
867 RtlSubtreePredecessor(
868 IN PRTL_SPLAY_LINKS Links
);
874 IN PRTL_SPLAY_LINKS Links
);
880 IN PRTL_SPLAY_LINKS Links
);
885 RtlPrefixUnicodeString(
886 IN PCUNICODE_STRING String1
,
887 IN PCUNICODE_STRING String2
,
888 IN BOOLEAN CaseInSensitive
);
894 IN OUT PSTRING DestinationString
,
895 IN
const PSTRING SourceString
);
900 RtlUpcaseUnicodeString(
901 IN OUT PUNICODE_STRING DestinationString
,
902 IN PCUNICODE_STRING SourceString
,
903 IN BOOLEAN AllocateDestinationString
);
909 IN OUT PACCESS_MASK AccessMask
,
910 IN PGENERIC_MAPPING GenericMapping
);
915 RtlVolumeDeviceToDosName(
916 IN PVOID VolumeDeviceObject
,
917 OUT PUNICODE_STRING DosName
);
923 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
928 RtlVerifyVersionInfo(
929 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
931 IN ULONGLONG ConditionMask
);
937 IN
const PSTRING String1
,
938 IN
const PSTRING String2
,
939 IN BOOLEAN CaseInSensitive
);
945 OUT PSTRING DestinationString
,
946 IN
const PSTRING SourceString OPTIONAL
);
952 IN
const PSTRING String1
,
953 IN
const PSTRING String2
,
954 IN BOOLEAN CaseInSensitive
);
961 IN ULONG Base OPTIONAL
,
978 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
980 #if (NTDDI_VERSION >= NTDDI_WINXP)
985 RtlInitializeGenericTableAvl(
986 OUT PRTL_AVL_TABLE Table
,
987 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
988 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
989 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
990 IN PVOID TableContext OPTIONAL
);
995 RtlInsertElementGenericTableAvl(
996 IN PRTL_AVL_TABLE Table
,
999 OUT PBOOLEAN NewElement OPTIONAL
);
1004 RtlInsertElementGenericTableFullAvl(
1005 IN PRTL_AVL_TABLE Table
,
1007 IN CLONG BufferSize
,
1008 OUT PBOOLEAN NewElement OPTIONAL
,
1009 IN PVOID NodeOrParent
,
1010 IN TABLE_SEARCH_RESULT SearchResult
);
1015 RtlDeleteElementGenericTableAvl(
1016 IN PRTL_AVL_TABLE Table
,
1022 RtlLookupElementGenericTableAvl(
1023 IN PRTL_AVL_TABLE Table
,
1029 RtlLookupElementGenericTableFullAvl(
1030 IN PRTL_AVL_TABLE Table
,
1032 OUT PVOID
*NodeOrParent
,
1033 OUT TABLE_SEARCH_RESULT
*SearchResult
);
1038 RtlEnumerateGenericTableAvl(
1039 IN PRTL_AVL_TABLE Table
,
1040 IN BOOLEAN Restart
);
1045 RtlEnumerateGenericTableWithoutSplayingAvl(
1046 IN PRTL_AVL_TABLE Table
,
1047 IN OUT PVOID
*RestartKey
);
1052 RtlLookupFirstMatchingElementGenericTableAvl(
1053 IN PRTL_AVL_TABLE Table
,
1055 OUT PVOID
*RestartKey
);
1060 RtlEnumerateGenericTableLikeADirectory(
1061 IN PRTL_AVL_TABLE Table
,
1062 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
1063 IN PVOID MatchData OPTIONAL
,
1065 IN OUT PVOID
*RestartKey
,
1066 IN OUT PULONG DeleteCount
,
1072 RtlGetElementGenericTableAvl(
1073 IN PRTL_AVL_TABLE Table
,
1079 RtlNumberGenericTableElementsAvl(
1080 IN PRTL_AVL_TABLE Table
);
1085 RtlIsGenericTableEmptyAvl(
1086 IN PRTL_AVL_TABLE Table
);
1089 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
1091 #if (NTDDI_VERSION >= NTDDI_VISTA)
1096 RtlRunOnceInitialize(
1097 OUT PRTL_RUN_ONCE RunOnce
);
1102 RtlRunOnceExecuteOnce(
1103 IN OUT PRTL_RUN_ONCE RunOnce
,
1104 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
1105 IN OUT PVOID Parameter OPTIONAL
,
1106 OUT PVOID
*Context OPTIONAL
);
1111 RtlRunOnceBeginInitialize(
1112 IN OUT PRTL_RUN_ONCE RunOnce
,
1114 OUT PVOID
*Context OPTIONAL
);
1120 IN OUT PRTL_RUN_ONCE RunOnce
,
1122 IN PVOID Context OPTIONAL
);
1128 IN ULONG OSMajorVersion
,
1129 IN ULONG OSMinorVersion
,
1130 IN ULONG SpMajorVersion
,
1131 IN ULONG SpMinorVersion
,
1132 OUT PULONG ReturnedProductType
);
1134 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1136 #if !defined(MIDL_PASS) && !defined(SORTPP_PASS)
1138 #if (NTDDI_VERSION >= NTDDI_WIN7)
1143 RtlInitHashTableContext(
1144 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
1146 Context
->ChainHead
= NULL
;
1147 Context
->PrevLinkage
= NULL
;
1153 RtlInitHashTableContextFromEnumerator(
1154 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
,
1155 IN PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
)
1157 Context
->ChainHead
= Enumerator
->ChainHead
;
1158 Context
->PrevLinkage
= Enumerator
->HashEntry
.Linkage
.Blink
;
1164 RtlReleaseHashTableContext(
1165 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
)
1167 UNREFERENCED_PARAMETER(Context
);
1174 RtlTotalBucketsHashTable(
1175 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1177 return HashTable
->TableSize
;
1183 RtlNonEmptyBucketsHashTable(
1184 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1186 return HashTable
->NonEmptyBuckets
;
1192 RtlEmptyBucketsHashTable(
1193 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1195 return HashTable
->TableSize
- HashTable
->NonEmptyBuckets
;
1201 RtlTotalEntriesHashTable(
1202 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1204 return HashTable
->NumEntries
;
1210 RtlActiveEnumeratorsHashTable(
1211 IN PRTL_DYNAMIC_HASH_TABLE HashTable
)
1213 return HashTable
->NumEnumerators
;
1216 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1218 #endif /* !defined(MIDL_PASS) && !defined(SORTPP_PASS) */
1220 #if (NTDDI_VERSION >= NTDDI_WIN7)
1226 IN OUT PRTL_DYNAMIC_HASH_TABLE
*HashTable OPTIONAL
,
1234 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1239 RtlInsertEntryHashTable(
1240 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1241 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
1242 IN ULONG_PTR Signature
,
1243 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1248 RtlRemoveEntryHashTable(
1249 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1250 IN PRTL_DYNAMIC_HASH_TABLE_ENTRY Entry
,
1251 IN OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1254 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1256 RtlLookupEntryHashTable(
1257 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1258 IN ULONG_PTR Signature
,
1259 OUT PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context OPTIONAL
);
1262 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1264 RtlGetNextEntryHashTable(
1265 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1266 IN PRTL_DYNAMIC_HASH_TABLE_CONTEXT Context
);
1271 RtlInitEnumerationHashTable(
1272 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1273 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1276 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1278 RtlEnumerateEntryHashTable(
1279 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1280 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1285 RtlEndEnumerationHashTable(
1286 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1287 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1292 RtlInitWeakEnumerationHashTable(
1293 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1294 OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1297 PRTL_DYNAMIC_HASH_TABLE_ENTRY
1299 RtlWeaklyEnumerateEntryHashTable(
1300 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1301 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1306 RtlEndWeakEnumerationHashTable(
1307 IN PRTL_DYNAMIC_HASH_TABLE HashTable
,
1308 IN OUT PRTL_DYNAMIC_HASH_TABLE_ENUMERATOR Enumerator
);
1314 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1319 RtlContractHashTable(
1320 IN PRTL_DYNAMIC_HASH_TABLE HashTable
);
1322 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1324 #if defined(_AMD64_) || defined(_IA64_)
1325 //DECLSPEC_DEPRECATED_DDK_WINXP
1329 RtlLargeIntegerDivide(
1330 IN LARGE_INTEGER Dividend
,
1331 IN LARGE_INTEGER Divisor
,
1332 OUT PLARGE_INTEGER Remainder OPTIONAL
)
1335 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
1337 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
1343 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1347 RtlLargeIntegerDivide(
1348 IN LARGE_INTEGER Dividend
,
1349 IN LARGE_INTEGER Divisor
,
1350 OUT PLARGE_INTEGER Remainder OPTIONAL
);
1353 #endif /* defined(_AMD64_) || defined(_IA64_) */
1355 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1356 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1357 (TypeBitMask), (ComparisonType)))
1359 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1363 VerSetConditionMask(
1364 IN ULONGLONG ConditionMask
,
1366 IN UCHAR Condition
);
1369 /** Kernel debugger routines **/
1377 IN ULONG MaximumResponseLength
);
1379 #if (NTDDI_VERSION >= NTDDI_WIN7)
1381 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX 0x00004000
1382 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX 0x00008000
1383 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX \
1384 (FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX | \
1385 FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX)
1387 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_DEPRECATED 0x00000200
1388 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_DEPRECATED 0x00000300
1389 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_DEPRECATED 0x00000300
1393 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL 0x00000200
1394 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL 0x00000300
1395 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK 0x00000300
1397 #define FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_ORDERLY_REMOVAL
1398 #define FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL_EX FILE_CHARACTERISTICS_EXPECT_SURPRISE_REMOVAL
1399 #define FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK_EX FILE_CHARACTERISTICS_REMOVAL_POLICY_MASK
1401 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1403 #define FILE_CHARACTERISTICS_PROPAGATED ( FILE_REMOVABLE_MEDIA | \
1404 FILE_READ_ONLY_DEVICE | \
1405 FILE_FLOPPY_DISKETTE | \
1406 FILE_WRITE_ONCE_MEDIA | \
1407 FILE_DEVICE_SECURE_OPEN )
1409 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1410 ULONG AlignmentRequirement
;
1411 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1413 typedef struct _FILE_NAME_INFORMATION
{
1414 ULONG FileNameLength
;
1416 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1419 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1420 ULONG FileAttributes
;
1422 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1424 typedef struct _FILE_DISPOSITION_INFORMATION
{
1426 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1428 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1429 LARGE_INTEGER EndOfFile
;
1430 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1432 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1433 LARGE_INTEGER ValidDataLength
;
1434 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1436 typedef struct _FILE_FS_LABEL_INFORMATION
{
1437 ULONG VolumeLabelLength
;
1438 WCHAR VolumeLabel
[1];
1439 } FILE_FS_LABEL_INFORMATION
, *PFILE_FS_LABEL_INFORMATION
;
1441 typedef struct _FILE_FS_VOLUME_INFORMATION
{
1442 LARGE_INTEGER VolumeCreationTime
;
1443 ULONG VolumeSerialNumber
;
1444 ULONG VolumeLabelLength
;
1445 BOOLEAN SupportsObjects
;
1446 WCHAR VolumeLabel
[1];
1447 } FILE_FS_VOLUME_INFORMATION
, *PFILE_FS_VOLUME_INFORMATION
;
1449 typedef struct _FILE_FS_SIZE_INFORMATION
{
1450 LARGE_INTEGER TotalAllocationUnits
;
1451 LARGE_INTEGER AvailableAllocationUnits
;
1452 ULONG SectorsPerAllocationUnit
;
1453 ULONG BytesPerSector
;
1454 } FILE_FS_SIZE_INFORMATION
, *PFILE_FS_SIZE_INFORMATION
;
1456 typedef struct _FILE_FS_FULL_SIZE_INFORMATION
{
1457 LARGE_INTEGER TotalAllocationUnits
;
1458 LARGE_INTEGER CallerAvailableAllocationUnits
;
1459 LARGE_INTEGER ActualAvailableAllocationUnits
;
1460 ULONG SectorsPerAllocationUnit
;
1461 ULONG BytesPerSector
;
1462 } FILE_FS_FULL_SIZE_INFORMATION
, *PFILE_FS_FULL_SIZE_INFORMATION
;
1464 typedef struct _FILE_FS_OBJECTID_INFORMATION
{
1466 UCHAR ExtendedInfo
[48];
1467 } FILE_FS_OBJECTID_INFORMATION
, *PFILE_FS_OBJECTID_INFORMATION
;
1469 typedef union _FILE_SEGMENT_ELEMENT
{
1471 ULONGLONG Alignment
;
1472 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1474 #define IOCTL_AVIO_ALLOCATE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 1, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1475 #define IOCTL_AVIO_FREE_STREAM CTL_CODE(FILE_DEVICE_AVIO, 2, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1476 #define IOCTL_AVIO_MODIFY_STREAM CTL_CODE(FILE_DEVICE_AVIO, 3, METHOD_BUFFERED, FILE_SPECIAL_ACCESS)
1478 typedef enum _BUS_DATA_TYPE
{
1479 ConfigurationSpaceUndefined
= -1,
1487 PCMCIAConfiguration
,
1490 PNPISAConfiguration
,
1491 SgiInternalConfiguration
,
1493 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1495 typedef struct _KEY_NAME_INFORMATION
{
1498 } KEY_NAME_INFORMATION
, *PKEY_NAME_INFORMATION
;
1500 typedef struct _KEY_CACHED_INFORMATION
{
1501 LARGE_INTEGER LastWriteTime
;
1506 ULONG MaxValueNameLen
;
1507 ULONG MaxValueDataLen
;
1509 } KEY_CACHED_INFORMATION
, *PKEY_CACHED_INFORMATION
;
1511 typedef struct _KEY_VIRTUALIZATION_INFORMATION
{
1512 ULONG VirtualizationCandidate
:1;
1513 ULONG VirtualizationEnabled
:1;
1514 ULONG VirtualTarget
:1;
1515 ULONG VirtualStore
:1;
1516 ULONG VirtualSource
:1;
1518 } KEY_VIRTUALIZATION_INFORMATION
, *PKEY_VIRTUALIZATION_INFORMATION
;
1520 #define THREAD_CSWITCH_PMU_DISABLE FALSE
1521 #define THREAD_CSWITCH_PMU_ENABLE TRUE
1523 #define PROCESS_LUID_DOSDEVICES_ONLY 0x00000001
1525 #define PROCESS_HANDLE_TRACING_MAX_STACKS 16
1527 typedef struct _NT_TIB
{
1528 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1532 _ANONYMOUS_UNION
union {
1536 PVOID ArbitraryUserPointer
;
1537 struct _NT_TIB
*Self
;
1540 typedef struct _NT_TIB32
{
1541 ULONG ExceptionList
;
1545 __GNU_EXTENSION
union {
1549 ULONG ArbitraryUserPointer
;
1551 } NT_TIB32
,*PNT_TIB32
;
1553 typedef struct _NT_TIB64
{
1554 ULONG64 ExceptionList
;
1557 ULONG64 SubSystemTib
;
1558 __GNU_EXTENSION
union {
1562 ULONG64 ArbitraryUserPointer
;
1564 } NT_TIB64
,*PNT_TIB64
;
1566 typedef enum _PROCESSINFOCLASS
{
1567 ProcessBasicInformation
,
1572 ProcessBasePriority
,
1573 ProcessRaisePriority
,
1575 ProcessExceptionPort
,
1577 ProcessLdtInformation
,
1579 ProcessDefaultHardErrorMode
,
1580 ProcessIoPortHandlers
,
1581 ProcessPooledUsageAndLimits
,
1582 ProcessWorkingSetWatch
,
1583 ProcessUserModeIOPL
,
1584 ProcessEnableAlignmentFaultFixup
,
1585 ProcessPriorityClass
,
1586 ProcessWx86Information
,
1588 ProcessAffinityMask
,
1589 ProcessPriorityBoost
,
1591 ProcessSessionInformation
,
1592 ProcessForegroundInformation
,
1593 ProcessWow64Information
,
1594 ProcessImageFileName
,
1595 ProcessLUIDDeviceMapsEnabled
,
1596 ProcessBreakOnTermination
,
1597 ProcessDebugObjectHandle
,
1599 ProcessHandleTracing
,
1601 ProcessExecuteFlags
,
1602 ProcessTlsInformation
,
1604 ProcessImageInformation
,
1606 ProcessPagePriority
,
1607 ProcessInstrumentationCallback
,
1608 ProcessThreadStackAllocation
,
1609 ProcessWorkingSetWatchEx
,
1610 ProcessImageFileNameWin32
,
1611 ProcessImageFileMapping
,
1612 ProcessAffinityUpdateMode
,
1613 ProcessMemoryAllocationMode
,
1614 ProcessGroupInformation
,
1615 ProcessTokenVirtualizationEnabled
,
1616 ProcessConsoleHostProcess
,
1617 ProcessWindowInformation
,
1621 typedef enum _THREADINFOCLASS
{
1622 ThreadBasicInformation
,
1627 ThreadImpersonationToken
,
1628 ThreadDescriptorTableEntry
,
1629 ThreadEnableAlignmentFaultFixup
,
1630 ThreadEventPair_Reusable
,
1631 ThreadQuerySetWin32StartAddress
,
1633 ThreadPerformanceCount
,
1634 ThreadAmILastThread
,
1635 ThreadIdealProcessor
,
1636 ThreadPriorityBoost
,
1637 ThreadSetTlsArrayAddress
,
1639 ThreadHideFromDebugger
,
1640 ThreadBreakOnTermination
,
1641 ThreadSwitchLegacyState
,
1643 ThreadLastSystemCall
,
1647 ThreadActualBasePriority
,
1648 ThreadTebInformation
,
1652 ThreadGroupInformation
,
1653 ThreadUmsInformation
,
1654 ThreadCounterProfiling
,
1655 ThreadIdealProcessorEx
,
1659 typedef struct _PAGE_PRIORITY_INFORMATION
{
1661 } PAGE_PRIORITY_INFORMATION
, *PPAGE_PRIORITY_INFORMATION
;
1663 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1666 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1668 typedef struct _PROCESS_BASIC_INFORMATION
{
1669 NTSTATUS ExitStatus
;
1670 struct _PEB
*PebBaseAddress
;
1671 ULONG_PTR AffinityMask
;
1672 KPRIORITY BasePriority
;
1673 ULONG_PTR UniqueProcessId
;
1674 ULONG_PTR InheritedFromUniqueProcessId
;
1675 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1677 typedef struct _PROCESS_EXTENDED_BASIC_INFORMATION
{
1679 PROCESS_BASIC_INFORMATION BasicInfo
;
1683 ULONG IsProtectedProcess
:1;
1684 ULONG IsWow64Process
:1;
1685 ULONG IsProcessDeleting
:1;
1686 ULONG IsCrossSessionCreate
:1;
1690 } PROCESS_EXTENDED_BASIC_INFORMATION
, *PPROCESS_EXTENDED_BASIC_INFORMATION
;
1692 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1693 __GNU_EXTENSION
union {
1695 HANDLE DirectoryHandle
;
1699 UCHAR DriveType
[32];
1702 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1704 typedef struct _PROCESS_DEVICEMAP_INFORMATION_EX
{
1707 HANDLE DirectoryHandle
;
1711 UCHAR DriveType
[32];
1715 } PROCESS_DEVICEMAP_INFORMATION_EX
, *PPROCESS_DEVICEMAP_INFORMATION_EX
;
1717 typedef struct _PROCESS_SESSION_INFORMATION
{
1719 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1721 typedef struct _PROCESS_HANDLE_TRACING_ENABLE
{
1723 } PROCESS_HANDLE_TRACING_ENABLE
, *PPROCESS_HANDLE_TRACING_ENABLE
;
1725 typedef struct _PROCESS_HANDLE_TRACING_ENABLE_EX
{
1728 } PROCESS_HANDLE_TRACING_ENABLE_EX
, *PPROCESS_HANDLE_TRACING_ENABLE_EX
;
1730 typedef struct _PROCESS_HANDLE_TRACING_ENTRY
{
1734 PVOID Stacks
[PROCESS_HANDLE_TRACING_MAX_STACKS
];
1735 } PROCESS_HANDLE_TRACING_ENTRY
, *PPROCESS_HANDLE_TRACING_ENTRY
;
1737 typedef struct _PROCESS_HANDLE_TRACING_QUERY
{
1740 PROCESS_HANDLE_TRACING_ENTRY HandleTrace
[1];
1741 } PROCESS_HANDLE_TRACING_QUERY
, *PPROCESS_HANDLE_TRACING_QUERY
;
1743 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
1744 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
1745 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
1746 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
1747 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
1749 typedef struct _QUOTA_LIMITS
{
1750 SIZE_T PagedPoolLimit
;
1751 SIZE_T NonPagedPoolLimit
;
1752 SIZE_T MinimumWorkingSetSize
;
1753 SIZE_T MaximumWorkingSetSize
;
1754 SIZE_T PagefileLimit
;
1755 LARGE_INTEGER TimeLimit
;
1756 } QUOTA_LIMITS
, *PQUOTA_LIMITS
;
1758 typedef union _RATE_QUOTA_LIMIT
{
1761 ULONG RatePercent
:7;
1764 } RATE_QUOTA_LIMIT
, *PRATE_QUOTA_LIMIT
;
1766 typedef struct _QUOTA_LIMITS_EX
{
1767 SIZE_T PagedPoolLimit
;
1768 SIZE_T NonPagedPoolLimit
;
1769 SIZE_T MinimumWorkingSetSize
;
1770 SIZE_T MaximumWorkingSetSize
;
1771 SIZE_T PagefileLimit
;
1772 LARGE_INTEGER TimeLimit
;
1773 SIZE_T WorkingSetLimit
;
1778 RATE_QUOTA_LIMIT CpuRateLimit
;
1779 } QUOTA_LIMITS_EX
, *PQUOTA_LIMITS_EX
;
1781 typedef struct _IO_COUNTERS
{
1782 ULONGLONG ReadOperationCount
;
1783 ULONGLONG WriteOperationCount
;
1784 ULONGLONG OtherOperationCount
;
1785 ULONGLONG ReadTransferCount
;
1786 ULONGLONG WriteTransferCount
;
1787 ULONGLONG OtherTransferCount
;
1788 } IO_COUNTERS
, *PIO_COUNTERS
;
1790 typedef struct _VM_COUNTERS
{
1791 SIZE_T PeakVirtualSize
;
1793 ULONG PageFaultCount
;
1794 SIZE_T PeakWorkingSetSize
;
1795 SIZE_T WorkingSetSize
;
1796 SIZE_T QuotaPeakPagedPoolUsage
;
1797 SIZE_T QuotaPagedPoolUsage
;
1798 SIZE_T QuotaPeakNonPagedPoolUsage
;
1799 SIZE_T QuotaNonPagedPoolUsage
;
1800 SIZE_T PagefileUsage
;
1801 SIZE_T PeakPagefileUsage
;
1802 } VM_COUNTERS
, *PVM_COUNTERS
;
1804 typedef struct _VM_COUNTERS_EX
{
1805 SIZE_T PeakVirtualSize
;
1807 ULONG PageFaultCount
;
1808 SIZE_T PeakWorkingSetSize
;
1809 SIZE_T WorkingSetSize
;
1810 SIZE_T QuotaPeakPagedPoolUsage
;
1811 SIZE_T QuotaPagedPoolUsage
;
1812 SIZE_T QuotaPeakNonPagedPoolUsage
;
1813 SIZE_T QuotaNonPagedPoolUsage
;
1814 SIZE_T PagefileUsage
;
1815 SIZE_T PeakPagefileUsage
;
1816 SIZE_T PrivateUsage
;
1817 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
1819 #define MAX_HW_COUNTERS 16
1820 #define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
1822 typedef enum _HARDWARE_COUNTER_TYPE
{
1824 MaxHardwareCounterType
1825 } HARDWARE_COUNTER_TYPE
, *PHARDWARE_COUNTER_TYPE
;
1827 typedef struct _HARDWARE_COUNTER
{
1828 HARDWARE_COUNTER_TYPE Type
;
1831 } HARDWARE_COUNTER
, *PHARDWARE_COUNTER
;
1833 typedef struct _POOLED_USAGE_AND_LIMITS
{
1834 SIZE_T PeakPagedPoolUsage
;
1835 SIZE_T PagedPoolUsage
;
1836 SIZE_T PagedPoolLimit
;
1837 SIZE_T PeakNonPagedPoolUsage
;
1838 SIZE_T NonPagedPoolUsage
;
1839 SIZE_T NonPagedPoolLimit
;
1840 SIZE_T PeakPagefileUsage
;
1841 SIZE_T PagefileUsage
;
1842 SIZE_T PagefileLimit
;
1843 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
1845 typedef struct _PROCESS_ACCESS_TOKEN
{
1848 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1850 #define PROCESS_EXCEPTION_PORT_ALL_STATE_BITS 0x00000003UL
1851 #define PROCESS_EXCEPTION_PORT_ALL_STATE_FLAGS ((ULONG_PTR)((1UL << PROCESS_EXCEPTION_PORT_ALL_STATE_BITS) - 1))
1853 typedef struct _PROCESS_EXCEPTION_PORT
{
1854 IN HANDLE ExceptionPortHandle
;
1855 IN OUT ULONG StateFlags
;
1856 } PROCESS_EXCEPTION_PORT
, *PPROCESS_EXCEPTION_PORT
;
1858 typedef struct _KERNEL_USER_TIMES
{
1859 LARGE_INTEGER CreateTime
;
1860 LARGE_INTEGER ExitTime
;
1861 LARGE_INTEGER KernelTime
;
1862 LARGE_INTEGER UserTime
;
1863 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1865 /* NtXxx Functions */
1871 OUT PHANDLE ProcessHandle
,
1872 IN ACCESS_MASK DesiredAccess
,
1873 IN POBJECT_ATTRIBUTES ObjectAttributes
,
1874 IN PCLIENT_ID ClientId OPTIONAL
);
1879 NtQueryInformationProcess(
1880 IN HANDLE ProcessHandle
,
1881 IN PROCESSINFOCLASS ProcessInformationClass
,
1882 OUT PVOID ProcessInformation OPTIONAL
,
1883 IN ULONG ProcessInformationLength
,
1884 OUT PULONG ReturnLength OPTIONAL
);
1886 typedef enum _SYSTEM_FIRMWARE_TABLE_ACTION
{
1887 SystemFirmwareTable_Enumerate
,
1888 SystemFirmwareTable_Get
1889 } SYSTEM_FIRMWARE_TABLE_ACTION
;
1891 typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION
{
1892 ULONG ProviderSignature
;
1893 SYSTEM_FIRMWARE_TABLE_ACTION Action
;
1895 ULONG TableBufferLength
;
1896 UCHAR TableBuffer
[ANYSIZE_ARRAY
];
1897 } SYSTEM_FIRMWARE_TABLE_INFORMATION
, *PSYSTEM_FIRMWARE_TABLE_INFORMATION
;
1901 IN OUT PSYSTEM_FIRMWARE_TABLE_INFORMATION SystemFirmwareTableInfo
);
1903 typedef struct _SYSTEM_FIRMWARE_TABLE_HANDLER
{
1904 ULONG ProviderSignature
;
1906 PFNFTH FirmwareTableHandler
;
1908 } SYSTEM_FIRMWARE_TABLE_HANDLER
, *PSYSTEM_FIRMWARE_TABLE_HANDLER
;
1911 (NTAPI
*PTIMER_APC_ROUTINE
)(
1912 IN PVOID TimerContext
,
1913 IN ULONG TimerLowValue
,
1914 IN LONG TimerHighValue
);
1916 typedef enum _TIMER_SET_INFORMATION_CLASS
{
1917 TimerSetCoalescableTimer
,
1919 } TIMER_SET_INFORMATION_CLASS
;
1921 #if (NTDDI_VERSION >= NTDDI_WIN7)
1922 typedef struct _TIMER_SET_COALESCABLE_TIMER_INFO
{
1923 IN LARGE_INTEGER DueTime
;
1924 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
;
1925 IN PVOID TimerContext OPTIONAL
;
1926 IN
struct _COUNTED_REASON_CONTEXT
*WakeContext OPTIONAL
;
1927 IN ULONG Period OPTIONAL
;
1928 IN ULONG TolerableDelay
;
1929 OUT PBOOLEAN PreviousState OPTIONAL
;
1930 } TIMER_SET_COALESCABLE_TIMER_INFO
, *PTIMER_SET_COALESCABLE_TIMER_INFO
;
1931 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1934 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1937 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1938 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1939 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1940 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1942 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1943 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1944 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1945 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1946 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1948 #define XSTATE_LEGACY_FLOATING_POINT 0
1949 #define XSTATE_LEGACY_SSE 1
1950 #define XSTATE_GSSE 2
1952 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1i64 << (XSTATE_LEGACY_FLOATING_POINT))
1953 #define XSTATE_MASK_LEGACY_SSE (1i64 << (XSTATE_LEGACY_SSE))
1954 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
1955 #define XSTATE_MASK_GSSE (1i64 << (XSTATE_GSSE))
1957 #define MAXIMUM_XSTATE_FEATURES 64
1959 typedef struct _XSTATE_FEATURE
{
1962 } XSTATE_FEATURE
, *PXSTATE_FEATURE
;
1964 typedef struct _XSTATE_CONFIGURATION
{
1965 ULONG64 EnabledFeatures
;
1967 ULONG OptimizedSave
:1;
1968 XSTATE_FEATURE Features
[MAXIMUM_XSTATE_FEATURES
];
1969 } XSTATE_CONFIGURATION
, *PXSTATE_CONFIGURATION
;
1971 #define MAX_WOW64_SHARED_ENTRIES 16
1973 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
1974 #define NX_SUPPORT_POLICY_ALWAYSON 1
1975 #define NX_SUPPORT_POLICY_OPTIN 2
1976 #define NX_SUPPORT_POLICY_OPTOUT 3
1978 #define SHARED_GLOBAL_FLAGS_ERROR_PORT_V 0x0
1979 #define SHARED_GLOBAL_FLAGS_ERROR_PORT (1UL << SHARED_GLOBAL_FLAGS_ERROR_PORT_V)
1981 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V 0x1
1982 #define SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED (1UL << SHARED_GLOBAL_FLAGS_ELEVATION_ENABLED_V)
1984 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V 0x2
1985 #define SHARED_GLOBAL_FLAGS_VIRT_ENABLED (1UL << SHARED_GLOBAL_FLAGS_VIRT_ENABLED_V)
1987 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V 0x3
1988 #define SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED \
1989 (1UL << SHARED_GLOBAL_FLAGS_INSTALLER_DETECT_ENABLED_V)
1991 #define SHARED_GLOBAL_FLAGS_SPARE_V 0x4
1992 #define SHARED_GLOBAL_FLAGS_SPARE \
1993 (1UL << SHARED_GLOBAL_FLAGS_SPARE_V)
1995 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V 0x5
1996 #define SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED \
1997 (1UL << SHARED_GLOBAL_FLAGS_DYNAMIC_PROC_ENABLED_V)
1999 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V 0x6
2000 #define SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED \
2001 (1UL << SHARED_GLOBAL_FLAGS_SEH_VALIDATION_ENABLED_V)
2003 #define EX_INIT_BITS(Flags, Bit) \
2004 *((Flags)) |= (Bit) // Safe to use before concurrently accessible
2006 #define EX_TEST_SET_BIT(Flags, Bit) \
2007 InterlockedBitTestAndSet ((PLONG)(Flags), (Bit))
2009 #define EX_TEST_CLEAR_BIT(Flags, Bit) \
2010 InterlockedBitTestAndReset ((PLONG)(Flags), (Bit))
2012 typedef struct _KUSER_SHARED_DATA
{
2013 ULONG TickCountLowDeprecated
;
2014 ULONG TickCountMultiplier
;
2015 volatile KSYSTEM_TIME InterruptTime
;
2016 volatile KSYSTEM_TIME SystemTime
;
2017 volatile KSYSTEM_TIME TimeZoneBias
;
2018 USHORT ImageNumberLow
;
2019 USHORT ImageNumberHigh
;
2020 WCHAR NtSystemRoot
[260];
2021 ULONG MaxStackTraceDepth
;
2022 ULONG CryptoExponent
;
2024 ULONG LargePageMinimum
;
2026 NT_PRODUCT_TYPE NtProductType
;
2027 BOOLEAN ProductTypeIsValid
;
2028 ULONG NtMajorVersion
;
2029 ULONG NtMinorVersion
;
2030 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
2033 volatile ULONG TimeSlip
;
2034 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
2035 ULONG AltArchitecturePad
[1];
2036 LARGE_INTEGER SystemExpirationDate
;
2038 BOOLEAN KdDebuggerEnabled
;
2039 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
2040 UCHAR NXSupportPolicy
;
2042 volatile ULONG ActiveConsoleId
;
2043 volatile ULONG DismountCount
;
2044 ULONG ComPlusPackage
;
2045 ULONG LastSystemRITEventTickCount
;
2046 ULONG NumberOfPhysicalPages
;
2047 BOOLEAN SafeBootMode
;
2048 #if (NTDDI_VERSION >= NTDDI_WIN7)
2052 UCHAR TscQpcEnabled
:1;
2053 UCHAR TscQpcSpareFlag
:1;
2054 UCHAR TscQpcShift
:6;
2059 #if (NTDDI_VERSION >= NTDDI_VISTA)
2061 ULONG SharedDataFlags
;
2063 ULONG DbgErrorPortPresent
:1;
2064 ULONG DbgElevationEnabled
:1;
2065 ULONG DbgVirtEnabled
:1;
2066 ULONG DbgInstallerDetectEnabled
:1;
2067 ULONG DbgSystemDllRelocated
:1;
2068 ULONG DbgDynProcessorEnabled
:1;
2069 ULONG DbgSEHValidationEnabled
:1;
2076 ULONG DataFlagsPad
[1];
2077 ULONGLONG TestRetInstruction
;
2079 ULONG SystemCallReturn
;
2080 ULONGLONG SystemCallPad
[3];
2081 _ANONYMOUS_UNION
union {
2082 volatile KSYSTEM_TIME TickCount
;
2083 volatile ULONG64 TickCountQuad
;
2084 _ANONYMOUS_STRUCT
struct {
2085 ULONG ReservedTickCountOverlay
[3];
2086 ULONG TickCountPad
[1];
2091 #if (NTDDI_VERSION >= NTDDI_WS03)
2092 LONGLONG ConsoleSessionForegroundProcessId
;
2093 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
2095 #if (NTDDI_VERSION >= NTDDI_VISTA)
2096 #if (NTDDI_VERSION >= NTDDI_WIN7)
2097 USHORT UserModeGlobalLogger
[16];
2099 USHORT UserModeGlobalLogger
[8];
2100 ULONG HeapTracingPid
[2];
2101 ULONG CritSecTracingPid
[2];
2103 ULONG ImageFileExecutionOptions
;
2104 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
2105 ULONG LangGenerationCount
;
2107 /* 4 bytes padding */
2109 ULONGLONG Reserved5
;
2110 volatile ULONG64 InterruptTimeBias
;
2112 #if (NTDDI_VERSION >= NTDDI_WIN7)
2113 volatile ULONG64 TscQpcBias
;
2114 volatile ULONG ActiveProcessorCount
;
2115 volatile USHORT ActiveGroupCount
;
2117 volatile ULONG AitSamplingValue
;
2118 volatile ULONG AppCompatFlag
;
2119 ULONGLONG SystemDllNativeRelocation
;
2120 ULONG SystemDllWowRelocation
;
2122 XSTATE_CONFIGURATION XState
;
2124 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
2126 #define CmResourceTypeMaximum 8
2128 typedef struct _CM_PCCARD_DEVICE_DATA
{
2134 ULONG LegacyBaseAddress
;
2136 } CM_PCCARD_DEVICE_DATA
, *PCM_PCCARD_DEVICE_DATA
;
2138 #define PCCARD_MAP_ERROR 0x01
2139 #define PCCARD_DEVICE_PCI 0x10
2141 #define PCCARD_SCAN_DISABLED 0x01
2142 #define PCCARD_MAP_ZERO 0x02
2143 #define PCCARD_NO_TIMER 0x03
2144 #define PCCARD_NO_PIC 0x04
2145 #define PCCARD_NO_LEGACY_BASE 0x05
2146 #define PCCARD_DUP_LEGACY_BASE 0x06
2147 #define PCCARD_NO_CONTROLLERS 0x07
2151 typedef enum _CONFIGURATION_TYPE
{
2154 FloatingPointProcessor
,
2164 MultiFunctionAdapter
,
2178 FloppyDiskPeripheral
,
2191 RealModeIrqRoutingTable
,
2192 RealModePCIEnumeration
,
2194 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
2195 #endif /* !_ARC_DDK_ */
2197 #if defined(_X86_) || defined(_AMD64_)
2198 #define PAUSE_PROCESSOR YieldProcessor();
2199 #elif defined(_IA64_)
2200 #define PAUSE_PROCESSOR __yield();
2203 #define MAXIMUM_EXPANSION_SIZE (KERNEL_LARGE_STACK_SIZE - (PAGE_SIZE / 2))
2206 (NTAPI
*PEXPAND_STACK_CALLOUT
) (
2207 IN PVOID Parameter OPTIONAL
);
2209 /* Kernel Functions */
2211 #if (NTDDI_VERSION >= NTDDI_WIN2K) && defined(SINGLE_GROUP_LEGACY_API)
2216 KeSetTargetProcessorDpc(
2223 KeQueryActiveProcessors(VOID
);
2227 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2234 IN KDPC_IMPORTANCE Importance
);
2240 IN OUT PRKEVENT Event
,
2241 IN KPRIORITY Increment
,
2247 KeSetBasePriorityThread(
2248 IN OUT PRKTHREAD Thread
,
2254 KeEnterCriticalRegion(VOID
);
2259 KeLeaveCriticalRegion(VOID
);
2266 IN ULONG BugCheckCode
);
2268 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2270 #if (NTDDI_VERSION >= NTDDI_WINXP)
2274 KeAreApcsDisabled(VOID
);
2277 #if (NTDDI_VERSION >= NTDDI_WS03)
2281 KeInvalidateAllCaches(VOID
);
2284 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
2289 KeExpandKernelStackAndCallout(
2290 IN PEXPAND_STACK_CALLOUT Callout
,
2291 IN PVOID Parameter OPTIONAL
,
2297 KeEnterGuardedRegion(VOID
);
2302 KeLeaveGuardedRegion(VOID
);
2306 #if (NTDDI_VERSION >= NTDDI_VISTA) && defined(SINGLE_GROUP_LEGACY_API)
2311 KeQueryActiveProcessorCount(
2312 OUT PKAFFINITY ActiveProcessors OPTIONAL
);
2317 KeQueryMaximumProcessorCount(VOID
);
2321 #if (NTDDI_VERSION >= NTDDI_WIN7)
2326 KeQueryActiveProcessorCountEx(
2327 IN USHORT GroupNumber
);
2332 KeQueryMaximumProcessorCountEx(
2333 IN USHORT GroupNumber
);
2338 KeQueryActiveGroupCount(VOID
);
2343 KeQueryMaximumGroupCount(VOID
);
2348 KeQueryGroupAffinity(
2349 IN USHORT GroupNumber
);
2354 KeGetCurrentProcessorNumberEx(
2355 OUT PPROCESSOR_NUMBER ProcNumber OPTIONAL
);
2360 KeQueryNodeActiveAffinity(
2361 IN USHORT NodeNumber
,
2362 OUT PGROUP_AFFINITY Affinity OPTIONAL
,
2363 OUT PUSHORT Count OPTIONAL
);
2368 KeQueryNodeMaximumProcessorCount(
2369 IN USHORT NodeNumber
);
2374 KeQueryHighestNodeNumber(VOID
);
2379 KeGetCurrentNodeNumber(VOID
);
2384 KeQueryLogicalProcessorRelationship(
2385 IN PPROCESSOR_NUMBER ProcessorNumber OPTIONAL
,
2386 IN LOGICAL_PROCESSOR_RELATIONSHIP RelationshipType
,
2387 OUT PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX Information OPTIONAL
,
2388 IN OUT PULONG Length
);
2393 KeSetHardwareCounterConfiguration(
2394 IN PHARDWARE_COUNTER CounterArray
,
2400 KeQueryHardwareCounterConfiguration(
2401 OUT PHARDWARE_COUNTER CounterArray
,
2402 IN ULONG MaximumCount
,
2405 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
2410 KeInvalidateRangeAllCaches(
2411 IN PVOID BaseAddress
,
2416 /* Executive Types */
2418 typedef struct _ZONE_SEGMENT_HEADER
{
2419 SINGLE_LIST_ENTRY SegmentList
;
2421 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2423 typedef struct _ZONE_HEADER
{
2424 SINGLE_LIST_ENTRY FreeList
;
2425 SINGLE_LIST_ENTRY SegmentList
;
2427 ULONG TotalSegmentSize
;
2428 } ZONE_HEADER
, *PZONE_HEADER
;
2430 #if defined(POOL_TAGGING)
2431 #define ExFreePool(a) ExFreePoolWithTag(a,0)
2434 #define PROTECTED_POOL 0x80000000
2436 /* Executive Functions */
2438 static __inline PVOID
2440 IN PZONE_HEADER Zone
)
2442 if (Zone
->FreeList
.Next
)
2443 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2444 return (PVOID
) Zone
->FreeList
.Next
;
2447 static __inline PVOID
2449 IN PZONE_HEADER Zone
,
2452 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2453 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2454 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2459 * ExInterlockedAllocateFromZone(
2460 * IN PZONE_HEADER Zone,
2461 * IN PKSPIN_LOCK Lock)
2463 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2464 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2467 * ExInterlockedFreeToZone(
2468 * IN PZONE_HEADER Zone,
2470 * IN PKSPIN_LOCK Lock);
2472 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2473 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2478 * IN PZONE_HEADER Zone)
2480 #define ExIsFullZone(Zone) \
2481 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2484 * ExIsObjectInFirstZoneSegment(
2485 * IN PZONE_HEADER Zone,
2488 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2489 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2490 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2491 (Zone)->TotalSegmentSize)) )
2493 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2494 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2495 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2496 #define ExDeleteResource ExDeleteResourceLite
2497 #define ExInitializeResource ExInitializeResourceLite
2498 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2499 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2500 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2501 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2503 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2509 IN OUT PZONE_HEADER Zone
,
2510 IN OUT PVOID Segment
,
2511 IN ULONG SegmentSize
);
2517 OUT PZONE_HEADER Zone
,
2519 IN OUT PVOID InitialSegment
,
2520 IN ULONG InitialSegmentSize
);
2525 ExInterlockedExtendZone(
2526 IN OUT PZONE_HEADER Zone
,
2527 IN OUT PVOID Segment
,
2528 IN ULONG SegmentSize
,
2529 IN OUT PKSPIN_LOCK Lock
);
2541 ExRaiseAccessViolation(VOID
);
2547 ExRaiseDatatypeMisalignment(VOID
);
2549 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2551 /* Memory Manager Types */
2553 typedef struct _PHYSICAL_MEMORY_RANGE
{
2554 PHYSICAL_ADDRESS BaseAddress
;
2555 LARGE_INTEGER NumberOfBytes
;
2556 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2559 (*PMM_ROTATE_COPY_CALLBACK_FUNCTION
) (
2560 IN PMDL DestinationMdl
,
2564 typedef enum _MM_ROTATE_DIRECTION
{
2566 MmToFrameBufferNoCopy
,
2568 MmToRegularMemoryNoCopy
,
2569 MmMaximumRotateDirection
2570 } MM_ROTATE_DIRECTION
, *PMM_ROTATE_DIRECTION
;
2572 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2573 typedef ULONG NODE_REQUIREMENT
;
2574 #define MM_ANY_NODE_OK 0x80000000
2577 /* Memory Manager Functions */
2579 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2582 PPHYSICAL_MEMORY_RANGE
2584 MmGetPhysicalMemoryRanges(VOID
);
2589 MmGetPhysicalAddress(
2590 IN PVOID BaseAddress
);
2595 MmIsNonPagedSystemAddressValid(
2596 IN PVOID VirtualAddress
);
2601 MmAllocateNonCachedMemory(
2602 IN SIZE_T NumberOfBytes
);
2607 MmFreeNonCachedMemory(
2608 IN PVOID BaseAddress
,
2609 IN SIZE_T NumberOfBytes
);
2614 MmGetVirtualForPhysical(
2615 IN PHYSICAL_ADDRESS PhysicalAddress
);
2620 MmMapUserAddressesToPage(
2621 IN PVOID BaseAddress
,
2622 IN SIZE_T NumberOfBytes
,
2623 IN PVOID PageAddress
);
2629 IN PHYSICAL_ADDRESS PhysicalAddress
,
2630 IN SIZE_T NumberOfBytes
,
2631 IN MEMORY_CACHING_TYPE CacheType
);
2636 MmMapViewInSessionSpace(
2638 OUT PVOID
*MappedBase
,
2639 IN OUT PSIZE_T ViewSize
);
2644 MmMapViewInSystemSpace(
2646 OUT PVOID
*MappedBase
,
2647 IN OUT PSIZE_T ViewSize
);
2653 IN PVOID VirtualAddress
);
2658 MmIsThisAnNtAsSystem(VOID
);
2663 MmLockPagableSectionByHandle(
2664 IN PVOID ImageSectionHandle
);
2669 MmUnmapViewInSessionSpace(
2670 IN PVOID MappedBase
);
2675 MmUnmapViewInSystemSpace(
2676 IN PVOID MappedBase
);
2681 MmUnsecureVirtualMemory(
2682 IN HANDLE SecureHandle
);
2687 MmRemovePhysicalMemory(
2688 IN PPHYSICAL_ADDRESS StartAddress
,
2689 IN OUT PLARGE_INTEGER NumberOfBytes
);
2694 MmSecureVirtualMemory(
2697 IN ULONG ProbeMode
);
2702 MmUnmapVideoDisplay(
2703 IN PVOID BaseAddress
,
2704 IN SIZE_T NumberOfBytes
);
2709 MmAddPhysicalMemory(
2710 IN PPHYSICAL_ADDRESS StartAddress
,
2711 IN OUT PLARGE_INTEGER NumberOfBytes
);
2716 MmAllocateContiguousMemory(
2717 IN SIZE_T NumberOfBytes
,
2718 IN PHYSICAL_ADDRESS HighestAcceptableAddress
);
2723 MmAllocateContiguousMemorySpecifyCache(
2724 IN SIZE_T NumberOfBytes
,
2725 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
2726 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
2727 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
2728 IN MEMORY_CACHING_TYPE CacheType
);
2733 MmAllocateContiguousMemorySpecifyCacheNode(
2734 IN SIZE_T NumberOfBytes
,
2735 IN PHYSICAL_ADDRESS LowestAcceptableAddress
,
2736 IN PHYSICAL_ADDRESS HighestAcceptableAddress
,
2737 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL
,
2738 IN MEMORY_CACHING_TYPE CacheType
,
2739 IN NODE_REQUIREMENT PreferredNode
);
2744 MmFreeContiguousMemory(
2745 IN PVOID BaseAddress
);
2750 MmFreeContiguousMemorySpecifyCache(
2751 IN PVOID BaseAddress
,
2752 IN SIZE_T NumberOfBytes
,
2753 IN MEMORY_CACHING_TYPE CacheType
);
2755 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2757 #if (NTDDI_VERSION >= NTDDI_WS03)
2761 MmCreateMirror(VOID
);
2764 #if (NTDDI_VERSION >= NTDDI_VISTA)
2767 MmRotatePhysicalView(
2768 IN PVOID VirtualAddress
,
2769 IN OUT PSIZE_T NumberOfBytes
,
2770 IN PMDLX NewMdl OPTIONAL
,
2771 IN MM_ROTATE_DIRECTION Direction
,
2772 IN PMM_ROTATE_COPY_CALLBACK_FUNCTION CopyFunction
,
2773 IN PVOID Context OPTIONAL
);
2776 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2780 SeSinglePrivilegeCheck(
2781 IN LUID PrivilegeValue
,
2782 IN KPROCESSOR_MODE PreviousMode
);
2785 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2787 #if !defined(_PSGETCURRENTTHREAD_)
2788 #define _PSGETCURRENTTHREAD_
2793 PsGetCurrentThread(VOID
)
2795 return (PETHREAD
)KeGetCurrentThread();
2800 /** Process Manager types **/
2803 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2805 IN HANDLE ProcessId
,
2808 typedef struct _PS_CREATE_NOTIFY_INFO
{
2813 IN ULONG FileOpenNameAvailable
:1;
2814 IN ULONG Reserved
:31;
2817 IN HANDLE ParentProcessId
;
2818 IN CLIENT_ID CreatingThreadId
;
2819 IN OUT
struct _FILE_OBJECT
*FileObject
;
2820 IN PCUNICODE_STRING ImageFileName
;
2821 IN PCUNICODE_STRING CommandLine OPTIONAL
;
2822 IN OUT NTSTATUS CreationStatus
;
2823 } PS_CREATE_NOTIFY_INFO
, *PPS_CREATE_NOTIFY_INFO
;
2826 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE_EX
)(
2827 IN OUT PEPROCESS Process
,
2828 IN HANDLE ProcessId
,
2829 IN PPS_CREATE_NOTIFY_INFO CreateInfo OPTIONAL
);
2832 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2833 IN HANDLE ProcessId
,
2837 #define IMAGE_ADDRESSING_MODE_32BIT 3
2839 typedef struct _IMAGE_INFO
{
2840 _ANONYMOUS_UNION
union {
2842 _ANONYMOUS_STRUCT
struct {
2843 ULONG ImageAddressingMode
:8;
2844 ULONG SystemModeImage
:1;
2845 ULONG ImageMappedToAllPids
:1;
2846 ULONG ExtendedInfoPresent
:1;
2851 ULONG ImageSelector
;
2853 ULONG ImageSectionNumber
;
2854 } IMAGE_INFO
, *PIMAGE_INFO
;
2856 typedef struct _IMAGE_INFO_EX
{
2858 IMAGE_INFO ImageInfo
;
2859 struct _FILE_OBJECT
*FileObject
;
2860 } IMAGE_INFO_EX
, *PIMAGE_INFO_EX
;
2863 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2864 IN PUNICODE_STRING FullImageName
,
2865 IN HANDLE ProcessId
,
2866 IN PIMAGE_INFO ImageInfo
);
2868 /** Process Manager functions **/
2870 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2875 PsSetCreateProcessNotifyRoutine(
2876 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
2882 PsSetCreateThreadNotifyRoutine(
2883 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2888 PsSetLoadImageNotifyRoutine(
2889 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2894 PsGetCurrentProcessId(VOID
);
2899 PsGetCurrentThreadId(VOID
);
2905 OUT PULONG MajorVersion OPTIONAL
,
2906 OUT PULONG MinorVersion OPTIONAL
,
2907 OUT PULONG BuildNumber OPTIONAL
,
2908 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
2910 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2912 #if (NTDDI_VERSION >= NTDDI_WINXP)
2918 IN PEPROCESS Process
);
2924 IN PETHREAD Thread
);
2929 PsRemoveCreateThreadNotifyRoutine(
2930 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2935 PsRemoveLoadImageNotifyRoutine(
2936 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2941 PsGetProcessCreateTimeQuadPart(
2942 IN PEPROCESS Process
);
2944 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2946 #if (NTDDI_VERSION >= NTDDI_WS03)
2950 PsGetThreadProcessId(
2951 IN PETHREAD Thread
);
2954 #if (NTDDI_VERSION >= NTDDI_VISTA)
2959 PsSetCurrentThreadPrefetching(
2960 IN BOOLEAN Prefetching
);
2965 PsIsCurrentThreadPrefetching(VOID
);
2969 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
2973 PsSetCreateProcessNotifyRoutineEx(
2974 IN PCREATE_PROCESS_NOTIFY_ROUTINE_EX NotifyRoutine
,
2978 /* I/O Manager Types */
2981 ** IRP function codes
2984 #define IRP_MN_QUERY_DIRECTORY 0x01
2985 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
2987 #define IRP_MN_USER_FS_REQUEST 0x00
2988 #define IRP_MN_MOUNT_VOLUME 0x01
2989 #define IRP_MN_VERIFY_VOLUME 0x02
2990 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
2991 #define IRP_MN_TRACK_LINK 0x04
2992 #define IRP_MN_KERNEL_CALL 0x04
2994 #define IRP_MN_LOCK 0x01
2995 #define IRP_MN_UNLOCK_SINGLE 0x02
2996 #define IRP_MN_UNLOCK_ALL 0x03
2997 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
2999 #define IRP_MN_FLUSH_AND_PURGE 0x01
3001 #define IRP_MN_NORMAL 0x00
3002 #define IRP_MN_DPC 0x01
3003 #define IRP_MN_MDL 0x02
3004 #define IRP_MN_COMPLETE 0x04
3005 #define IRP_MN_COMPRESSED 0x08
3007 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
3008 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
3009 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
3011 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
3013 #define IO_CHECK_CREATE_PARAMETERS 0x0200
3014 #define IO_ATTACH_DEVICE 0x0400
3015 #define IO_IGNORE_SHARE_ACCESS_CHECK 0x0800
3019 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
3021 IN PUNICODE_STRING PathName
,
3022 IN INTERFACE_TYPE BusType
,
3024 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
3025 IN CONFIGURATION_TYPE ControllerType
,
3026 IN ULONG ControllerNumber
,
3027 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
3028 IN CONFIGURATION_TYPE PeripheralType
,
3029 IN ULONG PeripheralNumber
,
3030 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
3032 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
3033 IoQueryDeviceIdentifier
= 0,
3034 IoQueryDeviceConfigurationData
,
3035 IoQueryDeviceComponentInformation
,
3036 IoQueryDeviceMaxData
3037 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
3040 (NTAPI
*PDRIVER_REINITIALIZE
)(
3041 IN
struct _DRIVER_OBJECT
*DriverObject
,
3042 IN PVOID Context OPTIONAL
,
3045 typedef struct _CONTROLLER_OBJECT
{
3048 PVOID ControllerExtension
;
3049 KDEVICE_QUEUE DeviceWaitQueue
;
3051 LARGE_INTEGER Spare2
;
3052 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
3054 /* DEVICE_OBJECT.Flags */
3056 #define DO_VERIFY_VOLUME 0x00000002
3057 #define DO_BUFFERED_IO 0x00000004
3058 #define DO_EXCLUSIVE 0x00000008
3059 #define DO_DIRECT_IO 0x00000010
3060 #define DO_MAP_IO_BUFFER 0x00000020
3061 #define DO_DEVICE_HAS_NAME 0x00000040
3062 #define DO_DEVICE_INITIALIZING 0x00000080
3063 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
3064 #define DO_LONG_TERM_REQUESTS 0x00000200
3065 #define DO_NEVER_LAST_DEVICE 0x00000400
3066 #define DO_SHUTDOWN_REGISTERED 0x00000800
3067 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
3068 #define DO_POWER_PAGABLE 0x00002000
3069 #define DO_POWER_INRUSH 0x00004000
3070 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
3071 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
3072 #define DO_FORCE_NEITHER_IO 0x00080000
3073 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
3074 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
3075 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
3076 #define DO_DISALLOW_EXECUTE 0x00800000
3078 #define DRVO_REINIT_REGISTERED 0x00000008
3079 #define DRVO_INITIALIZED 0x00000010
3080 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
3081 #define DRVO_LEGACY_RESOURCES 0x00000040
3083 typedef struct _CONFIGURATION_INFORMATION
{
3088 ULONG ScsiPortCount
;
3090 ULONG ParallelCount
;
3091 BOOLEAN AtDiskPrimaryAddressClaimed
;
3092 BOOLEAN AtDiskSecondaryAddressClaimed
;
3094 ULONG MediumChangerCount
;
3095 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
3097 typedef struct _DISK_SIGNATURE
{
3098 ULONG PartitionStyle
;
3099 _ANONYMOUS_UNION
union {
3108 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
3110 typedef struct _TXN_PARAMETER_BLOCK
{
3113 PVOID TransactionObject
;
3114 } TXN_PARAMETER_BLOCK
, *PTXN_PARAMETER_BLOCK
;
3116 #define TXF_MINIVERSION_DEFAULT_VIEW (0xFFFE)
3118 typedef struct _IO_DRIVER_CREATE_CONTEXT
{
3120 struct _ECP_LIST
*ExtraCreateParameter
;
3121 PVOID DeviceObjectHint
;
3122 PTXN_PARAMETER_BLOCK TxnParameters
;
3123 } IO_DRIVER_CREATE_CONTEXT
, *PIO_DRIVER_CREATE_CONTEXT
;
3125 typedef struct _AGP_TARGET_BUS_INTERFACE_STANDARD
{
3129 PINTERFACE_REFERENCE InterfaceReference
;
3130 PINTERFACE_DEREFERENCE InterfaceDereference
;
3131 PGET_SET_DEVICE_DATA SetBusData
;
3132 PGET_SET_DEVICE_DATA GetBusData
;
3134 } AGP_TARGET_BUS_INTERFACE_STANDARD
, *PAGP_TARGET_BUS_INTERFACE_STANDARD
;
3137 (NTAPI
*PGET_LOCATION_STRING
)(
3138 IN OUT PVOID Context OPTIONAL
,
3139 OUT PWCHAR
*LocationStrings
);
3141 typedef struct _PNP_LOCATION_INTERFACE
{
3145 PINTERFACE_REFERENCE InterfaceReference
;
3146 PINTERFACE_DEREFERENCE InterfaceDereference
;
3147 PGET_LOCATION_STRING GetLocationString
;
3148 } PNP_LOCATION_INTERFACE
, *PPNP_LOCATION_INTERFACE
;
3150 typedef enum _ARBITER_ACTION
{
3151 ArbiterActionTestAllocation
,
3152 ArbiterActionRetestAllocation
,
3153 ArbiterActionCommitAllocation
,
3154 ArbiterActionRollbackAllocation
,
3155 ArbiterActionQueryAllocatedResources
,
3156 ArbiterActionWriteReservedResources
,
3157 ArbiterActionQueryConflict
,
3158 ArbiterActionQueryArbitrate
,
3159 ArbiterActionAddReserved
,
3160 ArbiterActionBootAllocation
3161 } ARBITER_ACTION
, *PARBITER_ACTION
;
3163 typedef struct _ARBITER_CONFLICT_INFO
{
3164 PDEVICE_OBJECT OwningObject
;
3167 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
3169 typedef struct _ARBITER_TEST_ALLOCATION_PARAMETERS
{
3170 IN OUT PLIST_ENTRY ArbitrationList
;
3171 IN ULONG AllocateFromCount
;
3172 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
3173 } ARBITER_TEST_ALLOCATION_PARAMETERS
, *PARBITER_TEST_ALLOCATION_PARAMETERS
;
3175 typedef struct _ARBITER_RETEST_ALLOCATION_PARAMETERS
{
3176 IN OUT PLIST_ENTRY ArbitrationList
;
3177 IN ULONG AllocateFromCount
;
3178 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
3179 } ARBITER_RETEST_ALLOCATION_PARAMETERS
, *PARBITER_RETEST_ALLOCATION_PARAMETERS
;
3181 typedef struct _ARBITER_BOOT_ALLOCATION_PARAMETERS
{
3182 IN OUT PLIST_ENTRY ArbitrationList
;
3183 } ARBITER_BOOT_ALLOCATION_PARAMETERS
, *PARBITER_BOOT_ALLOCATION_PARAMETERS
;
3185 typedef struct _ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
{
3186 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
3187 } ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
, *PARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS
;
3189 typedef struct _ARBITER_QUERY_CONFLICT_PARAMETERS
{
3190 IN PDEVICE_OBJECT PhysicalDeviceObject
;
3191 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
3192 OUT PULONG ConflictCount
;
3193 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
3194 } ARBITER_QUERY_CONFLICT_PARAMETERS
, *PARBITER_QUERY_CONFLICT_PARAMETERS
;
3196 typedef struct _ARBITER_QUERY_ARBITRATE_PARAMETERS
{
3197 IN PLIST_ENTRY ArbitrationList
;
3198 } ARBITER_QUERY_ARBITRATE_PARAMETERS
, *PARBITER_QUERY_ARBITRATE_PARAMETERS
;
3200 typedef struct _ARBITER_ADD_RESERVED_PARAMETERS
{
3201 IN PDEVICE_OBJECT ReserveDevice
;
3202 } ARBITER_ADD_RESERVED_PARAMETERS
, *PARBITER_ADD_RESERVED_PARAMETERS
;
3204 typedef struct _ARBITER_PARAMETERS
{
3206 ARBITER_TEST_ALLOCATION_PARAMETERS TestAllocation
;
3207 ARBITER_RETEST_ALLOCATION_PARAMETERS RetestAllocation
;
3208 ARBITER_BOOT_ALLOCATION_PARAMETERS BootAllocation
;
3209 ARBITER_QUERY_ALLOCATED_RESOURCES_PARAMETERS QueryAllocatedResources
;
3210 ARBITER_QUERY_CONFLICT_PARAMETERS QueryConflict
;
3211 ARBITER_QUERY_ARBITRATE_PARAMETERS QueryArbitrate
;
3212 ARBITER_ADD_RESERVED_PARAMETERS AddReserved
;
3214 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
3216 typedef enum _ARBITER_REQUEST_SOURCE
{
3217 ArbiterRequestUndefined
= -1,
3218 ArbiterRequestLegacyReported
,
3219 ArbiterRequestHalReported
,
3220 ArbiterRequestLegacyAssigned
,
3221 ArbiterRequestPnpDetected
,
3222 ArbiterRequestPnpEnumerated
3223 } ARBITER_REQUEST_SOURCE
;
3225 typedef enum _ARBITER_RESULT
{
3226 ArbiterResultUndefined
= -1,
3227 ArbiterResultSuccess
,
3228 ArbiterResultExternalConflict
,
3229 ArbiterResultNullRequest
3232 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
3234 typedef struct _ARBITER_LIST_ENTRY
{
3235 LIST_ENTRY ListEntry
;
3236 ULONG AlternativeCount
;
3237 PIO_RESOURCE_DESCRIPTOR Alternatives
;
3238 PDEVICE_OBJECT PhysicalDeviceObject
;
3239 ARBITER_REQUEST_SOURCE RequestSource
;
3242 INTERFACE_TYPE InterfaceType
;
3245 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
3246 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
3247 ARBITER_RESULT Result
;
3248 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
3251 (NTAPI
*PARBITER_HANDLER
)(
3252 IN OUT PVOID Context
,
3253 IN ARBITER_ACTION Action
,
3254 IN OUT PARBITER_PARAMETERS Parameters
);
3256 #define ARBITER_PARTIAL 0x00000001
3258 typedef struct _ARBITER_INTERFACE
{
3262 PINTERFACE_REFERENCE InterfaceReference
;
3263 PINTERFACE_DEREFERENCE InterfaceDereference
;
3264 PARBITER_HANDLER ArbiterHandler
;
3266 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
3268 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
3269 TranslateChildToParent
,
3270 TranslateParentToChild
3271 } RESOURCE_TRANSLATION_DIRECTION
;
3274 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
3275 IN OUT PVOID Context OPTIONAL
,
3276 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
3277 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
3278 IN ULONG AlternativesCount OPTIONAL
,
3279 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
3280 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3281 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
3284 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
3285 IN OUT PVOID Context OPTIONAL
,
3286 IN PIO_RESOURCE_DESCRIPTOR Source
,
3287 IN PDEVICE_OBJECT PhysicalDeviceObject
,
3288 OUT PULONG TargetCount
,
3289 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
3291 typedef struct _TRANSLATOR_INTERFACE
{
3295 PINTERFACE_REFERENCE InterfaceReference
;
3296 PINTERFACE_DEREFERENCE InterfaceDereference
;
3297 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
3298 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
3299 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
3301 /* I/O Manager Functions */
3304 * VOID IoAssignArcName(
3305 * IN PUNICODE_STRING ArcName,
3306 * IN PUNICODE_STRING DeviceName);
3308 #define IoAssignArcName(_ArcName, _DeviceName) ( \
3309 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
3313 * IoDeassignArcName(
3314 * IN PUNICODE_STRING ArcName)
3316 #define IoDeassignArcName IoDeleteSymbolicLink
3321 IoInitializeDriverCreateContext(
3322 PIO_DRIVER_CREATE_CONTEXT DriverContext
)
3324 RtlZeroMemory(DriverContext
, sizeof(IO_DRIVER_CREATE_CONTEXT
));
3325 DriverContext
->Size
= sizeof(IO_DRIVER_CREATE_CONTEXT
);
3328 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3330 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
3334 IoAllocateAdapterChannel(
3335 IN PADAPTER_OBJECT AdapterObject
,
3336 IN PDEVICE_OBJECT DeviceObject
,
3337 IN ULONG NumberOfMapRegisters
,
3338 IN PDRIVER_CONTROL ExecutionRoutine
,
3342 //DECLSPEC_DEPRECATED_DDK
3347 IN PADAPTER_OBJECT AdapterObject
,
3349 IN PVOID MapRegisterBase
,
3351 IN OUT PULONG Length
,
3352 IN BOOLEAN WriteToDevice
);
3357 IoAllocateController(
3358 IN PCONTROLLER_OBJECT ControllerObject
,
3359 IN PDEVICE_OBJECT DeviceObject
,
3360 IN PDRIVER_CONTROL ExecutionRoutine
,
3361 IN PVOID Context OPTIONAL
);
3373 IN PCONTROLLER_OBJECT ControllerObject
);
3379 IN PCONTROLLER_OBJECT ControllerObject
);
3382 PCONFIGURATION_INFORMATION
3384 IoGetConfigurationInformation(VOID
);
3389 IoGetDeviceToVerify(
3390 IN PETHREAD Thread
);
3396 IN PDEVICE_OBJECT DeviceObject
,
3397 IN PFILE_OBJECT FileObject
);
3402 IoGetFileObjectGenericMapping(VOID
);
3407 IoMakeAssociatedIrp(
3409 IN CCHAR StackSize
);
3414 IoQueryDeviceDescription(
3415 IN PINTERFACE_TYPE BusType OPTIONAL
,
3416 IN PULONG BusNumber OPTIONAL
,
3417 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
3418 IN PULONG ControllerNumber OPTIONAL
,
3419 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
3420 IN PULONG PeripheralNumber OPTIONAL
,
3421 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
3422 IN OUT PVOID Context OPTIONAL
);
3429 IN PVPB Vpb OPTIONAL
,
3430 IN PDEVICE_OBJECT RealDeviceObject
);
3435 IoRaiseInformationalHardError(
3436 IN NTSTATUS ErrorStatus
,
3437 IN PUNICODE_STRING String OPTIONAL
,
3438 IN PKTHREAD Thread OPTIONAL
);
3443 IoRegisterBootDriverReinitialization(
3444 IN PDRIVER_OBJECT DriverObject
,
3445 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3446 IN PVOID Context OPTIONAL
);
3451 IoRegisterDriverReinitialization(
3452 IN PDRIVER_OBJECT DriverObject
,
3453 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
3454 IN PVOID Context OPTIONAL
);
3459 IoAttachDeviceByPointer(
3460 IN PDEVICE_OBJECT SourceDevice
,
3461 IN PDEVICE_OBJECT TargetDevice
);
3466 IoReportDetectedDevice(
3467 IN PDRIVER_OBJECT DriverObject
,
3468 IN INTERFACE_TYPE LegacyBusType
,
3470 IN ULONG SlotNumber
,
3471 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
3472 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
3473 IN BOOLEAN ResourceAssigned
,
3474 IN OUT PDEVICE_OBJECT
*DeviceObject OPTIONAL
);
3479 IoReportResourceForDetection(
3480 IN PDRIVER_OBJECT DriverObject
,
3481 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3482 IN ULONG DriverListSize OPTIONAL
,
3483 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3484 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3485 IN ULONG DeviceListSize OPTIONAL
,
3486 OUT PBOOLEAN ConflictDetected
);
3491 IoReportResourceUsage(
3492 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3493 IN PDRIVER_OBJECT DriverObject
,
3494 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
3495 IN ULONG DriverListSize OPTIONAL
,
3496 IN PDEVICE_OBJECT DeviceObject
,
3497 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
3498 IN ULONG DeviceListSize OPTIONAL
,
3499 IN BOOLEAN OverrideConflict
,
3500 OUT PBOOLEAN ConflictDetected
);
3505 IoSetHardErrorOrVerifyDevice(
3507 IN PDEVICE_OBJECT DeviceObject
);
3513 IN PUNICODE_STRING RegistryPath
,
3514 IN PUNICODE_STRING DriverClassName OPTIONAL
,
3515 IN PDRIVER_OBJECT DriverObject
,
3516 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
3517 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
3518 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
3523 IoSetThreadHardErrorMode(
3524 IN BOOLEAN EnableHardErrors
);
3526 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3528 #if (NTDDI_VERSION >= NTDDI_WIN2KSP3)
3533 IoIsFileOriginRemote(
3534 IN PFILE_OBJECT FileObject
);
3540 IN PFILE_OBJECT FileObject
,
3545 #if (NTDDI_VERSION >= NTDDI_WINXP)
3550 IoReadPartitionTable(
3551 IN PDEVICE_OBJECT DeviceObject
,
3552 IN ULONG SectorSize
,
3553 IN BOOLEAN ReturnRecognizedPartitions
,
3554 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
3559 IoSetPartitionInformation(
3560 IN PDEVICE_OBJECT DeviceObject
,
3561 IN ULONG SectorSize
,
3562 IN ULONG PartitionNumber
,
3563 IN ULONG PartitionType
);
3568 IoWritePartitionTable(
3569 IN PDEVICE_OBJECT DeviceObject
,
3570 IN ULONG SectorSize
,
3571 IN ULONG SectorsPerTrack
,
3572 IN ULONG NumberOfHeads
,
3573 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
3579 IN PDEVICE_OBJECT DeviceObject
,
3580 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
3585 IoReadDiskSignature(
3586 IN PDEVICE_OBJECT DeviceObject
,
3587 IN ULONG BytesPerSector
,
3588 OUT PDISK_SIGNATURE Signature
);
3593 IoReadPartitionTableEx(
3594 IN PDEVICE_OBJECT DeviceObject
,
3595 OUT
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
3600 IoSetPartitionInformationEx(
3601 IN PDEVICE_OBJECT DeviceObject
,
3602 IN ULONG PartitionNumber
,
3603 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
3608 IoSetSystemPartition(
3609 IN PUNICODE_STRING VolumeNameString
);
3614 IoVerifyPartitionTable(
3615 IN PDEVICE_OBJECT DeviceObject
,
3616 IN BOOLEAN FixErrors
);
3621 IoVolumeDeviceToDosName(
3622 IN PVOID VolumeDeviceObject
,
3623 OUT PUNICODE_STRING DosName
);
3628 IoWritePartitionTableEx(
3629 IN PDEVICE_OBJECT DeviceObject
,
3630 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
3635 IoCreateFileSpecifyDeviceObjectHint(
3636 OUT PHANDLE FileHandle
,
3637 IN ACCESS_MASK DesiredAccess
,
3638 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3639 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3640 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
3641 IN ULONG FileAttributes
,
3642 IN ULONG ShareAccess
,
3643 IN ULONG Disposition
,
3644 IN ULONG CreateOptions
,
3645 IN PVOID EaBuffer OPTIONAL
,
3647 IN CREATE_FILE_TYPE CreateFileType
,
3648 IN PVOID InternalParameters OPTIONAL
,
3650 IN PVOID DeviceObject OPTIONAL
);
3655 IoAttachDeviceToDeviceStackSafe(
3656 IN PDEVICE_OBJECT SourceDevice
,
3657 IN PDEVICE_OBJECT TargetDevice
,
3658 OUT PDEVICE_OBJECT
*AttachedToDeviceObject
);
3660 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3662 #if (NTDDI_VERSION >= NTDDI_WS03)
3666 IoGetPagingIoPriority(
3670 #if (NTDDI_VERSION >= NTDDI_WS03SP1)
3673 IoTranslateBusAddress(
3674 IN INTERFACE_TYPE InterfaceType
,
3676 IN PHYSICAL_ADDRESS BusAddress
,
3677 IN OUT PULONG AddressSpace
,
3678 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
3681 #if (NTDDI_VERSION >= NTDDI_VISTA)
3686 IoUpdateDiskGeometry(
3687 IN PDEVICE_OBJECT DeviceObject
,
3688 IN
struct _DISK_GEOMETRY_EX
* OldDiskGeometry
,
3689 IN
struct _DISK_GEOMETRY_EX
* NewDiskGeometry
);
3691 PTXN_PARAMETER_BLOCK
3693 IoGetTransactionParameterBlock(
3694 IN PFILE_OBJECT FileObject
);
3700 OUT PHANDLE FileHandle
,
3701 IN ACCESS_MASK DesiredAccess
,
3702 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3703 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3704 IN PLARGE_INTEGER AllocationSize OPTIONAL
,
3705 IN ULONG FileAttributes
,
3706 IN ULONG ShareAccess
,
3707 IN ULONG Disposition
,
3708 IN ULONG CreateOptions
,
3709 IN PVOID EaBuffer OPTIONAL
,
3711 IN CREATE_FILE_TYPE CreateFileType
,
3712 IN PVOID InternalParameters OPTIONAL
,
3714 IN PIO_DRIVER_CREATE_CONTEXT DriverContext OPTIONAL
);
3718 IoSetIrpExtraCreateParameter(
3720 IN
struct _ECP_LIST
*ExtraCreateParameter
);
3724 IoClearIrpExtraCreateParameter(
3729 IoGetIrpExtraCreateParameter(
3731 OUT
struct _ECP_LIST
**ExtraCreateParameter OPTIONAL
);
3735 IoIsFileObjectIgnoringSharing(
3736 IN PFILE_OBJECT FileObject
);
3738 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
3740 #if (NTDDI_VERSION >= NTDDI_WIN7)
3743 IoSetFileObjectIgnoreSharing(
3744 IN PFILE_OBJECT FileObject
);
3748 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
3752 typedef PBUS_HANDLER
3753 (FASTCALL
*pHalHandlerForBus
)(
3754 IN INTERFACE_TYPE InterfaceType
,
3755 IN ULONG BusNumber
);
3758 (FASTCALL
*pHalReferenceBusHandler
)(
3759 IN PBUS_HANDLER BusHandler
);
3761 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
3762 HalInstalledBusInformation
,
3763 HalProfileSourceInformation
,
3764 HalInformationClassUnused1
,
3765 HalPowerInformation
,
3766 HalProcessorSpeedInformation
,
3767 HalCallbackInformation
,
3768 HalMapRegisterInformation
,
3769 HalMcaLogInformation
,
3770 HalFrameBufferCachingInformation
,
3771 HalDisplayBiosInformation
,
3772 HalProcessorFeatureInformation
,
3773 HalNumaTopologyInterface
,
3774 HalErrorInformation
,
3775 HalCmcLogInformation
,
3776 HalCpeLogInformation
,
3777 HalQueryMcaInterface
,
3778 HalQueryAMLIIllegalIOPortAddresses
,
3779 HalQueryMaxHotPlugMemoryAddress
,
3780 HalPartitionIpiInterface
,
3781 HalPlatformInformation
,
3782 HalQueryProfileSourceList
,
3783 HalInitLogInformation
,
3784 HalFrequencyInformation
,
3785 HalProcessorBrandString
,
3786 HalHypervisorInformation
,
3787 HalPlatformTimerInformation
,
3788 HalAcpiAuditInformation
3789 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
3791 typedef enum _HAL_SET_INFORMATION_CLASS
{
3792 HalProfileSourceInterval
,
3793 HalProfileSourceInterruptHandler
,
3794 HalMcaRegisterDriver
,
3795 HalKernelErrorHandler
,
3796 HalCmcRegisterDriver
,
3797 HalCpeRegisterDriver
,
3801 HalGenerateCmcInterrupt
,
3802 HalProfileSourceTimerHandler
,
3804 HalProfileDpgoSourceInterruptHandler
3805 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
3808 (NTAPI
*pHalQuerySystemInformation
)(
3809 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
3810 IN ULONG BufferSize
,
3811 IN OUT PVOID Buffer
,
3812 OUT PULONG ReturnedLength
);
3815 (NTAPI
*pHalSetSystemInformation
)(
3816 IN HAL_SET_INFORMATION_CLASS InformationClass
,
3817 IN ULONG BufferSize
,
3821 (FASTCALL
*pHalExamineMBR
)(
3822 IN PDEVICE_OBJECT DeviceObject
,
3823 IN ULONG SectorSize
,
3824 IN ULONG MBRTypeIdentifier
,
3828 (FASTCALL
*pHalIoReadPartitionTable
)(
3829 IN PDEVICE_OBJECT DeviceObject
,
3830 IN ULONG SectorSize
,
3831 IN BOOLEAN ReturnRecognizedPartitions
,
3832 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
3835 (FASTCALL
*pHalIoSetPartitionInformation
)(
3836 IN PDEVICE_OBJECT DeviceObject
,
3837 IN ULONG SectorSize
,
3838 IN ULONG PartitionNumber
,
3839 IN ULONG PartitionType
);
3842 (FASTCALL
*pHalIoWritePartitionTable
)(
3843 IN PDEVICE_OBJECT DeviceObject
,
3844 IN ULONG SectorSize
,
3845 IN ULONG SectorsPerTrack
,
3846 IN ULONG NumberOfHeads
,
3847 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
3850 (NTAPI
*pHalQueryBusSlots
)(
3851 IN PBUS_HANDLER BusHandler
,
3852 IN ULONG BufferSize
,
3853 OUT PULONG SlotNumbers
,
3854 OUT PULONG ReturnedLength
);
3857 (NTAPI
*pHalInitPnpDriver
)(
3860 typedef struct _PM_DISPATCH_TABLE
{
3864 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
3867 (NTAPI
*pHalInitPowerManagement
)(
3868 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
3869 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
3871 typedef struct _DMA_ADAPTER
*
3872 (NTAPI
*pHalGetDmaAdapter
)(
3874 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
3875 OUT PULONG NumberOfMapRegisters
);
3878 (NTAPI
*pHalGetInterruptTranslator
)(
3879 IN INTERFACE_TYPE ParentInterfaceType
,
3880 IN ULONG ParentBusNumber
,
3881 IN INTERFACE_TYPE BridgeInterfaceType
,
3884 OUT PTRANSLATOR_INTERFACE Translator
,
3885 OUT PULONG BridgeBusNumber
);
3888 (NTAPI
*pHalStartMirroring
)(
3892 (NTAPI
*pHalEndMirroring
)(
3893 IN ULONG PassNumber
);
3896 (NTAPI
*pHalMirrorPhysicalMemory
)(
3897 IN PHYSICAL_ADDRESS PhysicalAddress
,
3898 IN LARGE_INTEGER NumberOfBytes
);
3901 (NTAPI
*pHalMirrorVerify
)(
3902 IN PHYSICAL_ADDRESS PhysicalAddress
,
3903 IN LARGE_INTEGER NumberOfBytes
);
3905 typedef struct _DEBUG_DEVICE_ADDRESS
{
3909 PUCHAR TranslatedAddress
;
3911 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
3913 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
3914 PHYSICAL_ADDRESS Start
;
3915 PHYSICAL_ADDRESS MaxEnd
;
3916 PVOID VirtualAddress
;
3920 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
3922 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
3931 BOOLEAN Initialized
;
3933 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
3934 DEBUG_MEMORY_REQUIREMENTS Memory
;
3935 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
3938 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
3939 IN PVOID LoaderBlock OPTIONAL
,
3940 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
3943 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
3944 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
3947 (NTAPI
*pKdGetAcpiTablePhase0
)(
3948 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
3949 IN ULONG Signature
);
3952 (NTAPI
*pKdCheckPowerButton
)(
3956 (NTAPI
*pHalEndOfBoot
)(
3959 #if (NTDDI_VERSION >= NTDDI_VISTA)
3961 (NTAPI
*pKdMapPhysicalMemory64
)(
3962 IN PHYSICAL_ADDRESS PhysicalAddress
,
3963 IN ULONG NumberPages
,
3964 IN BOOLEAN FlushCurrentTLB
);
3967 (NTAPI
*pKdUnmapVirtualAddress
)(
3968 IN PVOID VirtualAddress
,
3969 IN ULONG NumberPages
,
3970 IN BOOLEAN FlushCurrentTLB
);
3973 (NTAPI
*pKdMapPhysicalMemory64
)(
3974 IN PHYSICAL_ADDRESS PhysicalAddress
,
3975 IN ULONG NumberPages
);
3978 (NTAPI
*pKdUnmapVirtualAddress
)(
3979 IN PVOID VirtualAddress
,
3980 IN ULONG NumberPages
);
3984 (NTAPI
*pHalGetAcpiTable
)(
3986 IN PCSTR OemId OPTIONAL
,
3987 IN PCSTR OemTableId OPTIONAL
);
3990 (NTAPI
*pKdGetPciDataByOffset
)(
3992 IN ULONG SlotNumber
,
3998 (NTAPI
*pKdSetPciDataByOffset
)(
4000 IN ULONG SlotNumber
,
4007 (*pHalGetErrorCapList
)(
4008 IN OUT PULONG CapsListLength
,
4009 IN OUT PUCHAR ErrorCapList
);
4013 IN ULONG BufferLength
,
4018 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
4022 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
4023 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
4025 #if 1 /* Not present in WDK 7600 */
4027 (FASTCALL
*pHalIoAssignDriveLetters
)(
4028 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
4029 IN PSTRING NtDeviceName
,
4030 OUT PUCHAR NtSystemPath
,
4031 OUT PSTRING NtSystemPathString
);
4036 pHalQuerySystemInformation HalQuerySystemInformation
;
4037 pHalSetSystemInformation HalSetSystemInformation
;
4038 pHalQueryBusSlots HalQueryBusSlots
;
4040 pHalExamineMBR HalExamineMBR
;
4041 #if 1 /* Not present in WDK 7600 */
4042 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
4044 pHalIoReadPartitionTable HalIoReadPartitionTable
;
4045 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
4046 pHalIoWritePartitionTable HalIoWritePartitionTable
;
4047 pHalHandlerForBus HalReferenceHandlerForBus
;
4048 pHalReferenceBusHandler HalReferenceBusHandler
;
4049 pHalReferenceBusHandler HalDereferenceBusHandler
;
4050 pHalInitPnpDriver HalInitPnpDriver
;
4051 pHalInitPowerManagement HalInitPowerManagement
;
4052 pHalGetDmaAdapter HalGetDmaAdapter
;
4053 pHalGetInterruptTranslator HalGetInterruptTranslator
;
4054 pHalStartMirroring HalStartMirroring
;
4055 pHalEndMirroring HalEndMirroring
;
4056 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
4057 pHalEndOfBoot HalEndOfBoot
;
4058 pHalMirrorVerify HalMirrorVerify
;
4059 pHalGetAcpiTable HalGetCachedAcpiTable
;
4060 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
4062 pHalGetErrorCapList HalGetErrorCapList
;
4063 pHalInjectError HalInjectError
;
4065 } HAL_DISPATCH
, *PHAL_DISPATCH
;
4067 /* GCC/MSVC and WDK compatible declaration */
4068 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
4070 #if defined(_NTOSKRNL_) || defined(_BLDR_)
4071 #define HALDISPATCH (&HalDispatchTable)
4073 /* This is a WDK compatibility definition */
4074 #define HalDispatchTable (&HalDispatchTable)
4075 #define HALDISPATCH HalDispatchTable
4078 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
4079 #define HalDispatchTableVersion HALDISPATCH->Version
4080 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
4081 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
4082 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
4083 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
4084 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
4085 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
4086 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
4087 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
4088 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
4089 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
4090 #define HalStartMirroring HALDISPATCH->HalStartMirroring
4091 #define HalEndMirroring HALDISPATCH->HalEndMirroring
4092 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
4093 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
4094 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
4095 #define HalGetCachedAcpiTable HALDISPATCH->HalGetCachedAcpiTable
4096 #define HalSetPciErrorHandlerCallback HALDISPATCH->HalSetPciErrorHandlerCallback
4098 #define HalGetErrorCapList HALDISPATCH->HalGetErrorCapList
4099 #define HalInjectError HALDISPATCH->HalInjectError
4102 typedef struct _HAL_BUS_INFORMATION
{
4103 INTERFACE_TYPE BusType
;
4104 BUS_DATA_TYPE ConfigurationType
;
4107 } HAL_BUS_INFORMATION
, *PHAL_BUS_INFORMATION
;
4109 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
4110 KPROFILE_SOURCE Source
;
4113 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
4115 typedef struct _HAL_PROFILE_SOURCE_INFORMATION_EX
{
4116 KPROFILE_SOURCE Source
;
4119 ULONG_PTR DefInterval
;
4120 ULONG_PTR MaxInterval
;
4121 ULONG_PTR MinInterval
;
4122 } HAL_PROFILE_SOURCE_INFORMATION_EX
, *PHAL_PROFILE_SOURCE_INFORMATION_EX
;
4124 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
4125 KPROFILE_SOURCE Source
;
4127 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
4129 typedef struct _HAL_PROFILE_SOURCE_LIST
{
4130 KPROFILE_SOURCE Source
;
4132 } HAL_PROFILE_SOURCE_LIST
, *PHAL_PROFILE_SOURCE_LIST
;
4134 typedef enum _HAL_DISPLAY_BIOS_INFORMATION
{
4135 HalDisplayInt10Bios
,
4136 HalDisplayEmulatedBios
,
4138 } HAL_DISPLAY_BIOS_INFORMATION
, *PHAL_DISPLAY_BIOS_INFORMATION
;
4140 typedef struct _HAL_POWER_INFORMATION
{
4142 } HAL_POWER_INFORMATION
, *PHAL_POWER_INFORMATION
;
4144 typedef struct _HAL_PROCESSOR_SPEED_INFO
{
4145 ULONG ProcessorSpeed
;
4146 } HAL_PROCESSOR_SPEED_INFORMATION
, *PHAL_PROCESSOR_SPEED_INFORMATION
;
4148 typedef struct _HAL_CALLBACKS
{
4149 PCALLBACK_OBJECT SetSystemInformation
;
4150 PCALLBACK_OBJECT BusCheck
;
4151 } HAL_CALLBACKS
, *PHAL_CALLBACKS
;
4153 typedef struct _HAL_PROCESSOR_FEATURE
{
4154 ULONG UsableFeatureBits
;
4155 } HAL_PROCESSOR_FEATURE
;
4158 (NTAPI
*PHALIOREADWRITEHANDLER
)(
4162 IN OUT PULONG pdwData
);
4164 typedef struct _HAL_AMLI_BAD_IO_ADDRESS_LIST
{
4167 ULONG OSVersionTrigger
;
4168 PHALIOREADWRITEHANDLER IOHandler
;
4169 } HAL_AMLI_BAD_IO_ADDRESS_LIST
, *PHAL_AMLI_BAD_IO_ADDRESS_LIST
;
4171 #if defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
4174 (NTAPI
*PHALMCAINTERFACELOCK
)(
4178 (NTAPI
*PHALMCAINTERFACEUNLOCK
)(
4182 (NTAPI
*PHALMCAINTERFACEREADREGISTER
)(
4183 IN UCHAR BankNumber
,
4184 IN OUT PVOID Exception
);
4186 typedef struct _HAL_MCA_INTERFACE
{
4187 PHALMCAINTERFACELOCK Lock
;
4188 PHALMCAINTERFACEUNLOCK Unlock
;
4189 PHALMCAINTERFACEREADREGISTER ReadRegister
;
4190 } HAL_MCA_INTERFACE
;
4193 ApicDestinationModePhysical
= 1,
4194 ApicDestinationModeLogicalFlat
,
4195 ApicDestinationModeLogicalClustered
,
4196 ApicDestinationModeUnknown
4197 } HAL_APIC_DESTINATION_MODE
, *PHAL_APIC_DESTINATION_MODE
;
4199 #if defined(_AMD64_)
4201 struct _KTRAP_FRAME
;
4202 struct _KEXCEPTION_FRAME
;
4204 typedef ERROR_SEVERITY
4205 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
4207 IN
struct _KTRAP_FRAME
*TrapFrame
,
4208 IN
struct _KEXCEPTION_FRAME
*ExceptionFrame
,
4209 IN PMCA_EXCEPTION Exception
);
4213 #if defined(_X86_) || defined(_IA64_)
4220 (NTAPI
*PDRIVER_EXCPTN_CALLBACK
)(
4222 IN PMCA_EXCEPTION BankLog
);
4225 typedef PDRIVER_EXCPTN_CALLBACK PDRIVER_MCA_EXCEPTION_CALLBACK
;
4227 typedef struct _MCA_DRIVER_INFO
{
4228 PDRIVER_MCA_EXCEPTION_CALLBACK ExceptionCallback
;
4229 PKDEFERRED_ROUTINE DpcCallback
;
4230 PVOID DeviceContext
;
4231 } MCA_DRIVER_INFO
, *PMCA_DRIVER_INFO
;
4233 typedef struct _HAL_ERROR_INFO
{
4237 ULONG McaPreviousEventsCount
;
4238 ULONG McaCorrectedEventsCount
;
4239 ULONG McaKernelDeliveryFails
;
4240 ULONG McaDriverDpcQueueFails
;
4243 ULONG CmcPollingInterval
;
4244 ULONG CmcInterruptsCount
;
4245 ULONG CmcKernelDeliveryFails
;
4246 ULONG CmcDriverDpcQueueFails
;
4247 ULONG CmcGetStateFails
;
4248 ULONG CmcClearStateFails
;
4252 ULONG CpePollingInterval
;
4253 ULONG CpeInterruptsCount
;
4254 ULONG CpeKernelDeliveryFails
;
4255 ULONG CpeDriverDpcQueueFails
;
4256 ULONG CpeGetStateFails
;
4257 ULONG CpeClearStateFails
;
4258 ULONG CpeInterruptSources
;
4260 ULONGLONG KernelReserved
[4];
4261 } HAL_ERROR_INFO
, *PHAL_ERROR_INFO
;
4263 #define HAL_MCE_INTERRUPTS_BASED ((ULONG)-1)
4264 #define HAL_MCE_DISABLED ((ULONG)0)
4266 #define HAL_CMC_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
4267 #define HAL_CMC_DISABLED HAL_MCE_DISABLED
4269 #define HAL_CPE_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
4270 #define HAL_CPE_DISABLED HAL_MCE_DISABLED
4272 #define HAL_MCA_INTERRUPTS_BASED HAL_MCE_INTERRUPTS_BASED
4273 #define HAL_MCA_DISABLED HAL_MCE_DISABLED
4276 (NTAPI
*PDRIVER_CMC_EXCEPTION_CALLBACK
)(
4278 IN PCMC_EXCEPTION CmcLog
);
4281 (NTAPI
*PDRIVER_CPE_EXCEPTION_CALLBACK
)(
4283 IN PCPE_EXCEPTION CmcLog
);
4285 typedef struct _CMC_DRIVER_INFO
{
4286 PDRIVER_CMC_EXCEPTION_CALLBACK ExceptionCallback
;
4287 PKDEFERRED_ROUTINE DpcCallback
;
4288 PVOID DeviceContext
;
4289 } CMC_DRIVER_INFO
, *PCMC_DRIVER_INFO
;
4291 typedef struct _CPE_DRIVER_INFO
{
4292 PDRIVER_CPE_EXCEPTION_CALLBACK ExceptionCallback
;
4293 PKDEFERRED_ROUTINE DpcCallback
;
4294 PVOID DeviceContext
;
4295 } CPE_DRIVER_INFO
, *PCPE_DRIVER_INFO
;
4297 #endif // defined(_X86_) || defined(_IA64_) || defined(_AMD64_)
4302 (*HALSENDCROSSPARTITIONIPI
)(
4303 IN USHORT ProcessorID
,
4304 IN UCHAR HardwareVector
);
4307 (*HALRESERVECROSSPARTITIONINTERRUPTVECTOR
)(
4310 IN OUT PGROUP_AFFINITY Affinity
,
4311 OUT PUCHAR HardwareVector
);
4314 (*HALFREECROSSPARTITIONINTERRUPTVECTOR
)(
4316 IN PGROUP_AFFINITY Affinity
);
4318 typedef struct _HAL_CROSS_PARTITION_IPI_INTERFACE
{
4319 HALSENDCROSSPARTITIONIPI HalSendCrossPartitionIpi
;
4320 HALRESERVECROSSPARTITIONINTERRUPTVECTOR HalReserveCrossPartitionInterruptVector
;
4321 HALFREECROSSPARTITIONINTERRUPTVECTOR HalFreeCrossPartitionInterruptVector
;
4322 } HAL_CROSS_PARTITION_IPI_INTERFACE
;
4324 #define HAL_CROSS_PARTITION_IPI_INTERFACE_MINIMUM_SIZE \
4325 FIELD_OFFSET(HAL_CROSS_PARTITION_IPI_INTERFACE, \
4326 HalFreeCrossPartitionInterruptVector)
4328 #endif /* defined(_IA64_) */
4330 typedef struct _HAL_PLATFORM_INFORMATION
{
4331 ULONG PlatformFlags
;
4332 } HAL_PLATFORM_INFORMATION
, *PHAL_PLATFORM_INFORMATION
;
4334 #define HAL_PLATFORM_DISABLE_WRITE_COMBINING 0x01L
4335 #define HAL_PLATFORM_DISABLE_PTCG 0x04L
4336 #define HAL_PLATFORM_DISABLE_UC_MAIN_MEMORY 0x08L
4337 #define HAL_PLATFORM_ENABLE_WRITE_COMBINING_MMIO 0x10L
4338 #define HAL_PLATFORM_ACPI_TABLES_CACHED 0x20L
4342 #ifndef USE_DMA_MACROS
4343 #define USE_DMA_MACROS
4346 #ifndef NO_LEGACY_DRIVERS
4347 #define NO_LEGACY_DRIVERS
4350 #endif /* defined(_WIN64) */
4352 typedef enum _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
{
4353 ResourceTypeSingle
= 0,
4355 ResourceTypeExtendedCounterConfiguration
,
4356 ResourceTypeOverflow
,
4358 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE
;
4360 typedef struct _PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
{
4361 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR_TYPE Type
;
4365 ULONG ExtendedRegisterAddress
;
4371 } PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
, *PPHYSICAL_COUNTER_RESOURCE_DESCRIPTOR
;
4373 typedef struct _PHYSICAL_COUNTER_RESOURCE_LIST
{
4375 PHYSICAL_COUNTER_RESOURCE_DESCRIPTOR Descriptors
[ANYSIZE_ARRAY
];
4376 } PHYSICAL_COUNTER_RESOURCE_LIST
, *PPHYSICAL_COUNTER_RESOURCE_LIST
;
4378 /* Hardware Abstraction Layer Functions */
4382 HalFreeHardwareCounters(
4383 IN HANDLE CounterSetHandle
);
4385 #if !defined(NO_LEGACY_DRIVERS)
4387 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4392 HalAssignSlotResources(
4393 IN PUNICODE_STRING RegistryPath
,
4394 IN PUNICODE_STRING DriverClassName
,
4395 IN PDRIVER_OBJECT DriverObject
,
4396 IN PDEVICE_OBJECT DeviceObject
,
4397 IN INTERFACE_TYPE BusType
,
4399 IN ULONG SlotNumber
,
4400 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
4405 HalGetInterruptVector(
4406 IN INTERFACE_TYPE InterfaceType
,
4408 IN ULONG BusInterruptLevel
,
4409 IN ULONG BusInterruptVector
,
4411 OUT PKAFFINITY Affinity
);
4417 IN BUS_DATA_TYPE BusDataType
,
4419 IN ULONG SlotNumber
,
4427 IN BUS_DATA_TYPE BusDataType
,
4429 IN ULONG SlotNumber
,
4437 IN ULONG Frequency
);
4441 #endif /* !defined(NO_LEGACY_DRIVERS) */
4443 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
4447 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4448 //DECLSPEC_DEPRECATED_DDK
4452 IoFreeAdapterChannel(
4453 IN PADAPTER_OBJECT AdapterObject
);
4455 //DECLSPEC_DEPRECATED_DDK
4459 IoFlushAdapterBuffers(
4460 IN PADAPTER_OBJECT AdapterObject
,
4462 IN PVOID MapRegisterBase
,
4465 IN BOOLEAN WriteToDevice
);
4467 //DECLSPEC_DEPRECATED_DDK
4472 IN PADAPTER_OBJECT AdapterObject
,
4473 IN PVOID MapRegisterBase
,
4474 IN ULONG NumberOfMapRegisters
);
4476 //DECLSPEC_DEPRECATED_DDK
4480 HalAllocateCommonBuffer(
4481 IN PADAPTER_OBJECT AdapterObject
,
4483 OUT PPHYSICAL_ADDRESS LogicalAddress
,
4484 IN BOOLEAN CacheEnabled
);
4486 //DECLSPEC_DEPRECATED_DDK
4490 HalFreeCommonBuffer(
4491 IN PADAPTER_OBJECT AdapterObject
,
4493 IN PHYSICAL_ADDRESS LogicalAddress
,
4494 IN PVOID VirtualAddress
,
4495 IN BOOLEAN CacheEnabled
);
4497 //DECLSPEC_DEPRECATED_DDK
4502 IN PADAPTER_OBJECT AdapterObject
);
4507 HalAllocateAdapterChannel(
4508 IN PADAPTER_OBJECT AdapterObject
,
4509 IN PWAIT_CONTEXT_BLOCK Wcb
,
4510 IN ULONG NumberOfMapRegisters
,
4511 IN PDRIVER_CONTROL ExecutionRoutine
);
4513 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4515 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
4517 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4523 IN PDEVICE_DESCRIPTION DeviceDescription
,
4524 OUT PULONG NumberOfMapRegisters
);
4529 IN PADAPTER_OBJECT DmaAdapter
);
4534 HalAcquireDisplayOwnership(
4535 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
4540 HalGetBusDataByOffset(
4541 IN BUS_DATA_TYPE BusDataType
,
4543 IN ULONG SlotNumber
,
4551 HalSetBusDataByOffset(
4552 IN BUS_DATA_TYPE BusDataType
,
4554 IN ULONG SlotNumber
,
4562 HalTranslateBusAddress(
4563 IN INTERFACE_TYPE InterfaceType
,
4565 IN PHYSICAL_ADDRESS BusAddress
,
4566 IN OUT PULONG AddressSpace
,
4567 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4572 HalAllocateCrashDumpRegisters(
4573 IN PADAPTER_OBJECT AdapterObject
,
4574 IN OUT PULONG NumberOfMapRegisters
);
4578 HalGetScatterGatherList(
4579 IN PADAPTER_OBJECT DmaAdapter
,
4580 IN PDEVICE_OBJECT DeviceObject
,
4584 IN PDRIVER_LIST_CONTROL ExecutionRoutine
,
4586 IN BOOLEAN WriteToDevice
);
4590 HalPutScatterGatherList(
4591 IN PADAPTER_OBJECT DmaAdapter
,
4592 IN PSCATTER_GATHER_LIST ScatterGather
,
4593 IN BOOLEAN WriteToDevice
);
4595 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
4597 #if (NTDDI_VERSION >= NTDDI_WINXP)
4602 IN PDEVICE_OBJECT DeviceObject
,
4603 IN ULONG SectorSize
,
4604 IN ULONG MBRTypeIdentifier
,
4608 #if (NTDDI_VERSION >= NTDDI_WIN7)
4611 HalAllocateHardwareCounters(
4612 IN PGROUP_AFFINITY GroupAffinty
,
4613 IN ULONG GroupCount
,
4614 IN PPHYSICAL_COUNTER_RESOURCE_LIST ResourceList
,
4615 OUT PHANDLE CounterSetHandle
);
4621 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4625 HalGetDmaAlignmentRequirement(VOID
);
4627 #endif /* defined(_IA64_) */
4629 #if defined(_M_IX86) || defined(_M_AMD64)
4630 #define HalGetDmaAlignmentRequirement() 1L
4633 #if (NTDDI_VERSION >= NTDDI_WIN7)
4635 typedef struct _WHEA_ERROR_SOURCE_DESCRIPTOR
*PWHEA_ERROR_SOURCE_DESCRIPTOR
;
4636 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
4642 IN PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource
,
4643 IN PWHEA_ERROR_RECORD ErrorRecord
);
4647 typedef struct _WHEA_ERROR_RECORD
*PWHEA_ERROR_RECORD
;
4653 IN PWHEA_ERROR_RECORD ErrorRecord
);
4655 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4660 #ifndef GUID_DEFINED
4661 #include <guiddef.h>
4664 typedef struct _MAP_REGISTER_ENTRY
{
4666 BOOLEAN WriteToDevice
;
4667 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
4670 (NTAPI
*pHalTranslateBusAddress
)(
4671 IN INTERFACE_TYPE InterfaceType
,
4673 IN PHYSICAL_ADDRESS BusAddress
,
4674 IN OUT PULONG AddressSpace
,
4675 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4678 (NTAPI
*pHalAssignSlotResources
)(
4679 IN PUNICODE_STRING RegistryPath
,
4680 IN PUNICODE_STRING DriverClassName OPTIONAL
,
4681 IN PDRIVER_OBJECT DriverObject
,
4682 IN PDEVICE_OBJECT DeviceObject
,
4683 IN INTERFACE_TYPE BusType
,
4685 IN ULONG SlotNumber
,
4686 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
4689 (NTAPI
*pHalHaltSystem
)(
4693 (NTAPI
*pHalResetDisplay
)(
4697 (NTAPI
*pHalVectorToIDTEntry
)(
4701 (NTAPI
*pHalFindBusAddressTranslation
)(
4702 IN PHYSICAL_ADDRESS BusAddress
,
4703 IN OUT PULONG AddressSpace
,
4704 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
4705 IN OUT PULONG_PTR Context
,
4706 IN BOOLEAN NextBus
);
4708 extern NTKERNELAPI PVOID MmHighestUserAddress
;
4709 extern NTKERNELAPI PVOID MmSystemRangeStart
;
4710 extern NTKERNELAPI ULONG MmUserProbeAddress
;
4715 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
4716 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
4717 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
4718 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
4719 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
4721 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
4723 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
4724 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
4725 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
4726 #if !defined (_X86PAE_)
4727 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
4729 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
4732 #define KeGetPcr() PCR
4734 #define PCR_MINOR_VERSION 1
4735 #define PCR_MAJOR_VERSION 1
4737 typedef struct _KPCR
{
4741 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
4742 PVOID Used_StackBase
;
4745 ULONG ContextSwitches
;
4746 KAFFINITY SetMemberCopy
;
4750 struct _KPCR
*SelfPcr
;
4751 struct _KPRCB
*Prcb
;
4756 PVOID KdVersionBlock
;
4757 struct _KIDTENTRY
*IDT
;
4758 struct _KGDTENTRY
*GDT
;
4760 USHORT MajorVersion
;
4761 USHORT MinorVersion
;
4762 KAFFINITY SetMember
;
4763 ULONG StallScaleFactor
;
4767 UCHAR SecondLevelCacheAssociativity
;
4769 ULONG KernelReserved
[14];
4770 ULONG SecondLevelCacheSize
;
4771 ULONG HalReserved
[16];
4776 KeGetCurrentProcessorNumber(VOID
)
4778 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
4785 #define PTI_SHIFT 12L
4786 #define PDI_SHIFT 21L
4787 #define PPI_SHIFT 30L
4788 #define PXI_SHIFT 39L
4789 #define PTE_PER_PAGE 512
4790 #define PDE_PER_PAGE 512
4791 #define PPE_PER_PAGE 512
4792 #define PXE_PER_PAGE 512
4793 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
4794 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
4795 #define PPI_MASK (PPE_PER_PAGE - 1)
4796 #define PXI_MASK (PXE_PER_PAGE - 1)
4798 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
4799 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
4800 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
4801 #define PDE_BASE 0xFFFFF6FB40000000ULL
4802 #define PTE_BASE 0xFFFFF68000000000ULL
4803 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
4804 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
4805 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
4806 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
4808 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
4809 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
4810 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
4811 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
4812 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
4813 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
4815 typedef struct _KPCR
4817 _ANONYMOUS_UNION
union
4820 _ANONYMOUS_STRUCT
struct
4822 union _KGDTENTRY64
*GdtBase
;
4823 struct _KTSS64
*TssBase
;
4826 struct _KPRCB
*CurrentPrcb
;
4827 PKSPIN_LOCK_QUEUE LockArray
;
4831 union _KIDTENTRY64
*IdtBase
;
4834 UCHAR SecondLevelCacheAssociativity
;
4835 UCHAR ObsoleteNumber
;
4838 USHORT MajorVersion
;
4839 USHORT MinorVersion
;
4840 ULONG StallScaleFactor
;
4842 ULONG KernelReserved
[15];
4843 ULONG SecondLevelCacheSize
;
4844 ULONG HalReserved
[16];
4846 PVOID KdVersionBlock
;
4848 ULONG PcrAlign1
[24];
4855 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
4860 KeGetCurrentProcessorNumber(VOID
)
4862 return (ULONG
)__readgsword(0x184);
4865 #endif /* _AMD64_ */
4867 typedef enum _INTERLOCKED_RESULT
{
4868 ResultNegative
= RESULT_NEGATIVE
,
4869 ResultZero
= RESULT_ZERO
,
4870 ResultPositive
= RESULT_POSITIVE
4871 } INTERLOCKED_RESULT
;
4878 Exfi386InterlockedIncrementLong(
4879 IN OUT LONG
volatile *Addend
);
4884 Exfi386InterlockedDecrementLong(
4890 Exfi386InterlockedExchangeUlong(
4896 /** Filesystem runtime library routines **/
4898 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4902 FsRtlIsTotalDeviceFailure(
4903 IN NTSTATUS Status
);
4906 /* Hardware Abstraction Layer Types */
4909 (NTAPI
*PciPin2Line
)(
4910 IN
struct _BUS_HANDLER
*BusHandler
,
4911 IN
struct _BUS_HANDLER
*RootHandler
,
4912 IN PCI_SLOT_NUMBER SlotNumber
,
4913 IN PPCI_COMMON_CONFIG PciData
);
4916 (NTAPI
*PciLine2Pin
)(
4917 IN
struct _BUS_HANDLER
*BusHandler
,
4918 IN
struct _BUS_HANDLER
*RootHandler
,
4919 IN PCI_SLOT_NUMBER SlotNumber
,
4920 IN PPCI_COMMON_CONFIG PciNewData
,
4921 IN PPCI_COMMON_CONFIG PciOldData
);
4924 (NTAPI
*PciReadWriteConfig
)(
4925 IN
struct _BUS_HANDLER
*BusHandler
,
4926 IN PCI_SLOT_NUMBER Slot
,
4931 #define PCI_DATA_TAG ' ICP'
4932 #define PCI_DATA_VERSION 1
4934 typedef struct _PCIBUSDATA
{
4937 PciReadWriteConfig ReadConfig
;
4938 PciReadWriteConfig WriteConfig
;
4939 PciPin2Line Pin2Line
;
4940 PciLine2Pin Line2Pin
;
4941 PCI_SLOT_NUMBER ParentSlot
;
4943 } PCIBUSDATA
, *PPCIBUSDATA
;
4945 /* ZwXxx Functions */
4947 #if (NTDDI_VERSION >= NTDDI_WIN2K)
4952 IN HANDLE TimerHandle
,
4953 OUT PBOOLEAN CurrentState OPTIONAL
);
4958 OUT PHANDLE TimerHandle
,
4959 IN ACCESS_MASK DesiredAccess
,
4960 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
4961 IN TIMER_TYPE TimerType
);
4966 OUT PHANDLE TimerHandle
,
4967 IN ACCESS_MASK DesiredAccess
,
4968 IN POBJECT_ATTRIBUTES ObjectAttributes
);
4973 ZwSetInformationThread(
4974 IN HANDLE ThreadHandle
,
4975 IN THREADINFOCLASS ThreadInformationClass
,
4976 IN PVOID ThreadInformation
,
4977 IN ULONG ThreadInformationLength
);
4982 IN HANDLE TimerHandle
,
4983 IN PLARGE_INTEGER DueTime
,
4984 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
4985 IN PVOID TimerContext OPTIONAL
,
4986 IN BOOLEAN ResumeTimer
,
4987 IN LONG Period OPTIONAL
,
4988 OUT PBOOLEAN PreviousState OPTIONAL
);
4996 IN PUNICODE_STRING String
4999 #if (VER_PRODUCTBUILD >= 2195)
5004 ZwPowerInformation (
5005 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
5006 IN PVOID InputBuffer OPTIONAL
,
5007 IN ULONG InputBufferLength
,
5008 OUT PVOID OutputBuffer OPTIONAL
,
5009 IN ULONG OutputBufferLength
5012 #endif /* (VER_PRODUCTBUILD >= 2195) */
5017 ZwTerminateProcess (
5018 IN HANDLE ProcessHandle OPTIONAL
,
5019 IN NTSTATUS ExitStatus
5026 OUT PHANDLE ProcessHandle
,
5027 IN ACCESS_MASK DesiredAccess
,
5028 IN POBJECT_ATTRIBUTES ObjectAttributes
,
5029 IN PCLIENT_ID ClientId OPTIONAL
5035 ZwQueryVolumeInformationFile(
5036 IN HANDLE FileHandle
,
5037 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5038 OUT PVOID FsInformation
,
5040 IN FS_INFORMATION_CLASS FsInformationClass
);
5045 ZwDeviceIoControlFile(
5046 IN HANDLE FileHandle
,
5047 IN HANDLE Event OPTIONAL
,
5048 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
5049 IN PVOID ApcContext OPTIONAL
,
5050 OUT PIO_STATUS_BLOCK IoStatusBlock
,
5051 IN ULONG IoControlCode
,
5052 IN PVOID InputBuffer OPTIONAL
,
5053 IN ULONG InputBufferLength
,
5054 OUT PVOID OutputBuffer OPTIONAL
,
5055 IN ULONG OutputBufferLength
);