/* * 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 #include #include #include #include #include #include #include #ifdef RUN_WPP #include #include #endif #include #if (NTDDI_VERSION >= 0x06000000) #include #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 typedef struct _LUID_AND_ATTRIBUTES { LUID Luid; ULONG Attributes; } LUID_AND_ATTRIBUTES; typedef LUID_AND_ATTRIBUTES *PLUID_AND_ATTRIBUTES; #include /* 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 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 /* 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 /* 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 /* 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 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 /* 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 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 #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_ */