This repository has been archived on 2024-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
CodeBlocksPortable/WATCOM/h/nt/ddk/wdm.h

9498 lines
384 KiB
C
Raw Normal View History

/*
* 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_ */