Mercurial > games > semicongine
comparison fuhtark_test/include/ddk/winddk.h @ 1500:91c8c3b7cbf0
add: futhark tests for generating vulkan api
| author | sam <sam@basx.dev> |
|---|---|
| date | Wed, 26 Nov 2025 21:36:48 +0700 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1499:1f58458b7ef7 | 1500:91c8c3b7cbf0 |
|---|---|
| 1 /* | |
| 2 * winddk.h | |
| 3 * | |
| 4 * Windows Device Driver Kit | |
| 5 * | |
| 6 * This file is part of the w32api package. | |
| 7 * | |
| 8 * Contributors: | |
| 9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> | |
| 10 * | |
| 11 * THIS SOFTWARE IS NOT COPYRIGHTED | |
| 12 * | |
| 13 * This source code is offered for use in the public domain. You may | |
| 14 * use, modify or distribute it freely. | |
| 15 * | |
| 16 * This code is distributed in the hope that it will be useful but | |
| 17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY | |
| 18 * DISCLAIMED. This includes but is not limited to warranties of | |
| 19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
| 20 * | |
| 21 */ | |
| 22 | |
| 23 #ifndef __WINDDK_H | |
| 24 #define __WINDDK_H | |
| 25 | |
| 26 #ifdef __cplusplus | |
| 27 extern "C" { | |
| 28 #endif | |
| 29 | |
| 30 #include <excpt.h> | |
| 31 #include <ntdef.h> | |
| 32 #include <ntstatus.h> | |
| 33 | |
| 34 #include "intrin.h" | |
| 35 | |
| 36 #if !defined(_NTHAL_) | |
| 37 #define NTHALAPI DECLSPEC_IMPORT | |
| 38 #else | |
| 39 #define NTHALAPI | |
| 40 #endif | |
| 41 | |
| 42 /* Pseudo modifiers for parameters */ | |
| 43 #define IN | |
| 44 #define OUT | |
| 45 #define OPTIONAL | |
| 46 #define UNALLIGNED | |
| 47 | |
| 48 #define CONST const | |
| 49 | |
| 50 #define RESTRICTED_POINTER | |
| 51 | |
| 52 #if defined(_WIN64) | |
| 53 #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8) | |
| 54 #else | |
| 55 #define POINTER_ALIGNMENT | |
| 56 #endif | |
| 57 | |
| 58 #define DECLSPEC_ADDRSAFE | |
| 59 | |
| 60 #ifdef NONAMELESSUNION | |
| 61 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name | |
| 62 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name | |
| 63 #else | |
| 64 # define _DDK_DUMMYUNION_MEMBER(name) name | |
| 65 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name | |
| 66 #endif | |
| 67 | |
| 68 /* | |
| 69 * Alignment Macros | |
| 70 */ | |
| 71 #define ALIGN_DOWN(s, t) \ | |
| 72 ((ULONG)(s) & ~(sizeof(t) - 1)) | |
| 73 | |
| 74 #define ALIGN_UP(s, t) \ | |
| 75 (ALIGN_DOWN(((ULONG)(s) + sizeof(t) - 1), t)) | |
| 76 | |
| 77 #define ALIGN_DOWN_POINTER(p, t) \ | |
| 78 ((PVOID)((ULONG_PTR)(p) & ~((ULONG_PTR)sizeof(t) - 1))) | |
| 79 | |
| 80 #define ALIGN_UP_POINTER(p, t) \ | |
| 81 (ALIGN_DOWN_POINTER(((ULONG_PTR)(p) + sizeof(t) - 1), t)) | |
| 82 | |
| 83 /* | |
| 84 * GUID Comparison | |
| 85 */ | |
| 86 | |
| 87 #ifndef __IID_ALIGNED__ | |
| 88 #define __IID_ALIGNED__ | |
| 89 #ifdef __cplusplus | |
| 90 inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2) | |
| 91 { | |
| 92 return ((*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1))); | |
| 93 } | |
| 94 #else | |
| 95 #define IsEqualGUIDAligned(guid1, guid2) \ | |
| 96 ((*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1))) | |
| 97 #endif | |
| 98 #endif | |
| 99 | |
| 100 /* | |
| 101 ** Forward declarations | |
| 102 */ | |
| 103 | |
| 104 struct _IRP; | |
| 105 struct _MDL; | |
| 106 struct _KAPC; | |
| 107 struct _KDPC; | |
| 108 struct _KPCR; | |
| 109 struct _KPRCB; | |
| 110 struct _KTSS; | |
| 111 struct _FILE_OBJECT; | |
| 112 struct _DMA_ADAPTER; | |
| 113 struct _DEVICE_OBJECT; | |
| 114 struct _DRIVER_OBJECT; | |
| 115 struct _IO_STATUS_BLOCK; | |
| 116 struct _DEVICE_DESCRIPTION; | |
| 117 struct _SCATTER_GATHER_LIST; | |
| 118 struct _DRIVE_LAYOUT_INFORMATION; | |
| 119 struct _DRIVE_LAYOUT_INFORMATION_EX; | |
| 120 struct _LOADER_PARAMETER_BLOCK; | |
| 121 | |
| 122 typedef PVOID PSID; | |
| 123 | |
| 124 #if 1 | |
| 125 /* FIXME: Unknown definitions */ | |
| 126 struct _SET_PARTITION_INFORMATION_EX; | |
| 127 typedef ULONG WAIT_TYPE; | |
| 128 #define WaitAll 0 | |
| 129 #define WaitAny 1 | |
| 130 typedef HANDLE TRACEHANDLE; | |
| 131 typedef PVOID PWMILIB_CONTEXT; | |
| 132 typedef ULONG LOGICAL; | |
| 133 #endif | |
| 134 | |
| 135 /* | |
| 136 ** WmiLib specific structure | |
| 137 */ | |
| 138 typedef enum | |
| 139 { | |
| 140 IrpProcessed, // Irp was processed and possibly completed | |
| 141 IrpNotCompleted, // Irp was process and NOT completed | |
| 142 IrpNotWmi, // Irp is not a WMI irp | |
| 143 IrpForward // Irp is wmi irp, but targeted at another device object | |
| 144 } SYSCTL_IRP_DISPOSITION, *PSYSCTL_IRP_DISPOSITION; | |
| 145 | |
| 146 /* | |
| 147 ** Routines specific to this DDK | |
| 148 */ | |
| 149 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 ) | |
| 150 | |
| 151 /* | |
| 152 ** Simple structures | |
| 153 */ | |
| 154 | |
| 155 typedef UCHAR KIRQL, *PKIRQL; | |
| 156 | |
| 157 typedef enum _MODE { | |
| 158 KernelMode, | |
| 159 UserMode, | |
| 160 MaximumMode | |
| 161 } MODE; | |
| 162 | |
| 163 // | |
| 164 // Forwarder | |
| 165 // | |
| 166 struct _COMPRESSED_DATA_INFO; | |
| 167 | |
| 168 /* Constants */ | |
| 169 #define NtCurrentProcess() ( (HANDLE)(LONG_PTR) -1 ) | |
| 170 #define ZwCurrentProcess() NtCurrentProcess() | |
| 171 #define NtCurrentThread() ( (HANDLE)(LONG_PTR) -2 ) | |
| 172 #define ZwCurrentThread() NtCurrentThread() | |
| 173 | |
| 174 #if (_M_IX86) | |
| 175 #define KIP0PCRADDRESS 0xffdff000 | |
| 176 | |
| 177 #endif | |
| 178 | |
| 179 #define KERNEL_STACK_SIZE 12288 | |
| 180 #define KERNEL_LARGE_STACK_SIZE 61440 | |
| 181 #define KERNEL_LARGE_STACK_COMMIT 12288 | |
| 182 | |
| 183 #define EXCEPTION_READ_FAULT 0 | |
| 184 #define EXCEPTION_WRITE_FAULT 1 | |
| 185 #define EXCEPTION_EXECUTE_FAULT 8 | |
| 186 | |
| 187 #define DPFLTR_ERROR_LEVEL 0 | |
| 188 #define DPFLTR_WARNING_LEVEL 1 | |
| 189 #define DPFLTR_TRACE_LEVEL 2 | |
| 190 #define DPFLTR_INFO_LEVEL 3 | |
| 191 #define DPFLTR_MASK 0x80000000 | |
| 192 | |
| 193 typedef enum _DPFLTR_TYPE | |
| 194 { | |
| 195 DPFLTR_SYSTEM_ID = 0, | |
| 196 DPFLTR_SMSS_ID = 1, | |
| 197 DPFLTR_SETUP_ID = 2, | |
| 198 DPFLTR_NTFS_ID = 3, | |
| 199 DPFLTR_FSTUB_ID = 4, | |
| 200 DPFLTR_CRASHDUMP_ID = 5, | |
| 201 DPFLTR_CDAUDIO_ID = 6, | |
| 202 DPFLTR_CDROM_ID = 7, | |
| 203 DPFLTR_CLASSPNP_ID = 8, | |
| 204 DPFLTR_DISK_ID = 9, | |
| 205 DPFLTR_REDBOOK_ID = 10, | |
| 206 DPFLTR_STORPROP_ID = 11, | |
| 207 DPFLTR_SCSIPORT_ID = 12, | |
| 208 DPFLTR_SCSIMINIPORT_ID = 13, | |
| 209 DPFLTR_CONFIG_ID = 14, | |
| 210 DPFLTR_I8042PRT_ID = 15, | |
| 211 DPFLTR_SERMOUSE_ID = 16, | |
| 212 DPFLTR_LSERMOUS_ID = 17, | |
| 213 DPFLTR_KBDHID_ID = 18, | |
| 214 DPFLTR_MOUHID_ID = 19, | |
| 215 DPFLTR_KBDCLASS_ID = 20, | |
| 216 DPFLTR_MOUCLASS_ID = 21, | |
| 217 DPFLTR_TWOTRACK_ID = 22, | |
| 218 DPFLTR_WMILIB_ID = 23, | |
| 219 DPFLTR_ACPI_ID = 24, | |
| 220 DPFLTR_AMLI_ID = 25, | |
| 221 DPFLTR_HALIA64_ID = 26, | |
| 222 DPFLTR_VIDEO_ID = 27, | |
| 223 DPFLTR_SVCHOST_ID = 28, | |
| 224 DPFLTR_VIDEOPRT_ID = 29, | |
| 225 DPFLTR_TCPIP_ID = 30, | |
| 226 DPFLTR_DMSYNTH_ID = 31, | |
| 227 DPFLTR_NTOSPNP_ID = 32, | |
| 228 DPFLTR_FASTFAT_ID = 33, | |
| 229 DPFLTR_SAMSS_ID = 34, | |
| 230 DPFLTR_PNPMGR_ID = 35, | |
| 231 DPFLTR_NETAPI_ID = 36, | |
| 232 DPFLTR_SCSERVER_ID = 37, | |
| 233 DPFLTR_SCCLIENT_ID = 38, | |
| 234 DPFLTR_SERIAL_ID = 39, | |
| 235 DPFLTR_SERENUM_ID = 40, | |
| 236 DPFLTR_UHCD_ID = 41, | |
| 237 DPFLTR_BOOTOK_ID = 42, | |
| 238 DPFLTR_BOOTVRFY_ID = 43, | |
| 239 DPFLTR_RPCPROXY_ID = 44, | |
| 240 DPFLTR_AUTOCHK_ID = 45, | |
| 241 DPFLTR_DCOMSS_ID = 46, | |
| 242 DPFLTR_UNIMODEM_ID = 47, | |
| 243 DPFLTR_SIS_ID = 48, | |
| 244 DPFLTR_FLTMGR_ID = 49, | |
| 245 DPFLTR_WMICORE_ID = 50, | |
| 246 DPFLTR_BURNENG_ID = 51, | |
| 247 DPFLTR_IMAPI_ID = 52, | |
| 248 DPFLTR_SXS_ID = 53, | |
| 249 DPFLTR_FUSION_ID = 54, | |
| 250 DPFLTR_IDLETASK_ID = 55, | |
| 251 DPFLTR_SOFTPCI_ID = 56, | |
| 252 DPFLTR_TAPE_ID = 57, | |
| 253 DPFLTR_MCHGR_ID = 58, | |
| 254 DPFLTR_IDEP_ID = 59, | |
| 255 DPFLTR_PCIIDE_ID = 60, | |
| 256 DPFLTR_FLOPPY_ID = 61, | |
| 257 DPFLTR_FDC_ID = 62, | |
| 258 DPFLTR_TERMSRV_ID = 63, | |
| 259 DPFLTR_W32TIME_ID = 64, | |
| 260 DPFLTR_PREFETCHER_ID = 65, | |
| 261 DPFLTR_RSFILTER_ID = 66, | |
| 262 DPFLTR_FCPORT_ID = 67, | |
| 263 DPFLTR_PCI_ID = 68, | |
| 264 DPFLTR_DMIO_ID = 69, | |
| 265 DPFLTR_DMCONFIG_ID = 70, | |
| 266 DPFLTR_DMADMIN_ID = 71, | |
| 267 DPFLTR_WSOCKTRANSPORT_ID = 72, | |
| 268 DPFLTR_VSS_ID = 73, | |
| 269 DPFLTR_PNPMEM_ID = 74, | |
| 270 DPFLTR_PROCESSOR_ID = 75, | |
| 271 DPFLTR_DMSERVER_ID = 76, | |
| 272 DPFLTR_SR_ID = 77, | |
| 273 DPFLTR_INFINIBAND_ID = 78, | |
| 274 DPFLTR_IHVDRIVER_ID = 79, | |
| 275 DPFLTR_IHVVIDEO_ID = 80, | |
| 276 DPFLTR_IHVAUDIO_ID = 81, | |
| 277 DPFLTR_IHVNETWORK_ID = 82, | |
| 278 DPFLTR_IHVSTREAMING_ID = 83, | |
| 279 DPFLTR_IHVBUS_ID = 84, | |
| 280 DPFLTR_HPS_ID = 85, | |
| 281 DPFLTR_RTLTHREADPOOL_ID = 86, | |
| 282 DPFLTR_LDR_ID = 87, | |
| 283 DPFLTR_TCPIP6_ID = 88, | |
| 284 DPFLTR_ISAPNP_ID = 89, | |
| 285 DPFLTR_SHPC_ID = 90, | |
| 286 DPFLTR_STORPORT_ID = 91, | |
| 287 DPFLTR_STORMINIPORT_ID = 92, | |
| 288 DPFLTR_PRINTSPOOLER_ID = 93, | |
| 289 DPFLTR_VDS_ID = 94, | |
| 290 DPFLTR_VDSBAS_ID = 95, | |
| 291 DPFLTR_VDSDYNDR_ID = 96, | |
| 292 DPFLTR_VDSUTIL_ID = 97, | |
| 293 DPFLTR_DFRGIFC_ID = 98, | |
| 294 DPFLTR_DEFAULT_ID = 99, | |
| 295 DPFLTR_MM_ID = 100, | |
| 296 DPFLTR_DFSC_ID = 101, | |
| 297 DPFLTR_WOW64_ID = 102, | |
| 298 DPFLTR_ENDOFTABLE_ID | |
| 299 } DPFLTR_TYPE; | |
| 300 | |
| 301 #define MAXIMUM_PROCESSORS 32 | |
| 302 | |
| 303 #define MAXIMUM_WAIT_OBJECTS 64 | |
| 304 | |
| 305 #define EX_RUNDOWN_ACTIVE 0x1 | |
| 306 #define EX_RUNDOWN_COUNT_SHIFT 0x1 | |
| 307 #define EX_RUNDOWN_COUNT_INC (1 << EX_RUNDOWN_COUNT_SHIFT) | |
| 308 | |
| 309 #define METHOD_BUFFERED 0 | |
| 310 #define METHOD_IN_DIRECT 1 | |
| 311 #define METHOD_OUT_DIRECT 2 | |
| 312 #define METHOD_NEITHER 3 | |
| 313 | |
| 314 #define LOW_PRIORITY 0 | |
| 315 #define LOW_REALTIME_PRIORITY 16 | |
| 316 #define HIGH_PRIORITY 31 | |
| 317 #define MAXIMUM_PRIORITY 32 | |
| 318 | |
| 319 #define MAXIMUM_SUSPEND_COUNT MAXCHAR | |
| 320 | |
| 321 #define MAXIMUM_FILENAME_LENGTH 256 | |
| 322 | |
| 323 #define FILE_SUPERSEDED 0x00000000 | |
| 324 #define FILE_OPENED 0x00000001 | |
| 325 #define FILE_CREATED 0x00000002 | |
| 326 #define FILE_OVERWRITTEN 0x00000003 | |
| 327 #define FILE_EXISTS 0x00000004 | |
| 328 #define FILE_DOES_NOT_EXIST 0x00000005 | |
| 329 | |
| 330 #define FILE_USE_FILE_POINTER_POSITION 0xfffffffe | |
| 331 #define FILE_WRITE_TO_END_OF_FILE 0xffffffff | |
| 332 | |
| 333 /* also in winnt.h */ | |
| 334 #define FILE_LIST_DIRECTORY 0x00000001 | |
| 335 #define FILE_READ_DATA 0x00000001 | |
| 336 #define FILE_ADD_FILE 0x00000002 | |
| 337 #define FILE_WRITE_DATA 0x00000002 | |
| 338 #define FILE_ADD_SUBDIRECTORY 0x00000004 | |
| 339 #define FILE_APPEND_DATA 0x00000004 | |
| 340 #define FILE_CREATE_PIPE_INSTANCE 0x00000004 | |
| 341 #define FILE_READ_EA 0x00000008 | |
| 342 #define FILE_WRITE_EA 0x00000010 | |
| 343 #define FILE_EXECUTE 0x00000020 | |
| 344 #define FILE_TRAVERSE 0x00000020 | |
| 345 #define FILE_DELETE_CHILD 0x00000040 | |
| 346 #define FILE_READ_ATTRIBUTES 0x00000080 | |
| 347 #define FILE_WRITE_ATTRIBUTES 0x00000100 | |
| 348 | |
| 349 #define FILE_SHARE_READ 0x00000001 | |
| 350 #define FILE_SHARE_WRITE 0x00000002 | |
| 351 #define FILE_SHARE_DELETE 0x00000004 | |
| 352 #define FILE_SHARE_VALID_FLAGS 0x00000007 | |
| 353 | |
| 354 #define FILE_ATTRIBUTE_READONLY 0x00000001 | |
| 355 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 | |
| 356 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 | |
| 357 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 | |
| 358 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 | |
| 359 #define FILE_ATTRIBUTE_DEVICE 0x00000040 | |
| 360 #define FILE_ATTRIBUTE_NORMAL 0x00000080 | |
| 361 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 | |
| 362 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 | |
| 363 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 | |
| 364 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 | |
| 365 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 | |
| 366 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 | |
| 367 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 | |
| 368 | |
| 369 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 | |
| 370 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 | |
| 371 | |
| 372 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041 | |
| 373 #define FILE_STRUCTURED_STORAGE 0x00000441 | |
| 374 | |
| 375 #define FILE_VALID_OPTION_FLAGS 0x00ffffff | |
| 376 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 | |
| 377 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 | |
| 378 #define FILE_VALID_SET_FLAGS 0x00000036 | |
| 379 | |
| 380 #define FILE_SUPERSEDE 0x00000000 | |
| 381 #define FILE_OPEN 0x00000001 | |
| 382 #define FILE_CREATE 0x00000002 | |
| 383 #define FILE_OPEN_IF 0x00000003 | |
| 384 #define FILE_OVERWRITE 0x00000004 | |
| 385 #define FILE_OVERWRITE_IF 0x00000005 | |
| 386 #define FILE_MAXIMUM_DISPOSITION 0x00000005 | |
| 387 | |
| 388 #define FILE_DIRECTORY_FILE 0x00000001 | |
| 389 #define FILE_WRITE_THROUGH 0x00000002 | |
| 390 #define FILE_SEQUENTIAL_ONLY 0x00000004 | |
| 391 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 | |
| 392 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 | |
| 393 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 | |
| 394 #define FILE_NON_DIRECTORY_FILE 0x00000040 | |
| 395 #define FILE_CREATE_TREE_CONNECTION 0x00000080 | |
| 396 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 | |
| 397 #define FILE_NO_EA_KNOWLEDGE 0x00000200 | |
| 398 #define FILE_OPEN_FOR_RECOVERY 0x00000400 | |
| 399 #define FILE_RANDOM_ACCESS 0x00000800 | |
| 400 #define FILE_DELETE_ON_CLOSE 0x00001000 | |
| 401 #define FILE_OPEN_BY_FILE_ID 0x00002000 | |
| 402 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 | |
| 403 #define FILE_NO_COMPRESSION 0x00008000 | |
| 404 #define FILE_RESERVE_OPFILTER 0x00100000 | |
| 405 #define FILE_OPEN_REPARSE_POINT 0x00200000 | |
| 406 #define FILE_OPEN_NO_RECALL 0x00400000 | |
| 407 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 | |
| 408 | |
| 409 #define FILE_ANY_ACCESS 0x00000000 | |
| 410 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS | |
| 411 #define FILE_READ_ACCESS 0x00000001 | |
| 412 #define FILE_WRITE_ACCESS 0x00000002 | |
| 413 | |
| 414 #define FILE_ALL_ACCESS \ | |
| 415 (STANDARD_RIGHTS_REQUIRED | \ | |
| 416 SYNCHRONIZE | \ | |
| 417 0x1FF) | |
| 418 | |
| 419 #define FILE_GENERIC_EXECUTE \ | |
| 420 (STANDARD_RIGHTS_EXECUTE | \ | |
| 421 FILE_READ_ATTRIBUTES | \ | |
| 422 FILE_EXECUTE | \ | |
| 423 SYNCHRONIZE) | |
| 424 | |
| 425 #define FILE_GENERIC_READ \ | |
| 426 (STANDARD_RIGHTS_READ | \ | |
| 427 FILE_READ_DATA | \ | |
| 428 FILE_READ_ATTRIBUTES | \ | |
| 429 FILE_READ_EA | \ | |
| 430 SYNCHRONIZE) | |
| 431 | |
| 432 #define FILE_GENERIC_WRITE \ | |
| 433 (STANDARD_RIGHTS_WRITE | \ | |
| 434 FILE_WRITE_DATA | \ | |
| 435 FILE_WRITE_ATTRIBUTES | \ | |
| 436 FILE_WRITE_EA | \ | |
| 437 FILE_APPEND_DATA | \ | |
| 438 SYNCHRONIZE) | |
| 439 /* end winnt.h */ | |
| 440 | |
| 441 #define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\') | |
| 442 | |
| 443 #define OBJECT_TYPE_CREATE (0x0001) | |
| 444 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) | |
| 445 | |
| 446 #define DIRECTORY_QUERY (0x0001) | |
| 447 #define DIRECTORY_TRAVERSE (0x0002) | |
| 448 #define DIRECTORY_CREATE_OBJECT (0x0004) | |
| 449 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008) | |
| 450 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) | |
| 451 | |
| 452 #define EVENT_QUERY_STATE (0x0001) | |
| 453 #define EVENT_MODIFY_STATE (0x0002) | |
| 454 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) | |
| 455 | |
| 456 #define SEMAPHORE_QUERY_STATE (0x0001) | |
| 457 #define SEMAPHORE_MODIFY_STATE (0x0002) | |
| 458 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3) | |
| 459 | |
| 460 #define THREAD_ALERT (0x0004) | |
| 461 | |
| 462 #define FM_LOCK_BIT (0x1) | |
| 463 #define FM_LOCK_BIT_V (0x0) | |
| 464 #define FM_LOCK_WAITER_WOKEN (0x2) | |
| 465 #define FM_LOCK_WAITER_INC (0x4) | |
| 466 | |
| 467 /* Exported object types */ | |
| 468 extern POBJECT_TYPE NTSYSAPI ExDesktopObjectType; | |
| 469 extern POBJECT_TYPE NTSYSAPI ExEventObjectType; | |
| 470 extern POBJECT_TYPE NTSYSAPI ExSemaphoreObjectType; | |
| 471 extern POBJECT_TYPE NTSYSAPI ExWindowStationObjectType; | |
| 472 extern ULONG NTSYSAPI IoDeviceHandlerObjectSize; | |
| 473 extern POBJECT_TYPE NTSYSAPI IoDeviceHandlerObjectType; | |
| 474 extern POBJECT_TYPE NTSYSAPI IoDeviceObjectType; | |
| 475 extern POBJECT_TYPE NTSYSAPI IoDriverObjectType; | |
| 476 extern POBJECT_TYPE NTSYSAPI IoFileObjectType; | |
| 477 extern POBJECT_TYPE NTSYSAPI PsThreadType; | |
| 478 extern POBJECT_TYPE NTSYSAPI LpcPortObjectType; | |
| 479 extern POBJECT_TYPE NTSYSAPI SeTokenObjectType; | |
| 480 extern POBJECT_TYPE NTSYSAPI PsProcessType; | |
| 481 | |
| 482 #if (NTDDI_VERSION >= NTDDI_LONGHORN) | |
| 483 extern volatile CCHAR NTSYSAPI KeNumberProcessors; | |
| 484 #else | |
| 485 #if (NTDDI_VERSION >= NTDDI_WINXP) | |
| 486 extern CCHAR NTSYSAPI KeNumberProcessors; | |
| 487 #else | |
| 488 //extern PCCHAR KeNumberProcessors; | |
| 489 extern NTSYSAPI CCHAR KeNumberProcessors; //FIXME: Note to Alex: I won't fix this atm, since I prefer to discuss this with you first. | |
| 490 #endif | |
| 491 #endif | |
| 492 | |
| 493 #define PROCESSOR_FEATURE_MAX 64 | |
| 494 #define MAX_WOW64_SHARED_ENTRIES 16 | |
| 495 | |
| 496 typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE | |
| 497 { | |
| 498 StandardDesign, | |
| 499 NEC98x86, | |
| 500 EndAlternatives | |
| 501 } ALTERNATIVE_ARCHITECTURE_TYPE; | |
| 502 | |
| 503 typedef struct _KSYSTEM_TIME | |
| 504 { | |
| 505 ULONG LowPart; | |
| 506 LONG High1Time; | |
| 507 LONG High2Time; | |
| 508 } KSYSTEM_TIME, *PKSYSTEM_TIME; | |
| 509 | |
| 510 extern volatile KSYSTEM_TIME KeTickCount; | |
| 511 | |
| 512 #define NX_SUPPORT_POLICY_ALWAYSOFF 0 | |
| 513 #define NX_SUPPORT_POLICY_ALWAYSON 1 | |
| 514 #define NX_SUPPORT_POLICY_OPTIN 2 | |
| 515 #define NX_SUPPORT_POLICY_OPTOUT 3 | |
| 516 | |
| 517 typedef struct _KUSER_SHARED_DATA | |
| 518 { | |
| 519 ULONG TickCountLowDeprecated; | |
| 520 ULONG TickCountMultiplier; | |
| 521 volatile KSYSTEM_TIME InterruptTime; | |
| 522 volatile KSYSTEM_TIME SystemTime; | |
| 523 volatile KSYSTEM_TIME TimeZoneBias; | |
| 524 USHORT ImageNumberLow; | |
| 525 USHORT ImageNumberHigh; | |
| 526 WCHAR NtSystemRoot[260]; | |
| 527 ULONG MaxStackTraceDepth; | |
| 528 ULONG CryptoExponent; | |
| 529 ULONG TimeZoneId; | |
| 530 ULONG LargePageMinimum; | |
| 531 ULONG Reserved2[7]; | |
| 532 NT_PRODUCT_TYPE NtProductType; | |
| 533 BOOLEAN ProductTypeIsValid; | |
| 534 ULONG NtMajorVersion; | |
| 535 ULONG NtMinorVersion; | |
| 536 BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX]; | |
| 537 ULONG Reserved1; | |
| 538 ULONG Reserved3; | |
| 539 volatile ULONG TimeSlip; | |
| 540 ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture; | |
| 541 LARGE_INTEGER SystemExpirationDate; | |
| 542 ULONG SuiteMask; | |
| 543 BOOLEAN KdDebuggerEnabled; | |
| 544 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) | |
| 545 UCHAR NXSupportPolicy; | |
| 546 #endif | |
| 547 volatile ULONG ActiveConsoleId; | |
| 548 volatile ULONG DismountCount; | |
| 549 ULONG ComPlusPackage; | |
| 550 ULONG LastSystemRITEventTickCount; | |
| 551 ULONG NumberOfPhysicalPages; | |
| 552 BOOLEAN SafeBootMode; | |
| 553 ULONG TraceLogging; | |
| 554 ULONG Fill0; | |
| 555 ULONGLONG TestRetInstruction; | |
| 556 ULONG SystemCall; | |
| 557 ULONG SystemCallReturn; | |
| 558 ULONGLONG SystemCallPad[3]; | |
| 559 union { | |
| 560 volatile KSYSTEM_TIME TickCount; | |
| 561 volatile ULONG64 TickCountQuad; | |
| 562 }; | |
| 563 ULONG Cookie; | |
| 564 #if (NTDDI_VERSION >= NTDDI_WS03) | |
| 565 LONGLONG ConsoleSessionForegroundProcessId; | |
| 566 ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES]; | |
| 567 #endif | |
| 568 #if (NTDDI_VERSION >= NTDDI_LONGHORN) | |
| 569 USHORT UserModeGlobalLogger[8]; | |
| 570 ULONG HeapTracingPid[2]; | |
| 571 ULONG CritSecTracingPid[2]; | |
| 572 union | |
| 573 { | |
| 574 ULONG SharedDataFlags; | |
| 575 struct | |
| 576 { | |
| 577 ULONG DbgErrorPortPresent:1; | |
| 578 ULONG DbgElevationEnabled:1; | |
| 579 ULONG DbgVirtEnabled:1; | |
| 580 ULONG DbgInstallerDetectEnabled:1; | |
| 581 ULONG SpareBits:28; | |
| 582 }; | |
| 583 }; | |
| 584 ULONG ImageFileExecutionOptions; | |
| 585 KAFFINITY ActiveProcessorAffinity; | |
| 586 #endif | |
| 587 } KUSER_SHARED_DATA, *PKUSER_SHARED_DATA; | |
| 588 | |
| 589 /* | |
| 590 ** IRP function codes | |
| 591 */ | |
| 592 | |
| 593 #define IRP_MJ_CREATE 0x00 | |
| 594 #define IRP_MJ_CREATE_NAMED_PIPE 0x01 | |
| 595 #define IRP_MJ_CLOSE 0x02 | |
| 596 #define IRP_MJ_READ 0x03 | |
| 597 #define IRP_MJ_WRITE 0x04 | |
| 598 #define IRP_MJ_QUERY_INFORMATION 0x05 | |
| 599 #define IRP_MJ_SET_INFORMATION 0x06 | |
| 600 #define IRP_MJ_QUERY_EA 0x07 | |
| 601 #define IRP_MJ_SET_EA 0x08 | |
| 602 #define IRP_MJ_FLUSH_BUFFERS 0x09 | |
| 603 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a | |
| 604 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b | |
| 605 #define IRP_MJ_DIRECTORY_CONTROL 0x0c | |
| 606 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d | |
| 607 #define IRP_MJ_DEVICE_CONTROL 0x0e | |
| 608 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f | |
| 609 #define IRP_MJ_SCSI 0x0f | |
| 610 #define IRP_MJ_SHUTDOWN 0x10 | |
| 611 #define IRP_MJ_LOCK_CONTROL 0x11 | |
| 612 #define IRP_MJ_CLEANUP 0x12 | |
| 613 #define IRP_MJ_CREATE_MAILSLOT 0x13 | |
| 614 #define IRP_MJ_QUERY_SECURITY 0x14 | |
| 615 #define IRP_MJ_SET_SECURITY 0x15 | |
| 616 #define IRP_MJ_POWER 0x16 | |
| 617 #define IRP_MJ_SYSTEM_CONTROL 0x17 | |
| 618 #define IRP_MJ_DEVICE_CHANGE 0x18 | |
| 619 #define IRP_MJ_QUERY_QUOTA 0x19 | |
| 620 #define IRP_MJ_SET_QUOTA 0x1a | |
| 621 #define IRP_MJ_PNP 0x1b | |
| 622 #define IRP_MJ_PNP_POWER 0x1b | |
| 623 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b | |
| 624 | |
| 625 #define IRP_MN_QUERY_DIRECTORY 0x01 | |
| 626 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02 | |
| 627 | |
| 628 #define IRP_MN_USER_FS_REQUEST 0x00 | |
| 629 #define IRP_MN_MOUNT_VOLUME 0x01 | |
| 630 #define IRP_MN_VERIFY_VOLUME 0x02 | |
| 631 #define IRP_MN_LOAD_FILE_SYSTEM 0x03 | |
| 632 #define IRP_MN_TRACK_LINK 0x04 | |
| 633 #define IRP_MN_KERNEL_CALL 0x04 | |
| 634 | |
| 635 #define IRP_MN_LOCK 0x01 | |
| 636 #define IRP_MN_UNLOCK_SINGLE 0x02 | |
| 637 #define IRP_MN_UNLOCK_ALL 0x03 | |
| 638 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04 | |
| 639 | |
| 640 #define IRP_MN_NORMAL 0x00 | |
| 641 #define IRP_MN_DPC 0x01 | |
| 642 #define IRP_MN_MDL 0x02 | |
| 643 #define IRP_MN_COMPLETE 0x04 | |
| 644 #define IRP_MN_COMPRESSED 0x08 | |
| 645 | |
| 646 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC) | |
| 647 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL) | |
| 648 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC) | |
| 649 | |
| 650 #define IRP_MN_SCSI_CLASS 0x01 | |
| 651 | |
| 652 #define IRP_MN_START_DEVICE 0x00 | |
| 653 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01 | |
| 654 #define IRP_MN_REMOVE_DEVICE 0x02 | |
| 655 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03 | |
| 656 #define IRP_MN_STOP_DEVICE 0x04 | |
| 657 #define IRP_MN_QUERY_STOP_DEVICE 0x05 | |
| 658 #define IRP_MN_CANCEL_STOP_DEVICE 0x06 | |
| 659 | |
| 660 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07 | |
| 661 #define IRP_MN_QUERY_INTERFACE 0x08 | |
| 662 #define IRP_MN_QUERY_CAPABILITIES 0x09 | |
| 663 #define IRP_MN_QUERY_RESOURCES 0x0A | |
| 664 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B | |
| 665 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C | |
| 666 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D | |
| 667 | |
| 668 #define IRP_MN_READ_CONFIG 0x0F | |
| 669 #define IRP_MN_WRITE_CONFIG 0x10 | |
| 670 #define IRP_MN_EJECT 0x11 | |
| 671 #define IRP_MN_SET_LOCK 0x12 | |
| 672 #define IRP_MN_QUERY_ID 0x13 | |
| 673 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14 | |
| 674 #define IRP_MN_QUERY_BUS_INFORMATION 0x15 | |
| 675 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 | |
| 676 #define IRP_MN_SURPRISE_REMOVAL 0x17 | |
| 677 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 | |
| 678 | |
| 679 #define IRP_MN_WAIT_WAKE 0x00 | |
| 680 #define IRP_MN_POWER_SEQUENCE 0x01 | |
| 681 #define IRP_MN_SET_POWER 0x02 | |
| 682 #define IRP_MN_QUERY_POWER 0x03 | |
| 683 | |
| 684 #define IRP_MN_QUERY_ALL_DATA 0x00 | |
| 685 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01 | |
| 686 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02 | |
| 687 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03 | |
| 688 #define IRP_MN_ENABLE_EVENTS 0x04 | |
| 689 #define IRP_MN_DISABLE_EVENTS 0x05 | |
| 690 #define IRP_MN_ENABLE_COLLECTION 0x06 | |
| 691 #define IRP_MN_DISABLE_COLLECTION 0x07 | |
| 692 #define IRP_MN_REGINFO 0x08 | |
| 693 #define IRP_MN_EXECUTE_METHOD 0x09 | |
| 694 | |
| 695 #define IRP_MN_REGINFO_EX 0x0b | |
| 696 | |
| 697 typedef enum _IO_PAGING_PRIORITY | |
| 698 { | |
| 699 IoPagingPriorityInvalid, | |
| 700 IoPagingPriorityNormal, | |
| 701 IoPagingPriorityHigh, | |
| 702 IoPagingPriorityReserved1, | |
| 703 IoPagingPriorityReserved2 | |
| 704 } IO_PAGING_PRIORITY; | |
| 705 | |
| 706 typedef enum _IO_ALLOCATION_ACTION { | |
| 707 KeepObject = 1, | |
| 708 DeallocateObject, | |
| 709 DeallocateObjectKeepRegisters | |
| 710 } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION; | |
| 711 | |
| 712 typedef IO_ALLOCATION_ACTION | |
| 713 (DDKAPI *PDRIVER_CONTROL)( | |
| 714 IN struct _DEVICE_OBJECT *DeviceObject, | |
| 715 IN struct _IRP *Irp, | |
| 716 IN PVOID MapRegisterBase, | |
| 717 IN PVOID Context); | |
| 718 | |
| 719 | |
| 720 typedef EXCEPTION_DISPOSITION | |
| 721 (DDKAPI *PEXCEPTION_ROUTINE)( | |
| 722 IN struct _EXCEPTION_RECORD *ExceptionRecord, | |
| 723 IN PVOID EstablisherFrame, | |
| 724 IN OUT struct _CONTEXT *ContextRecord, | |
| 725 IN OUT PVOID DispatcherContext); | |
| 726 | |
| 727 typedef VOID | |
| 728 (DDKAPI *PDRIVER_LIST_CONTROL)( | |
| 729 IN struct _DEVICE_OBJECT *DeviceObject, | |
| 730 IN struct _IRP *Irp, | |
| 731 IN struct _SCATTER_GATHER_LIST *ScatterGather, | |
| 732 IN PVOID Context); | |
| 733 | |
| 734 typedef NTSTATUS | |
| 735 (DDKAPI DRIVER_ADD_DEVICE)( | |
| 736 IN struct _DRIVER_OBJECT *DriverObject, | |
| 737 IN struct _DEVICE_OBJECT *PhysicalDeviceObject); | |
| 738 typedef DRIVER_ADD_DEVICE *PDRIVER_ADD_DEVICE; | |
| 739 | |
| 740 typedef NTSTATUS | |
| 741 (DDKAPI IO_COMPLETION_ROUTINE)( | |
| 742 IN struct _DEVICE_OBJECT *DeviceObject, | |
| 743 IN struct _IRP *Irp, | |
| 744 IN PVOID Context); | |
| 745 typedef IO_COMPLETION_ROUTINE *PIO_COMPLETION_ROUTINE; | |
| 746 | |
| 747 typedef VOID | |
| 748 (DDKAPI DRIVER_CANCEL)( | |
| 749 IN struct _DEVICE_OBJECT *DeviceObject, | |
| 750 IN struct _IRP *Irp); | |
| 751 typedef DRIVER_CANCEL *PDRIVER_CANCEL; | |
| 752 | |
| 753 typedef VOID | |
| 754 (DDKAPI *PKDEFERRED_ROUTINE)( | |
| 755 IN struct _KDPC *Dpc, | |
| 756 IN PVOID DeferredContext, | |
| 757 IN PVOID SystemArgument1, | |
| 758 IN PVOID SystemArgument2); | |
| 759 | |
| 760 typedef NTSTATUS | |
| 761 (DDKAPI DRIVER_DISPATCH)( | |
| 762 IN struct _DEVICE_OBJECT *DeviceObject, | |
| 763 IN struct _IRP *Irp); | |
| 764 typedef DRIVER_DISPATCH *PDRIVER_DISPATCH; | |
| 765 | |
| 766 typedef VOID | |
| 767 (DDKAPI *PIO_DPC_ROUTINE)( | |
| 768 IN struct _KDPC *Dpc, | |
| 769 IN struct _DEVICE_OBJECT *DeviceObject, | |
| 770 IN struct _IRP *Irp, | |
| 771 IN PVOID Context); | |
| 772 | |
| 773 typedef NTSTATUS | |
| 774 (DDKAPI *PMM_DLL_INITIALIZE)( | |
| 775 IN PUNICODE_STRING RegistryPath); | |
| 776 | |
| 777 typedef NTSTATUS | |
| 778 (DDKAPI *PMM_DLL_UNLOAD)( | |
| 779 VOID); | |
| 780 | |
| 781 typedef NTSTATUS | |
| 782 (DDKAPI *PDRIVER_ENTRY)( | |
| 783 IN struct _DRIVER_OBJECT *DriverObject, | |
| 784 IN PUNICODE_STRING RegistryPath); | |
| 785 | |
| 786 typedef NTSTATUS | |
| 787 (DDKAPI DRIVER_INITIALIZE)( | |
| 788 IN struct _DRIVER_OBJECT *DriverObject, | |
| 789 IN PUNICODE_STRING RegistryPath); | |
| 790 typedef DRIVER_INITIALIZE *PDRIVER_INITIALIZE; | |
| 791 | |
| 792 typedef BOOLEAN | |
| 793 (DDKAPI KSERVICE_ROUTINE)( | |
| 794 IN struct _KINTERRUPT *Interrupt, | |
| 795 IN PVOID ServiceContext); | |
| 796 typedef KSERVICE_ROUTINE *PKSERVICE_ROUTINE; | |
| 797 | |
| 798 typedef VOID | |
| 799 (DDKAPI *PIO_TIMER_ROUTINE)( | |
| 800 IN struct _DEVICE_OBJECT *DeviceObject, | |
| 801 IN PVOID Context); | |
| 802 | |
| 803 typedef VOID | |
| 804 (DDKAPI *PDRIVER_REINITIALIZE)( | |
| 805 IN struct _DRIVER_OBJECT *DriverObject, | |
| 806 IN PVOID Context, | |
| 807 IN ULONG Count); | |
| 808 | |
| 809 typedef VOID | |
| 810 (DDKAPI DRIVER_STARTIO)( | |
| 811 IN struct _DEVICE_OBJECT *DeviceObject, | |
| 812 IN struct _IRP *Irp); | |
| 813 typedef DRIVER_STARTIO *PDRIVER_STARTIO; | |
| 814 | |
| 815 typedef BOOLEAN | |
| 816 (DDKAPI *PKSYNCHRONIZE_ROUTINE)( | |
| 817 IN PVOID SynchronizeContext); | |
| 818 | |
| 819 typedef VOID | |
| 820 (DDKAPI DRIVER_UNLOAD)( | |
| 821 IN struct _DRIVER_OBJECT *DriverObject); | |
| 822 typedef DRIVER_UNLOAD *PDRIVER_UNLOAD; | |
| 823 | |
| 824 | |
| 825 | |
| 826 /* | |
| 827 ** Plug and Play structures | |
| 828 */ | |
| 829 | |
| 830 typedef VOID | |
| 831 (DDKAPI *PINTERFACE_REFERENCE)( | |
| 832 PVOID Context); | |
| 833 | |
| 834 typedef VOID | |
| 835 (DDKAPI *PINTERFACE_DEREFERENCE)( | |
| 836 PVOID Context); | |
| 837 | |
| 838 typedef BOOLEAN | |
| 839 (DDKAPI *PTRANSLATE_BUS_ADDRESS)( | |
| 840 IN PVOID Context, | |
| 841 IN PHYSICAL_ADDRESS BusAddress, | |
| 842 IN ULONG Length, | |
| 843 IN OUT PULONG AddressSpace, | |
| 844 OUT PPHYSICAL_ADDRESS TranslatedAddress); | |
| 845 | |
| 846 typedef struct _DMA_ADAPTER* | |
| 847 (DDKAPI *PGET_DMA_ADAPTER)( | |
| 848 IN PVOID Context, | |
| 849 IN struct _DEVICE_DESCRIPTION *DeviceDescriptor, | |
| 850 OUT PULONG NumberOfMapRegisters); | |
| 851 | |
| 852 typedef ULONG | |
| 853 (DDKAPI *PGET_SET_DEVICE_DATA)( | |
| 854 IN PVOID Context, | |
| 855 IN ULONG DataType, | |
| 856 IN PVOID Buffer, | |
| 857 IN ULONG Offset, | |
| 858 IN ULONG Length); | |
| 859 | |
| 860 /* PCI_DEVICE_PRESENCE_PARAMETERS.Flags */ | |
| 861 #define PCI_USE_SUBSYSTEM_IDS 0x00000001 | |
| 862 #define PCI_USE_REVISION 0x00000002 | |
| 863 #define PCI_USE_VENDEV_IDS 0x00000004 | |
| 864 #define PCI_USE_CLASS_SUBCLASS 0x00000008 | |
| 865 #define PCI_USE_PROGIF 0x00000010 | |
| 866 #define PCI_USE_LOCAL_BUS 0x00000020 | |
| 867 #define PCI_USE_LOCAL_DEVICE 0x00000040 | |
| 868 | |
| 869 typedef struct _PCI_DEVICE_PRESENCE_PARAMETERS { | |
| 870 ULONG Size; | |
| 871 ULONG Flags; | |
| 872 USHORT VendorID; | |
| 873 USHORT DeviceID; | |
| 874 UCHAR RevisionID; | |
| 875 USHORT SubVendorID; | |
| 876 USHORT SubSystemID; | |
| 877 UCHAR BaseClass; | |
| 878 UCHAR SubClass; | |
| 879 UCHAR ProgIf; | |
| 880 } PCI_DEVICE_PRESENCE_PARAMETERS, *PPCI_DEVICE_PRESENCE_PARAMETERS; | |
| 881 | |
| 882 typedef BOOLEAN | |
| 883 (DDKAPI *PPCI_IS_DEVICE_PRESENT)( | |
| 884 IN USHORT VendorID, | |
| 885 IN USHORT DeviceID, | |
| 886 IN UCHAR RevisionID, | |
| 887 IN USHORT SubVendorID, | |
| 888 IN USHORT SubSystemID, | |
| 889 IN ULONG Flags); | |
| 890 | |
| 891 typedef BOOLEAN | |
| 892 (DDKAPI *PPCI_IS_DEVICE_PRESENT_EX)( | |
| 893 IN PVOID Context, | |
| 894 IN PPCI_DEVICE_PRESENCE_PARAMETERS Parameters); | |
| 895 | |
| 896 typedef union _POWER_STATE { | |
| 897 SYSTEM_POWER_STATE SystemState; | |
| 898 DEVICE_POWER_STATE DeviceState; | |
| 899 } POWER_STATE, *PPOWER_STATE; | |
| 900 | |
| 901 typedef enum _POWER_STATE_TYPE { | |
| 902 SystemPowerState, | |
| 903 DevicePowerState | |
| 904 } POWER_STATE_TYPE, *PPOWER_STATE_TYPE; | |
| 905 | |
| 906 typedef struct _BUS_INTERFACE_STANDARD { | |
| 907 USHORT Size; | |
| 908 USHORT Version; | |
| 909 PVOID Context; | |
| 910 PINTERFACE_REFERENCE InterfaceReference; | |
| 911 PINTERFACE_DEREFERENCE InterfaceDereference; | |
| 912 PTRANSLATE_BUS_ADDRESS TranslateBusAddress; | |
| 913 PGET_DMA_ADAPTER GetDmaAdapter; | |
| 914 PGET_SET_DEVICE_DATA SetBusData; | |
| 915 PGET_SET_DEVICE_DATA GetBusData; | |
| 916 } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD; | |
| 917 | |
| 918 typedef struct _PCI_DEVICE_PRESENT_INTERFACE { | |
| 919 USHORT Size; | |
| 920 USHORT Version; | |
| 921 PVOID Context; | |
| 922 PINTERFACE_REFERENCE InterfaceReference; | |
| 923 PINTERFACE_DEREFERENCE InterfaceDereference; | |
| 924 PPCI_IS_DEVICE_PRESENT IsDevicePresent; | |
| 925 PPCI_IS_DEVICE_PRESENT_EX IsDevicePresentEx; | |
| 926 } PCI_DEVICE_PRESENT_INTERFACE, *PPCI_DEVICE_PRESENT_INTERFACE; | |
| 927 | |
| 928 typedef struct _DEVICE_CAPABILITIES { | |
| 929 USHORT Size; | |
| 930 USHORT Version; | |
| 931 ULONG DeviceD1 : 1; | |
| 932 ULONG DeviceD2 : 1; | |
| 933 ULONG LockSupported : 1; | |
| 934 ULONG EjectSupported : 1; | |
| 935 ULONG Removable : 1; | |
| 936 ULONG DockDevice : 1; | |
| 937 ULONG UniqueID : 1; | |
| 938 ULONG SilentInstall : 1; | |
| 939 ULONG RawDeviceOK : 1; | |
| 940 ULONG SurpriseRemovalOK : 1; | |
| 941 ULONG WakeFromD0 : 1; | |
| 942 ULONG WakeFromD1 : 1; | |
| 943 ULONG WakeFromD2 : 1; | |
| 944 ULONG WakeFromD3 : 1; | |
| 945 ULONG HardwareDisabled : 1; | |
| 946 ULONG NonDynamic : 1; | |
| 947 ULONG WarmEjectSupported : 1; | |
| 948 ULONG NoDisplayInUI : 1; | |
| 949 ULONG Reserved : 14; | |
| 950 ULONG Address; | |
| 951 ULONG UINumber; | |
| 952 DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; | |
| 953 SYSTEM_POWER_STATE SystemWake; | |
| 954 DEVICE_POWER_STATE DeviceWake; | |
| 955 ULONG D1Latency; | |
| 956 ULONG D2Latency; | |
| 957 ULONG D3Latency; | |
| 958 } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES; | |
| 959 | |
| 960 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION { | |
| 961 USHORT Version; | |
| 962 USHORT Size; | |
| 963 GUID Event; | |
| 964 GUID InterfaceClassGuid; | |
| 965 PUNICODE_STRING SymbolicLinkName; | |
| 966 } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION; | |
| 967 | |
| 968 typedef struct _HWPROFILE_CHANGE_NOTIFICATION { | |
| 969 USHORT Version; | |
| 970 USHORT Size; | |
| 971 GUID Event; | |
| 972 } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION; | |
| 973 | |
| 974 #undef INTERFACE | |
| 975 | |
| 976 typedef struct _INTERFACE { | |
| 977 USHORT Size; | |
| 978 USHORT Version; | |
| 979 PVOID Context; | |
| 980 PINTERFACE_REFERENCE InterfaceReference; | |
| 981 PINTERFACE_DEREFERENCE InterfaceDereference; | |
| 982 } INTERFACE, *PINTERFACE; | |
| 983 | |
| 984 typedef struct _PLUGPLAY_NOTIFICATION_HEADER { | |
| 985 USHORT Version; | |
| 986 USHORT Size; | |
| 987 GUID Event; | |
| 988 } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER; | |
| 989 | |
| 990 typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE; | |
| 991 | |
| 992 /* PNP_DEVICE_STATE */ | |
| 993 | |
| 994 #define PNP_DEVICE_DISABLED 0x00000001 | |
| 995 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002 | |
| 996 #define PNP_DEVICE_FAILED 0x00000004 | |
| 997 #define PNP_DEVICE_REMOVED 0x00000008 | |
| 998 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010 | |
| 999 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020 | |
| 1000 | |
| 1001 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION { | |
| 1002 USHORT Version; | |
| 1003 USHORT Size; | |
| 1004 GUID Event; | |
| 1005 struct _FILE_OBJECT *FileObject; | |
| 1006 LONG NameBufferOffset; | |
| 1007 UCHAR CustomDataBuffer[1]; | |
| 1008 } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION; | |
| 1009 | |
| 1010 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION { | |
| 1011 USHORT Version; | |
| 1012 USHORT Size; | |
| 1013 GUID Event; | |
| 1014 struct _FILE_OBJECT *FileObject; | |
| 1015 } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION; | |
| 1016 | |
| 1017 typedef enum _BUS_QUERY_ID_TYPE { | |
| 1018 BusQueryDeviceID, | |
| 1019 BusQueryHardwareIDs, | |
| 1020 BusQueryCompatibleIDs, | |
| 1021 BusQueryInstanceID, | |
| 1022 BusQueryDeviceSerialNumber | |
| 1023 } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE; | |
| 1024 | |
| 1025 typedef enum _DEVICE_TEXT_TYPE { | |
| 1026 DeviceTextDescription, | |
| 1027 DeviceTextLocationInformation | |
| 1028 } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE; | |
| 1029 | |
| 1030 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { | |
| 1031 DeviceUsageTypeUndefined, | |
| 1032 DeviceUsageTypePaging, | |
| 1033 DeviceUsageTypeHibernation, | |
| 1034 DeviceUsageTypeDumpFile | |
| 1035 } DEVICE_USAGE_NOTIFICATION_TYPE; | |
| 1036 | |
| 1037 typedef struct _POWER_SEQUENCE { | |
| 1038 ULONG SequenceD1; | |
| 1039 ULONG SequenceD2; | |
| 1040 ULONG SequenceD3; | |
| 1041 } POWER_SEQUENCE, *PPOWER_SEQUENCE; | |
| 1042 | |
| 1043 typedef enum { | |
| 1044 DevicePropertyDeviceDescription, | |
| 1045 DevicePropertyHardwareID, | |
| 1046 DevicePropertyCompatibleIDs, | |
| 1047 DevicePropertyBootConfiguration, | |
| 1048 DevicePropertyBootConfigurationTranslated, | |
| 1049 DevicePropertyClassName, | |
| 1050 DevicePropertyClassGuid, | |
| 1051 DevicePropertyDriverKeyName, | |
| 1052 DevicePropertyManufacturer, | |
| 1053 DevicePropertyFriendlyName, | |
| 1054 DevicePropertyLocationInformation, | |
| 1055 DevicePropertyPhysicalDeviceObjectName, | |
| 1056 DevicePropertyBusTypeGuid, | |
| 1057 DevicePropertyLegacyBusType, | |
| 1058 DevicePropertyBusNumber, | |
| 1059 DevicePropertyEnumeratorName, | |
| 1060 DevicePropertyAddress, | |
| 1061 DevicePropertyUINumber, | |
| 1062 DevicePropertyInstallState, | |
| 1063 DevicePropertyRemovalPolicy | |
| 1064 } DEVICE_REGISTRY_PROPERTY; | |
| 1065 | |
| 1066 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { | |
| 1067 EventCategoryReserved, | |
| 1068 EventCategoryHardwareProfileChange, | |
| 1069 EventCategoryDeviceInterfaceChange, | |
| 1070 EventCategoryTargetDeviceChange | |
| 1071 } IO_NOTIFICATION_EVENT_CATEGORY; | |
| 1072 | |
| 1073 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001 | |
| 1074 | |
| 1075 typedef NTSTATUS | |
| 1076 (DDKAPI *PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)( | |
| 1077 IN PVOID NotificationStructure, | |
| 1078 IN PVOID Context); | |
| 1079 | |
| 1080 typedef VOID | |
| 1081 (DDKAPI *PDEVICE_CHANGE_COMPLETE_CALLBACK)( | |
| 1082 IN PVOID Context); | |
| 1083 | |
| 1084 | |
| 1085 /* | |
| 1086 ** System structures | |
| 1087 */ | |
| 1088 | |
| 1089 #define SYMBOLIC_LINK_QUERY 0x0001 | |
| 1090 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) | |
| 1091 | |
| 1092 /* also in winnt,h */ | |
| 1093 #define DUPLICATE_CLOSE_SOURCE 0x00000001 | |
| 1094 #define DUPLICATE_SAME_ACCESS 0x00000002 | |
| 1095 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004 | |
| 1096 /* end winnt.h */ | |
| 1097 | |
| 1098 typedef struct _OBJECT_NAME_INFORMATION { | |
| 1099 UNICODE_STRING Name; | |
| 1100 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; | |
| 1101 | |
| 1102 typedef struct _IO_STATUS_BLOCK { | |
| 1103 _ANONYMOUS_UNION union { | |
| 1104 NTSTATUS Status; | |
| 1105 PVOID Pointer; | |
| 1106 } DUMMYUNIONNAME; | |
| 1107 ULONG_PTR Information; | |
| 1108 } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; | |
| 1109 | |
| 1110 typedef VOID | |
| 1111 (DDKAPI *PIO_APC_ROUTINE)( | |
| 1112 IN PVOID ApcContext, | |
| 1113 IN PIO_STATUS_BLOCK IoStatusBlock, | |
| 1114 IN ULONG Reserved); | |
| 1115 | |
| 1116 typedef VOID | |
| 1117 (DDKAPI *PKNORMAL_ROUTINE)( | |
| 1118 IN PVOID NormalContext, | |
| 1119 IN PVOID SystemArgument1, | |
| 1120 IN PVOID SystemArgument2); | |
| 1121 | |
| 1122 typedef VOID | |
| 1123 (DDKAPI *PKKERNEL_ROUTINE)( | |
| 1124 IN struct _KAPC *Apc, | |
| 1125 IN OUT PKNORMAL_ROUTINE *NormalRoutine, | |
| 1126 IN OUT PVOID *NormalContext, | |
| 1127 IN OUT PVOID *SystemArgument1, | |
| 1128 IN OUT PVOID *SystemArgument2); | |
| 1129 | |
| 1130 typedef VOID | |
| 1131 (DDKAPI *PKRUNDOWN_ROUTINE)( | |
| 1132 IN struct _KAPC *Apc); | |
| 1133 | |
| 1134 typedef BOOLEAN | |
| 1135 (DDKAPI *PKTRANSFER_ROUTINE)( | |
| 1136 VOID); | |
| 1137 | |
| 1138 typedef struct _KAPC | |
| 1139 { | |
| 1140 UCHAR Type; | |
| 1141 UCHAR SpareByte0; | |
| 1142 UCHAR Size; | |
| 1143 UCHAR SpareByte1; | |
| 1144 ULONG SpareLong0; | |
| 1145 struct _KTHREAD *Thread; | |
| 1146 LIST_ENTRY ApcListEntry; | |
| 1147 PKKERNEL_ROUTINE KernelRoutine; | |
| 1148 PKRUNDOWN_ROUTINE RundownRoutine; | |
| 1149 PKNORMAL_ROUTINE NormalRoutine; | |
| 1150 PVOID NormalContext; | |
| 1151 PVOID SystemArgument1; | |
| 1152 PVOID SystemArgument2; | |
| 1153 CCHAR ApcStateIndex; | |
| 1154 KPROCESSOR_MODE ApcMode; | |
| 1155 BOOLEAN Inserted; | |
| 1156 } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC; | |
| 1157 | |
| 1158 typedef struct _KDEVICE_QUEUE { | |
| 1159 CSHORT Type; | |
| 1160 CSHORT Size; | |
| 1161 LIST_ENTRY DeviceListHead; | |
| 1162 KSPIN_LOCK Lock; | |
| 1163 BOOLEAN Busy; | |
| 1164 } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; | |
| 1165 | |
| 1166 typedef struct _KDEVICE_QUEUE_ENTRY { | |
| 1167 LIST_ENTRY DeviceListEntry; | |
| 1168 ULONG SortKey; | |
| 1169 BOOLEAN Inserted; | |
| 1170 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY, | |
| 1171 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY; | |
| 1172 | |
| 1173 #define LOCK_QUEUE_WAIT 1 | |
| 1174 #define LOCK_QUEUE_OWNER 2 | |
| 1175 #define LOCK_QUEUE_TIMER_LOCK_SHIFT 4 | |
| 1176 #define LOCK_QUEUE_TIMER_TABLE_LOCKS (1 << (8 - LOCK_QUEUE_TIMER_LOCK_SHIFT)) | |
| 1177 | |
| 1178 typedef enum _KSPIN_LOCK_QUEUE_NUMBER | |
| 1179 { | |
| 1180 LockQueueDispatcherLock, | |
| 1181 LockQueueExpansionLock, | |
| 1182 LockQueuePfnLock, | |
| 1183 LockQueueSystemSpaceLock, | |
| 1184 LockQueueVacbLock, | |
| 1185 LockQueueMasterLock, | |
| 1186 LockQueueNonPagedPoolLock, | |
| 1187 LockQueueIoCancelLock, | |
| 1188 LockQueueWorkQueueLock, | |
| 1189 LockQueueIoVpbLock, | |
| 1190 LockQueueIoDatabaseLock, | |
| 1191 LockQueueIoCompletionLock, | |
| 1192 LockQueueNtfsStructLock, | |
| 1193 LockQueueAfdWorkQueueLock, | |
| 1194 LockQueueBcbLock, | |
| 1195 LockQueueMmNonPagedPoolLock, | |
| 1196 LockQueueUnusedSpare16, | |
| 1197 LockQueueTimerTableLock, | |
| 1198 LockQueueMaximumLock = LockQueueTimerTableLock + LOCK_QUEUE_TIMER_TABLE_LOCKS | |
| 1199 } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER; | |
| 1200 | |
| 1201 typedef struct _KSPIN_LOCK_QUEUE { | |
| 1202 struct _KSPIN_LOCK_QUEUE *volatile Next; | |
| 1203 PKSPIN_LOCK volatile Lock; | |
| 1204 } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE; | |
| 1205 | |
| 1206 typedef struct _KLOCK_QUEUE_HANDLE { | |
| 1207 KSPIN_LOCK_QUEUE LockQueue; | |
| 1208 KIRQL OldIrql; | |
| 1209 } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE; | |
| 1210 | |
| 1211 #define DPC_NORMAL 0 | |
| 1212 #define DPC_THREADED 1 | |
| 1213 | |
| 1214 #define ASSERT_APC(Object) \ | |
| 1215 ASSERT((Object)->Type == ApcObject) | |
| 1216 | |
| 1217 #define ASSERT_DPC(Object) \ | |
| 1218 ASSERT(((Object)->Type == 0) || \ | |
| 1219 ((Object)->Type == DpcObject) || \ | |
| 1220 ((Object)->Type == ThreadedDpcObject)) | |
| 1221 | |
| 1222 #define ASSERT_DEVICE_QUEUE(Object) \ | |
| 1223 ASSERT((Object)->Type == DeviceQueueObject) | |
| 1224 | |
| 1225 typedef struct _KDPC | |
| 1226 { | |
| 1227 UCHAR Type; | |
| 1228 UCHAR Importance; | |
| 1229 USHORT Number; | |
| 1230 LIST_ENTRY DpcListEntry; | |
| 1231 PKDEFERRED_ROUTINE DeferredRoutine; | |
| 1232 PVOID DeferredContext; | |
| 1233 PVOID SystemArgument1; | |
| 1234 PVOID SystemArgument2; | |
| 1235 volatile PVOID DpcData; | |
| 1236 } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC; | |
| 1237 | |
| 1238 typedef PVOID PKIPI_CONTEXT; | |
| 1239 | |
| 1240 typedef | |
| 1241 VOID | |
| 1242 (NTAPI *PKIPI_WORKER)( | |
| 1243 IN PKIPI_CONTEXT PacketContext, | |
| 1244 IN PVOID Parameter1, | |
| 1245 IN PVOID Parameter2, | |
| 1246 IN PVOID Parameter3 | |
| 1247 ); | |
| 1248 | |
| 1249 typedef struct _WAIT_CONTEXT_BLOCK { | |
| 1250 KDEVICE_QUEUE_ENTRY WaitQueueEntry; | |
| 1251 PDRIVER_CONTROL DeviceRoutine; | |
| 1252 PVOID DeviceContext; | |
| 1253 ULONG NumberOfMapRegisters; | |
| 1254 PVOID DeviceObject; | |
| 1255 PVOID CurrentIrp; | |
| 1256 PKDPC BufferChainingDpc; | |
| 1257 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK; | |
| 1258 | |
| 1259 #define ASSERT_GATE(object) \ | |
| 1260 ASSERT((((object)->Header.Type & KOBJECT_TYPE_MASK) == GateObject) || \ | |
| 1261 (((object)->Header.Type & KOBJECT_TYPE_MASK) == EventSynchronizationObject)) | |
| 1262 | |
| 1263 typedef struct _KGATE | |
| 1264 { | |
| 1265 DISPATCHER_HEADER Header; | |
| 1266 } KGATE, *PKGATE, *RESTRICTED_POINTER PRKGATE; | |
| 1267 | |
| 1268 #define GM_LOCK_BIT 0x1 | |
| 1269 #define GM_LOCK_BIT_V 0x0 | |
| 1270 #define GM_LOCK_WAITER_WOKEN 0x2 | |
| 1271 #define GM_LOCK_WAITER_INC 0x4 | |
| 1272 | |
| 1273 typedef struct _KGUARDED_MUTEX | |
| 1274 { | |
| 1275 volatile LONG Count; | |
| 1276 PKTHREAD Owner; | |
| 1277 ULONG Contention; | |
| 1278 KGATE Gate; | |
| 1279 union | |
| 1280 { | |
| 1281 struct | |
| 1282 { | |
| 1283 SHORT KernelApcDisable; | |
| 1284 SHORT SpecialApcDisable; | |
| 1285 }; | |
| 1286 ULONG CombinedApcDisable; | |
| 1287 }; | |
| 1288 } KGUARDED_MUTEX, *PKGUARDED_MUTEX; | |
| 1289 | |
| 1290 #define TIMER_TABLE_SIZE 512 | |
| 1291 #define TIMER_TABLE_SHIFT 9 | |
| 1292 | |
| 1293 typedef struct _KTIMER { | |
| 1294 DISPATCHER_HEADER Header; | |
| 1295 ULARGE_INTEGER DueTime; | |
| 1296 LIST_ENTRY TimerListEntry; | |
| 1297 struct _KDPC *Dpc; | |
| 1298 LONG Period; | |
| 1299 } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER; | |
| 1300 | |
| 1301 #define ASSERT_TIMER(E) \ | |
| 1302 ASSERT(((E)->Header.Type == TimerNotificationObject) || \ | |
| 1303 ((E)->Header.Type == TimerSynchronizationObject)) | |
| 1304 | |
| 1305 #define ASSERT_MUTANT(E) \ | |
| 1306 ASSERT((E)->Header.Type == MutantObject) | |
| 1307 | |
| 1308 #define ASSERT_SEMAPHORE(E) \ | |
| 1309 ASSERT((E)->Header.Type == SemaphoreObject) | |
| 1310 | |
| 1311 #define ASSERT_EVENT(E) \ | |
| 1312 ASSERT(((E)->Header.Type == NotificationEvent) || \ | |
| 1313 ((E)->Header.Type == SynchronizationEvent)) | |
| 1314 | |
| 1315 typedef struct _KMUTANT { | |
| 1316 DISPATCHER_HEADER Header; | |
| 1317 LIST_ENTRY MutantListEntry; | |
| 1318 struct _KTHREAD *RESTRICTED_POINTER OwnerThread; | |
| 1319 BOOLEAN Abandoned; | |
| 1320 UCHAR ApcDisable; | |
| 1321 } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX; | |
| 1322 | |
| 1323 typedef enum _TIMER_TYPE { | |
| 1324 NotificationTimer, | |
| 1325 SynchronizationTimer | |
| 1326 } TIMER_TYPE; | |
| 1327 | |
| 1328 #define EVENT_INCREMENT 1 | |
| 1329 #define IO_NO_INCREMENT 0 | |
| 1330 #define IO_CD_ROM_INCREMENT 1 | |
| 1331 #define IO_DISK_INCREMENT 1 | |
| 1332 #define IO_KEYBOARD_INCREMENT 6 | |
| 1333 #define IO_MAILSLOT_INCREMENT 2 | |
| 1334 #define IO_MOUSE_INCREMENT 6 | |
| 1335 #define IO_NAMED_PIPE_INCREMENT 2 | |
| 1336 #define IO_NETWORK_INCREMENT 2 | |
| 1337 #define IO_PARALLEL_INCREMENT 1 | |
| 1338 #define IO_SERIAL_INCREMENT 2 | |
| 1339 #define IO_SOUND_INCREMENT 8 | |
| 1340 #define IO_VIDEO_INCREMENT 1 | |
| 1341 #define SEMAPHORE_INCREMENT 1 | |
| 1342 | |
| 1343 #define MM_MAXIMUM_DISK_IO_SIZE (0x10000) | |
| 1344 | |
| 1345 typedef struct _IRP { | |
| 1346 CSHORT Type; | |
| 1347 USHORT Size; | |
| 1348 struct _MDL *MdlAddress; | |
| 1349 ULONG Flags; | |
| 1350 union { | |
| 1351 struct _IRP *MasterIrp; | |
| 1352 volatile LONG IrpCount; | |
| 1353 PVOID SystemBuffer; | |
| 1354 } AssociatedIrp; | |
| 1355 LIST_ENTRY ThreadListEntry; | |
| 1356 IO_STATUS_BLOCK IoStatus; | |
| 1357 KPROCESSOR_MODE RequestorMode; | |
| 1358 BOOLEAN PendingReturned; | |
| 1359 CHAR StackCount; | |
| 1360 CHAR CurrentLocation; | |
| 1361 BOOLEAN Cancel; | |
| 1362 KIRQL CancelIrql; | |
| 1363 CCHAR ApcEnvironment; | |
| 1364 UCHAR AllocationFlags; | |
| 1365 PIO_STATUS_BLOCK UserIosb; | |
| 1366 PKEVENT UserEvent; | |
| 1367 union { | |
| 1368 struct { | |
| 1369 PIO_APC_ROUTINE UserApcRoutine; | |
| 1370 PVOID UserApcContext; | |
| 1371 } AsynchronousParameters; | |
| 1372 LARGE_INTEGER AllocationSize; | |
| 1373 } Overlay; | |
| 1374 volatile PDRIVER_CANCEL CancelRoutine; | |
| 1375 PVOID UserBuffer; | |
| 1376 union { | |
| 1377 struct { | |
| 1378 _ANONYMOUS_UNION union { | |
| 1379 KDEVICE_QUEUE_ENTRY DeviceQueueEntry; | |
| 1380 _ANONYMOUS_STRUCT struct { | |
| 1381 PVOID DriverContext[4]; | |
| 1382 } DUMMYSTRUCTNAME; | |
| 1383 } DUMMYUNIONNAME; | |
| 1384 PETHREAD Thread; | |
| 1385 PCHAR AuxiliaryBuffer; | |
| 1386 _ANONYMOUS_STRUCT struct { | |
| 1387 LIST_ENTRY ListEntry; | |
| 1388 _ANONYMOUS_UNION union { | |
| 1389 struct _IO_STACK_LOCATION *CurrentStackLocation; | |
| 1390 ULONG PacketType; | |
| 1391 } DUMMYUNIONNAME; | |
| 1392 } DUMMYSTRUCTNAME; | |
| 1393 struct _FILE_OBJECT *OriginalFileObject; | |
| 1394 } Overlay; | |
| 1395 KAPC Apc; | |
| 1396 PVOID CompletionKey; | |
| 1397 } Tail; | |
| 1398 } IRP; | |
| 1399 typedef struct _IRP *PIRP; | |
| 1400 | |
| 1401 /* IRP.Flags */ | |
| 1402 | |
| 1403 #define SL_FORCE_ACCESS_CHECK 0x01 | |
| 1404 #define SL_OPEN_PAGING_FILE 0x02 | |
| 1405 #define SL_OPEN_TARGET_DIRECTORY 0x04 | |
| 1406 #define SL_CASE_SENSITIVE 0x80 | |
| 1407 | |
| 1408 #define SL_KEY_SPECIFIED 0x01 | |
| 1409 #define SL_OVERRIDE_VERIFY_VOLUME 0x02 | |
| 1410 #define SL_WRITE_THROUGH 0x04 | |
| 1411 #define SL_FT_SEQUENTIAL_WRITE 0x08 | |
| 1412 | |
| 1413 #define SL_FAIL_IMMEDIATELY 0x01 | |
| 1414 #define SL_EXCLUSIVE_LOCK 0x02 | |
| 1415 | |
| 1416 #define SL_RESTART_SCAN 0x01 | |
| 1417 #define SL_RETURN_SINGLE_ENTRY 0x02 | |
| 1418 #define SL_INDEX_SPECIFIED 0x04 | |
| 1419 | |
| 1420 #define SL_WATCH_TREE 0x01 | |
| 1421 | |
| 1422 #define SL_ALLOW_RAW_MOUNT 0x01 | |
| 1423 | |
| 1424 #define CTL_CODE(DeviceType, Function, Method, Access)( \ | |
| 1425 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) | |
| 1426 | |
| 1427 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16) | |
| 1428 | |
| 1429 enum | |
| 1430 { | |
| 1431 IRP_NOCACHE = 0x1, | |
| 1432 IRP_PAGING_IO = 0x2, | |
| 1433 IRP_MOUNT_COMPLETION = 0x2, | |
| 1434 IRP_SYNCHRONOUS_API = 0x4, | |
| 1435 IRP_ASSOCIATED_IRP = 0x8, | |
| 1436 IRP_BUFFERED_IO = 0x10, | |
| 1437 IRP_DEALLOCATE_BUFFER = 0x20, | |
| 1438 IRP_INPUT_OPERATION = 0x40, | |
| 1439 IRP_SYNCHRONOUS_PAGING_IO = 0x40, | |
| 1440 IRP_CREATE_OPERATION = 0x80, | |
| 1441 IRP_READ_OPERATION = 0x100, | |
| 1442 IRP_WRITE_OPERATION = 0x200, | |
| 1443 IRP_CLOSE_OPERATION = 0x400, | |
| 1444 IRP_DEFER_IO_COMPLETION = 0x800, | |
| 1445 IRP_OB_QUERY_NAME = 0x1000, | |
| 1446 IRP_HOLD_DEVICE_QUEUE = 0x2000, | |
| 1447 IRP_RETRY_IO_COMPLETION = 0x4000 | |
| 1448 }; | |
| 1449 | |
| 1450 #define IRP_QUOTA_CHARGED 0x01 | |
| 1451 #define IRP_ALLOCATED_MUST_SUCCEED 0x02 | |
| 1452 #define IRP_ALLOCATED_FIXED_SIZE 0x04 | |
| 1453 #define IRP_LOOKASIDE_ALLOCATION 0x08 | |
| 1454 | |
| 1455 typedef struct _BOOTDISK_INFORMATION { | |
| 1456 LONGLONG BootPartitionOffset; | |
| 1457 LONGLONG SystemPartitionOffset; | |
| 1458 ULONG BootDeviceSignature; | |
| 1459 ULONG SystemDeviceSignature; | |
| 1460 } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION; | |
| 1461 | |
| 1462 typedef struct _BOOTDISK_INFORMATION_EX { | |
| 1463 LONGLONG BootPartitionOffset; | |
| 1464 LONGLONG SystemPartitionOffset; | |
| 1465 ULONG BootDeviceSignature; | |
| 1466 ULONG SystemDeviceSignature; | |
| 1467 GUID BootDeviceGuid; | |
| 1468 GUID SystemDeviceGuid; | |
| 1469 BOOLEAN BootDeviceIsGpt; | |
| 1470 BOOLEAN SystemDeviceIsGpt; | |
| 1471 } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX; | |
| 1472 | |
| 1473 typedef struct _EISA_MEMORY_TYPE { | |
| 1474 UCHAR ReadWrite : 1; | |
| 1475 UCHAR Cached : 1; | |
| 1476 UCHAR Reserved0 : 1; | |
| 1477 UCHAR Type : 2; | |
| 1478 UCHAR Shared : 1; | |
| 1479 UCHAR Reserved1 : 1; | |
| 1480 UCHAR MoreEntries : 1; | |
| 1481 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE; | |
| 1482 | |
| 1483 #include <pshpack1.h> | |
| 1484 typedef struct _EISA_MEMORY_CONFIGURATION { | |
| 1485 EISA_MEMORY_TYPE ConfigurationByte; | |
| 1486 UCHAR DataSize; | |
| 1487 USHORT AddressLowWord; | |
| 1488 UCHAR AddressHighByte; | |
| 1489 USHORT MemorySize; | |
| 1490 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION; | |
| 1491 #include <poppack.h> | |
| 1492 | |
| 1493 typedef struct _EISA_IRQ_DESCRIPTOR { | |
| 1494 UCHAR Interrupt : 4; | |
| 1495 UCHAR Reserved : 1; | |
| 1496 UCHAR LevelTriggered : 1; | |
| 1497 UCHAR Shared : 1; | |
| 1498 UCHAR MoreEntries : 1; | |
| 1499 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR; | |
| 1500 | |
| 1501 typedef struct _EISA_IRQ_CONFIGURATION { | |
| 1502 EISA_IRQ_DESCRIPTOR ConfigurationByte; | |
| 1503 UCHAR Reserved; | |
| 1504 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION; | |
| 1505 | |
| 1506 typedef struct _DMA_CONFIGURATION_BYTE0 { | |
| 1507 UCHAR Channel : 3; | |
| 1508 UCHAR Reserved : 3; | |
| 1509 UCHAR Shared : 1; | |
| 1510 UCHAR MoreEntries : 1; | |
| 1511 } DMA_CONFIGURATION_BYTE0; | |
| 1512 | |
| 1513 typedef struct _DMA_CONFIGURATION_BYTE1 { | |
| 1514 UCHAR Reserved0 : 2; | |
| 1515 UCHAR TransferSize : 2; | |
| 1516 UCHAR Timing : 2; | |
| 1517 UCHAR Reserved1 : 2; | |
| 1518 } DMA_CONFIGURATION_BYTE1; | |
| 1519 | |
| 1520 typedef struct _EISA_DMA_CONFIGURATION { | |
| 1521 DMA_CONFIGURATION_BYTE0 ConfigurationByte0; | |
| 1522 DMA_CONFIGURATION_BYTE1 ConfigurationByte1; | |
| 1523 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION; | |
| 1524 | |
| 1525 #include <pshpack1.h> | |
| 1526 typedef struct _EISA_PORT_DESCRIPTOR { | |
| 1527 UCHAR NumberPorts : 5; | |
| 1528 UCHAR Reserved : 1; | |
| 1529 UCHAR Shared : 1; | |
| 1530 UCHAR MoreEntries : 1; | |
| 1531 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR; | |
| 1532 | |
| 1533 typedef struct _EISA_PORT_CONFIGURATION { | |
| 1534 EISA_PORT_DESCRIPTOR Configuration; | |
| 1535 USHORT PortAddress; | |
| 1536 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION; | |
| 1537 #include <poppack.h> | |
| 1538 | |
| 1539 typedef struct _CM_EISA_FUNCTION_INFORMATION { | |
| 1540 ULONG CompressedId; | |
| 1541 UCHAR IdSlotFlags1; | |
| 1542 UCHAR IdSlotFlags2; | |
| 1543 UCHAR MinorRevision; | |
| 1544 UCHAR MajorRevision; | |
| 1545 UCHAR Selections[26]; | |
| 1546 UCHAR FunctionFlags; | |
| 1547 UCHAR TypeString[80]; | |
| 1548 EISA_MEMORY_CONFIGURATION EisaMemory[9]; | |
| 1549 EISA_IRQ_CONFIGURATION EisaIrq[7]; | |
| 1550 EISA_DMA_CONFIGURATION EisaDma[4]; | |
| 1551 EISA_PORT_CONFIGURATION EisaPort[20]; | |
| 1552 UCHAR InitializationData[60]; | |
| 1553 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION; | |
| 1554 | |
| 1555 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */ | |
| 1556 | |
| 1557 #define EISA_FUNCTION_ENABLED 0x80 | |
| 1558 #define EISA_FREE_FORM_DATA 0x40 | |
| 1559 #define EISA_HAS_PORT_INIT_ENTRY 0x20 | |
| 1560 #define EISA_HAS_PORT_RANGE 0x10 | |
| 1561 #define EISA_HAS_DMA_ENTRY 0x08 | |
| 1562 #define EISA_HAS_IRQ_ENTRY 0x04 | |
| 1563 #define EISA_HAS_MEMORY_ENTRY 0x02 | |
| 1564 #define EISA_HAS_TYPE_ENTRY 0x01 | |
| 1565 #define EISA_HAS_INFORMATION \ | |
| 1566 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \ | |
| 1567 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY) | |
| 1568 | |
| 1569 typedef struct _CM_EISA_SLOT_INFORMATION { | |
| 1570 UCHAR ReturnCode; | |
| 1571 UCHAR ReturnFlags; | |
| 1572 UCHAR MajorRevision; | |
| 1573 UCHAR MinorRevision; | |
| 1574 USHORT Checksum; | |
| 1575 UCHAR NumberFunctions; | |
| 1576 UCHAR FunctionInformation; | |
| 1577 ULONG CompressedId; | |
| 1578 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION; | |
| 1579 | |
| 1580 /* CM_EISA_SLOT_INFORMATION.ReturnCode */ | |
| 1581 | |
| 1582 #define EISA_INVALID_SLOT 0x80 | |
| 1583 #define EISA_INVALID_FUNCTION 0x81 | |
| 1584 #define EISA_INVALID_CONFIGURATION 0x82 | |
| 1585 #define EISA_EMPTY_SLOT 0x83 | |
| 1586 #define EISA_INVALID_BIOS_CALL 0x86 | |
| 1587 | |
| 1588 typedef struct _CM_FLOPPY_DEVICE_DATA { | |
| 1589 USHORT Version; | |
| 1590 USHORT Revision; | |
| 1591 CHAR Size[8]; | |
| 1592 ULONG MaxDensity; | |
| 1593 ULONG MountDensity; | |
| 1594 UCHAR StepRateHeadUnloadTime; | |
| 1595 UCHAR HeadLoadTime; | |
| 1596 UCHAR MotorOffTime; | |
| 1597 UCHAR SectorLengthCode; | |
| 1598 UCHAR SectorPerTrack; | |
| 1599 UCHAR ReadWriteGapLength; | |
| 1600 UCHAR DataTransferLength; | |
| 1601 UCHAR FormatGapLength; | |
| 1602 UCHAR FormatFillCharacter; | |
| 1603 UCHAR HeadSettleTime; | |
| 1604 UCHAR MotorSettleTime; | |
| 1605 UCHAR MaximumTrackValue; | |
| 1606 UCHAR DataTransferRate; | |
| 1607 } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA; | |
| 1608 | |
| 1609 typedef struct _PNP_BUS_INFORMATION { | |
| 1610 GUID BusTypeGuid; | |
| 1611 INTERFACE_TYPE LegacyBusType; | |
| 1612 ULONG BusNumber; | |
| 1613 } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION; | |
| 1614 | |
| 1615 #include <pshpack1.h> | |
| 1616 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */ | |
| 1617 | |
| 1618 #define CmResourceTypeNull 0 | |
| 1619 #define CmResourceTypePort 1 | |
| 1620 #define CmResourceTypeInterrupt 2 | |
| 1621 #define CmResourceTypeMemory 3 | |
| 1622 #define CmResourceTypeDma 4 | |
| 1623 #define CmResourceTypeDeviceSpecific 5 | |
| 1624 #define CmResourceTypeBusNumber 6 | |
| 1625 #define CmResourceTypeMaximum 7 | |
| 1626 #define CmResourceTypeNonArbitrated 128 | |
| 1627 #define CmResourceTypeConfigData 128 | |
| 1628 #define CmResourceTypeDevicePrivate 129 | |
| 1629 #define CmResourceTypePcCardConfig 130 | |
| 1630 #define CmResourceTypeMfCardConfig 131 | |
| 1631 | |
| 1632 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */ | |
| 1633 | |
| 1634 typedef enum _CM_SHARE_DISPOSITION { | |
| 1635 CmResourceShareUndetermined, | |
| 1636 CmResourceShareDeviceExclusive, | |
| 1637 CmResourceShareDriverExclusive, | |
| 1638 CmResourceShareShared | |
| 1639 } CM_SHARE_DISPOSITION; | |
| 1640 | |
| 1641 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */ | |
| 1642 | |
| 1643 #define CM_RESOURCE_PORT_MEMORY 0x0000 | |
| 1644 #define CM_RESOURCE_PORT_IO 0x0001 | |
| 1645 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004 | |
| 1646 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008 | |
| 1647 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010 | |
| 1648 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020 | |
| 1649 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040 | |
| 1650 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080 | |
| 1651 | |
| 1652 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */ | |
| 1653 | |
| 1654 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000 | |
| 1655 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001 | |
| 1656 | |
| 1657 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */ | |
| 1658 | |
| 1659 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000 | |
| 1660 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001 | |
| 1661 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002 | |
| 1662 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004 | |
| 1663 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008 | |
| 1664 #define CM_RESOURCE_MEMORY_24 0x0010 | |
| 1665 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020 | |
| 1666 | |
| 1667 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */ | |
| 1668 | |
| 1669 #define CM_RESOURCE_DMA_8 0x0000 | |
| 1670 #define CM_RESOURCE_DMA_16 0x0001 | |
| 1671 #define CM_RESOURCE_DMA_32 0x0002 | |
| 1672 #define CM_RESOURCE_DMA_8_AND_16 0x0004 | |
| 1673 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008 | |
| 1674 #define CM_RESOURCE_DMA_TYPE_A 0x0010 | |
| 1675 #define CM_RESOURCE_DMA_TYPE_B 0x0020 | |
| 1676 #define CM_RESOURCE_DMA_TYPE_F 0x0040 | |
| 1677 | |
| 1678 typedef struct _CM_PARTIAL_RESOURCE_LIST { | |
| 1679 USHORT Version; | |
| 1680 USHORT Revision; | |
| 1681 ULONG Count; | |
| 1682 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]; | |
| 1683 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST; | |
| 1684 | |
| 1685 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR { | |
| 1686 INTERFACE_TYPE InterfaceType; | |
| 1687 ULONG BusNumber; | |
| 1688 CM_PARTIAL_RESOURCE_LIST PartialResourceList; | |
| 1689 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR; | |
| 1690 | |
| 1691 typedef struct _CM_RESOURCE_LIST { | |
| 1692 ULONG Count; | |
| 1693 CM_FULL_RESOURCE_DESCRIPTOR List[1]; | |
| 1694 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST; | |
| 1695 | |
| 1696 typedef struct _CM_INT13_DRIVE_PARAMETER { | |
| 1697 USHORT DriveSelect; | |
| 1698 ULONG MaxCylinders; | |
| 1699 USHORT SectorsPerTrack; | |
| 1700 USHORT MaxHeads; | |
| 1701 USHORT NumberDrives; | |
| 1702 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER; | |
| 1703 | |
| 1704 typedef struct _CM_PNP_BIOS_DEVICE_NODE | |
| 1705 { | |
| 1706 USHORT Size; | |
| 1707 UCHAR Node; | |
| 1708 ULONG ProductId; | |
| 1709 UCHAR DeviceType[3]; | |
| 1710 USHORT DeviceAttributes; | |
| 1711 } CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE; | |
| 1712 | |
| 1713 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK | |
| 1714 { | |
| 1715 UCHAR Signature[4]; | |
| 1716 UCHAR Revision; | |
| 1717 UCHAR Length; | |
| 1718 USHORT ControlField; | |
| 1719 UCHAR Checksum; | |
| 1720 ULONG EventFlagAddress; | |
| 1721 USHORT RealModeEntryOffset; | |
| 1722 USHORT RealModeEntrySegment; | |
| 1723 USHORT ProtectedModeEntryOffset; | |
| 1724 ULONG ProtectedModeCodeBaseAddress; | |
| 1725 ULONG OemDeviceId; | |
| 1726 USHORT RealModeDataBaseAddress; | |
| 1727 ULONG ProtectedModeDataBaseAddress; | |
| 1728 } CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK; | |
| 1729 | |
| 1730 #include <poppack.h> | |
| 1731 | |
| 1732 | |
| 1733 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA | |
| 1734 { | |
| 1735 ULONG BytesPerSector; | |
| 1736 ULONG NumberOfCylinders; | |
| 1737 ULONG SectorsPerTrack; | |
| 1738 ULONG NumberOfHeads; | |
| 1739 } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA; | |
| 1740 | |
| 1741 typedef struct _CM_KEYBOARD_DEVICE_DATA { | |
| 1742 USHORT Version; | |
| 1743 USHORT Revision; | |
| 1744 UCHAR Type; | |
| 1745 UCHAR Subtype; | |
| 1746 USHORT KeyboardFlags; | |
| 1747 } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA; | |
| 1748 | |
| 1749 #define KEYBOARD_INSERT_ON 0x08 | |
| 1750 #define KEYBOARD_CAPS_LOCK_ON 0x04 | |
| 1751 #define KEYBOARD_NUM_LOCK_ON 0x02 | |
| 1752 #define KEYBOARD_SCROLL_LOCK_ON 0x01 | |
| 1753 #define KEYBOARD_ALT_KEY_DOWN 0x80 | |
| 1754 #define KEYBOARD_CTRL_KEY_DOWN 0x40 | |
| 1755 #define KEYBOARD_LEFT_SHIFT_DOWN 0x20 | |
| 1756 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x10 | |
| 1757 | |
| 1758 typedef struct _CM_MCA_POS_DATA { | |
| 1759 USHORT AdapterId; | |
| 1760 UCHAR PosData1; | |
| 1761 UCHAR PosData2; | |
| 1762 UCHAR PosData3; | |
| 1763 UCHAR PosData4; | |
| 1764 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA; | |
| 1765 | |
| 1766 typedef struct CM_Power_Data_s { | |
| 1767 ULONG PD_Size; | |
| 1768 DEVICE_POWER_STATE PD_MostRecentPowerState; | |
| 1769 ULONG PD_Capabilities; | |
| 1770 ULONG PD_D1Latency; | |
| 1771 ULONG PD_D2Latency; | |
| 1772 ULONG PD_D3Latency; | |
| 1773 DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum]; | |
| 1774 } CM_POWER_DATA, *PCM_POWER_DATA; | |
| 1775 | |
| 1776 #define PDCAP_D0_SUPPORTED 0x00000001 | |
| 1777 #define PDCAP_D1_SUPPORTED 0x00000002 | |
| 1778 #define PDCAP_D2_SUPPORTED 0x00000004 | |
| 1779 #define PDCAP_D3_SUPPORTED 0x00000008 | |
| 1780 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010 | |
| 1781 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020 | |
| 1782 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040 | |
| 1783 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080 | |
| 1784 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100 | |
| 1785 | |
| 1786 typedef struct _CM_SCSI_DEVICE_DATA { | |
| 1787 USHORT Version; | |
| 1788 USHORT Revision; | |
| 1789 UCHAR HostIdentifier; | |
| 1790 } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA; | |
| 1791 | |
| 1792 typedef struct _CM_SERIAL_DEVICE_DATA { | |
| 1793 USHORT Version; | |
| 1794 USHORT Revision; | |
| 1795 ULONG BaudClock; | |
| 1796 } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA; | |
| 1797 | |
| 1798 typedef struct _IO_COUNTERS { | |
| 1799 ULONGLONG ReadOperationCount; | |
| 1800 ULONGLONG WriteOperationCount; | |
| 1801 ULONGLONG OtherOperationCount; | |
| 1802 ULONGLONG ReadTransferCount; | |
| 1803 ULONGLONG WriteTransferCount; | |
| 1804 ULONGLONG OtherTransferCount; | |
| 1805 } IO_COUNTERS, *PIO_COUNTERS; | |
| 1806 | |
| 1807 typedef struct _VM_COUNTERS | |
| 1808 { | |
| 1809 SIZE_T PeakVirtualSize; | |
| 1810 SIZE_T VirtualSize; | |
| 1811 ULONG PageFaultCount; | |
| 1812 SIZE_T PeakWorkingSetSize; | |
| 1813 SIZE_T WorkingSetSize; | |
| 1814 SIZE_T QuotaPeakPagedPoolUsage; | |
| 1815 SIZE_T QuotaPagedPoolUsage; | |
| 1816 SIZE_T QuotaPeakNonPagedPoolUsage; | |
| 1817 SIZE_T QuotaNonPagedPoolUsage; | |
| 1818 SIZE_T PagefileUsage; | |
| 1819 SIZE_T PeakPagefileUsage; | |
| 1820 } VM_COUNTERS, *PVM_COUNTERS; | |
| 1821 | |
| 1822 typedef struct _VM_COUNTERS_EX | |
| 1823 { | |
| 1824 SIZE_T PeakVirtualSize; | |
| 1825 SIZE_T VirtualSize; | |
| 1826 ULONG PageFaultCount; | |
| 1827 SIZE_T PeakWorkingSetSize; | |
| 1828 SIZE_T WorkingSetSize; | |
| 1829 SIZE_T QuotaPeakPagedPoolUsage; | |
| 1830 SIZE_T QuotaPagedPoolUsage; | |
| 1831 SIZE_T QuotaPeakNonPagedPoolUsage; | |
| 1832 SIZE_T QuotaNonPagedPoolUsage; | |
| 1833 SIZE_T PagefileUsage; | |
| 1834 SIZE_T PeakPagefileUsage; | |
| 1835 SIZE_T PrivateUsage; | |
| 1836 } VM_COUNTERS_EX, *PVM_COUNTERS_EX; | |
| 1837 | |
| 1838 typedef struct _POOLED_USAGE_AND_LIMITS | |
| 1839 { | |
| 1840 SIZE_T PeakPagedPoolUsage; | |
| 1841 SIZE_T PagedPoolUsage; | |
| 1842 SIZE_T PagedPoolLimit; | |
| 1843 SIZE_T PeakNonPagedPoolUsage; | |
| 1844 SIZE_T NonPagedPoolUsage; | |
| 1845 SIZE_T NonPagedPoolLimit; | |
| 1846 SIZE_T PeakPagefileUsage; | |
| 1847 SIZE_T PagefileUsage; | |
| 1848 SIZE_T PagefileLimit; | |
| 1849 } POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS; | |
| 1850 | |
| 1851 typedef enum _KINTERRUPT_POLARITY | |
| 1852 { | |
| 1853 InterruptPolarityUnknown, | |
| 1854 InterruptActiveHigh, | |
| 1855 InterruptActiveLow | |
| 1856 } KINTERRUPT_POLARITY, *PKINTERRUPT_POLARITY; | |
| 1857 | |
| 1858 typedef struct _IO_ERROR_LOG_PACKET { | |
| 1859 UCHAR MajorFunctionCode; | |
| 1860 UCHAR RetryCount; | |
| 1861 USHORT DumpDataSize; | |
| 1862 USHORT NumberOfStrings; | |
| 1863 USHORT StringOffset; | |
| 1864 USHORT EventCategory; | |
| 1865 NTSTATUS ErrorCode; | |
| 1866 ULONG UniqueErrorValue; | |
| 1867 NTSTATUS FinalStatus; | |
| 1868 ULONG SequenceNumber; | |
| 1869 ULONG IoControlCode; | |
| 1870 LARGE_INTEGER DeviceOffset; | |
| 1871 ULONG DumpData[1]; | |
| 1872 } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; | |
| 1873 | |
| 1874 typedef struct _IO_ERROR_LOG_MESSAGE { | |
| 1875 USHORT Type; | |
| 1876 USHORT Size; | |
| 1877 USHORT DriverNameLength; | |
| 1878 LARGE_INTEGER TimeStamp; | |
| 1879 ULONG DriverNameOffset; | |
| 1880 IO_ERROR_LOG_PACKET EntryData; | |
| 1881 } IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE; | |
| 1882 | |
| 1883 #define ERROR_LOG_LIMIT_SIZE 240 | |
| 1884 #define IO_ERROR_LOG_MESSAGE_HEADER_LENGTH (sizeof(IO_ERROR_LOG_MESSAGE) - \ | |
| 1885 sizeof(IO_ERROR_LOG_PACKET) + \ | |
| 1886 (sizeof(WCHAR) * 40)) | |
| 1887 #define ERROR_LOG_MESSAGE_LIMIT_SIZE \ | |
| 1888 (ERROR_LOG_LIMIT_SIZE + IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) | |
| 1889 #define IO_ERROR_LOG_MESSAGE_LENGTH \ | |
| 1890 ((PORT_MAXIMUM_MESSAGE_LENGTH > ERROR_LOG_MESSAGE_LIMIT_SIZE) ? \ | |
| 1891 ERROR_LOG_MESSAGE_LIMIT_SIZE : \ | |
| 1892 PORT_MAXIMUM_MESSAGE_LENGTH) | |
| 1893 #define ERROR_LOG_MAXIMUM_SIZE (IO_ERROR_LOG_MESSAGE_LENGTH - \ | |
| 1894 IO_ERROR_LOG_MESSAGE_HEADER_LENGTH) | |
| 1895 | |
| 1896 typedef struct _CONTROLLER_OBJECT { | |
| 1897 CSHORT Type; | |
| 1898 CSHORT Size; | |
| 1899 PVOID ControllerExtension; | |
| 1900 KDEVICE_QUEUE DeviceWaitQueue; | |
| 1901 ULONG Spare1; | |
| 1902 LARGE_INTEGER Spare2; | |
| 1903 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; | |
| 1904 | |
| 1905 typedef enum _DMA_WIDTH { | |
| 1906 Width8Bits, | |
| 1907 Width16Bits, | |
| 1908 Width32Bits, | |
| 1909 MaximumDmaWidth | |
| 1910 } DMA_WIDTH, *PDMA_WIDTH; | |
| 1911 | |
| 1912 typedef enum _DMA_SPEED { | |
| 1913 Compatible, | |
| 1914 TypeA, | |
| 1915 TypeB, | |
| 1916 TypeC, | |
| 1917 TypeF, | |
| 1918 MaximumDmaSpeed | |
| 1919 } DMA_SPEED, *PDMA_SPEED; | |
| 1920 | |
| 1921 /* DEVICE_DESCRIPTION.Version */ | |
| 1922 | |
| 1923 #define DEVICE_DESCRIPTION_VERSION 0x0000 | |
| 1924 #define DEVICE_DESCRIPTION_VERSION1 0x0001 | |
| 1925 #define DEVICE_DESCRIPTION_VERSION2 0x0002 | |
| 1926 | |
| 1927 typedef struct _DEVICE_DESCRIPTION { | |
| 1928 ULONG Version; | |
| 1929 BOOLEAN Master; | |
| 1930 BOOLEAN ScatterGather; | |
| 1931 BOOLEAN DemandMode; | |
| 1932 BOOLEAN AutoInitialize; | |
| 1933 BOOLEAN Dma32BitAddresses; | |
| 1934 BOOLEAN IgnoreCount; | |
| 1935 BOOLEAN Reserved1; | |
| 1936 BOOLEAN Dma64BitAddresses; | |
| 1937 ULONG BusNumber; | |
| 1938 ULONG DmaChannel; | |
| 1939 INTERFACE_TYPE InterfaceType; | |
| 1940 DMA_WIDTH DmaWidth; | |
| 1941 DMA_SPEED DmaSpeed; | |
| 1942 ULONG MaximumLength; | |
| 1943 ULONG DmaPort; | |
| 1944 } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION; | |
| 1945 | |
| 1946 /* VPB.Flags */ | |
| 1947 #define VPB_MOUNTED 0x0001 | |
| 1948 #define VPB_LOCKED 0x0002 | |
| 1949 #define VPB_PERSISTENT 0x0004 | |
| 1950 #define VPB_REMOVE_PENDING 0x0008 | |
| 1951 #define VPB_RAW_MOUNT 0x0010 | |
| 1952 | |
| 1953 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) | |
| 1954 | |
| 1955 typedef struct _VPB { | |
| 1956 CSHORT Type; | |
| 1957 CSHORT Size; | |
| 1958 USHORT Flags; | |
| 1959 USHORT VolumeLabelLength; | |
| 1960 struct _DEVICE_OBJECT *DeviceObject; | |
| 1961 struct _DEVICE_OBJECT *RealDevice; | |
| 1962 ULONG SerialNumber; | |
| 1963 ULONG ReferenceCount; | |
| 1964 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; | |
| 1965 } VPB, *PVPB; | |
| 1966 | |
| 1967 /* DEVICE_OBJECT.Flags */ | |
| 1968 | |
| 1969 #define DO_VERIFY_VOLUME 0x00000002 | |
| 1970 #define DO_BUFFERED_IO 0x00000004 | |
| 1971 #define DO_EXCLUSIVE 0x00000008 | |
| 1972 #define DO_DIRECT_IO 0x00000010 | |
| 1973 #define DO_MAP_IO_BUFFER 0x00000020 | |
| 1974 #define DO_DEVICE_HAS_NAME 0x00000040 | |
| 1975 #define DO_DEVICE_INITIALIZING 0x00000080 | |
| 1976 #define DO_SYSTEM_BOOT_PARTITION 0x00000100 | |
| 1977 #define DO_LONG_TERM_REQUESTS 0x00000200 | |
| 1978 #define DO_NEVER_LAST_DEVICE 0x00000400 | |
| 1979 #define DO_SHUTDOWN_REGISTERED 0x00000800 | |
| 1980 #define DO_BUS_ENUMERATED_DEVICE 0x00001000 | |
| 1981 #define DO_POWER_PAGABLE 0x00002000 | |
| 1982 #define DO_POWER_INRUSH 0x00004000 | |
| 1983 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 | |
| 1984 #define DO_XIP 0x00020000 | |
| 1985 | |
| 1986 /* DEVICE_OBJECT.Characteristics */ | |
| 1987 | |
| 1988 #define FILE_REMOVABLE_MEDIA 0x00000001 | |
| 1989 #define FILE_READ_ONLY_DEVICE 0x00000002 | |
| 1990 #define FILE_FLOPPY_DISKETTE 0x00000004 | |
| 1991 #define FILE_WRITE_ONCE_MEDIA 0x00000008 | |
| 1992 #define FILE_REMOTE_DEVICE 0x00000010 | |
| 1993 #define FILE_DEVICE_IS_MOUNTED 0x00000020 | |
| 1994 #define FILE_VIRTUAL_VOLUME 0x00000040 | |
| 1995 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 | |
| 1996 #define FILE_DEVICE_SECURE_OPEN 0x00000100 | |
| 1997 | |
| 1998 /* DEVICE_OBJECT.AlignmentRequirement */ | |
| 1999 | |
| 2000 #define FILE_BYTE_ALIGNMENT 0x00000000 | |
| 2001 #define FILE_WORD_ALIGNMENT 0x00000001 | |
| 2002 #define FILE_LONG_ALIGNMENT 0x00000003 | |
| 2003 #define FILE_QUAD_ALIGNMENT 0x00000007 | |
| 2004 #define FILE_OCTA_ALIGNMENT 0x0000000f | |
| 2005 #define FILE_32_BYTE_ALIGNMENT 0x0000001f | |
| 2006 #define FILE_64_BYTE_ALIGNMENT 0x0000003f | |
| 2007 #define FILE_128_BYTE_ALIGNMENT 0x0000007f | |
| 2008 #define FILE_256_BYTE_ALIGNMENT 0x000000ff | |
| 2009 #define FILE_512_BYTE_ALIGNMENT 0x000001ff | |
| 2010 | |
| 2011 /* DEVICE_OBJECT.DeviceType */ | |
| 2012 | |
| 2013 #define DEVICE_TYPE ULONG | |
| 2014 | |
| 2015 #define FILE_DEVICE_BEEP 0x00000001 | |
| 2016 #define FILE_DEVICE_CD_ROM 0x00000002 | |
| 2017 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 | |
| 2018 #define FILE_DEVICE_CONTROLLER 0x00000004 | |
| 2019 #define FILE_DEVICE_DATALINK 0x00000005 | |
| 2020 #define FILE_DEVICE_DFS 0x00000006 | |
| 2021 #define FILE_DEVICE_DISK 0x00000007 | |
| 2022 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 | |
| 2023 #define FILE_DEVICE_FILE_SYSTEM 0x00000009 | |
| 2024 #define FILE_DEVICE_INPORT_PORT 0x0000000a | |
| 2025 #define FILE_DEVICE_KEYBOARD 0x0000000b | |
| 2026 #define FILE_DEVICE_MAILSLOT 0x0000000c | |
| 2027 #define FILE_DEVICE_MIDI_IN 0x0000000d | |
| 2028 #define FILE_DEVICE_MIDI_OUT 0x0000000e | |
| 2029 #define FILE_DEVICE_MOUSE 0x0000000f | |
| 2030 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 | |
| 2031 #define FILE_DEVICE_NAMED_PIPE 0x00000011 | |
| 2032 #define FILE_DEVICE_NETWORK 0x00000012 | |
| 2033 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 | |
| 2034 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 | |
| 2035 #define FILE_DEVICE_NULL 0x00000015 | |
| 2036 #define FILE_DEVICE_PARALLEL_PORT 0x00000016 | |
| 2037 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 | |
| 2038 #define FILE_DEVICE_PRINTER 0x00000018 | |
| 2039 #define FILE_DEVICE_SCANNER 0x00000019 | |
| 2040 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a | |
| 2041 #define FILE_DEVICE_SERIAL_PORT 0x0000001b | |
| 2042 #define FILE_DEVICE_SCREEN 0x0000001c | |
| 2043 #define FILE_DEVICE_SOUND 0x0000001d | |
| 2044 #define FILE_DEVICE_STREAMS 0x0000001e | |
| 2045 #define FILE_DEVICE_TAPE 0x0000001f | |
| 2046 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 | |
| 2047 #define FILE_DEVICE_TRANSPORT 0x00000021 | |
| 2048 #define FILE_DEVICE_UNKNOWN 0x00000022 | |
| 2049 #define FILE_DEVICE_VIDEO 0x00000023 | |
| 2050 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 | |
| 2051 #define FILE_DEVICE_WAVE_IN 0x00000025 | |
| 2052 #define FILE_DEVICE_WAVE_OUT 0x00000026 | |
| 2053 #define FILE_DEVICE_8042_PORT 0x00000027 | |
| 2054 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 | |
| 2055 #define FILE_DEVICE_BATTERY 0x00000029 | |
| 2056 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a | |
| 2057 #define FILE_DEVICE_MODEM 0x0000002b | |
| 2058 #define FILE_DEVICE_VDM 0x0000002c | |
| 2059 #define FILE_DEVICE_MASS_STORAGE 0x0000002d | |
| 2060 #define FILE_DEVICE_SMB 0x0000002e | |
| 2061 #define FILE_DEVICE_KS 0x0000002f | |
| 2062 #define FILE_DEVICE_CHANGER 0x00000030 | |
| 2063 #define FILE_DEVICE_SMARTCARD 0x00000031 | |
| 2064 #define FILE_DEVICE_ACPI 0x00000032 | |
| 2065 #define FILE_DEVICE_DVD 0x00000033 | |
| 2066 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 | |
| 2067 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 | |
| 2068 #define FILE_DEVICE_DFS_VOLUME 0x00000036 | |
| 2069 #define FILE_DEVICE_SERENUM 0x00000037 | |
| 2070 #define FILE_DEVICE_TERMSRV 0x00000038 | |
| 2071 #define FILE_DEVICE_KSEC 0x00000039 | |
| 2072 #define FILE_DEVICE_FIPS 0x0000003a | |
| 2073 | |
| 2074 typedef struct _DEVICE_OBJECT { | |
| 2075 CSHORT Type; | |
| 2076 USHORT Size; | |
| 2077 LONG ReferenceCount; | |
| 2078 struct _DRIVER_OBJECT *DriverObject; | |
| 2079 struct _DEVICE_OBJECT *NextDevice; | |
| 2080 struct _DEVICE_OBJECT *AttachedDevice; | |
| 2081 struct _IRP *CurrentIrp; | |
| 2082 PIO_TIMER Timer; | |
| 2083 ULONG Flags; | |
| 2084 ULONG Characteristics; | |
| 2085 volatile PVPB Vpb; | |
| 2086 PVOID DeviceExtension; | |
| 2087 DEVICE_TYPE DeviceType; | |
| 2088 CCHAR StackSize; | |
| 2089 union { | |
| 2090 LIST_ENTRY ListEntry; | |
| 2091 WAIT_CONTEXT_BLOCK Wcb; | |
| 2092 } Queue; | |
| 2093 ULONG AlignmentRequirement; | |
| 2094 KDEVICE_QUEUE DeviceQueue; | |
| 2095 KDPC Dpc; | |
| 2096 ULONG ActiveThreadCount; | |
| 2097 PSECURITY_DESCRIPTOR SecurityDescriptor; | |
| 2098 KEVENT DeviceLock; | |
| 2099 USHORT SectorSize; | |
| 2100 USHORT Spare1; | |
| 2101 struct _DEVOBJ_EXTENSION *DeviceObjectExtension; | |
| 2102 PVOID Reserved; | |
| 2103 } DEVICE_OBJECT, *PDEVICE_OBJECT; | |
| 2104 | |
| 2105 typedef enum _DEVICE_RELATION_TYPE { | |
| 2106 BusRelations, | |
| 2107 EjectionRelations, | |
| 2108 PowerRelations, | |
| 2109 RemovalRelations, | |
| 2110 TargetDeviceRelation, | |
| 2111 SingleBusRelations | |
| 2112 } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE; | |
| 2113 | |
| 2114 typedef struct _DEVICE_RELATIONS { | |
| 2115 ULONG Count; | |
| 2116 PDEVICE_OBJECT Objects[1]; | |
| 2117 } DEVICE_RELATIONS, *PDEVICE_RELATIONS; | |
| 2118 | |
| 2119 typedef struct _SCATTER_GATHER_ELEMENT { | |
| 2120 PHYSICAL_ADDRESS Address; | |
| 2121 ULONG Length; | |
| 2122 ULONG_PTR Reserved; | |
| 2123 } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT; | |
| 2124 | |
| 2125 typedef struct _SCATTER_GATHER_LIST { | |
| 2126 ULONG NumberOfElements; | |
| 2127 ULONG_PTR Reserved; | |
| 2128 SCATTER_GATHER_ELEMENT Elements[1]; | |
| 2129 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; | |
| 2130 | |
| 2131 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001 | |
| 2132 #define MDL_PAGES_LOCKED 0x0002 | |
| 2133 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004 | |
| 2134 #define MDL_ALLOCATED_FIXED_SIZE 0x0008 | |
| 2135 #define MDL_PARTIAL 0x0010 | |
| 2136 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020 | |
| 2137 #define MDL_IO_PAGE_READ 0x0040 | |
| 2138 #define MDL_WRITE_OPERATION 0x0080 | |
| 2139 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100 | |
| 2140 #define MDL_FREE_EXTRA_PTES 0x0200 | |
| 2141 #define MDL_DESCRIBES_AWE 0x0400 | |
| 2142 #define MDL_IO_SPACE 0x0800 | |
| 2143 #define MDL_NETWORK_HEADER 0x1000 | |
| 2144 #define MDL_MAPPING_CAN_FAIL 0x2000 | |
| 2145 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000 | |
| 2146 #define MDL_INTERNAL 0x8000 | |
| 2147 | |
| 2148 | |
| 2149 #define MDL_MAPPING_FLAGS ( \ | |
| 2150 MDL_MAPPED_TO_SYSTEM_VA | \ | |
| 2151 MDL_PAGES_LOCKED | \ | |
| 2152 MDL_SOURCE_IS_NONPAGED_POOL | \ | |
| 2153 MDL_PARTIAL_HAS_BEEN_MAPPED | \ | |
| 2154 MDL_PARENT_MAPPED_SYSTEM_VA | \ | |
| 2155 MDL_SYSTEM_VA | \ | |
| 2156 MDL_IO_SPACE) | |
| 2157 | |
| 2158 typedef struct _DRIVER_EXTENSION { | |
| 2159 struct _DRIVER_OBJECT *DriverObject; | |
| 2160 PDRIVER_ADD_DEVICE AddDevice; | |
| 2161 ULONG Count; | |
| 2162 UNICODE_STRING ServiceKeyName; | |
| 2163 } DRIVER_EXTENSION, *PDRIVER_EXTENSION; | |
| 2164 | |
| 2165 #define DRVO_UNLOAD_INVOKED 0x00000001 | |
| 2166 #define DRVO_LEGACY_DRIVER 0x00000002 | |
| 2167 #define DRVO_BUILTIN_DRIVER 0x00000004 | |
| 2168 #define DRVO_REINIT_REGISTERED 0x00000008 | |
| 2169 #define DRVO_INITIALIZED 0x00000010 | |
| 2170 #define DRVO_BOOTREINIT_REGISTERED 0x00000020 | |
| 2171 #define DRVO_LEGACY_RESOURCES 0x00000040 | |
| 2172 | |
| 2173 typedef struct _DRIVER_OBJECT { | |
| 2174 CSHORT Type; | |
| 2175 CSHORT Size; | |
| 2176 PDEVICE_OBJECT DeviceObject; | |
| 2177 ULONG Flags; | |
| 2178 PVOID DriverStart; | |
| 2179 ULONG DriverSize; | |
| 2180 PVOID DriverSection; | |
| 2181 PDRIVER_EXTENSION DriverExtension; | |
| 2182 UNICODE_STRING DriverName; | |
| 2183 PUNICODE_STRING HardwareDatabase; | |
| 2184 struct _FAST_IO_DISPATCH *FastIoDispatch; | |
| 2185 PDRIVER_INITIALIZE DriverInit; | |
| 2186 PDRIVER_STARTIO DriverStartIo; | |
| 2187 PDRIVER_UNLOAD DriverUnload; | |
| 2188 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; | |
| 2189 } DRIVER_OBJECT; | |
| 2190 typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; | |
| 2191 | |
| 2192 typedef struct _DMA_ADAPTER { | |
| 2193 USHORT Version; | |
| 2194 USHORT Size; | |
| 2195 struct _DMA_OPERATIONS* DmaOperations; | |
| 2196 } DMA_ADAPTER, *PDMA_ADAPTER; | |
| 2197 | |
| 2198 typedef VOID | |
| 2199 (DDKAPI *PPUT_DMA_ADAPTER)( | |
| 2200 IN PDMA_ADAPTER DmaAdapter); | |
| 2201 | |
| 2202 typedef PVOID | |
| 2203 (DDKAPI *PALLOCATE_COMMON_BUFFER)( | |
| 2204 IN PDMA_ADAPTER DmaAdapter, | |
| 2205 IN ULONG Length, | |
| 2206 OUT PPHYSICAL_ADDRESS LogicalAddress, | |
| 2207 IN BOOLEAN CacheEnabled); | |
| 2208 | |
| 2209 typedef VOID | |
| 2210 (DDKAPI *PFREE_COMMON_BUFFER)( | |
| 2211 IN PDMA_ADAPTER DmaAdapter, | |
| 2212 IN ULONG Length, | |
| 2213 IN PHYSICAL_ADDRESS LogicalAddress, | |
| 2214 IN PVOID VirtualAddress, | |
| 2215 IN BOOLEAN CacheEnabled); | |
| 2216 | |
| 2217 typedef NTSTATUS | |
| 2218 (DDKAPI *PALLOCATE_ADAPTER_CHANNEL)( | |
| 2219 IN PDMA_ADAPTER DmaAdapter, | |
| 2220 IN PDEVICE_OBJECT DeviceObject, | |
| 2221 IN ULONG NumberOfMapRegisters, | |
| 2222 IN PDRIVER_CONTROL ExecutionRoutine, | |
| 2223 IN PVOID Context); | |
| 2224 | |
| 2225 typedef BOOLEAN | |
| 2226 (DDKAPI *PFLUSH_ADAPTER_BUFFERS)( | |
| 2227 IN PDMA_ADAPTER DmaAdapter, | |
| 2228 IN PMDL Mdl, | |
| 2229 IN PVOID MapRegisterBase, | |
| 2230 IN PVOID CurrentVa, | |
| 2231 IN ULONG Length, | |
| 2232 IN BOOLEAN WriteToDevice); | |
| 2233 | |
| 2234 typedef VOID | |
| 2235 (DDKAPI *PFREE_ADAPTER_CHANNEL)( | |
| 2236 IN PDMA_ADAPTER DmaAdapter); | |
| 2237 | |
| 2238 typedef VOID | |
| 2239 (DDKAPI *PFREE_MAP_REGISTERS)( | |
| 2240 IN PDMA_ADAPTER DmaAdapter, | |
| 2241 PVOID MapRegisterBase, | |
| 2242 ULONG NumberOfMapRegisters); | |
| 2243 | |
| 2244 typedef PHYSICAL_ADDRESS | |
| 2245 (DDKAPI *PMAP_TRANSFER)( | |
| 2246 IN PDMA_ADAPTER DmaAdapter, | |
| 2247 IN PMDL Mdl, | |
| 2248 IN PVOID MapRegisterBase, | |
| 2249 IN PVOID CurrentVa, | |
| 2250 IN OUT PULONG Length, | |
| 2251 IN BOOLEAN WriteToDevice); | |
| 2252 | |
| 2253 typedef ULONG | |
| 2254 (DDKAPI *PGET_DMA_ALIGNMENT)( | |
| 2255 IN PDMA_ADAPTER DmaAdapter); | |
| 2256 | |
| 2257 typedef ULONG | |
| 2258 (DDKAPI *PREAD_DMA_COUNTER)( | |
| 2259 IN PDMA_ADAPTER DmaAdapter); | |
| 2260 | |
| 2261 typedef NTSTATUS | |
| 2262 (DDKAPI *PGET_SCATTER_GATHER_LIST)( | |
| 2263 IN PDMA_ADAPTER DmaAdapter, | |
| 2264 IN PDEVICE_OBJECT DeviceObject, | |
| 2265 IN PMDL Mdl, | |
| 2266 IN PVOID CurrentVa, | |
| 2267 IN ULONG Length, | |
| 2268 IN PDRIVER_LIST_CONTROL ExecutionRoutine, | |
| 2269 IN PVOID Context, | |
| 2270 IN BOOLEAN WriteToDevice); | |
| 2271 | |
| 2272 typedef VOID | |
| 2273 (DDKAPI *PPUT_SCATTER_GATHER_LIST)( | |
| 2274 IN PDMA_ADAPTER DmaAdapter, | |
| 2275 IN PSCATTER_GATHER_LIST ScatterGather, | |
| 2276 IN BOOLEAN WriteToDevice); | |
| 2277 | |
| 2278 typedef NTSTATUS | |
| 2279 (DDKAPI *PCALCULATE_SCATTER_GATHER_LIST_SIZE)( | |
| 2280 IN PDMA_ADAPTER DmaAdapter, | |
| 2281 IN PMDL Mdl OPTIONAL, | |
| 2282 IN PVOID CurrentVa, | |
| 2283 IN ULONG Length, | |
| 2284 OUT PULONG ScatterGatherListSize, | |
| 2285 OUT PULONG pNumberOfMapRegisters OPTIONAL); | |
| 2286 | |
| 2287 typedef NTSTATUS | |
| 2288 (DDKAPI *PBUILD_SCATTER_GATHER_LIST)( | |
| 2289 IN PDMA_ADAPTER DmaAdapter, | |
| 2290 IN PDEVICE_OBJECT DeviceObject, | |
| 2291 IN PMDL Mdl, | |
| 2292 IN PVOID CurrentVa, | |
| 2293 IN ULONG Length, | |
| 2294 IN PDRIVER_LIST_CONTROL ExecutionRoutine, | |
| 2295 IN PVOID Context, | |
| 2296 IN BOOLEAN WriteToDevice, | |
| 2297 IN PVOID ScatterGatherBuffer, | |
| 2298 IN ULONG ScatterGatherLength); | |
| 2299 | |
| 2300 typedef NTSTATUS | |
| 2301 (DDKAPI *PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( | |
| 2302 IN PDMA_ADAPTER DmaAdapter, | |
| 2303 IN PSCATTER_GATHER_LIST ScatterGather, | |
| 2304 IN PMDL OriginalMdl, | |
| 2305 OUT PMDL *TargetMdl); | |
| 2306 | |
| 2307 typedef struct _DMA_OPERATIONS { | |
| 2308 ULONG Size; | |
| 2309 PPUT_DMA_ADAPTER PutDmaAdapter; | |
| 2310 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer; | |
| 2311 PFREE_COMMON_BUFFER FreeCommonBuffer; | |
| 2312 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; | |
| 2313 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; | |
| 2314 PFREE_ADAPTER_CHANNEL FreeAdapterChannel; | |
| 2315 PFREE_MAP_REGISTERS FreeMapRegisters; | |
| 2316 PMAP_TRANSFER MapTransfer; | |
| 2317 PGET_DMA_ALIGNMENT GetDmaAlignment; | |
| 2318 PREAD_DMA_COUNTER ReadDmaCounter; | |
| 2319 PGET_SCATTER_GATHER_LIST GetScatterGatherList; | |
| 2320 PPUT_SCATTER_GATHER_LIST PutScatterGatherList; | |
| 2321 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList; | |
| 2322 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList; | |
| 2323 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList; | |
| 2324 } DMA_OPERATIONS, *PDMA_OPERATIONS; | |
| 2325 | |
| 2326 typedef enum _ARBITER_REQUEST_SOURCE { | |
| 2327 ArbiterRequestUndefined = -1, | |
| 2328 ArbiterRequestLegacyReported, | |
| 2329 ArbiterRequestHalReported, | |
| 2330 ArbiterRequestLegacyAssigned, | |
| 2331 ArbiterRequestPnpDetected, | |
| 2332 ArbiterRequestPnpEnumerated | |
| 2333 } ARBITER_REQUEST_SOURCE; | |
| 2334 | |
| 2335 typedef enum _ARBITER_RESULT { | |
| 2336 ArbiterResultUndefined = -1, | |
| 2337 ArbiterResultSuccess, | |
| 2338 ArbiterResultExternalConflict, | |
| 2339 ArbiterResultNullRequest | |
| 2340 } ARBITER_RESULT; | |
| 2341 | |
| 2342 typedef enum _ARBITER_ACTION { | |
| 2343 ArbiterActionTestAllocation, | |
| 2344 ArbiterActionRetestAllocation, | |
| 2345 ArbiterActionCommitAllocation, | |
| 2346 ArbiterActionRollbackAllocation, | |
| 2347 ArbiterActionQueryAllocatedResources, | |
| 2348 ArbiterActionWriteReservedResources, | |
| 2349 ArbiterActionQueryConflict, | |
| 2350 ArbiterActionQueryArbitrate, | |
| 2351 ArbiterActionAddReserved, | |
| 2352 ArbiterActionBootAllocation | |
| 2353 } ARBITER_ACTION, *PARBITER_ACTION; | |
| 2354 | |
| 2355 typedef struct _ARBITER_CONFLICT_INFO { | |
| 2356 PDEVICE_OBJECT OwningObject; | |
| 2357 ULONGLONG Start; | |
| 2358 ULONGLONG End; | |
| 2359 } ARBITER_CONFLICT_INFO, *PARBITER_CONFLICT_INFO; | |
| 2360 | |
| 2361 typedef struct _ARBITER_PARAMETERS { | |
| 2362 union { | |
| 2363 struct { | |
| 2364 IN OUT PLIST_ENTRY ArbitrationList; | |
| 2365 IN ULONG AllocateFromCount; | |
| 2366 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; | |
| 2367 } TestAllocation; | |
| 2368 | |
| 2369 struct { | |
| 2370 IN OUT PLIST_ENTRY ArbitrationList; | |
| 2371 IN ULONG AllocateFromCount; | |
| 2372 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR AllocateFrom; | |
| 2373 } RetestAllocation; | |
| 2374 | |
| 2375 struct { | |
| 2376 IN OUT PLIST_ENTRY ArbitrationList; | |
| 2377 } BootAllocation; | |
| 2378 | |
| 2379 struct { | |
| 2380 OUT PCM_PARTIAL_RESOURCE_LIST *AllocatedResources; | |
| 2381 } QueryAllocatedResources; | |
| 2382 | |
| 2383 struct { | |
| 2384 IN PDEVICE_OBJECT PhysicalDeviceObject; | |
| 2385 IN PIO_RESOURCE_DESCRIPTOR ConflictingResource; | |
| 2386 OUT PULONG ConflictCount; | |
| 2387 OUT PARBITER_CONFLICT_INFO *Conflicts; | |
| 2388 } QueryConflict; | |
| 2389 | |
| 2390 struct { | |
| 2391 IN PLIST_ENTRY ArbitrationList; | |
| 2392 } QueryArbitrate; | |
| 2393 | |
| 2394 struct { | |
| 2395 IN PDEVICE_OBJECT ReserveDevice; | |
| 2396 } AddReserved; | |
| 2397 } Parameters; | |
| 2398 } ARBITER_PARAMETERS, *PARBITER_PARAMETERS; | |
| 2399 | |
| 2400 #define ARBITER_FLAG_BOOT_CONFIG 0x00000001 | |
| 2401 | |
| 2402 typedef struct _ARBITER_LIST_ENTRY { | |
| 2403 LIST_ENTRY ListEntry; | |
| 2404 ULONG AlternativeCount; | |
| 2405 PIO_RESOURCE_DESCRIPTOR Alternatives; | |
| 2406 PDEVICE_OBJECT PhysicalDeviceObject; | |
| 2407 ARBITER_REQUEST_SOURCE RequestSource; | |
| 2408 ULONG Flags; | |
| 2409 LONG_PTR WorkSpace; | |
| 2410 INTERFACE_TYPE InterfaceType; | |
| 2411 ULONG SlotNumber; | |
| 2412 ULONG BusNumber; | |
| 2413 PCM_PARTIAL_RESOURCE_DESCRIPTOR Assignment; | |
| 2414 PIO_RESOURCE_DESCRIPTOR SelectedAlternative; | |
| 2415 ARBITER_RESULT Result; | |
| 2416 } ARBITER_LIST_ENTRY, *PARBITER_LIST_ENTRY; | |
| 2417 | |
| 2418 typedef NTSTATUS | |
| 2419 (DDKAPI *PARBITER_HANDLER)( | |
| 2420 IN PVOID Context, | |
| 2421 IN ARBITER_ACTION Action, | |
| 2422 IN OUT PARBITER_PARAMETERS Parameters); | |
| 2423 | |
| 2424 #define ARBITER_PARTIAL 0x00000001 | |
| 2425 | |
| 2426 typedef struct _ARBITER_INTERFACE { | |
| 2427 USHORT Size; | |
| 2428 USHORT Version; | |
| 2429 PVOID Context; | |
| 2430 PINTERFACE_REFERENCE InterfaceReference; | |
| 2431 PINTERFACE_DEREFERENCE InterfaceDereference; | |
| 2432 PARBITER_HANDLER ArbiterHandler; | |
| 2433 ULONG Flags; | |
| 2434 } ARBITER_INTERFACE, *PARBITER_INTERFACE; | |
| 2435 | |
| 2436 typedef enum _KPROFILE_SOURCE { | |
| 2437 ProfileTime, | |
| 2438 ProfileAlignmentFixup, | |
| 2439 ProfileTotalIssues, | |
| 2440 ProfilePipelineDry, | |
| 2441 ProfileLoadInstructions, | |
| 2442 ProfilePipelineFrozen, | |
| 2443 ProfileBranchInstructions, | |
| 2444 ProfileTotalNonissues, | |
| 2445 ProfileDcacheMisses, | |
| 2446 ProfileIcacheMisses, | |
| 2447 ProfileCacheMisses, | |
| 2448 ProfileBranchMispredictions, | |
| 2449 ProfileStoreInstructions, | |
| 2450 ProfileFpInstructions, | |
| 2451 ProfileIntegerInstructions, | |
| 2452 Profile2Issue, | |
| 2453 Profile3Issue, | |
| 2454 Profile4Issue, | |
| 2455 ProfileSpecialInstructions, | |
| 2456 ProfileTotalCycles, | |
| 2457 ProfileIcacheIssues, | |
| 2458 ProfileDcacheAccesses, | |
| 2459 ProfileMemoryBarrierCycles, | |
| 2460 ProfileLoadLinkedIssues, | |
| 2461 ProfileMaximum | |
| 2462 } KPROFILE_SOURCE; | |
| 2463 | |
| 2464 typedef enum _HAL_QUERY_INFORMATION_CLASS { | |
| 2465 HalInstalledBusInformation, | |
| 2466 HalProfileSourceInformation, | |
| 2467 HalInformationClassUnused1, | |
| 2468 HalPowerInformation, | |
| 2469 HalProcessorSpeedInformation, | |
| 2470 HalCallbackInformation, | |
| 2471 HalMapRegisterInformation, | |
| 2472 HalMcaLogInformation, | |
| 2473 HalFrameBufferCachingInformation, | |
| 2474 HalDisplayBiosInformation, | |
| 2475 HalProcessorFeatureInformation, | |
| 2476 HalNumaTopologyInterface, | |
| 2477 HalErrorInformation, | |
| 2478 HalCmcLogInformation, | |
| 2479 HalCpeLogInformation, | |
| 2480 HalQueryMcaInterface, | |
| 2481 HalQueryAMLIIllegalIOPortAddresses, | |
| 2482 HalQueryMaxHotPlugMemoryAddress, | |
| 2483 HalPartitionIpiInterface, | |
| 2484 HalPlatformInformation, | |
| 2485 HalQueryProfileSourceList | |
| 2486 } HAL_QUERY_INFORMATION_CLASS, *PHAL_QUERY_INFORMATION_CLASS; | |
| 2487 | |
| 2488 typedef enum _HAL_SET_INFORMATION_CLASS { | |
| 2489 HalProfileSourceInterval, | |
| 2490 HalProfileSourceInterruptHandler, | |
| 2491 HalMcaRegisterDriver, | |
| 2492 HalKernelErrorHandler, | |
| 2493 HalCmcRegisterDriver, | |
| 2494 HalCpeRegisterDriver, | |
| 2495 HalMcaLog, | |
| 2496 HalCmcLog, | |
| 2497 HalCpeLog, | |
| 2498 HalGenerateCmcInterrupt | |
| 2499 } HAL_SET_INFORMATION_CLASS, *PHAL_SET_INFORMATION_CLASS; | |
| 2500 | |
| 2501 typedef struct _HAL_PROFILE_SOURCE_INTERVAL | |
| 2502 { | |
| 2503 KPROFILE_SOURCE Source; | |
| 2504 ULONG_PTR Interval; | |
| 2505 } HAL_PROFILE_SOURCE_INTERVAL, *PHAL_PROFILE_SOURCE_INTERVAL; | |
| 2506 | |
| 2507 typedef struct _HAL_PROFILE_SOURCE_INFORMATION | |
| 2508 { | |
| 2509 KPROFILE_SOURCE Source; | |
| 2510 BOOLEAN Supported; | |
| 2511 ULONG Interval; | |
| 2512 } HAL_PROFILE_SOURCE_INFORMATION, *PHAL_PROFILE_SOURCE_INFORMATION; | |
| 2513 | |
| 2514 typedef struct _MAP_REGISTER_ENTRY | |
| 2515 { | |
| 2516 PVOID MapRegister; | |
| 2517 BOOLEAN WriteToDevice; | |
| 2518 } MAP_REGISTER_ENTRY, *PMAP_REGISTER_ENTRY; | |
| 2519 | |
| 2520 typedef struct | |
| 2521 { | |
| 2522 UCHAR Type; | |
| 2523 BOOLEAN Valid; | |
| 2524 UCHAR Reserved[2]; | |
| 2525 PUCHAR TranslatedAddress; | |
| 2526 ULONG Length; | |
| 2527 } DEBUG_DEVICE_ADDRESS, *PDEBUG_DEVICE_ADDRESS; | |
| 2528 | |
| 2529 typedef struct | |
| 2530 { | |
| 2531 PHYSICAL_ADDRESS Start; | |
| 2532 PHYSICAL_ADDRESS MaxEnd; | |
| 2533 PVOID VirtualAddress; | |
| 2534 ULONG Length; | |
| 2535 BOOLEAN Cached; | |
| 2536 BOOLEAN Aligned; | |
| 2537 } DEBUG_MEMORY_REQUIREMENTS, *PDEBUG_MEMORY_REQUIREMENTS; | |
| 2538 | |
| 2539 typedef struct | |
| 2540 { | |
| 2541 ULONG Bus; | |
| 2542 ULONG Slot; | |
| 2543 USHORT VendorID; | |
| 2544 USHORT DeviceID; | |
| 2545 UCHAR BaseClass; | |
| 2546 UCHAR SubClass; | |
| 2547 UCHAR ProgIf; | |
| 2548 BOOLEAN Initialized; | |
| 2549 DEBUG_DEVICE_ADDRESS BaseAddress[6]; | |
| 2550 DEBUG_MEMORY_REQUIREMENTS Memory; | |
| 2551 } DEBUG_DEVICE_DESCRIPTOR, *PDEBUG_DEVICE_DESCRIPTOR; | |
| 2552 | |
| 2553 typedef enum _KD_OPTION { | |
| 2554 KD_OPTION_SET_BLOCK_ENABLE, | |
| 2555 } KD_OPTION; | |
| 2556 | |
| 2557 /* Function Type Defintions for Dispatch Functions */ | |
| 2558 struct _DEVICE_CONTROL_CONTEXT; | |
| 2559 | |
| 2560 typedef VOID | |
| 2561 (DDKAPI *PDEVICE_CONTROL_COMPLETION)( | |
| 2562 IN struct _DEVICE_CONTROL_CONTEXT *ControlContext); | |
| 2563 | |
| 2564 typedef struct _DEVICE_CONTROL_CONTEXT { | |
| 2565 NTSTATUS Status; | |
| 2566 PDEVICE_HANDLER_OBJECT DeviceHandler; | |
| 2567 PDEVICE_OBJECT DeviceObject; | |
| 2568 ULONG ControlCode; | |
| 2569 PVOID Buffer; | |
| 2570 PULONG BufferLength; | |
| 2571 PVOID Context; | |
| 2572 } DEVICE_CONTROL_CONTEXT, *PDEVICE_CONTROL_CONTEXT; | |
| 2573 | |
| 2574 typedef struct _PM_DISPATCH_TABLE { | |
| 2575 ULONG Signature; | |
| 2576 ULONG Version; | |
| 2577 PVOID Function[1]; | |
| 2578 } PM_DISPATCH_TABLE, *PPM_DISPATCH_TABLE; | |
| 2579 | |
| 2580 typedef enum _RESOURCE_TRANSLATION_DIRECTION { | |
| 2581 TranslateChildToParent, | |
| 2582 TranslateParentToChild | |
| 2583 } RESOURCE_TRANSLATION_DIRECTION; | |
| 2584 | |
| 2585 typedef NTSTATUS | |
| 2586 (DDKAPI *PTRANSLATE_RESOURCE_HANDLER)( | |
| 2587 IN PVOID Context, | |
| 2588 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Source, | |
| 2589 IN RESOURCE_TRANSLATION_DIRECTION Direction, | |
| 2590 IN ULONG AlternativesCount, | |
| 2591 IN IO_RESOURCE_DESCRIPTOR Alternatives[], | |
| 2592 IN PDEVICE_OBJECT PhysicalDeviceObject, | |
| 2593 OUT PCM_PARTIAL_RESOURCE_DESCRIPTOR Target); | |
| 2594 | |
| 2595 typedef NTSTATUS | |
| 2596 (DDKAPI *PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER)( | |
| 2597 IN PVOID Context, | |
| 2598 IN PIO_RESOURCE_DESCRIPTOR Source, | |
| 2599 IN PDEVICE_OBJECT PhysicalDeviceObject, | |
| 2600 OUT PULONG TargetCount, | |
| 2601 OUT PIO_RESOURCE_DESCRIPTOR *Target); | |
| 2602 | |
| 2603 typedef struct _TRANSLATOR_INTERFACE { | |
| 2604 USHORT Size; | |
| 2605 USHORT Version; | |
| 2606 PVOID Context; | |
| 2607 PINTERFACE_REFERENCE InterfaceReference; | |
| 2608 PINTERFACE_DEREFERENCE InterfaceDereference; | |
| 2609 PTRANSLATE_RESOURCE_HANDLER TranslateResources; | |
| 2610 PTRANSLATE_RESOURCE_REQUIREMENTS_HANDLER TranslateResourceRequirements; | |
| 2611 } TRANSLATOR_INTERFACE, *PTRANSLATOR_INTERFACE; | |
| 2612 | |
| 2613 typedef NTSTATUS | |
| 2614 (DDKAPI *pHalDeviceControl)( | |
| 2615 IN PDEVICE_HANDLER_OBJECT DeviceHandler, | |
| 2616 IN PDEVICE_OBJECT DeviceObject, | |
| 2617 IN ULONG ControlCode, | |
| 2618 IN OUT PVOID Buffer OPTIONAL, | |
| 2619 IN OUT PULONG BufferLength OPTIONAL, | |
| 2620 IN PVOID Context, | |
| 2621 IN PDEVICE_CONTROL_COMPLETION CompletionRoutine); | |
| 2622 | |
| 2623 typedef VOID | |
| 2624 (FASTCALL *pHalExamineMBR)( | |
| 2625 IN PDEVICE_OBJECT DeviceObject, | |
| 2626 IN ULONG SectorSize, | |
| 2627 IN ULONG MBRTypeIdentifier, | |
| 2628 OUT PVOID *Buffer); | |
| 2629 | |
| 2630 typedef VOID | |
| 2631 (FASTCALL *pHalIoAssignDriveLetters)( | |
| 2632 IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, | |
| 2633 IN PSTRING NtDeviceName, | |
| 2634 OUT PUCHAR NtSystemPath, | |
| 2635 OUT PSTRING NtSystemPathString); | |
| 2636 | |
| 2637 typedef NTSTATUS | |
| 2638 (FASTCALL *pHalIoReadPartitionTable)( | |
| 2639 IN PDEVICE_OBJECT DeviceObject, | |
| 2640 IN ULONG SectorSize, | |
| 2641 IN BOOLEAN ReturnRecognizedPartitions, | |
| 2642 OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); | |
| 2643 | |
| 2644 typedef NTSTATUS | |
| 2645 (FASTCALL *pHalIoSetPartitionInformation)( | |
| 2646 IN PDEVICE_OBJECT DeviceObject, | |
| 2647 IN ULONG SectorSize, | |
| 2648 IN ULONG PartitionNumber, | |
| 2649 IN ULONG PartitionType); | |
| 2650 | |
| 2651 typedef NTSTATUS | |
| 2652 (FASTCALL *pHalIoWritePartitionTable)( | |
| 2653 IN PDEVICE_OBJECT DeviceObject, | |
| 2654 IN ULONG SectorSize, | |
| 2655 IN ULONG SectorsPerTrack, | |
| 2656 IN ULONG NumberOfHeads, | |
| 2657 IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); | |
| 2658 | |
| 2659 typedef PBUS_HANDLER | |
| 2660 (FASTCALL *pHalHandlerForBus)( | |
| 2661 IN INTERFACE_TYPE InterfaceType, | |
| 2662 IN ULONG BusNumber); | |
| 2663 | |
| 2664 typedef VOID | |
| 2665 (FASTCALL *pHalReferenceBusHandler)( | |
| 2666 IN PBUS_HANDLER BusHandler); | |
| 2667 | |
| 2668 typedef NTSTATUS | |
| 2669 (DDKAPI *pHalQuerySystemInformation)( | |
| 2670 IN HAL_QUERY_INFORMATION_CLASS InformationClass, | |
| 2671 IN ULONG BufferSize, | |
| 2672 IN OUT PVOID Buffer, | |
| 2673 OUT PULONG ReturnedLength); | |
| 2674 | |
| 2675 typedef NTSTATUS | |
| 2676 (DDKAPI *pHalSetSystemInformation)( | |
| 2677 IN HAL_SET_INFORMATION_CLASS InformationClass, | |
| 2678 IN ULONG BufferSize, | |
| 2679 IN PVOID Buffer); | |
| 2680 | |
| 2681 typedef NTSTATUS | |
| 2682 (DDKAPI *pHalQueryBusSlots)( | |
| 2683 IN PBUS_HANDLER BusHandler, | |
| 2684 IN ULONG BufferSize, | |
| 2685 OUT PULONG SlotNumbers, | |
| 2686 OUT PULONG ReturnedLength); | |
| 2687 | |
| 2688 typedef NTSTATUS | |
| 2689 (DDKAPI *pHalInitPnpDriver)( | |
| 2690 VOID); | |
| 2691 | |
| 2692 typedef NTSTATUS | |
| 2693 (DDKAPI *pHalInitPowerManagement)( | |
| 2694 IN PPM_DISPATCH_TABLE PmDriverDispatchTable, | |
| 2695 OUT PPM_DISPATCH_TABLE *PmHalDispatchTable); | |
| 2696 | |
| 2697 typedef struct _DMA_ADAPTER* | |
| 2698 (DDKAPI *pHalGetDmaAdapter)( | |
| 2699 IN PVOID Context, | |
| 2700 IN struct _DEVICE_DESCRIPTION *DeviceDescriptor, | |
| 2701 OUT PULONG NumberOfMapRegisters); | |
| 2702 | |
| 2703 typedef NTSTATUS | |
| 2704 (DDKAPI *pHalGetInterruptTranslator)( | |
| 2705 IN INTERFACE_TYPE ParentInterfaceType, | |
| 2706 IN ULONG ParentBusNumber, | |
| 2707 IN INTERFACE_TYPE BridgeInterfaceType, | |
| 2708 IN USHORT Size, | |
| 2709 IN USHORT Version, | |
| 2710 OUT PTRANSLATOR_INTERFACE Translator, | |
| 2711 OUT PULONG BridgeBusNumber); | |
| 2712 | |
| 2713 typedef NTSTATUS | |
| 2714 (DDKAPI *pHalStartMirroring)( | |
| 2715 VOID); | |
| 2716 | |
| 2717 typedef NTSTATUS | |
| 2718 (DDKAPI *pHalEndMirroring)( | |
| 2719 IN ULONG PassNumber); | |
| 2720 | |
| 2721 typedef NTSTATUS | |
| 2722 (DDKAPI *pHalMirrorPhysicalMemory)( | |
| 2723 IN PHYSICAL_ADDRESS PhysicalAddress, | |
| 2724 IN LARGE_INTEGER NumberOfBytes); | |
| 2725 | |
| 2726 typedef NTSTATUS | |
| 2727 (DDKAPI *pHalMirrorVerify)( | |
| 2728 IN PHYSICAL_ADDRESS PhysicalAddress, | |
| 2729 IN LARGE_INTEGER NumberOfBytes); | |
| 2730 | |
| 2731 typedef VOID | |
| 2732 (DDKAPI *pHalEndOfBoot)( | |
| 2733 VOID); | |
| 2734 | |
| 2735 typedef | |
| 2736 BOOLEAN | |
| 2737 (DDKAPI *pHalTranslateBusAddress)( | |
| 2738 IN INTERFACE_TYPE InterfaceType, | |
| 2739 IN ULONG BusNumber, | |
| 2740 IN PHYSICAL_ADDRESS BusAddress, | |
| 2741 IN OUT PULONG AddressSpace, | |
| 2742 OUT PPHYSICAL_ADDRESS TranslatedAddress | |
| 2743 ); | |
| 2744 | |
| 2745 typedef | |
| 2746 NTSTATUS | |
| 2747 (DDKAPI *pHalAssignSlotResources)( | |
| 2748 IN PUNICODE_STRING RegistryPath, | |
| 2749 IN PUNICODE_STRING DriverClassName OPTIONAL, | |
| 2750 IN PDRIVER_OBJECT DriverObject, | |
| 2751 IN PDEVICE_OBJECT DeviceObject, | |
| 2752 IN INTERFACE_TYPE BusType, | |
| 2753 IN ULONG BusNumber, | |
| 2754 IN ULONG SlotNumber, | |
| 2755 IN OUT PCM_RESOURCE_LIST *AllocatedResources | |
| 2756 ); | |
| 2757 | |
| 2758 typedef | |
| 2759 VOID | |
| 2760 (DDKAPI *pHalHaltSystem)( | |
| 2761 VOID | |
| 2762 ); | |
| 2763 | |
| 2764 typedef | |
| 2765 BOOLEAN | |
| 2766 (DDKAPI *pHalResetDisplay)( | |
| 2767 VOID | |
| 2768 ); | |
| 2769 | |
| 2770 typedef | |
| 2771 UCHAR | |
| 2772 (DDKAPI *pHalVectorToIDTEntry)( | |
| 2773 ULONG Vector | |
| 2774 ); | |
| 2775 | |
| 2776 typedef | |
| 2777 BOOLEAN | |
| 2778 (DDKAPI *pHalFindBusAddressTranslation)( | |
| 2779 IN PHYSICAL_ADDRESS BusAddress, | |
| 2780 IN OUT PULONG AddressSpace, | |
| 2781 OUT PPHYSICAL_ADDRESS TranslatedAddress, | |
| 2782 IN OUT PULONG_PTR Context, | |
| 2783 IN BOOLEAN NextBus | |
| 2784 ); | |
| 2785 | |
| 2786 typedef | |
| 2787 NTSTATUS | |
| 2788 (DDKAPI *pKdSetupPciDeviceForDebugging)( | |
| 2789 IN PVOID LoaderBlock OPTIONAL, | |
| 2790 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice | |
| 2791 ); | |
| 2792 | |
| 2793 typedef | |
| 2794 NTSTATUS | |
| 2795 (DDKAPI *pKdReleasePciDeviceForDebugging)( | |
| 2796 IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice | |
| 2797 ); | |
| 2798 | |
| 2799 typedef | |
| 2800 PVOID | |
| 2801 (DDKAPI *pKdGetAcpiTablePhase0)( | |
| 2802 IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, | |
| 2803 IN ULONG Signature | |
| 2804 ); | |
| 2805 | |
| 2806 typedef | |
| 2807 VOID | |
| 2808 (DDKAPI *pKdCheckPowerButton)( | |
| 2809 VOID | |
| 2810 ); | |
| 2811 | |
| 2812 typedef | |
| 2813 ULONG | |
| 2814 (DDKAPI *pHalGetInterruptVector)( | |
| 2815 IN INTERFACE_TYPE InterfaceType, | |
| 2816 IN ULONG BusNumber, | |
| 2817 IN ULONG BusInterruptLevel, | |
| 2818 IN ULONG BusInterruptVector, | |
| 2819 OUT PKIRQL Irql, | |
| 2820 OUT PKAFFINITY Affinity | |
| 2821 ); | |
| 2822 | |
| 2823 typedef | |
| 2824 NTSTATUS | |
| 2825 (DDKAPI *pHalGetVectorInput)( | |
| 2826 IN ULONG Vector, | |
| 2827 IN KAFFINITY Affinity, | |
| 2828 OUT PULONG Input, | |
| 2829 OUT PKINTERRUPT_POLARITY Polarity | |
| 2830 ); | |
| 2831 | |
| 2832 typedef | |
| 2833 PVOID | |
| 2834 (DDKAPI *pKdMapPhysicalMemory64)( | |
| 2835 IN PHYSICAL_ADDRESS PhysicalAddress, | |
| 2836 IN ULONG NumberPages | |
| 2837 ); | |
| 2838 | |
| 2839 typedef | |
| 2840 VOID | |
| 2841 (DDKAPI *pKdUnmapVirtualAddress)( | |
| 2842 IN PVOID VirtualAddress, | |
| 2843 IN ULONG NumberPages | |
| 2844 ); | |
| 2845 | |
| 2846 typedef | |
| 2847 ULONG | |
| 2848 (DDKAPI *pKdGetPciDataByOffset)( | |
| 2849 IN ULONG BusNumber, | |
| 2850 IN ULONG SlotNumber, | |
| 2851 OUT PVOID Buffer, | |
| 2852 IN ULONG Offset, | |
| 2853 IN ULONG Length | |
| 2854 ); | |
| 2855 | |
| 2856 typedef | |
| 2857 ULONG | |
| 2858 (DDKAPI *pKdSetPciDataByOffset)( | |
| 2859 IN ULONG BusNumber, | |
| 2860 IN ULONG SlotNumber, | |
| 2861 IN PVOID Buffer, | |
| 2862 IN ULONG Offset, | |
| 2863 IN ULONG Length | |
| 2864 ); | |
| 2865 | |
| 2866 typedef BOOLEAN | |
| 2867 (DDKAPI *PHAL_RESET_DISPLAY_PARAMETERS)( | |
| 2868 ULONG Columns, ULONG Rows); | |
| 2869 | |
| 2870 typedef struct { | |
| 2871 ULONG Version; | |
| 2872 pHalQuerySystemInformation HalQuerySystemInformation; | |
| 2873 pHalSetSystemInformation HalSetSystemInformation; | |
| 2874 pHalQueryBusSlots HalQueryBusSlots; | |
| 2875 ULONG Spare1; | |
| 2876 pHalExamineMBR HalExamineMBR; | |
| 2877 pHalIoAssignDriveLetters HalIoAssignDriveLetters; | |
| 2878 pHalIoReadPartitionTable HalIoReadPartitionTable; | |
| 2879 pHalIoSetPartitionInformation HalIoSetPartitionInformation; | |
| 2880 pHalIoWritePartitionTable HalIoWritePartitionTable; | |
| 2881 pHalHandlerForBus HalReferenceHandlerForBus; | |
| 2882 pHalReferenceBusHandler HalReferenceBusHandler; | |
| 2883 pHalReferenceBusHandler HalDereferenceBusHandler; | |
| 2884 pHalInitPnpDriver HalInitPnpDriver; | |
| 2885 pHalInitPowerManagement HalInitPowerManagement; | |
| 2886 pHalGetDmaAdapter HalGetDmaAdapter; | |
| 2887 pHalGetInterruptTranslator HalGetInterruptTranslator; | |
| 2888 pHalStartMirroring HalStartMirroring; | |
| 2889 pHalEndMirroring HalEndMirroring; | |
| 2890 pHalMirrorPhysicalMemory HalMirrorPhysicalMemory; | |
| 2891 pHalEndOfBoot HalEndOfBoot; | |
| 2892 pHalMirrorVerify HalMirrorVerify; | |
| 2893 } HAL_DISPATCH, *PHAL_DISPATCH; | |
| 2894 | |
| 2895 #if defined(_NTDRIVER_) || defined(_NTDDK_) || defined(_NTHAL_) | |
| 2896 extern NTSYSAPI PHAL_DISPATCH HalDispatchTable; | |
| 2897 #define HALDISPATCH ((PHAL_DISPATCH)&HalDispatchTable) | |
| 2898 #else | |
| 2899 extern __declspec(dllexport) HAL_DISPATCH HalDispatchTable; | |
| 2900 #define HALDISPATCH (&HalDispatchTable) | |
| 2901 #endif | |
| 2902 | |
| 2903 #define HAL_DISPATCH_VERSION 3 | |
| 2904 #define HalDispatchTableVersion HALDISPATCH->Version | |
| 2905 #define HalQuerySystemInformation HALDISPATCH->HalQuerySystemInformation | |
| 2906 #define HalSetSystemInformation HALDISPATCH->HalSetSystemInformation | |
| 2907 #define HalQueryBusSlots HALDISPATCH->HalQueryBusSlots | |
| 2908 #define HalReferenceHandlerForBus HALDISPATCH->HalReferenceHandlerForBus | |
| 2909 #define HalReferenceBusHandler HALDISPATCH->HalReferenceBusHandler | |
| 2910 #define HalDereferenceBusHandler HALDISPATCH->HalDereferenceBusHandler | |
| 2911 #define HalInitPnpDriver HALDISPATCH->HalInitPnpDriver | |
| 2912 #define HalInitPowerManagement HALDISPATCH->HalInitPowerManagement | |
| 2913 #define HalGetDmaAdapter HALDISPATCH->HalGetDmaAdapter | |
| 2914 #define HalGetInterruptTranslator HALDISPATCH->HalGetInterruptTranslator | |
| 2915 #define HalStartMirroring HALDISPATCH->HalStartMirroring | |
| 2916 #define HalEndMirroring HALDISPATCH->HalEndMirroring | |
| 2917 #define HalMirrorPhysicalMemory HALDISPATCH->HalMirrorPhysicalMemory | |
| 2918 #define HalEndOfBoot HALDISPATCH->HalEndOfBoot | |
| 2919 #define HalMirrorVerify HALDISPATCH->HalMirrorVerify | |
| 2920 | |
| 2921 typedef enum _FILE_INFORMATION_CLASS { | |
| 2922 FileDirectoryInformation = 1, | |
| 2923 FileFullDirectoryInformation, | |
| 2924 FileBothDirectoryInformation, | |
| 2925 FileBasicInformation, | |
| 2926 FileStandardInformation, | |
| 2927 FileInternalInformation, | |
| 2928 FileEaInformation, | |
| 2929 FileAccessInformation, | |
| 2930 FileNameInformation, | |
| 2931 FileRenameInformation, | |
| 2932 FileLinkInformation, | |
| 2933 FileNamesInformation, | |
| 2934 FileDispositionInformation, | |
| 2935 FilePositionInformation, | |
| 2936 FileFullEaInformation, | |
| 2937 FileModeInformation, | |
| 2938 FileAlignmentInformation, | |
| 2939 FileAllInformation, | |
| 2940 FileAllocationInformation, | |
| 2941 FileEndOfFileInformation, | |
| 2942 FileAlternateNameInformation, | |
| 2943 FileStreamInformation, | |
| 2944 FilePipeInformation, | |
| 2945 FilePipeLocalInformation, | |
| 2946 FilePipeRemoteInformation, | |
| 2947 FileMailslotQueryInformation, | |
| 2948 FileMailslotSetInformation, | |
| 2949 FileCompressionInformation, | |
| 2950 FileObjectIdInformation, | |
| 2951 FileCompletionInformation, | |
| 2952 FileMoveClusterInformation, | |
| 2953 FileQuotaInformation, | |
| 2954 FileReparsePointInformation, | |
| 2955 FileNetworkOpenInformation, | |
| 2956 FileAttributeTagInformation, | |
| 2957 FileTrackingInformation, | |
| 2958 FileIdBothDirectoryInformation, | |
| 2959 FileIdFullDirectoryInformation, | |
| 2960 FileValidDataLengthInformation, | |
| 2961 FileShortNameInformation, | |
| 2962 FileMaximumInformation | |
| 2963 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; | |
| 2964 | |
| 2965 typedef struct _FILE_POSITION_INFORMATION { | |
| 2966 LARGE_INTEGER CurrentByteOffset; | |
| 2967 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; | |
| 2968 | |
| 2969 typedef struct _FILE_ALIGNMENT_INFORMATION { | |
| 2970 ULONG AlignmentRequirement; | |
| 2971 } FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; | |
| 2972 | |
| 2973 typedef struct _FILE_NAME_INFORMATION { | |
| 2974 ULONG FileNameLength; | |
| 2975 WCHAR FileName[1]; | |
| 2976 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; | |
| 2977 | |
| 2978 #include <pshpack8.h> | |
| 2979 typedef struct _FILE_BASIC_INFORMATION { | |
| 2980 LARGE_INTEGER CreationTime; | |
| 2981 LARGE_INTEGER LastAccessTime; | |
| 2982 LARGE_INTEGER LastWriteTime; | |
| 2983 LARGE_INTEGER ChangeTime; | |
| 2984 ULONG FileAttributes; | |
| 2985 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; | |
| 2986 #include <poppack.h> | |
| 2987 | |
| 2988 typedef struct _FILE_STANDARD_INFORMATION { | |
| 2989 LARGE_INTEGER AllocationSize; | |
| 2990 LARGE_INTEGER EndOfFile; | |
| 2991 ULONG NumberOfLinks; | |
| 2992 BOOLEAN DeletePending; | |
| 2993 BOOLEAN Directory; | |
| 2994 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; | |
| 2995 | |
| 2996 typedef struct _FILE_NETWORK_OPEN_INFORMATION { | |
| 2997 LARGE_INTEGER CreationTime; | |
| 2998 LARGE_INTEGER LastAccessTime; | |
| 2999 LARGE_INTEGER LastWriteTime; | |
| 3000 LARGE_INTEGER ChangeTime; | |
| 3001 LARGE_INTEGER AllocationSize; | |
| 3002 LARGE_INTEGER EndOfFile; | |
| 3003 ULONG FileAttributes; | |
| 3004 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; | |
| 3005 | |
| 3006 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { | |
| 3007 ULONG FileAttributes; | |
| 3008 ULONG ReparseTag; | |
| 3009 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; | |
| 3010 | |
| 3011 typedef struct _FILE_DISPOSITION_INFORMATION { | |
| 3012 BOOLEAN DeleteFile; | |
| 3013 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; | |
| 3014 | |
| 3015 typedef struct _FILE_END_OF_FILE_INFORMATION { | |
| 3016 LARGE_INTEGER EndOfFile; | |
| 3017 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; | |
| 3018 | |
| 3019 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { | |
| 3020 LARGE_INTEGER ValidDataLength; | |
| 3021 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; | |
| 3022 | |
| 3023 typedef union _FILE_SEGMENT_ELEMENT { | |
| 3024 PVOID64 Buffer; | |
| 3025 ULONGLONG Alignment; | |
| 3026 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT; | |
| 3027 | |
| 3028 typedef enum _FSINFOCLASS { | |
| 3029 FileFsVolumeInformation = 1, | |
| 3030 FileFsLabelInformation, | |
| 3031 FileFsSizeInformation, | |
| 3032 FileFsDeviceInformation, | |
| 3033 FileFsAttributeInformation, | |
| 3034 FileFsControlInformation, | |
| 3035 FileFsFullSizeInformation, | |
| 3036 FileFsObjectIdInformation, | |
| 3037 FileFsDriverPathInformation, | |
| 3038 FileFsMaximumInformation | |
| 3039 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; | |
| 3040 | |
| 3041 typedef struct _FILE_FS_DEVICE_INFORMATION { | |
| 3042 DEVICE_TYPE DeviceType; | |
| 3043 ULONG Characteristics; | |
| 3044 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; | |
| 3045 | |
| 3046 typedef struct _FILE_FULL_EA_INFORMATION { | |
| 3047 ULONG NextEntryOffset; | |
| 3048 UCHAR Flags; | |
| 3049 UCHAR EaNameLength; | |
| 3050 USHORT EaValueLength; | |
| 3051 CHAR EaName[1]; | |
| 3052 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; | |
| 3053 | |
| 3054 /* ERESOURCE.Flag */ | |
| 3055 | |
| 3056 #define ResourceNeverExclusive 0x0010 | |
| 3057 #define ResourceReleaseByOtherThread 0x0020 | |
| 3058 #define ResourceOwnedExclusive 0x0080 | |
| 3059 | |
| 3060 #define RESOURCE_HASH_TABLE_SIZE 64 | |
| 3061 | |
| 3062 typedef struct _DEVOBJ_EXTENSION | |
| 3063 { | |
| 3064 CSHORT Type; | |
| 3065 USHORT Size; | |
| 3066 PDEVICE_OBJECT DeviceObject; | |
| 3067 } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION; | |
| 3068 | |
| 3069 typedef BOOLEAN | |
| 3070 (DDKAPI *PFAST_IO_CHECK_IF_POSSIBLE)( | |
| 3071 IN struct _FILE_OBJECT *FileObject, | |
| 3072 IN PLARGE_INTEGER FileOffset, | |
| 3073 IN ULONG Length, | |
| 3074 IN BOOLEAN Wait, | |
| 3075 IN ULONG LockKey, | |
| 3076 IN BOOLEAN CheckForReadOperation, | |
| 3077 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3078 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3079 | |
| 3080 typedef BOOLEAN | |
| 3081 (DDKAPI *PFAST_IO_READ)( | |
| 3082 IN struct _FILE_OBJECT *FileObject, | |
| 3083 IN PLARGE_INTEGER FileOffset, | |
| 3084 IN ULONG Length, | |
| 3085 IN BOOLEAN Wait, | |
| 3086 IN ULONG LockKey, | |
| 3087 OUT PVOID Buffer, | |
| 3088 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3089 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3090 | |
| 3091 typedef BOOLEAN | |
| 3092 (DDKAPI *PFAST_IO_WRITE)( | |
| 3093 IN struct _FILE_OBJECT *FileObject, | |
| 3094 IN PLARGE_INTEGER FileOffset, | |
| 3095 IN ULONG Length, | |
| 3096 IN BOOLEAN Wait, | |
| 3097 IN ULONG LockKey, | |
| 3098 IN PVOID Buffer, | |
| 3099 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3100 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3101 | |
| 3102 typedef BOOLEAN | |
| 3103 (DDKAPI *PFAST_IO_QUERY_BASIC_INFO)( | |
| 3104 IN struct _FILE_OBJECT *FileObject, | |
| 3105 IN BOOLEAN Wait, | |
| 3106 OUT PFILE_BASIC_INFORMATION Buffer, | |
| 3107 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3108 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3109 | |
| 3110 typedef BOOLEAN | |
| 3111 (DDKAPI *PFAST_IO_QUERY_STANDARD_INFO)( | |
| 3112 IN struct _FILE_OBJECT *FileObject, | |
| 3113 IN BOOLEAN Wait, | |
| 3114 OUT PFILE_STANDARD_INFORMATION Buffer, | |
| 3115 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3116 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3117 | |
| 3118 typedef BOOLEAN | |
| 3119 (DDKAPI *PFAST_IO_LOCK)( | |
| 3120 IN struct _FILE_OBJECT *FileObject, | |
| 3121 IN PLARGE_INTEGER FileOffset, | |
| 3122 IN PLARGE_INTEGER Length, | |
| 3123 PEPROCESS ProcessId, | |
| 3124 ULONG Key, | |
| 3125 BOOLEAN FailImmediately, | |
| 3126 BOOLEAN ExclusiveLock, | |
| 3127 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3128 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3129 | |
| 3130 typedef BOOLEAN | |
| 3131 (DDKAPI *PFAST_IO_UNLOCK_SINGLE)( | |
| 3132 IN struct _FILE_OBJECT *FileObject, | |
| 3133 IN PLARGE_INTEGER FileOffset, | |
| 3134 IN PLARGE_INTEGER Length, | |
| 3135 PEPROCESS ProcessId, | |
| 3136 ULONG Key, | |
| 3137 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3138 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3139 | |
| 3140 typedef BOOLEAN | |
| 3141 (DDKAPI *PFAST_IO_UNLOCK_ALL)( | |
| 3142 IN struct _FILE_OBJECT *FileObject, | |
| 3143 PEPROCESS ProcessId, | |
| 3144 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3145 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3146 | |
| 3147 typedef BOOLEAN | |
| 3148 (DDKAPI *PFAST_IO_UNLOCK_ALL_BY_KEY)( | |
| 3149 IN struct _FILE_OBJECT *FileObject, | |
| 3150 PVOID ProcessId, | |
| 3151 ULONG Key, | |
| 3152 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3153 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3154 | |
| 3155 typedef BOOLEAN | |
| 3156 (DDKAPI *PFAST_IO_DEVICE_CONTROL)( | |
| 3157 IN struct _FILE_OBJECT *FileObject, | |
| 3158 IN BOOLEAN Wait, | |
| 3159 IN PVOID InputBuffer OPTIONAL, | |
| 3160 IN ULONG InputBufferLength, | |
| 3161 OUT PVOID OutputBuffer OPTIONAL, | |
| 3162 IN ULONG OutputBufferLength, | |
| 3163 IN ULONG IoControlCode, | |
| 3164 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3165 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3166 | |
| 3167 typedef VOID | |
| 3168 (DDKAPI *PFAST_IO_ACQUIRE_FILE)( | |
| 3169 IN struct _FILE_OBJECT *FileObject); | |
| 3170 | |
| 3171 typedef VOID | |
| 3172 (DDKAPI *PFAST_IO_RELEASE_FILE)( | |
| 3173 IN struct _FILE_OBJECT *FileObject); | |
| 3174 | |
| 3175 typedef VOID | |
| 3176 (DDKAPI *PFAST_IO_DETACH_DEVICE)( | |
| 3177 IN struct _DEVICE_OBJECT *SourceDevice, | |
| 3178 IN struct _DEVICE_OBJECT *TargetDevice); | |
| 3179 | |
| 3180 typedef BOOLEAN | |
| 3181 (DDKAPI *PFAST_IO_QUERY_NETWORK_OPEN_INFO)( | |
| 3182 IN struct _FILE_OBJECT *FileObject, | |
| 3183 IN BOOLEAN Wait, | |
| 3184 OUT struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, | |
| 3185 OUT struct _IO_STATUS_BLOCK *IoStatus, | |
| 3186 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3187 | |
| 3188 typedef NTSTATUS | |
| 3189 (DDKAPI *PFAST_IO_ACQUIRE_FOR_MOD_WRITE)( | |
| 3190 IN struct _FILE_OBJECT *FileObject, | |
| 3191 IN PLARGE_INTEGER EndingOffset, | |
| 3192 OUT struct _ERESOURCE **ResourceToRelease, | |
| 3193 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3194 | |
| 3195 typedef BOOLEAN | |
| 3196 (DDKAPI *PFAST_IO_MDL_READ)( | |
| 3197 IN struct _FILE_OBJECT *FileObject, | |
| 3198 IN PLARGE_INTEGER FileOffset, | |
| 3199 IN ULONG Length, | |
| 3200 IN ULONG LockKey, | |
| 3201 OUT PMDL *MdlChain, | |
| 3202 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3203 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3204 | |
| 3205 typedef BOOLEAN | |
| 3206 (DDKAPI *PFAST_IO_MDL_READ_COMPLETE)( | |
| 3207 IN struct _FILE_OBJECT *FileObject, | |
| 3208 IN PMDL MdlChain, | |
| 3209 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3210 | |
| 3211 typedef BOOLEAN | |
| 3212 (DDKAPI *PFAST_IO_PREPARE_MDL_WRITE)( | |
| 3213 IN struct _FILE_OBJECT *FileObject, | |
| 3214 IN PLARGE_INTEGER FileOffset, | |
| 3215 IN ULONG Length, | |
| 3216 IN ULONG LockKey, | |
| 3217 OUT PMDL *MdlChain, | |
| 3218 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3219 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3220 | |
| 3221 typedef BOOLEAN | |
| 3222 (DDKAPI *PFAST_IO_MDL_WRITE_COMPLETE)( | |
| 3223 IN struct _FILE_OBJECT *FileObject, | |
| 3224 IN PLARGE_INTEGER FileOffset, | |
| 3225 IN PMDL MdlChain, | |
| 3226 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3227 | |
| 3228 typedef BOOLEAN | |
| 3229 (DDKAPI *PFAST_IO_READ_COMPRESSED)( | |
| 3230 IN struct _FILE_OBJECT *FileObject, | |
| 3231 IN PLARGE_INTEGER FileOffset, | |
| 3232 IN ULONG Length, | |
| 3233 IN ULONG LockKey, | |
| 3234 OUT PVOID Buffer, | |
| 3235 OUT PMDL *MdlChain, | |
| 3236 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3237 OUT struct _COMPRESSED_DATA_INFO *CompressedDataInfo, | |
| 3238 IN ULONG CompressedDataInfoLength, | |
| 3239 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3240 | |
| 3241 typedef BOOLEAN | |
| 3242 (DDKAPI *PFAST_IO_WRITE_COMPRESSED)( | |
| 3243 IN struct _FILE_OBJECT *FileObject, | |
| 3244 IN PLARGE_INTEGER FileOffset, | |
| 3245 IN ULONG Length, | |
| 3246 IN ULONG LockKey, | |
| 3247 IN PVOID Buffer, | |
| 3248 OUT PMDL *MdlChain, | |
| 3249 OUT PIO_STATUS_BLOCK IoStatus, | |
| 3250 IN struct _COMPRESSED_DATA_INFO *CompressedDataInfo, | |
| 3251 IN ULONG CompressedDataInfoLength, | |
| 3252 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3253 | |
| 3254 typedef BOOLEAN | |
| 3255 (DDKAPI *PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)( | |
| 3256 IN struct _FILE_OBJECT *FileObject, | |
| 3257 IN PMDL MdlChain, | |
| 3258 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3259 | |
| 3260 typedef BOOLEAN | |
| 3261 (DDKAPI *PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( | |
| 3262 IN struct _FILE_OBJECT *FileObject, | |
| 3263 IN PLARGE_INTEGER FileOffset, | |
| 3264 IN PMDL MdlChain, | |
| 3265 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3266 | |
| 3267 typedef BOOLEAN | |
| 3268 (DDKAPI *PFAST_IO_QUERY_OPEN)( | |
| 3269 IN struct _IRP *Irp, | |
| 3270 OUT PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, | |
| 3271 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3272 | |
| 3273 typedef NTSTATUS | |
| 3274 (DDKAPI *PFAST_IO_RELEASE_FOR_MOD_WRITE)( | |
| 3275 IN struct _FILE_OBJECT *FileObject, | |
| 3276 IN struct _ERESOURCE *ResourceToRelease, | |
| 3277 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3278 | |
| 3279 typedef NTSTATUS | |
| 3280 (DDKAPI *PFAST_IO_ACQUIRE_FOR_CCFLUSH)( | |
| 3281 IN struct _FILE_OBJECT *FileObject, | |
| 3282 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3283 | |
| 3284 typedef NTSTATUS | |
| 3285 (DDKAPI *PFAST_IO_RELEASE_FOR_CCFLUSH) ( | |
| 3286 IN struct _FILE_OBJECT *FileObject, | |
| 3287 IN struct _DEVICE_OBJECT *DeviceObject); | |
| 3288 | |
| 3289 typedef struct _FAST_IO_DISPATCH { | |
| 3290 ULONG SizeOfFastIoDispatch; | |
| 3291 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible; | |
| 3292 PFAST_IO_READ FastIoRead; | |
| 3293 PFAST_IO_WRITE FastIoWrite; | |
| 3294 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo; | |
| 3295 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo; | |
| 3296 PFAST_IO_LOCK FastIoLock; | |
| 3297 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle; | |
| 3298 PFAST_IO_UNLOCK_ALL FastIoUnlockAll; | |
| 3299 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey; | |
| 3300 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl; | |
| 3301 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection; | |
| 3302 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection; | |
| 3303 PFAST_IO_DETACH_DEVICE FastIoDetachDevice; | |
| 3304 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo; | |
| 3305 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite; | |
| 3306 PFAST_IO_MDL_READ MdlRead; | |
| 3307 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete; | |
| 3308 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite; | |
| 3309 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete; | |
| 3310 PFAST_IO_READ_COMPRESSED FastIoReadCompressed; | |
| 3311 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed; | |
| 3312 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed; | |
| 3313 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed; | |
| 3314 PFAST_IO_QUERY_OPEN FastIoQueryOpen; | |
| 3315 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite; | |
| 3316 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush; | |
| 3317 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush; | |
| 3318 } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH; | |
| 3319 | |
| 3320 typedef struct _SECTION_OBJECT_POINTERS { | |
| 3321 PVOID DataSectionObject; | |
| 3322 PVOID SharedCacheMap; | |
| 3323 PVOID ImageSectionObject; | |
| 3324 } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS; | |
| 3325 | |
| 3326 typedef struct _IO_COMPLETION_CONTEXT { | |
| 3327 PVOID Port; | |
| 3328 PVOID Key; | |
| 3329 } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT; | |
| 3330 | |
| 3331 /* FILE_OBJECT.Flags */ | |
| 3332 | |
| 3333 #define FO_FILE_OPEN 0x00000001 | |
| 3334 #define FO_SYNCHRONOUS_IO 0x00000002 | |
| 3335 #define FO_ALERTABLE_IO 0x00000004 | |
| 3336 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008 | |
| 3337 #define FO_WRITE_THROUGH 0x00000010 | |
| 3338 #define FO_SEQUENTIAL_ONLY 0x00000020 | |
| 3339 #define FO_CACHE_SUPPORTED 0x00000040 | |
| 3340 #define FO_NAMED_PIPE 0x00000080 | |
| 3341 #define FO_STREAM_FILE 0x00000100 | |
| 3342 #define FO_MAILSLOT 0x00000200 | |
| 3343 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400 | |
| 3344 #define FO_DIRECT_DEVICE_OPEN 0x00000800 | |
| 3345 #define FO_FILE_MODIFIED 0x00001000 | |
| 3346 #define FO_FILE_SIZE_CHANGED 0x00002000 | |
| 3347 #define FO_CLEANUP_COMPLETE 0x00004000 | |
| 3348 #define FO_TEMPORARY_FILE 0x00008000 | |
| 3349 #define FO_DELETE_ON_CLOSE 0x00010000 | |
| 3350 #define FO_OPENED_CASE_SENSITIVE 0x00020000 | |
| 3351 #define FO_HANDLE_CREATED 0x00040000 | |
| 3352 #define FO_FILE_FAST_IO_READ 0x00080000 | |
| 3353 #define FO_RANDOM_ACCESS 0x00100000 | |
| 3354 #define FO_FILE_OPEN_CANCELLED 0x00200000 | |
| 3355 #define FO_VOLUME_OPEN 0x00400000 | |
| 3356 #define FO_REMOTE_ORIGIN 0x01000000 | |
| 3357 | |
| 3358 typedef struct _FILE_OBJECT | |
| 3359 { | |
| 3360 CSHORT Type; | |
| 3361 CSHORT Size; | |
| 3362 PDEVICE_OBJECT DeviceObject; | |
| 3363 PVPB Vpb; | |
| 3364 PVOID FsContext; | |
| 3365 PVOID FsContext2; | |
| 3366 PSECTION_OBJECT_POINTERS SectionObjectPointer; | |
| 3367 PVOID PrivateCacheMap; | |
| 3368 NTSTATUS FinalStatus; | |
| 3369 struct _FILE_OBJECT *RelatedFileObject; | |
| 3370 BOOLEAN LockOperation; | |
| 3371 BOOLEAN DeletePending; | |
| 3372 BOOLEAN ReadAccess; | |
| 3373 BOOLEAN WriteAccess; | |
| 3374 BOOLEAN DeleteAccess; | |
| 3375 BOOLEAN SharedRead; | |
| 3376 BOOLEAN SharedWrite; | |
| 3377 BOOLEAN SharedDelete; | |
| 3378 ULONG Flags; | |
| 3379 UNICODE_STRING FileName; | |
| 3380 LARGE_INTEGER CurrentByteOffset; | |
| 3381 volatile ULONG Waiters; | |
| 3382 volatile ULONG Busy; | |
| 3383 PVOID LastLock; | |
| 3384 KEVENT Lock; | |
| 3385 KEVENT Event; | |
| 3386 volatile PIO_COMPLETION_CONTEXT CompletionContext; | |
| 3387 KSPIN_LOCK IrpListLock; | |
| 3388 LIST_ENTRY IrpList; | |
| 3389 volatile PVOID FileObjectExtension; | |
| 3390 } FILE_OBJECT; | |
| 3391 typedef struct _FILE_OBJECT *PFILE_OBJECT; | |
| 3392 | |
| 3393 typedef enum _SECURITY_OPERATION_CODE { | |
| 3394 SetSecurityDescriptor, | |
| 3395 QuerySecurityDescriptor, | |
| 3396 DeleteSecurityDescriptor, | |
| 3397 AssignSecurityDescriptor | |
| 3398 } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE; | |
| 3399 | |
| 3400 #define INITIAL_PRIVILEGE_COUNT 3 | |
| 3401 | |
| 3402 typedef struct _INITIAL_PRIVILEGE_SET { | |
| 3403 ULONG PrivilegeCount; | |
| 3404 ULONG Control; | |
| 3405 LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT]; | |
| 3406 } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET; | |
| 3407 | |
| 3408 #define SE_MIN_WELL_KNOWN_PRIVILEGE 2 | |
| 3409 #define SE_CREATE_TOKEN_PRIVILEGE 2 | |
| 3410 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE 3 | |
| 3411 #define SE_LOCK_MEMORY_PRIVILEGE 4 | |
| 3412 #define SE_INCREASE_QUOTA_PRIVILEGE 5 | |
| 3413 #define SE_UNSOLICITED_INPUT_PRIVILEGE 6 | |
| 3414 #define SE_MACHINE_ACCOUNT_PRIVILEGE 6 | |
| 3415 #define SE_TCB_PRIVILEGE 7 | |
| 3416 #define SE_SECURITY_PRIVILEGE 8 | |
| 3417 #define SE_TAKE_OWNERSHIP_PRIVILEGE 9 | |
| 3418 #define SE_LOAD_DRIVER_PRIVILEGE 10 | |
| 3419 #define SE_SYSTEM_PROFILE_PRIVILEGE 11 | |
| 3420 #define SE_SYSTEMTIME_PRIVILEGE 12 | |
| 3421 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE 13 | |
| 3422 #define SE_INC_BASE_PRIORITY_PRIVILEGE 14 | |
| 3423 #define SE_CREATE_PAGEFILE_PRIVILEGE 15 | |
| 3424 #define SE_CREATE_PERMANENT_PRIVILEGE 16 | |
| 3425 #define SE_BACKUP_PRIVILEGE 17 | |
| 3426 #define SE_RESTORE_PRIVILEGE 18 | |
| 3427 #define SE_SHUTDOWN_PRIVILEGE 19 | |
| 3428 #define SE_DEBUG_PRIVILEGE 20 | |
| 3429 #define SE_AUDIT_PRIVILEGE 21 | |
| 3430 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE 22 | |
| 3431 #define SE_CHANGE_NOTIFY_PRIVILEGE 23 | |
| 3432 #define SE_REMOTE_SHUTDOWN_PRIVILEGE 24 | |
| 3433 #define SE_UNDOCK_PRIVILEGE 25 | |
| 3434 #define SE_SYNC_AGENT_PRIVILEGE 26 | |
| 3435 #define SE_ENABLE_DELEGATION_PRIVILEGE 27 | |
| 3436 #define SE_MANAGE_VOLUME_PRIVILEGE 28 | |
| 3437 #define SE_IMPERSONATE_PRIVILEGE 29 | |
| 3438 #define SE_CREATE_GLOBAL_PRIVILEGE 30 | |
| 3439 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_CREATE_GLOBAL_PRIVILEGE | |
| 3440 | |
| 3441 typedef struct _SECURITY_SUBJECT_CONTEXT { | |
| 3442 PACCESS_TOKEN ClientToken; | |
| 3443 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; | |
| 3444 PACCESS_TOKEN PrimaryToken; | |
| 3445 PVOID ProcessAuditId; | |
| 3446 } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT; | |
| 3447 | |
| 3448 #include <pshpack4.h> | |
| 3449 typedef struct _ACCESS_STATE { | |
| 3450 LUID OperationID; | |
| 3451 BOOLEAN SecurityEvaluated; | |
| 3452 BOOLEAN GenerateAudit; | |
| 3453 BOOLEAN GenerateOnClose; | |
| 3454 BOOLEAN PrivilegesAllocated; | |
| 3455 ULONG Flags; | |
| 3456 ACCESS_MASK RemainingDesiredAccess; | |
| 3457 ACCESS_MASK PreviouslyGrantedAccess; | |
| 3458 ACCESS_MASK OriginalDesiredAccess; | |
| 3459 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext; | |
| 3460 PSECURITY_DESCRIPTOR SecurityDescriptor; | |
| 3461 PVOID AuxData; | |
| 3462 union { | |
| 3463 INITIAL_PRIVILEGE_SET InitialPrivilegeSet; | |
| 3464 PRIVILEGE_SET PrivilegeSet; | |
| 3465 } Privileges; | |
| 3466 | |
| 3467 BOOLEAN AuditPrivileges; | |
| 3468 UNICODE_STRING ObjectName; | |
| 3469 UNICODE_STRING ObjectTypeName; | |
| 3470 } ACCESS_STATE, *PACCESS_STATE; | |
| 3471 #include <poppack.h> | |
| 3472 | |
| 3473 typedef struct _IO_SECURITY_CONTEXT { | |
| 3474 PSECURITY_QUALITY_OF_SERVICE SecurityQos; | |
| 3475 PACCESS_STATE AccessState; | |
| 3476 ACCESS_MASK DesiredAccess; | |
| 3477 ULONG FullCreateOptions; | |
| 3478 } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT; | |
| 3479 | |
| 3480 #define IO_TYPE_ADAPTER 1 | |
| 3481 #define IO_TYPE_CONTROLLER 2 | |
| 3482 #define IO_TYPE_DEVICE 3 | |
| 3483 #define IO_TYPE_DRIVER 4 | |
| 3484 #define IO_TYPE_FILE 5 | |
| 3485 #define IO_TYPE_IRP 6 | |
| 3486 #define IO_TYPE_MASTER_ADAPTER 7 | |
| 3487 #define IO_TYPE_OPEN_PACKET 8 | |
| 3488 #define IO_TYPE_TIMER 9 | |
| 3489 #define IO_TYPE_VPB 10 | |
| 3490 #define IO_TYPE_ERROR_LOG 11 | |
| 3491 #define IO_TYPE_ERROR_MESSAGE 12 | |
| 3492 #define IO_TYPE_DEVICE_OBJECT_EXTENSION 13 | |
| 3493 | |
| 3494 #define IO_TYPE_CSQ_IRP_CONTEXT 1 | |
| 3495 #define IO_TYPE_CSQ 2 | |
| 3496 | |
| 3497 struct _IO_CSQ; | |
| 3498 | |
| 3499 typedef struct _IO_CSQ_IRP_CONTEXT { | |
| 3500 ULONG Type; | |
| 3501 struct _IRP *Irp; | |
| 3502 struct _IO_CSQ *Csq; | |
| 3503 } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT; | |
| 3504 | |
| 3505 typedef VOID | |
| 3506 (DDKAPI *PIO_CSQ_INSERT_IRP)( | |
| 3507 IN struct _IO_CSQ *Csq, | |
| 3508 IN PIRP Irp); | |
| 3509 | |
| 3510 typedef VOID | |
| 3511 (DDKAPI *PIO_CSQ_REMOVE_IRP)( | |
| 3512 IN struct _IO_CSQ *Csq, | |
| 3513 IN PIRP Irp); | |
| 3514 | |
| 3515 typedef PIRP | |
| 3516 (DDKAPI *PIO_CSQ_PEEK_NEXT_IRP)( | |
| 3517 IN struct _IO_CSQ *Csq, | |
| 3518 IN PIRP Irp, | |
| 3519 IN PVOID PeekContext); | |
| 3520 | |
| 3521 typedef VOID | |
| 3522 (DDKAPI *PIO_CSQ_ACQUIRE_LOCK)( | |
| 3523 IN struct _IO_CSQ *Csq, | |
| 3524 OUT PKIRQL Irql); | |
| 3525 | |
| 3526 typedef VOID | |
| 3527 (DDKAPI *PIO_CSQ_RELEASE_LOCK)( | |
| 3528 IN struct _IO_CSQ *Csq, | |
| 3529 IN KIRQL Irql); | |
| 3530 | |
| 3531 typedef VOID | |
| 3532 (DDKAPI *PIO_CSQ_COMPLETE_CANCELED_IRP)( | |
| 3533 IN struct _IO_CSQ *Csq, | |
| 3534 IN PIRP Irp); | |
| 3535 | |
| 3536 typedef struct _IO_CSQ { | |
| 3537 ULONG Type; | |
| 3538 PIO_CSQ_INSERT_IRP CsqInsertIrp; | |
| 3539 PIO_CSQ_REMOVE_IRP CsqRemoveIrp; | |
| 3540 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp; | |
| 3541 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock; | |
| 3542 PIO_CSQ_RELEASE_LOCK CsqReleaseLock; | |
| 3543 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp; | |
| 3544 PVOID ReservePointer; | |
| 3545 } IO_CSQ, *PIO_CSQ; | |
| 3546 | |
| 3547 #if !defined(_ALPHA_) | |
| 3548 #include <pshpack4.h> | |
| 3549 #endif | |
| 3550 typedef struct _IO_STACK_LOCATION { | |
| 3551 UCHAR MajorFunction; | |
| 3552 UCHAR MinorFunction; | |
| 3553 UCHAR Flags; | |
| 3554 UCHAR Control; | |
| 3555 union { | |
| 3556 struct { | |
| 3557 PIO_SECURITY_CONTEXT SecurityContext; | |
| 3558 ULONG Options; | |
| 3559 USHORT POINTER_ALIGNMENT FileAttributes; | |
| 3560 USHORT ShareAccess; | |
| 3561 ULONG POINTER_ALIGNMENT EaLength; | |
| 3562 } Create; | |
| 3563 struct { | |
| 3564 ULONG Length; | |
| 3565 ULONG POINTER_ALIGNMENT Key; | |
| 3566 LARGE_INTEGER ByteOffset; | |
| 3567 } Read; | |
| 3568 struct { | |
| 3569 ULONG Length; | |
| 3570 ULONG POINTER_ALIGNMENT Key; | |
| 3571 LARGE_INTEGER ByteOffset; | |
| 3572 } Write; | |
| 3573 struct { | |
| 3574 ULONG Length; | |
| 3575 PUNICODE_STRING FileName; | |
| 3576 FILE_INFORMATION_CLASS FileInformationClass; | |
| 3577 ULONG FileIndex; | |
| 3578 } QueryDirectory; | |
| 3579 struct { | |
| 3580 ULONG Length; | |
| 3581 ULONG CompletionFilter; | |
| 3582 } NotifyDirectory; | |
| 3583 struct { | |
| 3584 ULONG Length; | |
| 3585 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; | |
| 3586 } QueryFile; | |
| 3587 struct { | |
| 3588 ULONG Length; | |
| 3589 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; | |
| 3590 PFILE_OBJECT FileObject; | |
| 3591 _ANONYMOUS_UNION union { | |
| 3592 _ANONYMOUS_STRUCT struct { | |
| 3593 BOOLEAN ReplaceIfExists; | |
| 3594 BOOLEAN AdvanceOnly; | |
| 3595 } DUMMYSTRUCTNAME; | |
| 3596 ULONG ClusterCount; | |
| 3597 HANDLE DeleteHandle; | |
| 3598 } DUMMYUNIONNAME; | |
| 3599 } SetFile; | |
| 3600 struct { | |
| 3601 ULONG Length; | |
| 3602 PVOID EaList; | |
| 3603 ULONG EaListLength; | |
| 3604 ULONG EaIndex; | |
| 3605 } QueryEa; | |
| 3606 struct { | |
| 3607 ULONG Length; | |
| 3608 } SetEa; | |
| 3609 struct { | |
| 3610 ULONG Length; | |
| 3611 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; | |
| 3612 } QueryVolume; | |
| 3613 struct { | |
| 3614 ULONG Length; | |
| 3615 FS_INFORMATION_CLASS FsInformationClass; | |
| 3616 } SetVolume; | |
| 3617 struct { | |
| 3618 ULONG OutputBufferLength; | |
| 3619 ULONG InputBufferLength; | |
| 3620 ULONG FsControlCode; | |
| 3621 PVOID Type3InputBuffer; | |
| 3622 } FileSystemControl; | |
| 3623 struct { | |
| 3624 PLARGE_INTEGER Length; | |
| 3625 ULONG Key; | |
| 3626 LARGE_INTEGER ByteOffset; | |
| 3627 } LockControl; | |
| 3628 struct { | |
| 3629 ULONG OutputBufferLength; | |
| 3630 ULONG POINTER_ALIGNMENT InputBufferLength; | |
| 3631 ULONG POINTER_ALIGNMENT IoControlCode; | |
| 3632 PVOID Type3InputBuffer; | |
| 3633 } DeviceIoControl; | |
| 3634 struct { | |
| 3635 SECURITY_INFORMATION SecurityInformation; | |
| 3636 ULONG POINTER_ALIGNMENT Length; | |
| 3637 } QuerySecurity; | |
| 3638 struct { | |
| 3639 SECURITY_INFORMATION SecurityInformation; | |
| 3640 PSECURITY_DESCRIPTOR SecurityDescriptor; | |
| 3641 } SetSecurity; | |
| 3642 struct { | |
| 3643 PVPB Vpb; | |
| 3644 PDEVICE_OBJECT DeviceObject; | |
| 3645 } MountVolume; | |
| 3646 struct { | |
| 3647 PVPB Vpb; | |
| 3648 PDEVICE_OBJECT DeviceObject; | |
| 3649 } VerifyVolume; | |
| 3650 struct { | |
| 3651 struct _SCSI_REQUEST_BLOCK *Srb; | |
| 3652 } Scsi; | |
| 3653 struct { | |
| 3654 ULONG Length; | |
| 3655 PSID StartSid; | |
| 3656 struct _FILE_GET_QUOTA_INFORMATION *SidList; | |
| 3657 ULONG SidListLength; | |
| 3658 } QueryQuota; | |
| 3659 struct { | |
| 3660 ULONG Length; | |
| 3661 } SetQuota; | |
| 3662 struct { | |
| 3663 DEVICE_RELATION_TYPE Type; | |
| 3664 } QueryDeviceRelations; | |
| 3665 struct { | |
| 3666 CONST GUID *InterfaceType; | |
| 3667 USHORT Size; | |
| 3668 USHORT Version; | |
| 3669 PINTERFACE Interface; | |
| 3670 PVOID InterfaceSpecificData; | |
| 3671 } QueryInterface; | |
| 3672 struct { | |
| 3673 PDEVICE_CAPABILITIES Capabilities; | |
| 3674 } DeviceCapabilities; | |
| 3675 struct { | |
| 3676 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList; | |
| 3677 } FilterResourceRequirements; | |
| 3678 struct { | |
| 3679 ULONG WhichSpace; | |
| 3680 PVOID Buffer; | |
| 3681 ULONG Offset; | |
| 3682 ULONG POINTER_ALIGNMENT Length; | |
| 3683 } ReadWriteConfig; | |
| 3684 struct { | |
| 3685 BOOLEAN Lock; | |
| 3686 } SetLock; | |
| 3687 struct { | |
| 3688 BUS_QUERY_ID_TYPE IdType; | |
| 3689 } QueryId; | |
| 3690 struct { | |
| 3691 DEVICE_TEXT_TYPE DeviceTextType; | |
| 3692 LCID POINTER_ALIGNMENT LocaleId; | |
| 3693 } QueryDeviceText; | |
| 3694 struct { | |
| 3695 BOOLEAN InPath; | |
| 3696 BOOLEAN Reserved[3]; | |
| 3697 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type; | |
| 3698 } UsageNotification; | |
| 3699 struct { | |
| 3700 SYSTEM_POWER_STATE PowerState; | |
| 3701 } WaitWake; | |
| 3702 struct { | |
| 3703 PPOWER_SEQUENCE PowerSequence; | |
| 3704 } PowerSequence; | |
| 3705 struct { | |
| 3706 ULONG SystemContext; | |
| 3707 POWER_STATE_TYPE POINTER_ALIGNMENT Type; | |
| 3708 POWER_STATE POINTER_ALIGNMENT State; | |
| 3709 POWER_ACTION POINTER_ALIGNMENT ShutdownType; | |
| 3710 } Power; | |
| 3711 struct { | |
| 3712 PCM_RESOURCE_LIST AllocatedResources; | |
| 3713 PCM_RESOURCE_LIST AllocatedResourcesTranslated; | |
| 3714 } StartDevice; | |
| 3715 struct { | |
| 3716 ULONG_PTR ProviderId; | |
| 3717 PVOID DataPath; | |
| 3718 ULONG BufferSize; | |
| 3719 PVOID Buffer; | |
| 3720 } WMI; | |
| 3721 struct { | |
| 3722 PVOID Argument1; | |
| 3723 PVOID Argument2; | |
| 3724 PVOID Argument3; | |
| 3725 PVOID Argument4; | |
| 3726 } Others; | |
| 3727 } Parameters; | |
| 3728 PDEVICE_OBJECT DeviceObject; | |
| 3729 PFILE_OBJECT FileObject; | |
| 3730 PIO_COMPLETION_ROUTINE CompletionRoutine; | |
| 3731 PVOID Context; | |
| 3732 } IO_STACK_LOCATION, *PIO_STACK_LOCATION; | |
| 3733 #if !defined(_ALPHA_) | |
| 3734 #include <poppack.h> | |
| 3735 #endif | |
| 3736 | |
| 3737 /* IO_STACK_LOCATION.Control */ | |
| 3738 | |
| 3739 #define SL_PENDING_RETURNED 0x01 | |
| 3740 #define SL_ERROR_RETURNED 0x02 | |
| 3741 #define SL_INVOKE_ON_CANCEL 0x20 | |
| 3742 #define SL_INVOKE_ON_SUCCESS 0x40 | |
| 3743 #define SL_INVOKE_ON_ERROR 0x80 | |
| 3744 | |
| 3745 /* IO_STACK_LOCATION.Parameters.ReadWriteControl.WhichSpace */ | |
| 3746 | |
| 3747 #define PCI_WHICHSPACE_CONFIG 0x0 | |
| 3748 #define PCI_WHICHSPACE_ROM 0x52696350 /* 'PciR' */ | |
| 3749 | |
| 3750 typedef enum _KEY_INFORMATION_CLASS { | |
| 3751 KeyBasicInformation, | |
| 3752 KeyNodeInformation, | |
| 3753 KeyFullInformation, | |
| 3754 KeyNameInformation, | |
| 3755 KeyCachedInformation, | |
| 3756 KeyFlagsInformation | |
| 3757 } KEY_INFORMATION_CLASS; | |
| 3758 | |
| 3759 typedef struct _KEY_BASIC_INFORMATION { | |
| 3760 LARGE_INTEGER LastWriteTime; | |
| 3761 ULONG TitleIndex; | |
| 3762 ULONG NameLength; | |
| 3763 WCHAR Name[1]; | |
| 3764 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION; | |
| 3765 | |
| 3766 typedef struct _KEY_FULL_INFORMATION { | |
| 3767 LARGE_INTEGER LastWriteTime; | |
| 3768 ULONG TitleIndex; | |
| 3769 ULONG ClassOffset; | |
| 3770 ULONG ClassLength; | |
| 3771 ULONG SubKeys; | |
| 3772 ULONG MaxNameLen; | |
| 3773 ULONG MaxClassLen; | |
| 3774 ULONG Values; | |
| 3775 ULONG MaxValueNameLen; | |
| 3776 ULONG MaxValueDataLen; | |
| 3777 WCHAR Class[1]; | |
| 3778 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; | |
| 3779 | |
| 3780 typedef struct _KEY_NODE_INFORMATION { | |
| 3781 LARGE_INTEGER LastWriteTime; | |
| 3782 ULONG TitleIndex; | |
| 3783 ULONG ClassOffset; | |
| 3784 ULONG ClassLength; | |
| 3785 ULONG NameLength; | |
| 3786 WCHAR Name[1]; | |
| 3787 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION; | |
| 3788 | |
| 3789 typedef struct _KEY_VALUE_BASIC_INFORMATION { | |
| 3790 ULONG TitleIndex; | |
| 3791 ULONG Type; | |
| 3792 ULONG NameLength; | |
| 3793 WCHAR Name[1]; | |
| 3794 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION; | |
| 3795 | |
| 3796 typedef struct _KEY_VALUE_FULL_INFORMATION { | |
| 3797 ULONG TitleIndex; | |
| 3798 ULONG Type; | |
| 3799 ULONG DataOffset; | |
| 3800 ULONG DataLength; | |
| 3801 ULONG NameLength; | |
| 3802 WCHAR Name[1]; | |
| 3803 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION; | |
| 3804 | |
| 3805 typedef struct _KEY_VALUE_PARTIAL_INFORMATION { | |
| 3806 ULONG TitleIndex; | |
| 3807 ULONG Type; | |
| 3808 ULONG DataLength; | |
| 3809 UCHAR Data[1]; | |
| 3810 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; | |
| 3811 | |
| 3812 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 { | |
| 3813 ULONG Type; | |
| 3814 ULONG DataLength; | |
| 3815 UCHAR Data[1]; | |
| 3816 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; | |
| 3817 | |
| 3818 typedef struct _KEY_VALUE_ENTRY { | |
| 3819 PUNICODE_STRING ValueName; | |
| 3820 ULONG DataLength; | |
| 3821 ULONG DataOffset; | |
| 3822 ULONG Type; | |
| 3823 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY; | |
| 3824 | |
| 3825 typedef enum _KEY_VALUE_INFORMATION_CLASS { | |
| 3826 KeyValueBasicInformation, | |
| 3827 KeyValueFullInformation, | |
| 3828 KeyValuePartialInformation, | |
| 3829 KeyValueFullInformationAlign64, | |
| 3830 KeyValuePartialInformationAlign64 | |
| 3831 } KEY_VALUE_INFORMATION_CLASS; | |
| 3832 | |
| 3833 typedef struct _KEY_WRITE_TIME_INFORMATION { | |
| 3834 LARGE_INTEGER LastWriteTime; | |
| 3835 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION; | |
| 3836 | |
| 3837 typedef struct _KEY_USER_FLAGS_INFORMATION { | |
| 3838 ULONG UserFlags; | |
| 3839 } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION; | |
| 3840 | |
| 3841 typedef enum _KEY_SET_INFORMATION_CLASS { | |
| 3842 KeyWriteTimeInformation, | |
| 3843 KeyUserFlagsInformation, | |
| 3844 MaxKeySetInfoClass | |
| 3845 } KEY_SET_INFORMATION_CLASS; | |
| 3846 | |
| 3847 /* KEY_VALUE_Xxx.Type */ | |
| 3848 | |
| 3849 #define REG_NONE 0 | |
| 3850 #define REG_SZ 1 | |
| 3851 #define REG_EXPAND_SZ 2 | |
| 3852 #define REG_BINARY 3 | |
| 3853 #define REG_DWORD 4 | |
| 3854 #define REG_DWORD_LITTLE_ENDIAN 4 | |
| 3855 #define REG_DWORD_BIG_ENDIAN 5 | |
| 3856 #define REG_LINK 6 | |
| 3857 #define REG_MULTI_SZ 7 | |
| 3858 #define REG_RESOURCE_LIST 8 | |
| 3859 #define REG_FULL_RESOURCE_DESCRIPTOR 9 | |
| 3860 #define REG_RESOURCE_REQUIREMENTS_LIST 10 | |
| 3861 #define REG_QWORD 11 | |
| 3862 #define REG_QWORD_LITTLE_ENDIAN 11 | |
| 3863 | |
| 3864 #define PCI_TYPE0_ADDRESSES 6 | |
| 3865 #define PCI_TYPE1_ADDRESSES 2 | |
| 3866 #define PCI_TYPE2_ADDRESSES 5 | |
| 3867 | |
| 3868 typedef struct _PCI_COMMON_CONFIG { | |
| 3869 USHORT VendorID; | |
| 3870 USHORT DeviceID; | |
| 3871 USHORT Command; | |
| 3872 USHORT Status; | |
| 3873 UCHAR RevisionID; | |
| 3874 UCHAR ProgIf; | |
| 3875 UCHAR SubClass; | |
| 3876 UCHAR BaseClass; | |
| 3877 UCHAR CacheLineSize; | |
| 3878 UCHAR LatencyTimer; | |
| 3879 UCHAR HeaderType; | |
| 3880 UCHAR BIST; | |
| 3881 union { | |
| 3882 struct _PCI_HEADER_TYPE_0 { | |
| 3883 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; | |
| 3884 ULONG CIS; | |
| 3885 USHORT SubVendorID; | |
| 3886 USHORT SubSystemID; | |
| 3887 ULONG ROMBaseAddress; | |
| 3888 UCHAR CapabilitiesPtr; | |
| 3889 UCHAR Reserved1[3]; | |
| 3890 ULONG Reserved2; | |
| 3891 UCHAR InterruptLine; | |
| 3892 UCHAR InterruptPin; | |
| 3893 UCHAR MinimumGrant; | |
| 3894 UCHAR MaximumLatency; | |
| 3895 } type0; | |
| 3896 struct _PCI_HEADER_TYPE_1 { | |
| 3897 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; | |
| 3898 UCHAR PrimaryBus; | |
| 3899 UCHAR SecondaryBus; | |
| 3900 UCHAR SubordinateBus; | |
| 3901 UCHAR SecondaryLatency; | |
| 3902 UCHAR IOBase; | |
| 3903 UCHAR IOLimit; | |
| 3904 USHORT SecondaryStatus; | |
| 3905 USHORT MemoryBase; | |
| 3906 USHORT MemoryLimit; | |
| 3907 USHORT PrefetchBase; | |
| 3908 USHORT PrefetchLimit; | |
| 3909 ULONG PrefetchBaseUpper32; | |
| 3910 ULONG PrefetchLimitUpper32; | |
| 3911 USHORT IOBaseUpper16; | |
| 3912 USHORT IOLimitUpper16; | |
| 3913 UCHAR CapabilitiesPtr; | |
| 3914 UCHAR Reserved1[3]; | |
| 3915 ULONG ROMBaseAddress; | |
| 3916 UCHAR InterruptLine; | |
| 3917 UCHAR InterruptPin; | |
| 3918 USHORT BridgeControl; | |
| 3919 } type1; | |
| 3920 struct _PCI_HEADER_TYPE_2 { | |
| 3921 ULONG SocketRegistersBaseAddress; | |
| 3922 UCHAR CapabilitiesPtr; | |
| 3923 UCHAR Reserved; | |
| 3924 USHORT SecondaryStatus; | |
| 3925 UCHAR PrimaryBus; | |
| 3926 UCHAR SecondaryBus; | |
| 3927 UCHAR SubordinateBus; | |
| 3928 UCHAR SecondaryLatency; | |
| 3929 struct { | |
| 3930 ULONG Base; | |
| 3931 ULONG Limit; | |
| 3932 } Range[PCI_TYPE2_ADDRESSES - 1]; | |
| 3933 UCHAR InterruptLine; | |
| 3934 UCHAR InterruptPin; | |
| 3935 USHORT BridgeControl; | |
| 3936 } type2; | |
| 3937 } u; | |
| 3938 UCHAR DeviceSpecific[192]; | |
| 3939 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; | |
| 3940 | |
| 3941 /* PCI_COMMON_CONFIG.Command */ | |
| 3942 | |
| 3943 #define PCI_ENABLE_IO_SPACE 0x0001 | |
| 3944 #define PCI_ENABLE_MEMORY_SPACE 0x0002 | |
| 3945 #define PCI_ENABLE_BUS_MASTER 0x0004 | |
| 3946 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008 | |
| 3947 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010 | |
| 3948 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020 | |
| 3949 #define PCI_ENABLE_PARITY 0x0040 | |
| 3950 #define PCI_ENABLE_WAIT_CYCLE 0x0080 | |
| 3951 #define PCI_ENABLE_SERR 0x0100 | |
| 3952 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200 | |
| 3953 | |
| 3954 /* PCI_COMMON_CONFIG.Status */ | |
| 3955 | |
| 3956 #define PCI_STATUS_CAPABILITIES_LIST 0x0010 | |
| 3957 #define PCI_STATUS_66MHZ_CAPABLE 0x0020 | |
| 3958 #define PCI_STATUS_UDF_SUPPORTED 0x0040 | |
| 3959 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 | |
| 3960 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 | |
| 3961 #define PCI_STATUS_DEVSEL 0x0600 | |
| 3962 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800 | |
| 3963 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000 | |
| 3964 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000 | |
| 3965 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000 | |
| 3966 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000 | |
| 3967 | |
| 3968 /* PCI_COMMON_CONFIG.HeaderType */ | |
| 3969 | |
| 3970 #define PCI_MULTIFUNCTION 0x80 | |
| 3971 #define PCI_DEVICE_TYPE 0x00 | |
| 3972 #define PCI_BRIDGE_TYPE 0x01 | |
| 3973 #define PCI_CARDBUS_BRIDGE_TYPE 0x02 | |
| 3974 | |
| 3975 #define PCI_CONFIGURATION_TYPE(PciData) \ | |
| 3976 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION) | |
| 3977 | |
| 3978 #define PCI_MULTIFUNCTION_DEVICE(PciData) \ | |
| 3979 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0) | |
| 3980 | |
| 3981 /* PCI device classes */ | |
| 3982 | |
| 3983 #define PCI_CLASS_PRE_20 0x00 | |
| 3984 #define PCI_CLASS_MASS_STORAGE_CTLR 0x01 | |
| 3985 #define PCI_CLASS_NETWORK_CTLR 0x02 | |
| 3986 #define PCI_CLASS_DISPLAY_CTLR 0x03 | |
| 3987 #define PCI_CLASS_MULTIMEDIA_DEV 0x04 | |
| 3988 #define PCI_CLASS_MEMORY_CTLR 0x05 | |
| 3989 #define PCI_CLASS_BRIDGE_DEV 0x06 | |
| 3990 #define PCI_CLASS_SIMPLE_COMMS_CTLR 0x07 | |
| 3991 #define PCI_CLASS_BASE_SYSTEM_DEV 0x08 | |
| 3992 #define PCI_CLASS_INPUT_DEV 0x09 | |
| 3993 #define PCI_CLASS_DOCKING_STATION 0x0a | |
| 3994 #define PCI_CLASS_PROCESSOR 0x0b | |
| 3995 #define PCI_CLASS_SERIAL_BUS_CTLR 0x0c | |
| 3996 | |
| 3997 /* PCI device subclasses for class 0 */ | |
| 3998 | |
| 3999 #define PCI_SUBCLASS_PRE_20_NON_VGA 0x00 | |
| 4000 #define PCI_SUBCLASS_PRE_20_VGA 0x01 | |
| 4001 | |
| 4002 /* PCI device subclasses for class 1 (mass storage controllers)*/ | |
| 4003 | |
| 4004 #define PCI_SUBCLASS_MSC_SCSI_BUS_CTLR 0x00 | |
| 4005 #define PCI_SUBCLASS_MSC_IDE_CTLR 0x01 | |
| 4006 #define PCI_SUBCLASS_MSC_FLOPPY_CTLR 0x02 | |
| 4007 #define PCI_SUBCLASS_MSC_IPI_CTLR 0x03 | |
| 4008 #define PCI_SUBCLASS_MSC_RAID_CTLR 0x04 | |
| 4009 #define PCI_SUBCLASS_MSC_OTHER 0x80 | |
| 4010 | |
| 4011 /* PCI device subclasses for class 2 (network controllers)*/ | |
| 4012 | |
| 4013 #define PCI_SUBCLASS_NET_ETHERNET_CTLR 0x00 | |
| 4014 #define PCI_SUBCLASS_NET_TOKEN_RING_CTLR 0x01 | |
| 4015 #define PCI_SUBCLASS_NET_FDDI_CTLR 0x02 | |
| 4016 #define PCI_SUBCLASS_NET_ATM_CTLR 0x03 | |
| 4017 #define PCI_SUBCLASS_NET_OTHER 0x80 | |
| 4018 | |
| 4019 /* PCI device subclasses for class 3 (display controllers)*/ | |
| 4020 | |
| 4021 #define PCI_SUBCLASS_VID_VGA_CTLR 0x00 | |
| 4022 #define PCI_SUBCLASS_VID_XGA_CTLR 0x01 | |
| 4023 #define PCI_SUBCLASS_VID_3D_CTLR 0x02 | |
| 4024 #define PCI_SUBCLASS_VID_OTHER 0x80 | |
| 4025 | |
| 4026 /* PCI device subclasses for class 4 (multimedia device)*/ | |
| 4027 | |
| 4028 #define PCI_SUBCLASS_MM_VIDEO_DEV 0x00 | |
| 4029 #define PCI_SUBCLASS_MM_AUDIO_DEV 0x01 | |
| 4030 #define PCI_SUBCLASS_MM_TELEPHONY_DEV 0x02 | |
| 4031 #define PCI_SUBCLASS_MM_OTHER 0x80 | |
| 4032 | |
| 4033 /* PCI device subclasses for class 5 (memory controller)*/ | |
| 4034 | |
| 4035 #define PCI_SUBCLASS_MEM_RAM 0x00 | |
| 4036 #define PCI_SUBCLASS_MEM_FLASH 0x01 | |
| 4037 #define PCI_SUBCLASS_MEM_OTHER 0x80 | |
| 4038 | |
| 4039 /* PCI device subclasses for class 6 (bridge device)*/ | |
| 4040 | |
| 4041 #define PCI_SUBCLASS_BR_HOST 0x00 | |
| 4042 #define PCI_SUBCLASS_BR_ISA 0x01 | |
| 4043 #define PCI_SUBCLASS_BR_EISA 0x02 | |
| 4044 #define PCI_SUBCLASS_BR_MCA 0x03 | |
| 4045 #define PCI_SUBCLASS_BR_PCI_TO_PCI 0x04 | |
| 4046 #define PCI_SUBCLASS_BR_PCMCIA 0x05 | |
| 4047 #define PCI_SUBCLASS_BR_NUBUS 0x06 | |
| 4048 #define PCI_SUBCLASS_BR_CARDBUS 0x07 | |
| 4049 #define PCI_SUBCLASS_BR_OTHER 0x80 | |
| 4050 | |
| 4051 /* PCI device subclasses for class C (serial bus controller)*/ | |
| 4052 | |
| 4053 #define PCI_SUBCLASS_SB_IEEE1394 0x00 | |
| 4054 #define PCI_SUBCLASS_SB_ACCESS 0x01 | |
| 4055 #define PCI_SUBCLASS_SB_SSA 0x02 | |
| 4056 #define PCI_SUBCLASS_SB_USB 0x03 | |
| 4057 #define PCI_SUBCLASS_SB_FIBRE_CHANNEL 0x04 | |
| 4058 #define PCI_SUBCLASS_SB_SMBUS 0x05 | |
| 4059 | |
| 4060 #define PCI_MAX_DEVICES 32 | |
| 4061 #define PCI_MAX_FUNCTION 8 | |
| 4062 #define PCI_MAX_BRIDGE_NUMBER 0xFF | |
| 4063 #define PCI_INVALID_VENDORID 0xFFFF | |
| 4064 #define PCI_COMMON_HDR_LENGTH (FIELD_OFFSET(PCI_COMMON_CONFIG, DeviceSpecific)) | |
| 4065 | |
| 4066 #define PCI_ADDRESS_IO_SPACE 0x01 | |
| 4067 #define PCI_ADDRESS_MEMORY_TYPE_MASK 0x06 | |
| 4068 #define PCI_ADDRESS_MEMORY_PREFETCHABLE 0x08 | |
| 4069 #define PCI_ADDRESS_IO_ADDRESS_MASK 0xfffffffc | |
| 4070 #define PCI_ADDRESS_MEMORY_ADDRESS_MASK 0xfffffff0 | |
| 4071 #define PCI_ADDRESS_ROM_ADDRESS_MASK 0xfffff800 | |
| 4072 | |
| 4073 #define PCI_TYPE_32BIT 0 | |
| 4074 #define PCI_TYPE_20BIT 2 | |
| 4075 #define PCI_TYPE_64BIT 4 | |
| 4076 | |
| 4077 typedef struct _PCI_SLOT_NUMBER { | |
| 4078 union { | |
| 4079 struct { | |
| 4080 ULONG DeviceNumber : 5; | |
| 4081 ULONG FunctionNumber : 3; | |
| 4082 ULONG Reserved : 24; | |
| 4083 } bits; | |
| 4084 ULONG AsULONG; | |
| 4085 } u; | |
| 4086 } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER; | |
| 4087 | |
| 4088 #define POOL_COLD_ALLOCATION 256 | |
| 4089 #define POOL_QUOTA_FAIL_INSTEAD_OF_RAISE 8 | |
| 4090 #define POOL_RAISE_IF_ALLOCATION_FAILURE 16 | |
| 4091 | |
| 4092 typedef struct _OSVERSIONINFOA { | |
| 4093 ULONG dwOSVersionInfoSize; | |
| 4094 ULONG dwMajorVersion; | |
| 4095 ULONG dwMinorVersion; | |
| 4096 ULONG dwBuildNumber; | |
| 4097 ULONG dwPlatformId; | |
| 4098 CHAR szCSDVersion[128]; | |
| 4099 } OSVERSIONINFOA, *POSVERSIONINFOA, *LPOSVERSIONINFOA; | |
| 4100 | |
| 4101 typedef struct _OSVERSIONINFOW { | |
| 4102 ULONG dwOSVersionInfoSize; | |
| 4103 ULONG dwMajorVersion; | |
| 4104 ULONG dwMinorVersion; | |
| 4105 ULONG dwBuildNumber; | |
| 4106 ULONG dwPlatformId; | |
| 4107 WCHAR szCSDVersion[128]; | |
| 4108 } OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW; | |
| 4109 | |
| 4110 #ifdef UNICODE | |
| 4111 typedef OSVERSIONINFOW OSVERSIONINFO; | |
| 4112 typedef POSVERSIONINFOW POSVERSIONINFO; | |
| 4113 typedef LPOSVERSIONINFOW LPOSVERSIONINFO; | |
| 4114 #else | |
| 4115 typedef OSVERSIONINFOA OSVERSIONINFO; | |
| 4116 typedef POSVERSIONINFOA POSVERSIONINFO; | |
| 4117 typedef LPOSVERSIONINFOA LPOSVERSIONINFO; | |
| 4118 #endif // UNICODE | |
| 4119 | |
| 4120 typedef struct _OSVERSIONINFOEXA { | |
| 4121 ULONG dwOSVersionInfoSize; | |
| 4122 ULONG dwMajorVersion; | |
| 4123 ULONG dwMinorVersion; | |
| 4124 ULONG dwBuildNumber; | |
| 4125 ULONG dwPlatformId; | |
| 4126 CHAR szCSDVersion[128]; | |
| 4127 USHORT wServicePackMajor; | |
| 4128 USHORT wServicePackMinor; | |
| 4129 USHORT wSuiteMask; | |
| 4130 UCHAR wProductType; | |
| 4131 UCHAR wReserved; | |
| 4132 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA; | |
| 4133 | |
| 4134 typedef struct _OSVERSIONINFOEXW { | |
| 4135 ULONG dwOSVersionInfoSize; | |
| 4136 ULONG dwMajorVersion; | |
| 4137 ULONG dwMinorVersion; | |
| 4138 ULONG dwBuildNumber; | |
| 4139 ULONG dwPlatformId; | |
| 4140 WCHAR szCSDVersion[128]; | |
| 4141 USHORT wServicePackMajor; | |
| 4142 USHORT wServicePackMinor; | |
| 4143 USHORT wSuiteMask; | |
| 4144 UCHAR wProductType; | |
| 4145 UCHAR wReserved; | |
| 4146 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW, RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW; | |
| 4147 | |
| 4148 #ifdef UNICODE | |
| 4149 typedef OSVERSIONINFOEXW OSVERSIONINFOEX; | |
| 4150 typedef POSVERSIONINFOEXW POSVERSIONINFOEX; | |
| 4151 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX; | |
| 4152 #else | |
| 4153 typedef OSVERSIONINFOEXA OSVERSIONINFOEX; | |
| 4154 typedef POSVERSIONINFOEXA POSVERSIONINFOEX; | |
| 4155 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX; | |
| 4156 #endif // UNICODE | |
| 4157 | |
| 4158 NTSYSAPI | |
| 4159 ULONGLONG | |
| 4160 DDKAPI | |
| 4161 VerSetConditionMask( | |
| 4162 IN ULONGLONG ConditionMask, | |
| 4163 IN ULONG TypeMask, | |
| 4164 IN UCHAR Condition); | |
| 4165 | |
| 4166 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \ | |
| 4167 ((ConditionMask) = VerSetConditionMask((ConditionMask), \ | |
| 4168 (TypeBitMask), (ComparisonType))) | |
| 4169 | |
| 4170 /* RtlVerifyVersionInfo() TypeMask */ | |
| 4171 | |
| 4172 #define VER_MINORVERSION 0x0000001 | |
| 4173 #define VER_MAJORVERSION 0x0000002 | |
| 4174 #define VER_BUILDNUMBER 0x0000004 | |
| 4175 #define VER_PLATFORMID 0x0000008 | |
| 4176 #define VER_SERVICEPACKMINOR 0x0000010 | |
| 4177 #define VER_SERVICEPACKMAJOR 0x0000020 | |
| 4178 #define VER_SUITENAME 0x0000040 | |
| 4179 #define VER_PRODUCT_TYPE 0x0000080 | |
| 4180 | |
| 4181 /* RtlVerifyVersionInfo() ComparisonType */ | |
| 4182 | |
| 4183 #define VER_EQUAL 1 | |
| 4184 #define VER_GREATER 2 | |
| 4185 #define VER_GREATER_EQUAL 3 | |
| 4186 #define VER_LESS 4 | |
| 4187 #define VER_LESS_EQUAL 5 | |
| 4188 #define VER_AND 6 | |
| 4189 #define VER_OR 7 | |
| 4190 | |
| 4191 #define VER_CONDITION_MASK 7 | |
| 4192 #define VER_NUM_BITS_PER_CONDITION_MASK 3 | |
| 4193 | |
| 4194 struct _RTL_RANGE; | |
| 4195 | |
| 4196 typedef BOOLEAN | |
| 4197 (NTAPI *PRTL_CONFLICT_RANGE_CALLBACK) ( | |
| 4198 PVOID Context, | |
| 4199 struct _RTL_RANGE *Range | |
| 4200 ); | |
| 4201 | |
| 4202 typedef enum _EVENT_TYPE { | |
| 4203 NotificationEvent, | |
| 4204 SynchronizationEvent | |
| 4205 } EVENT_TYPE; | |
| 4206 | |
| 4207 typedef enum _KWAIT_REASON { | |
| 4208 Executive, | |
| 4209 FreePage, | |
| 4210 PageIn, | |
| 4211 PoolAllocation, | |
| 4212 DelayExecution, | |
| 4213 Suspended, | |
| 4214 UserRequest, | |
| 4215 WrExecutive, | |
| 4216 WrFreePage, | |
| 4217 WrPageIn, | |
| 4218 WrPoolAllocation, | |
| 4219 WrDelayExecution, | |
| 4220 WrSuspended, | |
| 4221 WrUserRequest, | |
| 4222 WrEventPair, | |
| 4223 WrQueue, | |
| 4224 WrLpcReceive, | |
| 4225 WrLpcReply, | |
| 4226 WrVirtualMemory, | |
| 4227 WrPageOut, | |
| 4228 WrRendezvous, | |
| 4229 Spare2, | |
| 4230 WrGuardedMutex, | |
| 4231 Spare4, | |
| 4232 Spare5, | |
| 4233 Spare6, | |
| 4234 WrKernel, | |
| 4235 WrResource, | |
| 4236 WrPushLock, | |
| 4237 WrMutex, | |
| 4238 WrQuantumEnd, | |
| 4239 WrDispatchInt, | |
| 4240 WrPreempted, | |
| 4241 WrYieldExecution, | |
| 4242 MaximumWaitReason | |
| 4243 } KWAIT_REASON; | |
| 4244 | |
| 4245 typedef struct _KWAIT_BLOCK { | |
| 4246 LIST_ENTRY WaitListEntry; | |
| 4247 struct _KTHREAD * RESTRICTED_POINTER Thread; | |
| 4248 PVOID Object; | |
| 4249 struct _KWAIT_BLOCK * RESTRICTED_POINTER NextWaitBlock; | |
| 4250 USHORT WaitKey; | |
| 4251 UCHAR WaitType; | |
| 4252 UCHAR SpareByte; | |
| 4253 } KWAIT_BLOCK, *PKWAIT_BLOCK, *RESTRICTED_POINTER PRKWAIT_BLOCK; | |
| 4254 | |
| 4255 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK; | |
| 4256 | |
| 4257 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK { | |
| 4258 BOOLEAN Removed; | |
| 4259 BOOLEAN Reserved[3]; | |
| 4260 volatile LONG IoCount; | |
| 4261 KEVENT RemoveEvent; | |
| 4262 } IO_REMOVE_LOCK_COMMON_BLOCK; | |
| 4263 | |
| 4264 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK { | |
| 4265 LONG Signature; | |
| 4266 LONG HighWatermark; | |
| 4267 LONGLONG MaxLockedTicks; | |
| 4268 LONG AllocateTag; | |
| 4269 LIST_ENTRY LockList; | |
| 4270 KSPIN_LOCK Spin; | |
| 4271 volatile LONG LowMemoryCount; | |
| 4272 ULONG Reserved1[4]; | |
| 4273 PVOID Reserved2; | |
| 4274 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks; | |
| 4275 } IO_REMOVE_LOCK_DBG_BLOCK; | |
| 4276 | |
| 4277 typedef struct _IO_REMOVE_LOCK { | |
| 4278 IO_REMOVE_LOCK_COMMON_BLOCK Common; | |
| 4279 #if DBG | |
| 4280 IO_REMOVE_LOCK_DBG_BLOCK Dbg; | |
| 4281 #endif | |
| 4282 } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK; | |
| 4283 | |
| 4284 typedef struct _IO_WORKITEM *PIO_WORKITEM; | |
| 4285 | |
| 4286 typedef VOID | |
| 4287 (DDKAPI IO_WORKITEM_ROUTINE)( | |
| 4288 IN PDEVICE_OBJECT DeviceObject, | |
| 4289 IN PVOID Context); | |
| 4290 typedef IO_WORKITEM_ROUTINE *PIO_WORKITEM_ROUTINE; | |
| 4291 | |
| 4292 typedef struct _SHARE_ACCESS { | |
| 4293 ULONG OpenCount; | |
| 4294 ULONG Readers; | |
| 4295 ULONG Writers; | |
| 4296 ULONG Deleters; | |
| 4297 ULONG SharedRead; | |
| 4298 ULONG SharedWrite; | |
| 4299 ULONG SharedDelete; | |
| 4300 } SHARE_ACCESS, *PSHARE_ACCESS; | |
| 4301 | |
| 4302 typedef enum _KINTERRUPT_MODE { | |
| 4303 LevelSensitive, | |
| 4304 Latched | |
| 4305 } KINTERRUPT_MODE; | |
| 4306 | |
| 4307 #define THREAD_WAIT_OBJECTS 3 | |
| 4308 | |
| 4309 typedef VOID | |
| 4310 (DDKAPI *PKINTERRUPT_ROUTINE)( | |
| 4311 VOID); | |
| 4312 | |
| 4313 typedef enum _CREATE_FILE_TYPE { | |
| 4314 CreateFileTypeNone, | |
| 4315 CreateFileTypeNamedPipe, | |
| 4316 CreateFileTypeMailslot | |
| 4317 } CREATE_FILE_TYPE; | |
| 4318 | |
| 4319 typedef struct _CONFIGURATION_INFORMATION { | |
| 4320 ULONG DiskCount; | |
| 4321 ULONG FloppyCount; | |
| 4322 ULONG CdRomCount; | |
| 4323 ULONG TapeCount; | |
| 4324 ULONG ScsiPortCount; | |
| 4325 ULONG SerialCount; | |
| 4326 ULONG ParallelCount; | |
| 4327 BOOLEAN AtDiskPrimaryAddressClaimed; | |
| 4328 BOOLEAN AtDiskSecondaryAddressClaimed; | |
| 4329 ULONG Version; | |
| 4330 ULONG MediumChangerCount; | |
| 4331 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; | |
| 4332 | |
| 4333 typedef enum _CONFIGURATION_TYPE { | |
| 4334 ArcSystem, | |
| 4335 CentralProcessor, | |
| 4336 FloatingPointProcessor, | |
| 4337 PrimaryIcache, | |
| 4338 PrimaryDcache, | |
| 4339 SecondaryIcache, | |
| 4340 SecondaryDcache, | |
| 4341 SecondaryCache, | |
| 4342 EisaAdapter, | |
| 4343 TcAdapter, | |
| 4344 ScsiAdapter, | |
| 4345 DtiAdapter, | |
| 4346 MultiFunctionAdapter, | |
| 4347 DiskController, | |
| 4348 TapeController, | |
| 4349 CdromController, | |
| 4350 WormController, | |
| 4351 SerialController, | |
| 4352 NetworkController, | |
| 4353 DisplayController, | |
| 4354 ParallelController, | |
| 4355 PointerController, | |
| 4356 KeyboardController, | |
| 4357 AudioController, | |
| 4358 OtherController, | |
| 4359 DiskPeripheral, | |
| 4360 FloppyDiskPeripheral, | |
| 4361 TapePeripheral, | |
| 4362 ModemPeripheral, | |
| 4363 MonitorPeripheral, | |
| 4364 PrinterPeripheral, | |
| 4365 PointerPeripheral, | |
| 4366 KeyboardPeripheral, | |
| 4367 TerminalPeripheral, | |
| 4368 OtherPeripheral, | |
| 4369 LinePeripheral, | |
| 4370 NetworkPeripheral, | |
| 4371 SystemMemory, | |
| 4372 DockingInformation, | |
| 4373 RealModeIrqRoutingTable, | |
| 4374 RealModePCIEnumeration, | |
| 4375 MaximumType | |
| 4376 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; | |
| 4377 | |
| 4378 #define IO_FORCE_ACCESS_CHECK 0x001 | |
| 4379 #define IO_NO_PARAMETER_CHECKING 0x100 | |
| 4380 | |
| 4381 #define IO_REPARSE 0x0 | |
| 4382 #define IO_REMOUNT 0x1 | |
| 4383 | |
| 4384 typedef NTSTATUS | |
| 4385 (DDKAPI *PIO_QUERY_DEVICE_ROUTINE)( | |
| 4386 IN PVOID Context, | |
| 4387 IN PUNICODE_STRING PathName, | |
| 4388 IN INTERFACE_TYPE BusType, | |
| 4389 IN ULONG BusNumber, | |
| 4390 IN PKEY_VALUE_FULL_INFORMATION *BusInformation, | |
| 4391 IN CONFIGURATION_TYPE ControllerType, | |
| 4392 IN ULONG ControllerNumber, | |
| 4393 IN PKEY_VALUE_FULL_INFORMATION *ControllerInformation, | |
| 4394 IN CONFIGURATION_TYPE PeripheralType, | |
| 4395 IN ULONG PeripheralNumber, | |
| 4396 IN PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); | |
| 4397 | |
| 4398 typedef enum _IO_QUERY_DEVICE_DATA_FORMAT { | |
| 4399 IoQueryDeviceIdentifier = 0, | |
| 4400 IoQueryDeviceConfigurationData, | |
| 4401 IoQueryDeviceComponentInformation, | |
| 4402 IoQueryDeviceMaxData | |
| 4403 } IO_QUERY_DEVICE_DATA_FORMAT, *PIO_QUERY_DEVICE_DATA_FORMAT; | |
| 4404 | |
| 4405 typedef enum _KBUGCHECK_CALLBACK_REASON { | |
| 4406 KbCallbackInvalid, | |
| 4407 KbCallbackReserved1, | |
| 4408 KbCallbackSecondaryDumpData, | |
| 4409 KbCallbackDumpIo, | |
| 4410 } KBUGCHECK_CALLBACK_REASON; | |
| 4411 | |
| 4412 struct _KBUGCHECK_REASON_CALLBACK_RECORD; | |
| 4413 | |
| 4414 typedef VOID | |
| 4415 (DDKAPI *PKBUGCHECK_REASON_CALLBACK_ROUTINE)( | |
| 4416 IN KBUGCHECK_CALLBACK_REASON Reason, | |
| 4417 IN struct _KBUGCHECK_REASON_CALLBACK_RECORD *Record, | |
| 4418 IN OUT PVOID ReasonSpecificData, | |
| 4419 IN ULONG ReasonSpecificDataLength); | |
| 4420 | |
| 4421 typedef struct _KBUGCHECK_REASON_CALLBACK_RECORD { | |
| 4422 LIST_ENTRY Entry; | |
| 4423 PKBUGCHECK_REASON_CALLBACK_ROUTINE CallbackRoutine; | |
| 4424 PUCHAR Component; | |
| 4425 ULONG_PTR Checksum; | |
| 4426 KBUGCHECK_CALLBACK_REASON Reason; | |
| 4427 UCHAR State; | |
| 4428 } KBUGCHECK_REASON_CALLBACK_RECORD, *PKBUGCHECK_REASON_CALLBACK_RECORD; | |
| 4429 | |
| 4430 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE { | |
| 4431 BufferEmpty, | |
| 4432 BufferInserted, | |
| 4433 BufferStarted, | |
| 4434 BufferFinished, | |
| 4435 BufferIncomplete | |
| 4436 } KBUGCHECK_BUFFER_DUMP_STATE; | |
| 4437 | |
| 4438 typedef VOID | |
| 4439 (DDKAPI *PKBUGCHECK_CALLBACK_ROUTINE)( | |
| 4440 IN PVOID Buffer, | |
| 4441 IN ULONG Length); | |
| 4442 | |
| 4443 typedef struct _KBUGCHECK_CALLBACK_RECORD { | |
| 4444 LIST_ENTRY Entry; | |
| 4445 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine; | |
| 4446 PVOID Buffer; | |
| 4447 ULONG Length; | |
| 4448 PUCHAR Component; | |
| 4449 ULONG_PTR Checksum; | |
| 4450 UCHAR State; | |
| 4451 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; | |
| 4452 | |
| 4453 typedef BOOLEAN | |
| 4454 (DDKAPI *PNMI_CALLBACK)( | |
| 4455 IN PVOID Context, | |
| 4456 IN BOOLEAN Handled); | |
| 4457 | |
| 4458 /* | |
| 4459 * VOID | |
| 4460 * KeInitializeCallbackRecord( | |
| 4461 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord) | |
| 4462 */ | |
| 4463 #define KeInitializeCallbackRecord(CallbackRecord) \ | |
| 4464 CallbackRecord->State = BufferEmpty; | |
| 4465 | |
| 4466 typedef enum _KDPC_IMPORTANCE { | |
| 4467 LowImportance, | |
| 4468 MediumImportance, | |
| 4469 HighImportance | |
| 4470 } KDPC_IMPORTANCE; | |
| 4471 | |
| 4472 typedef enum _MEMORY_CACHING_TYPE_ORIG { | |
| 4473 MmFrameBufferCached = 2 | |
| 4474 } MEMORY_CACHING_TYPE_ORIG; | |
| 4475 | |
| 4476 typedef enum _MEMORY_CACHING_TYPE { | |
| 4477 MmNonCached = FALSE, | |
| 4478 MmCached = TRUE, | |
| 4479 MmWriteCombined = MmFrameBufferCached, | |
| 4480 MmHardwareCoherentCached, | |
| 4481 MmNonCachedUnordered, | |
| 4482 MmUSWCCached, | |
| 4483 MmMaximumCacheType | |
| 4484 } MEMORY_CACHING_TYPE; | |
| 4485 | |
| 4486 typedef enum _MM_PAGE_PRIORITY { | |
| 4487 LowPagePriority, | |
| 4488 NormalPagePriority = 16, | |
| 4489 HighPagePriority = 32 | |
| 4490 } MM_PAGE_PRIORITY; | |
| 4491 | |
| 4492 typedef enum _LOCK_OPERATION { | |
| 4493 IoReadAccess, | |
| 4494 IoWriteAccess, | |
| 4495 IoModifyAccess | |
| 4496 } LOCK_OPERATION; | |
| 4497 | |
| 4498 #define FLUSH_MULTIPLE_MAXIMUM 32 | |
| 4499 | |
| 4500 typedef enum _MM_SYSTEM_SIZE { | |
| 4501 MmSmallSystem, | |
| 4502 MmMediumSystem, | |
| 4503 MmLargeSystem | |
| 4504 } MM_SYSTEMSIZE; | |
| 4505 | |
| 4506 typedef struct _OBJECT_HANDLE_INFORMATION { | |
| 4507 ULONG HandleAttributes; | |
| 4508 ACCESS_MASK GrantedAccess; | |
| 4509 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; | |
| 4510 | |
| 4511 typedef struct _CLIENT_ID { | |
| 4512 HANDLE UniqueProcess; | |
| 4513 HANDLE UniqueThread; | |
| 4514 } CLIENT_ID, *PCLIENT_ID; | |
| 4515 | |
| 4516 typedef VOID | |
| 4517 (DDKAPI *PKSTART_ROUTINE)( | |
| 4518 IN PVOID StartContext); | |
| 4519 | |
| 4520 typedef VOID | |
| 4521 (DDKAPI *PCREATE_PROCESS_NOTIFY_ROUTINE)( | |
| 4522 IN HANDLE ParentId, | |
| 4523 IN HANDLE ProcessId, | |
| 4524 IN BOOLEAN Create); | |
| 4525 | |
| 4526 typedef VOID | |
| 4527 (DDKAPI *PCREATE_THREAD_NOTIFY_ROUTINE)( | |
| 4528 IN HANDLE ProcessId, | |
| 4529 IN HANDLE ThreadId, | |
| 4530 IN BOOLEAN Create); | |
| 4531 | |
| 4532 typedef struct _IMAGE_INFO { | |
| 4533 _ANONYMOUS_UNION union { | |
| 4534 ULONG Properties; | |
| 4535 _ANONYMOUS_STRUCT struct { | |
| 4536 ULONG ImageAddressingMode : 8; | |
| 4537 ULONG SystemModeImage : 1; | |
| 4538 ULONG ImageMappedToAllPids : 1; | |
| 4539 ULONG Reserved : 22; | |
| 4540 } DUMMYSTRUCTNAME; | |
| 4541 } DUMMYUNIONNAME; | |
| 4542 PVOID ImageBase; | |
| 4543 ULONG ImageSelector; | |
| 4544 SIZE_T ImageSize; | |
| 4545 ULONG ImageSectionNumber; | |
| 4546 } IMAGE_INFO, *PIMAGE_INFO; | |
| 4547 | |
| 4548 #define IMAGE_ADDRESSING_MODE_32BIT 3 | |
| 4549 | |
| 4550 typedef VOID | |
| 4551 (DDKAPI *PLOAD_IMAGE_NOTIFY_ROUTINE)( | |
| 4552 IN PUNICODE_STRING FullImageName, | |
| 4553 IN HANDLE ProcessId, | |
| 4554 IN PIMAGE_INFO ImageInfo); | |
| 4555 | |
| 4556 #pragma pack(push,4) | |
| 4557 typedef enum _BUS_DATA_TYPE { | |
| 4558 ConfigurationSpaceUndefined = -1, | |
| 4559 Cmos, | |
| 4560 EisaConfiguration, | |
| 4561 Pos, | |
| 4562 CbusConfiguration, | |
| 4563 PCIConfiguration, | |
| 4564 VMEConfiguration, | |
| 4565 NuBusConfiguration, | |
| 4566 PCMCIAConfiguration, | |
| 4567 MPIConfiguration, | |
| 4568 MPSAConfiguration, | |
| 4569 PNPISAConfiguration, | |
| 4570 SgiInternalConfiguration, | |
| 4571 MaximumBusDataType | |
| 4572 } BUS_DATA_TYPE, *PBUS_DATA_TYPE; | |
| 4573 #pragma pack(pop) | |
| 4574 | |
| 4575 typedef struct _NT_TIB { | |
| 4576 struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; | |
| 4577 PVOID StackBase; | |
| 4578 PVOID StackLimit; | |
| 4579 PVOID SubSystemTib; | |
| 4580 _ANONYMOUS_UNION union { | |
| 4581 PVOID FiberData; | |
| 4582 ULONG Version; | |
| 4583 } DUMMYUNIONNAME; | |
| 4584 PVOID ArbitraryUserPointer; | |
| 4585 struct _NT_TIB *Self; | |
| 4586 } NT_TIB, *PNT_TIB; | |
| 4587 | |
| 4588 typedef struct _NT_TIB32 { | |
| 4589 ULONG ExceptionList; | |
| 4590 ULONG StackBase; | |
| 4591 ULONG StackLimit; | |
| 4592 ULONG SubSystemTib; | |
| 4593 union { | |
| 4594 ULONG FiberData; | |
| 4595 ULONG Version; | |
| 4596 }; | |
| 4597 ULONG ArbitraryUserPointer; | |
| 4598 ULONG Self; | |
| 4599 } NT_TIB32,*PNT_TIB32; | |
| 4600 | |
| 4601 typedef struct _NT_TIB64 { | |
| 4602 ULONG64 ExceptionList; | |
| 4603 ULONG64 StackBase; | |
| 4604 ULONG64 StackLimit; | |
| 4605 ULONG64 SubSystemTib; | |
| 4606 union { | |
| 4607 ULONG64 FiberData; | |
| 4608 ULONG Version; | |
| 4609 }; | |
| 4610 ULONG64 ArbitraryUserPointer; | |
| 4611 ULONG64 Self; | |
| 4612 } NT_TIB64,*PNT_TIB64; | |
| 4613 | |
| 4614 typedef enum _PROCESSINFOCLASS { | |
| 4615 ProcessBasicInformation, | |
| 4616 ProcessQuotaLimits, | |
| 4617 ProcessIoCounters, | |
| 4618 ProcessVmCounters, | |
| 4619 ProcessTimes, | |
| 4620 ProcessBasePriority, | |
| 4621 ProcessRaisePriority, | |
| 4622 ProcessDebugPort, | |
| 4623 ProcessExceptionPort, | |
| 4624 ProcessAccessToken, | |
| 4625 ProcessLdtInformation, | |
| 4626 ProcessLdtSize, | |
| 4627 ProcessDefaultHardErrorMode, | |
| 4628 ProcessIoPortHandlers, | |
| 4629 ProcessPooledUsageAndLimits, | |
| 4630 ProcessWorkingSetWatch, | |
| 4631 ProcessUserModeIOPL, | |
| 4632 ProcessEnableAlignmentFaultFixup, | |
| 4633 ProcessPriorityClass, | |
| 4634 ProcessWx86Information, | |
| 4635 ProcessHandleCount, | |
| 4636 ProcessAffinityMask, | |
| 4637 ProcessPriorityBoost, | |
| 4638 ProcessDeviceMap, | |
| 4639 ProcessSessionInformation, | |
| 4640 ProcessForegroundInformation, | |
| 4641 ProcessWow64Information, | |
| 4642 ProcessImageFileName, | |
| 4643 ProcessLUIDDeviceMapsEnabled, | |
| 4644 ProcessBreakOnTermination, | |
| 4645 ProcessDebugObjectHandle, | |
| 4646 ProcessDebugFlags, | |
| 4647 ProcessHandleTracing, | |
| 4648 ProcessIoPriority, | |
| 4649 ProcessExecuteFlags, | |
| 4650 ProcessTlsInformation, | |
| 4651 ProcessCookie, | |
| 4652 ProcessImageInformation, | |
| 4653 ProcessCycleTime, | |
| 4654 ProcessPagePriority, | |
| 4655 ProcessInstrumentationCallback, | |
| 4656 MaxProcessInfoClass | |
| 4657 } PROCESSINFOCLASS; | |
| 4658 | |
| 4659 typedef enum _THREADINFOCLASS { | |
| 4660 ThreadBasicInformation, | |
| 4661 ThreadTimes, | |
| 4662 ThreadPriority, | |
| 4663 ThreadBasePriority, | |
| 4664 ThreadAffinityMask, | |
| 4665 ThreadImpersonationToken, | |
| 4666 ThreadDescriptorTableEntry, | |
| 4667 ThreadEnableAlignmentFaultFixup, | |
| 4668 ThreadEventPair_Reusable, | |
| 4669 ThreadQuerySetWin32StartAddress, | |
| 4670 ThreadZeroTlsCell, | |
| 4671 ThreadPerformanceCount, | |
| 4672 ThreadAmILastThread, | |
| 4673 ThreadIdealProcessor, | |
| 4674 ThreadPriorityBoost, | |
| 4675 ThreadSetTlsArrayAddress, | |
| 4676 ThreadIsIoPending, | |
| 4677 ThreadHideFromDebugger, | |
| 4678 ThreadBreakOnTermination, | |
| 4679 ThreadSwitchLegacyState, | |
| 4680 ThreadIsTerminated, | |
| 4681 ThreadLastSystemCall, | |
| 4682 ThreadIoPriority, | |
| 4683 ThreadCycleTime, | |
| 4684 ThreadPagePriority, | |
| 4685 ThreadActualBasePriority, | |
| 4686 MaxThreadInfoClass | |
| 4687 } THREADINFOCLASS; | |
| 4688 | |
| 4689 typedef struct _PROCESS_BASIC_INFORMATION | |
| 4690 { | |
| 4691 NTSTATUS ExitStatus; | |
| 4692 struct _PEB *PebBaseAddress; | |
| 4693 ULONG_PTR AffinityMask; | |
| 4694 KPRIORITY BasePriority; | |
| 4695 ULONG_PTR UniqueProcessId; | |
| 4696 ULONG_PTR InheritedFromUniqueProcessId; | |
| 4697 } PROCESS_BASIC_INFORMATION,*PPROCESS_BASIC_INFORMATION; | |
| 4698 | |
| 4699 typedef struct _PROCESS_WS_WATCH_INFORMATION | |
| 4700 { | |
| 4701 PVOID FaultingPc; | |
| 4702 PVOID FaultingVa; | |
| 4703 } PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION; | |
| 4704 | |
| 4705 typedef struct _PROCESS_DEVICEMAP_INFORMATION | |
| 4706 { | |
| 4707 union | |
| 4708 { | |
| 4709 struct | |
| 4710 { | |
| 4711 HANDLE DirectoryHandle; | |
| 4712 } Set; | |
| 4713 struct | |
| 4714 { | |
| 4715 ULONG DriveMap; | |
| 4716 UCHAR DriveType[32]; | |
| 4717 } Query; | |
| 4718 }; | |
| 4719 } PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION; | |
| 4720 | |
| 4721 typedef struct _KERNEL_USER_TIMES | |
| 4722 { | |
| 4723 LARGE_INTEGER CreateTime; | |
| 4724 LARGE_INTEGER ExitTime; | |
| 4725 LARGE_INTEGER KernelTime; | |
| 4726 LARGE_INTEGER UserTime; | |
| 4727 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; | |
| 4728 | |
| 4729 typedef struct _PROCESS_ACCESS_TOKEN | |
| 4730 { | |
| 4731 HANDLE Token; | |
| 4732 HANDLE Thread; | |
| 4733 } PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN; | |
| 4734 | |
| 4735 typedef struct _PROCESS_SESSION_INFORMATION | |
| 4736 { | |
| 4737 ULONG SessionId; | |
| 4738 } PROCESS_SESSION_INFORMATION, *PPROCESS_SESSION_INFORMATION; | |
| 4739 | |
| 4740 typedef VOID | |
| 4741 (DDKAPI *PREQUEST_POWER_COMPLETE)( | |
| 4742 IN PDEVICE_OBJECT DeviceObject, | |
| 4743 IN UCHAR MinorFunction, | |
| 4744 IN POWER_STATE PowerState, | |
| 4745 IN PVOID Context, | |
| 4746 IN PIO_STATUS_BLOCK IoStatus); | |
| 4747 | |
| 4748 typedef enum _TRACE_INFORMATION_CLASS { | |
| 4749 TraceIdClass, | |
| 4750 TraceHandleClass, | |
| 4751 TraceEnableFlagsClass, | |
| 4752 TraceEnableLevelClass, | |
| 4753 GlobalLoggerHandleClass, | |
| 4754 EventLoggerHandleClass, | |
| 4755 AllLoggerHandlesClass, | |
| 4756 TraceHandleByNameClass | |
| 4757 } TRACE_INFORMATION_CLASS; | |
| 4758 | |
| 4759 typedef enum _REG_NOTIFY_CLASS | |
| 4760 { | |
| 4761 RegNtDeleteKey, | |
| 4762 RegNtPreDeleteKey = RegNtDeleteKey, | |
| 4763 RegNtSetValueKey, | |
| 4764 RegNtPreSetValueKey = RegNtSetValueKey, | |
| 4765 RegNtDeleteValueKey, | |
| 4766 RegNtPreDeleteValueKey = RegNtDeleteValueKey, | |
| 4767 RegNtSetInformationKey, | |
| 4768 RegNtPreSetInformationKey = RegNtSetInformationKey, | |
| 4769 RegNtRenameKey, | |
| 4770 RegNtPreRenameKey = RegNtRenameKey, | |
| 4771 RegNtEnumerateKey, | |
| 4772 RegNtPreEnumerateKey = RegNtEnumerateKey, | |
| 4773 RegNtEnumerateValueKey, | |
| 4774 RegNtPreEnumerateValueKey = RegNtEnumerateValueKey, | |
| 4775 RegNtQueryKey, | |
| 4776 RegNtPreQueryKey = RegNtQueryKey, | |
| 4777 RegNtQueryValueKey, | |
| 4778 RegNtPreQueryValueKey = RegNtQueryValueKey, | |
| 4779 RegNtQueryMultipleValueKey, | |
| 4780 RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey, | |
| 4781 RegNtPreCreateKey, | |
| 4782 RegNtPostCreateKey, | |
| 4783 RegNtPreOpenKey, | |
| 4784 RegNtPostOpenKey, | |
| 4785 RegNtKeyHandleClose, | |
| 4786 RegNtPreKeyHandleClose = RegNtKeyHandleClose, | |
| 4787 RegNtPostDeleteKey, | |
| 4788 RegNtPostSetValueKey, | |
| 4789 RegNtPostDeleteValueKey, | |
| 4790 RegNtPostSetInformationKey, | |
| 4791 RegNtPostRenameKey, | |
| 4792 RegNtPostEnumerateKey, | |
| 4793 RegNtPostEnumerateValueKey, | |
| 4794 RegNtPostQueryKey, | |
| 4795 RegNtPostQueryValueKey, | |
| 4796 RegNtPostQueryMultipleValueKey, | |
| 4797 RegNtPostKeyHandleClose, | |
| 4798 RegNtPreCreateKeyEx, | |
| 4799 RegNtPostCreateKeyEx, | |
| 4800 RegNtPreOpenKeyEx, | |
| 4801 RegNtPostOpenKeyEx | |
| 4802 } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS; | |
| 4803 | |
| 4804 typedef NTSTATUS | |
| 4805 (NTAPI *PEX_CALLBACK_FUNCTION)( | |
| 4806 IN PVOID CallbackContext, | |
| 4807 IN PVOID Argument1, | |
| 4808 IN PVOID Argument2 | |
| 4809 ); | |
| 4810 | |
| 4811 typedef struct _REG_DELETE_KEY_INFORMATION | |
| 4812 { | |
| 4813 PVOID Object; | |
| 4814 } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION; | |
| 4815 | |
| 4816 typedef struct _REG_SET_VALUE_KEY_INFORMATION | |
| 4817 { | |
| 4818 PVOID Object; | |
| 4819 PUNICODE_STRING ValueName; | |
| 4820 ULONG TitleIndex; | |
| 4821 ULONG Type; | |
| 4822 PVOID Data; | |
| 4823 ULONG DataSize; | |
| 4824 } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION; | |
| 4825 | |
| 4826 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION | |
| 4827 { | |
| 4828 PVOID Object; | |
| 4829 PUNICODE_STRING ValueName; | |
| 4830 } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION; | |
| 4831 | |
| 4832 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION | |
| 4833 { | |
| 4834 PVOID Object; | |
| 4835 KEY_SET_INFORMATION_CLASS KeySetInformationClass; | |
| 4836 PVOID KeySetInformation; | |
| 4837 ULONG KeySetInformationLength; | |
| 4838 } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION; | |
| 4839 | |
| 4840 typedef struct _REG_ENUMERATE_KEY_INFORMATION | |
| 4841 { | |
| 4842 PVOID Object; | |
| 4843 ULONG Index; | |
| 4844 KEY_INFORMATION_CLASS KeyInformationClass; | |
| 4845 PVOID KeyInformation; | |
| 4846 ULONG Length; | |
| 4847 PULONG ResultLength; | |
| 4848 } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION; | |
| 4849 | |
| 4850 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION | |
| 4851 { | |
| 4852 PVOID Object; | |
| 4853 ULONG Index; | |
| 4854 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass; | |
| 4855 PVOID KeyValueInformation; | |
| 4856 ULONG Length; | |
| 4857 PULONG ResultLength; | |
| 4858 } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION; | |
| 4859 | |
| 4860 typedef struct _REG_QUERY_KEY_INFORMATION | |
| 4861 { | |
| 4862 PVOID Object; | |
| 4863 KEY_INFORMATION_CLASS KeyInformationClass; | |
| 4864 PVOID KeyInformation; | |
| 4865 ULONG Length; | |
| 4866 PULONG ResultLength; | |
| 4867 } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION; | |
| 4868 | |
| 4869 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION | |
| 4870 { | |
| 4871 PVOID Object; | |
| 4872 PUNICODE_STRING ValueName; | |
| 4873 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass; | |
| 4874 PVOID KeyValueInformation; | |
| 4875 ULONG Length; | |
| 4876 PULONG ResultLength; | |
| 4877 } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION; | |
| 4878 | |
| 4879 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION | |
| 4880 { | |
| 4881 PVOID Object; | |
| 4882 PKEY_VALUE_ENTRY ValueEntries; | |
| 4883 ULONG EntryCount; | |
| 4884 PVOID ValueBuffer; | |
| 4885 PULONG BufferLength; | |
| 4886 PULONG RequiredBufferLength; | |
| 4887 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION; | |
| 4888 | |
| 4889 typedef struct _REG_PRE_CREATE_KEY_INFORMATION | |
| 4890 { | |
| 4891 PUNICODE_STRING CompleteName; | |
| 4892 } REG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_CREATE_KEY_INFORMATION; | |
| 4893 | |
| 4894 typedef struct _REG_POST_CREATE_KEY_INFORMATION | |
| 4895 { | |
| 4896 PUNICODE_STRING CompleteName; | |
| 4897 PVOID Object; | |
| 4898 NTSTATUS Status; | |
| 4899 } REG_POST_CREATE_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION; | |
| 4900 | |
| 4901 typedef struct _REG_PRE_OPEN_KEY_INFORMATION | |
| 4902 { | |
| 4903 PUNICODE_STRING CompleteName; | |
| 4904 } REG_PRE_OPEN_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION; | |
| 4905 | |
| 4906 typedef struct _REG_POST_OPEN_KEY_INFORMATION | |
| 4907 { | |
| 4908 PUNICODE_STRING CompleteName; | |
| 4909 PVOID Object; | |
| 4910 NTSTATUS Status; | |
| 4911 } REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION; | |
| 4912 | |
| 4913 typedef struct _REG_POST_OPERATION_INFORMATION | |
| 4914 { | |
| 4915 PVOID Object; | |
| 4916 NTSTATUS Status; | |
| 4917 } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION; | |
| 4918 | |
| 4919 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION | |
| 4920 { | |
| 4921 PVOID Object; | |
| 4922 } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION; | |
| 4923 | |
| 4924 /* | |
| 4925 ** Storage structures | |
| 4926 */ | |
| 4927 typedef enum _PARTITION_STYLE { | |
| 4928 PARTITION_STYLE_MBR, | |
| 4929 PARTITION_STYLE_GPT, | |
| 4930 PARTITION_STYLE_RAW | |
| 4931 } PARTITION_STYLE; | |
| 4932 | |
| 4933 typedef struct _CREATE_DISK_MBR { | |
| 4934 ULONG Signature; | |
| 4935 } CREATE_DISK_MBR, *PCREATE_DISK_MBR; | |
| 4936 | |
| 4937 typedef struct _CREATE_DISK_GPT { | |
| 4938 GUID DiskId; | |
| 4939 ULONG MaxPartitionCount; | |
| 4940 } CREATE_DISK_GPT, *PCREATE_DISK_GPT; | |
| 4941 | |
| 4942 typedef struct _CREATE_DISK { | |
| 4943 PARTITION_STYLE PartitionStyle; | |
| 4944 _ANONYMOUS_UNION union { | |
| 4945 CREATE_DISK_MBR Mbr; | |
| 4946 CREATE_DISK_GPT Gpt; | |
| 4947 } DUMMYUNIONNAME; | |
| 4948 } CREATE_DISK, *PCREATE_DISK; | |
| 4949 | |
| 4950 typedef struct _DISK_SIGNATURE { | |
| 4951 ULONG PartitionStyle; | |
| 4952 _ANONYMOUS_UNION union { | |
| 4953 struct { | |
| 4954 ULONG Signature; | |
| 4955 ULONG CheckSum; | |
| 4956 } Mbr; | |
| 4957 struct { | |
| 4958 GUID DiskId; | |
| 4959 } Gpt; | |
| 4960 } DUMMYUNIONNAME; | |
| 4961 } DISK_SIGNATURE, *PDISK_SIGNATURE; | |
| 4962 | |
| 4963 typedef VOID | |
| 4964 (FASTCALL*PTIME_UPDATE_NOTIFY_ROUTINE)( | |
| 4965 IN HANDLE ThreadId, | |
| 4966 IN KPROCESSOR_MODE Mode); | |
| 4967 | |
| 4968 #define DBG_STATUS_CONTROL_C 1 | |
| 4969 #define DBG_STATUS_SYSRQ 2 | |
| 4970 #define DBG_STATUS_BUGCHECK_FIRST 3 | |
| 4971 #define DBG_STATUS_BUGCHECK_SECOND 4 | |
| 4972 #define DBG_STATUS_FATAL 5 | |
| 4973 #define DBG_STATUS_DEBUG_CONTROL 6 | |
| 4974 #define DBG_STATUS_WORKER 7 | |
| 4975 | |
| 4976 typedef struct _PHYSICAL_MEMORY_RANGE { | |
| 4977 PHYSICAL_ADDRESS BaseAddress; | |
| 4978 LARGE_INTEGER NumberOfBytes; | |
| 4979 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; | |
| 4980 | |
| 4981 typedef ULONG_PTR | |
| 4982 (NTAPI *PDRIVER_VERIFIER_THUNK_ROUTINE)( | |
| 4983 IN PVOID Context); | |
| 4984 | |
| 4985 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { | |
| 4986 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; | |
| 4987 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine; | |
| 4988 } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS; | |
| 4989 | |
| 4990 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001 | |
| 4991 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002 | |
| 4992 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004 | |
| 4993 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008 | |
| 4994 #define DRIVER_VERIFIER_IO_CHECKING 0x0010 | |
| 4995 | |
| 4996 #define HASH_STRING_ALGORITHM_DEFAULT 0 | |
| 4997 #define HASH_STRING_ALGORITHM_X65599 1 | |
| 4998 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff | |
| 4999 | |
| 5000 typedef VOID | |
| 5001 (DDKAPI *PTIMER_APC_ROUTINE)( | |
| 5002 IN PVOID TimerContext, | |
| 5003 IN ULONG TimerLowValue, | |
| 5004 IN LONG TimerHighValue); | |
| 5005 | |
| 5006 | |
| 5007 | |
| 5008 /* | |
| 5009 ** WMI structures | |
| 5010 */ | |
| 5011 | |
| 5012 typedef VOID | |
| 5013 (DDKAPI *WMI_NOTIFICATION_CALLBACK)( | |
| 5014 PVOID Wnode, | |
| 5015 PVOID Context); | |
| 5016 | |
| 5017 | |
| 5018 /* | |
| 5019 ** Architecture specific structures | |
| 5020 */ | |
| 5021 #define PCR_MINOR_VERSION 1 | |
| 5022 #define PCR_MAJOR_VERSION 1 | |
| 5023 | |
| 5024 #ifdef _X86_ | |
| 5025 | |
| 5026 #define SIZE_OF_80387_REGISTERS 80 | |
| 5027 #define CONTEXT_i386 0x10000 | |
| 5028 #define CONTEXT_i486 0x10000 | |
| 5029 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L) | |
| 5030 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L) | |
| 5031 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L) | |
| 5032 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L) | |
| 5033 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L) | |
| 5034 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L) | |
| 5035 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS) | |
| 5036 #define MAXIMUM_SUPPORTED_EXTENSION 512 | |
| 5037 | |
| 5038 typedef struct _FLOATING_SAVE_AREA { | |
| 5039 ULONG ControlWord; | |
| 5040 ULONG StatusWord; | |
| 5041 ULONG TagWord; | |
| 5042 ULONG ErrorOffset; | |
| 5043 ULONG ErrorSelector; | |
| 5044 ULONG DataOffset; | |
| 5045 ULONG DataSelector; | |
| 5046 UCHAR RegisterArea[SIZE_OF_80387_REGISTERS]; | |
| 5047 ULONG Cr0NpxState; | |
| 5048 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA; | |
| 5049 | |
| 5050 typedef struct _CONTEXT { | |
| 5051 ULONG ContextFlags; | |
| 5052 ULONG Dr0; | |
| 5053 ULONG Dr1; | |
| 5054 ULONG Dr2; | |
| 5055 ULONG Dr3; | |
| 5056 ULONG Dr6; | |
| 5057 ULONG Dr7; | |
| 5058 FLOATING_SAVE_AREA FloatSave; | |
| 5059 ULONG SegGs; | |
| 5060 ULONG SegFs; | |
| 5061 ULONG SegEs; | |
| 5062 ULONG SegDs; | |
| 5063 ULONG Edi; | |
| 5064 ULONG Esi; | |
| 5065 ULONG Ebx; | |
| 5066 ULONG Edx; | |
| 5067 ULONG Ecx; | |
| 5068 ULONG Eax; | |
| 5069 ULONG Ebp; | |
| 5070 ULONG Eip; | |
| 5071 ULONG SegCs; | |
| 5072 ULONG EFlags; | |
| 5073 ULONG Esp; | |
| 5074 ULONG SegSs; | |
| 5075 UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION]; | |
| 5076 } CONTEXT; | |
| 5077 | |
| 5078 // | |
| 5079 // Used to contain PFNs and PFN counts | |
| 5080 // | |
| 5081 typedef ULONG PFN_COUNT; | |
| 5082 typedef ULONG PFN_NUMBER, *PPFN_NUMBER; | |
| 5083 typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; | |
| 5084 | |
| 5085 #define PASSIVE_LEVEL 0 | |
| 5086 #define LOW_LEVEL 0 | |
| 5087 #define APC_LEVEL 1 | |
| 5088 #define DISPATCH_LEVEL 2 | |
| 5089 #define PROFILE_LEVEL 27 | |
| 5090 #define CLOCK1_LEVEL 28 | |
| 5091 #define CLOCK2_LEVEL 28 | |
| 5092 #define IPI_LEVEL 29 | |
| 5093 #define POWER_LEVEL 30 | |
| 5094 #define HIGH_LEVEL 31 | |
| 5095 | |
| 5096 typedef struct _KPCR_TIB { | |
| 5097 PVOID ExceptionList; /* 00 */ | |
| 5098 PVOID StackBase; /* 04 */ | |
| 5099 PVOID StackLimit; /* 08 */ | |
| 5100 PVOID SubSystemTib; /* 0C */ | |
| 5101 _ANONYMOUS_UNION union { | |
| 5102 PVOID FiberData; /* 10 */ | |
| 5103 ULONG Version; /* 10 */ | |
| 5104 } DUMMYUNIONNAME; | |
| 5105 PVOID ArbitraryUserPointer; /* 14 */ | |
| 5106 struct _KPCR_TIB *Self; /* 18 */ | |
| 5107 } KPCR_TIB, *PKPCR_TIB; /* 1C */ | |
| 5108 | |
| 5109 typedef struct _KPCR { | |
| 5110 KPCR_TIB Tib; /* 00 */ | |
| 5111 struct _KPCR *Self; /* 1C */ | |
| 5112 struct _KPRCB *Prcb; /* 20 */ | |
| 5113 KIRQL Irql; /* 24 */ | |
| 5114 ULONG IRR; /* 28 */ | |
| 5115 ULONG IrrActive; /* 2C */ | |
| 5116 ULONG IDR; /* 30 */ | |
| 5117 PVOID KdVersionBlock; /* 34 */ | |
| 5118 PUSHORT IDT; /* 38 */ | |
| 5119 PUSHORT GDT; /* 3C */ | |
| 5120 struct _KTSS *TSS; /* 40 */ | |
| 5121 USHORT MajorVersion; /* 44 */ | |
| 5122 USHORT MinorVersion; /* 46 */ | |
| 5123 KAFFINITY SetMember; /* 48 */ | |
| 5124 ULONG StallScaleFactor; /* 4C */ | |
| 5125 UCHAR SpareUnused; /* 50 */ | |
| 5126 UCHAR Number; /* 51 */ | |
| 5127 UCHAR Spare0; | |
| 5128 UCHAR SecondLevelCacheAssociativity; | |
| 5129 ULONG VdmAlert; | |
| 5130 ULONG KernelReserved[14]; // For use by the kernel | |
| 5131 ULONG SecondLevelCacheSize; | |
| 5132 ULONG HalReserved[16]; // For use by Hal | |
| 5133 } KPCR, *PKPCR; /* 54 */ | |
| 5134 | |
| 5135 #define KeGetPcr() PCR | |
| 5136 | |
| 5137 typedef struct _KFLOATING_SAVE { | |
| 5138 ULONG ControlWord; | |
| 5139 ULONG StatusWord; | |
| 5140 ULONG ErrorOffset; | |
| 5141 ULONG ErrorSelector; | |
| 5142 ULONG DataOffset; | |
| 5143 ULONG DataSelector; | |
| 5144 ULONG Cr0NpxState; | |
| 5145 ULONG Spare1; | |
| 5146 } KFLOATING_SAVE, *PKFLOATING_SAVE; | |
| 5147 | |
| 5148 FORCEINLINE | |
| 5149 ULONG | |
| 5150 KeGetCurrentProcessorNumber(VOID) | |
| 5151 { | |
| 5152 #if defined(__GNUC__) | |
| 5153 ULONG ret; | |
| 5154 __asm__ __volatile__ ( | |
| 5155 "movl %%fs:%c1, %0\n" | |
| 5156 : "=r" (ret) | |
| 5157 : "i" (FIELD_OFFSET(KPCR, Number)) | |
| 5158 ); | |
| 5159 return ret; | |
| 5160 #elif defined(_MSC_VER) | |
| 5161 #if _MSC_FULL_VER >= 13012035 | |
| 5162 return (ULONG)__readfsbyte(FIELD_OFFSET(KPCR, Number)); | |
| 5163 #else | |
| 5164 __asm { movzx eax, fs:[0] KPCR.Number } | |
| 5165 #endif | |
| 5166 #else | |
| 5167 #error Unknown compiler | |
| 5168 #endif | |
| 5169 } | |
| 5170 | |
| 5171 NTHALAPI | |
| 5172 KIRQL | |
| 5173 DDKAPI | |
| 5174 KeGetCurrentIrql( | |
| 5175 VOID); | |
| 5176 | |
| 5177 NTKERNELAPI | |
| 5178 PRKTHREAD | |
| 5179 NTAPI | |
| 5180 KeGetCurrentThread( | |
| 5181 VOID); | |
| 5182 | |
| 5183 #define KI_USER_SHARED_DATA 0xffdf0000 | |
| 5184 | |
| 5185 #define PAGE_SIZE 0x1000 | |
| 5186 #define PAGE_SHIFT 12L | |
| 5187 | |
| 5188 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA) | |
| 5189 | |
| 5190 extern NTKERNELAPI PVOID MmHighestUserAddress; | |
| 5191 extern NTKERNELAPI PVOID MmSystemRangeStart; | |
| 5192 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress; | |
| 5193 | |
| 5194 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress | |
| 5195 #define MM_SYSTEM_RANGE_START MmSystemRangeStart | |
| 5196 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress | |
| 5197 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 | |
| 5198 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000 | |
| 5199 | |
| 5200 #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START | |
| 5201 #define MM_SYSTEM_SPACE_END 0xFFFFFFFF | |
| 5202 | |
| 5203 #elif defined(__x86_64__) | |
| 5204 | |
| 5205 #define CONTEXT_AMD64 0x100000 | |
| 5206 #if !defined(RC_INVOKED) | |
| 5207 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L) | |
| 5208 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L) | |
| 5209 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L) | |
| 5210 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L) | |
| 5211 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L) | |
| 5212 | |
| 5213 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT) | |
| 5214 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS) | |
| 5215 | |
| 5216 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000 | |
| 5217 #define CONTEXT_SERVICE_ACTIVE 0x10000000 | |
| 5218 #define CONTEXT_EXCEPTION_REQUEST 0x40000000 | |
| 5219 #define CONTEXT_EXCEPTION_REPORTING 0x80000000 | |
| 5220 #endif | |
| 5221 | |
| 5222 typedef struct DECLSPEC_ALIGN(16) _M128A { | |
| 5223 ULONGLONG Low; | |
| 5224 LONGLONG High; | |
| 5225 } M128A, *PM128A; | |
| 5226 | |
| 5227 typedef struct _XMM_SAVE_AREA32 { | |
| 5228 USHORT ControlWord; | |
| 5229 USHORT StatusWord; | |
| 5230 UCHAR TagWord; | |
| 5231 UCHAR Reserved1; | |
| 5232 USHORT ErrorOpcode; | |
| 5233 ULONG ErrorOffset; | |
| 5234 USHORT ErrorSelector; | |
| 5235 USHORT Reserved2; | |
| 5236 ULONG DataOffset; | |
| 5237 USHORT DataSelector; | |
| 5238 USHORT Reserved3; | |
| 5239 ULONG MxCsr; | |
| 5240 ULONG MxCsr_Mask; | |
| 5241 M128A FloatRegisters[8]; | |
| 5242 M128A XmmRegisters[16]; | |
| 5243 UCHAR Reserved4[96]; | |
| 5244 } XMM_SAVE_AREA32, *PXMM_SAVE_AREA32; | |
| 5245 | |
| 5246 typedef struct DECLSPEC_ALIGN(16) _CONTEXT { | |
| 5247 ULONG64 P1Home; | |
| 5248 ULONG64 P2Home; | |
| 5249 ULONG64 P3Home; | |
| 5250 ULONG64 P4Home; | |
| 5251 ULONG64 P5Home; | |
| 5252 ULONG64 P6Home; | |
| 5253 | |
| 5254 /* Control flags */ | |
| 5255 ULONG ContextFlags; | |
| 5256 ULONG MxCsr; | |
| 5257 | |
| 5258 /* Segment */ | |
| 5259 USHORT SegCs; | |
| 5260 USHORT SegDs; | |
| 5261 USHORT SegEs; | |
| 5262 USHORT SegFs; | |
| 5263 USHORT SegGs; | |
| 5264 USHORT SegSs; | |
| 5265 ULONG EFlags; | |
| 5266 | |
| 5267 /* Debug */ | |
| 5268 ULONG64 Dr0; | |
| 5269 ULONG64 Dr1; | |
| 5270 ULONG64 Dr2; | |
| 5271 ULONG64 Dr3; | |
| 5272 ULONG64 Dr6; | |
| 5273 ULONG64 Dr7; | |
| 5274 | |
| 5275 /* Integer */ | |
| 5276 ULONG64 Rax; | |
| 5277 ULONG64 Rcx; | |
| 5278 ULONG64 Rdx; | |
| 5279 ULONG64 Rbx; | |
| 5280 ULONG64 Rsp; | |
| 5281 ULONG64 Rbp; | |
| 5282 ULONG64 Rsi; | |
| 5283 ULONG64 Rdi; | |
| 5284 ULONG64 R8; | |
| 5285 ULONG64 R9; | |
| 5286 ULONG64 R10; | |
| 5287 ULONG64 R11; | |
| 5288 ULONG64 R12; | |
| 5289 ULONG64 R13; | |
| 5290 ULONG64 R14; | |
| 5291 ULONG64 R15; | |
| 5292 | |
| 5293 /* Counter */ | |
| 5294 ULONG64 Rip; | |
| 5295 | |
| 5296 /* Floating point */ | |
| 5297 union { | |
| 5298 XMM_SAVE_AREA32 FltSave; | |
| 5299 struct { | |
| 5300 M128A Header[2]; | |
| 5301 M128A Legacy[8]; | |
| 5302 M128A Xmm0; | |
| 5303 M128A Xmm1; | |
| 5304 M128A Xmm2; | |
| 5305 M128A Xmm3; | |
| 5306 M128A Xmm4; | |
| 5307 M128A Xmm5; | |
| 5308 M128A Xmm6; | |
| 5309 M128A Xmm7; | |
| 5310 M128A Xmm8; | |
| 5311 M128A Xmm9; | |
| 5312 M128A Xmm10; | |
| 5313 M128A Xmm11; | |
| 5314 M128A Xmm12; | |
| 5315 M128A Xmm13; | |
| 5316 M128A Xmm14; | |
| 5317 M128A Xmm15; | |
| 5318 } DUMMYSTRUCTNAME; | |
| 5319 } DUMMYUNIONNAME; | |
| 5320 | |
| 5321 /* Vector */ | |
| 5322 M128A VectorRegister[26]; | |
| 5323 ULONG64 VectorControl; | |
| 5324 | |
| 5325 /* Debug control */ | |
| 5326 ULONG64 DebugControl; | |
| 5327 ULONG64 LastBranchToRip; | |
| 5328 ULONG64 LastBranchFromRip; | |
| 5329 ULONG64 LastExceptionToRip; | |
| 5330 ULONG64 LastExceptionFromRip; | |
| 5331 } CONTEXT; | |
| 5332 | |
| 5333 // | |
| 5334 // Used to contain PFNs and PFN counts | |
| 5335 // | |
| 5336 typedef ULONG PFN_COUNT; | |
| 5337 typedef ULONG64 PFN_NUMBER, *PPFN_NUMBER; | |
| 5338 typedef LONG64 SPFN_NUMBER, *PSPFN_NUMBER; | |
| 5339 | |
| 5340 #define PASSIVE_LEVEL 0 | |
| 5341 #define LOW_LEVEL 0 | |
| 5342 #define APC_LEVEL 1 | |
| 5343 #define DISPATCH_LEVEL 2 | |
| 5344 #define CLOCK_LEVEL 13 | |
| 5345 #define IPI_LEVEL 14 | |
| 5346 #define POWER_LEVEL 14 | |
| 5347 #define PROFILE_LEVEL 15 | |
| 5348 #define HIGH_LEVEL 15 | |
| 5349 | |
| 5350 #define PAGE_SIZE 0x1000 | |
| 5351 #define PAGE_SHIFT 12L | |
| 5352 #define PTI_SHIFT 12L | |
| 5353 #define PDI_SHIFT 21L | |
| 5354 #define PPI_SHIFT 30L | |
| 5355 #define PXI_SHIFT 39L | |
| 5356 #define PTE_PER_PAGE 512 | |
| 5357 #define PDE_PER_PAGE 512 | |
| 5358 #define PPE_PER_PAGE 512 | |
| 5359 #define PXE_PER_PAGE 512 | |
| 5360 #define PTI_MASK_AMD64 (PTE_PER_PAGE - 1) | |
| 5361 #define PDI_MASK_AMD64 (PDE_PER_PAGE - 1) | |
| 5362 #define PPI_MASK (PPE_PER_PAGE - 1) | |
| 5363 #define PXI_MASK (PXE_PER_PAGE - 1) | |
| 5364 | |
| 5365 #define PXE_BASE 0xFFFFF6FB7DBED000ULL | |
| 5366 #define PXE_SELFMAP 0xFFFFF6FB7DBEDF68ULL | |
| 5367 #define PPE_BASE 0xFFFFF6FB7DA00000ULL | |
| 5368 #define PDE_BASE 0xFFFFF6FB40000000ULL | |
| 5369 #define PTE_BASE 0xFFFFF68000000000ULL | |
| 5370 #define PXE_TOP 0xFFFFF6FB7DBEDFFFULL | |
| 5371 #define PPE_TOP 0xFFFFF6FB7DBFFFFFULL | |
| 5372 #define PDE_TOP 0xFFFFF6FB7FFFFFFFULL | |
| 5373 #define PTE_TOP 0xFFFFF6FFFFFFFFFFULL | |
| 5374 | |
| 5375 extern NTKERNELAPI PVOID MmHighestUserAddress; | |
| 5376 extern NTKERNELAPI PVOID MmSystemRangeStart; | |
| 5377 extern NTKERNELAPI ULONG_PTR MmUserProbeAddress; | |
| 5378 | |
| 5379 #define MM_HIGHEST_USER_ADDRESS MmHighestUserAddress | |
| 5380 #define MM_SYSTEM_RANGE_START MmSystemRangeStart | |
| 5381 #define MM_USER_PROBE_ADDRESS MmUserProbeAddress | |
| 5382 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 | |
| 5383 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xFFFF080000000000ULL | |
| 5384 #define KI_USER_SHARED_DATA 0xFFFFF78000000000ULL | |
| 5385 | |
| 5386 #define SharedUserData ((PKUSER_SHARED_DATA const)KI_USER_SHARED_DATA) | |
| 5387 #define SharedInterruptTime (&SharedUserData->InterruptTime) | |
| 5388 #define SharedSystemTime (&SharedUserData->SystemTime) | |
| 5389 #define SharedTickCount (&SharedUserData->TickCount) | |
| 5390 | |
| 5391 #define KeQueryInterruptTime() \ | |
| 5392 (*(volatile ULONG64*)SharedInterruptTime) | |
| 5393 #define KeQuerySystemTime(CurrentCount) \ | |
| 5394 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedSystemTime | |
| 5395 #define KeQueryTickCount(CurrentCount) \ | |
| 5396 *(ULONG64*)(CurrentCount) = *(volatile ULONG64*)SharedTickCount | |
| 5397 | |
| 5398 typedef struct _KPCR | |
| 5399 { | |
| 5400 union | |
| 5401 { | |
| 5402 NT_TIB NtTib; | |
| 5403 struct | |
| 5404 { | |
| 5405 union _KGDTENTRY64 *GdtBase; | |
| 5406 struct _KTSS64 *TssBase; | |
| 5407 ULONG64 UserRsp; | |
| 5408 struct _KPCR *Self; | |
| 5409 struct _KPRCB *CurrentPrcb; | |
| 5410 PKSPIN_LOCK_QUEUE LockArray; | |
| 5411 PVOID Used_Self; | |
| 5412 }; | |
| 5413 }; | |
| 5414 union _KIDTENTRY64 *IdtBase; | |
| 5415 ULONG64 Unused[2]; | |
| 5416 KIRQL Irql; | |
| 5417 UCHAR SecondLevelCacheAssociativity; | |
| 5418 UCHAR ObsoleteNumber; | |
| 5419 UCHAR Fill0; | |
| 5420 ULONG Unused0[3]; | |
| 5421 USHORT MajorVersion; | |
| 5422 USHORT MinorVersion; | |
| 5423 ULONG StallScaleFactor; | |
| 5424 PVOID Unused1[3]; | |
| 5425 ULONG KernelReserved[15]; | |
| 5426 ULONG SecondLevelCacheSize; | |
| 5427 ULONG HalReserved[16]; | |
| 5428 ULONG Unused2; | |
| 5429 PVOID KdVersionBlock; | |
| 5430 PVOID Unused3; | |
| 5431 ULONG PcrAlign1[24]; | |
| 5432 } KPCR, *PKPCR; | |
| 5433 | |
| 5434 typedef struct _KFLOATING_SAVE { | |
| 5435 ULONG Dummy; | |
| 5436 } KFLOATING_SAVE, *PKFLOATING_SAVE; | |
| 5437 | |
| 5438 NTKERNELAPI | |
| 5439 PRKTHREAD | |
| 5440 NTAPI | |
| 5441 KeGetCurrentThread( | |
| 5442 VOID); | |
| 5443 | |
| 5444 FORCEINLINE | |
| 5445 PKPCR | |
| 5446 KeGetPcr(VOID) | |
| 5447 { | |
| 5448 return (PKPCR)__readgsqword(FIELD_OFFSET(KPCR, Self)); | |
| 5449 } | |
| 5450 | |
| 5451 FORCEINLINE | |
| 5452 ULONG | |
| 5453 KeGetCurrentProcessorNumber(VOID) | |
| 5454 { | |
| 5455 return (ULONG)__readgsword(0x184); | |
| 5456 } | |
| 5457 | |
| 5458 #elif defined(__PowerPC__) | |
| 5459 | |
| 5460 // | |
| 5461 // Used to contain PFNs and PFN counts | |
| 5462 // | |
| 5463 typedef ULONG PFN_COUNT; | |
| 5464 typedef ULONG PFN_NUMBER, *PPFN_NUMBER; | |
| 5465 typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; | |
| 5466 | |
| 5467 #define PASSIVE_LEVEL 0 | |
| 5468 #define LOW_LEVEL 0 | |
| 5469 #define APC_LEVEL 1 | |
| 5470 #define DISPATCH_LEVEL 2 | |
| 5471 #define PROFILE_LEVEL 27 | |
| 5472 #define CLOCK1_LEVEL 28 | |
| 5473 #define CLOCK2_LEVEL 28 | |
| 5474 #define IPI_LEVEL 29 | |
| 5475 #define POWER_LEVEL 30 | |
| 5476 #define HIGH_LEVEL 31 | |
| 5477 | |
| 5478 typedef struct _KFLOATING_SAVE { | |
| 5479 ULONG Dummy; | |
| 5480 } KFLOATING_SAVE, *PKFLOATING_SAVE; | |
| 5481 | |
| 5482 typedef struct _KPCR_TIB { | |
| 5483 PVOID ExceptionList; /* 00 */ | |
| 5484 PVOID StackBase; /* 04 */ | |
| 5485 PVOID StackLimit; /* 08 */ | |
| 5486 PVOID SubSystemTib; /* 0C */ | |
| 5487 _ANONYMOUS_UNION union { | |
| 5488 PVOID FiberData; /* 10 */ | |
| 5489 ULONG Version; /* 10 */ | |
| 5490 } DUMMYUNIONNAME; | |
| 5491 PVOID ArbitraryUserPointer; /* 14 */ | |
| 5492 struct _KPCR_TIB *Self; /* 18 */ | |
| 5493 } KPCR_TIB, *PKPCR_TIB; /* 1C */ | |
| 5494 | |
| 5495 #define PCR_MINOR_VERSION 1 | |
| 5496 #define PCR_MAJOR_VERSION 1 | |
| 5497 | |
| 5498 typedef struct _KPCR { | |
| 5499 KPCR_TIB Tib; /* 00 */ | |
| 5500 struct _KPCR *Self; /* 1C */ | |
| 5501 struct _KPRCB *Prcb; /* 20 */ | |
| 5502 KIRQL Irql; /* 24 */ | |
| 5503 ULONG IRR; /* 28 */ | |
| 5504 ULONG IrrActive; /* 2C */ | |
| 5505 ULONG IDR; /* 30 */ | |
| 5506 PVOID KdVersionBlock; /* 34 */ | |
| 5507 PUSHORT IDT; /* 38 */ | |
| 5508 PUSHORT GDT; /* 3C */ | |
| 5509 struct _KTSS *TSS; /* 40 */ | |
| 5510 USHORT MajorVersion; /* 44 */ | |
| 5511 USHORT MinorVersion; /* 46 */ | |
| 5512 KAFFINITY SetMember; /* 48 */ | |
| 5513 ULONG StallScaleFactor; /* 4C */ | |
| 5514 UCHAR SpareUnused; /* 50 */ | |
| 5515 UCHAR Number; /* 51 */ | |
| 5516 } KPCR, *PKPCR; /* 54 */ | |
| 5517 | |
| 5518 #define KeGetPcr() PCR | |
| 5519 | |
| 5520 static __inline | |
| 5521 ULONG | |
| 5522 DDKAPI | |
| 5523 KeGetCurrentProcessorNumber(VOID) | |
| 5524 { | |
| 5525 ULONG Number; | |
| 5526 __asm__ __volatile__ ( | |
| 5527 "lwz %0, %c1(12)\n" | |
| 5528 : "=r" (Number) | |
| 5529 : "i" (FIELD_OFFSET(KPCR, Number)) | |
| 5530 ); | |
| 5531 return Number; | |
| 5532 } | |
| 5533 | |
| 5534 #elif defined(_MIPS_) | |
| 5535 | |
| 5536 #error MIPS Headers are totally incorrect | |
| 5537 | |
| 5538 // | |
| 5539 // Used to contain PFNs and PFN counts | |
| 5540 // | |
| 5541 typedef ULONG PFN_COUNT; | |
| 5542 typedef ULONG PFN_NUMBER, *PPFN_NUMBER; | |
| 5543 typedef LONG SPFN_NUMBER, *PSPFN_NUMBER; | |
| 5544 | |
| 5545 #define PASSIVE_LEVEL 0 | |
| 5546 #define APC_LEVEL 1 | |
| 5547 #define DISPATCH_LEVEL 2 | |
| 5548 #define PROFILE_LEVEL 27 | |
| 5549 #define IPI_LEVEL 29 | |
| 5550 #define HIGH_LEVEL 31 | |
| 5551 | |
| 5552 typedef struct _KPCR { | |
| 5553 struct _KPRCB *Prcb; /* 20 */ | |
| 5554 KIRQL Irql; /* 24 */ | |
| 5555 ULONG IRR; /* 28 */ | |
| 5556 ULONG IDR; /* 30 */ | |
| 5557 } KPCR, *PKPCR; | |
| 5558 | |
| 5559 #define KeGetPcr() PCR | |
| 5560 | |
| 5561 typedef struct _KFLOATING_SAVE { | |
| 5562 } KFLOATING_SAVE, *PKFLOATING_SAVE; | |
| 5563 | |
| 5564 static __inline | |
| 5565 ULONG | |
| 5566 DDKAPI | |
| 5567 KeGetCurrentProcessorNumber(VOID) | |
| 5568 { | |
| 5569 return 0; | |
| 5570 } | |
| 5571 | |
| 5572 #elif defined(_M_ARM) | |
| 5573 | |
| 5574 // | |
| 5575 // NT-ARM is not documented, need DDK-ARM | |
| 5576 // | |
| 5577 #include <armddk.h> | |
| 5578 | |
| 5579 #else | |
| 5580 #error Unknown architecture | |
| 5581 #endif | |
| 5582 | |
| 5583 #define MM_DONT_ZERO_ALLOCATION 0x00000001 | |
| 5584 #define MM_ALLOCATE_FROM_LOCAL_NODE_ONLY 0x00000002 | |
| 5585 | |
| 5586 | |
| 5587 #define EFLAG_SIGN 0x8000 | |
| 5588 #define EFLAG_ZERO 0x4000 | |
| 5589 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) | |
| 5590 | |
| 5591 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) | |
| 5592 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) | |
| 5593 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) | |
| 5594 | |
| 5595 typedef enum _INTERLOCKED_RESULT { | |
| 5596 ResultNegative = RESULT_NEGATIVE, | |
| 5597 ResultZero = RESULT_ZERO, | |
| 5598 ResultPositive = RESULT_POSITIVE | |
| 5599 } INTERLOCKED_RESULT; | |
| 5600 | |
| 5601 typedef VOID | |
| 5602 (NTAPI *PciPin2Line)( | |
| 5603 IN struct _BUS_HANDLER *BusHandler, | |
| 5604 IN struct _BUS_HANDLER *RootHandler, | |
| 5605 IN PCI_SLOT_NUMBER SlotNumber, | |
| 5606 IN PPCI_COMMON_CONFIG PciData | |
| 5607 ); | |
| 5608 | |
| 5609 typedef VOID | |
| 5610 (NTAPI *PciLine2Pin)( | |
| 5611 IN struct _BUS_HANDLER *BusHandler, | |
| 5612 IN struct _BUS_HANDLER *RootHandler, | |
| 5613 IN PCI_SLOT_NUMBER SlotNumber, | |
| 5614 IN PPCI_COMMON_CONFIG PciNewData, | |
| 5615 IN PPCI_COMMON_CONFIG PciOldData | |
| 5616 ); | |
| 5617 | |
| 5618 typedef VOID | |
| 5619 (NTAPI *PciReadWriteConfig)( | |
| 5620 IN struct _BUS_HANDLER *BusHandler, | |
| 5621 IN PCI_SLOT_NUMBER Slot, | |
| 5622 IN PVOID Buffer, | |
| 5623 IN ULONG Offset, | |
| 5624 IN ULONG Length | |
| 5625 ); | |
| 5626 | |
| 5627 #define PCI_DATA_TAG ' ICP' | |
| 5628 #define PCI_DATA_VERSION 1 | |
| 5629 | |
| 5630 typedef struct _PCIBUSDATA | |
| 5631 { | |
| 5632 ULONG Tag; | |
| 5633 ULONG Version; | |
| 5634 PciReadWriteConfig ReadConfig; | |
| 5635 PciReadWriteConfig WriteConfig; | |
| 5636 PciPin2Line Pin2Line; | |
| 5637 PciLine2Pin Line2Pin; | |
| 5638 PCI_SLOT_NUMBER ParentSlot; | |
| 5639 PVOID Reserved[4]; | |
| 5640 } PCIBUSDATA, *PPCIBUSDATA; | |
| 5641 | |
| 5642 | |
| 5643 /** SPINLOCK FUNCTIONS ********************************************************/ | |
| 5644 | |
| 5645 NTKERNELAPI | |
| 5646 BOOLEAN | |
| 5647 FASTCALL | |
| 5648 KeTryToAcquireSpinLockAtDpcLevel( | |
| 5649 IN OUT PKSPIN_LOCK SpinLock | |
| 5650 ); | |
| 5651 | |
| 5652 NTKERNELAPI | |
| 5653 BOOLEAN | |
| 5654 FASTCALL | |
| 5655 KeTestSpinLock( | |
| 5656 IN PKSPIN_LOCK SpinLock | |
| 5657 ); | |
| 5658 | |
| 5659 #if defined (_X86_) | |
| 5660 | |
| 5661 #if defined(WIN9X_COMPAT_SPINLOCK) | |
| 5662 | |
| 5663 NTKERNELAPI | |
| 5664 VOID | |
| 5665 NTAPI | |
| 5666 KeInitializeSpinLock( | |
| 5667 IN PKSPIN_LOCK SpinLock | |
| 5668 ); | |
| 5669 | |
| 5670 #else | |
| 5671 | |
| 5672 FORCEINLINE | |
| 5673 VOID | |
| 5674 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock) | |
| 5675 { | |
| 5676 /* Clear the lock */ | |
| 5677 *SpinLock = 0; | |
| 5678 } | |
| 5679 | |
| 5680 #endif | |
| 5681 | |
| 5682 NTHALAPI | |
| 5683 KIRQL | |
| 5684 FASTCALL | |
| 5685 KfAcquireSpinLock( | |
| 5686 IN PKSPIN_LOCK SpinLock); | |
| 5687 | |
| 5688 NTHALAPI | |
| 5689 VOID | |
| 5690 FASTCALL | |
| 5691 KfReleaseSpinLock( | |
| 5692 IN PKSPIN_LOCK SpinLock, | |
| 5693 IN KIRQL NewIrql); | |
| 5694 | |
| 5695 NTKERNELAPI | |
| 5696 VOID | |
| 5697 FASTCALL | |
| 5698 KefAcquireSpinLockAtDpcLevel( | |
| 5699 IN PKSPIN_LOCK SpinLock); | |
| 5700 | |
| 5701 NTKERNELAPI | |
| 5702 VOID | |
| 5703 FASTCALL | |
| 5704 KefReleaseSpinLockFromDpcLevel( | |
| 5705 IN PKSPIN_LOCK SpinLock); | |
| 5706 | |
| 5707 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) | |
| 5708 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) | |
| 5709 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) | |
| 5710 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) | |
| 5711 | |
| 5712 #define KeGetDcacheFillSize() 1L | |
| 5713 | |
| 5714 #elif defined(_M_ARM) // !defined (_X86_) | |
| 5715 | |
| 5716 FORCEINLINE | |
| 5717 VOID | |
| 5718 KeInitializeSpinLock(IN PKSPIN_LOCK SpinLock) | |
| 5719 { | |
| 5720 /* Clear the lock */ | |
| 5721 *SpinLock = 0; | |
| 5722 } | |
| 5723 | |
| 5724 NTHALAPI | |
| 5725 KIRQL | |
| 5726 FASTCALL | |
| 5727 KfAcquireSpinLock( | |
| 5728 IN PKSPIN_LOCK SpinLock); | |
| 5729 | |
| 5730 NTHALAPI | |
| 5731 VOID | |
| 5732 FASTCALL | |
| 5733 KfReleaseSpinLock( | |
| 5734 IN PKSPIN_LOCK SpinLock, | |
| 5735 IN KIRQL NewIrql); | |
| 5736 | |
| 5737 | |
| 5738 NTKERNELAPI | |
| 5739 VOID | |
| 5740 FASTCALL | |
| 5741 KefAcquireSpinLockAtDpcLevel( | |
| 5742 IN PKSPIN_LOCK SpinLock); | |
| 5743 | |
| 5744 NTKERNELAPI | |
| 5745 VOID | |
| 5746 FASTCALL | |
| 5747 KefReleaseSpinLockFromDpcLevel( | |
| 5748 IN PKSPIN_LOCK SpinLock); | |
| 5749 | |
| 5750 | |
| 5751 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) | |
| 5752 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) | |
| 5753 #define KeAcquireSpinLock(a,b) *(b) = KfAcquireSpinLock(a) | |
| 5754 #define KeReleaseSpinLock(a,b) KfReleaseSpinLock(a,b) | |
| 5755 | |
| 5756 NTKERNELAPI | |
| 5757 VOID | |
| 5758 NTAPI | |
| 5759 KeInitializeSpinLock( | |
| 5760 IN PKSPIN_LOCK SpinLock); | |
| 5761 | |
| 5762 #else | |
| 5763 | |
| 5764 FORCEINLINE | |
| 5765 VOID | |
| 5766 NTAPI | |
| 5767 KeInitializeSpinLock( | |
| 5768 PKSPIN_LOCK SpinLock) | |
| 5769 { | |
| 5770 *SpinLock = 0; | |
| 5771 } | |
| 5772 | |
| 5773 NTKERNELAPI | |
| 5774 VOID | |
| 5775 KeReleaseSpinLock( | |
| 5776 IN PKSPIN_LOCK SpinLock, | |
| 5777 IN KIRQL NewIrql); | |
| 5778 | |
| 5779 NTKERNELAPI | |
| 5780 VOID | |
| 5781 KeAcquireSpinLockAtDpcLevel( | |
| 5782 IN PKSPIN_LOCK SpinLock); | |
| 5783 | |
| 5784 NTKERNELAPI | |
| 5785 VOID | |
| 5786 KeReleaseSpinLockFromDpcLevel( | |
| 5787 IN PKSPIN_LOCK SpinLock); | |
| 5788 | |
| 5789 NTKERNELAPI | |
| 5790 KIRQL | |
| 5791 KeAcquireSpinLockRaiseToDpc( | |
| 5792 IN PKSPIN_LOCK SpinLock); | |
| 5793 | |
| 5794 #define KeAcquireSpinLock(SpinLock, OldIrql) \ | |
| 5795 *(OldIrql) = KeAcquireSpinLockRaiseToDpc(SpinLock) | |
| 5796 | |
| 5797 #endif // !defined (_X86_) | |
| 5798 | |
| 5799 /* | |
| 5800 ** Utillity functions | |
| 5801 */ | |
| 5802 | |
| 5803 #define ARGUMENT_PRESENT(ArgumentPointer) \ | |
| 5804 ((CHAR*)((ULONG_PTR)(ArgumentPointer)) != (CHAR*)NULL) | |
| 5805 | |
| 5806 /* | |
| 5807 * ULONG | |
| 5808 * BYTE_OFFSET( | |
| 5809 * IN PVOID Va) | |
| 5810 */ | |
| 5811 #define BYTE_OFFSET(Va) \ | |
| 5812 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1))) | |
| 5813 | |
| 5814 /* | |
| 5815 * ULONG | |
| 5816 * BYTES_TO_PAGES( | |
| 5817 * IN ULONG Size) | |
| 5818 */ | |
| 5819 #define BYTES_TO_PAGES(Size) \ | |
| 5820 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0)) | |
| 5821 | |
| 5822 /* | |
| 5823 * PVOID | |
| 5824 * PAGE_ALIGN( | |
| 5825 * IN PVOID Va) | |
| 5826 */ | |
| 5827 #define PAGE_ALIGN(Va) \ | |
| 5828 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1))) | |
| 5829 | |
| 5830 /* | |
| 5831 * ULONG_PTR | |
| 5832 * ROUND_TO_PAGES( | |
| 5833 * IN ULONG_PTR Size) | |
| 5834 */ | |
| 5835 #define ROUND_TO_PAGES(Size) \ | |
| 5836 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))) | |
| 5837 | |
| 5838 | |
| 5839 | |
| 5840 #if defined(_X86_) || defined(_AMD64_) | |
| 5841 | |
| 5842 // | |
| 5843 // x86 and x64 performs a 0x2C interrupt | |
| 5844 // | |
| 5845 #define DbgRaiseAssertionFailure __int2c | |
| 5846 | |
| 5847 #elif defined(_ARM_) | |
| 5848 | |
| 5849 // | |
| 5850 // TODO | |
| 5851 // | |
| 5852 | |
| 5853 #else | |
| 5854 #error Unsupported Architecture | |
| 5855 #endif | |
| 5856 | |
| 5857 #if DBG | |
| 5858 | |
| 5859 #define ASSERT(exp) \ | |
| 5860 (VOID)((!(exp)) ? \ | |
| 5861 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE) | |
| 5862 | |
| 5863 #define ASSERTMSG(msg, exp) \ | |
| 5864 (VOID)((!(exp)) ? \ | |
| 5865 RtlAssert( (PVOID)#exp, (PVOID)__FILE__, __LINE__, msg ), FALSE : TRUE) | |
| 5866 | |
| 5867 #define RTL_SOFT_ASSERT(exp) \ | |
| 5868 (VOID)((!(exp)) ? \ | |
| 5869 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE : TRUE) | |
| 5870 | |
| 5871 #define RTL_SOFT_ASSERTMSG(msg, exp) \ | |
| 5872 (VOID)((!(exp)) ? \ | |
| 5873 DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE : TRUE) | |
| 5874 | |
| 5875 #define RTL_VERIFY(exp) ASSERT(exp) | |
| 5876 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp) | |
| 5877 | |
| 5878 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp) | |
| 5879 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp) | |
| 5880 | |
| 5881 #if defined(_MSC_VER) | |
| 5882 | |
| 5883 #define NT_ASSERT(exp) \ | |
| 5884 ((!(exp)) ? \ | |
| 5885 (__annotation(L"Debug", L"AssertFail", L#exp), \ | |
| 5886 DbgRaiseAssertionFailure(), FALSE) : TRUE) | |
| 5887 | |
| 5888 #define NT_ASSERTMSG(msg, exp) \ | |
| 5889 ((!(exp)) ? \ | |
| 5890 (__annotation(L"Debug", L"AssertFail", L##msg), \ | |
| 5891 DbgRaiseAssertionFailure(), FALSE) : TRUE) | |
| 5892 | |
| 5893 #define NT_ASSERTMSGW(msg, exp) \ | |
| 5894 ((!(exp)) ? \ | |
| 5895 (__annotation(L"Debug", L"AssertFail", msg), \ | |
| 5896 DbgRaiseAssertionFailure(), FALSE) : TRUE) | |
| 5897 | |
| 5898 #else | |
| 5899 | |
| 5900 // | |
| 5901 // GCC doesn't support __annotation (nor PDB) | |
| 5902 // | |
| 5903 #define NT_ASSERT(exp) \ | |
| 5904 (VOID)((!(exp)) ? (DbgRaiseAssertionFailure(), FALSE) : TRUE) | |
| 5905 | |
| 5906 #define NT_ASSERTMSG NT_ASSERT | |
| 5907 #define NT_ASSERTMSGW NT_ASSERT | |
| 5908 | |
| 5909 #endif | |
| 5910 | |
| 5911 #else /* !DBG */ | |
| 5912 | |
| 5913 #define ASSERT(exp) ((VOID) 0) | |
| 5914 #define ASSERTMSG(msg, exp) ((VOID) 0) | |
| 5915 | |
| 5916 #define RTL_SOFT_ASSERT(exp) ((VOID) 0) | |
| 5917 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0) | |
| 5918 | |
| 5919 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE) | |
| 5920 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) | |
| 5921 | |
| 5922 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE) | |
| 5923 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) | |
| 5924 | |
| 5925 #define NT_ASSERT(exp) ((VOID)0) | |
| 5926 #define NT_ASSERTMSG(exp) ((VOID)0) | |
| 5927 #define NT_ASSERTMSGW(exp) ((VOID)0) | |
| 5928 | |
| 5929 #endif /* DBG */ | |
| 5930 | |
| 5931 /* HACK HACK HACK - GCC (or perhaps LD) is messing this up */ | |
| 5932 #if defined(_NTSYSTEM_) || defined(__GNUC__) | |
| 5933 #define NLS_MB_CODE_PAGE_TAG NlsMbCodePageTag | |
| 5934 #define NLS_MB_OEM_CODE_PAGE_TAG NlsMbOemCodePageTag | |
| 5935 #else | |
| 5936 #define NLS_MB_CODE_PAGE_TAG (*NlsMbCodePageTag) | |
| 5937 #define NLS_MB_OEM_CODE_PAGE_TAG (*NlsMbOemCodePageTag) | |
| 5938 #endif /* _NT_SYSTEM */ | |
| 5939 | |
| 5940 extern BOOLEAN NTSYSAPI NLS_MB_CODE_PAGE_TAG; | |
| 5941 extern BOOLEAN NTSYSAPI NLS_MB_OEM_CODE_PAGE_TAG; | |
| 5942 | |
| 5943 /* | |
| 5944 ** Driver support routines | |
| 5945 */ | |
| 5946 | |
| 5947 /** Runtime library routines **/ | |
| 5948 | |
| 5949 static __inline VOID | |
| 5950 InitializeListHead( | |
| 5951 IN PLIST_ENTRY ListHead) | |
| 5952 { | |
| 5953 ListHead->Flink = ListHead->Blink = ListHead; | |
| 5954 } | |
| 5955 | |
| 5956 static __inline VOID | |
| 5957 InsertHeadList( | |
| 5958 IN PLIST_ENTRY ListHead, | |
| 5959 IN PLIST_ENTRY Entry) | |
| 5960 { | |
| 5961 PLIST_ENTRY OldFlink; | |
| 5962 OldFlink = ListHead->Flink; | |
| 5963 Entry->Flink = OldFlink; | |
| 5964 Entry->Blink = ListHead; | |
| 5965 OldFlink->Blink = Entry; | |
| 5966 ListHead->Flink = Entry; | |
| 5967 } | |
| 5968 | |
| 5969 static __inline VOID | |
| 5970 InsertTailList( | |
| 5971 IN PLIST_ENTRY ListHead, | |
| 5972 IN PLIST_ENTRY Entry) | |
| 5973 { | |
| 5974 PLIST_ENTRY OldBlink; | |
| 5975 OldBlink = ListHead->Blink; | |
| 5976 Entry->Flink = ListHead; | |
| 5977 Entry->Blink = OldBlink; | |
| 5978 OldBlink->Flink = Entry; | |
| 5979 ListHead->Blink = Entry; | |
| 5980 } | |
| 5981 | |
| 5982 /* | |
| 5983 * BOOLEAN | |
| 5984 * IsListEmpty( | |
| 5985 * IN PLIST_ENTRY ListHead) | |
| 5986 */ | |
| 5987 #define IsListEmpty(_ListHead) \ | |
| 5988 ((_ListHead)->Flink == (_ListHead)) | |
| 5989 | |
| 5990 /* | |
| 5991 * PSINGLE_LIST_ENTRY | |
| 5992 * PopEntryList( | |
| 5993 * IN PSINGLE_LIST_ENTRY ListHead) | |
| 5994 */ | |
| 5995 #define PopEntryList(ListHead) \ | |
| 5996 (ListHead)->Next; \ | |
| 5997 { \ | |
| 5998 PSINGLE_LIST_ENTRY _FirstEntry; \ | |
| 5999 _FirstEntry = (ListHead)->Next; \ | |
| 6000 if (_FirstEntry != NULL) \ | |
| 6001 (ListHead)->Next = _FirstEntry->Next; \ | |
| 6002 } | |
| 6003 | |
| 6004 /* | |
| 6005 * VOID | |
| 6006 * PushEntryList( | |
| 6007 * IN PSINGLE_LIST_ENTRY ListHead, | |
| 6008 * IN PSINGLE_LIST_ENTRY Entry) | |
| 6009 */ | |
| 6010 #define PushEntryList(_ListHead, _Entry) \ | |
| 6011 (_Entry)->Next = (_ListHead)->Next; \ | |
| 6012 (_ListHead)->Next = (_Entry); \ | |
| 6013 | |
| 6014 static __inline BOOLEAN | |
| 6015 RemoveEntryList( | |
| 6016 IN PLIST_ENTRY Entry) | |
| 6017 { | |
| 6018 PLIST_ENTRY OldFlink; | |
| 6019 PLIST_ENTRY OldBlink; | |
| 6020 | |
| 6021 OldFlink = Entry->Flink; | |
| 6022 OldBlink = Entry->Blink; | |
| 6023 OldFlink->Blink = OldBlink; | |
| 6024 OldBlink->Flink = OldFlink; | |
| 6025 return (BOOLEAN)(OldFlink == OldBlink); | |
| 6026 } | |
| 6027 | |
| 6028 static __inline PLIST_ENTRY | |
| 6029 RemoveHeadList( | |
| 6030 IN PLIST_ENTRY ListHead) | |
| 6031 { | |
| 6032 PLIST_ENTRY Flink; | |
| 6033 PLIST_ENTRY Entry; | |
| 6034 | |
| 6035 Entry = ListHead->Flink; | |
| 6036 Flink = Entry->Flink; | |
| 6037 ListHead->Flink = Flink; | |
| 6038 Flink->Blink = ListHead; | |
| 6039 return Entry; | |
| 6040 } | |
| 6041 | |
| 6042 static __inline PLIST_ENTRY | |
| 6043 RemoveTailList( | |
| 6044 IN PLIST_ENTRY ListHead) | |
| 6045 { | |
| 6046 PLIST_ENTRY Blink; | |
| 6047 PLIST_ENTRY Entry; | |
| 6048 | |
| 6049 Entry = ListHead->Blink; | |
| 6050 Blink = Entry->Blink; | |
| 6051 ListHead->Blink = Blink; | |
| 6052 Blink->Flink = ListHead; | |
| 6053 return Entry; | |
| 6054 } | |
| 6055 | |
| 6056 NTSYSAPI | |
| 6057 NTSTATUS | |
| 6058 NTAPI | |
| 6059 RtlCharToInteger( | |
| 6060 IN PCSZ String, | |
| 6061 IN ULONG Base OPTIONAL, | |
| 6062 IN OUT PULONG Value); | |
| 6063 | |
| 6064 NTSYSAPI | |
| 6065 LONG | |
| 6066 NTAPI | |
| 6067 RtlCompareString( | |
| 6068 IN PSTRING String1, | |
| 6069 IN PSTRING String2, | |
| 6070 BOOLEAN CaseInSensitive); | |
| 6071 | |
| 6072 #if !defined(MIDL_PASS) | |
| 6073 | |
| 6074 FORCEINLINE | |
| 6075 LUID | |
| 6076 NTAPI | |
| 6077 RtlConvertLongToLuid( | |
| 6078 IN LONG Val) | |
| 6079 { | |
| 6080 LUID Luid; | |
| 6081 LARGE_INTEGER Temp; | |
| 6082 | |
| 6083 Temp.QuadPart = Val; | |
| 6084 Luid.LowPart = Temp.u.LowPart; | |
| 6085 Luid.HighPart = Temp.u.HighPart; | |
| 6086 | |
| 6087 return Luid; | |
| 6088 } | |
| 6089 | |
| 6090 FORCEINLINE | |
| 6091 LUID | |
| 6092 NTAPI | |
| 6093 RtlConvertUlongToLuid( | |
| 6094 IN ULONG Val) | |
| 6095 { | |
| 6096 LUID Luid; | |
| 6097 | |
| 6098 Luid.LowPart = Val; | |
| 6099 Luid.HighPart = 0; | |
| 6100 | |
| 6101 return Luid; | |
| 6102 } | |
| 6103 #endif | |
| 6104 | |
| 6105 | |
| 6106 NTSYSAPI | |
| 6107 VOID | |
| 6108 NTAPI | |
| 6109 RtlCopyMemory32( | |
| 6110 IN VOID UNALIGNED *Destination, | |
| 6111 IN CONST VOID UNALIGNED *Source, | |
| 6112 IN ULONG Length); | |
| 6113 | |
| 6114 NTSYSAPI | |
| 6115 VOID | |
| 6116 NTAPI | |
| 6117 RtlCopyString( | |
| 6118 IN OUT PSTRING DestinationString, | |
| 6119 IN PSTRING SourceString OPTIONAL); | |
| 6120 | |
| 6121 NTSYSAPI | |
| 6122 BOOLEAN | |
| 6123 NTAPI | |
| 6124 RtlEqualString( | |
| 6125 IN PSTRING String1, | |
| 6126 IN PSTRING String2, | |
| 6127 IN BOOLEAN CaseInSensitive); | |
| 6128 | |
| 6129 #if (defined(_M_AMD64) || defined(_M_IA64)) && !defined(_REALLY_GET_CALLERS_CALLER_) | |
| 6130 #define RtlGetCallersAddress(CallersAddress, CallersCaller) \ | |
| 6131 *CallersAddress = (PVOID)_ReturnAddress(); \ | |
| 6132 *CallersCaller = NULL; | |
| 6133 #else | |
| 6134 NTSYSAPI | |
| 6135 VOID | |
| 6136 NTAPI | |
| 6137 RtlGetCallersAddress( | |
| 6138 OUT PVOID *CallersAddress, | |
| 6139 OUT PVOID *CallersCaller); | |
| 6140 #endif | |
| 6141 | |
| 6142 NTSYSAPI | |
| 6143 NTSTATUS | |
| 6144 NTAPI | |
| 6145 RtlGetVersion( | |
| 6146 IN OUT PRTL_OSVERSIONINFOW lpVersionInformation); | |
| 6147 | |
| 6148 NTSYSAPI | |
| 6149 VOID | |
| 6150 NTAPI | |
| 6151 RtlMapGenericMask( | |
| 6152 IN OUT PACCESS_MASK AccessMask, | |
| 6153 IN PGENERIC_MAPPING GenericMapping); | |
| 6154 | |
| 6155 NTSYSAPI | |
| 6156 BOOLEAN | |
| 6157 NTAPI | |
| 6158 RtlPrefixUnicodeString( | |
| 6159 IN PCUNICODE_STRING String1, | |
| 6160 IN PCUNICODE_STRING String2, | |
| 6161 IN BOOLEAN CaseInSensitive); | |
| 6162 | |
| 6163 NTSYSAPI | |
| 6164 NTSTATUS | |
| 6165 NTAPI | |
| 6166 RtlUpcaseUnicodeString( | |
| 6167 IN OUT PUNICODE_STRING DestinationString OPTIONAL, | |
| 6168 IN PCUNICODE_STRING SourceString, | |
| 6169 IN BOOLEAN AllocateDestinationString); | |
| 6170 | |
| 6171 NTSYSAPI | |
| 6172 CHAR | |
| 6173 NTAPI | |
| 6174 RtlUpperChar( | |
| 6175 IN CHAR Character); | |
| 6176 | |
| 6177 NTSYSAPI | |
| 6178 VOID | |
| 6179 NTAPI | |
| 6180 RtlUpperString( | |
| 6181 IN OUT PSTRING DestinationString, | |
| 6182 IN PSTRING SourceString); | |
| 6183 | |
| 6184 NTSYSAPI | |
| 6185 NTSTATUS | |
| 6186 NTAPI | |
| 6187 RtlVerifyVersionInfo( | |
| 6188 IN PRTL_OSVERSIONINFOEXW VersionInfo, | |
| 6189 IN ULONG TypeMask, | |
| 6190 IN ULONGLONG ConditionMask); | |
| 6191 | |
| 6192 NTSYSAPI | |
| 6193 NTSTATUS | |
| 6194 NTAPI | |
| 6195 RtlVolumeDeviceToDosName( | |
| 6196 IN PVOID VolumeDeviceObject, | |
| 6197 OUT PUNICODE_STRING DosName); | |
| 6198 | |
| 6199 NTSYSAPI | |
| 6200 ULONG | |
| 6201 NTAPI | |
| 6202 RtlWalkFrameChain( | |
| 6203 OUT PVOID *Callers, | |
| 6204 IN ULONG Count, | |
| 6205 IN ULONG Flags); | |
| 6206 | |
| 6207 NTKERNELAPI | |
| 6208 BOOLEAN | |
| 6209 NTAPI | |
| 6210 KeAreAllApcsDisabled( | |
| 6211 VOID | |
| 6212 ); | |
| 6213 | |
| 6214 /* Guarded Mutex routines */ | |
| 6215 | |
| 6216 NTKERNELAPI | |
| 6217 VOID | |
| 6218 FASTCALL | |
| 6219 KeAcquireGuardedMutex( | |
| 6220 IN OUT PKGUARDED_MUTEX GuardedMutex | |
| 6221 ); | |
| 6222 | |
| 6223 NTKERNELAPI | |
| 6224 VOID | |
| 6225 FASTCALL | |
| 6226 KeAcquireGuardedMutexUnsafe( | |
| 6227 IN OUT PKGUARDED_MUTEX GuardedMutex | |
| 6228 ); | |
| 6229 | |
| 6230 NTKERNELAPI | |
| 6231 VOID | |
| 6232 NTAPI | |
| 6233 KeEnterGuardedRegion( | |
| 6234 VOID | |
| 6235 ); | |
| 6236 | |
| 6237 NTKERNELAPI | |
| 6238 VOID | |
| 6239 NTAPI | |
| 6240 KeLeaveGuardedRegion( | |
| 6241 VOID | |
| 6242 ); | |
| 6243 | |
| 6244 NTKERNELAPI | |
| 6245 VOID | |
| 6246 FASTCALL | |
| 6247 KeInitializeGuardedMutex( | |
| 6248 OUT PKGUARDED_MUTEX GuardedMutex | |
| 6249 ); | |
| 6250 | |
| 6251 NTKERNELAPI | |
| 6252 VOID | |
| 6253 FASTCALL | |
| 6254 KeReleaseGuardedMutexUnsafe( | |
| 6255 IN OUT PKGUARDED_MUTEX GuardedMutex | |
| 6256 ); | |
| 6257 | |
| 6258 NTKERNELAPI | |
| 6259 VOID | |
| 6260 FASTCALL | |
| 6261 KeReleaseGuardedMutex( | |
| 6262 IN OUT PKGUARDED_MUTEX GuardedMutex | |
| 6263 ); | |
| 6264 | |
| 6265 NTKERNELAPI | |
| 6266 BOOLEAN | |
| 6267 FASTCALL | |
| 6268 KeTryToAcquireGuardedMutex( | |
| 6269 IN OUT PKGUARDED_MUTEX GuardedMutex | |
| 6270 ); | |
| 6271 | |
| 6272 /* Fast Mutex */ | |
| 6273 #define ExInitializeFastMutex(_FastMutex) \ | |
| 6274 { \ | |
| 6275 (_FastMutex)->Count = FM_LOCK_BIT; \ | |
| 6276 (_FastMutex)->Owner = NULL; \ | |
| 6277 (_FastMutex)->Contention = 0; \ | |
| 6278 KeInitializeEvent(&(_FastMutex)->Gate, SynchronizationEvent, FALSE); \ | |
| 6279 } | |
| 6280 | |
| 6281 NTKERNELAPI | |
| 6282 VOID | |
| 6283 NTAPI | |
| 6284 KeInitializeEvent( | |
| 6285 IN PRKEVENT Event, | |
| 6286 IN EVENT_TYPE Type, | |
| 6287 IN BOOLEAN State); | |
| 6288 | |
| 6289 /****************************************************************************** | |
| 6290 * Executive Types * | |
| 6291 ******************************************************************************/ | |
| 6292 | |
| 6293 typedef struct _ZONE_SEGMENT_HEADER { | |
| 6294 SINGLE_LIST_ENTRY SegmentList; | |
| 6295 PVOID Reserved; | |
| 6296 } ZONE_SEGMENT_HEADER, *PZONE_SEGMENT_HEADER; | |
| 6297 | |
| 6298 typedef struct _ZONE_HEADER { | |
| 6299 SINGLE_LIST_ENTRY FreeList; | |
| 6300 SINGLE_LIST_ENTRY SegmentList; | |
| 6301 ULONG BlockSize; | |
| 6302 ULONG TotalSegmentSize; | |
| 6303 } ZONE_HEADER, *PZONE_HEADER; | |
| 6304 | |
| 6305 #define PROTECTED_POOL 0x80000000 | |
| 6306 | |
| 6307 /****************************************************************************** | |
| 6308 * Executive Functions * | |
| 6309 ******************************************************************************/ | |
| 6310 | |
| 6311 NTKERNELAPI | |
| 6312 NTSTATUS | |
| 6313 NTAPI | |
| 6314 ExExtendZone( | |
| 6315 IN PZONE_HEADER Zone, | |
| 6316 IN PVOID Segment, | |
| 6317 IN ULONG SegmentSize); | |
| 6318 | |
| 6319 static __inline PVOID | |
| 6320 ExAllocateFromZone( | |
| 6321 IN PZONE_HEADER Zone) | |
| 6322 { | |
| 6323 if (Zone->FreeList.Next) | |
| 6324 Zone->FreeList.Next = Zone->FreeList.Next->Next; | |
| 6325 return (PVOID) Zone->FreeList.Next; | |
| 6326 } | |
| 6327 | |
| 6328 static __inline PVOID | |
| 6329 ExFreeToZone( | |
| 6330 IN PZONE_HEADER Zone, | |
| 6331 IN PVOID Block) | |
| 6332 { | |
| 6333 ((PSINGLE_LIST_ENTRY) Block)->Next = Zone->FreeList.Next; | |
| 6334 Zone->FreeList.Next = ((PSINGLE_LIST_ENTRY) Block); | |
| 6335 return ((PSINGLE_LIST_ENTRY) Block)->Next; | |
| 6336 } | |
| 6337 | |
| 6338 NTKERNELAPI | |
| 6339 NTSTATUS | |
| 6340 NTAPI | |
| 6341 ExInitializeZone( | |
| 6342 IN PZONE_HEADER Zone, | |
| 6343 IN ULONG BlockSize, | |
| 6344 IN PVOID InitialSegment, | |
| 6345 IN ULONG InitialSegmentSize); | |
| 6346 | |
| 6347 /* | |
| 6348 * PVOID | |
| 6349 * ExInterlockedAllocateFromZone( | |
| 6350 * IN PZONE_HEADER Zone, | |
| 6351 * IN PKSPIN_LOCK Lock) | |
| 6352 */ | |
| 6353 #define ExInterlockedAllocateFromZone(Zone, Lock) \ | |
| 6354 ((PVOID) ExInterlockedPopEntryList(&Zone->FreeList, Lock)) | |
| 6355 | |
| 6356 NTKERNELAPI | |
| 6357 NTSTATUS | |
| 6358 NTAPI | |
| 6359 ExInterlockedExtendZone( | |
| 6360 IN PZONE_HEADER Zone, | |
| 6361 IN PVOID Segment, | |
| 6362 IN ULONG SegmentSize, | |
| 6363 IN PKSPIN_LOCK Lock); | |
| 6364 | |
| 6365 /* PVOID | |
| 6366 * ExInterlockedFreeToZone( | |
| 6367 * IN PZONE_HEADER Zone, | |
| 6368 * IN PVOID Block, | |
| 6369 * IN PKSPIN_LOCK Lock); | |
| 6370 */ | |
| 6371 #define ExInterlockedFreeToZone(Zone, Block, Lock) \ | |
| 6372 ExInterlockedPushEntryList(&(Zone)->FreeList, (PSINGLE_LIST_ENTRY)(Block), Lock) | |
| 6373 | |
| 6374 /* | |
| 6375 * VOID | |
| 6376 * InitializeSListHead( | |
| 6377 * IN PSLIST_HEADER SListHead) | |
| 6378 */ | |
| 6379 #define InitializeSListHead(_SListHead) \ | |
| 6380 (_SListHead)->Alignment = 0 | |
| 6381 | |
| 6382 #define ExInitializeSListHead InitializeSListHead | |
| 6383 | |
| 6384 /* | |
| 6385 * BOOLEAN | |
| 6386 * ExIsFullZone( | |
| 6387 * IN PZONE_HEADER Zone) | |
| 6388 */ | |
| 6389 #define ExIsFullZone(Zone) \ | |
| 6390 ((Zone)->FreeList.Next == (PSINGLE_LIST_ENTRY) NULL) | |
| 6391 | |
| 6392 /* BOOLEAN | |
| 6393 * ExIsObjectInFirstZoneSegment( | |
| 6394 * IN PZONE_HEADER Zone, | |
| 6395 * IN PVOID Object); | |
| 6396 */ | |
| 6397 #define ExIsObjectInFirstZoneSegment(Zone,Object) \ | |
| 6398 ((BOOLEAN)( ((PUCHAR)(Object) >= (PUCHAR)(Zone)->SegmentList.Next) && \ | |
| 6399 ((PUCHAR)(Object) < (PUCHAR)(Zone)->SegmentList.Next + \ | |
| 6400 (Zone)->TotalSegmentSize)) ) | |
| 6401 | |
| 6402 NTKERNELAPI | |
| 6403 DECLSPEC_NORETURN | |
| 6404 VOID | |
| 6405 NTAPI | |
| 6406 ExRaiseAccessViolation( | |
| 6407 VOID); | |
| 6408 | |
| 6409 NTKERNELAPI | |
| 6410 DECLSPEC_NORETURN | |
| 6411 VOID | |
| 6412 NTAPI | |
| 6413 ExRaiseDatatypeMisalignment( | |
| 6414 VOID); | |
| 6415 | |
| 6416 NTKERNELAPI | |
| 6417 NTSTATUS | |
| 6418 NTAPI | |
| 6419 ExUuidCreate( | |
| 6420 OUT UUID *Uuid); | |
| 6421 | |
| 6422 #define ExAcquireResourceExclusive ExAcquireResourceExclusiveLite | |
| 6423 #define ExAcquireResourceShared ExAcquireResourceSharedLite | |
| 6424 #define ExConvertExclusiveToShared ExConvertExclusiveToSharedLite | |
| 6425 #define ExDeleteResource ExDeleteResourceLite | |
| 6426 #define ExInitializeResource ExInitializeResourceLite | |
| 6427 #define ExIsResourceAcquiredExclusive ExIsResourceAcquiredExclusiveLite | |
| 6428 #define ExIsResourceAcquiredShared ExIsResourceAcquiredSharedLite | |
| 6429 #define ExIsResourceAcquired ExIsResourceAcquiredSharedLite | |
| 6430 #define ExReleaseResourceForThread ExReleaseResourceForThreadLite | |
| 6431 | |
| 6432 | |
| 6433 #if DBG | |
| 6434 | |
| 6435 #define PAGED_CODE() { \ | |
| 6436 if (KeGetCurrentIrql() > APC_LEVEL) { \ | |
| 6437 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \ | |
| 6438 ASSERT(FALSE); \ | |
| 6439 } \ | |
| 6440 } | |
| 6441 | |
| 6442 #else | |
| 6443 | |
| 6444 #define PAGED_CODE() | |
| 6445 | |
| 6446 #endif | |
| 6447 | |
| 6448 NTKERNELAPI | |
| 6449 VOID | |
| 6450 NTAPI | |
| 6451 ProbeForRead( | |
| 6452 IN CONST VOID *Address, | |
| 6453 IN SIZE_T Length, | |
| 6454 IN ULONG Alignment); | |
| 6455 | |
| 6456 NTKERNELAPI | |
| 6457 VOID | |
| 6458 NTAPI | |
| 6459 ProbeForWrite( | |
| 6460 IN PVOID Address, | |
| 6461 IN SIZE_T Length, | |
| 6462 IN ULONG Alignment); | |
| 6463 | |
| 6464 | |
| 6465 | |
| 6466 /** Configuration manager routines **/ | |
| 6467 | |
| 6468 NTKERNELAPI | |
| 6469 NTSTATUS | |
| 6470 NTAPI | |
| 6471 CmRegisterCallback( | |
| 6472 IN PEX_CALLBACK_FUNCTION Function, | |
| 6473 IN PVOID Context, | |
| 6474 IN OUT PLARGE_INTEGER Cookie); | |
| 6475 | |
| 6476 NTKERNELAPI | |
| 6477 NTSTATUS | |
| 6478 NTAPI | |
| 6479 CmUnRegisterCallback( | |
| 6480 IN LARGE_INTEGER Cookie); | |
| 6481 | |
| 6482 | |
| 6483 | |
| 6484 /** Filesystem runtime library routines **/ | |
| 6485 | |
| 6486 NTKERNELAPI | |
| 6487 BOOLEAN | |
| 6488 NTAPI | |
| 6489 FsRtlIsTotalDeviceFailure( | |
| 6490 IN NTSTATUS Status); | |
| 6491 | |
| 6492 | |
| 6493 | |
| 6494 /** Hardware abstraction layer routines **/ | |
| 6495 | |
| 6496 NTHALAPI | |
| 6497 BOOLEAN | |
| 6498 NTAPI | |
| 6499 HalMakeBeep( | |
| 6500 IN ULONG Frequency); | |
| 6501 | |
| 6502 NTKERNELAPI | |
| 6503 VOID | |
| 6504 FASTCALL | |
| 6505 HalExamineMBR( | |
| 6506 IN PDEVICE_OBJECT DeviceObject, | |
| 6507 IN ULONG SectorSize, | |
| 6508 IN ULONG MBRTypeIdentifier, | |
| 6509 OUT PVOID *Buffer); | |
| 6510 | |
| 6511 VOID | |
| 6512 NTAPI | |
| 6513 HalPutDmaAdapter( | |
| 6514 PADAPTER_OBJECT AdapterObject | |
| 6515 ); | |
| 6516 | |
| 6517 | |
| 6518 /** Io access routines **/ | |
| 6519 | |
| 6520 #if !defined(_M_AMD64) | |
| 6521 NTHALAPI | |
| 6522 VOID | |
| 6523 NTAPI | |
| 6524 READ_PORT_BUFFER_UCHAR( | |
| 6525 IN PUCHAR Port, | |
| 6526 IN PUCHAR Buffer, | |
| 6527 IN ULONG Count); | |
| 6528 | |
| 6529 NTHALAPI | |
| 6530 VOID | |
| 6531 NTAPI | |
| 6532 READ_PORT_BUFFER_ULONG( | |
| 6533 IN PULONG Port, | |
| 6534 IN PULONG Buffer, | |
| 6535 IN ULONG Count); | |
| 6536 | |
| 6537 NTHALAPI | |
| 6538 VOID | |
| 6539 NTAPI | |
| 6540 READ_PORT_BUFFER_USHORT( | |
| 6541 IN PUSHORT Port, | |
| 6542 IN PUSHORT Buffer, | |
| 6543 IN ULONG Count); | |
| 6544 | |
| 6545 NTHALAPI | |
| 6546 UCHAR | |
| 6547 NTAPI | |
| 6548 READ_PORT_UCHAR( | |
| 6549 IN PUCHAR Port); | |
| 6550 | |
| 6551 NTHALAPI | |
| 6552 ULONG | |
| 6553 NTAPI | |
| 6554 READ_PORT_ULONG( | |
| 6555 IN PULONG Port); | |
| 6556 | |
| 6557 NTHALAPI | |
| 6558 USHORT | |
| 6559 NTAPI | |
| 6560 READ_PORT_USHORT( | |
| 6561 IN PUSHORT Port); | |
| 6562 | |
| 6563 NTKERNELAPI | |
| 6564 VOID | |
| 6565 NTAPI | |
| 6566 READ_REGISTER_BUFFER_UCHAR( | |
| 6567 IN PUCHAR Register, | |
| 6568 IN PUCHAR Buffer, | |
| 6569 IN ULONG Count); | |
| 6570 | |
| 6571 NTKERNELAPI | |
| 6572 VOID | |
| 6573 NTAPI | |
| 6574 READ_REGISTER_BUFFER_ULONG( | |
| 6575 IN PULONG Register, | |
| 6576 IN PULONG Buffer, | |
| 6577 IN ULONG Count); | |
| 6578 | |
| 6579 NTKERNELAPI | |
| 6580 VOID | |
| 6581 NTAPI | |
| 6582 READ_REGISTER_BUFFER_USHORT( | |
| 6583 IN PUSHORT Register, | |
| 6584 IN PUSHORT Buffer, | |
| 6585 IN ULONG Count); | |
| 6586 | |
| 6587 NTKERNELAPI | |
| 6588 UCHAR | |
| 6589 NTAPI | |
| 6590 READ_REGISTER_UCHAR( | |
| 6591 IN PUCHAR Register); | |
| 6592 | |
| 6593 NTKERNELAPI | |
| 6594 ULONG | |
| 6595 NTAPI | |
| 6596 READ_REGISTER_ULONG( | |
| 6597 IN PULONG Register); | |
| 6598 | |
| 6599 NTKERNELAPI | |
| 6600 USHORT | |
| 6601 NTAPI | |
| 6602 READ_REGISTER_USHORT( | |
| 6603 IN PUSHORT Register); | |
| 6604 | |
| 6605 NTHALAPI | |
| 6606 VOID | |
| 6607 NTAPI | |
| 6608 WRITE_PORT_BUFFER_UCHAR( | |
| 6609 IN PUCHAR Port, | |
| 6610 IN PUCHAR Buffer, | |
| 6611 IN ULONG Count); | |
| 6612 | |
| 6613 NTHALAPI | |
| 6614 VOID | |
| 6615 NTAPI | |
| 6616 WRITE_PORT_BUFFER_ULONG( | |
| 6617 IN PULONG Port, | |
| 6618 IN PULONG Buffer, | |
| 6619 IN ULONG Count); | |
| 6620 | |
| 6621 NTHALAPI | |
| 6622 VOID | |
| 6623 NTAPI | |
| 6624 WRITE_PORT_BUFFER_USHORT( | |
| 6625 IN PUSHORT Port, | |
| 6626 IN PUSHORT Buffer, | |
| 6627 IN ULONG Count); | |
| 6628 | |
| 6629 NTHALAPI | |
| 6630 VOID | |
| 6631 NTAPI | |
| 6632 WRITE_PORT_UCHAR( | |
| 6633 IN PUCHAR Port, | |
| 6634 IN UCHAR Value); | |
| 6635 | |
| 6636 NTHALAPI | |
| 6637 VOID | |
| 6638 NTAPI | |
| 6639 WRITE_PORT_ULONG( | |
| 6640 IN PULONG Port, | |
| 6641 IN ULONG Value); | |
| 6642 | |
| 6643 NTHALAPI | |
| 6644 VOID | |
| 6645 NTAPI | |
| 6646 WRITE_PORT_USHORT( | |
| 6647 IN PUSHORT Port, | |
| 6648 IN USHORT Value); | |
| 6649 | |
| 6650 NTKERNELAPI | |
| 6651 VOID | |
| 6652 NTAPI | |
| 6653 WRITE_REGISTER_BUFFER_UCHAR( | |
| 6654 IN PUCHAR Register, | |
| 6655 IN PUCHAR Buffer, | |
| 6656 IN ULONG Count); | |
| 6657 | |
| 6658 NTKERNELAPI | |
| 6659 VOID | |
| 6660 NTAPI | |
| 6661 WRITE_REGISTER_BUFFER_ULONG( | |
| 6662 IN PULONG Register, | |
| 6663 IN PULONG Buffer, | |
| 6664 IN ULONG Count); | |
| 6665 | |
| 6666 NTKERNELAPI | |
| 6667 VOID | |
| 6668 NTAPI | |
| 6669 WRITE_REGISTER_BUFFER_USHORT( | |
| 6670 IN PUSHORT Register, | |
| 6671 IN PUSHORT Buffer, | |
| 6672 IN ULONG Count); | |
| 6673 | |
| 6674 NTKERNELAPI | |
| 6675 VOID | |
| 6676 NTAPI | |
| 6677 WRITE_REGISTER_UCHAR( | |
| 6678 IN PUCHAR Register, | |
| 6679 IN UCHAR Value); | |
| 6680 | |
| 6681 NTKERNELAPI | |
| 6682 VOID | |
| 6683 NTAPI | |
| 6684 WRITE_REGISTER_ULONG( | |
| 6685 IN PULONG Register, | |
| 6686 IN ULONG Value); | |
| 6687 | |
| 6688 NTKERNELAPI | |
| 6689 VOID | |
| 6690 NTAPI | |
| 6691 WRITE_REGISTER_USHORT( | |
| 6692 IN PUSHORT Register, | |
| 6693 IN USHORT Value); | |
| 6694 | |
| 6695 #else | |
| 6696 | |
| 6697 FORCEINLINE | |
| 6698 VOID | |
| 6699 READ_PORT_BUFFER_UCHAR( | |
| 6700 IN PUCHAR Port, | |
| 6701 IN PUCHAR Buffer, | |
| 6702 IN ULONG Count) | |
| 6703 { | |
| 6704 __inbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); | |
| 6705 } | |
| 6706 | |
| 6707 FORCEINLINE | |
| 6708 VOID | |
| 6709 READ_PORT_BUFFER_ULONG( | |
| 6710 IN PULONG Port, | |
| 6711 IN PULONG Buffer, | |
| 6712 IN ULONG Count) | |
| 6713 { | |
| 6714 __indwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); | |
| 6715 } | |
| 6716 | |
| 6717 FORCEINLINE | |
| 6718 VOID | |
| 6719 READ_PORT_BUFFER_USHORT( | |
| 6720 IN PUSHORT Port, | |
| 6721 IN PUSHORT Buffer, | |
| 6722 IN ULONG Count) | |
| 6723 { | |
| 6724 __inwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); | |
| 6725 } | |
| 6726 | |
| 6727 FORCEINLINE | |
| 6728 UCHAR | |
| 6729 READ_PORT_UCHAR( | |
| 6730 IN PUCHAR Port) | |
| 6731 { | |
| 6732 return __inbyte((USHORT)(ULONG_PTR)Port); | |
| 6733 } | |
| 6734 | |
| 6735 FORCEINLINE | |
| 6736 ULONG | |
| 6737 READ_PORT_ULONG( | |
| 6738 IN PULONG Port) | |
| 6739 { | |
| 6740 return __indword((USHORT)(ULONG_PTR)Port); | |
| 6741 } | |
| 6742 | |
| 6743 FORCEINLINE | |
| 6744 USHORT | |
| 6745 READ_PORT_USHORT( | |
| 6746 IN PUSHORT Port) | |
| 6747 { | |
| 6748 return __inword((USHORT)(ULONG_PTR)Port); | |
| 6749 } | |
| 6750 | |
| 6751 FORCEINLINE | |
| 6752 VOID | |
| 6753 READ_REGISTER_BUFFER_UCHAR( | |
| 6754 IN PUCHAR Register, | |
| 6755 IN PUCHAR Buffer, | |
| 6756 IN ULONG Count) | |
| 6757 { | |
| 6758 __movsb(Register, Buffer, Count); | |
| 6759 } | |
| 6760 | |
| 6761 FORCEINLINE | |
| 6762 VOID | |
| 6763 READ_REGISTER_BUFFER_ULONG( | |
| 6764 IN PULONG Register, | |
| 6765 IN PULONG Buffer, | |
| 6766 IN ULONG Count) | |
| 6767 { | |
| 6768 __movsd(Register, Buffer, Count); | |
| 6769 } | |
| 6770 | |
| 6771 FORCEINLINE | |
| 6772 VOID | |
| 6773 READ_REGISTER_BUFFER_USHORT( | |
| 6774 IN PUSHORT Register, | |
| 6775 IN PUSHORT Buffer, | |
| 6776 IN ULONG Count) | |
| 6777 { | |
| 6778 __movsw(Register, Buffer, Count); | |
| 6779 } | |
| 6780 | |
| 6781 FORCEINLINE | |
| 6782 UCHAR | |
| 6783 READ_REGISTER_UCHAR( | |
| 6784 IN PUCHAR Register) | |
| 6785 { | |
| 6786 return *Register; | |
| 6787 } | |
| 6788 | |
| 6789 FORCEINLINE | |
| 6790 ULONG | |
| 6791 READ_REGISTER_ULONG( | |
| 6792 IN PULONG Register) | |
| 6793 { | |
| 6794 return *Register; | |
| 6795 } | |
| 6796 | |
| 6797 FORCEINLINE | |
| 6798 USHORT | |
| 6799 READ_REGISTER_USHORT( | |
| 6800 IN PUSHORT Register) | |
| 6801 { | |
| 6802 return *Register; | |
| 6803 } | |
| 6804 | |
| 6805 FORCEINLINE | |
| 6806 VOID | |
| 6807 WRITE_PORT_BUFFER_UCHAR( | |
| 6808 IN PUCHAR Port, | |
| 6809 IN PUCHAR Buffer, | |
| 6810 IN ULONG Count) | |
| 6811 { | |
| 6812 __outbytestring((USHORT)(ULONG_PTR)Port, Buffer, Count); | |
| 6813 } | |
| 6814 | |
| 6815 FORCEINLINE | |
| 6816 VOID | |
| 6817 WRITE_PORT_BUFFER_ULONG( | |
| 6818 IN PULONG Port, | |
| 6819 IN PULONG Buffer, | |
| 6820 IN ULONG Count) | |
| 6821 { | |
| 6822 __outdwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); | |
| 6823 } | |
| 6824 | |
| 6825 FORCEINLINE | |
| 6826 VOID | |
| 6827 WRITE_PORT_BUFFER_USHORT( | |
| 6828 IN PUSHORT Port, | |
| 6829 IN PUSHORT Buffer, | |
| 6830 IN ULONG Count) | |
| 6831 { | |
| 6832 __outwordstring((USHORT)(ULONG_PTR)Port, Buffer, Count); | |
| 6833 } | |
| 6834 | |
| 6835 FORCEINLINE | |
| 6836 VOID | |
| 6837 WRITE_PORT_UCHAR( | |
| 6838 IN PUCHAR Port, | |
| 6839 IN UCHAR Value) | |
| 6840 { | |
| 6841 __outbyte((USHORT)(ULONG_PTR)Port, Value); | |
| 6842 } | |
| 6843 | |
| 6844 FORCEINLINE | |
| 6845 VOID | |
| 6846 WRITE_PORT_ULONG( | |
| 6847 IN PULONG Port, | |
| 6848 IN ULONG Value) | |
| 6849 { | |
| 6850 __outdword((USHORT)(ULONG_PTR)Port, Value); | |
| 6851 } | |
| 6852 | |
| 6853 FORCEINLINE | |
| 6854 VOID | |
| 6855 WRITE_PORT_USHORT( | |
| 6856 IN PUSHORT Port, | |
| 6857 IN USHORT Value) | |
| 6858 { | |
| 6859 __outword((USHORT)(ULONG_PTR)Port, Value); | |
| 6860 } | |
| 6861 | |
| 6862 FORCEINLINE | |
| 6863 VOID | |
| 6864 WRITE_REGISTER_BUFFER_UCHAR( | |
| 6865 IN PUCHAR Register, | |
| 6866 IN PUCHAR Buffer, | |
| 6867 IN ULONG Count) | |
| 6868 { | |
| 6869 LONG Synch; | |
| 6870 __movsb(Register, Buffer, Count); | |
| 6871 InterlockedOr(&Synch, 1); | |
| 6872 } | |
| 6873 | |
| 6874 FORCEINLINE | |
| 6875 VOID | |
| 6876 WRITE_REGISTER_BUFFER_ULONG( | |
| 6877 IN PULONG Register, | |
| 6878 IN PULONG Buffer, | |
| 6879 IN ULONG Count) | |
| 6880 { | |
| 6881 LONG Synch; | |
| 6882 __movsd(Register, Buffer, Count); | |
| 6883 InterlockedOr(&Synch, 1); | |
| 6884 } | |
| 6885 | |
| 6886 FORCEINLINE | |
| 6887 VOID | |
| 6888 WRITE_REGISTER_BUFFER_USHORT( | |
| 6889 IN PUSHORT Register, | |
| 6890 IN PUSHORT Buffer, | |
| 6891 IN ULONG Count) | |
| 6892 { | |
| 6893 LONG Synch; | |
| 6894 __movsw(Register, Buffer, Count); | |
| 6895 InterlockedOr(&Synch, 1); | |
| 6896 } | |
| 6897 | |
| 6898 FORCEINLINE | |
| 6899 VOID | |
| 6900 WRITE_REGISTER_UCHAR( | |
| 6901 IN PUCHAR Register, | |
| 6902 IN UCHAR Value) | |
| 6903 { | |
| 6904 LONG Synch; | |
| 6905 *Register = Value; | |
| 6906 InterlockedOr(&Synch, 1); | |
| 6907 } | |
| 6908 | |
| 6909 FORCEINLINE | |
| 6910 VOID | |
| 6911 WRITE_REGISTER_ULONG( | |
| 6912 IN PULONG Register, | |
| 6913 IN ULONG Value) | |
| 6914 { | |
| 6915 LONG Synch; | |
| 6916 *Register = Value; | |
| 6917 InterlockedOr(&Synch, 1); | |
| 6918 } | |
| 6919 | |
| 6920 FORCEINLINE | |
| 6921 VOID | |
| 6922 WRITE_REGISTER_USHORT( | |
| 6923 IN PUSHORT Register, | |
| 6924 IN USHORT Value) | |
| 6925 { | |
| 6926 LONG Sync; | |
| 6927 *Register = Value; | |
| 6928 InterlockedOr(&Sync, 1); | |
| 6929 } | |
| 6930 | |
| 6931 #endif | |
| 6932 | |
| 6933 /** I/O manager routines **/ | |
| 6934 | |
| 6935 NTKERNELAPI | |
| 6936 VOID | |
| 6937 NTAPI | |
| 6938 IoAcquireCancelSpinLock( | |
| 6939 OUT PKIRQL Irql); | |
| 6940 | |
| 6941 NTKERNELAPI | |
| 6942 NTSTATUS | |
| 6943 NTAPI | |
| 6944 IoAcquireRemoveLockEx( | |
| 6945 IN PIO_REMOVE_LOCK RemoveLock, | |
| 6946 IN OPTIONAL PVOID Tag OPTIONAL, | |
| 6947 IN PCSTR File, | |
| 6948 IN ULONG Line, | |
| 6949 IN ULONG RemlockSize); | |
| 6950 | |
| 6951 /* | |
| 6952 * NTSTATUS | |
| 6953 * IoAcquireRemoveLock( | |
| 6954 * IN PIO_REMOVE_LOCK RemoveLock, | |
| 6955 * IN OPTIONAL PVOID Tag) | |
| 6956 */ | |
| 6957 #define IoAcquireRemoveLock(_RemoveLock, \ | |
| 6958 _Tag) \ | |
| 6959 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK)) | |
| 6960 | |
| 6961 /* | |
| 6962 * VOID | |
| 6963 * IoAdjustPagingPathCount( | |
| 6964 * IN PLONG Count, | |
| 6965 * IN BOOLEAN Increment) | |
| 6966 */ | |
| 6967 #define IoAdjustPagingPathCount(_Count, \ | |
| 6968 _Increment) \ | |
| 6969 { \ | |
| 6970 if (_Increment) \ | |
| 6971 { \ | |
| 6972 InterlockedIncrement(_Count); \ | |
| 6973 } \ | |
| 6974 else \ | |
| 6975 { \ | |
| 6976 InterlockedDecrement(_Count); \ | |
| 6977 } \ | |
| 6978 } | |
| 6979 | |
| 6980 #ifndef DMA_MACROS_DEFINED | |
| 6981 NTKERNELAPI | |
| 6982 NTSTATUS | |
| 6983 NTAPI | |
| 6984 IoAllocateAdapterChannel( | |
| 6985 IN PADAPTER_OBJECT AdapterObject, | |
| 6986 IN PDEVICE_OBJECT DeviceObject, | |
| 6987 IN ULONG NumberOfMapRegisters, | |
| 6988 IN PDRIVER_CONTROL ExecutionRoutine, | |
| 6989 IN PVOID Context); | |
| 6990 #endif | |
| 6991 | |
| 6992 NTKERNELAPI | |
| 6993 VOID | |
| 6994 NTAPI | |
| 6995 IoAllocateController( | |
| 6996 IN PCONTROLLER_OBJECT ControllerObject, | |
| 6997 IN PDEVICE_OBJECT DeviceObject, | |
| 6998 IN PDRIVER_CONTROL ExecutionRoutine, | |
| 6999 IN PVOID Context); | |
| 7000 | |
| 7001 NTKERNELAPI | |
| 7002 NTSTATUS | |
| 7003 NTAPI | |
| 7004 IoAllocateDriverObjectExtension( | |
| 7005 IN PDRIVER_OBJECT DriverObject, | |
| 7006 IN PVOID ClientIdentificationAddress, | |
| 7007 IN ULONG DriverObjectExtensionSize, | |
| 7008 OUT PVOID *DriverObjectExtension); | |
| 7009 | |
| 7010 NTKERNELAPI | |
| 7011 PVOID | |
| 7012 NTAPI | |
| 7013 IoAllocateErrorLogEntry( | |
| 7014 IN PVOID IoObject, | |
| 7015 IN UCHAR EntrySize); | |
| 7016 | |
| 7017 NTKERNELAPI | |
| 7018 PIRP | |
| 7019 NTAPI | |
| 7020 IoAllocateIrp( | |
| 7021 IN CCHAR StackSize, | |
| 7022 IN BOOLEAN ChargeQuota); | |
| 7023 | |
| 7024 NTKERNELAPI | |
| 7025 PMDL | |
| 7026 NTAPI | |
| 7027 IoAllocateMdl( | |
| 7028 IN PVOID VirtualAddress, | |
| 7029 IN ULONG Length, | |
| 7030 IN BOOLEAN SecondaryBuffer, | |
| 7031 IN BOOLEAN ChargeQuota, | |
| 7032 IN OUT PIRP Irp OPTIONAL); | |
| 7033 | |
| 7034 NTKERNELAPI | |
| 7035 PIO_WORKITEM | |
| 7036 NTAPI | |
| 7037 IoAllocateWorkItem( | |
| 7038 IN PDEVICE_OBJECT DeviceObject); | |
| 7039 | |
| 7040 /* | |
| 7041 * VOID IoAssignArcName( | |
| 7042 * IN PUNICODE_STRING ArcName, | |
| 7043 * IN PUNICODE_STRING DeviceName); | |
| 7044 */ | |
| 7045 #define IoAssignArcName(_ArcName, _DeviceName) ( \ | |
| 7046 IoCreateSymbolicLink((_ArcName), (_DeviceName))) | |
| 7047 | |
| 7048 NTKERNELAPI | |
| 7049 NTSTATUS | |
| 7050 NTAPI | |
| 7051 IoAttachDevice( | |
| 7052 IN PDEVICE_OBJECT SourceDevice, | |
| 7053 IN PUNICODE_STRING TargetDevice, | |
| 7054 OUT PDEVICE_OBJECT *AttachedDevice); | |
| 7055 | |
| 7056 NTKERNELAPI | |
| 7057 PDEVICE_OBJECT | |
| 7058 NTAPI | |
| 7059 IoAttachDeviceToDeviceStack( | |
| 7060 IN PDEVICE_OBJECT SourceDevice, | |
| 7061 IN PDEVICE_OBJECT TargetDevice); | |
| 7062 | |
| 7063 NTKERNELAPI | |
| 7064 PIRP | |
| 7065 NTAPI | |
| 7066 IoBuildAsynchronousFsdRequest( | |
| 7067 IN ULONG MajorFunction, | |
| 7068 IN PDEVICE_OBJECT DeviceObject, | |
| 7069 IN OUT PVOID Buffer OPTIONAL, | |
| 7070 IN ULONG Length OPTIONAL, | |
| 7071 IN PLARGE_INTEGER StartingOffset OPTIONAL, | |
| 7072 IN PIO_STATUS_BLOCK IoStatusBlock OPTIONAL); | |
| 7073 | |
| 7074 NTKERNELAPI | |
| 7075 PIRP | |
| 7076 NTAPI | |
| 7077 IoBuildDeviceIoControlRequest( | |
| 7078 IN ULONG IoControlCode, | |
| 7079 IN PDEVICE_OBJECT DeviceObject, | |
| 7080 IN PVOID InputBuffer OPTIONAL, | |
| 7081 IN ULONG InputBufferLength, | |
| 7082 OUT PVOID OutputBuffer OPTIONAL, | |
| 7083 IN ULONG OutputBufferLength, | |
| 7084 IN BOOLEAN InternalDeviceIoControl, | |
| 7085 IN PKEVENT Event, | |
| 7086 OUT PIO_STATUS_BLOCK IoStatusBlock); | |
| 7087 | |
| 7088 NTKERNELAPI | |
| 7089 VOID | |
| 7090 NTAPI | |
| 7091 IoBuildPartialMdl( | |
| 7092 IN PMDL SourceMdl, | |
| 7093 IN OUT PMDL TargetMdl, | |
| 7094 IN PVOID VirtualAddress, | |
| 7095 IN ULONG Length); | |
| 7096 | |
| 7097 NTKERNELAPI | |
| 7098 PIRP | |
| 7099 NTAPI | |
| 7100 IoBuildSynchronousFsdRequest( | |
| 7101 IN ULONG MajorFunction, | |
| 7102 IN PDEVICE_OBJECT DeviceObject, | |
| 7103 IN OUT PVOID Buffer OPTIONAL, | |
| 7104 IN ULONG Length OPTIONAL, | |
| 7105 IN PLARGE_INTEGER StartingOffset OPTIONAL, | |
| 7106 IN PKEVENT Event, | |
| 7107 OUT PIO_STATUS_BLOCK IoStatusBlock); | |
| 7108 | |
| 7109 NTKERNELAPI | |
| 7110 NTSTATUS | |
| 7111 FASTCALL | |
| 7112 IofCallDriver( | |
| 7113 IN PDEVICE_OBJECT DeviceObject, | |
| 7114 IN OUT PIRP Irp); | |
| 7115 | |
| 7116 /* | |
| 7117 * NTSTATUS | |
| 7118 * IoCallDriver( | |
| 7119 * IN PDEVICE_OBJECT DeviceObject, | |
| 7120 * IN OUT PIRP Irp) | |
| 7121 */ | |
| 7122 #define IoCallDriver IofCallDriver | |
| 7123 | |
| 7124 NTKERNELAPI | |
| 7125 VOID | |
| 7126 NTAPI | |
| 7127 IoCancelFileOpen( | |
| 7128 IN PDEVICE_OBJECT DeviceObject, | |
| 7129 IN PFILE_OBJECT FileObject); | |
| 7130 | |
| 7131 NTKERNELAPI | |
| 7132 BOOLEAN | |
| 7133 NTAPI | |
| 7134 IoCancelIrp( | |
| 7135 IN PIRP Irp); | |
| 7136 | |
| 7137 NTKERNELAPI | |
| 7138 NTSTATUS | |
| 7139 NTAPI | |
| 7140 IoCheckShareAccess( | |
| 7141 IN ACCESS_MASK DesiredAccess, | |
| 7142 IN ULONG DesiredShareAccess, | |
| 7143 IN OUT PFILE_OBJECT FileObject, | |
| 7144 IN OUT PSHARE_ACCESS ShareAccess, | |
| 7145 IN BOOLEAN Update); | |
| 7146 | |
| 7147 NTKERNELAPI | |
| 7148 VOID | |
| 7149 FASTCALL | |
| 7150 IofCompleteRequest( | |
| 7151 IN PIRP Irp, | |
| 7152 IN CCHAR PriorityBoost); | |
| 7153 | |
| 7154 /* | |
| 7155 * VOID | |
| 7156 * IoCompleteRequest( | |
| 7157 * IN PIRP Irp, | |
| 7158 * IN CCHAR PriorityBoost) | |
| 7159 */ | |
| 7160 #define IoCompleteRequest IofCompleteRequest | |
| 7161 | |
| 7162 NTKERNELAPI | |
| 7163 NTSTATUS | |
| 7164 NTAPI | |
| 7165 IoConnectInterrupt( | |
| 7166 OUT PKINTERRUPT *InterruptObject, | |
| 7167 IN PKSERVICE_ROUTINE ServiceRoutine, | |
| 7168 IN PVOID ServiceContext, | |
| 7169 IN PKSPIN_LOCK SpinLock OPTIONAL, | |
| 7170 IN ULONG Vector, | |
| 7171 IN KIRQL Irql, | |
| 7172 IN KIRQL SynchronizeIrql, | |
| 7173 IN KINTERRUPT_MODE InterruptMode, | |
| 7174 IN BOOLEAN ShareVector, | |
| 7175 IN KAFFINITY ProcessorEnableMask, | |
| 7176 IN BOOLEAN FloatingSave); | |
| 7177 | |
| 7178 /* | |
| 7179 * PIO_STACK_LOCATION | |
| 7180 * IoGetCurrentIrpStackLocation( | |
| 7181 * IN PIRP Irp) | |
| 7182 */ | |
| 7183 #define IoGetCurrentIrpStackLocation(_Irp) \ | |
| 7184 ((_Irp)->Tail.Overlay.CurrentStackLocation) | |
| 7185 | |
| 7186 /* | |
| 7187 * PIO_STACK_LOCATION | |
| 7188 * IoGetNextIrpStackLocation( | |
| 7189 * IN PIRP Irp) | |
| 7190 */ | |
| 7191 #define IoGetNextIrpStackLocation(_Irp) \ | |
| 7192 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1) | |
| 7193 | |
| 7194 /* | |
| 7195 * VOID | |
| 7196 * IoCopyCurrentIrpStackLocationToNext( | |
| 7197 * IN PIRP Irp) | |
| 7198 */ | |
| 7199 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \ | |
| 7200 { \ | |
| 7201 PIO_STACK_LOCATION _IrpSp; \ | |
| 7202 PIO_STACK_LOCATION _NextIrpSp; \ | |
| 7203 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \ | |
| 7204 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \ | |
| 7205 RtlCopyMemory(_NextIrpSp, _IrpSp, \ | |
| 7206 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \ | |
| 7207 _NextIrpSp->Control = 0; \ | |
| 7208 } | |
| 7209 | |
| 7210 NTKERNELAPI | |
| 7211 PCONTROLLER_OBJECT | |
| 7212 NTAPI | |
| 7213 IoCreateController( | |
| 7214 IN ULONG Size); | |
| 7215 | |
| 7216 NTKERNELAPI | |
| 7217 NTSTATUS | |
| 7218 NTAPI | |
| 7219 IoCreateDevice( | |
| 7220 IN PDRIVER_OBJECT DriverObject, | |
| 7221 IN ULONG DeviceExtensionSize, | |
| 7222 IN PUNICODE_STRING DeviceName OPTIONAL, | |
| 7223 IN DEVICE_TYPE DeviceType, | |
| 7224 IN ULONG DeviceCharacteristics, | |
| 7225 IN BOOLEAN Exclusive, | |
| 7226 OUT PDEVICE_OBJECT *DeviceObject); | |
| 7227 | |
| 7228 NTKERNELAPI | |
| 7229 NTSTATUS | |
| 7230 NTAPI | |
| 7231 IoCreateDisk( | |
| 7232 IN PDEVICE_OBJECT DeviceObject, | |
| 7233 IN PCREATE_DISK Disk); | |
| 7234 | |
| 7235 NTKERNELAPI | |
| 7236 NTSTATUS | |
| 7237 NTAPI | |
| 7238 IoCreateFile( | |
| 7239 OUT PHANDLE FileHandle, | |
| 7240 IN ACCESS_MASK DesiredAccess, | |
| 7241 IN POBJECT_ATTRIBUTES ObjectAttributes, | |
| 7242 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 7243 IN PLARGE_INTEGER AllocationSize OPTIONAL, | |
| 7244 IN ULONG FileAttributes, | |
| 7245 IN ULONG ShareAccess, | |
| 7246 IN ULONG Disposition, | |
| 7247 IN ULONG CreateOptions, | |
| 7248 IN PVOID EaBuffer OPTIONAL, | |
| 7249 IN ULONG EaLength, | |
| 7250 IN CREATE_FILE_TYPE CreateFileType, | |
| 7251 IN PVOID ExtraCreateParameters OPTIONAL, | |
| 7252 IN ULONG Options); | |
| 7253 | |
| 7254 NTKERNELAPI | |
| 7255 PKEVENT | |
| 7256 NTAPI | |
| 7257 IoCreateNotificationEvent( | |
| 7258 IN PUNICODE_STRING EventName, | |
| 7259 OUT PHANDLE EventHandle); | |
| 7260 | |
| 7261 NTKERNELAPI | |
| 7262 NTSTATUS | |
| 7263 NTAPI | |
| 7264 IoCreateSymbolicLink( | |
| 7265 IN PUNICODE_STRING SymbolicLinkName, | |
| 7266 IN PUNICODE_STRING DeviceName); | |
| 7267 | |
| 7268 NTKERNELAPI | |
| 7269 PKEVENT | |
| 7270 NTAPI | |
| 7271 IoCreateSynchronizationEvent( | |
| 7272 IN PUNICODE_STRING EventName, | |
| 7273 OUT PHANDLE EventHandle); | |
| 7274 | |
| 7275 NTKERNELAPI | |
| 7276 NTSTATUS | |
| 7277 NTAPI | |
| 7278 IoCreateUnprotectedSymbolicLink( | |
| 7279 IN PUNICODE_STRING SymbolicLinkName, | |
| 7280 IN PUNICODE_STRING DeviceName); | |
| 7281 | |
| 7282 NTKERNELAPI | |
| 7283 NTSTATUS | |
| 7284 NTAPI | |
| 7285 IoCsqInitialize( | |
| 7286 PIO_CSQ Csq, | |
| 7287 IN PIO_CSQ_INSERT_IRP CsqInsertIrp, | |
| 7288 IN PIO_CSQ_REMOVE_IRP CsqRemoveIrp, | |
| 7289 IN PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, | |
| 7290 IN PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, | |
| 7291 IN PIO_CSQ_RELEASE_LOCK CsqReleaseLock, | |
| 7292 IN PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); | |
| 7293 | |
| 7294 NTKERNELAPI | |
| 7295 VOID | |
| 7296 NTAPI | |
| 7297 IoCsqInsertIrp( | |
| 7298 IN PIO_CSQ Csq, | |
| 7299 IN PIRP Irp, | |
| 7300 IN PIO_CSQ_IRP_CONTEXT Context); | |
| 7301 | |
| 7302 NTKERNELAPI | |
| 7303 PIRP | |
| 7304 NTAPI | |
| 7305 IoCsqRemoveIrp( | |
| 7306 IN PIO_CSQ Csq, | |
| 7307 IN PIO_CSQ_IRP_CONTEXT Context); | |
| 7308 | |
| 7309 NTKERNELAPI | |
| 7310 PIRP | |
| 7311 NTAPI | |
| 7312 IoCsqRemoveNextIrp( | |
| 7313 IN PIO_CSQ Csq, | |
| 7314 IN PVOID PeekContext); | |
| 7315 | |
| 7316 NTKERNELAPI | |
| 7317 VOID | |
| 7318 NTAPI | |
| 7319 IoDeleteController( | |
| 7320 IN PCONTROLLER_OBJECT ControllerObject); | |
| 7321 | |
| 7322 NTKERNELAPI | |
| 7323 VOID | |
| 7324 NTAPI | |
| 7325 IoDeleteDevice( | |
| 7326 IN PDEVICE_OBJECT DeviceObject); | |
| 7327 | |
| 7328 NTKERNELAPI | |
| 7329 NTSTATUS | |
| 7330 NTAPI | |
| 7331 IoDeleteSymbolicLink( | |
| 7332 IN PUNICODE_STRING SymbolicLinkName); | |
| 7333 | |
| 7334 /* | |
| 7335 * VOID | |
| 7336 * IoDeassignArcName( | |
| 7337 * IN PUNICODE_STRING ArcName) | |
| 7338 */ | |
| 7339 #define IoDeassignArcName IoDeleteSymbolicLink | |
| 7340 | |
| 7341 NTKERNELAPI | |
| 7342 VOID | |
| 7343 NTAPI | |
| 7344 IoDetachDevice( | |
| 7345 IN OUT PDEVICE_OBJECT TargetDevice); | |
| 7346 | |
| 7347 NTKERNELAPI | |
| 7348 VOID | |
| 7349 NTAPI | |
| 7350 IoDisconnectInterrupt( | |
| 7351 IN PKINTERRUPT InterruptObject); | |
| 7352 | |
| 7353 NTKERNELAPI | |
| 7354 BOOLEAN | |
| 7355 NTAPI | |
| 7356 IoForwardIrpSynchronously( | |
| 7357 IN PDEVICE_OBJECT DeviceObject, | |
| 7358 IN PIRP Irp); | |
| 7359 | |
| 7360 #define IoForwardAndCatchIrp IoForwardIrpSynchronously | |
| 7361 | |
| 7362 NTKERNELAPI | |
| 7363 VOID | |
| 7364 NTAPI | |
| 7365 IoFreeController( | |
| 7366 IN PCONTROLLER_OBJECT ControllerObject); | |
| 7367 | |
| 7368 NTKERNELAPI | |
| 7369 VOID | |
| 7370 NTAPI | |
| 7371 IoFreeErrorLogEntry( | |
| 7372 PVOID ElEntry); | |
| 7373 | |
| 7374 NTKERNELAPI | |
| 7375 VOID | |
| 7376 NTAPI | |
| 7377 IoFreeIrp( | |
| 7378 IN PIRP Irp); | |
| 7379 | |
| 7380 NTKERNELAPI | |
| 7381 VOID | |
| 7382 NTAPI | |
| 7383 IoFreeMdl( | |
| 7384 IN PMDL Mdl); | |
| 7385 | |
| 7386 NTKERNELAPI | |
| 7387 VOID | |
| 7388 NTAPI | |
| 7389 IoFreeWorkItem( | |
| 7390 IN PIO_WORKITEM pIOWorkItem); | |
| 7391 | |
| 7392 NTKERNELAPI | |
| 7393 PDEVICE_OBJECT | |
| 7394 NTAPI | |
| 7395 IoGetAttachedDevice( | |
| 7396 IN PDEVICE_OBJECT DeviceObject); | |
| 7397 | |
| 7398 NTKERNELAPI | |
| 7399 PDEVICE_OBJECT | |
| 7400 NTAPI | |
| 7401 IoGetAttachedDeviceReference( | |
| 7402 IN PDEVICE_OBJECT DeviceObject); | |
| 7403 | |
| 7404 NTKERNELAPI | |
| 7405 NTSTATUS | |
| 7406 NTAPI | |
| 7407 IoGetBootDiskInformation( | |
| 7408 IN OUT PBOOTDISK_INFORMATION BootDiskInformation, | |
| 7409 IN ULONG Size); | |
| 7410 | |
| 7411 NTKERNELAPI | |
| 7412 PCONFIGURATION_INFORMATION | |
| 7413 NTAPI | |
| 7414 IoGetConfigurationInformation( | |
| 7415 VOID); | |
| 7416 | |
| 7417 NTKERNELAPI | |
| 7418 PEPROCESS | |
| 7419 NTAPI | |
| 7420 IoGetCurrentProcess( | |
| 7421 VOID); | |
| 7422 | |
| 7423 NTKERNELAPI | |
| 7424 NTSTATUS | |
| 7425 NTAPI | |
| 7426 IoGetDeviceInterfaceAlias( | |
| 7427 IN PUNICODE_STRING SymbolicLinkName, | |
| 7428 IN CONST GUID *AliasInterfaceClassGuid, | |
| 7429 OUT PUNICODE_STRING AliasSymbolicLinkName); | |
| 7430 | |
| 7431 #define DEVICE_INTERFACE_INCLUDE_NONACTIVE 0x00000001 | |
| 7432 | |
| 7433 NTKERNELAPI | |
| 7434 NTSTATUS | |
| 7435 NTAPI | |
| 7436 IoGetDeviceInterfaces( | |
| 7437 IN CONST GUID *InterfaceClassGuid, | |
| 7438 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, | |
| 7439 IN ULONG Flags, | |
| 7440 OUT PWSTR *SymbolicLinkList); | |
| 7441 | |
| 7442 NTKERNELAPI | |
| 7443 NTSTATUS | |
| 7444 NTAPI | |
| 7445 IoGetDeviceObjectPointer( | |
| 7446 IN PUNICODE_STRING ObjectName, | |
| 7447 IN ACCESS_MASK DesiredAccess, | |
| 7448 OUT PFILE_OBJECT *FileObject, | |
| 7449 OUT PDEVICE_OBJECT *DeviceObject); | |
| 7450 | |
| 7451 NTKERNELAPI | |
| 7452 NTSTATUS | |
| 7453 NTAPI | |
| 7454 IoGetDeviceProperty( | |
| 7455 IN PDEVICE_OBJECT DeviceObject, | |
| 7456 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, | |
| 7457 IN ULONG BufferLength, | |
| 7458 OUT PVOID PropertyBuffer, | |
| 7459 OUT PULONG ResultLength); | |
| 7460 | |
| 7461 NTKERNELAPI | |
| 7462 PDEVICE_OBJECT | |
| 7463 NTAPI | |
| 7464 IoGetDeviceToVerify( | |
| 7465 IN PETHREAD Thread); | |
| 7466 | |
| 7467 NTKERNELAPI | |
| 7468 PDMA_ADAPTER | |
| 7469 NTAPI | |
| 7470 IoGetDmaAdapter( | |
| 7471 IN PDEVICE_OBJECT PhysicalDeviceObject, | |
| 7472 IN PDEVICE_DESCRIPTION DeviceDescription, | |
| 7473 IN OUT PULONG NumberOfMapRegisters); | |
| 7474 | |
| 7475 NTKERNELAPI | |
| 7476 PVOID | |
| 7477 NTAPI | |
| 7478 IoGetDriverObjectExtension( | |
| 7479 IN PDRIVER_OBJECT DriverObject, | |
| 7480 IN PVOID ClientIdentificationAddress); | |
| 7481 | |
| 7482 NTKERNELAPI | |
| 7483 PGENERIC_MAPPING | |
| 7484 NTAPI | |
| 7485 IoGetFileObjectGenericMapping( | |
| 7486 VOID); | |
| 7487 | |
| 7488 /* | |
| 7489 * ULONG | |
| 7490 * IoGetFunctionCodeFromCtlCode( | |
| 7491 * IN ULONG ControlCode) | |
| 7492 */ | |
| 7493 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \ | |
| 7494 (((_ControlCode) >> 2) & 0x00000FFF) | |
| 7495 | |
| 7496 NTKERNELAPI | |
| 7497 PVOID | |
| 7498 NTAPI | |
| 7499 IoGetInitialStack( | |
| 7500 VOID); | |
| 7501 | |
| 7502 NTKERNELAPI | |
| 7503 PDEVICE_OBJECT | |
| 7504 NTAPI | |
| 7505 IoGetRelatedDeviceObject( | |
| 7506 IN PFILE_OBJECT FileObject); | |
| 7507 | |
| 7508 NTKERNELAPI | |
| 7509 VOID | |
| 7510 NTAPI | |
| 7511 IoGetStackLimits( | |
| 7512 OUT PULONG_PTR LowLimit, | |
| 7513 OUT PULONG_PTR HighLimit); | |
| 7514 | |
| 7515 FORCEINLINE | |
| 7516 ULONG_PTR | |
| 7517 IoGetRemainingStackSize( | |
| 7518 VOID | |
| 7519 ) | |
| 7520 { | |
| 7521 ULONG_PTR End, Begin; | |
| 7522 ULONG_PTR Result; | |
| 7523 | |
| 7524 IoGetStackLimits(&Begin, &End); | |
| 7525 Result = (ULONG_PTR)(&End) - Begin; | |
| 7526 return Result; | |
| 7527 } | |
| 7528 | |
| 7529 NTKERNELAPI | |
| 7530 VOID | |
| 7531 NTAPI | |
| 7532 KeInitializeDpc( | |
| 7533 IN PRKDPC Dpc, | |
| 7534 IN PKDEFERRED_ROUTINE DeferredRoutine, | |
| 7535 IN PVOID DeferredContext); | |
| 7536 | |
| 7537 /* | |
| 7538 * VOID | |
| 7539 * IoInitializeDpcRequest( | |
| 7540 * IN PDEVICE_OBJECT DeviceObject, | |
| 7541 * IN PIO_DPC_ROUTINE DpcRoutine) | |
| 7542 */ | |
| 7543 #define IoInitializeDpcRequest(_DeviceObject, \ | |
| 7544 _DpcRoutine) \ | |
| 7545 KeInitializeDpc(&(_DeviceObject)->Dpc, \ | |
| 7546 (PKDEFERRED_ROUTINE) (_DpcRoutine), \ | |
| 7547 _DeviceObject) | |
| 7548 | |
| 7549 NTKERNELAPI | |
| 7550 VOID | |
| 7551 NTAPI | |
| 7552 IoInitializeIrp( | |
| 7553 IN OUT PIRP Irp, | |
| 7554 IN USHORT PacketSize, | |
| 7555 IN CCHAR StackSize); | |
| 7556 | |
| 7557 NTKERNELAPI | |
| 7558 VOID | |
| 7559 NTAPI | |
| 7560 IoInitializeRemoveLockEx( | |
| 7561 IN PIO_REMOVE_LOCK Lock, | |
| 7562 IN ULONG AllocateTag, | |
| 7563 IN ULONG MaxLockedMinutes, | |
| 7564 IN ULONG HighWatermark, | |
| 7565 IN ULONG RemlockSize); | |
| 7566 | |
| 7567 /* VOID | |
| 7568 * IoInitializeRemoveLock( | |
| 7569 * IN PIO_REMOVE_LOCK Lock, | |
| 7570 * IN ULONG AllocateTag, | |
| 7571 * IN ULONG MaxLockedMinutes, | |
| 7572 * IN ULONG HighWatermark) | |
| 7573 */ | |
| 7574 #define IoInitializeRemoveLock( \ | |
| 7575 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \ | |
| 7576 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \ | |
| 7577 HighWatermark, sizeof(IO_REMOVE_LOCK)) | |
| 7578 | |
| 7579 NTKERNELAPI | |
| 7580 NTSTATUS | |
| 7581 NTAPI | |
| 7582 IoInitializeTimer( | |
| 7583 IN PDEVICE_OBJECT DeviceObject, | |
| 7584 IN PIO_TIMER_ROUTINE TimerRoutine, | |
| 7585 IN PVOID Context); | |
| 7586 | |
| 7587 NTKERNELAPI | |
| 7588 VOID | |
| 7589 NTAPI | |
| 7590 IoInvalidateDeviceRelations( | |
| 7591 IN PDEVICE_OBJECT DeviceObject, | |
| 7592 IN DEVICE_RELATION_TYPE Type); | |
| 7593 | |
| 7594 NTKERNELAPI | |
| 7595 VOID | |
| 7596 NTAPI | |
| 7597 IoInvalidateDeviceState( | |
| 7598 IN PDEVICE_OBJECT PhysicalDeviceObject); | |
| 7599 | |
| 7600 NTKERNELAPI | |
| 7601 BOOLEAN | |
| 7602 NTAPI | |
| 7603 IoIs32bitProcess( | |
| 7604 IN PIRP Irp OPTIONAL); | |
| 7605 | |
| 7606 /* | |
| 7607 * BOOLEAN | |
| 7608 * IoIsErrorUserInduced( | |
| 7609 * IN NTSTATUS Status); | |
| 7610 */ | |
| 7611 #define IoIsErrorUserInduced(Status) \ | |
| 7612 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \ | |
| 7613 ((Status) == STATUS_IO_TIMEOUT) || \ | |
| 7614 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \ | |
| 7615 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \ | |
| 7616 ((Status) == STATUS_VERIFY_REQUIRED) || \ | |
| 7617 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \ | |
| 7618 ((Status) == STATUS_WRONG_VOLUME))) | |
| 7619 | |
| 7620 NTKERNELAPI | |
| 7621 BOOLEAN | |
| 7622 NTAPI | |
| 7623 IoIsWdmVersionAvailable( | |
| 7624 IN UCHAR MajorVersion, | |
| 7625 IN UCHAR MinorVersion); | |
| 7626 | |
| 7627 NTKERNELAPI | |
| 7628 PIRP | |
| 7629 NTAPI | |
| 7630 IoMakeAssociatedIrp( | |
| 7631 IN PIRP Irp, | |
| 7632 IN CCHAR StackSize); | |
| 7633 | |
| 7634 /* | |
| 7635 * VOID | |
| 7636 * IoMarkIrpPending( | |
| 7637 * IN OUT PIRP Irp) | |
| 7638 */ | |
| 7639 #define IoMarkIrpPending(_Irp) \ | |
| 7640 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED) | |
| 7641 | |
| 7642 NTKERNELAPI | |
| 7643 NTSTATUS | |
| 7644 NTAPI | |
| 7645 IoOpenDeviceInterfaceRegistryKey( | |
| 7646 IN PUNICODE_STRING SymbolicLinkName, | |
| 7647 IN ACCESS_MASK DesiredAccess, | |
| 7648 OUT PHANDLE DeviceInterfaceKey); | |
| 7649 | |
| 7650 #define PLUGPLAY_REGKEY_DEVICE 1 | |
| 7651 #define PLUGPLAY_REGKEY_DRIVER 2 | |
| 7652 #define PLUGPLAY_REGKEY_CURRENT_HWPROFILE 4 | |
| 7653 | |
| 7654 NTKERNELAPI | |
| 7655 NTSTATUS | |
| 7656 NTAPI | |
| 7657 IoOpenDeviceRegistryKey( | |
| 7658 IN PDEVICE_OBJECT DeviceObject, | |
| 7659 IN ULONG DevInstKeyType, | |
| 7660 IN ACCESS_MASK DesiredAccess, | |
| 7661 OUT PHANDLE DevInstRegKey); | |
| 7662 | |
| 7663 NTKERNELAPI | |
| 7664 NTSTATUS | |
| 7665 NTAPI | |
| 7666 IoQueryDeviceDescription( | |
| 7667 IN PINTERFACE_TYPE BusType OPTIONAL, | |
| 7668 IN PULONG BusNumber OPTIONAL, | |
| 7669 IN PCONFIGURATION_TYPE ControllerType OPTIONAL, | |
| 7670 IN PULONG ControllerNumber OPTIONAL, | |
| 7671 IN PCONFIGURATION_TYPE PeripheralType OPTIONAL, | |
| 7672 IN PULONG PeripheralNumber OPTIONAL, | |
| 7673 IN PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, | |
| 7674 IN PVOID Context); | |
| 7675 | |
| 7676 NTKERNELAPI | |
| 7677 VOID | |
| 7678 NTAPI | |
| 7679 IoQueueWorkItem( | |
| 7680 IN PIO_WORKITEM pIOWorkItem, | |
| 7681 IN PIO_WORKITEM_ROUTINE Routine, | |
| 7682 IN WORK_QUEUE_TYPE QueueType, | |
| 7683 IN PVOID Context); | |
| 7684 | |
| 7685 NTKERNELAPI | |
| 7686 VOID | |
| 7687 NTAPI | |
| 7688 IoRaiseHardError( | |
| 7689 IN PIRP Irp, | |
| 7690 IN PVPB Vpb OPTIONAL, | |
| 7691 IN PDEVICE_OBJECT RealDeviceObject); | |
| 7692 | |
| 7693 NTKERNELAPI | |
| 7694 BOOLEAN | |
| 7695 NTAPI | |
| 7696 IoRaiseInformationalHardError( | |
| 7697 IN NTSTATUS ErrorStatus, | |
| 7698 IN PUNICODE_STRING String OPTIONAL, | |
| 7699 IN PKTHREAD Thread OPTIONAL); | |
| 7700 | |
| 7701 NTKERNELAPI | |
| 7702 NTSTATUS | |
| 7703 NTAPI | |
| 7704 IoReadDiskSignature( | |
| 7705 IN PDEVICE_OBJECT DeviceObject, | |
| 7706 IN ULONG BytesPerSector, | |
| 7707 OUT PDISK_SIGNATURE Signature); | |
| 7708 | |
| 7709 NTKERNELAPI | |
| 7710 NTSTATUS | |
| 7711 FASTCALL | |
| 7712 IoReadPartitionTable( | |
| 7713 IN PDEVICE_OBJECT DeviceObject, | |
| 7714 IN ULONG SectorSize, | |
| 7715 IN BOOLEAN ReturnRecognizedPartitions, | |
| 7716 OUT struct _DRIVE_LAYOUT_INFORMATION **PartitionBuffer); | |
| 7717 | |
| 7718 NTKERNELAPI | |
| 7719 NTSTATUS | |
| 7720 NTAPI | |
| 7721 IoReadPartitionTableEx( | |
| 7722 IN PDEVICE_OBJECT DeviceObject, | |
| 7723 IN struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); | |
| 7724 | |
| 7725 NTKERNELAPI | |
| 7726 VOID | |
| 7727 NTAPI | |
| 7728 IoRegisterBootDriverReinitialization( | |
| 7729 IN PDRIVER_OBJECT DriverObject, | |
| 7730 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, | |
| 7731 IN PVOID Context); | |
| 7732 | |
| 7733 NTKERNELAPI | |
| 7734 VOID | |
| 7735 NTAPI | |
| 7736 IoRegisterBootDriverReinitialization( | |
| 7737 IN PDRIVER_OBJECT DriverObject, | |
| 7738 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, | |
| 7739 IN PVOID Context); | |
| 7740 | |
| 7741 NTKERNELAPI | |
| 7742 NTSTATUS | |
| 7743 NTAPI | |
| 7744 IoRegisterDeviceInterface( | |
| 7745 IN PDEVICE_OBJECT PhysicalDeviceObject, | |
| 7746 IN CONST GUID *InterfaceClassGuid, | |
| 7747 IN PUNICODE_STRING ReferenceString OPTIONAL, | |
| 7748 OUT PUNICODE_STRING SymbolicLinkName); | |
| 7749 | |
| 7750 NTKERNELAPI | |
| 7751 VOID | |
| 7752 NTAPI | |
| 7753 IoRegisterDriverReinitialization( | |
| 7754 IN PDRIVER_OBJECT DriverObject, | |
| 7755 IN PDRIVER_REINITIALIZE DriverReinitializationRoutine, | |
| 7756 IN PVOID Context); | |
| 7757 | |
| 7758 NTKERNELAPI | |
| 7759 NTSTATUS | |
| 7760 NTAPI | |
| 7761 IoRegisterPlugPlayNotification( | |
| 7762 IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory, | |
| 7763 IN ULONG EventCategoryFlags, | |
| 7764 IN PVOID EventCategoryData OPTIONAL, | |
| 7765 IN PDRIVER_OBJECT DriverObject, | |
| 7766 IN PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, | |
| 7767 IN PVOID Context, | |
| 7768 OUT PVOID *NotificationEntry); | |
| 7769 | |
| 7770 NTKERNELAPI | |
| 7771 NTSTATUS | |
| 7772 NTAPI | |
| 7773 IoRegisterShutdownNotification( | |
| 7774 IN PDEVICE_OBJECT DeviceObject); | |
| 7775 | |
| 7776 NTKERNELAPI | |
| 7777 VOID | |
| 7778 NTAPI | |
| 7779 IoReleaseCancelSpinLock( | |
| 7780 IN KIRQL Irql); | |
| 7781 | |
| 7782 NTKERNELAPI | |
| 7783 VOID | |
| 7784 NTAPI | |
| 7785 IoReleaseRemoveLockAndWaitEx( | |
| 7786 IN PIO_REMOVE_LOCK RemoveLock, | |
| 7787 IN PVOID Tag, | |
| 7788 IN ULONG RemlockSize); | |
| 7789 | |
| 7790 NTKERNELAPI | |
| 7791 VOID | |
| 7792 NTAPI | |
| 7793 IoReleaseRemoveLockEx( | |
| 7794 IN PIO_REMOVE_LOCK RemoveLock, | |
| 7795 IN PVOID Tag, | |
| 7796 IN ULONG RemlockSize); | |
| 7797 | |
| 7798 /* | |
| 7799 * VOID | |
| 7800 * IoReleaseRemoveLock( | |
| 7801 * IN PIO_REMOVE_LOCK RemoveLock, | |
| 7802 * IN PVOID Tag) | |
| 7803 */ | |
| 7804 #define IoReleaseRemoveLock(_RemoveLock, \ | |
| 7805 _Tag) \ | |
| 7806 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) | |
| 7807 | |
| 7808 /* | |
| 7809 * VOID | |
| 7810 * IoReleaseRemoveLockAndWait( | |
| 7811 * IN PIO_REMOVE_LOCK RemoveLock, | |
| 7812 * IN PVOID Tag) | |
| 7813 */ | |
| 7814 #define IoReleaseRemoveLockAndWait(_RemoveLock, \ | |
| 7815 _Tag) \ | |
| 7816 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) | |
| 7817 | |
| 7818 NTKERNELAPI | |
| 7819 VOID | |
| 7820 NTAPI | |
| 7821 IoRemoveShareAccess( | |
| 7822 IN PFILE_OBJECT FileObject, | |
| 7823 IN OUT PSHARE_ACCESS ShareAccess); | |
| 7824 | |
| 7825 NTKERNELAPI | |
| 7826 NTSTATUS | |
| 7827 NTAPI | |
| 7828 IoReportDetectedDevice( | |
| 7829 IN PDRIVER_OBJECT DriverObject, | |
| 7830 IN INTERFACE_TYPE LegacyBusType, | |
| 7831 IN ULONG BusNumber, | |
| 7832 IN ULONG SlotNumber, | |
| 7833 IN PCM_RESOURCE_LIST ResourceList, | |
| 7834 IN PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements OPTIONAL, | |
| 7835 IN BOOLEAN ResourceAssigned, | |
| 7836 IN OUT PDEVICE_OBJECT *DeviceObject); | |
| 7837 | |
| 7838 NTKERNELAPI | |
| 7839 NTSTATUS | |
| 7840 NTAPI | |
| 7841 IoReportResourceForDetection( | |
| 7842 IN PDRIVER_OBJECT DriverObject, | |
| 7843 IN PCM_RESOURCE_LIST DriverList OPTIONAL, | |
| 7844 IN ULONG DriverListSize OPTIONAL, | |
| 7845 IN PDEVICE_OBJECT DeviceObject OPTIONAL, | |
| 7846 IN PCM_RESOURCE_LIST DeviceList OPTIONAL, | |
| 7847 IN ULONG DeviceListSize OPTIONAL, | |
| 7848 OUT PBOOLEAN ConflictDetected); | |
| 7849 | |
| 7850 NTKERNELAPI | |
| 7851 NTSTATUS | |
| 7852 NTAPI | |
| 7853 IoReportResourceUsage( | |
| 7854 IN PUNICODE_STRING DriverClassName OPTIONAL, | |
| 7855 IN PDRIVER_OBJECT DriverObject, | |
| 7856 IN PCM_RESOURCE_LIST DriverList OPTIONAL, | |
| 7857 IN ULONG DriverListSize OPTIONAL, | |
| 7858 IN PDEVICE_OBJECT DeviceObject, | |
| 7859 IN PCM_RESOURCE_LIST DeviceList OPTIONAL, | |
| 7860 IN ULONG DeviceListSize OPTIONAL, | |
| 7861 IN BOOLEAN OverrideConflict, | |
| 7862 OUT PBOOLEAN ConflictDetected); | |
| 7863 | |
| 7864 NTKERNELAPI | |
| 7865 NTSTATUS | |
| 7866 NTAPI | |
| 7867 IoReportTargetDeviceChange( | |
| 7868 IN PDEVICE_OBJECT PhysicalDeviceObject, | |
| 7869 IN PVOID NotificationStructure); | |
| 7870 | |
| 7871 NTKERNELAPI | |
| 7872 NTSTATUS | |
| 7873 NTAPI | |
| 7874 IoReportTargetDeviceChangeAsynchronous( | |
| 7875 IN PDEVICE_OBJECT PhysicalDeviceObject, | |
| 7876 IN PVOID NotificationStructure, | |
| 7877 IN PDEVICE_CHANGE_COMPLETE_CALLBACK Callback OPTIONAL, | |
| 7878 IN PVOID Context OPTIONAL); | |
| 7879 | |
| 7880 NTKERNELAPI | |
| 7881 VOID | |
| 7882 NTAPI | |
| 7883 IoRequestDeviceEject( | |
| 7884 IN PDEVICE_OBJECT PhysicalDeviceObject); | |
| 7885 | |
| 7886 /* | |
| 7887 * VOID | |
| 7888 * IoRequestDpc( | |
| 7889 * IN PDEVICE_OBJECT DeviceObject, | |
| 7890 * IN PIRP Irp, | |
| 7891 * IN PVOID Context); | |
| 7892 */ | |
| 7893 #define IoRequestDpc(DeviceObject, Irp, Context)( \ | |
| 7894 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context))) | |
| 7895 | |
| 7896 NTKERNELAPI | |
| 7897 VOID | |
| 7898 NTAPI | |
| 7899 IoReuseIrp( | |
| 7900 IN OUT PIRP Irp, | |
| 7901 IN NTSTATUS Status); | |
| 7902 | |
| 7903 /* | |
| 7904 * PDRIVER_CANCEL | |
| 7905 * IoSetCancelRoutine( | |
| 7906 * IN PIRP Irp, | |
| 7907 * IN PDRIVER_CANCEL CancelRoutine) | |
| 7908 */ | |
| 7909 #define IoSetCancelRoutine(_Irp, \ | |
| 7910 _CancelRoutine) \ | |
| 7911 ((PDRIVER_CANCEL) InterlockedExchangePointer( \ | |
| 7912 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine))) | |
| 7913 | |
| 7914 /* | |
| 7915 * VOID | |
| 7916 * IoSetCompletionRoutine( | |
| 7917 * IN PIRP Irp, | |
| 7918 * IN PIO_COMPLETION_ROUTINE CompletionRoutine, | |
| 7919 * IN PVOID Context, | |
| 7920 * IN BOOLEAN InvokeOnSuccess, | |
| 7921 * IN BOOLEAN InvokeOnError, | |
| 7922 * IN BOOLEAN InvokeOnCancel) | |
| 7923 */ | |
| 7924 #define IoSetCompletionRoutine(_Irp, \ | |
| 7925 _CompletionRoutine, \ | |
| 7926 _Context, \ | |
| 7927 _InvokeOnSuccess, \ | |
| 7928 _InvokeOnError, \ | |
| 7929 _InvokeOnCancel) \ | |
| 7930 { \ | |
| 7931 PIO_STACK_LOCATION _IrpSp; \ | |
| 7932 ASSERT((_InvokeOnSuccess) || (_InvokeOnError) || (_InvokeOnCancel) ? \ | |
| 7933 (_CompletionRoutine) != NULL : TRUE); \ | |
| 7934 _IrpSp = IoGetNextIrpStackLocation(_Irp); \ | |
| 7935 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \ | |
| 7936 _IrpSp->Context = (_Context); \ | |
| 7937 _IrpSp->Control = 0; \ | |
| 7938 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \ | |
| 7939 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \ | |
| 7940 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \ | |
| 7941 } | |
| 7942 | |
| 7943 NTKERNELAPI | |
| 7944 NTSTATUS | |
| 7945 NTAPI | |
| 7946 IoSetCompletionRoutineEx( | |
| 7947 IN PDEVICE_OBJECT DeviceObject, | |
| 7948 IN PIRP Irp, | |
| 7949 IN PIO_COMPLETION_ROUTINE CompletionRoutine, | |
| 7950 IN PVOID Context, | |
| 7951 IN BOOLEAN InvokeOnSuccess, | |
| 7952 IN BOOLEAN InvokeOnError, | |
| 7953 IN BOOLEAN InvokeOnCancel); | |
| 7954 | |
| 7955 NTKERNELAPI | |
| 7956 NTSTATUS | |
| 7957 NTAPI | |
| 7958 IoSetDeviceInterfaceState( | |
| 7959 IN PUNICODE_STRING SymbolicLinkName, | |
| 7960 IN BOOLEAN Enable); | |
| 7961 | |
| 7962 NTKERNELAPI | |
| 7963 VOID | |
| 7964 NTAPI | |
| 7965 IoSetHardErrorOrVerifyDevice( | |
| 7966 IN PIRP Irp, | |
| 7967 IN PDEVICE_OBJECT DeviceObject); | |
| 7968 | |
| 7969 /* | |
| 7970 * VOID | |
| 7971 * IoSetNextIrpStackLocation( | |
| 7972 * IN OUT PIRP Irp) | |
| 7973 */ | |
| 7974 #define IoSetNextIrpStackLocation(_Irp) \ | |
| 7975 { \ | |
| 7976 (_Irp)->CurrentLocation--; \ | |
| 7977 (_Irp)->Tail.Overlay.CurrentStackLocation--; \ | |
| 7978 } | |
| 7979 | |
| 7980 NTKERNELAPI | |
| 7981 NTSTATUS | |
| 7982 FASTCALL | |
| 7983 IoSetPartitionInformation( | |
| 7984 IN PDEVICE_OBJECT DeviceObject, | |
| 7985 IN ULONG SectorSize, | |
| 7986 IN ULONG PartitionNumber, | |
| 7987 IN ULONG PartitionType); | |
| 7988 | |
| 7989 NTKERNELAPI | |
| 7990 NTSTATUS | |
| 7991 NTAPI | |
| 7992 IoSetPartitionInformationEx( | |
| 7993 IN PDEVICE_OBJECT DeviceObject, | |
| 7994 IN ULONG PartitionNumber, | |
| 7995 IN struct _SET_PARTITION_INFORMATION_EX *PartitionInfo); | |
| 7996 | |
| 7997 NTKERNELAPI | |
| 7998 VOID | |
| 7999 NTAPI | |
| 8000 IoSetShareAccess( | |
| 8001 IN ACCESS_MASK DesiredAccess, | |
| 8002 IN ULONG DesiredShareAccess, | |
| 8003 IN OUT PFILE_OBJECT FileObject, | |
| 8004 OUT PSHARE_ACCESS ShareAccess); | |
| 8005 | |
| 8006 NTKERNELAPI | |
| 8007 VOID | |
| 8008 NTAPI | |
| 8009 IoSetStartIoAttributes( | |
| 8010 IN PDEVICE_OBJECT DeviceObject, | |
| 8011 IN BOOLEAN DeferredStartIo, | |
| 8012 IN BOOLEAN NonCancelable); | |
| 8013 | |
| 8014 NTKERNELAPI | |
| 8015 NTSTATUS | |
| 8016 NTAPI | |
| 8017 IoSetSystemPartition( | |
| 8018 IN PUNICODE_STRING VolumeNameString); | |
| 8019 | |
| 8020 NTKERNELAPI | |
| 8021 BOOLEAN | |
| 8022 NTAPI | |
| 8023 IoSetThreadHardErrorMode( | |
| 8024 IN BOOLEAN EnableHardErrors); | |
| 8025 | |
| 8026 /* | |
| 8027 * USHORT | |
| 8028 * IoSizeOfIrp( | |
| 8029 * IN CCHAR StackSize) | |
| 8030 */ | |
| 8031 #define IoSizeOfIrp(_StackSize) \ | |
| 8032 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION))))) | |
| 8033 | |
| 8034 /* | |
| 8035 * VOID | |
| 8036 * IoSkipCurrentIrpStackLocation( | |
| 8037 * IN PIRP Irp) | |
| 8038 */ | |
| 8039 #define IoSkipCurrentIrpStackLocation(_Irp) \ | |
| 8040 { \ | |
| 8041 (_Irp)->CurrentLocation++; \ | |
| 8042 (_Irp)->Tail.Overlay.CurrentStackLocation++; \ | |
| 8043 } | |
| 8044 | |
| 8045 NTKERNELAPI | |
| 8046 VOID | |
| 8047 NTAPI | |
| 8048 IoStartNextPacket( | |
| 8049 IN PDEVICE_OBJECT DeviceObject, | |
| 8050 IN BOOLEAN Cancelable); | |
| 8051 | |
| 8052 NTKERNELAPI | |
| 8053 VOID | |
| 8054 NTAPI | |
| 8055 IoStartNextPacketByKey( | |
| 8056 IN PDEVICE_OBJECT DeviceObject, | |
| 8057 IN BOOLEAN Cancelable, | |
| 8058 IN ULONG Key); | |
| 8059 | |
| 8060 NTKERNELAPI | |
| 8061 VOID | |
| 8062 NTAPI | |
| 8063 IoStartPacket( | |
| 8064 IN PDEVICE_OBJECT DeviceObject, | |
| 8065 IN PIRP Irp, | |
| 8066 IN PULONG Key OPTIONAL, | |
| 8067 IN PDRIVER_CANCEL CancelFunction OPTIONAL); | |
| 8068 | |
| 8069 NTKERNELAPI | |
| 8070 VOID | |
| 8071 NTAPI | |
| 8072 IoStartTimer( | |
| 8073 IN PDEVICE_OBJECT DeviceObject); | |
| 8074 | |
| 8075 NTKERNELAPI | |
| 8076 VOID | |
| 8077 NTAPI | |
| 8078 IoStopTimer( | |
| 8079 IN PDEVICE_OBJECT DeviceObject); | |
| 8080 | |
| 8081 NTKERNELAPI | |
| 8082 NTSTATUS | |
| 8083 NTAPI | |
| 8084 IoUnregisterPlugPlayNotification( | |
| 8085 IN PVOID NotificationEntry); | |
| 8086 | |
| 8087 NTKERNELAPI | |
| 8088 VOID | |
| 8089 NTAPI | |
| 8090 IoUnregisterShutdownNotification( | |
| 8091 IN PDEVICE_OBJECT DeviceObject); | |
| 8092 | |
| 8093 NTKERNELAPI | |
| 8094 VOID | |
| 8095 NTAPI | |
| 8096 IoUpdateShareAccess( | |
| 8097 IN PFILE_OBJECT FileObject, | |
| 8098 IN OUT PSHARE_ACCESS ShareAccess); | |
| 8099 | |
| 8100 NTKERNELAPI | |
| 8101 NTSTATUS | |
| 8102 NTAPI | |
| 8103 IoVerifyPartitionTable( | |
| 8104 IN PDEVICE_OBJECT DeviceObject, | |
| 8105 IN BOOLEAN FixErrors); | |
| 8106 | |
| 8107 NTKERNELAPI | |
| 8108 NTSTATUS | |
| 8109 NTAPI | |
| 8110 IoVolumeDeviceToDosName( | |
| 8111 IN PVOID VolumeDeviceObject, | |
| 8112 OUT PUNICODE_STRING DosName); | |
| 8113 | |
| 8114 NTKERNELAPI | |
| 8115 NTSTATUS | |
| 8116 NTAPI | |
| 8117 IoWMIAllocateInstanceIds( | |
| 8118 IN GUID *Guid, | |
| 8119 IN ULONG InstanceCount, | |
| 8120 OUT ULONG *FirstInstanceId); | |
| 8121 | |
| 8122 NTKERNELAPI | |
| 8123 ULONG | |
| 8124 NTAPI | |
| 8125 IoWMIDeviceObjectToProviderId( | |
| 8126 IN PDEVICE_OBJECT DeviceObject); | |
| 8127 | |
| 8128 NTKERNELAPI | |
| 8129 NTSTATUS | |
| 8130 NTAPI | |
| 8131 IoWMIDeviceObjectToInstanceName( | |
| 8132 IN PVOID DataBlockObject, | |
| 8133 IN PDEVICE_OBJECT DeviceObject, | |
| 8134 OUT PUNICODE_STRING InstanceName); | |
| 8135 | |
| 8136 NTKERNELAPI | |
| 8137 NTSTATUS | |
| 8138 NTAPI | |
| 8139 IoWMIExecuteMethod( | |
| 8140 IN PVOID DataBlockObject, | |
| 8141 IN PUNICODE_STRING InstanceName, | |
| 8142 IN ULONG MethodId, | |
| 8143 IN ULONG InBufferSize, | |
| 8144 IN OUT PULONG OutBufferSize, | |
| 8145 IN OUT PUCHAR InOutBuffer); | |
| 8146 | |
| 8147 NTKERNELAPI | |
| 8148 NTSTATUS | |
| 8149 NTAPI | |
| 8150 IoWMIHandleToInstanceName( | |
| 8151 IN PVOID DataBlockObject, | |
| 8152 IN HANDLE FileHandle, | |
| 8153 OUT PUNICODE_STRING InstanceName); | |
| 8154 | |
| 8155 NTKERNELAPI | |
| 8156 NTSTATUS | |
| 8157 NTAPI | |
| 8158 IoWMIOpenBlock( | |
| 8159 IN GUID *DataBlockGuid, | |
| 8160 IN ULONG DesiredAccess, | |
| 8161 OUT PVOID *DataBlockObject); | |
| 8162 | |
| 8163 NTKERNELAPI | |
| 8164 NTSTATUS | |
| 8165 NTAPI | |
| 8166 IoWMIQueryAllData( | |
| 8167 IN PVOID DataBlockObject, | |
| 8168 IN OUT ULONG *InOutBufferSize, | |
| 8169 OUT PVOID OutBuffer); | |
| 8170 | |
| 8171 NTKERNELAPI | |
| 8172 NTSTATUS | |
| 8173 NTAPI | |
| 8174 IoWMIQueryAllDataMultiple( | |
| 8175 IN PVOID *DataBlockObjectList, | |
| 8176 IN ULONG ObjectCount, | |
| 8177 IN OUT ULONG *InOutBufferSize, | |
| 8178 OUT PVOID OutBuffer); | |
| 8179 | |
| 8180 NTKERNELAPI | |
| 8181 NTSTATUS | |
| 8182 NTAPI | |
| 8183 IoWMIQuerySingleInstance( | |
| 8184 IN PVOID DataBlockObject, | |
| 8185 IN PUNICODE_STRING InstanceName, | |
| 8186 IN OUT ULONG *InOutBufferSize, | |
| 8187 OUT PVOID OutBuffer); | |
| 8188 | |
| 8189 NTKERNELAPI | |
| 8190 NTSTATUS | |
| 8191 NTAPI | |
| 8192 IoWMIQuerySingleInstanceMultiple( | |
| 8193 IN PVOID *DataBlockObjectList, | |
| 8194 IN PUNICODE_STRING InstanceNames, | |
| 8195 IN ULONG ObjectCount, | |
| 8196 IN OUT ULONG *InOutBufferSize, | |
| 8197 OUT PVOID OutBuffer); | |
| 8198 | |
| 8199 NTKERNELAPI | |
| 8200 NTSTATUS | |
| 8201 NTAPI | |
| 8202 IoWMIRegistrationControl( | |
| 8203 IN PDEVICE_OBJECT DeviceObject, | |
| 8204 IN ULONG Action); | |
| 8205 | |
| 8206 NTKERNELAPI | |
| 8207 NTSTATUS | |
| 8208 NTAPI | |
| 8209 IoWMISetNotificationCallback( | |
| 8210 IN PVOID Object, | |
| 8211 IN WMI_NOTIFICATION_CALLBACK Callback, | |
| 8212 IN PVOID Context); | |
| 8213 | |
| 8214 NTKERNELAPI | |
| 8215 NTSTATUS | |
| 8216 NTAPI | |
| 8217 IoWMISetSingleInstance( | |
| 8218 IN PVOID DataBlockObject, | |
| 8219 IN PUNICODE_STRING InstanceName, | |
| 8220 IN ULONG Version, | |
| 8221 IN ULONG ValueBufferSize, | |
| 8222 IN PVOID ValueBuffer); | |
| 8223 | |
| 8224 NTKERNELAPI | |
| 8225 NTSTATUS | |
| 8226 NTAPI | |
| 8227 IoWMISetSingleItem( | |
| 8228 IN PVOID DataBlockObject, | |
| 8229 IN PUNICODE_STRING InstanceName, | |
| 8230 IN ULONG DataItemId, | |
| 8231 IN ULONG Version, | |
| 8232 IN ULONG ValueBufferSize, | |
| 8233 IN PVOID ValueBuffer); | |
| 8234 | |
| 8235 NTKERNELAPI | |
| 8236 NTSTATUS | |
| 8237 NTAPI | |
| 8238 IoWMISuggestInstanceName( | |
| 8239 IN PDEVICE_OBJECT PhysicalDeviceObject OPTIONAL, | |
| 8240 IN PUNICODE_STRING SymbolicLinkName OPTIONAL, | |
| 8241 IN BOOLEAN CombineNames, | |
| 8242 OUT PUNICODE_STRING SuggestedInstanceName); | |
| 8243 | |
| 8244 NTKERNELAPI | |
| 8245 NTSTATUS | |
| 8246 NTAPI | |
| 8247 IoWMIWriteEvent( | |
| 8248 IN PVOID WnodeEventItem); | |
| 8249 | |
| 8250 NTKERNELAPI | |
| 8251 VOID | |
| 8252 NTAPI | |
| 8253 IoWriteErrorLogEntry( | |
| 8254 IN PVOID ElEntry); | |
| 8255 | |
| 8256 NTKERNELAPI | |
| 8257 NTSTATUS | |
| 8258 FASTCALL | |
| 8259 IoWritePartitionTable( | |
| 8260 IN PDEVICE_OBJECT DeviceObject, | |
| 8261 IN ULONG SectorSize, | |
| 8262 IN ULONG SectorsPerTrack, | |
| 8263 IN ULONG NumberOfHeads, | |
| 8264 IN struct _DRIVE_LAYOUT_INFORMATION *PartitionBuffer); | |
| 8265 | |
| 8266 NTKERNELAPI | |
| 8267 NTSTATUS | |
| 8268 NTAPI | |
| 8269 IoWritePartitionTableEx( | |
| 8270 IN PDEVICE_OBJECT DeviceObject, | |
| 8271 IN struct _DRIVE_LAYOUT_INFORMATION_EX *PartitionBuffer); | |
| 8272 | |
| 8273 | |
| 8274 | |
| 8275 /** Kernel routines **/ | |
| 8276 | |
| 8277 #if defined (_M_AMD64) | |
| 8278 NTKERNELAPI | |
| 8279 VOID | |
| 8280 FASTCALL | |
| 8281 KeAcquireInStackQueuedSpinLock( | |
| 8282 IN PKSPIN_LOCK SpinLock, | |
| 8283 IN PKLOCK_QUEUE_HANDLE LockHandle); | |
| 8284 | |
| 8285 NTKERNELAPI | |
| 8286 VOID | |
| 8287 FASTCALL | |
| 8288 KeReleaseInStackQueuedSpinLock( | |
| 8289 IN PKLOCK_QUEUE_HANDLE LockHandle); | |
| 8290 #else | |
| 8291 NTHALAPI | |
| 8292 VOID | |
| 8293 FASTCALL | |
| 8294 KeAcquireInStackQueuedSpinLock( | |
| 8295 IN PKSPIN_LOCK SpinLock, | |
| 8296 IN PKLOCK_QUEUE_HANDLE LockHandle); | |
| 8297 | |
| 8298 NTHALAPI | |
| 8299 VOID | |
| 8300 FASTCALL | |
| 8301 KeReleaseInStackQueuedSpinLock( | |
| 8302 IN PKLOCK_QUEUE_HANDLE LockHandle); | |
| 8303 #endif | |
| 8304 | |
| 8305 NTKERNELAPI | |
| 8306 VOID | |
| 8307 FASTCALL | |
| 8308 KeAcquireInStackQueuedSpinLockAtDpcLevel( | |
| 8309 IN PKSPIN_LOCK SpinLock, | |
| 8310 IN PKLOCK_QUEUE_HANDLE LockHandle); | |
| 8311 | |
| 8312 NTKERNELAPI | |
| 8313 KIRQL | |
| 8314 NTAPI | |
| 8315 KeAcquireInterruptSpinLock( | |
| 8316 IN PKINTERRUPT Interrupt); | |
| 8317 | |
| 8318 NTKERNELAPI | |
| 8319 BOOLEAN | |
| 8320 NTAPI | |
| 8321 KeAreApcsDisabled( | |
| 8322 VOID); | |
| 8323 | |
| 8324 NTKERNELAPI | |
| 8325 DECLSPEC_NORETURN | |
| 8326 VOID | |
| 8327 NTAPI | |
| 8328 KeBugCheck( | |
| 8329 IN ULONG BugCheckCode); | |
| 8330 | |
| 8331 NTKERNELAPI | |
| 8332 DECLSPEC_NORETURN | |
| 8333 VOID | |
| 8334 NTAPI | |
| 8335 KeBugCheckEx( | |
| 8336 IN ULONG BugCheckCode, | |
| 8337 IN ULONG_PTR BugCheckParameter1, | |
| 8338 IN ULONG_PTR BugCheckParameter2, | |
| 8339 IN ULONG_PTR BugCheckParameter3, | |
| 8340 IN ULONG_PTR BugCheckParameter4); | |
| 8341 | |
| 8342 NTKERNELAPI | |
| 8343 BOOLEAN | |
| 8344 NTAPI | |
| 8345 KeCancelTimer( | |
| 8346 IN PKTIMER Timer); | |
| 8347 | |
| 8348 NTKERNELAPI | |
| 8349 VOID | |
| 8350 NTAPI | |
| 8351 KeClearEvent( | |
| 8352 IN PRKEVENT Event); | |
| 8353 | |
| 8354 NTKERNELAPI | |
| 8355 NTSTATUS | |
| 8356 NTAPI | |
| 8357 KeDelayExecutionThread( | |
| 8358 IN KPROCESSOR_MODE WaitMode, | |
| 8359 IN BOOLEAN Alertable, | |
| 8360 IN PLARGE_INTEGER Interval); | |
| 8361 | |
| 8362 NTKERNELAPI | |
| 8363 BOOLEAN | |
| 8364 NTAPI | |
| 8365 KeDeregisterBugCheckCallback( | |
| 8366 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord); | |
| 8367 | |
| 8368 NTKERNELAPI | |
| 8369 VOID | |
| 8370 NTAPI | |
| 8371 KeEnterCriticalRegion( | |
| 8372 VOID); | |
| 8373 | |
| 8374 /* | |
| 8375 * VOID | |
| 8376 * KeFlushIoBuffers( | |
| 8377 * IN PMDL Mdl, | |
| 8378 * IN BOOLEAN ReadOperation, | |
| 8379 * IN BOOLEAN DmaOperation) | |
| 8380 */ | |
| 8381 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) | |
| 8382 | |
| 8383 #define ExAcquireSpinLock(Lock, OldIrql) KeAcquireSpinLock((Lock), (OldIrql)) | |
| 8384 #define ExReleaseSpinLock(Lock, OldIrql) KeReleaseSpinLock((Lock), (OldIrql)) | |
| 8385 #define ExAcquireSpinLockAtDpcLevel(Lock) KeAcquireSpinLockAtDpcLevel(Lock) | |
| 8386 #define ExReleaseSpinLockFromDpcLevel(Lock) KeReleaseSpinLockFromDpcLevel(Lock) | |
| 8387 | |
| 8388 NTKERNELAPI | |
| 8389 VOID | |
| 8390 NTAPI | |
| 8391 KeFlushQueuedDpcs( | |
| 8392 VOID | |
| 8393 ); | |
| 8394 | |
| 8395 NTHALAPI | |
| 8396 VOID | |
| 8397 NTAPI | |
| 8398 KeFlushWriteBuffer(VOID); | |
| 8399 | |
| 8400 NTKERNELAPI | |
| 8401 ULONG | |
| 8402 NTAPI | |
| 8403 KeGetRecommendedSharedDataAlignment( | |
| 8404 VOID); | |
| 8405 | |
| 8406 NTKERNELAPI | |
| 8407 VOID | |
| 8408 NTAPI | |
| 8409 KeInitializeDeviceQueue( | |
| 8410 IN PKDEVICE_QUEUE DeviceQueue); | |
| 8411 | |
| 8412 NTKERNELAPI | |
| 8413 VOID | |
| 8414 NTAPI | |
| 8415 KeInitializeMutex( | |
| 8416 IN PRKMUTEX Mutex, | |
| 8417 IN ULONG Level); | |
| 8418 | |
| 8419 NTKERNELAPI | |
| 8420 VOID | |
| 8421 NTAPI | |
| 8422 KeInitializeSemaphore( | |
| 8423 IN PRKSEMAPHORE Semaphore, | |
| 8424 IN LONG Count, | |
| 8425 IN LONG Limit); | |
| 8426 | |
| 8427 NTKERNELAPI | |
| 8428 VOID | |
| 8429 NTAPI | |
| 8430 KeInitializeTimer( | |
| 8431 IN PKTIMER Timer); | |
| 8432 | |
| 8433 NTKERNELAPI | |
| 8434 VOID | |
| 8435 NTAPI | |
| 8436 KeInitializeTimerEx( | |
| 8437 IN PKTIMER Timer, | |
| 8438 IN TIMER_TYPE Type); | |
| 8439 | |
| 8440 NTKERNELAPI | |
| 8441 BOOLEAN | |
| 8442 NTAPI | |
| 8443 KeInsertByKeyDeviceQueue( | |
| 8444 IN PKDEVICE_QUEUE DeviceQueue, | |
| 8445 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, | |
| 8446 IN ULONG SortKey); | |
| 8447 | |
| 8448 NTKERNELAPI | |
| 8449 BOOLEAN | |
| 8450 NTAPI | |
| 8451 KeInsertDeviceQueue( | |
| 8452 IN PKDEVICE_QUEUE DeviceQueue, | |
| 8453 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); | |
| 8454 | |
| 8455 NTKERNELAPI | |
| 8456 BOOLEAN | |
| 8457 NTAPI | |
| 8458 KeInsertQueueDpc( | |
| 8459 IN PRKDPC Dpc, | |
| 8460 IN PVOID SystemArgument1, | |
| 8461 IN PVOID SystemArgument2); | |
| 8462 | |
| 8463 NTKERNELAPI | |
| 8464 VOID | |
| 8465 NTAPI | |
| 8466 KeLeaveCriticalRegion( | |
| 8467 VOID); | |
| 8468 | |
| 8469 #ifdef _X86_ | |
| 8470 | |
| 8471 static __inline | |
| 8472 VOID | |
| 8473 KeMemoryBarrier( | |
| 8474 VOID) | |
| 8475 { | |
| 8476 volatile LONG Barrier; | |
| 8477 #if defined(__GNUC__) | |
| 8478 __asm__ __volatile__ ("xchg %%eax, %0" : : "m" (Barrier) : "%eax"); | |
| 8479 #elif defined(_MSC_VER) | |
| 8480 __asm xchg [Barrier], eax | |
| 8481 #endif | |
| 8482 } | |
| 8483 | |
| 8484 #endif | |
| 8485 | |
| 8486 NTKERNELAPI | |
| 8487 LONG | |
| 8488 NTAPI | |
| 8489 KePulseEvent( | |
| 8490 IN PRKEVENT Event, | |
| 8491 IN KPRIORITY Increment, | |
| 8492 IN BOOLEAN Wait); | |
| 8493 | |
| 8494 NTKERNELAPI | |
| 8495 KAFFINITY | |
| 8496 NTAPI | |
| 8497 KeQueryActiveProcessors( | |
| 8498 VOID | |
| 8499 ); | |
| 8500 | |
| 8501 NTHALAPI | |
| 8502 LARGE_INTEGER | |
| 8503 NTAPI | |
| 8504 KeQueryPerformanceCounter( | |
| 8505 OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL); | |
| 8506 | |
| 8507 NTKERNELAPI | |
| 8508 KPRIORITY | |
| 8509 NTAPI | |
| 8510 KeQueryPriorityThread( | |
| 8511 IN PRKTHREAD Thread); | |
| 8512 | |
| 8513 NTKERNELAPI | |
| 8514 ULONG | |
| 8515 NTAPI | |
| 8516 KeQueryRuntimeThread( | |
| 8517 IN PKTHREAD Thread, | |
| 8518 OUT PULONG UserTime); | |
| 8519 | |
| 8520 #if !defined(_M_AMD64) | |
| 8521 NTKERNELAPI | |
| 8522 ULONGLONG | |
| 8523 NTAPI | |
| 8524 KeQueryInterruptTime( | |
| 8525 VOID); | |
| 8526 | |
| 8527 NTKERNELAPI | |
| 8528 VOID | |
| 8529 NTAPI | |
| 8530 KeQuerySystemTime( | |
| 8531 OUT PLARGE_INTEGER CurrentTime); | |
| 8532 | |
| 8533 NTKERNELAPI | |
| 8534 VOID | |
| 8535 NTAPI | |
| 8536 KeQueryTickCount( | |
| 8537 OUT PLARGE_INTEGER TickCount); | |
| 8538 #endif | |
| 8539 | |
| 8540 NTKERNELAPI | |
| 8541 ULONG | |
| 8542 NTAPI | |
| 8543 KeQueryTimeIncrement( | |
| 8544 VOID); | |
| 8545 | |
| 8546 NTKERNELAPI | |
| 8547 LONG | |
| 8548 NTAPI | |
| 8549 KeReadStateEvent( | |
| 8550 IN PRKEVENT Event); | |
| 8551 | |
| 8552 NTKERNELAPI | |
| 8553 LONG | |
| 8554 NTAPI | |
| 8555 KeReadStateMutex( | |
| 8556 IN PRKMUTEX Mutex); | |
| 8557 | |
| 8558 | |
| 8559 NTKERNELAPI | |
| 8560 LONG | |
| 8561 NTAPI | |
| 8562 KeReadStateSemaphore( | |
| 8563 IN PRKSEMAPHORE Semaphore); | |
| 8564 | |
| 8565 NTKERNELAPI | |
| 8566 BOOLEAN | |
| 8567 NTAPI | |
| 8568 KeReadStateTimer( | |
| 8569 IN PKTIMER Timer); | |
| 8570 | |
| 8571 NTKERNELAPI | |
| 8572 BOOLEAN | |
| 8573 NTAPI | |
| 8574 KeRegisterBugCheckCallback( | |
| 8575 IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord, | |
| 8576 IN PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, | |
| 8577 IN PVOID Buffer, | |
| 8578 IN ULONG Length, | |
| 8579 IN PUCHAR Component); | |
| 8580 | |
| 8581 NTKERNELAPI | |
| 8582 VOID | |
| 8583 FASTCALL | |
| 8584 KeReleaseInStackQueuedSpinLockFromDpcLevel( | |
| 8585 IN PKLOCK_QUEUE_HANDLE LockHandle); | |
| 8586 | |
| 8587 NTKERNELAPI | |
| 8588 VOID | |
| 8589 NTAPI | |
| 8590 KeReleaseInterruptSpinLock( | |
| 8591 IN PKINTERRUPT Interrupt, | |
| 8592 IN KIRQL OldIrql); | |
| 8593 | |
| 8594 NTKERNELAPI | |
| 8595 LONG | |
| 8596 NTAPI | |
| 8597 KeReleaseMutex( | |
| 8598 IN PRKMUTEX Mutex, | |
| 8599 IN BOOLEAN Wait); | |
| 8600 | |
| 8601 NTKERNELAPI | |
| 8602 LONG | |
| 8603 NTAPI | |
| 8604 KeReleaseSemaphore( | |
| 8605 IN PRKSEMAPHORE Semaphore, | |
| 8606 IN KPRIORITY Increment, | |
| 8607 IN LONG Adjustment, | |
| 8608 IN BOOLEAN Wait); | |
| 8609 | |
| 8610 NTKERNELAPI | |
| 8611 PKDEVICE_QUEUE_ENTRY | |
| 8612 NTAPI | |
| 8613 KeRemoveByKeyDeviceQueue( | |
| 8614 IN PKDEVICE_QUEUE DeviceQueue, | |
| 8615 IN ULONG SortKey); | |
| 8616 | |
| 8617 NTKERNELAPI | |
| 8618 PKDEVICE_QUEUE_ENTRY | |
| 8619 NTAPI | |
| 8620 KeRemoveDeviceQueue( | |
| 8621 IN PKDEVICE_QUEUE DeviceQueue); | |
| 8622 | |
| 8623 NTKERNELAPI | |
| 8624 BOOLEAN | |
| 8625 NTAPI | |
| 8626 KeRemoveEntryDeviceQueue( | |
| 8627 IN PKDEVICE_QUEUE DeviceQueue, | |
| 8628 IN PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); | |
| 8629 | |
| 8630 NTKERNELAPI | |
| 8631 BOOLEAN | |
| 8632 NTAPI | |
| 8633 KeRemoveQueueDpc( | |
| 8634 IN PRKDPC Dpc); | |
| 8635 | |
| 8636 NTKERNELAPI | |
| 8637 LONG | |
| 8638 NTAPI | |
| 8639 KeResetEvent( | |
| 8640 IN PRKEVENT Event); | |
| 8641 | |
| 8642 NTKERNELAPI | |
| 8643 NTSTATUS | |
| 8644 NTAPI | |
| 8645 KeRestoreFloatingPointState( | |
| 8646 IN PKFLOATING_SAVE FloatSave); | |
| 8647 | |
| 8648 NTKERNELAPI | |
| 8649 VOID | |
| 8650 NTAPI | |
| 8651 KeRevertToUserAffinityThread(VOID); | |
| 8652 | |
| 8653 NTKERNELAPI | |
| 8654 NTSTATUS | |
| 8655 NTAPI | |
| 8656 KeSaveFloatingPointState( | |
| 8657 OUT PKFLOATING_SAVE FloatSave); | |
| 8658 | |
| 8659 NTKERNELAPI | |
| 8660 LONG | |
| 8661 NTAPI | |
| 8662 KeSetBasePriorityThread( | |
| 8663 IN PRKTHREAD Thread, | |
| 8664 IN LONG Increment); | |
| 8665 | |
| 8666 NTKERNELAPI | |
| 8667 LONG | |
| 8668 NTAPI | |
| 8669 KeSetEvent( | |
| 8670 IN PRKEVENT Event, | |
| 8671 IN KPRIORITY Increment, | |
| 8672 IN BOOLEAN Wait); | |
| 8673 | |
| 8674 NTKERNELAPI | |
| 8675 VOID | |
| 8676 NTAPI | |
| 8677 KeSetImportanceDpc( | |
| 8678 IN PRKDPC Dpc, | |
| 8679 IN KDPC_IMPORTANCE Importance); | |
| 8680 | |
| 8681 NTKERNELAPI | |
| 8682 KPRIORITY | |
| 8683 NTAPI | |
| 8684 KeSetPriorityThread( | |
| 8685 IN PKTHREAD Thread, | |
| 8686 IN KPRIORITY Priority); | |
| 8687 | |
| 8688 NTKERNELAPI | |
| 8689 VOID | |
| 8690 NTAPI | |
| 8691 KeSetSystemAffinityThread( | |
| 8692 IN KAFFINITY Affinity); | |
| 8693 | |
| 8694 NTKERNELAPI | |
| 8695 VOID | |
| 8696 NTAPI | |
| 8697 KeSetTargetProcessorDpc( | |
| 8698 IN PRKDPC Dpc, | |
| 8699 IN CCHAR Number); | |
| 8700 | |
| 8701 NTKERNELAPI | |
| 8702 BOOLEAN | |
| 8703 NTAPI | |
| 8704 KeSetTimer( | |
| 8705 IN PKTIMER Timer, | |
| 8706 IN LARGE_INTEGER DueTime, | |
| 8707 IN PKDPC Dpc OPTIONAL); | |
| 8708 | |
| 8709 NTKERNELAPI | |
| 8710 BOOLEAN | |
| 8711 NTAPI | |
| 8712 KeSetTimerEx( | |
| 8713 IN PKTIMER Timer, | |
| 8714 IN LARGE_INTEGER DueTime, | |
| 8715 IN LONG Period OPTIONAL, | |
| 8716 IN PKDPC Dpc OPTIONAL); | |
| 8717 | |
| 8718 NTKERNELAPI | |
| 8719 VOID | |
| 8720 FASTCALL | |
| 8721 KeSetTimeUpdateNotifyRoutine( | |
| 8722 IN PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine); | |
| 8723 | |
| 8724 NTHALAPI | |
| 8725 VOID | |
| 8726 NTAPI | |
| 8727 KeStallExecutionProcessor( | |
| 8728 IN ULONG MicroSeconds); | |
| 8729 | |
| 8730 NTKERNELAPI | |
| 8731 BOOLEAN | |
| 8732 NTAPI | |
| 8733 KeSynchronizeExecution( | |
| 8734 IN PKINTERRUPT Interrupt, | |
| 8735 IN PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, | |
| 8736 IN PVOID SynchronizeContext); | |
| 8737 | |
| 8738 NTKERNELAPI | |
| 8739 NTSTATUS | |
| 8740 NTAPI | |
| 8741 KeWaitForMultipleObjects( | |
| 8742 IN ULONG Count, | |
| 8743 IN PVOID Object[], | |
| 8744 IN WAIT_TYPE WaitType, | |
| 8745 IN KWAIT_REASON WaitReason, | |
| 8746 IN KPROCESSOR_MODE WaitMode, | |
| 8747 IN BOOLEAN Alertable, | |
| 8748 IN PLARGE_INTEGER Timeout OPTIONAL, | |
| 8749 IN PKWAIT_BLOCK WaitBlockArray OPTIONAL); | |
| 8750 | |
| 8751 NTKERNELAPI | |
| 8752 NTSTATUS | |
| 8753 NTAPI | |
| 8754 KeWaitForMutexObject( | |
| 8755 IN PRKMUTEX Mutex, | |
| 8756 IN KWAIT_REASON WaitReason, | |
| 8757 IN KPROCESSOR_MODE WaitMode, | |
| 8758 IN BOOLEAN Alertable, | |
| 8759 IN PLARGE_INTEGER Timeout OPTIONAL); | |
| 8760 | |
| 8761 NTKERNELAPI | |
| 8762 NTSTATUS | |
| 8763 NTAPI | |
| 8764 KeWaitForSingleObject( | |
| 8765 IN PVOID Object, | |
| 8766 IN KWAIT_REASON WaitReason, | |
| 8767 IN KPROCESSOR_MODE WaitMode, | |
| 8768 IN BOOLEAN Alertable, | |
| 8769 IN PLARGE_INTEGER Timeout OPTIONAL); | |
| 8770 | |
| 8771 typedef | |
| 8772 ULONG_PTR | |
| 8773 (NTAPI *PKIPI_BROADCAST_WORKER)( | |
| 8774 IN ULONG_PTR Argument | |
| 8775 ); | |
| 8776 | |
| 8777 NTKERNELAPI | |
| 8778 ULONG_PTR | |
| 8779 NTAPI | |
| 8780 KeIpiGenericCall( | |
| 8781 IN PKIPI_BROADCAST_WORKER BroadcastFunction, | |
| 8782 IN ULONG_PTR Context | |
| 8783 ); | |
| 8784 | |
| 8785 #if defined(_X86_) | |
| 8786 | |
| 8787 NTHALAPI | |
| 8788 VOID | |
| 8789 FASTCALL | |
| 8790 KfLowerIrql( | |
| 8791 IN KIRQL NewIrql); | |
| 8792 | |
| 8793 NTHALAPI | |
| 8794 KIRQL | |
| 8795 FASTCALL | |
| 8796 KfRaiseIrql( | |
| 8797 IN KIRQL NewIrql); | |
| 8798 | |
| 8799 NTHALAPI | |
| 8800 KIRQL | |
| 8801 DDKAPI | |
| 8802 KeRaiseIrqlToDpcLevel( | |
| 8803 VOID); | |
| 8804 | |
| 8805 NTHALAPI | |
| 8806 KIRQL | |
| 8807 DDKAPI | |
| 8808 KeRaiseIrqlToSynchLevel( | |
| 8809 VOID); | |
| 8810 | |
| 8811 #define KeLowerIrql(a) KfLowerIrql(a) | |
| 8812 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) | |
| 8813 | |
| 8814 #elif defined(_M_AMD64) | |
| 8815 | |
| 8816 FORCEINLINE | |
| 8817 KIRQL | |
| 8818 KeGetCurrentIrql(VOID) | |
| 8819 { | |
| 8820 return (KIRQL)__readcr8(); | |
| 8821 } | |
| 8822 | |
| 8823 FORCEINLINE | |
| 8824 VOID | |
| 8825 KeLowerIrql(IN KIRQL NewIrql) | |
| 8826 { | |
| 8827 ASSERT(KeGetCurrentIrql() >= NewIrql); | |
| 8828 __writecr8(NewIrql); | |
| 8829 } | |
| 8830 | |
| 8831 FORCEINLINE | |
| 8832 KIRQL | |
| 8833 KfRaiseIrql(IN KIRQL NewIrql) | |
| 8834 { | |
| 8835 KIRQL OldIrql; | |
| 8836 | |
| 8837 OldIrql = __readcr8(); | |
| 8838 ASSERT(OldIrql <= NewIrql); | |
| 8839 __writecr8(NewIrql); | |
| 8840 return OldIrql; | |
| 8841 } | |
| 8842 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) | |
| 8843 | |
| 8844 FORCEINLINE | |
| 8845 KIRQL | |
| 8846 KeRaiseIrqlToDpcLevel(VOID) | |
| 8847 { | |
| 8848 return KfRaiseIrql(DISPATCH_LEVEL); | |
| 8849 } | |
| 8850 | |
| 8851 FORCEINLINE | |
| 8852 KIRQL | |
| 8853 KeRaiseIrqlToSynchLevel(VOID) | |
| 8854 { | |
| 8855 return KfRaiseIrql(12); // SYNCH_LEVEL = IPI_LEVEL - 2 | |
| 8856 } | |
| 8857 | |
| 8858 #elif defined(__PowerPC__) | |
| 8859 | |
| 8860 NTHALAPI | |
| 8861 VOID | |
| 8862 FASTCALL | |
| 8863 KfLowerIrql( | |
| 8864 IN KIRQL NewIrql); | |
| 8865 | |
| 8866 NTHALAPI | |
| 8867 KIRQL | |
| 8868 FASTCALL | |
| 8869 KfRaiseIrql( | |
| 8870 IN KIRQL NewIrql); | |
| 8871 | |
| 8872 NTHALAPI | |
| 8873 KIRQL | |
| 8874 DDKAPI | |
| 8875 KeRaiseIrqlToDpcLevel( | |
| 8876 VOID); | |
| 8877 | |
| 8878 NTHALAPI | |
| 8879 KIRQL | |
| 8880 DDKAPI | |
| 8881 KeRaiseIrqlToSynchLevel( | |
| 8882 VOID); | |
| 8883 | |
| 8884 #define KeLowerIrql(a) KfLowerIrql(a) | |
| 8885 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) | |
| 8886 | |
| 8887 #elif defined(_M_MIPS) | |
| 8888 | |
| 8889 #define KeLowerIrql(a) KfLowerIrql(a) | |
| 8890 #define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a) | |
| 8891 | |
| 8892 NTKERNELAPI | |
| 8893 VOID | |
| 8894 NTAPI | |
| 8895 KfLowerIrql( | |
| 8896 IN KIRQL NewIrql); | |
| 8897 | |
| 8898 NTKERNELAPI | |
| 8899 KIRQL | |
| 8900 NTAPI | |
| 8901 KfRaiseIrql( | |
| 8902 IN KIRQL NewIrql); | |
| 8903 | |
| 8904 NTKERNELAPI | |
| 8905 KIRQL | |
| 8906 NTAPI | |
| 8907 KeRaiseIrqlToDpcLevel( | |
| 8908 VOID); | |
| 8909 | |
| 8910 NTKERNELAPI | |
| 8911 KIRQL | |
| 8912 DDKAPI | |
| 8913 KeRaiseIrqlToSynchLevel( | |
| 8914 VOID); | |
| 8915 | |
| 8916 #elif defined(_M_ARM) | |
| 8917 | |
| 8918 #include <armddk.h> | |
| 8919 | |
| 8920 #else | |
| 8921 | |
| 8922 NTKERNELAPI | |
| 8923 VOID | |
| 8924 NTAPI | |
| 8925 KeLowerIrql( | |
| 8926 IN KIRQL NewIrql); | |
| 8927 | |
| 8928 NTKERNELAPI | |
| 8929 VOID | |
| 8930 NTAPI | |
| 8931 KeRaiseIrql( | |
| 8932 IN KIRQL NewIrql, | |
| 8933 OUT PKIRQL OldIrql); | |
| 8934 | |
| 8935 NTKERNELAPI | |
| 8936 KIRQL | |
| 8937 NTAPI | |
| 8938 KeRaiseIrqlToDpcLevel( | |
| 8939 VOID); | |
| 8940 | |
| 8941 NTKERNELAPI | |
| 8942 KIRQL | |
| 8943 DDKAPI | |
| 8944 KeRaiseIrqlToSynchLevel( | |
| 8945 VOID); | |
| 8946 | |
| 8947 #endif | |
| 8948 | |
| 8949 /** Memory manager routines **/ | |
| 8950 | |
| 8951 NTKERNELAPI | |
| 8952 NTSTATUS | |
| 8953 NTAPI | |
| 8954 MmAdvanceMdl( | |
| 8955 IN PMDL Mdl, | |
| 8956 IN ULONG NumberOfBytes); | |
| 8957 | |
| 8958 NTKERNELAPI | |
| 8959 PVOID | |
| 8960 NTAPI | |
| 8961 MmAllocateContiguousMemory( | |
| 8962 IN ULONG NumberOfBytes, | |
| 8963 IN PHYSICAL_ADDRESS HighestAcceptableAddress); | |
| 8964 | |
| 8965 NTKERNELAPI | |
| 8966 PVOID | |
| 8967 NTAPI | |
| 8968 MmAllocateContiguousMemorySpecifyCache( | |
| 8969 IN SIZE_T NumberOfBytes, | |
| 8970 IN PHYSICAL_ADDRESS LowestAcceptableAddress, | |
| 8971 IN PHYSICAL_ADDRESS HighestAcceptableAddress, | |
| 8972 IN PHYSICAL_ADDRESS BoundaryAddressMultiple OPTIONAL, | |
| 8973 IN MEMORY_CACHING_TYPE CacheType); | |
| 8974 | |
| 8975 NTKERNELAPI | |
| 8976 PVOID | |
| 8977 NTAPI | |
| 8978 MmAllocateMappingAddress( | |
| 8979 IN SIZE_T NumberOfBytes, | |
| 8980 IN ULONG PoolTag); | |
| 8981 | |
| 8982 NTKERNELAPI | |
| 8983 PVOID | |
| 8984 NTAPI | |
| 8985 MmAllocateNonCachedMemory( | |
| 8986 IN ULONG NumberOfBytes); | |
| 8987 | |
| 8988 NTKERNELAPI | |
| 8989 PMDL | |
| 8990 NTAPI | |
| 8991 MmAllocatePagesForMdl( | |
| 8992 IN PHYSICAL_ADDRESS LowAddress, | |
| 8993 IN PHYSICAL_ADDRESS HighAddress, | |
| 8994 IN PHYSICAL_ADDRESS SkipBytes, | |
| 8995 IN SIZE_T TotalBytes); | |
| 8996 | |
| 8997 #if (NTDDI_VERSION >= NTDDI_WS03SP1) | |
| 8998 NTKERNELAPI | |
| 8999 PMDL | |
| 9000 NTAPI | |
| 9001 MmAllocatePagesForMdlEx( | |
| 9002 IN PHYSICAL_ADDRESS LowAddress, | |
| 9003 IN PHYSICAL_ADDRESS HighAddress, | |
| 9004 IN PHYSICAL_ADDRESS SkipBytes, | |
| 9005 IN SIZE_T TotalBytes, | |
| 9006 IN MEMORY_CACHING_TYPE CacheType, | |
| 9007 IN ULONG Flags); | |
| 9008 #endif | |
| 9009 | |
| 9010 NTKERNELAPI | |
| 9011 VOID | |
| 9012 NTAPI | |
| 9013 MmBuildMdlForNonPagedPool( | |
| 9014 IN OUT PMDL MemoryDescriptorList); | |
| 9015 | |
| 9016 typedef enum _MMFLUSH_TYPE { | |
| 9017 MmFlushForDelete, | |
| 9018 MmFlushForWrite | |
| 9019 } MMFLUSH_TYPE; | |
| 9020 | |
| 9021 NTKERNELAPI | |
| 9022 BOOLEAN | |
| 9023 NTAPI | |
| 9024 MmFlushImageSection( | |
| 9025 IN PSECTION_OBJECT_POINTERS SectionObjectPointer, | |
| 9026 IN MMFLUSH_TYPE FlushType); | |
| 9027 | |
| 9028 NTKERNELAPI | |
| 9029 VOID | |
| 9030 NTAPI | |
| 9031 MmFreeContiguousMemory( | |
| 9032 IN PVOID BaseAddress); | |
| 9033 | |
| 9034 NTKERNELAPI | |
| 9035 VOID | |
| 9036 NTAPI | |
| 9037 MmFreeContiguousMemorySpecifyCache( | |
| 9038 IN PVOID BaseAddress, | |
| 9039 IN SIZE_T NumberOfBytes, | |
| 9040 IN MEMORY_CACHING_TYPE CacheType); | |
| 9041 | |
| 9042 NTKERNELAPI | |
| 9043 VOID | |
| 9044 NTAPI | |
| 9045 MmFreeMappingAddress( | |
| 9046 IN PVOID BaseAddress, | |
| 9047 IN ULONG PoolTag); | |
| 9048 | |
| 9049 NTKERNELAPI | |
| 9050 VOID | |
| 9051 NTAPI | |
| 9052 MmFreeNonCachedMemory( | |
| 9053 IN PVOID BaseAddress, | |
| 9054 IN SIZE_T NumberOfBytes); | |
| 9055 | |
| 9056 NTKERNELAPI | |
| 9057 VOID | |
| 9058 NTAPI | |
| 9059 MmFreePagesFromMdl( | |
| 9060 IN PMDL MemoryDescriptorList); | |
| 9061 | |
| 9062 /* | |
| 9063 * ULONG | |
| 9064 * MmGetMdlByteCount( | |
| 9065 * IN PMDL Mdl) | |
| 9066 */ | |
| 9067 #define MmGetMdlByteCount(_Mdl) \ | |
| 9068 ((_Mdl)->ByteCount) | |
| 9069 | |
| 9070 /* | |
| 9071 * ULONG | |
| 9072 * MmGetMdlByteOffset( | |
| 9073 * IN PMDL Mdl) | |
| 9074 */ | |
| 9075 #define MmGetMdlByteOffset(_Mdl) \ | |
| 9076 ((_Mdl)->ByteOffset) | |
| 9077 | |
| 9078 /* | |
| 9079 * PPFN_NUMBER | |
| 9080 * MmGetMdlPfnArray( | |
| 9081 * IN PMDL Mdl) | |
| 9082 */ | |
| 9083 #define MmGetMdlPfnArray(_Mdl) \ | |
| 9084 ((PPFN_NUMBER) ((_Mdl) + 1)) | |
| 9085 | |
| 9086 /* | |
| 9087 * PVOID | |
| 9088 * MmGetMdlVirtualAddress( | |
| 9089 * IN PMDL Mdl) | |
| 9090 */ | |
| 9091 #define MmGetMdlVirtualAddress(_Mdl) \ | |
| 9092 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset)) | |
| 9093 | |
| 9094 NTKERNELAPI | |
| 9095 PHYSICAL_ADDRESS | |
| 9096 NTAPI | |
| 9097 MmGetPhysicalAddress( | |
| 9098 IN PVOID BaseAddress); | |
| 9099 | |
| 9100 NTKERNELAPI | |
| 9101 PPHYSICAL_MEMORY_RANGE | |
| 9102 NTAPI | |
| 9103 MmGetPhysicalMemoryRanges( | |
| 9104 VOID); | |
| 9105 | |
| 9106 NTKERNELAPI | |
| 9107 PVOID | |
| 9108 NTAPI | |
| 9109 MmGetVirtualForPhysical( | |
| 9110 IN PHYSICAL_ADDRESS PhysicalAddress); | |
| 9111 | |
| 9112 NTKERNELAPI | |
| 9113 PVOID | |
| 9114 NTAPI | |
| 9115 MmMapLockedPagesSpecifyCache( | |
| 9116 IN PMDL MemoryDescriptorList, | |
| 9117 IN KPROCESSOR_MODE AccessMode, | |
| 9118 IN MEMORY_CACHING_TYPE CacheType, | |
| 9119 IN PVOID BaseAddress, | |
| 9120 IN ULONG BugCheckOnFailure, | |
| 9121 IN MM_PAGE_PRIORITY Priority); | |
| 9122 | |
| 9123 NTKERNELAPI | |
| 9124 PVOID | |
| 9125 NTAPI | |
| 9126 MmMapLockedPagesWithReservedMapping( | |
| 9127 IN PVOID MappingAddress, | |
| 9128 IN ULONG PoolTag, | |
| 9129 IN PMDL MemoryDescriptorList, | |
| 9130 IN MEMORY_CACHING_TYPE CacheType); | |
| 9131 | |
| 9132 NTKERNELAPI | |
| 9133 NTSTATUS | |
| 9134 NTAPI | |
| 9135 MmMapUserAddressesToPage( | |
| 9136 IN PVOID BaseAddress, | |
| 9137 IN SIZE_T NumberOfBytes, | |
| 9138 IN PVOID PageAddress); | |
| 9139 | |
| 9140 NTKERNELAPI | |
| 9141 PVOID | |
| 9142 NTAPI | |
| 9143 MmMapVideoDisplay( | |
| 9144 IN PHYSICAL_ADDRESS PhysicalAddress, | |
| 9145 IN SIZE_T NumberOfBytes, | |
| 9146 IN MEMORY_CACHING_TYPE CacheType); | |
| 9147 | |
| 9148 NTKERNELAPI | |
| 9149 NTSTATUS | |
| 9150 NTAPI | |
| 9151 MmMapViewInSessionSpace( | |
| 9152 IN PVOID Section, | |
| 9153 OUT PVOID *MappedBase, | |
| 9154 IN OUT PSIZE_T ViewSize); | |
| 9155 | |
| 9156 NTKERNELAPI | |
| 9157 NTSTATUS | |
| 9158 NTAPI | |
| 9159 MmMapViewInSystemSpace( | |
| 9160 IN PVOID Section, | |
| 9161 OUT PVOID *MappedBase, | |
| 9162 IN PSIZE_T ViewSize); | |
| 9163 | |
| 9164 NTKERNELAPI | |
| 9165 NTSTATUS | |
| 9166 NTAPI | |
| 9167 MmMarkPhysicalMemoryAsBad( | |
| 9168 IN PPHYSICAL_ADDRESS StartAddress, | |
| 9169 IN OUT PLARGE_INTEGER NumberOfBytes); | |
| 9170 | |
| 9171 NTKERNELAPI | |
| 9172 NTSTATUS | |
| 9173 NTAPI | |
| 9174 MmMarkPhysicalMemoryAsGood( | |
| 9175 IN PPHYSICAL_ADDRESS StartAddress, | |
| 9176 IN OUT PLARGE_INTEGER NumberOfBytes); | |
| 9177 | |
| 9178 NTKERNELAPI | |
| 9179 PVOID | |
| 9180 NTAPI | |
| 9181 MmGetSystemRoutineAddress( | |
| 9182 IN PUNICODE_STRING SystemRoutineName); | |
| 9183 | |
| 9184 /* | |
| 9185 * ULONG | |
| 9186 * ADDRESS_AND_SIZE_TO_SPAN_PAGES( | |
| 9187 * IN PVOID Va, | |
| 9188 * IN ULONG Size) | |
| 9189 */ | |
| 9190 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \ | |
| 9191 _Size) \ | |
| 9192 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \ | |
| 9193 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)) | |
| 9194 | |
| 9195 /* | |
| 9196 * VOID | |
| 9197 * MmInitializeMdl( | |
| 9198 * IN PMDL MemoryDescriptorList, | |
| 9199 * IN PVOID BaseVa, | |
| 9200 * IN SIZE_T Length) | |
| 9201 */ | |
| 9202 #define MmInitializeMdl(_MemoryDescriptorList, \ | |
| 9203 _BaseVa, \ | |
| 9204 _Length) \ | |
| 9205 { \ | |
| 9206 (_MemoryDescriptorList)->Next = (PMDL) NULL; \ | |
| 9207 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \ | |
| 9208 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \ | |
| 9209 (_MemoryDescriptorList)->MdlFlags = 0; \ | |
| 9210 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \ | |
| 9211 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \ | |
| 9212 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \ | |
| 9213 } | |
| 9214 | |
| 9215 NTKERNELAPI | |
| 9216 BOOLEAN | |
| 9217 NTAPI | |
| 9218 MmIsAddressValid( | |
| 9219 IN PVOID VirtualAddress); | |
| 9220 | |
| 9221 NTKERNELAPI | |
| 9222 LOGICAL | |
| 9223 NTAPI | |
| 9224 MmIsDriverVerifying( | |
| 9225 IN PDRIVER_OBJECT DriverObject); | |
| 9226 | |
| 9227 NTKERNELAPI | |
| 9228 BOOLEAN | |
| 9229 NTAPI | |
| 9230 MmIsThisAnNtAsSystem( | |
| 9231 VOID); | |
| 9232 | |
| 9233 NTKERNELAPI | |
| 9234 NTSTATUS | |
| 9235 NTAPI | |
| 9236 MmIsVerifierEnabled( | |
| 9237 OUT PULONG VerifierFlags); | |
| 9238 | |
| 9239 NTKERNELAPI | |
| 9240 PVOID | |
| 9241 NTAPI | |
| 9242 MmLockPagableDataSection( | |
| 9243 IN PVOID AddressWithinSection); | |
| 9244 | |
| 9245 NTKERNELAPI | |
| 9246 PVOID | |
| 9247 NTAPI | |
| 9248 MmLockPagableImageSection( | |
| 9249 IN PVOID AddressWithinSection); | |
| 9250 | |
| 9251 /* | |
| 9252 * PVOID | |
| 9253 * MmLockPagableCodeSection( | |
| 9254 * IN PVOID AddressWithinSection) | |
| 9255 */ | |
| 9256 #define MmLockPagableCodeSection(Address) MmLockPagableDataSection(Address) | |
| 9257 | |
| 9258 NTKERNELAPI | |
| 9259 VOID | |
| 9260 NTAPI | |
| 9261 MmLockPagableSectionByHandle( | |
| 9262 IN PVOID ImageSectionHandle); | |
| 9263 | |
| 9264 NTKERNELAPI | |
| 9265 PVOID | |
| 9266 NTAPI | |
| 9267 MmMapIoSpace( | |
| 9268 IN PHYSICAL_ADDRESS PhysicalAddress, | |
| 9269 IN ULONG NumberOfBytes, | |
| 9270 IN MEMORY_CACHING_TYPE CacheEnable); | |
| 9271 | |
| 9272 NTKERNELAPI | |
| 9273 PVOID | |
| 9274 NTAPI | |
| 9275 MmMapLockedPages( | |
| 9276 IN PMDL MemoryDescriptorList, | |
| 9277 IN KPROCESSOR_MODE AccessMode); | |
| 9278 | |
| 9279 NTKERNELAPI | |
| 9280 PVOID | |
| 9281 NTAPI | |
| 9282 MmLockPageableDataSection ( | |
| 9283 IN PVOID AddressWithinSection | |
| 9284 ); | |
| 9285 | |
| 9286 NTKERNELAPI | |
| 9287 VOID | |
| 9288 NTAPI | |
| 9289 MmUnlockPageableImageSection( | |
| 9290 IN PVOID ImageSectionHandle | |
| 9291 ); | |
| 9292 | |
| 9293 NTKERNELAPI | |
| 9294 PVOID | |
| 9295 NTAPI | |
| 9296 MmPageEntireDriver( | |
| 9297 IN PVOID AddressWithinSection); | |
| 9298 | |
| 9299 NTKERNELAPI | |
| 9300 VOID | |
| 9301 NTAPI | |
| 9302 MmProbeAndLockProcessPages( | |
| 9303 IN OUT PMDL MemoryDescriptorList, | |
| 9304 IN PEPROCESS Process, | |
| 9305 IN KPROCESSOR_MODE AccessMode, | |
| 9306 IN LOCK_OPERATION Operation); | |
| 9307 | |
| 9308 NTKERNELAPI | |
| 9309 NTSTATUS | |
| 9310 NTAPI | |
| 9311 MmProtectMdlSystemAddress( | |
| 9312 IN PMDL MemoryDescriptorList, | |
| 9313 IN ULONG NewProtect); | |
| 9314 | |
| 9315 NTKERNELAPI | |
| 9316 VOID | |
| 9317 NTAPI | |
| 9318 MmUnmapLockedPages( | |
| 9319 IN PVOID BaseAddress, | |
| 9320 IN PMDL MemoryDescriptorList); | |
| 9321 | |
| 9322 NTKERNELAPI | |
| 9323 NTSTATUS | |
| 9324 NTAPI | |
| 9325 MmUnmapViewInSessionSpace( | |
| 9326 IN PVOID MappedBase); | |
| 9327 | |
| 9328 NTKERNELAPI | |
| 9329 NTSTATUS | |
| 9330 NTAPI | |
| 9331 MmUnmapViewInSystemSpace( | |
| 9332 IN PVOID MappedBase); | |
| 9333 | |
| 9334 NTKERNELAPI | |
| 9335 VOID | |
| 9336 NTAPI | |
| 9337 MmUnsecureVirtualMemory( | |
| 9338 IN HANDLE SecureHandle); | |
| 9339 | |
| 9340 /* | |
| 9341 * VOID | |
| 9342 * MmPrepareMdlForReuse( | |
| 9343 * IN PMDL Mdl) | |
| 9344 */ | |
| 9345 #define MmPrepareMdlForReuse(_Mdl) \ | |
| 9346 { \ | |
| 9347 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \ | |
| 9348 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \ | |
| 9349 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \ | |
| 9350 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \ | |
| 9351 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \ | |
| 9352 } \ | |
| 9353 } | |
| 9354 | |
| 9355 #define MmGetProcedureAddress(Address) (Address) | |
| 9356 | |
| 9357 NTKERNELAPI | |
| 9358 VOID | |
| 9359 NTAPI | |
| 9360 MmProbeAndLockPages( | |
| 9361 IN OUT PMDL MemoryDescriptorList, | |
| 9362 IN KPROCESSOR_MODE AccessMode, | |
| 9363 IN LOCK_OPERATION Operation); | |
| 9364 | |
| 9365 NTKERNELAPI | |
| 9366 MM_SYSTEMSIZE | |
| 9367 NTAPI | |
| 9368 MmQuerySystemSize( | |
| 9369 VOID); | |
| 9370 | |
| 9371 NTKERNELAPI | |
| 9372 NTSTATUS | |
| 9373 NTAPI | |
| 9374 MmRemovePhysicalMemory( | |
| 9375 IN PPHYSICAL_ADDRESS StartAddress, | |
| 9376 IN OUT PLARGE_INTEGER NumberOfBytes); | |
| 9377 | |
| 9378 NTKERNELAPI | |
| 9379 VOID | |
| 9380 NTAPI | |
| 9381 MmResetDriverPaging( | |
| 9382 IN PVOID AddressWithinSection); | |
| 9383 | |
| 9384 NTKERNELAPI | |
| 9385 HANDLE | |
| 9386 NTAPI | |
| 9387 MmSecureVirtualMemory( | |
| 9388 IN PVOID Address, | |
| 9389 IN SIZE_T Size, | |
| 9390 IN ULONG ProbeMode); | |
| 9391 | |
| 9392 NTKERNELAPI | |
| 9393 SIZE_T | |
| 9394 NTAPI | |
| 9395 MmSizeOfMdl( | |
| 9396 IN PVOID Base, | |
| 9397 IN SIZE_T Length); | |
| 9398 | |
| 9399 NTKERNELAPI | |
| 9400 VOID | |
| 9401 NTAPI | |
| 9402 MmUnlockPagableImageSection( | |
| 9403 IN PVOID ImageSectionHandle); | |
| 9404 | |
| 9405 NTKERNELAPI | |
| 9406 VOID | |
| 9407 NTAPI | |
| 9408 MmUnlockPages( | |
| 9409 IN PMDL MemoryDescriptorList); | |
| 9410 | |
| 9411 NTKERNELAPI | |
| 9412 VOID | |
| 9413 NTAPI | |
| 9414 MmUnmapIoSpace( | |
| 9415 IN PVOID BaseAddress, | |
| 9416 IN SIZE_T NumberOfBytes); | |
| 9417 | |
| 9418 NTKERNELAPI | |
| 9419 VOID | |
| 9420 NTAPI | |
| 9421 MmUnmapReservedMapping( | |
| 9422 IN PVOID BaseAddress, | |
| 9423 IN ULONG PoolTag, | |
| 9424 IN PMDL MemoryDescriptorList); | |
| 9425 | |
| 9426 NTKERNELAPI | |
| 9427 VOID | |
| 9428 NTAPI | |
| 9429 MmUnmapVideoDisplay( | |
| 9430 IN PVOID BaseAddress, | |
| 9431 IN SIZE_T NumberOfBytes); | |
| 9432 | |
| 9433 | |
| 9434 | |
| 9435 /** Object manager routines **/ | |
| 9436 | |
| 9437 NTKERNELAPI | |
| 9438 NTSTATUS | |
| 9439 NTAPI | |
| 9440 ObAssignSecurity( | |
| 9441 IN PACCESS_STATE AccessState, | |
| 9442 IN PSECURITY_DESCRIPTOR SecurityDescriptor, | |
| 9443 IN PVOID Object, | |
| 9444 IN POBJECT_TYPE Type); | |
| 9445 | |
| 9446 NTKERNELAPI | |
| 9447 VOID | |
| 9448 NTAPI | |
| 9449 ObDereferenceSecurityDescriptor( | |
| 9450 PSECURITY_DESCRIPTOR SecurityDescriptor, | |
| 9451 ULONG Count); | |
| 9452 | |
| 9453 NTKERNELAPI | |
| 9454 LONG_PTR | |
| 9455 FASTCALL | |
| 9456 ObfDereferenceObject( | |
| 9457 IN PVOID Object); | |
| 9458 | |
| 9459 /* | |
| 9460 * VOID | |
| 9461 * ObDereferenceObject( | |
| 9462 * IN PVOID Object) | |
| 9463 */ | |
| 9464 #define ObDereferenceObject ObfDereferenceObject | |
| 9465 | |
| 9466 NTKERNELAPI | |
| 9467 NTSTATUS | |
| 9468 NTAPI | |
| 9469 ObGetObjectSecurity( | |
| 9470 IN PVOID Object, | |
| 9471 OUT PSECURITY_DESCRIPTOR *SecurityDescriptor, | |
| 9472 OUT PBOOLEAN MemoryAllocated); | |
| 9473 | |
| 9474 NTKERNELAPI | |
| 9475 NTSTATUS | |
| 9476 NTAPI | |
| 9477 ObInsertObject( | |
| 9478 IN PVOID Object, | |
| 9479 IN PACCESS_STATE PassedAccessState OPTIONAL, | |
| 9480 IN ACCESS_MASK DesiredAccess, | |
| 9481 IN ULONG AdditionalReferences, | |
| 9482 OUT PVOID* ReferencedObject OPTIONAL, | |
| 9483 OUT PHANDLE Handle); | |
| 9484 | |
| 9485 NTKERNELAPI | |
| 9486 LONG_PTR | |
| 9487 FASTCALL | |
| 9488 ObfReferenceObject( | |
| 9489 IN PVOID Object); | |
| 9490 | |
| 9491 NTKERNELAPI | |
| 9492 NTSTATUS | |
| 9493 NTAPI | |
| 9494 ObLogSecurityDescriptor( | |
| 9495 IN PSECURITY_DESCRIPTOR InputSecurityDescriptor, | |
| 9496 OUT PSECURITY_DESCRIPTOR *OutputSecurityDescriptor, | |
| 9497 IN ULONG RefBias); | |
| 9498 /* | |
| 9499 * VOID | |
| 9500 * ObReferenceObject( | |
| 9501 * IN PVOID Object) | |
| 9502 */ | |
| 9503 #define ObReferenceObject ObfReferenceObject | |
| 9504 | |
| 9505 NTKERNELAPI | |
| 9506 VOID | |
| 9507 NTAPI | |
| 9508 ObMakeTemporaryObject( | |
| 9509 IN PVOID Object); | |
| 9510 | |
| 9511 NTKERNELAPI | |
| 9512 NTSTATUS | |
| 9513 NTAPI | |
| 9514 ObOpenObjectByName( | |
| 9515 IN POBJECT_ATTRIBUTES ObjectAttributes, | |
| 9516 IN POBJECT_TYPE ObjectType, | |
| 9517 IN KPROCESSOR_MODE AccessMode, | |
| 9518 IN PACCESS_STATE PassedAccessState, | |
| 9519 IN ACCESS_MASK DesiredAccess, | |
| 9520 IN OUT PVOID ParseContext OPTIONAL, | |
| 9521 OUT PHANDLE Handle); | |
| 9522 | |
| 9523 NTKERNELAPI | |
| 9524 NTSTATUS | |
| 9525 NTAPI | |
| 9526 ObOpenObjectByPointer( | |
| 9527 IN PVOID Object, | |
| 9528 IN ULONG HandleAttributes, | |
| 9529 IN PACCESS_STATE PassedAccessState OPTIONAL, | |
| 9530 IN ACCESS_MASK DesiredAccess OPTIONAL, | |
| 9531 IN POBJECT_TYPE ObjectType OPTIONAL, | |
| 9532 IN KPROCESSOR_MODE AccessMode, | |
| 9533 OUT PHANDLE Handle); | |
| 9534 | |
| 9535 NTKERNELAPI | |
| 9536 NTSTATUS | |
| 9537 NTAPI | |
| 9538 ObQueryObjectAuditingByHandle( | |
| 9539 IN HANDLE Handle, | |
| 9540 OUT PBOOLEAN GenerateOnClose); | |
| 9541 | |
| 9542 NTKERNELAPI | |
| 9543 NTSTATUS | |
| 9544 NTAPI | |
| 9545 ObReferenceObjectByHandle( | |
| 9546 IN HANDLE Handle, | |
| 9547 IN ACCESS_MASK DesiredAccess, | |
| 9548 IN POBJECT_TYPE ObjectType OPTIONAL, | |
| 9549 IN KPROCESSOR_MODE AccessMode, | |
| 9550 OUT PVOID *Object, | |
| 9551 OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL); | |
| 9552 | |
| 9553 NTKERNELAPI | |
| 9554 NTSTATUS | |
| 9555 NTAPI | |
| 9556 ObReferenceObjectByName( | |
| 9557 IN PUNICODE_STRING ObjectPath, | |
| 9558 IN ULONG Attributes, | |
| 9559 IN PACCESS_STATE PassedAccessState OPTIONAL, | |
| 9560 IN ACCESS_MASK DesiredAccess OPTIONAL, | |
| 9561 IN POBJECT_TYPE ObjectType, | |
| 9562 IN KPROCESSOR_MODE AccessMode, | |
| 9563 IN OUT PVOID ParseContext OPTIONAL, | |
| 9564 OUT PVOID *Object); | |
| 9565 | |
| 9566 NTKERNELAPI | |
| 9567 NTSTATUS | |
| 9568 NTAPI | |
| 9569 ObReferenceObjectByPointer( | |
| 9570 IN PVOID Object, | |
| 9571 IN ACCESS_MASK DesiredAccess, | |
| 9572 IN POBJECT_TYPE ObjectType, | |
| 9573 IN KPROCESSOR_MODE AccessMode); | |
| 9574 | |
| 9575 NTKERNELAPI | |
| 9576 VOID | |
| 9577 NTAPI | |
| 9578 ObReferenceSecurityDescriptor( | |
| 9579 IN PSECURITY_DESCRIPTOR SecurityDescriptor, | |
| 9580 IN ULONG Count); | |
| 9581 | |
| 9582 NTKERNELAPI | |
| 9583 VOID | |
| 9584 NTAPI | |
| 9585 ObReleaseObjectSecurity( | |
| 9586 IN PSECURITY_DESCRIPTOR SecurityDescriptor, | |
| 9587 IN BOOLEAN MemoryAllocated); | |
| 9588 | |
| 9589 | |
| 9590 | |
| 9591 /** Process manager routines **/ | |
| 9592 | |
| 9593 NTKERNELAPI | |
| 9594 NTSTATUS | |
| 9595 NTAPI | |
| 9596 PsCreateSystemProcess( | |
| 9597 IN PHANDLE ProcessHandle, | |
| 9598 IN ACCESS_MASK DesiredAccess, | |
| 9599 IN POBJECT_ATTRIBUTES ObjectAttributes); | |
| 9600 | |
| 9601 NTKERNELAPI | |
| 9602 NTSTATUS | |
| 9603 NTAPI | |
| 9604 PsCreateSystemThread( | |
| 9605 OUT PHANDLE ThreadHandle, | |
| 9606 IN ULONG DesiredAccess, | |
| 9607 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, | |
| 9608 IN HANDLE ProcessHandle OPTIONAL, | |
| 9609 OUT PCLIENT_ID ClientId OPTIONAL, | |
| 9610 IN PKSTART_ROUTINE StartRoutine, | |
| 9611 IN PVOID StartContext); | |
| 9612 | |
| 9613 /* | |
| 9614 * PEPROCESS | |
| 9615 * PsGetCurrentProcess(VOID) | |
| 9616 */ | |
| 9617 #define PsGetCurrentProcess IoGetCurrentProcess | |
| 9618 | |
| 9619 NTKERNELAPI | |
| 9620 HANDLE | |
| 9621 NTAPI | |
| 9622 PsGetCurrentProcessId( | |
| 9623 VOID); | |
| 9624 | |
| 9625 /* | |
| 9626 * PETHREAD | |
| 9627 * PsGetCurrentThread(VOID) | |
| 9628 */ | |
| 9629 #define PsGetCurrentThread() \ | |
| 9630 ((PETHREAD) KeGetCurrentThread()) | |
| 9631 | |
| 9632 NTKERNELAPI | |
| 9633 HANDLE | |
| 9634 NTAPI | |
| 9635 PsGetCurrentThreadId( | |
| 9636 VOID); | |
| 9637 | |
| 9638 NTKERNELAPI | |
| 9639 HANDLE | |
| 9640 NTAPI | |
| 9641 PsGetProcessId(PEPROCESS Process); | |
| 9642 | |
| 9643 NTKERNELAPI | |
| 9644 BOOLEAN | |
| 9645 NTAPI | |
| 9646 PsGetVersion( | |
| 9647 PULONG MajorVersion OPTIONAL, | |
| 9648 PULONG MinorVersion OPTIONAL, | |
| 9649 PULONG BuildNumber OPTIONAL, | |
| 9650 PUNICODE_STRING CSDVersion OPTIONAL); | |
| 9651 | |
| 9652 NTKERNELAPI | |
| 9653 NTSTATUS | |
| 9654 NTAPI | |
| 9655 PsRemoveCreateThreadNotifyRoutine( | |
| 9656 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); | |
| 9657 | |
| 9658 NTKERNELAPI | |
| 9659 NTSTATUS | |
| 9660 NTAPI | |
| 9661 PsRemoveLoadImageNotifyRoutine( | |
| 9662 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); | |
| 9663 | |
| 9664 NTKERNELAPI | |
| 9665 NTSTATUS | |
| 9666 NTAPI | |
| 9667 PsSetCreateProcessNotifyRoutine( | |
| 9668 IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, | |
| 9669 IN BOOLEAN Remove); | |
| 9670 | |
| 9671 NTKERNELAPI | |
| 9672 NTSTATUS | |
| 9673 NTAPI | |
| 9674 PsSetCreateThreadNotifyRoutine( | |
| 9675 IN PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); | |
| 9676 | |
| 9677 NTKERNELAPI | |
| 9678 NTSTATUS | |
| 9679 NTAPI | |
| 9680 PsSetLoadImageNotifyRoutine( | |
| 9681 IN PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); | |
| 9682 | |
| 9683 NTKERNELAPI | |
| 9684 NTSTATUS | |
| 9685 NTAPI | |
| 9686 PsTerminateSystemThread( | |
| 9687 IN NTSTATUS ExitStatus); | |
| 9688 | |
| 9689 extern NTSYSAPI PEPROCESS PsInitialSystemProcess; | |
| 9690 | |
| 9691 | |
| 9692 /** Security reference monitor routines **/ | |
| 9693 | |
| 9694 NTKERNELAPI | |
| 9695 BOOLEAN | |
| 9696 NTAPI | |
| 9697 SeAccessCheck( | |
| 9698 IN PSECURITY_DESCRIPTOR SecurityDescriptor, | |
| 9699 IN PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, | |
| 9700 IN BOOLEAN SubjectContextLocked, | |
| 9701 IN ACCESS_MASK DesiredAccess, | |
| 9702 IN ACCESS_MASK PreviouslyGrantedAccess, | |
| 9703 OUT PPRIVILEGE_SET *Privileges OPTIONAL, | |
| 9704 IN PGENERIC_MAPPING GenericMapping, | |
| 9705 IN KPROCESSOR_MODE AccessMode, | |
| 9706 OUT PACCESS_MASK GrantedAccess, | |
| 9707 OUT PNTSTATUS AccessStatus); | |
| 9708 | |
| 9709 NTKERNELAPI | |
| 9710 NTSTATUS | |
| 9711 NTAPI | |
| 9712 SeAssignSecurity( | |
| 9713 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, | |
| 9714 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, | |
| 9715 OUT PSECURITY_DESCRIPTOR *NewDescriptor, | |
| 9716 IN BOOLEAN IsDirectoryObject, | |
| 9717 IN PSECURITY_SUBJECT_CONTEXT SubjectContext, | |
| 9718 IN PGENERIC_MAPPING GenericMapping, | |
| 9719 IN POOL_TYPE PoolType); | |
| 9720 | |
| 9721 NTKERNELAPI | |
| 9722 NTSTATUS | |
| 9723 NTAPI | |
| 9724 SeAssignSecurityEx( | |
| 9725 IN PSECURITY_DESCRIPTOR ParentDescriptor OPTIONAL, | |
| 9726 IN PSECURITY_DESCRIPTOR ExplicitDescriptor OPTIONAL, | |
| 9727 OUT PSECURITY_DESCRIPTOR *NewDescriptor, | |
| 9728 IN GUID *ObjectType OPTIONAL, | |
| 9729 IN BOOLEAN IsDirectoryObject, | |
| 9730 IN ULONG AutoInheritFlags, | |
| 9731 IN PSECURITY_SUBJECT_CONTEXT SubjectContext, | |
| 9732 IN PGENERIC_MAPPING GenericMapping, | |
| 9733 IN POOL_TYPE PoolType); | |
| 9734 | |
| 9735 NTKERNELAPI | |
| 9736 NTSTATUS | |
| 9737 NTAPI | |
| 9738 SeDeassignSecurity( | |
| 9739 IN OUT PSECURITY_DESCRIPTOR *SecurityDescriptor); | |
| 9740 | |
| 9741 NTKERNELAPI | |
| 9742 BOOLEAN | |
| 9743 NTAPI | |
| 9744 SeSinglePrivilegeCheck( | |
| 9745 LUID PrivilegeValue, | |
| 9746 KPROCESSOR_MODE PreviousMode); | |
| 9747 | |
| 9748 NTKERNELAPI | |
| 9749 BOOLEAN | |
| 9750 NTAPI | |
| 9751 SeValidSecurityDescriptor( | |
| 9752 IN ULONG Length, | |
| 9753 IN PSECURITY_DESCRIPTOR SecurityDescriptor); | |
| 9754 | |
| 9755 | |
| 9756 | |
| 9757 /** NtXxx routines **/ | |
| 9758 | |
| 9759 NTSYSCALLAPI | |
| 9760 NTSTATUS | |
| 9761 NTAPI | |
| 9762 NtOpenProcess( | |
| 9763 OUT PHANDLE ProcessHandle, | |
| 9764 IN ACCESS_MASK DesiredAccess, | |
| 9765 IN POBJECT_ATTRIBUTES ObjectAttributes, | |
| 9766 IN PCLIENT_ID ClientId OPTIONAL); | |
| 9767 | |
| 9768 NTSYSCALLAPI | |
| 9769 NTSTATUS | |
| 9770 NTAPI | |
| 9771 NtQueryInformationProcess( | |
| 9772 IN HANDLE ProcessHandle, | |
| 9773 IN PROCESSINFOCLASS ProcessInformationClass, | |
| 9774 OUT PVOID ProcessInformation, | |
| 9775 IN ULONG ProcessInformationLength, | |
| 9776 OUT PULONG ReturnLength OPTIONAL); | |
| 9777 | |
| 9778 | |
| 9779 | |
| 9780 /** NtXxx and ZwXxx routines **/ | |
| 9781 | |
| 9782 NTSYSAPI | |
| 9783 NTSTATUS | |
| 9784 NTAPI | |
| 9785 ZwCancelTimer( | |
| 9786 IN HANDLE TimerHandle, | |
| 9787 OUT PBOOLEAN CurrentState OPTIONAL); | |
| 9788 | |
| 9789 NTSYSCALLAPI | |
| 9790 NTSTATUS | |
| 9791 NTAPI | |
| 9792 NtClose( | |
| 9793 IN HANDLE Handle); | |
| 9794 | |
| 9795 NTSYSAPI | |
| 9796 NTSTATUS | |
| 9797 NTAPI | |
| 9798 ZwClose( | |
| 9799 IN HANDLE Handle); | |
| 9800 | |
| 9801 NTSYSAPI | |
| 9802 NTSTATUS | |
| 9803 NTAPI | |
| 9804 ZwCreateDirectoryObject( | |
| 9805 OUT PHANDLE DirectoryHandle, | |
| 9806 IN ACCESS_MASK DesiredAccess, | |
| 9807 IN POBJECT_ATTRIBUTES ObjectAttributes); | |
| 9808 | |
| 9809 NTSYSCALLAPI | |
| 9810 NTSTATUS | |
| 9811 NTAPI | |
| 9812 NtCreateEvent( | |
| 9813 OUT PHANDLE EventHandle, | |
| 9814 IN ACCESS_MASK DesiredAccess, | |
| 9815 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, | |
| 9816 IN EVENT_TYPE EventType, | |
| 9817 IN BOOLEAN InitialState); | |
| 9818 | |
| 9819 NTSYSAPI | |
| 9820 NTSTATUS | |
| 9821 NTAPI | |
| 9822 ZwCreateEvent( | |
| 9823 OUT PHANDLE EventHandle, | |
| 9824 IN ACCESS_MASK DesiredAccess, | |
| 9825 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, | |
| 9826 IN EVENT_TYPE EventType, | |
| 9827 IN BOOLEAN InitialState); | |
| 9828 | |
| 9829 NTSYSAPI | |
| 9830 NTSTATUS | |
| 9831 NTAPI | |
| 9832 ZwCreateFile( | |
| 9833 OUT PHANDLE FileHandle, | |
| 9834 IN ACCESS_MASK DesiredAccess, | |
| 9835 IN POBJECT_ATTRIBUTES ObjectAttributes, | |
| 9836 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 9837 IN PLARGE_INTEGER AllocationSize OPTIONAL, | |
| 9838 IN ULONG FileAttributes, | |
| 9839 IN ULONG ShareAccess, | |
| 9840 IN ULONG CreateDisposition, | |
| 9841 IN ULONG CreateOptions, | |
| 9842 IN PVOID EaBuffer OPTIONAL, | |
| 9843 IN ULONG EaLength); | |
| 9844 | |
| 9845 NTSYSAPI | |
| 9846 NTSTATUS | |
| 9847 NTAPI | |
| 9848 ZwCreateKey( | |
| 9849 OUT PHANDLE KeyHandle, | |
| 9850 IN ACCESS_MASK DesiredAccess, | |
| 9851 IN POBJECT_ATTRIBUTES ObjectAttributes, | |
| 9852 IN ULONG TitleIndex, | |
| 9853 IN PUNICODE_STRING Class OPTIONAL, | |
| 9854 IN ULONG CreateOptions, | |
| 9855 OUT PULONG Disposition OPTIONAL); | |
| 9856 | |
| 9857 NTSYSAPI | |
| 9858 NTSTATUS | |
| 9859 NTAPI | |
| 9860 ZwCreateTimer( | |
| 9861 OUT PHANDLE TimerHandle, | |
| 9862 IN ACCESS_MASK DesiredAccess, | |
| 9863 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, | |
| 9864 IN TIMER_TYPE TimerType); | |
| 9865 | |
| 9866 NTSYSAPI | |
| 9867 NTSTATUS | |
| 9868 NTAPI | |
| 9869 ZwDeleteKey( | |
| 9870 IN HANDLE KeyHandle); | |
| 9871 | |
| 9872 NTSYSAPI | |
| 9873 NTSTATUS | |
| 9874 NTAPI | |
| 9875 ZwDeleteValueKey( | |
| 9876 IN HANDLE KeyHandle, | |
| 9877 IN PUNICODE_STRING ValueName); | |
| 9878 | |
| 9879 NTSYSCALLAPI | |
| 9880 NTSTATUS | |
| 9881 NTAPI | |
| 9882 NtDeviceIoControlFile( | |
| 9883 IN HANDLE DeviceHandle, | |
| 9884 IN HANDLE Event OPTIONAL, | |
| 9885 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL, | |
| 9886 IN PVOID UserApcContext OPTIONAL, | |
| 9887 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 9888 IN ULONG IoControlCode, | |
| 9889 IN PVOID InputBuffer, | |
| 9890 IN ULONG InputBufferSize, | |
| 9891 OUT PVOID OutputBuffer, | |
| 9892 IN ULONG OutputBufferSize); | |
| 9893 | |
| 9894 NTSYSAPI | |
| 9895 NTSTATUS | |
| 9896 NTAPI | |
| 9897 ZwDeviceIoControlFile( | |
| 9898 IN HANDLE DeviceHandle, | |
| 9899 IN HANDLE Event OPTIONAL, | |
| 9900 IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL, | |
| 9901 IN PVOID UserApcContext OPTIONAL, | |
| 9902 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 9903 IN ULONG IoControlCode, | |
| 9904 IN PVOID InputBuffer, | |
| 9905 IN ULONG InputBufferSize, | |
| 9906 OUT PVOID OutputBuffer, | |
| 9907 IN ULONG OutputBufferSize); | |
| 9908 | |
| 9909 NTSYSAPI | |
| 9910 NTSTATUS | |
| 9911 NTAPI | |
| 9912 ZwEnumerateKey( | |
| 9913 IN HANDLE KeyHandle, | |
| 9914 IN ULONG Index, | |
| 9915 IN KEY_INFORMATION_CLASS KeyInformationClass, | |
| 9916 OUT PVOID KeyInformation, | |
| 9917 IN ULONG Length, | |
| 9918 OUT PULONG ResultLength); | |
| 9919 | |
| 9920 NTSYSAPI | |
| 9921 NTSTATUS | |
| 9922 NTAPI | |
| 9923 ZwEnumerateValueKey( | |
| 9924 IN HANDLE KeyHandle, | |
| 9925 IN ULONG Index, | |
| 9926 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, | |
| 9927 OUT PVOID KeyValueInformation, | |
| 9928 IN ULONG Length, | |
| 9929 OUT PULONG ResultLength); | |
| 9930 | |
| 9931 NTSYSAPI | |
| 9932 NTSTATUS | |
| 9933 NTAPI | |
| 9934 ZwFlushKey( | |
| 9935 IN HANDLE KeyHandle); | |
| 9936 | |
| 9937 NTSYSAPI | |
| 9938 NTSTATUS | |
| 9939 NTAPI | |
| 9940 ZwMakeTemporaryObject( | |
| 9941 IN HANDLE Handle); | |
| 9942 | |
| 9943 NTSYSCALLAPI | |
| 9944 NTSTATUS | |
| 9945 NTAPI | |
| 9946 NtMapViewOfSection( | |
| 9947 IN HANDLE SectionHandle, | |
| 9948 IN HANDLE ProcessHandle, | |
| 9949 IN OUT PVOID *BaseAddress, | |
| 9950 IN ULONG_PTR ZeroBits, | |
| 9951 IN SIZE_T CommitSize, | |
| 9952 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, | |
| 9953 IN OUT PSIZE_T ViewSize, | |
| 9954 IN SECTION_INHERIT InheritDisposition, | |
| 9955 IN ULONG AllocationType, | |
| 9956 IN ULONG Protect); | |
| 9957 | |
| 9958 NTSYSAPI | |
| 9959 NTSTATUS | |
| 9960 NTAPI | |
| 9961 ZwMapViewOfSection( | |
| 9962 IN HANDLE SectionHandle, | |
| 9963 IN HANDLE ProcessHandle, | |
| 9964 IN OUT PVOID *BaseAddress, | |
| 9965 IN ULONG_PTR ZeroBits, | |
| 9966 IN SIZE_T CommitSize, | |
| 9967 IN OUT PLARGE_INTEGER SectionOffset OPTIONAL, | |
| 9968 IN OUT PSIZE_T ViewSize, | |
| 9969 IN SECTION_INHERIT InheritDisposition, | |
| 9970 IN ULONG AllocationType, | |
| 9971 IN ULONG Protect); | |
| 9972 | |
| 9973 NTSYSCALLAPI | |
| 9974 NTSTATUS | |
| 9975 NTAPI | |
| 9976 NtOpenFile( | |
| 9977 OUT PHANDLE FileHandle, | |
| 9978 IN ACCESS_MASK DesiredAccess, | |
| 9979 IN POBJECT_ATTRIBUTES ObjectAttributes, | |
| 9980 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 9981 IN ULONG ShareAccess, | |
| 9982 IN ULONG OpenOptions); | |
| 9983 | |
| 9984 NTSYSAPI | |
| 9985 NTSTATUS | |
| 9986 NTAPI | |
| 9987 ZwOpenFile( | |
| 9988 OUT PHANDLE FileHandle, | |
| 9989 IN ACCESS_MASK DesiredAccess, | |
| 9990 IN POBJECT_ATTRIBUTES ObjectAttributes, | |
| 9991 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 9992 IN ULONG ShareAccess, | |
| 9993 IN ULONG OpenOptions); | |
| 9994 | |
| 9995 NTSYSAPI | |
| 9996 NTSTATUS | |
| 9997 NTAPI | |
| 9998 ZwOpenKey( | |
| 9999 OUT PHANDLE KeyHandle, | |
| 10000 IN ACCESS_MASK DesiredAccess, | |
| 10001 IN POBJECT_ATTRIBUTES ObjectAttributes); | |
| 10002 | |
| 10003 NTSYSAPI | |
| 10004 NTSTATUS | |
| 10005 NTAPI | |
| 10006 ZwOpenSection( | |
| 10007 OUT PHANDLE SectionHandle, | |
| 10008 IN ACCESS_MASK DesiredAccess, | |
| 10009 IN POBJECT_ATTRIBUTES ObjectAttributes); | |
| 10010 | |
| 10011 NTSYSAPI | |
| 10012 NTSTATUS | |
| 10013 NTAPI | |
| 10014 ZwOpenSymbolicLinkObject( | |
| 10015 OUT PHANDLE LinkHandle, | |
| 10016 IN ACCESS_MASK DesiredAccess, | |
| 10017 IN POBJECT_ATTRIBUTES ObjectAttributes); | |
| 10018 | |
| 10019 NTSYSAPI | |
| 10020 NTSTATUS | |
| 10021 NTAPI | |
| 10022 ZwOpenTimer( | |
| 10023 OUT PHANDLE TimerHandle, | |
| 10024 IN ACCESS_MASK DesiredAccess, | |
| 10025 IN POBJECT_ATTRIBUTES ObjectAttributes); | |
| 10026 | |
| 10027 NTSYSAPI | |
| 10028 NTSTATUS | |
| 10029 NTAPI | |
| 10030 ZwQueryInformationFile( | |
| 10031 IN HANDLE FileHandle, | |
| 10032 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 10033 OUT PVOID FileInformation, | |
| 10034 IN ULONG Length, | |
| 10035 IN FILE_INFORMATION_CLASS FileInformationClass); | |
| 10036 | |
| 10037 NTSYSAPI | |
| 10038 NTSTATUS | |
| 10039 NTAPI | |
| 10040 ZwQueryKey( | |
| 10041 IN HANDLE KeyHandle, | |
| 10042 IN KEY_INFORMATION_CLASS KeyInformationClass, | |
| 10043 OUT PVOID KeyInformation, | |
| 10044 IN ULONG Length, | |
| 10045 OUT PULONG ResultLength); | |
| 10046 | |
| 10047 NTSYSAPI | |
| 10048 NTSTATUS | |
| 10049 NTAPI | |
| 10050 ZwQuerySymbolicLinkObject( | |
| 10051 IN HANDLE LinkHandle, | |
| 10052 IN OUT PUNICODE_STRING LinkTarget, | |
| 10053 OUT PULONG ReturnedLength OPTIONAL); | |
| 10054 | |
| 10055 NTSYSAPI | |
| 10056 NTSTATUS | |
| 10057 NTAPI | |
| 10058 ZwQueryValueKey( | |
| 10059 IN HANDLE KeyHandle, | |
| 10060 IN PUNICODE_STRING ValueName, | |
| 10061 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, | |
| 10062 OUT PVOID KeyValueInformation, | |
| 10063 IN ULONG Length, | |
| 10064 OUT PULONG ResultLength); | |
| 10065 | |
| 10066 NTSYSCALLAPI | |
| 10067 NTSTATUS | |
| 10068 NTAPI | |
| 10069 NtReadFile( | |
| 10070 IN HANDLE FileHandle, | |
| 10071 IN HANDLE Event OPTIONAL, | |
| 10072 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, | |
| 10073 IN PVOID ApcContext OPTIONAL, | |
| 10074 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 10075 OUT PVOID Buffer, | |
| 10076 IN ULONG Length, | |
| 10077 IN PLARGE_INTEGER ByteOffset OPTIONAL, | |
| 10078 IN PULONG Key OPTIONAL); | |
| 10079 | |
| 10080 NTSYSAPI | |
| 10081 NTSTATUS | |
| 10082 NTAPI | |
| 10083 ZwReadFile( | |
| 10084 IN HANDLE FileHandle, | |
| 10085 IN HANDLE Event OPTIONAL, | |
| 10086 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, | |
| 10087 IN PVOID ApcContext OPTIONAL, | |
| 10088 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 10089 OUT PVOID Buffer, | |
| 10090 IN ULONG Length, | |
| 10091 IN PLARGE_INTEGER ByteOffset OPTIONAL, | |
| 10092 IN PULONG Key OPTIONAL); | |
| 10093 | |
| 10094 NTSYSCALLAPI | |
| 10095 NTSTATUS | |
| 10096 NTAPI | |
| 10097 NtSetEvent( | |
| 10098 IN HANDLE EventHandle, | |
| 10099 OUT PLONG PreviousState OPTIONAL); | |
| 10100 | |
| 10101 NTSYSAPI | |
| 10102 NTSTATUS | |
| 10103 NTAPI | |
| 10104 ZwSetEvent( | |
| 10105 IN HANDLE EventHandle, | |
| 10106 OUT PLONG PreviousState OPTIONAL); | |
| 10107 | |
| 10108 NTSYSAPI | |
| 10109 NTSTATUS | |
| 10110 NTAPI | |
| 10111 ZwSetInformationFile( | |
| 10112 IN HANDLE FileHandle, | |
| 10113 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 10114 IN PVOID FileInformation, | |
| 10115 IN ULONG Length, | |
| 10116 IN FILE_INFORMATION_CLASS FileInformationClass); | |
| 10117 | |
| 10118 NTSYSAPI | |
| 10119 NTSTATUS | |
| 10120 NTAPI | |
| 10121 ZwSetInformationThread( | |
| 10122 IN HANDLE ThreadHandle, | |
| 10123 IN THREADINFOCLASS ThreadInformationClass, | |
| 10124 IN PVOID ThreadInformation, | |
| 10125 IN ULONG ThreadInformationLength); | |
| 10126 | |
| 10127 NTSYSAPI | |
| 10128 NTSTATUS | |
| 10129 NTAPI | |
| 10130 ZwSetTimer( | |
| 10131 IN HANDLE TimerHandle, | |
| 10132 IN PLARGE_INTEGER DueTime, | |
| 10133 IN PTIMER_APC_ROUTINE TimerApcRoutine OPTIONAL, | |
| 10134 IN PVOID TimerContext OPTIONAL, | |
| 10135 IN BOOLEAN WakeTimer, | |
| 10136 IN LONG Period OPTIONAL, | |
| 10137 OUT PBOOLEAN PreviousState OPTIONAL); | |
| 10138 | |
| 10139 NTSYSAPI | |
| 10140 NTSTATUS | |
| 10141 NTAPI | |
| 10142 ZwSetValueKey( | |
| 10143 IN HANDLE KeyHandle, | |
| 10144 IN PUNICODE_STRING ValueName, | |
| 10145 IN ULONG TitleIndex OPTIONAL, | |
| 10146 IN ULONG Type, | |
| 10147 IN PVOID Data, | |
| 10148 IN ULONG DataSize); | |
| 10149 | |
| 10150 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */ | |
| 10151 #define AT_EXTENDABLE_FILE 0x00002000 | |
| 10152 #define AT_RESERVED 0x20000000 | |
| 10153 #define AT_ROUND_TO_PAGE 0x40000000 | |
| 10154 | |
| 10155 NTSYSCALLAPI | |
| 10156 NTSTATUS | |
| 10157 NTAPI | |
| 10158 NtUnmapViewOfSection( | |
| 10159 IN HANDLE ProcessHandle, | |
| 10160 IN PVOID BaseAddress); | |
| 10161 | |
| 10162 NTSYSAPI | |
| 10163 NTSTATUS | |
| 10164 NTAPI | |
| 10165 ZwUnmapViewOfSection( | |
| 10166 IN HANDLE ProcessHandle, | |
| 10167 IN PVOID BaseAddress); | |
| 10168 | |
| 10169 NTSYSCALLAPI | |
| 10170 NTSTATUS | |
| 10171 NTAPI | |
| 10172 NtWaitForSingleObject( | |
| 10173 IN HANDLE ObjectHandle, | |
| 10174 IN BOOLEAN Alertable, | |
| 10175 IN PLARGE_INTEGER TimeOut OPTIONAL); | |
| 10176 | |
| 10177 NTSYSAPI | |
| 10178 NTSTATUS | |
| 10179 NTAPI | |
| 10180 ZwWaitForSingleObject( | |
| 10181 IN HANDLE ObjectHandle, | |
| 10182 IN BOOLEAN Alertable, | |
| 10183 IN PLARGE_INTEGER TimeOut OPTIONAL); | |
| 10184 | |
| 10185 NTSYSCALLAPI | |
| 10186 NTSTATUS | |
| 10187 NTAPI | |
| 10188 NtWriteFile( | |
| 10189 IN HANDLE FileHandle, | |
| 10190 IN HANDLE Event OPTIONAL, | |
| 10191 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, | |
| 10192 IN PVOID ApcContext OPTIONAL, | |
| 10193 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 10194 IN PVOID Buffer, | |
| 10195 IN ULONG Length, | |
| 10196 IN PLARGE_INTEGER ByteOffset OPTIONAL, | |
| 10197 IN PULONG Key OPTIONAL); | |
| 10198 | |
| 10199 NTSYSAPI | |
| 10200 NTSTATUS | |
| 10201 NTAPI | |
| 10202 ZwWriteFile( | |
| 10203 IN HANDLE FileHandle, | |
| 10204 IN HANDLE Event OPTIONAL, | |
| 10205 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL, | |
| 10206 IN PVOID ApcContext OPTIONAL, | |
| 10207 OUT PIO_STATUS_BLOCK IoStatusBlock, | |
| 10208 IN PVOID Buffer, | |
| 10209 IN ULONG Length, | |
| 10210 IN PLARGE_INTEGER ByteOffset OPTIONAL, | |
| 10211 IN PULONG Key OPTIONAL); | |
| 10212 | |
| 10213 | |
| 10214 | |
| 10215 /** Power management support routines **/ | |
| 10216 | |
| 10217 NTKERNELAPI | |
| 10218 NTSTATUS | |
| 10219 NTAPI | |
| 10220 PoCallDriver( | |
| 10221 IN PDEVICE_OBJECT DeviceObject, | |
| 10222 IN OUT PIRP Irp); | |
| 10223 | |
| 10224 NTKERNELAPI | |
| 10225 PULONG | |
| 10226 NTAPI | |
| 10227 PoRegisterDeviceForIdleDetection( | |
| 10228 IN PDEVICE_OBJECT DeviceObject, | |
| 10229 IN ULONG ConservationIdleTime, | |
| 10230 IN ULONG PerformanceIdleTime, | |
| 10231 IN DEVICE_POWER_STATE State); | |
| 10232 | |
| 10233 NTKERNELAPI | |
| 10234 PVOID | |
| 10235 NTAPI | |
| 10236 PoRegisterSystemState( | |
| 10237 IN PVOID StateHandle, | |
| 10238 IN EXECUTION_STATE Flags); | |
| 10239 | |
| 10240 NTKERNELAPI | |
| 10241 NTSTATUS | |
| 10242 NTAPI | |
| 10243 PoRequestPowerIrp( | |
| 10244 IN PDEVICE_OBJECT DeviceObject, | |
| 10245 IN UCHAR MinorFunction, | |
| 10246 IN POWER_STATE PowerState, | |
| 10247 IN PREQUEST_POWER_COMPLETE CompletionFunction, | |
| 10248 IN PVOID Context, | |
| 10249 OUT PIRP *Irp OPTIONAL); | |
| 10250 | |
| 10251 NTKERNELAPI | |
| 10252 NTSTATUS | |
| 10253 NTAPI | |
| 10254 PoRequestShutdownEvent( | |
| 10255 OUT PVOID *Event); | |
| 10256 | |
| 10257 NTKERNELAPI | |
| 10258 VOID | |
| 10259 NTAPI | |
| 10260 PoSetDeviceBusy( | |
| 10261 PULONG IdlePointer); | |
| 10262 | |
| 10263 #define PoSetDeviceBusy(IdlePointer) \ | |
| 10264 ((void)(*(IdlePointer) = 0)) | |
| 10265 | |
| 10266 NTKERNELAPI | |
| 10267 POWER_STATE | |
| 10268 NTAPI | |
| 10269 PoSetPowerState( | |
| 10270 IN PDEVICE_OBJECT DeviceObject, | |
| 10271 IN POWER_STATE_TYPE Type, | |
| 10272 IN POWER_STATE State); | |
| 10273 | |
| 10274 NTKERNELAPI | |
| 10275 VOID | |
| 10276 NTAPI | |
| 10277 PoSetSystemState( | |
| 10278 IN EXECUTION_STATE Flags); | |
| 10279 | |
| 10280 NTKERNELAPI | |
| 10281 VOID | |
| 10282 NTAPI | |
| 10283 PoStartNextPowerIrp( | |
| 10284 IN PIRP Irp); | |
| 10285 | |
| 10286 NTKERNELAPI | |
| 10287 VOID | |
| 10288 NTAPI | |
| 10289 PoUnregisterSystemState( | |
| 10290 IN PVOID StateHandle); | |
| 10291 | |
| 10292 | |
| 10293 | |
| 10294 /** WMI library support routines **/ | |
| 10295 | |
| 10296 NTSTATUS | |
| 10297 NTAPI | |
| 10298 WmiCompleteRequest( | |
| 10299 IN PDEVICE_OBJECT DeviceObject, | |
| 10300 IN PIRP Irp, | |
| 10301 IN NTSTATUS Status, | |
| 10302 IN ULONG BufferUsed, | |
| 10303 IN CCHAR PriorityBoost); | |
| 10304 | |
| 10305 NTSTATUS | |
| 10306 NTAPI | |
| 10307 WmiFireEvent( | |
| 10308 IN PDEVICE_OBJECT DeviceObject, | |
| 10309 IN LPGUID Guid, | |
| 10310 IN ULONG InstanceIndex, | |
| 10311 IN ULONG EventDataSize, | |
| 10312 IN PVOID EventData); | |
| 10313 | |
| 10314 NTKERNELAPI | |
| 10315 NTSTATUS | |
| 10316 NTAPI | |
| 10317 WmiQueryTraceInformation( | |
| 10318 IN TRACE_INFORMATION_CLASS TraceInformationClass, | |
| 10319 OUT PVOID TraceInformation, | |
| 10320 IN ULONG TraceInformationLength, | |
| 10321 OUT PULONG RequiredLength OPTIONAL, | |
| 10322 IN PVOID Buffer OPTIONAL); | |
| 10323 | |
| 10324 NTSTATUS | |
| 10325 NTAPI | |
| 10326 WmiSystemControl( | |
| 10327 IN PWMILIB_CONTEXT WmiLibInfo, | |
| 10328 IN PDEVICE_OBJECT DeviceObject, | |
| 10329 IN PIRP Irp, | |
| 10330 OUT PSYSCTL_IRP_DISPOSITION IrpDisposition); | |
| 10331 | |
| 10332 NTKERNELAPI | |
| 10333 NTSTATUS | |
| 10334 DDKCDECLAPI | |
| 10335 WmiTraceMessage( | |
| 10336 IN TRACEHANDLE LoggerHandle, | |
| 10337 IN ULONG MessageFlags, | |
| 10338 IN LPGUID MessageGuid, | |
| 10339 IN USHORT MessageNumber, | |
| 10340 IN ...); | |
| 10341 | |
| 10342 #if 0 | |
| 10343 /* FIXME: Get va_list from where? */ | |
| 10344 NTKERNELAPI | |
| 10345 NTSTATUS | |
| 10346 DDKCDECLAPI | |
| 10347 WmiTraceMessageVa( | |
| 10348 IN TRACEHANDLE LoggerHandle, | |
| 10349 IN ULONG MessageFlags, | |
| 10350 IN LPGUID MessageGuid, | |
| 10351 IN USHORT MessageNumber, | |
| 10352 IN va_list MessageArgList); | |
| 10353 #endif | |
| 10354 | |
| 10355 | |
| 10356 /** Kernel debugger routines **/ | |
| 10357 | |
| 10358 NTKERNELAPI | |
| 10359 NTSTATUS | |
| 10360 NTAPI | |
| 10361 KdDisableDebugger( | |
| 10362 VOID); | |
| 10363 | |
| 10364 NTKERNELAPI | |
| 10365 NTSTATUS | |
| 10366 NTAPI | |
| 10367 KdEnableDebugger( | |
| 10368 VOID); | |
| 10369 | |
| 10370 NTKERNELAPI | |
| 10371 BOOLEAN | |
| 10372 NTAPI | |
| 10373 KdRefreshDebuggerNotPresent( | |
| 10374 VOID | |
| 10375 ); | |
| 10376 | |
| 10377 #if (NTDDI_VERSION >= NTDDI_WS03SP1) | |
| 10378 NTKERNELAPI | |
| 10379 NTSTATUS | |
| 10380 NTAPI | |
| 10381 KdChangeOption( | |
| 10382 IN KD_OPTION Option, | |
| 10383 IN ULONG InBufferBytes OPTIONAL, | |
| 10384 IN PVOID InBuffer, | |
| 10385 IN ULONG OutBufferBytes OPTIONAL, | |
| 10386 OUT PVOID OutBuffer, | |
| 10387 OUT PULONG OutBufferNeeded OPTIONAL); | |
| 10388 #endif | |
| 10389 | |
| 10390 VOID | |
| 10391 NTAPI | |
| 10392 DbgBreakPoint( | |
| 10393 VOID); | |
| 10394 | |
| 10395 NTSYSAPI | |
| 10396 VOID | |
| 10397 NTAPI | |
| 10398 DbgBreakPointWithStatus( | |
| 10399 IN ULONG Status); | |
| 10400 | |
| 10401 ULONG | |
| 10402 DDKCDECLAPI | |
| 10403 DbgPrint( | |
| 10404 IN PCCH Format, | |
| 10405 IN ...); | |
| 10406 | |
| 10407 NTSYSAPI | |
| 10408 ULONG | |
| 10409 DDKCDECLAPI | |
| 10410 DbgPrintEx( | |
| 10411 IN ULONG ComponentId, | |
| 10412 IN ULONG Level, | |
| 10413 IN PCCH Format, | |
| 10414 IN ...); | |
| 10415 | |
| 10416 ULONG | |
| 10417 NTAPI | |
| 10418 vDbgPrintEx( | |
| 10419 IN ULONG ComponentId, | |
| 10420 IN ULONG Level, | |
| 10421 IN PCCH Format, | |
| 10422 IN va_list ap); | |
| 10423 | |
| 10424 ULONG | |
| 10425 NTAPI | |
| 10426 vDbgPrintExWithPrefix( | |
| 10427 IN PCCH Prefix, | |
| 10428 IN ULONG ComponentId, | |
| 10429 IN ULONG Level, | |
| 10430 IN PCCH Format, | |
| 10431 IN va_list ap); | |
| 10432 | |
| 10433 NTKERNELAPI | |
| 10434 ULONG | |
| 10435 DDKCDECLAPI | |
| 10436 DbgPrintReturnControlC( | |
| 10437 IN PCCH Format, | |
| 10438 IN ...); | |
| 10439 | |
| 10440 ULONG | |
| 10441 NTAPI | |
| 10442 DbgPrompt( | |
| 10443 IN PCCH Prompt, | |
| 10444 OUT PCH Response, | |
| 10445 IN ULONG MaximumResponseLength | |
| 10446 ); | |
| 10447 | |
| 10448 NTKERNELAPI | |
| 10449 NTSTATUS | |
| 10450 NTAPI | |
| 10451 DbgQueryDebugFilterState( | |
| 10452 IN ULONG ComponentId, | |
| 10453 IN ULONG Level); | |
| 10454 | |
| 10455 NTKERNELAPI | |
| 10456 NTSTATUS | |
| 10457 NTAPI | |
| 10458 DbgSetDebugFilterState( | |
| 10459 IN ULONG ComponentId, | |
| 10460 IN ULONG Level, | |
| 10461 IN BOOLEAN State); | |
| 10462 | |
| 10463 #if DBG | |
| 10464 | |
| 10465 #define KdPrint(_x_) DbgPrint _x_ | |
| 10466 #define KdPrintEx(_x_) DbgPrintEx _x_ | |
| 10467 #define KdBreakPoint() DbgBreakPoint() | |
| 10468 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s) | |
| 10469 | |
| 10470 #else /* !DBG */ | |
| 10471 | |
| 10472 #define KdPrint(_x_) | |
| 10473 #define KdPrintEx(_x_) | |
| 10474 #define KdBreakPoint() | |
| 10475 #define KdBreakPointWithStatus(s) | |
| 10476 | |
| 10477 #endif /* !DBG */ | |
| 10478 | |
| 10479 #if defined(__GNUC__) | |
| 10480 | |
| 10481 extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent; | |
| 10482 extern NTKERNELAPI BOOLEAN KdDebuggerEnabled; | |
| 10483 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled | |
| 10484 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent | |
| 10485 | |
| 10486 #elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_) | |
| 10487 | |
| 10488 extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent; | |
| 10489 extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled; | |
| 10490 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled | |
| 10491 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent | |
| 10492 | |
| 10493 #else | |
| 10494 | |
| 10495 extern BOOLEAN KdDebuggerNotPresent; | |
| 10496 extern BOOLEAN KdDebuggerEnabled; | |
| 10497 #define KD_DEBUGGER_ENABLED KdDebuggerEnabled | |
| 10498 #define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent | |
| 10499 | |
| 10500 #endif | |
| 10501 | |
| 10502 /** Stuff from winnt4.h */ | |
| 10503 | |
| 10504 #ifndef DMA_MACROS_DEFINED | |
| 10505 | |
| 10506 #if (NTDDI_VERSION >= NTDDI_WIN2K) | |
| 10507 | |
| 10508 //DECLSPEC_DEPRECATED_DDK | |
| 10509 NTHALAPI | |
| 10510 BOOLEAN | |
| 10511 NTAPI | |
| 10512 IoFlushAdapterBuffers( | |
| 10513 IN PADAPTER_OBJECT AdapterObject, | |
| 10514 IN PMDL Mdl, | |
| 10515 IN PVOID MapRegisterBase, | |
| 10516 IN PVOID CurrentVa, | |
| 10517 IN ULONG Length, | |
| 10518 IN BOOLEAN WriteToDevice); | |
| 10519 | |
| 10520 //DECLSPEC_DEPRECATED_DDK | |
| 10521 NTHALAPI | |
| 10522 VOID | |
| 10523 NTAPI | |
| 10524 IoFreeAdapterChannel( | |
| 10525 IN PADAPTER_OBJECT AdapterObject); | |
| 10526 | |
| 10527 //DECLSPEC_DEPRECATED_DDK | |
| 10528 NTHALAPI | |
| 10529 VOID | |
| 10530 NTAPI | |
| 10531 IoFreeMapRegisters( | |
| 10532 IN PADAPTER_OBJECT AdapterObject, | |
| 10533 IN PVOID MapRegisterBase, | |
| 10534 IN ULONG NumberOfMapRegisters); | |
| 10535 | |
| 10536 //DECLSPEC_DEPRECATED_DDK | |
| 10537 NTHALAPI | |
| 10538 PHYSICAL_ADDRESS | |
| 10539 NTAPI | |
| 10540 IoMapTransfer( | |
| 10541 IN PADAPTER_OBJECT AdapterObject, | |
| 10542 IN PMDL Mdl, | |
| 10543 IN PVOID MapRegisterBase, | |
| 10544 IN PVOID CurrentVa, | |
| 10545 IN OUT PULONG Length, | |
| 10546 IN BOOLEAN WriteToDevice); | |
| 10547 | |
| 10548 | |
| 10549 #endif // (NTDDI_VERSION >= NTDDI_WIN2K) | |
| 10550 #endif // !defined(DMA_MACROS_DEFINED) | |
| 10551 | |
| 10552 NTKERNELAPI | |
| 10553 NTSTATUS | |
| 10554 NTAPI | |
| 10555 IoAssignResources( | |
| 10556 IN PUNICODE_STRING RegistryPath, | |
| 10557 IN PUNICODE_STRING DriverClassName OPTIONAL, | |
| 10558 IN PDRIVER_OBJECT DriverObject, | |
| 10559 IN PDEVICE_OBJECT DeviceObject OPTIONAL, | |
| 10560 IN PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources, | |
| 10561 IN OUT PCM_RESOURCE_LIST *AllocatedResources); | |
| 10562 | |
| 10563 NTKERNELAPI | |
| 10564 NTSTATUS | |
| 10565 NTAPI | |
| 10566 IoAttachDeviceByPointer( | |
| 10567 IN PDEVICE_OBJECT SourceDevice, | |
| 10568 IN PDEVICE_OBJECT TargetDevice); | |
| 10569 | |
| 10570 NTKERNELAPI | |
| 10571 BOOLEAN | |
| 10572 NTAPI | |
| 10573 MmIsNonPagedSystemAddressValid( | |
| 10574 IN PVOID VirtualAddress); | |
| 10575 | |
| 10576 #if defined(_AMD64_) || defined(_IA64_) | |
| 10577 //DECLSPEC_DEPRECATED_DDK_WINXP | |
| 10578 static __inline | |
| 10579 LARGE_INTEGER | |
| 10580 NTAPI_INLINE | |
| 10581 RtlLargeIntegerDivide( | |
| 10582 IN LARGE_INTEGER Dividend, | |
| 10583 IN LARGE_INTEGER Divisor, | |
| 10584 IN OUT PLARGE_INTEGER Remainder) | |
| 10585 { | |
| 10586 LARGE_INTEGER ret; | |
| 10587 ret.QuadPart = Dividend.QuadPart / Divisor.QuadPart; | |
| 10588 if (Remainder) | |
| 10589 Remainder->QuadPart = Dividend.QuadPart % Divisor.QuadPart; | |
| 10590 return ret; | |
| 10591 } | |
| 10592 #else | |
| 10593 NTSYSAPI | |
| 10594 LARGE_INTEGER | |
| 10595 NTAPI | |
| 10596 RtlLargeIntegerDivide( | |
| 10597 IN LARGE_INTEGER Dividend, | |
| 10598 IN LARGE_INTEGER Divisor, | |
| 10599 IN OUT PLARGE_INTEGER Remainder); | |
| 10600 #endif | |
| 10601 | |
| 10602 NTKERNELAPI | |
| 10603 INTERLOCKED_RESULT | |
| 10604 NTAPI | |
| 10605 ExInterlockedDecrementLong( | |
| 10606 IN PLONG Addend, | |
| 10607 IN PKSPIN_LOCK Lock); | |
| 10608 | |
| 10609 NTKERNELAPI | |
| 10610 ULONG | |
| 10611 NTAPI | |
| 10612 ExInterlockedExchangeUlong( | |
| 10613 IN PULONG Target, | |
| 10614 IN ULONG Value, | |
| 10615 IN PKSPIN_LOCK Lock); | |
| 10616 | |
| 10617 NTKERNELAPI | |
| 10618 INTERLOCKED_RESULT | |
| 10619 NTAPI | |
| 10620 ExInterlockedIncrementLong( | |
| 10621 IN PLONG Addend, | |
| 10622 IN PKSPIN_LOCK Lock); | |
| 10623 | |
| 10624 NTHALAPI | |
| 10625 VOID | |
| 10626 NTAPI | |
| 10627 HalAcquireDisplayOwnership( | |
| 10628 IN PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters); | |
| 10629 | |
| 10630 NTHALAPI | |
| 10631 NTSTATUS | |
| 10632 NTAPI | |
| 10633 HalAllocateAdapterChannel( | |
| 10634 IN PADAPTER_OBJECT AdapterObject, | |
| 10635 IN PWAIT_CONTEXT_BLOCK Wcb, | |
| 10636 IN ULONG NumberOfMapRegisters, | |
| 10637 IN PDRIVER_CONTROL ExecutionRoutine); | |
| 10638 | |
| 10639 NTHALAPI | |
| 10640 PVOID | |
| 10641 NTAPI | |
| 10642 HalAllocateCommonBuffer( | |
| 10643 IN PADAPTER_OBJECT AdapterObject, | |
| 10644 IN ULONG Length, | |
| 10645 OUT PPHYSICAL_ADDRESS LogicalAddress, | |
| 10646 IN BOOLEAN CacheEnabled); | |
| 10647 | |
| 10648 NTHALAPI | |
| 10649 NTSTATUS | |
| 10650 NTAPI | |
| 10651 HalAssignSlotResources( | |
| 10652 IN PUNICODE_STRING RegistryPath, | |
| 10653 IN PUNICODE_STRING DriverClassName, | |
| 10654 IN PDRIVER_OBJECT DriverObject, | |
| 10655 IN PDEVICE_OBJECT DeviceObject, | |
| 10656 IN INTERFACE_TYPE BusType, | |
| 10657 IN ULONG BusNumber, | |
| 10658 IN ULONG SlotNumber, | |
| 10659 IN OUT PCM_RESOURCE_LIST *AllocatedResources); | |
| 10660 | |
| 10661 NTHALAPI | |
| 10662 VOID | |
| 10663 NTAPI | |
| 10664 HalFreeCommonBuffer( | |
| 10665 IN PADAPTER_OBJECT AdapterObject, | |
| 10666 IN ULONG Length, | |
| 10667 IN PHYSICAL_ADDRESS LogicalAddress, | |
| 10668 IN PVOID VirtualAddress, | |
| 10669 IN BOOLEAN CacheEnabled); | |
| 10670 | |
| 10671 NTHALAPI | |
| 10672 PADAPTER_OBJECT | |
| 10673 NTAPI | |
| 10674 HalGetAdapter( | |
| 10675 IN PDEVICE_DESCRIPTION DeviceDescription, | |
| 10676 IN OUT PULONG NumberOfMapRegisters); | |
| 10677 | |
| 10678 NTHALAPI | |
| 10679 ULONG | |
| 10680 NTAPI | |
| 10681 HalGetBusData( | |
| 10682 IN BUS_DATA_TYPE BusDataType, | |
| 10683 IN ULONG BusNumber, | |
| 10684 IN ULONG SlotNumber, | |
| 10685 IN PVOID Buffer, | |
| 10686 IN ULONG Length); | |
| 10687 | |
| 10688 NTHALAPI | |
| 10689 ULONG | |
| 10690 NTAPI | |
| 10691 HalGetBusDataByOffset( | |
| 10692 IN BUS_DATA_TYPE BusDataType, | |
| 10693 IN ULONG BusNumber, | |
| 10694 IN ULONG SlotNumber, | |
| 10695 IN PVOID Buffer, | |
| 10696 IN ULONG Offset, | |
| 10697 IN ULONG Length); | |
| 10698 | |
| 10699 NTHALAPI | |
| 10700 ULONG | |
| 10701 NTAPI | |
| 10702 HalGetDmaAlignmentRequirement( | |
| 10703 VOID); | |
| 10704 | |
| 10705 NTHALAPI | |
| 10706 ULONG | |
| 10707 NTAPI | |
| 10708 HalGetInterruptVector( | |
| 10709 IN INTERFACE_TYPE InterfaceType, | |
| 10710 IN ULONG BusNumber, | |
| 10711 IN ULONG BusInterruptLevel, | |
| 10712 IN ULONG BusInterruptVector, | |
| 10713 OUT PKIRQL Irql, | |
| 10714 OUT PKAFFINITY Affinity); | |
| 10715 | |
| 10716 NTHALAPI | |
| 10717 ULONG | |
| 10718 NTAPI | |
| 10719 HalReadDmaCounter( | |
| 10720 IN PADAPTER_OBJECT AdapterObject); | |
| 10721 | |
| 10722 NTHALAPI | |
| 10723 ULONG | |
| 10724 NTAPI | |
| 10725 HalSetBusData( | |
| 10726 IN BUS_DATA_TYPE BusDataType, | |
| 10727 IN ULONG BusNumber, | |
| 10728 IN ULONG SlotNumber, | |
| 10729 IN PVOID Buffer, | |
| 10730 IN ULONG Length); | |
| 10731 | |
| 10732 NTHALAPI | |
| 10733 ULONG | |
| 10734 NTAPI | |
| 10735 HalSetBusDataByOffset( | |
| 10736 IN BUS_DATA_TYPE BusDataType, | |
| 10737 IN ULONG BusNumber, | |
| 10738 IN ULONG SlotNumber, | |
| 10739 IN PVOID Buffer, | |
| 10740 IN ULONG Offset, | |
| 10741 IN ULONG Length); | |
| 10742 | |
| 10743 NTHALAPI | |
| 10744 BOOLEAN | |
| 10745 NTAPI | |
| 10746 HalTranslateBusAddress( | |
| 10747 IN INTERFACE_TYPE InterfaceType, | |
| 10748 IN ULONG BusNumber, | |
| 10749 IN PHYSICAL_ADDRESS BusAddress, | |
| 10750 IN OUT PULONG AddressSpace, | |
| 10751 OUT PPHYSICAL_ADDRESS TranslatedAddress); | |
| 10752 | |
| 10753 NTSYSAPI | |
| 10754 BOOLEAN | |
| 10755 NTAPI | |
| 10756 RtlLargeIntegerEqualToZero( | |
| 10757 IN LARGE_INTEGER Operand); | |
| 10758 | |
| 10759 NTSYSAPI | |
| 10760 BOOLEAN | |
| 10761 NTAPI | |
| 10762 RtlLargeIntegerGreaterOrEqualToZero( | |
| 10763 IN LARGE_INTEGER Operand); | |
| 10764 | |
| 10765 NTSYSAPI | |
| 10766 BOOLEAN | |
| 10767 NTAPI | |
| 10768 RtlLargeIntegerGreaterThan( | |
| 10769 IN LARGE_INTEGER Operand1, | |
| 10770 IN LARGE_INTEGER Operand2); | |
| 10771 | |
| 10772 NTSYSAPI | |
| 10773 BOOLEAN | |
| 10774 NTAPI | |
| 10775 RtlLargeIntegerGreaterThanOrEqualTo( | |
| 10776 IN LARGE_INTEGER Operand1, | |
| 10777 IN LARGE_INTEGER Operand2); | |
| 10778 | |
| 10779 NTSYSAPI | |
| 10780 BOOLEAN | |
| 10781 NTAPI | |
| 10782 RtlLargeIntegerGreaterThanZero( | |
| 10783 IN LARGE_INTEGER Operand); | |
| 10784 | |
| 10785 NTSYSAPI | |
| 10786 BOOLEAN | |
| 10787 NTAPI | |
| 10788 RtlLargeIntegerLessOrEqualToZero( | |
| 10789 IN LARGE_INTEGER Operand); | |
| 10790 | |
| 10791 NTSYSAPI | |
| 10792 BOOLEAN | |
| 10793 NTAPI | |
| 10794 RtlLargeIntegerLessThan( | |
| 10795 IN LARGE_INTEGER Operand1, | |
| 10796 IN LARGE_INTEGER Operand2); | |
| 10797 | |
| 10798 NTSYSAPI | |
| 10799 BOOLEAN | |
| 10800 NTAPI | |
| 10801 RtlLargeIntegerLessThanOrEqualTo( | |
| 10802 IN LARGE_INTEGER Operand1, | |
| 10803 IN LARGE_INTEGER Operand2); | |
| 10804 | |
| 10805 NTSYSAPI | |
| 10806 BOOLEAN | |
| 10807 NTAPI | |
| 10808 RtlLargeIntegerLessThanZero( | |
| 10809 IN LARGE_INTEGER Operand); | |
| 10810 | |
| 10811 NTSYSAPI | |
| 10812 LARGE_INTEGER | |
| 10813 NTAPI | |
| 10814 RtlLargeIntegerNegate( | |
| 10815 IN LARGE_INTEGER Subtrahend); | |
| 10816 | |
| 10817 NTSYSAPI | |
| 10818 BOOLEAN | |
| 10819 NTAPI | |
| 10820 RtlLargeIntegerNotEqualTo( | |
| 10821 IN LARGE_INTEGER Operand1, | |
| 10822 IN LARGE_INTEGER Operand2); | |
| 10823 | |
| 10824 NTSYSAPI | |
| 10825 BOOLEAN | |
| 10826 NTAPI | |
| 10827 RtlLargeIntegerNotEqualToZero( | |
| 10828 IN LARGE_INTEGER Operand); | |
| 10829 | |
| 10830 NTSYSAPI | |
| 10831 LARGE_INTEGER | |
| 10832 NTAPI | |
| 10833 RtlLargeIntegerShiftLeft( | |
| 10834 IN LARGE_INTEGER LargeInteger, | |
| 10835 IN CCHAR ShiftCount); | |
| 10836 | |
| 10837 NTSYSAPI | |
| 10838 LARGE_INTEGER | |
| 10839 NTAPI | |
| 10840 RtlLargeIntegerShiftRight( | |
| 10841 IN LARGE_INTEGER LargeInteger, | |
| 10842 IN CCHAR ShiftCount); | |
| 10843 | |
| 10844 NTSYSAPI | |
| 10845 LARGE_INTEGER | |
| 10846 NTAPI | |
| 10847 RtlLargeIntegerSubtract( | |
| 10848 IN LARGE_INTEGER Minuend, | |
| 10849 IN LARGE_INTEGER Subtrahend); | |
| 10850 | |
| 10851 | |
| 10852 /* | |
| 10853 * ULONG | |
| 10854 * COMPUTE_PAGES_SPANNED( | |
| 10855 * IN PVOID Va, | |
| 10856 * IN ULONG Size) | |
| 10857 */ | |
| 10858 #define COMPUTE_PAGES_SPANNED(Va, \ | |
| 10859 Size) \ | |
| 10860 (ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size)) | |
| 10861 | |
| 10862 | |
| 10863 /* | |
| 10864 ** Architecture specific structures | |
| 10865 */ | |
| 10866 | |
| 10867 #ifdef _X86_ | |
| 10868 | |
| 10869 NTKERNELAPI | |
| 10870 INTERLOCKED_RESULT | |
| 10871 FASTCALL | |
| 10872 Exfi386InterlockedIncrementLong( | |
| 10873 IN PLONG Addend); | |
| 10874 | |
| 10875 NTKERNELAPI | |
| 10876 INTERLOCKED_RESULT | |
| 10877 FASTCALL | |
| 10878 Exfi386InterlockedDecrementLong( | |
| 10879 IN PLONG Addend); | |
| 10880 | |
| 10881 NTKERNELAPI | |
| 10882 ULONG | |
| 10883 FASTCALL | |
| 10884 Exfi386InterlockedExchangeUlong( | |
| 10885 IN PULONG Target, | |
| 10886 IN ULONG Value); | |
| 10887 | |
| 10888 #define ExInterlockedIncrementLong(Addend,Lock) Exfi386InterlockedIncrementLong(Addend) | |
| 10889 #define ExInterlockedDecrementLong(Addend,Lock) Exfi386InterlockedDecrementLong(Addend) | |
| 10890 #define ExInterlockedExchangeUlong(Target, Value, Lock) Exfi386InterlockedExchangeUlong(Target, Value) | |
| 10891 | |
| 10892 #endif /* _X86_ */ | |
| 10893 | |
| 10894 #ifdef _M_ARM | |
| 10895 // | |
| 10896 // NT-ARM is not documented | |
| 10897 // | |
| 10898 #include <armddk.h> | |
| 10899 #endif | |
| 10900 | |
| 10901 #ifdef __cplusplus | |
| 10902 } | |
| 10903 #endif | |
| 10904 | |
| 10905 #endif /* __WINDDK_H */ |
