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 #if (NTDDI_VERSION >= NTDDI_WINXP)
458 RtlInitializeGenericTableAvl(
459 OUT PRTL_AVL_TABLE Table
,
460 IN PRTL_AVL_COMPARE_ROUTINE CompareRoutine
,
461 IN PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine
,
462 IN PRTL_AVL_FREE_ROUTINE FreeRoutine
,
463 IN PVOID TableContext OPTIONAL
);
464 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
466 #if (NTDDI_VERSION >= NTDDI_WIN6)
471 RtlRunOnceInitialize(
472 OUT PRTL_RUN_ONCE RunOnce
);
477 RtlRunOnceExecuteOnce(
478 IN OUT PRTL_RUN_ONCE RunOnce
,
479 IN PRTL_RUN_ONCE_INIT_FN InitFn
,
480 IN OUT PVOID Parameter OPTIONAL
,
481 OUT PVOID
*Context OPTIONAL
);
486 RtlRunOnceBeginInitialize(
487 IN OUT PRTL_RUN_ONCE RunOnce
,
489 OUT PVOID
*Context OPTIONAL
);
495 IN OUT PRTL_RUN_ONCE RunOnce
,
497 IN PVOID Context OPTIONAL
);
499 #endif /* (NTDDI_VERSION >= NTDDI_WIN6) */
501 struct _LOADER_PARAMETER_BLOCK
;
503 struct _DRIVE_LAYOUT_INFORMATION_EX
;
504 struct _SET_PARTITION_INFORMATION_EX
;
514 #define MAX_WOW64_SHARED_ENTRIES 16
516 #define NX_SUPPORT_POLICY_ALWAYSOFF 0
517 #define NX_SUPPORT_POLICY_ALWAYSON 1
518 #define NX_SUPPORT_POLICY_OPTIN 2
519 #define NX_SUPPORT_POLICY_OPTOUT 3
522 ** IRP function codes
525 #define IRP_MN_QUERY_DIRECTORY 0x01
526 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
528 #define IRP_MN_USER_FS_REQUEST 0x00
529 #define IRP_MN_MOUNT_VOLUME 0x01
530 #define IRP_MN_VERIFY_VOLUME 0x02
531 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
532 #define IRP_MN_TRACK_LINK 0x04
533 #define IRP_MN_KERNEL_CALL 0x04
535 #define IRP_MN_LOCK 0x01
536 #define IRP_MN_UNLOCK_SINGLE 0x02
537 #define IRP_MN_UNLOCK_ALL 0x03
538 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
540 #define IRP_MN_FLUSH_AND_PURGE 0x01
542 #define IRP_MN_NORMAL 0x00
543 #define IRP_MN_DPC 0x01
544 #define IRP_MN_MDL 0x02
545 #define IRP_MN_COMPLETE 0x04
546 #define IRP_MN_COMPRESSED 0x08
548 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
549 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
550 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
552 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
554 typedef struct _IO_COUNTERS
{
555 ULONGLONG ReadOperationCount
;
556 ULONGLONG WriteOperationCount
;
557 ULONGLONG OtherOperationCount
;
558 ULONGLONG ReadTransferCount
;
559 ULONGLONG WriteTransferCount
;
560 ULONGLONG OtherTransferCount
;
561 } IO_COUNTERS
, *PIO_COUNTERS
;
563 typedef struct _VM_COUNTERS
{
564 SIZE_T PeakVirtualSize
;
566 ULONG PageFaultCount
;
567 SIZE_T PeakWorkingSetSize
;
568 SIZE_T WorkingSetSize
;
569 SIZE_T QuotaPeakPagedPoolUsage
;
570 SIZE_T QuotaPagedPoolUsage
;
571 SIZE_T QuotaPeakNonPagedPoolUsage
;
572 SIZE_T QuotaNonPagedPoolUsage
;
573 SIZE_T PagefileUsage
;
574 SIZE_T PeakPagefileUsage
;
575 } VM_COUNTERS
, *PVM_COUNTERS
;
577 typedef struct _VM_COUNTERS_EX
579 SIZE_T PeakVirtualSize
;
581 ULONG PageFaultCount
;
582 SIZE_T PeakWorkingSetSize
;
583 SIZE_T WorkingSetSize
;
584 SIZE_T QuotaPeakPagedPoolUsage
;
585 SIZE_T QuotaPagedPoolUsage
;
586 SIZE_T QuotaPeakNonPagedPoolUsage
;
587 SIZE_T QuotaNonPagedPoolUsage
;
588 SIZE_T PagefileUsage
;
589 SIZE_T PeakPagefileUsage
;
591 } VM_COUNTERS_EX
, *PVM_COUNTERS_EX
;
593 typedef struct _POOLED_USAGE_AND_LIMITS
595 SIZE_T PeakPagedPoolUsage
;
596 SIZE_T PagedPoolUsage
;
597 SIZE_T PagedPoolLimit
;
598 SIZE_T PeakNonPagedPoolUsage
;
599 SIZE_T NonPagedPoolUsage
;
600 SIZE_T NonPagedPoolLimit
;
601 SIZE_T PeakPagefileUsage
;
602 SIZE_T PagefileUsage
;
603 SIZE_T PagefileLimit
;
604 } POOLED_USAGE_AND_LIMITS
, *PPOOLED_USAGE_AND_LIMITS
;
606 /* DEVICE_OBJECT.Flags */
608 #define DO_DEVICE_HAS_NAME 0x00000040
609 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
610 #define DO_LONG_TERM_REQUESTS 0x00000200
611 #define DO_NEVER_LAST_DEVICE 0x00000400
612 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
613 #define DO_SUPPORTS_TRANSACTIONS 0x00040000
614 #define DO_FORCE_NEITHER_IO 0x00080000
615 #define DO_VOLUME_DEVICE_OBJECT 0x00100000
616 #define DO_SYSTEM_SYSTEM_PARTITION 0x00200000
617 #define DO_SYSTEM_CRITICAL_PARTITION 0x00400000
618 #define DO_DISALLOW_EXECUTE 0x00800000
620 #define DRVO_REINIT_REGISTERED 0x00000008
621 #define DRVO_INITIALIZED 0x00000010
622 #define DRVO_BOOTREINIT_REGISTERED 0x00000020
623 #define DRVO_LEGACY_RESOURCES 0x00000040
625 typedef enum _ARBITER_REQUEST_SOURCE
{
626 ArbiterRequestUndefined
= -1,
627 ArbiterRequestLegacyReported
,
628 ArbiterRequestHalReported
,
629 ArbiterRequestLegacyAssigned
,
630 ArbiterRequestPnpDetected
,
631 ArbiterRequestPnpEnumerated
632 } ARBITER_REQUEST_SOURCE
;
634 typedef enum _ARBITER_RESULT
{
635 ArbiterResultUndefined
= -1,
636 ArbiterResultSuccess
,
637 ArbiterResultExternalConflict
,
638 ArbiterResultNullRequest
641 typedef enum _ARBITER_ACTION
{
642 ArbiterActionTestAllocation
,
643 ArbiterActionRetestAllocation
,
644 ArbiterActionCommitAllocation
,
645 ArbiterActionRollbackAllocation
,
646 ArbiterActionQueryAllocatedResources
,
647 ArbiterActionWriteReservedResources
,
648 ArbiterActionQueryConflict
,
649 ArbiterActionQueryArbitrate
,
650 ArbiterActionAddReserved
,
651 ArbiterActionBootAllocation
652 } ARBITER_ACTION
, *PARBITER_ACTION
;
654 typedef struct _ARBITER_CONFLICT_INFO
{
655 PDEVICE_OBJECT OwningObject
;
658 } ARBITER_CONFLICT_INFO
, *PARBITER_CONFLICT_INFO
;
660 typedef struct _ARBITER_PARAMETERS
{
663 IN OUT PLIST_ENTRY ArbitrationList
;
664 IN ULONG AllocateFromCount
;
665 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
668 IN OUT PLIST_ENTRY ArbitrationList
;
669 IN ULONG AllocateFromCount
;
670 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom
;
673 IN OUT PLIST_ENTRY ArbitrationList
;
676 OUT PCM_PARTIAL_RESOURCE_LIST
*AllocatedResources
;
677 } QueryAllocatedResources
;
679 IN PDEVICE_OBJECT PhysicalDeviceObject
;
680 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource
;
681 OUT PULONG ConflictCount
;
682 OUT PARBITER_CONFLICT_INFO
*Conflicts
;
685 IN PLIST_ENTRY ArbitrationList
;
688 IN PDEVICE_OBJECT ReserveDevice
;
691 } ARBITER_PARAMETERS
, *PARBITER_PARAMETERS
;
693 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001
695 typedef struct _ARBITER_LIST_ENTRY
{
696 LIST_ENTRY ListEntry
;
697 ULONG AlternativeCount
;
698 PIO_RESOURCE_DESCRIPTOR Alternatives
;
699 PDEVICE_OBJECT PhysicalDeviceObject
;
700 ARBITER_REQUEST_SOURCE RequestSource
;
703 INTERFACE_TYPE InterfaceType
;
706 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment
;
707 PIO_RESOURCE_DESCRIPTOR SelectedAlternative
;
708 ARBITER_RESULT Result
;
709 } ARBITER_LIST_ENTRY
, *PARBITER_LIST_ENTRY
;
712 (NTAPI
*PARBITER_HANDLER
)(
713 IN OUT PVOID Context
,
714 IN ARBITER_ACTION Action
,
715 IN OUT PARBITER_PARAMETERS Parameters
);
717 #define ARBITER_PARTIAL 0x00000001
719 typedef struct _ARBITER_INTERFACE
{
723 PINTERFACE_REFERENCE InterfaceReference
;
724 PINTERFACE_DEREFERENCE InterfaceDereference
;
725 PARBITER_HANDLER ArbiterHandler
;
727 } ARBITER_INTERFACE
, *PARBITER_INTERFACE
;
729 typedef enum _HAL_QUERY_INFORMATION_CLASS
{
730 HalInstalledBusInformation
,
731 HalProfileSourceInformation
,
732 HalInformationClassUnused1
,
734 HalProcessorSpeedInformation
,
735 HalCallbackInformation
,
736 HalMapRegisterInformation
,
737 HalMcaLogInformation
,
738 HalFrameBufferCachingInformation
,
739 HalDisplayBiosInformation
,
740 HalProcessorFeatureInformation
,
741 HalNumaTopologyInterface
,
743 HalCmcLogInformation
,
744 HalCpeLogInformation
,
745 HalQueryMcaInterface
,
746 HalQueryAMLIIllegalIOPortAddresses
,
747 HalQueryMaxHotPlugMemoryAddress
,
748 HalPartitionIpiInterface
,
749 HalPlatformInformation
,
750 HalQueryProfileSourceList
,
751 HalInitLogInformation
,
752 HalFrequencyInformation
,
753 HalProcessorBrandString
,
754 HalHypervisorInformation
,
755 HalPlatformTimerInformation
,
756 HalAcpiAuditInformation
757 } HAL_QUERY_INFORMATION_CLASS
, *PHAL_QUERY_INFORMATION_CLASS
;
759 typedef enum _HAL_SET_INFORMATION_CLASS
{
760 HalProfileSourceInterval
,
761 HalProfileSourceInterruptHandler
,
762 HalMcaRegisterDriver
,
763 HalKernelErrorHandler
,
764 HalCmcRegisterDriver
,
765 HalCpeRegisterDriver
,
769 HalGenerateCmcInterrupt
,
770 HalProfileSourceTimerHandler
,
772 HalProfileDpgoSourceInterruptHandler
773 } HAL_SET_INFORMATION_CLASS
, *PHAL_SET_INFORMATION_CLASS
;
775 typedef struct _HAL_PROFILE_SOURCE_INTERVAL
{
776 KPROFILE_SOURCE Source
;
778 } HAL_PROFILE_SOURCE_INTERVAL
, *PHAL_PROFILE_SOURCE_INTERVAL
;
780 typedef struct _HAL_PROFILE_SOURCE_INFORMATION
{
781 KPROFILE_SOURCE Source
;
784 } HAL_PROFILE_SOURCE_INFORMATION
, *PHAL_PROFILE_SOURCE_INFORMATION
;
786 typedef struct _MAP_REGISTER_ENTRY
{
788 BOOLEAN WriteToDevice
;
789 } MAP_REGISTER_ENTRY
, *PMAP_REGISTER_ENTRY
;
791 typedef struct _DEBUG_DEVICE_ADDRESS
{
795 PUCHAR TranslatedAddress
;
797 } DEBUG_DEVICE_ADDRESS
, *PDEBUG_DEVICE_ADDRESS
;
799 typedef struct _DEBUG_MEMORY_REQUIREMENTS
{
800 PHYSICAL_ADDRESS Start
;
801 PHYSICAL_ADDRESS MaxEnd
;
802 PVOID VirtualAddress
;
806 } DEBUG_MEMORY_REQUIREMENTS
, *PDEBUG_MEMORY_REQUIREMENTS
;
808 typedef struct _DEBUG_DEVICE_DESCRIPTOR
{
819 DEBUG_DEVICE_ADDRESS BaseAddress
[6];
820 DEBUG_MEMORY_REQUIREMENTS Memory
;
821 } DEBUG_DEVICE_DESCRIPTOR
, *PDEBUG_DEVICE_DESCRIPTOR
;
823 typedef struct _PM_DISPATCH_TABLE
{
827 } PM_DISPATCH_TABLE
, *PPM_DISPATCH_TABLE
;
829 typedef enum _RESOURCE_TRANSLATION_DIRECTION
{
830 TranslateChildToParent
,
831 TranslateParentToChild
832 } RESOURCE_TRANSLATION_DIRECTION
;
835 (NTAPI
*PTRANSLATE_RESOURCE_HANDLER
)(
836 IN OUT PVOID Context
,
837 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source
,
838 IN RESOURCE_TRANSLATION_DIRECTION Direction
,
839 IN ULONG AlternativesCount OPTIONAL
,
840 IN IO_RESOURCE_DESCRIPTOR Alternatives
[],
841 IN PDEVICE_OBJECT PhysicalDeviceObject
,
842 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target
);
845 (NTAPI
*PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER
)(
846 IN PVOID Context OPTIONAL
,
847 IN PIO_RESOURCE_DESCRIPTOR Source
,
848 IN PDEVICE_OBJECT PhysicalDeviceObject
,
849 OUT PULONG TargetCount
,
850 OUT PIO_RESOURCE_DESCRIPTOR
*Target
);
852 typedef struct _TRANSLATOR_INTERFACE
{
856 PINTERFACE_REFERENCE InterfaceReference
;
857 PINTERFACE_DEREFERENCE InterfaceDereference
;
858 PTRANSLATE_RESOURCE_HANDLER TranslateResources
;
859 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements
;
860 } TRANSLATOR_INTERFACE
, *PTRANSLATOR_INTERFACE
;
863 (FASTCALL
*pHalExamineMBR
)(
864 IN PDEVICE_OBJECT DeviceObject
,
866 IN ULONG MBRTypeIdentifier
,
870 (FASTCALL
*pHalIoReadPartitionTable
)(
871 IN PDEVICE_OBJECT DeviceObject
,
873 IN BOOLEAN ReturnRecognizedPartitions
,
874 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
877 (FASTCALL
*pHalIoSetPartitionInformation
)(
878 IN PDEVICE_OBJECT DeviceObject
,
880 IN ULONG PartitionNumber
,
881 IN ULONG PartitionType
);
884 (FASTCALL
*pHalIoWritePartitionTable
)(
885 IN PDEVICE_OBJECT DeviceObject
,
887 IN ULONG SectorsPerTrack
,
888 IN ULONG NumberOfHeads
,
889 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
892 (FASTCALL
*pHalHandlerForBus
)(
893 IN INTERFACE_TYPE InterfaceType
,
897 (FASTCALL
*pHalReferenceBusHandler
)(
898 IN PBUS_HANDLER BusHandler
);
901 (NTAPI
*pHalQuerySystemInformation
)(
902 IN HAL_QUERY_INFORMATION_CLASS InformationClass
,
905 OUT PULONG ReturnedLength
);
908 (NTAPI
*pHalSetSystemInformation
)(
909 IN HAL_SET_INFORMATION_CLASS InformationClass
,
914 (NTAPI
*pHalQueryBusSlots
)(
915 IN PBUS_HANDLER BusHandler
,
917 OUT PULONG SlotNumbers
,
918 OUT PULONG ReturnedLength
);
921 (NTAPI
*pHalInitPnpDriver
)(
925 (NTAPI
*pHalInitPowerManagement
)(
926 IN PPM_DISPATCH_TABLE PmDriverDispatchTable
,
927 OUT PPM_DISPATCH_TABLE
*PmHalDispatchTable
);
929 typedef struct _DMA_ADAPTER
*
930 (NTAPI
*pHalGetDmaAdapter
)(
932 IN
struct _DEVICE_DESCRIPTION
*DeviceDescriptor
,
933 OUT PULONG NumberOfMapRegisters
);
936 (NTAPI
*pHalGetInterruptTranslator
)(
937 IN INTERFACE_TYPE ParentInterfaceType
,
938 IN ULONG ParentBusNumber
,
939 IN INTERFACE_TYPE BridgeInterfaceType
,
942 OUT PTRANSLATOR_INTERFACE Translator
,
943 OUT PULONG BridgeBusNumber
);
946 (NTAPI
*pHalStartMirroring
)(
950 (NTAPI
*pHalEndMirroring
)(
951 IN ULONG PassNumber
);
954 (NTAPI
*pHalMirrorPhysicalMemory
)(
955 IN PHYSICAL_ADDRESS PhysicalAddress
,
956 IN LARGE_INTEGER NumberOfBytes
);
959 (NTAPI
*pHalMirrorVerify
)(
960 IN PHYSICAL_ADDRESS PhysicalAddress
,
961 IN LARGE_INTEGER NumberOfBytes
);
964 (NTAPI
*pHalEndOfBoot
)(
969 (NTAPI
*pHalTranslateBusAddress
)(
970 IN INTERFACE_TYPE InterfaceType
,
972 IN PHYSICAL_ADDRESS BusAddress
,
973 IN OUT PULONG AddressSpace
,
974 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
978 (NTAPI
*pHalAssignSlotResources
)(
979 IN PUNICODE_STRING RegistryPath
,
980 IN PUNICODE_STRING DriverClassName OPTIONAL
,
981 IN PDRIVER_OBJECT DriverObject
,
982 IN PDEVICE_OBJECT DeviceObject
,
983 IN INTERFACE_TYPE BusType
,
986 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
990 (NTAPI
*pHalHaltSystem
)(
995 (NTAPI
*pHalResetDisplay
)(
1000 (NTAPI
*pHalVectorToIDTEntry
)(
1005 (NTAPI
*pHalFindBusAddressTranslation
)(
1006 IN PHYSICAL_ADDRESS BusAddress
,
1007 IN OUT PULONG AddressSpace
,
1008 OUT PPHYSICAL_ADDRESS TranslatedAddress
,
1009 IN OUT PULONG_PTR Context
,
1010 IN BOOLEAN NextBus
);
1014 (NTAPI
*pKdSetupPciDeviceForDebugging
)(
1015 IN PVOID LoaderBlock OPTIONAL
,
1016 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
1020 (NTAPI
*pKdReleasePciDeviceForDebugging
)(
1021 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice
);
1025 (NTAPI
*pKdGetAcpiTablePhase0
)(
1026 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1027 IN ULONG Signature
);
1031 (NTAPI
*pHalGetAcpiTable
)(
1033 IN PCSTR OemId OPTIONAL
,
1034 IN PCSTR OemTableId OPTIONAL
);
1038 (NTAPI
*pKdCheckPowerButton
)(
1041 #if (NTDDI_VERSION >= NTDDI_VISTA)
1044 (NTAPI
*pKdMapPhysicalMemory64
)(
1045 IN PHYSICAL_ADDRESS PhysicalAddress
,
1046 IN ULONG NumberPages
,
1047 IN BOOLEAN FlushCurrentTLB
);
1051 (NTAPI
*pKdUnmapVirtualAddress
)(
1052 IN PVOID VirtualAddress
,
1053 IN ULONG NumberPages
,
1054 IN BOOLEAN FlushCurrentTLB
);
1058 (NTAPI
*pKdMapPhysicalMemory64
)(
1059 IN PHYSICAL_ADDRESS PhysicalAddress
,
1060 IN ULONG NumberPages
);
1064 (NTAPI
*pKdUnmapVirtualAddress
)(
1065 IN PVOID VirtualAddress
,
1066 IN ULONG NumberPages
);
1072 (NTAPI
*pKdGetPciDataByOffset
)(
1074 IN ULONG SlotNumber
,
1081 (NTAPI
*pKdSetPciDataByOffset
)(
1083 IN ULONG SlotNumber
,
1089 (NTAPI
*PHAL_RESET_DISPLAY_PARAMETERS
)(
1095 (NTAPI
*PCI_ERROR_HANDLER_CALLBACK
)(
1100 (NTAPI
*pHalSetPciErrorHandlerCallback
)(
1101 IN PCI_ERROR_HANDLER_CALLBACK Callback
);
1103 #if 1 /* Not present in WDK 7600 */
1105 (FASTCALL
*pHalIoAssignDriveLetters
)(
1106 IN
struct _LOADER_PARAMETER_BLOCK
*LoaderBlock
,
1107 IN PSTRING NtDeviceName
,
1108 OUT PUCHAR NtSystemPath
,
1109 OUT PSTRING NtSystemPathString
);
1114 pHalQuerySystemInformation HalQuerySystemInformation
;
1115 pHalSetSystemInformation HalSetSystemInformation
;
1116 pHalQueryBusSlots HalQueryBusSlots
;
1118 pHalExamineMBR HalExamineMBR
;
1119 #if 1 /* Not present in WDK 7600 */
1120 pHalIoAssignDriveLetters HalIoAssignDriveLetters
;
1122 pHalIoReadPartitionTable HalIoReadPartitionTable
;
1123 pHalIoSetPartitionInformation HalIoSetPartitionInformation
;
1124 pHalIoWritePartitionTable HalIoWritePartitionTable
;
1125 pHalHandlerForBus HalReferenceHandlerForBus
;
1126 pHalReferenceBusHandler HalReferenceBusHandler
;
1127 pHalReferenceBusHandler HalDereferenceBusHandler
;
1128 pHalInitPnpDriver HalInitPnpDriver
;
1129 pHalInitPowerManagement HalInitPowerManagement
;
1130 pHalGetDmaAdapter HalGetDmaAdapter
;
1131 pHalGetInterruptTranslator HalGetInterruptTranslator
;
1132 pHalStartMirroring HalStartMirroring
;
1133 pHalEndMirroring HalEndMirroring
;
1134 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory
;
1135 pHalEndOfBoot HalEndOfBoot
;
1136 pHalMirrorVerify HalMirrorVerify
;
1137 pHalGetAcpiTable HalGetCachedAcpiTable
;
1138 pHalSetPciErrorHandlerCallback HalSetPciErrorHandlerCallback
;
1140 pHalGetErrorCapList HalGetErrorCapList
;
1141 pHalInjectError HalInjectError
;
1143 } HAL_DISPATCH
, *PHAL_DISPATCH
;
1145 /* GCC/MSVC and WDK compatible declaration */
1146 extern NTKERNELAPI HAL_DISPATCH HalDispatchTable
;
1148 #if defined(_NTOSKRNL_) || defined(_BLDR_)
1149 #define HALDISPATCH (&HalDispatchTable)
1151 /* This is a WDK compatibility definition */
1152 #define HalDispatchTable (&HalDispatchTable)
1153 #define HALDISPATCH HalDispatchTable
1156 #define HAL_DISPATCH_VERSION 3 /* FIXME: when to use 4? */
1157 #define HalDispatchTableVersion HALDISPATCH->Version
1158 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation
1159 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation
1160 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots
1161 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus
1162 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler
1163 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler
1164 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver
1165 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement
1166 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter
1167 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator
1168 #define HalStartMirroring HALDISPATCH->HalStartMirroring
1169 #define HalEndMirroring HALDISPATCH->HalEndMirroring
1170 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory
1171 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot
1172 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify
1174 typedef struct _FILE_ALIGNMENT_INFORMATION
{
1175 ULONG AlignmentRequirement
;
1176 } FILE_ALIGNMENT_INFORMATION
, *PFILE_ALIGNMENT_INFORMATION
;
1178 typedef struct _FILE_NAME_INFORMATION
{
1179 ULONG FileNameLength
;
1181 } FILE_NAME_INFORMATION
, *PFILE_NAME_INFORMATION
;
1184 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION
{
1185 ULONG FileAttributes
;
1187 } FILE_ATTRIBUTE_TAG_INFORMATION
, *PFILE_ATTRIBUTE_TAG_INFORMATION
;
1189 typedef struct _FILE_DISPOSITION_INFORMATION
{
1191 } FILE_DISPOSITION_INFORMATION
, *PFILE_DISPOSITION_INFORMATION
;
1193 typedef struct _FILE_END_OF_FILE_INFORMATION
{
1194 LARGE_INTEGER EndOfFile
;
1195 } FILE_END_OF_FILE_INFORMATION
, *PFILE_END_OF_FILE_INFORMATION
;
1197 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
1198 LARGE_INTEGER ValidDataLength
;
1199 } FILE_VALID_DATA_LENGTH_INFORMATION
, *PFILE_VALID_DATA_LENGTH_INFORMATION
;
1201 typedef union _FILE_SEGMENT_ELEMENT
{
1203 ULONGLONG Alignment
;
1204 }FILE_SEGMENT_ELEMENT
, *PFILE_SEGMENT_ELEMENT
;
1206 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1210 VerSetConditionMask(
1211 IN ULONGLONG ConditionMask
,
1213 IN UCHAR Condition
);
1216 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
1217 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
1218 (TypeBitMask), (ComparisonType)))
1220 /* RtlVerifyVersionInfo() TypeMask */
1222 #define VER_MINORVERSION 0x0000001
1223 #define VER_MAJORVERSION 0x0000002
1224 #define VER_BUILDNUMBER 0x0000004
1225 #define VER_PLATFORMID 0x0000008
1226 #define VER_SERVICEPACKMINOR 0x0000010
1227 #define VER_SERVICEPACKMAJOR 0x0000020
1228 #define VER_SUITENAME 0x0000040
1229 #define VER_PRODUCT_TYPE 0x0000080
1231 /* RtlVerifyVersionInfo() ComparisonType */
1234 #define VER_GREATER 2
1235 #define VER_GREATER_EQUAL 3
1237 #define VER_LESS_EQUAL 5
1241 #define VER_CONDITION_MASK 7
1242 #define VER_NUM_BITS_PER_CONDITION_MASK 3
1244 typedef struct _IMAGE_INFO
{
1245 _ANONYMOUS_UNION
union {
1247 _ANONYMOUS_STRUCT
struct {
1248 ULONG ImageAddressingMode
:8;
1249 ULONG SystemModeImage
:1;
1250 ULONG ImageMappedToAllPids
:1;
1251 ULONG ExtendedInfoPresent
:1;
1256 ULONG ImageSelector
;
1258 ULONG ImageSectionNumber
;
1259 } IMAGE_INFO
, *PIMAGE_INFO
;
1261 #define IMAGE_ADDRESSING_MODE_32BIT 3
1263 typedef enum _BUS_DATA_TYPE
{
1264 ConfigurationSpaceUndefined
= -1,
1272 PCMCIAConfiguration
,
1275 PNPISAConfiguration
,
1276 SgiInternalConfiguration
,
1278 } BUS_DATA_TYPE
, *PBUS_DATA_TYPE
;
1280 typedef struct _NT_TIB
{
1281 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
1285 _ANONYMOUS_UNION
union {
1289 PVOID ArbitraryUserPointer
;
1290 struct _NT_TIB
*Self
;
1293 typedef struct _NT_TIB32
{
1294 ULONG ExceptionList
;
1298 __GNU_EXTENSION
union {
1302 ULONG ArbitraryUserPointer
;
1304 } NT_TIB32
,*PNT_TIB32
;
1306 typedef struct _NT_TIB64
{
1307 ULONG64 ExceptionList
;
1310 ULONG64 SubSystemTib
;
1311 __GNU_EXTENSION
union {
1315 ULONG64 ArbitraryUserPointer
;
1317 } NT_TIB64
,*PNT_TIB64
;
1319 typedef enum _PROCESSINFOCLASS
{
1320 ProcessBasicInformation
,
1325 ProcessBasePriority
,
1326 ProcessRaisePriority
,
1328 ProcessExceptionPort
,
1330 ProcessLdtInformation
,
1332 ProcessDefaultHardErrorMode
,
1333 ProcessIoPortHandlers
,
1334 ProcessPooledUsageAndLimits
,
1335 ProcessWorkingSetWatch
,
1336 ProcessUserModeIOPL
,
1337 ProcessEnableAlignmentFaultFixup
,
1338 ProcessPriorityClass
,
1339 ProcessWx86Information
,
1341 ProcessAffinityMask
,
1342 ProcessPriorityBoost
,
1344 ProcessSessionInformation
,
1345 ProcessForegroundInformation
,
1346 ProcessWow64Information
,
1347 ProcessImageFileName
,
1348 ProcessLUIDDeviceMapsEnabled
,
1349 ProcessBreakOnTermination
,
1350 ProcessDebugObjectHandle
,
1352 ProcessHandleTracing
,
1354 ProcessExecuteFlags
,
1355 ProcessTlsInformation
,
1357 ProcessImageInformation
,
1359 ProcessPagePriority
,
1360 ProcessInstrumentationCallback
,
1361 ProcessThreadStackAllocation
,
1362 ProcessWorkingSetWatchEx
,
1363 ProcessImageFileNameWin32
,
1364 ProcessImageFileMapping
,
1365 ProcessAffinityUpdateMode
,
1366 ProcessMemoryAllocationMode
,
1367 ProcessGroupInformation
,
1368 ProcessTokenVirtualizationEnabled
,
1369 ProcessConsoleHostProcess
,
1370 ProcessWindowInformation
,
1374 typedef enum _THREADINFOCLASS
{
1375 ThreadBasicInformation
,
1380 ThreadImpersonationToken
,
1381 ThreadDescriptorTableEntry
,
1382 ThreadEnableAlignmentFaultFixup
,
1383 ThreadEventPair_Reusable
,
1384 ThreadQuerySetWin32StartAddress
,
1386 ThreadPerformanceCount
,
1387 ThreadAmILastThread
,
1388 ThreadIdealProcessor
,
1389 ThreadPriorityBoost
,
1390 ThreadSetTlsArrayAddress
,
1392 ThreadHideFromDebugger
,
1393 ThreadBreakOnTermination
,
1394 ThreadSwitchLegacyState
,
1396 ThreadLastSystemCall
,
1400 ThreadActualBasePriority
,
1401 ThreadTebInformation
,
1405 ThreadGroupInformation
,
1406 ThreadUmsInformation
,
1407 ThreadCounterProfiling
,
1408 ThreadIdealProcessorEx
,
1412 typedef struct _PROCESS_BASIC_INFORMATION
{
1413 NTSTATUS ExitStatus
;
1414 struct _PEB
*PebBaseAddress
;
1415 ULONG_PTR AffinityMask
;
1416 KPRIORITY BasePriority
;
1417 ULONG_PTR UniqueProcessId
;
1418 ULONG_PTR InheritedFromUniqueProcessId
;
1419 } PROCESS_BASIC_INFORMATION
,*PPROCESS_BASIC_INFORMATION
;
1421 typedef struct _PROCESS_WS_WATCH_INFORMATION
{
1424 } PROCESS_WS_WATCH_INFORMATION
, *PPROCESS_WS_WATCH_INFORMATION
;
1426 typedef struct _PROCESS_DEVICEMAP_INFORMATION
{
1427 __GNU_EXTENSION
union {
1429 HANDLE DirectoryHandle
;
1433 UCHAR DriveType
[32];
1436 } PROCESS_DEVICEMAP_INFORMATION
, *PPROCESS_DEVICEMAP_INFORMATION
;
1438 typedef struct _KERNEL_USER_TIMES
{
1439 LARGE_INTEGER CreateTime
;
1440 LARGE_INTEGER ExitTime
;
1441 LARGE_INTEGER KernelTime
;
1442 LARGE_INTEGER UserTime
;
1443 } KERNEL_USER_TIMES
, *PKERNEL_USER_TIMES
;
1445 typedef struct _PROCESS_ACCESS_TOKEN
{
1448 } PROCESS_ACCESS_TOKEN
, *PPROCESS_ACCESS_TOKEN
;
1450 typedef struct _PROCESS_SESSION_INFORMATION
{
1452 } PROCESS_SESSION_INFORMATION
, *PPROCESS_SESSION_INFORMATION
;
1454 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT
{
1455 IoQueryDeviceIdentifier
= 0,
1456 IoQueryDeviceConfigurationData
,
1457 IoQueryDeviceComponentInformation
,
1458 IoQueryDeviceMaxData
1459 } IO_QUERY_DEVICE_DATA_FORMAT
, *PIO_QUERY_DEVICE_DATA_FORMAT
;
1461 typedef struct _DISK_SIGNATURE
{
1462 ULONG PartitionStyle
;
1463 _ANONYMOUS_UNION
union {
1472 } DISK_SIGNATURE
, *PDISK_SIGNATURE
;
1475 (NTAPI
*PDRIVER_VERIFIER_THUNK_ROUTINE
)(
1478 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS
{
1479 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine
;
1480 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine
;
1481 } DRIVER_VERIFIER_THUNK_PAIRS
, *PDRIVER_VERIFIER_THUNK_PAIRS
;
1483 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
1484 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
1485 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
1486 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
1487 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
1490 (NTAPI
*PTIMER_APC_ROUTINE
)(
1491 IN PVOID TimerContext
,
1492 IN ULONG TimerLowValue
,
1493 IN LONG TimerHighValue
);
1495 typedef struct _KUSER_SHARED_DATA
1497 ULONG TickCountLowDeprecated
;
1498 ULONG TickCountMultiplier
;
1499 volatile KSYSTEM_TIME InterruptTime
;
1500 volatile KSYSTEM_TIME SystemTime
;
1501 volatile KSYSTEM_TIME TimeZoneBias
;
1502 USHORT ImageNumberLow
;
1503 USHORT ImageNumberHigh
;
1504 WCHAR NtSystemRoot
[260];
1505 ULONG MaxStackTraceDepth
;
1506 ULONG CryptoExponent
;
1508 ULONG LargePageMinimum
;
1510 NT_PRODUCT_TYPE NtProductType
;
1511 BOOLEAN ProductTypeIsValid
;
1512 ULONG NtMajorVersion
;
1513 ULONG NtMinorVersion
;
1514 BOOLEAN ProcessorFeatures
[PROCESSOR_FEATURE_MAX
];
1517 volatile ULONG TimeSlip
;
1518 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture
;
1519 ULONG AltArchitecturePad
[1];
1520 LARGE_INTEGER SystemExpirationDate
;
1522 BOOLEAN KdDebuggerEnabled
;
1523 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
1524 UCHAR NXSupportPolicy
;
1526 volatile ULONG ActiveConsoleId
;
1527 volatile ULONG DismountCount
;
1528 ULONG ComPlusPackage
;
1529 ULONG LastSystemRITEventTickCount
;
1530 ULONG NumberOfPhysicalPages
;
1531 BOOLEAN SafeBootMode
;
1532 #if (NTDDI_VERSION >= NTDDI_WIN7)
1536 UCHAR TscQpcEnabled
:1;
1537 UCHAR TscQpcSpareFlag
:1;
1538 UCHAR TscQpcShift
:6;
1543 #if (NTDDI_VERSION >= NTDDI_VISTA)
1545 ULONG SharedDataFlags
;
1547 ULONG DbgErrorPortPresent
:1;
1548 ULONG DbgElevationEnabled
:1;
1549 ULONG DbgVirtEnabled
:1;
1550 ULONG DbgInstallerDetectEnabled
:1;
1551 ULONG DbgSystemDllRelocated
:1;
1552 ULONG DbgDynProcessorEnabled
:1;
1553 ULONG DbgSEHValidationEnabled
:1;
1560 ULONG DataFlagsPad
[1];
1561 ULONGLONG TestRetInstruction
;
1563 ULONG SystemCallReturn
;
1564 ULONGLONG SystemCallPad
[3];
1565 _ANONYMOUS_UNION
union {
1566 volatile KSYSTEM_TIME TickCount
;
1567 volatile ULONG64 TickCountQuad
;
1568 _ANONYMOUS_STRUCT
struct {
1569 ULONG ReservedTickCountOverlay
[3];
1570 ULONG TickCountPad
[1];
1575 #if (NTDDI_VERSION >= NTDDI_WS03)
1576 LONGLONG ConsoleSessionForegroundProcessId
;
1577 ULONG Wow64SharedInformation
[MAX_WOW64_SHARED_ENTRIES
];
1579 #if (NTDDI_VERSION >= NTDDI_VISTA)
1580 #if (NTDDI_VERSION >= NTDDI_WIN7)
1581 USHORT UserModeGlobalLogger
[16];
1583 USHORT UserModeGlobalLogger
[8];
1584 ULONG HeapTracingPid
[2];
1585 ULONG CritSecTracingPid
[2];
1587 ULONG ImageFileExecutionOptions
;
1588 #if (NTDDI_VERSION >= NTDDI_VISTASP1)
1589 ULONG LangGenerationCount
;
1591 /* 4 bytes padding */
1593 ULONGLONG Reserved5
;
1594 volatile ULONG64 InterruptTimeBias
;
1596 #if (NTDDI_VERSION >= NTDDI_WIN7)
1597 volatile ULONG64 TscQpcBias
;
1598 volatile ULONG ActiveProcessorCount
;
1599 volatile USHORT ActiveGroupCount
;
1601 volatile ULONG AitSamplingValue
;
1602 volatile ULONG AppCompatFlag
;
1603 ULONGLONG SystemDllNativeRelocation
;
1604 ULONG SystemDllWowRelocation
;
1606 XSTATE_CONFIGURATION XState
;
1608 } KUSER_SHARED_DATA
, *PKUSER_SHARED_DATA
;
1610 extern NTKERNELAPI PVOID MmHighestUserAddress
;
1611 extern NTKERNELAPI PVOID MmSystemRangeStart
;
1612 extern NTKERNELAPI ULONG MmUserProbeAddress
;
1617 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1618 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1619 #if defined(_LOCAL_COPY_USER_PROBE_ADDRESS_)
1620 #define MM_USER_PROBE_ADDRESS _LOCAL_COPY_USER_PROBE_ADDRESS_
1621 extern ULONG _LOCAL_COPY_USER_PROBE_ADDRESS_
;
1623 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1625 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1626 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
1627 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
1628 #if !defined (_X86PAE_)
1629 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
1631 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
1634 #define KeGetPcr() PCR
1636 #define PCR_MINOR_VERSION 1
1637 #define PCR_MAJOR_VERSION 1
1639 typedef struct _KPCR
{
1643 struct _EXCEPTION_REGISTRATION_RECORD
*Used_ExceptionList
;
1644 PVOID Used_StackBase
;
1647 ULONG ContextSwitches
;
1648 KAFFINITY SetMemberCopy
;
1652 struct _KPCR
*SelfPcr
;
1653 struct _KPRCB
*Prcb
;
1658 PVOID KdVersionBlock
;
1659 struct _KIDTENTRY
*IDT
;
1660 struct _KGDTENTRY
*GDT
;
1662 USHORT MajorVersion
;
1663 USHORT MinorVersion
;
1664 KAFFINITY SetMember
;
1665 ULONG StallScaleFactor
;
1669 UCHAR SecondLevelCacheAssociativity
;
1671 ULONG KernelReserved
[14];
1672 ULONG SecondLevelCacheSize
;
1673 ULONG HalReserved
[16];
1678 KeGetCurrentProcessorNumber(VOID
)
1680 return (ULONG
)__readfsbyte(FIELD_OFFSET(KPCR
, Number
));
1687 #define PTI_SHIFT 12L
1688 #define PDI_SHIFT 21L
1689 #define PPI_SHIFT 30L
1690 #define PXI_SHIFT 39L
1691 #define PTE_PER_PAGE 512
1692 #define PDE_PER_PAGE 512
1693 #define PPE_PER_PAGE 512
1694 #define PXE_PER_PAGE 512
1695 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1)
1696 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1)
1697 #define PPI_MASK (PPE_PER_PAGE - 1)
1698 #define PXI_MASK (PXE_PER_PAGE - 1)
1700 #define PXE_BASE 0xFFFFF6FB7DBED000ULL
1701 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL
1702 #define PPE_BASE 0xFFFFF6FB7DA00000ULL
1703 #define PDE_BASE 0xFFFFF6FB40000000ULL
1704 #define PTE_BASE 0xFFFFF68000000000ULL
1705 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL
1706 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL
1707 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL
1708 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL
1710 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress
1711 #define MM_SYSTEM_RANGE_START MmSystemRangeStart
1712 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress
1713 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
1714 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL
1715 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL
1717 typedef struct _KPCR
1719 _ANONYMOUS_UNION
union
1722 _ANONYMOUS_STRUCT
struct
1724 union _KGDTENTRY64
*GdtBase
;
1725 struct _KTSS64
*TssBase
;
1728 struct _KPRCB
*CurrentPrcb
;
1729 PKSPIN_LOCK_QUEUE LockArray
;
1733 union _KIDTENTRY64
*IdtBase
;
1736 UCHAR SecondLevelCacheAssociativity
;
1737 UCHAR ObsoleteNumber
;
1740 USHORT MajorVersion
;
1741 USHORT MinorVersion
;
1742 ULONG StallScaleFactor
;
1744 ULONG KernelReserved
[15];
1745 ULONG SecondLevelCacheSize
;
1746 ULONG HalReserved
[16];
1748 PVOID KdVersionBlock
;
1750 ULONG PcrAlign1
[24];
1757 return (PKPCR
)__readgsqword(FIELD_OFFSET(KPCR
, Self
));
1762 KeGetCurrentProcessorNumber(VOID
)
1764 return (ULONG
)__readgsword(0x184);
1767 #endif /* _AMD64_ */
1769 typedef enum _INTERLOCKED_RESULT
{
1770 ResultNegative
= RESULT_NEGATIVE
,
1771 ResultZero
= RESULT_ZERO
,
1772 ResultPositive
= RESULT_POSITIVE
1773 } INTERLOCKED_RESULT
;
1775 typedef struct _OSVERSIONINFOA
{
1776 ULONG dwOSVersionInfoSize
;
1777 ULONG dwMajorVersion
;
1778 ULONG dwMinorVersion
;
1779 ULONG dwBuildNumber
;
1781 CHAR szCSDVersion
[128];
1782 } OSVERSIONINFOA
, *POSVERSIONINFOA
, *LPOSVERSIONINFOA
;
1784 typedef struct _OSVERSIONINFOW
{
1785 ULONG dwOSVersionInfoSize
;
1786 ULONG dwMajorVersion
;
1787 ULONG dwMinorVersion
;
1788 ULONG dwBuildNumber
;
1790 WCHAR szCSDVersion
[128];
1791 } OSVERSIONINFOW
, *POSVERSIONINFOW
, *LPOSVERSIONINFOW
, RTL_OSVERSIONINFOW
, *PRTL_OSVERSIONINFOW
;
1793 typedef struct _OSVERSIONINFOEXA
{
1794 ULONG dwOSVersionInfoSize
;
1795 ULONG dwMajorVersion
;
1796 ULONG dwMinorVersion
;
1797 ULONG dwBuildNumber
;
1799 CHAR szCSDVersion
[128];
1800 USHORT wServicePackMajor
;
1801 USHORT wServicePackMinor
;
1805 } OSVERSIONINFOEXA
, *POSVERSIONINFOEXA
, *LPOSVERSIONINFOEXA
;
1807 typedef struct _OSVERSIONINFOEXW
{
1808 ULONG dwOSVersionInfoSize
;
1809 ULONG dwMajorVersion
;
1810 ULONG dwMinorVersion
;
1811 ULONG dwBuildNumber
;
1813 WCHAR szCSDVersion
[128];
1814 USHORT wServicePackMajor
;
1815 USHORT wServicePackMinor
;
1819 } OSVERSIONINFOEXW
, *POSVERSIONINFOEXW
, *LPOSVERSIONINFOEXW
, RTL_OSVERSIONINFOEXW
, *PRTL_OSVERSIONINFOEXW
;
1822 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
1823 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
1824 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
1825 typedef OSVERSIONINFOW OSVERSIONINFO
;
1826 typedef POSVERSIONINFOW POSVERSIONINFO
;
1827 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
1829 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
1830 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
1831 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
1832 typedef OSVERSIONINFOA OSVERSIONINFO
;
1833 typedef POSVERSIONINFOA POSVERSIONINFO
;
1834 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
1835 #endif /* UNICODE */
1837 /* Executive Types */
1839 #define PROTECTED_POOL 0x80000000
1841 typedef struct _ZONE_SEGMENT_HEADER
{
1842 SINGLE_LIST_ENTRY SegmentList
;
1844 } ZONE_SEGMENT_HEADER
, *PZONE_SEGMENT_HEADER
;
1846 typedef struct _ZONE_HEADER
{
1847 SINGLE_LIST_ENTRY FreeList
;
1848 SINGLE_LIST_ENTRY SegmentList
;
1850 ULONG TotalSegmentSize
;
1851 } ZONE_HEADER
, *PZONE_HEADER
;
1853 /* Executive Functions */
1855 static __inline PVOID
1857 IN PZONE_HEADER Zone
)
1859 if (Zone
->FreeList
.Next
)
1860 Zone
->FreeList
.Next
= Zone
->FreeList
.Next
->Next
;
1861 return (PVOID
) Zone
->FreeList
.Next
;
1864 static __inline PVOID
1866 IN PZONE_HEADER Zone
,
1869 ((PSINGLE_LIST_ENTRY
) Block
)->Next
= Zone
->FreeList
.Next
;
1870 Zone
->FreeList
.Next
= ((PSINGLE_LIST_ENTRY
) Block
);
1871 return ((PSINGLE_LIST_ENTRY
) Block
)->Next
;
1876 * ExInterlockedAllocateFromZone(
1877 * IN PZONE_HEADER Zone,
1878 * IN PKSPIN_LOCK Lock)
1880 #define ExInterlockedAllocateFromZone(Zone, Lock) \
1881 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock))
1884 * ExInterlockedFreeToZone(
1885 * IN PZONE_HEADER Zone,
1887 * IN PKSPIN_LOCK Lock);
1889 #define ExInterlockedFreeToZone(Zone, Block, Lock) \
1890 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock)
1895 * IN PZONE_HEADER Zone)
1897 #define ExIsFullZone(Zone) \
1898 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL)
1901 * ExIsObjectInFirstZoneSegment(
1902 * IN PZONE_HEADER Zone,
1905 #define ExIsObjectInFirstZoneSegment(Zone,Object) \
1906 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \
1907 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \
1908 (Zone)->TotalSegmentSize)) )
1910 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite
1911 #define ExAcquireResourceShared ExAcquireResourceSharedLite
1912 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite
1913 #define ExDeleteResource ExDeleteResourceLite
1914 #define ExInitializeResource ExInitializeResourceLite
1915 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite
1916 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite
1917 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite
1918 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite
1920 #if (NTDDI_VERSION >= NTDDI_WIN2K)
1926 IN OUT PZONE_HEADER Zone
,
1927 IN OUT PVOID Segment
,
1928 IN ULONG SegmentSize
);
1934 OUT PZONE_HEADER Zone
,
1936 IN OUT PVOID InitialSegment
,
1937 IN ULONG InitialSegmentSize
);
1942 ExInterlockedExtendZone(
1943 IN OUT PZONE_HEADER Zone
,
1944 IN OUT PVOID Segment
,
1945 IN ULONG SegmentSize
,
1946 IN OUT PKSPIN_LOCK Lock
);
1958 ExRaiseAccessViolation(
1965 ExRaiseDatatypeMisalignment(
1975 Exfi386InterlockedIncrementLong(
1976 IN OUT LONG
volatile *Addend
);
1981 Exfi386InterlockedDecrementLong(
1987 Exfi386InterlockedExchangeUlong(
1995 typedef enum _CONFIGURATION_TYPE
{
1998 FloatingPointProcessor
,
2008 MultiFunctionAdapter
,
2022 FloppyDiskPeripheral
,
2035 RealModeIrqRoutingTable
,
2036 RealModePCIEnumeration
,
2038 } CONFIGURATION_TYPE
, *PCONFIGURATION_TYPE
;
2039 #endif /* !_ARC_DDK_ */
2041 typedef struct _CONTROLLER_OBJECT
{
2044 PVOID ControllerExtension
;
2045 KDEVICE_QUEUE DeviceWaitQueue
;
2047 LARGE_INTEGER Spare2
;
2048 } CONTROLLER_OBJECT
, *PCONTROLLER_OBJECT
;
2050 typedef struct _CONFIGURATION_INFORMATION
{
2055 ULONG ScsiPortCount
;
2057 ULONG ParallelCount
;
2058 BOOLEAN AtDiskPrimaryAddressClaimed
;
2059 BOOLEAN AtDiskSecondaryAddressClaimed
;
2061 ULONG MediumChangerCount
;
2062 } CONFIGURATION_INFORMATION
, *PCONFIGURATION_INFORMATION
;
2066 (NTAPI
*PIO_QUERY_DEVICE_ROUTINE
)(
2068 IN PUNICODE_STRING PathName
,
2069 IN INTERFACE_TYPE BusType
,
2071 IN PKEY_VALUE_FULL_INFORMATION
*BusInformation
,
2072 IN CONFIGURATION_TYPE ControllerType
,
2073 IN ULONG ControllerNumber
,
2074 IN PKEY_VALUE_FULL_INFORMATION
*ControllerInformation
,
2075 IN CONFIGURATION_TYPE PeripheralType
,
2076 IN ULONG PeripheralNumber
,
2077 IN PKEY_VALUE_FULL_INFORMATION
*PeripheralInformation
);
2081 (NTAPI DRIVER_REINITIALIZE
)(
2082 IN
struct _DRIVER_OBJECT
*DriverObject
,
2086 typedef DRIVER_REINITIALIZE
*PDRIVER_REINITIALIZE
;
2088 /** Filesystem runtime library routines **/
2090 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2094 FsRtlIsTotalDeviceFailure(
2095 IN NTSTATUS Status
);
2098 /* Hardware Abstraction Layer Types */
2101 (NTAPI
*PciPin2Line
)(
2102 IN
struct _BUS_HANDLER
*BusHandler
,
2103 IN
struct _BUS_HANDLER
*RootHandler
,
2104 IN PCI_SLOT_NUMBER SlotNumber
,
2105 IN PPCI_COMMON_CONFIG PciData
);
2108 (NTAPI
*PciLine2Pin
)(
2109 IN
struct _BUS_HANDLER
*BusHandler
,
2110 IN
struct _BUS_HANDLER
*RootHandler
,
2111 IN PCI_SLOT_NUMBER SlotNumber
,
2112 IN PPCI_COMMON_CONFIG PciNewData
,
2113 IN PPCI_COMMON_CONFIG PciOldData
);
2116 (NTAPI
*PciReadWriteConfig
)(
2117 IN
struct _BUS_HANDLER
*BusHandler
,
2118 IN PCI_SLOT_NUMBER Slot
,
2123 #define PCI_DATA_TAG ' ICP'
2124 #define PCI_DATA_VERSION 1
2126 typedef struct _PCIBUSDATA
{
2129 PciReadWriteConfig ReadConfig
;
2130 PciReadWriteConfig WriteConfig
;
2131 PciPin2Line Pin2Line
;
2132 PciLine2Pin Line2Pin
;
2133 PCI_SLOT_NUMBER ParentSlot
;
2135 } PCIBUSDATA
, *PPCIBUSDATA
;
2137 /* Hardware Abstraction Layer Functions */
2139 #if !defined(NO_LEGACY_DRIVERS)
2141 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2146 HalAssignSlotResources(
2147 IN PUNICODE_STRING RegistryPath
,
2148 IN PUNICODE_STRING DriverClassName
,
2149 IN PDRIVER_OBJECT DriverObject
,
2150 IN PDEVICE_OBJECT DeviceObject
,
2151 IN INTERFACE_TYPE BusType
,
2153 IN ULONG SlotNumber
,
2154 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2159 HalGetInterruptVector(
2160 IN INTERFACE_TYPE InterfaceType
,
2162 IN ULONG BusInterruptLevel
,
2163 IN ULONG BusInterruptVector
,
2165 OUT PKAFFINITY Affinity
);
2171 IN BUS_DATA_TYPE BusDataType
,
2173 IN ULONG SlotNumber
,
2179 #endif /* !defined(NO_LEGACY_DRIVERS) */
2181 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2187 IN PDEVICE_DESCRIPTION DeviceDescription
,
2188 IN OUT PULONG NumberOfMapRegisters
);
2194 IN ULONG Frequency
);
2199 IN PADAPTER_OBJECT DmaAdapter
);
2204 HalAcquireDisplayOwnership(
2205 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters
);
2211 IN BUS_DATA_TYPE BusDataType
,
2213 IN ULONG SlotNumber
,
2220 HalGetBusDataByOffset(
2221 IN BUS_DATA_TYPE BusDataType
,
2223 IN ULONG SlotNumber
,
2231 HalSetBusDataByOffset(
2232 IN BUS_DATA_TYPE BusDataType
,
2234 IN ULONG SlotNumber
,
2242 HalTranslateBusAddress(
2243 IN INTERFACE_TYPE InterfaceType
,
2245 IN PHYSICAL_ADDRESS BusAddress
,
2246 IN OUT PULONG AddressSpace
,
2247 OUT PPHYSICAL_ADDRESS TranslatedAddress
);
2251 #if (NTDDI_VERSION >= NTDDI_WINXP)
2256 IN PDEVICE_OBJECT DeviceObject
,
2257 IN ULONG SectorSize
,
2258 IN ULONG MBRTypeIdentifier
,
2262 #if defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_)
2266 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2267 //DECLSPEC_DEPRECATED_DDK
2271 IoFreeAdapterChannel(
2272 IN PADAPTER_OBJECT AdapterObject
);
2274 //DECLSPEC_DEPRECATED_DDK
2278 IoFlushAdapterBuffers(
2279 IN PADAPTER_OBJECT AdapterObject
,
2281 IN PVOID MapRegisterBase
,
2284 IN BOOLEAN WriteToDevice
);
2286 //DECLSPEC_DEPRECATED_DDK
2291 IN PADAPTER_OBJECT AdapterObject
,
2292 IN PVOID MapRegisterBase
,
2293 IN ULONG NumberOfMapRegisters
);
2295 //DECLSPEC_DEPRECATED_DDK
2299 HalAllocateCommonBuffer(
2300 IN PADAPTER_OBJECT AdapterObject
,
2302 OUT PPHYSICAL_ADDRESS LogicalAddress
,
2303 IN BOOLEAN CacheEnabled
);
2305 //DECLSPEC_DEPRECATED_DDK
2309 HalFreeCommonBuffer(
2310 IN PADAPTER_OBJECT AdapterObject
,
2312 IN PHYSICAL_ADDRESS LogicalAddress
,
2313 IN PVOID VirtualAddress
,
2314 IN BOOLEAN CacheEnabled
);
2316 //DECLSPEC_DEPRECATED_DDK
2321 IN PADAPTER_OBJECT AdapterObject
);
2326 HalAllocateAdapterChannel(
2327 IN PADAPTER_OBJECT AdapterObject
,
2328 IN PWAIT_CONTEXT_BLOCK Wcb
,
2329 IN ULONG NumberOfMapRegisters
,
2330 IN PDRIVER_CONTROL ExecutionRoutine
);
2332 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2334 #endif /* defined(USE_DMA_MACROS) && !defined(_NTHAL_) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_) */
2336 /* I/O Manager Functions */
2339 * VOID IoAssignArcName(
2340 * IN PUNICODE_STRING ArcName,
2341 * IN PUNICODE_STRING DeviceName);
2343 #define IoAssignArcName(_ArcName, _DeviceName) ( \
2344 IoCreateSymbolicLink((_ArcName), (_DeviceName)))
2348 * IoDeassignArcName(
2349 * IN PUNICODE_STRING ArcName)
2351 #define IoDeassignArcName IoDeleteSymbolicLink
2353 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2355 #if !(defined(USE_DMA_MACROS) && (defined(_NTDDK_) || defined(_NTDRIVER_)) || defined(_WDM_INCLUDED_))
2359 IoAllocateAdapterChannel(
2360 IN PADAPTER_OBJECT AdapterObject
,
2361 IN PDEVICE_OBJECT DeviceObject
,
2362 IN ULONG NumberOfMapRegisters
,
2363 IN PDRIVER_CONTROL ExecutionRoutine
,
2367 //DECLSPEC_DEPRECATED_DDK
2372 IN PADAPTER_OBJECT AdapterObject
,
2374 IN PVOID MapRegisterBase
,
2376 IN OUT PULONG Length
,
2377 IN BOOLEAN WriteToDevice
);
2382 IoAllocateController(
2383 IN PCONTROLLER_OBJECT ControllerObject
,
2384 IN PDEVICE_OBJECT DeviceObject
,
2385 IN PDRIVER_CONTROL ExecutionRoutine
,
2386 IN PVOID Context OPTIONAL
);
2398 IN PCONTROLLER_OBJECT ControllerObject
);
2404 IN PCONTROLLER_OBJECT ControllerObject
);
2407 PCONFIGURATION_INFORMATION
2409 IoGetConfigurationInformation(
2415 IoGetDeviceToVerify(
2416 IN PETHREAD Thread
);
2422 IN PDEVICE_OBJECT DeviceObject
,
2423 IN PFILE_OBJECT FileObject
);
2428 IoGetFileObjectGenericMapping(
2434 IoMakeAssociatedIrp(
2436 IN CCHAR StackSize
);
2441 IoQueryDeviceDescription(
2442 IN PINTERFACE_TYPE BusType OPTIONAL
,
2443 IN PULONG BusNumber OPTIONAL
,
2444 IN PCONFIGURATION_TYPE ControllerType OPTIONAL
,
2445 IN PULONG ControllerNumber OPTIONAL
,
2446 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL
,
2447 IN PULONG PeripheralNumber OPTIONAL
,
2448 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine
,
2449 IN OUT PVOID Context OPTIONAL
);
2456 IN PVPB Vpb OPTIONAL
,
2457 IN PDEVICE_OBJECT RealDeviceObject
);
2462 IoRaiseInformationalHardError(
2463 IN NTSTATUS ErrorStatus
,
2464 IN PUNICODE_STRING String OPTIONAL
,
2465 IN PKTHREAD Thread OPTIONAL
);
2470 IoRegisterBootDriverReinitialization(
2471 IN PDRIVER_OBJECT DriverObject
,
2472 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2473 IN PVOID Context OPTIONAL
);
2478 IoRegisterDriverReinitialization(
2479 IN PDRIVER_OBJECT DriverObject
,
2480 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine
,
2481 IN PVOID Context OPTIONAL
);
2486 IoAttachDeviceByPointer(
2487 IN PDEVICE_OBJECT SourceDevice
,
2488 IN PDEVICE_OBJECT TargetDevice
);
2493 IoReportDetectedDevice(
2494 IN PDRIVER_OBJECT DriverObject
,
2495 IN INTERFACE_TYPE LegacyBusType
,
2497 IN ULONG SlotNumber
,
2498 IN PCM_RESOURCE_LIST ResourceList OPTIONAL
,
2499 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL
,
2500 IN BOOLEAN ResourceAssigned
,
2501 IN OUT PDEVICE_OBJECT
*DeviceObject
);
2506 IoReportResourceForDetection(
2507 IN PDRIVER_OBJECT DriverObject
,
2508 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2509 IN ULONG DriverListSize OPTIONAL
,
2510 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2511 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2512 IN ULONG DeviceListSize OPTIONAL
,
2513 OUT PBOOLEAN ConflictDetected
);
2518 IoReportResourceUsage(
2519 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2520 IN PDRIVER_OBJECT DriverObject
,
2521 IN PCM_RESOURCE_LIST DriverList OPTIONAL
,
2522 IN ULONG DriverListSize OPTIONAL
,
2523 IN PDEVICE_OBJECT DeviceObject
,
2524 IN PCM_RESOURCE_LIST DeviceList OPTIONAL
,
2525 IN ULONG DeviceListSize OPTIONAL
,
2526 IN BOOLEAN OverrideConflict
,
2527 OUT PBOOLEAN ConflictDetected
);
2532 IoSetHardErrorOrVerifyDevice(
2534 IN PDEVICE_OBJECT DeviceObject
);
2540 IN PUNICODE_STRING RegistryPath
,
2541 IN PUNICODE_STRING DriverClassName OPTIONAL
,
2542 IN PDRIVER_OBJECT DriverObject
,
2543 IN PDEVICE_OBJECT DeviceObject OPTIONAL
,
2544 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources OPTIONAL
,
2545 IN OUT PCM_RESOURCE_LIST
*AllocatedResources
);
2547 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2549 #if (NTDDI_VERSION >= NTDDI_WINXP)
2555 IN PDEVICE_OBJECT DeviceObject
,
2556 IN
struct _CREATE_DISK
* Disk OPTIONAL
);
2561 IoReadDiskSignature(
2562 IN PDEVICE_OBJECT DeviceObject
,
2563 IN ULONG BytesPerSector
,
2564 OUT PDISK_SIGNATURE Signature
);
2569 IoReadPartitionTable(
2570 IN PDEVICE_OBJECT DeviceObject
,
2571 IN ULONG SectorSize
,
2572 IN BOOLEAN ReturnRecognizedPartitions
,
2573 OUT
struct _DRIVE_LAYOUT_INFORMATION
**PartitionBuffer
);
2578 IoReadPartitionTableEx(
2579 IN PDEVICE_OBJECT DeviceObject
,
2580 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
**PartitionBuffer
);
2585 IoSetPartitionInformation(
2586 IN PDEVICE_OBJECT DeviceObject
,
2587 IN ULONG SectorSize
,
2588 IN ULONG PartitionNumber
,
2589 IN ULONG PartitionType
);
2594 IoSetPartitionInformationEx(
2595 IN PDEVICE_OBJECT DeviceObject
,
2596 IN ULONG PartitionNumber
,
2597 IN
struct _SET_PARTITION_INFORMATION_EX
*PartitionInfo
);
2602 IoSetSystemPartition(
2603 IN PUNICODE_STRING VolumeNameString
);
2608 IoSetThreadHardErrorMode(
2609 IN BOOLEAN EnableHardErrors
);
2614 IoVerifyPartitionTable(
2615 IN PDEVICE_OBJECT DeviceObject
,
2616 IN BOOLEAN FixErrors
);
2621 IoVolumeDeviceToDosName(
2622 IN PVOID VolumeDeviceObject
,
2623 OUT PUNICODE_STRING DosName
);
2628 IoWritePartitionTable(
2629 IN PDEVICE_OBJECT DeviceObject
,
2630 IN ULONG SectorSize
,
2631 IN ULONG SectorsPerTrack
,
2632 IN ULONG NumberOfHeads
,
2633 IN
struct _DRIVE_LAYOUT_INFORMATION
*PartitionBuffer
);
2638 IoWritePartitionTableEx(
2639 IN PDEVICE_OBJECT DeviceObject
,
2640 IN
struct _DRIVE_LAYOUT_INFORMATION_EX
*DriveLayout
);
2642 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2644 /** Kernel debugger routines **/
2652 IN ULONG MaximumResponseLength
);
2654 /* Kernel Functions */
2656 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2663 IN ULONG BugCheckCode
);
2669 IN OUT PRKEVENT Event
,
2670 IN KPRIORITY Increment
,
2676 KeSetBasePriorityThread(
2677 IN OUT PRKTHREAD Thread
,
2682 /* Memory Manager Types */
2684 typedef struct _PHYSICAL_MEMORY_RANGE
{
2685 PHYSICAL_ADDRESS BaseAddress
;
2686 LARGE_INTEGER NumberOfBytes
;
2687 } PHYSICAL_MEMORY_RANGE
, *PPHYSICAL_MEMORY_RANGE
;
2689 /* Memory Manager Functions */
2691 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2694 PPHYSICAL_MEMORY_RANGE
2696 MmGetPhysicalMemoryRanges(
2702 MmGetPhysicalAddress(
2703 IN PVOID BaseAddress
);
2708 MmIsNonPagedSystemAddressValid(
2709 IN PVOID VirtualAddress
);
2714 MmAllocateNonCachedMemory(
2715 IN SIZE_T NumberOfBytes
);
2720 MmFreeNonCachedMemory(
2721 IN PVOID BaseAddress
,
2722 IN SIZE_T NumberOfBytes
);
2727 MmGetVirtualForPhysical(
2728 IN PHYSICAL_ADDRESS PhysicalAddress
);
2733 MmMapUserAddressesToPage(
2734 IN PVOID BaseAddress
,
2735 IN SIZE_T NumberOfBytes
,
2736 IN PVOID PageAddress
);
2742 IN PHYSICAL_ADDRESS PhysicalAddress
,
2743 IN SIZE_T NumberOfBytes
,
2744 IN MEMORY_CACHING_TYPE CacheType
);
2749 MmMapViewInSessionSpace(
2751 OUT PVOID
*MappedBase
,
2752 IN OUT PSIZE_T ViewSize
);
2757 MmMapViewInSystemSpace(
2759 OUT PVOID
*MappedBase
,
2760 IN OUT PSIZE_T ViewSize
);
2766 IN PVOID VirtualAddress
);
2771 MmIsThisAnNtAsSystem(
2777 MmLockPagableSectionByHandle(
2778 IN PVOID ImageSectionHandle
);
2783 MmUnmapViewInSessionSpace(
2784 IN PVOID MappedBase
);
2789 MmUnmapViewInSystemSpace(
2790 IN PVOID MappedBase
);
2795 MmUnsecureVirtualMemory(
2796 IN HANDLE SecureHandle
);
2801 MmRemovePhysicalMemory(
2802 IN PPHYSICAL_ADDRESS StartAddress
,
2803 IN OUT PLARGE_INTEGER NumberOfBytes
);
2808 MmSecureVirtualMemory(
2811 IN ULONG ProbeMode
);
2816 MmUnmapVideoDisplay(
2817 IN PVOID BaseAddress
,
2818 IN SIZE_T NumberOfBytes
);
2820 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2822 /* NtXxx Functions */
2828 OUT PHANDLE ProcessHandle
,
2829 IN ACCESS_MASK DesiredAccess
,
2830 IN POBJECT_ATTRIBUTES ObjectAttributes
,
2831 IN PCLIENT_ID ClientId OPTIONAL
);
2836 NtQueryInformationProcess(
2837 IN HANDLE ProcessHandle
,
2838 IN PROCESSINFOCLASS ProcessInformationClass
,
2839 OUT PVOID ProcessInformation OPTIONAL
,
2840 IN ULONG ProcessInformationLength
,
2841 OUT PULONG ReturnLength OPTIONAL
);
2843 /** Process manager types **/
2846 (NTAPI
*PCREATE_PROCESS_NOTIFY_ROUTINE
)(
2848 IN HANDLE ProcessId
,
2852 (NTAPI
*PCREATE_THREAD_NOTIFY_ROUTINE
)(
2853 IN HANDLE ProcessId
,
2858 (NTAPI
*PLOAD_IMAGE_NOTIFY_ROUTINE
)(
2859 IN PUNICODE_STRING FullImageName
,
2860 IN HANDLE ProcessId
,
2861 IN PIMAGE_INFO ImageInfo
);
2863 /** Process manager routines **/
2865 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2870 PsSetLoadImageNotifyRoutine(
2871 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2876 PsSetCreateThreadNotifyRoutine(
2877 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2882 PsSetCreateProcessNotifyRoutine(
2883 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine
,
2889 PsGetCurrentProcessId(
2895 PsGetCurrentThreadId(
2902 OUT PULONG MajorVersion OPTIONAL
,
2903 OUT PULONG MinorVersion OPTIONAL
,
2904 OUT PULONG BuildNumber OPTIONAL
,
2905 OUT PUNICODE_STRING CSDVersion OPTIONAL
);
2907 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
2909 #if (NTDDI_VERSION >= NTDDI_WINXP)
2915 IN PEPROCESS Process
);
2920 PsRemoveCreateThreadNotifyRoutine(
2921 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
);
2926 PsRemoveLoadImageNotifyRoutine(
2927 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
);
2929 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
2931 extern NTKERNELAPI PEPROCESS PsInitialSystemProcess
;
2935 typedef struct _RTL_SPLAY_LINKS
{
2936 struct _RTL_SPLAY_LINKS
*Parent
;
2937 struct _RTL_SPLAY_LINKS
*LeftChild
;
2938 struct _RTL_SPLAY_LINKS
*RightChild
;
2939 } RTL_SPLAY_LINKS
, *PRTL_SPLAY_LINKS
;
2943 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_)
2945 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \
2946 *CallersAddress = (PVOID)_ReturnAddress(); \
2947 *CallersCaller = NULL;
2950 #if (NTDDI_VERSION >= NTDDI_WIN2K)
2954 RtlGetCallersAddress(
2955 OUT PVOID
*CallersAddress
,
2956 OUT PVOID
*CallersCaller
);
2961 #if !defined(MIDL_PASS)
2966 RtlConvertLongToLuid(
2972 Temp
.QuadPart
= Val
;
2973 Luid
.LowPart
= Temp
.u
.LowPart
;
2974 Luid
.HighPart
= Temp
.u
.HighPart
;
2981 RtlConvertUlongToLuid(
2993 #if defined(_AMD64_) || defined(_IA64_)
2994 //DECLSPEC_DEPRECATED_DDK_WINXP
2998 RtlLargeIntegerDivide(
2999 IN LARGE_INTEGER Dividend
,
3000 IN LARGE_INTEGER Divisor
,
3001 OUT PLARGE_INTEGER Remainder OPTIONAL
)
3004 ret
.QuadPart
= Dividend
.QuadPart
/ Divisor
.QuadPart
;
3006 Remainder
->QuadPart
= Dividend
.QuadPart
% Divisor
.QuadPart
;
3012 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3016 RtlLargeIntegerDivide(
3017 IN LARGE_INTEGER Dividend
,
3018 IN LARGE_INTEGER Divisor
,
3019 OUT PLARGE_INTEGER Remainder OPTIONAL
);
3022 #endif /* defined(_AMD64_) || defined(_IA64_) */
3024 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3029 RtlPrefixUnicodeString(
3030 IN PCUNICODE_STRING String1
,
3031 IN PCUNICODE_STRING String2
,
3032 IN BOOLEAN CaseInSensitive
);
3038 IN OUT PSTRING DestinationString
,
3039 IN
const PSTRING SourceString
);
3044 RtlUpcaseUnicodeString(
3045 IN OUT PUNICODE_STRING DestinationString
,
3046 IN PCUNICODE_STRING SourceString
,
3047 IN BOOLEAN AllocateDestinationString
);
3053 IN OUT PACCESS_MASK AccessMask
,
3054 IN PGENERIC_MAPPING GenericMapping
);
3059 RtlVolumeDeviceToDosName(
3060 IN PVOID VolumeDeviceObject
,
3061 OUT PUNICODE_STRING DosName
);
3067 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation
);
3072 RtlVerifyVersionInfo(
3073 IN PRTL_OSVERSIONINFOEXW VersionInfo
,
3075 IN ULONGLONG ConditionMask
);
3081 IN
const PSTRING String1
,
3082 IN
const PSTRING String2
,
3083 BOOLEAN CaseInSensitive
);
3089 OUT PSTRING DestinationString
,
3090 IN
const PSTRING SourceString OPTIONAL
);
3096 IN
const PSTRING String1
,
3097 IN
const PSTRING String2
,
3098 IN BOOLEAN CaseInSensitive
);
3105 IN ULONG Base OPTIONAL
,
3122 #endif /* (NTDDI_VERSION >= NTDDI_WIN2K) */
3124 /* Security reference monitor routines */
3126 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3130 SeSinglePrivilegeCheck(
3131 IN LUID PrivilegeValue
,
3132 IN KPROCESSOR_MODE PreviousMode
);
3135 /* ZwXxx Functions */
3137 #if (NTDDI_VERSION >= NTDDI_WIN2K)
3142 IN HANDLE TimerHandle
,
3143 OUT PBOOLEAN CurrentState OPTIONAL
);
3148 OUT PHANDLE TimerHandle
,
3149 IN ACCESS_MASK DesiredAccess
,
3150 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL
,
3151 IN TIMER_TYPE TimerType
);
3156 OUT PHANDLE TimerHandle
,
3157 IN ACCESS_MASK DesiredAccess
,
3158 IN POBJECT_ATTRIBUTES ObjectAttributes
);
3163 ZwSetInformationThread(
3164 IN HANDLE ThreadHandle
,
3165 IN THREADINFOCLASS ThreadInformationClass
,
3166 IN PVOID ThreadInformation
,
3167 IN ULONG ThreadInformationLength
);
3172 IN HANDLE TimerHandle
,
3173 IN PLARGE_INTEGER DueTime
,
3174 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL
,
3175 IN PVOID TimerContext OPTIONAL
,
3176 IN BOOLEAN ResumeTimer
,
3177 IN LONG Period OPTIONAL
,
3178 OUT PBOOLEAN PreviousState OPTIONAL
);