4 * Windows Device Driver Kit
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
11 * THIS SOFTWARE IS NOT COPYRIGHTED
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
22 * DBG - Debugging enabled/disabled (0/1)
23 * POOL_TAGGING - Enable pool tagging
24 * _X86_ - X86 environment
31 #if !defined(_NTHAL_) && !defined(_NTIFS_)
32 #define _NTDDK_INCLUDED_
39 #define _CTYPE_DISABLE_MACROS
51 #include <stdarg.h> // FIXME
52 #include <basetyps.h> // FIXME
59 typedef struct _BUS_HANDLER
*PBUS_HANDLER
;
60 typedef struct _CALLBACK_OBJECT
*PCALLBACK_OBJECT
;
61 typedef struct _DEVICE_HANDLER_OBJECT
*PDEVICE_HANDLER_OBJECT
;
62 #if defined(_NTHAL_INCLUDED_)
63 typedef struct _KPROCESS
*PEPROCESS
;
64 typedef struct _ETHREAD
*PETHREAD
;
65 typedef struct _KAFFINITY_EX
*PKAFFINITY_EX
;
66 #elif defined(_NTIFS_INCLUDED_)
67 typedef struct _KPROCESS
*PEPROCESS
;
68 typedef struct _KTHREAD
*PETHREAD
;
70 typedef struct _EPROCESS
*PEPROCESS
;
71 typedef struct _ETHREAD
*PETHREAD
;
73 typedef struct _IO_TIMER
*PIO_TIMER
;
74 typedef struct _KINTERRUPT
*PKINTERRUPT
;
75 typedef struct _KTHREAD
*PKTHREAD
, *PRKTHREAD
;
76 typedef struct _OBJECT_TYPE
*POBJECT_TYPE
;
77 typedef struct _PEB
*PPEB
;
78 typedef struct _IMAGE_NT_HEADERS
*PIMAGE_NT_HEADERS32
;
79 typedef struct _IMAGE_NT_HEADERS64
*PIMAGE_NT_HEADERS64
;
82 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
84 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
87 #define PsGetCurrentProcess IoGetCurrentProcess
89 #if (NTDDI_VERSION >= NTDDI_VISTA)
90 extern NTSYSAPI
volatile CCHAR KeNumberProcessors
;
91 #elif (NTDDI_VERSION >= NTDDI_WINXP)
92 extern NTSYSAPI CCHAR KeNumberProcessors
;
94 extern PCCHAR KeNumberProcessors
;
103 #define KERNEL_STACK_SIZE 12288
104 #define KERNEL_LARGE_STACK_SIZE 61440
105 #define KERNEL_LARGE_STACK_COMMIT 12288
107 #define SIZE_OF_80387_REGISTERS 80
109 #if !defined(RC_INVOKED)
111 #define CONTEXT_i386 0x10000
112 #define CONTEXT_i486 0x10000
113 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
114 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
115 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
116 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
117 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
118 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
120 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
121 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
122 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
123 CONTEXT_EXTENDED_REGISTERS)
125 #define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
127 #endif /* !defined(RC_INVOKED) */
129 typedef struct _FLOATING_SAVE_AREA
{
137 UCHAR RegisterArea
[SIZE_OF_80387_REGISTERS
];
139 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
141 #include "pshpack4.h"
142 typedef struct _CONTEXT
{
150 FLOATING_SAVE_AREA FloatSave
;
167 UCHAR ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
168 } CONTEXT
, *PCONTEXT
;
175 #define KERNEL_STACK_SIZE 0x6000
176 #define KERNEL_LARGE_STACK_SIZE 0x12000
177 #define KERNEL_LARGE_STACK_COMMIT KERNEL_STACK_SIZE
179 #define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x2000
181 #define EXCEPTION_READ_FAULT 0
182 #define EXCEPTION_WRITE_FAULT 1
183 #define EXCEPTION_EXECUTE_FAULT 8
185 #if !defined(RC_INVOKED)
187 #define CONTEXT_AMD64 0x100000
189 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
190 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
191 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
192 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
193 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
195 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
196 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
198 #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x20L)
200 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
201 #define CONTEXT_SERVICE_ACTIVE 0x10000000
202 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
203 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
205 #endif /* !defined(RC_INVOKED) */
207 #define INITIAL_MXCSR 0x1f80
208 #define INITIAL_FPCSR 0x027f
210 typedef struct DECLSPEC_ALIGN(16) _CONTEXT
{
250 XMM_SAVE_AREA32 FltSave
;
272 M128A VectorRegister
[26];
273 ULONG64 VectorControl
;
274 ULONG64 DebugControl
;
275 ULONG64 LastBranchToRip
;
276 ULONG64 LastBranchFromRip
;
277 ULONG64 LastExceptionToRip
;
278 ULONG64 LastExceptionFromRip
;
279 } CONTEXT
, *PCONTEXT
;
283 typedef enum _WELL_KNOWN_SID_TYPE
{
287 WinCreatorOwnerSid
= 3,
288 WinCreatorGroupSid
= 4,
289 WinCreatorOwnerServerSid
= 5,
290 WinCreatorGroupServerSid
= 6,
291 WinNtAuthoritySid
= 7,
295 WinInteractiveSid
= 11,
297 WinAnonymousSid
= 13,
299 WinEnterpriseControllersSid
= 15,
301 WinAuthenticatedUserSid
= 17,
302 WinRestrictedCodeSid
= 18,
303 WinTerminalServerSid
= 19,
304 WinRemoteLogonIdSid
= 20,
306 WinLocalSystemSid
= 22,
307 WinLocalServiceSid
= 23,
308 WinNetworkServiceSid
= 24,
309 WinBuiltinDomainSid
= 25,
310 WinBuiltinAdministratorsSid
= 26,
311 WinBuiltinUsersSid
= 27,
312 WinBuiltinGuestsSid
= 28,
313 WinBuiltinPowerUsersSid
= 29,
314 WinBuiltinAccountOperatorsSid
= 30,
315 WinBuiltinSystemOperatorsSid
= 31,
316 WinBuiltinPrintOperatorsSid
= 32,
317 WinBuiltinBackupOperatorsSid
= 33,
318 WinBuiltinReplicatorSid
= 34,
319 WinBuiltinPreWindows2000CompatibleAccessSid
= 35,
320 WinBuiltinRemoteDesktopUsersSid
= 36,
321 WinBuiltinNetworkConfigurationOperatorsSid
= 37,
322 WinAccountAdministratorSid
= 38,
323 WinAccountGuestSid
= 39,
324 WinAccountKrbtgtSid
= 40,
325 WinAccountDomainAdminsSid
= 41,
326 WinAccountDomainUsersSid
= 42,
327 WinAccountDomainGuestsSid
= 43,
328 WinAccountComputersSid
= 44,
329 WinAccountControllersSid
= 45,
330 WinAccountCertAdminsSid
= 46,
331 WinAccountSchemaAdminsSid
= 47,
332 WinAccountEnterpriseAdminsSid
= 48,
333 WinAccountPolicyAdminsSid
= 49,
334 WinAccountRasAndIasServersSid
= 50,
335 WinNTLMAuthenticationSid
= 51,
336 WinDigestAuthenticationSid
= 52,
337 WinSChannelAuthenticationSid
= 53,
338 WinThisOrganizationSid
= 54,
339 WinOtherOrganizationSid
= 55,
340 WinBuiltinIncomingForestTrustBuildersSid
= 56,
341 WinBuiltinPerfMonitoringUsersSid
= 57,
342 WinBuiltinPerfLoggingUsersSid
= 58,
343 WinBuiltinAuthorizationAccessSid
= 59,
344 WinBuiltinTerminalServerLicenseServersSid
= 60,
345 WinBuiltinDCOMUsersSid
= 61,
346 WinBuiltinIUsersSid
= 62,
348 WinBuiltinCryptoOperatorsSid
= 64,
349 WinUntrustedLabelSid
= 65,
351 WinMediumLabelSid
= 67,
352 WinHighLabelSid
= 68,
353 WinSystemLabelSid
= 69,
354 WinWriteRestrictedCodeSid
= 70,
355 WinCreatorOwnerRightsSid
= 71,
356 WinCacheablePrincipalsGroupSid
= 72,
357 WinNonCacheablePrincipalsGroupSid
= 73,
358 WinEnterpriseReadonlyControllersSid
= 74,
359 WinAccountReadonlyControllersSid
= 75,
360 WinBuiltinEventLogReadersGroup
= 76,
361 WinNewEnterpriseReadonlyControllersSid
= 77,
362 WinBuiltinCertSvcDComAccessGroup
= 78,
363 WinMediumPlusLabelSid
= 79,
364 WinLocalLogonSid
= 80,
365 WinConsoleLogonSid
= 81,
366 WinThisOrganizationCertificateSid
= 82,
367 } WELL_KNOWN_SID_TYPE
;
369 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6
371 #ifndef _RTL_RUN_ONCE_DEF
372 #define _RTL_RUN_ONCE_DEF
374 #define RTL_RUN_ONCE_INIT {0}
376 #define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
377 #define RTL_RUN_ONCE_ASYNC 0x00000002UL
378 #define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
380 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
382 typedef union _RTL_RUN_ONCE
{
384 } RTL_RUN_ONCE
, *PRTL_RUN_ONCE
;
386 typedef ULONG
/* LOGICAL */
387 (NTAPI
*PRTL_RUN_ONCE_INIT_FN
) (
388 IN OUT PRTL_RUN_ONCE RunOnce
,
389 IN OUT PVOID Parameter OPTIONAL
,
390 IN OUT PVOID
*Context OPTIONAL
);
392 #endif /* _RTL_RUN_ONCE_DEF */
394 typedef enum _TABLE_SEARCH_RESULT
{
399 } TABLE_SEARCH_RESULT
;
401 typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
405 } RTL_GENERIC_COMPARE_RESULTS
;
408 struct _RTL_AVL_TABLE
;
410 typedef RTL_GENERIC_COMPARE_RESULTS
411 (NTAPI
*PRTL_AVL_COMPARE_ROUTINE
) (
412 IN
struct _RTL_AVL_TABLE
*Table
,
413 IN PVOID FirstStruct
,
414 IN PVOID SecondStruct
);
417 (NTAPI
*PRTL_AVL_ALLOCATE_ROUTINE
) (
418 IN
struct _RTL_AVL_TABLE
*Table
,
422 (NTAPI
*PRTL_AVL_FREE_ROUTINE
) (
423 IN
struct _RTL_AVL_TABLE
*Table
,
427 (NTAPI
*PRTL_AVL_MATCH_FUNCTION
) (
428 IN
struct _RTL_AVL_TABLE
*Table
,
432 typedef struct _RTL_BALANCED_LINKS
{
433 struct _RTL_BALANCED_LINKS
*Parent
;
434 struct _RTL_BALANCED_LINKS
*LeftChild
;
435 struct _RTL_BALANCED_LINKS
*RightChild
;
438 } RTL_BALANCED_LINKS
, *PRTL_BALANCED_LINKS
;
440 typedef struct _RTL_AVL_TABLE
{
441 RTL_BALANCED_LINKS BalancedRoot
;
442 PVOID OrderedPointer
;
443 ULONG WhichOrderedElement
;
444 ULONG NumberGenericTableElements
;
446 PRTL_BALANCED_LINKS RestartKey
;
448 PRTL_AVL_COMPARE_ROUTINE CompareRoutine
;
449 PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
;
450 PRTL_AVL_FREE_ROUTINE FreeRoutine
;
452 } RTL_AVL_TABLE
, *PRTL_AVL_TABLE
;
454 #ifdef RTL_USE_AVL_TABLES
456 #undef PRTL_GENERIC_COMPARE_ROUTINE
457 #undef RTL_GENERIC_COMPARE_ROUTINE
458 #undef PRTL_GENERIC_ALLOCATE_ROUTINE
459 #undef RTL_GENERIC_ALLOCATE_ROUTINE
460 #undef PRTL_GENERIC_FREE_ROUTINE
461 #undef RTL_GENERIC_FREE_ROUTINE
462 #undef RTL_GENERIC_TABLE
463 #undef PRTL_GENERIC_TABLE
465 #define PRTL_GENERIC_COMPARE_ROUTINE PRTL_AVL_COMPARE_ROUTINE
466 #define RTL_GENERIC_COMPARE_ROUTINE RTL_AVL_COMPARE_ROUTINE
467 #define PRTL_GENERIC_ALLOCATE_ROUTINE PRTL_AVL_ALLOCATE_ROUTINE
468 #define RTL_GENERIC_ALLOCATE_ROUTINE RTL_AVL_ALLOCATE_ROUTINE
469 #define PRTL_GENERIC_FREE_ROUTINE PRTL_AVL_FREE_ROUTINE
470 #define RTL_GENERIC_FREE_ROUTINE RTL_AVL_FREE_ROUTINE
471 #define RTL_GENERIC_TABLE RTL_AVL_TABLE
472 #define PRTL_GENERIC_TABLE PRTL_AVL_TABLE
474 #define RtlInitializeGenericTable RtlInitializeGenericTableAvl
475 #define RtlInsertElementGenericTable RtlInsertElementGenericTableAvl
476 #define RtlInsertElementGenericTableFull RtlInsertElementGenericTableFullAvl
477 #define RtlDeleteElementGenericTable RtlDeleteElementGenericTableAvl
478 #define RtlLookupElementGenericTable RtlLookupElementGenericTableAvl
479 #define RtlLookupElementGenericTableFull RtlLookupElementGenericTableFullAvl
480 #define RtlEnumerateGenericTable RtlEnumerateGenericTableAvl
481 #define RtlEnumerateGenericTableWithoutSplaying RtlEnumerateGenericTableWithoutSplayingAvl
482 #define RtlGetElementGenericTable RtlGetElementGenericTableAvl
483 #define RtlNumberGenericTableElements RtlNumberGenericTableElementsAvl
484 #define RtlIsGenericTableEmpty RtlIsGenericTableEmptyAvl
486 #endif /* RTL_USE_AVL_TABLES */
488 typedef struct _RTL_SPLAY_LINKS
{
489 struct _RTL_SPLAY_LINKS
*Parent
;
490 struct _RTL_SPLAY_LINKS
*LeftChild
;
491 struct _RTL_SPLAY_LINKS
*RightChild
;
492 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
494 #define RtlInitializeSplayLinks(Links) { \
495 PRTL_SPLAY_LINKS _SplayLinks; \
496 _SplayLinks = (PRTL_SPLAY_LINKS)(Links); \
497 _SplayLinks->Parent = _SplayLinks; \
498 _SplayLinks->LeftChild = NULL; \
499 _SplayLinks->RightChild = NULL; \
502 #define RtlIsLeftChild(Links) \
503 (RtlLeftChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
505 #define RtlIsRightChild(Links) \
506 (RtlRightChild(RtlParent(Links)) == (PRTL_SPLAY_LINKS)(Links))
508 #define RtlRightChild(Links) \
509 ((PRTL_SPLAY_LINKS)(Links))->RightChild
511 #define RtlIsRoot(Links) \
512 (RtlParent(Links) == (PRTL_SPLAY_LINKS)(Links))
514 #define RtlLeftChild(Links) \
515 ((PRTL_SPLAY_LINKS)(Links))->LeftChild
517 #define RtlParent(Links) \
518 ((PRTL_SPLAY_LINKS)(Links))->Parent
520 #define RtlInsertAsLeftChild(ParentLinks,ChildLinks) \
522 PRTL_SPLAY_LINKS _SplayParent; \
523 PRTL_SPLAY_LINKS _SplayChild; \
524 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
525 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
526 _SplayParent->LeftChild = _SplayChild; \
527 _SplayChild->Parent = _SplayParent; \
530 #define RtlInsertAsRightChild(ParentLinks,ChildLinks) \
532 PRTL_SPLAY_LINKS _SplayParent; \
533 PRTL_SPLAY_LINKS _SplayChild; \
534 _SplayParent = (PRTL_SPLAY_LINKS)(ParentLinks); \
535 _SplayChild = (PRTL_SPLAY_LINKS)(ChildLinks); \
536 _SplayParent->RightChild = _SplayChild; \
537 _SplayChild->Parent = _SplayParent; \
541 #if (NTDDI_VERSION >= NTDDI_WIN2K)
547 IN OUT PRTL_SPLAY_LINKS Links
);
553 IN PRTL_SPLAY_LINKS Links
);
559 IN PRTL_SPLAY_LINKS Links
,
560 IN OUT PRTL_SPLAY_LINKS
*Root
);
566 IN PRTL_SPLAY_LINKS Links
);
571 RtlSubtreePredecessor(
572 IN PRTL_SPLAY_LINKS Links
);
578 IN PRTL_SPLAY_LINKS Links
);
584 IN PRTL_SPLAY_LINKS Links
);
588 #if (NTDDI_VERSION >= NTDDI_WINXP)
593 RtlInitializeGenericTableAvl(
594 OUT PRTL_AVL_TABLE Table
,
595 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
596 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
597 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
598 IN PVOID TableContext OPTIONAL
);
603 RtlInsertElementGenericTableAvl(
604 IN PRTL_AVL_TABLE Table
,
607 OUT PBOOLEAN NewElement OPTIONAL
);
612 RtlInsertElementGenericTableFullAvl(
613 IN PRTL_AVL_TABLE Table
,
616 OUT PBOOLEAN NewElement OPTIONAL
,
617 IN PVOID NodeOrParent
,
618 IN TABLE_SEARCH_RESULT SearchResult
);
623 RtlDeleteElementGenericTableAvl(
624 IN PRTL_AVL_TABLE Table
,
630 RtlLookupElementGenericTableAvl(
631 IN PRTL_AVL_TABLE Table
,
637 RtlLookupElementGenericTableFullAvl(
638 IN PRTL_AVL_TABLE Table
,
640 OUT PVOID
*NodeOrParent
,
641 OUT TABLE_SEARCH_RESULT
*SearchResult
);
646 RtlEnumerateGenericTableAvl(
647 IN PRTL_AVL_TABLE Table
,
653 RtlEnumerateGenericTableWithoutSplayingAvl(
654 IN PRTL_AVL_TABLE Table
,
655 IN OUT PVOID
*RestartKey
);
660 RtlLookupFirstMatchingElementGenericTableAvl(
661 IN PRTL_AVL_TABLE Table
,
663 OUT PVOID
*RestartKey
);
668 RtlEnumerateGenericTableLikeADirectory(
669 IN PRTL_AVL_TABLE Table
,
670 IN PRTL_AVL_MATCH_FUNCTION MatchFunction OPTIONAL
,
671 IN PVOID MatchData OPTIONAL
,
673 IN OUT PVOID
*RestartKey
,
674 IN OUT PULONG DeleteCount
,
680 RtlGetElementGenericTableAvl(
681 IN PRTL_AVL_TABLE Table
,
687 RtlNumberGenericTableElementsAvl(
688 IN PRTL_AVL_TABLE Table
);
693 RtlIsGenericTableEmptyAvl(
694 IN PRTL_AVL_TABLE Table
);
697 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
699 #if (NTDDI_VERSION >= NTDDI_WIN6)
704 RtlRunOnceInitialize(
705 OUT PRTL_RUN_ONCE RunOnce
);
710 RtlRunOnceExecuteOnce(
711 IN OUT PRTL_RUN_ONCE RunOnce
,
712 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
713 IN OUT PVOID Parameter OPTIONAL
,
714 OUT PVOID
*Context OPTIONAL
);
719 RtlRunOnceBeginInitialize(
720 IN OUT PRTL_RUN_ONCE RunOnce
,
722 OUT PVOID
*Context OPTIONAL
);
728 IN OUT PRTL_RUN_ONCE RunOnce
,
730 IN PVOID Context OPTIONAL
);
732 #endif /* (NTDDI_VERSION >= NTDDI_WIN6) */
734 struct _LOADER_PARAMETER_BLOCK
;
736 struct _DRIVE_LAYOUT_INFORMATION_EX
;
737 struct _SET_PARTITION_INFORMATION_EX
;
747 #define MAX_WOW64_SHARED_ENTRIES 16
749 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
750 #define NX_SUPPORT_POLICY_ALWAYSON 1
751 #define NX_SUPPORT_POLICY_OPTIN 2
752 #define NX_SUPPORT_POLICY_OPTOUT 3
755 ** IRP function codes
758 #define IRP_MN_QUERY_DIRECTORY 0x01
759 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
761 #define IRP_MN_USER_FS_REQUEST 0x00
762 #define IRP_MN_MOUNT_VOLUME 0x01
763 #define IRP_MN_VERIFY_VOLUME 0x02
764 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
765 #define IRP_MN_TRACK_LINK 0x04
766 #define IRP_MN_KERNEL_CALL 0x04
768 #define IRP_MN_LOCK 0x01
769 #define IRP_MN_UNLOCK_SINGLE 0x02
770 #define IRP_MN_UNLOCK_ALL 0x03
771 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
773 #define IRP_MN_FLUSH_AND_PURGE 0x01
775 #define IRP_MN_NORMAL 0x00
776 #define IRP_MN_DPC 0x01
777 #define IRP_MN_MDL 0x02
778 #define IRP_MN_COMPLETE 0x04
779 #define IRP_MN_COMPRESSED 0x08
781 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
782 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
783 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
785 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
787 typedef struct _IO_COUNTERS
{
788 ULONGLONG ReadOperationCount
;
789 ULONGLONG WriteOperationCount
;
790 ULONGLONG OtherOperationCount
;
791 ULONGLONG ReadTransferCount
;
792 ULONGLONG WriteTransferCount
;
793 ULONGLONG OtherTransferCount
;
794 } IO_COUNTERS
, *PIO_COUNTERS
;
796 typedef struct _VM_COUNTERS
{
797 SIZE_T PeakVirtualSize
;
799 ULONG PageFaultCount
;
800 SIZE_T PeakWorkingSetSize
;
801 SIZE_T WorkingSetSize
;
802 SIZE_T QuotaPeakPagedPoolUsage
;
803 SIZE_T QuotaPagedPoolUsage
;
804 SIZE_T QuotaPeakNonPagedPoolUsage
;
805 SIZE_T QuotaNonPagedPoolUsage
;
806 SIZE_T PagefileUsage
;
807 SIZE_T PeakPagefileUsage
;
808 } VM_COUNTERS
, *PVM_COUNTERS
;
810 typedef struct _VM_COUNTERS_EX
812 SIZE_T PeakVirtualSize
;
814 ULONG PageFaultCount
;
815 SIZE_T PeakWorkingSetSize
;
816 SIZE_T WorkingSetSize
;
817 SIZE_T QuotaPeakPagedPoolUsage
;
818 SIZE_T QuotaPagedPoolUsage
;
819 SIZE_T QuotaPeakNonPagedPoolUsage
;
820 SIZE_T QuotaNonPagedPoolUsage
;
821 SIZE_T PagefileUsage
;
822 SIZE_T PeakPagefileUsage
;
824 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
826 typedef struct _POOLED_USAGE_AND_LIMITS
828 SIZE_T PeakPagedPoolUsage
;
829 SIZE_T PagedPoolUsage
;
830 SIZE_T PagedPoolLimit
;
831 SIZE_T PeakNonPagedPoolUsage
;
832 SIZE_T NonPagedPoolUsage
;
833 SIZE_T NonPagedPoolLimit
;
834 SIZE_T PeakPagefileUsage
;
835 SIZE_T PagefileUsage
;
836 SIZE_T PagefileLimit
;
837 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
839 /* DEVICE_OBJECT.Flags */
841 #define DO_DEVICE_HAS_NAME 0x00000040
842 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
843 #define DO_LONG_TERM_REQUESTS 0x00000200
844 #define DO_NEVER_LAST_DEVICE 0x00000400
845 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
846 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
847 #define DO_FORCE_NEITHER_IO 0x00080000
848 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
849 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
850 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
851 #define DO_DISALLOW_EXECUTE 0x00800000
853 #define DRVO_REINIT_REGISTERED 0x00000008
854 #define DRVO_INITIALIZED 0x00000010
855 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
856 #define DRVO_LEGACY_RESOURCES 0x00000040
858 typedef enum _ARBITER_REQUEST_SOURCE
{
859 ArbiterRequestUndefined
= -1,
860 ArbiterRequestLegacyReported
,
861 ArbiterRequestHalReported
,
862 ArbiterRequestLegacyAssigned
,
863 ArbiterRequestPnpDetected
,
864 ArbiterRequestPnpEnumerated
865 } ARBITER_REQUEST_SOURCE
;
867 typedef enum _ARBITER_RESULT
{
868 ArbiterResultUndefined
= -1,
869 ArbiterResultSuccess
,
870 ArbiterResultExternalConflict
,
871 ArbiterResultNullRequest
874 typedef enum _ARBITER_ACTION
{
875 ArbiterActionTestAllocation
,
876 ArbiterActionRetestAllocation
,
877 ArbiterActionCommitAllocation
,
878 ArbiterActionRollbackAllocation
,
879 ArbiterActionQueryAllocatedResources
,
880 ArbiterActionWriteReservedResources
,
881 ArbiterActionQueryConflict
,
882 ArbiterActionQueryArbitrate
,
883 ArbiterActionAddReserved
,
884 ArbiterActionBootAllocation
885 } ARBITER_ACTION
, *PARBITER_ACTION
;
887 typedef struct _ARBITER_CONFLICT_INFO
{
888 PDEVICE_OBJECT OwningObject
;
891 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
893 typedef struct _ARBITER_PARAMETERS
{
896 IN OUT PLIST_ENTRY ArbitrationList
;
897 IN ULONG AllocateFromCount
;
898 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
901 IN OUT PLIST_ENTRY ArbitrationList
;
902 IN ULONG AllocateFromCount
;
903 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
906 IN OUT PLIST_ENTRY ArbitrationList
;
909 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
910 } QueryAllocatedResources
;
912 IN PDEVICE_OBJECT PhysicalDeviceObject
;
913 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
914 OUT PULONG ConflictCount
;
915 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
918 IN PLIST_ENTRY ArbitrationList
;
921 IN PDEVICE_OBJECT ReserveDevice
;
924 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
926 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
928 typedef struct _ARBITER_LIST_ENTRY
{
929 LIST_ENTRY ListEntry
;
930 ULONG AlternativeCount
;
931 PIO_RESOURCE_DESCRIPTOR Alternatives
;
932 PDEVICE_OBJECT PhysicalDeviceObject
;
933 ARBITER_REQUEST_SOURCE RequestSource
;
936 INTERFACE_TYPE InterfaceType
;
939 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
940 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
941 ARBITER_RESULT Result
;
942 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
945 (NTAPI
*PARBITER_HANDLER
)(
946 IN OUT PVOID Context
,
947 IN ARBITER_ACTION Action
,
948 IN OUT PARBITER_PARAMETERS Parameters
);
950 #define ARBITER_PARTIAL 0x00000001
952 typedef struct _ARBITER_INTERFACE
{
956 PINTERFACE_REFERENCE InterfaceReference
;
957 PINTERFACE_DEREFERENCE InterfaceDereference
;
958 PARBITER_HANDLER ArbiterHandler
;
960 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
962 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
963 HalInstalledBusInformation
,
964 HalProfileSourceInformation
,
965 HalInformationClassUnused1
,
967 HalProcessorSpeedInformation
,
968 HalCallbackInformation
,
969 HalMapRegisterInformation
,
970 HalMcaLogInformation
,
971 HalFrameBufferCachingInformation
,
972 HalDisplayBiosInformation
,
973 HalProcessorFeatureInformation
,
974 HalNumaTopologyInterface
,
976 HalCmcLogInformation
,
977 HalCpeLogInformation
,
978 HalQueryMcaInterface
,
979 HalQueryAMLIIllegalIOPortAddresses
,
980 HalQueryMaxHotPlugMemoryAddress
,
981 HalPartitionIpiInterface
,
982 HalPlatformInformation
,
983 HalQueryProfileSourceList
,
984 HalInitLogInformation
,
985 HalFrequencyInformation
,
986 HalProcessorBrandString
,
987 HalHypervisorInformation
,
988 HalPlatformTimerInformation
,
989 HalAcpiAuditInformation
990 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
992 typedef enum _HAL_SET_INFORMATION_CLASS
{
993 HalProfileSourceInterval
,
994 HalProfileSourceInterruptHandler
,
995 HalMcaRegisterDriver
,
996 HalKernelErrorHandler
,
997 HalCmcRegisterDriver
,
998 HalCpeRegisterDriver
,
1002 HalGenerateCmcInterrupt
,
1003 HalProfileSourceTimerHandler
,
1005 HalProfileDpgoSourceInterruptHandler
1006 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
1008 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
1009 KPROFILE_SOURCE Source
;
1011 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
1013 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
1014 KPROFILE_SOURCE Source
;
1017 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
1019 typedef struct _MAP_REGISTER_ENTRY
{
1021 BOOLEAN WriteToDevice
;
1022 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
1024 typedef struct _DEBUG_DEVICE_ADDRESS
{
1028 PUCHAR TranslatedAddress
;
1030 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
1032 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
1033 PHYSICAL_ADDRESS Start
;
1034 PHYSICAL_ADDRESS MaxEnd
;
1035 PVOID VirtualAddress
;
1039 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
1041 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
1050 BOOLEAN Initialized
;
1052 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
1053 DEBUG_MEMORY_REQUIREMENTS Memory
;
1054 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
1056 typedef struct _PM_DISPATCH_TABLE
{
1060 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
1062 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
1063 TranslateChildToParent
,
1064 TranslateParentToChild
1065 } RESOURCE_TRANSLATION_DIRECTION
;
1068 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
1069 IN OUT PVOID Context
,
1070 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
1071 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
1072 IN ULONG AlternativesCount OPTIONAL
,
1073 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
1074 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1075 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
1078 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
1079 IN PVOID Context OPTIONAL
,
1080 IN PIO_RESOURCE_DESCRIPTOR Source
,
1081 IN PDEVICE_OBJECT PhysicalDeviceObject
,
1082 OUT PULONG TargetCount
,
1083 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
1085 typedef struct _TRANSLATOR_INTERFACE
{
1089 PINTERFACE_REFERENCE InterfaceReference
;
1090 PINTERFACE_DEREFERENCE InterfaceDereference
;
1091 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
1092 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
1093 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
1096 (FASTCALL
*pHalExamineMBR
)(
1097 IN PDEVICE_OBJECT DeviceObject
,
1098 IN ULONG SectorSize
,
1099 IN ULONG MBRTypeIdentifier
,
1103 (FASTCALL
*pHalIoReadPartitionTable
)(
1104 IN PDEVICE_OBJECT DeviceObject
,
1105 IN ULONG SectorSize
,
1106 IN BOOLEAN ReturnRecognizedPartitions
,
1107 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
1110 (FASTCALL
*pHalIoSetPartitionInformation
)(
1111 IN PDEVICE_OBJECT DeviceObject
,
1112 IN ULONG SectorSize
,
1113 IN ULONG PartitionNumber
,
1114 IN ULONG PartitionType
);
1117 (FASTCALL
*pHalIoWritePartitionTable
)(
1118 IN PDEVICE_OBJECT DeviceObject
,
1119 IN ULONG SectorSize
,
1120 IN ULONG SectorsPerTrack
,
1121 IN ULONG NumberOfHeads
,
1122 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
1124 typedef PBUS_HANDLER
1125 (FASTCALL
*pHalHandlerForBus
)(
1126 IN INTERFACE_TYPE InterfaceType
,
1127 IN ULONG BusNumber
);
1130 (FASTCALL
*pHalReferenceBusHandler
)(
1131 IN PBUS_HANDLER BusHandler
);
1134 (NTAPI
*pHalQuerySystemInformation
)(
1135 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
1136 IN ULONG BufferSize
,
1137 IN OUT PVOID Buffer
,
1138 OUT PULONG ReturnedLength
);
1141 (NTAPI
*pHalSetSystemInformation
)(
1142 IN HAL_SET_INFORMATION_CLASS InformationClass
,
1143 IN ULONG BufferSize
,
1147 (NTAPI
*pHalQueryBusSlots
)(
1148 IN PBUS_HANDLER BusHandler
,
1149 IN ULONG BufferSize
,
1150 OUT PULONG SlotNumbers
,
1151 OUT PULONG ReturnedLength
);
1154 (NTAPI
*pHalInitPnpDriver
)(
1158 (NTAPI
*pHalInitPowerManagement
)(
1159 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
1160 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
1162 typedef struct _DMA_ADAPTER
*
1163 (NTAPI
*pHalGetDmaAdapter
)(
1165 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
1166 OUT PULONG NumberOfMapRegisters
);
1169 (NTAPI
*pHalGetInterruptTranslator
)(
1170 IN INTERFACE_TYPE ParentInterfaceType
,
1171 IN ULONG ParentBusNumber
,
1172 IN INTERFACE_TYPE BridgeInterfaceType
,
1175 OUT PTRANSLATOR_INTERFACE Translator
,
1176 OUT PULONG BridgeBusNumber
);
1179 (NTAPI
*pHalStartMirroring
)(
1183 (NTAPI
*pHalEndMirroring
)(
1184 IN ULONG PassNumber
);
1187 (NTAPI
*pHalMirrorPhysicalMemory
)(
1188 IN PHYSICAL_ADDRESS PhysicalAddress
,
1189 IN LARGE_INTEGER NumberOfBytes
);
1192 (NTAPI
*pHalMirrorVerify
)(
1193 IN PHYSICAL_ADDRESS PhysicalAddress
,
1194 IN LARGE_INTEGER NumberOfBytes
);
1197 (NTAPI
*pHalEndOfBoot
)(
1202 (NTAPI
*pHalTranslateBusAddress
)(
1203 IN INTERFACE_TYPE InterfaceType
,
1205 IN PHYSICAL_ADDRESS BusAddress
,
1206 IN OUT PULONG AddressSpace
,
1207 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
1211 (NTAPI
*pHalAssignSlotResources
)(
1212 IN PUNICODE_STRING RegistryPath
,
1213 IN PUNICODE_STRING DriverClassName OPTIONAL
,
1214 IN PDRIVER_OBJECT DriverObject
,
1215 IN PDEVICE_OBJECT DeviceObject
,
1216 IN INTERFACE_TYPE BusType
,
1218 IN ULONG SlotNumber
,
1219 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
1223 (NTAPI
*pHalHaltSystem
)(
1228 (NTAPI
*pHalResetDisplay
)(
1233 (NTAPI
*pHalVectorToIDTEntry
)(
1238 (NTAPI
*pHalFindBusAddressTranslation
)(
1239 IN PHYSICAL_ADDRESS BusAddress
,
1240 IN OUT PULONG AddressSpace
,
1241 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
1242 IN OUT PULONG_PTR Context
,
1243 IN BOOLEAN NextBus
);
1247 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
1248 IN PVOID LoaderBlock OPTIONAL
,
1249 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
1253 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
1254 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
1258 (NTAPI
*pKdGetAcpiTablePhase0
)(
1259 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1260 IN ULONG Signature
);
1264 (NTAPI
*pHalGetAcpiTable
)(
1266 IN PCSTR OemId OPTIONAL
,
1267 IN PCSTR OemTableId OPTIONAL
);
1271 (NTAPI
*pKdCheckPowerButton
)(
1274 #if (NTDDI_VERSION >= NTDDI_VISTA)
1277 (NTAPI
*pKdMapPhysicalMemory64
)(
1278 IN PHYSICAL_ADDRESS PhysicalAddress
,
1279 IN ULONG NumberPages
,
1280 IN BOOLEAN FlushCurrentTLB
);
1284 (NTAPI
*pKdUnmapVirtualAddress
)(
1285 IN PVOID VirtualAddress
,
1286 IN ULONG NumberPages
,
1287 IN BOOLEAN FlushCurrentTLB
);
1291 (NTAPI
*pKdMapPhysicalMemory64
)(
1292 IN PHYSICAL_ADDRESS PhysicalAddress
,
1293 IN ULONG NumberPages
);
1297 (NTAPI
*pKdUnmapVirtualAddress
)(
1298 IN PVOID VirtualAddress
,
1299 IN ULONG NumberPages
);
1305 (NTAPI
*pKdGetPciDataByOffset
)(
1307 IN ULONG SlotNumber
,
1314 (NTAPI
*pKdSetPciDataByOffset
)(
1316 IN ULONG SlotNumber
,
1322 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1328 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
1333 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
1334 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
1336 #if 1 /* Not present in WDK 7600 */
1338 (FASTCALL
*pHalIoAssignDriveLetters
)(
1339 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1340 IN PSTRING NtDeviceName
,
1341 OUT PUCHAR NtSystemPath
,
1342 OUT PSTRING NtSystemPathString
);
1347 pHalQuerySystemInformation HalQuerySystemInformation
;
1348 pHalSetSystemInformation HalSetSystemInformation
;
1349 pHalQueryBusSlots HalQueryBusSlots
;
1351 pHalExamineMBR HalExamineMBR
;
1352 #if 1 /* Not present in WDK 7600 */
1353 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1355 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1356 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1357 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1358 pHalHandlerForBus HalReferenceHandlerForBus
;
1359 pHalReferenceBusHandler HalReferenceBusHandler
;
1360 pHalReferenceBusHandler HalDereferenceBusHandler
;
1361 pHalInitPnpDriver HalInitPnpDriver
;
1362 pHalInitPowerManagement HalInitPowerManagement
;
1363 pHalGetDmaAdapter HalGetDmaAdapter
;
1364 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1365 pHalStartMirroring HalStartMirroring
;
1366 pHalEndMirroring HalEndMirroring
;
1367 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1368 pHalEndOfBoot HalEndOfBoot
;
1369 pHalMirrorVerify HalMirrorVerify
;
1370 pHalGetAcpiTable HalGetCachedAcpiTable
;
1371 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
1373 pHalGetErrorCapList HalGetErrorCapList
;
1374 pHalInjectError HalInjectError
;
1376 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1378 /* GCC/MSVC and WDK compatible declaration */
1379 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
1381 #if defined(_NTOSKRNL_) || defined(_BLDR_)
1382 #define HALDISPATCH (&HalDispatchTable)
1384 /* This is a WDK compatibility definition */
1385 #define HalDispatchTable (&HalDispatchTable)
1386 #define HALDISPATCH HalDispatchTable
1389 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
1390 #define HalDispatchTableVersion HALDISPATCH->Version
1391 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1392 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1393 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1394 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1395 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1396 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1397 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1398 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1399 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1400 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1401 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1402 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1403 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1404 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1405 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1407 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1408 ULONG AlignmentRequirement
;
1409 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1411 typedef struct _FILE_NAME_INFORMATION
{
1412 ULONG FileNameLength
;
1414 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1417 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1418 ULONG FileAttributes
;
1420 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1422 typedef struct _FILE_DISPOSITION_INFORMATION
{
1424 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1426 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1427 LARGE_INTEGER EndOfFile
;
1428 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1430 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1431 LARGE_INTEGER ValidDataLength
;
1432 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1434 typedef union _FILE_SEGMENT_ELEMENT
{
1436 ULONGLONG Alignment
;
1437 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1439 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1443 VerSetConditionMask(
1444 IN ULONGLONG ConditionMask
,
1446 IN UCHAR Condition
);
1449 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1450 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1451 (TypeBitMask), (ComparisonType)))
1453 /* RtlVerifyVersionInfo() TypeMask */
1455 #define VER_MINORVERSION 0x0000001
1456 #define VER_MAJORVERSION 0x0000002
1457 #define VER_BUILDNUMBER 0x0000004
1458 #define VER_PLATFORMID 0x0000008
1459 #define VER_SERVICEPACKMINOR 0x0000010
1460 #define VER_SERVICEPACKMAJOR 0x0000020
1461 #define VER_SUITENAME 0x0000040
1462 #define VER_PRODUCT_TYPE 0x0000080
1464 /* RtlVerifyVersionInfo() ComparisonType */
1467 #define VER_GREATER 2
1468 #define VER_GREATER_EQUAL 3
1470 #define VER_LESS_EQUAL 5
1474 #define VER_CONDITION_MASK 7
1475 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1477 typedef struct _IMAGE_INFO
{
1478 _ANONYMOUS_UNION
union {
1480 _ANONYMOUS_STRUCT
struct {
1481 ULONG ImageAddressingMode
:8;
1482 ULONG SystemModeImage
:1;
1483 ULONG ImageMappedToAllPids
:1;
1484 ULONG ExtendedInfoPresent
:1;
1489 ULONG ImageSelector
;
1491 ULONG ImageSectionNumber
;
1492 } IMAGE_INFO
, *PIMAGE_INFO
;
1494 #define IMAGE_ADDRESSING_MODE_32BIT 3
1496 typedef enum _BUS_DATA_TYPE
{
1497 ConfigurationSpaceUndefined
= -1,
1505 PCMCIAConfiguration
,
1508 PNPISAConfiguration
,
1509 SgiInternalConfiguration
,
1511 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1513 typedef struct _NT_TIB
{
1514 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1518 _ANONYMOUS_UNION
union {
1522 PVOID ArbitraryUserPointer
;
1523 struct _NT_TIB
*Self
;
1526 typedef struct _NT_TIB32
{
1527 ULONG ExceptionList
;
1531 __GNU_EXTENSION
union {
1535 ULONG ArbitraryUserPointer
;
1537 } NT_TIB32
,*PNT_TIB32
;
1539 typedef struct _NT_TIB64
{
1540 ULONG64 ExceptionList
;
1543 ULONG64 SubSystemTib
;
1544 __GNU_EXTENSION
union {
1548 ULONG64 ArbitraryUserPointer
;
1550 } NT_TIB64
,*PNT_TIB64
;
1552 typedef enum _PROCESSINFOCLASS
{
1553 ProcessBasicInformation
,
1558 ProcessBasePriority
,
1559 ProcessRaisePriority
,
1561 ProcessExceptionPort
,
1563 ProcessLdtInformation
,
1565 ProcessDefaultHardErrorMode
,
1566 ProcessIoPortHandlers
,
1567 ProcessPooledUsageAndLimits
,
1568 ProcessWorkingSetWatch
,
1569 ProcessUserModeIOPL
,
1570 ProcessEnableAlignmentFaultFixup
,
1571 ProcessPriorityClass
,
1572 ProcessWx86Information
,
1574 ProcessAffinityMask
,
1575 ProcessPriorityBoost
,
1577 ProcessSessionInformation
,
1578 ProcessForegroundInformation
,
1579 ProcessWow64Information
,
1580 ProcessImageFileName
,
1581 ProcessLUIDDeviceMapsEnabled
,
1582 ProcessBreakOnTermination
,
1583 ProcessDebugObjectHandle
,
1585 ProcessHandleTracing
,
1587 ProcessExecuteFlags
,
1588 ProcessTlsInformation
,
1590 ProcessImageInformation
,
1592 ProcessPagePriority
,
1593 ProcessInstrumentationCallback
,
1594 ProcessThreadStackAllocation
,
1595 ProcessWorkingSetWatchEx
,
1596 ProcessImageFileNameWin32
,
1597 ProcessImageFileMapping
,
1598 ProcessAffinityUpdateMode
,
1599 ProcessMemoryAllocationMode
,
1600 ProcessGroupInformation
,
1601 ProcessTokenVirtualizationEnabled
,
1602 ProcessConsoleHostProcess
,
1603 ProcessWindowInformation
,
1607 typedef enum _THREADINFOCLASS
{
1608 ThreadBasicInformation
,
1613 ThreadImpersonationToken
,
1614 ThreadDescriptorTableEntry
,
1615 ThreadEnableAlignmentFaultFixup
,
1616 ThreadEventPair_Reusable
,
1617 ThreadQuerySetWin32StartAddress
,
1619 ThreadPerformanceCount
,
1620 ThreadAmILastThread
,
1621 ThreadIdealProcessor
,
1622 ThreadPriorityBoost
,
1623 ThreadSetTlsArrayAddress
,
1625 ThreadHideFromDebugger
,
1626 ThreadBreakOnTermination
,
1627 ThreadSwitchLegacyState
,
1629 ThreadLastSystemCall
,
1633 ThreadActualBasePriority
,
1634 ThreadTebInformation
,
1638 ThreadGroupInformation
,
1639 ThreadUmsInformation
,
1640 ThreadCounterProfiling
,
1641 ThreadIdealProcessorEx
,
1645 typedef struct _PROCESS_BASIC_INFORMATION
{
1646 NTSTATUS ExitStatus
;
1647 struct _PEB
*PebBaseAddress
;
1648 ULONG_PTR AffinityMask
;
1649 KPRIORITY BasePriority
;
1650 ULONG_PTR UniqueProcessId
;
1651 ULONG_PTR InheritedFromUniqueProcessId
;
1652 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1654 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1657 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1659 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1660 __GNU_EXTENSION
union {
1662 HANDLE DirectoryHandle
;
1666 UCHAR DriveType
[32];
1669 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1671 typedef struct _KERNEL_USER_TIMES
{
1672 LARGE_INTEGER CreateTime
;
1673 LARGE_INTEGER ExitTime
;
1674 LARGE_INTEGER KernelTime
;
1675 LARGE_INTEGER UserTime
;
1676 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1678 typedef struct _PROCESS_ACCESS_TOKEN
{
1681 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1683 typedef struct _PROCESS_SESSION_INFORMATION
{
1685 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1687 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1688 IoQueryDeviceIdentifier
= 0,
1689 IoQueryDeviceConfigurationData
,
1690 IoQueryDeviceComponentInformation
,
1691 IoQueryDeviceMaxData
1692 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1694 typedef struct _DISK_SIGNATURE
{
1695 ULONG PartitionStyle
;
1696 _ANONYMOUS_UNION
union {
1705 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1708 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1711 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1712 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1713 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1714 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1716 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1717 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1718 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1719 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1720 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1723 (NTAPI
*PTIMER_APC_ROUTINE
)(
1724 IN PVOID TimerContext
,
1725 IN ULONG TimerLowValue
,
1726 IN LONG TimerHighValue
);
1728 typedef struct _KUSER_SHARED_DATA
1730 ULONG TickCountLowDeprecated
;
1731 ULONG TickCountMultiplier
;
1732 volatile KSYSTEM_TIME InterruptTime
;
1733 volatile KSYSTEM_TIME SystemTime
;
1734 volatile KSYSTEM_TIME TimeZoneBias
;
1735 USHORT ImageNumberLow
;
1736 USHORT ImageNumberHigh
;
1737 WCHAR NtSystemRoot
[260];
1738 ULONG MaxStackTraceDepth
;
1739 ULONG CryptoExponent
;
1741 ULONG LargePageMinimum
;
1743 NT_PRODUCT_TYPE NtProductType
;
1744 BOOLEAN ProductTypeIsValid
;
1745 ULONG NtMajorVersion
;
1746 ULONG NtMinorVersion
;
1747 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1750 volatile ULONG TimeSlip
;
1751 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1752 ULONG AltArchitecturePad
[1];
1753 LARGE_INTEGER SystemExpirationDate
;
1755 BOOLEAN KdDebuggerEnabled
;
1756 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1757 UCHAR NXSupportPolicy
;
1759 volatile ULONG ActiveConsoleId
;
1760 volatile ULONG DismountCount
;
1761 ULONG ComPlusPackage
;
1762 ULONG LastSystemRITEventTickCount
;
1763 ULONG NumberOfPhysicalPages
;
1764 BOOLEAN SafeBootMode
;
1765 #if (NTDDI_VERSION >= NTDDI_WIN7)
1769 UCHAR TscQpcEnabled
:1;
1770 UCHAR TscQpcSpareFlag
:1;
1771 UCHAR TscQpcShift
:6;
1776 #if (NTDDI_VERSION >= NTDDI_VISTA)
1778 ULONG SharedDataFlags
;
1780 ULONG DbgErrorPortPresent
:1;
1781 ULONG DbgElevationEnabled
:1;
1782 ULONG DbgVirtEnabled
:1;
1783 ULONG DbgInstallerDetectEnabled
:1;
1784 ULONG DbgSystemDllRelocated
:1;
1785 ULONG DbgDynProcessorEnabled
:1;
1786 ULONG DbgSEHValidationEnabled
:1;
1793 ULONG DataFlagsPad
[1];
1794 ULONGLONG TestRetInstruction
;
1796 ULONG SystemCallReturn
;
1797 ULONGLONG SystemCallPad
[3];
1798 _ANONYMOUS_UNION
union {
1799 volatile KSYSTEM_TIME TickCount
;
1800 volatile ULONG64 TickCountQuad
;
1801 _ANONYMOUS_STRUCT
struct {
1802 ULONG ReservedTickCountOverlay
[3];
1803 ULONG TickCountPad
[1];
1808 #if (NTDDI_VERSION >= NTDDI_WS03)
1809 LONGLONG ConsoleSessionForegroundProcessId
;
1810 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1812 #if (NTDDI_VERSION >= NTDDI_VISTA)
1813 #if (NTDDI_VERSION >= NTDDI_WIN7)
1814 USHORT UserModeGlobalLogger
[16];
1816 USHORT UserModeGlobalLogger
[8];
1817 ULONG HeapTracingPid
[2];
1818 ULONG CritSecTracingPid
[2];
1820 ULONG ImageFileExecutionOptions
;
1821 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1822 ULONG LangGenerationCount
;
1824 /* 4 bytes padding */
1826 ULONGLONG Reserved5
;
1827 volatile ULONG64 InterruptTimeBias
;
1829 #if (NTDDI_VERSION >= NTDDI_WIN7)
1830 volatile ULONG64 TscQpcBias
;
1831 volatile ULONG ActiveProcessorCount
;
1832 volatile USHORT ActiveGroupCount
;
1834 volatile ULONG AitSamplingValue
;
1835 volatile ULONG AppCompatFlag
;
1836 ULONGLONG SystemDllNativeRelocation
;
1837 ULONG SystemDllWowRelocation
;
1839 XSTATE_CONFIGURATION XState
;
1841 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1843 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1844 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1845 extern NTKERNELAPI ULONG MmUserProbeAddress
;
1850 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1851 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1852 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
1853 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
1854 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
1856 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1858 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1859 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1860 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1861 #if !defined (_X86PAE_)
1862 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
1864 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1867 #define KeGetPcr() PCR
1869 #define PCR_MINOR_VERSION 1
1870 #define PCR_MAJOR_VERSION 1
1872 typedef struct _KPCR
{
1876 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
1877 PVOID Used_StackBase
;
1880 ULONG ContextSwitches
;
1881 KAFFINITY SetMemberCopy
;
1885 struct _KPCR
*SelfPcr
;
1886 struct _KPRCB
*Prcb
;
1891 PVOID KdVersionBlock
;
1892 struct _KIDTENTRY
*IDT
;
1893 struct _KGDTENTRY
*GDT
;
1895 USHORT MajorVersion
;
1896 USHORT MinorVersion
;
1897 KAFFINITY SetMember
;
1898 ULONG StallScaleFactor
;
1902 UCHAR SecondLevelCacheAssociativity
;
1904 ULONG KernelReserved
[14];
1905 ULONG SecondLevelCacheSize
;
1906 ULONG HalReserved
[16];
1911 KeGetCurrentProcessorNumber(VOID
)
1913 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1920 #define PTI_SHIFT 12L
1921 #define PDI_SHIFT 21L
1922 #define PPI_SHIFT 30L
1923 #define PXI_SHIFT 39L
1924 #define PTE_PER_PAGE 512
1925 #define PDE_PER_PAGE 512
1926 #define PPE_PER_PAGE 512
1927 #define PXE_PER_PAGE 512
1928 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1929 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1930 #define PPI_MASK (PPE_PER_PAGE - 1)
1931 #define PXI_MASK (PXE_PER_PAGE - 1)
1933 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1934 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1935 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1936 #define PDE_BASE 0xFFFFF6FB40000000ULL
1937 #define PTE_BASE 0xFFFFF68000000000ULL
1938 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1939 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1940 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1941 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1943 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1944 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1945 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1946 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1947 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1948 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1950 typedef struct _KPCR
1952 _ANONYMOUS_UNION
union
1955 _ANONYMOUS_STRUCT
struct
1957 union _KGDTENTRY64
*GdtBase
;
1958 struct _KTSS64
*TssBase
;
1961 struct _KPRCB
*CurrentPrcb
;
1962 PKSPIN_LOCK_QUEUE LockArray
;
1966 union _KIDTENTRY64
*IdtBase
;
1969 UCHAR SecondLevelCacheAssociativity
;
1970 UCHAR ObsoleteNumber
;
1973 USHORT MajorVersion
;
1974 USHORT MinorVersion
;
1975 ULONG StallScaleFactor
;
1977 ULONG KernelReserved
[15];
1978 ULONG SecondLevelCacheSize
;
1979 ULONG HalReserved
[16];
1981 PVOID KdVersionBlock
;
1983 ULONG PcrAlign1
[24];
1990 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1995 KeGetCurrentProcessorNumber(VOID
)
1997 return (ULONG
)__readgsword(0x184);
2000 #endif /* _AMD64_ */
2002 typedef enum _INTERLOCKED_RESULT
{
2003 ResultNegative
= RESULT_NEGATIVE
,
2004 ResultZero
= RESULT_ZERO
,
2005 ResultPositive
= RESULT_POSITIVE
2006 } INTERLOCKED_RESULT
;
2008 typedef struct _OSVERSIONINFOA
{
2009 ULONG dwOSVersionInfoSize
;
2010 ULONG dwMajorVersion
;
2011 ULONG dwMinorVersion
;
2012 ULONG dwBuildNumber
;
2014 CHAR szCSDVersion
[128];
2015 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
2017 typedef struct _OSVERSIONINFOW
{
2018 ULONG dwOSVersionInfoSize
;
2019 ULONG dwMajorVersion
;
2020 ULONG dwMinorVersion
;
2021 ULONG dwBuildNumber
;
2023 WCHAR szCSDVersion
[128];
2024 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
2026 typedef struct _OSVERSIONINFOEXA
{
2027 ULONG dwOSVersionInfoSize
;
2028 ULONG dwMajorVersion
;
2029 ULONG dwMinorVersion
;
2030 ULONG dwBuildNumber
;
2032 CHAR szCSDVersion
[128];
2033 USHORT wServicePackMajor
;
2034 USHORT wServicePackMinor
;
2038 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
2040 typedef struct _OSVERSIONINFOEXW
{
2041 ULONG dwOSVersionInfoSize
;
2042 ULONG dwMajorVersion
;
2043 ULONG dwMinorVersion
;
2044 ULONG dwBuildNumber
;
2046 WCHAR szCSDVersion
[128];
2047 USHORT wServicePackMajor
;
2048 USHORT wServicePackMinor
;
2052 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
2055 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
2056 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
2057 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
2058 typedef OSVERSIONINFOW OSVERSIONINFO
;
2059 typedef POSVERSIONINFOW POSVERSIONINFO
;
2060 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
2062 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
2063 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
2064 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
2065 typedef OSVERSIONINFOA OSVERSIONINFO
;
2066 typedef POSVERSIONINFOA POSVERSIONINFO
;
2067 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
2068 #endif /* UNICODE */
2070 /* Executive Types */
2072 #define PROTECTED_POOL 0x80000000
2074 typedef struct _ZONE_SEGMENT_HEADER
{
2075 SINGLE_LIST_ENTRY SegmentList
;
2077 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
2079 typedef struct _ZONE_HEADER
{
2080 SINGLE_LIST_ENTRY FreeList
;
2081 SINGLE_LIST_ENTRY SegmentList
;
2083 ULONG TotalSegmentSize
;
2084 } ZONE_HEADER
, *PZONE_HEADER
;
2086 /* Executive Functions */
2088 static __inline PVOID
2090 IN PZONE_HEADER Zone
)
2092 if (Zone
->FreeList
.Next
)
2093 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
2094 return (PVOID
) Zone
->FreeList
.Next
;
2097 static __inline PVOID
2099 IN PZONE_HEADER Zone
,
2102 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
2103 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
2104 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
2109 * ExInterlockedAllocateFromZone(
2110 * IN PZONE_HEADER Zone,
2111 * IN PKSPIN_LOCK Lock)
2113 #define ExInterlockedAllocateFromZone(Zone, Lock) \
2114 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
2117 * ExInterlockedFreeToZone(
2118 * IN PZONE_HEADER Zone,
2120 * IN PKSPIN_LOCK Lock);
2122 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
2123 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
2128 * IN PZONE_HEADER Zone)
2130 #define ExIsFullZone(Zone) \
2131 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
2134 * ExIsObjectInFirstZoneSegment(
2135 * IN PZONE_HEADER Zone,
2138 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
2139 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
2140 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
2141 (Zone)->TotalSegmentSize)) )
2143 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
2144 #define ExAcquireResourceShared ExAcquireResourceSharedLite
2145 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
2146 #define ExDeleteResource ExDeleteResourceLite
2147 #define ExInitializeResource ExInitializeResourceLite
2148 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
2149 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
2150 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
2151 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
2153 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2159 IN OUT PZONE_HEADER Zone
,
2160 IN OUT PVOID Segment
,
2161 IN ULONG SegmentSize
);
2167 OUT PZONE_HEADER Zone
,
2169 IN OUT PVOID InitialSegment
,
2170 IN ULONG InitialSegmentSize
);
2175 ExInterlockedExtendZone(
2176 IN OUT PZONE_HEADER Zone
,
2177 IN OUT PVOID Segment
,
2178 IN ULONG SegmentSize
,
2179 IN OUT PKSPIN_LOCK Lock
);
2191 ExRaiseAccessViolation(
2198 ExRaiseDatatypeMisalignment(
2208 Exfi386InterlockedIncrementLong(
2209 IN OUT LONG
volatile *Addend
);
2214 Exfi386InterlockedDecrementLong(
2220 Exfi386InterlockedExchangeUlong(
2228 typedef enum _CONFIGURATION_TYPE
{
2231 FloatingPointProcessor
,
2241 MultiFunctionAdapter
,
2255 FloppyDiskPeripheral
,
2268 RealModeIrqRoutingTable
,
2269 RealModePCIEnumeration
,
2271 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
2272 #endif /* !_ARC_DDK_ */
2274 typedef struct _CONTROLLER_OBJECT
{
2277 PVOID ControllerExtension
;
2278 KDEVICE_QUEUE DeviceWaitQueue
;
2280 LARGE_INTEGER Spare2
;
2281 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
2283 typedef struct _CONFIGURATION_INFORMATION
{
2288 ULONG ScsiPortCount
;
2290 ULONG ParallelCount
;
2291 BOOLEAN AtDiskPrimaryAddressClaimed
;
2292 BOOLEAN AtDiskSecondaryAddressClaimed
;
2294 ULONG MediumChangerCount
;
2295 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
2299 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
2301 IN PUNICODE_STRING PathName
,
2302 IN INTERFACE_TYPE BusType
,
2304 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
2305 IN CONFIGURATION_TYPE ControllerType
,
2306 IN ULONG ControllerNumber
,
2307 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
2308 IN CONFIGURATION_TYPE PeripheralType
,
2309 IN ULONG PeripheralNumber
,
2310 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
2314 (NTAPI DRIVER_REINITIALIZE
)(
2315 IN
struct _DRIVER_OBJECT
*DriverObject
,
2319 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
2321 /** Filesystem runtime library routines **/
2323 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2327 FsRtlIsTotalDeviceFailure(
2328 IN NTSTATUS Status
);
2331 /* Hardware Abstraction Layer Types */
2334 (NTAPI
*PciPin2Line
)(
2335 IN
struct _BUS_HANDLER
*BusHandler
,
2336 IN
struct _BUS_HANDLER
*RootHandler
,
2337 IN PCI_SLOT_NUMBER SlotNumber
,
2338 IN PPCI_COMMON_CONFIG PciData
);
2341 (NTAPI
*PciLine2Pin
)(
2342 IN
struct _BUS_HANDLER
*BusHandler
,
2343 IN
struct _BUS_HANDLER
*RootHandler
,
2344 IN PCI_SLOT_NUMBER SlotNumber
,
2345 IN PPCI_COMMON_CONFIG PciNewData
,
2346 IN PPCI_COMMON_CONFIG PciOldData
);
2349 (NTAPI
*PciReadWriteConfig
)(
2350 IN
struct _BUS_HANDLER
*BusHandler
,
2351 IN PCI_SLOT_NUMBER Slot
,
2356 #define PCI_DATA_TAG ' ICP'
2357 #define PCI_DATA_VERSION 1
2359 typedef struct _PCIBUSDATA
{
2362 PciReadWriteConfig ReadConfig
;
2363 PciReadWriteConfig WriteConfig
;
2364 PciPin2Line Pin2Line
;
2365 PciLine2Pin Line2Pin
;
2366 PCI_SLOT_NUMBER ParentSlot
;
2368 } PCIBUSDATA
, *PPCIBUSDATA
;
2370 /* Hardware Abstraction Layer Functions */
2372 #if !defined(NO_LEGACY_DRIVERS)
2374 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2379 HalAssignSlotResources(
2380 IN PUNICODE_STRING RegistryPath
,
2381 IN PUNICODE_STRING DriverClassName
,
2382 IN PDRIVER_OBJECT DriverObject
,
2383 IN PDEVICE_OBJECT DeviceObject
,
2384 IN INTERFACE_TYPE BusType
,
2386 IN ULONG SlotNumber
,
2387 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2392 HalGetInterruptVector(
2393 IN INTERFACE_TYPE InterfaceType
,
2395 IN ULONG BusInterruptLevel
,
2396 IN ULONG BusInterruptVector
,
2398 OUT PKAFFINITY Affinity
);
2404 IN BUS_DATA_TYPE BusDataType
,
2406 IN ULONG SlotNumber
,
2412 #endif /* !defined(NO_LEGACY_DRIVERS) */
2414 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2420 IN PDEVICE_DESCRIPTION DeviceDescription
,
2421 IN OUT PULONG NumberOfMapRegisters
);
2427 IN ULONG Frequency
);
2432 IN PADAPTER_OBJECT DmaAdapter
);
2437 HalAcquireDisplayOwnership(
2438 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
2444 IN BUS_DATA_TYPE BusDataType
,
2446 IN ULONG SlotNumber
,
2453 HalGetBusDataByOffset(
2454 IN BUS_DATA_TYPE BusDataType
,
2456 IN ULONG SlotNumber
,
2464 HalSetBusDataByOffset(
2465 IN BUS_DATA_TYPE BusDataType
,
2467 IN ULONG SlotNumber
,
2475 HalTranslateBusAddress(
2476 IN INTERFACE_TYPE InterfaceType
,
2478 IN PHYSICAL_ADDRESS BusAddress
,
2479 IN OUT PULONG AddressSpace
,
2480 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
2484 #if (NTDDI_VERSION >= NTDDI_WINXP)
2489 IN PDEVICE_OBJECT DeviceObject
,
2490 IN ULONG SectorSize
,
2491 IN ULONG MBRTypeIdentifier
,
2495 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
2499 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2500 //DECLSPEC_DEPRECATED_DDK
2504 IoFreeAdapterChannel(
2505 IN PADAPTER_OBJECT AdapterObject
);
2507 //DECLSPEC_DEPRECATED_DDK
2511 IoFlushAdapterBuffers(
2512 IN PADAPTER_OBJECT AdapterObject
,
2514 IN PVOID MapRegisterBase
,
2517 IN BOOLEAN WriteToDevice
);
2519 //DECLSPEC_DEPRECATED_DDK
2524 IN PADAPTER_OBJECT AdapterObject
,
2525 IN PVOID MapRegisterBase
,
2526 IN ULONG NumberOfMapRegisters
);
2528 //DECLSPEC_DEPRECATED_DDK
2532 HalAllocateCommonBuffer(
2533 IN PADAPTER_OBJECT AdapterObject
,
2535 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2536 IN BOOLEAN CacheEnabled
);
2538 //DECLSPEC_DEPRECATED_DDK
2542 HalFreeCommonBuffer(
2543 IN PADAPTER_OBJECT AdapterObject
,
2545 IN PHYSICAL_ADDRESS LogicalAddress
,
2546 IN PVOID VirtualAddress
,
2547 IN BOOLEAN CacheEnabled
);
2549 //DECLSPEC_DEPRECATED_DDK
2554 IN PADAPTER_OBJECT AdapterObject
);
2559 HalAllocateAdapterChannel(
2560 IN PADAPTER_OBJECT AdapterObject
,
2561 IN PWAIT_CONTEXT_BLOCK Wcb
,
2562 IN ULONG NumberOfMapRegisters
,
2563 IN PDRIVER_CONTROL ExecutionRoutine
);
2565 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2567 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
2569 /* I/O Manager Functions */
2572 * VOID IoAssignArcName(
2573 * IN PUNICODE_STRING ArcName,
2574 * IN PUNICODE_STRING DeviceName);
2576 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2577 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2581 * IoDeassignArcName(
2582 * IN PUNICODE_STRING ArcName)
2584 #define IoDeassignArcName IoDeleteSymbolicLink
2586 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2588 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
2592 IoAllocateAdapterChannel(
2593 IN PADAPTER_OBJECT AdapterObject
,
2594 IN PDEVICE_OBJECT DeviceObject
,
2595 IN ULONG NumberOfMapRegisters
,
2596 IN PDRIVER_CONTROL ExecutionRoutine
,
2600 //DECLSPEC_DEPRECATED_DDK
2605 IN PADAPTER_OBJECT AdapterObject
,
2607 IN PVOID MapRegisterBase
,
2609 IN OUT PULONG Length
,
2610 IN BOOLEAN WriteToDevice
);
2615 IoAllocateController(
2616 IN PCONTROLLER_OBJECT ControllerObject
,
2617 IN PDEVICE_OBJECT DeviceObject
,
2618 IN PDRIVER_CONTROL ExecutionRoutine
,
2619 IN PVOID Context OPTIONAL
);
2631 IN PCONTROLLER_OBJECT ControllerObject
);
2637 IN PCONTROLLER_OBJECT ControllerObject
);
2640 PCONFIGURATION_INFORMATION
2642 IoGetConfigurationInformation(
2648 IoGetDeviceToVerify(
2649 IN PETHREAD Thread
);
2655 IN PDEVICE_OBJECT DeviceObject
,
2656 IN PFILE_OBJECT FileObject
);
2661 IoGetFileObjectGenericMapping(
2667 IoMakeAssociatedIrp(
2669 IN CCHAR StackSize
);
2674 IoQueryDeviceDescription(
2675 IN PINTERFACE_TYPE BusType OPTIONAL
,
2676 IN PULONG BusNumber OPTIONAL
,
2677 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2678 IN PULONG ControllerNumber OPTIONAL
,
2679 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2680 IN PULONG PeripheralNumber OPTIONAL
,
2681 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2682 IN OUT PVOID Context OPTIONAL
);
2689 IN PVPB Vpb OPTIONAL
,
2690 IN PDEVICE_OBJECT RealDeviceObject
);
2695 IoRaiseInformationalHardError(
2696 IN NTSTATUS ErrorStatus
,
2697 IN PUNICODE_STRING String OPTIONAL
,
2698 IN PKTHREAD Thread OPTIONAL
);
2703 IoRegisterBootDriverReinitialization(
2704 IN PDRIVER_OBJECT DriverObject
,
2705 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2706 IN PVOID Context OPTIONAL
);
2711 IoRegisterDriverReinitialization(
2712 IN PDRIVER_OBJECT DriverObject
,
2713 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2714 IN PVOID Context OPTIONAL
);
2719 IoAttachDeviceByPointer(
2720 IN PDEVICE_OBJECT SourceDevice
,
2721 IN PDEVICE_OBJECT TargetDevice
);
2726 IoReportDetectedDevice(
2727 IN PDRIVER_OBJECT DriverObject
,
2728 IN INTERFACE_TYPE LegacyBusType
,
2730 IN ULONG SlotNumber
,
2731 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
2732 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2733 IN BOOLEAN ResourceAssigned
,
2734 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2739 IoReportResourceForDetection(
2740 IN PDRIVER_OBJECT DriverObject
,
2741 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2742 IN ULONG DriverListSize OPTIONAL
,
2743 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2744 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2745 IN ULONG DeviceListSize OPTIONAL
,
2746 OUT PBOOLEAN ConflictDetected
);
2751 IoReportResourceUsage(
2752 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2753 IN PDRIVER_OBJECT DriverObject
,
2754 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2755 IN ULONG DriverListSize OPTIONAL
,
2756 IN PDEVICE_OBJECT DeviceObject
,
2757 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2758 IN ULONG DeviceListSize OPTIONAL
,
2759 IN BOOLEAN OverrideConflict
,
2760 OUT PBOOLEAN ConflictDetected
);
2765 IoSetHardErrorOrVerifyDevice(
2767 IN PDEVICE_OBJECT DeviceObject
);
2773 IN PUNICODE_STRING RegistryPath
,
2774 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2775 IN PDRIVER_OBJECT DriverObject
,
2776 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2777 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
2778 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2780 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2782 #if (NTDDI_VERSION >= NTDDI_WINXP)
2788 IN PDEVICE_OBJECT DeviceObject
,
2789 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
2794 IoReadDiskSignature(
2795 IN PDEVICE_OBJECT DeviceObject
,
2796 IN ULONG BytesPerSector
,
2797 OUT PDISK_SIGNATURE Signature
);
2802 IoReadPartitionTable(
2803 IN PDEVICE_OBJECT DeviceObject
,
2804 IN ULONG SectorSize
,
2805 IN BOOLEAN ReturnRecognizedPartitions
,
2806 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2811 IoReadPartitionTableEx(
2812 IN PDEVICE_OBJECT DeviceObject
,
2813 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2818 IoSetPartitionInformation(
2819 IN PDEVICE_OBJECT DeviceObject
,
2820 IN ULONG SectorSize
,
2821 IN ULONG PartitionNumber
,
2822 IN ULONG PartitionType
);
2827 IoSetPartitionInformationEx(
2828 IN PDEVICE_OBJECT DeviceObject
,
2829 IN ULONG PartitionNumber
,
2830 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2835 IoSetSystemPartition(
2836 IN PUNICODE_STRING VolumeNameString
);
2841 IoSetThreadHardErrorMode(
2842 IN BOOLEAN EnableHardErrors
);
2847 IoVerifyPartitionTable(
2848 IN PDEVICE_OBJECT DeviceObject
,
2849 IN BOOLEAN FixErrors
);
2854 IoVolumeDeviceToDosName(
2855 IN PVOID VolumeDeviceObject
,
2856 OUT PUNICODE_STRING DosName
);
2861 IoWritePartitionTable(
2862 IN PDEVICE_OBJECT DeviceObject
,
2863 IN ULONG SectorSize
,
2864 IN ULONG SectorsPerTrack
,
2865 IN ULONG NumberOfHeads
,
2866 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2871 IoWritePartitionTableEx(
2872 IN PDEVICE_OBJECT DeviceObject
,
2873 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
2875 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2877 /** Kernel debugger routines **/
2885 IN ULONG MaximumResponseLength
);
2887 /* Kernel Functions */
2889 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2896 IN ULONG BugCheckCode
);
2902 IN OUT PRKEVENT Event
,
2903 IN KPRIORITY Increment
,
2909 KeSetBasePriorityThread(
2910 IN OUT PRKTHREAD Thread
,
2915 /* Memory Manager Types */
2917 typedef struct _PHYSICAL_MEMORY_RANGE
{
2918 PHYSICAL_ADDRESS BaseAddress
;
2919 LARGE_INTEGER NumberOfBytes
;
2920 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2922 /* Memory Manager Functions */
2924 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2927 PPHYSICAL_MEMORY_RANGE
2929 MmGetPhysicalMemoryRanges(
2935 MmGetPhysicalAddress(
2936 IN PVOID BaseAddress
);
2941 MmIsNonPagedSystemAddressValid(
2942 IN PVOID VirtualAddress
);
2947 MmAllocateNonCachedMemory(
2948 IN SIZE_T NumberOfBytes
);
2953 MmFreeNonCachedMemory(
2954 IN PVOID BaseAddress
,
2955 IN SIZE_T NumberOfBytes
);
2960 MmGetVirtualForPhysical(
2961 IN PHYSICAL_ADDRESS PhysicalAddress
);
2966 MmMapUserAddressesToPage(
2967 IN PVOID BaseAddress
,
2968 IN SIZE_T NumberOfBytes
,
2969 IN PVOID PageAddress
);
2975 IN PHYSICAL_ADDRESS PhysicalAddress
,
2976 IN SIZE_T NumberOfBytes
,
2977 IN MEMORY_CACHING_TYPE CacheType
);
2982 MmMapViewInSessionSpace(
2984 OUT PVOID
*MappedBase
,
2985 IN OUT PSIZE_T ViewSize
);
2990 MmMapViewInSystemSpace(
2992 OUT PVOID
*MappedBase
,
2993 IN OUT PSIZE_T ViewSize
);
2999 IN PVOID VirtualAddress
);
3004 MmIsThisAnNtAsSystem(
3010 MmLockPagableSectionByHandle(
3011 IN PVOID ImageSectionHandle
);
3016 MmUnmapViewInSessionSpace(
3017 IN PVOID MappedBase
);
3022 MmUnmapViewInSystemSpace(
3023 IN PVOID MappedBase
);
3028 MmUnsecureVirtualMemory(
3029 IN HANDLE SecureHandle
);
3034 MmRemovePhysicalMemory(
3035 IN PPHYSICAL_ADDRESS StartAddress
,
3036 IN OUT PLARGE_INTEGER NumberOfBytes
);
3041 MmSecureVirtualMemory(
3044 IN ULONG ProbeMode
);
3049 MmUnmapVideoDisplay(
3050 IN PVOID BaseAddress
,
3051 IN SIZE_T NumberOfBytes
);
3053 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3055 /* NtXxx Functions */
3061 OUT PHANDLE ProcessHandle
,
3062 IN ACCESS_MASK DesiredAccess
,
3063 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3064 IN PCLIENT_ID ClientId OPTIONAL
);
3069 NtQueryInformationProcess(
3070 IN HANDLE ProcessHandle
,
3071 IN PROCESSINFOCLASS ProcessInformationClass
,
3072 OUT PVOID ProcessInformation OPTIONAL
,
3073 IN ULONG ProcessInformationLength
,
3074 OUT PULONG ReturnLength OPTIONAL
);
3076 /** Process manager types **/
3079 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
3081 IN HANDLE ProcessId
,
3085 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
3086 IN HANDLE ProcessId
,
3091 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
3092 IN PUNICODE_STRING FullImageName
,
3093 IN HANDLE ProcessId
,
3094 IN PIMAGE_INFO ImageInfo
);
3096 /** Process manager routines **/
3098 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3103 PsSetLoadImageNotifyRoutine(
3104 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
3109 PsSetCreateThreadNotifyRoutine(
3110 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
3115 PsSetCreateProcessNotifyRoutine(
3116 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
3122 PsGetCurrentProcessId(
3128 PsGetCurrentThreadId(
3135 OUT PULONG MajorVersion OPTIONAL
,
3136 OUT PULONG MinorVersion OPTIONAL
,
3137 OUT PULONG BuildNumber OPTIONAL
,
3138 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
3140 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3142 #if (NTDDI_VERSION >= NTDDI_WINXP)
3148 IN PEPROCESS Process
);
3153 PsRemoveCreateThreadNotifyRoutine(
3154 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
3159 PsRemoveLoadImageNotifyRoutine(
3160 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
3162 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
3164 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
3168 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
3170 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
3171 *CallersAddress = (PVOID)_ReturnAddress(); \
3172 *CallersCaller = NULL;
3175 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3179 RtlGetCallersAddress(
3180 OUT PVOID
*CallersAddress
,
3181 OUT PVOID
*CallersCaller
);
3186 #if !defined(MIDL_PASS)
3191 RtlConvertLongToLuid(
3197 Temp
.QuadPart
= Val
;
3198 Luid
.LowPart
= Temp
.u
.LowPart
;
3199 Luid
.HighPart
= Temp
.u
.HighPart
;
3206 RtlConvertUlongToLuid(
3218 #if defined(_AMD64_) || defined(_IA64_)
3219 //DECLSPEC_DEPRECATED_DDK_WINXP
3223 RtlLargeIntegerDivide(
3224 IN LARGE_INTEGER Dividend
,
3225 IN LARGE_INTEGER Divisor
,
3226 OUT PLARGE_INTEGER Remainder OPTIONAL
)
3229 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
3231 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
3237 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3241 RtlLargeIntegerDivide(
3242 IN LARGE_INTEGER Dividend
,
3243 IN LARGE_INTEGER Divisor
,
3244 OUT PLARGE_INTEGER Remainder OPTIONAL
);
3247 #endif /* defined(_AMD64_) || defined(_IA64_) */
3249 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3254 RtlPrefixUnicodeString(
3255 IN PCUNICODE_STRING String1
,
3256 IN PCUNICODE_STRING String2
,
3257 IN BOOLEAN CaseInSensitive
);
3263 IN OUT PSTRING DestinationString
,
3264 IN
const PSTRING SourceString
);
3269 RtlUpcaseUnicodeString(
3270 IN OUT PUNICODE_STRING DestinationString
,
3271 IN PCUNICODE_STRING SourceString
,
3272 IN BOOLEAN AllocateDestinationString
);
3278 IN OUT PACCESS_MASK AccessMask
,
3279 IN PGENERIC_MAPPING GenericMapping
);
3284 RtlVolumeDeviceToDosName(
3285 IN PVOID VolumeDeviceObject
,
3286 OUT PUNICODE_STRING DosName
);
3292 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3297 RtlVerifyVersionInfo(
3298 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3300 IN ULONGLONG ConditionMask
);
3306 IN
const PSTRING String1
,
3307 IN
const PSTRING String2
,
3308 BOOLEAN CaseInSensitive
);
3314 OUT PSTRING DestinationString
,
3315 IN
const PSTRING SourceString OPTIONAL
);
3321 IN
const PSTRING String1
,
3322 IN
const PSTRING String2
,
3323 IN BOOLEAN CaseInSensitive
);
3330 IN ULONG Base OPTIONAL
,
3347 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3349 /* Security reference monitor routines */
3351 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3355 SeSinglePrivilegeCheck(
3356 IN LUID PrivilegeValue
,
3357 IN KPROCESSOR_MODE PreviousMode
);
3360 /* ZwXxx Functions */
3362 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3367 IN HANDLE TimerHandle
,
3368 OUT PBOOLEAN CurrentState OPTIONAL
);
3373 OUT PHANDLE TimerHandle
,
3374 IN ACCESS_MASK DesiredAccess
,
3375 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3376 IN TIMER_TYPE TimerType
);
3381 OUT PHANDLE TimerHandle
,
3382 IN ACCESS_MASK DesiredAccess
,
3383 IN POBJECT_ATTRIBUTES ObjectAttributes
);
3388 ZwSetInformationThread(
3389 IN HANDLE ThreadHandle
,
3390 IN THREADINFOCLASS ThreadInformationClass
,
3391 IN PVOID ThreadInformation
,
3392 IN ULONG ThreadInformationLength
);
3397 IN HANDLE TimerHandle
,
3398 IN PLARGE_INTEGER DueTime
,
3399 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
3400 IN PVOID TimerContext OPTIONAL
,
3401 IN BOOLEAN ResumeTimer
,
3402 IN LONG Period OPTIONAL
,
3403 OUT PBOOLEAN PreviousState OPTIONAL
);
3411 IN PUNICODE_STRING String
3414 #if (VER_PRODUCTBUILD >= 2195)
3419 ZwPowerInformation (
3420 IN POWER_INFORMATION_LEVEL PowerInformationLevel
,
3421 IN PVOID InputBuffer OPTIONAL
,
3422 IN ULONG InputBufferLength
,
3423 OUT PVOID OutputBuffer OPTIONAL
,
3424 IN ULONG OutputBufferLength
3427 #endif /* (VER_PRODUCTBUILD >= 2195) */
3432 ZwTerminateProcess (
3433 IN HANDLE ProcessHandle OPTIONAL
,
3434 IN NTSTATUS ExitStatus
3441 OUT PHANDLE ProcessHandle
,
3442 IN ACCESS_MASK DesiredAccess
,
3443 IN POBJECT_ATTRIBUTES ObjectAttributes
,
3444 IN PCLIENT_ID ClientId OPTIONAL
3450 ZwQueryVolumeInformationFile(
3451 IN HANDLE FileHandle
,
3452 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3453 OUT PVOID FsInformation
,
3455 IN FS_INFORMATION_CLASS FsInformationClass
);
3460 ZwDeviceIoControlFile(
3461 IN HANDLE FileHandle
,
3462 IN HANDLE Event OPTIONAL
,
3463 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL
,
3464 IN PVOID ApcContext OPTIONAL
,
3465 OUT PIO_STATUS_BLOCK IoStatusBlock
,
3466 IN ULONG IoControlCode
,
3467 IN PVOID InputBuffer OPTIONAL
,
3468 IN ULONG InputBufferLength
,
3469 OUT PVOID OutputBuffer OPTIONAL
,
3470 IN ULONG OutputBufferLength
);