9498 lines
384 KiB
C
9498 lines
384 KiB
C
|
/*
|
||
|
* wdm.h Windows Driver Model (WDM) functions
|
||
|
*
|
||
|
* =========================================================================
|
||
|
*
|
||
|
* Open Watcom Project
|
||
|
*
|
||
|
* Copyright (c) 2004-2010 The Open Watcom Contributors. All Rights Reserved.
|
||
|
*
|
||
|
* This file is automatically generated. Do not edit directly.
|
||
|
*
|
||
|
* =========================================================================
|
||
|
*/
|
||
|
|
||
|
#ifndef _WDMDDK_
|
||
|
#define _WDMDDK_
|
||
|
|
||
|
#ifndef _ENABLE_AUTODEPEND
|
||
|
#pragma read_only_file;
|
||
|
#endif
|
||
|
|
||
|
#define _ETW_KM_
|
||
|
#include <excpt.h>
|
||
|
#include <ntdef.h>
|
||
|
#include <ntstatus.h>
|
||
|
#include <bugcodes.h>
|
||
|
#include <ntiologc.h>
|
||
|
#include <driverspecs.h>
|
||
|
#include <string.h>
|
||
|
#include <ktmtypes.h>
|
||
|
#ifdef RUN_WPP
|
||
|
#include <evntrace.h>
|
||
|
#include <stdarg.h>
|
||
|
#endif
|
||
|
#include <evntprov.h>
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#include <devpropdef.h>
|
||
|
#endif
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* Suppress inclusion of winnt.h. */
|
||
|
#define NT_INCLUDED
|
||
|
|
||
|
/* Support single-group legacy functions only under pre-Windows 7 or x86 or when
|
||
|
* processor groups are disabled. */
|
||
|
#if (NTDDI_VERSION < 0x06010000) || defined( _X86_ ) || !defined( NT_PROCESSOR_GROUPS )
|
||
|
#define SINGLE_GROUP_LEGACY_API 1
|
||
|
#endif
|
||
|
|
||
|
/* Macro to specify NT kernel and hardware abstraction layer functions */
|
||
|
#define NTKERNELAPI DECLSPEC_IMPORT
|
||
|
#define NTHALAPI DECLSPEC_IMPORT
|
||
|
|
||
|
/* Macro to specify common log file system functions */
|
||
|
#define CLFSUSER_API
|
||
|
|
||
|
/* Primitive data types */
|
||
|
typedef ULONG ACCESS_MASK;
|
||
|
typedef ACCESS_MASK *PACCESS_MASK;
|
||
|
typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE;
|
||
|
typedef BOOLEAN *PSECURITY_CONTEXT_TRACKING_MODE;
|
||
|
typedef ULONG SECURITY_INFORMATION;
|
||
|
typedef ULONG *PSECURITY_INFORMATION;
|
||
|
typedef LONG KPRIORITY;
|
||
|
typedef ULONG_PTR KSPIN_LOCK;
|
||
|
typedef KSPIN_LOCK *PKSPIN_LOCK;
|
||
|
typedef ULONG EXECUTION_STATE;
|
||
|
typedef ULONG *PEXECUTION_STATE;
|
||
|
typedef int CM_RESOURCE_TYPE;
|
||
|
typedef CCHAR KPROCESSOR_MODE;
|
||
|
typedef PVOID PKIPI_CONTEXT;
|
||
|
typedef ULONG_PTR ERESOURCE_THREAD;
|
||
|
typedef ERESOURCE_THREAD *PERESOURCE_THREAD;
|
||
|
typedef ULONG PNP_DEVICE_STATE;
|
||
|
typedef ULONG *PPNP_DEVICE_STATE;
|
||
|
typedef ULONG OB_OPERATION;
|
||
|
typedef GUID UOW;
|
||
|
typedef GUID *PUOW;
|
||
|
typedef GUID *PGUID;
|
||
|
typedef GUID KCRM_PROTOCOL_ID;
|
||
|
typedef GUID *PKCRM_PROTOCOL_ID;
|
||
|
#ifdef _X86_
|
||
|
typedef ULONG PFN_COUNT;
|
||
|
typedef LONG SPFN_NUMBER;
|
||
|
typedef LONG *PSPFN_NUMBER;
|
||
|
typedef ULONG PFN_NUMBER;
|
||
|
typedef ULONG *PPFN_NUMBER;
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05000000)
|
||
|
typedef ULONG NODE_REQUIREMENT;
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef ULONG CLFS_CONTAINER_ID;
|
||
|
typedef CLFS_CONTAINER_ID *PCLFS_CONTAINER_ID;
|
||
|
typedef CLFS_CONTAINER_ID **PPCLFS_CONTAINER_ID;
|
||
|
typedef ULONG CLS_RECORD_TYPE;
|
||
|
typedef ULONG *PCLS_RECORD_TYPE;
|
||
|
typedef ULONG **PPCLS_RECORD_TYPE;
|
||
|
typedef CLS_RECORD_TYPE CLFS_RECORD_TYPE;
|
||
|
typedef CLS_RECORD_TYPE *PCLFS_RECORD_TYPE;
|
||
|
typedef CLS_RECORD_TYPE **PPCLFS_RECORD_TYPE;
|
||
|
typedef GUID CLFS_LOG_ID;
|
||
|
typedef UINT32 CLS_CONTAINER_STATE;
|
||
|
typedef UINT32 *PCLS_CONTAINER_STATE;
|
||
|
typedef UINT32 *PPCLS_CONTAINER_STATE;
|
||
|
typedef CLS_CONTAINER_STATE CLFS_CONTAINER_STATE;
|
||
|
typedef CLS_CONTAINER_STATE *PCLFS_CONTAINER_STATE;
|
||
|
typedef CLS_CONTAINER_STATE *PPCLFS_CONTAINER_STATE;
|
||
|
typedef UCHAR CLFS_SCAN_MODE;
|
||
|
typedef UCHAR *PCLFS_SCAN_MODE;
|
||
|
typedef PVOID CLFS_MGMT_CLIENT;
|
||
|
typedef PVOID *PCLFS_MGMT_CLIENT;
|
||
|
#endif
|
||
|
|
||
|
/* Device type data type */
|
||
|
#define DEVICE_TYPE ULONG
|
||
|
|
||
|
/* Address bases */
|
||
|
#define KADDRESS_BASE 0
|
||
|
#define UADDRESS_BASE 0
|
||
|
|
||
|
/* Standard access rights */
|
||
|
#define DELETE 0x00010000L
|
||
|
#define READ_CONTROL 0x00020000L
|
||
|
#define WRITE_DAC 0x00040000L
|
||
|
#define WRITE_OWNER 0x00080000L
|
||
|
#define SYNCHRONIZE 0x00100000L
|
||
|
#define STANDARD_RIGHTS_REQUIRED 0x000F0000L
|
||
|
#define STANDARD_RIGHTS_READ READ_CONTROL
|
||
|
#define STANDARD_RIGHTS_WRITE READ_CONTROL
|
||
|
#define STANDARD_RIGHTS_EXECUTE READ_CONTROL
|
||
|
#define STANDARD_RIGHTS_ALL 0x001F0000L
|
||
|
#define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
|
||
|
#define ACCESS_SYSTEM_SECURITY 0x01000000L
|
||
|
#define MAXIMUM_ALLOWED 0x02000000L
|
||
|
#define GENERIC_READ 0x80000000L
|
||
|
#define GENERIC_WRITE 0x40000000L
|
||
|
#define GENERIC_EXECUTE 0x20000000L
|
||
|
#define GENERIC_ALL 0x10000000L
|
||
|
|
||
|
/* Current ACL revisions */
|
||
|
#define ACL_REVISION 2
|
||
|
#define ACL_REVISION_DS 4
|
||
|
|
||
|
/* All ACL revisions */
|
||
|
#define ACL_REVISION1 1
|
||
|
#define ACL_REVISION2 2
|
||
|
#define ACL_REVISION3 3
|
||
|
#define ACL_REVISION4 4
|
||
|
#define MIN_ACL_REVISION ACL_REVISION2
|
||
|
#define MAX_ACL_REVISION ACL_REVISION4
|
||
|
|
||
|
/* Current security descriptor revision */
|
||
|
#define SECURITY_DESCRIPTOR_REVISION 1
|
||
|
|
||
|
/* All security descriptor revisions */
|
||
|
#define SECURITY_DESCRIPTOR_REVISION1 1
|
||
|
|
||
|
/* Privilege attributes */
|
||
|
#define SE_PRIVILEGE_ENABLED_BY_DEFAULT 0x00000001L
|
||
|
#define SE_PRIVILEGE_ENABLED 0x00000002L
|
||
|
#define SE_PRIVILEGE_REMOVED 0x00000004L
|
||
|
#define SE_PRIVILEGE_USED_FOR_ACCESS 0x00000008L
|
||
|
#define SE_PRIVILEGE_VALID_ATTRIBUTES \
|
||
|
(SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED | \
|
||
|
SE_PRIVILEGE_REMOVED | SE_PRIVLEGE_USED_FOR_ACCESS)
|
||
|
|
||
|
/* Privilege set control flags */
|
||
|
#define PRIVILEGE_SET_ALL_NECESSARY 1
|
||
|
|
||
|
/* Well-known privileges */
|
||
|
#define SE_MIN_WELL_KNOWN_PRIVILEGE 2L
|
||
|
#define SE_CREATE_TOKEN_PRIVILEGE 2L
|
||
|
#define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3L
|
||
|
#define SE_LOCK_MEMORY_PRIVILEGE 4L
|
||
|
#define SE_INCREASE_QUOTA_PRIVILEGE 5L
|
||
|
#define SE_MACHINE_ACCOUNT_PRIVILEGE 6L
|
||
|
#define SE_TCB_PRIVILEGE 7L
|
||
|
#define SE_SECURITY_PRIVILEGE 8L
|
||
|
#define SE_TAKE_OWNERSHIP_PRIVILEGE 9L
|
||
|
#define SE_LOAD_DRIVER_PRIVILEGE 10L
|
||
|
#define SE_SYSTEM_PROFILE_PRIVILEGE 11L
|
||
|
#define SE_SYSTEMTIME_PRIVILEGE 12L
|
||
|
#define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13L
|
||
|
#define SE_INC_BASE_PRIORITY_PRIVILEGE 14L
|
||
|
#define SE_CREATE_PAGEFILE_PRIVILEGE 15L
|
||
|
#define SE_CREATE_PERMANENT_PRIVILEGE 16L
|
||
|
#define SE_BACKUP_PRIVILEGE 17L
|
||
|
#define SE_RESTORE_PRIVILEGE 18L
|
||
|
#define SE_SHUTDOWN_PRIVILEGE 19L
|
||
|
#define SE_DEBUG_PRIVILEGE 20L
|
||
|
#define SE_AUDIT_PRIVILEGE 21L
|
||
|
#define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22L
|
||
|
#define SE_CHANGE_NOTIFY_PRIVILEGE 23L
|
||
|
#define SE_REMOTE_SHUTDOWN_PRIVILEGE 24L
|
||
|
#define SE_UNDOCK_PRIVILEGE 25L
|
||
|
#define SE_SYNC_AGENT_PRIVILEGE 26L
|
||
|
#define SE_ENABLE_DELEGATION_PRIVILEGE 27L
|
||
|
#define SE_MANAGE_VOLUME_PRIVILEGE 28L
|
||
|
#define SE_IMPERSONATE_PRIVILEGE 29L
|
||
|
#define SE_CREATE_GLOBAL_PRIVILEGE 30L
|
||
|
#define SE_TRUSTED_CREDMON_ACCESS_PRIVILEGE 31L
|
||
|
#define SE_RELABEL_PRIVILEGE 32L
|
||
|
#define SE_INC_WORKING_SET_PRIVILEGE 33L
|
||
|
#define SE_TIME_ZONE_PRIVILEGE 34L
|
||
|
#define SE_CREATE_SYMBOLIC_LINK_PRIVILEGE 35L
|
||
|
#define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_SYMBOLIC_LINK_PRIVILEGE
|
||
|
|
||
|
/* Security tracking modes */
|
||
|
#define SECURITY_DYNAMIC_TRACKING TRUE
|
||
|
#define SECURITY_STATIC_TRACKING FALSE
|
||
|
|
||
|
/* Security information types */
|
||
|
#define OWNER_SECURITY_INFORMATION 0x00000001L
|
||
|
#define GROUP_SECURITY_INFORMATION 0x00000002L
|
||
|
#define DACL_SECURITY_INFORMATION 0x00000004L
|
||
|
#define SACL_SECURITY_INFORMATION 0x00000008L
|
||
|
#define LABEL_SECURITY_INFORMATION 0x00000010L
|
||
|
#define PROTECTED_DACL_SECURITY_INFORMATION 0x80000000L
|
||
|
#define PROTECTED_SACL_SECURITY_INFORMATION 0x40000000L
|
||
|
#define UNPROTECTED_DACL_SECURITY_INFORMATION 0x20000000L
|
||
|
#define UNPROTECTED_SACL_SECURITY_INFORMATION 0x10000000L
|
||
|
|
||
|
/* Security audit object flags */
|
||
|
#define SE_ADT_OBJECT_ONLY 0x0001
|
||
|
|
||
|
/* Maximum numbers of audit parameters */
|
||
|
#define SE_MAX_AUDIT_PARAMETERS 32
|
||
|
#define SE_MAX_GENERIC_AUDIT_PARAMETERS 28
|
||
|
|
||
|
/* Security audit parameter flags */
|
||
|
#define SE_ADT_PARAMETERS_SELF_RELATIVE 0x00000001L
|
||
|
#define SE_ADT_PARAMETERS_SEND_TO_LSA 0x00000002L
|
||
|
#define SE_ADT_PARAMETER_EXTENSIBLE_AUDIT 0x00000004L
|
||
|
#define SE_ADT_PARAMETER_GENERIC_AUDIT 0x00000008L
|
||
|
#define SE_ADT_PARAMETER_WRITE_SYNCHRONOUS 0x00000010L
|
||
|
|
||
|
/* Priority levels */
|
||
|
#define LOW_PRIORITY 0L
|
||
|
#define LOW_REALTIME_PRIORITY 16L
|
||
|
#define HIGH_PRIORITY 31L
|
||
|
#define MAXIMUM_PRIORITY 32L
|
||
|
|
||
|
/* Extended save alignment */
|
||
|
#define XSAVE_ALIGN 64
|
||
|
|
||
|
/* Size of the extended registers in the x86 context record */
|
||
|
#ifdef _X86_
|
||
|
#define MAXIMUM_SUPPORTED_EXTENSION 512
|
||
|
#endif
|
||
|
|
||
|
/* Lock queue flags */
|
||
|
#define LOCK_QUEUE_WAIT 1
|
||
|
#define LOCK_QUEUE_WAIT_BIT 0
|
||
|
#define LOCK_QUEUE_OWNER 2
|
||
|
#define LOCK_QUEUE_OWNER_BIT 1
|
||
|
#define LOCK_QUEUE_TIMER_LOCK_SHIFT 4
|
||
|
#define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT))
|
||
|
|
||
|
/* Device types */
|
||
|
#define FILE_DEVICE_BEEP 0x00000001L
|
||
|
#define FILE_DEVICE_CD_ROM 0x00000002L
|
||
|
#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003L
|
||
|
#define FILE_DEVICE_CONTROLLER 0x00000004L
|
||
|
#define FILE_DEVICE_DATALINK 0x00000005L
|
||
|
#define FILE_DEVICE_DFS 0x00000006L
|
||
|
#define FILE_DEVICE_DISK 0x00000007L
|
||
|
#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008L
|
||
|
#define FILE_DEVICE_FILE_SYSTEM 0x00000009L
|
||
|
#define FILE_DEVICE_INPORT_PORT 0x0000000AL
|
||
|
#define FILE_DEVICE_KEYBOARD 0x0000000BL
|
||
|
#define FILE_DEVICE_MAILSLOT 0x0000000CL
|
||
|
#define FILE_DEVICE_MIDI_IN 0x0000000DL
|
||
|
#define FILE_DEVICE_MIDI_OUT 0x0000000EL
|
||
|
#define FILE_DEVICE_MOUSE 0x0000000FL
|
||
|
#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010L
|
||
|
#define FILE_DEVICE_NAMED_PIPE 0x00000011L
|
||
|
#define FILE_DEVICE_NETWORK 0x00000012L
|
||
|
#define FILE_DEVICE_NETWORK_BROWSER 0x00000013L
|
||
|
#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014L
|
||
|
#define FILE_DEVICE_NULL 0x00000015L
|
||
|
#define FILE_DEVICE_PARALLEL_PORT 0x00000016L
|
||
|
#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017L
|
||
|
#define FILE_DEVICE_PRINTER 0x00000018L
|
||
|
#define FILE_DEVICE_SCANNER 0x00000019L
|
||
|
#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001AL
|
||
|
#define FILE_DEVICE_SERIAL_PORT 0x0000001BL
|
||
|
#define FILE_DEVICE_SCREEN 0x0000001CL
|
||
|
#define FILE_DEVICE_SOUND 0x0000001DL
|
||
|
#define FILE_DEVICE_STREAMS 0x0000001EL
|
||
|
#define FILE_DEVICE_TAPE 0x0000001FL
|
||
|
#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020L
|
||
|
#define FILE_DEVICE_TRANSPORT 0x00000021L
|
||
|
#define FILE_DEVICE_UNKNOWN 0x00000022L
|
||
|
#define FILE_DEVICE_VIDEO 0x00000023L
|
||
|
#define FILE_DEVICE_VIRTUAL_DISK 0x00000024L
|
||
|
#define FILE_DEVICE_WAVE_IN 0x00000025L
|
||
|
#define FILE_DEVICE_WAVE_OUT 0x00000026L
|
||
|
#define FILE_DEVICE_8042_PORT 0x00000027L
|
||
|
#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028L
|
||
|
#define FILE_DEVICE_BATTERY 0x00000029L
|
||
|
#define FILE_DEVICE_BUS_EXTENDER 0x0000002AL
|
||
|
#define FILE_DEVICE_MODEM 0x0000002BL
|
||
|
#define FILE_DEVICE_VDM 0x0000002CL
|
||
|
#define FILE_DEVICE_MASS_STORAGE 0x0000002DL
|
||
|
#define FILE_DEVICE_SMB 0x0000002EL
|
||
|
#define FILE_DEVICE_KS 0x0000002FL
|
||
|
#define FILE_DEVICE_CHANGER 0x00000030L
|
||
|
#define FILE_DEVICE_SMARTCARD 0x00000031L
|
||
|
#define FILE_DEVICE_ACPI 0x00000032L
|
||
|
#define FILE_DEVICE_DVD 0x00000033L
|
||
|
#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034L
|
||
|
#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035L
|
||
|
#define FILE_DEVICE_DFS_VOLUME 0x00000036L
|
||
|
#define FILE_DEVICE_SERENUM 0x00000037L
|
||
|
#define FILE_DEVICE_TERMSRV 0x00000038L
|
||
|
#define FILE_DEVICE_KSEC 0x00000039L
|
||
|
#define FILE_DEVICE_FIPS 0x0000003AL
|
||
|
#define FILE_DEVICE_INFINIBAND 0x0000003BL
|
||
|
#define FILE_DEVICE_VMBUS 0x0000003EL
|
||
|
#define FILE_DEVICE_CRYPT_PROVIDER 0x0000003FL
|
||
|
#define FILE_DEVICE_WPD 0x00000040L
|
||
|
#define FILE_DEVICE_BLUETOOTH 0x00000041L
|
||
|
#define FILE_DEVICE_MT_COMPOSITE 0x00000042L
|
||
|
#define FILE_DEVICE_MT_TRANSPORT 0x00000043L
|
||
|
#define FILE_DEVICE_BIOMETRIC 0x00000044L
|
||
|
#define FILE_DEVICE_PMI 0x00000045L
|
||
|
|
||
|
/* Buffering methods */
|
||
|
#define METHOD_BUFFERED 0L
|
||
|
#define METHOD_IN_DIRECT 1L
|
||
|
#define METHOD_OUT_DIRECT 2L
|
||
|
#define METHOD_NEITHER 3L
|
||
|
#define METHOD_DIRECT_TO_HARDWARE METHOD_IN_DIRECT
|
||
|
#define METHOD_DIRECT_FROM_HARDWARE METHOD_OUT_DIRECT
|
||
|
|
||
|
/* File access types */
|
||
|
#define FILE_ANY_ACCESS 0x0000L
|
||
|
#define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS
|
||
|
#define FILE_READ_ACCESS 0x0001L
|
||
|
#define FILE_WRITE_ACCESS 0x0002L
|
||
|
|
||
|
/* Macros to manipulate I/O control codes */
|
||
|
#define CTL_CODE( p1, p2, p3, p4 ) \
|
||
|
(((p1) << 16) | ((p4) << 14) | ((p2) << 2) | (p3))
|
||
|
#define DEVICE_TYPE_FROM_CTL_CODE( x ) (((ULONG)(x & 0xFFFF0000L)) >> 16)
|
||
|
#define METHOD_FROM_CTL_CODE( x ) ((ULONG)(x & 0x00000003L))
|
||
|
|
||
|
/* File access rights */
|
||
|
#define FILE_READ_DATA 0x0001L
|
||
|
#define FILE_LIST_DIRECTORY 0x0001L
|
||
|
#define FILE_WRITE_DATA 0x0002L
|
||
|
#define FILE_ADD_FILE 0x0002L
|
||
|
#define FILE_APPEND_DATA 0x0004L
|
||
|
#define FILE_ADD_SUBDIRECTORY 0x0004L
|
||
|
#define FILE_CREATE_PIPE_INSTANCE 0x0004L
|
||
|
#define FILE_READ_EA 0x0008L
|
||
|
#define FILE_WRITE_EA 0x0010L
|
||
|
#define FILE_EXECUTE 0x0020L
|
||
|
#define FILE_TRAVERSE 0x0020L
|
||
|
#define FILE_DELETE_CHILD 0x0040L
|
||
|
#define FILE_READ_ATTRIBUTES 0x0080L
|
||
|
#define FILE_WRITE_ATTRIBUTES 0x0100L
|
||
|
#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x01FFL)
|
||
|
#define FILE_GENERIC_READ \
|
||
|
(STANDARD_RIGHTS_READ | SYNCHRONIZE | FILE_READ_DATA | FILE_READ_ATTRIBUTES | \
|
||
|
FILE_READ_EA)
|
||
|
#define FILE_GENERIC_WRITE \
|
||
|
(STANDARD_RIGHTS_WRITE | SYNCHRONIZE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | \
|
||
|
FILE_WRITE_EA | FILE_APPEND_DATA)
|
||
|
#define FILE_GENERIC_EXECUTE \
|
||
|
(STANDARD_RIGHTS_EXECUTE | SYNCHRONIZE | FILE_READ_ATTRIBUTES | FILE_EXECUTE)
|
||
|
|
||
|
/* File sharing options */
|
||
|
#define FILE_SHARE_READ 0x00000001L
|
||
|
#define FILE_SHARE_WRITE 0x00000002L
|
||
|
#define FILE_SHARE_DELETE 0x00000004L
|
||
|
|
||
|
/* File attributes */
|
||
|
#define FILE_ATTRIBUTE_READONLY 0x00000001L
|
||
|
#define FILE_ATTRIBUTE_HIDDEN 0x00000002L
|
||
|
#define FILE_ATTRIBUTE_SYSTEM 0x00000004L
|
||
|
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010L
|
||
|
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020L
|
||
|
#define FILE_ATTRIBUTE_DEVICE 0x00000040L
|
||
|
#define FILE_ATTRIBUTE_NORMAL 0x00000080L
|
||
|
#define FILE_ATTRIBUTE_TEMPORARY 0x00000100L
|
||
|
#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200L
|
||
|
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400L
|
||
|
#define FILE_ATTRIBUTE_COMPRESSED 0x00000800L
|
||
|
#define FILE_ATTRIBUTE_OFFLINE 0x00001000L
|
||
|
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000L
|
||
|
#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000L
|
||
|
#define FILE_ATTRIBUTE_VIRTUAL 0x00010000L
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define FILE_ATTRIBUTE_DEDICATED FILE_ATTRIBUTE_TEMPORARY
|
||
|
#endif
|
||
|
|
||
|
/* File creation dispositions */
|
||
|
#define FILE_SUPERSEDE 0x00000000L
|
||
|
#define FILE_OPEN 0x00000001L
|
||
|
#define FILE_CREATE 0x00000002L
|
||
|
#define FILE_OPEN_IF 0x00000003L
|
||
|
#define FILE_OVERWRITE 0x00000004L
|
||
|
#define FILE_OVERWRITE_IF 0x00000005L
|
||
|
#define FILE_MAXIMUM_DISPOSITION 0x00000005L
|
||
|
|
||
|
/* File open/create option flags */
|
||
|
#define FILE_DIRECTORY_FILE 0x00000001L
|
||
|
#define FILE_WRITE_THROUGH 0x00000002L
|
||
|
#define FILE_SEQUENTIAL_ONLY 0x00000004L
|
||
|
#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008L
|
||
|
#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010L
|
||
|
#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020L
|
||
|
#define FILE_NON_DIRECTORY_FILE 0x00000040L
|
||
|
#define FILE_CREATE_TREE_CONNECTION 0x00000080L
|
||
|
#define FILE_COMPLETE_IF_OPLOCKED 0x00000100L
|
||
|
#define FILE_NO_EA_KNOWLEDGE 0x00000200L
|
||
|
#define FILE_OPEN_REMOTE_INSTANCE 0x00000400L
|
||
|
#define FILE_RANDOM_ACCESS 0x00000800L
|
||
|
#define FILE_DELETE_ON_CLOSE 0x00001000L
|
||
|
#define FILE_OPEN_BY_FILE_ID 0x00002000L
|
||
|
#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000L
|
||
|
#define FILE_NO_COMPRESSION 0x00008000L
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
#define FILE_OPEN_REQUIRING_OPLOCK 0x00010000L
|
||
|
#define FILE_DISALLOW_EXCLUSIVE 0x00020000L
|
||
|
#endif
|
||
|
#define FILE_RESERVE_OPFILTER 0x00100000L
|
||
|
#define FILE_OPEN_REPARSE_POINT 0x00200000L
|
||
|
#define FILE_OPEN_NO_RECALL 0x00400000L
|
||
|
#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000L
|
||
|
#define FILE_VALID_OPTION_FLAGS 0x00FFFFFFL
|
||
|
#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032L
|
||
|
#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032L
|
||
|
#define FILE_VALID_SET_FLAGS 0x00000036L
|
||
|
|
||
|
/* File open/create return values */
|
||
|
#define FILE_SUPERSEDED 0x00000000L
|
||
|
#define FILE_OPENED 0x00000001L
|
||
|
#define FILE_CREATED 0x00000002L
|
||
|
#define FILE_OVERWRITTEN 0x00000003L
|
||
|
#define FILE_EXISTS 0x00000004L
|
||
|
#define FILE_DOES_NOT_EXIST 0x00000005L
|
||
|
|
||
|
/* File byte offset parameters */
|
||
|
#define FILE_WRITE_TO_END_OF_FILE 0xFFFFFFFFL
|
||
|
#define FILE_USE_FILE_POINTER_POSITION 0xFFFFFFFEL
|
||
|
|
||
|
/* File alignments */
|
||
|
#define FILE_BYTE_ALIGNMENT 0x00000000L
|
||
|
#define FILE_WORD_ALIGNMENT 0x00000001L
|
||
|
#define FILE_LONG_ALIGNMENT 0x00000003L
|
||
|
#define FILE_QUAD_ALIGNMENT 0x00000007L
|
||
|
#define FILE_OCTA_ALIGNMENT 0x0000000FL
|
||
|
#define FILE_32_BYTE_ALIGNMENT 0x0000001FL
|
||
|
#define FILE_64_BYTE_ALIGNMENT 0x0000003FL
|
||
|
#define FILE_128_BYTE_ALIGNMENT 0x0000007FL
|
||
|
#define FILE_256_BYTE_ALIGNMENT 0x000000FFL
|
||
|
#define FILE_512_BYTE_ALIGNMENT 0x000001FFL
|
||
|
|
||
|
/* Maximum file name length */
|
||
|
#define MAXIMUM_FILENAME_LENGTH 256
|
||
|
|
||
|
/* File device characteristics */
|
||
|
#define FILE_REMOVABLE_MEDIA 0x00000001L
|
||
|
#define FILE_READ_ONLY_DEVICE 0x00000002L
|
||
|
#define FILE_FLOPPY_DISKETTE 0x00000004L
|
||
|
#define FILE_WRITE_ONCE_MEDIA 0x00000008L
|
||
|
#define FILE_REMOTE_DEVICE 0x00000010L
|
||
|
#define FILE_DEVICE_IS_MOUNTED 0x00000020L
|
||
|
#define FILE_VIRTUAL_VOLUME 0x00000040L
|
||
|
#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080L
|
||
|
#define FILE_DEVICE_SECURE_OPEN 0x00000100L
|
||
|
#define FILE_CHARACTERISTIC_PNP_DEVICE 0x00000800L
|
||
|
#define FILE_CHARACTERISTIC_TS_DEVICE 0x00001000L
|
||
|
#define FILE_CHARACTERISTIC_WEBDAV_DEVICE 0x00002000L
|
||
|
|
||
|
/* I/O session state event flags */
|
||
|
#define IO_SESSION_STATE_ALL_EVENTS 0xFFFFFFFFL
|
||
|
#define IO_SESSION_STATE_CREATION_EVENT 0x00000001L
|
||
|
#define IO_SESSION_STATE_TERMINATION_EVENT 0x00000002L
|
||
|
#define IO_SESSION_STATE_CONNECT_EVENT 0x00000004L
|
||
|
#define IO_SESSION_STATE_DISCONNECT_EVENT 0x00000008L
|
||
|
#define IO_SESSION_STATE_LOGON_EVENT 0x00000010L
|
||
|
#define IO_SESSION_STATE_LOGOFF_EVENT 0x00000020L
|
||
|
#define IO_SESSION_STATE_VALID_EVENT_MASK 0x0000003FL
|
||
|
|
||
|
/* I/O session maximum payload size */
|
||
|
#define IO_SESSION_MAX_PAYLOAD_SIZE 256
|
||
|
|
||
|
/* File I/O completion notification flags */
|
||
|
#define FILE_SKIP_COMPLETION_PORT_ON_SUCCESS 0x00000001L
|
||
|
#define FILE_SKIP_SET_EVENT_ON_HANDLE 0x00000002L
|
||
|
#define FILE_SKIP_SET_USER_EVENT_ON_FAST_IO 0x00000004L
|
||
|
|
||
|
/* Registry key access rights */
|
||
|
#define KEY_QUERY_VALUE 0x0001L
|
||
|
#define KEY_SET_VALUE 0x0002L
|
||
|
#define KEY_CREATE_SUB_KEY 0x0004L
|
||
|
#define KEY_ENUMERATE_SUB_KEYS 0x0008L
|
||
|
#define KEY_NOTIFY 0x0010L
|
||
|
#define KEY_CREATE_LINK 0x0020L
|
||
|
#define KEY_WOW64_64KEY 0x0100L
|
||
|
#define KEY_WOW64_32KEY 0x0200L
|
||
|
#define KEY_WOW64_RES 0x0300L
|
||
|
#define KEY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x003FL)
|
||
|
#define KEY_READ \
|
||
|
(STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY)
|
||
|
#define KEY_WRITE \
|
||
|
(STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY)
|
||
|
#define KEY_EXECUTE KEY_READ
|
||
|
|
||
|
/* Registry key open/create flags */
|
||
|
#define REG_OPTION_RESERVED 0x00000000L
|
||
|
#define REG_OPTION_NON_VOLATILE 0x00000000L
|
||
|
#define REG_OPTION_VOLATILE 0x00000001L
|
||
|
#define REG_OPTION_CREATE_LINK 0x00000002L
|
||
|
#define REG_OPTION_BACKUP_RESTORE 0x00000004L
|
||
|
#define REG_OPTION_OPEN_LINK 0x00000008L
|
||
|
#define REG_LEGAL_OPTION \
|
||
|
(REG_OPTION_RESERVED | REG_OPTION_NON_VOLATILE | REG_OPTION_VOLATILE | \
|
||
|
REG_OPTION_CREATE_LINK | REG_OPTION_BACKUP_RESTORE | REG_OPTION_OPEN_LINK)
|
||
|
#define REG_OPEN_LEGAL_OPTION \
|
||
|
(REG_OPTION_RESERVED | REG_OPTION_BACKUP_RESTORE | REG_OPTION_OPEN_LINK)
|
||
|
|
||
|
/* Registry key open/create dispositions */
|
||
|
#define REG_CREATED_NEW_KEY 0x00000001L
|
||
|
#define REG_OPENED_EXISTING_KEY 0x00000002L
|
||
|
|
||
|
/* Registry hive formats */
|
||
|
#define REG_STANDARD_FORMAT 0x00000001L
|
||
|
#define REG_LATEST_FORMAT 0x00000002L
|
||
|
#define REG_NO_COMPRESSION 0x00000004L
|
||
|
|
||
|
/* Registry key restore flags */
|
||
|
#define REG_WHOLE_HIVE_VOLATILE 0x00000001L
|
||
|
#define REG_REFRESH_HIVE 0x00000002L
|
||
|
#define REG_NO_LAZY_FLUSH 0x00000004L
|
||
|
#define REG_FORCE_RESTORE 0x00000008L
|
||
|
#define REG_APP_HIVE 0x00000010L
|
||
|
#define REG_PROCESS_PRIVATE 0x00000020L
|
||
|
#define REG_START_JOURNAL 0x00000040L
|
||
|
#define REG_HIVE_EXACT_FILE_GROWTH 0x00000080L
|
||
|
#define REG_HIVE_NO_RM 0x00000100L
|
||
|
#define REG_HIVE_SINGLE_LOG 0x00000200L
|
||
|
#define REG_BOOT_HIVE 0x00000400L
|
||
|
|
||
|
/* Registry unload flags */
|
||
|
#define REG_FORCE_UNLOAD 1L
|
||
|
|
||
|
/* Registry key change notification flags */
|
||
|
#define REG_NOTIFY_CHANGE_NAME 0x00000001L
|
||
|
#define REG_NOTIFY_CHANGE_ATTRIBUTES 0x00000002L
|
||
|
#define REG_NOTIFY_CHANGE_LAST_SET 0x00000004L
|
||
|
#define REG_NOTIFY_CHANGE_SECURITY 0x00000008L
|
||
|
#define REG_LEGAL_CHANGE_FILTER \
|
||
|
(REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES | \
|
||
|
REG_NOTIFY_CHANGE_LAST_SET | REG_NOTIFY_CHANGE_SECURITY)
|
||
|
|
||
|
/* Object name path separator */
|
||
|
#define OBJ_NAME_PATH_SEPARATOR L'\\'
|
||
|
|
||
|
/* Object type access rights */
|
||
|
#define OBJECT_TYPE_CREATE 0x0001L
|
||
|
#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x0001L)
|
||
|
|
||
|
/* Directory access rights */
|
||
|
#define DIRECTORY_QUERY 0x0001L
|
||
|
#define DIRECTORY_TRAVERSE 0x0002L
|
||
|
#define DIRECTORY_CREATE_OBJECT 0x0004L
|
||
|
#define DIRECTORY_CREATE_SUBDIRECTORY 0x0008L
|
||
|
#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x000FL)
|
||
|
|
||
|
/* Symbolic link access rights */
|
||
|
#define SYMBOLIC_LINK_QUERY 0x0001L
|
||
|
#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x0001L)
|
||
|
|
||
|
/* Duplication flags */
|
||
|
#define DUPLICATE_CLOSE_SOURCE 0x00000001L
|
||
|
#define DUPLICATE_SAME_ACCESS 0x00000002L
|
||
|
#define DUPLICATE_SAME_ATTRIBUTES 0x00000004L
|
||
|
|
||
|
/* Section access rights */
|
||
|
#define SECTION_QUERY 0x0001L
|
||
|
#define SECTION_MAP_WRITE 0x0002L
|
||
|
#define SECTION_MAP_READ 0x0004L
|
||
|
#define SECTION_MAP_EXECUTE 0x0008L
|
||
|
#define SECTION_EXTEND_SIZE 0x0010L
|
||
|
#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020L
|
||
|
#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x001F)
|
||
|
|
||
|
/* Session access rights */
|
||
|
#define SESSION_QUERY_ACCESS 0x0001L
|
||
|
#define SESSION_MODIFY_ACCESS 0x0002L
|
||
|
#define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x0003L)
|
||
|
|
||
|
/* Segment access rights */
|
||
|
#define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
|
||
|
|
||
|
/* Memory protection and allocation flags */
|
||
|
#define PAGE_NOACCESS 0x00000001L
|
||
|
#define PAGE_READONLY 0x00000002L
|
||
|
#define PAGE_READWRITE 0x00000004L
|
||
|
#define PAGE_WRITECOPY 0x00000008L
|
||
|
#define PAGE_EXECUTE 0x00000010L
|
||
|
#define PAGE_EXECUTE_READ 0x00000020L
|
||
|
#define PAGE_EXECUTE_READWRITE 0x00000040L
|
||
|
#define PAGE_EXECUTE_WRITECOPY 0x00000080L
|
||
|
#define PAGE_GUARD 0x00000100L
|
||
|
#define PAGE_NOCACHE 0x00000200L
|
||
|
#define PAGE_WRITECOMBINE 0x00000400L
|
||
|
#define MEM_COMMIT 0x00001000L
|
||
|
#define MEM_RESERVE 0x00002000L
|
||
|
#define MEM_DECOMMIT 0x00004000L
|
||
|
#define MEM_RELEASE 0x00008000L
|
||
|
#define MEM_FREE 0x00010000L
|
||
|
#define MEM_PRIVATE 0x00020000L
|
||
|
#define MEM_MAPPED 0x00040000L
|
||
|
#define MEM_RESET 0x00080000L
|
||
|
#define MEM_TOP_DOWN 0x00100000L
|
||
|
#define MEM_LARGE_PAGES 0x20000000L
|
||
|
#define MEM_4MB_PAGES 0x80000000L
|
||
|
#define SEC_RESERVE 0x04000000L
|
||
|
#define SEC_COMMIT 0x08000000L
|
||
|
#define SEC_LARGE_PAGES 0x80000000L
|
||
|
|
||
|
/* Process access rights */
|
||
|
#define PROCESS_DUP_HANDLE 0x0040L
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#define PROCESS_ALL_ACCESS \
|
||
|
(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFFL)
|
||
|
#else
|
||
|
#define PROCESS_ALL_ACCESS \
|
||
|
(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0FFFL)
|
||
|
#endif
|
||
|
|
||
|
/* Maximum number of processors */
|
||
|
#define MAXIMUM_PROC_PER_GROUP 32
|
||
|
#define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
|
||
|
|
||
|
/* Thread access rights */
|
||
|
#define THREAD_TERMINATE 0x0001L
|
||
|
#define THREAD_SUSPEND_RESUME 0x0002L
|
||
|
#define THREAD_ALERT 0x0004L
|
||
|
#define THREAD_GET_CONTEXT 0x0008L
|
||
|
#define THREAD_SET_CONTEXT 0x0010L
|
||
|
#define THREAD_SET_INFORMATION 0x0020L
|
||
|
#define THREAD_SET_LIMITED_INFORMATION 0x0400L
|
||
|
#define THREAD_QUERY_LIMITED_INFORMATION 0x0800L
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#define THREAD_ALL_ACCESS \
|
||
|
(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFFFL)
|
||
|
#else
|
||
|
#define THREAD_ALL_ACCESS \
|
||
|
(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x03FFL)
|
||
|
#endif
|
||
|
|
||
|
/* Maximum power state value */
|
||
|
#define POWER_SYSTEM_MAXIMUM 7
|
||
|
|
||
|
/* Battery device I/O control codes */
|
||
|
#define IOCTL_QUERY_DEVICE_POWER_STATE \
|
||
|
CTL_CODE( FILE_DEVICE_BATTERY, 0x0000, METHOD_BUFFERED, FILE_READ_ACCESS )
|
||
|
#define IOCTL_SET_DEVICE_WAKE \
|
||
|
CTL_CODE( FILE_DEVICE_BATTERY, 0x0001, METHOD_BUFFERED, FILE_WRITE_ACCESS )
|
||
|
#define IOCTL_CANCEL_DEVICE_WAKE \
|
||
|
CTL_CODE( FILE_DEVICE_BATTERY, 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS )
|
||
|
|
||
|
/* Execution state values */
|
||
|
#define ES_SYSTEM_REQUIRED 0x00000001L
|
||
|
#define ES_DISPLAY_REQUIRED 0x00000002L
|
||
|
#define ES_USER_PRESENT 0x00000004L
|
||
|
#define ES_AWAYMODE_REQUIRED 0x00000040L
|
||
|
#define ES_CONTINUOUS 0x80000000L
|
||
|
|
||
|
/* Diagnostic reason version number */
|
||
|
#if (_WIN32_WINNT >= 0x0601)
|
||
|
#define DIAGNOSTIC_REASON_VERSION 0L
|
||
|
#endif
|
||
|
|
||
|
/* Diagnostic reason flags */
|
||
|
#if (_WIN32_WINNT >= 0x0601)
|
||
|
#define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001L
|
||
|
#define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002L
|
||
|
#define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000L
|
||
|
#endif
|
||
|
|
||
|
/* Power request context version number */
|
||
|
#define POWER_REQUEST_CONTEXT_VERSION 0L
|
||
|
|
||
|
/* Power request context flags */
|
||
|
#define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001L
|
||
|
#define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002L
|
||
|
|
||
|
/* Device power capabilities */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
#define PDCAP_D0_SUPPORTED 0x00000001L
|
||
|
#define PDCAP_D1_SUPPORTED 0x00000002L
|
||
|
#define PDCAP_D2_SUPPORTED 0x00000004L
|
||
|
#define PDCAP_D3_SUPPORTED 0x00000008L
|
||
|
#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010L
|
||
|
#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020L
|
||
|
#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040L
|
||
|
#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080L
|
||
|
#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100L
|
||
|
#endif
|
||
|
|
||
|
/* Registry value types */
|
||
|
#define REG_NONE 0L
|
||
|
#define REG_SZ 1L
|
||
|
#define REG_EXPAND_SZ 2L
|
||
|
#define REG_BINARY 3L
|
||
|
#define REG_DWORD 4L
|
||
|
#define REG_DWORD_LITTLE_ENDIAN 4L
|
||
|
#define REG_DWORD_BIG_ENDIAN 5L
|
||
|
#define REG_LINK 6L
|
||
|
#define REG_MULTI_SZ 7L
|
||
|
#define REG_RESOURCE_LIST 8L
|
||
|
#define REG_FULL_RESOURCE_DESCRIPTOR 9L
|
||
|
#define REG_RESOURCE_REQUIREMENTS_LIST 10L
|
||
|
#define REG_QWORD 11L
|
||
|
#define REG_QWORD_LITTLE_ENDIAN 11L
|
||
|
|
||
|
/* Service types */
|
||
|
#define SERVICE_KERNEL_DRIVER 0x00000001L
|
||
|
#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002L
|
||
|
#define SERVICE_ADAPTER 0x00000004L
|
||
|
#define SERVICE_RECOGNIZER_DRIVER 0x00000008L
|
||
|
#define SERVICE_DRIVER \
|
||
|
(SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER)
|
||
|
#define SERVICE_WIN32_OWN_PROCESS 0x00000010L
|
||
|
#define SERVICE_WIN32_SHARE_PROCESS 0x00000020L
|
||
|
#define SERVICE_WIN32 \
|
||
|
(SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
|
||
|
#define SERVICE_INTERACTIVE_PROCESS 0x00000100L
|
||
|
#define SERVICE_TYPE_ALL \
|
||
|
(SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS)
|
||
|
|
||
|
/* Service start types */
|
||
|
#define SERVICE_BOOT_START 0x00000000L
|
||
|
#define SERVICE_SYSTEM_START 0x00000001L
|
||
|
#define SERVICE_AUTO_START 0x00000002L
|
||
|
#define SERVICE_DEMAND_START 0x00000003L
|
||
|
#define SERVICE_DISABLED 0x00000004L
|
||
|
|
||
|
/* Service error control types */
|
||
|
#define SERVICE_ERROR_IGNORE 0x00000000L
|
||
|
#define SERVICE_ERROR_NORMAL 0x00000001L
|
||
|
#define SERVICE_ERROR_SEVERE 0x00000002L
|
||
|
#define SERVICE_ERROR_CRITICAL 0x00000003L
|
||
|
|
||
|
/* Service node flags */
|
||
|
#define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001L
|
||
|
#define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002L
|
||
|
#define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004L
|
||
|
#define CM_SERVICE_VALID_PROMOTION_MASK \
|
||
|
(CM_SERVICE_NETWORK_BOOT_LOAD | CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
|
||
|
CM_SERVICE_USB_DISK_BOOT_LOAD)
|
||
|
|
||
|
/* Resource types */
|
||
|
#define CmResourceTypeNull 0
|
||
|
#define CmResourceTypePort 1
|
||
|
#define CmResourceTypeInterrupt 2
|
||
|
#define CmResourceTypeMemory 3
|
||
|
#define CmResourceTypeDma 4
|
||
|
#define CmResourceTypeDeviceSpecific 5
|
||
|
#define CmResourceTypeBusNumber 6
|
||
|
#define CmResourceTypeMemoryLarge 7
|
||
|
#define CmResourceTypeNonArbitrated 128
|
||
|
#define CmResourceTypeConfigData 128
|
||
|
#define CmResourceTypeDevicePrivate 129
|
||
|
#define CmResourceTypePcCardConfig 130
|
||
|
#define CmResourceTypeMfCardConfig 131
|
||
|
|
||
|
/* Resource interrupt flags */
|
||
|
#define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0
|
||
|
#define CM_RESOURCE_INTERRUPT_LATCHED 1
|
||
|
#define CM_RESOURCE_INTERRUPT_MESSAGE 2
|
||
|
#define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 4
|
||
|
|
||
|
/* Resource interrupt level flags */
|
||
|
#define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
|
||
|
|
||
|
/* Resource interrupt messages */
|
||
|
#define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
|
||
|
|
||
|
/* Resource memory flags */
|
||
|
#define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
|
||
|
#define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
|
||
|
#define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
|
||
|
#define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
|
||
|
#define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
|
||
|
#define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
|
||
|
#define CM_RESOURCE_MEMORY_24 0x0010
|
||
|
#define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
|
||
|
#define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
|
||
|
#define CM_RESOURCE_MEMORY_BAR 0x0080
|
||
|
#define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
|
||
|
#define CM_RESOURCE_MEMORY_LARGE 0x0E00
|
||
|
#define CM_RESOURCE_MEMORY_LARGE_40 0x0200
|
||
|
#define CM_RESOURCE_MEMORY_LARGE_48 0x0400
|
||
|
#define CM_RESOURCE_MEMORY_LARGE_64 0x0800
|
||
|
|
||
|
/* Resource memory maximum lengths */
|
||
|
#define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00LL
|
||
|
#define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000LL
|
||
|
#define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000LL
|
||
|
|
||
|
/* Resource port flags */
|
||
|
#define CM_RESOURCE_PORT_MEMORY 0x0000
|
||
|
#define CM_RESOURCE_PORT_IO 0x0001
|
||
|
#define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
|
||
|
#define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
|
||
|
#define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
|
||
|
#define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
|
||
|
#define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
|
||
|
#define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
|
||
|
#define CM_RESOURCE_PORT_BAR 0x0100
|
||
|
|
||
|
/* Resource DMA flags */
|
||
|
#define CM_RESOURCE_DMA_8 0x0000
|
||
|
#define CM_RESOURCE_DMA_16 0x0001
|
||
|
#define CM_RESOURCE_DMA_32 0x0002
|
||
|
#define CM_RESOURCE_DMA_8_AND_16 0x0004
|
||
|
#define CM_RESOURCE_DMA_BUS_MASTER 0x0008
|
||
|
#define CM_RESOURCE_DMA_TYPE_A 0x0010
|
||
|
#define CM_RESOURCE_DMA_TYPE_B 0x0020
|
||
|
#define CM_RESOURCE_DMA_TYPE_F 0x0040
|
||
|
|
||
|
/* EISA function information masks */
|
||
|
#define EISA_FUNCTION_ENABLED 0x80
|
||
|
#define EISA_FREE_FORM_DATA 0x40
|
||
|
#define EISA_HAS_PORT_INIT_ENTRY 0x20
|
||
|
#define EISA_HAS_PORT_RANGE 0x10
|
||
|
#define EISA_HAS_DMA_ENTRY 0x08
|
||
|
#define EISA_HAS_IRQ_ENTRY 0x04
|
||
|
#define EISA_HAS_MEMORY_ENTRY 0x02
|
||
|
#define EISA_HAS_TYPE_ENTRY 0x01
|
||
|
#define EISA_HAS_INFORMATION \
|
||
|
(EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY + \
|
||
|
EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
|
||
|
|
||
|
/* EISA memory configuration masks */
|
||
|
#define EISA_MORE_ENTRIES 0x80
|
||
|
#define EISA_SYSTEM_MEMORY 0x00
|
||
|
#define EISA_MEMORY_TYPE_RAM 0x01
|
||
|
|
||
|
/* EISA BIOS call return codes */
|
||
|
#define EISA_INVALID_SLOT 0x80
|
||
|
#define EISA_INVALID_FUNCTION 0x81
|
||
|
#define EISA_INVALID_CONFIGURATION 0x82
|
||
|
#define EISA_EMPTY_SLOT 0x83
|
||
|
#define EISA_INVALID_BIOS_CALL 0x86
|
||
|
|
||
|
/* I/O resource options */
|
||
|
#define IO_RESOURCE_PREFERRED 0x01
|
||
|
#define IO_RESOURCE_DEFAULT 0x02
|
||
|
#define IO_RESOURCE_ALTERNATIVE 0x08
|
||
|
|
||
|
/* Query registry flags */
|
||
|
#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001L
|
||
|
#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002L
|
||
|
#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004L
|
||
|
#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008L
|
||
|
#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010L
|
||
|
#define RTL_QUERY_REGISTRY_DIRECT 0x00000020L
|
||
|
#define RTL_QUERY_REGISTRY_DELETE 0x00000040L
|
||
|
#define RTL_QUERY_REGISTRY_NOSTRING 0x00000080L
|
||
|
|
||
|
/* Registry relative to values */
|
||
|
#define RTL_REGISTRY_ABSOLUTE 0L
|
||
|
#define RTL_REGISTRY_SERVICES 1L
|
||
|
#define RTL_REGISTRY_CONTROL 2L
|
||
|
#define RTL_REGISTRY_WINDOWS_NT 3L
|
||
|
#define RTL_REGISTRY_DEVICEMAP 4L
|
||
|
#define RTL_REGISTRY_USER 5L
|
||
|
#define RTL_REGISTRY_MAXIMUM 6L
|
||
|
#define RTL_REGISTRY_HANDLE 0x40000000L
|
||
|
#define RTL_REGISTRY_OPTIONAL 0x80000000L
|
||
|
|
||
|
/* RtlHashUnicodeString() algorithms */
|
||
|
#define HASH_STRING_ALGORITHM_DEFAULT 0L
|
||
|
#define HASH_STRING_ALGORITHM_X65599 1L
|
||
|
#define HASH_STRING_ALGORITHM_INVALID 0xFFFFFFFFL
|
||
|
|
||
|
/* DbgBreakPointWithStatus() status values */
|
||
|
#define DBG_STATUS_CONTROL_C 1L
|
||
|
#define DBG_STATUS_SYSRQ 2L
|
||
|
#define DBG_STATUS_BUGCHECK_FIRST 3L
|
||
|
#define DBG_STATUS_BUGCHECK_SECOND 4L
|
||
|
#define DBG_STATUS_FATAL 5L
|
||
|
#define DBG_STATUS_DEBUG_CONTROL 6L
|
||
|
#define DBG_STATUS_WORKER 7L
|
||
|
|
||
|
/* Sizes and masks */
|
||
|
#define SHORT_SIZE sizeof( USHORT )
|
||
|
#define SHORT_MASK (SHORT_SIZE - 1)
|
||
|
#define LONG_SIZE sizeof( LONG )
|
||
|
#define LONGLONG_SIZE sizeof( LONGLONG )
|
||
|
#define LONG_MASK (LONG_SIZE - 1)
|
||
|
#define LONGLONG_MASK (LONGLONG_SIZE - 1)
|
||
|
#define LOWBYTE_MASK 0x00FF
|
||
|
|
||
|
/* Macros to extract bytes */
|
||
|
#define FIRSTBYTE( x ) ((x) & LOWBYTE_MASK)
|
||
|
#define SECONDBYTE( x ) (((x) >> 8) & LOWBYTE_MASK)
|
||
|
#define THIRDBYTE( x ) (((x) >> 16) & LOWBYTE_MASK)
|
||
|
#define FOURTHBYTE( x ) (((x) >> 24) & LOWBYTE_MASK)
|
||
|
|
||
|
/* Bit indices */
|
||
|
#define SHORT_LEAST_SIGNIFICANT_BIT 0
|
||
|
#define SHORT_MOST_SIGNIFICANT_BIT 1
|
||
|
#define LONG_LEAST_SIGNIFICANT_BIT 0
|
||
|
#define LONG_3RD_MOST_SIGNIFICANT_BIT 1
|
||
|
#define LONG_2ND_MOST_SIGNIFICANT_BIT 2
|
||
|
#define LONG_MOST_SIGNIFICANT_BIT 3
|
||
|
|
||
|
/* Transaction manager access rights */
|
||
|
#define TRANSACTIONMANAGER_QUERY_INFORMATION 0x0001L
|
||
|
#define TRANSACTIONMANAGER_SET_INFORMATION 0x0002L
|
||
|
#define TRANSACTIONMANAGER_RECOVER 0x0004L
|
||
|
#define TRANSACTIONMANAGER_RENAME 0x0008L
|
||
|
#define TRANSACTIONMANAGER_CREATE_RM 0x0010L
|
||
|
#define TRANSACTIONMANAGER_BIND_TRANSACTION 0x0020L
|
||
|
#define TRANSACTIONMANAGER_GENERIC_READ \
|
||
|
(STANDARD_RIGHTS_READ | TRANSACTIONMANAGER_QUERY_INFORMATION)
|
||
|
#define TRANSACTIONMANAGER_GENERIC_WRITE \
|
||
|
(STANDARD_RIGHTS_WRITE | TRANSACTIONMANAGER_SET_INFORMATION | \
|
||
|
TRANSACTIONMANAGER_RECOVER | TRANSACTIONMANAGER_RENAME | \
|
||
|
TRANSACTIONMANAGER_CREATE_RM)
|
||
|
#define TRANSACTIONMANAGER_GENERIC_EXECUTE STANDARD_RIGHTS_EXECUTE
|
||
|
#define TRANSACTIONMANAGER_ALL_ACCESS \
|
||
|
(STANDARD_RIGHTS_REQUIRED | TRANSACTIONMANAGER_GENERIC_READ | \
|
||
|
TRANSACTIONMANAGER_GENERIC_WRITE | TRANSACTIONMANAGER_GENERIC_EXECUTE | \
|
||
|
TRANSACTIONMANAGER_BIND_TRANSACTION)
|
||
|
|
||
|
/* Transaction access rights */
|
||
|
#define TRANSACTION_QUERY_INFORMATION 0x0001L
|
||
|
#define TRANSACTION_SET_INFORMATION 0x0002L
|
||
|
#define TRANSACTION_ENLIST 0x0004L
|
||
|
#define TRANSACTION_COMMIT 0x0008L
|
||
|
#define TRANSACTION_ROLLBACK 0x0010L
|
||
|
#define TRANSACTION_PROPAGATE 0x0020L
|
||
|
#define TRANSACTION_GENERIC_READ \
|
||
|
(STANDARD_RIGHTS_READ | TRANSACTION_QUERY_INFORMATION | SYNCHRONIZE)
|
||
|
#define TRANSACTION_GENERIC_WRITE \
|
||
|
(STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION | TRANSACTION_COMMIT | \
|
||
|
TRANSACTION_ENLIST | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE | SYNCHRONIZE)
|
||
|
#define TRANSACTION_GENERIC_EXECUTE \
|
||
|
(STANDARD_RIGHTS_EXECUTE | TRANSACTION_COMMIT | TRANSACTION_ROLLBACK | SYNCHRONIZE)
|
||
|
#define TRANSACTION_ALL_ACCESS \
|
||
|
(STANDARD_RIGHTS_REQUIRED | TRANSACTION_GENERIC_READ | TRANSACTION_GENERIC_WRITE | \
|
||
|
TRANSACTION_GENERIC_EXECUTE)
|
||
|
#define TRANSACTION_RESOURCE_MANAGER_RIGHTS \
|
||
|
(TRANSACTION_GENERIC_READ | STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION | \
|
||
|
TRANSACTION_ENLIST | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE | SYNCHRONIZE)
|
||
|
|
||
|
/* Resource manager access rights */
|
||
|
#define RESOURCEMANAGER_QUERY_INFORMATION 0x0001L
|
||
|
#define RESOURCEMANAGER_SET_INFORMATION 0x0002L
|
||
|
#define RESOURCEMANAGER_RECOVER 0x0004L
|
||
|
#define RESOURCEMANAGER_ENLIST 0x0008L
|
||
|
#define RESOURCEMANAGER_GET_NOTIFICATION 0x0010L
|
||
|
#define RESOURCEMANAGER_REGISTER_PROTOCOL 0x0020L
|
||
|
#define RESOURCEMANAGER_COMPLETE_PROPAGATION 0x0040L
|
||
|
#define RESOURCEMANAGER_GENERIC_READ \
|
||
|
(STANDARD_RIGHTS_READ | RESOURCEMANAGER_QUERY_INFORMATION | SYNCHRONIZE)
|
||
|
#define RESOURCEMANAGER_GENERIC_WRITE \
|
||
|
(STANDARD_RIGHTS_WRITE | RESOURCEMANAGER_SET_INFORMATION | \
|
||
|
RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST | \
|
||
|
RESOURCEMANAGER_GET_NOTIFICATION | RESOURCEMANAGER_REGISTER_PROTOCOL | \
|
||
|
RESOURCEMANAGER_COMPLETE_PROPAGATION | SYNCHRONIZE)
|
||
|
#define RESOURCEMANAGER_GENERIC_EXECUTE \
|
||
|
(STANDARD_RIGHTS_EXECUTE | RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST | \
|
||
|
RESOURCEMANAGER_GET_NOTIFICATION | RESOURCEMANAGER_COMPLETE_PROPAGATION | \
|
||
|
SYNCHRONIZE)
|
||
|
#define RESOURCEMANAGER_ALL_ACCESS \
|
||
|
(STANDARD_RIGHTS_REQUIRED | RESOURCEMANAGER_GENERIC_READ | \
|
||
|
RESOURCEMANAGER_GENERIC_WRITE | RESOURCEMANAGER_GENERIC_EXECUTE)
|
||
|
|
||
|
/* Enlistment access rights */
|
||
|
#define ENLISTMENT_QUERY_INFORMATION 0x0001L
|
||
|
#define ENLISTMENT_SET_INFORMATION 0x0002L
|
||
|
#define ENLISTMENT_RECOVER 0x0004L
|
||
|
#define ENLISTMENT_SUBORDINATE_RIGHTS 0x0008L
|
||
|
#define ENLISTMENT_SUPERIOR_RIGHTS 0x0010L
|
||
|
#define ENLISTMENT_GENERIC_READ \
|
||
|
(STANDARD_RIGHTS_READ | ENLISTMENT_QUERY_INFORMATION)
|
||
|
#define ENLISTMENT_GENERIC_WRITE \
|
||
|
(STANDARD_RIGHTS_WRITE | ENLISTMENT_SET_INFORMATION | ENLISTMENT_RECOVER | \
|
||
|
ENLISTMENT_SUBORDINATE_RIGHTS | ENLISTMENT_SUPERIOR_RIGHTS)
|
||
|
#define ENLISTMENT_GENERIC_EXECUTE \
|
||
|
(STANDARD_RIGHTS_EXECUTE | ENLISTMENT_RECOVER | ENLISTMENT_SUBORDINATE_RIGHTS | \
|
||
|
ENLISTMENT_SUPERIOR_RIGHTS)
|
||
|
#define ENLISTMENT_ALL_ACCESS \
|
||
|
(STANDARD_RIGHTS_REQUIRED | ENLISTMENT_GENERIC_READ | ENLISTMENT_GENERIC_WRITE | \
|
||
|
ENLISTMENT_GENERIC_EXECUTE)
|
||
|
|
||
|
/* Deferred procedure call types */
|
||
|
#define DPC_NORMAL 0
|
||
|
#define DPC_THREADED 1
|
||
|
|
||
|
/* Memory descriptor list flags */
|
||
|
#define MDL_MAPPED_TO_SYSTEM_VA 0x0001
|
||
|
#define MDL_PAGES_LOCKED 0x0002
|
||
|
#define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
|
||
|
#define MDL_ALLOCATED_FIXED_SIZE 0x0008
|
||
|
#define MDL_PARTIAL 0x0010
|
||
|
#define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
|
||
|
#define MDL_IO_PAGE_READ 0x0040
|
||
|
#define MDL_WRITE_OPERATION 0x0080
|
||
|
#define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
|
||
|
#define MDL_FREE_EXTRA_PTES 0x0200
|
||
|
#define MDL_DESCRIBES_AWE 0x0400
|
||
|
#define MDL_IO_SPACE 0x0800
|
||
|
#define MDL_NETWORK_HEADER 0x1000
|
||
|
#define MDL_MAPPING_CAN_FAIL 0x2000
|
||
|
#define MDL_ALLOCATED_MUST_SUCCEED 0x4000
|
||
|
#define MDL_INTERNAL 0x8000
|
||
|
#define MDL_MAPPING_FLAGS \
|
||
|
(MDL_MAPPED_TO_SYSTEM_VA | MDL_PAGES_LOCKED | MDL_SOURCE_IS_NONPAGED_POOL | \
|
||
|
MDL_PARTIAL_HAS_BEEN_MAPPED | MDL_PARENT_MAPPED_SYSTEM_VA | MDL_SYSTEM_VA | \
|
||
|
MDL_IO_SPACE)
|
||
|
|
||
|
/* Dispatcher header bit counts */
|
||
|
#define TIMER_EXPIRED_INDEX_BITS 6
|
||
|
#define TIMER_PROCESSOR_INDEX_BITS 5
|
||
|
|
||
|
/* Flush multiple maximum */
|
||
|
#ifdef _X86_
|
||
|
#define FLUSH_MULTIPLE_MAXIMUM 32
|
||
|
#endif
|
||
|
|
||
|
/* IRQ levels */
|
||
|
#ifdef _X86_
|
||
|
#define PASSIVE_LEVEL 0
|
||
|
#define LOW_LEVEL 0
|
||
|
#define APC_LEVEL 1
|
||
|
#define DISPATCH_LEVEL 2
|
||
|
#define CMCI_LEVEL 5
|
||
|
#define PROFILE_LEVEL 27
|
||
|
#define CLOCK1_LEVEL 28
|
||
|
#define CLOCK2_LEVEL 28
|
||
|
#define IPI_LEVEL 29
|
||
|
#define POWER_LEVEL 30
|
||
|
#define HIGH_LEVEL 31
|
||
|
#define CLOCK_LEVEL CLOCK2_LEVEL
|
||
|
#endif
|
||
|
|
||
|
/* Page size */
|
||
|
#ifdef _X86_
|
||
|
#define PAGE_SIZE 0x1000
|
||
|
#define PAGE_SHIFT 12L
|
||
|
#endif
|
||
|
|
||
|
/* Kernel user shared data address */
|
||
|
#ifdef _X86_
|
||
|
#define KIP0PCRADDRESS 0xFFDFF000
|
||
|
#define KI_USER_SHARED_DATA 0xFFDF0000
|
||
|
#endif
|
||
|
|
||
|
/* Result type flags */
|
||
|
#ifdef _X86_
|
||
|
#define EFLAG_SIGN 0x8000
|
||
|
#define EFLAG_ZERO 0x4000
|
||
|
#define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
|
||
|
#define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
|
||
|
#define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
|
||
|
#define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
|
||
|
#endif
|
||
|
|
||
|
/* Event access rights */
|
||
|
#define EVENT_QUERY_STATE 0x0001L
|
||
|
#define EVENT_MODIFY_STATE 0x0002L
|
||
|
#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0003L)
|
||
|
|
||
|
/* Semaphore access rights */
|
||
|
#define SEMAPHORE_QUERY_STATE 0x0001L
|
||
|
#define SEMAPHORE_MODIFY_STATE 0x0002L
|
||
|
#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0003L)
|
||
|
|
||
|
/* Cache associativity special value */
|
||
|
#define CACHE_FULLY_ASSOCIATIVE 0xFF
|
||
|
|
||
|
/* Processor features */
|
||
|
#define PF_FLOATING_POINT_PRECISION_ERRATA 0L
|
||
|
#define PF_FLOATING_POINT_EMULATED 1L
|
||
|
#define PF_COMPARE_EXCHANGE_DOUBLE 2L
|
||
|
#define PF_MMX_INSTRUCTIONS_AVAILABLE 3L
|
||
|
#define PF_PPC_MOVEMEM_64BIT_OK 4L
|
||
|
#define PF_ALPHA_BYTE_INSTRUCTIONS 5L
|
||
|
#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6L
|
||
|
#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7L
|
||
|
#define PF_RDTSC_INSTRUCTION_AVAILABLE 8L
|
||
|
#define PF_PAE_ENABLED 9L
|
||
|
#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10L
|
||
|
#define PF_SSE_DAZ_MODE_AVAILABLE 11L
|
||
|
#define PF_NX_ENABLED 12L
|
||
|
#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13L
|
||
|
#define PF_COMPARE_EXCHANGE128 14L
|
||
|
#define PF_COMPARE64_EXCHANGE128 15L
|
||
|
#define PF_CHANNELS_ENABLED 16L
|
||
|
#define PF_XSAVE_ENABLED 17L
|
||
|
|
||
|
/* Maximum processor feature */
|
||
|
#define PROCESSOR_FEATURE_MAX 64
|
||
|
|
||
|
/* Exception flags */
|
||
|
#define EXCEPTION_NONCONTINUABLE 0x00000001L
|
||
|
|
||
|
/* Maximum number of exception parameters */
|
||
|
#define EXCEPTION_MAXIMUM_PARAMETERS 15
|
||
|
|
||
|
/* Thread wait objects */
|
||
|
#define THREAD_WAIT_OBJECTS 3
|
||
|
|
||
|
/* Kernel bug check add pages flags */
|
||
|
#define KB_ADD_PAGES_FLAG_VIRTUAL_ADDRESS 0x00000001L
|
||
|
#define KB_ADD_PAGES_FLAG_PHYSICAL_ADDRESS 0x00000002L
|
||
|
#define KB_ADD_PAGES_FLAG_ADDITIONAL_RANGES_EXIST 0x80000000L
|
||
|
|
||
|
/* Exceptions */
|
||
|
#define EXCEPTION_DIVIDED_BY_ZERO 0x00
|
||
|
#define EXCEPTION_DEBUG 0x01
|
||
|
#define EXCEPTION_NMI 0x02
|
||
|
#define EXCEPTION_INT3 0x03
|
||
|
#define EXCEPTION_BOUND_CHECK 0x05
|
||
|
#define EXCEPTION_INVALID_OPCODE 0x06
|
||
|
#define EXCEPTION_NPX_NOT_AVAILABLE 0x07
|
||
|
#define EXCEPTION_DOUBLE_FAULT 0x08
|
||
|
#define EXCEPTION_NPX_OVERRUN 0x09
|
||
|
#define EXCEPTION_INVALID_TSS 0x0A
|
||
|
#define EXCEPTION_SEGMENT_NOT_PRESENT 0x0B
|
||
|
#define EXCEPTION_STACK_FAULT 0x0C
|
||
|
#define EXCEPTION_GP_FAULT 0x0D
|
||
|
#define EXCEPTION_RESERVED_TRAP 0x0F
|
||
|
#define EXCEPTION_NPX_ERROR 0x10
|
||
|
#define EXCEPTION_ALIGNMENT_CHECK 0x11
|
||
|
|
||
|
/* Guarded mutex flags */
|
||
|
#define GM_LOCK_BIT 0x00000001L
|
||
|
#define GM_LOCK_BIT_V 0x00000000L
|
||
|
#define GM_WAITER_WOKEN 0x00000002L
|
||
|
#define GM_WAITER_INC 0x00000004L
|
||
|
|
||
|
/* KeRegisterProcessorChangeCallback() flags */
|
||
|
#define KE_PROCESSOR_CHANGE_ADD_EXISTING 1L
|
||
|
|
||
|
/* Processor index special value */
|
||
|
#define INVALID_PROCESSOR_INDEX 0xFFFFFFFFL
|
||
|
|
||
|
/* Pool constants */
|
||
|
#define POOL_COLD_ALLOCATION 256
|
||
|
#define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8
|
||
|
#define POOL_RAISE_IF_ALLOCATION_FAILURE 16
|
||
|
|
||
|
/* Fast mutex flags */
|
||
|
#define FM_LOCK_BIT 0x00000001L
|
||
|
#define FM_LOCK_BIT_V 0x00000000L
|
||
|
#define FM_LOCK_WAITER_WOKEN 0x00000002L
|
||
|
#define FM_LOCK_WAITER_INC 0x00000004L
|
||
|
|
||
|
/* Lookaside constants */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#define EX_LOOKASIDE_LIST_EX_FLAGS_RAISE_ON_FAIL 0x00000001L
|
||
|
#define EX_LOOKASIDE_LIST_EX_FLAGS_FAIL_NO_RAISE 0x00000002L
|
||
|
#define EX_MAXIMUM_LOOKASIDE_DEPTH_BASE 256
|
||
|
#define EX_MAXIMUM_LOOKASIDE_DEPTH_LIMIT 1024
|
||
|
#endif
|
||
|
|
||
|
/* Executive resource flags */
|
||
|
#define ResourceNeverExclusive 0x0010
|
||
|
#define ResourceReleaseByOtherThread 0x0020
|
||
|
#define ResourceOwnedExclusive 0x0080
|
||
|
|
||
|
/* Resource hash table size */
|
||
|
#define RESOURCE_HASH_TABLE_SIZE 64
|
||
|
|
||
|
/* ExSetResourceOwnerPointerEx() flags */
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
#define FLAG_OWNER_POINTER_IS_THREAD 0x00000001L
|
||
|
#endif
|
||
|
|
||
|
/* Executive rundown flags */
|
||
|
#define EX_RUNDOWN_ACTIVE 0x00000001L
|
||
|
#define EX_RUNDOWN_COUNT_SHIFT 1
|
||
|
#define EX_RUNDOWN_COUNT_INC 0x00000002L
|
||
|
|
||
|
/* Event increments */
|
||
|
#define EVENT_INCREMENT 1
|
||
|
#define IO_NO_INCREMENT 0
|
||
|
#define IO_CD_ROM_INCREMENT 1
|
||
|
#define IO_DISK_INCREMENT 1
|
||
|
#define IO_KEYBOARD_INCREMENT 6
|
||
|
#define IO_MAILSLOT_INCREMENT 2
|
||
|
#define IO_MOUSE_INCREMENT 6
|
||
|
#define IO_NAMED_PIPE_INCREMENT 2
|
||
|
#define IO_NETWORK_INCREMENT 2
|
||
|
#define IO_PARALLEL_INCREMENT 1
|
||
|
#define IO_SERIAL_INCREMENT 2
|
||
|
#define IO_SOUND_INCREMENT 8
|
||
|
#define IO_VIDEO_INCREMENT 1
|
||
|
#define SEMAPHORE_INCREMENT 1
|
||
|
|
||
|
/* Paging macros */
|
||
|
#define ROUND_TO_PAGES( x ) \
|
||
|
(((ULONG_PTR)(x) + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))
|
||
|
#define BYTES_TO_PAGES( x ) \
|
||
|
(((x) >> PAGE_SHIFT) + (((x) & (PAGE_SIZE - 1)) != 0))
|
||
|
#define BYTE_OFFSET( x ) \
|
||
|
((ULONG)((LONG_PTR)(x) & (PAGE_SIZE - 1)))
|
||
|
#define PAGE_ALIGN( x ) \
|
||
|
((PVOID)((ULONG_PTR)(x) & ~(PAGE_SIZE - 1)))
|
||
|
#define ADDRESS_AND_SIZE_TO_SPAN_PAGES( p1, p2 ) \
|
||
|
((ULONG)((((ULONG_PTR)(p1) & (PAGE_SIZE - 1)) + (p2) + (PAGE_SIZE - 1)) >> \
|
||
|
PAGE_SHIFT))
|
||
|
#define COMPUTE_PAGES_SPANNED( p1, p2 ) \
|
||
|
ADDRESS_AND_SIZE_TO_SPAN_PAGES( p1, p2 )
|
||
|
|
||
|
/* Memory management maximum disk I/O size */
|
||
|
#define MM_MAXIMUM_DISK_IO_SIZE 0x00010000
|
||
|
|
||
|
/* MmAllocatePagesForMdlEx() flags */
|
||
|
#define MM_DONT_ZERO_ALLOCATION 0x00000001L
|
||
|
#define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002L
|
||
|
#define MM_ALLOCATE_FULLY_REQUIRED 0x00000004L
|
||
|
#define MM_ALLOCATE_NO_WAIT 0x00000008L
|
||
|
#define MM_ALLOCATE_PREFER_CONTIGUOUS 0x00000010L
|
||
|
#define MM_ALLOCATE_REQUIRE_CONTIGUOUS_CHUNKS 0x00000020L
|
||
|
|
||
|
/* Node requirement values */
|
||
|
#define MM_ANY_NODE_OK 0x80000000L
|
||
|
|
||
|
/* Initial privilege count */
|
||
|
#define INITIAL_PRIVILEGE_COUNT 3
|
||
|
|
||
|
/* I/O types */
|
||
|
#define IO_TYPE_ADAPTER 0x00000001L
|
||
|
#define IO_TYPE_CONTROLLER 0x00000002L
|
||
|
#define IO_TYPE_DEVICE 0x00000003L
|
||
|
#define IO_TYPE_DRIVER 0x00000004L
|
||
|
#define IO_TYPE_FILE 0x00000005L
|
||
|
#define IO_TYPE_IRP 0x00000006L
|
||
|
#define IO_TYPE_MASTER_ADAPTER 0x00000007L
|
||
|
#define IO_TYPE_OPEN_PACKET 0x00000008L
|
||
|
#define IO_TYPE_TIMER 0x00000009L
|
||
|
#define IO_TYPE_VPB 0x0000000AL
|
||
|
#define IO_TYPE_ERROR_LOG 0x0000000BL
|
||
|
#define IO_TYPE_ERROR_MESSAGE 0x0000000CL
|
||
|
#define IO_TYPE_DEVICE_OBJECT_EXTENSION 0x0000000DL
|
||
|
|
||
|
/* I/O request packet major function codes */
|
||
|
#define IRP_MJ_CREATE 0x00
|
||
|
#define IRP_MJ_CREATE_NAMED_PIPE 0x01
|
||
|
#define IRP_MJ_CLOSE 0x02
|
||
|
#define IRP_MJ_READ 0x03
|
||
|
#define IRP_MJ_WRITE 0x04
|
||
|
#define IRP_MJ_QUERY_INFORMATION 0x05
|
||
|
#define IRP_MJ_SET_INFORMATION 0x06
|
||
|
#define IRP_MJ_QUERY_EA 0x07
|
||
|
#define IRP_MJ_SET_EA 0x08
|
||
|
#define IRP_MJ_FLUSH_BUFFERS 0x09
|
||
|
#define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0A
|
||
|
#define IRP_MJ_SET_VOLUME_INFORMATION 0x0B
|
||
|
#define IRP_MJ_DIRECTORY_CONTROL 0x0C
|
||
|
#define IRP_MJ_FILE_SYSTEM_CONTROL 0x0D
|
||
|
#define IRP_MJ_DEVICE_CONTROL 0x0E
|
||
|
#define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0F
|
||
|
#define IRP_MJ_SHUTDOWN 0x10
|
||
|
#define IRP_MJ_LOCK_CONTROL 0x11
|
||
|
#define IRP_MJ_CLEANUP 0x12
|
||
|
#define IRP_MJ_CREATE_MAILSLOT 0x13
|
||
|
#define IRP_MJ_QUERY_SECURITY 0x14
|
||
|
#define IRP_MJ_SET_SECURITY 0x15
|
||
|
#define IRP_MJ_POWER 0x16
|
||
|
#define IRP_MJ_SYSTEM_CONTROL 0x17
|
||
|
#define IRP_MJ_DEVICE_CHANGE 0x18
|
||
|
#define IRP_MJ_QUERY_QUOTA 0x19
|
||
|
#define IRP_MJ_SET_QUOTA 0x1A
|
||
|
#define IRP_MJ_PNP 0x1B
|
||
|
#define IRP_MJ_PNP_POWER IRP_MJ_PNP
|
||
|
#define IRP_MJ_MAXIMUM_FUNCTION 0x1B
|
||
|
#define IRP_MJ_SCSI IRP_MJ_INTERNAL_DEVICE_CONTROL
|
||
|
|
||
|
/* I/O request packet minor function codes for SCSI */
|
||
|
#define IRP_MN_SCSI_CLASS 0x01
|
||
|
|
||
|
/* I/O request packet minor function codes for Plug and Play */
|
||
|
#define IRP_MN_START_DEVICE 0x00
|
||
|
#define IRP_MN_QUERY_REMOVE_DEVICE 0x01
|
||
|
#define IRP_MN_REMOVE_DEVICE 0x02
|
||
|
#define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
|
||
|
#define IRP_MN_STOP_DEVICE 0x04
|
||
|
#define IRP_MN_QUERY_STOP_DEVICE 0x05
|
||
|
#define IRP_MN_CANCEL_STOP_DEVICE 0x06
|
||
|
#define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
|
||
|
#define IRP_MN_QUERY_INTERFACE 0x08
|
||
|
#define IRP_MN_QUERY_CAPABILITIES 0x09
|
||
|
#define IRP_MN_QUERY_RESOURCES 0x0A
|
||
|
#define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
|
||
|
#define IRP_MN_QUERY_DEVICE_TEXT 0x0C
|
||
|
#define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
|
||
|
#define IRP_MN_READ_CONFIG 0x0F
|
||
|
#define IRP_MN_WRITE_CONFIG 0x10
|
||
|
#define IRP_MN_EJECT 0x11
|
||
|
#define IRP_MN_SET_LOCK 0x12
|
||
|
#define IRP_MN_QUERY_ID 0x13
|
||
|
#define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
|
||
|
#define IRP_MN_QUERY_BUS_INFORMATION 0x15
|
||
|
#define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
|
||
|
#define IRP_MN_SURPRISE_REMOVAL 0x17
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
#define IRP_MN_DEVICE_ENUMERATED 0x19
|
||
|
#endif
|
||
|
|
||
|
/* I/O request packet minor function codes for power */
|
||
|
#define IRP_MN_WAIT_WAKE 0x00
|
||
|
#define IRP_MN_POWER_SEQUENCE 0x01
|
||
|
#define IRP_MN_SET_POWER 0x02
|
||
|
#define IRP_MN_QUERY_POWER 0x03
|
||
|
|
||
|
/* I/O request packet minor function codes for WMI */
|
||
|
#define IRP_MN_QUERY_ALL_DATA 0x00
|
||
|
#define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
|
||
|
#define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
|
||
|
#define IRP_MN_CHANGE_SINGLE_ITEM 0x03
|
||
|
#define IRP_MN_ENABLE_EVENTS 0x04
|
||
|
#define IRP_MN_DISABLE_EVENTS 0x05
|
||
|
#define IRP_MN_ENABLE_COLLECTION 0x06
|
||
|
#define IRP_MN_DISABLE_COLLECTION 0x07
|
||
|
#define IRP_MN_REGINFO 0x08
|
||
|
#define IRP_MN_EXECUTE_METHOD 0x09
|
||
|
#define IRP_MN_REGINFO_EX 0x0B
|
||
|
|
||
|
/* IoCreateFile() flags */
|
||
|
#define IO_FORCE_ACCESS_CHECK 0x0001
|
||
|
#define IO_NO_PARAMETER_CHECKING 0x0100
|
||
|
|
||
|
/* I/O information fields */
|
||
|
#define IO_REPARSE 0
|
||
|
#define IO_REMOUNT 1
|
||
|
|
||
|
/* Volume parameter block flags */
|
||
|
#define VPB_MOUNTED 0x00000001L
|
||
|
#define VPB_LOCKED 0x00000002L
|
||
|
#define VPB_PERSISTENT 0x00000004L
|
||
|
#define VPB_REMOVE_PENDING 0x00000008L
|
||
|
#define VPB_RAW_MOUNT 0x00000010L
|
||
|
#define VPB_DIRECT_WRITES_ALLOWED 0x00000020L
|
||
|
|
||
|
/* Maximum volume label length */
|
||
|
#define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof( WCHAR ))
|
||
|
|
||
|
/* Device object flags */
|
||
|
#define DO_VERIFY_VOLUME 0x00000002L
|
||
|
#define DO_BUFFERED_IO 0x00000004L
|
||
|
#define DO_EXCLUSIVE 0x00000008L
|
||
|
#define DO_DIRECT_IO 0x00000010L
|
||
|
#define DO_MAP_IO_BUFFER 0x00000020L
|
||
|
#define DO_DEVICE_INITIALIZING 0x00000080L
|
||
|
#define DO_SHUTDOWN_REGISTERED 0x00000800L
|
||
|
#define DO_BUS_ENUMERATED_DEVICE 0x00001000L
|
||
|
#define DO_POWER_PAGABLE 0x00002000L
|
||
|
#define DO_POWER_INRUSH 0x00004000L
|
||
|
|
||
|
/* Driver object flags */
|
||
|
#define DRVO_UNLOAD_INVOKED 0x00000001L
|
||
|
#define DRVO_LEGACY_DRIVER 0x00000002L
|
||
|
#define DRVO_BUILTIN_DRIVER 0x00000004L
|
||
|
|
||
|
/* File object flags */
|
||
|
#define FO_FILE_OPEN 0x00000001L
|
||
|
#define FO_SYNCHRONOUS_IO 0x00000002L
|
||
|
#define FO_ALERTABLE_IO 0x00000004L
|
||
|
#define FO_NO_INTERMEDIATE_BUFFERING 0x00000008L
|
||
|
#define FO_WRITE_THROUGH 0x00000010L
|
||
|
#define FO_SEQUENTIAL_ONLY 0x00000020L
|
||
|
#define FO_CACHE_SUPPORTED 0x00000040L
|
||
|
#define FO_NAMED_PIPE 0x00000080L
|
||
|
#define FO_STREAM_FILE 0x00000100L
|
||
|
#define FO_MAILSLOT 0x00000200L
|
||
|
#define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400L
|
||
|
#define FO_QUEUE_IRP_TO_THREAD FO_GENERATE_AUDIT_ON_CLOSE
|
||
|
#define FO_DIRECT_DEVICE_OPEN 0x00000800L
|
||
|
#define FO_FILE_MODIFIED 0x00001000L
|
||
|
#define FO_FILE_SIZE_CHANGED 0x00002000L
|
||
|
#define FO_CLEANUP_COMPLETE 0x00004000L
|
||
|
#define FO_TEMPORARY_FILE 0x00008000L
|
||
|
#define FO_DELETE_ON_CLOSE 0x00010000L
|
||
|
#define FO_OPENED_CASE_SENSITIVE 0x00020000L
|
||
|
#define FO_HANDLE_CREATED 0x00040000L
|
||
|
#define FO_FILE_FAST_IO_READ 0x00080000L
|
||
|
#define FO_RANDOM_ACCESS 0x00100000L
|
||
|
#define FO_FILE_OPEN_CANCELLED 0x00200000L
|
||
|
#define FO_VOLUME_OPEN 0x00400000L
|
||
|
#define FO_REMOTE_ORIGIN 0x01000000L
|
||
|
#define FO_DISALLOW_EXCLUSIVE 0x02000000L
|
||
|
#define FO_SKIP_COMPLETION_PORT FO_DISALLOW_EXCLUSIVE
|
||
|
#define FO_SKIP_SET_EVENT 0x04000000L
|
||
|
#define FO_SKIP_SET_FAST_IO 0x08000000L
|
||
|
#define FO_FLAGS_VALID_ONLY_DURING_CREATE FO_DISALLOW_EXCLUSIVE
|
||
|
|
||
|
/* I/O request packet flags */
|
||
|
#define IRP_NOCACHE 0x00000001L
|
||
|
#define IRP_PAGING_IO 0x00000002L
|
||
|
#define IRP_MOUNT_COMPLETION 0x00000002L
|
||
|
#define IRP_SYNCHRONOUS_API 0x00000004L
|
||
|
#define IRP_ASSOCIATED_IRP 0x00000008L
|
||
|
#define IRP_BUFFERED_IO 0x00000010L
|
||
|
#define IRP_DEALLOCATE_BUFFER 0x00000020L
|
||
|
#define IRP_INPUT_OPERATION 0x00000040L
|
||
|
#define IRP_SYNCHRONOUS_PAGING_IO 0x00000040L
|
||
|
#define IRP_CREATE_OPERATION 0x00000080L
|
||
|
#define IRP_READ_OPERATION 0x00000100L
|
||
|
#define IRP_WRITE_OPERATION 0x00000200L
|
||
|
#define IRP_CLOSE_OPERATION 0x00000400L
|
||
|
#define IRP_DEFER_IO_COMPLETION 0x00000800L
|
||
|
#define IRP_OB_QUERY_NAME 0x00001000L
|
||
|
#define IRP_HOLD_DEVICE_QUEUE 0x00002000L
|
||
|
|
||
|
/* I/O request packet allocation flags */
|
||
|
#define IRP_QUOTA_CHARGED 0x01
|
||
|
#define IRP_ALLOCATED_MUST_SUCCEED 0x02
|
||
|
#define IRP_ALLOCATED_FIXED_SIZE 0x04
|
||
|
#define IRP_LOOKASIDE_ALLOCATION 0x08
|
||
|
|
||
|
/* Stack location flags */
|
||
|
#define SL_PENDING_RETURNED 0x01
|
||
|
#define SL_ERROR_RETURNED 0x02
|
||
|
#define SL_INVOKE_ON_CANCEL 0x20
|
||
|
#define SL_INVOKE_ON_SUCCESS 0x40
|
||
|
#define SL_INVOKE_ON_ERROR 0x80
|
||
|
#define SL_FORCE_ACCESS_CHECK 0x01
|
||
|
#define SL_OPEN_PAGING_FILE 0x02
|
||
|
#define SL_OPEN_TARGET_DIRECTORY 0x04
|
||
|
#define SL_STOP_ON_SYMLINK 0x08
|
||
|
#define SL_CASE_SENSITIVE 0x80
|
||
|
#define SL_KEY_SPECIFIED 0x01
|
||
|
#define SL_OVERRIDE_VERIFY_VOLUME 0x02
|
||
|
#define SL_WRITE_THROUGH 0x04
|
||
|
#define SL_FT_SEQUENTIAL_WRITE 0x08
|
||
|
#define SL_FORCE_DIRECT_WRITE 0x10
|
||
|
#define SL_REALTIME_STREAM 0x20
|
||
|
#define SL_READ_ACCESS_GRANTED 0x01
|
||
|
#define SL_WRITE_ACCESS_GRANTED 0x04
|
||
|
#define SL_FAIL_IMMEDIATELY 0x01
|
||
|
#define SL_EXCLUSIVE_LOCK 0x02
|
||
|
#define SL_RESTART_SCAN 0x01
|
||
|
#define SL_RETURN_SINGLE_ENTRY 0x02
|
||
|
#define SL_INDEX_SPECIFIED 0x04
|
||
|
#define SL_WATCH_TREE 0x01
|
||
|
#define SL_ALLOW_RAW_MOUNT 0x01
|
||
|
|
||
|
/* Plug and Play device states */
|
||
|
#define PNP_DEVICE_DISABLED 0x00000001L
|
||
|
#define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002L
|
||
|
#define PNP_DEVICE_FAILED 0x00000004L
|
||
|
#define PNP_DEVICE_REMOVED 0x00000008L
|
||
|
#define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010L
|
||
|
#define PNP_DEVICE_NOT_DISABLEABLE 0x00000020L
|
||
|
|
||
|
/* Status special value */
|
||
|
#define STATUS_CONTINUE_COMPLETION STATUS_SUCCESS
|
||
|
|
||
|
/* I/O interrupt connection versions */
|
||
|
#define CONNECT_FULLY_SPECIFIED 0x00000001L
|
||
|
#define CONNECT_LINE_BASED 0x00000002L
|
||
|
#define CONNECT_MESSAGE_BASED 0x00000003L
|
||
|
#define CONNECT_FULLY_SPECIFIED_GROUP 0x00000004L
|
||
|
#define CONNECT_CURRENT_VERSION 0x00000004L
|
||
|
|
||
|
/* WDM version numbers */
|
||
|
#define WDM_MAJOR_VERSION 0x06
|
||
|
#define WDM_MINOR_VERSION 0x00
|
||
|
|
||
|
/* IoWMIRegistrationControl() action codes */
|
||
|
#define WMIREG_ACTION_REGISTER 1L
|
||
|
#define WMIREG_ACTION_DEREGISTER 2L
|
||
|
#define WMIREG_ACTION_REREGISTER 3L
|
||
|
#define WMIREG_ACTION_UPDATE_GUIDS 4L
|
||
|
#define WMIREG_ACTION_BLOCK_IRPS 5L
|
||
|
|
||
|
/* IRP_MN_REGINFO codes */
|
||
|
#define WMIREGISTER 0
|
||
|
#define WMIUPDATE 1
|
||
|
|
||
|
/* I/O CSQ types */
|
||
|
#define IO_TYPE_CSQ_IRP_CONTEXT 1
|
||
|
#define IO_TYPE_CSQ 2
|
||
|
#define IO_TYPE_CSQ_EX 3
|
||
|
|
||
|
/* EtwWriteEx() flags */
|
||
|
#define EVENT_WRITE_FLAG_NO_FAULTING 0x00000001L
|
||
|
|
||
|
/* Plug and Play replace parameters version number */
|
||
|
#define PNP_REPLACE_PARAMETERS_VERSION 2L
|
||
|
|
||
|
/* Plug and Play replace driver interface version number */
|
||
|
#define PNP_REPLACE_DRIVER_INTERFACE_VERSION 1L
|
||
|
|
||
|
/* Plug and Play replace flags */
|
||
|
#define PNP_REPLACE_MEMORY_SUPPORTED 0x00000001L
|
||
|
#define PNP_REPLACE_PROCESSOR_SUPPORTED 0x00000002L
|
||
|
#define PNP_REPLACE_HARDWARE_MEMORY_MIRRORING 0x00000004L
|
||
|
#define PNP_REPLACE_HARDWARE_PAGE_COPY 0x00000008L
|
||
|
#define PNP_REPLACE_HARDWARE_QUIESCE 0x00000010L
|
||
|
|
||
|
/* Plug and Play registry keys */
|
||
|
#define PLUGPLAY_REGKEY_DEVICE 1L
|
||
|
#define PLUGPLAY_REGKEY_DRIVER 2L
|
||
|
#define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4L
|
||
|
|
||
|
/* Device interface flags */
|
||
|
#define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001L
|
||
|
|
||
|
/* Plug and Play notify flags */
|
||
|
#define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001L
|
||
|
|
||
|
/* Plug and Play property flags */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#define PLUGPLAY_PROPERTY_PERSISTENT 0x00000001L
|
||
|
#endif
|
||
|
|
||
|
/* Device description version numbers */
|
||
|
#define DEVICE_DESCRIPTION_VERSION 0
|
||
|
#define DEVICE_DESCRIPTION_VERSION1 1
|
||
|
#define DEVICE_DESCRIPTION_VERSION2 2
|
||
|
|
||
|
/* Callback power states */
|
||
|
#define PO_CB_SYSTEM_POWER_POLICY 0
|
||
|
#define PO_CB_AC_STATUS 1
|
||
|
#define PO_CB_BUTTON_COLLISION 2
|
||
|
#define PO_CB_SYSTEM_STATE_LOCK 3
|
||
|
#define PO_CB_LID_SWITCH_STATE 4
|
||
|
#define PO_CB_PROCESSOR_POWER_POLICY 5
|
||
|
|
||
|
/* Object registration version numbers */
|
||
|
#define OB_FLT_REGISTRATION_VERSION_0100 0x0100
|
||
|
#define OB_FLT_REGISTRATION_VERSION OB_FLT_REGISTRATION_VERSION_0100
|
||
|
|
||
|
/* Object operations */
|
||
|
#define OB_OPERATION_HANDLE_CREATE 0x00000001L
|
||
|
#define OB_OPERATION_HANDLE_DUPLICATE 0x00000002L
|
||
|
|
||
|
/* PCI base address counts */
|
||
|
#define PCI_TYPE0_ADDRESSES 6
|
||
|
#define PCI_TYPE1_ADDRESSES 2
|
||
|
#define PCI_TYPE2_ADDRESSES 5
|
||
|
|
||
|
/* PCI maximum values */
|
||
|
#define PCI_MAX_DEVICES 32
|
||
|
#define PCI_MAX_FUNCTION 8
|
||
|
#define PCI_MAX_BRIDGE_NUMBER 0xFF
|
||
|
|
||
|
/* PCI vendor identifier special value */
|
||
|
#define PCI_INVALID_VENDORID 0xFFFF
|
||
|
|
||
|
/* PCI common configuration header types */
|
||
|
#define PCI_MULTIFUNCTION 0x80
|
||
|
#define PCI_DEVICE_TYPE 0x00
|
||
|
#define PCI_BRIDGE_TYPE 0x01
|
||
|
#define PCI_CARDBUS_BRIDGE_TYPE 0x02
|
||
|
|
||
|
/* PCI common configuration commands */
|
||
|
#define PCI_ENABLE_IO_SPACE 0x0001
|
||
|
#define PCI_ENABLE_MEMORY_SPACE 0x0002
|
||
|
#define PCI_ENABLE_BUS_MASTER 0x0004
|
||
|
#define PCI_ENABLE_SPECIAL_CYCLES 0x0008
|
||
|
#define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
|
||
|
#define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
|
||
|
#define PCI_ENABLE_PARITY 0x0040
|
||
|
#define PCI_ENABLE_WAIT_CYCLE 0x0080
|
||
|
#define PCI_ENABLE_SERR 0x0100
|
||
|
#define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
|
||
|
#define PCI_DISABLE_LEVEL_INTERRUPT 0x0400
|
||
|
|
||
|
/* PCI common configuration status values */
|
||
|
#define PCI_STATUS_INTERRUPT_PENDING 0x0008
|
||
|
#define PCI_STATUS_CAPABILITIES_LIST 0x0010
|
||
|
#define PCI_STATUS_66MHZ_CAPABLE 0x0020
|
||
|
#define PCI_STATUS_UDF_SUPPORTED 0x0040
|
||
|
#define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
|
||
|
#define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
|
||
|
#define PCI_STATUS_DEVSEL 0x0600
|
||
|
#define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
|
||
|
#define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
|
||
|
#define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
|
||
|
#define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
|
||
|
#define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
|
||
|
|
||
|
/* PCI whitespace values */
|
||
|
#define PCI_WHITESPACE_CONFIG 0x00000000
|
||
|
#define PCI_WHITESPACE_ROM 0x52696350
|
||
|
|
||
|
/* PCI capability identifiers */
|
||
|
#define PCI_CAPABILITY_ID_POWER_MANAGEMENT 0x01
|
||
|
#define PCI_CAPABILITY_ID_AGP 0x02
|
||
|
#define PCI_CAPABILITY_ID_VPD 0x03
|
||
|
#define PCI_CAPABILITY_ID_SLOT_ID 0x04
|
||
|
#define PCI_CAPABILITY_ID_MSI 0x05
|
||
|
#define PCI_CAPABILITY_ID_CPCI_HOTSWAP 0x06
|
||
|
#define PCI_CAPABILITY_ID_PCIX 0x07
|
||
|
#define PCI_CAPABILITY_ID_HYPERTRANSPORT 0x08
|
||
|
#define PCI_CAPABILITY_ID_VENDOR_SPECIFIC 0x09
|
||
|
#define PCI_CAPABILITY_ID_DEBUG_PORT 0x0A
|
||
|
#define PCI_CAPABILITY_ID_CPCI_RES_CTRL 0x0B
|
||
|
#define PCI_CAPABILITY_ID_SHPC 0x0C
|
||
|
#define PCI_CAPABILITY_ID_P2P_SSID 0x0D
|
||
|
#define PCI_CAPABILITY_ID_AGP_TARGET 0x0E
|
||
|
#define PCI_CAPABILITY_ID_SECURE 0x0F
|
||
|
#define PCI_CAPABILITY_ID_PCI_EXPRESS 0x10
|
||
|
#define PCI_CAPABILITY_ID_MSIX 0x11
|
||
|
|
||
|
/* PCI express capabilitiy identifiers */
|
||
|
#define PCI_EXPRESS_ADVANCED_ERROR_REPORTING_CAP_ID 0x0001
|
||
|
#define PCI_EXPRESS_VIRTUAL_CHANNEL_CAP_ID 0x0002
|
||
|
#define PCI_EXPRESS_DEVICE_SERIAL_NUMBER_CAP_ID 0x0003
|
||
|
#define PCI_EXPRESS_POWER_BUDGETING_CAP_ID 0x0004
|
||
|
#define PCI_EXPRESS_RC_LINK_DECLARATION_CAP_ID 0x0005
|
||
|
#define PCI_EXPRESS_RC_INTERNAL_LINK_CONTROL_CAP_ID 0x0006
|
||
|
#define PCI_EXPRESS_RC_EVENT_COLLECTOR_ENDPOINT_ASSOCIATION_CAP_ID 0x0007
|
||
|
#define PCI_EXPRESS_MFVC_CAP_ID 0x0008
|
||
|
#define PCI_EXPRESS_VC_AND_MFVC_CAP_ID 0x0009
|
||
|
#define PCI_EXPRESS_RCRB_HEADER_CAP_ID 0x000A
|
||
|
#define PCI_EXPRESS_SINGLE_ROOT_IO_VIRTUALIZATION_CAP_ID 0x0010
|
||
|
|
||
|
/* Error reporting root commands */
|
||
|
#define ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING 0x00000001L
|
||
|
#define ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING 0x00000002L
|
||
|
#define ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING 0x00000004L
|
||
|
#define ROOT_CMD_ERROR_REPORTING_ENABLE_MASK \
|
||
|
(ROOT_CMD_ENABLE_CORRECTABLE_ERROR_REPORTING | \
|
||
|
ROOT_CMD_ENABLE_NONFATAL_ERROR_REPORTING | ROOT_CMD_ENABLE_FATAL_ERROR_REPORTING)
|
||
|
|
||
|
/* PCI classes */
|
||
|
#define PCI_CLASS_PRE_20 0x00
|
||
|
#define PCI_CLASS_MASS_STORAGE_CTLR 0x01
|
||
|
#define PCI_CLASS_NETWORK_CTLR 0x02
|
||
|
#define PCI_CLASS_DISPLAY_CTLR 0x03
|
||
|
#define PCI_CLASS_MULTIMEDIA_DEV 0x04
|
||
|
#define PCI_CLASS_MEMORY_CTLR 0x05
|
||
|
#define PCI_CLASS_BRIDGE_DEV 0x06
|
||
|
#define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07
|
||
|
#define PCI_CLASS_BASE_SYSTEM_DEV 0x08
|
||
|
#define PCI_CLASS_INPUT_DEV 0x09
|
||
|
#define PCI_CLASS_DOCKING_STATION 0x0A
|
||
|
#define PCI_CLASS_PROCESSOR 0x0B
|
||
|
#define PCI_CLASS_SERIAL_BUS_CTLR 0x0C
|
||
|
#define PCI_CLASS_WIRELESS_CTLR 0x0D
|
||
|
#define PCI_CLASS_INTELLIGENT_IO_CTLR 0x0E
|
||
|
#define PCI_CLASS_SATELLITE_COMMS_CTLR 0x0F
|
||
|
#define PCI_CLASS_ENCRYPTION_DECRYPTION 0x10
|
||
|
#define PCI_CLASS_DATA_ACQ_SIGNAL_PROC 0x11
|
||
|
#define PCI_CLASS_NOT_DEFINED 0xFF
|
||
|
|
||
|
/* PCI subclasses */
|
||
|
#define PCI_SUBCLASS_PRE_20_NON_VGA 0x00
|
||
|
#define PCI_SUBCLASS_PRE_20_VGA 0x01
|
||
|
#define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00
|
||
|
#define PCI_SUBCLASS_MSC_IDE_CTLR 0x01
|
||
|
#define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02
|
||
|
#define PCI_SUBCLASS_MSC_IPI_CTLR 0x03
|
||
|
#define PCI_SUBCLASS_MSC_RAID_CTLR 0x04
|
||
|
#define PCI_SUBCLASS_MSC_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00
|
||
|
#define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01
|
||
|
#define PCI_SUBCLASS_NET_FDDI_CTLR 0x02
|
||
|
#define PCI_SUBCLASS_NET_ATM_CTLR 0x03
|
||
|
#define PCI_SUBCLASS_NET_ISDN_CTLR 0x04
|
||
|
#define PCI_SUBCLASS_NET_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_VID_VGA_CTLR 0x00
|
||
|
#define PCI_SUBCLASS_VID_XGA_CTLR 0x01
|
||
|
#define PCI_SUBCLASS_VID_3D_CTLR 0x02
|
||
|
#define PCI_SUBCLASS_VID_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_MM_VIDEO_DEV 0x00
|
||
|
#define PCI_SUBCLASS_MM_AUDIO_DEV 0x01
|
||
|
#define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02
|
||
|
#define PCI_SUBCLASS_MM_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_MEM_RAM 0x00
|
||
|
#define PCI_SUBCLASS_MEM_FLASH 0x01
|
||
|
#define PCI_SUBCLASS_MEM_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_BR_HOST 0x00
|
||
|
#define PCI_SUBCLASS_BR_ISA 0x01
|
||
|
#define PCI_SUBCLASS_BR_EISA 0x02
|
||
|
#define PCI_SUBCLASS_BR_MCA 0x03
|
||
|
#define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04
|
||
|
#define PCI_SUBCLASS_BR_PCMCIA 0x05
|
||
|
#define PCI_SUBCLASS_BR_NUBUS 0x06
|
||
|
#define PCI_SUBCLASS_BR_CARDBUS 0x07
|
||
|
#define PCI_SUBCLASS_BR_RACEWAY 0x08
|
||
|
#define PCI_SUBCLASS_BR_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_COM_SERIAL 0x00
|
||
|
#define PCI_SUBCLASS_COM_PARALLEL 0x01
|
||
|
#define PCI_SUBCLASS_COM_MULTIPORT 0x02
|
||
|
#define PCI_SUBCLASS_COM_MODEM 0x03
|
||
|
#define PCI_SUBCLASS_COM_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_SYS_INTERRUPT_CTLR 0x00
|
||
|
#define PCI_SUBCLASS_SYS_DMA_CTLR 0x01
|
||
|
#define PCI_SUBCLASS_SYS_SYSTEM_TIMER 0x02
|
||
|
#define PCI_SUBCLASS_SYS_REAL_TIME_CLOCK 0x03
|
||
|
#define PCI_SUBCLASS_SYS_GEN_HOTPLUG_CTLR 0x04
|
||
|
#define PCI_SUBCLASS_SYS_SDIO_CTRL 0x05
|
||
|
#define PCI_SUBCLASS_SYS_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_INP_KEYBOARD 0x00
|
||
|
#define PCI_SUBCLASS_INP_DIGITIZER 0x01
|
||
|
#define PCI_SUBCLASS_INP_MOUSE 0x02
|
||
|
#define PCI_SUBCLASS_INP_SCANNER 0x03
|
||
|
#define PCI_SUBCLASS_INP_GAMEPORT 0x04
|
||
|
#define PCI_SUBCLASS_INP_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_DOC_GENERIC 0x00
|
||
|
#define PCI_SUBCLASS_DOC_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_PROC_386 0x00
|
||
|
#define PCI_SUBCLASS_PROC_486 0x01
|
||
|
#define PCI_SUBCLASS_PROC_PENTIUM 0x02
|
||
|
#define PCI_SUBCLASS_PROC_ALPHA 0x10
|
||
|
#define PCI_SUBCLASS_PROC_POWERPC 0x20
|
||
|
#define PCI_SUBCLASS_PROC_COPROCESSOR 0x40
|
||
|
#define PCI_SUBCLASS_SB_IEEE1394 0x00
|
||
|
#define PCI_SUBCLASS_SB_ACCESS 0x01
|
||
|
#define PCI_SUBCLASS_SB_SSA 0x02
|
||
|
#define PCI_SUBCLASS_SB_USB 0x03
|
||
|
#define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04
|
||
|
#define PCI_SUBCLASS_SB_SMBUS 0x05
|
||
|
#define PCI_SUBCLASS_WIRELESS_IRDA 0x00
|
||
|
#define PCI_SUBCLASS_WIRELESS_CON_IR 0x01
|
||
|
#define PCI_SUBCLASS_WIRELESS_RF 0x10
|
||
|
#define PCI_SUBCLASS_WIRELESS_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_INTIO_I2O 0x00
|
||
|
#define PCI_SUBCLASS_SAT_TV 0x01
|
||
|
#define PCI_SUBCLASS_SAT_AUDIO 0x02
|
||
|
#define PCI_SUBCLASS_SAT_VOICE 0x03
|
||
|
#define PCI_SUBCLASS_SAT_DATA 0x04
|
||
|
#define PCI_SUBCLASS_CRYPTO_NET_COMP 0x00
|
||
|
#define PCI_SUBCLASS_CRYPTO_ENTERTAINMENT 0x10
|
||
|
#define PCI_SUBCLASS_CRYPTO_OTHER 0x80
|
||
|
#define PCI_SUBCLASS_DASP_DPIO 0x00
|
||
|
#define PCI_SUBCLASS_DASP_OTHER 0x80
|
||
|
|
||
|
/* PCI base address flags */
|
||
|
#define PCI_ADDRESS_IO_SPACE 0x00000001L
|
||
|
#define PCI_ADDRESS_MEMORY_TYPE_MASK 0x00000006L
|
||
|
#define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x00000008L
|
||
|
#define PCI_ADDRESS_IO_ADDRESS_MASK 0xFFFFFFFCL
|
||
|
#define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xFFFFFFF0L
|
||
|
#define PCI_ADDRESS_ROM_ADDRESS_MASK 0xFFFFF800L
|
||
|
|
||
|
/* PCI types */
|
||
|
#define PCI_TYPE_32BIT 0
|
||
|
#define PCI_TYPE_20BIT 2
|
||
|
#define PCI_TYPE_64BIT 4
|
||
|
|
||
|
/* PCI ROM base address flags */
|
||
|
#define PCI_ROMADDRESS_ENABLED 0x00000001L
|
||
|
|
||
|
/* PCI interface version numbers */
|
||
|
#define PCI_DEVICE_PRESENT_INTERFACE_VERSION 1
|
||
|
#define PCI_EXPRESS_LINK_QUIESCENT_INTERFACE_VERSION 1
|
||
|
#define PCI_EXPRESS_ROOT_PORT_INTERFACE_VERSION 1
|
||
|
#define PCI_MSIX_TABLE_CONFIG_INTERFACE_VERSION 1
|
||
|
|
||
|
/* PCI device presence flags */
|
||
|
#define PCI_USE_SUBSYSTEM_IDS 0x00000001L
|
||
|
#define PCI_USE_REVISION 0x00000002L
|
||
|
#define PCI_USE_VENDEV_IDS 0x00000004L
|
||
|
#define PCI_USE_CLASS_SUBCLASS 0x00000008L
|
||
|
#define PCI_USE_PROGIF 0x00000010L
|
||
|
#define PCI_USE_LOCAL_BUS 0x00000020L
|
||
|
#define PCI_USE_LOCAL_DEVICE 0x00000040L
|
||
|
|
||
|
/* Extended attribute entry names */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define EA_CONTAINER_NAME "ContainerName"
|
||
|
#define EA_CONTAINER_SIZE "ContainerSize"
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system base log extension */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define CLFS_BASELOG_EXTENSION L".blf"
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system flags */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define CLFS_FLAG_NO_FLAGS 0x00000000L
|
||
|
#define CLFS_FLAG_FORCE_APPEND 0x00000001L
|
||
|
#define CLFS_FLAG_FORCE_FLUSH 0x00000002L
|
||
|
#define CLFS_FLAG_USE_RESERVATION 0x00000004L
|
||
|
#define CLFS_FLAG_REENTRANT_FILE_SYSTEM 0x00000008L
|
||
|
#define CLFS_FLAG_NON_REENTRANT_FILTER 0x00000010L
|
||
|
#define CLFS_FLAG_REENTRANT_FILTER 0x00000020L
|
||
|
#define CLFS_FLAG_IGNORE_SHARE_ACCESS 0x00000040L
|
||
|
#define CLFS_FLAG_READ_IN_PROGRESS 0x00000080L
|
||
|
#define CLFS_FLAG_MINIFILTER_LEVEL 0x00000100L
|
||
|
#define CLFS_FLAG_HIDDEN_SYSTEM_LOG 0x00000200L
|
||
|
#define CLFS_FLAG_FILTER_INTERMEDIATE_LEVEL CLFS_FLAG_NON_REENTRANT_FILTER
|
||
|
#define CLFS_FLAG_FILTER_TOP_LEVEL CLFS_FLAG_REENTRANT_FILTER
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system record types */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define ClfsNullRecord 0x00
|
||
|
#define ClfsDataRecord 0x01
|
||
|
#define ClfsRestartRecord 0x02
|
||
|
#define ClfsClientRecord 0x03
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system container prefixes */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define CLFS_CONTAINER_STREAM_PREFIX L"%BLF%:"
|
||
|
#define CLFS_CONTAINER_RELATIVE_PREFIX L"%BLF%\\"
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system container states */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define ClsContainerInitializing 0x01
|
||
|
#define ClsContainerInactive 0x02
|
||
|
#define ClsContainerActive 0x04
|
||
|
#define ClsContainerActivePendingDelete 0x08
|
||
|
#define ClsContainerPendingArchive 0x10
|
||
|
#define ClsContainerPendingArchiveAndDelete 0x20
|
||
|
#define ClfsContainerInitializing 0x01
|
||
|
#define ClfsContainerInactive 0x02
|
||
|
#define ClfsContainerActive 0x04
|
||
|
#define ClfsContainerActivePendingDelete 0x08
|
||
|
#define ClfsContainerPendingArchive 0x10
|
||
|
#define ClfsContainerPendingArchiveAndDelete 0x20
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system maximum container information size */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define CLFS_MAX_CONTAINER_INFO 256
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system scan modes */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define CLFS_SCAN_INIT 0x01
|
||
|
#define CLFS_SCAN_FORWARD 0x02
|
||
|
#define CLFS_SCAN_BACKWARD 0x04
|
||
|
#define CLFS_SCAN_CLOSE 0x08
|
||
|
#define CLFS_SCAN_INITIALIZED 0x10
|
||
|
#define CLFS_SCAN_BUFFERED 0x20
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system log size limits */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define CLFS_LOG_SIZE_MINIMUM 0x0000000000000000LL
|
||
|
#define CLFS_LOG_SIZE_MAXIMUM 0xFFFFFFFFFFFFFFFFLL
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system management policy version number */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define CLFS_MGMT_POLICY_VERSION 0x00000001L
|
||
|
#endif
|
||
|
|
||
|
/* Log policy flags */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define LOG_POLICY_OVERWRITE 0x00000001L
|
||
|
#define LOG_POLICY_PERSIST 0x00000002L
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system management client registration version number */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#define CLFS_MGMT_CLIENT_REGISTRATION_VERSION 0x00000001L
|
||
|
#endif
|
||
|
|
||
|
/* PCW version numbers */
|
||
|
#define PCW_VERSION_1 0x0100
|
||
|
#define PCW_CURRENT_VERSION PCW_VERSION_1
|
||
|
|
||
|
/* Opaque data types */
|
||
|
typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
|
||
|
#ifdef _NTIFS_H_INCLUDED
|
||
|
typedef struct _KPROCESS *PEPROCESS;
|
||
|
typedef struct _KTHREAD *PETHREAD;
|
||
|
#else
|
||
|
typedef struct _EPROCESS *PEPROCESS;
|
||
|
typedef struct _ETHREAD *PETHREAD;
|
||
|
#endif
|
||
|
typedef struct _IO_TIMER *PIO_TIMER;
|
||
|
typedef struct _KINTERRUPT *PKINTERRUPT;
|
||
|
typedef struct _KTHREAD *PKTHREAD;
|
||
|
typedef struct _KTHREAD *PRKTHREAD;
|
||
|
typedef struct _KPROCESS *PKPROCESS;
|
||
|
typedef struct _KPROCESS *PRKPROCESS;
|
||
|
typedef struct _OBJECT_TYPE *POBJECT_TYPE;
|
||
|
typedef struct _CONTEXT *PCONTEXT;
|
||
|
typedef struct _FILE_GET_QUOTA_INFORMATION *PFILE_GET_QUOTA_INFORMATION;
|
||
|
typedef struct _EX_RUNDOWN_REF_CACHE_AWARE *PEX_RUNDOWN_REF_CACHE_AWARE;
|
||
|
typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
|
||
|
typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK *PIO_REMOVE_LOCK_TRACKING_BLOCK;
|
||
|
typedef struct _IO_WORKITEM *PIO_WORKITEM;
|
||
|
#ifdef _NTDDK_H_INCLUDED
|
||
|
typedef struct _ADAPTER_OBJECT *PADAPTER_OBJECT;
|
||
|
#else
|
||
|
typedef struct _DMA_ADAPTER *PADAPTER_OBJECT;
|
||
|
#endif
|
||
|
typedef struct _KTRANSACTION KTRANSACTION;
|
||
|
typedef struct _KTRANSACTION *PKTRANSACTION;
|
||
|
typedef struct _KTRANSACTION *PRKTRANSACTION;
|
||
|
typedef struct _KENLISTMENT KENLISTMENT;
|
||
|
typedef struct _KENLISTMENT *PKENLISTMENT;
|
||
|
typedef struct _KENLISTMENT *PRKENLISTMENT;
|
||
|
typedef struct _KRESOURCEMANAGER KRESOURCEMANAGER;
|
||
|
typedef struct _KRESOURCEMANAGER *PKRESOURCEMANAGER;
|
||
|
typedef struct _KRESOURCEMANAGER *PRKRESOURCEMANAGER;
|
||
|
typedef struct _KTM KTM;
|
||
|
typedef struct _KTM *PKTM;
|
||
|
typedef struct _KTM *PRKTM;
|
||
|
typedef struct _PCW_INSTANCE *PPCW_INSTANCE;
|
||
|
typedef struct _PCW_REGISTRATION *PPCW_REGISTRATION;
|
||
|
typedef struct _PCW_BUFFER *PPCW_BUFFER;
|
||
|
|
||
|
/* Opaque data types related to security */
|
||
|
typedef PVOID PACCESS_TOKEN;
|
||
|
typedef PVOID PSECURITY_DESCRIPTOR;
|
||
|
typedef PVOID PSID;
|
||
|
|
||
|
/* Generic mapping */
|
||
|
typedef struct _GENERIC_MAPPING {
|
||
|
ACCESS_MASK GenericRead;
|
||
|
ACCESS_MASK GenericWrite;
|
||
|
ACCESS_MASK GenericExecute;
|
||
|
ACCESS_MASK GenericAll;
|
||
|
} GENERIC_MAPPING;
|
||
|
typedef GENERIC_MAPPING *PGENERIC_MAPPING;
|
||
|
|
||
|
/* LUID and attributes */
|
||
|
#include <pshpack4.h>
|
||
|
typedef struct _LUID_AND_ATTRIBUTES {
|
||
|
LUID Luid;
|
||
|
ULONG Attributes;
|
||
|
} LUID_AND_ATTRIBUTES;
|
||
|
typedef LUID_AND_ATTRIBUTES *PLUID_AND_ATTRIBUTES;
|
||
|
#include <poppack.h>
|
||
|
|
||
|
/* Access control list */
|
||
|
typedef struct _ACL {
|
||
|
UCHAR AclRevision;
|
||
|
UCHAR Sbz1;
|
||
|
USHORT AclSize;
|
||
|
USHORT AceCount;
|
||
|
USHORT Sbz2;
|
||
|
} ACL;
|
||
|
typedef ACL *PACL;
|
||
|
|
||
|
/* Privilege set */
|
||
|
typedef struct _PRIVILEGE_SET {
|
||
|
ULONG PrivilegeCount;
|
||
|
ULONG Control;
|
||
|
LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
|
||
|
} PRIVILEGE_SET;
|
||
|
typedef PRIVILEGE_SET *PPRIVILEGE_SET;
|
||
|
|
||
|
/* Security impersonation levels */
|
||
|
typedef enum _SECURITY_IMPERSONATION_LEVEL {
|
||
|
SecurityAnonymous,
|
||
|
SecurityIdentification,
|
||
|
SecurityImpersonation,
|
||
|
SecurityDelegation
|
||
|
} SECURITY_IMPERSONATION_LEVEL;
|
||
|
typedef SECURITY_IMPERSONATION_LEVEL* PSECURITY_IMPERSONATION_LEVEL;
|
||
|
|
||
|
/* Security quality of service */
|
||
|
typedef struct _SECURITY_QUALITY_OF_SERVICE {
|
||
|
ULONG Length;
|
||
|
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
|
||
|
SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
|
||
|
BOOLEAN EffectiveOnly;
|
||
|
} SECURITY_QUALITY_OF_SERVICE;
|
||
|
typedef SECURITY_QUALITY_OF_SERVICE *PSECURITY_QUALITY_OF_SERVICE;
|
||
|
|
||
|
/* Security impersonation state */
|
||
|
typedef struct _SE_IMPERSONATION_STATE {
|
||
|
PACCESS_TOKEN Token;
|
||
|
BOOLEAN CopyOnOpen;
|
||
|
BOOLEAN EffectiveOnly;
|
||
|
SECURITY_IMPERSONATION_LEVEL Level;
|
||
|
} SE_IMPERSONATION_STATE;
|
||
|
typedef SE_IMPERSONATION_STATE *PSE_IMPERSONATION_STATE;
|
||
|
|
||
|
/* Security audit parameter types */
|
||
|
typedef enum _SE_ADT_PARAMETER_TYPE {
|
||
|
SeAdtParmTypeNone = 0,
|
||
|
SeAdtParmTypeString = 1,
|
||
|
SeAdtParmTypeFileSpec = 2,
|
||
|
SeAdtParmTypeUlong = 3,
|
||
|
SeAdtParmTypeSid = 4,
|
||
|
SeAdtParmTypeLogonId = 5,
|
||
|
SeAdtParmTypeNoLogonId = 6,
|
||
|
SeAdtParmTypeAccessMask = 7,
|
||
|
SeAdtParmTypePrivs = 8,
|
||
|
SeAdtParmTypeObjectTypes = 9,
|
||
|
SeAdtParmTypeHexUlong = 10,
|
||
|
SeAdtParmTypePtr = 11,
|
||
|
SeAdtParmTypeTime = 12,
|
||
|
SeAdtParmTypeGuid = 13,
|
||
|
SeAdtParmTypeLuid = 14,
|
||
|
SeAdtParmTypeHexInt64 = 15,
|
||
|
SeAdtParmTypeStringList = 16,
|
||
|
SeAdtParmTypeSidList = 17,
|
||
|
SeAdtParmTypeDuration = 18,
|
||
|
SeAdtParmTypeUserAccountControl = 19,
|
||
|
SeAdtParmTypeNoUac = 20,
|
||
|
SeAdtParmTypeMessage = 21,
|
||
|
SeAdtParmTypeDateTime = 22,
|
||
|
SeAdtParmTypeSockAddr = 23,
|
||
|
SeAdtParmTypeSD = 24,
|
||
|
SeAdtParmTypeLogonHours = 25,
|
||
|
SeAdtParmTypeLogonIdNoSid = 26,
|
||
|
SeAdtParmTypeUlongNoConv = 27,
|
||
|
SeAdtParmTypeSockAddrNoPort = 28,
|
||
|
SeAdtParmTypeAccessReason = 29
|
||
|
} SE_ADT_PARAMETER_TYPE;
|
||
|
typedef SE_ADT_PARAMETER_TYPE *PSE_ADT_PARAMETER_TYPE;
|
||
|
|
||
|
/* Security audit object type */
|
||
|
typedef struct _SE_ADT_OBJECT_TYPE {
|
||
|
GUID ObjectType;
|
||
|
USHORT Flags;
|
||
|
USHORT Level;
|
||
|
ACCESS_MASK AccessMask;
|
||
|
} SE_ADT_OBJECT_TYPE;
|
||
|
typedef SE_ADT_OBJECT_TYPE *PSE_ADT_OBJECT_TYPE;
|
||
|
|
||
|
/* Security audit parameter array entry */
|
||
|
typedef struct _SE_ADT_PARAMETER_ARRAY_ENTRY {
|
||
|
SE_ADT_PARAMETER_TYPE Type;
|
||
|
ULONG Length;
|
||
|
ULONG_PTR Data[2];
|
||
|
PVOID Address;
|
||
|
} SE_ADT_PARAMETER_ARRAY_ENTRY;
|
||
|
typedef SE_ADT_PARAMETER_ARRAY_ENTRY *PSE_ADT_PARAMETER_ARRAY_ENTRY;
|
||
|
|
||
|
/* Security audit access reason */
|
||
|
typedef struct _SE_ADT_ACCESS_REASON {
|
||
|
ACCESS_MASK AccessMask;
|
||
|
ULONG AccessReasons[32];
|
||
|
ULONG ObjectTypeIndex;
|
||
|
ULONG AccessGranted;
|
||
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
||
|
} SE_ADT_ACCESS_REASON;
|
||
|
typedef SE_ADT_ACCESS_REASON *PSE_ADT_ACCESS_REASON;
|
||
|
|
||
|
/* Security audit parameter array */
|
||
|
typedef struct _SE_ADT_PARAMETER_ARRAY {
|
||
|
ULONG CategoryId;
|
||
|
ULONG AuditId;
|
||
|
ULONG ParameterCount;
|
||
|
ULONG Length;
|
||
|
USHORT FlatSubCategoryId;
|
||
|
USHORT Type;
|
||
|
ULONG Flags;
|
||
|
SE_ADT_PARAMETER_ARRAY_ENTRY Parameters[SE_MAX_AUDIT_PARAMETERS];
|
||
|
} SE_ADT_PARAMETER_ARRAY;
|
||
|
typedef SE_ADT_PARAMETER_ARRAY *PSE_ADT_PARAMETER_ARRAY;
|
||
|
|
||
|
/* Kernel system time */
|
||
|
typedef struct _KSYSTEM_TIME {
|
||
|
ULONG LowPart;
|
||
|
LONG High1Time;
|
||
|
LONG High2Time;
|
||
|
} KSYSTEM_TIME;
|
||
|
typedef KSYSTEM_TIME *PKSYSTEM_TIME;
|
||
|
|
||
|
/* Kernel spin lock queue numbers */
|
||
|
typedef enum _KSPIN_LOCK_QUEUE_NUMBER {
|
||
|
LockQueueExpansionLock = 1,
|
||
|
LockQueueSystemSpaceLock = 3,
|
||
|
LockQueueVacbLock = 4,
|
||
|
LockQueueMasterLock = 5,
|
||
|
LockQueueNonPagedPoolLock = 6,
|
||
|
LockQueueIoCancelLock = 7,
|
||
|
LockQueueWorkQueueLock = 8,
|
||
|
LockQueueIoVpbLock = 9,
|
||
|
LockQueueIoDatabaseLock = 10,
|
||
|
LockQueueIoCompletionLock = 11,
|
||
|
LockQueueNtfsStructLock = 12,
|
||
|
LockQueueAfdWorkQueueLock = 13,
|
||
|
LockQueueBcbLock = 14,
|
||
|
LockQueueMmNonPagedPoolLock = 15,
|
||
|
LockQueueMaximumLock = 17
|
||
|
} KSPIN_LOCK_QUEUE_NUMBER;
|
||
|
typedef KSPIN_LOCK_QUEUE_NUMBER *PKSPIN_LOCK_QUEUE_NUMBER;
|
||
|
|
||
|
/* Kernel spin lock queue */
|
||
|
typedef struct _KSPIN_LOCK_QUEUE {
|
||
|
struct _KSPIN_LOCK_QUEUE * volatile Next;
|
||
|
PKSPIN_LOCK volatile Lock;
|
||
|
} KSPIN_LOCK_QUEUE;
|
||
|
typedef KSPIN_LOCK_QUEUE *PKSPIN_LOCK_QUEUE;
|
||
|
|
||
|
/* Kernel lock queue handle */
|
||
|
typedef struct _KLOCK_QUEUE_HANDLE {
|
||
|
KSPIN_LOCK_QUEUE LockQueue;
|
||
|
KIRQL OldIrql;
|
||
|
} KLOCK_QUEUE_HANDLE;
|
||
|
typedef KLOCK_QUEUE_HANDLE *PKLOCK_QUEUE_HANDLE;
|
||
|
|
||
|
/* Kernel interrupt routine */
|
||
|
typedef VOID NTAPI KINTERRUPT_ROUTINE( VOID );
|
||
|
typedef KINTERRUPT_ROUTINE *PKINTERRUPT_ROUTINE;
|
||
|
|
||
|
/* Kernel profile sources */
|
||
|
typedef enum _KPROFILE_SOURCE {
|
||
|
ProfileTime = 0,
|
||
|
ProfileAlignmentFixup = 1,
|
||
|
ProfileTotalIssues = 2,
|
||
|
ProfilePipelineDry = 3,
|
||
|
ProfileLoadInstructions = 4,
|
||
|
ProfilePipelineFrozen = 5,
|
||
|
ProfileBranchInstructions = 6,
|
||
|
ProfileTotalNonissues = 7,
|
||
|
ProfileDcacheMisses = 8,
|
||
|
ProfileIcacheMisses = 9,
|
||
|
ProfileCacheMisses = 10,
|
||
|
ProfileBranchMispredictions = 11,
|
||
|
ProfileStoreInstructions = 12,
|
||
|
ProfileFpInstructions = 13,
|
||
|
ProfileIntegerInstructions = 14,
|
||
|
Profile2Issue = 15,
|
||
|
Profile3Issue = 16,
|
||
|
Profile4Issue = 17,
|
||
|
ProfileSpecialInstructions = 18,
|
||
|
ProfileTotalCycles = 19,
|
||
|
ProfileIcacheIssues = 20,
|
||
|
ProfileDcacheAccesses = 21,
|
||
|
ProfileMemoryBarrierCycles = 22,
|
||
|
ProfileLoadLinkedIssues = 23,
|
||
|
ProfileMaximum = 24
|
||
|
} KPROFILE_SOURCE;
|
||
|
|
||
|
/* 128-bit register */
|
||
|
typedef struct _M128A {
|
||
|
ULONGLONG Low;
|
||
|
LONGLONG High;
|
||
|
} M128A;
|
||
|
typedef M128A *PM128A;
|
||
|
|
||
|
/* Extended save format */
|
||
|
typedef struct _XSAVE_FORMAT {
|
||
|
USHORT ControlWord;
|
||
|
USHORT StatusWord;
|
||
|
UCHAR TagWord;
|
||
|
UCHAR Reserved1;
|
||
|
USHORT ErrorOpcode;
|
||
|
ULONG ErrorOffset;
|
||
|
USHORT ErrorSelector;
|
||
|
USHORT Reserved2;
|
||
|
ULONG DataOffset;
|
||
|
USHORT DataSelector;
|
||
|
USHORT Reserved3;
|
||
|
ULONG MxCsr;
|
||
|
ULONG MxCsr_Mask;
|
||
|
M128A FloatRegisters[8];
|
||
|
M128A XmmRegisters[8];
|
||
|
UCHAR Reserved4[192];
|
||
|
ULONG StackControl[7];
|
||
|
ULONG Cr0NpxState;
|
||
|
} XSAVE_FORMAT;
|
||
|
typedef XSAVE_FORMAT *PXSAVE_FORMAT;
|
||
|
|
||
|
/* Extended save area header */
|
||
|
typedef struct _XSAVE_AREA_HEADER {
|
||
|
ULONG64 Mask;
|
||
|
ULONG64 Reserved[7];
|
||
|
} XSAVE_AREA_HEADER;
|
||
|
typedef XSAVE_AREA_HEADER *PXSAVE_AREA_HEADER;
|
||
|
|
||
|
/* Extended save area */
|
||
|
typedef struct _XSAVE_AREA {
|
||
|
XSAVE_FORMAT LegacyState;
|
||
|
XSAVE_AREA_HEADER Header;
|
||
|
} XSAVE_AREA;
|
||
|
typedef XSAVE_AREA *PXSAVE_AREA;
|
||
|
|
||
|
/* Extended state context */
|
||
|
typedef struct _XSTATE_CONTEXT {
|
||
|
ULONG64 Mask;
|
||
|
ULONG Length;
|
||
|
ULONG Reserved1;
|
||
|
PXSAVE_AREA Area;
|
||
|
#ifdef _X86_
|
||
|
ULONG Reserved2;
|
||
|
#endif
|
||
|
PVOID Buffer;
|
||
|
#ifdef _X86_
|
||
|
ULONG Reserved3;
|
||
|
#endif
|
||
|
} XSTATE_CONTEXT;
|
||
|
typedef XSTATE_CONTEXT *PXSTATE_CONTEXT;
|
||
|
|
||
|
/* Context chunk */
|
||
|
typedef struct _CONTEXT_CHUNK {
|
||
|
LONG Offset;
|
||
|
ULONG Length;
|
||
|
} CONTEXT_CHUNK;
|
||
|
typedef CONTEXT_CHUNK *PCONTEXT_CHUNK;
|
||
|
|
||
|
/* Extended context */
|
||
|
typedef struct _CONTEXT_EX {
|
||
|
CONTEXT_CHUNK All;
|
||
|
CONTEXT_CHUNK Legacy;
|
||
|
CONTEXT_CHUNK XState;
|
||
|
} CONTEXT_EX;
|
||
|
typedef CONTEXT_EX *PCONTEXT_EX;
|
||
|
|
||
|
/* I/O status block */
|
||
|
typedef struct _IO_STATUS_BLOCK {
|
||
|
union {
|
||
|
NTSTATUS Status;
|
||
|
PVOID Pointer;
|
||
|
};
|
||
|
ULONG_PTR Information;
|
||
|
} IO_STATUS_BLOCK;
|
||
|
typedef IO_STATUS_BLOCK *PIO_STATUS_BLOCK;
|
||
|
|
||
|
/* I/O asynchronous procedure call routine */
|
||
|
typedef VOID (NTAPI *PIO_APC_ROUTINE)( PVOID, PIO_STATUS_BLOCK, ULONG );
|
||
|
|
||
|
/* I/O session events */
|
||
|
typedef enum _IO_SESSION_EVENT {
|
||
|
IoSessionEventIgnore = 0,
|
||
|
IoSessionEventCreated = 1,
|
||
|
IoSessionEventTerminated = 2,
|
||
|
IoSessionEventConnected = 3,
|
||
|
IoSessionEventDisconnected = 4,
|
||
|
IoSessionEventLogon = 5,
|
||
|
IoSessionEventLogoff = 6,
|
||
|
IoSessionEventMax = 7
|
||
|
} IO_SESSION_EVENT;
|
||
|
typedef IO_SESSION_EVENT *PIO_SESSION_EVENT;
|
||
|
|
||
|
/* I/O session states */
|
||
|
typedef enum _IO_SESSION_STATE {
|
||
|
IoSessionStateCreated = 1,
|
||
|
IoSessionStateInitialized = 2,
|
||
|
IoSessionStateConnected = 3,
|
||
|
IoSessionStateDisconnected = 4,
|
||
|
IoSessionStateDisconnectedLoggedOn = 5,
|
||
|
IoSessionStateLoggedOn = 6,
|
||
|
IoSessionStateLoggedOff = 7,
|
||
|
IoSessionStateTerminated = 8,
|
||
|
IoSessionStateMax = 9
|
||
|
} IO_SESSION_STATE;
|
||
|
typedef IO_SESSION_STATE *PIO_SESSION_STATE;
|
||
|
|
||
|
/* I/O session connect information */
|
||
|
typedef struct _IO_SESSION_CONNECT_INFO {
|
||
|
ULONG SessionId;
|
||
|
BOOLEAN LocalSession;
|
||
|
} IO_SESSION_CONNECT_INFO;
|
||
|
typedef IO_SESSION_CONNECT_INFO *PIO_SESSION_CONNECT_INFO;
|
||
|
|
||
|
/* File information classes */
|
||
|
typedef enum _FILE_INFORMATION_CLASS {
|
||
|
FileDirectoryInformation = 1,
|
||
|
FileFullDirectoryInformation = 2,
|
||
|
FileBothDirectoryInformation = 3,
|
||
|
FileBasicInformation = 4,
|
||
|
FileStandardInformation = 5,
|
||
|
FileInternalInformation = 6,
|
||
|
FileEaInformation = 7,
|
||
|
FileAccessInformation = 8,
|
||
|
FileNameInformation = 9,
|
||
|
FileRenameInformation = 10,
|
||
|
FileLinkInformation = 11,
|
||
|
FileNamesInformation = 12,
|
||
|
FileDispositionInformation = 13,
|
||
|
FilePositionInformation = 14,
|
||
|
FileFullEaInformation = 15,
|
||
|
FileModeInformation = 16,
|
||
|
FileAlignmentInformation = 17,
|
||
|
FileAllInformation = 18,
|
||
|
FileAllocationInformation = 19,
|
||
|
FileEndOfFileInformation = 20,
|
||
|
FileAlternateNameInformation = 21,
|
||
|
FileStreamInformation = 22,
|
||
|
FilePipeInformation = 23,
|
||
|
FilePipeLocalInformation = 24,
|
||
|
FilePipeRemoteInformation = 25,
|
||
|
FileMailslotQueryInformation = 26,
|
||
|
FileMailslotSetInformation = 27,
|
||
|
FileCompressionInformation = 28,
|
||
|
FileObjectIdInformation = 29,
|
||
|
FileCompletionInformation = 30,
|
||
|
FileMoveClusterInformation = 31,
|
||
|
FileQuotaInformation = 32,
|
||
|
FileReparsePointInformation = 33,
|
||
|
FileNetworkOpenInformation = 34,
|
||
|
FileAttributeTagInformation = 35,
|
||
|
FileTrackingInformation = 36,
|
||
|
FileIdBothDirectoryInformation = 37,
|
||
|
FileIdFullDirectoryInformation = 38,
|
||
|
FileValidDataLengthInformation = 39,
|
||
|
FileShortNameInformation = 40,
|
||
|
FileIoCompletionNotificationInformation = 41,
|
||
|
FileIoStatusBlockRangeInformation = 42,
|
||
|
FileIoPriorityHintInformation = 43,
|
||
|
FileSfioReserveInformation = 44,
|
||
|
FileSfioVolumeInformation = 45,
|
||
|
FileHardLinkInformation = 46,
|
||
|
FileProcessIdsUsingFileInformation = 47,
|
||
|
FileNormalizedNameInformation = 48,
|
||
|
FileNetworkPhysicalNameInformation = 49,
|
||
|
FileIdGlobalTxDirectoryInformation = 50,
|
||
|
FileIsRemoteDeviceInformation = 51,
|
||
|
FileAttributeCacheInformation = 52,
|
||
|
FileNumaNodeInformation = 53,
|
||
|
FileStandardLinkInformation = 54,
|
||
|
FileRemoteProtocolInformation = 55,
|
||
|
FileMaximumInformation = 56
|
||
|
} FILE_INFORMATION_CLASS;
|
||
|
typedef FILE_INFORMATION_CLASS *PFILE_INFORMATION_CLASS;
|
||
|
|
||
|
/* File basic information */
|
||
|
typedef struct _FILE_BASIC_INFORMATION {
|
||
|
LARGE_INTEGER CreationTime;
|
||
|
LARGE_INTEGER LastAccessTime;
|
||
|
LARGE_INTEGER LastWriteTime;
|
||
|
LARGE_INTEGER ChangeTime;
|
||
|
ULONG FileAttributes;
|
||
|
} FILE_BASIC_INFORMATION;
|
||
|
typedef FILE_BASIC_INFORMATION *PFILE_BASIC_INFORMATION;
|
||
|
|
||
|
/* File standard information */
|
||
|
typedef struct _FILE_STANDARD_INFORMATION {
|
||
|
LARGE_INTEGER AllocationSize;
|
||
|
LARGE_INTEGER EndOfFile;
|
||
|
ULONG NumberOfLinks;
|
||
|
BOOLEAN DeletePending;
|
||
|
BOOLEAN Directory;
|
||
|
} FILE_STANDARD_INFORMATION;
|
||
|
typedef FILE_STANDARD_INFORMATION *PFILE_STANDARD_INFORMATION;
|
||
|
|
||
|
/* File position information */
|
||
|
typedef struct _FILE_POSITION_INFORMATION {
|
||
|
LARGE_INTEGER CurrentByteOffset;
|
||
|
} FILE_POSITION_INFORMATION;
|
||
|
typedef FILE_POSITION_INFORMATION *PFILE_POSITION_INFORMATION;
|
||
|
|
||
|
/* File network open information */
|
||
|
typedef struct _FILE_NETWORK_OPEN_INFORMATION {
|
||
|
LARGE_INTEGER CreationTime;
|
||
|
LARGE_INTEGER LastAccessTime;
|
||
|
LARGE_INTEGER LastWriteTime;
|
||
|
LARGE_INTEGER ChangeTime;
|
||
|
LARGE_INTEGER AllocationSize;
|
||
|
LARGE_INTEGER EndOfFile;
|
||
|
ULONG FileAttributes;
|
||
|
} FILE_NETWORK_OPEN_INFORMATION;
|
||
|
typedef FILE_NETWORK_OPEN_INFORMATION *PFILE_NETWORK_OPEN_INFORMATION;
|
||
|
|
||
|
/* File full extended attribute information */
|
||
|
typedef struct _FILE_FULL_EA_INFORMATION {
|
||
|
ULONG NextEntryOffset;
|
||
|
UCHAR Flags;
|
||
|
UCHAR EaNameLength;
|
||
|
USHORT EaValueLength;
|
||
|
CHAR EaName[1];
|
||
|
} FILE_FULL_EA_INFORMATION;
|
||
|
typedef FILE_FULL_EA_INFORMATION *PFILE_FULL_EA_INFORMATION;
|
||
|
|
||
|
/* File SFIO reserve information */
|
||
|
typedef struct _FILE_SFIO_RESERVE_INFORMATION {
|
||
|
ULONG RequestsPerPeriod;
|
||
|
ULONG Period;
|
||
|
BOOLEAN RetryFailures;
|
||
|
BOOLEAN Discardable;
|
||
|
ULONG RequestSize;
|
||
|
ULONG NumOutstandingRequests;
|
||
|
} FILE_SFIO_RESERVE_INFORMATION;
|
||
|
typedef FILE_SFIO_RESERVE_INFORMATION *PFILE_SFIO_RESERVE_INFORMATION;
|
||
|
|
||
|
/* File SFIO volume information */
|
||
|
typedef struct _FILE_SFIO_VOLUME_INFORMATION {
|
||
|
ULONG MaximumRequestsPerPeriod;
|
||
|
ULONG MinimumPeriod;
|
||
|
ULONG MinimumTransferSize;
|
||
|
} FILE_SFIO_VOLUME_INFORMATION;
|
||
|
typedef FILE_SFIO_VOLUME_INFORMATION *PFILE_SFIO_VOLUME_INFORMATION;
|
||
|
|
||
|
/* I/O priority hints */
|
||
|
typedef enum _IO_PRIORITY_HINT {
|
||
|
IoPriorityVeryLow = 0,
|
||
|
IoPriorityLow = 1,
|
||
|
IoPriorityNormal = 2,
|
||
|
IoPriorityHigh = 3,
|
||
|
IoPriorityCritical = 4,
|
||
|
MaxIoPriorityTypes = 5
|
||
|
} IO_PRIORITY_HINT;
|
||
|
|
||
|
/* File I/O priority hint information */
|
||
|
typedef struct _FILE_IO_PRIORITY_HINT_INFORMATION {
|
||
|
IO_PRIORITY_HINT PriorityHint;
|
||
|
} FILE_IO_PRIORITY_HINT_INFORMATION;
|
||
|
typedef FILE_IO_PRIORITY_HINT_INFORMATION *PFILE_IO_PRIORITY_HINT_INFORMATION;
|
||
|
|
||
|
/* File I/O completion notification information */
|
||
|
typedef struct _FILE_IO_COMPLETION_NOTIFICATION_INFORMATION {
|
||
|
ULONG Flags;
|
||
|
} FILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
|
||
|
typedef FILE_IO_COMPLETION_NOTIFICATION_INFORMATION *PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION;
|
||
|
|
||
|
/* File process identifiers using file information */
|
||
|
typedef struct _FILE_PROCESS_IDS_USING_FILE_INFORMATION {
|
||
|
ULONG NumberOfProcessIdsInList;
|
||
|
ULONG_PTR ProcessIdList[1];
|
||
|
} FILE_PROCESS_IDS_USING_FILE_INFORMATION;
|
||
|
typedef FILE_PROCESS_IDS_USING_FILE_INFORMATION *PFILE_PROCESS_IDS_USING_FILE_INFORMATION;
|
||
|
|
||
|
/* File is remote device information */
|
||
|
typedef struct _FILE_IS_REMOTE_DEVICE_INFORMATION {
|
||
|
BOOLEAN IsRemote;
|
||
|
} FILE_IS_REMOTE_DEVICE_INFORMATION;
|
||
|
typedef FILE_IS_REMOTE_DEVICE_INFORMATION *PFILE_IS_REMOTE_DEVICE_INFORMATION;
|
||
|
|
||
|
/* File numa node information */
|
||
|
typedef struct _FILE_NUMA_NODE_INFORMATION {
|
||
|
USHORT NodeNumber;
|
||
|
} FILE_NUMA_NODE_INFORMATION;
|
||
|
typedef FILE_NUMA_NODE_INFORMATION *PFILE_NUMA_NODE_INFORMATION;
|
||
|
|
||
|
/* File I/O status block information */
|
||
|
typedef struct _FILE_IOSTATUSBLOCK_RANGE_INFORMATION {
|
||
|
PUCHAR IoStatusBlockRange;
|
||
|
ULONG Length;
|
||
|
} FILE_IOSTATUSBLOCK_RANGE_INFORMATION;
|
||
|
typedef FILE_IOSTATUSBLOCK_RANGE_INFORMATION *PFILE_IOSTATUSBLOCK_RANGE_INFORMATION;
|
||
|
|
||
|
/* File system information classes */
|
||
|
typedef enum _FSINFOCLASS {
|
||
|
FileFsVolumeInformation = 1,
|
||
|
FileFsLabelInformation = 2,
|
||
|
FileFsSizeInformation = 3,
|
||
|
FileFsDeviceInformation = 4,
|
||
|
FileFsAttributeInformation = 5,
|
||
|
FileFsControlInformation = 6,
|
||
|
FileFsFullSizeInformation = 7,
|
||
|
FileFsObjectIdInformation = 8,
|
||
|
FileFsDriverPathInformation = 9,
|
||
|
FileFsVolumeFlagsInformation = 10,
|
||
|
FileFsMaximumInformation = 11
|
||
|
} FS_INFORMATION_CLASS;
|
||
|
typedef FS_INFORMATION_CLASS *PFS_INFORMATION_CLASS;
|
||
|
|
||
|
/* File system device information */
|
||
|
typedef struct _FILE_FS_DEVICE_INFORMATION {
|
||
|
DEVICE_TYPE DeviceType;
|
||
|
ULONG Characteristics;
|
||
|
} FILE_FS_DEVICE_INFORMATION;
|
||
|
typedef FILE_FS_DEVICE_INFORMATION *PFILE_FS_DEVICE_INFORMATION;
|
||
|
|
||
|
/* Interface types */
|
||
|
typedef enum _INTERFACE_TYPE {
|
||
|
InterfaceTypeUndefined = -1,
|
||
|
Internal = 0,
|
||
|
Isa = 1,
|
||
|
Eisa = 2,
|
||
|
MicroChannel = 3,
|
||
|
TurboChannel = 4,
|
||
|
PCIBus = 5,
|
||
|
VMEBus = 6,
|
||
|
NuBus = 7,
|
||
|
PCMCIABus = 8,
|
||
|
CBus = 9,
|
||
|
MPIBus = 10,
|
||
|
MPSABus = 11,
|
||
|
ProcessorInternal = 12,
|
||
|
InternalPowerBus = 13,
|
||
|
PNPISABus = 14,
|
||
|
PNPBus = 15,
|
||
|
Vmcs = 16,
|
||
|
MaximumInterfaceType = 17
|
||
|
} INTERFACE_TYPE;
|
||
|
typedef INTERFACE_TYPE *PINTERFACE_TYPE;
|
||
|
|
||
|
/* DMA widths */
|
||
|
typedef enum _DMA_WIDTH {
|
||
|
Width8Bits = 0,
|
||
|
Width16Bits = 1,
|
||
|
Width32Bits = 2,
|
||
|
MaximumDmaWidth = 3
|
||
|
} DMA_WIDTH;
|
||
|
typedef DMA_WIDTH *PDMA_WIDTH;
|
||
|
|
||
|
/* DMA speeds */
|
||
|
typedef enum _DMA_SPEED {
|
||
|
Compatible = 0,
|
||
|
TypeA = 1,
|
||
|
TypeB = 2,
|
||
|
TypeC = 3,
|
||
|
TypeF = 4,
|
||
|
MaximumDmaSpeed = 5
|
||
|
} DMA_SPEED;
|
||
|
typedef DMA_SPEED *PDMA_SPEED;
|
||
|
|
||
|
/* Interface referencing routines */
|
||
|
typedef VOID (NTAPI *PINTERFACE_REFERENCE)( PVOID );
|
||
|
typedef VOID (NTAPI *PINTERFACE_DEREFERENCE)( PVOID );
|
||
|
|
||
|
/* I/O error log packet */
|
||
|
typedef struct _IO_ERROR_LOG_PACKET {
|
||
|
UCHAR MajorFunctionCode;
|
||
|
UCHAR RetryCount;
|
||
|
USHORT DumpDataSize;
|
||
|
USHORT NumberOfStrings;
|
||
|
USHORT StringOffset;
|
||
|
USHORT EventCategory;
|
||
|
NTSTATUS ErrorCode;
|
||
|
ULONG UniqueErrorValue;
|
||
|
NTSTATUS FinalStatus;
|
||
|
ULONG SequenceNumber;
|
||
|
ULONG IoControlCode;
|
||
|
LARGE_INTEGER DeviceOffset;
|
||
|
ULONG DumpData[1];
|
||
|
} IO_ERROR_LOG_PACKET;
|
||
|
typedef IO_ERROR_LOG_PACKET *PIO_ERROR_LOG_PACKET;
|
||
|
|
||
|
/* I/O error log message */
|
||
|
typedef struct _IO_ERROR_LOG_MESSAGE {
|
||
|
USHORT Type;
|
||
|
USHORT Size;
|
||
|
USHORT DriverNameLength;
|
||
|
LARGE_INTEGER TimeStamp;
|
||
|
ULONG DriverNameOffset;
|
||
|
IO_ERROR_LOG_PACKET EntryData;
|
||
|
} IO_ERROR_LOG_MESSAGE;
|
||
|
typedef IO_ERROR_LOG_MESSAGE *PIO_ERROR_LOG_MESSAGE;
|
||
|
|
||
|
/* Registry key basic information */
|
||
|
typedef struct _KEY_BASIC_INFORMATION {
|
||
|
LARGE_INTEGER LastWriteTime;
|
||
|
ULONG TitleIndex;
|
||
|
ULONG NameLength;
|
||
|
WCHAR Name[1];
|
||
|
} KEY_BASIC_INFORMATION;
|
||
|
typedef KEY_BASIC_INFORMATION *PKEY_BASIC_INFORMATION;
|
||
|
|
||
|
/* Registry key node information */
|
||
|
typedef struct _KEY_NODE_INFORMATION {
|
||
|
LARGE_INTEGER LastWriteTime;
|
||
|
ULONG TitleIndex;
|
||
|
ULONG ClassOffset;
|
||
|
ULONG ClassLength;
|
||
|
ULONG NameLength;
|
||
|
WCHAR Name[1];
|
||
|
} KEY_NODE_INFORMATION;
|
||
|
typedef KEY_NODE_INFORMATION *PKEY_NODE_INFORMATION;
|
||
|
|
||
|
/* Registry key full information */
|
||
|
typedef struct _KEY_FULL_INFORMATION {
|
||
|
LARGE_INTEGER LastWriteTime;
|
||
|
ULONG TitleIndex;
|
||
|
ULONG ClassOffset;
|
||
|
ULONG ClassLength;
|
||
|
ULONG SubKeys;
|
||
|
ULONG MaxNameLen;
|
||
|
ULONG MaxClassLen;
|
||
|
ULONG Values;
|
||
|
ULONG MaxValueNameLen;
|
||
|
ULONG MaxValueDataLen;
|
||
|
WCHAR Class[1];
|
||
|
} KEY_FULL_INFORMATION;
|
||
|
typedef KEY_FULL_INFORMATION *PKEY_FULL_INFORMATION;
|
||
|
|
||
|
/* Registry key information classes */
|
||
|
typedef enum _KEY_INFORMATION_CLASS {
|
||
|
KeyBasicInformation = 0,
|
||
|
KeyNodeInformation = 1,
|
||
|
KeyFullInformation = 2,
|
||
|
KeyNameInformation = 3,
|
||
|
KeyCachedInformation = 4,
|
||
|
KeyFlagsInformation = 5,
|
||
|
KeyVirtualizationInformation = 6,
|
||
|
KeyHandleTagsInformation = 7,
|
||
|
MaxKeyInfoClass = 8
|
||
|
} KEY_INFORMATION_CLASS;
|
||
|
|
||
|
/* Registry key write time information */
|
||
|
typedef struct _KEY_WRITE_TIME_INFORMATION {
|
||
|
LARGE_INTEGER LastWriteTime;
|
||
|
} KEY_WRITE_TIME_INFORMATION;
|
||
|
typedef KEY_WRITE_TIME_INFORMATION *PKEY_WRITE_TIME_INFORMATION;
|
||
|
|
||
|
/* Registry key WOW64 flags information */
|
||
|
typedef struct _KEY_WOW64_FLAGS_INFORMATION {
|
||
|
ULONG UserFlags;
|
||
|
} KEY_WOW64_FLAGS_INFORMATION;
|
||
|
typedef KEY_WOW64_FLAGS_INFORMATION *PKEY_WOW64_FLAGS_INFORMATION;
|
||
|
|
||
|
/* Registry key handle tags information */
|
||
|
typedef struct _KEY_HANDLE_TAGS_INFORMATION {
|
||
|
ULONG HandleTags;
|
||
|
} KEY_HANDLE_TAGS_INFORMATION;
|
||
|
typedef KEY_HANDLE_TAGS_INFORMATION *PKEY_HANDLE_TAGS_INFORMATION;
|
||
|
|
||
|
/* Registry key control flags information */
|
||
|
typedef struct _KEY_CONTROL_FLAGS_INFORMATION {
|
||
|
ULONG ControlFlags;
|
||
|
} KEY_CONTROL_FLAGS_INFORMATION;
|
||
|
typedef KEY_CONTROL_FLAGS_INFORMATION *PKEY_CONTROL_FLAGS_INFORMATION;
|
||
|
|
||
|
/* Registry key set virtualization information */
|
||
|
typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION {
|
||
|
ULONG VirtualTarget : 1;
|
||
|
ULONG VirtualStore : 1;
|
||
|
ULONG VirtualSource : 1;
|
||
|
ULONG Reserved : 29;
|
||
|
} KEY_SET_VIRTUALIZATION_INFORMATION;
|
||
|
typedef KEY_SET_VIRTUALIZATION_INFORMATION *PKEY_SET_VIRTUALIZATION_INFORMATION;
|
||
|
|
||
|
/* Registry set information classes */
|
||
|
typedef enum _KEY_SET_INFORMATION_CLASS {
|
||
|
KeyWriteTimeInformation = 0,
|
||
|
KeyWow64FlagsInformation = 1,
|
||
|
KeyControlFlagsInformation = 2,
|
||
|
KeySetVirtualizationInformation = 3,
|
||
|
KeySetDebugInformation = 4,
|
||
|
KeySetHandleTagsInformation = 5,
|
||
|
MaxKeySetInfoClass = 6
|
||
|
} KEY_SET_INFORMATION_CLASS;
|
||
|
|
||
|
/* Registry key value basic information */
|
||
|
typedef struct _KEY_VALUE_BASIC_INFORMATION {
|
||
|
ULONG TitleIndex;
|
||
|
ULONG Type;
|
||
|
ULONG NameLength;
|
||
|
WCHAR Name[1];
|
||
|
} KEY_VALUE_BASIC_INFORMATION;
|
||
|
typedef KEY_VALUE_BASIC_INFORMATION *PKEY_VALUE_BASIC_INFORMATION;
|
||
|
|
||
|
/* Registry key value full information */
|
||
|
typedef struct _KEY_VALUE_FULL_INFORMATION {
|
||
|
ULONG TitleIndex;
|
||
|
ULONG Type;
|
||
|
ULONG DataOffset;
|
||
|
ULONG DataLength;
|
||
|
ULONG NameLength;
|
||
|
WCHAR Name[1];
|
||
|
} KEY_VALUE_FULL_INFORMATION;
|
||
|
typedef KEY_VALUE_FULL_INFORMATION *PKEY_VALUE_FULL_INFORMATION;
|
||
|
|
||
|
/* Registry key value partial information */
|
||
|
typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
|
||
|
ULONG TitleIndex;
|
||
|
ULONG Type;
|
||
|
ULONG DataLength;
|
||
|
UCHAR Data[1];
|
||
|
} KEY_VALUE_PARTIAL_INFORMATION;
|
||
|
typedef KEY_VALUE_PARTIAL_INFORMATION *PKEY_VALUE_PARTIAL_INFORMATION;
|
||
|
|
||
|
/* Registry key value partial information (64-bit version) */
|
||
|
typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 {
|
||
|
ULONG Type;
|
||
|
ULONG DataLength;
|
||
|
UCHAR Data[1];
|
||
|
} KEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
|
||
|
typedef KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
|
||
|
|
||
|
/* Registry key value entry */
|
||
|
typedef struct _KEY_VALUE_ENTRY {
|
||
|
PUNICODE_STRING ValueName;
|
||
|
ULONG DataLength;
|
||
|
ULONG DataOffset;
|
||
|
ULONG Type;
|
||
|
} KEY_VALUE_ENTRY;
|
||
|
typedef KEY_VALUE_ENTRY *PKEY_VALUE_ENTRY;
|
||
|
|
||
|
/* Registry key value information classes */
|
||
|
typedef enum _KEY_VALUE_INFORMATION_CLASS {
|
||
|
KeyValueBasicInformation = 0,
|
||
|
KeyValueFullInformation = 1,
|
||
|
KeyValuePartialInformation = 2,
|
||
|
KeyValueFullInformationAlign64 = 3,
|
||
|
KeyValuePartialInformationAlign64 = 4,
|
||
|
MaxKeyValueInfoClass = 5
|
||
|
} KEY_VALUE_INFORMATION_CLASS;
|
||
|
|
||
|
/* Object name information */
|
||
|
typedef struct _OBJECT_NAME_INFORMATION {
|
||
|
UNICODE_STRING Name;
|
||
|
} OBJECT_NAME_INFORMATION;
|
||
|
typedef OBJECT_NAME_INFORMATION *POBJECT_NAME_INFORMATION;
|
||
|
|
||
|
/* Section inherit values */
|
||
|
typedef enum _SECTION_INHERIT {
|
||
|
ViewShare = 1,
|
||
|
ViewUnmap = 2
|
||
|
} SECTION_INHERIT;
|
||
|
|
||
|
/* Client identifier */
|
||
|
typedef struct _CLIENT_ID {
|
||
|
HANDLE UniqueProcess;
|
||
|
HANDLE UniqueThread;
|
||
|
} CLIENT_ID;
|
||
|
typedef CLIENT_ID *PCLIENT_ID;
|
||
|
|
||
|
/* System power states */
|
||
|
typedef enum _SYSTEM_POWER_STATE {
|
||
|
PowerSystemUnspecified = 0,
|
||
|
PowerSystemWorking = 1,
|
||
|
PowerSystemSleeping1 = 2,
|
||
|
PowerSystemSleeping2 = 3,
|
||
|
PowerSystemSleeping3 = 4,
|
||
|
PowerSystemHibernate = 5,
|
||
|
PowerSystemShutdown = 6,
|
||
|
PowerSystemMaximum = 7
|
||
|
} SYSTEM_POWER_STATE;
|
||
|
typedef SYSTEM_POWER_STATE *PSYSTEM_POWER_STATE;
|
||
|
|
||
|
/* Power actions */
|
||
|
typedef enum {
|
||
|
PowerActionNone = 0,
|
||
|
PowerActionReserved = 1,
|
||
|
PowerActionSleep = 2,
|
||
|
PowerActionHibernate = 3,
|
||
|
PowerActionShutdown = 4,
|
||
|
PowerActionShutdownReset = 5,
|
||
|
PowerActionShutdownOff = 6,
|
||
|
PowerActionWarmEject = 7
|
||
|
} POWER_ACTION;
|
||
|
typedef POWER_ACTION *PPOWER_ACTION;
|
||
|
|
||
|
/* Device power states */
|
||
|
typedef enum _DEVICE_POWER_STATE {
|
||
|
PowerDeviceUnspecified = 0,
|
||
|
PowerDeviceD0 = 1,
|
||
|
PowerDeviceD1 = 2,
|
||
|
PowerDeviceD2 = 3,
|
||
|
PowerDeviceD3 = 4,
|
||
|
PowerDeviceMaximum = 5
|
||
|
} DEVICE_POWER_STATE;
|
||
|
typedef DEVICE_POWER_STATE *PDEVICE_POWER_STATE;
|
||
|
|
||
|
/* Monitor display states */
|
||
|
typedef enum _MONITOR_DISPLAY_STATE {
|
||
|
PowerMonitorOff = 0,
|
||
|
PowerMonitorOn = 1,
|
||
|
PowerMonitorDim = 2
|
||
|
} MONITOR_DISPLAY_STATE;
|
||
|
typedef MONITOR_DISPLAY_STATE *PMONITOR_DISPLAY_STATE;
|
||
|
|
||
|
/* Power state */
|
||
|
typedef union _POWER_STATE {
|
||
|
SYSTEM_POWER_STATE SystemState;
|
||
|
DEVICE_POWER_STATE DeviceState;
|
||
|
} POWER_STATE;
|
||
|
typedef POWER_STATE *PPOWER_STATE;
|
||
|
|
||
|
/* Power state types */
|
||
|
typedef enum _POWER_STATE_TYPE {
|
||
|
SystemPowerState = 0,
|
||
|
DevicePowerState = 1
|
||
|
} POWER_STATE_TYPE;
|
||
|
typedef POWER_STATE_TYPE *PPOWER_STATE_TYPE;
|
||
|
|
||
|
/* System power state context */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _SYSTEM_POWER_STATE_CONTEXT {
|
||
|
union {
|
||
|
struct {
|
||
|
ULONG Reserved1 : 8;
|
||
|
ULONG TargetSystemState : 4;
|
||
|
ULONG EffectiveSystemState : 4;
|
||
|
ULONG CurrentSystemState : 4;
|
||
|
ULONG IgnoreHibernationPath : 1;
|
||
|
ULONG PseudoTransition : 1;
|
||
|
ULONG Reserved2 : 10;
|
||
|
};
|
||
|
ULONG ContextAsUlong;
|
||
|
};
|
||
|
} SYSTEM_POWER_STATE_CONTEXT;
|
||
|
typedef SYSTEM_POWER_STATE_CONTEXT *PSYSTEM_POWER_STATE_CONTEXT;
|
||
|
#endif
|
||
|
|
||
|
/* Counted reason context */
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
typedef struct _COUNTED_REASON_CONTEXT {
|
||
|
ULONG Version;
|
||
|
ULONG Flags;
|
||
|
union {
|
||
|
struct {
|
||
|
UNICODE_STRING ResourceFileName;
|
||
|
USHORT ResourceReasonId;
|
||
|
ULONG StringCount;
|
||
|
PUNICODE_STRING ReasonStrings;
|
||
|
};
|
||
|
UNICODE_STRING SimpleString;
|
||
|
};
|
||
|
} COUNTED_REASON_CONTEXT;
|
||
|
typedef COUNTED_REASON_CONTEXT *PCOUNTED_REASON_CONTEXT;
|
||
|
#endif
|
||
|
|
||
|
/* Latency time values */
|
||
|
typedef enum {
|
||
|
LT_DONT_CARE,
|
||
|
LT_LOWEST_LATENCY
|
||
|
} LATENCY_TIME;
|
||
|
|
||
|
/* Power request types */
|
||
|
typedef enum _POWER_REQUEST_TYPE {
|
||
|
PowerRequestDisplayRequired = 0,
|
||
|
PowerRequestSystemRequired = 1,
|
||
|
PowerRequestAwayModeRequired = 2
|
||
|
} POWER_REQUEST_TYPE;
|
||
|
typedef POWER_REQUEST_TYPE *PPOWER_REQUEST_TYPE;
|
||
|
|
||
|
/* Power data */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
typedef struct CM_Power_Data_s {
|
||
|
ULONG PD_Size;
|
||
|
DEVICE_POWER_STATE PD_MostRecentPowerState;
|
||
|
ULONG PD_Capabilities;
|
||
|
ULONG PD_D1Latency;
|
||
|
ULONG PD_D2Latency;
|
||
|
ULONG PD_D3Latency;
|
||
|
DEVICE_POWER_STATE PD_PowerStateMapping[POWER_SYSTEM_MAXIMUM];
|
||
|
SYSTEM_POWER_STATE PD_DeepestSystemWake;
|
||
|
} CM_POWER_DATA;
|
||
|
typedef CM_POWER_DATA *PCM_POWER_DATA;
|
||
|
#endif
|
||
|
|
||
|
/* Power information levels */
|
||
|
typedef enum {
|
||
|
SystemPowerPolicyAc = 0,
|
||
|
SystemPowerPolicyDc = 1,
|
||
|
VerifySystemPolicyAc = 2,
|
||
|
VerifySystemPolicyDc = 3,
|
||
|
SystemPowerCapabilities = 4,
|
||
|
SystemBatteryState = 5,
|
||
|
SystemPowerStateHandler = 6,
|
||
|
ProcessorStateHandler = 7,
|
||
|
SystemPowerPolicyCurrent = 8,
|
||
|
AdministratorPowerPolicy = 9,
|
||
|
SystemReserveHiberFile = 10,
|
||
|
ProcessorInformation = 11,
|
||
|
SystemPowerInformation = 12,
|
||
|
ProcessorStateHandler2 = 13,
|
||
|
LastWakeTime = 14,
|
||
|
LastSleepTime = 15,
|
||
|
SystemExecutionState = 16,
|
||
|
SystemPowerStateNotifyHandler = 17,
|
||
|
ProcessorPowerPolicyAc = 18,
|
||
|
ProcessorPowerPolicyDc = 19,
|
||
|
VerifyProcessorPowerPolicyAc = 20,
|
||
|
VerifyProcessorPowerPolicyDc = 21,
|
||
|
ProcessorPowerPolicyCurrent = 22,
|
||
|
SystemPowerStateLogging = 23,
|
||
|
SystemPowerLoggingEntry = 24,
|
||
|
SetPowerSettingValue = 25,
|
||
|
NotifyUserPowerSetting = 26,
|
||
|
SystemVideoState = 29,
|
||
|
TraceApplicationPowerMessage = 30,
|
||
|
TraceApplicationPowerMessageEnd = 31,
|
||
|
ProcessorPerfStates = 32,
|
||
|
ProcessorIdleStates = 33,
|
||
|
ProcessorCap = 34,
|
||
|
SystemWakeSource = 35,
|
||
|
SystemHiberFileInformation = 36,
|
||
|
TraceServicePowerMessage = 37,
|
||
|
ProcessorLoad = 38,
|
||
|
PowerShutdownNotification = 39,
|
||
|
MonitorCapabilities = 40,
|
||
|
SessionPowerInit = 41,
|
||
|
SessionDisplayState = 42,
|
||
|
PowerRequestCreate = 43,
|
||
|
PowerRequestAction = 44,
|
||
|
GetPowerRequestList = 45,
|
||
|
ProcessorInformationEx = 46,
|
||
|
NotifyUserModeLegacyPowerEvent = 47,
|
||
|
GroupPark = 48,
|
||
|
ProcessorIdleDomains = 49,
|
||
|
WakeTimerList = 50,
|
||
|
SystemHiberFileSize = 51,
|
||
|
PowerInformationLevelMaximum = 52
|
||
|
} POWER_INFORMATION_LEVEL;
|
||
|
|
||
|
/* System power conditions */
|
||
|
typedef enum {
|
||
|
PoAc,
|
||
|
PoDc,
|
||
|
PoHot,
|
||
|
PoConditionMaximum
|
||
|
} SYSTEM_POWER_CONDITION;
|
||
|
|
||
|
/* Structure to set a power setting */
|
||
|
typedef struct {
|
||
|
ULONG Version;
|
||
|
GUID Guid;
|
||
|
SYSTEM_POWER_CONDITION PowerCondition;
|
||
|
ULONG DataLength;
|
||
|
UCHAR Data[ANYSIZE_ARRAY];
|
||
|
} SET_POWER_SETTING_VALUE;
|
||
|
typedef SET_POWER_SETTING_VALUE *PSET_POWER_SETTING_VALUE;
|
||
|
|
||
|
/* User power setting notification information */
|
||
|
typedef struct {
|
||
|
GUID Guid;
|
||
|
} NOTIFY_USER_POWER_SETTING;
|
||
|
typedef NOTIFY_USER_POWER_SETTING *PNOTIFY_USER_POWER_SETTING;
|
||
|
|
||
|
/* Application launch setting value */
|
||
|
typedef struct _APPLICATIONLAUNCH_SETTING_VALUE {
|
||
|
LARGE_INTEGER ActivationTime;
|
||
|
ULONG Flags;
|
||
|
ULONG ButtonInstanceID;
|
||
|
} APPLICATIONLAUNCH_SETTING_VALUE;
|
||
|
typedef APPLICATIONLAUNCH_SETTING_VALUE *PAPPLICATIONLAUNCH_SETTING_VALUE;
|
||
|
|
||
|
/* Power platform roles */
|
||
|
typedef enum {
|
||
|
PlatformRoleUnspecified = 0,
|
||
|
PlatformRoleDesktop = 1,
|
||
|
PlatformRoleMobile = 2,
|
||
|
PlatformRoleWorkstation = 3,
|
||
|
PlatformRoleEnterpriseServer = 4,
|
||
|
PlatformRoleSOHOServer = 5,
|
||
|
PlatformRoleAppliancePC = 6,
|
||
|
PlatformRolePerformanceServer = 7,
|
||
|
PlatformRoleMaximum = 8
|
||
|
} POWER_PLATFORM_ROLE;
|
||
|
|
||
|
/* Battery reporting scale */
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
typedef struct {
|
||
|
ULONG Granularity;
|
||
|
ULONG Capacity;
|
||
|
} BATTERY_REPORTING_SCALE;
|
||
|
typedef BATTERY_REPORTING_SCALE *PBATTERY_REPORTING_SCALE;
|
||
|
#endif
|
||
|
|
||
|
/* Service node types */
|
||
|
typedef enum _CM_SERVICE_NODE_TYPE {
|
||
|
DriverType = SERVICE_KERNEL_DRIVER,
|
||
|
FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
|
||
|
Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
|
||
|
Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
|
||
|
AdapterType = SERVICE_ADAPTER,
|
||
|
RecognizerType = SERVICE_RECOGNIZER_DRIVER
|
||
|
} SERVICE_NODE_TYPE;
|
||
|
|
||
|
/* Service load types */
|
||
|
typedef enum _CM_SERVICE_LOAD_TYPE {
|
||
|
BootLoad = SERVICE_BOOT_START,
|
||
|
SystemLoad = SERVICE_SYSTEM_START,
|
||
|
AutoLoad = SERVICE_AUTO_START,
|
||
|
DemandLoad = SERVICE_DEMAND_START,
|
||
|
DisableLoad = SERVICE_DISABLED
|
||
|
} SERVICE_LOAD_TYPE;
|
||
|
|
||
|
/* Service error control types */
|
||
|
typedef enum _CM_ERROR_CONTROL_TYPE {
|
||
|
IgnoreError = SERVICE_ERROR_IGNORE,
|
||
|
NormalError = SERVICE_ERROR_NORMAL,
|
||
|
SevereError = SERVICE_ERROR_SEVERE,
|
||
|
CriticalError = SERVICE_ERROR_CRITICAL
|
||
|
} SERVICE_ERROR_TYPE;
|
||
|
|
||
|
/* Share dispositions */
|
||
|
typedef enum _CM_SHARE_DISPOSITION {
|
||
|
CmResourceShareUndetermined = 0,
|
||
|
CmResourceShareDeviceExclusive = 1,
|
||
|
CmResourceShareDriverExclusive = 2,
|
||
|
CmResourceShareShared = 3
|
||
|
} CM_SHARE_DISPOSITION;
|
||
|
|
||
|
/* Partial resource descriptor */
|
||
|
#include <pshpack4.h>
|
||
|
typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
|
||
|
UCHAR Type;
|
||
|
UCHAR ShareDisposition;
|
||
|
USHORT Flags;
|
||
|
union {
|
||
|
struct {
|
||
|
PHYSICAL_ADDRESS Start;
|
||
|
ULONG Length;
|
||
|
} Generic;
|
||
|
struct {
|
||
|
PHYSICAL_ADDRESS Start;
|
||
|
ULONG Length;
|
||
|
} Port;
|
||
|
struct {
|
||
|
#ifdef NT_PROCESSOR_GROUPS
|
||
|
USHORT Level;
|
||
|
USHORT Group;
|
||
|
#else
|
||
|
ULONG Level;
|
||
|
#endif
|
||
|
ULONG Vector;
|
||
|
KAFFINITY Affinity;
|
||
|
} Interrupt;
|
||
|
struct {
|
||
|
union {
|
||
|
struct {
|
||
|
#ifdef NT_PROCESSOR_GROUPS
|
||
|
USHORT Group;
|
||
|
#else
|
||
|
USHORT Reserved;
|
||
|
#endif
|
||
|
USHORT MessageCount;
|
||
|
ULONG Vector;
|
||
|
KAFFINITY Affinity;
|
||
|
} Raw;
|
||
|
struct {
|
||
|
#ifdef NT_PROCESSOR_GROUPS
|
||
|
USHORT Level;
|
||
|
USHORT Group;
|
||
|
#else
|
||
|
ULONG Level;
|
||
|
#endif
|
||
|
ULONG Vector;
|
||
|
KAFFINITY Affinity;
|
||
|
} Translated;
|
||
|
};
|
||
|
} MessageInterrupt;
|
||
|
struct {
|
||
|
PHYSICAL_ADDRESS Start;
|
||
|
ULONG Length;
|
||
|
} Memory;
|
||
|
struct {
|
||
|
ULONG Channel;
|
||
|
ULONG Port;
|
||
|
ULONG Reserved1;
|
||
|
} Dma;
|
||
|
struct {
|
||
|
ULONG Data[3];
|
||
|
} DevicePrivate;
|
||
|
struct {
|
||
|
ULONG Start;
|
||
|
ULONG Length;
|
||
|
ULONG Reserved;
|
||
|
} BusNumber;
|
||
|
struct {
|
||
|
ULONG DataSize;
|
||
|
ULONG Reserved1;
|
||
|
ULONG Reserved2;
|
||
|
} DeviceSpecificData;
|
||
|
struct {
|
||
|
PHYSICAL_ADDRESS Start;
|
||
|
ULONG Length40;
|
||
|
} Memory40;
|
||
|
struct {
|
||
|
PHYSICAL_ADDRESS Start;
|
||
|
ULONG Length48;
|
||
|
} Memory48;
|
||
|
struct {
|
||
|
PHYSICAL_ADDRESS Start;
|
||
|
ULONG Length64;
|
||
|
} Memory64;
|
||
|
} u;
|
||
|
} CM_PARTIAL_RESOURCE_DESCRIPTOR;
|
||
|
typedef CM_PARTIAL_RESOURCE_DESCRIPTOR *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
|
||
|
#include <poppack.h>
|
||
|
|
||
|
/* Partial resource list */
|
||
|
typedef struct _CM_PARTIAL_RESOURCE_LIST {
|
||
|
USHORT Version;
|
||
|
USHORT Revision;
|
||
|
ULONG Count;
|
||
|
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
|
||
|
} CM_PARTIAL_RESOURCE_LIST;
|
||
|
typedef CM_PARTIAL_RESOURCE_LIST *PCM_PARTIAL_RESOURCE_LIST;
|
||
|
|
||
|
/* Full resource descriptor */
|
||
|
typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
|
||
|
INTERFACE_TYPE InterfaceType;
|
||
|
ULONG BusNumber;
|
||
|
CM_PARTIAL_RESOURCE_LIST PartialResourceList;
|
||
|
} CM_FULL_RESOURCE_DESCRIPTOR;
|
||
|
typedef CM_FULL_RESOURCE_DESCRIPTOR *PCM_FULL_RESOURCE_DESCRIPTOR;
|
||
|
|
||
|
/* Resource list */
|
||
|
typedef struct _CM_RESOURCE_LIST {
|
||
|
ULONG Count;
|
||
|
CM_FULL_RESOURCE_DESCRIPTOR List[1];
|
||
|
} CM_RESOURCE_LIST;
|
||
|
typedef CM_RESOURCE_LIST *PCM_RESOURCE_LIST;
|
||
|
|
||
|
/* Device flags */
|
||
|
typedef struct _DEVICE_FLAGS {
|
||
|
ULONG Failed : 1;
|
||
|
ULONG ReadOnly : 1;
|
||
|
ULONG Removable : 1;
|
||
|
ULONG ConsoleIn : 1;
|
||
|
ULONG ConsoleOut : 1;
|
||
|
ULONG Input : 1;
|
||
|
ULONG Output : 1;
|
||
|
} DEVICE_FLAGS;
|
||
|
typedef DEVICE_FLAGS *PDEVICE_FLAGS;
|
||
|
|
||
|
/* Component information */
|
||
|
typedef struct _CM_COMPONENT_INFORMATION {
|
||
|
DEVICE_FLAGS Flags;
|
||
|
ULONG Version;
|
||
|
ULONG Key;
|
||
|
KAFFINITY AffinityMask;
|
||
|
} CM_COMPONENT_INFORMATION;
|
||
|
typedef CM_COMPONENT_INFORMATION *PCM_COMPONENT_INFORMATION;
|
||
|
|
||
|
/* ROM block */
|
||
|
typedef struct _CM_ROM_BLOCK {
|
||
|
ULONG Address;
|
||
|
ULONG Size;
|
||
|
} CM_ROM_BLOCK;
|
||
|
typedef CM_ROM_BLOCK *PC_ROM_BLOCK;
|
||
|
|
||
|
/* The following structures get one-byte packing. */
|
||
|
#include <pshpack1.h>
|
||
|
|
||
|
/* Interrupt 13 drive parameter */
|
||
|
typedef struct _CM_INT13_DRIVE_PARAMETER {
|
||
|
USHORT DriveSelect;
|
||
|
ULONG MaxCylinders;
|
||
|
USHORT SectorsPerTrack;
|
||
|
USHORT MaxHeads;
|
||
|
USHORT NumberDrives;
|
||
|
} CM_INT13_DRIVE_PARAMETER;
|
||
|
typedef CM_INT13_DRIVE_PARAMETER *PCM_INT13_DRIVE_PARAMETER;
|
||
|
|
||
|
/* MCA POS data */
|
||
|
typedef struct _CM_MCA_POS_DATA {
|
||
|
USHORT AdapterId;
|
||
|
UCHAR PosData1;
|
||
|
UCHAR PosData2;
|
||
|
UCHAR PosData3;
|
||
|
UCHAR PosData4;
|
||
|
} CM_MCA_POS_DATA;
|
||
|
typedef CM_MCA_POS_DATA *PCM_MCA_POS_DATA;
|
||
|
|
||
|
/* EISA memory type */
|
||
|
typedef struct _EISA_MEMORY_TYPE {
|
||
|
UCHAR ReadWrite : 1;
|
||
|
UCHAR Cached : 1;
|
||
|
UCHAR Reserved0 : 1;
|
||
|
UCHAR Type : 2;
|
||
|
UCHAR Shared : 1;
|
||
|
UCHAR Reserved1 : 1;
|
||
|
UCHAR MoreEntries : 1;
|
||
|
} EISA_MEMORY_TYPE;
|
||
|
typedef EISA_MEMORY_TYPE *PEISA_MEMORY_TYPE;
|
||
|
|
||
|
/* EISA memory configuration */
|
||
|
typedef struct _EISA_MEMORY_CONFIGURATION {
|
||
|
EISA_MEMORY_TYPE ConfigurationByte;
|
||
|
UCHAR DataSize;
|
||
|
USHORT AddressLowWord;
|
||
|
UCHAR AddressHighByte;
|
||
|
USHORT MemorySize;
|
||
|
} EISA_MEMORY_CONFIGURATION;
|
||
|
typedef EISA_MEMORY_CONFIGURATION *PEISA_MEMORY_CONFIGURATION;
|
||
|
|
||
|
/* EISA IRQ descriptor */
|
||
|
typedef struct _EISA_IRQ_DESCRIPTOR {
|
||
|
UCHAR Interrupt : 4;
|
||
|
UCHAR Reserved : 1;
|
||
|
UCHAR LevelTriggered : 1;
|
||
|
UCHAR Shared : 1;
|
||
|
UCHAR MoreEntries : 1;
|
||
|
} EISA_IRQ_DESCRIPTOR;
|
||
|
typedef EISA_IRQ_DESCRIPTOR *PEISA_IRQ_DESCRIPTOR;
|
||
|
|
||
|
/* EISA IRQ configuration */
|
||
|
typedef struct _EISA_IRQ_CONFIGURATION {
|
||
|
EISA_IRQ_DESCRIPTOR ConfigurationByte;
|
||
|
UCHAR Reserved;
|
||
|
} EISA_IRQ_CONFIGURATION;
|
||
|
typedef EISA_IRQ_CONFIGURATION *PEISA_IRQ_CONFIGURATION;
|
||
|
|
||
|
/* DMA configuration byte 0 */
|
||
|
typedef struct _DMA_CONFIGURATION_BYTE0 {
|
||
|
UCHAR Channel : 3;
|
||
|
UCHAR Reserved : 3;
|
||
|
UCHAR Shared : 1;
|
||
|
UCHAR MoreEntries : 1;
|
||
|
} DMA_CONFIGURATION_BYTE0;
|
||
|
|
||
|
/* DMA configuration byte 1 */
|
||
|
typedef struct _DMA_CONFIGURATION_BYTE1 {
|
||
|
UCHAR Reserved0 : 2;
|
||
|
UCHAR TransferSize : 2;
|
||
|
UCHAR Timing : 2;
|
||
|
UCHAR Reserved1 : 2;
|
||
|
} DMA_CONFIGURATION_BYTE1;
|
||
|
|
||
|
/* EISA DMA configuration */
|
||
|
typedef struct _EISA_DMA_CONFIGURATION {
|
||
|
DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
|
||
|
DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
|
||
|
} EISA_DMA_CONFIGURATION;
|
||
|
typedef EISA_DMA_CONFIGURATION *PEISA_DMA_CONFIGURATION;
|
||
|
|
||
|
/* EISA port descriptor */
|
||
|
typedef struct _EISA_PORT_DESCRIPTOR {
|
||
|
UCHAR NumberPorts : 5;
|
||
|
UCHAR Reserved : 1;
|
||
|
UCHAR Shared : 1;
|
||
|
UCHAR MoreEntries : 1;
|
||
|
} EISA_PORT_DESCRIPTOR;
|
||
|
typedef EISA_PORT_DESCRIPTOR *PEISA_PORT_DESCRIPTOR;
|
||
|
|
||
|
/* EISA port configuration */
|
||
|
typedef struct _EISA_PORT_CONFIGURATION {
|
||
|
EISA_PORT_DESCRIPTOR Configuration;
|
||
|
USHORT PortAddress;
|
||
|
} EISA_PORT_CONFIGURATION;
|
||
|
typedef EISA_PORT_CONFIGURATION *PEISA_PORT_CONFIGURATION;
|
||
|
|
||
|
/* EISA slot information */
|
||
|
typedef struct _CM_EISA_SLOT_INFORMATION {
|
||
|
UCHAR ReturnCode;
|
||
|
UCHAR ReturnFlags;
|
||
|
UCHAR MajorRevision;
|
||
|
UCHAR MinorRevision;
|
||
|
USHORT Checksum;
|
||
|
UCHAR NumberFunctions;
|
||
|
UCHAR FunctionInformation;
|
||
|
ULONG CompressedId;
|
||
|
} CM_EISA_SLOT_INFORMATION;
|
||
|
typedef CM_EISA_SLOT_INFORMATION *PCM_EISA_SLOT_INFORMATION;
|
||
|
|
||
|
/* EISA function information */
|
||
|
typedef struct _CM_EISA_FUNCTION_INFORMATION {
|
||
|
ULONG CompressedId;
|
||
|
UCHAR IdSlotFlags1;
|
||
|
UCHAR IdSlotFlags2;
|
||
|
UCHAR MinorRevision;
|
||
|
UCHAR MajorRevision;
|
||
|
UCHAR Selections[256];
|
||
|
UCHAR FunctionFlags;
|
||
|
UCHAR TypeString[80];
|
||
|
EISA_MEMORY_CONFIGURATION EisaMemory[9];
|
||
|
EISA_IRQ_CONFIGURATION EisaIrq[7];
|
||
|
EISA_DMA_CONFIGURATION EisaDma[4];
|
||
|
EISA_PORT_CONFIGURATION EisaPort[20];
|
||
|
UCHAR InitializationData[60];
|
||
|
} CM_EISA_FUNCTION_INFORMATION;
|
||
|
typedef CM_EISA_FUNCTION_INFORMATION *PCM_EISA_FUNCTION_INFORMATION;
|
||
|
|
||
|
/* Plug and Play BIOS device node */
|
||
|
typedef struct _CM_PNP_BIOS_DEVICE_NODE {
|
||
|
USHORT Size;
|
||
|
UCHAR Node;
|
||
|
ULONG ProductId;
|
||
|
UCHAR DeviceType[3];
|
||
|
USHORT DeviceAttributes;
|
||
|
} CM_PNP_BIOS_DEVICE_NODE;
|
||
|
typedef CM_PNP_BIOS_DEVICE_NODE *PCM_PNP_BIOS_DEVICE_NODE;
|
||
|
|
||
|
/* Plug and Play BIOS installation check */
|
||
|
typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK {
|
||
|
UCHAR Signature[4];
|
||
|
UCHAR Revision;
|
||
|
UCHAR Length;
|
||
|
USHORT ControlField;
|
||
|
UCHAR Checksum;
|
||
|
ULONG EventFlagAddress;
|
||
|
USHORT RealModeEntryOffset;
|
||
|
USHORT RealModeEntrySegment;
|
||
|
USHORT ProtectedModeEntryOffset;
|
||
|
ULONG ProtectedModeCodeBaseAddress;
|
||
|
ULONG OemDeviceId;
|
||
|
USHORT RealModeDataBaseAddress;
|
||
|
ULONG ProtectedModeDataBaseAddress;
|
||
|
} CM_PNP_BIOS_INSTALLATION_CHECK;
|
||
|
typedef CM_PNP_BIOS_INSTALLATION_CHECK *PCM_PNP_BIOS_INSTALLATION_CHECK;
|
||
|
|
||
|
/* Revert to default packing. */
|
||
|
#include <poppack.h>
|
||
|
|
||
|
/* SCSI device data */
|
||
|
typedef struct _CM_SCSI_DEVICE_DATA {
|
||
|
USHORT Version;
|
||
|
USHORT Revision;
|
||
|
UCHAR HostIdentifier;
|
||
|
} CM_SCSI_DEVICE_DATA;
|
||
|
typedef CM_SCSI_DEVICE_DATA *PCM_SCSI_DEVICE_DATA;
|
||
|
|
||
|
/* Video device data */
|
||
|
typedef struct _CM_VIDEO_DEVICE_DATA {
|
||
|
USHORT Version;
|
||
|
USHORT Revision;
|
||
|
ULONG VideoClock;
|
||
|
} CM_VIDEO_DEVICE_DATA;
|
||
|
typedef CM_VIDEO_DEVICE_DATA *PCM_VIDEO_DEVICE_DATA;
|
||
|
|
||
|
/* Sonic device data */
|
||
|
typedef struct _CM_SONIC_DEVICE_DATA {
|
||
|
USHORT Version;
|
||
|
USHORT Revision;
|
||
|
USHORT DataConfigurationRegister;
|
||
|
UCHAR EthernetAddress[8];
|
||
|
} CM_SONIC_DEVICE_DATA;
|
||
|
typedef CM_SONIC_DEVICE_DATA *PCM_SONIC_DEVICE_DATA;
|
||
|
|
||
|
/* Serial device data */
|
||
|
typedef struct _CM_SERIAL_DEVICE_DATA {
|
||
|
USHORT Version;
|
||
|
USHORT Revision;
|
||
|
ULONG BaudClock;
|
||
|
} CM_SERIAL_DEVICE_DATA;
|
||
|
typedef CM_SERIAL_DEVICE_DATA *PCM_SERIAL_DEVICE_DATA;
|
||
|
|
||
|
/* Monitor device data */
|
||
|
typedef struct _CM_MONITOR_DEVICE_DATA {
|
||
|
USHORT Version;
|
||
|
USHORT Revision;
|
||
|
USHORT HorizontalScreenSize;
|
||
|
USHORT VerticalScreenSize;
|
||
|
USHORT HorizontalResolution;
|
||
|
USHORT VerticalResolution;
|
||
|
USHORT HorizontalDisplayTimeLow;
|
||
|
USHORT HorizontalDisplayTime;
|
||
|
USHORT HorizontalDisplayTimeHigh;
|
||
|
USHORT HorizontalBackPorchLow;
|
||
|
USHORT HorizontalBackPorch;
|
||
|
USHORT HorizontalBackPorchHigh;
|
||
|
USHORT HorizontalFrontPorchLow;
|
||
|
USHORT HorizontalFrontPorch;
|
||
|
USHORT HorizontalFrontPorchHigh;
|
||
|
USHORT HorizontalSyncLow;
|
||
|
USHORT HorizontalSync;
|
||
|
USHORT HorizontalSyncHigh;
|
||
|
USHORT VerticalBackPorchLow;
|
||
|
USHORT VerticalBackPorch;
|
||
|
USHORT VerticalBackPorchHigh;
|
||
|
USHORT VerticalFrontPorchLow;
|
||
|
USHORT VerticalFrontPorch;
|
||
|
USHORT VerticalFrontPorchHigh;
|
||
|
USHORT VerticalSyncLow;
|
||
|
USHORT VerticalSync;
|
||
|
USHORT VerticalSyncHigh;
|
||
|
} CM_MONITOR_DEVICE_DATA;
|
||
|
typedef CM_MONITOR_DEVICE_DATA *PCM_MONITOR_DEVICE_DATA;
|
||
|
|
||
|
/* Floppy device data */
|
||
|
typedef struct _CM_FLOPPY_DEVICE_DATA {
|
||
|
USHORT Version;
|
||
|
USHORT Revision;
|
||
|
CHAR Size[8];
|
||
|
ULONG MaxDensity;
|
||
|
ULONG MountDensity;
|
||
|
UCHAR StepRateHeadUnloadTime;
|
||
|
UCHAR HeadLoadTime;
|
||
|
UCHAR MotorOffTime;
|
||
|
UCHAR SectorLengthCode;
|
||
|
UCHAR SectorPerTrack;
|
||
|
UCHAR ReadWriteGapLength;
|
||
|
UCHAR DataTransferLength;
|
||
|
UCHAR FormatGapLength;
|
||
|
UCHAR FormatFillCharacter;
|
||
|
UCHAR HeadSettleTime;
|
||
|
UCHAR MotorSettleTime;
|
||
|
UCHAR MaximumTrackValue;
|
||
|
UCHAR DataTransferRate;
|
||
|
} CM_FLOPPY_DEVICE_DATA;
|
||
|
typedef CM_FLOPPY_DEVICE_DATA *PCM_FLOPPY_DEVICE_DATA;
|
||
|
|
||
|
/* Keyboard device data */
|
||
|
typedef struct _CM_KEYBOARD_DEVICE_DATA {
|
||
|
USHORT Version;
|
||
|
USHORT Revision;
|
||
|
UCHAR Type;
|
||
|
UCHAR Subtype;
|
||
|
USHORT KeyboardFlags;
|
||
|
} CM_KEYBOARD_DEVICE_DATA;
|
||
|
typedef CM_KEYBOARD_DEVICE_DATA *PCM_KEYBOARD_DEVICE_DATA;
|
||
|
|
||
|
/* Disk geometry device data */
|
||
|
typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA {
|
||
|
ULONG BytesPerSector;
|
||
|
ULONG NumberOfCylinders;
|
||
|
ULONG SectorsPerTrack;
|
||
|
ULONG NumberOfHeads;
|
||
|
} CM_DISK_GEOMETRY_DEVICE_DATA;
|
||
|
typedef CM_DISK_GEOMETRY_DEVICE_DATA *PCM_DISK_GEOMETRY_DEVICE_DATA;
|
||
|
|
||
|
/* IRQ device policies */
|
||
|
#ifdef NT_PROCESSOR_GROUPS
|
||
|
enum _IRQ_DEVICE_POLICY_USHORT {
|
||
|
IrqPolicyMachineDefault = 0,
|
||
|
IrqPolicyAllCloseProcessors = 1,
|
||
|
IrqPolicyOneCloseProcessor = 2,
|
||
|
IrqPolicyAllProcessorsInMachine = 3,
|
||
|
IrqPolicySpecifiedProcessors = 4,
|
||
|
IrqPolicySpreadMessagesAcrossAllProcessors = 5
|
||
|
};
|
||
|
typedef USHORT IRQ_DEVICE_POLICY;
|
||
|
#else
|
||
|
typedef enum _IRQ_DEVICE_POLICY {
|
||
|
IrqPolicyMachineDefault = 0,
|
||
|
IrqPolicyAllCloseProcessors = 1,
|
||
|
IrqPolicyOneCloseProcessor = 2,
|
||
|
IrqPolicyAllProcessorsInMachine = 3,
|
||
|
IrqPolicySpecifiedProcessors = 4,
|
||
|
IrqPolicySpreadMessagesAcrossAllProcessors = 5
|
||
|
} IRQ_DEVICE_POLICY;
|
||
|
#endif
|
||
|
typedef IRQ_DEVICE_POLICY *PIRQ_DEVICE_POLICY;
|
||
|
|
||
|
/* IRQ priorities */
|
||
|
typedef enum _IRQ_PRIORITY {
|
||
|
IrqPriorityUndefined = 0,
|
||
|
IrqPriorityLow = 1,
|
||
|
IrqPriorityNormal = 2,
|
||
|
IrqPriorityHigh = 3
|
||
|
} IRQ_PRIORITY;
|
||
|
typedef IRQ_PRIORITY *PIRQ_PRIORITY;
|
||
|
|
||
|
/* IRQ group policy values */
|
||
|
typedef enum _IRQ_GROUP_POLICY {
|
||
|
GroupAffinityAllGroupZero = 0,
|
||
|
GroupAffinityDontCare = 1
|
||
|
} IRQ_GROUP_POLICY;
|
||
|
typedef IRQ_GROUP_POLICY *PIRQ_GROUP_POLICY;
|
||
|
|
||
|
/* I/O resource descriptor */
|
||
|
typedef struct _IO_RESOURCE_DESCRIPTOR {
|
||
|
UCHAR Option;
|
||
|
UCHAR Type;
|
||
|
UCHAR ShareDisposition;
|
||
|
UCHAR Spare1;
|
||
|
USHORT Flags;
|
||
|
USHORT Spare2;
|
||
|
union {
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
ULONG Alignment;
|
||
|
PHYSICAL_ADDRESS MinimumAddress;
|
||
|
PHYSICAL_ADDRESS MaximumAddress;
|
||
|
} Port;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
ULONG Alignment;
|
||
|
PHYSICAL_ADDRESS MinimumAddress;
|
||
|
PHYSICAL_ADDRESS MaximumAddress;
|
||
|
} Memory;
|
||
|
struct {
|
||
|
ULONG MinimumVector;
|
||
|
ULONG MaximumVector;
|
||
|
IRQ_DEVICE_POLICY AffinityPolicy;
|
||
|
#ifdef NT_PROCESSOR_GROUPS
|
||
|
USHORT Group;
|
||
|
#endif
|
||
|
IRQ_PRIORITY PriorityPolicy;
|
||
|
KAFFINITY TargetedProcessors;
|
||
|
} Interrupt;
|
||
|
struct {
|
||
|
ULONG MinimumChannel;
|
||
|
ULONG MaximumChannel;
|
||
|
} Dma;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
ULONG Alignment;
|
||
|
PHYSICAL_ADDRESS MinimumAddress;
|
||
|
PHYSICAL_ADDRESS MaximumAddress;
|
||
|
} Generic;
|
||
|
struct {
|
||
|
ULONG Data[3];
|
||
|
} DevicePrivate;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
ULONG MinBusNumber;
|
||
|
ULONG MaxBusNumber;
|
||
|
ULONG Reserved;
|
||
|
} BusNumber;
|
||
|
struct {
|
||
|
ULONG Priority;
|
||
|
ULONG Reserved1;
|
||
|
ULONG Reserved2;
|
||
|
} ConfigData;
|
||
|
struct {
|
||
|
ULONG Length40;
|
||
|
ULONG Alignment40;
|
||
|
PHYSICAL_ADDRESS MinimumAddress;
|
||
|
PHYSICAL_ADDRESS MaximumAddress;
|
||
|
} Memory40;
|
||
|
struct {
|
||
|
ULONG Length48;
|
||
|
ULONG Alignment48;
|
||
|
PHYSICAL_ADDRESS MinimumAddress;
|
||
|
PHYSICAL_ADDRESS MaximumAddress;
|
||
|
} Memory48;
|
||
|
struct {
|
||
|
ULONG Length64;
|
||
|
ULONG Alignment64;
|
||
|
PHYSICAL_ADDRESS MinimumAddress;
|
||
|
PHYSICAL_ADDRESS MaximumAddress;
|
||
|
} Memory64;
|
||
|
} u;
|
||
|
} IO_RESOURCE_DESCRIPTOR;
|
||
|
typedef IO_RESOURCE_DESCRIPTOR *PIO_RESOURCE_DESCRIPTOR;
|
||
|
|
||
|
/* I/O resource list */
|
||
|
typedef struct _IO_RESOURCE_LIST {
|
||
|
USHORT Version;
|
||
|
USHORT Revision;
|
||
|
ULONG Count;
|
||
|
IO_RESOURCE_DESCRIPTOR Descriptors[1];
|
||
|
} IO_RESOURCE_LIST;
|
||
|
typedef IO_RESOURCE_LIST *PIO_RESOURCE_LIST;
|
||
|
|
||
|
/* I/O resource requirements list */
|
||
|
typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
|
||
|
ULONG ListSize;
|
||
|
INTERFACE_TYPE InterfaceType;
|
||
|
ULONG BusNumber;
|
||
|
ULONG SlotNumber;
|
||
|
ULONG Reserved[3];
|
||
|
ULONG AlternativeLists;
|
||
|
IO_RESOURCE_LIST List[1];
|
||
|
} IO_RESOURCE_REQUIREMENTS_LIST;
|
||
|
typedef IO_RESOURCE_REQUIREMENTS_LIST *PIO_RESOURCE_REQUIREMENTS_LIST;
|
||
|
|
||
|
/* Interlocked singly linked list entry */
|
||
|
typedef struct _SLIST_ENTRY {
|
||
|
struct _SLIST_ENTRY *Next;
|
||
|
} SLIST_ENTRY;
|
||
|
typedef SLIST_ENTRY *PSLIST_ENTRY;
|
||
|
|
||
|
/* Interlocked singly linked list header */
|
||
|
typedef union _SLIST_HEADER {
|
||
|
ULONGLONG Alignment;
|
||
|
struct {
|
||
|
SLIST_ENTRY Next;
|
||
|
USHORT Depth;
|
||
|
USHORT Sequence;
|
||
|
};
|
||
|
} SLIST_HEADER;
|
||
|
typedef SLIST_HEADER *PSLIST_HEADER;
|
||
|
typedef SLIST_HEADER SLIST_HEADER32;
|
||
|
typedef SLIST_HEADER *PSLIST_HEADER32;
|
||
|
|
||
|
/* Query registry callback */
|
||
|
typedef NTSTATUS NTAPI RTL_QUERY_REGISTRY_ROUTINE( PWSTR, ULONG, PVOID, ULONG, PVOID, PVOID );
|
||
|
typedef RTL_QUERY_REGISTRY_ROUTINE *PRTL_QUERY_REGISTRY_ROUTINE;
|
||
|
|
||
|
/* Query registry table */
|
||
|
typedef struct _RTL_QUERY_REGISTRY_TABLE {
|
||
|
PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
|
||
|
ULONG Flags;
|
||
|
PWSTR Name;
|
||
|
PVOID EntryContext;
|
||
|
ULONG DefaultType;
|
||
|
PVOID DefaultData;
|
||
|
ULONG DefaultLength;
|
||
|
} RTL_QUERY_REGISTRY_TABLE;
|
||
|
typedef RTL_QUERY_REGISTRY_TABLE *PRTL_QUERY_REGISTRY_TABLE;
|
||
|
|
||
|
/* Debug print callback */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef VOID (NTAPI *PDEBUG_PRINT_CALLBACK)( PSTRING, ULONG, ULONG );
|
||
|
#endif
|
||
|
|
||
|
/* Time fields */
|
||
|
typedef struct _TIME_FIELDS {
|
||
|
CSHORT Year;
|
||
|
CSHORT Month;
|
||
|
CSHORT Day;
|
||
|
CSHORT Hour;
|
||
|
CSHORT Minute;
|
||
|
CSHORT Second;
|
||
|
CSHORT Milliseconds;
|
||
|
CSHORT Weekday;
|
||
|
} TIME_FIELDS;
|
||
|
typedef TIME_FIELDS *PTIME_FIELDS;
|
||
|
|
||
|
/* Bitmap */
|
||
|
typedef struct _RTL_BITMAP {
|
||
|
ULONG SizeOfBitMap;
|
||
|
PULONG Buffer;
|
||
|
} RTL_BITMAP;
|
||
|
typedef RTL_BITMAP *PRTL_BITMAP;
|
||
|
|
||
|
/* Bitmap run */
|
||
|
typedef struct _RTL_BITMAP_RUN {
|
||
|
ULONG StartingIndex;
|
||
|
ULONG NumberOfBits;
|
||
|
} RTL_BITMAP_RUN;
|
||
|
typedef RTL_BITMAP_RUN *PRTL_BITMAP_RUN;
|
||
|
|
||
|
/* Transaction outcomes */
|
||
|
typedef enum _TRANSACTION_OUTCOME {
|
||
|
TransactionOutcomeUndetermined = 1,
|
||
|
TransactionOutcomeCommitted = 2,
|
||
|
TransactionOutcomeAborted = 3
|
||
|
} TRANSACTION_OUTCOME;
|
||
|
|
||
|
/* Transaction states */
|
||
|
typedef enum _TRANSACTION_STATE {
|
||
|
TransactionStateNormal = 1,
|
||
|
TransactionStateIndoubt = 2,
|
||
|
TransactionStateCommittedNotify = 3
|
||
|
} TRANSACTION_STATE;
|
||
|
|
||
|
/* Transaction basic information */
|
||
|
typedef struct _TRANSACTION_BASIC_INFORMATION {
|
||
|
GUID TransactionId;
|
||
|
ULONG State;
|
||
|
ULONG Outcome;
|
||
|
} TRANSACTION_BASIC_INFORMATION;
|
||
|
typedef TRANSACTION_BASIC_INFORMATION *PTRANSACTION_BASIC_INFORMATION;
|
||
|
|
||
|
/* Transaction manager basic information */
|
||
|
typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION {
|
||
|
GUID TmIdentity;
|
||
|
LARGE_INTEGER VirtualClock;
|
||
|
} TRANSACTIONMANAGER_BASIC_INFORMATION;
|
||
|
typedef TRANSACTIONMANAGER_BASIC_INFORMATION *PTRANSACTIONMANAGER_BASIC_INFORMATION;
|
||
|
|
||
|
/* Transaction manager log information */
|
||
|
typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION {
|
||
|
GUID LogIdentity;
|
||
|
} TRANSACTIONMANAGER_LOG_INFORMATION;
|
||
|
typedef TRANSACTIONMANAGER_LOG_INFORMATION *PTRANSACTIONMANAGER_LOG_INFORMATION;
|
||
|
|
||
|
/* Transaction manager log path information */
|
||
|
typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION {
|
||
|
ULONG LogPathLength;
|
||
|
WCHAR LogPath[1];
|
||
|
} TRANSACTIONMANAGER_LOGPATH_INFORMATION;
|
||
|
typedef TRANSACTIONMANAGER_LOGPATH_INFORMATION *PTRANSACTIONMANAGER_LOGPATH_INFORMATION;
|
||
|
|
||
|
/* Transaction manager recovery information */
|
||
|
typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION {
|
||
|
ULONGLONG LastRecoveredLsn;
|
||
|
} TRANSACTIONMANAGER_RECOVERY_INFORMATION;
|
||
|
typedef TRANSACTIONMANAGER_RECOVERY_INFORMATION *PTRANSACTIONMANAGER_RECOVERY_INFORMATION;
|
||
|
|
||
|
/* Transaction properties information */
|
||
|
typedef struct _TRANSACTION_PROPERTIES_INFORMATION {
|
||
|
ULONG IsolationLevel;
|
||
|
ULONG IsolationFlags;
|
||
|
LARGE_INTEGER Timeout;
|
||
|
ULONG Outcome;
|
||
|
ULONG DescriptionLength;
|
||
|
WCHAR Description[1];
|
||
|
} TRANSACTION_PROPERTIES_INFORMATION;
|
||
|
typedef TRANSACTION_PROPERTIES_INFORMATION *PTRANSACTION_PROPERTIES_INFORMATION;
|
||
|
|
||
|
/* Transaction bind information */
|
||
|
typedef struct _TRANSACTION_BIND_INFORMATION {
|
||
|
HANDLE TmHandle;
|
||
|
} TRANSACTION_BIND_INFORMATION;
|
||
|
typedef TRANSACTION_BIND_INFORMATION *PTRANSACTION_BIND_INFORMATION;
|
||
|
|
||
|
/* Transaction enlistment pair */
|
||
|
typedef struct _TRANSACTION_ENLISTMENT_PAIR {
|
||
|
GUID EnlistmentId;
|
||
|
GUID ResourceManagerId;
|
||
|
} TRANSACTION_ENLISTMENT_PAIR;
|
||
|
typedef TRANSACTION_ENLISTMENT_PAIR *PTRANSACTION_ENLISTMENT_PAIR;
|
||
|
|
||
|
/* Transaction enlistments information */
|
||
|
typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION {
|
||
|
ULONG NumberOfEnlistments;
|
||
|
TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1];
|
||
|
} TRANSACTION_ENLISTMENTS_INFORMATION;
|
||
|
typedef TRANSACTION_ENLISTMENTS_INFORMATION *PTRANSACTION_ENLISTMENTS_INFORMATION;
|
||
|
|
||
|
/* Transaction superior enlistment information */
|
||
|
typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION {
|
||
|
TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair;
|
||
|
} TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION;
|
||
|
typedef TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION *PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION;
|
||
|
|
||
|
/* Resource manager basic information */
|
||
|
typedef struct _RESOURCEMANAGER_BASIC_INFORMATION {
|
||
|
GUID ResourceManagerId;
|
||
|
ULONG DescriptionLength;
|
||
|
WCHAR Description[1];
|
||
|
} RESOURCEMANAGER_BASIC_INFORMATION;
|
||
|
typedef RESOURCEMANAGER_BASIC_INFORMATION *PRESOURCEMANAGER_BASIC_INFORMATION;
|
||
|
|
||
|
/* Resource manager completion information */
|
||
|
typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION {
|
||
|
HANDLE IoCompletionPortHandle;
|
||
|
ULONG_PTR CompletionKey;
|
||
|
} RESOURCEMANAGER_COMPLETION_INFORMATION;
|
||
|
typedef RESOURCEMANAGER_COMPLETION_INFORMATION *PRESOURCEMANAGER_COMPLETION_INFORMATION;
|
||
|
|
||
|
/* Transaction information classes */
|
||
|
typedef enum _TRANSACTION_INFORMATION_CLASS {
|
||
|
TransactionBasicInformation = 0,
|
||
|
TransactionPropertiesInformation = 1,
|
||
|
TransactionEnlistmentInformation = 2,
|
||
|
TransactionSuperiorEnlistmentInformation = 3
|
||
|
} TRANSACTION_INFORMATION_CLASS;
|
||
|
|
||
|
/* Transaction manager information classes */
|
||
|
typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
|
||
|
TransactionManagerBasicInformation = 0,
|
||
|
TransactionManagerLogInformation = 1,
|
||
|
TransactionManagerLogPathInformation = 2,
|
||
|
TransactionManagerRecoveryInformation = 3
|
||
|
} TRANSACTIONMANAGER_INFORMATION_CLASS;
|
||
|
|
||
|
/* Resource manager information classes */
|
||
|
typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
|
||
|
ResourceManagerBasicInformation = 0,
|
||
|
ResourceManagerCompletionInformation = 1
|
||
|
} RESOURCEMANAGER_INFORMATION_CLASS;
|
||
|
|
||
|
/* Enlistment basic information */
|
||
|
typedef struct _ENLISTMENT_BASIC_INFORMATION {
|
||
|
GUID EnlistmentId;
|
||
|
GUID TransactionId;
|
||
|
GUID ResourceManagerId;
|
||
|
} ENLISTMENT_BASIC_INFORMATION;
|
||
|
typedef ENLISTMENT_BASIC_INFORMATION *PENLISTMENT_BASIC_INFORMATION;
|
||
|
|
||
|
/* Enlistment CRM information */
|
||
|
typedef struct _ENLISTMENT_CRM_INFORMATION {
|
||
|
GUID CrmTransactionManagerId;
|
||
|
GUID CrmResourceManagerId;
|
||
|
GUID CrmEnlistmentId;
|
||
|
} ENLISTMENT_CRM_INFORMATION;
|
||
|
typedef ENLISTMENT_CRM_INFORMATION *PENLISTMENT_CRM_INFORMATION;
|
||
|
|
||
|
/* Enlistment information classes */
|
||
|
typedef enum _ENLISTMENT_INFORMATION_CLASS {
|
||
|
EnlistmentBasicInformation = 0,
|
||
|
EnlistmentRecoveryInformation = 1,
|
||
|
EnlistmentCrmInformation = 2
|
||
|
} ENLISTMENT_INFORMATION_CLASS;
|
||
|
|
||
|
/* Transaction list entry */
|
||
|
typedef struct _TRANSACTION_LIST_ENTRY {
|
||
|
UOW UOW;
|
||
|
} TRANSACTION_LIST_ENTRY;
|
||
|
typedef TRANSACTION_LIST_ENTRY *PTRANSACTION_LIST_ENTRY;
|
||
|
|
||
|
/* Transaction list information */
|
||
|
typedef struct _TRANSACTION_LIST_INFORMATION {
|
||
|
ULONG NumberOfTransactions;
|
||
|
TRANSACTION_LIST_ENTRY TransactionInformation[1];
|
||
|
} TRANSACTION_LIST_INFORMATION;
|
||
|
typedef TRANSACTION_LIST_INFORMATION *PTRANSACTION_LIST_INFORMATION;
|
||
|
|
||
|
/* Kernel transaction manager object types */
|
||
|
typedef enum _KTMOBJECT_TYPE {
|
||
|
KTMOBJECT_TRANSACTION = 0,
|
||
|
KTMOBJECT_TRANSACTION_MANAGER = 1,
|
||
|
KTMOBJECT_RESOURCE_MANAGER = 2,
|
||
|
KTMOBJECT_ENLISTMENT = 3,
|
||
|
KTMOBJECT_INVALID = 4
|
||
|
} KTMOBJECT_TYPE;
|
||
|
typedef KTMOBJECT_TYPE *PKTMOBJECT_TYPE;
|
||
|
|
||
|
/* Kernel transaction manager object cursor */
|
||
|
typedef struct _KTMOBJECT_CURSOR {
|
||
|
GUID LastQuery;
|
||
|
ULONG ObjectIdCount;
|
||
|
GUID ObjectIds[1];
|
||
|
} KTMOBJECT_CURSOR;
|
||
|
typedef KTMOBJECT_CURSOR *PKTMOBJECT_CURSOR;
|
||
|
|
||
|
/* Pool types */
|
||
|
typedef enum _POOL_TYPE {
|
||
|
NonPagedPool = 0,
|
||
|
PagedPool = 1,
|
||
|
NonPagedPoolMustSucceed = 2,
|
||
|
DontUseThisType = 3,
|
||
|
NonPagedPoolCacheAligned = 4,
|
||
|
PagedPoolCacheAligned = 5,
|
||
|
NonPagedPoolCacheAlignedMustS = 6,
|
||
|
MaxPoolType = 7,
|
||
|
NonPagedPoolSession = 32,
|
||
|
PagedPoolSession = 33,
|
||
|
NonPagedPoolMustSucceedSession = 34,
|
||
|
DontUseThisTypeSession = 35,
|
||
|
NonPagedPoolCachedAlignedSession = 36,
|
||
|
PagedPoolCacheAlignedSession = 37,
|
||
|
NonPagedPoolCacheAlignedMustSSession = 38
|
||
|
} POOL_TYPE;
|
||
|
|
||
|
/* Pool callbacks */
|
||
|
typedef PVOID (NTAPI ALLOCATE_FUNCTION)( POOL_TYPE, SIZE_T, ULONG );
|
||
|
typedef VOID (NTAPI FREE_FUNCTION)( PVOID );
|
||
|
typedef PVOID (NTAPI ALLOCATE_FUNCTION_EX)( POOL_TYPE, SIZE_T, ULONG, struct _LOOKASIDE_LIST_EX * );
|
||
|
typedef VOID (NTAPI FREE_FUNCTION_EX)( PVOID, struct _LOOKASIDE_LIST_EX * );
|
||
|
typedef ALLOCATE_FUNCTION *PALLOCATE_FUNCTION;
|
||
|
typedef FREE_FUNCTION *PFREE_FUNCTION;
|
||
|
typedef ALLOCATE_FUNCTION_EX *PALLOCATE_FUNCTION_EX;
|
||
|
typedef FREE_FUNCTION_EX *PFREE_FUNCTION_EX;
|
||
|
|
||
|
/* General lookaside layout */
|
||
|
#define GENERAL_LOOKASIDE_LAYOUT \
|
||
|
union { \
|
||
|
SLIST_HEADER ListHead; \
|
||
|
SINGLE_LIST_ENTRY SingleListHead; \
|
||
|
}; \
|
||
|
USHORT Depth; \
|
||
|
USHORT MaximumDepth; \
|
||
|
ULONG TotalAllocates; \
|
||
|
union { \
|
||
|
ULONG AllocateMisses; \
|
||
|
ULONG AllocateHits; \
|
||
|
}; \
|
||
|
ULONG TotalFrees; \
|
||
|
union { \
|
||
|
ULONG FreeMisses; \
|
||
|
ULONG FreeHits; \
|
||
|
}; \
|
||
|
POOL_TYPE Type; \
|
||
|
ULONG Tag; \
|
||
|
ULONG Size; \
|
||
|
union { \
|
||
|
PALLOCATE_FUNCTION_EX AllocateEx; \
|
||
|
PALLOCATE_FUNCTION Allocate; \
|
||
|
}; \
|
||
|
union { \
|
||
|
PFREE_FUNCTION_EX FreeEx; \
|
||
|
PFREE_FUNCTION Free; \
|
||
|
}; \
|
||
|
LIST_ENTRY ListEntry; \
|
||
|
ULONG LastTotalAllocates; \
|
||
|
union { \
|
||
|
ULONG LastAllocateMisses; \
|
||
|
ULONG LastAllocateHits; \
|
||
|
}; \
|
||
|
ULONG Future[2];
|
||
|
|
||
|
/* General lookaside */
|
||
|
typedef struct _GENERAL_LOOKASIDE {
|
||
|
GENERAL_LOOKASIDE_LAYOUT
|
||
|
} GENERAL_LOOKASIDE;
|
||
|
typedef GENERAL_LOOKASIDE *PGENERAL_LOOKASIDE;
|
||
|
|
||
|
/* General lookaside pool */
|
||
|
typedef struct _GENERAL_LOOKASIDE_POOL {
|
||
|
GENERAL_LOOKASIDE_LAYOUT
|
||
|
} GENERAL_LOOKASIDE_POOL;
|
||
|
typedef GENERAL_LOOKASIDE_POOL *PGENERAL_LOOKASIDE_POOL;
|
||
|
|
||
|
/* Modes */
|
||
|
typedef enum _MODE {
|
||
|
KernelMode = 0,
|
||
|
UserMode = 1,
|
||
|
MaximumMode = 2
|
||
|
} MODE;
|
||
|
|
||
|
/* Asynchronous procedure call routines */
|
||
|
typedef VOID (NTAPI KNORMAL_ROUTINE)( PVOID, PVOID, PVOID );
|
||
|
typedef KNORMAL_ROUTINE *PKNORMAL_ROUTINE;
|
||
|
typedef VOID (NTAPI KKERNEL_ROUTINE)( struct _KAPC *, PKNORMAL_ROUTINE *, PVOID *, PVOID *, PVOID * );
|
||
|
typedef VOID (NTAPI KRUNDOWN_ROUTINE)( struct _KAPC * );
|
||
|
typedef BOOLEAN (NTAPI KSYNCHRONIZE_ROUTINE)( PVOID );
|
||
|
typedef KKERNEL_ROUTINE *PKKERNEL_ROUTINE;
|
||
|
typedef KRUNDOWN_ROUTINE *PKRUNDOWN_ROUTINE;
|
||
|
typedef KSYNCHRONIZE_ROUTINE *PKSYNCHRONIZE_ROUTINE;
|
||
|
|
||
|
/* Kernel asynchronous procedure call */
|
||
|
typedef struct _KAPC {
|
||
|
UCHAR Type;
|
||
|
UCHAR SpareByte0;
|
||
|
UCHAR Size;
|
||
|
UCHAR SpareByte1;
|
||
|
ULONG SpareLong0;
|
||
|
struct _KTHREAD *Thread;
|
||
|
LIST_ENTRY ApcListEntry;
|
||
|
PKKERNEL_ROUTINE KernelRoutine;
|
||
|
PKRUNDOWN_ROUTINE RundownRoutine;
|
||
|
PKNORMAL_ROUTINE NormalRoutine;
|
||
|
PVOID NormalContext;
|
||
|
PVOID SystemArgument1;
|
||
|
PVOID SystemArgument2;
|
||
|
CCHAR ApcStateIndex;
|
||
|
KPROCESSOR_MODE ApcMode;
|
||
|
BOOLEAN Inserted;
|
||
|
} KAPC;
|
||
|
typedef KAPC *PKAPC;
|
||
|
typedef KAPC *PRKAPC;
|
||
|
|
||
|
/* Deferred procedure call routine */
|
||
|
typedef VOID (NTAPI KDEFERRED_ROUTINE)( struct _KDPC *, PVOID, PVOID, PVOID );
|
||
|
typedef KDEFERRED_ROUTINE *PKDEFERRED_ROUTINE;
|
||
|
|
||
|
/* Kernel deferred procedure call importance values */
|
||
|
typedef enum _KDPC_IMPORTANCE {
|
||
|
LowImportance = 0,
|
||
|
MediumImportance = 1,
|
||
|
HighImportance = 2,
|
||
|
MediumHighImportance = 3
|
||
|
} KDPC_IMPORTANCE;
|
||
|
|
||
|
/* Kernel deferred procedure call */
|
||
|
typedef struct _KDPC {
|
||
|
UCHAR Type;
|
||
|
UCHAR Importance;
|
||
|
volatile USHORT Number;
|
||
|
LIST_ENTRY DpcListEntry;
|
||
|
PKDEFERRED_ROUTINE DeferredRoutine;
|
||
|
PVOID DeferredContext;
|
||
|
PVOID SystemArgument1;
|
||
|
PVOID SystemArgument2;
|
||
|
PVOID DpcData;
|
||
|
} KDPC;
|
||
|
typedef KDPC *PKDPC;
|
||
|
typedef KDPC *PRKDPC;
|
||
|
|
||
|
/* Kernel interprocessor interrupt worker callback */
|
||
|
typedef VOID (NTAPI KIPI_WORKER)( PKIPI_CONTEXT, PVOID, PVOID, PVOID );
|
||
|
typedef KIPI_WORKER *PKIPI_WORKER;
|
||
|
|
||
|
/* Kernel interprocessor interrupt counts */
|
||
|
typedef struct _KIPI_COUNTS {
|
||
|
ULONG Freeze;
|
||
|
ULONG Packet;
|
||
|
ULONG DPC;
|
||
|
ULONG APC;
|
||
|
ULONG FlushSingleTb;
|
||
|
ULONG FlushMultipleTb;
|
||
|
ULONG FlushEntireTb;
|
||
|
ULONG GenericCall;
|
||
|
ULONG ChangeColor;
|
||
|
ULONG SweepDcache;
|
||
|
ULONG SweepIcache;
|
||
|
ULONG SweepIcacheRange;
|
||
|
ULONG FlushIoBuffers;
|
||
|
ULONG GratuitousDPC;
|
||
|
} KIPI_COUNTS;
|
||
|
typedef KIPI_COUNTS *PKIPI_COUNTS;
|
||
|
|
||
|
/* Memory descriptor list */
|
||
|
typedef struct _MDL {
|
||
|
struct _MDL *Next;
|
||
|
CSHORT Size;
|
||
|
CSHORT MdlFlags;
|
||
|
struct _EPROCESS *Process;
|
||
|
PVOID MappedSystemVa;
|
||
|
PVOID StartVa;
|
||
|
ULONG ByteCount;
|
||
|
ULONG ByteOffset;
|
||
|
} MDL;
|
||
|
typedef MDL *PMDL;
|
||
|
typedef MDL *PMDLX;
|
||
|
|
||
|
/* Dispatcher header */
|
||
|
typedef struct _DISPATCHER_HEADER {
|
||
|
union {
|
||
|
struct {
|
||
|
UCHAR Type;
|
||
|
union {
|
||
|
union {
|
||
|
UCHAR TimerControlFlags;
|
||
|
struct {
|
||
|
UCHAR Absolute : 1;
|
||
|
UCHAR Coalescable : 1;
|
||
|
UCHAR KeepShifting : 1;
|
||
|
UCHAR EncodedTolerableDelay : 5;
|
||
|
};
|
||
|
};
|
||
|
UCHAR Abandoned;
|
||
|
BOOLEAN Signalling;
|
||
|
};
|
||
|
union {
|
||
|
union {
|
||
|
UCHAR ThreadControlFlags;
|
||
|
struct {
|
||
|
UCHAR CpuThrottled : 1;
|
||
|
UCHAR CycleProfiling : 1;
|
||
|
UCHAR CounterProfiling : 1;
|
||
|
UCHAR Reserved : 5;
|
||
|
};
|
||
|
};
|
||
|
UCHAR Hand;
|
||
|
UCHAR Size;
|
||
|
};
|
||
|
union {
|
||
|
union {
|
||
|
UCHAR TimerMiscFlags;
|
||
|
struct {
|
||
|
#ifdef _X86_
|
||
|
UCHAR Index : 1;
|
||
|
UCHAR Processor : TIMER_PROCESSOR_INDEX_BITS;
|
||
|
#else
|
||
|
UCHAR Index : TIMER_EXPIRED_INDEX_BITS;
|
||
|
#endif
|
||
|
UCHAR Inserted : 1;
|
||
|
volatile UCHAR Expired : 1;
|
||
|
};
|
||
|
};
|
||
|
union {
|
||
|
BOOLEAN DebugActive;
|
||
|
struct {
|
||
|
BOOLEAN ActiveDR7 : 1;
|
||
|
BOOLEAN Instrumented : 1;
|
||
|
BOOLEAN Reserved2 : 4;
|
||
|
BOOLEAN UmsScheduled : 1;
|
||
|
BOOLEAN UmsPrimary : 1;
|
||
|
};
|
||
|
};
|
||
|
BOOLEAN DpcActive;
|
||
|
};
|
||
|
};
|
||
|
volatile LONG Lock;
|
||
|
};
|
||
|
LONG SingalState;
|
||
|
LIST_ENTRY WaitListHead;
|
||
|
} DISPATCHER_HEADER;
|
||
|
|
||
|
/* Kernel event */
|
||
|
typedef struct _KEVENT {
|
||
|
DISPATCHER_HEADER Header;
|
||
|
} KEVENT;
|
||
|
typedef KEVENT *PKEVENT;
|
||
|
typedef KEVENT *PRKEVENT;
|
||
|
|
||
|
/* Kernel gate */
|
||
|
typedef struct _KGATE {
|
||
|
DISPATCHER_HEADER Header;
|
||
|
} KGATE;
|
||
|
typedef KGATE *PKGATE;
|
||
|
|
||
|
/* Kernel timer */
|
||
|
typedef struct _KTIMER {
|
||
|
DISPATCHER_HEADER Header;
|
||
|
ULARGE_INTEGER DueTime;
|
||
|
LIST_ENTRY TimerListEntry;
|
||
|
struct _KDPC *Dpc;
|
||
|
#ifndef _X86_
|
||
|
ULONG Processor;
|
||
|
#endif
|
||
|
ULONG Period;
|
||
|
} KTIMER;
|
||
|
typedef KTIMER *PKTIMER;
|
||
|
typedef KTIMER *PRKTIMER;
|
||
|
|
||
|
/* Lock operations */
|
||
|
typedef enum _LOCK_OPERATION {
|
||
|
IoReadAccess = 0,
|
||
|
IoWriteAccess = 1,
|
||
|
IoModifyAccess = 2
|
||
|
} LOCK_OPERATION;
|
||
|
|
||
|
/* Kernel floating save area */
|
||
|
#ifdef _X86_
|
||
|
typedef struct _KFLOATING_SAVE {
|
||
|
ULONG ControlWord;
|
||
|
ULONG StatusWord;
|
||
|
ULONG ErrorOffset;
|
||
|
ULONG ErrorSelector;
|
||
|
ULONG DataOffset;
|
||
|
ULONG DataSelector;
|
||
|
ULONG Cr0NpxState;
|
||
|
ULONG Spare1;
|
||
|
} KFLOATING_SAVE;
|
||
|
typedef KFLOATING_SAVE *PKFLOATING_SAVE;
|
||
|
#endif
|
||
|
|
||
|
/* AMD L1 cache information */
|
||
|
#ifdef _X86_
|
||
|
typedef union _AMD_L1_CACHE_INFO {
|
||
|
ULONG Ulong;
|
||
|
struct {
|
||
|
UCHAR LineSize;
|
||
|
UCHAR LinesPerTag;
|
||
|
UCHAR Associativity;
|
||
|
UCHAR Size;
|
||
|
};
|
||
|
} AMD_L1_CACHE_INFO;
|
||
|
typedef AMD_L1_CACHE_INFO *PAMD_L1_CACHE_INFO;
|
||
|
#endif
|
||
|
|
||
|
/* AMD L2 cache information */
|
||
|
#ifdef _X86_
|
||
|
typedef union _AMD_L2_CACHE_INFO {
|
||
|
ULONG Ulong;
|
||
|
struct {
|
||
|
UCHAR LineSize;
|
||
|
UCHAR LinesPerTag : 4;
|
||
|
UCHAR Associativity : 4;
|
||
|
USHORT Size;
|
||
|
};
|
||
|
} AMD_L2_CACHE_INFO;
|
||
|
typedef AMD_L2_CACHE_INFO *PAMD_L2_CACHE_INFO;
|
||
|
#endif
|
||
|
|
||
|
/* AMD L3 cache information */
|
||
|
#ifdef _X86_
|
||
|
typedef union _AMD_L3_CACHE_INFO {
|
||
|
ULONG Ulong;
|
||
|
struct {
|
||
|
UCHAR LineSize;
|
||
|
UCHAR LinesPerTag : 4;
|
||
|
UCHAR Associativity : 4;
|
||
|
USHORT Reserved : 2;
|
||
|
USHORT Size : 14;
|
||
|
};
|
||
|
} AMD_L3_CACHE_INFO;
|
||
|
typedef AMD_L3_CACHE_INFO *PAMD_L3_CACHE_INFO;
|
||
|
#endif
|
||
|
|
||
|
/* Intel cache types */
|
||
|
#ifdef _X86_
|
||
|
typedef enum _INTEL_CACHE_TYPE {
|
||
|
IntelCacheNull = 0,
|
||
|
IntelCacheData = 1,
|
||
|
IntelCacheInstruction = 2,
|
||
|
IntelCacheUnified = 3,
|
||
|
IntelCacheRam = 4,
|
||
|
IntelCacheTrace = 5
|
||
|
} INTEL_CACHE_TYPE;
|
||
|
#endif
|
||
|
|
||
|
/* Intel EAX cache information */
|
||
|
#ifdef _X86_
|
||
|
typedef union INTEL_CACHE_INFO_EAX {
|
||
|
ULONG Ulong;
|
||
|
struct {
|
||
|
INTEL_CACHE_TYPE Type : 5;
|
||
|
ULONG Level : 3;
|
||
|
ULONG SelfInitializing : 1;
|
||
|
ULONG FullyAssociative : 1;
|
||
|
ULONG Reserved : 4;
|
||
|
ULONG ThreadsSharing : 12;
|
||
|
ULONG ProcessorCores : 6;
|
||
|
};
|
||
|
} INTEL_CACHE_INFO_EAX;
|
||
|
typedef INTEL_CACHE_INFO_EAX *PINTEL_CACHE_INFO_EAX;
|
||
|
#endif
|
||
|
|
||
|
/* Intel EBX cache information */
|
||
|
#ifdef _X86_
|
||
|
typedef union INTEL_CACHE_INFO_EBX {
|
||
|
ULONG Ulong;
|
||
|
struct {
|
||
|
ULONG LineSize : 12;
|
||
|
ULONG Partitions : 10;
|
||
|
ULONG Associativity : 10;
|
||
|
};
|
||
|
} INTEL_CACHE_INFO_EBX;
|
||
|
typedef INTEL_CACHE_INFO_EBX *PINTEL_CACHE_INFO_EBX;
|
||
|
#endif
|
||
|
|
||
|
/* Logical processor relationships */
|
||
|
typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
|
||
|
RelationProcessorCore = 0,
|
||
|
RelationNumaNode = 1,
|
||
|
RelationCache = 2,
|
||
|
RelationProcessorPackage = 3,
|
||
|
RelationGroup = 4,
|
||
|
RelationAll = 0xFFFF
|
||
|
} LOGICAL_PROCESSOR_RELATIONSHIP;
|
||
|
|
||
|
/* Processor cache types */
|
||
|
typedef enum _PROCESSOR_CACHE_TYPE {
|
||
|
CacheUnified,
|
||
|
CacheInstruction,
|
||
|
CacheData,
|
||
|
CacheTrace
|
||
|
} PROCESSOR_CACHE_TYPE;
|
||
|
|
||
|
/* Cache descriptor */
|
||
|
typedef struct _CACHE_DESCRIPTOR {
|
||
|
UCHAR Level;
|
||
|
UCHAR Associativity;
|
||
|
USHORT LineSize;
|
||
|
ULONG Size;
|
||
|
PROCESSOR_CACHE_TYPE Type;
|
||
|
} CACHE_DESCRIPTOR;
|
||
|
typedef CACHE_DESCRIPTOR *PCACHE_DESCRIPTOR;
|
||
|
|
||
|
/* System logical processor information */
|
||
|
typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
|
||
|
ULONG_PTR ProcessorMask;
|
||
|
LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
|
||
|
union {
|
||
|
struct {
|
||
|
UCHAR Flags;
|
||
|
} ProcessorFlags;
|
||
|
struct {
|
||
|
ULONG NodeNumber;
|
||
|
} NumaNode;
|
||
|
CACHE_DESCRIPTOR Cache;
|
||
|
ULONGLONG Reserved[2];
|
||
|
};
|
||
|
} SYSTEM_LOGICAL_PROCESSOR_INFORMATION;
|
||
|
typedef SYSTEM_LOGICAL_PROCESSOR_INFORMATION *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
|
||
|
|
||
|
/* Processor relationship */
|
||
|
typedef struct _PROCESSOR_RELATIONSHIP {
|
||
|
UCHAR Flags;
|
||
|
UCHAR Reserved[21];
|
||
|
USHORT GroupCount;
|
||
|
GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
|
||
|
} PROCESSOR_RELATIONSHIP;
|
||
|
typedef PROCESSOR_RELATIONSHIP *PPROCESSOR_RELATIONSHIP;
|
||
|
|
||
|
/* Numa node relationship */
|
||
|
typedef struct _NUMA_NODE_RELATIONSHIP {
|
||
|
ULONG NodeNumber;
|
||
|
UCHAR Reserved[20];
|
||
|
GROUP_AFFINITY GroupMask;
|
||
|
} NUMA_NODE_RELATIONSHIP;
|
||
|
typedef NUMA_NODE_RELATIONSHIP *PNUMA_NODE_RELATIONSHIP;
|
||
|
|
||
|
/* Cache relationship */
|
||
|
typedef struct _CACHE_RELATIONSHIP {
|
||
|
UCHAR Level;
|
||
|
UCHAR Associativity;
|
||
|
USHORT LineSize;
|
||
|
ULONG CacheSize;
|
||
|
PROCESSOR_CACHE_TYPE Type;
|
||
|
UCHAR Reserved[20];
|
||
|
GROUP_AFFINITY GroupMask;
|
||
|
} CACHE_RELATIONSHIP;
|
||
|
typedef CACHE_RELATIONSHIP *PCACHE_RELATIONSHIP;
|
||
|
|
||
|
/* Processor group information */
|
||
|
typedef struct _PROCESSOR_GROUP_INFO {
|
||
|
UCHAR MaximumProcessorCount;
|
||
|
UCHAR ActiveProcessorCount;
|
||
|
UCHAR Reserved[38];
|
||
|
KAFFINITY ActiveProcessorMask;
|
||
|
} PROCESSOR_GROUP_INFO;
|
||
|
typedef PROCESSOR_GROUP_INFO *PPROCESSOR_GROUP_INFO;
|
||
|
|
||
|
/* Group relationship */
|
||
|
typedef struct _GROUP_RELATIONSHIP {
|
||
|
USHORT MaximumGroupCount;
|
||
|
USHORT ActiveGroupCount;
|
||
|
UCHAR Reserved[20];
|
||
|
PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
|
||
|
} GROUP_RELATIONSHIP;
|
||
|
typedef GROUP_RELATIONSHIP *PGROUP_RELATIONSHIP;
|
||
|
|
||
|
/* System logical processor information (extended version) */
|
||
|
typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
|
||
|
LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
|
||
|
ULONG Size;
|
||
|
union {
|
||
|
PROCESSOR_RELATIONSHIP Processor;
|
||
|
NUMA_NODE_RELATIONSHIP NumaNode;
|
||
|
CACHE_RELATIONSHIP Cache;
|
||
|
GROUP_RELATIONSHIP Group;
|
||
|
};
|
||
|
} SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
|
||
|
typedef SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
|
||
|
|
||
|
/* Alternative architecture types */
|
||
|
typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE {
|
||
|
StandardDesign = 0,
|
||
|
NEC98x86 = 1,
|
||
|
EndAlternatives = 2
|
||
|
} ALTERNATIVE_ARCHITECTURE_TYPE;
|
||
|
|
||
|
typedef struct _EXCEPTION_RECORD {
|
||
|
NTSTATUS ExceptionCode;
|
||
|
ULONG ExceptionFlags;
|
||
|
struct _EXCEPTION_RECORD *ExceptionRecord;
|
||
|
PVOID ExceptionAddress;
|
||
|
ULONG NumberParameters;
|
||
|
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
|
||
|
} EXCEPTION_RECORD;
|
||
|
typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
|
||
|
|
||
|
/* Exception record (32-bit version) */
|
||
|
typedef struct _EXCEPTION_RECORD32 {
|
||
|
NTSTATUS ExceptionCode;
|
||
|
ULONG ExceptionFlags;
|
||
|
ULONG ExceptionRecord;
|
||
|
ULONG ExceptionAddress;
|
||
|
ULONG NumberParameters;
|
||
|
ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
|
||
|
} EXCEPTION_RECORD32;
|
||
|
typedef EXCEPTION_RECORD32 *PEXCEPTION_RECORD32;
|
||
|
|
||
|
/* Exception record (64-bit version) */
|
||
|
typedef struct _EXCEPTION_RECORD64 {
|
||
|
NTSTATUS ExceptionCode;
|
||
|
ULONG ExceptionFlags;
|
||
|
ULONG64 ExceptionRecord;
|
||
|
ULONG64 ExceptionAddress;
|
||
|
ULONG NumberParameters;
|
||
|
ULONG __unusedAlignment;
|
||
|
ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
|
||
|
} EXCEPTION_RECORD64;
|
||
|
typedef EXCEPTION_RECORD64 *PEXCEPTION_RECORD64;
|
||
|
|
||
|
/* Pointers to exception and context records */
|
||
|
typedef struct _EXCEPTION_POINTERS {
|
||
|
PEXCEPTION_RECORD ExceptionRecord;
|
||
|
PCONTEXT ContextRecord;
|
||
|
} EXCEPTION_POINTERS;
|
||
|
typedef EXCEPTION_POINTERS *PEXCEPTION_POINTERS;
|
||
|
|
||
|
/* Kernel interrupt modes */
|
||
|
typedef enum _KINTERRUPT_MODE {
|
||
|
LevelSensitive = 0,
|
||
|
Latched = 1
|
||
|
} KINTERRUPT_MODE;
|
||
|
|
||
|
/* Kernel interrupt polarities */
|
||
|
typedef enum _KINTERRUPT_POLARITY {
|
||
|
InterruptPolarityUnknown = 0,
|
||
|
InterruptActiveHigh = 1,
|
||
|
InterruptActiveLow = 2
|
||
|
} KINTERRUPT_POLARITY;
|
||
|
typedef KINTERRUPT_POLARITY *PKINTERRUPT_POLARITY;
|
||
|
|
||
|
/* Kernel wait reasons */
|
||
|
typedef enum _KWAIT_REASON {
|
||
|
Executive = 0,
|
||
|
FreePage = 1,
|
||
|
PageIn = 2,
|
||
|
PoolAllocation = 3,
|
||
|
DelayExecution = 4,
|
||
|
Suspended = 5,
|
||
|
UserRequest = 6,
|
||
|
WrExecutive = 7,
|
||
|
WrFreePage = 8,
|
||
|
WrPageIn = 9,
|
||
|
WrPoolAllocation = 10,
|
||
|
WrDelayExecution = 11,
|
||
|
WrSuspended = 12,
|
||
|
WrUserRequest = 13,
|
||
|
WrEventPair = 14,
|
||
|
WrQueue = 15,
|
||
|
WrLpcReceive = 16,
|
||
|
WrLpcReply = 17,
|
||
|
WrVirtualMemory = 18,
|
||
|
WrPageOut = 19,
|
||
|
WrRendezvous = 20,
|
||
|
WrKeyedEvent = 21,
|
||
|
WrTerminated = 22,
|
||
|
WrProcessInSwap = 23,
|
||
|
WrCpuRateControl = 24,
|
||
|
WrCalloutStack = 25,
|
||
|
WrKernel = 26,
|
||
|
WrResource = 27,
|
||
|
WrPushLock = 28,
|
||
|
WrMutex = 29,
|
||
|
WrQuantumEnd = 30,
|
||
|
WrDispatchInt = 31,
|
||
|
WrPreempted = 32,
|
||
|
WrYieldExecution = 33,
|
||
|
WrFastMutex = 34,
|
||
|
WrGuardedMutex = 35,
|
||
|
WrRundown = 36,
|
||
|
MaximumWaitReason = 37,
|
||
|
} KWAIT_REASON;
|
||
|
|
||
|
/* Kernel wait block */
|
||
|
typedef struct _KWAIT_BLOCK {
|
||
|
LIST_ENTRY WaitListEntry;
|
||
|
struct _KTHREAD *Thread;
|
||
|
PVOID Object;
|
||
|
struct _KWAIT_BLOCK *NextWaitBlock;
|
||
|
USHORT WaitKey;
|
||
|
UCHAR WaitType;
|
||
|
volatile UCHAR BlockState;
|
||
|
} KWAIT_BLOCK;
|
||
|
typedef KWAIT_BLOCK *PKWAIT_BLOCK;
|
||
|
typedef KWAIT_BLOCK *PRKWAIT_BLOCK;
|
||
|
|
||
|
/* Kernel thread start routine */
|
||
|
typedef VOID (NTAPI KSTART_ROUTINE)( PVOID );
|
||
|
typedef KSTART_ROUTINE *PKSTART_ROUTINE;
|
||
|
|
||
|
/* Kernel device queue */
|
||
|
typedef struct _KDEVICE_QUEUE {
|
||
|
CSHORT Type;
|
||
|
CSHORT Size;
|
||
|
LIST_ENTRY DeviceListHead;
|
||
|
KSPIN_LOCK Lock;
|
||
|
BOOLEAN Busy;
|
||
|
} KDEVICE_QUEUE;
|
||
|
typedef KDEVICE_QUEUE *PKDEVICE_QUEUE;
|
||
|
typedef KDEVICE_QUEUE *PRKDEVICE_QUEUE;
|
||
|
|
||
|
/* Kernel device queue entry */
|
||
|
typedef struct _KDEVICE_QUEUE_ENTRY {
|
||
|
LIST_ENTRY DeviceListEntry;
|
||
|
ULONG SortKey;
|
||
|
BOOLEAN Inserted;
|
||
|
} KDEVICE_QUEUE_ENTRY;
|
||
|
typedef KDEVICE_QUEUE_ENTRY *PKDEVICE_QUEUE_ENTRY;
|
||
|
typedef KDEVICE_QUEUE_ENTRY *PRKDEVICE_QUEUE_ENTRY;
|
||
|
|
||
|
/* Kernel service routines */
|
||
|
typedef BOOLEAN (NTAPI KSERVICE_ROUTINE)( struct _KINTERRUPT *, PVOID );
|
||
|
typedef BOOLEAN (NTAPI KMESSAGE_SERVICE_ROUTINE)( struct _KINTERRUPT *, PVOID, ULONG );
|
||
|
typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE;
|
||
|
typedef KMESSAGE_SERVICE_ROUTINE *PKMESSAGE_SERVICE_ROUTINE;
|
||
|
|
||
|
/* Kernel mutant */
|
||
|
typedef struct _KMUTANT {
|
||
|
DISPATCHER_HEADER Header;
|
||
|
LIST_ENTRY MutantListEntry;
|
||
|
struct _KTHREAD *OwnerThread;
|
||
|
BOOLEAN Abandoned;
|
||
|
UCHAR ApcDisable;
|
||
|
} KMUTANT;
|
||
|
typedef KMUTANT *PKMUTANT;
|
||
|
typedef KMUTANT *PRKMUTANT;
|
||
|
typedef KMUTANT KMUTEX;
|
||
|
typedef KMUTANT *PKMUTEX;
|
||
|
typedef KMUTANT *PRKMUTEX;
|
||
|
|
||
|
/* Kernel semaphore */
|
||
|
typedef struct _KSEMAPHORE {
|
||
|
DISPATCHER_HEADER Header;
|
||
|
LONG Limit;
|
||
|
} KSEMAPHORE;
|
||
|
typedef KSEMAPHORE *PKSEMAPHORE;
|
||
|
typedef KSEMAPHORE *PRKSEMAPHORE;
|
||
|
|
||
|
/* Interprocess interrupt broadcast worker */
|
||
|
typedef ULONG_PTR (NTAPI KIPI_BROADCAST_WORKER)( ULONG_PTR );
|
||
|
typedef KIPI_BROADCAST_WORKER *PKIPI_BROADCAST_WORKER;
|
||
|
|
||
|
/* Kernel deferred procedure call watchdog information */
|
||
|
typedef struct _KDPC_WATCHDOG_INFORMATION {
|
||
|
ULONG DpcTimeLimit;
|
||
|
ULONG DpcTimeCount;
|
||
|
ULONG DpcWatchdogLimit;
|
||
|
ULONG DpcWatchdogCount;
|
||
|
ULONG Reserved;
|
||
|
} KDPC_WATCHDOG_INFORMATION;
|
||
|
typedef KDPC_WATCHDOG_INFORMATION *PKDPC_WATCHDOG_INFORMATION;
|
||
|
|
||
|
/* Kernel bug check buffer dump states */
|
||
|
typedef enum _KBUGCHECK_BUFFER_DUMP_STATE {
|
||
|
BufferEmpty = 0,
|
||
|
BufferInserted = 1,
|
||
|
BufferStarted = 2,
|
||
|
BufferFinished = 3,
|
||
|
BufferIncomplete = 4
|
||
|
} KBUGCHECK_BUFFER_DUMP_STATE;
|
||
|
|
||
|
/* Kernel bug check callback routine */
|
||
|
typedef VOID (NTAPI KBUGCHECK_CALLBACK_ROUTINE)( PVOID, ULONG );
|
||
|
typedef KBUGCHECK_CALLBACK_ROUTINE *PKBUGCHECK_CALLBACK_ROUTINE;
|
||
|
|
||
|
/* Kernel bug check callback record */
|
||
|
typedef struct _KBUGCHECK_CALLBACK_RECORD {
|
||
|
LIST_ENTRY Entry;
|
||
|
PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
|
||
|
PVOID Buffer;
|
||
|
ULONG Length;
|
||
|
PUCHAR Component;
|
||
|
ULONG_PTR Checksum;
|
||
|
UCHAR State;
|
||
|
} KBUGCHECK_CALLBACK_RECORD;
|
||
|
typedef KBUGCHECK_CALLBACK_RECORD *PKBUGCHECK_CALLBACK_RECORD;
|
||
|
|
||
|
/* Kernel bug check callback reasons */
|
||
|
typedef enum _KBUGCHECK_CALLBACK_REASON {
|
||
|
KbCallbackInvalid = 0,
|
||
|
KbCallbackSecondaryDumpData = 2,
|
||
|
KbCallbackDumpIo = 3,
|
||
|
KbCallbackAddPages = 4
|
||
|
} KBUGCHECK_CALLBACK_REASON;
|
||
|
|
||
|
/* Kernel bug check reason callback routine */
|
||
|
typedef VOID (NTAPI KBUGCHECK_REASON_CALLBACK_ROUTINE)( KBUGCHECK_CALLBACK_REASON, struct _KBUGCHECK_REASON_CALLBACK_RECORD *, PVOID, ULONG );
|
||
|
typedef KBUGCHECK_REASON_CALLBACK_ROUTINE *PKBUGCHECK_REASON_CALLBACK_ROUTINE;
|
||
|
|
||
|
/* Kernel bug check reason callback record */
|
||
|
typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD {
|
||
|
LIST_ENTRY Entry;
|
||
|
PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine;
|
||
|
PUCHAR Component;
|
||
|
ULONG_PTR Checksum;
|
||
|
KBUGCHECK_CALLBACK_REASON Reason;
|
||
|
UCHAR State;
|
||
|
} KBUGCHECK_REASON_CALLBACK_RECORD;
|
||
|
typedef KBUGCHECK_REASON_CALLBACK_RECORD *PKBUGCHECK_REASON_CALLBACK_RECORD;
|
||
|
|
||
|
/* Kernel bug check secondary dump data */
|
||
|
typedef struct _KBUGCHECK_SECONDARY_DUMP_DATA {
|
||
|
PVOID InBuffer;
|
||
|
ULONG InBufferLength;
|
||
|
ULONG MaximumAllowed;
|
||
|
GUID Guid;
|
||
|
PVOID OutBuffer;
|
||
|
ULONG OutBufferLength;
|
||
|
} KBUGCHECK_SECONDARY_DUMP_DATA;
|
||
|
typedef KBUGCHECK_SECONDARY_DUMP_DATA *PKBUGCHECK_SECONDARY_DUMP_DATA;
|
||
|
|
||
|
/* Kernel bug check dump I/O types */
|
||
|
typedef enum _KBUGCHECK_DUMP_IO_TYPE {
|
||
|
KbDumpIoInvalid = 0,
|
||
|
KbDumpIoHeader = 1,
|
||
|
KbDumpIoBody = 2,
|
||
|
KbDumpIoSecondaryData = 3,
|
||
|
KbDumpIoComplete = 4
|
||
|
} KBUGCHECK_DUMP_IO_TYPE;
|
||
|
|
||
|
/* Kernel bug check dump I/O data */
|
||
|
typedef struct _KBUGCHECK_DUMP_IO {
|
||
|
ULONG64 Offset;
|
||
|
PVOID Buffer;
|
||
|
ULONG BufferLength;
|
||
|
KBUGCHECK_DUMP_IO_TYPE Type;
|
||
|
} KBUGCHECK_DUMP_IO;
|
||
|
typedef KBUGCHECK_DUMP_IO *PKBUGCHECK_DUMP_IO;
|
||
|
|
||
|
/* Kernel bug check add pages data */
|
||
|
typedef struct _KBUGCHECK_ADD_PAGES {
|
||
|
PVOID Context;
|
||
|
ULONG Flags;
|
||
|
ULONG BugCheckCode;
|
||
|
ULONG_PTR Address;
|
||
|
ULONG_PTR Count;
|
||
|
} KBUGCHECK_ADD_PAGES;
|
||
|
typedef KBUGCHECK_ADD_PAGES *PKBUGCHECK_ADD_PAGES;
|
||
|
|
||
|
/* NMI callback */
|
||
|
typedef BOOLEAN (NTAPI *PNMI_CALLBACK)( PVOID, BOOLEAN );
|
||
|
|
||
|
/* Memory caching type origins */
|
||
|
typedef enum _MEMORY_CACHING_TYPE_ORIG {
|
||
|
MmFrameBufferCached = 2
|
||
|
} MEMORY_CACHING_TYPE_ORIG;
|
||
|
|
||
|
/* Memory caching types */
|
||
|
typedef enum _MEMORY_CACHING_TYPE {
|
||
|
MmNonCached = FALSE,
|
||
|
MmCached = TRUE,
|
||
|
MmWriteCombined = MmFrameBufferCached,
|
||
|
MmHardwareCoherentCached = 3,
|
||
|
MmNonCachedUnordered = 4,
|
||
|
MmUSWCCached = 5,
|
||
|
MmMaximumCacheType = 6
|
||
|
} MEMORY_CACHING_TYPE;
|
||
|
|
||
|
/* Kernel guarded mutex */
|
||
|
typedef struct _KGUARDED_MUTEX {
|
||
|
volatile LONG Count;
|
||
|
PKTHREAD Owner;
|
||
|
ULONG Contention;
|
||
|
KGATE Gate;
|
||
|
union {
|
||
|
struct {
|
||
|
SHORT KernelApcDisable;
|
||
|
SHORT SpecialApcDisable;
|
||
|
};
|
||
|
ULONG CombinedApcDisable;
|
||
|
};
|
||
|
} KGUARDED_MUTEX;
|
||
|
typedef KGUARDED_MUTEX *PKGUARDED_MUTEX;
|
||
|
|
||
|
/* Kernel processor change notify states */
|
||
|
typedef enum {
|
||
|
KeProcessorAddStartNotify = 0,
|
||
|
KeProcessorAddCompleteNotify = 1,
|
||
|
KeProcessorAddFailureNotify = 2
|
||
|
} KE_PROCESSOR_CHANGE_NOTIFY_STATE;
|
||
|
|
||
|
/* Kernel processor change notify context */
|
||
|
typedef struct _KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT {
|
||
|
KE_PROCESSOR_CHANGE_NOTIFY_STATE State;
|
||
|
ULONG NtNumber;
|
||
|
NTSTATUS Status;
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
PROCESSOR_NUMBER ProcNumber;
|
||
|
#endif
|
||
|
} KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT;
|
||
|
typedef KE_PROCESSOR_CHANGE_NOTIFY_CONTEXT *PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT;
|
||
|
|
||
|
/* Processor callback function */
|
||
|
typedef VOID (NTAPI PROCESSOR_CALLBACK_FUNCTION)( PVOID, PKE_PROCESSOR_CHANGE_NOTIFY_CONTEXT, PNTSTATUS );
|
||
|
typedef PROCESSOR_CALLBACK_FUNCTION *PPROCESSOR_CALLBACK_FUNCTION;
|
||
|
|
||
|
/* Extended state save */
|
||
|
typedef struct _XSTATE_SAVE {
|
||
|
#if defined( _X86_ )
|
||
|
union {
|
||
|
struct {
|
||
|
LONG64 Reserved1;
|
||
|
ULONG Reserved2;
|
||
|
struct _XSTATE_SAVE *Prev;
|
||
|
PXSAVE_AREA Reserved3;
|
||
|
struct _KTHREAD *Thread;
|
||
|
PVOID Reserved4;
|
||
|
UCHAR Level;
|
||
|
};
|
||
|
XSTATE_CONTEXT XStateContext;
|
||
|
};
|
||
|
#endif
|
||
|
} XSTATE_SAVE;
|
||
|
typedef XSTATE_SAVE *PXSTATE_SAVE;
|
||
|
|
||
|
/* Kernel debugging options */
|
||
|
typedef enum _KD_OPTION {
|
||
|
KD_OPTION_SET_BLOCK_ENABLE = 0
|
||
|
} KD_OPTION;
|
||
|
|
||
|
/* Executive pool priorities */
|
||
|
typedef enum _EX_POOL_PRIORITY {
|
||
|
LowPoolPriority = 0,
|
||
|
LowPoolPrioritySpecialPoolOverrun = 8,
|
||
|
LowPoolPrioritySpecialPoolUnderrun = 9,
|
||
|
NormalPoolPriority = 16,
|
||
|
NormalPoolPrioritySpecialPoolOverrun = 24,
|
||
|
NormalPoolPrioritySpecialPoolUnderrun = 25,
|
||
|
HighPoolPriority = 32,
|
||
|
HighPoolPrioritySpecialPoolOverrun = 40,
|
||
|
HighPoolPrioritySpecialPoolUnderrun = 41
|
||
|
} EX_POOL_PRIORITY;
|
||
|
|
||
|
/* Fast mutex */
|
||
|
typedef struct _FAST_MUTEX {
|
||
|
volatile LONG Count;
|
||
|
PKTHREAD Owner;
|
||
|
ULONG Contention;
|
||
|
KEVENT Event;
|
||
|
ULONG OldIrql;
|
||
|
} FAST_MUTEX;
|
||
|
typedef FAST_MUTEX *PFAST_MUTEX;
|
||
|
|
||
|
/* Lookaside list (extended version) */
|
||
|
typedef struct _LOOKASIDE_LIST_EX {
|
||
|
GENERAL_LOOKASIDE_POOL L;
|
||
|
} LOOKASIDE_LIST_EX;
|
||
|
typedef LOOKASIDE_LIST_EX *PLOOKASIDE_LIST_EX;
|
||
|
|
||
|
/* Nonpaged lookaside list */
|
||
|
typedef struct _NPAGED_LOOKASIDE_LIST {
|
||
|
GENERAL_LOOKASIDE L;
|
||
|
KSPIN_LOCK Lock__ObsoleteButDoNotDelete;
|
||
|
} NPAGED_LOOKASIDE_LIST;
|
||
|
typedef NPAGED_LOOKASIDE_LIST *PNPAGED_LOOKASIDE_LIST;
|
||
|
|
||
|
/* Paged lookaside list */
|
||
|
typedef struct _PAGED_LOOKASIDE_LIST {
|
||
|
GENERAL_LOOKASIDE L;
|
||
|
FAST_MUTEX Lock__ObsoleteButDoNotDelete;
|
||
|
} PAGED_LOOKASIDE_LIST;
|
||
|
typedef PAGED_LOOKASIDE_LIST *PPAGED_LOOKASIDE_LIST;
|
||
|
|
||
|
/* Work queue types */
|
||
|
typedef enum _WORK_QUEUE_TYPE {
|
||
|
CriticalWorkQueue = 0,
|
||
|
DelayedWorkQueue = 1,
|
||
|
HyperCriticalWorkQueue = 2,
|
||
|
MaximumWorkQueue = 3
|
||
|
} WORK_QUEUE_TYPE;
|
||
|
|
||
|
/* Worker thread routine */
|
||
|
typedef VOID (NTAPI WORKER_THREAD_ROUTINE)( PVOID );
|
||
|
typedef WORKER_THREAD_ROUTINE *PWORKER_THREAD_ROUTINE;
|
||
|
|
||
|
/* Work queue item */
|
||
|
typedef struct _WORK_QUEUE_ITEM {
|
||
|
LIST_ENTRY List;
|
||
|
PWORKER_THREAD_ROUTINE WorkerRoutine;
|
||
|
PVOID Parameter;
|
||
|
} WORK_QUEUE_ITEM;
|
||
|
typedef WORK_QUEUE_ITEM *PWORK_QUEUE_ITEM;
|
||
|
|
||
|
/* Owner entry */
|
||
|
typedef struct _OWNER_ENTRY {
|
||
|
ERESOURCE_THREAD OwnerThread;
|
||
|
union {
|
||
|
struct {
|
||
|
ULONG IoPriorityBoosted : 1;
|
||
|
ULONG OwnerReferenced : 1;
|
||
|
ULONG OwnerCount : 30;
|
||
|
};
|
||
|
ULONG TableSize;
|
||
|
};
|
||
|
} OWNER_ENTRY;
|
||
|
typedef OWNER_ENTRY *POWNER_ENTRY;
|
||
|
|
||
|
/* Executive resource */
|
||
|
typedef struct _ERESOURCE {
|
||
|
LIST_ENTRY SystemResourcesList;
|
||
|
POWNER_ENTRY OwnerTable;
|
||
|
SHORT ActiveCount;
|
||
|
USHORT Flag;
|
||
|
PKSEMAPHORE SharedWaiters;
|
||
|
PKEVENT ExclusiveWaiters;
|
||
|
OWNER_ENTRY OwnerEntry;
|
||
|
ULONG ActiveEntries;
|
||
|
ULONG ContentionCount;
|
||
|
ULONG NumberOfSharedWaiters;
|
||
|
ULONG NumberOfExclusiveWaiters;
|
||
|
union {
|
||
|
PVOID Address;
|
||
|
ULONG_PTR CreatorBackTraceIndex;
|
||
|
};
|
||
|
KSPIN_LOCK SpinLock;
|
||
|
} ERESOURCE;
|
||
|
typedef ERESOURCE *PERESOURCE;
|
||
|
|
||
|
/* Resource hash entry */
|
||
|
typedef struct _RESOURCE_HASH_ENTRY {
|
||
|
LIST_ENTRY ListEntry;
|
||
|
PVOID Address;
|
||
|
ULONG ContentionCount;
|
||
|
ULONG Number;
|
||
|
} RESOURCE_HASH_ENTRY;
|
||
|
typedef RESOURCE_HASH_ENTRY *PRESOURCE_HASH_ENTRY;
|
||
|
|
||
|
/* Resource performance data */
|
||
|
typedef struct _RESOURCE_PERFORMANCE_DATA {
|
||
|
ULONG ActiveResourceCount;
|
||
|
ULONG TotalResourceCount;
|
||
|
ULONG ExclusionAcquire;
|
||
|
ULONG SharedFirstLevel;
|
||
|
ULONG SharedSecondLevel;
|
||
|
ULONG StarveFirstLevel;
|
||
|
ULONG StarveSecondLevel;
|
||
|
ULONG WaitForExclusive;
|
||
|
ULONG OwnerTableExpands;
|
||
|
ULONG MaximumTableExpand;
|
||
|
LIST_ENTRY HashTable[RESOURCE_HASH_TABLE_SIZE];
|
||
|
} RESOURCE_PERFORMANCE_DATA;
|
||
|
typedef RESOURCE_PERFORMANCE_DATA *PRESOURCE_PERFORMANCE_DATA;
|
||
|
|
||
|
/* Executive rundown reference */
|
||
|
typedef struct _EX_RUNDOWN_REF {
|
||
|
union {
|
||
|
ULONG_PTR Count;
|
||
|
PVOID Ptr;
|
||
|
};
|
||
|
} EX_RUNDOWN_REF;
|
||
|
typedef EX_RUNDOWN_REF *PEX_RUNDOWN_REF;
|
||
|
|
||
|
/* Callback function */
|
||
|
typedef VOID (NTAPI CALLBACK_FUNCTION)( PVOID, PVOID, PVOID );
|
||
|
typedef CALLBACK_FUNCTION *PCALLBACK_FUNCTION;
|
||
|
|
||
|
/* Executive callback function */
|
||
|
typedef NTSTATUS (NTAPI EX_CALLBACK_FUNCTION)( PVOID, PVOID, PVOID );
|
||
|
typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION;
|
||
|
|
||
|
/* Registry notification classes */
|
||
|
typedef enum _REG_NOTIFY_CLASS {
|
||
|
RegNtDeleteKey = 0,
|
||
|
RegNtPreDeleteKey = RegNtDeleteKey,
|
||
|
RegNtSetValueKey = 1,
|
||
|
RegNtPreSetValueKey = RegNtSetValueKey,
|
||
|
RegNtDeleteValueKey = 2,
|
||
|
RegNtPreDeleteValueKey = RegNtDeleteValueKey,
|
||
|
RegNtSetInformationKey = 3,
|
||
|
RegNtPreSetInformationKey = RegNtSetInformationKey,
|
||
|
RegNtRenameKey = 4,
|
||
|
RegNtPreRenameKey = RegNtRenameKey,
|
||
|
RegNtEnumerateKey = 5,
|
||
|
RegNtPreEnumerateKey = RegNtEnumerateKey,
|
||
|
RegNtEnumerateValueKey = 6,
|
||
|
RegNtPreEnumerateValueKey = RegNtEnumerateValueKey,
|
||
|
RegNtQueryKey = 7,
|
||
|
RegNtPreQueryKey = RegNtQueryKey,
|
||
|
RegNtQueryValueKey = 8,
|
||
|
RegNtPreQueryValueKey = RegNtQueryValueKey,
|
||
|
RegNtQueryMultipleValueKey = 9,
|
||
|
RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey,
|
||
|
RegNtPreCreateKey = 10,
|
||
|
RegNtPostCreateKey = 11,
|
||
|
RegNtPreOpenKey = 12,
|
||
|
RegNtPostOpenKey = 13,
|
||
|
RegNtKeyHandleClose = 14,
|
||
|
RegNtPreKeyHandleClose = RegNtKeyHandleClose,
|
||
|
RegNtPostDeleteKey = 15,
|
||
|
RegNtPostSetValueKey = 16,
|
||
|
RegNtPostDeleteValueKey = 17,
|
||
|
RegNtPostSetInformationKey = 18,
|
||
|
RegNtPostRenameKey = 19,
|
||
|
RegNtPostEnumerateKey = 20,
|
||
|
RegNtPostEnumerateValueKey = 21,
|
||
|
RegNtPostQueryKey = 22,
|
||
|
RegNtPostQueryValueKey = 23,
|
||
|
RegNtPostQueryMultipleValueKey = 24,
|
||
|
RegNtPostKeyHandleClose = 25,
|
||
|
RegNtPreCreateKeyEx = 26,
|
||
|
RegNtPostCreateKeyEx = 27,
|
||
|
RegNtPreOpenKeyEx = 28,
|
||
|
RegNtPostOpenKeyEx = 29,
|
||
|
RegNtPreFlushKey = 30,
|
||
|
RegNtPostFlushKey = 31,
|
||
|
RegNtPreLoadKey = 32,
|
||
|
RegNtPostLoadKey = 33,
|
||
|
RegNtPreUnLoadKey = 34,
|
||
|
RegNtPostUnLoadKey = 35,
|
||
|
RegNtPreQueryKeySecurity = 36,
|
||
|
RegNtPostQueryKeySecurity = 37,
|
||
|
RegNtPreSetKeySecurity = 38,
|
||
|
RegNtPostSetKeySecurity = 39,
|
||
|
RegNtCallbackObjectContextCleanup = 40,
|
||
|
RegNtPreRestoreKey = 41,
|
||
|
RegNtPostRestoreKey = 42,
|
||
|
RegNtPreSaveKey = 43,
|
||
|
RegNtPostSaveKey = 44,
|
||
|
RegNtPreReplaceKey = 45,
|
||
|
RegNtPostReplaceKey = 46,
|
||
|
MaxRegNtNotifyClass = 47
|
||
|
} REG_NOTIFY_CLASS;
|
||
|
|
||
|
/* Registry delete key information */
|
||
|
typedef struct _REG_DELETE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_DELETE_KEY_INFORMATION;
|
||
|
typedef REG_DELETE_KEY_INFORMATION *PREG_DELETE_KEY_INFORMATION;
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef REG_DELETE_KEY_INFORMATION REG_FLUSH_KEY_INFORMATION;
|
||
|
typedef REG_DELETE_KEY_INFORMATION *PREG_FLUSH_KEY_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Registry set value key information */
|
||
|
typedef struct _REG_SET_VALUE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PUNICODE_STRING ValueName;
|
||
|
ULONG TitleIndex;
|
||
|
ULONG Type;
|
||
|
PVOID Data;
|
||
|
ULONG DataSize;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_SET_VALUE_KEY_INFORMATION;
|
||
|
typedef REG_SET_VALUE_KEY_INFORMATION *PREG_SET_VALUE_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry delete value key information */
|
||
|
typedef struct _REG_DELETE_VALUE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PUNICODE_STRING ValueName;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_DELETE_VALUE_KEY_INFORMATION;
|
||
|
typedef REG_DELETE_VALUE_KEY_INFORMATION *PREG_DELETE_VALUE_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry set information key information */
|
||
|
typedef struct _REG_SET_INFORMATION_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
KEY_SET_INFORMATION_CLASS KeySetInformationClass;
|
||
|
PVOID KeySetInformation;
|
||
|
ULONG KeySetInformationLength;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_SET_INFORMATION_KEY_INFORMATION;
|
||
|
typedef REG_SET_INFORMATION_KEY_INFORMATION *PREG_SET_INFORMATION_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry enumerate key information */
|
||
|
typedef struct _REG_ENUMERATE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
ULONG Index;
|
||
|
KEY_INFORMATION_CLASS KeyInformationClass;
|
||
|
PVOID KeyInformation;
|
||
|
ULONG Length;
|
||
|
PULONG ResultLength;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_ENUMERATE_KEY_INFORMATION;
|
||
|
typedef REG_ENUMERATE_KEY_INFORMATION *PREG_ENUMERATE_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry enumerate value key information */
|
||
|
typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
ULONG Index;
|
||
|
KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
|
||
|
PVOID KeyValueInformation;
|
||
|
ULONG Length;
|
||
|
PULONG ResultLength;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_ENUMERATE_VALUE_KEY_INFORMATION;
|
||
|
typedef REG_ENUMERATE_VALUE_KEY_INFORMATION *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry query key information */
|
||
|
typedef struct _REG_QUERY_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
KEY_INFORMATION_CLASS KeyInformationClass;
|
||
|
PVOID KeyInformation;
|
||
|
ULONG Length;
|
||
|
PULONG ResultLength;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_QUERY_KEY_INFORMATION;
|
||
|
typedef REG_QUERY_KEY_INFORMATION *PREG_QUERY_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry query value key information */
|
||
|
typedef struct _REG_QUERY_VALUE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PUNICODE_STRING ValueName;
|
||
|
KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
|
||
|
PVOID KeyValueInformation;
|
||
|
ULONG Length;
|
||
|
PULONG ResultLength;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_QUERY_VALUE_KEY_INFORMATION;
|
||
|
typedef REG_QUERY_VALUE_KEY_INFORMATION *PREG_QUERY_VALUE_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry query multiple value key information */
|
||
|
typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PKEY_VALUE_ENTRY ValueEntries;
|
||
|
ULONG EntryCount;
|
||
|
PVOID ValueBuffer;
|
||
|
PULONG BufferLength;
|
||
|
PULONG RequiredBufferLength;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
|
||
|
typedef REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry rename key information */
|
||
|
typedef struct _REG_RENAME_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PUNICODE_STRING NewName;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_RENAME_KEY_INFORMATION;
|
||
|
typedef REG_RENAME_KEY_INFORMATION *PREG_RENAME_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry key handle close information */
|
||
|
typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_KEY_HANDLE_CLOSE_INFORMATION;
|
||
|
typedef REG_KEY_HANDLE_CLOSE_INFORMATION *PREG_KEY_HANDLE_CLOSE_INFORMATION;
|
||
|
|
||
|
/* Registry create key information */
|
||
|
typedef struct _REG_CREATE_KEY_INFORMATION {
|
||
|
PUNICODE_STRING CompleteName;
|
||
|
PVOID RootObject;
|
||
|
PVOID ObjectType;
|
||
|
ULONG CreateOptions;
|
||
|
PUNICODE_STRING Class;
|
||
|
PVOID SecurityDescriptor;
|
||
|
PVOID SecurityQualityOfService;
|
||
|
ACCESS_MASK DesiredAccess;
|
||
|
ACCESS_MASK GrantedAccess;
|
||
|
PULONG Disposition;
|
||
|
PVOID *ResultObject;
|
||
|
PVOID CallContext;
|
||
|
PVOID RootObjectContext;
|
||
|
PVOID Transaction;
|
||
|
PVOID Reserved;
|
||
|
} REG_CREATE_KEY_INFORMATION;
|
||
|
typedef REG_CREATE_KEY_INFORMATION *PREG_CREATE_KEY_INFORMATION;
|
||
|
typedef REG_CREATE_KEY_INFORMATION REG_OPEN_KEY_INFORMATION;
|
||
|
typedef REG_CREATE_KEY_INFORMATION *PREG_OPEN_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry create key information (version 1) */
|
||
|
typedef struct _REG_CREATE_KEY_INFORMATION_V1 {
|
||
|
PUNICODE_STRING CompleteName;
|
||
|
PVOID RootObject;
|
||
|
PVOID ObjectType;
|
||
|
ULONG Options;
|
||
|
PUNICODE_STRING Class;
|
||
|
PVOID SecurityDescriptor;
|
||
|
PVOID SecurityQualityOfService;
|
||
|
ACCESS_MASK DesiredAccess;
|
||
|
ACCESS_MASK GrantedAccess;
|
||
|
PULONG Disposition;
|
||
|
PVOID *ResultObject;
|
||
|
PVOID CallContext;
|
||
|
PVOID RootObjectContext;
|
||
|
PVOID Transaction;
|
||
|
ULONG_PTR Version;
|
||
|
PUNICODE_STRING RemainingName;
|
||
|
ULONG Wow64Flags;
|
||
|
ULONG Attributes;
|
||
|
KPROCESSOR_MODE CheckAccessMode;
|
||
|
} REG_CREATE_KEY_INFORMATION_V1;
|
||
|
typedef REG_CREATE_KEY_INFORMATION_V1 REG_OPEN_KEY_INFORMATION_V1;
|
||
|
typedef REG_CREATE_KEY_INFORMATION_V1 *PREG_CREATE_KEY_INFORMATION_V1;
|
||
|
typedef REG_CREATE_KEY_INFORMATION_V1 *PREG_OPEN_KEY_INFORMATION_V1;
|
||
|
|
||
|
/* Registry post-operation information */
|
||
|
typedef struct _REG_POST_OPERATION_INFORMATION {
|
||
|
PVOID Object;
|
||
|
NTSTATUS Status;
|
||
|
PVOID PreInformation;
|
||
|
NTSTATUS ReturnStatus;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_POST_OPERATION_INFORMATION;
|
||
|
typedef REG_POST_OPERATION_INFORMATION *PREG_POST_OPERATION_INFORMATION;
|
||
|
|
||
|
/* Registry pre-create key information */
|
||
|
typedef struct _REG_PRE_CREATE_KEY_INFORMATION {
|
||
|
PUNICODE_STRING CompleteName;
|
||
|
} REG_PRE_CREATE_KEY_INFORMATION;
|
||
|
typedef REG_PRE_CREATE_KEY_INFORMATION *PREG_PRE_CREATE_KEY_INFORMATION;
|
||
|
typedef REG_PRE_CREATE_KEY_INFORMATION REG_PRE_OPEN_KEY_INFORMATION;
|
||
|
typedef REG_PRE_CREATE_KEY_INFORMATION *PREG_PRE_OPEN_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry post-create key information */
|
||
|
typedef struct _REG_POST_CREATE_KEY_INFORMATION {
|
||
|
PUNICODE_STRING CompleteName;
|
||
|
PVOID Object;
|
||
|
NTSTATUS Status;
|
||
|
} REG_POST_CREATE_KEY_INFORMATION;
|
||
|
typedef REG_POST_CREATE_KEY_INFORMATION *PREG_POST_CREATE_KEY_INFORMATION;
|
||
|
typedef REG_POST_CREATE_KEY_INFORMATION REG_POST_OPEN_KEY_INFORMATION;
|
||
|
typedef REG_POST_CREATE_KEY_INFORMATION *PREG_POST_OPEN_KEY_INFORMATION;
|
||
|
|
||
|
/* Registry load key information */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _REG_LOAD_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PUNICODE_STRING KeyName;
|
||
|
PUNICODE_STRING SourceFile;
|
||
|
ULONG Flags;
|
||
|
PVOID TrustClassObject;
|
||
|
PVOID UserEvent;
|
||
|
ACCESS_MASK DesiredAccess;
|
||
|
PHANDLE RootHandle;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_LOAD_KEY_INFORMATION;
|
||
|
typedef REG_LOAD_KEY_INFORMATION *PREG_LOAD_KEY_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Registry unload key information */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _REG_UNLOAD_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PVOID UserEvent;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_UNLOAD_KEY_INFORMATION;
|
||
|
typedef REG_UNLOAD_KEY_INFORMATION *PREG_UNLOAD_KEY_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Registry callback context cleanup information */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
|
||
|
typedef REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Registry query key security information */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PSECURITY_INFORMATION SecurityInformation;
|
||
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
||
|
PULONG Length;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_QUERY_KEY_SECURITY_INFORMATION;
|
||
|
typedef REG_QUERY_KEY_SECURITY_INFORMATION *PREG_QUERY_KEY_SECURITY_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Registry set key security information */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _REG_SET_KEY_SECURITY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PSECURITY_INFORMATION SecurityInformation;
|
||
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_SET_KEY_SECURITY_INFORMATION;
|
||
|
typedef REG_SET_KEY_SECURITY_INFORMATION *PREG_SET_KEY_SECURITY_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Registry restore key information */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _REG_RESTORE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
HANDLE FileHandle;
|
||
|
ULONG Flags;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_RESTORE_KEY_INFORMATION;
|
||
|
typedef REG_RESTORE_KEY_INFORMATION *PREG_RESTORE_KEY_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Registry save key information */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _REG_SAVE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
HANDLE FileHandle;
|
||
|
ULONG Format;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_SAVE_KEY_INFORMATION;
|
||
|
typedef REG_SAVE_KEY_INFORMATION *PREG_SAVE_KEY_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Registry replace key information */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _REG_REPLACE_KEY_INFORMATION {
|
||
|
PVOID Object;
|
||
|
PUNICODE_STRING OldFileName;
|
||
|
PUNICODE_STRING NewFileName;
|
||
|
PVOID CallContext;
|
||
|
PVOID ObjectContext;
|
||
|
PVOID Reserved;
|
||
|
} REG_REPLACE_KEY_INFORMATION;
|
||
|
typedef REG_REPLACE_KEY_INFORMATION *PREG_REPLACE_KEY_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Memory management system sizes */
|
||
|
typedef enum _MM_SYSTEMSIZE {
|
||
|
MmSmallSystem = 0,
|
||
|
MmMediumSystem = 1,
|
||
|
MmLargeSystem = 2
|
||
|
} MM_SYSTEMSIZE;
|
||
|
|
||
|
/* Memory management page priorities */
|
||
|
typedef enum _MM_PAGE_PRIORITY {
|
||
|
LowPagePriority = 0,
|
||
|
NormalPagePriority = 16,
|
||
|
HighPagePriority = 32
|
||
|
} MM_PAGE_PRIORITY;
|
||
|
|
||
|
/* Memory management callbacks */
|
||
|
typedef NTSTATUS (NTAPI *PMM_DLL_INITIALIZE)( PUNICODE_STRING );
|
||
|
typedef NTSTATUS (NTAPI *PMM_DLL_UNLOAD)( VOID );
|
||
|
|
||
|
/* Security operation codes */
|
||
|
typedef enum _SECURITY_OPERATION_CODE {
|
||
|
SetSecurityDescriptor = 0,
|
||
|
QuerySecurityDescriptor = 1,
|
||
|
DeleteSecurityDescriptor = 2,
|
||
|
AssignSecurityDescriptor = 3
|
||
|
} SECURITY_OPERATION_CODE;
|
||
|
typedef SECURITY_OPERATION_CODE *PSECURITY_OPERATION_CODE;
|
||
|
|
||
|
/* Security subject context */
|
||
|
typedef struct _SECURITY_SUBECT_CONTEXT {
|
||
|
PACCESS_TOKEN ClientToken;
|
||
|
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
|
||
|
PACCESS_TOKEN PrimaryToken;
|
||
|
PVOID ProcessAuditId;
|
||
|
} SECURITY_SUBJECT_CONTEXT;
|
||
|
typedef SECURITY_SUBJECT_CONTEXT *PSECURITY_SUBJECT_CONTEXT;
|
||
|
|
||
|
/* Initial privilege set */
|
||
|
typedef struct _INITIAL_PRIVILEGE_SET {
|
||
|
ULONG PrivilegeCount;
|
||
|
ULONG Control;
|
||
|
LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
|
||
|
} INITIAL_PRIVILEGE_SET;
|
||
|
typedef INITIAL_PRIVILEGE_SET *PINITIAL_PRIVILEGE_SET;
|
||
|
|
||
|
/* Access state */
|
||
|
typedef struct _ACCESS_STATE {
|
||
|
LUID OperationID;
|
||
|
BOOLEAN SecurityEvaluated;
|
||
|
BOOLEAN GenerateAudit;
|
||
|
BOOLEAN GenerateOnClose;
|
||
|
BOOLEAN PrivilegesAllocated;
|
||
|
ULONG Flags;
|
||
|
ACCESS_MASK RemainingDesiredAccess;
|
||
|
ACCESS_MASK PreviouslyGrantedAccess;
|
||
|
ACCESS_MASK OriginalDesiredAccess;
|
||
|
SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
|
||
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
||
|
PVOID AuxData;
|
||
|
union {
|
||
|
INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
|
||
|
PRIVILEGE_SET PrivilegeSet;
|
||
|
} Privileges;
|
||
|
BOOLEAN AuditPrivileges;
|
||
|
UNICODE_STRING ObjectName;
|
||
|
UNICODE_STRING ObjectTypeName;
|
||
|
} ACCESS_STATE;
|
||
|
typedef ACCESS_STATE *PACCESS_STATE;
|
||
|
|
||
|
/* NTFS dereference exported security descriptor callback */
|
||
|
typedef (NTAPI *PNTFS_DEREF_EXPORTED_SECURITY_DESCRIPTOR)( PVOID, PSECURITY_DESCRIPTOR );
|
||
|
|
||
|
/* IoCreateFile() types */
|
||
|
typedef enum _CREATE_FILE_TYPE {
|
||
|
CreateFileTypeNone = 0,
|
||
|
CreateFileTypeNamedPipe = 1,
|
||
|
CreateFileTypeMailslot = 2
|
||
|
} CREATE_FILE_TYPE;
|
||
|
|
||
|
/* I/O callbacks */
|
||
|
typedef VOID (NTAPI IO_DPC_ROUTINE)( PKDPC, struct _DEVICE_OBJECT *, struct _IRP *, PVOID );
|
||
|
typedef VOID (NTAPI IO_TIMER_ROUTINE)( struct _DEVICE_OBJECT *, PVOID );
|
||
|
typedef IO_DPC_ROUTINE *PIO_DPC_ROUTINE;
|
||
|
typedef IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
|
||
|
|
||
|
/* Driver callbacks */
|
||
|
typedef NTSTATUS (NTAPI DRIVER_INITIALIZE)( struct _DRIVER_OBJECT *, PUNICODE_STRING );
|
||
|
typedef VOID (NTAPI DRIVER_CANCEL)( struct _DEVICE_OBJECT *, struct _IRP * );
|
||
|
typedef NTSTATUS (NTAPI DRIVER_DISPATCH)( struct _DEVICE_OBJECT *, struct _IRP * );
|
||
|
typedef VOID (NTAPI DRIVER_STARTIO)( struct _DEVICE_OBJECT *, struct _IRP * );
|
||
|
typedef VOID (NTAPI DRIVER_UNLOAD)( struct _DRIVER_OBJECT * );
|
||
|
typedef NTSTATUS (NTAPI DRIVER_ADD_DEVICE)( struct _DRIVER_OBJECT *, struct _DEVICE_OBJECT * );
|
||
|
typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE;
|
||
|
typedef DRIVER_CANCEL *PDRIVER_CANCEL;
|
||
|
typedef DRIVER_DISPATCH *PDRIVER_DISPATCH;
|
||
|
typedef DRIVER_STARTIO *PDRIVER_STARTIO;
|
||
|
typedef DRIVER_UNLOAD *PDRIVER_UNLOAD;
|
||
|
typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE;
|
||
|
|
||
|
/* Fast I/O callbacks */
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_CHECK_IF_POSSIBLE)( struct _FILE_OBJECT *, PLARGE_INTEGER, ULONG, BOOLEAN, ULONG, BOOLEAN, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_READ)( struct _FILE_OBJECT *, PLARGE_INTEGER, ULONG, BOOLEAN, ULONG, PVOID, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_WRITE)( struct _FILE_OBJECT *, PLARGE_INTEGER, ULONG, BOOLEAN, ULONG, PVOID, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_QUERY_BASIC_INFO)( struct _FILE_OBJECT *, BOOLEAN, PFILE_BASIC_INFORMATION, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_QUERY_STANDARD_INFO)( struct _FILE_OBJECT *, BOOLEAN, PFILE_STANDARD_INFORMATION, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_LOCK)( struct _FILE_OBJECT *, PLARGE_INTEGER, PLARGE_INTEGER, PEPROCESS, ULONG, BOOLEAN, BOOLEAN, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_UNLOCK_SINGLE)( struct _FILE_OBJECT *, PLARGE_INTEGER, PLARGE_INTEGER, PEPROCESS, ULONG, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_UNLOCK_ALL)( struct _FILE_OBJECT *, PEPROCESS, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_UNLOCK_ALL_BY_KEY)( struct _FILE_OBJECT *, PVOID, ULONG, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_DEVICE_CONTROL)( struct _FILE_OBJECT *, BOOLEAN, PVOID, ULONG, PVOID, ULONG, ULONG, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef VOID (NTAPI FAST_IO_ACQUIRE_FILE)( struct _FILE_OBJECT * );
|
||
|
typedef VOID (NTAPI FAST_IO_RELEASE_FILE)( struct _FILE_OBJECT * );
|
||
|
typedef VOID (NTAPI FAST_IO_DETACH_DEVICE)( struct _DEVICE_OBJECT *, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_QUERY_NETWORK_OPEN_INFO)( struct _FILE_OBJECT *, BOOLEAN, struct _FILE_NETWORK_OPEN_INFORMATION *, struct _IO_STATUS_BLOCK *, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_MDL_READ)( struct _FILE_OBJECT *, PLARGE_INTEGER, ULONG, ULONG, PMDL *, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_MDL_READ_COMPLETE)( struct _FILE_OBJECT *, PMDL, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_PREPARE_MDL_WRITE)( struct _FILE_OBJECT *, PLARGE_INTEGER, ULONG, ULONG, PMDL *, PIO_STATUS_BLOCK, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_MDL_WRITE_COMPLETE)( struct _FILE_OBJECT *, PLARGE_INTEGER, PMDL, struct _DEVICE_OBJECT * );
|
||
|
typedef NTSTATUS (NTAPI FAST_IO_ACQUIRE_FOR_MOD_WRITE)( struct _FILE_OBJECT *, PLARGE_INTEGER, struct _ERESOURCE **, struct _DEVICE_OBJECT * );
|
||
|
typedef NTSTATUS (NTAPI FAST_IO_RELEASE_FOR_MOD_WRITE)( struct _FILE_OBJECT *, struct _ERESOURCE *, struct _DEVICE_OBJECT * );
|
||
|
typedef NTSTATUS (NTAPI FAST_IO_ACQUIRE_FOR_CCFLUSH)( struct _FILE_OBJECT *, struct _DEVICE_OBJECT * );
|
||
|
typedef NTSTATUS (NTAPI FAST_IO_RELEASE_FOR_CCFLUSH)( struct _FILE_OBJECT *, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_READ_COMPRESSED)( struct _FILE_OBJECT *, PLARGE_INTEGER, ULONG, ULONG, PVOID, PMDL *, PIO_STATUS_BLOCK, struct _COMPRESSED_DATA_INFO *, ULONG, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_WRITE_COMPRESSED)( struct _FILE_OBJECT *, PLARGE_INTEGER, ULONG, ULONG, PVOID, PMDL *, PIO_STATUS_BLOCK, struct _COMPRESSED_DATA_INFO *, ULONG, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_MDL_READ_COMPLETE_COMPRESSED)( struct _FILE_OBJECT *, PMDL, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( struct _FILE_OBJECT *, PLARGE_INTEGER, PMDL, struct _DEVICE_OBJECT * );
|
||
|
typedef BOOLEAN (NTAPI FAST_IO_QUERY_OPEN)( struct _IRP *, PFILE_NETWORK_OPEN_INFORMATION, struct _DEVICE_OBJECT * );
|
||
|
typedef FAST_IO_CHECK_IF_POSSIBLE *PFAST_IO_CHECK_IF_POSSIBLE;
|
||
|
typedef FAST_IO_READ *PFAST_IO_READ;
|
||
|
typedef FAST_IO_WRITE *PFAST_IO_WRITE;
|
||
|
typedef FAST_IO_QUERY_BASIC_INFO *PFAST_IO_QUERY_BASIC_INFO;
|
||
|
typedef FAST_IO_QUERY_STANDARD_INFO *PFAST_IO_QUERY_STANDARD_INFO;
|
||
|
typedef FAST_IO_LOCK *PFAST_IO_LOCK;
|
||
|
typedef FAST_IO_UNLOCK_SINGLE *PFAST_IO_UNLOCK_SINGLE;
|
||
|
typedef FAST_IO_UNLOCK_ALL *PFAST_IO_UNLOCK_ALL;
|
||
|
typedef FAST_IO_UNLOCK_ALL_BY_KEY *PFAST_IO_UNLOCK_ALL_BY_KEY;
|
||
|
typedef FAST_IO_DEVICE_CONTROL *PFAST_IO_DEVICE_CONTROL;
|
||
|
typedef FAST_IO_ACQUIRE_FILE *PFAST_IO_ACQUIRE_FILE;
|
||
|
typedef FAST_IO_RELEASE_FILE *PFAST_IO_RELEASE_FILE;
|
||
|
typedef FAST_IO_DETACH_DEVICE *PFAST_IO_DETACH_DEVICE;
|
||
|
typedef FAST_IO_QUERY_NETWORK_OPEN_INFO *PFAST_IO_QUERY_NETWORK_OPEN_INFO;
|
||
|
typedef FAST_IO_MDL_READ *PFAST_IO_MDL_READ;
|
||
|
typedef FAST_IO_MDL_READ_COMPLETE *PFAST_IO_MDL_READ_COMPLETE;
|
||
|
typedef FAST_IO_PREPARE_MDL_WRITE *PFAST_IO_PREPARE_MDL_WRITE;
|
||
|
typedef FAST_IO_MDL_WRITE_COMPLETE *PFAST_IO_MDL_WRITE_COMPLETE;
|
||
|
typedef FAST_IO_ACQUIRE_FOR_MOD_WRITE *PFAST_IO_ACQUIRE_FOR_MOD_WRITE;
|
||
|
typedef FAST_IO_RELEASE_FOR_MOD_WRITE *PFAST_IO_RELEASE_FOR_MOD_WRITE;
|
||
|
typedef FAST_IO_ACQUIRE_FOR_CCFLUSH *PFAST_IO_ACQUIRE_FOR_CCFLUSH;
|
||
|
typedef FAST_IO_RELEASE_FOR_CCFLUSH *PFAST_IO_RELEASE_FOR_CCFLUSH;
|
||
|
typedef FAST_IO_READ_COMPRESSED *PFAST_IO_READ_COMPRESSED;
|
||
|
typedef FAST_IO_WRITE_COMPRESSED *PFAST_IO_WRITE_COMPRESSED;
|
||
|
typedef FAST_IO_MDL_READ_COMPLETE_COMPRESSED *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED;
|
||
|
typedef FAST_IO_MDL_WRITE_COMPLETE_COMPRESSED *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED;
|
||
|
typedef FAST_IO_QUERY_OPEN *PFAST_IO_QUERY_OPEN;
|
||
|
|
||
|
/* Fast I/O dispatch table */
|
||
|
typedef struct _FAST_IO_DISPATCH {
|
||
|
ULONG SizeOfFastIoDispatch;
|
||
|
PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible;
|
||
|
PFAST_IO_READ FastIoRead;
|
||
|
PFAST_IO_WRITE FastIoWrite;
|
||
|
PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo;
|
||
|
PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo;
|
||
|
PFAST_IO_LOCK FastIoLock;
|
||
|
PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle;
|
||
|
PFAST_IO_UNLOCK_ALL FastIoUnlockAll;
|
||
|
PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey;
|
||
|
PFAST_IO_DEVICE_CONTROL FastIoDeviceControl;
|
||
|
PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection;
|
||
|
PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection;
|
||
|
PFAST_IO_DETACH_DEVICE FastIoDetachDevice;
|
||
|
PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo;
|
||
|
PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite;
|
||
|
PFAST_IO_MDL_READ MdlRead;
|
||
|
PFAST_IO_MDL_READ_COMPLETE MdlReadComplete;
|
||
|
PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite;
|
||
|
PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete;
|
||
|
PFAST_IO_READ_COMPRESSED FastIoReadCompressed;
|
||
|
PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed;
|
||
|
PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed;
|
||
|
PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed;
|
||
|
PFAST_IO_QUERY_OPEN FastIoQueryOpen;
|
||
|
PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite;
|
||
|
PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush;
|
||
|
PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush;
|
||
|
} FAST_IO_DISPATCH;
|
||
|
typedef FAST_IO_DISPATCH *PFAST_IO_DISPATCH;
|
||
|
|
||
|
/* I/O allocation actions */
|
||
|
typedef enum _IO_ALLOCATION_ACTION {
|
||
|
KeepObject = 1,
|
||
|
DeallocateObject = 2,
|
||
|
DeallocateObjectKeepRegisters = 3
|
||
|
} IO_ALLOCATION_ACTION;
|
||
|
typedef IO_ALLOCATION_ACTION *PIO_ALLOCATION_ACTION;
|
||
|
|
||
|
/* Driver control callback */
|
||
|
typedef IO_ALLOCATION_ACTION (NTAPI DRIVER_CONTROL)( struct _DEVICE_OBJECT *, struct _IRP *, PVOID, PVOID );
|
||
|
typedef DRIVER_CONTROL *PDRIVER_CONTROL;
|
||
|
|
||
|
/* I/O security context */
|
||
|
typedef struct _IO_SECURITY_CONTEXT {
|
||
|
PSECURITY_QUALITY_OF_SERVICE SecurityQos;
|
||
|
PACCESS_STATE AccessState;
|
||
|
ACCESS_MASK DesiredAccess;
|
||
|
ULONG FullCreateOptions;
|
||
|
} IO_SECURITY_CONTEXT;
|
||
|
typedef IO_SECURITY_CONTEXT *PIO_SECURITY_CONTEXT;
|
||
|
|
||
|
/* Volume parameter block */
|
||
|
typedef struct _VPB {
|
||
|
CSHORT Type;
|
||
|
CSHORT Size;
|
||
|
USHORT Flags;
|
||
|
USHORT VolumeLabelLength;
|
||
|
struct _DEVICE_OBJECT *DeviceObject;
|
||
|
struct _DEVICE_OBJECT *RealDevice;
|
||
|
ULONG SerialNumber;
|
||
|
ULONG ReferenceCount;
|
||
|
WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof( WCHAR )];
|
||
|
} VPB;
|
||
|
typedef VPB *PVPB;
|
||
|
|
||
|
/* Wait context block */
|
||
|
typedef struct _WAIT_CONTEXT_BLOCK {
|
||
|
KDEVICE_QUEUE_ENTRY WaitQueueEntry;
|
||
|
PDRIVER_CONTROL DeviceRoutine;
|
||
|
PVOID DeviceContext;
|
||
|
ULONG NumberOfMapRegisters;
|
||
|
PVOID DeviceObject;
|
||
|
PVOID CurrentIrp;
|
||
|
PKDPC BufferChainingDpc;
|
||
|
} WAIT_CONTEXT_BLOCK;
|
||
|
typedef WAIT_CONTEXT_BLOCK *PWAIT_CONTEXT_BLOCK;
|
||
|
|
||
|
/* Device object */
|
||
|
typedef struct _DEVICE_OBJECT {
|
||
|
CSHORT Type;
|
||
|
USHORT Size;
|
||
|
LONG ReferenceCount;
|
||
|
struct _DRIVER_OBJECT *DriverObject;
|
||
|
struct _DEVICE_OBJECT *NextDevice;
|
||
|
struct _DEVICE_OBJECT *AttachedDevice;
|
||
|
struct _IRP *CurrentIrp;
|
||
|
PIO_TIMER Timer;
|
||
|
ULONG Flags;
|
||
|
ULONG Characteristics;
|
||
|
PVPB Vpb;
|
||
|
PVOID DeviceExtension;
|
||
|
DEVICE_TYPE DeviceType;
|
||
|
CCHAR StackSize;
|
||
|
union {
|
||
|
LIST_ENTRY ListEntry;
|
||
|
WAIT_CONTEXT_BLOCK Wcb;
|
||
|
} Queue;
|
||
|
ULONG AlignmentRequirement;
|
||
|
KDEVICE_QUEUE DeviceQueue;
|
||
|
KDPC Dpc;
|
||
|
ULONG ActiveThreadCount;
|
||
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
||
|
KEVENT DeviceLock;
|
||
|
USHORT SectorSize;
|
||
|
USHORT Spare1;
|
||
|
struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
|
||
|
PVOID Reserved;
|
||
|
} DEVICE_OBJECT;
|
||
|
typedef DEVICE_OBJECT *PDEVICE_OBJECT;
|
||
|
|
||
|
/* Device object extension */
|
||
|
typedef struct _DEVOBJ_EXTENSION {
|
||
|
CSHORT Type;
|
||
|
USHORT Size;
|
||
|
PDEVICE_OBJECT DeviceObject;
|
||
|
} DEVOBJ_EXTENSION;
|
||
|
typedef DEVOBJ_EXTENSION *PDEVOBJ_EXTENSION;
|
||
|
|
||
|
/* Driver extension */
|
||
|
typedef struct _DRIVER_EXTENSION {
|
||
|
struct _DRIVER_OBJECT *DriverObject;
|
||
|
PDRIVER_ADD_DEVICE AddDevice;
|
||
|
ULONG Count;
|
||
|
UNICODE_STRING ServiceKeyName;
|
||
|
} DRIVER_EXTENSION;
|
||
|
typedef DRIVER_EXTENSION *PDRIVER_EXTENSION;
|
||
|
|
||
|
/* Driver object */
|
||
|
typedef struct _DRIVER_OBJECT {
|
||
|
CSHORT Type;
|
||
|
CSHORT Size;
|
||
|
PDEVICE_OBJECT DeviceObject;
|
||
|
ULONG Flags;
|
||
|
PVOID DriverStart;
|
||
|
ULONG DriverSize;
|
||
|
PVOID DriverSection;
|
||
|
PDRIVER_EXTENSION DriverExtension;
|
||
|
UNICODE_STRING DriverName;
|
||
|
PUNICODE_STRING HardwareDatabase;
|
||
|
PFAST_IO_DISPATCH FastIoDispatch;
|
||
|
PDRIVER_INITIALIZE DriverInit;
|
||
|
PDRIVER_STARTIO DriverStartIo;
|
||
|
PDRIVER_UNLOAD DriverUnload;
|
||
|
PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
|
||
|
} DRIVER_OBJECT;
|
||
|
typedef DRIVER_OBJECT *PDRIVER_OBJECT;
|
||
|
|
||
|
/* Section object pointers */
|
||
|
typedef struct _SECTION_OBJECT_POINTERS {
|
||
|
PVOID DataSectionObject;
|
||
|
PVOID SharedCacheMap;
|
||
|
PVOID ImageSectionObject;
|
||
|
} SECTION_OBJECT_POINTERS;
|
||
|
typedef SECTION_OBJECT_POINTERS *PSECTION_OBJECT_POINTERS;
|
||
|
|
||
|
/* I/O completion context */
|
||
|
typedef struct _IO_COMPLETION_CONTEXT {
|
||
|
PVOID Port;
|
||
|
PVOID Key;
|
||
|
} IO_COMPLETION_CONTEXT;
|
||
|
typedef IO_COMPLETION_CONTEXT *PIO_COMPLETION_CONTEXT;
|
||
|
|
||
|
/* File object */
|
||
|
typedef struct _FILE_OBJECT {
|
||
|
CSHORT Type;
|
||
|
CSHORT Size;
|
||
|
PDEVICE_OBJECT DeviceObject;
|
||
|
PVPB Vpb;
|
||
|
PVOID FsContext;
|
||
|
PVOID FsContext2;
|
||
|
PSECTION_OBJECT_POINTERS SectionObjectPointer;
|
||
|
PVOID PrivateCacheMap;
|
||
|
NTSTATUS FinalStatus;
|
||
|
struct _FILE_OBJECT *RelatedFileObject;
|
||
|
BOOLEAN LockOperation;
|
||
|
BOOLEAN DeletePending;
|
||
|
BOOLEAN ReadAccess;
|
||
|
BOOLEAN WriteAccess;
|
||
|
BOOLEAN DeleteAccess;
|
||
|
BOOLEAN SharedRead;
|
||
|
BOOLEAN SharedWrite;
|
||
|
BOOLEAN SharedDelete;
|
||
|
ULONG Flags;
|
||
|
UNICODE_STRING FileName;
|
||
|
LARGE_INTEGER CurrentByteOffset;
|
||
|
ULONG Waiters;
|
||
|
ULONG Busy;
|
||
|
PVOID LastLock;
|
||
|
KEVENT Lock;
|
||
|
KEVENT Event;
|
||
|
PIO_COMPLETION_CONTEXT CompletionContext;
|
||
|
KSPIN_LOCK IrpListLock;
|
||
|
LIST_ENTRY IrpList;
|
||
|
PVOID FileObjectExtension;
|
||
|
} FILE_OBJECT;
|
||
|
typedef FILE_OBJECT *PFILE_OBJECT;
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef FILE_OBJECT LOG_FILE_OBJECT;
|
||
|
typedef FILE_OBJECT *PLOG_FILE_OBJECT;
|
||
|
typedef FILE_OBJECT **PPLOG_FILE_OBJECT;
|
||
|
#endif
|
||
|
|
||
|
/* I/O request packet */
|
||
|
typedef struct _IRP {
|
||
|
CSHORT Type;
|
||
|
USHORT Size;
|
||
|
PMDL MdlAddress;
|
||
|
ULONG Flags;
|
||
|
union {
|
||
|
struct _IRP *MasterIrp;
|
||
|
LONG IrpCount;
|
||
|
PVOID SystemBuffer;
|
||
|
} AssociatedIrp;
|
||
|
LIST_ENTRY ThreadListEntry;
|
||
|
IO_STATUS_BLOCK IoStatus;
|
||
|
KPROCESSOR_MODE RequestorMode;
|
||
|
BOOLEAN PendingReturned;
|
||
|
CHAR StackCount;
|
||
|
CHAR CurrentLocation;
|
||
|
BOOLEAN Cancel;
|
||
|
KIRQL CancelIrql;
|
||
|
CCHAR ApcEnvironment;
|
||
|
UCHAR AllocationFlags;
|
||
|
PIO_STATUS_BLOCK UserIosb;
|
||
|
PKEVENT UserEvent;
|
||
|
union {
|
||
|
struct {
|
||
|
union {
|
||
|
PIO_APC_ROUTINE UserApcRoutine;
|
||
|
PVOID IssuingProcess;
|
||
|
};
|
||
|
PVOID UserApcContext;
|
||
|
} AsynchronousParameters;
|
||
|
LARGE_INTEGER AllocationSize;
|
||
|
} Overlay;
|
||
|
PDRIVER_CANCEL CancelRoutine;
|
||
|
PVOID UserBuffer;
|
||
|
union {
|
||
|
struct {
|
||
|
union {
|
||
|
KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
|
||
|
struct {
|
||
|
PVOID DriverContext[4];
|
||
|
};
|
||
|
};
|
||
|
PETHREAD Thread;
|
||
|
PCHAR AuxiliaryBuffer;
|
||
|
struct {
|
||
|
LIST_ENTRY ListEntry;
|
||
|
union {
|
||
|
struct _IO_STACK_LOCATION *CurrentStackLocation;
|
||
|
ULONG PacketType;
|
||
|
};
|
||
|
};
|
||
|
PFILE_OBJECT OriginalFileObject;
|
||
|
} Overlay;
|
||
|
KAPC Apc;
|
||
|
PVOID CompletionKey;
|
||
|
} Tail;
|
||
|
} IRP;
|
||
|
typedef IRP *PIRP;
|
||
|
|
||
|
/* I/O completion routine */
|
||
|
typedef NTSTATUS (NTAPI IO_COMPLETION_ROUTINE)( PDEVICE_OBJECT, PIRP, PVOID );
|
||
|
typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE;
|
||
|
|
||
|
/* Device relation types */
|
||
|
typedef enum _DEVICE_RELATION_TYPE {
|
||
|
BusRelations = 0,
|
||
|
EjectionRelations = 1,
|
||
|
PowerRelations = 2,
|
||
|
RemovalRelations = 3,
|
||
|
TargetDeviceRelation = 4,
|
||
|
SingleBusRelations = 5,
|
||
|
TransportRelations = 6
|
||
|
} DEVICE_RELATION_TYPE;
|
||
|
typedef DEVICE_RELATION_TYPE *PDEVICE_RELATION_TYPE;
|
||
|
|
||
|
/* Device relations */
|
||
|
typedef struct _DEVICE_RELATIONS {
|
||
|
ULONG Count;
|
||
|
PDEVICE_OBJECT Objects[1];
|
||
|
} DEVICE_RELATIONS;
|
||
|
typedef DEVICE_RELATIONS *PDEVICE_RELATIONS;
|
||
|
|
||
|
/* Device usage notification types */
|
||
|
typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
|
||
|
DeviceUsageTypeUndefined = 0,
|
||
|
DeviceUsageTypePaging = 1,
|
||
|
DeviceUsageTypeHibernation = 2,
|
||
|
DeviceUsageTypeDumpFile = 3
|
||
|
} DEVICE_USAGE_NOTIFICATION_TYPE;
|
||
|
|
||
|
/* Interface */
|
||
|
typedef struct _INTERFACE {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PVOID Context;
|
||
|
PINTERFACE_REFERENCE InterfaceReference;
|
||
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
||
|
} INTERFACE;
|
||
|
typedef INTERFACE *PINTERFACE;
|
||
|
|
||
|
/* Device capabilities */
|
||
|
typedef struct _DEVICE_CAPABILITIES {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
ULONG DeviceD1 : 1;
|
||
|
ULONG DeviceD2 : 1;
|
||
|
ULONG LockSupported : 1;
|
||
|
ULONG EjectSupported : 1;
|
||
|
ULONG Removable : 1;
|
||
|
ULONG DockDevice : 1;
|
||
|
ULONG UniqueID : 1;
|
||
|
ULONG SilentInstall : 1;
|
||
|
ULONG RawDeviceOK : 1;
|
||
|
ULONG SurpriseRemovalOK : 1;
|
||
|
ULONG WakeFromD0 : 1;
|
||
|
ULONG WakeFromD1 : 1;
|
||
|
ULONG WakeFromD2 : 1;
|
||
|
ULONG WakeFromD3 : 1;
|
||
|
ULONG HardwareDisabled : 1;
|
||
|
ULONG NonDynamic : 1;
|
||
|
ULONG WarmEjectSupported : 1;
|
||
|
ULONG NoDisplayInUI : 1;
|
||
|
ULONG Reserved1 : 1;
|
||
|
ULONG Reserved : 13;
|
||
|
ULONG Address;
|
||
|
ULONG UINumber;
|
||
|
DEVICE_POWER_STATE DeviceState[POWER_SYSTEM_MAXIMUM];
|
||
|
SYSTEM_POWER_STATE SystemWake;
|
||
|
DEVICE_POWER_STATE DeviceWake;
|
||
|
ULONG D1Latency;
|
||
|
ULONG D2Latency;
|
||
|
ULONG D3Latency;
|
||
|
} DEVICE_CAPABILITIES;
|
||
|
typedef DEVICE_CAPABILITIES *PDEVICE_CAPABILITIES;
|
||
|
|
||
|
/* Power sequence */
|
||
|
typedef struct _POWER_SEQUENCE {
|
||
|
ULONG SequenceD1;
|
||
|
ULONG SequenceD2;
|
||
|
ULONG SequenceD3;
|
||
|
} POWER_SEQUENCE;
|
||
|
typedef POWER_SEQUENCE *PPOWER_SEQUENCE;
|
||
|
|
||
|
/* Bus query identifier types */
|
||
|
typedef enum {
|
||
|
BusQueryDeviceID = 0,
|
||
|
BusQueryHardwareIDs = 1,
|
||
|
BusQueryCompatibleIDs = 2,
|
||
|
BusQueryInstanceIDs = 3,
|
||
|
BusQueryDeviceSerialNumber = 4,
|
||
|
BusQueryContainerID = 5
|
||
|
} BUS_QUERY_ID_TYPE;
|
||
|
typedef BUS_QUERY_ID_TYPE *PBUS_QUERY_ID_TYPE;
|
||
|
|
||
|
/* Device text types */
|
||
|
typedef enum {
|
||
|
DeviceTextDescription = 0,
|
||
|
DeviceTextLocationInformation = 1
|
||
|
} DEVICE_TEXT_TYPE;
|
||
|
typedef DEVICE_TEXT_TYPE *PDEVICE_TEXT_TYPE;
|
||
|
|
||
|
/* I/O stack locations */
|
||
|
#include <pshpack4.h>
|
||
|
typedef struct _IO_STACK_LOCATION {
|
||
|
UCHAR MajorFunction;
|
||
|
UCHAR MinorFunction;
|
||
|
UCHAR Flags;
|
||
|
UCHAR Control;
|
||
|
union {
|
||
|
struct {
|
||
|
PIO_SECURITY_CONTEXT SecurityContext;
|
||
|
ULONG Options;
|
||
|
USHORT FileAttributes;
|
||
|
USHORT ShareAccess;
|
||
|
ULONG EaLength;
|
||
|
} Create;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
ULONG Key;
|
||
|
LARGE_INTEGER ByteOffset;
|
||
|
} Read;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
ULONG Key;
|
||
|
LARGE_INTEGER ByteOffset;
|
||
|
} Write;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
PUNICODE_STRING FileName;
|
||
|
FILE_INFORMATION_CLASS FileInformationClass;
|
||
|
ULONG FileIndex;
|
||
|
} QueryDirectory;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
ULONG CompletionFilter;
|
||
|
} NotifyDirectory;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
FILE_INFORMATION_CLASS FileInformationClass;
|
||
|
} QueryFile;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
FILE_INFORMATION_CLASS FileInformationClass;
|
||
|
PFILE_OBJECT FileObject;
|
||
|
union {
|
||
|
struct {
|
||
|
BOOLEAN ReplaceIfExists;
|
||
|
BOOLEAN AdvanceOnly;
|
||
|
};
|
||
|
ULONG ClusterCount;
|
||
|
HANDLE DeleteHandle;
|
||
|
};
|
||
|
} SetFile;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
PVOID EaList;
|
||
|
ULONG EaListLength;
|
||
|
ULONG EaIndex;
|
||
|
} QueryEa;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
} SetEa;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
FS_INFORMATION_CLASS FsInformationClass;
|
||
|
} QueryVolume;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
FS_INFORMATION_CLASS FsInformationClass;
|
||
|
} SetVolume;
|
||
|
struct {
|
||
|
ULONG OutputBufferLength;
|
||
|
ULONG InputBufferLength;
|
||
|
ULONG FsControlCode;
|
||
|
PVOID Type3InputBuffer;
|
||
|
} FileSystemControl;
|
||
|
struct {
|
||
|
PLARGE_INTEGER Length;
|
||
|
ULONG Key;
|
||
|
LARGE_INTEGER ByteOffset;
|
||
|
} LockControl;
|
||
|
struct {
|
||
|
ULONG OutputBufferLength;
|
||
|
ULONG InputBufferLength;
|
||
|
ULONG IoControlCode;
|
||
|
PVOID Type3InputBuffer;
|
||
|
} DeviceIoControl;
|
||
|
struct {
|
||
|
SECURITY_INFORMATION SecurityInformation;
|
||
|
ULONG Length;
|
||
|
} QuerySecurity;
|
||
|
struct {
|
||
|
SECURITY_INFORMATION SecurityInformation;
|
||
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
||
|
} SetSecurity;
|
||
|
struct {
|
||
|
PVPB Vpb;
|
||
|
PDEVICE_OBJECT DeviceObject;
|
||
|
} MountVolume;
|
||
|
struct {
|
||
|
PVPB Vpb;
|
||
|
PDEVICE_OBJECT DeviceObject;
|
||
|
} VerifyVolume;
|
||
|
struct {
|
||
|
struct _SCSI_REQUEST_BLOCK *Srb;
|
||
|
} Scsi;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
PSID StartSid;
|
||
|
PFILE_GET_QUOTA_INFORMATION SidList;
|
||
|
ULONG SidListLength;
|
||
|
} QueryQuota;
|
||
|
struct {
|
||
|
ULONG Length;
|
||
|
} SetQuota;
|
||
|
struct {
|
||
|
DEVICE_RELATION_TYPE Type;
|
||
|
} QueryDeviceRelations;
|
||
|
struct {
|
||
|
CONST GUID *InterfaceType;
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PINTERFACE Interface;
|
||
|
PVOID InterfaceSpecificData;
|
||
|
} QueryInterface;
|
||
|
struct {
|
||
|
PDEVICE_CAPABILITIES Capabilities;
|
||
|
} DeviceCapabilities;
|
||
|
struct {
|
||
|
PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
|
||
|
} FilterResourceRequirements;
|
||
|
struct {
|
||
|
ULONG WhichSpace;
|
||
|
PVOID Buffer;
|
||
|
ULONG Offset;
|
||
|
ULONG Length;
|
||
|
} ReadWriteConfig;
|
||
|
struct {
|
||
|
BOOLEAN Lock;
|
||
|
} SetLock;
|
||
|
struct {
|
||
|
BUS_QUERY_ID_TYPE IdType;
|
||
|
} QueryId;
|
||
|
struct {
|
||
|
DEVICE_TEXT_TYPE DeviceTextType;
|
||
|
LCID LocaleId;
|
||
|
} QueryDeviceText;
|
||
|
struct {
|
||
|
BOOLEAN InPath;
|
||
|
BOOLEAN Reserved[3];
|
||
|
DEVICE_USAGE_NOTIFICATION_TYPE Type;
|
||
|
} UsageNotification;
|
||
|
struct {
|
||
|
SYSTEM_POWER_STATE PowerState;
|
||
|
} WaitWake;
|
||
|
struct {
|
||
|
PPOWER_SEQUENCE PowerSequence;
|
||
|
} PowerSequence;
|
||
|
struct {
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
union {
|
||
|
ULONG SystemContext;
|
||
|
SYSTEM_POWER_STATE_CONTEXT SystemPowerStateContext;
|
||
|
};
|
||
|
#else
|
||
|
ULONG SystemContext;
|
||
|
#endif
|
||
|
POWER_STATE_TYPE Type;
|
||
|
POWER_STATE State;
|
||
|
POWER_ACTION ShutdownType;
|
||
|
} Power;
|
||
|
struct {
|
||
|
PCM_RESOURCE_LIST AllocatedResources;
|
||
|
PCM_RESOURCE_LIST AllocatedResourcesTranslated;
|
||
|
} StartDevice;
|
||
|
struct {
|
||
|
ULONG_PTR ProviderId;
|
||
|
PVOID DataPath;
|
||
|
ULONG BufferSize;
|
||
|
PVOID Buffer;
|
||
|
} WMI;
|
||
|
struct {
|
||
|
PVOID Argument1;
|
||
|
PVOID Argument2;
|
||
|
PVOID Argument3;
|
||
|
PVOID Argument4;
|
||
|
} Others;
|
||
|
} Parameters;
|
||
|
PDEVICE_OBJECT DeviceObject;
|
||
|
PFILE_OBJECT FileObject;
|
||
|
PIO_COMPLETION_ROUTINE CompletionRoutine;
|
||
|
PVOID Context;
|
||
|
} IO_STACK_LOCATION;
|
||
|
typedef IO_STACK_LOCATION *PIO_STACK_LOCATION;
|
||
|
#include <poppack.h>
|
||
|
|
||
|
/* Share access */
|
||
|
typedef struct _SHARE_ACCESS {
|
||
|
ULONG OpenCount;
|
||
|
ULONG Readers;
|
||
|
ULONG Writers;
|
||
|
ULONG Deleters;
|
||
|
ULONG SharedRead;
|
||
|
ULONG SharedWrite;
|
||
|
ULONG SharedDelete;
|
||
|
} SHARE_ACCESS;
|
||
|
typedef SHARE_ACCESS *PSHARE_ACCESS;
|
||
|
|
||
|
/* I/O paging priorities */
|
||
|
typedef enum _IO_PAGING_PRIORITY {
|
||
|
IoPagingPriorityInvalid = 0,
|
||
|
IoPagingPriorityNormal = 1,
|
||
|
IoPagingPriorityHigh = 2
|
||
|
} IO_PAGING_PRIORITY;
|
||
|
|
||
|
/* Boot disk information */
|
||
|
typedef struct _BOOTDISK_INFORMATION {
|
||
|
LONGLONG BootPartitionOffset;
|
||
|
LONGLONG SystemPartitionOffset;
|
||
|
ULONG BootDeviceSignature;
|
||
|
ULONG SystemDeviceSignature;
|
||
|
} BOOTDISK_INFORMATION;
|
||
|
typedef BOOTDISK_INFORMATION *PBOOTDISK_INFORMATION;
|
||
|
|
||
|
/* Boot disk information (extended version) */
|
||
|
typedef struct _BOOTDISK_INFORMATION_EX {
|
||
|
LONGLONG BootPartitionOffset;
|
||
|
LONGLONG SystemPartitionOffset;
|
||
|
ULONG BootDeviceSignature;
|
||
|
ULONG SystemDeviceSignature;
|
||
|
GUID BootDeviceGuid;
|
||
|
GUID SystemDeviceGuid;
|
||
|
BOOLEAN BootDeviceIsGpt;
|
||
|
BOOLEAN SystemDeviceIsGpt;
|
||
|
} BOOTDISK_INFORMATION_EX;
|
||
|
typedef BOOTDISK_INFORMATION_EX *PBOOTDISK_INFORMATION_EX;
|
||
|
|
||
|
/* Loader partition information (extended version) */
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
typedef struct _LOADER_PARTITION_INFORMATION_EX {
|
||
|
ULONG PartitionStyle;
|
||
|
ULONG PartitionNumber;
|
||
|
union {
|
||
|
ULONG Signature;
|
||
|
GUID DeviceId;
|
||
|
};
|
||
|
ULONG Flags;
|
||
|
} LOADER_PARTITION_INFORMATION_EX;
|
||
|
typedef LOADER_PARTITION_INFORMATION_EX *PLOADER_PARTITION_INFORMATION_EX;
|
||
|
#endif
|
||
|
|
||
|
/* Boot disk information (lite version) */
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
typedef struct _BOOTDISK_INFORMATION_LITE {
|
||
|
ULONG NumberEntries;
|
||
|
LOADER_PARTITION_INFORMATION_EX Entries[1];
|
||
|
} BOOTDISK_INFORMATION_LITE;
|
||
|
typedef BOOTDISK_INFORMATION_LITE *PBOOTDISK_INFORMATION_LITE;
|
||
|
#elif (NTDDI_VERSION >= 0x06000000)
|
||
|
typedef struct _BOOTDISK_INFORMATION_LITE {
|
||
|
ULONG BootDeviceSignature;
|
||
|
ULONG SystemDeviceSignature;
|
||
|
GUID BootDeviceGuid;
|
||
|
GUID SystemDeviceGuid;
|
||
|
BOOLEAN BootDeviceIsGpt;
|
||
|
BOOLEAN SystemDeviceIsGpt;
|
||
|
} BOOTDISK_INFORMATION_LITE;
|
||
|
typedef BOOTDISK_INFORMATION_LITE *PBOOTDISK_INFORMATION_LITE;
|
||
|
#endif
|
||
|
|
||
|
/* I/O completion routine results */
|
||
|
typedef enum _IO_COMPLETION_ROUTINE_RESULT {
|
||
|
ContinueCompletion = STATUS_CONTINUE_COMPLETION,
|
||
|
StopCompletion = STATUS_MORE_PROCESSING_REQUIRED
|
||
|
} IO_COMPLETION_ROUTINE_RESULT;
|
||
|
typedef IO_COMPLETION_ROUTINE_RESULT *PIO_COMPLETION_ROUTINE_RESULT;
|
||
|
|
||
|
/* I/O interrupt message information entry */
|
||
|
typedef struct _IO_INTERRUPT_MESSAGE_INFO_ENTRY {
|
||
|
PHYSICAL_ADDRESS MessageAddress;
|
||
|
KAFFINITY TargetProcessorSet;
|
||
|
PKINTERRUPT InterruptObject;
|
||
|
ULONG MessageData;
|
||
|
ULONG Vector;
|
||
|
KIRQL Irql;
|
||
|
KINTERRUPT_MODE Mode;
|
||
|
KINTERRUPT_POLARITY Polarity;
|
||
|
} IO_INTERRUPT_MESSAGE_INFO_ENTRY;
|
||
|
typedef IO_INTERRUPT_MESSAGE_INFO_ENTRY *PIO_INTERRUPT_MESSAGE_INFO_ENTRY;
|
||
|
|
||
|
/* I/O interrupt message information */
|
||
|
typedef struct _IO_INTERRUPT_MESSAGE_INFO {
|
||
|
KIRQL UnifiedIrql;
|
||
|
ULONG MessageCount;
|
||
|
IO_INTERRUPT_MESSAGE_INFO_ENTRY MessageInfo[1];
|
||
|
} IO_INTERRUPT_MESSAGE_INFO;
|
||
|
typedef IO_INTERRUPT_MESSAGE_INFO *PIO_INTERRUPT_MESSAGE_INFO;
|
||
|
|
||
|
/* I/O connect interrupt fully specified parameters */
|
||
|
typedef struct _IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS {
|
||
|
PDEVICE_OBJECT PhysicalDeviceObject;
|
||
|
PKINTERRUPT *InterruptObject;
|
||
|
PKSERVICE_ROUTINE ServiceRoutine;
|
||
|
PVOID ServiceContext;
|
||
|
PKSPIN_LOCK SpinLock;
|
||
|
KIRQL SynchronizeIrql;
|
||
|
BOOLEAN FloatingSave;
|
||
|
BOOLEAN ShareVector;
|
||
|
ULONG Vector;
|
||
|
KIRQL Irql;
|
||
|
KINTERRUPT_MODE InterruptMode;
|
||
|
KAFFINITY ProcessorEnableMask;
|
||
|
USHORT Group;
|
||
|
} IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS;
|
||
|
typedef IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS *PIO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS;
|
||
|
|
||
|
/* I/O connect interrupt line-based parameters */
|
||
|
typedef struct _IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS {
|
||
|
PDEVICE_OBJECT PhysicalDeviceObject;
|
||
|
PKINTERRUPT *InterruptObject;
|
||
|
PKSERVICE_ROUTINE ServiceRoutine;
|
||
|
PVOID ServiceContext;
|
||
|
PKSPIN_LOCK SpinLock;
|
||
|
KIRQL SynchronizeIrql;
|
||
|
BOOLEAN FloatingSave;
|
||
|
} IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS;
|
||
|
typedef IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS *PIO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS;
|
||
|
|
||
|
/* I/O connect interrupt message-based parameters */
|
||
|
typedef struct _IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS {
|
||
|
PDEVICE_OBJECT PhysicalDeviceObject;
|
||
|
union {
|
||
|
PVOID *Generic;
|
||
|
PIO_INTERRUPT_MESSAGE_INFO *InterruptMessageTable;
|
||
|
PKINTERRUPT *InterruptObject;
|
||
|
} ConnectionContext;
|
||
|
PKMESSAGE_SERVICE_ROUTINE MessageServiceRoutine;
|
||
|
PVOID ServiceContext;
|
||
|
PKSPIN_LOCK SpinLock;
|
||
|
KIRQL SynchronizeIrql;
|
||
|
BOOLEAN FloatingSave;
|
||
|
PKSERVICE_ROUTINE FallbackServiceRoutine;
|
||
|
} IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS;
|
||
|
typedef IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS *PIO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS;
|
||
|
|
||
|
/* I/O connect interrupt parameters */
|
||
|
typedef struct _IO_CONNECT_INTERRUPT_PARAMETERS {
|
||
|
ULONG Version;
|
||
|
union {
|
||
|
IO_CONNECT_INTERRUPT_FULLY_SPECIFIED_PARAMETERS FullySpecified;
|
||
|
IO_CONNECT_INTERRUPT_LINE_BASED_PARAMETERS LineBased;
|
||
|
IO_CONNECT_INTERRUPT_MESSAGE_BASED_PARAMETERS MessageBased;
|
||
|
};
|
||
|
} IO_CONNECT_INTERRUPT_PARAMETERS;
|
||
|
typedef IO_CONNECT_INTERRUPT_PARAMETERS *PIO_CONNECT_INTERRUPT_PARAMETERS;
|
||
|
|
||
|
/* I/O disconnect interrupt parameters */
|
||
|
typedef struct _IO_DISCONNECT_INTERRUPT_PARAMETERS {
|
||
|
ULONG Version;
|
||
|
union {
|
||
|
PVOID Generic;
|
||
|
PKINTERRUPT InterruptObject;
|
||
|
PIO_INTERRUPT_MESSAGE_INFO InterruptMessageTable;
|
||
|
} ConnectionContext;
|
||
|
} IO_DISCONNECT_INTERRUPT_PARAMETERS;
|
||
|
typedef IO_DISCONNECT_INTERRUPT_PARAMETERS *PIO_DISCONNECT_INTERRUPT_PARAMETERS;
|
||
|
|
||
|
/* I/O remove lock common block */
|
||
|
typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
|
||
|
BOOLEAN Removed;
|
||
|
BOOLEAN Reserved[3];
|
||
|
LONG IoCount;
|
||
|
KEVENT RemoveEvent;
|
||
|
} IO_REMOVE_LOCK_COMMON_BLOCK;
|
||
|
|
||
|
/* I/O remove lock debug block */
|
||
|
typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
|
||
|
LONG Signature;
|
||
|
ULONG HighWatermark;
|
||
|
LONGLONG MaxLockedTicks;
|
||
|
LONG AllocateTag;
|
||
|
LIST_ENTRY LockList;
|
||
|
KSPIN_LOCK Spin;
|
||
|
LONG LowMemoryCount;
|
||
|
ULONG Reserved1[4];
|
||
|
PVOID Reserved2;
|
||
|
PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
|
||
|
} IO_REMOVE_LOCK_DBG_BLOCK;
|
||
|
|
||
|
/* I/O remove lock */
|
||
|
typedef struct _IO_REMOVE_LOCK {
|
||
|
IO_REMOVE_LOCK_COMMON_BLOCK Common;
|
||
|
#if DBG
|
||
|
IO_REMOVE_LOCK_DBG_BLOCK Dbg;
|
||
|
#endif
|
||
|
} IO_REMOVE_LOCK;
|
||
|
typedef IO_REMOVE_LOCK *PIO_REMOVE_LOCK;
|
||
|
|
||
|
/* I/O work item routine */
|
||
|
typedef VOID NTAPI IO_WORKITEM_ROUTINE( PDEVICE_OBJECT, PVOID );
|
||
|
typedef VOID NTAPI IO_WORKITEM_ROUTINE_EX( PVOID, PVOID, PIO_WORKITEM );
|
||
|
typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE;
|
||
|
typedef IO_WORKITEM_ROUTINE_EX *PIO_WORKITEM_ROUTINE_EX;
|
||
|
|
||
|
/* WMI notification callback */
|
||
|
typedef VOID (NTAPI FWMI_NOTIFICATION_CALLBACK)( PVOID, PVOID );
|
||
|
typedef FWMI_NOTIFICATION_CALLBACK *WMI_NOTIFICATION_CALLBACK;
|
||
|
|
||
|
/* I/O cancel safe queue IRP context */
|
||
|
typedef struct _IO_CSQ_IRP_CONTEXT {
|
||
|
ULONG Type;
|
||
|
PIRP Irp;
|
||
|
struct IO_CSQ *Csq;
|
||
|
} IO_CSQ_IRP_CONTEXT;
|
||
|
typedef IO_CSQ_IRP_CONTEXT *PIO_CSQ_IRP_CONTEXT;
|
||
|
|
||
|
/* I/O cancel safe queue routines */
|
||
|
typedef VOID (NTAPI IO_CSQ_INSERT_IRP)( struct _IO_CSQ *, PIRP );
|
||
|
typedef NTSTATUS (NTAPI IO_CSQ_INSERT_IRP_EX)( struct _IO_CSQ *, PIRP, PVOID );
|
||
|
typedef VOID (NTAPI IO_CSQ_REMOVE_IRP)( struct _IO_CSQ *, PIRP );
|
||
|
typedef PIRP (NTAPI IO_CSQ_PEEK_NEXT_IRP)( struct _IO_CSQ *, PIRP, PVOID );
|
||
|
typedef VOID (NTAPI IO_CSQ_ACQUIRE_LOCK)( struct _IO_CSQ *, PKIRQL );
|
||
|
typedef VOID (NTAPI IO_CSQ_RELEASE_LOCK)( struct _IO_CSQ *, PKIRQL );
|
||
|
typedef VOID (NTAPI IO_CSQ_COMPLETE_CANCELED_IRP)( struct _IO_CSQ *, PIRP );
|
||
|
typedef IO_CSQ_INSERT_IRP *PIO_CSQ_INSERT_IRP;
|
||
|
typedef IO_CSQ_INSERT_IRP_EX *PIO_CSQ_INSERT_IRP_EX;
|
||
|
typedef IO_CSQ_REMOVE_IRP *PIO_CSQ_REMOVE_IRP;
|
||
|
typedef IO_CSQ_PEEK_NEXT_IRP *PIO_CSQ_PEEK_NEXT_IRP;
|
||
|
typedef IO_CSQ_ACQUIRE_LOCK *PIO_CSQ_ACQUIRE_LOCK;
|
||
|
typedef IO_CSQ_RELEASE_LOCK *PIO_CSQ_RELEASE_LOCK;
|
||
|
typedef IO_CSQ_COMPLETE_CANCELED_IRP *PIO_CSQ_COMPLETE_CANCELED_IRP;
|
||
|
|
||
|
/* I/O cancel safe queue */
|
||
|
typedef struct _IO_CSQ {
|
||
|
ULONG Type;
|
||
|
PIO_CSQ_INSERT_IRP CsqInsertIrp;
|
||
|
PIO_CSQ_REMOVE_IRP CsqRemoveIrp;
|
||
|
PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp;
|
||
|
PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock;
|
||
|
PIO_CSQ_RELEASE_LOCK CsqReleaseLock;
|
||
|
PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp;
|
||
|
PVOID ReservePointer;
|
||
|
} IO_CSQ;
|
||
|
typedef IO_CSQ *PIO_CSQ;
|
||
|
|
||
|
/* I/O access types */
|
||
|
typedef enum _IO_ACCESS_TYPE {
|
||
|
ReadAccess = 0,
|
||
|
WriteAccess = 1,
|
||
|
ModifyAccess = 2
|
||
|
} IO_ACCESS_TYPE;
|
||
|
|
||
|
/* I/O access modes */
|
||
|
typedef enum _IO_ACCESS_MODE {
|
||
|
SequentialAccess = 0,
|
||
|
RandomAccess = 1
|
||
|
} IO_ACCESS_MODE;
|
||
|
|
||
|
/* I/O container notification classes */
|
||
|
typedef enum _IO_CONTAINER_NOTIFICATION_CLASS {
|
||
|
IoSessionStateNotification = 0,
|
||
|
IoMaxContainerNotificationClass = 1
|
||
|
} IO_CONTAINER_NOTIFICATION_CLASS;
|
||
|
|
||
|
/* I/O session state notification */
|
||
|
typedef struct _IO_SESSION_STATE_NOTIFICATION {
|
||
|
ULONG Size;
|
||
|
ULONG Flags;
|
||
|
PVOID IoObject;
|
||
|
ULONG EventMask;
|
||
|
PVOID Context;
|
||
|
} IO_SESSION_STATE_NOTIFICATION;
|
||
|
typedef IO_SESSION_STATE_NOTIFICATION *PIO_SESSION_STATE_NOTIFICATION;
|
||
|
|
||
|
/* I/O container information classes */
|
||
|
typedef enum _IO_CONTAINER_INFORMATION_CLASS {
|
||
|
IoSessionStateInformation = 0,
|
||
|
IoMaxContainerInformationClass = 1
|
||
|
} IO_CONTAINER_INFORMATION_CLASS;
|
||
|
|
||
|
/* I/O session state information */
|
||
|
typedef struct _IO_SESSION_STATE_INFORMATION {
|
||
|
ULONG SessionId;
|
||
|
IO_SESSION_STATE SessionState;
|
||
|
BOOLEAN LocalSession;
|
||
|
} IO_SESSION_STATE_INFORMATION;
|
||
|
typedef IO_SESSION_STATE_INFORMATION *PIO_SESSION_STATE_INFORMATION;
|
||
|
|
||
|
/* I/O container notification function */
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
typedef NTSTATUS (NTAPI *PIO_CONTAINER_NOTIFICATION_FUNCTION)();
|
||
|
#endif
|
||
|
|
||
|
/* I/O session notification function */
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
typedef NTSTATUS (NTAPI IO_SESSION_NOTIFICATION_FUNCTION)( PVOID, PVOID, ULONG, PVOID, PVOID, ULONG );
|
||
|
typedef IO_SESSION_NOTIFICATION_FUNCTION *PIO_SESSION_NOTIFICATION_FUNCTION;
|
||
|
#endif
|
||
|
|
||
|
/* Trace session settings */
|
||
|
typedef struct _ETW_TRACE_SESSION_SETTINGS {
|
||
|
ULONG Version;
|
||
|
ULONG BufferSize;
|
||
|
ULONG MinimumBuffers;
|
||
|
ULONG MaximumBuffers;
|
||
|
ULONG LoggerMode;
|
||
|
ULONG FlushTimer;
|
||
|
ULONG FlushThreshold;
|
||
|
ULONG ClockType;
|
||
|
} ETW_TRACE_SESSION_SETTINGS;
|
||
|
typedef ETW_TRACE_SESSION_SETTINGS *PETW_TRACE_SESSION_SETTINGS;
|
||
|
|
||
|
/* Trace information classes */
|
||
|
typedef enum _TRACE_INFORMATION_CLASS {
|
||
|
TraceIdClass = 0,
|
||
|
TraceHandleClass = 1,
|
||
|
TraceEnableFlagsClass = 2,
|
||
|
TraceEnableLevelClass = 3,
|
||
|
GlobalLoggerHandleClass = 4,
|
||
|
EventLoggerHandleClass = 5,
|
||
|
AllLoggerHandlesClass = 6,
|
||
|
TraceHandleByNameClass = 7,
|
||
|
LoggerEventsLostClass = 8,
|
||
|
TraceSessionSettingsClass = 9,
|
||
|
LoggerEventsLoggedClass = 10,
|
||
|
MaxTraceInformationClass = 11
|
||
|
} TRACE_INFORMATION_CLASS;
|
||
|
|
||
|
/* Enable callback */
|
||
|
typedef VOID (NTAPI *PETWENABLECALLBACK)( LPCGUID, ULONG, UCHAR, ULONGLONG, ULONGLONG, PEVENT_FILTER_DESCRIPTOR );
|
||
|
|
||
|
/* Device registry properties */
|
||
|
typedef enum {
|
||
|
DevicePropertyDeviceDescription = 0,
|
||
|
DevicePropertyHardwareID = 1,
|
||
|
DevicePropertyCompatibleIDs = 2,
|
||
|
DevicePropertyBootConfiguration = 3,
|
||
|
DevicePropertyBootConfigurationTranslated = 4,
|
||
|
DevicePropertyClassName = 5,
|
||
|
DevicePropertyClassGuid = 6,
|
||
|
DevicePropertyDriverKeyName = 7,
|
||
|
DevicePropertyManufacturer = 8,
|
||
|
DevicePropertyFriendlyName = 9,
|
||
|
DevicePropertyLocationInformation = 10,
|
||
|
DevicePropertyPhysicalDeviceObjectName = 11,
|
||
|
DevicePropertyBusTypeGuid = 12,
|
||
|
DevicePropertyLegacyBusType = 13,
|
||
|
DevicePropertyBusNumber = 14,
|
||
|
DevicePropertyEnumeratorName = 15,
|
||
|
DevicePropertyAddress = 16,
|
||
|
DevicePropertyUINumber = 17,
|
||
|
DevicePropertyInstallState = 18,
|
||
|
DevicePropertyRemovalPolicy = 19,
|
||
|
DevicePropertyResourceRequirements = 20,
|
||
|
DevicePropertyAllocatedResources = 21,
|
||
|
DevicePropertyContainerID = 22,
|
||
|
} DEVICE_REGISTRY_PROPERTY;
|
||
|
|
||
|
/* Bus interface callbacks */
|
||
|
typedef BOOLEAN (NTAPI TRANSLATE_BUS_ADDRESS)( PVOID, PHYSICAL_ADDRESS, ULONG, PULONG, PPHYSICAL_ADDRESS );
|
||
|
typedef struct _DMA_ADAPTER * (NTAPI GET_DMA_ADAPTER)( PVOID, struct _DEVICE_DESCRIPTION *, PULONG );
|
||
|
typedef ULONG (NTAPI GET_SET_DEVICE_DATA)( PVOID, ULONG, PVOID, ULONG, ULONG );
|
||
|
typedef TRANSLATE_BUS_ADDRESS *PTRANSLATE_BUS_ADDRESS;
|
||
|
typedef GET_DMA_ADAPTER *PGET_DMA_ADAPTER;
|
||
|
typedef GET_SET_DEVICE_DATA *PGET_SET_DEVICE_DATA;
|
||
|
|
||
|
/* Device install states */
|
||
|
typedef enum _DEVICE_INSTALL_STATE {
|
||
|
InstallStateInstalled = 0,
|
||
|
InstallStateNeedsReinstall = 1,
|
||
|
InstallStateFailedInstall = 2,
|
||
|
InstallStateFinishInstall = 3
|
||
|
} DEVICE_INSTALL_STATE;
|
||
|
typedef DEVICE_INSTALL_STATE *PDEVICE_INSTALL_STATE;
|
||
|
|
||
|
/* Plug and Play bus information */
|
||
|
typedef struct _PNP_BUS_INFORMATION {
|
||
|
GUID BusTypeGuid;
|
||
|
INTERFACE_TYPE LegacyBusType;
|
||
|
ULONG BusNumber;
|
||
|
} PNP_BUS_INFORMATION;
|
||
|
typedef PNP_BUS_INFORMATION *PPNP_BUS_INFORMATION;
|
||
|
|
||
|
/* Legacy bus information */
|
||
|
typedef struct _LEGACY_BUS_INFORMATION {
|
||
|
GUID BusTypeGuid;
|
||
|
INTERFACE_TYPE LegacyBusType;
|
||
|
ULONG BusNumber;
|
||
|
} LEGACY_BUS_INFORMATION;
|
||
|
typedef LEGACY_BUS_INFORMATION *PLEGACY_BUS_INFORMATION;
|
||
|
|
||
|
/* Device removal policies */
|
||
|
typedef enum _DEVICE_REMOVAL_POLICY {
|
||
|
RemovalPolicyExpectNoRemoval = 1,
|
||
|
RemovalPolicyExpectOrderlyRemoval = 2,
|
||
|
RemovalPolicyExpectSurpriseRemoval = 3
|
||
|
} DEVICE_REMOVAL_POLICY;
|
||
|
typedef DEVICE_REMOVAL_POLICY *PDEVICE_REMOVAL_POLICY;
|
||
|
|
||
|
/* Bus interface standard */
|
||
|
typedef struct _BUS_INTERFACE_STANDARD {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PVOID Context;
|
||
|
PINTERFACE_REFERENCE InterfaceReference;
|
||
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
||
|
PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
|
||
|
PGET_DMA_ADAPTER GetDmaAdapter;
|
||
|
PGET_SET_DEVICE_DATA SetBusData;
|
||
|
PGET_SET_DEVICE_DATA GetBusData;
|
||
|
} BUS_INTERFACE_STANDARD;
|
||
|
typedef BUS_INTERFACE_STANDARD *PBUS_INTERFACE_STANDARD;
|
||
|
|
||
|
/* Reenumerate self callback */
|
||
|
typedef VOID (NTAPI *PREENUMERATE_SELF)( PVOID );
|
||
|
|
||
|
/* Reenumerate self interface standard */
|
||
|
typedef struct _REENUMERATE_SELF_INTERFACE_STANDARD {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PVOID Context;
|
||
|
PINTERFACE_REFERENCE InterfaceReference;
|
||
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
||
|
PREENUMERATE_SELF SurpriseRemoveAndReenumerateSelf;
|
||
|
} REENUMERATE_SELF_INTERFACE_STANDARD;
|
||
|
typedef REENUMERATE_SELF_INTERFACE_STANDARD *PREENUMERATE_SELF_INTERFACE_STANDARD;
|
||
|
|
||
|
/* ACPI interface callbacks */
|
||
|
typedef BOOLEAN (NTAPI *PGPE_SERVICE_ROUTINE)( PVOID, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_CONNECT_VECTOR)( PDEVICE_OBJECT, ULONG, KINTERRUPT_MODE, BOOLEAN, PGPE_SERVICE_ROUTINE, PVOID, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_DISCONNECT_VECTOR)( PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_ENABLE_EVENT)( PDEVICE_OBJECT, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_DISABLE_EVENT)( PDEVICE_OBJECT, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_CLEAR_STATUS)( PDEVICE_OBJECT, PVOID );
|
||
|
typedef VOID (NTAPI *PDEVICE_NOTIFY_CALLBACK)( PVOID, ULONG );
|
||
|
typedef NTSTATUS (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS)( PDEVICE_OBJECT, PDEVICE_NOTIFY_CALLBACK, PVOID );
|
||
|
typedef void (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS)( PDEVICE_OBJECT, PDEVICE_NOTIFY_CALLBACK );
|
||
|
typedef BOOLEAN (NTAPI *PGPE_SERVICE_ROUTINE2)( PVOID, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_CONNECT_VECTOR2)( PVOID, ULONG, KINTERRUPT_MODE, BOOLEAN, PGPE_SERVICE_ROUTINE, PVOID, PVOID * );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_DISCONNECT_VECTOR2)( PVOID, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_ENABLE_EVENT2)( PVOID, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_DISABLE_EVENT2)( PVOID, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PGPE_CLEAR_STATUS2)( PVOID, PVOID );
|
||
|
typedef VOID (NTAPI *PDEVICE_NOTIFY_CALLBACK2)( PVOID, ULONG );
|
||
|
typedef NTSTATUS (NTAPI *PREGISTER_FOR_DEVICE_NOTIFICATIONS2)( PVOID, PDEVICE_NOTIFY_CALLBACK2, PVOID );
|
||
|
typedef VOID (NTAPI *PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2)( PVOID );
|
||
|
|
||
|
/* ACPI interface standard */
|
||
|
typedef struct _ACPI_INTERFACE_STANDARD {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PVOID Context;
|
||
|
PINTERFACE_REFERENCE InterfaceReference;
|
||
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
||
|
PGPE_CONNECT_VECTOR GpeConnectVector;
|
||
|
PGPE_DISCONNECT_VECTOR GpeDisconnectVector;
|
||
|
PGPE_ENABLE_EVENT GpeEnableEvent;
|
||
|
PGPE_DISABLE_EVENT GpeDisableEvent;
|
||
|
PGPE_CLEAR_STATUS GpeClearStatus;
|
||
|
PREGISTER_FOR_DEVICE_NOTIFICATIONS RegisterForDeviceNotifications;
|
||
|
PUNREGISTER_FOR_DEVICE_NOTIFICATIONS UnregisterForDeviceNotifications;
|
||
|
} ACPI_INTERFACE_STANDARD;
|
||
|
typedef ACPI_INTERFACE_STANDARD *PACPI_INTERFACE_STANDARD;
|
||
|
|
||
|
/* ACPI interface standard (version 2) */
|
||
|
typedef struct {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PVOID Context;
|
||
|
PINTERFACE_REFERENCE InterfaceReference;
|
||
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
||
|
PGPE_CONNECT_VECTOR2 GpeConnectVector;
|
||
|
PGPE_DISCONNECT_VECTOR2 GpeDisconnectVector;
|
||
|
PGPE_ENABLE_EVENT2 GpeEnableEvent;
|
||
|
PGPE_DISABLE_EVENT2 GpeDisableEvent;
|
||
|
PGPE_CLEAR_STATUS2 GpeClearStatus;
|
||
|
PREGISTER_FOR_DEVICE_NOTIFICATIONS2 RegisterForDeviceNotifications;
|
||
|
PUNREGISTER_FOR_DEVICE_NOTIFICATIONS2 UnregisterForDeviceNotifications;
|
||
|
} ACPI_INTERFACE_STANDARD2;
|
||
|
typedef ACPI_INTERFACE_STANDARD2 *PACPI_INTERFACE_STANDARD2;
|
||
|
|
||
|
/* I/O device eject callback */
|
||
|
typedef VOID (NTAPI *PIO_DEVICE_EJECT_CALLBACK)( NTSTATUS, PVOID );
|
||
|
|
||
|
/* I/O notification event categories */
|
||
|
typedef enum _IO_NOTIFICATION_EVENT_CATEGORY {
|
||
|
EventCategoryHardwareProfileChange = 1,
|
||
|
EventCategoryDeviceInterfaceChange = 2,
|
||
|
EventCategoryTargetDeviceChange = 3
|
||
|
} IO_NOTIFICATION_EVENT_CATEGORY;
|
||
|
|
||
|
/* Driver notification callback */
|
||
|
typedef NTSTATUS (NTAPI DRIVER_NOTIFICATION_CALLBACK_ROUTINE)( PVOID, PVOID );
|
||
|
typedef DRIVER_NOTIFICATION_CALLBACK_ROUTINE *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE;
|
||
|
|
||
|
/* Device change complete callback */
|
||
|
typedef VOID (NTAPI DEVICE_CHANGE_COMPLETE_CALLBACK)( PVOID );
|
||
|
typedef DEVICE_CHANGE_COMPLETE_CALLBACK *PDEVICE_CHANGE_COMPLETE_CALLBACK;
|
||
|
|
||
|
/* Plug and Play notification header */
|
||
|
typedef struct _PLUGPLAY_NOTIFICATION_HEADER {
|
||
|
USHORT Version;
|
||
|
USHORT Size;
|
||
|
GUID Event;
|
||
|
} PLUGPLAY_NOTIFICATION_HEADER;
|
||
|
typedef PLUGPLAY_NOTIFICATION_HEADER *PPLUGPLAY_NOTIFICATION_HEADER;
|
||
|
|
||
|
/* Hardware profile change notification */
|
||
|
typedef struct _HWPROFILE_CHANGE_NOTIFICATION {
|
||
|
USHORT Version;
|
||
|
USHORT Size;
|
||
|
GUID Event;
|
||
|
} HWPROFILE_CHANGE_NOTIFICATION;
|
||
|
typedef HWPROFILE_CHANGE_NOTIFICATION *PHWPROFILE_CHANGE_NOTIFICATION;
|
||
|
|
||
|
/* Device interface change notification */
|
||
|
typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
|
||
|
USHORT Version;
|
||
|
USHORT Size;
|
||
|
GUID Event;
|
||
|
GUID InterfaceClassGuid;
|
||
|
PUNICODE_STRING SymbolicLinkName;
|
||
|
} DEVICE_INTERFACE_CHANGE_NOTIFICATION;
|
||
|
typedef DEVICE_INTERFACE_CHANGE_NOTIFICATION *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
|
||
|
|
||
|
/* Target device removal notification */
|
||
|
typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION {
|
||
|
USHORT Version;
|
||
|
USHORT Size;
|
||
|
GUID Event;
|
||
|
PFILE_OBJECT FileObject;
|
||
|
} TARGET_DEVICE_REMOVAL_NOTIFICATION;
|
||
|
typedef TARGET_DEVICE_REMOVAL_NOTIFICATION *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
|
||
|
|
||
|
/* Target device custom notification */
|
||
|
typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION {
|
||
|
USHORT Version;
|
||
|
USHORT Size;
|
||
|
GUID Event;
|
||
|
PFILE_OBJECT FileObject;
|
||
|
LONG NameBufferOffset;
|
||
|
UCHAR CustomDataBuffer[1];
|
||
|
} TARGET_DEVICE_CUSTOM_NOTIFICATION;
|
||
|
typedef TARGET_DEVICE_CUSTOM_NOTIFICATION *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
|
||
|
|
||
|
/* Plug and Play replace driver interface callbacks */
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_DRIVER_INIT)( struct _PNP_REPLACE_DRIVE_INTERFACE *, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_MAP_MEMORY)( PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, PLARGE_INTEGER, PVOID *, PVOID * );
|
||
|
|
||
|
/* Plug and Play replace memory list */
|
||
|
typedef struct _PNP_REPLACE_MEMORY_LIST {
|
||
|
ULONG AllocatedCount;
|
||
|
ULONG Count;
|
||
|
ULONGLONG TotalLength;
|
||
|
struct {
|
||
|
PHYSICAL_ADDRESS Address;
|
||
|
ULONGLONG Length;
|
||
|
} Ranges[ANYSIZE_ARRAY];
|
||
|
} PNP_REPLACE_MEMORY_LIST;
|
||
|
typedef PNP_REPLACE_MEMORY_LIST *PPNP_REPLACE_MEMORY_LIST;
|
||
|
|
||
|
/* Plug and Play replace processor list */
|
||
|
typedef struct _PNP_REPLACE_PROCESSOR_LIST {
|
||
|
PKAFFINITY Affinity;
|
||
|
ULONG GroupCount;
|
||
|
ULONG AllocatedCount;
|
||
|
ULONG Count;
|
||
|
ULONG ApicIds[ANYSIZE_ARRAY];
|
||
|
} PNP_REPLACE_PROCESSOR_LIST;
|
||
|
typedef PNP_REPLACE_PROCESSOR_LIST *PPNP_REPLACE_PROCESSOR_LIST;
|
||
|
|
||
|
/* Plug and Play replace processor list (version 1) */
|
||
|
typedef struct _PNP_REPLACE_PROCESSOR_LIST_V1 {
|
||
|
KAFFINITY AffinityMask;
|
||
|
ULONG AllocatedCount;
|
||
|
ULONG Count;
|
||
|
ULONG ApicIds[ANYSIZE_ARRAY];
|
||
|
} PNP_REPLACE_PROCESSOR_LIST_V1;
|
||
|
typedef PNP_REPLACE_PROCESSOR_LIST_V1 *PPNP_REPLACE_PROCESSOR_LIST_V1;
|
||
|
|
||
|
/* Plug and Play replace parameters */
|
||
|
typedef struct _PNP_REPLACE_PARAMETERS {
|
||
|
ULONG Size;
|
||
|
ULONG Version;
|
||
|
ULONG64 Target;
|
||
|
ULONG64 Spare;
|
||
|
PPNP_REPLACE_PROCESSOR_LIST TargetProcessors;
|
||
|
PPNP_REPLACE_PROCESSOR_LIST SpareProcessors;
|
||
|
PPNP_REPLACE_MEMORY_LIST TargetMemory;
|
||
|
PPNP_REPLACE_MEMORY_LIST SpareMemory;
|
||
|
PREPLACE_MAP_MEMORY MapMemory;
|
||
|
} PNP_REPLACE_PARAMETERS;
|
||
|
typedef PNP_REPLACE_PARAMETERS *PPNP_REPLACE_PARAMETERS;
|
||
|
|
||
|
/* Plug and Play replace driver interface callbacks */
|
||
|
typedef VOID (NTAPI *PREPLACE_UNLOAD)( VOID );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_BEGIN)( PPNP_REPLACE_PARAMETERS, PVOID * );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_END)( PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_MIRROR_PHYSICAL_MEMORY)( PVOID, PHYSICAL_ADDRESS, LARGE_INTEGER );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_SET_PROCESSOR_ID)( PVOID, ULONG, BOOLEAN );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_SWAP)( PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_INITIATE_HARDWARE_MIRROR)( PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_MIRROR_PLATFORM_MEMORY)( PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_GET_MEMORY_DESTINATION)( PVOID, PHYSICAL_ADDRESS, PPHYSICAL_ADDRESS );
|
||
|
typedef NTSTATUS (NTAPI *PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE)( PVOID, BOOLEAN );
|
||
|
|
||
|
/* Plug and Play replace driver interface */
|
||
|
typedef struct _PNP_REPLACE_DRIVER_INTERFACE {
|
||
|
ULONG Size;
|
||
|
ULONG Version;
|
||
|
ULONG Flags;
|
||
|
PREPLACE_UNLOAD Unload;
|
||
|
PREPLACE_BEGIN BeginReplace;
|
||
|
PREPLACE_END EndReplace;
|
||
|
PREPLACE_MIRROR_PHYSICAL_MEMORY MirrorPhysicalMemory;
|
||
|
PREPLACE_SET_PROCESSOR_ID SetProcessorId;
|
||
|
PREPLACE_SWAP Swap;
|
||
|
PREPLACE_INITIATE_HARDWARE_MIRROR InitiateHardwareMirror;
|
||
|
PREPLACE_MIRROR_PLATFORM_MEMORY MirrorPlatformMemory;
|
||
|
PREPLACE_GET_MEMORY_DESTINATION GetMemoryDestination;
|
||
|
PREPLACE_ENABLE_DISABLE_HARDWARE_QUIESCE EnableDisableHardwareQuiesce;
|
||
|
} PNP_REPLACE_DRIVER_INTERFACE;
|
||
|
typedef PNP_REPLACE_DRIVER_INTERFACE *PPNP_REPLACE_DRIVER_INTERFACE;
|
||
|
|
||
|
/* Device description */
|
||
|
typedef struct _DEVICE_DESCRIPTION {
|
||
|
ULONG Version;
|
||
|
BOOLEAN Master;
|
||
|
BOOLEAN ScatterGather;
|
||
|
BOOLEAN DemandMode;
|
||
|
BOOLEAN AutoInitialize;
|
||
|
BOOLEAN Dma32BitAddresses;
|
||
|
BOOLEAN IgnoreCount;
|
||
|
BOOLEAN Reserved1;
|
||
|
BOOLEAN Dma64BitAddresses;
|
||
|
ULONG BusNumber;
|
||
|
ULONG DmaChannel;
|
||
|
INTERFACE_TYPE InterfaceType;
|
||
|
DMA_WIDTH DmaWidth;
|
||
|
DMA_SPEED DmaSpeed;
|
||
|
ULONG MaximumLength;
|
||
|
ULONG DmaPort;
|
||
|
} DEVICE_DESCRIPTION;
|
||
|
typedef DEVICE_DESCRIPTION *PDEVICE_DESCRIPTION;
|
||
|
|
||
|
/* Scatter gather element */
|
||
|
typedef struct _SCATTER_GATHER_ELEMENT {
|
||
|
PHYSICAL_ADDRESS Address;
|
||
|
ULONG Length;
|
||
|
ULONG_PTR Reserved;
|
||
|
} SCATTER_GATHER_ELEMENT;
|
||
|
typedef SCATTER_GATHER_ELEMENT *PSCATTER_GATHER_ELEMENT;
|
||
|
|
||
|
/* Scatter gather list */
|
||
|
typedef struct _SCATTER_GATHER_LIST {
|
||
|
ULONG NumberOfElements;
|
||
|
ULONG_PTR Reserved;
|
||
|
SCATTER_GATHER_ELEMENT Elements[];
|
||
|
} SCATTER_GATHER_LIST;
|
||
|
typedef SCATTER_GATHER_LIST *PSCATTER_GATHER_LIST;
|
||
|
|
||
|
/* DMA adapter */
|
||
|
typedef struct _DMA_ADAPTER {
|
||
|
USHORT Version;
|
||
|
USHORT Size;
|
||
|
struct _DMA_OPERATIONS *DmaOperations;
|
||
|
} DMA_ADAPTER;
|
||
|
typedef DMA_ADAPTER *PDMA_ADAPTER;
|
||
|
|
||
|
/* Driver list control callback */
|
||
|
typedef VOID (NTAPI DRIVER_LIST_CONTROL)( struct _DEVICE_OBJECT *, struct _IRP *, PSCATTER_GATHER_LIST, PVOID );
|
||
|
typedef DRIVER_LIST_CONTROL *PDRIVER_LIST_CONTROL;
|
||
|
|
||
|
/* DMA callbacks */
|
||
|
typedef VOID (NTAPI *PPUT_DMA_ADAPTER)( PDMA_ADAPTER );
|
||
|
typedef PVOID (NTAPI *PALLOCATE_COMMON_BUFFER)( PDMA_ADAPTER, ULONG, PPHYSICAL_ADDRESS, BOOLEAN );
|
||
|
typedef VOID (NTAPI *PFREE_COMMON_BUFFER)( PDMA_ADAPTER, ULONG, PHYSICAL_ADDRESS, PVOID, BOOLEAN );
|
||
|
typedef NTSTATUS (NTAPI *PALLOCATE_ADAPTER_CHANNEL)( PDMA_ADAPTER, PDEVICE_OBJECT, ULONG, PDRIVER_CONTROL, PVOID );
|
||
|
typedef BOOLEAN (NTAPI *PFLUSH_ADAPTER_BUFFERS)( PDMA_ADAPTER, PMDL, PVOID, PVOID, ULONG, BOOLEAN );
|
||
|
typedef VOID (NTAPI *PFREE_ADAPTER_CHANNEL)( PDMA_ADAPTER );
|
||
|
typedef VOID (NTAPI *PFREE_MAP_REGISTERS)( PDMA_ADAPTER, PVOID, ULONG );
|
||
|
typedef PHYSICAL_ADDRESS (NTAPI *PMAP_TRANSFER)( PDMA_ADAPTER, PMDL, PVOID, PVOID, PULONG, BOOLEAN );
|
||
|
typedef ULONG (NTAPI *PGET_DMA_ALIGNMENT)( PDMA_ADAPTER );
|
||
|
typedef ULONG (NTAPI *PREAD_DMA_COUNTER)( PDMA_ADAPTER );
|
||
|
typedef NTSTATUS (NTAPI *PGET_SCATTER_GATHER_LIST)( PDMA_ADAPTER, PDEVICE_OBJECT, PMDL, PVOID, ULONG, PDRIVER_LIST_CONTROL, PVOID, BOOLEAN );
|
||
|
typedef VOID (NTAPI *PPUT_SCATTER_GATHER_LIST)( PDMA_ADAPTER, PSCATTER_GATHER_LIST, BOOLEAN );
|
||
|
typedef NTSTATUS (NTAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)( PDMA_ADAPTER, PMDL, PVOID, ULONG, PULONG, PULONG );
|
||
|
typedef NTSTATUS (NTAPI *PBUILD_SCATTER_GATHER_LIST)( PDMA_ADAPTER, PDEVICE_OBJECT, PMDL, PVOID, ULONG, PDRIVER_LIST_CONTROL, PVOID, BOOLEAN, PVOID, ULONG );
|
||
|
typedef NTSTATUS (NTAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( PDMA_ADAPTER, PSCATTER_GATHER_LIST, PMDL, PMDL * );
|
||
|
|
||
|
/* DMA operations */
|
||
|
typedef struct _DMA_OPERATIONS {
|
||
|
ULONG Size;
|
||
|
PPUT_DMA_ADAPTER PutDmaAdapter;
|
||
|
PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
|
||
|
PFREE_COMMON_BUFFER FreeCommonBuffer;
|
||
|
PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
|
||
|
PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
|
||
|
PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
|
||
|
PFREE_MAP_REGISTERS FreeMapRegisters;
|
||
|
PMAP_TRANSFER MapTransfer;
|
||
|
PGET_DMA_ALIGNMENT GetDmaAlignment;
|
||
|
PREAD_DMA_COUNTER ReadDmaCounter;
|
||
|
PGET_SCATTER_GATHER_LIST GetScatterGatherList;
|
||
|
PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
|
||
|
PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherListSize;
|
||
|
PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
|
||
|
PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
|
||
|
} DMA_OPERATIONS;
|
||
|
typedef DMA_OPERATIONS *PDMA_OPERATIONS;
|
||
|
|
||
|
/* Power callbacks */
|
||
|
typedef VOID (NTAPI REQUEST_POWER_COMPLETE)( PDEVICE_OBJECT, UCHAR, POWER_STATE, PVOID, PIO_STATUS_BLOCK );
|
||
|
typedef NTSTATUS (NTAPI POWER_SETTING_CALLBACK)( LPCGUID, PVOID, ULONG, PVOID );
|
||
|
typedef REQUEST_POWER_COMPLETE *PREQUEST_POWER_COMPLETE;
|
||
|
typedef POWER_SETTING_CALLBACK *PPOWER_SETTING_CALLBACK;
|
||
|
|
||
|
/* Object handle information */
|
||
|
typedef struct _OBJECT_HANDLE_INFORMATION {
|
||
|
ULONG HandleAttributes;
|
||
|
ACCESS_MASK GrantedAccess;
|
||
|
} OBJECT_HANDLE_INFORMATION;
|
||
|
typedef OBJECT_HANDLE_INFORMATION *POBJECT_HANDLE_INFORMATION;
|
||
|
|
||
|
/* Object pre-create handle information */
|
||
|
typedef struct _OB_PRE_CREATE_HANDLE_INFORMATION {
|
||
|
ACCESS_MASK DesiredAccess;
|
||
|
ACCESS_MASK OriginalDesiredAccess;
|
||
|
} OB_PRE_CREATE_HANDLE_INFORMATION;
|
||
|
typedef OB_PRE_CREATE_HANDLE_INFORMATION *POB_PRE_CREATE_HANDLE_INFORMATION;
|
||
|
|
||
|
/* Object pre-duplicate handle information */
|
||
|
typedef struct _OB_PRE_DUPLICATE_HANDLE_INFORMATION {
|
||
|
ACCESS_MASK DesiredAccess;
|
||
|
ACCESS_MASK OriginalDesiredAccess;
|
||
|
PVOID SourceProcess;
|
||
|
PVOID TargetProcess;
|
||
|
} OB_PRE_DUPLICATE_HANDLE_INFORMATION;
|
||
|
typedef OB_PRE_DUPLICATE_HANDLE_INFORMATION *POB_PRE_DUPLICATE_HANDLE_INFORMATION;
|
||
|
|
||
|
/* Object pre-operation parameters */
|
||
|
typedef union _OB_PRE_OPERATION_PARAMETERS {
|
||
|
OB_PRE_CREATE_HANDLE_INFORMATION CreateHandleInformation;
|
||
|
OB_PRE_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
|
||
|
} OB_PRE_OPERATION_PARAMETERS;
|
||
|
typedef OB_PRE_OPERATION_PARAMETERS *POB_PRE_OPERATION_PARAMETERS;
|
||
|
|
||
|
/* Object pre-operation information */
|
||
|
typedef struct _OB_PRE_OPERATION_INFORMATION {
|
||
|
OB_OPERATION Operation;
|
||
|
union {
|
||
|
ULONG Flags;
|
||
|
struct {
|
||
|
ULONG KernelHandle : 1;
|
||
|
ULONG Reserved : 31;
|
||
|
};
|
||
|
};
|
||
|
PVOID Object;
|
||
|
POBJECT_TYPE ObjectType;
|
||
|
PVOID CallContext;
|
||
|
POB_PRE_OPERATION_PARAMETERS Parameters;
|
||
|
} OB_PRE_OPERATION_INFORMATION;
|
||
|
typedef OB_PRE_OPERATION_INFORMATION *POB_PRE_OPERATION_INFORMATION;
|
||
|
|
||
|
/* Object post-create handle information */
|
||
|
typedef struct _OB_POST_CREATE_HANDLE_INFORMATION {
|
||
|
ACCESS_MASK GrantedAccess;
|
||
|
} OB_POST_CREATE_HANDLE_INFORMATION;
|
||
|
typedef OB_POST_CREATE_HANDLE_INFORMATION *POB_POST_CREATE_HANDLE_INFORMATION;
|
||
|
|
||
|
/* Object post-duplicate handle information */
|
||
|
typedef struct _OB_POST_DUPLICATE_HANDLE_INFORMATION {
|
||
|
ACCESS_MASK GrantedAccess;
|
||
|
} OB_POST_DUPLICATE_HANDLE_INFORMATION;
|
||
|
typedef OB_POST_DUPLICATE_HANDLE_INFORMATION *POB_POST_DUPLICATE_HANDLE_INFORMATION;
|
||
|
|
||
|
/* Object post-operation parameters */
|
||
|
typedef union _OB_POST_OPERATION_PARAMETERS {
|
||
|
OB_POST_CREATE_HANDLE_INFORMATION CreateHandleInformation;
|
||
|
OB_POST_DUPLICATE_HANDLE_INFORMATION DuplicateHandleInformation;
|
||
|
} OB_POST_OPERATION_PARAMETERS;
|
||
|
typedef OB_POST_OPERATION_PARAMETERS *POB_POST_OPERATION_PARAMETERS;
|
||
|
|
||
|
/* Object post-operation information */
|
||
|
typedef struct _OB_POST_OPERATION_INFORMATION {
|
||
|
OB_OPERATION Operation;
|
||
|
union {
|
||
|
ULONG Flags;
|
||
|
struct {
|
||
|
ULONG KernelHandle : 1;
|
||
|
ULONG Reserved : 31;
|
||
|
};
|
||
|
};
|
||
|
PVOID Object;
|
||
|
POBJECT_TYPE ObjectType;
|
||
|
PVOID CallContext;
|
||
|
NTSTATUS ReturnStatus;
|
||
|
POB_POST_OPERATION_PARAMETERS Parameters;
|
||
|
} OB_POST_OPERATION_INFORMATION;
|
||
|
typedef OB_POST_OPERATION_INFORMATION *POB_POST_OPERATION_INFORMATION;
|
||
|
|
||
|
/* Object pre-operation callback status values */
|
||
|
typedef enum _OB_PREOP_CALLBACK_STATUS {
|
||
|
OB_PREOP_SUCCESS = 0
|
||
|
} OB_PREOP_CALLBACK_STATUS;
|
||
|
typedef OB_PREOP_CALLBACK_STATUS *POB_PREOP_CALLBACK_STATUS;
|
||
|
|
||
|
/* Object pre-operation and post-operation callbacks */
|
||
|
typedef OB_PREOP_CALLBACK_STATUS (NTAPI *POB_PRE_OPERATION_CALLBACK)( PVOID, POB_PRE_OPERATION_INFORMATION );
|
||
|
typedef VOID (NTAPI *POB_POST_OPERATION_CALLBACK)( PVOID, POB_POST_OPERATION_INFORMATION );
|
||
|
|
||
|
/* Object operation registration */
|
||
|
typedef struct _OB_OPERATION_REGISTRATION {
|
||
|
POBJECT_TYPE *ObjectType;
|
||
|
OB_OPERATION Operations;
|
||
|
POB_PRE_OPERATION_CALLBACK PreOperation;
|
||
|
POB_POST_OPERATION_CALLBACK PostOperation;
|
||
|
} OB_OPERATION_REGISTRATION;
|
||
|
typedef OB_OPERATION_REGISTRATION *POB_OPERATION_REGISTRATION;
|
||
|
|
||
|
/* Object callback registration */
|
||
|
typedef struct _OB_CALLBACK_REGISTRATION {
|
||
|
USHORT Version;
|
||
|
USHORT OperationRegistrationCount;
|
||
|
UNICODE_STRING Altitude;
|
||
|
PVOID RegistrationContext;
|
||
|
OB_OPERATION_REGISTRATION *OperationRegistration;
|
||
|
} OB_CALLBACK_REGISTRATION;
|
||
|
typedef OB_CALLBACK_REGISTRATION *POB_CALLBACK_REGISTRATION;
|
||
|
|
||
|
/* PCI slot number */
|
||
|
typedef struct _PCI_SLOT_NUMBER {
|
||
|
union {
|
||
|
struct {
|
||
|
ULONG DeviceNumber : 5;
|
||
|
ULONG FunctionNumber : 3;
|
||
|
ULONG Reserved : 24;
|
||
|
} bits;
|
||
|
ULONG AsULONG;
|
||
|
} u;
|
||
|
} PCI_SLOT_NUMBER;
|
||
|
typedef PCI_SLOT_NUMBER *PPCI_SLOT_NUMBER;
|
||
|
|
||
|
/* PCI common header */
|
||
|
typedef struct _PCI_COMMON_HEADER {
|
||
|
USHORT VendorID;
|
||
|
USHORT DeviceID;
|
||
|
USHORT Command;
|
||
|
USHORT Status;
|
||
|
UCHAR RevisionID;
|
||
|
UCHAR ProgIf;
|
||
|
UCHAR SubClass;
|
||
|
UCHAR BaseClass;
|
||
|
UCHAR CacheLineSize;
|
||
|
UCHAR LatencyTimer;
|
||
|
UCHAR HeaderType;
|
||
|
UCHAR BIST;
|
||
|
union {
|
||
|
struct _PCI_HEADER_TYPE_0 {
|
||
|
ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
|
||
|
ULONG CIS;
|
||
|
USHORT SubVendorID;
|
||
|
USHORT SubSystemID;
|
||
|
ULONG ROMBaseAddress;
|
||
|
UCHAR CapabilitiesPtr;
|
||
|
UCHAR Reserved1[3];
|
||
|
ULONG Reserved2;
|
||
|
UCHAR InterruptLine;
|
||
|
UCHAR InterruptPin;
|
||
|
UCHAR MinimumGrant;
|
||
|
UCHAR MaximumLatency;
|
||
|
} type0;
|
||
|
struct _PCI_HEADER_TYPE_1 {
|
||
|
ULONG BaseAddresses[PCI_TYPE1_ADDRESSES];
|
||
|
UCHAR PrimaryBus;
|
||
|
UCHAR SecondaryBus;
|
||
|
UCHAR SubordinateBus;
|
||
|
UCHAR SecondaryLatency;
|
||
|
UCHAR IOBase;
|
||
|
UCHAR IOLimit;
|
||
|
USHORT SecondaryStatus;
|
||
|
USHORT MemoryBase;
|
||
|
USHORT MemoryLimit;
|
||
|
USHORT PrefetchBase;
|
||
|
USHORT PrefetchLimit;
|
||
|
ULONG PrefetchBaseUpper32;
|
||
|
ULONG PrefetchLimitUpper32;
|
||
|
USHORT IOBaseUpper16;
|
||
|
USHORT IOLimitUpper16;
|
||
|
UCHAR CapabilitiesPtr;
|
||
|
UCHAR Reserved1[3];
|
||
|
ULONG ROMBaseAddress;
|
||
|
UCHAR InterruptLine;
|
||
|
UCHAR InterruptPin;
|
||
|
USHORT BridgeControl;
|
||
|
} type1;
|
||
|
struct _PCI_HEADER_TYPE_2 {
|
||
|
ULONG SocketRegistersBaseAddress;
|
||
|
UCHAR CapabilitiesPtr;
|
||
|
UCHAR Reserved;
|
||
|
USHORT SecondaryStatus;
|
||
|
UCHAR PrimaryBus;
|
||
|
UCHAR SecondaryBus;
|
||
|
UCHAR SubordinateBus;
|
||
|
UCHAR SecondaryLatency;
|
||
|
struct {
|
||
|
ULONG Base;
|
||
|
ULONG Limit;
|
||
|
} Range[PCI_TYPE2_ADDRESSES - 1];
|
||
|
UCHAR InterruptLine;
|
||
|
UCHAR InterruptPin;
|
||
|
USHORT BridgeControl;
|
||
|
} type2;
|
||
|
} u;
|
||
|
} PCI_COMMON_HEADER;
|
||
|
typedef PCI_COMMON_HEADER *PPCI_COMMON_HEADER;
|
||
|
|
||
|
/* PCI common configuration */
|
||
|
#ifdef __cplusplus
|
||
|
typedef struct _PCI_COMMON_CONFIG : PCI_COMMON_HEADER {
|
||
|
#else
|
||
|
typedef struct _PCI_COMMON_CONFIG {
|
||
|
PCI_COMMON_HEADER;
|
||
|
#endif
|
||
|
UCHAR DeviceSpecific[192];
|
||
|
} PCI_COMMON_CONFIG;
|
||
|
typedef PCI_COMMON_CONFIG *PPCI_COMMON_CONFIG;
|
||
|
|
||
|
/* PCI configuration structure lengths */
|
||
|
#define PCI_COMMON_HDR_LENGTH FIELD_OFFSET( PCI_COMMON_CONFIG, DeviceSpecific )
|
||
|
#define PCI_EXTENDED_CONFIG_LENGTH 0x00001000
|
||
|
|
||
|
/* Macros to test for PCI common configuration types */
|
||
|
#define PCI_CONFIGURATION_TYPE( x ) \
|
||
|
(((PPCI_COMMON_CONFIG)(x))->HeaderType & ~PCI_MULTIFUNCTION)
|
||
|
#define PCI_MULTIFUNCTION_DEVICE( x ) \
|
||
|
((((PPCI_COMMON_CONFIG)(x))->HeaderType & PCI_MULTIFUNCTION) != 0)
|
||
|
|
||
|
/* PCI capabilities header */
|
||
|
typedef struct _PCI_CAPABILITIES_HEADER {
|
||
|
UCHAR CapabilityID;
|
||
|
UCHAR Next;
|
||
|
} PCI_CAPABILITIES_HEADER;
|
||
|
typedef PCI_CAPABILITIES_HEADER *PPCI_CAPABILITIES_HEADER;
|
||
|
|
||
|
/* PCI power management capability */
|
||
|
typedef struct _PCI_PMC {
|
||
|
UCHAR Version : 3;
|
||
|
UCHAR PMEClock : 1;
|
||
|
UCHAR Rsvd1 : 1;
|
||
|
UCHAR DeviceSpecificInitialization : 1;
|
||
|
UCHAR Rsvd2 : 2;
|
||
|
struct _PM_SUPPORT {
|
||
|
UCHAR Rsvd2 : 1;
|
||
|
UCHAR D1 : 1;
|
||
|
UCHAR D2 : 1;
|
||
|
UCHAR PMED0 : 1;
|
||
|
UCHAR PMED1 : 1;
|
||
|
UCHAR PMED2 : 1;
|
||
|
UCHAR PMED3Hot : 1;
|
||
|
UCHAR PMED3Cold : 1;
|
||
|
} Support;
|
||
|
} PCI_PMC;
|
||
|
typedef PCI_PMC *PPCI_PMC;
|
||
|
|
||
|
/* PCI power management capability status register */
|
||
|
typedef struct _PCI_PMCSR {
|
||
|
USHORT PowerState : 2;
|
||
|
USHORT Rsvd1 : 6;
|
||
|
USHORT PMEEnable : 1;
|
||
|
USHORT DataSelect : 4;
|
||
|
USHORT DataScale : 2;
|
||
|
USHORT PMEStatus : 1;
|
||
|
} PCI_PMCSR;
|
||
|
typedef PCI_PMCSR *PPCI_PMCSR;
|
||
|
|
||
|
/* PCI power management capability status register for bridge support extensions */
|
||
|
typedef struct _PCI_PMCSR_BSE {
|
||
|
UCHAR Rsvd1 : 6;
|
||
|
UCHAR D3HotSupportsStopClock : 1;
|
||
|
UCHAR BusPowerClockControlEnabled : 1;
|
||
|
} PCI_PMCSR_BSE;
|
||
|
typedef PCI_PMCSR_BSE *PPCI_PMCSR_BSE;
|
||
|
|
||
|
/* PCI power management capability */
|
||
|
typedef struct _PCI_PM_CAPABILITY {
|
||
|
PCI_CAPABILITIES_HEADER Header;
|
||
|
union {
|
||
|
PCI_PMC Capabilities;
|
||
|
USHORT AsUSHORT;
|
||
|
} PMC;
|
||
|
union {
|
||
|
PCI_PMCSR ControlStatus;
|
||
|
USHORT AsUSHORT;
|
||
|
} PMCSR;
|
||
|
union {
|
||
|
PCI_PMCSR_BSE BridgeSupport;
|
||
|
UCHAR AsUCHAR;
|
||
|
} PMCSR_BSE;
|
||
|
UCHAR Data;
|
||
|
} PCI_PM_CAPABILITY;
|
||
|
typedef PCI_PM_CAPABILITY *PPCI_PM_CAPABILITY;
|
||
|
|
||
|
/* PCI-X capability */
|
||
|
typedef struct {
|
||
|
PCI_CAPABILITIES_HEADER Header;
|
||
|
union {
|
||
|
struct {
|
||
|
USHORT DataParityErrorRecoveryEnable : 1;
|
||
|
USHORT EnableRelaxedOrdering : 1;
|
||
|
USHORT MaxMemoryReadByteCount : 2;
|
||
|
USHORT MaxOutstandingSplitTransactions : 3;
|
||
|
USHORT Reserved : 9;
|
||
|
} bits;
|
||
|
USHORT AsUSHORT;
|
||
|
} Command;
|
||
|
union {
|
||
|
struct {
|
||
|
ULONG FunctionNumber : 3;
|
||
|
ULONG DeviceNumber : 5;
|
||
|
ULONG BusNumber : 8;
|
||
|
ULONG Device64Bit : 1;
|
||
|
ULONG Capable133MHz : 1;
|
||
|
ULONG SplitCompletionDiscarded : 1;
|
||
|
ULONG UnexpectedSplitCompletion : 1;
|
||
|
ULONG DeviceComplexity : 1;
|
||
|
ULONG DesignedMaxMemoryReadByteCount : 2;
|
||
|
ULONG DesignedMaxOutstandingSplitTransactions : 3;
|
||
|
ULONG DesignedMaxCumulativeReadSize : 3;
|
||
|
ULONG ReceivedSplitCompletionErrorMessage : 1;
|
||
|
ULONG CapablePCIX266 : 1;
|
||
|
ULONG CapablePCIX533 : 1;
|
||
|
} bits;
|
||
|
ULONG AsULONG;
|
||
|
} Status;
|
||
|
} PCI_X_CAPABILITY;
|
||
|
typedef PCI_X_CAPABILITY *PPCI_X_CAPABILITY;
|
||
|
|
||
|
/* PCI express enhanced capability header */
|
||
|
typedef struct _PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER {
|
||
|
USHORT CapabilityID;
|
||
|
USHORT Version : 4;
|
||
|
USHORT Next : 12;
|
||
|
} PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER;
|
||
|
typedef PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER *PPCI_EXPRESS_ENHANCED_CAPABILITY_HEADER;
|
||
|
|
||
|
/* PCI express serial number capability */
|
||
|
typedef struct _PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY {
|
||
|
PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
|
||
|
ULONG LowSerialNumber;
|
||
|
ULONG HighSerialNumber;
|
||
|
} PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY;
|
||
|
typedef PCI_EXPRESS_SERIAL_NUMBER_CAPABILITY *PPCI_EXPRESS_SERIAL_NUMBER_CAPABILITY;
|
||
|
|
||
|
/* PCI express uncorrectable error status */
|
||
|
typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS {
|
||
|
struct {
|
||
|
ULONG Undefined : 1;
|
||
|
ULONG Reserved1 : 3;
|
||
|
ULONG DataLinkProtocolError : 1;
|
||
|
ULONG SurpriseErrorDown : 1;
|
||
|
ULONG Reserved2 : 6;
|
||
|
ULONG PoisonedTLP : 1;
|
||
|
ULONG FlowControlProtocolError : 1;
|
||
|
ULONG CompletionTimeout : 1;
|
||
|
ULONG CompleterAbort : 1;
|
||
|
ULONG UnexpectedCompletion : 1;
|
||
|
ULONG ReceiverOverflow : 1;
|
||
|
ULONG MalformedTLP : 1;
|
||
|
ULONG ECRCError : 1;
|
||
|
ULONG UnsupportedRequestError : 1;
|
||
|
ULONG Reserved3 : 11;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS;
|
||
|
typedef PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS *PPCI_ERROR_UNCORRECTABLE_ERROR_STATUS;
|
||
|
|
||
|
/* PCI express uncorrectable error mask */
|
||
|
typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK {
|
||
|
struct {
|
||
|
ULONG Undefined : 1;
|
||
|
ULONG Reserved1 : 3;
|
||
|
ULONG DataLinkProtocolError : 1;
|
||
|
ULONG SurpriseDownError : 1;
|
||
|
ULONG Reserved2 : 6;
|
||
|
ULONG PoisonedTLP : 1;
|
||
|
ULONG FlowControlProtocolError : 1;
|
||
|
ULONG CompletionTimeout : 1;
|
||
|
ULONG CompleterAbort : 1;
|
||
|
ULONG UnexpectedCompletion : 1;
|
||
|
ULONG ReceiverOverflow : 1;
|
||
|
ULONG MalformedTLP : 1;
|
||
|
ULONG ECRCError : 1;
|
||
|
ULONG UnsupportedRequestError : 1;
|
||
|
ULONG Reserved3 : 11;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK;
|
||
|
typedef PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK *PPCI_EXPRESS_UNCORRECTABLE_ERROR_MASK;
|
||
|
|
||
|
/* PCI express uncorrectable error severity */
|
||
|
typedef union _PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY {
|
||
|
struct {
|
||
|
ULONG Undefined : 1;
|
||
|
ULONG Reserved1 : 3;
|
||
|
ULONG DataLinkProtocolError : 1;
|
||
|
ULONG SurpriseDownError : 1;
|
||
|
ULONG Reserved2 : 6;
|
||
|
ULONG PoisonedTLP : 1;
|
||
|
ULONG FlowControlProtocolError : 1;
|
||
|
ULONG CompletionTimeout : 1;
|
||
|
ULONG CompleterAbort : 1;
|
||
|
ULONG UnexpectedCompletion : 1;
|
||
|
ULONG ReceiverOverflow : 1;
|
||
|
ULONG MalformedTLP : 1;
|
||
|
ULONG ECRCError : 1;
|
||
|
ULONG UnsupportedRequestError : 1;
|
||
|
ULONG Reserved3 : 11;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY;
|
||
|
typedef PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY *PPCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY;
|
||
|
|
||
|
/* PCI express correctable error status */
|
||
|
typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_STATUS {
|
||
|
struct {
|
||
|
ULONG ReceiverError : 1;
|
||
|
ULONG Reserved1 : 5;
|
||
|
ULONG BadTLP : 1;
|
||
|
ULONG BadDLLP : 1;
|
||
|
ULONG ReplayNumRollover : 1;
|
||
|
ULONG Reserved2 : 3;
|
||
|
ULONG ReplayTimerTimeout : 1;
|
||
|
ULONG AdvisoryNonFatalError : 1;
|
||
|
ULONG Reserved3 : 18;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_CORRECTABLE_ERROR_STATUS;
|
||
|
typedef PCI_EXPRESS_CORRECTABLE_ERROR_STATUS *PPCI_EXPRESS_CORRECTABLE_ERROR_STATUS;
|
||
|
|
||
|
/* PCI express correctable error mask */
|
||
|
typedef union _PCI_EXPRESS_CORRECTABLE_ERROR_MASK {
|
||
|
struct {
|
||
|
ULONG ReceiverError : 1;
|
||
|
ULONG Reserved1 : 5;
|
||
|
ULONG BadTLP : 1;
|
||
|
ULONG BadDLLP : 1;
|
||
|
ULONG ReplayNumRollover : 1;
|
||
|
ULONG Reserved2 : 3;
|
||
|
ULONG ReplayTimerTimeout : 1;
|
||
|
ULONG AdvisoryNonFatalError : 1;
|
||
|
ULONG Reserved3 : 18;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_CORRECTABLE_ERROR_MASK;
|
||
|
typedef PCI_EXPRESS_CORRECTABLE_ERROR_MASK *PPCI_EXPRESS_CORRECTABLE_ERROR_MASK;
|
||
|
|
||
|
/* PCI express advanced error reporting capabilities */
|
||
|
typedef union _PCI_EXPRESS_AER_CAPABILITIES {
|
||
|
struct {
|
||
|
ULONG FirstErrorPointer : 5;
|
||
|
ULONG ECRCGenerationCapable : 1;
|
||
|
ULONG ECRCGenerationEnable : 1;
|
||
|
ULONG ECRCCheckCapable : 1;
|
||
|
ULONG ECRCCheckEnable : 1;
|
||
|
ULONG Reserved : 23;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_AER_CAPABILITIES;
|
||
|
typedef PCI_EXPRESS_AER_CAPABILITIES *PPCI_EXPRESS_AER_CAPABILITIES;
|
||
|
|
||
|
/* PCI express root error command */
|
||
|
typedef union _PCI_EXPRESS_ROOT_ERROR_COMMAND {
|
||
|
struct {
|
||
|
ULONG CorrectableErrorReportingEnable : 1;
|
||
|
ULONG NonFatalErrorReportingEnable : 1;
|
||
|
ULONG FatalErrorReportingEnable : 1;
|
||
|
ULONG Reserved : 29;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_ROOT_ERROR_COMMAND;
|
||
|
typedef PCI_EXPRESS_ROOT_ERROR_COMMAND *PPCI_EXPRESS_ROOT_ERROR_COMMAND;
|
||
|
|
||
|
/* PCI express root error status */
|
||
|
typedef union _PCI_EXPRESS_ROOT_ERROR_STATUS {
|
||
|
struct {
|
||
|
ULONG CorrectableErrorReceived : 1;
|
||
|
ULONG MultipleCorrectableErrorsReceived : 1;
|
||
|
ULONG UncorrectableErrorReceived : 1;
|
||
|
ULONG MultipleUncorrectableErrorsReceived : 1;
|
||
|
ULONG FirstUncorrectableFatal : 1;
|
||
|
ULONG NonFatalErrorMessagesReceived : 1;
|
||
|
ULONG FatalErrorMessagesReceived : 1;
|
||
|
ULONG Reserved : 20;
|
||
|
ULONG AdvancedErrorInterruptMessageNumber : 5;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_ROOT_ERROR_STATUS;
|
||
|
typedef PCI_EXPRESS_ROOT_ERROR_STATUS *PPCI_EXPRESS_ROOT_ERROR_STATUS;
|
||
|
|
||
|
/* PCI express error source identifier */
|
||
|
typedef union _PCI_EXPRESS_ERROR_SOURCE_ID {
|
||
|
struct {
|
||
|
USHORT CorrectableSourceIdFun : 3;
|
||
|
USHORT CorrectableSourceIdDev : 5;
|
||
|
USHORT CorrectableSourceIdBus : 8;
|
||
|
USHORT UncorrectableSourceIdFun : 3;
|
||
|
USHORT UncorrectableSourceIdDev : 5;
|
||
|
USHORT UncorrectableSourceIdBus : 8;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_ERROR_SOURCE_ID;
|
||
|
typedef PCI_EXPRESS_ERROR_SOURCE_ID *PPCI_EXPRESS_ERROR_SOURCE_ID;
|
||
|
|
||
|
/* PCI express secondary uncorrectable error status */
|
||
|
typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS {
|
||
|
struct {
|
||
|
ULONG TargetAbortOnSplitCompletion : 1;
|
||
|
ULONG MasterAbortOnSplitCompletion : 1;
|
||
|
ULONG ReceivedTargetAbort : 1;
|
||
|
ULONG ReceivedMasterAbort : 1;
|
||
|
ULONG RsvdZ : 1;
|
||
|
ULONG UnexpectedSplitCompletionError : 1;
|
||
|
ULONG UncorrectableSplitCompletion : 1;
|
||
|
ULONG UncorrectableDataError : 1;
|
||
|
ULONG UncorrectableAttributeError : 1;
|
||
|
ULONG UncorrectableAddressError : 1;
|
||
|
ULONG DelayedTransactionDiscardTimerExpired : 1;
|
||
|
ULONG PERRAsserted : 1;
|
||
|
ULONG SERRAsserted : 1;
|
||
|
ULONG InternalBridgeError : 1;
|
||
|
ULONG Reserved : 18;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS;
|
||
|
typedef PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS;
|
||
|
|
||
|
/* PCI express secondary uncorrectable error mask */
|
||
|
typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK {
|
||
|
struct {
|
||
|
ULONG TargetAbortOnSplitCompletion : 1;
|
||
|
ULONG MasterAbortOnSplitCompletion : 1;
|
||
|
ULONG ReceivedTargetAbort : 1;
|
||
|
ULONG ReceivedMasterAbort : 1;
|
||
|
ULONG RsvdZ : 1;
|
||
|
ULONG UnexpectedSplitCompletionError : 1;
|
||
|
ULONG UncorrectableSplitCompletion : 1;
|
||
|
ULONG UncorrectableDataError : 1;
|
||
|
ULONG UncorrectableAttributeError : 1;
|
||
|
ULONG UncorrectableAddressError : 1;
|
||
|
ULONG DelayedTransactionDiscardTimerExpired : 1;
|
||
|
ULONG PERRAsserted : 1;
|
||
|
ULONG SERRAsserted : 1;
|
||
|
ULONG InternalBridgeError : 1;
|
||
|
ULONG Reserved : 18;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK;
|
||
|
typedef PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK;
|
||
|
|
||
|
/* PCI express secondary uncorrectable error severity */
|
||
|
typedef union _PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY {
|
||
|
struct {
|
||
|
ULONG TargetAbortOnSplitCompletion : 1;
|
||
|
ULONG MasterAbortOnSplitCompletion : 1;
|
||
|
ULONG ReceivedTargetAbort : 1;
|
||
|
ULONG ReceivedMasterAbort : 1;
|
||
|
ULONG RsvdZ : 1;
|
||
|
ULONG UnexpectedSplitCompletionError : 1;
|
||
|
ULONG UncorrectableSplitCompletion : 1;
|
||
|
ULONG UncorrectableDataError : 1;
|
||
|
ULONG UncorrectableAttributeError : 1;
|
||
|
ULONG UncorrectableAddressError : 1;
|
||
|
ULONG DelayedTransactionDiscardTimerExpired : 1;
|
||
|
ULONG PERRAsserted : 1;
|
||
|
ULONG SERRAsserted : 1;
|
||
|
ULONG InternalBridgeError : 1;
|
||
|
ULONG Reserved : 18;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY;
|
||
|
typedef PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY *PPCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY;
|
||
|
|
||
|
/* PCI express secondary advanced error reporting capabilities */
|
||
|
typedef union _PCI_EXPRESS_SEC_AER_CAPABILITIES {
|
||
|
struct {
|
||
|
ULONG SecondaryUncorrectableFirstErrorPtr : 5;
|
||
|
ULONG Reserved : 27;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_SEC_AER_CAPABILITIES;
|
||
|
typedef PCI_EXPRESS_SEC_AER_CAPABILITIES *PPCI_EXPRESS_SEC_AER_CAPABILITIES;
|
||
|
|
||
|
/* PCI express advanced error reporting capability */
|
||
|
typedef struct _PCI_EXPRESS_AER_CAPABILITY {
|
||
|
PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
|
||
|
PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
|
||
|
PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
|
||
|
PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
|
||
|
PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
|
||
|
PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
|
||
|
PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
|
||
|
ULONG HeaderLog[4];
|
||
|
PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
|
||
|
PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
|
||
|
PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
|
||
|
PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
|
||
|
ULONG SecHeaderLog[4];
|
||
|
} PCI_EXPRESS_AER_CAPABILITY;
|
||
|
typedef PCI_EXPRESS_AER_CAPABILITY *PPCI_EXPRESS_AER_CAPABILITY;
|
||
|
|
||
|
/* PCI express root part advanced error reporting capability */
|
||
|
typedef struct _PCI_EXPRESS_ROOTPART_AER_CAPABILITY {
|
||
|
PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
|
||
|
PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
|
||
|
PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
|
||
|
PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
|
||
|
PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
|
||
|
PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
|
||
|
PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
|
||
|
ULONG HeaderLog[4];
|
||
|
PCI_EXPRESS_ROOT_ERROR_COMMAND RootErrorCommand;
|
||
|
PCI_EXPRESS_ROOT_ERROR_STATUS RootErrorStatus;
|
||
|
PCI_EXPRESS_ERROR_SOURCE_ID ErrorSourceId;
|
||
|
} PCI_EXPRESS_ROOTPART_AER_CAPABILITY;
|
||
|
typedef PCI_EXPRESS_ROOTPART_AER_CAPABILITY *PPCI_EXPRESS_ROOTPART_AER_CAPABILITY;
|
||
|
|
||
|
/* PCI express bridge advanced error reporting capability */
|
||
|
typedef struct _PCI_EXPRESS_BRIDGE_AER_CAPABILITY {
|
||
|
PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
|
||
|
PCI_EXPRESS_UNCORRECTABLE_ERROR_STATUS UncorrectableErrorStatus;
|
||
|
PCI_EXPRESS_UNCORRECTABLE_ERROR_MASK UncorrectableErrorMask;
|
||
|
PCI_EXPRESS_UNCORRECTABLE_ERROR_SEVERITY UncorrectableErrorSeverity;
|
||
|
PCI_EXPRESS_CORRECTABLE_ERROR_STATUS CorrectableErrorStatus;
|
||
|
PCI_EXPRESS_CORRECTABLE_ERROR_MASK CorrectableErrorMask;
|
||
|
PCI_EXPRESS_AER_CAPABILITIES CapabilitiesAndControl;
|
||
|
ULONG HeaderLog[4];
|
||
|
PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_STATUS SecUncorrectableErrorStatus;
|
||
|
PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_MASK SecUncorrectableErrorMask;
|
||
|
PCI_EXPRESS_SEC_UNCORRECTABLE_ERROR_SEVERITY SecUncorrectableErrorSeverity;
|
||
|
PCI_EXPRESS_SEC_AER_CAPABILITIES SecCapabilitiesAndControl;
|
||
|
ULONG SecHeaderLog[4];
|
||
|
} PCI_EXPRESS_BRIDGE_AER_CAPABILITY;
|
||
|
typedef PCI_EXPRESS_BRIDGE_AER_CAPABILITY *PPCI_EXPRESS_BRIDGE_AER_CAPABILITY;
|
||
|
|
||
|
/* PCI express single root I/O virtualization capabilities */
|
||
|
typedef union _PCI_EXPRESS_SRIOV_CAPS {
|
||
|
struct {
|
||
|
ULONG VFMigrationCapable : 1;
|
||
|
ULONG Reserved1 : 20;
|
||
|
ULONG VFMigrationInterruptNumber : 11;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_SRIOV_CAPS;
|
||
|
typedef PCI_EXPRESS_SRIOV_CAPS *PPCI_EXPRESS_SRIOV_CAPS;
|
||
|
|
||
|
/* PCI express single root I/O virtualization control */
|
||
|
typedef union _PCI_EXPRESS_SRIOV_CONTROL {
|
||
|
struct {
|
||
|
USHORT VFEnable : 1;
|
||
|
USHORT VFMigrationEnable : 1;
|
||
|
USHORT VFMigrationInterruptEnable : 1;
|
||
|
USHORT VFMemorySpaceEnable : 1;
|
||
|
USHORT ARICapableHierarchy : 1;
|
||
|
USHORT Reserved1 : 11;
|
||
|
};
|
||
|
USHORT AsUSHORT;
|
||
|
} PCI_EXPRESS_SRIOV_CONTROL;
|
||
|
typedef PCI_EXPRESS_SRIOV_CONTROL *PPCI_EXPRESS_SRIOV_CONTROL;
|
||
|
|
||
|
/* PCI express single root I/O virtualization status */
|
||
|
typedef union _PCI_EXPRESS_SRIOV_STATUS {
|
||
|
struct {
|
||
|
USHORT VFMigrationStatus : 1;
|
||
|
USHORT Reserved1 : 15;
|
||
|
};
|
||
|
USHORT AsUSHORT;
|
||
|
} PCI_EXPRESS_SRIOV_STATUS;
|
||
|
typedef PCI_EXPRESS_SRIOV_STATUS *PPCI_EXPRESS_SRIOV_STATUS;
|
||
|
|
||
|
/* PCI express single root I/O virtualization migration state array */
|
||
|
typedef union _PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY {
|
||
|
struct {
|
||
|
ULONG VFMigrationStateBIR : 3;
|
||
|
ULONG VFMigrationStateOffset : 29;
|
||
|
};
|
||
|
ULONG AsULONG;
|
||
|
} PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY;
|
||
|
typedef PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY *PPCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY;
|
||
|
|
||
|
/* PCI express single root I/O virtualization capability */
|
||
|
typedef struct _PCI_EXPRESS_SRIOV_CAPABILITY {
|
||
|
PCI_EXPRESS_ENHANCED_CAPABILITY_HEADER Header;
|
||
|
PCI_EXPRESS_SRIOV_CAPS SRIOVCapabilities;
|
||
|
PCI_EXPRESS_SRIOV_CONTROL SRIOVControl;
|
||
|
PCI_EXPRESS_SRIOV_STATUS SRIOVStatus;
|
||
|
USHORT InitialVFs;
|
||
|
USHORT TotalVFs;
|
||
|
USHORT NumVFs;
|
||
|
UCHAR FunctionDependencyLink;
|
||
|
UCHAR RsvdP1;
|
||
|
USHORT FirstVFOffset;
|
||
|
USHORT VFStride;
|
||
|
USHORT RsvdP2;
|
||
|
USHORT VFDeviceId;
|
||
|
ULONG SupportedPageSizes;
|
||
|
ULONG SystemPageSize;
|
||
|
ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
|
||
|
PCI_EXPRESS_SRIOV_MIGRATION_STATE_ARRAY VFMigrationStateArrayOffset;
|
||
|
} PCI_EXPRESS_SRIOV_CAPABILITY;
|
||
|
typedef PCI_EXPRESS_SRIOV_CAPABILITY *PPCI_EXPRESS_SRIOV_CAPABILITY;
|
||
|
|
||
|
/* PCI device presence parameters */
|
||
|
typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS {
|
||
|
ULONG Size;
|
||
|
ULONG Flags;
|
||
|
USHORT VendorID;
|
||
|
USHORT DeviceID;
|
||
|
UCHAR RevisionID;
|
||
|
USHORT SubVendorID;
|
||
|
USHORT SubSystemID;
|
||
|
UCHAR BaseClass;
|
||
|
UCHAR SubClass;
|
||
|
UCHAR ProgIf;
|
||
|
} PCI_DEVICE_PRESENCE_PARAMETERS;
|
||
|
typedef PCI_DEVICE_PRESENCE_PARAMETERS *PPCI_DEVICE_PRESENCE_PARAMETERS;
|
||
|
|
||
|
/* PCI callbacks */
|
||
|
typedef BOOLEAN (NTAPI PCI_IS_DEVICE_PRESENT)( USHORT, USHORT, UCHAR, USHORT, USHORT, ULONG );
|
||
|
typedef BOOLEAN (NTAPI PCI_IS_DEVICE_PRESENT_EX)( PVOID, PPCI_DEVICE_PRESENCE_PARAMETERS );
|
||
|
typedef NTSTATUS (NTAPI PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE)( PVOID );
|
||
|
typedef NTSTATUS (NTAPI PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE)( PVOID );
|
||
|
typedef ULONG (NTAPI *PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE)( PVOID, PVOID, ULONG, ULONG );
|
||
|
typedef ULONG (NTAPI *PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE)( PVOID, PVOID, ULONG, ULONG );
|
||
|
typedef NTSTATUS (NTAPI PCI_MSIX_SET_ENTRY)( PVOID, ULONG, ULONG );
|
||
|
typedef NTSTATUS (NTAPI PCI_MSIX_MASKUNMASK_ENTRY)( PVOID, ULONG );
|
||
|
typedef NTSTATUS (NTAPI PCI_MSIX_GET_ENTRY)( PVOID, ULONG, PULONG, PBOOLEAN );
|
||
|
typedef NTSTATUS (NTAPI PCI_MSIX_GET_TABLE_SIZE)( PVOID, PULONG );
|
||
|
typedef PCI_IS_DEVICE_PRESENT *PPCI_IS_DEVICE_PRESENT;
|
||
|
typedef PCI_IS_DEVICE_PRESENT_EX *PPCI_IS_DEVICE_PRESENT_EX;
|
||
|
typedef PCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE *PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE;
|
||
|
typedef PCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE *PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE;
|
||
|
typedef PCI_MSIX_SET_ENTRY *PPCI_MSIX_SET_ENTRY;
|
||
|
typedef PCI_MSIX_MASKUNMASK_ENTRY *PPCI_MSIX_MASKUNMASK_ENTRY;
|
||
|
typedef PCI_MSIX_GET_ENTRY *PPCI_MSIX_GET_ENTRY;
|
||
|
typedef PCI_MSIX_GET_TABLE_SIZE *PPCI_MSIX_GET_TABLE_SIZE;
|
||
|
|
||
|
/* PCI device present interface */
|
||
|
typedef struct _PCI_DEVICE_PRESENT_INTERFACE {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PVOID Context;
|
||
|
PINTERFACE_REFERENCE InterfaceReference;
|
||
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
||
|
PPCI_IS_DEVICE_PRESENT IsDevicePresent;
|
||
|
PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx;
|
||
|
} PCI_DEVICE_PRESENT_INTERFACE;
|
||
|
typedef PCI_DEVICE_PRESENT_INTERFACE *PPCI_DEVICE_PRESENT_INTERFACE;
|
||
|
|
||
|
/* PCI express link quiescent interface */
|
||
|
typedef struct _PCI_EXPRESS_LINK_QUIESCENT_INTERFACE {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PVOID Context;
|
||
|
PINTERFACE_REFERENCE InterfaceReference;
|
||
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
||
|
PPCI_EXPRESS_ENTER_LINK_QUIESCENT_MODE PciExpressEnterLinkQuiescentMode;
|
||
|
PPCI_EXPRESS_EXIT_LINK_QUIESCENT_MODE PciExpressExitLinkQuiescentMode;
|
||
|
} PCI_EXPRESS_LINK_QUIESCENT_MODE;
|
||
|
typedef PCI_EXPRESS_LINK_QUIESCENT_MODE *PPCI_EXPRESS_LINK_QUIESCENT_MODE;
|
||
|
|
||
|
/* PCI express root port interface */
|
||
|
typedef struct _PCI_EXPRESS_ROOT_PORT_INTERFACE {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PVOID Context;
|
||
|
PINTERFACE_REFERENCE InterfaceReference;
|
||
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
||
|
PPCI_EXPRESS_ROOT_PORT_READ_CONFIG_SPACE ReadConfigSpace;
|
||
|
PPCI_EXPRESS_ROOT_PORT_WRITE_CONFIG_SPACE WriteConfigSpace;
|
||
|
} PCI_EXPRESS_ROOT_PORT_INTERFACE;
|
||
|
typedef PCI_EXPRESS_ROOT_PORT_INTERFACE *PPCI_EXPRESS_ROOT_PORT_INTERFACE;
|
||
|
|
||
|
/* PCI MSI-X table configuration interface */
|
||
|
typedef struct _PCI_MSIX_TABLE_CONFIG_INTERFACE {
|
||
|
USHORT Size;
|
||
|
USHORT Version;
|
||
|
PVOID Context;
|
||
|
PINTERFACE_REFERENCE InterfaceReference;
|
||
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
||
|
PPCI_MSIX_SET_ENTRY SetTableEntry;
|
||
|
PPCI_MSIX_MASKUNMASK_ENTRY MaskTableEntry;
|
||
|
PPCI_MSIX_MASKUNMASK_ENTRY UnmaskTableEntry;
|
||
|
PPCI_MSIX_GET_ENTRY GetTableEntry;
|
||
|
PPCI_MSIX_GET_TABLE_SIZE GetTableSize;
|
||
|
} PCI_MSIX_TABLE_CONFIG_INTERFACE;
|
||
|
typedef PCI_MSIX_TABLE_CONFIG_INTERFACE *PPCI_MSIX_TABLE_CONFIG_INTERFACE;
|
||
|
|
||
|
/* EM rule states */
|
||
|
typedef enum {
|
||
|
STATE_FALSE = 0,
|
||
|
STATE_UNKNOWN = 1,
|
||
|
STATE_TRUE = 2
|
||
|
} EM_RULE_STATE;
|
||
|
typedef EM_RULE_STATE *PEM_RULE_STATE;
|
||
|
|
||
|
/* EM entry data */
|
||
|
typedef struct _EM_ENTRY_DATA {
|
||
|
PVOID Data;
|
||
|
ULONG DataLength;
|
||
|
} EM_ENTRY_DATA;
|
||
|
typedef EM_ENTRY_DATA *PEM_ENTRY_DATA;
|
||
|
|
||
|
/* EM callbacks */
|
||
|
typedef EM_RULE_STATE (NTAPI EM_CALLBACK_ROUTINE)( EM_ENTRY_DATA **, ULONG, LPCSTR *, ULONG, PULONG, ULONG, PVOID );
|
||
|
typedef VOID (NTAPI EM_LAZYENTRY_CALLBACK_ROUTINE)( LPCGUID, PVOID );
|
||
|
typedef VOID (NTAPI EM_RULE_STATE_NOTIFY_ROUTINE)( EM_RULE_STATE, LPCGUID, PVOID );
|
||
|
typedef EM_CALLBACK_ROUTINE *PEM_CALLBACK_ROUTINE;
|
||
|
typedef PEM_CALLBACK_ROUTINE EM_CALLBACK_FUNC;
|
||
|
typedef EM_LAZYENTRY_CALLBACK_ROUTINE *PEM_LAZYENTRY_CALLBACK_ROUTINE;
|
||
|
typedef PEM_LAZYENTRY_CALLBACK_ROUTINE EM_LAZYENTRY_CALLBACK;
|
||
|
typedef EM_RULE_STATE_NOTIFY_ROUTINE *PEM_RULE_STATE_NOTIFY_ROUTINE;
|
||
|
typedef PEM_RULE_STATE_NOTIFY_ROUTINE EM_RULE_STATE_NOTIFY;
|
||
|
|
||
|
/* EM entry registration */
|
||
|
typedef struct _EM_ENTRY_REGISTRATION {
|
||
|
LPCGUID EntryGuid;
|
||
|
EM_LAZYENTRY_CALLBACK LazyEntryCallback;
|
||
|
PVOID LazyCallbackContext;
|
||
|
} EM_ENTRY_REGISTRATION;
|
||
|
typedef EM_ENTRY_REGISTRATION *PEM_ENTRY_REGISTRATION;
|
||
|
|
||
|
/* EM callback registration */
|
||
|
typedef struct _EM_CALLBACK_REGISTRATION {
|
||
|
LPCGUID CallbackGuid;
|
||
|
EM_CALLBACK_FUNC CallbackFunction;
|
||
|
PVOID Context;
|
||
|
} EM_CALLBACK_REGISTRATION;
|
||
|
typedef EM_CALLBACK_REGISTRATION *PEM_CALLBACK_REGISTRATION;
|
||
|
|
||
|
/* EM client notification registration */
|
||
|
typedef struct _EM_CLIENT_NOTIFICATION_REGISTRATION {
|
||
|
LPCGUID RuleId;
|
||
|
EM_RULE_STATE_NOTIFY RuleNotifyCallback;
|
||
|
PVOID Context;
|
||
|
} EM_CLIENT_NOTIFICATION_REGISTRATION;
|
||
|
typedef EM_CLIENT_NOTIFICATION_REGISTRATION *PEM_CLIENT_NOTIFICATION_REGISTRATION;
|
||
|
|
||
|
/* Common log file system LSN */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLS_LSN {
|
||
|
ULONGLONG Internal;
|
||
|
} CLS_LSN;
|
||
|
typedef CLS_LSN *PCLS_LSN;
|
||
|
typedef CLS_LSN *PPCLS_LSN;
|
||
|
typedef CLS_LSN CLFS_LSN;
|
||
|
typedef CLFS_LSN *PCLFS_LSN;
|
||
|
typedef CLFS_LSN **PPCLFS_LSN;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system context modes */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef enum _CLS_CONTEXT_MODE {
|
||
|
ClsContextNone = 0x00,
|
||
|
ClsContextUndoNext = 0x01,
|
||
|
ClsContextPrevious = 0x02,
|
||
|
ClsContextForward = 0x03
|
||
|
} CLS_CONTEXT_MODE;
|
||
|
typedef CLS_CONTEXT_MODE *PCLS_CONTEXT_MODE;
|
||
|
typedef CLS_CONTEXT_MODE **PPCLS_CONTEXT_MODE;
|
||
|
typedef enum _CLFS_CONTEXT_MODE {
|
||
|
ClfsContextNone = 0x00,
|
||
|
ClfsContextUndoNext = 0x01,
|
||
|
ClfsContextPrevious = 0x02,
|
||
|
ClfsContextForward = 0x03
|
||
|
} CLFS_CONTEXT_MODE;
|
||
|
typedef CLFS_CONTEXT_MODE *PCLFS_CONTEXT_MODE;
|
||
|
typedef CLFS_CONTEXT_MODE *PPCLFS_CONTEXT_MODE;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system node identifier */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLFS_NODE_ID {
|
||
|
ULONG cType;
|
||
|
ULONG cbNode;
|
||
|
} CLFS_NODE_ID;
|
||
|
typedef CLFS_NODE_ID *PCLFS_NODE_ID;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system write entry */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLS_WRITE_ENTRY {
|
||
|
PVOID Buffer;
|
||
|
ULONG ByteLength;
|
||
|
} CLS_WRITE_ENTRY;
|
||
|
typedef CLS_WRITE_ENTRY *PCLS_WRITE_ENTRY;
|
||
|
typedef CLS_WRITE_ENTRY **PPCLS_WRITE_ENTRY;
|
||
|
typedef CLS_WRITE_ENTRY CLFS_WRITE_ENTRY;
|
||
|
typedef CLFS_WRITE_ENTRY *PCLFS_WRITE_ENTRY;
|
||
|
typedef CLFS_WRITE_ENTRY **PPCLFS_WRITE_ENTRY;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system information */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLS_INFORMATION {
|
||
|
LONGLONG TotalAvailable;
|
||
|
LONGLONG CurrentAvailable;
|
||
|
LONGLONG TotalReservation;
|
||
|
ULONGLONG BaseFileSize;
|
||
|
ULONGLONG ContainerSize;
|
||
|
ULONG TotalContainers;
|
||
|
ULONG FreeContainers;
|
||
|
ULONG TotalClients;
|
||
|
ULONG Attributes;
|
||
|
ULONG FlushThreshold;
|
||
|
ULONG SectorSize;
|
||
|
CLS_LSN MinArchiveTailLsn;
|
||
|
CLS_LSN BaseLsn;
|
||
|
CLS_LSN LastFlushedLsn;
|
||
|
CLS_LSN LastLsn;
|
||
|
CLS_LSN RestartLsn;
|
||
|
GUID Identity;
|
||
|
} CLS_INFORMATION;
|
||
|
typedef CLS_INFORMATION *PCLS_INFORMATION;
|
||
|
typedef CLS_INFORMATION **PPCLS_INFORMATION;
|
||
|
typedef CLS_INFORMATION CLFS_INFORMATION;
|
||
|
typedef CLFS_INFORMATION *PCLFS_INFORMATION;
|
||
|
typedef CLFS_INFORMATION **PPCLFS_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system client information */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLS_CLIENT_INFORMATION {
|
||
|
CLS_INFORMATION ClfsInfo;
|
||
|
ULONG ClientAttributes;
|
||
|
LONGLONG ClientUndoCommitment;
|
||
|
CLS_LSN ClientArchiveTailLsn;
|
||
|
CLS_LSN ClientBaseLsn;
|
||
|
CLS_LSN ClientLastLsn;
|
||
|
CLS_LSN ClientRestartLsn;
|
||
|
} CLS_CLIENT_INFORMATION;
|
||
|
typedef CLS_CLIENT_INFORMATION *PCLS_CLIENT_INFORMATION;
|
||
|
typedef CLS_CLIENT_INFORMATION *PPCLS_CLIENT_INFORMATION;
|
||
|
typedef CLS_CLIENT_INFORMATION CLFS_CLIENT_INFORMATION;
|
||
|
typedef CLFS_CLIENT_INFORMATION *PCLFS_CLIENT_INFORMATION;
|
||
|
typedef CLFS_CLIENT_INFORMATION *PPCLFS_CLIENT_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system log name information */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLFS_LOG_NAME_INFORMATION {
|
||
|
USHORT NameLengthInBytes;
|
||
|
WCHAR Name[1];
|
||
|
} CLFS_LOG_NAME_INFORMATION;
|
||
|
typedef CLFS_LOG_NAME_INFORMATION *PCLFS_LOG_NAME_INFORMATION;
|
||
|
typedef CLFS_LOG_NAME_INFORMATION *PPCLFS_LOG_NAME_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system stream identifier information */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLFS_STREAM_ID_INFORMATION {
|
||
|
UCHAR StreamIdentifier;
|
||
|
} CLFS_STREAM_ID_INFORMATION;
|
||
|
typedef CLFS_STREAM_ID_INFORMATION *PCLFS_STREAM_ID_INFORMATION;
|
||
|
typedef CLFS_STREAM_ID_INFORMATION *PPCLFS_STREAM_ID_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system physical LSN information */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
#include <pshpack8.h>
|
||
|
typedef struct _CLFS_PHYSICAL_LSN_INFORMATION {
|
||
|
UCHAR StreamIdentifier;
|
||
|
CLFS_LSN VirtualLsn;
|
||
|
CLFS_LSN PhysicalLsn;
|
||
|
} CLFS_PHYSICAL_LSN_INFORMATION;
|
||
|
typedef CLFS_PHYSICAL_LSN_INFORMATION *PCLFS_PHYSICAL_LSN_INFORMATION;
|
||
|
#include <poppack.h>
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system container information */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLS_CONTAINER_INFORMATION {
|
||
|
ULONG FileAttributes;
|
||
|
ULONGLONG CreationTime;
|
||
|
ULONGLONG LastAccessTime;
|
||
|
ULONGLONG LastWriteTime;
|
||
|
LONGLONG ContainerSize;
|
||
|
ULONG FileNameActualLength;
|
||
|
ULONG FileNameLength;
|
||
|
WCHAR FileName[CLFS_MAX_CONTAINER_INFO];
|
||
|
CLFS_CONTAINER_STATE State;
|
||
|
CLFS_CONTAINER_ID PhysicalContainerId;
|
||
|
CLFS_CONTAINER_ID LogicalContainerId;
|
||
|
} CLS_CONTAINER_INFORMATION;
|
||
|
typedef CLS_CONTAINER_INFORMATION *PCLS_CONTAINER_INFORMATION;
|
||
|
typedef CLS_CONTAINER_INFORMATION **PPCLS_CONTAINER_INFORMATION;
|
||
|
typedef CLS_CONTAINER_INFORMATION CLFS_CONTAINER_INFORMATION;
|
||
|
typedef CLFS_CONTAINER_INFORMATION *PCLFS_CONTAINER_INFORMATION;
|
||
|
typedef CLFS_CONTAINER_INFORMATION **PPCFLS_CONTAINER_INFORMATION;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system log information classes */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef enum _CLS_LOG_INFORMATION_CLASS {
|
||
|
ClfsLogBasicInformation = 0x00,
|
||
|
ClfsLogBasicInformationPhysical = 0x01,
|
||
|
ClfsLogPhysicalNameInformation = 0x02,
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
ClfsLogStreamIdentifierInformation = 0x03,
|
||
|
ClfsLogSystemMarkingInformation = 0x04,
|
||
|
ClfsLogPhysicalLsnInformation = 0x05
|
||
|
#else
|
||
|
ClfsLogStreamIdentifierInformation = 0x03
|
||
|
#endif
|
||
|
} CLS_LOG_INFORMATION_CLASS;
|
||
|
typedef CLS_LOG_INFORMATION_CLASS *PCLS_LOG_INFORMATION_CLASS;
|
||
|
typedef CLS_LOG_INFORMATION_CLASS **PPCLS_LOG_INFORMATION_CLASS;
|
||
|
typedef CLS_LOG_INFORMATION_CLASS CLFS_LOG_INFORMATION_CLASS;
|
||
|
typedef CLFS_LOG_INFORMATION_CLASS *PCLFS_LOG_INFORMATION_CLASS;
|
||
|
typedef CLFS_LOG_INFORMATION_CLASS **PPCFLS_LOG_INFORMATION_CLASS;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system I/O statistics classes */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef enum _CLS_IOSTATS_CLASS {
|
||
|
ClsIoStatsDefault = 0x0000,
|
||
|
ClsIoStatsMax = 0xFFFF
|
||
|
} CLS_IOSTATS_CLASS;
|
||
|
typedef CLS_IOSTATS_CLASS *PCLS_IOSTATS_CLASS;
|
||
|
typedef CLS_IOSTATS_CLASS **PPCLS_IOSTATS_CLASS;
|
||
|
typedef enum _CLFS_IOSTATS_CLASS {
|
||
|
ClfsIoStatsDefault = 0x0000,
|
||
|
ClfsIoStatsMax = 0xFFFF
|
||
|
} CLFS_IOSTATS_CLASS;
|
||
|
typedef CLFS_IOSTATS_CLASS *PCLFS_IOSTATS_CLASS;
|
||
|
typedef CLFS_IOSTATS_CLASS **PPCLFS_IOSTATS_CLASS;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system I/O statistics header */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLS_IO_STATISTICS_HEADER {
|
||
|
UCHAR ubMajorVersion;
|
||
|
UCHAR ubMinorVersion;
|
||
|
CLFS_IOSTATS_CLASS eStatsClass;
|
||
|
USHORT cbLength;
|
||
|
ULONG coffData;
|
||
|
} CLS_IO_STATISTICS_HEADER;
|
||
|
typedef CLS_IO_STATISTICS_HEADER *PCLS_IO_STATISTICS_HEADER;
|
||
|
typedef CLS_IO_STATISTICS_HEADER **PPCLS_IO_STATISTICS_HEADER;
|
||
|
typedef CLS_IO_STATISTICS_HEADER CLFS_IO_STATISTICS_HEADER;
|
||
|
typedef CLFS_IO_STATISTICS_HEADER *PCLFS_IO_STATISTICS_HEADER;
|
||
|
typedef CLFS_IO_STATISTICS_HEADER **PPCLFS_IO_STATISTICS_HEADER;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system I/O statistics */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLS_IO_STATISTICS {
|
||
|
CLS_IO_STATISTICS_HEADER hdrIoStats;
|
||
|
ULONGLONG cFlush;
|
||
|
ULONGLONG cbFlush;
|
||
|
ULONGLONG cMetaFlush;
|
||
|
ULONGLONG cbMetaFlush;
|
||
|
} CLS_IO_STATISTICS;
|
||
|
typedef CLS_IO_STATISTICS *PCLS_IO_STATISTICS;
|
||
|
typedef CLS_IO_STATISTICS **PPCLS_IO_STATISTICS;
|
||
|
typedef CLS_IO_STATISTICS CLFS_IO_STATISTICS;
|
||
|
typedef CLFS_IO_STATISTICS *PCLFS_IO_STATISTICS;
|
||
|
typedef CLFS_IO_STATISTICS **PPCLFS_IO_STATISTICS;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system scan context */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLS_SCAN_CONTEXT {
|
||
|
CLFS_NODE_ID cidNode;
|
||
|
PLOG_FILE_OBJECT plfoLog;
|
||
|
ULONG cIndex;
|
||
|
ULONG cContainers;
|
||
|
ULONG cContainersReturned;
|
||
|
CLFS_SCAN_MODE eScanMode;
|
||
|
PCLS_CONTAINER_INFORMATION pinfoContainer;
|
||
|
} CLS_SCAN_CONTEXT;
|
||
|
typedef CLS_SCAN_CONTEXT *PCLS_SCAN_CONTEXT;
|
||
|
typedef CLS_SCAN_CONTEXT *PPCLS_SCAN_CONTEXT;
|
||
|
typedef CLS_SCAN_CONTEXT CLFS_SCAN_CONTEXT;
|
||
|
typedef CLFS_SCAN_CONTEXT *PCLFS_SCAN_CONTEXT;
|
||
|
typedef CLFS_SCAN_CONTEXT **PPCLFS_SCAN_CONTEXT;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system archive descriptor */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLS_ARCHIVE_DESCRIPTOR {
|
||
|
ULONGLONG coffLow;
|
||
|
ULONGLONG coffHigh;
|
||
|
CLS_CONTAINER_INFORMATION infoContainer;
|
||
|
} CLS_ARCHIVE_DESCRIPTOR;
|
||
|
typedef CLS_ARCHIVE_DESCRIPTOR *PCLS_ARCHIVE_DESCRIPTOR;
|
||
|
typedef CLS_ARCHIVE_DESCRIPTOR *PPCLS_ARCHIVE_DESCRIPTOR;
|
||
|
typedef CLS_ARCHIVE_DESCRIPTOR CLFS_ARCHIVE_DESCRIPTOR;
|
||
|
typedef CLFS_ARCHIVE_DESCRIPTOR *PCLFS_ARCHIVE_DESCRIPTOR;
|
||
|
typedef CLFS_ARCHIVE_DESCRIPTOR **PPCLFS_ARCHIVE_DESCRIPTOR;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system callbacks */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef PVOID (NTAPI *CLFS_BLOCK_ALLOCATION)( ULONG, PVOID );
|
||
|
typedef void (NTAPI *CLFS_BLOCK_DEALLOCATION)( PVOID, PVOID );
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system log archive modes */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef enum _CLFS_LOG_ARCHIVE_MODE {
|
||
|
ClfsLogArchiveEnabled = 0x01,
|
||
|
ClfsLogArchiveDisabled = 0x02
|
||
|
} CLFS_LOG_ARCHIVE_MODE;
|
||
|
typedef CLFS_LOG_ARCHIVE_MODE *PCLFS_LOG_ARCHIVE_MODE;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system management policy types */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef enum _CLFS_MGMT_POLICY_TYPE {
|
||
|
ClfsMgmtPolicyMaximumSize = 0,
|
||
|
ClfsMgmtPolicyMinimumSize = 1,
|
||
|
ClfsMgmtPolicyNewContainerSize = 2,
|
||
|
ClfsMgmtPolicyGrowthRate = 3,
|
||
|
ClfsMgmtPolicyLogTail = 4,
|
||
|
ClfsMgmtPolicyAutoShrink = 5,
|
||
|
ClfsMgmtPolicyAutoGrow = 6,
|
||
|
ClfsMgmtPolicyNewContainerPrefix = 7,
|
||
|
ClfsMgmtPolicyNewContainerSuffix = 8,
|
||
|
ClfsMgmtPolicyNewContainerExtension = 9,
|
||
|
ClfsMgmtPolicyInvalid = 10
|
||
|
} CLFS_MGMT_POLICY_TYPE;
|
||
|
typedef CLFS_MGMT_POLICY_TYPE *PCLFS_MGMT_POLICY_TYPE;
|
||
|
#define CLFS_MGMT_NUM_POLICIES ClfsMgmtPolicyInvalid
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system management policy */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLFS_MGMT_POLICY {
|
||
|
ULONG Version;
|
||
|
ULONG LengthInBytes;
|
||
|
ULONG PolicyFlags;
|
||
|
CLFS_MGMT_POLICY_TYPE PolicyType;
|
||
|
union {
|
||
|
struct {
|
||
|
ULONG Containers;
|
||
|
} MaximumSize;
|
||
|
struct {
|
||
|
ULONG Containers;
|
||
|
} MinimumSize;
|
||
|
struct {
|
||
|
ULONG SizeInBytes;
|
||
|
} NewContainerSize;
|
||
|
struct {
|
||
|
ULONG AbsoluteGrowthInContainers;
|
||
|
ULONG RelativeGrowthPercentage;
|
||
|
} GrowthRate;
|
||
|
struct {
|
||
|
ULONG MinimumAvailablePercentage;
|
||
|
ULONG MinimumAvailableContainers;
|
||
|
} LogTail;
|
||
|
struct {
|
||
|
ULONG Percentage;
|
||
|
} AutoShrink;
|
||
|
struct {
|
||
|
ULONG Enabled;
|
||
|
} AutoGrow;
|
||
|
struct {
|
||
|
USHORT PrefixLengthInBytes;
|
||
|
WCHAR PrefixString[1];
|
||
|
} NewContainerPrefix;
|
||
|
struct {
|
||
|
ULONGLONG NextContainerSuffix;
|
||
|
} NewContainerSuffix;
|
||
|
struct {
|
||
|
USHORT ExtensionLengthInBytes;
|
||
|
WCHAR ExtensionString[1];
|
||
|
} NewContainerExtension;
|
||
|
} PolicyParameters;
|
||
|
} CLFS_MGMT_POLICY;
|
||
|
typedef CLFS_MGMT_POLICY *PCLFS_MGMT_POLICY;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system management notification types */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef enum _CLFS_MGMT_NOTIFICATION_TYPE {
|
||
|
ClfsMgmtAdvanceTailNotification = 0,
|
||
|
ClfsMgmtLogFullHandlerNotification = 1,
|
||
|
ClfsMgmtLogUnpinnedNotification = 2,
|
||
|
ClfsMgmtLogWriteNotification = 3
|
||
|
} CLFS_MGMT_NOTIFICATION_TYPE;
|
||
|
typedef CLFS_MGMT_NOTIFICATION_TYPE *PCLFS_MGMT_NOTIFICATION_TYPE;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system management notification */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLFS_MGMT_NOTIFICATION {
|
||
|
CLFS_MGMT_NOTIFICATION_TYPE Notification;
|
||
|
CLFS_LSN Lsn;
|
||
|
USHORT LogIsPinned;
|
||
|
} CLFS_MGMT_NOTIFICATION;
|
||
|
typedef CLFS_MGMT_NOTIFICATION *PCLFS_MGMT_NOTIFICATION;
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system callbacks */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef NTSTATUS (NTAPI *PCLFS_CLIENT_ADVANCE_TAIL_CALLBACK)( PLOG_FILE_OBJECT, PCLFS_LSN, PVOID );
|
||
|
typedef VOID (NTAPI *PCLFS_CLIENT_LFF_HANDLER_COMPLETE_CALLBACK)( PLOG_FILE_OBJECT, NTSTATUS, BOOLEAN, PVOID );
|
||
|
typedef VOID (NTAPI *PCLFS_CLIENT_LOG_UNPINNED_CALLBACK)( PLOG_FILE_OBJECT, PVOID );
|
||
|
typedef VOID (NTAPI *PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK)( PLOG_FILE_OBJECT, NTSTATUS, PVOID );
|
||
|
#endif
|
||
|
|
||
|
/* Common log file system management client registration */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
typedef struct _CLFS_MGMT_CLIENT_REGISTRATION {
|
||
|
ULONG Version;
|
||
|
PCLFS_CLIENT_ADVANCE_TAIL_CALLBACK AdvanceTailCallback;
|
||
|
PVOID AdvanceTailCallbackData;
|
||
|
PCLFS_CLIENT_LFF_HANDLER_COMPLETE_CALLBACK LogGrowthCompleteCallback;
|
||
|
PVOID LogGrowthCompleteCallbackData;
|
||
|
PCLFS_CLIENT_LOG_UNPINNED_CALLBACK LogUnpinnedCallback;
|
||
|
PVOID LogUnpinnedCallbackData;
|
||
|
} CLFS_MGMT_CLIENT_REGISTRATION;
|
||
|
typedef CLFS_MGMT_CLIENT_REGISTRATION *PCLFS_MGMT_CLIENT_REGISTRATION;
|
||
|
#endif
|
||
|
|
||
|
/* Transaction manager callbacks */
|
||
|
typedef NTSTATUS (NTAPI *PTM_RM_NOTIFICATION)( PKENLISTMENT, PVOID, PVOID, ULONG, PLARGE_INTEGER, ULONG, PVOID );
|
||
|
typedef NTSTATUS (NTAPI *PTM_PROPAGATE_ROUTINE)( PVOID, PVOID, NTSTATUS, GUID );
|
||
|
|
||
|
/* PCW counter descriptor */
|
||
|
typedef struct _PCW_COUNTER_DESCRIPTOR {
|
||
|
USHORT Id;
|
||
|
USHORT StructIndex;
|
||
|
USHORT Offset;
|
||
|
USHORT Size;
|
||
|
} PCW_COUNTER_DESCRIPTOR;
|
||
|
typedef PCW_COUNTER_DESCRIPTOR *PPCW_COUNTER_DESCRIPTOR;
|
||
|
|
||
|
/* PCW data */
|
||
|
typedef struct _PCW_DATA {
|
||
|
const VOID *Data;
|
||
|
ULONG Size;
|
||
|
} PCW_DATA;
|
||
|
typedef PCW_DATA *PPCW_DATA;
|
||
|
|
||
|
/* PCW counter information */
|
||
|
typedef struct _PCW_COUNTER_INFORMATION {
|
||
|
ULONG64 CounterMask;
|
||
|
PCUNICODE_STRING InstanceMask;
|
||
|
} PCW_COUNTER_INFORMATION;
|
||
|
typedef PCW_COUNTER_INFORMATION *PPCW_COUNTER_INFORMATION;
|
||
|
|
||
|
/* PCW mask information */
|
||
|
typedef struct _PCW_MASK_INFORMATION {
|
||
|
ULONG64 CounterMask;
|
||
|
PCUNICODE_STRING InstanceMask;
|
||
|
ULONG InstanceId;
|
||
|
BOOLEAN CollectMultiple;
|
||
|
PPCW_BUFFER Buffer;
|
||
|
PKEVENT CancelEvent;
|
||
|
} PCW_MASK_INFORMATION;
|
||
|
typedef PCW_MASK_INFORMATION *PPCW_MASK_INFORMATION;
|
||
|
|
||
|
/* PCW callback information */
|
||
|
typedef union _PCW_CALLBACK_INFORMATION {
|
||
|
PCW_COUNTER_INFORMATION AddCounter;
|
||
|
PCW_COUNTER_INFORMATION RemoveCounter;
|
||
|
PCW_MASK_INFORMATION EnumerateInstances;
|
||
|
PCW_MASK_INFORMATION CollectData;
|
||
|
} PCW_CALLBACK_INFORMATION;
|
||
|
typedef PCW_CALLBACK_INFORMATION *PPCW_CALLBACK_INFORMATION;
|
||
|
|
||
|
/* PCW callback types */
|
||
|
typedef enum _PCW_CALLBACK_TYPE {
|
||
|
PcwCallbackAddCounter = 0,
|
||
|
PcwCallbackRemoveCounter = 1,
|
||
|
PcwCallbackEnumerateInstances = 2,
|
||
|
PcwCallbackCollectData = 3
|
||
|
} PCW_CALLBACK_TYPE;
|
||
|
typedef PCW_CALLBACK_TYPE *PPCW_CALLBACK_TYPE;
|
||
|
|
||
|
/* PCW callback */
|
||
|
typedef NTSTATUS (NTAPI PCW_CALLBACK)( PCW_CALLBACK_TYPE, PPCW_CALLBACK_INFORMATION, PVOID );
|
||
|
typedef PCW_CALLBACK *PPCW_CALLBACK;
|
||
|
|
||
|
/* PCW registration information */
|
||
|
typedef struct _PCW_REGISTRATION_INFORMATION {
|
||
|
ULONG Version;
|
||
|
PCUNICODE_STRING Name;
|
||
|
ULONG CounterCount;
|
||
|
PPCW_COUNTER_DESCRIPTOR Counters;
|
||
|
PPCW_CALLBACK Callback;
|
||
|
PVOID CallbackContext;
|
||
|
} PCW_REGISTRATION_INFORMATION;
|
||
|
typedef PCW_REGISTRATION_INFORMATION *PPCW_REGISTRATION_INFORMATION;
|
||
|
|
||
|
/* Global variables in NTOSKRNL.EXE and NTDLL.DLL */
|
||
|
extern NTSYSAPI BOOLEAN *NlsMbCodePageTag;
|
||
|
extern NTSYSAPI BOOLEAN *NlsMbOemCodePageTag;
|
||
|
|
||
|
/* Global variables in NTOSKRNL.EXE */
|
||
|
extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled;
|
||
|
extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent;
|
||
|
extern NTKERNELAPI PBOOLEAN Mm64BitPhysicalAddress;
|
||
|
extern NTKERNELAPI PVOID MmBadPointer;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *CmKeyObjectType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *IoFileObjectType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *ExEventObjectType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *ExSemaphoreObjectType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *TmTransactionManagerObjectType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *TmResourceManagerObjectType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *TmEnlistmentObjectType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *TmTransactionObjectType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *PsProcessType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *PsThreadType;
|
||
|
extern NTKERNELAPI POBJECT_TYPE *SeTokenObjectType;
|
||
|
#ifdef _X86_
|
||
|
extern NTKERNELAPI volatile KSYSTEM_TIME KeTickCount;
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
extern NTKERNELAPI volatile CCHAR KeNumberProcessors;
|
||
|
#elif (NTDDI_VERSION >= 0x05010000)
|
||
|
extern NTKERNELAPI CCHAR KeNumberProcessors;
|
||
|
#else
|
||
|
extern NTKERNELAPI PCCHAR KeNumberProcessors;
|
||
|
#endif
|
||
|
|
||
|
/* Global variables in CLFS.SYS */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
extern CLFSUSER_API const CLFS_LSN CLFS_LSN_INVALID;
|
||
|
extern CLFSUSER_API const CLFS_LSN CLFS_LSN_NULL;
|
||
|
#endif
|
||
|
|
||
|
/* Functions in NTOSKRNL.EXE and NTDLL.DLL */
|
||
|
NTSYSAPI ULONG __cdecl DbgPrint( PCSTR, ... );
|
||
|
NTSYSAPI VOID NTAPI RtlAssert( PVOID, PVOID, ULONG, PSTR );
|
||
|
NTSYSAPI VOID NTAPI RtlFreeUnicodeString( PUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlGUIDFromString( PUNICODE_STRING, GUID * );
|
||
|
NTSYSAPI VOID NTAPI RtlInitUnicodeString( PUNICODE_STRING, PCWSTR );
|
||
|
NTSYSAPI BOOLEAN NTAPI RtlIsNtDdiVersionAvailable( ULONG );
|
||
|
NTSYSAPI BOOLEAN NTAPI RtlIsServicePackVersionInstalled( ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlStringFromGUID( REFGUID, PUNICODE_STRING );
|
||
|
#if (NTDDI_VERSION >= 0x05000000)
|
||
|
NTSYSAPI VOID NTAPI DbgBreakPoint( VOID );
|
||
|
NTSYSAPI VOID NTAPI DbgBreakPointWithStatus( ULONG );
|
||
|
NTSYSAPI ULONG __cdecl DbgPrintReturnControlC( PCCH, ... );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString( PUNICODE_STRING, PCANSI_STRING, BOOLEAN );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString( PUNICODE_STRING, PCUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeToString( PUNICODE_STRING, PCWSTR );
|
||
|
NTSYSAPI BOOLEAN NTAPI RtlAreBitsClear( PRTL_BITMAP, ULONG, ULONG );
|
||
|
NTSYSAPI BOOLEAN NTAPI RtlAreBitsSet( PRTL_BITMAP, ULONG, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlCheckRegistryKey( ULONG, PWSTR );
|
||
|
NTSYSAPI VOID NTAPI RtlClearAllBits( PRTL_BITMAP );
|
||
|
NTSYSAPI VOID NTAPI RtlClearBits( PRTL_BITMAP, ULONG, ULONG );
|
||
|
NTSYSAPI SIZE_T NTAPI RtlCompareMemory( const VOID *, const VOID *, SIZE_T );
|
||
|
NTSYSAPI LONG NTAPI RtlCompareUnicodeString( PCUNICODE_STRING, PCUNICODE_STRING, BOOLEAN );
|
||
|
NTSYSAPI LONG NTAPI RtlCompareUnicodeStrings( PCWCH, SIZE_T, PCWCH, SIZE_T, BOOLEAN );
|
||
|
NTSYSAPI VOID NTAPI RtlCopyUnicodeString( PUNICODE_STRING, PCUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlCreateRegistryKey( ULONG, PWSTR );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlCreateSecurityDescriptor( PSECURITY_DESCRIPTOR, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlDeleteRegistryValue( ULONG, PCWSTR, PCWSTR );
|
||
|
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString( PCUNICODE_STRING, PCUNICODE_STRING, BOOLEAN );
|
||
|
NTSYSAPI LARGE_INTEGER NTAPI RtlExtendedIntegerMultiply( LARGE_INTEGER, LONG );
|
||
|
NTSYSAPI LARGE_INTEGER NTAPI RtlExtendedLargeIntegerDivide( LARGE_INTEGER, ULONG, PULONG );
|
||
|
NTSYSAPI LARGE_INTEGER NTAPI RtlExtendedMagicDivide( LARGE_INTEGER, LARGE_INTEGER, CCHAR );
|
||
|
NTSYSAPI ULONG NTAPI RtlFindClearBits( PRTL_BITMAP, ULONG, ULONG );
|
||
|
NTSYSAPI ULONG NTAPI RtlFindClearBitsAndSet( PRTL_BITMAP, ULONG, ULONG );
|
||
|
NTSYSAPI ULONG NTAPI RtlFindClearRuns( PRTL_BITMAP, PRTL_BITMAP_RUN, ULONG, BOOLEAN );
|
||
|
NTSYSAPI ULONG NTAPI RtlFindFirstRunClear( PRTL_BITMAP, PULONG );
|
||
|
NTSYSAPI ULONG NTAPI RtlFindLastBackwardRunClear( PRTL_BITMAP, ULONG, PULONG );
|
||
|
NTSYSAPI CCHAR NTAPI RtlFindLeastSignificantBit( ULONGLONG );
|
||
|
NTSYSAPI ULONG NTAPI RtlFindLongestClearRun( PRTL_BITMAP, PULONG );
|
||
|
NTSYSAPI CCHAR NTAPI RtlFindMostSignificantBit( ULONGLONG );
|
||
|
NTSYSAPI ULONG NTAPI RtlFindNextForwardRunClear( PRTL_BITMAP, ULONG, PULONG );
|
||
|
NTSYSAPI ULONG NTAPI RtlFindSetBits( PRTL_BITMAP, ULONG, ULONG );
|
||
|
NTSYSAPI ULONG NTAPI RtlFindSetBitsAndClear( PRTL_BITMAP, ULONG, ULONG );
|
||
|
NTSYSAPI VOID NTAPI RtlFreeAnsiString( PANSI_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlHashUnicodeString( const UNICODE_STRING *, BOOLEAN, ULONG, PULONG );
|
||
|
NTSYSAPI VOID NTAPI RtlInitAnsiString( PANSI_STRING, PCSZ );
|
||
|
NTSYSAPI VOID NTAPI RtlInitString( PSTRING, PCSZ );
|
||
|
NTSYSAPI VOID NTAPI RtlInitializeBitMap( PRTL_BITMAP, PULONG, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlInt64ToUnicodeString( ULONGLONG, ULONG, PUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlIntegerToUnicodeString( ULONG, ULONG, PUNICODE_STRING );
|
||
|
NTSYSAPI ULONG NTAPI RtlLengthSecurityDescriptor( PSECURITY_DESCRIPTOR );
|
||
|
NTSYSAPI ULONG NTAPI RtlNumberOfClearBits( PRTL_BITMAP );
|
||
|
NTSYSAPI ULONG NTAPI RtlNumberOfSetBits( PRTL_BITMAP );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlQueryRegistryValues( ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID );
|
||
|
NTSYSAPI VOID NTAPI RtlSetAllBits( PRTL_BITMAP );
|
||
|
NTSYSAPI VOID NTAPI RtlSetBits( PRTL_BITMAP, ULONG, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlSetDaclSecurityDescriptor( PSECURITY_DESCRIPTOR, BOOLEAN, PACL, BOOLEAN );
|
||
|
NTSYSAPI BOOLEAN NTAPI RtlTimeFieldsToTime( PTIME_FIELDS, PLARGE_INTEGER );
|
||
|
NTSYSAPI VOID NTAPI RtlTimeToTimeFields( PLARGE_INTEGER, PTIME_FIELDS );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString( PANSI_STRING, PCUNICODE_STRING, BOOLEAN );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToInteger( PCUNICODE_STRING, ULONG, PULONG );
|
||
|
NTSYSAPI ULONG FASTCALL RtlUlongByteSwap( ULONG );
|
||
|
NTSYSAPI ULONGLONG FASTCALL RtlUlonglongByteSwap( ULONGLONG );
|
||
|
NTSYSAPI WCHAR NTAPI RtlUpcaseUnicodeChar( WCHAR );
|
||
|
NTSYSAPI USHORT FASTCALL RtlUshortByteSwap( USHORT );
|
||
|
NTSYSAPI BOOLEAN NTAPI RtlValidRelativeSecurityDescriptor( PSECURITY_DESCRIPTOR, ULONG, SECURITY_INFORMATION );
|
||
|
NTSYSAPI BOOLEAN NTAPI RtlValidSecurityDescriptor( PSECURITY_DESCRIPTOR );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlWriteRegistryValue( ULONG, PCWSTR, PCWSTR, ULONG, PVOID, ULONG );
|
||
|
NTSYSAPI ULONG NTAPI RtlxAnsiStringToUnicodeSize( PCANSI_STRING );
|
||
|
NTSYSAPI ULONG NTAPI RtlxUnicodeStringToAnsiSize( PCUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwClose( HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCreateDirectoryObject( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCreateFile( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCreateKey( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG, PUNICODE_STRING, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCreateSection( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PLARGE_INTEGER, ULONG, ULONG, HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwDeleteKey( HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwDeleteValueKey( HANDLE, PUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwEnumerateKey( HANDLE, ULONG, KEY_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwEnumerateValueKey( HANDLE, ULONG, KEY_VALUE_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwFlushKey( HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwLoadDriver( PUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwMakeTemporaryObject( HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwMapViewOfSection( HANDLE, HANDLE, PVOID *, ULONG_PTR, SIZE_T, PLARGE_INTEGER, PSIZE_T, SECTION_INHERIT, ULONG, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenFile( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, ULONG, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenKey( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenSection( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenSymbolicLinkObject( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQueryFullAttributesFile( POBJECT_ATTRIBUTES, PFILE_NETWORK_OPEN_INFORMATION );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQueryInformationFile( HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, FILE_INFORMATION_CLASS );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQueryKey( HANDLE, KEY_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQuerySymbolicLinkObject( HANDLE, PUNICODE_STRING, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQueryValueKey( HANDLE, PUNICODE_STRING, KEY_VALUE_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwReadFile( HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwSetInformationFile( HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, FILE_INFORMATION_CLASS );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwSetValueKey( HANDLE, PUNICODE_STRING, ULONG, ULONG, PVOID, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwUnloadDriver( PUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwUnmapViewOfSection( HANDLE, PVOID );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwWriteFile( HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, PIO_STATUS_BLOCK, PVOID, ULONG, PLARGE_INTEGER, PULONG );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05000300)
|
||
|
NTSYSAPI VOID FASTCALL RtlPrefetchMemoryNonTemporal( PVOID, SIZE_T );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
NTSYSAPI ULONG __cdecl DbgPrintEx( ULONG, ULONG, PCSTR, ... );
|
||
|
NTSYSAPI NTSTATUS NTAPI DbgQueryDebugFilterState( ULONG, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI DbgSetDebugFilterState( ULONG, ULONG, BOOLEAN );
|
||
|
NTSYSAPI VOID NTAPI RtlClearBit( PRTL_BITMAP, ULONG );
|
||
|
NTSYSAPI WCHAR NTAPI RtlDowncaseUnicodeChar( WCHAR );
|
||
|
NTSYSAPI VOID NTAPI RtlSetBit( PRTL_BITMAP, ULONG );
|
||
|
NTSYSAPI BOOLEAN NTAPI RtlTestBit( PRTL_BITMAP, ULONG );
|
||
|
#ifdef _VA_LIST_DEFINED
|
||
|
NTSYSAPI ULONG NTAPI vDbgPrintEx( ULONG, ULONG, PCCH, va_list );
|
||
|
NTSYSAPI ULONG NTAPI vDbgPrintExWithPrefix( PCCH, ULONG, ULONG, PCCH, va_list );
|
||
|
#endif
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05020000)
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenEvent( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
NTSYSAPI NTSTATUS NTAPI DbgSetDebugPrintCallback( PDEBUG_PRINT_CALLBACK, BOOLEAN );
|
||
|
NTSYSAPI ULONGLONG NTAPI RtlCmDecodeMemIoResource( PCM_PARTIAL_RESOURCE_DESCRIPTOR, PULONGLONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlCmEncodeMemIoResource( PCM_PARTIAL_RESOURCE_DESCRIPTOR, UCHAR, ULONGLONG, ULONGLONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlFindClosestEncodableLength( ULONGLONG, PULONGLONG );
|
||
|
NTSYSAPI ULONGLONG NTAPI RtlIoDecodeMemIoResource( PIO_RESOURCE_DESCRIPTOR, PULONGLONG, PULONGLONG, PULONGLONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlIoEncodeMemIoResource( PIO_RESOURCE_DESCRIPTOR, UCHAR, ULONGLONG, ULONGLONG, ULONGLONG, ULONGLONG );
|
||
|
NTSYSAPI ULONG NTAPI RtlNumberOfSetBitsUlongPtr( ULONG_PTR );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCommitComplete( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCommitEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCommitTransaction( HANDLE, BOOLEAN );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCreateEnlistment( PHANDLE, ACCESS_MASK, HANDLE, HANDLE, POBJECT_ATTRIBUTES, ULONG, NOTIFICATION_MASK, PVOID );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCreateKeyTransacted( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG, PUNICODE_STRING, ULONG, HANDLE, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCreateResourceManager( PHANDLE, ACCESS_MASK, HANDLE, LPGUID, POBJECT_ATTRIBUTES, ULONG, PUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCreateTransaction( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, LPGUID, HANDLE, ULONG, ULONG, ULONG, PLARGE_INTEGER, PUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwCreateTransactionManager( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PUNICODE_STRING, ULONG, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwEnumerateTransactionObject( HANDLE, KTMOBJECT_TYPE, PKTMOBJECT_CURSOR, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwGetNotificationResourceManager( HANDLE, PTRANSACTION_NOTIFICATION, ULONG, PLARGE_INTEGER, PULONG, ULONG, ULONG_PTR );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenEnlistment( PHANDLE, ACCESS_MASK, HANDLE, LPGUID, POBJECT_ATTRIBUTES );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenKeyTransacted( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenResourceManager( PHANDLE, ACCESS_MASK, HANDLE, LPGUID, POBJECT_ATTRIBUTES );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenTransaction( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, LPGUID, HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenTransactionManager( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PUNICODE_STRING, LPGUID, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwPrePrepareComplete( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwPrePrepareEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwPrepareComplete( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwPrepareEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQueryInformationEnlistment( HANDLE, ENLISTMENT_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQueryInformationResourceManager( HANDLE, RESOURCEMANAGER_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQueryInformationTransaction( HANDLE, TRANSACTION_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQueryInformationTransactionManager( HANDLE, TRANSACTIONMANAGER_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwReadOnlyEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwRecoverEnlistment( HANDLE, PVOID );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwRecoverResourceManager( HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwRecoverTransactionManager( HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwRollbackComplete( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwRollbackEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwRollbackTransaction( HANDLE, BOOLEAN );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwRollforwardTransactionManager( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwSetInformationEnlistment( HANDLE, ENLISTMENT_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwSetInformationResourceManager( HANDLE, RESOURCEMANAGER_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwSetInformationTransaction( HANDLE, TRANSACTION_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwSetInformationTransactionManager( HANDLE, TRANSACTIONMANAGER_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwSinglePhaseReject( HANDLE, PLARGE_INTEGER );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
NTSYSAPI ULONG64 NTAPI RtlGetEnabledExtendedFeatures( ULONG64 );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlUTF8ToUnicodeN( PWSTR, ULONG, PULONG, PCCH, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI RtlUnicodeToUTF8N( PCHAR, ULONG, PULONG, PCWCH, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwNotifyChangeMultipleKeys( HANDLE, ULONG, OBJECT_ATTRIBUTES [], HANDLE, PIO_APC_ROUTINE, PVOID, PIO_STATUS_BLOCK, ULONG, BOOLEAN, PVOID, ULONG, BOOLEAN );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenKeyEx( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwOpenKeyTransactedEx( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, ULONG, HANDLE );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwQueryMultipleValueKey( HANDLE, PKEY_VALUE_ENTRY, ULONG, PVOID, PULONG, PULONG );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwRenameKey( HANDLE, PUNICODE_STRING );
|
||
|
NTSYSAPI NTSTATUS NTAPI ZwSetInformationKey( HANDLE, KEY_SET_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
#endif
|
||
|
|
||
|
/* System call functions in NTOSKRNL.EXE and NTDLL.DLL */
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtCommitComplete( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtCommitEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtCommitTransaction( HANDLE, BOOLEAN );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtCreateEnlistment( PHANDLE, ACCESS_MASK, HANDLE, HANDLE, POBJECT_ATTRIBUTES, ULONG, NOTIFICATION_MASK, PVOID );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtCreateResourceManager( PHANDLE, ACCESS_MASK, HANDLE, LPGUID, POBJECT_ATTRIBUTES, ULONG, PUNICODE_STRING );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtCreateTransaction( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, LPGUID, HANDLE, ULONG, ULONG, ULONG, PLARGE_INTEGER, PUNICODE_STRING );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtCreateTransactionManager( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PUNICODE_STRING, ULONG, ULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtEnumerateTransactionObject( HANDLE, KTMOBJECT_TYPE, PKTMOBJECT_CURSOR, ULONG, PULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtGetNotificationResourceManager( HANDLE, PTRANSACTION_NOTIFICATION, ULONG, PLARGE_INTEGER, PULONG, ULONG, ULONG_PTR );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtOpenEnlistment( PHANDLE, ACCESS_MASK, HANDLE, LPGUID, POBJECT_ATTRIBUTES );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtOpenResourceManager( PHANDLE, ACCESS_MASK, HANDLE, LPGUID, POBJECT_ATTRIBUTES );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtOpenTransaction( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, LPGUID, HANDLE );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtOpenTransactionManager( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PUNICODE_STRING, LPGUID, ULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtPrePrepareComplete( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtPrePrepareEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtPrepareComplete( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtPrepareEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtPropagationComplete( HANDLE, ULONG, ULONG, PVOID );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtPropagationFailed( HANDLE, ULONG, NTSTATUS );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtPullTransaction( PHANDLE, POBJECT_ATTRIBUTES, ACCESS_MASK, ULONG, PCRM_PROTOCOL_ID, ULONG, PVOID );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationEnlistment( HANDLE, ENLISTMENT_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationResourceManager( HANDLE, RESOURCEMANAGER_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationTransaction( HANDLE, TRANSACTION_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtQueryInformationTransactionManager( HANDLE, TRANSACTIONMANAGER_INFORMATION_CLASS, PVOID, ULONG, PULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtReadOnlyEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtRecoverEnlistment( HANDLE, PVOID );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtRecoverResourceManager( HANDLE );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtRecoverTransactionManager( HANDLE );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtRegisterProtocolAddressInformation( HANDLE, PCRM_PROTOCOL_ID, ULONG, PVOID, ULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtRenameTransactionManager( PUNICODE_STRING, LPGUID );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtReadOnlyEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtRollbackEnlistment( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtRollbackTransaction( HANDLE, BOOLEAN );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtRollforwardTransactionManager( HANDLE, PLARGE_INTEGER );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationEnlistment( HANDLE, ENLISTMENT_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationResourceManager( HANDLE, RESOURCEMANAGER_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationTransaction( HANDLE, TRANSACTION_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtSetInformationTransactionManager( HANDLE, TRANSACTIONMANAGER_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
NTSYSCALLAPI NTSTATUS NTAPI NtSinglePhaseReject( HANDLE, PLARGE_INTEGER );
|
||
|
#endif
|
||
|
|
||
|
/* Functions in RTLVER.LIB */
|
||
|
BOOLEAN NTAPI WdmlibRtlIsNtDdiVersionAvailable( ULONG );
|
||
|
BOOLEAN NTAPI WdmlibRtlIsServicePackVersionInstalled( ULONG );
|
||
|
|
||
|
/* Functions in NTOSKRNL.EXE */
|
||
|
NTKERNELAPI NTSTATUS NTAPI EmClientQueryRuleState( LPCGUID, PEM_RULE_STATE );
|
||
|
NTKERNELAPI VOID NTAPI EmClientRuleDeregisterNotification( PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EmClientRuleEvaluate( LPCGUID, EM_ENTRY_DATA **, ULONG, PEM_RULE_STATE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EmClientRuleRegisterNotification( PDRIVER_OBJECT, PEM_CLIENT_NOTIFICATION_REGISTRATION, ULONG, PVOID * );
|
||
|
NTKERNELAPI VOID NTAPI EmProviderDeregister( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI EmProviderDeregisterEntry( PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EmProviderRegister( PDRIVER_OBJECT, PEM_ENTRY_REGISTRATION, ULONG, PEM_CALLBACK_REGISTRATION, ULONG, PVOID * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EmProviderRegisterEntry( PVOID, LPCGUID, PEM_ENTRY_DATA, PVOID * );
|
||
|
NTKERNELAPI PSLIST_ENTRY FASTCALL ExInterlockedFlushSList( PSLIST_HEADER );
|
||
|
NTKERNELAPI PSLIST_ENTRY FASTCALL InterlockedPopEntrySList( PSLIST_HEADER );
|
||
|
NTKERNELAPI PSLIST_ENTRY FASTCALL InterlockedPushEntrySList( PSLIST_HEADER, PSLIST_ENTRY );
|
||
|
NTKERNELAPI VOID NTAPI IoGetStackLimits( PULONG_PTR, PULONG_PTR );
|
||
|
NTKERNELAPI VOID NTAPI KeClearEvent( PRKEVENT );
|
||
|
NTKERNELAPI PKTHREAD NTAPI KeGetCurrentThread( VOID );
|
||
|
NTKERNELAPI ULONG NTAPI KeGetProcessorIndexFromNumber( PPROCESSOR_NUMBER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeGetProcessorNumberFromIndex( ULONG, PPROCESSOR_NUMBER );
|
||
|
NTKERNELAPI VOID NTAPI KeInitializeEvent( PRKEVENT, EVENT_TYPE, BOOLEAN );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PsWrapApcWow64Thread( PVOID *, PVOID * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmCommitComplete( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmCommitEnlistment( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmCommitTransaction( PKTRANSACTION, BOOLEAN );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmCreateEnlistment( PHANDLE, KPROCESSOR_MODE, ACCESS_MASK, POBJECT_ATTRIBUTES, PRKRESOURCEMANAGER, PKTRANSACTION, ULONG, NOTIFICATION_MASK, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmDereferenceEnlistmentKey( PKENLISTMENT, PBOOLEAN );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmEnableCallbacks( PKRESOURCEMANAGER, PTM_RM_NOTIFICATION, PVOID );
|
||
|
NTKERNELAPI VOID NTAPI TmGetTransactionId( PKTRANSACTION, PUOW );
|
||
|
NTKERNELAPI BOOLEAN NTAPI TmIsTransactionActive( PKTRANSACTION );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmPrePrepareComplete( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmPrePrepareEnlistment( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmPrepareComplete( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmPrepareEnlistment( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmPropagationComplete( PKRESOURCEMANAGER, ULONG, ULONG, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmPropagationFailed( PKRESOURCEMANAGER, ULONG, NTSTATUS );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmReadOnlyEnlistment( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmRecoverEnlistment( PKENLISTMENT, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmRecoverResourceManager( PKRESOURCEMANAGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmRecoverTransactionManager( PKTM, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmReferenceEnlistmentKey( PKENLISTMENT, PVOID * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmRequestOutcomeEnlistment( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmRollbackComplete( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmRollbackEnlistment( PKENLISTMENT, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI TmRollbackTransaction( PKTRANSACTION, BOOLEAN );
|
||
|
#ifdef _X86_
|
||
|
NTKERNELAPI PVOID NTAPI ExAllocateFromPagedLookasideList( PPAGED_LOOKASIDE_LIST );
|
||
|
NTKERNELAPI VOID NTAPI ExFreeToPagedLookasideList( PPAGED_LOOKASIDE_LIST, PVOID );
|
||
|
NTKERNELAPI PSLIST_ENTRY FASTCALL ExInterlockedPopEntrySList( PSLIST_HEADER, PKSPIN_LOCK );
|
||
|
NTKERNELAPI PSLIST_ENTRY FASTCALL ExInterlockedPushEntrySList( PSLIST_HEADER, PSLIST_ENTRY, PKSPIN_LOCK );
|
||
|
NTKERNELAPI LONGLONG FASTCALL ExfInterlockedCompareExchange64( LONGLONG volatile *, PLONGLONG, PLONGLONG );
|
||
|
NTKERNELAPI LONG FASTCALL InterlockedCompareExchange( LONG volatile *, LONG, LONG );
|
||
|
NTKERNELAPI LONG FASTCALL InterlockedDecrement( LONG volatile * );
|
||
|
NTKERNELAPI LONG FASTCALL InterlockedExchange( LONG volatile *, LONG );
|
||
|
NTKERNELAPI LONG FASTCALL InterlockedExchangeAdd( LONG volatile *, LONG );
|
||
|
NTKERNELAPI LONG FASTCALL InterlockedIncrement( LONG volatile * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeRestoreFloatingPointState( PKFLOATING_SAVE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeSaveFloatingPointState( PKFLOATING_SAVE );
|
||
|
NTKERNELAPI VOID NTAPI READ_REGISTER_BUFFER_UCHAR( PUCHAR, PUCHAR, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI READ_REGISTER_BUFFER_ULONG( PULONG, PULONG, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI READ_REGISTER_BUFFER_USHORT( PUSHORT, PUSHORT, ULONG );
|
||
|
NTKERNELAPI UCHAR NTAPI READ_REGISTER_UCHAR( PUCHAR );
|
||
|
NTKERNELAPI ULONG NTAPI READ_REGISTER_ULONG( PULONG );
|
||
|
NTKERNELAPI USHORT NTAPI READ_REGISTER_USHORT( PUSHORT );
|
||
|
NTKERNELAPI VOID NTAPI WRITE_REGISTER_BUFFER_UCHAR( PUCHAR, PUCHAR, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI WRITE_REGISTER_BUFFER_ULONG( PULONG, PULONG, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI WRITE_REGISTER_BUFFER_USHORT( PUSHORT, PUSHORT, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI WRITE_REGISTER_UCHAR( PUCHAR, UCHAR );
|
||
|
NTKERNELAPI VOID NTAPI WRITE_REGISTER_ULONG( PULONG, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI WRITE_REGISTER_USHORT( PUSHORT, USHORT );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05000000)
|
||
|
NTKERNELAPI VOID FASTCALL ExAcquireFastMutexUnsafe( PFAST_MUTEX );
|
||
|
NTKERNELAPI BOOLEAN NTAPI ExAcquireResourceExclusiveLite( PERESOURCE, BOOLEAN );
|
||
|
NTKERNELAPI BOOLEAN NTAPI ExAcquireResourceSharedLite( PERESOURCE, BOOLEAN );
|
||
|
NTKERNELAPI BOOLEAN NTAPI ExAcquireSharedStarveExclusive( PERESOURCE, BOOLEAN );
|
||
|
NTKERNELAPI BOOLEAN NTAPI ExAcquireSharedWaitForExclusive( PERESOURCE, BOOLEAN );
|
||
|
NTKERNELAPI PVOID NTAPI ExAllocatePool( POOL_TYPE, SIZE_T );
|
||
|
NTKERNELAPI PVOID NTAPI ExAllocatePoolWithQuota( POOL_TYPE, SIZE_T );
|
||
|
NTKERNELAPI PVOID NTAPI ExAllocatePoolWithQuotaTag( POOL_TYPE, SIZE_T, ULONG );
|
||
|
NTKERNELAPI PVOID NTAPI ExAllocatePoolWithTag( POOL_TYPE, SIZE_T, ULONG );
|
||
|
NTKERNELAPI PVOID NTAPI ExAllocatePoolWithTagPriority( POOL_TYPE, SIZE_T, ULONG, EX_POOL_PRIORITY );
|
||
|
NTKERNELAPI VOID NTAPI ExConvertExclusiveToSharedLite( PERESOURCE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ExCreateCallback( PCALLBACK_OBJECT *, POBJECT_ATTRIBUTES, BOOLEAN, BOOLEAN );
|
||
|
NTKERNELAPI VOID NTAPI ExDeleteNPagedLookasideList( PNPAGED_LOOKASIDE_LIST );
|
||
|
NTKERNELAPI VOID NTAPI ExDeletePagedLookasideList( PPAGED_LOOKASIDE_LIST );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ExDeleteResourceLite( PERESOURCE );
|
||
|
NTKERNELAPI VOID NTAPI ExFreePool( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI ExFreePoolWithTag( PVOID, ULONG );
|
||
|
NTKERNELAPI ULONG NTAPI ExGetExclusiveWaiterCount( PERESOURCE );
|
||
|
NTKERNELAPI KPROCESSOR_MODE NTAPI ExGetPreviousMode( VOID );
|
||
|
NTKERNELAPI ULONG NTAPI ExGetSharedWaiterCount( PERESOURCE );
|
||
|
NTKERNELAPI VOID NTAPI ExInitializeNPagedLookasideList( PNPAGED_LOOKASIDE_LIST, PALLOCATE_FUNCTION, PFREE_FUNCTION, ULONG, SIZE_T, ULONG, USHORT );
|
||
|
NTKERNELAPI VOID NTAPI ExInitializePagedLookasideList( PPAGED_LOOKASIDE_LIST, PALLOCATE_FUNCTION, PFREE_FUNCTION, ULONG, SIZE_T, ULONG, USHORT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ExInitializeResourceLite( PERESOURCE );
|
||
|
NTKERNELAPI LARGE_INTEGER NTAPI ExInterlockedAddLargeInteger( PLARGE_INTEGER, LARGE_INTEGER, PKSPIN_LOCK );
|
||
|
NTKERNELAPI BOOLEAN NTAPI ExIsProcessorFeaturePresent( ULONG );
|
||
|
NTKERNELAPI BOOLEAN NTAPI ExIsResourceAcquiredExclusiveLite( PERESOURCE );
|
||
|
NTKERNELAPI ULONG NTAPI ExIsResourceAcquiredSharedLite( PERESOURCE );
|
||
|
NTKERNELAPI VOID NTAPI ExLocalTimeToSystemTime( PLARGE_INTEGER, PLARGE_INTEGER );
|
||
|
NTKERNELAPI VOID NTAPI ExNotifyCallback( PVOID, PVOID, PVOID );
|
||
|
NTKERNELAPI VOID NTAPI ExQueueWorkItem( PWORK_QUEUE_ITEM, WORK_QUEUE_TYPE );
|
||
|
NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI ExRaiseStatus( NTSTATUS );
|
||
|
NTKERNELAPI PVOID NTAPI ExRegisterCallback( PCALLBACK_OBJECT, PCALLBACK_FUNCTION, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ExReinitializeResourceLite( PERESOURCE );
|
||
|
NTKERNELAPI VOID FASTCALL ExReleaseFastMutexUnsafe( PFAST_MUTEX );
|
||
|
NTKERNELAPI VOID NTAPI ExReleaseResourceForThreadLite( PERESOURCE, ERESOURCE_THREAD );
|
||
|
NTKERNELAPI VOID FASTCALL ExReleaseResourceLite( PERESOURCE );
|
||
|
NTKERNELAPI VOID NTAPI ExSetResourceOwnerPointer( PERESOURCE, PVOID );
|
||
|
NTKERNELAPI ULONG NTAPI ExSetTimerResolution( ULONG, BOOLEAN );
|
||
|
NTKERNELAPI VOID NTAPI ExSystemTimeToLocalTime( PLARGE_INTEGER, PLARGE_INTEGER );
|
||
|
NTKERNELAPI BOOLEAN FASTCALL ExTryToAcquireFastMutex( PFAST_MUTEX );
|
||
|
NTKERNELAPI VOID NTAPI ExUnregisterCallback( PVOID );
|
||
|
NTKERNELAPI ULONG FASTCALL ExfInterlockedAddUlong( PULONG, ULONG, PKSPIN_LOCK );
|
||
|
NTKERNELAPI PLIST_ENTRY FASTCALL ExfInterlockedInsertHeadList( PLIST_ENTRY, PLIST_ENTRY, PKSPIN_LOCK );
|
||
|
NTKERNELAPI PLIST_ENTRY FASTCALL ExfInterlockedInsertTailList( PLIST_ENTRY, PLIST_ENTRY, PKSPIN_LOCK );
|
||
|
NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExfInterlockedPopEntryList( PSINGLE_LIST_ENTRY, PKSPIN_LOCK );
|
||
|
NTKERNELAPI PSINGLE_LIST_ENTRY FASTCALL ExfInterlockedPushEntryList( PSINGLE_LIST_ENTRY, PSINGLE_LIST_ENTRY, PKSPIN_LOCK );
|
||
|
NTKERNELAPI PLIST_ENTRY FASTCALL ExfInterlockedRemoveHeadList( PLIST_ENTRY, PKSPIN_LOCK );
|
||
|
NTKERNELAPI VOID NTAPI IoAcquireCancelSpinLock( PKIRQL );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoAcquireRemoveLockEx( PIO_REMOVE_LOCK, PVOID, PCSTR, ULONG, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoAllocateDriverObjectExtension( PDRIVER_OBJECT, PVOID, ULONG, PVOID * );
|
||
|
NTKERNELAPI PVOID NTAPI IoAllocateErrorLogEntry( PVOID, UCHAR );
|
||
|
NTKERNELAPI PIRP NTAPI IoAllocateIrp( CCHAR, BOOLEAN );
|
||
|
NTKERNELAPI PMDL NTAPI IoAllocateMdl( PVOID, ULONG, BOOLEAN, BOOLEAN, PIRP );
|
||
|
NTKERNELAPI PIO_WORKITEM NTAPI IoAllocateWorkItem( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoAttachDevice( PDEVICE_OBJECT, PUNICODE_STRING, PDEVICE_OBJECT * );
|
||
|
NTKERNELAPI PDEVICE_OBJECT NTAPI IoAttachDeviceToDeviceStack( PDEVICE_OBJECT, PDEVICE_OBJECT );
|
||
|
NTKERNELAPI PIRP NTAPI IoBuildAsynchronousFsdRequest( ULONG, PDEVICE_OBJECT, PVOID, ULONG, PLARGE_INTEGER, PIO_STATUS_BLOCK );
|
||
|
NTKERNELAPI PIRP NTAPI IoBuildDeviceIoControlRequest( ULONG, PDEVICE_OBJECT, PVOID, ULONG, PVOID, ULONG, BOOLEAN, PKEVENT, PIO_STATUS_BLOCK );
|
||
|
NTKERNELAPI VOID NTAPI IoBuildPartialMdl( PMDL, PMDL, PVOID, ULONG );
|
||
|
NTKERNELAPI PIRP NTAPI IoBuildSynchronousFsdRequest( ULONG, PDEVICE_OBJECT, PVOID, ULONG, PLARGE_INTEGER, PKEVENT, PIO_STATUS_BLOCK );
|
||
|
NTKERNELAPI BOOLEAN NTAPI IoCancelIrp( PIRP );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoCheckShareAccess( ACCESS_MASK, ULONG, PFILE_OBJECT, PSHARE_ACCESS, BOOLEAN );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoConnectInterrupt( PKINTERRUPT *, PKSERVICE_ROUTINE, PVOID, PKSPIN_LOCK, ULONG, KIRQL, KIRQL, KINTERRUPT_MODE, BOOLEAN, KAFFINITY, BOOLEAN );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoCreateDevice( PDRIVER_OBJECT, ULONG, PUNICODE_STRING, DEVICE_TYPE, ULONG, BOOLEAN, PDEVICE_OBJECT * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoCreateFile( PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, PLARGE_INTEGER, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG, CREATE_FILE_TYPE, PVOID, ULONG );
|
||
|
NTKERNELAPI PKEVENT NTAPI IoCreateNotificationEvent( PUNICODE_STRING, PHANDLE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoCreateSymbolicLink( PUNICODE_STRING, PUNICODE_STRING );
|
||
|
NTKERNELAPI PKEVENT NTAPI IoCreateSynchronizationEvent( PUNICODE_STRING, PHANDLE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoCreateUnprotectedSymbolicLink( PUNICODE_STRING, PUNICODE_STRING );
|
||
|
NTKERNELAPI VOID NTAPI IoDeleteDevice( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoDeleteSymbolicLink( PUNICODE_STRING );
|
||
|
NTKERNELAPI VOID NTAPI IoDetachDevice( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI VOID NTAPI IoDisconnectInterrupt( PKINTERRUPT );
|
||
|
NTKERNELAPI VOID NTAPI IoFreeIrp( PIRP );
|
||
|
NTKERNELAPI VOID NTAPI IoFreeMdl( PMDL );
|
||
|
NTKERNELAPI VOID NTAPI IoFreeWorkItem( PIO_WORKITEM );
|
||
|
NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetAttachedDeviceReference( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetBootDiskInformation( PBOOTDISK_INFORMATION, ULONG );
|
||
|
NTKERNELAPI PEPROCESS NTAPI IoGetCurrentProcess( VOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetDeviceInterfaceAlias( PUNICODE_STRING, CONST GUID *, PUNICODE_STRING );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetDeviceInterfaces( CONST GUID *, PDEVICE_OBJECT, ULONG, PWSTR * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetDeviceObjectPointer( PUNICODE_STRING, ACCESS_MASK, PFILE_OBJECT *, PDEVICE_OBJECT * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetDeviceProperty( PDEVICE_OBJECT, DEVICE_REGISTRY_PROPERTY, ULONG, PVOID, PULONG );
|
||
|
NTKERNELAPI struct _DMA_ADAPTER * NTAPI IoGetDmaAdapter( PDEVICE_OBJECT, struct _DEVICE_DESCRIPTION *, PULONG );
|
||
|
NTKERNELAPI PVOID NTAPI IoGetDriverObjectExtension( PDRIVER_OBJECT, PVOID );
|
||
|
NTKERNELAPI PVOID NTAPI IoGetInitialStack( VOID );
|
||
|
NTKERNELAPI PDEVICE_OBJECT NTAPI IoGetRelatedDeviceObject( PFILE_OBJECT );
|
||
|
NTKERNELAPI PIRP NTAPI IoGetTopLevelIrp( VOID );
|
||
|
NTKERNELAPI VOID NTAPI IoInitializeIrp( PIRP, USHORT, CCHAR );
|
||
|
NTKERNELAPI VOID NTAPI IoInitializeRemoveLockEx( PIO_REMOVE_LOCK, ULONG, ULONG, ULONG, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoInitializeTimer( PDEVICE_OBJECT, PIO_TIMER_ROUTINE, PVOID );
|
||
|
NTKERNELAPI VOID NTAPI IoInvalidateDeviceRelations( PDEVICE_OBJECT, DEVICE_RELATION_TYPE );
|
||
|
NTKERNELAPI VOID NTAPI IoInvalidateDeviceState( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI BOOLEAN NTAPI IoIsWdmVersionAvailable( UCHAR, UCHAR );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoOpenDeviceInterfaceRegistryKey( PUNICODE_STRING, ACCESS_MASK, PHANDLE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoOpenDeviceRegistryKey( PDEVICE_OBJECT, ULONG, ACCESS_MASK, PHANDLE );
|
||
|
NTKERNELAPI VOID NTAPI IoQueueWorkItem( PIO_WORKITEM, PIO_WORKITEM_ROUTINE, WORK_QUEUE_TYPE, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoRegisterDeviceInterface( PDEVICE_OBJECT, CONST GUID *, PUNICODE_STRING, PUNICODE_STRING );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoRegisterLastChanceShutdownNotification( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoRegisterPlugPlayNotification( IO_NOTIFICATION_EVENT_CATEGORY, ULONG, PVOID, PDRIVER_OBJECT, PDRIVER_NOTIFICATION_CALLBACK_ROUTINE, PVOID, PVOID * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoRegisterShutdownNotification( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI VOID NTAPI IoReleaseCancelSpinLock( KIRQL );
|
||
|
NTKERNELAPI VOID NTAPI IoReleaseRemoveLockAndWaitEx( PIO_REMOVE_LOCK, PVOID, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI IoReleaseRemoveLockEx( PIO_REMOVE_LOCK, PVOID, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI IoRemoveShareAccess( PFILE_OBJECT, PSHARE_ACCESS );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoReportTargetDeviceChange( PDEVICE_OBJECT, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoReportTargetDeviceChangeAsynchronous( PDEVICE_OBJECT, PVOID, PDEVICE_CHANGE_COMPLETE_CALLBACK, PVOID );
|
||
|
NTKERNELAPI VOID NTAPI IoRequestDeviceEject( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI VOID NTAPI IoReuseIrp( PIRP, NTSTATUS );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoSetDeviceInterfaceState( PUNICODE_STRING, BOOLEAN );
|
||
|
NTKERNELAPI VOID NTAPI IoSetShareAccess( ACCESS_MASK, ULONG, PFILE_OBJECT, PSHARE_ACCESS );
|
||
|
NTKERNELAPI VOID NTAPI IoSetTopLevelIrp( PIRP );
|
||
|
NTKERNELAPI VOID NTAPI IoStartNextPacket( PDEVICE_OBJECT, BOOLEAN );
|
||
|
NTKERNELAPI VOID NTAPI IoStartNextPacketByKey( PDEVICE_OBJECT, BOOLEAN, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI IoStartPacket( PDEVICE_OBJECT, PIRP, PULONG, PDRIVER_CANCEL );
|
||
|
NTKERNELAPI VOID NTAPI IoStartTimer( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI VOID NTAPI IoStopTimer( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoUnregisterPlugPlayNotification( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI IoUnregisterShutdownNotification( PDEVICE_OBJECT );
|
||
|
NTKERNELAPI VOID NTAPI IoUpdateShareAccess( PFILE_OBJECT, PSHARE_ACCESS );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIAllocateInstanceIds( GUID *, ULONG, ULONG * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIQuerySingleInstanceMultiple( PVOID *, PUNICODE_STRING, ULONG, ULONG *, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIRegistrationControl( PDEVICE_OBJECT, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMISuggestInstanceName( PDEVICE_OBJECT, PUNICODE_STRING, BOOLEAN, PUNICODE_STRING );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIWriteEvent( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI IoWriteErrorLogEntry( PVOID );
|
||
|
NTKERNELAPI NTSTATUS FASTCALL IofCallDriver( PDEVICE_OBJECT, PIRP );
|
||
|
NTKERNELAPI VOID FASTCALL IofCompleteRequest( PIRP, CCHAR );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KdDisableDebugger( VOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KdEnableDebugger( VOID );
|
||
|
NTKERNELAPI DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx( ULONG, ULONG_PTR, ULONG_PTR, ULONG_PTR, ULONG_PTR );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeCancelTimer( PKTIMER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeDelayExecutionThread( KPROCESSOR_MODE, BOOLEAN, PLARGE_INTEGER );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeDeregisterBugCheckCallback( PKBUGCHECK_CALLBACK_RECORD );
|
||
|
NTKERNELAPI VOID NTAPI KeEnterCriticalRegion( VOID );
|
||
|
NTKERNELAPI VOID NTAPI KeInitializeDeviceQueue( PKDEVICE_QUEUE );
|
||
|
NTKERNELAPI VOID NTAPI KeInitializeDpc( PRKDPC, PKDEFERRED_ROUTINE, PVOID );
|
||
|
NTKERNELAPI VOID NTAPI KeInitializeMutex( PRKMUTEX, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI KeInitializeSemaphore( PRKSEMAPHORE, LONG, LONG );
|
||
|
NTKERNELAPI VOID NTAPI KeInitializeTimer( PKTIMER );
|
||
|
NTKERNELAPI VOID NTAPI KeInitializeTimerEx( PKTIMER, TIMER_TYPE );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeInsertByKeyDeviceQueue( PKDEVICE_QUEUE, PKDEVICE_QUEUE_ENTRY, ULONG );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeInsertDeviceQueue( PKDEVICE_QUEUE, PKDEVICE_QUEUE_ENTRY );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeInsertQueueDpc( PRKDPC, PVOID, PVOID );
|
||
|
NTKERNELAPI VOID NTAPI KeLeaveCriticalRegion( VOID );
|
||
|
NTKERNELAPI ULONGLONG NTAPI KeQueryInterruptTime( VOID );
|
||
|
NTKERNELAPI KPRIORITY NTAPI KeQueryPriorityThread( PKTHREAD );
|
||
|
NTKERNELAPI VOID NTAPI KeQuerySystemTime( PLARGE_INTEGER );
|
||
|
NTKERNELAPI ULONG NTAPI KeQueryTimeIncrement( VOID );
|
||
|
NTKERNELAPI LONG NTAPI KeReadStateEvent( PRKEVENT );
|
||
|
NTKERNELAPI LONG NTAPI KeReadStateMutex( PRKMUTEX );
|
||
|
NTKERNELAPI LONG NTAPI KeReadStateSemaphore( PRKSEMAPHORE );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeReadStateTimer( PKTIMER );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeRegisterBugCheckCallback( PKBUGCHECK_CALLBACK_RECORD, PKBUGCHECK_CALLBACK_ROUTINE, PVOID, ULONG, PUCHAR );
|
||
|
NTKERNELAPI LONG NTAPI KeReleaseMutex( PRKMUTEX, BOOLEAN );
|
||
|
NTKERNELAPI LONG NTAPI KeReleaseSemaphore( PRKSEMAPHORE, KPRIORITY, LONG, BOOLEAN );
|
||
|
NTKERNELAPI PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveByKeyDeviceQueue( PKDEVICE_QUEUE, ULONG );
|
||
|
NTKERNELAPI PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveDeviceQueue( PKDEVICE_QUEUE );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeRemoveEntryDeviceQueue( PKDEVICE_QUEUE, PKDEVICE_QUEUE_ENTRY );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeRemoveQueueDpc( PRKDPC );
|
||
|
NTKERNELAPI LONG NTAPI KeResetEvent( PRKEVENT );
|
||
|
NTKERNELAPI LONG NTAPI KeSetEvent( PRKEVENT, KPRIORITY, BOOLEAN );
|
||
|
NTKERNELAPI VOID NTAPI KeSetImportanceDpc( PRKDPC, KDPC_IMPORTANCE );
|
||
|
NTKERNELAPI KPRIORITY NTAPI KeSetPriorityThread( PKTHREAD, KPRIORITY );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeSetTimer( PKTIMER, LARGE_INTEGER, PKDPC );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeSetTimerEx( PKTIMER, LARGE_INTEGER, LONG, PKDPC );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeSynchronizeExecution( PKINTERRUPT, PKSYNCHRONIZE_ROUTINE, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeWaitForMultipleObjects( ULONG, PVOID [], WAIT_TYPE, KWAIT_REASON, KPROCESSOR_MODE, BOOLEAN, PLARGE_INTEGER, PKWAIT_BLOCK );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeWaitForSingleObject( PVOID, KWAIT_REASON, KPROCESSOR_MODE, BOOLEAN, PLARGE_INTEGER );
|
||
|
NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemory( SIZE_T, PHYSICAL_ADDRESS );
|
||
|
NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemorySpecifyCache( SIZE_T, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, MEMORY_CACHING_TYPE );
|
||
|
NTKERNELAPI PVOID NTAPI MmAllocateContiguousMemorySpecifyCacheNode( SIZE_T, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, MEMORY_CACHING_TYPE, NODE_REQUIREMENT );
|
||
|
NTKERNELAPI PMDL NTAPI MmAllocatePagesForMdl( PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, SIZE_T );
|
||
|
NTKERNELAPI VOID NTAPI MmBuildMdlForNonPagedPool( PMDLX );
|
||
|
NTKERNELAPI PMDL NTAPI MmCreateMdl( PMDL, PVOID, SIZE_T );
|
||
|
NTKERNELAPI VOID NTAPI MmFreeContiguousMemory( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI MmFreeContiguousMemorySpecifyCache( PVOID, SIZE_T, MEMORY_CACHING_TYPE );
|
||
|
NTKERNELAPI VOID NTAPI MmFreePagesFromMdl( PMDLX );
|
||
|
NTKERNELAPI PVOID NTAPI MmGetSystemRoutineAddress( PUNICODE_STRING );
|
||
|
NTKERNELAPI LOGICAL NTAPI MmIsDriverVerifying( struct _DRIVER_OBJECT * );
|
||
|
NTKERNELAPI PVOID NTAPI MmLockPagableDataSection( PVOID );
|
||
|
NTKERNELAPI PVOID NTAPI MmMapIoSpace( PHYSICAL_ADDRESS, SIZE_T, MEMORY_CACHING_TYPE );
|
||
|
NTKERNELAPI PVOID NTAPI MmMapLockedPages( PMDL, KPROCESSOR_MODE );
|
||
|
NTKERNELAPI PVOID NTAPI MmMapLockedPagesSpecifyCache( PMDLX, KPROCESSOR_MODE, MEMORY_CACHING_TYPE, PVOID, ULONG, MM_PAGE_PRIORITY );
|
||
|
NTKERNELAPI PVOID NTAPI MmPageEntireDriver( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI MmProbeAndLockPages( PMDLX, KPROCESSOR_MODE, LOCK_OPERATION );
|
||
|
NTKERNELAPI VOID NTAPI MmProbeAndLockProcessPages( PMDL, PEPROCESS, KPROCESSOR_MODE, LOCK_OPERATION );
|
||
|
NTKERNELAPI MM_SYSTEMSIZE NTAPI MmQuerySystemSize( VOID );
|
||
|
NTKERNELAPI VOID NTAPI MmResetDriverPaging( PVOID );
|
||
|
NTKERNELAPI SIZE_T NTAPI MmSizeOfMdl( PVOID, SIZE_T );
|
||
|
NTKERNELAPI VOID NTAPI MmUnlockPagableImageSection( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI MmUnlockPages( PMDLX );
|
||
|
NTKERNELAPI VOID NTAPI MmUnmapIoSpace( PVOID, SIZE_T );
|
||
|
NTKERNELAPI VOID NTAPI MmUnmapLockedPages( PVOID, PMDL );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ObGetObjectSecurity( PVOID, PSECURITY_DESCRIPTOR *, PBOOLEAN );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ObReferenceObjectByHandle( HANDLE, ACCESS_MASK, POBJECT_TYPE, KPROCESSOR_MODE, PVOID *, POBJECT_HANDLE_INFORMATION );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ObReferenceObjectByPointer( PVOID, ACCESS_MASK, POBJECT_TYPE, KPROCESSOR_MODE );
|
||
|
NTKERNELAPI VOID NTAPI ObReleaseObjectSecurity( PSECURITY_DESCRIPTOR, BOOLEAN );
|
||
|
NTKERNELAPI LONG_PTR FASTCALL ObfDereferenceObject( PVOID );
|
||
|
NTKERNELAPI LONG_PTR FASTCALL ObfReferenceObject( PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PoCallDriver( PDEVICE_OBJECT, PIRP );
|
||
|
NTKERNELAPI PULONG NTAPI PoRegisterDeviceForIdleDetection( PDEVICE_OBJECT, ULONG, ULONG, DEVICE_POWER_STATE );
|
||
|
NTKERNELAPI PVOID NTAPI PoRegisterSystemState( PVOID, EXECUTION_STATE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PoRequestPowerIrp( PDEVICE_OBJECT, UCHAR, POWER_STATE, PREQUEST_POWER_COMPLETE, PVOID, PIRP * );
|
||
|
NTKERNELAPI POWER_STATE NTAPI PoSetPowerState( PDEVICE_OBJECT, POWER_STATE_TYPE, POWER_STATE );
|
||
|
NTKERNELAPI VOID NTAPI PoSetSystemState( EXECUTION_STATE );
|
||
|
NTKERNELAPI VOID NTAPI PoStartNextPowerIrp( PIRP );
|
||
|
NTKERNELAPI VOID NTAPI PoUnregisterSystemState( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI ProbeForRead( PVOID, SIZE_T, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI ProbeForWrite( PVOID, SIZE_T, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PsCreateSystemThread( PHANDLE, ULONG, POBJECT_ATTRIBUTES, HANDLE, PCLIENT_ID, PKSTART_ROUTINE, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PsTerminateSystemThread( NTSTATUS );
|
||
|
NTKERNELAPI BOOLEAN NTAPI SeAccessCheck( PSECURITY_DESCRIPTOR, PSECURITY_SUBJECT_CONTEXT, BOOLEAN, ACCESS_MASK, ACCESS_MASK, PPRIVILEGE_SET *, PGENERIC_MAPPING, KPROCESSOR_MODE, PACCESS_MASK, PNTSTATUS );
|
||
|
NTKERNELAPI NTSTATUS NTAPI SeAssignSecurity( PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR *, BOOLEAN, PSECURITY_SUBJECT_CONTEXT, PGENERIC_MAPPING, POOL_TYPE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI SeAssignSecurityEx( PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR *, GUID *, BOOLEAN, ULONG, PSECURITY_SUBJECT_CONTEXT, PGENERIC_MAPPING, POOL_TYPE );
|
||
|
NTKERNELAPI VOID NTAPI SeCaptureSubjectContext( PSECURITY_SUBJECT_CONTEXT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI SeDeassignSecurity( PSECURITY_DESCRIPTOR * );
|
||
|
NTKERNELAPI VOID NTAPI SeLockSubjectContext( PSECURITY_SUBJECT_CONTEXT );
|
||
|
NTKERNELAPI VOID NTAPI SeReleaseSubjectContext( PSECURITY_SUBJECT_CONTEXT );
|
||
|
NTKERNELAPI VOID NTAPI SeUnlockSubjectContext( PSECURITY_SUBJECT_CONTEXT );
|
||
|
NTKERNELAPI BOOLEAN NTAPI SeValidSecurityDescriptor( ULONG, PSECURITY_DESCRIPTOR );
|
||
|
#ifdef _X86_
|
||
|
NTKERNELAPI VOID NTAPI KeInitializeSpinLock( PKSPIN_LOCK );
|
||
|
NTKERNELAPI VOID FASTCALL KefAcquireSpinLockAtDpcLevel( PKSPIN_LOCK );
|
||
|
NTKERNELAPI VOID FASTCALL KefReleaseSpinLockFromDpcLevel( PKSPIN_LOCK );
|
||
|
#endif
|
||
|
#ifdef SINGLE_GROUP_LEGACY_API
|
||
|
NTKERNELAPI ULONG NTAPI KeQueryActiveProcessorCount( PKAFFINITY );
|
||
|
NTKERNELAPI KAFFINITY NTAPI KeQueryActiveProcessors( VOID );
|
||
|
NTKERNELAPI VOID NTAPI KeRevertToUserAffinityThread( VOID );
|
||
|
NTKERNELAPI VOID NTAPI KeSetSystemAffinityThread( KAFFINITY );
|
||
|
NTKERNELAPI VOID NTAPI KeSetTargetProcessorDpc( PRKDPC, CCHAR );
|
||
|
#endif
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
NTKERNELAPI NTSTATUS NTAPI CmRegisterCallback( PEX_CALLBACK_FUNCTION, PVOID, PLARGE_INTEGER );
|
||
|
NTKERNELAPI NTSTATUS NTAPI CmUnRegisterCallback( LARGE_INTEGER );
|
||
|
NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtection( PEX_RUNDOWN_REF );
|
||
|
NTKERNELAPI VOID FASTCALL ExInitializeRundownProtection( PEX_RUNDOWN_REF );
|
||
|
NTKERNELAPI VOID FASTCALL ExReInitializeRundownProtection( PEX_RUNDOWN_REF );
|
||
|
NTKERNELAPI VOID FASTCALL ExReleaseRundownProtection( PEX_RUNDOWN_REF );
|
||
|
NTKERNELAPI VOID FASTCALL ExRundownCompleted( PEX_RUNDOWN_REF );
|
||
|
NTKERNELAPI BOOLEAN NTAPI ExVerifySuite( SUITE_TYPE );
|
||
|
NTKERNELAPI VOID FASTCALL ExWaitForRundownProtectionRelease( PEX_RUNDOWN_REF );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoCsqInitialize( PIO_CSQ, PIO_CSQ_INSERT_IRP, PIO_CSQ_REMOVE_IRP, PIO_CSQ_PEEK_NEXT_IRP, PIO_CSQ_ACQUIRE_LOCK, PIO_CSQ_RELEASE_LOCK, PIO_CSQ_COMPLETE_CANCELED_IRP );
|
||
|
NTKERNELAPI VOID NTAPI IoCsqInsertIrp( PIO_CSQ, PIRP, PIO_CSQ_IRP_CONTEXT );
|
||
|
NTKERNELAPI PIRP NTAPI IoCsqRemoveIrp( PIO_CSQ, PIO_CSQ_IRP_CONTEXT );
|
||
|
NTKERNELAPI PIRP NTAPI IoCsqRemoveNextIrp( PIO_CSQ, PVOID );
|
||
|
NTKERNELAPI BOOLEAN NTAPI IoForwardIrpSynchronously( PDEVICE_OBJECT, PIRP );
|
||
|
NTKERNELAPI VOID NTAPI IoFreeErrorLogEntry( PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoSetCompletionRoutineEx( PDEVICE_OBJECT, PIRP, PIO_COMPLETION_ROUTINE, PVOID, BOOLEAN, BOOLEAN, BOOLEAN );
|
||
|
NTKERNELAPI VOID NTAPI IoSetStartIoAttributes( PDEVICE_OBJECT, BOOLEAN, BOOLEAN );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIDeviceObjectToInstanceName( PVOID, PDEVICE_OBJECT, PUNICODE_STRING );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIExecuteMethod( PVOID, PUNICODE_STRING, ULONG, ULONG, PULONG, PUCHAR );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIHandleToInstanceName( PVOID, HANDLE, PUNICODE_STRING );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIOpenBlock( GUID *, ULONG, PVOID * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIQueryAllData( PVOID, ULONG *, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIQueryAllDataMultiple( PVOID *, ULONG, ULONG *, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMIQuerySingleInstance( PVOID, PUNICODE_STRING, ULONG *, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMISetNotificationCallback( PVOID, WMI_NOTIFICATION_CALLBACK, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMISetSingleInstance( PVOID, PUNICODE_STRING, ULONG, ULONG, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoWMISetSingleItem( PVOID, PUNICODE_STRING, ULONG, ULONG, ULONG, PVOID );
|
||
|
NTKERNELAPI VOID FASTCALL KeAcquireInStackQueuedSpinLockAtDpcLevel( PKSPIN_LOCK, PKLOCK_QUEUE_HANDLE );
|
||
|
NTKERNELAPI KIRQL NTAPI KeAcquireInterruptSpinLock( PKINTERRUPT );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeAreApcsDisabled( VOID );
|
||
|
NTKERNELAPI ULONG NTAPI KeGetRecommendedSharedDataAlignment( VOID );
|
||
|
NTKERNELAPI ULONG NTAPI KeQueryRuntimeThread( PKTHREAD, PULONG );
|
||
|
NTKERNELAPI PKDEVICE_QUEUE_ENTRY NTAPI KeRemoveByKeyDeviceQueueIfBusy( PKDEVICE_QUEUE, ULONG );
|
||
|
NTKERNELAPI VOID FASTCALL KeReleaseInStackQueuedSpinLockFromDpcLevel( PKLOCK_QUEUE_HANDLE );
|
||
|
NTKERNELAPI VOID NTAPI KeReleaseInterruptSpinLock( PKINTERRUPT, KIRQL );
|
||
|
NTKERNELAPI NTSTATUS NTAPI MmAddVerifierThunks( PVOID, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI MmAdvanceMdl( PMDLX, ULONG );
|
||
|
NTKERNELAPI PVOID NTAPI MmAllocateMappingAddress( SIZE_T, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI MmFreeMappingAddress( PVOID, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI MmIsVerifierEnabled( PULONG );
|
||
|
NTKERNELAPI PVOID NTAPI MmMapLockedPagesWithReservedMapping( PVOID, ULONG, PMDLX, MEMORY_CACHING_TYPE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI MmProtectMdlSystemAddress( PMDLX, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI MmUnmapReservedMapping( PVOID, ULONG, PMDLX );
|
||
|
NTKERNELAPI NTSTATUS NTAPI WmiQueryTraceInformation( TRACE_INFORMATION_CLASS, PVOID, ULONG, PULONG, PVOID );
|
||
|
#ifdef RUN_WPP
|
||
|
NTKERNELAPI NTSTATUS __cdecl WmiTraceMessage( TRACEHANDLE, ULONG, LPGUID, USHORT, ... );
|
||
|
NTKERNELAPI NTSTATUS NTAPI WmiTraceMessageVa( TRACEHANDLE, ULONG, LPGUID, USHORT, va_list );
|
||
|
#endif
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05010100)
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoValidateDeviceIoControlAccess( PIRP, ULONG );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeDeregisterBugCheckReasonCallback( PKBUGCHECK_REASON_CALLBACK_RECORD );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeRegisterBugCheckReasonCallback( PKBUGCHECK_REASON_CALLBACK_RECORD, PKBUGCHECK_REASON_CALLBACK_ROUTINE, KBUGCHECK_CALLBACK_REASON, PUCHAR );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05010200)
|
||
|
NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtectionEx( PEX_RUNDOWN_REF, ULONG );
|
||
|
NTKERNELAPI VOID FASTCALL ExReleaseRundownProtectionEx( PEX_RUNDOWN_REF, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI KeFlushQueuedDpcs( VOID );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05020000)
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoCsqInitializeEx( PIO_CSQ, PIO_CSQ_INSERT_IRP_EX, PIO_CSQ_REMOVE_IRP, PIO_CSQ_PEEK_NEXT_IRP, PIO_CSQ_ACQUIRE_LOCK, PIO_CSQ_RELEASE_LOCK, PIO_CSQ_COMPLETE_CANCELED_IRP );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoCsqInsertIrpEx( PIO_CSQ, PIRP, PIO_CSQ_IRP_CONTEXT, PVOID );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KdRefreshDebuggerNotPresent( VOID );
|
||
|
NTKERNELAPI KIRQL FASTCALL KeAcquireSpinLockForDpc( PKSPIN_LOCK );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeDeregisterNmiCallback( PVOID );
|
||
|
NTKERNELAPI ULONG_PTR NTAPI KeIpiGenericCall( PKIPI_BROADCAST_WORKER, ULONG_PTR );
|
||
|
NTKERNELAPI PVOID NTAPI KeRegisterNmiCallback( PNMI_CALLBACK, PVOID );
|
||
|
NTKERNELAPI VOID FASTCALL KeReleaseSpinLockForDpc( PKSPIN_LOCK, KIRQL );
|
||
|
NTKERNELAPI LOGICAL NTAPI MmIsIoSpaceActive( PHYSICAL_ADDRESS, SIZE_T );
|
||
|
#ifdef _X86_
|
||
|
NTKERNELAPI BOOLEAN FASTCALL KeTestSpinLock( PKSPIN_LOCK );
|
||
|
#endif
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtectionCacheAware( PEX_RUNDOWN_REF_CACHE_AWARE );
|
||
|
NTKERNELAPI BOOLEAN FASTCALL ExAcquireRundownProtectionCacheAwareEx( PEX_RUNDOWN_REF_CACHE_AWARE, ULONG );
|
||
|
NTKERNELAPI PEX_RUNDOWN_REF_CACHE_AWARE NTAPI ExAllocateCacheAwareRundownProtection( POOL_TYPE, ULONG );
|
||
|
NTKERNELAPI PVOID NTAPI ExEnterCriticalRegionAndAcquireResourceExclusive( PERESOURCE );
|
||
|
NTKERNELAPI PVOID NTAPI ExEnterCriticalRegionAndAcquireResourceShared( PERESOURCE );
|
||
|
NTKERNELAPI PVOID NTAPI ExEnterCriticalRegionAndAcquireSharedWaitForExclusive( PERESOURCE );
|
||
|
NTKERNELAPI VOID NTAPI ExFreeCacheAwareRundownProtection( PEX_RUNDOWN_REF_CACHE_AWARE );
|
||
|
NTKERNELAPI VOID NTAPI ExInitializeRundownProtectionCacheAware( PEX_RUNDOWN_REF_CACHE_AWARE, SIZE_T );
|
||
|
NTKERNELAPI VOID FASTCALL ExReInitializeRundownProtectionCacheAware( PEX_RUNDOWN_REF_CACHE_AWARE );
|
||
|
NTKERNELAPI VOID FASTCALL ExReleaseResourceAndLeaveCriticalRegion( PERESOURCE );
|
||
|
NTKERNELAPI VOID FASTCALL ExReleaseRundownProtectionCacheAware( PEX_RUNDOWN_REF_CACHE_AWARE );
|
||
|
NTKERNELAPI VOID FASTCALL ExReleaseRundownProtectionCacheAwareEx( PEX_RUNDOWN_REF_CACHE_AWARE, ULONG );
|
||
|
NTKERNELAPI VOID FASTCALL ExRundownCompletedCacheAware( PEX_RUNDOWN_REF_CACHE_AWARE );
|
||
|
NTKERNELAPI SIZE_T NTAPI ExSizeOfRundownProtectionCacheAware( VOID );
|
||
|
NTKERNELAPI VOID FASTCALL ExWaitForRundownProtectionReleaseCacheAware( PEX_RUNDOWN_REF_CACHE_AWARE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KdChangeOption( KD_OPTION, ULONG, PVOID, ULONG, PVOID, PULONG );
|
||
|
NTKERNELAPI VOID FASTCALL KeAcquireGuardedMutex( PKGUARDED_MUTEX );
|
||
|
NTKERNELAPI VOID FASTCALL KeAcquireGuardedMutexUnsafe( PKGUARDED_MUTEX );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeAreAllApcsDisabled( VOID );
|
||
|
NTKERNELAPI VOID NTAPI KeEnterGuardedRegion( VOID );
|
||
|
NTKERNELAPI VOID FASTCALL KeInitializeGuardedMutex( PKGUARDED_MUTEX );
|
||
|
NTKERNELAPI VOID NTAPI KeInitializeThreadedDpc( PRKDPC, PKDEFERRED_ROUTINE, PVOID );
|
||
|
NTKERNELAPI VOID NTAPI KeLeaveGuardedRegion( VOID );
|
||
|
NTKERNELAPI VOID FASTCALL KeReleaseGuardedMutex( PKGUARDED_MUTEX );
|
||
|
NTKERNELAPI VOID FASTCALL KeReleaseGuardedMutexUnsafe( PKGUARDED_MUTEX );
|
||
|
NTKERNELAPI BOOLEAN FASTCALL KeTryToAcquireGuardedMutex( PKGUARDED_MUTEX );
|
||
|
NTKERNELAPI PMDL NTAPI MmAllocatePagesForMdlEx( PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, PHYSICAL_ADDRESS, SIZE_T, MEMORY_CACHING_TYPE, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI SeReportSecurityEvent( ULONG, PUNICODE_STRING, PSID, PSE_ADT_PARAMETER_ARRAY );
|
||
|
NTKERNELAPI NTSTATUS NTAPI SeSetAuditParameter( PSE_ADT_PARAMETER_ARRAY, SE_ADT_PARAMETER_TYPE, ULONG, PVOID );
|
||
|
#ifdef _X86_
|
||
|
NTKERNELAPI BOOLEAN FASTCALL KeTryToAcquireSpinLockAtDpcLevel( PKSPIN_LOCK );
|
||
|
#endif
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
NTKERNELAPI NTSTATUS NTAPI CmCallbackGetKeyObjectID( PLARGE_INTEGER, PVOID, PULONG_PTR, PCUNICODE_STRING * );
|
||
|
NTKERNELAPI PVOID NTAPI CmGetBoundTransaction( PLARGE_INTEGER, PVOID );
|
||
|
NTKERNELAPI VOID NTAPI CmGetCallbackVersion( PULONG, PULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI CmRegisterCallbackEx( PEX_CALLBACK_FUNCTION, PCUNICODE_STRING, PVOID, PVOID, PLARGE_INTEGER, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI CmSetCallbackObjectContext( PVOID, PLARGE_INTEGER, PVOID, PVOID * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EtwActivityIdControl( ULONG, LPGUID );
|
||
|
NTKERNELAPI BOOLEAN NTAPI EtwEventEnabled( REGHANDLE, PCEVENT_DESCRIPTOR );
|
||
|
NTKERNELAPI BOOLEAN NTAPI EtwProviderEnabled( REGHANDLE, UCHAR, ULONGLONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EtwRegister( LPCGUID, PETWENABLECALLBACK, PVOID, PREGHANDLE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EtwUnregister( REGHANDLE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EtwWrite( REGHANDLE, PCEVENT_DESCRIPTOR, LPCGUID, ULONG, PEVENT_DATA_DESCRIPTOR );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EtwWriteString( REGHANDLE, UCHAR, ULONGLONG, LPCGUID, PCWSTR );
|
||
|
NTKERNELAPI NTSTATUS NTAPI EtwWriteTransfer( REGHANDLE, PCEVENT_DESCRIPTOR, LPCGUID, LPCGUID, ULONG, PEVENT_DATA_DESCRIPTOR );
|
||
|
NTKERNELAPI VOID NTAPI ExDeleteLookasideListEx( PLOOKASIDE_LIST_EX );
|
||
|
NTKERNELAPI VOID NTAPI ExFlushLookasideListEx( PLOOKASIDE_LIST_EX );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ExInitializeLookasideListEx( PLOOKASIDE_LIST_EX, PALLOCATE_FUNCTION_EX, PFREE_FUNCTION_EX, POOL_TYPE, ULONG, SIZE_T, ULONG, USHORT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoAllocateSfioStreamIdentifier( PFILE_OBJECT, ULONG, PVOID, PVOID * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoCheckShareAccessEx( ACCESS_MASK, ULONG, PFILE_OBJECT, PSHARE_ACCESS, BOOLEAN, PBOOLEAN );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoConnectInterruptEx( PIO_CONNECT_INTERRUPT_PARAMETERS );
|
||
|
NTKERNELAPI VOID NTAPI IoDisconnectInterruptEx( PIO_DISCONNECT_INTERRUPT_PARAMETERS );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoFreeSfioStreamIdentifier( PFILE_OBJECT, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetBootDiskInformationLite( PBOOTDISK_INFORMATION_LITE * );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetDevicePropertyData( PDEVICE_OBJECT, CONST DEVPROPKEY *, LCID, ULONG, ULONG, PVOID, PULONG, PDEVPROPTYPE );
|
||
|
NTKERNELAPI IO_PRIORITY_HINT NTAPI IoGetIoPriorityHint( PIRP );
|
||
|
NTKERNELAPI PVOID NTAPI IoGetSfioStreamIdentifier( PFILE_OBJECT, PVOID );
|
||
|
NTKERNELAPI VOID NTAPI IoInitializeWorkItem( PVOID, PIO_WORKITEM );
|
||
|
NTKERNELAPI VOID NTAPI IoQueueWorkItemEx( PIO_WORKITEM, PIO_WORKITEM_ROUTINE_EX, WORK_QUEUE_TYPE, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoRequestDeviceEjectEx( PDEVICE_OBJECT, PIO_DEVICE_EJECT_CALLBACK, PVOID, PDRIVER_OBJECT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoSetDevicePropertyData( PDEVICE_OBJECT, CONST DEVPROPKEY *, LCID, ULONG, DEVPROPTYPE, ULONG, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoSetIoPriorityHint( PIRP, IO_PRIORITY_HINT );
|
||
|
NTKERNELAPI VOID NTAPI IoSetShareAccessEx( ACCESS_MASK, ULONG, PFILE_OBJECT, PSHARE_ACCESS, PBOOLEAN );
|
||
|
NTKERNELAPI ULONG NTAPI IoSizeofWorkItem( VOID );
|
||
|
NTKERNELAPI VOID NTAPI IoUninitializeWorkItem( PIO_WORKITEM );
|
||
|
NTKERNELAPI LOGICAL NTAPI IoWithinStackLimits( ULONG_PTR, SIZE_T );
|
||
|
NTKERNELAPI VOID FASTCALL KeAcquireInStackQueuedSpinLockForDpc( PKSPIN_LOCK, PKLOCK_QUEUE_HANDLE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeQueryDpcWatchdogInformation( PKDPC_WATCHDOG_INFORMATION );
|
||
|
NTKERNELAPI VOID FASTCALL KeReleaseInStackQueuedSpinLockForDpc( PKLOCK_QUEUE_HANDLE );
|
||
|
NTKERNELAPI LOGICAL NTAPI MmIsDriverVerifyingByAddress( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI ObDereferenceObjectDeferDelete( PVOID );
|
||
|
NTKERNELAPI BOOLEAN NTAPI PoGetSystemWake( PIRP );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PoRegisterPowerSettingCallback( PDEVICE_OBJECT, LPCGUID, PPOWER_SETTING_CALLBACK, PVOID, PVOID * );
|
||
|
NTKERNELAPI VOID NTAPI PoSetSystemWake( PIRP );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PoUnregisterPowerSettingCallback( PVOID );
|
||
|
NTKERNELAPI ULONG NTAPI SeComputeAutoInheritByObjectType( PVOID, PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR );
|
||
|
#ifdef SINGLE_GROUP_LEGACY_API
|
||
|
NTKERNELAPI ULONG NTAPI KeQueryMaximumProcessorCount( VOID );
|
||
|
NTKERNELAPI VOID NTAPI KeRevertToUserAffinityThreadEx( KAFFINITY );
|
||
|
NTKERNELAPI KAFFINITY NTAPI KeSetSystemAffinityThreadEx( KAFFINITY );
|
||
|
#endif
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x06000100)
|
||
|
NTKERNELAPI VOID NTAPI KeDeregisterProcessorChangeCallback( PVOID );
|
||
|
NTKERNELAPI PVOID NTAPI KeRegisterProcessorChangeCallback( PPROCESSOR_CALLBACK_FUNCTION, PVOID, ULONG );
|
||
|
NTKERNELAPI USHORT NTAPI ObGetFilterVersion();
|
||
|
NTKERNELAPI NTSTATUS NTAPI ObRegisterCallbacks( POB_CALLBACK_REGISTRATION, PVOID * );
|
||
|
NTKERNELAPI VOID NTAPI ObUnRegisterCallbacks( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI PoSetDeviceBusyEx( PULONG );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
NTKERNELAPI NTSTATUS NTAPI EtwWriteEx( REGHANDLE, PCEVENT_DESCRIPTOR, ULONG64, ULONG, LPCGUID, LPCGUID, ULONG, PEVENT_DATA_DESCRIPTOR );
|
||
|
NTKERNELAPI VOID NTAPI ExSetResourceOwnerPointerEx( PERESOURCE, PVOID, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetAffinityInterrupt( PKINTERRUPT, PGROUP_AFFINITY );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetContainerInformation( IO_CONTAINER_INFORMATION_CLASS, PVOID, PVOID, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoGetDeviceNumaNode( PDEVICE_OBJECT, PUSHORT );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoRegisterContainerNotification( IO_CONTAINER_NOTIFICATION_CLASS, PIO_CONTAINER_NOTIFICATION_FUNCTION, PVOID, ULONG, PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoReplacePartitionUnit( PDEVICE_OBJECT, PDEVICE_OBJECT, ULONG );
|
||
|
NTKERNELAPI VOID NTAPI IoUnregisterContainerNotification( PVOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI IoUnregisterPlugPlayNotificationEx( PVOID );
|
||
|
NTKERNELAPI USHORT NTAPI KeGetCurrentNodeNumber( VOID );
|
||
|
NTKERNELAPI ULONG NTAPI KeGetCurrentProcessorNumberEx( PPROCESSOR_NUMBER );
|
||
|
NTKERNELAPI USHORT NTAPI KeQueryActiveGroupCount( VOID );
|
||
|
NTKERNELAPI ULONG NTAPI KeQueryActiveProcessorCountEx( USHORT );
|
||
|
NTKERNELAPI KAFFINITY NTAPI KeQueryGroupAffinity( USHORT );
|
||
|
NTKERNELAPI USHORT NTAPI KeQueryHighestNodeNumber( VOID );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeQueryLogicalProcessorRelationship( PPROCESSOR_NUMBER, LOGICAL_PROCESSOR_RELATIONSHIP, PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, PULONG );
|
||
|
NTKERNELAPI USHORT NTAPI KeQueryMaximumGroupCount( VOID );
|
||
|
NTKERNELAPI ULONG NTAPI KeQueryMaximumProcessorCountEx( USHORT );
|
||
|
NTKERNELAPI VOID NTAPI KeQueryNodeActiveAffinity( USHORT, PGROUP_AFFINITY, PUSHORT );
|
||
|
NTKERNELAPI USHORT NTAPI KeQueryNodeMaximumProcessorCount( USHORT );
|
||
|
NTKERNELAPI ULONGLONG NTAPI KeQueryUnbiasedInterruptTime( VOID );
|
||
|
NTKERNELAPI VOID NTAPI KeRestoreExtendedProcessorState( PXSTATE_SAVE );
|
||
|
NTKERNELAPI VOID NTAPI KeRevertToUserGroupAffinityThread( PGROUP_AFFINITY );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeSaveExtendedProcessorState( ULONG64, PXSTATE_SAVE );
|
||
|
NTKERNELAPI BOOLEAN NTAPI KeSetCoalescableTimer( PKTIMER, LARGE_INTEGER, ULONG, ULONG, PKDPC );
|
||
|
NTKERNELAPI VOID NTAPI KeSetSystemGroupAffinityThread( PGROUP_AFFINITY, PGROUP_AFFINITY );
|
||
|
NTKERNELAPI NTSTATUS NTAPI KeSetTargetProcessorDpcEx( PKDPC, PPROCESSOR_NUMBER );
|
||
|
NTKERNELAPI VOID NTAPI ObDereferenceObjectDeferDeleteWithTag( PVOID, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ObReferenceObjectByHandleWithTag( HANDLE, ACCESS_MASK, POBJECT_TYPE, KPROCESSOR_MODE, ULONG, PVOID *, POBJECT_HANDLE_INFORMATION );
|
||
|
NTKERNELAPI NTSTATUS NTAPI ObReferenceObjectByPointerWithTag( PVOID, ACCESS_MASK, POBJECT_TYPE, KPROCESSOR_MODE, ULONG );
|
||
|
NTKERNELAPI LONG_PTR FASTCALL ObfDereferenceObjectWithTag( PVOID, ULONG );
|
||
|
NTKERNELAPI LONG_PTR FASTCALL ObfReferenceObjectWithTag( PVOID, ULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PcwAddInstance( PPCW_BUFFER, PCUNICODE_STRING, ULONG, ULONG, PPCW_DATA );
|
||
|
NTKERNELAPI VOID NTAPI PcwCloseInstance( PPCW_INSTANCE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PcwCreateInstance( PPCW_INSTANCE *, PPCW_REGISTRATION, PCUNICODE_STRING, ULONG, PPCW_DATA );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PcwRegister( PPCW_REGISTRATION *, PPCW_REGISTRATION_INFORMATION );
|
||
|
NTKERNELAPI VOID NTAPI PcwUnregister( PPCW_REGISTRATION );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PoClearPowerRequest( PVOID, POWER_REQUEST_TYPE );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PoCreatePowerRequest( PVOID *, PDEVICE_OBJECT, PCOUNTED_REASON_CONTEXT );
|
||
|
NTKERNELAPI VOID NTAPI PoDeletePowerRequest( PVOID );
|
||
|
NTKERNELAPI VOID NTAPI PoEndDeviceBusy( PULONG );
|
||
|
NTKERNELAPI BOOLEAN NTAPI PoQueryWatchdogTime( PDEVICE_OBJECT, PULONG );
|
||
|
NTKERNELAPI NTSTATUS NTAPI PoSetPowerRequest( PVOID, POWER_REQUEST_TYPE );
|
||
|
NTKERNELAPI VOID NTAPI PoStartDeviceBusy( PULONG );
|
||
|
#endif
|
||
|
|
||
|
/* Functions in HAL.DLL */
|
||
|
NTHALAPI VOID NTAPI KeFlushWriteBuffer( VOID );
|
||
|
#ifdef _X86_
|
||
|
NTHALAPI KIRQL NTAPI KeGetCurrentIrql( VOID );
|
||
|
NTHALAPI VOID NTAPI READ_PORT_BUFFER_UCHAR( PUCHAR, PUCHAR, ULONG );
|
||
|
NTHALAPI VOID NTAPI READ_PORT_BUFFER_ULONG( PULONG, PULONG, ULONG );
|
||
|
NTHALAPI VOID NTAPI READ_PORT_BUFFER_USHORT( PUSHORT, PUSHORT, ULONG );
|
||
|
NTHALAPI UCHAR NTAPI READ_PORT_UCHAR( PUCHAR );
|
||
|
NTHALAPI ULONG NTAPI READ_PORT_ULONG( PULONG );
|
||
|
NTHALAPI USHORT NTAPI READ_PORT_USHORT( PUSHORT );
|
||
|
NTHALAPI VOID NTAPI WRITE_PORT_BUFFER_UCHAR( PUCHAR, PUCHAR, ULONG );
|
||
|
NTHALAPI VOID NTAPI WRITE_PORT_BUFFER_ULONG( PULONG, PULONG, ULONG );
|
||
|
NTHALAPI VOID NTAPI WRITE_PORT_BUFFER_USHORT( PUSHORT, PUSHORT, ULONG );
|
||
|
NTHALAPI VOID NTAPI WRITE_PORT_UCHAR( PUCHAR, UCHAR );
|
||
|
NTHALAPI VOID NTAPI WRITE_PORT_ULONG( PULONG, ULONG );
|
||
|
NTHALAPI VOID NTAPI WRITE_PORT_USHORT( PUSHORT, USHORT );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05000000)
|
||
|
NTHALAPI VOID FASTCALL ExAcquireFastMutex( PFAST_MUTEX );
|
||
|
NTHALAPI VOID FASTCALL ExReleaseFastMutex( PFAST_MUTEX );
|
||
|
NTHALAPI LARGE_INTEGER NTAPI KeQueryPerformanceCounter( PLARGE_INTEGER );
|
||
|
NTHALAPI VOID NTAPI KeStallExecutionProcessor( ULONG );
|
||
|
#ifdef _X86_
|
||
|
NTHALAPI KIRQL NTAPI KeRaiseIrqlToDpcLevel( VOID );
|
||
|
NTHALAPI KIRQL FASTCALL KfAcquireSpinLock( PKSPIN_LOCK );
|
||
|
NTHALAPI VOID FASTCALL KfLowerIrql( KIRQL );
|
||
|
NTHALAPI KIRQL FASTCALL KfRaiseIrql( KIRQL );
|
||
|
NTHALAPI VOID FASTCALL KfReleaseSpinLock( PKSPIN_LOCK, KIRQL );
|
||
|
#endif
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x05010000)
|
||
|
#ifdef _X86_
|
||
|
NTHALAPI VOID FASTCALL KeAcquireInStackQueuedSpinLock( PKSPIN_LOCK, PKLOCK_QUEUE_HANDLE );
|
||
|
NTHALAPI VOID FASTCALL KeReleaseInStackQueuedSpinLock( PKLOCK_QUEUE_HANDLE );
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/* Functions in CLFS.SYS */
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsAddLogContainer( PLOG_FILE_OBJECT, PULONGLONG, PUNICODE_STRING );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsAddLogContainerSet( PLOG_FILE_OBJECT, USHORT, PULONGLONG, PUNICODE_STRING );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsAdvanceLogBase( PVOID, PCLFS_LSN, ULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsAlignReservedLog( PVOID, ULONG, LONGLONG [], PLONGLONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsAllocReservedLog( PVOID, ULONG, PLONGLONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsCloseAndResetLogFile( PLOG_FILE_OBJECT );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsCloseLogFileObject( PLOG_FILE_OBJECT );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsCreateLogFile( PPLOG_FILE_OBJECT, PUNICODE_STRING, ACCESS_MASK, ULONG, PSECURITY_DESCRIPTOR, ULONG, ULONG, ULONG, ULONG, PVOID, ULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsCreateMarshallingArea( PLOG_FILE_OBJECT, POOL_TYPE, PALLOCATE_FUNCTION, PFREE_FUNCTION, ULONG, ULONG, ULONG, PVOID * );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsCreateScanContext( PLOG_FILE_OBJECT, ULONG, ULONG, CLFS_SCAN_MODE, PCLFS_SCAN_CONTEXT );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsDeleteLogByPointer( PLOG_FILE_OBJECT );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsDeleteLogFile( PUNICODE_STRING, PVOID, ULONG, PVOID, ULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsDeleteMarshallingArea( PVOID );
|
||
|
CLFSUSER_API CLFS_LSN NTAPI ClfsEarlierLsn( PCLFS_LSN );
|
||
|
CLFSUSER_API void NTAPI ClfsFinalize( void );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsFlushBuffers( PVOID );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsFlushToLsn( PVOID, PCLFS_LSN, PCLFS_LSN );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsFreeReservedLog( PVOID, ULONG, PLONGLONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsGetContainerName( PLOG_FILE_OBJECT, CLFS_CONTAINER_ID, PUNICODE_STRING, PULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsGetIoStatistics( PLOG_FILE_OBJECT, PVOID, ULONG, CLFS_IOSTATS_CLASS, PULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsGetLogFileInformation( PLOG_FILE_OBJECT, PCLFS_INFORMATION, PULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsInitialize( void );
|
||
|
CLFSUSER_API CLFS_LSN NTAPI ClfsLaterLsn( PCLFS_LSN );
|
||
|
CLFSUSER_API ULONG NTAPI ClfsLsnBlockOffset( const CLFS_LSN * );
|
||
|
CLFSUSER_API CLFS_CONTAINER_ID NTAPI ClfsLsnContainer( const CLFS_LSN * );
|
||
|
CLFSUSER_API CLFS_LSN NTAPI ClfsLsnCreate( CLFS_CONTAINER_ID, ULONG, ULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsLsnDifference( PCLFS_LSN, PCLFS_LSN, ULONG, ULONG, PLONGLONG );
|
||
|
CLFSUSER_API BOOLEAN NTAPI ClfsLsnEqual( const CLFS_LSN *, const CLFS_LSN * );
|
||
|
CLFSUSER_API BOOLEAN NTAPI ClfsLsnGreater( const CLFS_LSN *, const CLFS_LSN * );
|
||
|
CLFSUSER_API CLFS_LSN NTAPI ClfsLsnIncrement( PCLFS_LSN );
|
||
|
CLFSUSER_API BOOLEAN NTAPI ClfsLsnInvalid( const CLFS_LSN * );
|
||
|
CLFSUSER_API BOOLEAN NTAPI ClfsLsnLess( const CLFS_LSN *, const CLFS_LSN * );
|
||
|
CLFSUSER_API BOOLEAN NTAPI ClfsLsnNull( const CLFS_LSN * );
|
||
|
CLFSUSER_API ULONG NTAPI ClfsLsnRecordSequence( const CLFS_LSN * );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsMgmtDeregisterManagedClient( CLFS_MGMT_CLIENT );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsMgmtHandleLogFileFull( CLFS_MGMT_CLIENT );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsMgmtInstallPolicy( PLOG_FILE_OBJECT, PCLFS_MGMT_POLICY, ULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsMgmtQueryPolicy( PLOG_FILE_OBJECT, CLFS_MGMT_POLICY_TYPE, PCLFS_MGMT_POLICY, PULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsMgmtRegisterManagedClient( PLOG_FILE_OBJECT, PCLFS_MGMT_CLIENT_REGISTRATION, PCLFS_MGMT_CLIENT );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsMgmtRemovePolicy( PLOG_FILE_OBJECT, CLFS_MGMT_POLICY_TYPE );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsMgmtSetLogFileSize( PLOG_FILE_OBJECT, PULONGLONG, PULONGLONG, PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK, PVOID );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsMgmtSetLogFileSizeAsClient( PLOG_FILE_OBJECT, PCLFS_MGMT_CLIENT, PULONGLONG, PULONGLONG, PCLFS_SET_LOG_SIZE_COMPLETE_CALLBACK, PVOID );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsMgmtTailAdvanceFailure( CLFS_MGMT_CLIENT, NTSTATUS );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsReadLogRecord( PVOID, PCLFS_LSN, CLFS_CONTEXT_MODE, PVOID *, PULONG, PCLFS_RECORD_TYPE, PCLFS_LSN, PCLFS_LSN, PVOID * );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsReadNextLogRecord( PVOID, PVOID *, PULONG, PCLFS_RECORD_TYPE, PCLFS_LSN, PCLFS_LSN, PCLFS_LSN, PCLFS_LSN );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsReadPreviousRestartArea( PVOID, PVOID *, PULONG, PCLFS_LSN );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsReadRestartArea( PVOID, PVOID *, PULONG, PCLFS_LSN, PVOID * );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsRemoveLogContainer( PLOG_FILE_OBJECT, PUNICODE_STRING, BOOLEAN );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsRemoveLogContainerSet( PLOG_FILE_OBJECT, USHORT, PUNICODE_STRING, BOOLEAN );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsReserveAndAppendLog( PVOID, PCLFS_WRITE_ENTRY, ULONG, PCLFS_LSN, PCLFS_LSN, ULONG, PLONGLONG, ULONG, PCLFS_LSN );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsReserveAndAppendLogAligned( PVOID, PCLFS_WRITE_ENTRY, ULONG, ULONG, PCLFS_LSN, PCLFS_LSN, ULONG, PLONGLONG, ULONG, PCLFS_LSN );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsScanLogContainers( PCLFS_SCAN_CONTEXT, CLFS_SCAN_MODE );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsSetArchiveTail( PLOG_FILE_OBJECT, PCLFS_LSN );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsSetEndOfLog( PLOG_FILE_OBJECT, PCLFS_LSN );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsSetLogFileInformation( PLOG_FILE_OBJECT, CLFS_LOG_INFORMATION_CLASS, PVOID, ULONG );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsTerminateReadLog( PVOID );
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsWriteRestartArea( PVOID, PVOID, ULONG, PCLFS_LSN, ULONG, PULONG, PCLFS_LSN );
|
||
|
#endif
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
CLFSUSER_API NTSTATUS NTAPI ClfsQueryLogFileInformation( PLOG_FILE_OBJECT, CLFS_LOG_INFORMATION_CLASS, PVOID, ULONG, PVOID, PULONG );
|
||
|
#endif
|
||
|
|
||
|
/* Debugging macros */
|
||
|
#if DBG
|
||
|
#define ASSERT( x ) \
|
||
|
((!(x)) ? (RtlAssert( #x, __FILE__, __LINE__, NULL ), FALSE) : TRUE)
|
||
|
#define ASSERTMSG( x, p ) \
|
||
|
((!(x)) ? (RtlAssert( #x, __FILE__, __LINE__, p ), FALSE) : TRUE)
|
||
|
#define RTL_SOFT_ASSERT( x ) \
|
||
|
((!(x)) ? (DbgPrint( "%s(%d): Soft assertion failed\n Expression: %s\n", \
|
||
|
__FILE__, __LINE__, #x ), FALSE) : TRUE)
|
||
|
#define RTL_SOFT_ASSERTMSG( x, p ) \
|
||
|
((!(x)) ? (DbgPrint( \
|
||
|
"%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", \
|
||
|
__FILE__, __LINE__, #x, p ), FALSE) : TRUE)
|
||
|
#define RTL_VERIFY ASSERT
|
||
|
#define RTL_VERIFYMSG ASSERTMSG
|
||
|
#define RTL_SORT_VERIFY RTL_SOFT_ASSERT
|
||
|
#define RTL_SORT_VERIFYMSG RTL_SOFT_ASSERTMSG
|
||
|
#define PAGED_CODE() \
|
||
|
{ \
|
||
|
if( KeGetCurrentIrql() > APC_LEVEL ) { \
|
||
|
KdPrint( "EX: Pageable code called at IRQL %d\n", KeGetCurrentIrql() ); \
|
||
|
ASSERT( FALSE ); \
|
||
|
} \
|
||
|
}
|
||
|
#define PAGED_CODE_LOCKED() ((void)0);
|
||
|
#else
|
||
|
#define ASSERT( x ) ((void)0)
|
||
|
#define ASSERTMSG( x, p ) ((void)0)
|
||
|
#define RTL_SOFT_ASSERT( x ) ((void)0)
|
||
|
#define RTL_SOFT_ASSERTMSG( x, p ) ((void)0)
|
||
|
#define RTL_VERIFY( x ) ((x) ? TRUE : FALSE)
|
||
|
#define RTL_VERIFYMSG( x, p ) ((x) ? TRUE : FALSE)
|
||
|
#define RTL_SOFT_VERIFY( x ) ((x) ? TRUE : FALSE)
|
||
|
#define RTL_SOFT_VERIFYMSG( x, p ) ((x) ? TRUE : FALSE)
|
||
|
#define PAGED_CODE() ((void)0);
|
||
|
#define PAGED_CODE_LOCKED() ((void)0);
|
||
|
#endif
|
||
|
|
||
|
/* Functions implemented as macros */
|
||
|
#define NtCurrentProcess() ((HANDLE)(ULONG_PTR)-1)
|
||
|
#define NtCurrentThread() ((HANDLE)(ULONG_PTR)-2)
|
||
|
#define PsGetCurrentProcess() IoGetCurrentProcess()
|
||
|
#define PsGetCurrentThread() ((PETHREAD)KeGetCurrentThread())
|
||
|
#define ZwCurrentProcess() NtCurrentProcess()
|
||
|
#define ZwCurrentThread() NtCurrentThread()
|
||
|
#define InitializeListHead32( x ) \
|
||
|
((x)->Flink = (x)->Blink = PtrToUlong( x ))
|
||
|
#define RtlIntPtrToUnicodeString( p1, p2, p3 ) \
|
||
|
RtlIntegerToUnicodeString( p1, p2, p3 )
|
||
|
#define RtlUnicodeStringToAnsiSize( x ) \
|
||
|
((*NlsMbCodePageTag) ? RtlxUnicodeStringToAnsiSize( x ) : \
|
||
|
((x)->Length + sizeof( UNICODE_NULL )) / sizeof( WCHAR ))
|
||
|
#define RtlAnsiStringToUnicodeSize( x ) \
|
||
|
((*NlsMbCodePageTag) ? RtlxAnsiStringToUnicodeSize( x ) : \
|
||
|
((x)->Length + sizeof( ANSI_NULL )) * sizeof( WCHAR ))
|
||
|
#define RtlEqualMemory( p1, p2, p3 ) !memcmp( p1, p2, p3 )
|
||
|
#define RtlMoveMemory( p1, p2, p3 ) memmove( p1, p2, p3 )
|
||
|
#define RtlCopyMemory( p1, p2, p3 ) memcpy( p1, p2, p3 )
|
||
|
#define RtlFillMemory( p1, p2, p3 ) memset( p1, p3, p2 )
|
||
|
#define RtlZeroMemory( p1, p2 ) memset( p1, 0, p2 )
|
||
|
#if DBG
|
||
|
#define KdPrint( x ) DbgPrint x
|
||
|
#define KdPrintEx( x ) DbgPrintEx x
|
||
|
#define vKdPrintEx( x ) vDbgPrintEx x
|
||
|
#define vKdPrintExWithStatus( x ) vDbgPrintExWithStatus x
|
||
|
#define KdBreakPoint() DbgBreakPoint()
|
||
|
#define KdBreakPointWithStatus( x ) DbgBreakPointWithStatus( x )
|
||
|
#else
|
||
|
#define KdPrint( x )
|
||
|
#define KdPrintEx( x )
|
||
|
#define vKdPrintEx( x )
|
||
|
#define vKdPrintExWithStatus( x )
|
||
|
#define KdBreakPoint()
|
||
|
#define KdBreakPointWithStatus( x )
|
||
|
#endif
|
||
|
#define RtlLargeIntegerAnd( x, p1, p2 ) \
|
||
|
(x).QuadPart = (p1).QuadPart & (p2).QuadPart
|
||
|
#define RtlLargeIntegerGreaterThan( p1, p2 ) \
|
||
|
((((p1).HighPart == (p2).HighPart) && ((p1).LowPart > (p2).LowPart)) || \
|
||
|
((p1).HighPart > (p2).HighPart))
|
||
|
#define RtlLargeIntegerGreaterThanOrEqualTo( p1, p2 ) \
|
||
|
((((p1).HighPart == (p2).HighPart) && ((p1).LowPart >= (p2).LowPart)) || \
|
||
|
((p1).HighPart > (p2).HighPart))
|
||
|
#define RtlLargeIntegerEqualTo( p1, p2 ) \
|
||
|
(!(((p1).LowPart ^ (p2).LowPart) | ((p1).HighPart ^ (p2).HighPart)))
|
||
|
#define RtlLargeIntegerNotEqualTo( p1, p2 ) \
|
||
|
((((p1).LowPart ^ (p2).LowPart) | ((p1).HighPart ^ ((p2).HighPart)))
|
||
|
#define RtlLargeIntegerLessThan( p1, p2 ) \
|
||
|
((((p1).HighPart == (p2).HighPart) && ((p1).LowPart < (p2).LowPart)) || \
|
||
|
((p1).HighPart < (p2).HighPart))
|
||
|
#define RtlLargeIntegerLessThanOrEqualTo( p1, p2 ) \
|
||
|
((((p1).HighPart == (p2).HighPart) && ((p1).LowPart <= (p2).LowPart)) || \
|
||
|
((p1).HighPart < (p2).HighPart))
|
||
|
#define RtlLargeIntegerGreaterThanZero( x ) \
|
||
|
((((x).HighPart == 0) && ((x).LowPart > 0)) || ((x).HighPart > 0)
|
||
|
#define RtlLargeIntegerGreaterThanOrEqualToZero( x ) \
|
||
|
((x).HighPart >= 0)
|
||
|
#define RtlLargeIntegerEqualToZero( x ) \
|
||
|
(!((x).LowPart | (x).HighPart))
|
||
|
#define RtlLargeIntegerNotEqualToZero( x ) \
|
||
|
((x).LowPart | (x).HighPart)
|
||
|
#define RtlLargeIntegerLessThanZero( x ) \
|
||
|
((x).HighPart < 0)
|
||
|
#define RtlLargeIntegerLessThanOrEqualToZero( x ) \
|
||
|
(((x).HighPart < 0) || !((x).LowPart | (x).HighPart))
|
||
|
#define RtlStoreUshort( p1, p2 ) \
|
||
|
if( (ULONG_PTR)(p1) & SHORT_MASK ) { \
|
||
|
((PUCHAR)(p1))[SHORT_LEAST_SIGNIFICANT_BIT] = (UCHAR)FIRSTBYTE( p2 ); \
|
||
|
((PUCHAR)(p1))[SHORT_MOST_SIGNIFICANT_BIT] = (UCHAR)SECONDBYTE( p2 ); \
|
||
|
} else { \
|
||
|
*((PUSHORT)(p1)) = (USHORT)(p2); \
|
||
|
}
|
||
|
#define RtlStoreUlong( p1, p2 ) \
|
||
|
if( (ULONG_PTR)(p1) & LONG_MASK ) { \
|
||
|
((PUCHAR)(p1))[LONG_LEAST_SIGNIFICANT_BIT] = (UCHAR)FIRSTBYTE( p2 ); \
|
||
|
((PUCHAR)(p1))[LONG_3RD_MOST_SIGNIFICANT_BIT] = (UCHAR)SECONDBYTE( p2 ); \
|
||
|
((PUCHAR)(p1))[LONG_2ND_MOST_SIGNIFICANT_BIT] = (UCHAR)THIRDBYTE( p2 ); \
|
||
|
((PUCHAR)(p1))[LONG_MOST_SIGNFICIANT_BIT] = (UCHAR)FOURTHBYTE( p2 ); \
|
||
|
} else { \
|
||
|
*((PULONG)(p1)) = (ULONG)(p2); \
|
||
|
}
|
||
|
#define RtlStoreUlonglong( p1, p2 ) \
|
||
|
if( (ULONG_PTR)(p1) & LONGLONG_MASK ) { \
|
||
|
RtlStoreUlong( (ULONG_PTR)(p1), (ULONGLONG)(p2) & 0xFFFFFFFF ); \
|
||
|
RtlStoreUlong( (ULONG_PTR)(p1) + sizeof( ULONG ), (ULONGLONG)(p2) >> 32 ); \
|
||
|
} else { \
|
||
|
*((PULONGLONG)(p1)) = (ULONGLONG)(p2); \
|
||
|
}
|
||
|
#define RtlStoreUlongPtr( p1, p2 ) RtlStoreUlong( p1, p2 )
|
||
|
#define RtlRetrieveUshort( p1, p2 ) \
|
||
|
if( (ULONG_PTR)(p2) & SHORT_MASK ) { \
|
||
|
((PUCHAR)(p1))[0] = ((PUCHAR)(p2))[0]; \
|
||
|
((PUCHAR)(p1))[0] = ((PUCHAR)(p2))[1]; \
|
||
|
} else { \
|
||
|
*((PUSHORT)(p1)) = *((PUSHORT)(p2)); \
|
||
|
}
|
||
|
#define RtlRetrieveUlong( p1, p2 ) \
|
||
|
if( (ULONG_PTR)(p2) & LONG_MASK ) { \
|
||
|
((PUCHAR)(p1))[0] = ((PUCHAR)(p2))[0]; \
|
||
|
((PUCHAR)(p1))[1] = ((PUCHAR)(p2))[1]; \
|
||
|
((PUCHAR)(p1))[2] = ((PUCHAR)(p2))[2]; \
|
||
|
((PUCHAR)(p1))[3] = ((PUCHAR)(p2))[3]; \
|
||
|
} else { \
|
||
|
*((PULONG)(p1)) = *((PULONG)(p2)); \
|
||
|
}
|
||
|
#define RtlCheckBit( x, p ) \
|
||
|
((((x)->Buffer[(p) / 32]) >> ((p) % 32)) & 0x00000001)
|
||
|
#define RtlEqualLuid( p1, p2 ) \
|
||
|
(((p1)->LowPart == (p2)->LowPart) && ((p1)->HighPart == ((p2)->HighPart))
|
||
|
#define RtlIsZeroLuid( x ) \
|
||
|
((BOOLEAN)(((x)->LowPart | (x)->HighPart) == 0))
|
||
|
#ifdef _X86_
|
||
|
#define KeGetDcacheFillSize() 1L
|
||
|
#define KeFlushIoBuffers( p1, p2, p3 )
|
||
|
#define ExAcquireSpinLock( p1, p2 ) KeAcquireSpinLock( p1, p2 )
|
||
|
#define ExReleaseSpinLock( p1, p2 ) KeReleaseSpinLock( p1, p2 )
|
||
|
#define ExAcquireSpinLockAtDpcLevel( x ) \
|
||
|
KeAcquireSpinLockAtDpcLevel( x )
|
||
|
#define ExReleaseSpinLockFromDpcLevel( x ) \
|
||
|
ExReleaseSpinLockFromDpcLevel( x )
|
||
|
#define KeQueryTickCount( x ) \
|
||
|
{ \
|
||
|
KSYSTEM_TIME volatile *v = *((PKSYSTEM_TIME *)&KeTickCount); \
|
||
|
for( ;; ) { \
|
||
|
(x)->HighPart = v->High1Time; \
|
||
|
(x)->LowPart = v->LowPart; \
|
||
|
if( (x)->HighPart = v->High2Time ) { \
|
||
|
break; \
|
||
|
} \
|
||
|
} \
|
||
|
}
|
||
|
#define MmGetProcedureAddress( x ) (x)
|
||
|
#define MmLockPagableCodeSection( x ) MmLockPagableDataSection( x )
|
||
|
#define ExInterlockedIncrementLong( x, p ) \
|
||
|
Exfi386InterlockedIncrementLong( x )
|
||
|
#define ExInterlockedDecrementLong( x, p ) \
|
||
|
Exfi386InterlockedDecrementLong( x )
|
||
|
#define ExInterlockedExchangeUlong( p1, p2, p3 ) \
|
||
|
Exfi386InterlockedExchangeUlong( p1, p2 )
|
||
|
#define InterlockedCompareExchangePointer( p1, p2, p3 ) \
|
||
|
(PVOID)InterlockedCompareExchange( (PLONG)(p1), (LONG)(p2), (LONG)(p3) )
|
||
|
#define InterlockedCompareExchange64( p1, p2, p3 ) \
|
||
|
ExfInterlockedCompareExchange64( p1, &(p2), &(p3) )
|
||
|
#define InterlockedExchangePointer( p1, p2 ) \
|
||
|
(PVOID)InterlockedExchange( (PLONG)(p1), (LONG)(p2) )
|
||
|
#define InterlockedExchangeAddSizeT( p1, p2 ) \
|
||
|
InterlockedExchangeAdd( (LONG *)(p1), p2 )
|
||
|
#define InterlockedIncrementSizeT( x ) InterlockedIncrement( (LONG *)(x) )
|
||
|
#define InterlockedDecrementSizeT( x ) InterlockedDecrement( (LONG *)(x) )
|
||
|
#define KeAcquireSpinLockAtDpcLevel( x ) \
|
||
|
KefAcquireSpinLockAtDpcLevel( x )
|
||
|
#define KeReleaseSpinLockFromDpcLevel( x ) \
|
||
|
KefReleaseSpinLockFromDpcLevel( x )
|
||
|
#define KeAcquireSpinLock( p1, p2 ) (*(p2) = KfAcquireSpinLock( p1 ))
|
||
|
#define KeReleaseSpinLock( p1, p2 ) KfReleaseSpinLock( p1, p2 )
|
||
|
#define KeLowerIrql( x ) KfLowerIrql( x )
|
||
|
#define KeRaiseIrql( p1, p2 ) (*(p2) = KfRaiseIrql( p1 ))
|
||
|
#endif
|
||
|
#define KeInitializeCallbackRecord( x ) (x)->State = BufferEmpty
|
||
|
#ifndef POOL_TAGGING
|
||
|
#define ExAllocatePoolWithTag( p1, p2, p3 ) \
|
||
|
ExAllocatePool( p1, p2 )
|
||
|
#define ExAllocatePoolWithQuotaTag( p1, p2, p3 ) \
|
||
|
ExAllocatePoolWithQuota( p1, p2 )
|
||
|
#endif
|
||
|
#define ExQueryDepthSList( x ) (x)->Depth
|
||
|
#define InterlockedFlushSList( x ) ExInterlockedFlushSList( x )
|
||
|
#define QueryDepthSList( x ) ExQueryDepthSList( x )
|
||
|
#define ExInitializeWorkItem( x, p1, p2 ) \
|
||
|
(x)->WorkerRoutine = (p1); \
|
||
|
(x)->Parameter = (p2); \
|
||
|
(x)->List.Flink = NULL;
|
||
|
#define ExReleaseResource( x ) ExReleaseResourceLite( x )
|
||
|
#define ExGetCurrentResourceThread() ((ULONG_PTR)PsGetCurrentThread())
|
||
|
#define MmGetMdlPfnArray( x ) ((PPFN_NUMBER)(x + 1))
|
||
|
#define MmGetMdlVirtualAddress( x ) \
|
||
|
((PVOID)((PCHAR)((x)->StartVa) + (x)->ByteOffset))
|
||
|
#define MmGetMdlByteCount( x ) ((x)->ByteCount)
|
||
|
#define MmGetMdlByteOffset( x ) ((x)->ByteOffset)
|
||
|
#define MmGetMdlBaseVa( x ) ((x)->StartVa)
|
||
|
#define MmInitializeMdl( x, p1, p2 ) \
|
||
|
{ \
|
||
|
(x)->Next = (PMDL)NULL; \
|
||
|
(x)->Size = (CSHORT)(sizeof( MDL ) + (sizeof( PFN_NUMBER ) * \
|
||
|
ADDRESS_AND_SIZE_TO_SPAN_PAGES( p1, p2 ))); \
|
||
|
(x)->MdlFlags = 0; \
|
||
|
(x)->StartVa = (PVOID)PAGE_ALIGN( p1 ); \
|
||
|
(x)->ByteOffset = BYTE_OFFSET( p1 ); \
|
||
|
(x)->ByteCount = (ULONG)(p2); \
|
||
|
}
|
||
|
#define MmGetSystemAddressForMdlSafe( x, p ) \
|
||
|
(((x)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
|
||
|
(x)->MappedSystemVa : MmMapLockedPagesSpecifyCache( x, KernelMode, MmCached, \
|
||
|
NULL, FALSE, p ))
|
||
|
#define MmGetSystemAddressForMdl( x ) \
|
||
|
(((x)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA | MDL_SOURCE_IS_NONPAGED_POOL)) ? \
|
||
|
(x)->MappedSystemVa : MmMapLockedPages( x, KernelMode ))
|
||
|
#define MmPrepareMdlForReuse( x ) \
|
||
|
if( ((x)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0 ) { \
|
||
|
ASSERT( ((x)->MdlFlags & MDL_PARTIAL) != 0 ); \
|
||
|
MmUnmapLockedPages( (x)->MappedSystemVa, x ); \
|
||
|
} else if( ((x)->MdlFlags & MDL_PARTIAL) == 0 ) { \
|
||
|
ASSERT( ((x)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0 ); \
|
||
|
}
|
||
|
#define IoCallDriver( p1, p2 ) IofCallDriver( p1, p2 )
|
||
|
#define IoCompleteRequest( p1, p2 ) IofCompleteRequest( p1, p2 )
|
||
|
#define IoGetCurrentIrpStackLocation( x ) ((x)->Tail.Overlay.CurrentStackLocation)
|
||
|
#define IoGetFunctionCodeFromCtlCode( x ) ((x >> 2) & 0x00000FFFL)
|
||
|
#define IoCallDriverStackSafeDefault( p1, p2 ) \
|
||
|
IoCallDriver( p1, p2 )
|
||
|
#define IoGetNextIrpStackLocation( x ) ((x)->Tail.Overlay.CurrentStackLocation - 1)
|
||
|
#define IoInitializeDpcRequest( p1, p2 ) \
|
||
|
KeInitializeDpc( &(p1)->Dpc, (PKDEFERRED_ROUTINE)(p2), p1 )
|
||
|
#define IoIsErrorUserInduced( x ) \
|
||
|
((BOOLEAN)(((x) == STATUS_DEVICE_NOT_READY) || ((x) == STATUS_IO_TIMEOUT) || \
|
||
|
((x) == STATUS_MEDIA_WRITE_PROTECTED) || ((x) == STATUS_NO_MEDIA_IN_DEVICE) || \
|
||
|
((x) == STATUS_VERIFY_REQUIRED) || ((x) == STATUS_UNRECOGNIZED_MEDIA) || \
|
||
|
((x) == STATUS_WRONG_VOLUME)))
|
||
|
#define IoMarkIrpPending( x ) \
|
||
|
(IoGetCurrentIrpStackLocation( x )->Control |= SL_PENDING_RETURNED)
|
||
|
#define IoRequestDpc( p1, p2, p3 ) KeInsertQueueDpc( &(p1)->Dpc, p1, p2 )
|
||
|
#define IoSetCancelRoutine( p1, p2 ) \
|
||
|
(PDRIVER_CANCEL)(ULONG_PTR)InterlockedExchangePointer( \
|
||
|
(PVOID *)&(p1)->CancelRoutine, (PVOID)(ULONG_PTR)(p2) )
|
||
|
#define IoSetNextIrpStackLocation( x ) \
|
||
|
{ \
|
||
|
(x)->CurrentLocation--; \
|
||
|
(x)->Tail.Overlay.CurrentStackLocation--; \
|
||
|
}
|
||
|
#define IoCopyCurrentIrpStackLocationToNext( x ) \
|
||
|
{ \
|
||
|
PIO_STACK_LOCATION v1; \
|
||
|
PIO_STACK_LOCATION v2; \
|
||
|
v1 = IoGetCurrentIrpStackLocation( x ); \
|
||
|
v2 = IoGetNextIrpStackLocation( x ); \
|
||
|
RtlCopyMemory( v2, v1, (SIZE_T)&((IO_STACK_LOCATION *)0)->CompletionRoutine ); \
|
||
|
v2->Control = 0; \
|
||
|
}
|
||
|
#define IoSkipCurrentIrpStackLocation( x ) \
|
||
|
{ \
|
||
|
(x)->CurrentLocation++; \
|
||
|
(x)->Tail.Overlay.CurrentStackLocation++; \
|
||
|
}
|
||
|
#define IoInitializeRemoveLock( p1, p2, p3, p4 ) \
|
||
|
IoInitializeRemoveLockEx( p1, p2, p3, p4, sizeof( IO_REMOVE_LOCK ) )
|
||
|
#if DBG
|
||
|
#define IoAcquireRemoveLock( p1, p2 ) \
|
||
|
IoAcquireRemoveLockEx( p1, p2, __FILE__, __LINE__, sizeof( IO_REMOVE_LOCK ) )
|
||
|
#else
|
||
|
#define IoAcquireRemoveLock( p1, p2 ) \
|
||
|
IoAcquireRemoveLockEx( p1, p2, "", 1, sizeof( IO_REMOVE_LOCK ) )
|
||
|
#endif
|
||
|
#define IoReleaseRemoveLock( p1, p2 ) \
|
||
|
IoReleaseRemoveLockEx( p1, p2, sizeof( IO_REMOVE_LOCK ) )
|
||
|
#define IoReleaseRemoveLockAndWait( p1, p2 ) \
|
||
|
IoReleaseRemoveLockAndWaitEx( p1, p2, sizeof( IO_REMOVE_LOCK ) )
|
||
|
#define IoSizeOfIrp( x ) \
|
||
|
((USHORT)(sizeof( IRP ) + ((x) * sizeof( IO_STACK_LOCATION ))))
|
||
|
#define IoWMIDeviceObjectToProviderId( x ) ((ULONG)(x))
|
||
|
#define IoAdjustPagingPathCount( p1, p2 ) \
|
||
|
if( p2 ) { \
|
||
|
InterlockedIncrement( p1 ); \
|
||
|
} else { \
|
||
|
InterlockedDecrement( p1 ); \
|
||
|
}
|
||
|
#define PoSetDeviceBusy( x ) (*(x) = 0)
|
||
|
#define ObDereferenceObject( x ) ObfDereferenceObject( x )
|
||
|
#define ObReferenceObject( x ) ObfReferenceObject( x )
|
||
|
#if (NTDDI_VERSION >= 0x06010000)
|
||
|
#define ObDereferenceObjectWithTag( x, p ) ObfDereferenceObjectWithTag( x, p )
|
||
|
#define ObReferenceObjectWithTag( x, p ) ObfReferenceObjectWithTag( x, p )
|
||
|
#endif
|
||
|
|
||
|
/* Aliases */
|
||
|
#define RtlCopyBytes RtlCopyMemory
|
||
|
#define RtlZeroBytes RtlZeroMemory
|
||
|
#define RtlFillBytes RtlFillMemory
|
||
|
#define RtlCopyMemoryNonTemporal RtlCopyMemory
|
||
|
#define RtlIsNtDdiVersionAvailable WdmlibRtlIsNtDdiVersionAvailable
|
||
|
#define RtlIsServicePackVersionInstalled WdmlibRtlIsServicePackVersionInstalled
|
||
|
#ifdef _X86_
|
||
|
#define ExInterlockedAddUlong ExfInterlockedAddUlong
|
||
|
#define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
|
||
|
#define ExInterlockedInsertTailList ExfInterlockedInsertTailList
|
||
|
#define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
|
||
|
#define ExInterlockedPopEntryList ExfInterlockedPopEntryList
|
||
|
#define ExInterlockedPushEntryList ExfInterlockedPushEntryList
|
||
|
#define InterlockedIncrementAcquire InterlockedIncrement
|
||
|
#define InterlockedIncrementRelease InterlockedIncrement
|
||
|
#define InterlockedDecrementAcquire InterlockedDecrement
|
||
|
#define InterlockedDecrementRelease InterlockedDecrement
|
||
|
#define InterlockedCompareExchangeAcquire InterlockedCompareExchange
|
||
|
#define InterlockedCompareExchangeRelease InterlockedCompareExchange
|
||
|
#define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
|
||
|
#define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
|
||
|
#define InterlockedCompareExchangePointerAcquire InterlockedCompareExchangePointer
|
||
|
#define InterlockedCompareExchangePointerRelease InterlockedCompareExchangePointer
|
||
|
#endif
|
||
|
#define KeWaitForMutexObject KeWaitForSingleObject
|
||
|
#define ExInitializeSListHead InitializeSListHead
|
||
|
#define ExIsResourceAcquiredLite ExIsResourceAcquiredSharedLite
|
||
|
#define IoForwardAndCatchIrp IoForwardIrpSynchronously
|
||
|
#define ExInterlockedAddUlong ExfInterlockedAddUlong
|
||
|
#define ExInterlockedInsertHeadList ExfInterlockedInsertHeadList
|
||
|
#define ExInterlockedInsertTailList ExfInterlockedInsertTailList
|
||
|
#define ExInterlockedRemoveHeadList ExfInterlockedRemoveHeadList
|
||
|
#define ExInterlockedPopEntryList ExfInterlockedPopEntryList
|
||
|
#define ExInterlockedPushEntryList ExfInterlockedPushEntryList
|
||
|
|
||
|
/* Other macros */
|
||
|
#define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag)
|
||
|
#define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag)
|
||
|
#define KD_DEBUGGER_ENABLED (*KdDebuggerEnabled)
|
||
|
#define KD_DEBUGGER_NOT_PRESENT (*KdDebuggerNotPresent)
|
||
|
|
||
|
__inline VOID InitializeListHead( PLIST_ENTRY x )
|
||
|
{
|
||
|
x->Flink = x->Blink = x;
|
||
|
}
|
||
|
|
||
|
__inline BOOLEAN IsListEmpty( const LIST_ENTRY *x )
|
||
|
{
|
||
|
return( (BOOLEAN)(x->Flink == x) );
|
||
|
}
|
||
|
|
||
|
__inline BOOLEAN RemoveEntryList( PLIST_ENTRY x )
|
||
|
{
|
||
|
PLIST_ENTRY v1;
|
||
|
PLIST_ENTRY v2;
|
||
|
v1 = x->Flink;
|
||
|
v2 = x->Blink;
|
||
|
v2->Flink = v1;
|
||
|
v1->Blink = v2;
|
||
|
return( (BOOLEAN)(v1 == v2) );
|
||
|
}
|
||
|
|
||
|
__inline PLIST_ENTRY RemoveHeadList( PLIST_ENTRY x )
|
||
|
{
|
||
|
PLIST_ENTRY v1;
|
||
|
PLIST_ENTRY v2;
|
||
|
v1 = x->Flink;
|
||
|
v2 = v1->Flink;
|
||
|
x->Flink = v2;
|
||
|
v2->Blink = x;
|
||
|
return( v1 );
|
||
|
}
|
||
|
|
||
|
__inline PLIST_ENTRY RemoveTailList( PLIST_ENTRY x )
|
||
|
{
|
||
|
PLIST_ENTRY v1;
|
||
|
PLIST_ENTRY v2;
|
||
|
v1 = x->Blink;
|
||
|
v2 = v1->Blink;
|
||
|
x->Blink = v2;
|
||
|
v2->Flink = x;
|
||
|
return( v1 );
|
||
|
}
|
||
|
|
||
|
__inline VOID InsertTailList( PLIST_ENTRY x, PLIST_ENTRY p )
|
||
|
{
|
||
|
PLIST_ENTRY v;
|
||
|
v = x->Blink;
|
||
|
p->Flink = x;
|
||
|
p->Blink = v;
|
||
|
v->Flink = p;
|
||
|
x->Blink = p;
|
||
|
}
|
||
|
|
||
|
__inline VOID InsertHeadList( PLIST_ENTRY x, PLIST_ENTRY p )
|
||
|
{
|
||
|
PLIST_ENTRY v;
|
||
|
v = x->Flink;
|
||
|
p->Flink = v;
|
||
|
p->Blink = x;
|
||
|
v->Blink = p;
|
||
|
x->Flink = p;
|
||
|
}
|
||
|
|
||
|
__inline VOID AppendTailList( PLIST_ENTRY x, PLIST_ENTRY p )
|
||
|
{
|
||
|
PLIST_ENTRY v;
|
||
|
v = x->Blink;
|
||
|
x->Blink->Flink = p;
|
||
|
x->Blink = p->Blink;
|
||
|
p->Blink->Flink = x;
|
||
|
p->Blink = v;
|
||
|
}
|
||
|
|
||
|
__inline PSINGLE_LIST_ENTRY PopEntryList( PSINGLE_LIST_ENTRY x )
|
||
|
{
|
||
|
PSINGLE_LIST_ENTRY v;
|
||
|
v = x->Next;
|
||
|
if( v != NULL ) {
|
||
|
x->Next = v->Next;
|
||
|
}
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline VOID PushEntryList( PSINGLE_LIST_ENTRY x, PSINGLE_LIST_ENTRY p )
|
||
|
{
|
||
|
p->Next = x->Next;
|
||
|
x->Next = p;
|
||
|
}
|
||
|
|
||
|
__inline VOID RtlInitEmptyUnicodeString( PUNICODE_STRING x, PWCHAR p1, USHORT p2 )
|
||
|
{
|
||
|
x->Length = 0;
|
||
|
x->MaximumLength = p2;
|
||
|
x->Buffer = p1;
|
||
|
}
|
||
|
|
||
|
__inline VOID RtlInitEmptyAnsiString( PANSI_STRING x, PCHAR p1, USHORT p2 )
|
||
|
{
|
||
|
x->Length = 0;
|
||
|
x->MaximumLength = p2;
|
||
|
x->Buffer = p1;
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlLargeIntegerAdd( LARGE_INTEGER p1, LARGE_INTEGER p2 )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = p1.QuadPart + p2.QuadPart;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlEnlargedIntegerMultiply( LONG p1, LONG p2 )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = (LONGLONG)p1 * (LONGLONG)p2;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlEnlargedUnsignedMultiply( ULONG p1, ULONG p2 )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = (ULONGLONG)p1 * (ULONGLONG)p2;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline ULONG RtlEnlargedUnsignedDivide( ULARGE_INTEGER p1, ULONG p2, PULONG p3 )
|
||
|
{
|
||
|
ULONG v;
|
||
|
v = (ULONG)(p1.QuadPart / p2);
|
||
|
if( p3 != NULL ) {
|
||
|
*p3 = (ULONG)(p1.QuadPart % p2);
|
||
|
}
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlLargeIntegerNegate( LARGE_INTEGER x )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = -x.QuadPart;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlLargeIntegerSubtract( LARGE_INTEGER p1, LARGE_INTEGER p2 )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = p1.QuadPart - p2.QuadPart;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlConvertLongToLargeInteger( LONG x )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = x;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlConvertUlongToLargeInteger( ULONG x )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = x;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlLargeIntegerShiftLeft( LARGE_INTEGER x, CCHAR p )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = x.QuadPart << p;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlLargeIntegerShiftRight( LARGE_INTEGER x, CCHAR p )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = (ULONG64)x.QuadPart >> p;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline LARGE_INTEGER RtlLargeIntegerArithmeticShift( LARGE_INTEGER x, CCHAR p )
|
||
|
{
|
||
|
LARGE_INTEGER v;
|
||
|
v.QuadPart = x.QuadPart >> p;
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline VOID ExInitializeFastMutex( PFAST_MUTEX x )
|
||
|
{
|
||
|
x->Count = FM_LOCK_BIT;
|
||
|
x->Owner = NULL;
|
||
|
x->Contention = 0;
|
||
|
KeInitializeEvent( &x->Event, SynchronizationEvent, FALSE );
|
||
|
}
|
||
|
|
||
|
__inline VOID InitializeSListHead( PSLIST_HEADER x )
|
||
|
{
|
||
|
RtlZeroMemory( x, sizeof( SLIST_HEADER ) );
|
||
|
}
|
||
|
|
||
|
__inline PVOID ExAllocateFromNPagedLookasideList( PNPAGED_LOOKASIDE_LIST x )
|
||
|
{
|
||
|
PVOID v;
|
||
|
x->L.TotalAllocates++;
|
||
|
#ifdef _X86_
|
||
|
v = ExInterlockedPopEntrySList( &x->L.ListHead, &x->Lock__ObsoleteButDoNotDelete );
|
||
|
#else
|
||
|
v = InterlockedPopEntrySList( &x->L.ListHead );
|
||
|
#endif
|
||
|
if( v == NULL ) {
|
||
|
x->L.AllocateMisses++;
|
||
|
v = (x->L.Allocate)( x->L.Type, x->L.Size, x->L.Tag );
|
||
|
}
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline VOID ExFreeToNPagedLookasideList( PNPAGED_LOOKASIDE_LIST x, PVOID p )
|
||
|
{
|
||
|
x->L.TotalFrees++;
|
||
|
if( ExQueryDepthSList( &x->L.ListHead ) >= x->L.Depth ) {
|
||
|
x->L.FreeMisses++;
|
||
|
(x->L.Free)( p );
|
||
|
} else {
|
||
|
#ifdef _X86_
|
||
|
ExInterlockedPushEntrySList( &x->L.ListHead, (PSLIST_ENTRY)p,
|
||
|
&x->Lock__ObsoleteButDoNotDelete );
|
||
|
#else
|
||
|
InterlockedPushEntrySList( &x->L.ListHead, (PSLIST_ENTRY)p );
|
||
|
#endif
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#if (NTDDI_VERSION >= 0x06000000)
|
||
|
|
||
|
__inline PVOID ExAllocateFromLookasideListEx( PLOOKASIDE_LIST_EX x )
|
||
|
{
|
||
|
PVOID v;
|
||
|
x->L.TotalAllocates++;
|
||
|
v = InterlockedPopEntrySList( &x->L.ListHead );
|
||
|
if( v == NULL ) {
|
||
|
x->L.AllocateMisses++;
|
||
|
v = (x->L.AllocateEx)( x->L.Type, x->L.Size, x->L.Tag, x );
|
||
|
}
|
||
|
return( v );
|
||
|
}
|
||
|
|
||
|
__inline VOID ExFreeToLookasideListEx( PLOOKASIDE_LIST_EX x, PVOID p )
|
||
|
{
|
||
|
x->L.TotalFrees++;
|
||
|
if( ExQueryDepthSList( &x->L.ListHead ) >= x->L.Depth ) {
|
||
|
x->L.FreeMisses++;
|
||
|
(x->L.FreeEx)( p, x );
|
||
|
} else {
|
||
|
InterlockedPushEntrySList( &x->L.ListHead, (PSLIST_ENTRY)p );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
__inline ULONG_PTR IoGetRemainingStackSize( VOID )
|
||
|
{
|
||
|
ULONG_PTR v1;
|
||
|
ULONG_PTR v2;
|
||
|
IoGetStackLimits( &v2, &v1 );
|
||
|
return( (ULONG_PTR)(&v1) - v2 );
|
||
|
}
|
||
|
|
||
|
__inline VOID IoSetCompletionRoutine( PIRP x, PIO_COMPLETION_ROUTINE p1, PVOID p2,
|
||
|
BOOLEAN p3, BOOLEAN p4, BOOLEAN p5 )
|
||
|
{
|
||
|
PIO_STACK_LOCATION v;
|
||
|
ASSERT( (p1 || p2 || p3) ? (p1 != NULL) : TRUE );
|
||
|
v = IoGetNextIrpStackLocation( x );
|
||
|
v->CompletionRoutine = p1;
|
||
|
v->Context = p2;
|
||
|
v->Control = 0;
|
||
|
if( p3 ) {
|
||
|
v->Control = SL_INVOKE_ON_SUCCESS;
|
||
|
}
|
||
|
if( p4 ) {
|
||
|
v->Control |= SL_INVOKE_ON_ERROR;
|
||
|
}
|
||
|
if( p5 ) {
|
||
|
v->Control |= SL_INVOKE_ON_CANCEL;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
#ifndef _NTDDK_
|
||
|
|
||
|
__inline PVOID HalAllocateCommonBuffer( PDMA_ADAPTER p1, ULONG p2, PPHYSICAL_ADDRESS p3,
|
||
|
BOOLEAN p4 )
|
||
|
{
|
||
|
PALLOCATE_COMMON_BUFFER v1;
|
||
|
PVOID v2;
|
||
|
v1 = *(p1)->DmaOperations->AllocateCommonBuffer;
|
||
|
ASSERT( v1 != NULL );
|
||
|
v2 = v1( p1, p2, p3, p4 );
|
||
|
return( v2 );
|
||
|
}
|
||
|
|
||
|
__inline VOID HalFreeCommonBuffer( PDMA_ADAPTER p1, ULONG p2, PHYSICAL_ADDRESS p3,
|
||
|
PVOID p4, BOOLEAN p5 )
|
||
|
{
|
||
|
PFREE_COMMON_BUFFER v;
|
||
|
v = *(p1)->DmaOperations->FreeCommonBuffer;
|
||
|
ASSERT( v != NULL );
|
||
|
v( p1, p2, p3, p4, p5 );
|
||
|
}
|
||
|
|
||
|
__inline NTSTATUS IoAllocateAdapterChannel( PDMA_ADAPTER p1, PDEVICE_OBJECT p2, ULONG p3,
|
||
|
PDRIVER_CONTROL p4, PVOID p5 )
|
||
|
{
|
||
|
PALLOCATE_ADAPTER_CHANNEL v1;
|
||
|
NTSTATUS v2;
|
||
|
v1 = *(p1)->DmaOperations->AllocateAdapterChannel;
|
||
|
ASSERT( v1 != NULL );
|
||
|
v2 = v1( p1, p2, p3, p4, p5 );
|
||
|
return( v2 );
|
||
|
}
|
||
|
|
||
|
__inline BOOLEAN IoFlushAdapterBuffers( PDMA_ADAPTER p1, PMDL p2, PVOID p3, PVOID p4,
|
||
|
ULONG p5, BOOLEAN p6 )
|
||
|
{
|
||
|
PFLUSH_ADAPTER_BUFFERS v1;
|
||
|
BOOLEAN v2;
|
||
|
v1 = *(p1)->DmaOperations->FlushAdapterBuffers;
|
||
|
ASSERT( v1 != NULL );
|
||
|
v2 = v1( p1, p2, p3, p4, p5, p6 );
|
||
|
return( v2 );
|
||
|
}
|
||
|
|
||
|
__inline VOID IoFreeAdapterChannel( PDMA_ADAPTER x )
|
||
|
{
|
||
|
PFREE_ADAPTER_CHANNEL v;
|
||
|
v = *(x)->DmaOperations->FreeAdapterChannel;
|
||
|
ASSERT( v != NULL );
|
||
|
v( x );
|
||
|
}
|
||
|
|
||
|
__inline VOID IoFreeMapRegisters( PDMA_ADAPTER p1, PVOID p2, ULONG p3 )
|
||
|
{
|
||
|
PFREE_MAP_REGISTERS v;
|
||
|
v = *(p1)->DmaOperations->FreeMapRegisters;
|
||
|
ASSERT( v != NULL );
|
||
|
v( p1, p2, p3 );
|
||
|
}
|
||
|
|
||
|
__inline PHYSICAL_ADDRESS IoMapTransfer( PDMA_ADAPTER p1, PMDL p2, PVOID p3, PVOID p4,
|
||
|
PULONG p5, BOOLEAN p6 )
|
||
|
{
|
||
|
PMAP_TRANSFER v1;
|
||
|
PHYSICAL_ADDRESS v2;
|
||
|
v1 = *(p1)->DmaOperations->MapTransfer;
|
||
|
ASSERT( v1 != NULL );
|
||
|
v2 = v1( p1, p2, p3, p4, p5, p6 );
|
||
|
return( v2 );
|
||
|
}
|
||
|
|
||
|
__inline ULONG HalGetDmaAlignment( PDMA_ADAPTER x )
|
||
|
{
|
||
|
PGET_DMA_ALIGNMENT v1;
|
||
|
ULONG v2;
|
||
|
v1 = *(x)->DmaOperations->GetDmaAlignment;
|
||
|
ASSERT( v1 != NULL );
|
||
|
v2 = v1( x );
|
||
|
return( v2 );
|
||
|
}
|
||
|
|
||
|
__inline ULONG HalReadDmaCounter( PDMA_ADAPTER x )
|
||
|
{
|
||
|
PREAD_DMA_COUNTER v1;
|
||
|
ULONG v2;
|
||
|
v1 = *(x)->DmaOperations->ReadDmaCounter;
|
||
|
ASSERT( v1 != NULL );
|
||
|
v2 = v1( x );
|
||
|
return( v2 );
|
||
|
}
|
||
|
|
||
|
#endif /* _NTDDK_H_INCLUDED */
|
||
|
#endif /* (NTDDI_VERSION >= 0x06000000) */
|
||
|
|
||
|
#if (NTDDI_VERSION >= 0x06000100)
|
||
|
|
||
|
__inline VOID IoInitializeThradedDpcRequest( PDEVICE_OBJECT x, PIO_DPC_ROUTINE p )
|
||
|
{
|
||
|
KeInitializeThreadedDpc( &x->Dpc, (PKDEFERRED_ROUTINE)p, x );
|
||
|
}
|
||
|
|
||
|
#endif /* (NTDDI_VERSION >= 0x06000100) */
|
||
|
|
||
|
#if (NTDDI_VERSION >= 0x05020100)
|
||
|
#ifdef __cplusplus
|
||
|
|
||
|
inline CLFS_LSN operator++( CLFS_LSN &x )
|
||
|
{
|
||
|
x = ClfsLsnIncrement( &x );
|
||
|
return( x );
|
||
|
}
|
||
|
|
||
|
inline BOOLEAN operator<( const CLFS_LSN &p1, const CLFS_LSN &p2 )
|
||
|
{
|
||
|
return( ClfsLsnLess( (PCLFS_LSN)&p1, (PCLFS_LSN)&p2 ) );
|
||
|
}
|
||
|
|
||
|
inline BOOLEAN operator>( const CLFS_LSN &p1, const CLFS_LSN &p2 )
|
||
|
{
|
||
|
return( ClfsLsnGreater( (PCLFS_LSN)&p1, (PCLFS_LSN)&p2 ) );
|
||
|
}
|
||
|
|
||
|
inline BOOLEAN operator==( const CLFS_LSN &p1, const CLFS_LSN &p2 )
|
||
|
{
|
||
|
return( ClfsLsnEqual( (PCLFS_LSN)&p1, (PCLFS_LSN)&p2 ) );
|
||
|
}
|
||
|
|
||
|
inline BOOLEAN operator!=( const CLFS_LSN &p1, const CLFS_LSN &p2 )
|
||
|
{
|
||
|
return( !ClfsLsnEqual( (PCLFS_LSN)&p1, (PCLFS_LSN)&p2 ) );
|
||
|
}
|
||
|
|
||
|
inline BOOLEAN operator<=( const CLFS_LSN &p1, const CLFS_LSN &p2 )
|
||
|
{
|
||
|
return( !ClfsLsnGreater( (PCLFS_LSN)&p1, (PCLFS_LSN)&p2 ) );
|
||
|
}
|
||
|
|
||
|
inline BOOLEAN operator>=( const CLFS_LSN &p1, const CLFS_LSN &p2 )
|
||
|
{
|
||
|
return( !ClfsLsnLess( (PCLFS_LSN)&p1, (PCLFS_LSN)&p2 ) );
|
||
|
}
|
||
|
|
||
|
#endif /* __cplusplus */
|
||
|
#endif /* (NTDDI_VERSION >= 0x05020100) */
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
} /* extern "C" */
|
||
|
#endif
|
||
|
|
||
|
#endif /* _WDMDDK_ */
|