Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
winddk.h
00001 /* 00002 * winddk.h 00003 * 00004 * Windows Device Driver Kit 00005 * 00006 * This file is part of the w32api package. 00007 * 00008 * Contributors: 00009 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> 00010 * 00011 * THIS SOFTWARE IS NOT COPYRIGHTED 00012 * 00013 * This source code is offered for use in the public domain. You may 00014 * use, modify or distribute it freely. 00015 * 00016 * This code is distributed in the hope that it will be useful but 00017 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY 00018 * DISCLAIMED. This includes but is not limited to warranties of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00020 * 00021 */ 00022 00023 #ifndef __WINDDK_H 00024 #define __WINDDK_H 00025 00026 #if __GNUC__ >= 3 00027 #pragma GCC system_header 00028 #endif 00029 00030 #ifdef __cplusplus 00031 extern "C" { 00032 #endif 00033 00034 /* 00035 ** Definitions specific to this Device Driver Kit 00036 */ 00037 #define DDKAPI __stdcall 00038 #define DDKFASTAPI __fastcall 00039 #define DDKCDECLAPI __cdecl 00040 00041 #if defined(_NTOSKRNL_) 00042 #ifndef NTOSAPI 00043 #define NTOSAPI DECL_EXPORT 00044 #endif 00045 #define DECLARE_INTERNAL_OBJECT(x) typedef struct _##x; typedef struct _##x *P##x; 00046 #define DECLARE_INTERNAL_OBJECT2(x,y) typedef struct _##x; typedef struct _##x *P##y; 00047 #else 00048 #ifndef NTOSAPI 00049 #define NTOSAPI DECL_IMPORT 00050 #endif 00051 #define DECLARE_INTERNAL_OBJECT(x) struct _##x; typedef struct _##x *P##x; 00052 #define DECLARE_INTERNAL_OBJECT2(x,y) struct _##x; typedef struct _##x *P##y; 00053 #endif 00054 00055 /* Pseudo modifiers for parameters 00056 We don't use these unnecessary defines in the w32api headers. Define 00057 them by default since that is what people expect, but allow users 00058 to avoid the pollution. */ 00059 #ifndef _NO_W32_PSEUDO_MODIFIERS 00060 #define IN 00061 #define OUT 00062 #define OPTIONAL 00063 #define UNALLIGNED 00064 #endif 00065 00066 #define CONST const 00067 #define VOLATILE volatile 00068 00069 #define RESTRICTED_POINTER 00070 #define POINTER_ALIGNMENT 00071 00072 #ifdef NONAMELESSUNION 00073 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name 00074 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name 00075 #else 00076 # define _DDK_DUMMYUNION_MEMBER(name) name 00077 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name 00078 #endif 00079 00080 /* 00081 ** Forward declarations 00082 */ 00083 00084 struct _IRP; 00085 struct _MDL; 00086 struct _KAPC; 00087 struct _KDPC; 00088 struct _KPCR; 00089 struct _KPRCB; 00090 struct _KTSS; 00091 struct _FILE_OBJECT; 00092 struct _DMA_ADAPTER; 00093 struct _DEVICE_OBJECT; 00094 struct _DRIVER_OBJECT; 00095 struct _SECTION_OBJECT; 00096 struct _IO_STATUS_BLOCK; 00097 struct _DEVICE_DESCRIPTION; 00098 struct _SCATTER_GATHER_LIST; 00099 00100 DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT) 00101 DECLARE_INTERNAL_OBJECT(DMA_ADAPTER) 00102 DECLARE_INTERNAL_OBJECT(IO_STATUS_BLOCK) 00103 DECLARE_INTERNAL_OBJECT(SECTION_OBJECT) 00104 00105 #if 1 00106 /* FIXME: Unknown definitions */ 00107 struct _SET_PARTITION_INFORMATION_EX; 00108 typedef ULONG WAIT_TYPE; 00109 typedef HANDLE TRACEHANDLE; 00110 typedef PVOID PWMILIB_CONTEXT; 00111 typedef PVOID PSYSCTL_IRP_DISPOSITION; 00112 typedef ULONG LOGICAL; 00113 #endif 00114 00115 /* 00116 ** Routines specific to this DDK 00117 */ 00118 00119 #define TAG(_a, _b, _c, _d) (ULONG) \ 00120 (((_a) << 0) + ((_b) << 8) + ((_c) << 16) + ((_d) << 24)) 00121 00122 #ifdef __GNUC__ 00123 static __inline struct _KPCR * KeGetCurrentKPCR( 00124 VOID) 00125 { 00126 ULONG Value; 00127 00128 __asm__ __volatile__ ( 00129 #if (__GNUC__ >= 3) 00130 /* support -masm=intel */ 00131 "mov{l} {%%fs:0x18, %0|%0, %%fs:0x18}\n\t" 00132 #else 00133 "movl %%fs:0x18, %0\n\t" 00134 #endif 00135 : "=r" (Value) 00136 : /* no inputs */ 00137 ); 00138 return (struct _KPCR *) Value; 00139 } 00140 00141 #elif defined( __WATCOMC__ ) 00142 00143 extern struct _KPCR * KeGetCurrentKPCR( void ); 00144 #pragma aux KeGetCurrentKPCR = \ 00145 "mov eax, fs:[0x18]" \ 00146 value [ eax ]; 00147 00148 #endif 00149 00150 /* 00151 ** Simple structures 00152 */ 00153 00154 typedef LONG KPRIORITY; 00155 typedef UCHAR KIRQL, *PKIRQL; 00156 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK; 00157 typedef ULONG_PTR KAFFINITY, *PKAFFINITY; 00158 typedef CCHAR KPROCESSOR_MODE; 00159 00160 typedef enum _MODE { 00161 KernelMode, 00162 UserMode, 00163 MaximumMode 00164 } MODE; 00165 00166 00167 /* Structures not exposed to drivers */ 00168 typedef struct _IO_TIMER *PIO_TIMER; 00169 typedef struct _EPROCESS *PEPROCESS; 00170 typedef struct _ETHREAD *PETHREAD; 00171 typedef struct _KINTERRUPT *PKINTERRUPT; 00172 typedef struct _OBJECT_TYPE *POBJECT_TYPE; 00173 typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD; 00174 typedef struct _COMPRESSED_DATA_INFO *PCOMPRESSED_DATA_INFO; 00175 typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE; 00176 typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE; 00177 typedef struct _DRIVE_LAYOUT_INFORMATION *PDRIVE_LAYOUT_INFORMATION; 00178 typedef struct _DRIVE_LAYOUT_INFORMATION_EX *PDRIVE_LAYOUT_INFORMATION_EX; 00179 00180 /* Constants */ 00181 #define MAXIMUM_PROCESSORS 32 00182 00183 #define MAXIMUM_WAIT_OBJECTS 64 00184 00185 #define METHOD_BUFFERED 0 00186 #define METHOD_IN_DIRECT 1 00187 #define METHOD_OUT_DIRECT 2 00188 #define METHOD_NEITHER 3 00189 00190 #define LOW_PRIORITY 0 00191 #define LOW_REALTIME_PRIORITY 16 00192 #define HIGH_PRIORITY 31 00193 #define MAXIMUM_PRIORITY 32 00194 00195 #define FILE_SUPERSEDED 0x00000000 00196 #define FILE_OPENED 0x00000001 00197 #define FILE_CREATED 0x00000002 00198 #define FILE_OVERWRITTEN 0x00000003 00199 #define FILE_EXISTS 0x00000004 00200 #define FILE_DOES_NOT_EXIST 0x00000005 00201 00202 /* also in winnt.h */ 00203 #define FILE_LIST_DIRECTORY 0x00000001 00204 #define FILE_READ_DATA 0x00000001 00205 #define FILE_ADD_FILE 0x00000002 00206 #define FILE_WRITE_DATA 0x00000002 00207 #define FILE_ADD_SUBDIRECTORY 0x00000004 00208 #define FILE_APPEND_DATA 0x00000004 00209 #define FILE_CREATE_PIPE_INSTANCE 0x00000004 00210 #define FILE_READ_EA 0x00000008 00211 #define FILE_WRITE_EA 0x00000010 00212 #define FILE_EXECUTE 0x00000020 00213 #define FILE_TRAVERSE 0x00000020 00214 #define FILE_DELETE_CHILD 0x00000040 00215 #define FILE_READ_ATTRIBUTES 0x00000080 00216 #define FILE_WRITE_ATTRIBUTES 0x00000100 00217 00218 #define FILE_SHARE_READ 0x00000001 00219 #define FILE_SHARE_WRITE 0x00000002 00220 #define FILE_SHARE_DELETE 0x00000004 00221 #define FILE_SHARE_VALID_FLAGS 0x00000007 00222 00223 #define FILE_ATTRIBUTE_READONLY 0x00000001 00224 #define FILE_ATTRIBUTE_HIDDEN 0x00000002 00225 #define FILE_ATTRIBUTE_SYSTEM 0x00000004 00226 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 00227 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 00228 #define FILE_ATTRIBUTE_DEVICE 0x00000040 00229 #define FILE_ATTRIBUTE_NORMAL 0x00000080 00230 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 00231 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 00232 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 00233 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 00234 #define FILE_ATTRIBUTE_OFFLINE 0x00001000 00235 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 00236 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 00237 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000 00238 00239 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00017fb7 00240 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 00241 00242 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041 00243 #define FILE_STRUCTURED_STORAGE 0x00000441 00244 00245 #define FILE_VALID_OPTION_FLAGS 0x00ffffff 00246 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 00247 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 00248 #define FILE_VALID_SET_FLAGS 0x00000036 00249 00250 #define FILE_SUPERSEDE 0x00000000 00251 #define FILE_OPEN 0x00000001 00252 #define FILE_CREATE 0x00000002 00253 #define FILE_OPEN_IF 0x00000003 00254 #define FILE_OVERWRITE 0x00000004 00255 #define FILE_OVERWRITE_IF 0x00000005 00256 #define FILE_MAXIMUM_DISPOSITION 0x00000005 00257 00258 #define FILE_DIRECTORY_FILE 0x00000001 00259 #define FILE_WRITE_THROUGH 0x00000002 00260 #define FILE_SEQUENTIAL_ONLY 0x00000004 00261 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 00262 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 00263 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 00264 #define FILE_NON_DIRECTORY_FILE 0x00000040 00265 #define FILE_CREATE_TREE_CONNECTION 0x00000080 00266 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 00267 #define FILE_NO_EA_KNOWLEDGE 0x00000200 00268 #define FILE_OPEN_FOR_RECOVERY 0x00000400 00269 #define FILE_RANDOM_ACCESS 0x00000800 00270 #define FILE_DELETE_ON_CLOSE 0x00001000 00271 #define FILE_OPEN_BY_FILE_ID 0x00002000 00272 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 00273 #define FILE_NO_COMPRESSION 0x00008000 00274 #define FILE_RESERVE_OPFILTER 0x00100000 00275 #define FILE_OPEN_REPARSE_POINT 0x00200000 00276 #define FILE_OPEN_NO_RECALL 0x00400000 00277 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 00278 00279 #define FILE_ANY_ACCESS 0x00000000 00280 #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS 00281 #define FILE_READ_ACCESS 0x00000001 00282 #define FILE_WRITE_ACCESS 0x00000002 00283 00284 #define FILE_ALL_ACCESS \ 00285 (STANDARD_RIGHTS_REQUIRED | \ 00286 SYNCHRONIZE | \ 00287 0x1FF) 00288 00289 #define FILE_GENERIC_EXECUTE \ 00290 (STANDARD_RIGHTS_EXECUTE | \ 00291 FILE_READ_ATTRIBUTES | \ 00292 FILE_EXECUTE | \ 00293 SYNCHRONIZE) 00294 00295 #define FILE_GENERIC_READ \ 00296 (STANDARD_RIGHTS_READ | \ 00297 FILE_READ_DATA | \ 00298 FILE_READ_ATTRIBUTES | \ 00299 FILE_READ_EA | \ 00300 SYNCHRONIZE) 00301 00302 #define FILE_GENERIC_WRITE \ 00303 (STANDARD_RIGHTS_WRITE | \ 00304 FILE_WRITE_DATA | \ 00305 FILE_WRITE_ATTRIBUTES | \ 00306 FILE_WRITE_EA | \ 00307 FILE_APPEND_DATA | \ 00308 SYNCHRONIZE) 00309 /* end winnt.h */ 00310 00311 #define DIRECTORY_QUERY (0x0001) 00312 #define DIRECTORY_TRAVERSE (0x0002) 00313 #define DIRECTORY_CREATE_OBJECT (0x0004) 00314 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008) 00315 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) 00316 00317 /* Exported object types */ 00318 extern NTOSAPI POBJECT_TYPE ExDesktopObjectType; 00319 extern NTOSAPI POBJECT_TYPE ExEventObjectType; 00320 extern NTOSAPI POBJECT_TYPE ExSemaphoreObjectType; 00321 extern NTOSAPI POBJECT_TYPE ExWindowStationObjectType; 00322 extern NTOSAPI POBJECT_TYPE IoAdapterObjectType; 00323 extern NTOSAPI ULONG IoDeviceHandlerObjectSize; 00324 extern NTOSAPI POBJECT_TYPE IoDeviceHandlerObjectType; 00325 extern NTOSAPI POBJECT_TYPE IoDeviceObjectType; 00326 extern NTOSAPI POBJECT_TYPE IoDriverObjectType; 00327 extern NTOSAPI POBJECT_TYPE IoFileObjectType; 00328 extern NTOSAPI POBJECT_TYPE LpcPortObjectType; 00329 extern NTOSAPI POBJECT_TYPE MmSectionObjectType; 00330 extern NTOSAPI POBJECT_TYPE SeTokenObjectType; 00331 00332 extern NTOSAPI CCHAR KeNumberProcessors; 00333 extern NTOSAPI PHAL_DISPATCH_TABLE HalDispatchTable; 00334 extern NTOSAPI PHAL_PRIVATE_DISPATCH_TABLE HalPrivateDispatchTable; 00335 00336 00337 /* 00338 ** IRP function codes 00339 */ 00340 00341 #define IRP_MJ_CREATE 0x00 00342 #define IRP_MJ_CREATE_NAMED_PIPE 0x01 00343 #define IRP_MJ_CLOSE 0x02 00344 #define IRP_MJ_READ 0x03 00345 #define IRP_MJ_WRITE 0x04 00346 #define IRP_MJ_QUERY_INFORMATION 0x05 00347 #define IRP_MJ_SET_INFORMATION 0x06 00348 #define IRP_MJ_QUERY_EA 0x07 00349 #define IRP_MJ_SET_EA 0x08 00350 #define IRP_MJ_FLUSH_BUFFERS 0x09 00351 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a 00352 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b 00353 #define IRP_MJ_DIRECTORY_CONTROL 0x0c 00354 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d 00355 #define IRP_MJ_DEVICE_CONTROL 0x0e 00356 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f 00357 #define IRP_MJ_SCSI 0x0f 00358 #define IRP_MJ_SHUTDOWN 0x10 00359 #define IRP_MJ_LOCK_CONTROL 0x11 00360 #define IRP_MJ_CLEANUP 0x12 00361 #define IRP_MJ_CREATE_MAILSLOT 0x13 00362 #define IRP_MJ_QUERY_SECURITY 0x14 00363 #define IRP_MJ_SET_SECURITY 0x15 00364 #define IRP_MJ_POWER 0x16 00365 #define IRP_MJ_SYSTEM_CONTROL 0x17 00366 #define IRP_MJ_DEVICE_CHANGE 0x18 00367 #define IRP_MJ_QUERY_QUOTA 0x19 00368 #define IRP_MJ_SET_QUOTA 0x1a 00369 #define IRP_MJ_PNP 0x1b 00370 #define IRP_MJ_PNP_POWER 0x1b 00371 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b 00372 00373 #define IRP_MN_QUERY_DIRECTORY 0x01 00374 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02 00375 00376 #define IRP_MN_USER_FS_REQUEST 0x00 00377 #define IRP_MN_MOUNT_VOLUME 0x01 00378 #define IRP_MN_VERIFY_VOLUME 0x02 00379 #define IRP_MN_LOAD_FILE_SYSTEM 0x03 00380 #define IRP_MN_TRACK_LINK 0x04 00381 #define IRP_MN_KERNEL_CALL 0x04 00382 00383 #define IRP_MN_LOCK 0x01 00384 #define IRP_MN_UNLOCK_SINGLE 0x02 00385 #define IRP_MN_UNLOCK_ALL 0x03 00386 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04 00387 00388 #define IRP_MN_NORMAL 0x00 00389 #define IRP_MN_DPC 0x01 00390 #define IRP_MN_MDL 0x02 00391 #define IRP_MN_COMPLETE 0x04 00392 #define IRP_MN_COMPRESSED 0x08 00393 00394 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC) 00395 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL) 00396 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC) 00397 00398 #define IRP_MN_SCSI_CLASS 0x01 00399 00400 #define IRP_MN_START_DEVICE 0x00 00401 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01 00402 #define IRP_MN_REMOVE_DEVICE 0x02 00403 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03 00404 #define IRP_MN_STOP_DEVICE 0x04 00405 #define IRP_MN_QUERY_STOP_DEVICE 0x05 00406 #define IRP_MN_CANCEL_STOP_DEVICE 0x06 00407 00408 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07 00409 #define IRP_MN_QUERY_INTERFACE 0x08 00410 #define IRP_MN_QUERY_CAPABILITIES 0x09 00411 #define IRP_MN_QUERY_RESOURCES 0x0A 00412 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B 00413 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C 00414 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D 00415 00416 #define IRP_MN_READ_CONFIG 0x0F 00417 #define IRP_MN_WRITE_CONFIG 0x10 00418 #define IRP_MN_EJECT 0x11 00419 #define IRP_MN_SET_LOCK 0x12 00420 #define IRP_MN_QUERY_ID 0x13 00421 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14 00422 #define IRP_MN_QUERY_BUS_INFORMATION 0x15 00423 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 00424 #define IRP_MN_SURPRISE_REMOVAL 0x17 00425 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 00426 00427 #define IRP_MN_WAIT_WAKE 0x00 00428 #define IRP_MN_POWER_SEQUENCE 0x01 00429 #define IRP_MN_SET_POWER 0x02 00430 #define IRP_MN_QUERY_POWER 0x03 00431 00432 #define IRP_MN_QUERY_ALL_DATA 0x00 00433 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01 00434 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02 00435 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03 00436 #define IRP_MN_ENABLE_EVENTS 0x04 00437 #define IRP_MN_DISABLE_EVENTS 0x05 00438 #define IRP_MN_ENABLE_COLLECTION 0x06 00439 #define IRP_MN_DISABLE_COLLECTION 0x07 00440 #define IRP_MN_REGINFO 0x08 00441 #define IRP_MN_EXECUTE_METHOD 0x09 00442 00443 #define IRP_MN_REGINFO_EX 0x0b 00444 00445 typedef enum _IO_ALLOCATION_ACTION { 00446 KeepObject = 1, 00447 DeallocateObject, 00448 DeallocateObjectKeepRegisters 00449 } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION; 00450 00451 typedef IO_ALLOCATION_ACTION 00452 (DDKAPI *PDRIVER_CONTROL)( 00453 /*IN*/ struct _DEVICE_OBJECT *DeviceObject, 00454 /*IN*/ struct _IRP *Irp, 00455 /*IN*/ PVOID MapRegisterBase, 00456 /*IN*/ PVOID Context); 00457 00458 typedef VOID 00459 (DDKAPI *PDRIVER_LIST_CONTROL)( 00460 /*IN*/ struct _DEVICE_OBJECT *DeviceObject, 00461 /*IN*/ struct _IRP *Irp, 00462 /*IN*/ struct _SCATTER_GATHER_LIST *ScatterGather, 00463 /*IN*/ PVOID Context); 00464 00465 typedef NTSTATUS 00466 (DDKAPI *PDRIVER_ADD_DEVICE)( 00467 /*IN*/ struct _DRIVER_OBJECT *DriverObject, 00468 /*IN*/ struct _DEVICE_OBJECT *PhysicalDeviceObject); 00469 00470 typedef NTSTATUS 00471 (DDKAPI *PIO_COMPLETION_ROUTINE)( 00472 /*IN*/ struct _DEVICE_OBJECT *DeviceObject, 00473 /*IN*/ struct _IRP *Irp, 00474 /*IN*/ PVOID Context); 00475 00476 typedef VOID 00477 (DDKAPI *PDRIVER_CANCEL)( 00478 /*IN*/ struct _DEVICE_OBJECT *DeviceObject, 00479 /*IN*/ struct _IRP *Irp); 00480 00481 typedef VOID 00482 (DDKAPI *PKDEFERRED_ROUTINE)( 00483 /*IN*/ struct _KDPC *Dpc, 00484 /*IN*/ PVOID DeferredContext, 00485 /*IN*/ PVOID SystemArgument1, 00486 /*IN*/ PVOID SystemArgument2); 00487 00488 typedef NTSTATUS 00489 (DDKAPI *PDRIVER_DISPATCH)( 00490 /*IN*/ struct _DEVICE_OBJECT *DeviceObject, 00491 /*IN*/ struct _IRP *Irp); 00492 00493 typedef VOID 00494 (DDKAPI *PIO_DPC_ROUTINE)( 00495 /*IN*/ struct _KDPC *Dpc, 00496 /*IN*/ struct _DEVICE_OBJECT *DeviceObject, 00497 /*IN*/ struct _IRP *Irp, 00498 /*IN*/ PVOID Context); 00499 00500 typedef NTSTATUS 00501 (DDKAPI *PMM_DLL_INITIALIZE)( 00502 /*IN*/ PUNICODE_STRING RegistryPath); 00503 00504 typedef NTSTATUS 00505 (DDKAPI *PMM_DLL_UNLOAD)( 00506 VOID); 00507 00508 typedef NTSTATUS 00509 (DDKAPI *PDRIVER_ENTRY)( 00510 /*IN*/ struct _DRIVER_OBJECT *DriverObject, 00511 /*IN*/ PUNICODE_STRING RegistryPath); 00512 00513 typedef NTSTATUS 00514 (DDKAPI *PDRIVER_INITIALIZE)( 00515 /*IN*/ struct _DRIVER_OBJECT *DriverObject, 00516 /*IN*/ PUNICODE_STRING RegistryPath); 00517 00518 typedef BOOLEAN 00519 (DDKAPI *PKSERVICE_ROUTINE)( 00520 /*IN*/ struct _KINTERRUPT *Interrupt, 00521 /*IN*/ PVOID ServiceContext); 00522 00523 typedef VOID 00524 (DDKAPI *PIO_TIMER_ROUTINE)( 00525 /*IN*/ struct _DEVICE_OBJECT *DeviceObject, 00526 /*IN*/ PVOID Context); 00527 00528 typedef VOID 00529 (DDKAPI *PDRIVER_REINITIALIZE)( 00530 /*IN*/ struct _DRIVER_OBJECT *DriverObject, 00531 /*IN*/ PVOID Context, 00532 /*IN*/ ULONG Count); 00533 00534 typedef NTSTATUS 00535 (DDKAPI *PDRIVER_STARTIO)( 00536 /*IN*/ struct _DEVICE_OBJECT *DeviceObject, 00537 /*IN*/ struct _IRP *Irp); 00538 00539 typedef BOOLEAN 00540 (DDKAPI *PKSYNCHRONIZE_ROUTINE)( 00541 /*IN*/ PVOID SynchronizeContext); 00542 00543 typedef VOID 00544 (DDKAPI *PDRIVER_UNLOAD)( 00545 /*IN*/ struct _DRIVER_OBJECT *DriverObject); 00546 00547 00548 00549 /* 00550 ** Plug and Play structures 00551 */ 00552 00553 typedef VOID DDKAPI 00554 (*PINTERFACE_REFERENCE)( 00555 PVOID Context); 00556 00557 typedef VOID DDKAPI 00558 (*PINTERFACE_DEREFERENCE)( 00559 PVOID Context); 00560 00561 typedef BOOLEAN DDKAPI 00562 (*PTRANSLATE_BUS_ADDRESS)( 00563 /*IN*/ PVOID Context, 00564 /*IN*/ PHYSICAL_ADDRESS BusAddress, 00565 /*IN*/ ULONG Length, 00566 /*IN OUT*/ PULONG AddressSpace, 00567 /*OUT*/ PPHYSICAL_ADDRESS TranslatedAddress); 00568 00569 typedef struct _DMA_ADAPTER* DDKAPI 00570 (*PGET_DMA_ADAPTER)( 00571 /*IN*/ PVOID Context, 00572 /*IN*/ struct _DEVICE_DESCRIPTION *DeviceDescriptor, 00573 /*OUT*/ PULONG NumberOfMapRegisters); 00574 00575 typedef ULONG DDKAPI 00576 (*PGET_SET_DEVICE_DATA)( 00577 /*IN*/ PVOID Context, 00578 /*IN*/ ULONG DataType, 00579 /*IN*/ PVOID Buffer, 00580 /*IN*/ ULONG Offset, 00581 /*IN*/ ULONG Length); 00582 00583 typedef union _POWER_STATE { 00584 SYSTEM_POWER_STATE SystemState; 00585 DEVICE_POWER_STATE DeviceState; 00586 } POWER_STATE, *PPOWER_STATE; 00587 00588 typedef enum _POWER_STATE_TYPE { 00589 SystemPowerState, 00590 DevicePowerState 00591 } POWER_STATE_TYPE, *PPOWER_STATE_TYPE; 00592 00593 typedef struct _BUS_INTERFACE_STANDARD { 00594 USHORT Size; 00595 USHORT Version; 00596 PVOID Context; 00597 PINTERFACE_REFERENCE InterfaceReference; 00598 PINTERFACE_DEREFERENCE InterfaceDereference; 00599 PTRANSLATE_BUS_ADDRESS TranslateBusAddress; 00600 PGET_DMA_ADAPTER GetDmaAdapter; 00601 PGET_SET_DEVICE_DATA SetBusData; 00602 PGET_SET_DEVICE_DATA GetBusData; 00603 } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD; 00604 00605 typedef struct _DEVICE_CAPABILITIES { 00606 USHORT Size; 00607 USHORT Version; 00608 ULONG DeviceD1 : 1; 00609 ULONG DeviceD2 : 1; 00610 ULONG LockSupported : 1; 00611 ULONG EjectSupported : 1; 00612 ULONG Removable : 1; 00613 ULONG DockDevice : 1; 00614 ULONG UniqueID : 1; 00615 ULONG SilentInstall : 1; 00616 ULONG RawDeviceOK : 1; 00617 ULONG SurpriseRemovalOK : 1; 00618 ULONG WakeFromD0 : 1; 00619 ULONG WakeFromD1 : 1; 00620 ULONG WakeFromD2 : 1; 00621 ULONG WakeFromD3 : 1; 00622 ULONG HardwareDisabled : 1; 00623 ULONG NonDynamic : 1; 00624 ULONG WarmEjectSupported : 1; 00625 ULONG NoDisplayInUI : 1; 00626 ULONG Reserved : 14; 00627 ULONG Address; 00628 ULONG UINumber; 00629 DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; 00630 SYSTEM_POWER_STATE SystemWake; 00631 DEVICE_POWER_STATE DeviceWake; 00632 ULONG D1Latency; 00633 ULONG D2Latency; 00634 ULONG D3Latency; 00635 } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES; 00636 00637 typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION { 00638 USHORT Version; 00639 USHORT Size; 00640 GUID Event; 00641 GUID InterfaceClassGuid; 00642 PUNICODE_STRING SymbolicLinkName; 00643 } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION; 00644 00645 typedef struct _HWPROFILE_CHANGE_NOTIFICATION { 00646 USHORT Version; 00647 USHORT Size; 00648 GUID Event; 00649 } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION; 00650 00651 #undef INTERFACE 00652 00653 typedef struct _INTERFACE { 00654 USHORT Size; 00655 USHORT Version; 00656 PVOID Context; 00657 PINTERFACE_REFERENCE InterfaceReference; 00658 PINTERFACE_DEREFERENCE InterfaceDereference; 00659 } INTERFACE, *PINTERFACE; 00660 00661 typedef struct _PLUGPLAY_NOTIFICATION_HEADER { 00662 USHORT Version; 00663 USHORT Size; 00664 GUID Event; 00665 } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER; 00666 00667 typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE; 00668 00669 /* PNP_DEVICE_STATE */ 00670 00671 #define PNP_DEVICE_DISABLED 0x00000001 00672 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002 00673 #define PNP_DEVICE_FAILED 0x00000004 00674 #define PNP_DEVICE_REMOVED 0x00000008 00675 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010 00676 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020 00677 00678 typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION { 00679 USHORT Version; 00680 USHORT Size; 00681 GUID Event; 00682 struct _FILE_OBJECT *FileObject; 00683 LONG NameBufferOffset; 00684 UCHAR CustomDataBuffer[1]; 00685 } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION; 00686 00687 typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION { 00688 USHORT Version; 00689 USHORT Size; 00690 GUID Event; 00691 struct _FILE_OBJECT *FileObject; 00692 } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION; 00693 00694 typedef enum _BUS_QUERY_ID_TYPE { 00695 BusQueryDeviceID, 00696 BusQueryHardwareIDs, 00697 BusQueryCompatibleIDs, 00698 BusQueryInstanceID, 00699 BusQueryDeviceSerialNumber 00700 } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE; 00701 00702 typedef enum _DEVICE_TEXT_TYPE { 00703 DeviceTextDescription, 00704 DeviceTextLocationInformation 00705 } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE; 00706 00707 typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { 00708 DeviceUsageTypeUndefined, 00709 DeviceUsageTypePaging, 00710 DeviceUsageTypeHibernation, 00711 DeviceUsageTypeDumpFile 00712 } DEVICE_USAGE_NOTIFICATION_TYPE; 00713 00714 typedef struct _POWER_SEQUENCE { 00715 ULONG SequenceD1; 00716 ULONG SequenceD2; 00717 ULONG SequenceD3; 00718 } POWER_SEQUENCE, *PPOWER_SEQUENCE; 00719 00720 typedef enum { 00721 DevicePropertyDeviceDescription, 00722 DevicePropertyHardwareID, 00723 DevicePropertyCompatibleIDs, 00724 DevicePropertyBootConfiguration, 00725 DevicePropertyBootConfigurationTranslated, 00726 DevicePropertyClassName, 00727 DevicePropertyClassGuid, 00728 DevicePropertyDriverKeyName, 00729 DevicePropertyManufacturer, 00730 DevicePropertyFriendlyName, 00731 DevicePropertyLocationInformation, 00732 DevicePropertyPhysicalDeviceObjectName, 00733 DevicePropertyBusTypeGuid, 00734 DevicePropertyLegacyBusType, 00735 DevicePropertyBusNumber, 00736 DevicePropertyEnumeratorName, 00737 DevicePropertyAddress, 00738 DevicePropertyUINumber, 00739 DevicePropertyInstallState, 00740 DevicePropertyRemovalPolicy 00741 } DEVICE_REGISTRY_PROPERTY; 00742 00743 typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { 00744 EventCategoryReserved, 00745 EventCategoryHardwareProfileChange, 00746 EventCategoryDeviceInterfaceChange, 00747 EventCategoryTargetDeviceChange 00748 } IO_NOTIFICATION_EVENT_CATEGORY; 00749 00750 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001 00751 00752 typedef NTSTATUS DDKAPI 00753 (*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)( 00754 /*IN*/ PVOID NotificationStructure, 00755 /*IN*/ PVOID Context); 00756 00757 typedef VOID DDKAPI 00758 (*PDEVICE_CHANGE_COMPLETE_CALLBACK)( 00759 /*IN*/ PVOID Context); 00760 00761 00762 00763 /* 00764 ** System structures 00765 */ 00766 00767 #define SYMBOLIC_LINK_QUERY 0x0001 00768 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) 00769 00770 /* also in winnt,h */ 00771 #define DUPLICATE_CLOSE_SOURCE 0x00000001 00772 #define DUPLICATE_SAME_ACCESS 0x00000002 00773 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004 00774 /* end winnt.h */ 00775 00776 typedef struct _OBJECT_NAME_INFORMATION { 00777 UNICODE_STRING Name; 00778 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; 00779 00780 typedef VOID DDKAPI 00781 (*PIO_APC_ROUTINE)( 00782 /*IN*/ PVOID ApcContext, 00783 /*IN*/ PIO_STATUS_BLOCK IoStatusBlock, 00784 /*IN*/ ULONG Reserved); 00785 00786 typedef struct _IO_STATUS_BLOCK { 00787 _ANONYMOUS_UNION union { 00788 NTSTATUS Status; 00789 PVOID Pointer; 00790 } DUMMYUNIONNAME; 00791 ULONG_PTR Information; 00792 } IO_STATUS_BLOCK; 00793 00794 typedef VOID DDKAPI 00795 (*PKNORMAL_ROUTINE)( 00796 /*IN*/ PVOID NormalContext, 00797 /*IN*/ PVOID SystemArgument1, 00798 /*IN*/ PVOID SystemArgument2); 00799 00800 typedef VOID DDKAPI 00801 (*PKKERNEL_ROUTINE)( 00802 /*IN*/ struct _KAPC *Apc, 00803 /*IN OUT*/ PKNORMAL_ROUTINE *NormalRoutine, 00804 /*IN OUT*/ PVOID *NormalContext, 00805 /*IN OUT*/ PVOID *SystemArgument1, 00806 /*IN OUT*/ PVOID *SystemArgument2); 00807 00808 typedef VOID DDKAPI 00809 (*PKRUNDOWN_ROUTINE)( 00810 /*IN*/ struct _KAPC *Apc); 00811 00812 typedef BOOLEAN DDKAPI 00813 (*PKTRANSFER_ROUTINE)( 00814 VOID); 00815 00816 typedef struct _KAPC { 00817 CSHORT Type; 00818 CSHORT Size; 00819 ULONG Spare0; 00820 struct _KTHREAD *Thread; 00821 LIST_ENTRY ApcListEntry; 00822 PKKERNEL_ROUTINE KernelRoutine; 00823 PKRUNDOWN_ROUTINE RundownRoutine; 00824 PKNORMAL_ROUTINE NormalRoutine; 00825 PVOID NormalContext; 00826 PVOID SystemArgument1; 00827 PVOID SystemArgument2; 00828 CCHAR ApcStateIndex; 00829 KPROCESSOR_MODE ApcMode; 00830 BOOLEAN Inserted; 00831 } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC; 00832 00833 typedef struct _KDEVICE_QUEUE { 00834 CSHORT Type; 00835 CSHORT Size; 00836 LIST_ENTRY DeviceListHead; 00837 KSPIN_LOCK Lock; 00838 BOOLEAN Busy; 00839 } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; 00840 00841 typedef struct _KDEVICE_QUEUE_ENTRY { 00842 LIST_ENTRY DeviceListEntry; 00843 ULONG SortKey; 00844 BOOLEAN Inserted; 00845 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY, 00846 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY; 00847 00848 #define LOCK_QUEUE_WAIT 1 00849 #define LOCK_QUEUE_OWNER 2 00850 00851 typedef enum _KSPIN_LOCK_QUEUE_NUMBER { 00852 LockQueueDispatcherLock, 00853 LockQueueContextSwapLock, 00854 LockQueuePfnLock, 00855 LockQueueSystemSpaceLock, 00856 LockQueueVacbLock, 00857 LockQueueMasterLock, 00858 LockQueueNonPagedPoolLock, 00859 LockQueueIoCancelLock, 00860 LockQueueWorkQueueLock, 00861 LockQueueIoVpbLock, 00862 LockQueueIoDatabaseLock, 00863 LockQueueIoCompletionLock, 00864 LockQueueNtfsStructLock, 00865 LockQueueAfdWorkQueueLock, 00866 LockQueueBcbLock, 00867 LockQueueMaximumLock 00868 } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER; 00869 00870 typedef struct _KSPIN_LOCK_QUEUE { 00871 struct _KSPIN_LOCK_QUEUE *VOLATILE Next; 00872 PKSPIN_LOCK VOLATILE Lock; 00873 } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE; 00874 00875 typedef struct _KLOCK_QUEUE_HANDLE { 00876 KSPIN_LOCK_QUEUE LockQueue; 00877 KIRQL OldIrql; 00878 } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE; 00879 00880 typedef struct _KDPC { 00881 CSHORT Type; 00882 UCHAR Number; 00883 UCHAR Importance; 00884 LIST_ENTRY DpcListEntry; 00885 PKDEFERRED_ROUTINE DeferredRoutine; 00886 PVOID DeferredContext; 00887 PVOID SystemArgument1; 00888 PVOID SystemArgument2; 00889 PULONG_PTR Lock; 00890 } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC; 00891 00892 typedef struct _WAIT_CONTEXT_BLOCK { 00893 KDEVICE_QUEUE_ENTRY WaitQueueEntry; 00894 struct _DRIVER_CONTROL *DeviceRoutine; 00895 PVOID DeviceContext; 00896 ULONG NumberOfMapRegisters; 00897 PVOID DeviceObject; 00898 PVOID CurrentIrp; 00899 PKDPC BufferChainingDpc; 00900 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK; 00901 00902 typedef struct _DISPATCHER_HEADER { 00903 UCHAR Type; 00904 UCHAR Absolute; 00905 UCHAR Size; 00906 UCHAR Inserted; 00907 LONG SignalState; 00908 LIST_ENTRY WaitListHead; 00909 } DISPATCHER_HEADER, *PDISPATCHER_HEADER; 00910 00911 typedef struct _KEVENT { 00912 DISPATCHER_HEADER Header; 00913 } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT; 00914 00915 typedef struct _KSEMAPHORE { 00916 DISPATCHER_HEADER Header; 00917 LONG Limit; 00918 } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE; 00919 00920 typedef struct _FAST_MUTEX { 00921 LONG Count; 00922 struct _KTHREAD *Owner; 00923 ULONG Contention; 00924 KEVENT Event; 00925 ULONG OldIrql; 00926 } FAST_MUTEX, *PFAST_MUTEX; 00927 00928 typedef struct _KTIMER { 00929 DISPATCHER_HEADER Header; 00930 ULARGE_INTEGER DueTime; 00931 LIST_ENTRY TimerListEntry; 00932 struct _KDPC *Dpc; 00933 LONG Period; 00934 } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER; 00935 00936 typedef struct _KMUTANT { 00937 DISPATCHER_HEADER Header; 00938 LIST_ENTRY MutantListEntry; 00939 struct _KTHREAD *RESTRICTED_POINTER OwnerThread; 00940 BOOLEAN Abandoned; 00941 UCHAR ApcDisable; 00942 } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX; 00943 00944 typedef enum _TIMER_TYPE { 00945 NotificationTimer, 00946 SynchronizationTimer 00947 } TIMER_TYPE; 00948 00949 #define EVENT_INCREMENT 1 00950 #define IO_NO_INCREMENT 0 00951 #define IO_CD_ROM_INCREMENT 1 00952 #define IO_DISK_INCREMENT 1 00953 #define IO_KEYBOARD_INCREMENT 6 00954 #define IO_MAILSLOT_INCREMENT 2 00955 #define IO_MOUSE_INCREMENT 6 00956 #define IO_NAMED_PIPE_INCREMENT 2 00957 #define IO_NETWORK_INCREMENT 2 00958 #define IO_PARALLEL_INCREMENT 1 00959 #define IO_SERIAL_INCREMENT 2 00960 #define IO_SOUND_INCREMENT 8 00961 #define IO_VIDEO_INCREMENT 1 00962 #define SEMAPHORE_INCREMENT 1 00963 00964 typedef struct _IRP { 00965 CSHORT Type; 00966 USHORT Size; 00967 struct _MDL *MdlAddress; 00968 ULONG Flags; 00969 union { 00970 struct _IRP *MasterIrp; 00971 LONG IrpCount; 00972 PVOID SystemBuffer; 00973 } AssociatedIrp; 00974 LIST_ENTRY ThreadListEntry; 00975 IO_STATUS_BLOCK IoStatus; 00976 KPROCESSOR_MODE RequestorMode; 00977 BOOLEAN PendingReturned; 00978 CHAR StackCount; 00979 CHAR CurrentLocation; 00980 BOOLEAN Cancel; 00981 KIRQL CancelIrql; 00982 CCHAR ApcEnvironment; 00983 UCHAR AllocationFlags; 00984 PIO_STATUS_BLOCK UserIosb; 00985 PKEVENT UserEvent; 00986 union { 00987 struct { 00988 PIO_APC_ROUTINE UserApcRoutine; 00989 PVOID UserApcContext; 00990 } AsynchronousParameters; 00991 LARGE_INTEGER AllocationSize; 00992 } Overlay; 00993 PDRIVER_CANCEL CancelRoutine; 00994 PVOID UserBuffer; 00995 union { 00996 struct { 00997 _ANONYMOUS_UNION union { 00998 KDEVICE_QUEUE_ENTRY DeviceQueueEntry; 00999 _ANONYMOUS_STRUCT struct { 01000 PVOID DriverContext[4]; 01001 } DUMMYSTRUCTNAME; 01002 } DUMMYUNIONNAME; 01003 PETHREAD Thread; 01004 PCHAR AuxiliaryBuffer; 01005 _ANONYMOUS_STRUCT struct { 01006 LIST_ENTRY ListEntry; 01007 _ANONYMOUS_UNION union { 01008 struct _IO_STACK_LOCATION *CurrentStackLocation; 01009 ULONG PacketType; 01010 } DUMMYUNIONNAME; 01011 } DUMMYSTRUCTNAME; 01012 struct _FILE_OBJECT *OriginalFileObject; 01013 } Overlay; 01014 KAPC Apc; 01015 PVOID CompletionKey; 01016 } Tail; 01017 } IRP; 01018 typedef struct _IRP *PIRP; 01019 01020 /* IRP.Flags */ 01021 01022 #define SL_FORCE_ACCESS_CHECK 0x01 01023 #define SL_OPEN_PAGING_FILE 0x02 01024 #define SL_OPEN_TARGET_DIRECTORY 0x04 01025 #define SL_CASE_SENSITIVE 0x80 01026 01027 #define SL_KEY_SPECIFIED 0x01 01028 #define SL_OVERRIDE_VERIFY_VOLUME 0x02 01029 #define SL_WRITE_THROUGH 0x04 01030 #define SL_FT_SEQUENTIAL_WRITE 0x08 01031 01032 #define SL_FAIL_IMMEDIATELY 0x01 01033 #define SL_EXCLUSIVE_LOCK 0x02 01034 01035 #define SL_RESTART_SCAN 0x01 01036 #define SL_RETURN_SINGLE_ENTRY 0x02 01037 #define SL_INDEX_SPECIFIED 0x04 01038 01039 #define SL_WATCH_TREE 0x01 01040 01041 #define SL_ALLOW_RAW_MOUNT 0x01 01042 01043 #define CTL_CODE(DeviceType, Function, Method, Access)( \ 01044 ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) 01045 01046 #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16) 01047 01048 enum 01049 { 01050 IRP_NOCACHE = 0x1, 01051 IRP_PAGING_IO = 0x2, 01052 IRP_MOUNT_COMPLETION = 0x2, 01053 IRP_SYNCHRONOUS_API = 0x4, 01054 IRP_ASSOCIATED_IRP = 0x8, 01055 IRP_BUFFERED_IO = 0x10, 01056 IRP_DEALLOCATE_BUFFER = 0x20, 01057 IRP_INPUT_OPERATION = 0x40, 01058 IRP_SYNCHRONOUS_PAGING_IO = 0x40, 01059 IRP_CREATE_OPERATION = 0x80, 01060 IRP_READ_OPERATION = 0x100, 01061 IRP_WRITE_OPERATION = 0x200, 01062 IRP_CLOSE_OPERATION = 0x400, 01063 IRP_DEFER_IO_COMPLETION = 0x800, 01064 IRP_OB_QUERY_NAME = 0x1000, 01065 IRP_HOLD_DEVICE_QUEUE = 0x2000, 01066 IRP_RETRY_IO_COMPLETION = 0x4000 01067 }; 01068 01069 01070 typedef struct _DRIVE_LAYOUT_INFORMATION_MBR { 01071 ULONG Signature; 01072 } DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR; 01073 01074 typedef struct _DRIVE_LAYOUT_INFORMATION_GPT { 01075 GUID DiskId; 01076 LARGE_INTEGER StartingUsableOffset; 01077 LARGE_INTEGER UsableLength; 01078 ULONG MaxPartitionCount; 01079 } DRIVE_LAYOUT_INFORMATION_GPT, *PDRIVE_LAYOUT_INFORMATION_GPT; 01080 01081 typedef struct _PARTITION_INFORMATION_MBR { 01082 UCHAR PartitionType; 01083 BOOLEAN BootIndicator; 01084 BOOLEAN RecognizedPartition; 01085 ULONG HiddenSectors; 01086 } PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR; 01087 01088 01089 typedef struct _BOOTDISK_INFORMATION { 01090 LONGLONG BootPartitionOffset; 01091 LONGLONG SystemPartitionOffset; 01092 ULONG BootDeviceSignature; 01093 ULONG SystemDeviceSignature; 01094 } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION; 01095 01096 typedef struct _BOOTDISK_INFORMATION_EX { 01097 LONGLONG BootPartitionOffset; 01098 LONGLONG SystemPartitionOffset; 01099 ULONG BootDeviceSignature; 01100 ULONG SystemDeviceSignature; 01101 GUID BootDeviceGuid; 01102 GUID SystemDeviceGuid; 01103 BOOLEAN BootDeviceIsGpt; 01104 BOOLEAN SystemDeviceIsGpt; 01105 } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX; 01106 01107 typedef struct _EISA_MEMORY_TYPE { 01108 UCHAR ReadWrite : 1; 01109 UCHAR Cached : 1; 01110 UCHAR Reserved0 : 1; 01111 UCHAR Type : 2; 01112 UCHAR Shared : 1; 01113 UCHAR Reserved1 : 1; 01114 UCHAR MoreEntries : 1; 01115 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE; 01116 01117 #include <pshpack1.h> 01118 typedef struct _EISA_MEMORY_CONFIGURATION { 01119 EISA_MEMORY_TYPE ConfigurationByte; 01120 UCHAR DataSize; 01121 USHORT AddressLowWord; 01122 UCHAR AddressHighByte; 01123 USHORT MemorySize; 01124 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION; 01125 #include <poppack.h> 01126 01127 typedef struct _EISA_IRQ_DESCRIPTOR { 01128 UCHAR Interrupt : 4; 01129 UCHAR Reserved : 1; 01130 UCHAR LevelTriggered : 1; 01131 UCHAR Shared : 1; 01132 UCHAR MoreEntries : 1; 01133 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR; 01134 01135 typedef struct _EISA_IRQ_CONFIGURATION { 01136 EISA_IRQ_DESCRIPTOR ConfigurationByte; 01137 UCHAR Reserved; 01138 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION; 01139 01140 typedef struct _DMA_CONFIGURATION_BYTE0 { 01141 UCHAR Channel : 3; 01142 UCHAR Reserved : 3; 01143 UCHAR Shared : 1; 01144 UCHAR MoreEntries : 1; 01145 } DMA_CONFIGURATION_BYTE0; 01146 01147 typedef struct _DMA_CONFIGURATION_BYTE1 { 01148 UCHAR Reserved0 : 2; 01149 UCHAR TransferSize : 2; 01150 UCHAR Timing : 2; 01151 UCHAR Reserved1 : 2; 01152 } DMA_CONFIGURATION_BYTE1; 01153 01154 typedef struct _EISA_DMA_CONFIGURATION { 01155 DMA_CONFIGURATION_BYTE0 ConfigurationByte0; 01156 DMA_CONFIGURATION_BYTE1 ConfigurationByte1; 01157 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION; 01158 01159 #include <pshpack1.h> 01160 typedef struct _EISA_PORT_DESCRIPTOR { 01161 UCHAR NumberPorts : 5; 01162 UCHAR Reserved : 1; 01163 UCHAR Shared : 1; 01164 UCHAR MoreEntries : 1; 01165 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR; 01166 01167 typedef struct _EISA_PORT_CONFIGURATION { 01168 EISA_PORT_DESCRIPTOR Configuration; 01169 USHORT PortAddress; 01170 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION; 01171 #include <poppack.h> 01172 01173 typedef struct _CM_EISA_FUNCTION_INFORMATION { 01174 ULONG CompressedId; 01175 UCHAR IdSlotFlags1; 01176 UCHAR IdSlotFlags2; 01177 UCHAR MinorRevision; 01178 UCHAR MajorRevision; 01179 UCHAR Selections[26]; 01180 UCHAR FunctionFlags; 01181 UCHAR TypeString[80]; 01182 EISA_MEMORY_CONFIGURATION EisaMemory[9]; 01183 EISA_IRQ_CONFIGURATION EisaIrq[7]; 01184 EISA_DMA_CONFIGURATION EisaDma[4]; 01185 EISA_PORT_CONFIGURATION EisaPort[20]; 01186 UCHAR InitializationData[60]; 01187 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION; 01188 01189 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */ 01190 01191 #define EISA_FUNCTION_ENABLED 0x80 01192 #define EISA_FREE_FORM_DATA 0x40 01193 #define EISA_HAS_PORT_INIT_ENTRY 0x20 01194 #define EISA_HAS_PORT_RANGE 0x10 01195 #define EISA_HAS_DMA_ENTRY 0x08 01196 #define EISA_HAS_IRQ_ENTRY 0x04 01197 #define EISA_HAS_MEMORY_ENTRY 0x02 01198 #define EISA_HAS_TYPE_ENTRY 0x01 01199 #define EISA_HAS_INFORMATION \ 01200 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \ 01201 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY) 01202 01203 typedef struct _CM_EISA_SLOT_INFORMATION { 01204 UCHAR ReturnCode; 01205 UCHAR ReturnFlags; 01206 UCHAR MajorRevision; 01207 UCHAR MinorRevision; 01208 USHORT Checksum; 01209 UCHAR NumberFunctions; 01210 UCHAR FunctionInformation; 01211 ULONG CompressedId; 01212 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION; 01213 01214 /* CM_EISA_SLOT_INFORMATION.ReturnCode */ 01215 01216 #define EISA_INVALID_SLOT 0x80 01217 #define EISA_INVALID_FUNCTION 0x81 01218 #define EISA_INVALID_CONFIGURATION 0x82 01219 #define EISA_EMPTY_SLOT 0x83 01220 #define EISA_INVALID_BIOS_CALL 0x86 01221 01222 typedef struct _CM_FLOPPY_DEVICE_DATA { 01223 USHORT Version; 01224 USHORT Revision; 01225 CHAR Size[8]; 01226 ULONG MaxDensity; 01227 ULONG MountDensity; 01228 UCHAR StepRateHeadUnloadTime; 01229 UCHAR HeadLoadTime; 01230 UCHAR MotorOffTime; 01231 UCHAR SectorLengthCode; 01232 UCHAR SectorPerTrack; 01233 UCHAR ReadWriteGapLength; 01234 UCHAR DataTransferLength; 01235 UCHAR FormatGapLength; 01236 UCHAR FormatFillCharacter; 01237 UCHAR HeadSettleTime; 01238 UCHAR MotorSettleTime; 01239 UCHAR MaximumTrackValue; 01240 UCHAR DataTransferRate; 01241 } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA; 01242 01243 typedef enum _INTERFACE_TYPE { 01244 InterfaceTypeUndefined = -1, 01245 Internal, 01246 Isa, 01247 Eisa, 01248 MicroChannel, 01249 TurboChannel, 01250 PCIBus, 01251 VMEBus, 01252 NuBus, 01253 PCMCIABus, 01254 CBus, 01255 MPIBus, 01256 MPSABus, 01257 ProcessorInternal, 01258 InternalPowerBus, 01259 PNPISABus, 01260 PNPBus, 01261 MaximumInterfaceType 01262 } INTERFACE_TYPE, *PINTERFACE_TYPE; 01263 01264 typedef struct _PNP_BUS_INFORMATION { 01265 GUID BusTypeGuid; 01266 INTERFACE_TYPE LegacyBusType; 01267 ULONG BusNumber; 01268 } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION; 01269 01270 #include <pshpack1.h> 01271 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { 01272 UCHAR Type; 01273 UCHAR ShareDisposition; 01274 USHORT Flags; 01275 union { 01276 struct { 01277 PHYSICAL_ADDRESS Start; 01278 ULONG Length; 01279 } Generic; 01280 struct { 01281 PHYSICAL_ADDRESS Start; 01282 ULONG Length; 01283 } Port; 01284 struct { 01285 ULONG Level; 01286 ULONG Vector; 01287 ULONG Affinity; 01288 } Interrupt; 01289 struct { 01290 PHYSICAL_ADDRESS Start; 01291 ULONG Length; 01292 } Memory; 01293 struct { 01294 ULONG Channel; 01295 ULONG Port; 01296 ULONG Reserved1; 01297 } Dma; 01298 struct { 01299 ULONG Data[3]; 01300 } DevicePrivate; 01301 struct { 01302 ULONG Start; 01303 ULONG Length; 01304 ULONG Reserved; 01305 } BusNumber; 01306 struct { 01307 ULONG DataSize; 01308 ULONG Reserved1; 01309 ULONG Reserved2; 01310 } DeviceSpecificData; 01311 } u; 01312 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR; 01313 01314 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */ 01315 01316 #define CmResourceTypeNull 0 01317 #define CmResourceTypePort 1 01318 #define CmResourceTypeInterrupt 2 01319 #define CmResourceTypeMemory 3 01320 #define CmResourceTypeDma 4 01321 #define CmResourceTypeDeviceSpecific 5 01322 #define CmResourceTypeBusNumber 6 01323 #define CmResourceTypeMaximum 7 01324 #define CmResourceTypeNonArbitrated 128 01325 #define CmResourceTypeConfigData 128 01326 #define CmResourceTypeDevicePrivate 129 01327 #define CmResourceTypePcCardConfig 130 01328 #define CmResourceTypeMfCardConfig 131 01329 01330 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */ 01331 01332 typedef enum _CM_SHARE_DISPOSITION { 01333 CmResourceShareUndetermined, 01334 CmResourceShareDeviceExclusive, 01335 CmResourceShareDriverExclusive, 01336 CmResourceShareShared 01337 } CM_SHARE_DISPOSITION; 01338 01339 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */ 01340 01341 #define CM_RESOURCE_PORT_MEMORY 0x0000 01342 #define CM_RESOURCE_PORT_IO 0x0001 01343 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004 01344 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008 01345 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010 01346 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020 01347 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040 01348 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080 01349 01350 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */ 01351 01352 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000 01353 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001 01354 01355 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */ 01356 01357 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000 01358 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001 01359 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002 01360 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004 01361 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008 01362 #define CM_RESOURCE_MEMORY_24 0x0010 01363 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020 01364 01365 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */ 01366 01367 #define CM_RESOURCE_DMA_8 0x0000 01368 #define CM_RESOURCE_DMA_16 0x0001 01369 #define CM_RESOURCE_DMA_32 0x0002 01370 #define CM_RESOURCE_DMA_8_AND_16 0x0004 01371 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008 01372 #define CM_RESOURCE_DMA_TYPE_A 0x0010 01373 #define CM_RESOURCE_DMA_TYPE_B 0x0020 01374 #define CM_RESOURCE_DMA_TYPE_F 0x0040 01375 01376 typedef struct _CM_PARTIAL_RESOURCE_LIST { 01377 USHORT Version; 01378 USHORT Revision; 01379 ULONG Count; 01380 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]; 01381 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST; 01382 01383 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR { 01384 INTERFACE_TYPE InterfaceType; 01385 ULONG BusNumber; 01386 CM_PARTIAL_RESOURCE_LIST PartialResourceList; 01387 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR; 01388 01389 typedef struct _CM_RESOURCE_LIST { 01390 ULONG Count; 01391 CM_FULL_RESOURCE_DESCRIPTOR List[1]; 01392 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST; 01393 01394 typedef struct _CM_INT13_DRIVE_PARAMETER { 01395 USHORT DriveSelect; 01396 ULONG MaxCylinders; 01397 USHORT SectorsPerTrack; 01398 USHORT MaxHeads; 01399 USHORT NumberDrives; 01400 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER; 01401 #include <poppack.h> 01402 01403 typedef struct _CM_KEYBOARD_DEVICE_DATA { 01404 USHORT Version; 01405 USHORT Revision; 01406 UCHAR Type; 01407 UCHAR Subtype; 01408 USHORT KeyboardFlags; 01409 } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA; 01410 01411 #define KEYBOARD_INSERT_ON 0x80 01412 #define KEYBOARD_CAPS_LOCK_ON 0x40 01413 #define KEYBOARD_NUM_LOCK_ON 0x20 01414 #define KEYBOARD_SCROLL_LOCK_ON 0x10 01415 #define KEYBOARD_ALT_KEY_DOWN 0x08 01416 #define KEYBOARD_CTRL_KEY_DOWN 0x04 01417 #define KEYBOARD_LEFT_SHIFT_DOWN 0x02 01418 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x01 01419 01420 typedef struct _CM_MCA_POS_DATA { 01421 USHORT AdapterId; 01422 UCHAR PosData1; 01423 UCHAR PosData2; 01424 UCHAR PosData3; 01425 UCHAR PosData4; 01426 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA; 01427 01428 typedef struct CM_Power_Data_s { 01429 ULONG PD_Size; 01430 DEVICE_POWER_STATE PD_MostRecentPowerState; 01431 ULONG PD_Capabilities; 01432 ULONG PD_D1Latency; 01433 ULONG PD_D2Latency; 01434 ULONG PD_D3Latency; 01435 DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum]; 01436 } CM_POWER_DATA, *PCM_POWER_DATA; 01437 01438 #define PDCAP_D0_SUPPORTED 0x00000001 01439 #define PDCAP_D1_SUPPORTED 0x00000002 01440 #define PDCAP_D2_SUPPORTED 0x00000004 01441 #define PDCAP_D3_SUPPORTED 0x00000008 01442 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010 01443 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020 01444 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040 01445 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080 01446 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100 01447 01448 typedef struct _CM_SCSI_DEVICE_DATA { 01449 USHORT Version; 01450 USHORT Revision; 01451 UCHAR HostIdentifier; 01452 } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA; 01453 01454 typedef struct _CM_SERIAL_DEVICE_DATA { 01455 USHORT Version; 01456 USHORT Revision; 01457 ULONG BaudClock; 01458 } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA; 01459 01460 /* IO_RESOURCE_DESCRIPTOR.Option */ 01461 01462 #define IO_RESOURCE_PREFERRED 0x01 01463 #define IO_RESOURCE_DEFAULT 0x02 01464 #define IO_RESOURCE_ALTERNATIVE 0x08 01465 01466 typedef struct _IO_RESOURCE_DESCRIPTOR { 01467 UCHAR Option; 01468 UCHAR Type; 01469 UCHAR ShareDisposition; 01470 UCHAR Spare1; 01471 USHORT Flags; 01472 USHORT Spare2; 01473 union { 01474 struct { 01475 ULONG Length; 01476 ULONG Alignment; 01477 PHYSICAL_ADDRESS MinimumAddress; 01478 PHYSICAL_ADDRESS MaximumAddress; 01479 } Port; 01480 struct { 01481 ULONG Length; 01482 ULONG Alignment; 01483 PHYSICAL_ADDRESS MinimumAddress; 01484 PHYSICAL_ADDRESS MaximumAddress; 01485 } Memory; 01486 struct { 01487 ULONG MinimumVector; 01488 ULONG MaximumVector; 01489 } Interrupt; 01490 struct { 01491 ULONG MinimumChannel; 01492 ULONG MaximumChannel; 01493 } Dma; 01494 struct { 01495 ULONG Length; 01496 ULONG Alignment; 01497 PHYSICAL_ADDRESS MinimumAddress; 01498 PHYSICAL_ADDRESS MaximumAddress; 01499 } Generic; 01500 struct { 01501 ULONG Data[3]; 01502 } DevicePrivate; 01503 struct { 01504 ULONG Length; 01505 ULONG MinBusNumber; 01506 ULONG MaxBusNumber; 01507 ULONG Reserved; 01508 } BusNumber; 01509 struct { 01510 ULONG Priority; 01511 ULONG Reserved1; 01512 ULONG Reserved2; 01513 } ConfigData; 01514 } u; 01515 } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR; 01516 01517 typedef struct _IO_RESOURCE_LIST { 01518 USHORT Version; 01519 USHORT Revision; 01520 ULONG Count; 01521 IO_RESOURCE_DESCRIPTOR Descriptors[1]; 01522 } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST; 01523 01524 typedef struct _IO_RESOURCE_REQUIREMENTS_LIST { 01525 ULONG ListSize; 01526 INTERFACE_TYPE InterfaceType; 01527 ULONG BusNumber; 01528 ULONG SlotNumber; 01529 ULONG Reserved[3]; 01530 ULONG AlternativeLists; 01531 IO_RESOURCE_LIST List[1]; 01532 } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST; 01533 01534 typedef struct _CONTROLLER_OBJECT { 01535 CSHORT Type; 01536 CSHORT Size; 01537 PVOID ControllerExtension; 01538 KDEVICE_QUEUE DeviceWaitQueue; 01539 ULONG Spare1; 01540 LARGE_INTEGER Spare2; 01541 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; 01542 01543 typedef enum _DMA_WIDTH { 01544 Width8Bits, 01545 Width16Bits, 01546 Width32Bits, 01547 MaximumDmaWidth 01548 } DMA_WIDTH, *PDMA_WIDTH; 01549 01550 typedef enum _DMA_SPEED { 01551 Compatible, 01552 TypeA, 01553 TypeB, 01554 TypeC, 01555 TypeF, 01556 MaximumDmaSpeed 01557 } DMA_SPEED, *PDMA_SPEED; 01558 01559 /* DEVICE_DESCRIPTION.Version */ 01560 01561 #define DEVICE_DESCRIPTION_VERSION 0x0000 01562 #define DEVICE_DESCRIPTION_VERSION1 0x0001 01563 #define DEVICE_DESCRIPTION_VERSION2 0x0002 01564 01565 typedef struct _DEVICE_DESCRIPTION { 01566 ULONG Version; 01567 BOOLEAN Master; 01568 BOOLEAN ScatterGather; 01569 BOOLEAN DemandMode; 01570 BOOLEAN AutoInitialize; 01571 BOOLEAN Dma32BitAddresses; 01572 BOOLEAN IgnoreCount; 01573 BOOLEAN Reserved1; 01574 BOOLEAN Dma64BitAddresses; 01575 ULONG BusNumber; 01576 ULONG DmaChannel; 01577 INTERFACE_TYPE InterfaceType; 01578 DMA_WIDTH DmaWidth; 01579 DMA_SPEED DmaSpeed; 01580 ULONG MaximumLength; 01581 ULONG DmaPort; 01582 } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION; 01583 01584 /* VPB.Flags */ 01585 #define VPB_MOUNTED 0x0001 01586 #define VPB_LOCKED 0x0002 01587 #define VPB_PERSISTENT 0x0004 01588 #define VPB_REMOVE_PENDING 0x0008 01589 #define VPB_RAW_MOUNT 0x0010 01590 01591 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) 01592 01593 typedef struct _VPB { 01594 CSHORT Type; 01595 CSHORT Size; 01596 USHORT Flags; 01597 USHORT VolumeLabelLength; 01598 struct _DEVICE_OBJECT *DeviceObject; 01599 struct _DEVICE_OBJECT *RealDevice; 01600 ULONG SerialNumber; 01601 ULONG ReferenceCount; 01602 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; 01603 } VPB, *PVPB; 01604 01605 /* DEVICE_OBJECT.Flags */ 01606 01607 #define DO_VERIFY_VOLUME 0x00000002 01608 #define DO_BUFFERED_IO 0x00000004 01609 #define DO_EXCLUSIVE 0x00000008 01610 #define DO_DIRECT_IO 0x00000010 01611 #define DO_MAP_IO_BUFFER 0x00000020 01612 #define DO_DEVICE_HAS_NAME 0x00000040 01613 #define DO_DEVICE_INITIALIZING 0x00000080 01614 #define DO_SYSTEM_BOOT_PARTITION 0x00000100 01615 #define DO_LONG_TERM_REQUESTS 0x00000200 01616 #define DO_NEVER_LAST_DEVICE 0x00000400 01617 #define DO_SHUTDOWN_REGISTERED 0x00000800 01618 #define DO_BUS_ENUMERATED_DEVICE 0x00001000 01619 #define DO_POWER_PAGABLE 0x00002000 01620 #define DO_POWER_INRUSH 0x00004000 01621 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 01622 01623 /* DEVICE_OBJECT.Characteristics */ 01624 01625 #define FILE_REMOVABLE_MEDIA 0x00000001 01626 #define FILE_READ_ONLY_DEVICE 0x00000002 01627 #define FILE_FLOPPY_DISKETTE 0x00000004 01628 #define FILE_WRITE_ONCE_MEDIA 0x00000008 01629 #define FILE_REMOTE_DEVICE 0x00000010 01630 #define FILE_DEVICE_IS_MOUNTED 0x00000020 01631 #define FILE_VIRTUAL_VOLUME 0x00000040 01632 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 01633 #define FILE_DEVICE_SECURE_OPEN 0x00000100 01634 01635 /* DEVICE_OBJECT.AlignmentRequirement */ 01636 01637 #define FILE_BYTE_ALIGNMENT 0x00000000 01638 #define FILE_WORD_ALIGNMENT 0x00000001 01639 #define FILE_LONG_ALIGNMENT 0x00000003 01640 #define FILE_QUAD_ALIGNMENT 0x00000007 01641 #define FILE_OCTA_ALIGNMENT 0x0000000f 01642 #define FILE_32_BYTE_ALIGNMENT 0x0000001f 01643 #define FILE_64_BYTE_ALIGNMENT 0x0000003f 01644 #define FILE_128_BYTE_ALIGNMENT 0x0000007f 01645 #define FILE_256_BYTE_ALIGNMENT 0x000000ff 01646 #define FILE_512_BYTE_ALIGNMENT 0x000001ff 01647 01648 /* DEVICE_OBJECT.DeviceType */ 01649 01650 #define DEVICE_TYPE ULONG 01651 01652 #define FILE_DEVICE_BEEP 0x00000001 01653 #define FILE_DEVICE_CD_ROM 0x00000002 01654 #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 01655 #define FILE_DEVICE_CONTROLLER 0x00000004 01656 #define FILE_DEVICE_DATALINK 0x00000005 01657 #define FILE_DEVICE_DFS 0x00000006 01658 #define FILE_DEVICE_DISK 0x00000007 01659 #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 01660 #define FILE_DEVICE_FILE_SYSTEM 0x00000009 01661 #define FILE_DEVICE_INPORT_PORT 0x0000000a 01662 #define FILE_DEVICE_KEYBOARD 0x0000000b 01663 #define FILE_DEVICE_MAILSLOT 0x0000000c 01664 #define FILE_DEVICE_MIDI_IN 0x0000000d 01665 #define FILE_DEVICE_MIDI_OUT 0x0000000e 01666 #define FILE_DEVICE_MOUSE 0x0000000f 01667 #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 01668 #define FILE_DEVICE_NAMED_PIPE 0x00000011 01669 #define FILE_DEVICE_NETWORK 0x00000012 01670 #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 01671 #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 01672 #define FILE_DEVICE_NULL 0x00000015 01673 #define FILE_DEVICE_PARALLEL_PORT 0x00000016 01674 #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 01675 #define FILE_DEVICE_PRINTER 0x00000018 01676 #define FILE_DEVICE_SCANNER 0x00000019 01677 #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a 01678 #define FILE_DEVICE_SERIAL_PORT 0x0000001b 01679 #define FILE_DEVICE_SCREEN 0x0000001c 01680 #define FILE_DEVICE_SOUND 0x0000001d 01681 #define FILE_DEVICE_STREAMS 0x0000001e 01682 #define FILE_DEVICE_TAPE 0x0000001f 01683 #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 01684 #define FILE_DEVICE_TRANSPORT 0x00000021 01685 #define FILE_DEVICE_UNKNOWN 0x00000022 01686 #define FILE_DEVICE_VIDEO 0x00000023 01687 #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 01688 #define FILE_DEVICE_WAVE_IN 0x00000025 01689 #define FILE_DEVICE_WAVE_OUT 0x00000026 01690 #define FILE_DEVICE_8042_PORT 0x00000027 01691 #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 01692 #define FILE_DEVICE_BATTERY 0x00000029 01693 #define FILE_DEVICE_BUS_EXTENDER 0x0000002a 01694 #define FILE_DEVICE_MODEM 0x0000002b 01695 #define FILE_DEVICE_VDM 0x0000002c 01696 #define FILE_DEVICE_MASS_STORAGE 0x0000002d 01697 #define FILE_DEVICE_SMB 0x0000002e 01698 #define FILE_DEVICE_KS 0x0000002f 01699 #define FILE_DEVICE_CHANGER 0x00000030 01700 #define FILE_DEVICE_SMARTCARD 0x00000031 01701 #define FILE_DEVICE_ACPI 0x00000032 01702 #define FILE_DEVICE_DVD 0x00000033 01703 #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 01704 #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 01705 #define FILE_DEVICE_DFS_VOLUME 0x00000036 01706 #define FILE_DEVICE_SERENUM 0x00000037 01707 #define FILE_DEVICE_TERMSRV 0x00000038 01708 #define FILE_DEVICE_KSEC 0x00000039 01709 #define FILE_DEVICE_FIPS 0x0000003a 01710 01711 typedef struct _DEVICE_OBJECT { 01712 CSHORT Type; 01713 USHORT Size; 01714 LONG ReferenceCount; 01715 struct _DRIVER_OBJECT *DriverObject; 01716 struct _DEVICE_OBJECT *NextDevice; 01717 struct _DEVICE_OBJECT *AttachedDevice; 01718 struct _IRP *CurrentIrp; 01719 PIO_TIMER Timer; 01720 ULONG Flags; 01721 ULONG Characteristics; 01722 PVPB Vpb; 01723 PVOID DeviceExtension; 01724 DEVICE_TYPE DeviceType; 01725 CCHAR StackSize; 01726 union { 01727 LIST_ENTRY ListEntry; 01728 WAIT_CONTEXT_BLOCK Wcb; 01729 } Queue; 01730 ULONG AlignmentRequirement; 01731 KDEVICE_QUEUE DeviceQueue; 01732 KDPC Dpc; 01733 ULONG ActiveThreadCount; 01734 PSECURITY_DESCRIPTOR SecurityDescriptor; 01735 KEVENT DeviceLock; 01736 USHORT SectorSize; 01737 USHORT Spare1; 01738 struct _DEVOBJ_EXTENSION *DeviceObjectExtension; 01739 PVOID Reserved; 01740 } DEVICE_OBJECT; 01741 typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT; 01742 01743 typedef enum _DEVICE_RELATION_TYPE { 01744 BusRelations, 01745 EjectionRelations, 01746 PowerRelations, 01747 RemovalRelations, 01748 TargetDeviceRelation, 01749 SingleBusRelations 01750 } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE; 01751 01752 typedef struct _DEVICE_RELATIONS { 01753 ULONG Count; 01754 PDEVICE_OBJECT Objects[1]; 01755 } DEVICE_RELATIONS, *PDEVICE_RELATIONS; 01756 01757 typedef struct _SCATTER_GATHER_ELEMENT { 01758 PHYSICAL_ADDRESS Address; 01759 ULONG Length; 01760 ULONG_PTR Reserved; 01761 } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT; 01762 01763 typedef struct _SCATTER_GATHER_LIST { 01764 ULONG NumberOfElements; 01765 ULONG_PTR Reserved; 01766 SCATTER_GATHER_ELEMENT Elements[0]; 01767 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; 01768 01769 typedef struct _MDL { 01770 struct _MDL *Next; 01771 CSHORT Size; 01772 CSHORT MdlFlags; 01773 struct _EPROCESS *Process; 01774 PVOID MappedSystemVa; 01775 PVOID StartVa; 01776 ULONG ByteCount; 01777 ULONG ByteOffset; 01778 } MDL, *PMDL; 01779 01780 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001 01781 #define MDL_PAGES_LOCKED 0x0002 01782 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004 01783 #define MDL_ALLOCATED_FIXED_SIZE 0x0008 01784 #define MDL_PARTIAL 0x0010 01785 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020 01786 #define MDL_IO_PAGE_READ 0x0040 01787 #define MDL_WRITE_OPERATION 0x0080 01788 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100 01789 #define MDL_FREE_EXTRA_PTES 0x0200 01790 #define MDL_IO_SPACE 0x0800 01791 #define MDL_NETWORK_HEADER 0x1000 01792 #define MDL_MAPPING_CAN_FAIL 0x2000 01793 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000 01794 01795 #define MDL_MAPPING_FLAGS ( \ 01796 MDL_MAPPED_TO_SYSTEM_VA | \ 01797 MDL_PAGES_LOCKED | \ 01798 MDL_SOURCE_IS_NONPAGED_POOL | \ 01799 MDL_PARTIAL_HAS_BEEN_MAPPED | \ 01800 MDL_PARENT_MAPPED_SYSTEM_VA | \ 01801 MDL_SYSTEM_VA | \ 01802 MDL_IO_SPACE) 01803 01804 typedef VOID DDKAPI 01805 (*PPUT_DMA_ADAPTER)( 01806 /*IN*/ PDMA_ADAPTER DmaAdapter); 01807 01808 typedef PVOID DDKAPI 01809 (*PALLOCATE_COMMON_BUFFER)( 01810 /*IN*/ PDMA_ADAPTER DmaAdapter, 01811 /*IN*/ ULONG Length, 01812 /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress, 01813 /*IN*/ BOOLEAN CacheEnabled); 01814 01815 typedef VOID DDKAPI 01816 (*PFREE_COMMON_BUFFER)( 01817 /*IN*/ PDMA_ADAPTER DmaAdapter, 01818 /*IN*/ ULONG Length, 01819 /*IN*/ PHYSICAL_ADDRESS LogicalAddress, 01820 /*IN*/ PVOID VirtualAddress, 01821 /*IN*/ BOOLEAN CacheEnabled); 01822 01823 typedef NTSTATUS DDKAPI 01824 (*PALLOCATE_ADAPTER_CHANNEL)( 01825 /*IN*/ PDMA_ADAPTER DmaAdapter, 01826 /*IN*/ PDEVICE_OBJECT DeviceObject, 01827 /*IN*/ ULONG NumberOfMapRegisters, 01828 /*IN*/ PDRIVER_CONTROL ExecutionRoutine, 01829 /*IN*/ PVOID Context); 01830 01831 typedef BOOLEAN DDKAPI 01832 (*PFLUSH_ADAPTER_BUFFERS)( 01833 /*IN*/ PDMA_ADAPTER DmaAdapter, 01834 /*IN*/ PMDL Mdl, 01835 /*IN*/ PVOID MapRegisterBase, 01836 /*IN*/ PVOID CurrentVa, 01837 /*IN*/ ULONG Length, 01838 /*IN*/ BOOLEAN WriteToDevice); 01839 01840 typedef VOID DDKAPI 01841 (*PFREE_ADAPTER_CHANNEL)( 01842 /*IN*/ PDMA_ADAPTER DmaAdapter); 01843 01844 typedef VOID DDKAPI 01845 (*PFREE_MAP_REGISTERS)( 01846 /*IN*/ PDMA_ADAPTER DmaAdapter, 01847 PVOID MapRegisterBase, 01848 ULONG NumberOfMapRegisters); 01849 01850 typedef PHYSICAL_ADDRESS DDKAPI 01851 (*PMAP_TRANSFER)( 01852 /*IN*/ PDMA_ADAPTER DmaAdapter, 01853 /*IN*/ PMDL Mdl, 01854 /*IN*/ PVOID MapRegisterBase, 01855 /*IN*/ PVOID CurrentVa, 01856 /*IN OUT*/ PULONG Length, 01857 /*IN*/ BOOLEAN WriteToDevice); 01858 01859 typedef ULONG DDKAPI 01860 (*PGET_DMA_ALIGNMENT)( 01861 /*IN*/ PDMA_ADAPTER DmaAdapter); 01862 01863 typedef ULONG DDKAPI 01864 (*PREAD_DMA_COUNTER)( 01865 /*IN*/ PDMA_ADAPTER DmaAdapter); 01866 01867 typedef NTSTATUS DDKAPI 01868 (*PGET_SCATTER_GATHER_LIST)( 01869 /*IN*/ PDMA_ADAPTER DmaAdapter, 01870 /*IN*/ PDEVICE_OBJECT DeviceObject, 01871 /*IN*/ PMDL Mdl, 01872 /*IN*/ PVOID CurrentVa, 01873 /*IN*/ ULONG Length, 01874 /*IN*/ PDRIVER_LIST_CONTROL ExecutionRoutine, 01875 /*IN*/ PVOID Context, 01876 /*IN*/ BOOLEAN WriteToDevice); 01877 01878 typedef VOID DDKAPI 01879 (*PPUT_SCATTER_GATHER_LIST)( 01880 /*IN*/ PDMA_ADAPTER DmaAdapter, 01881 /*IN*/ PSCATTER_GATHER_LIST ScatterGather, 01882 /*IN*/ BOOLEAN WriteToDevice); 01883 01884 typedef NTSTATUS DDKAPI 01885 (*PCALCULATE_SCATTER_GATHER_LIST_SIZE)( 01886 /*IN*/ PDMA_ADAPTER DmaAdapter, 01887 /*IN*/ PMDL Mdl /*OPTIONAL*/, 01888 /*IN*/ PVOID CurrentVa, 01889 /*IN*/ ULONG Length, 01890 /*OUT*/ PULONG ScatterGatherListSize, 01891 /*OUT*/ PULONG pNumberOfMapRegisters /*OPTIONAL*/); 01892 01893 typedef NTSTATUS DDKAPI 01894 (*PBUILD_SCATTER_GATHER_LIST)( 01895 /*IN*/ PDMA_ADAPTER DmaAdapter, 01896 /*IN*/ PDEVICE_OBJECT DeviceObject, 01897 /*IN*/ PMDL Mdl, 01898 /*IN*/ PVOID CurrentVa, 01899 /*IN*/ ULONG Length, 01900 /*IN*/ PDRIVER_LIST_CONTROL ExecutionRoutine, 01901 /*IN*/ PVOID Context, 01902 /*IN*/ BOOLEAN WriteToDevice, 01903 /*IN*/ PVOID ScatterGatherBuffer, 01904 /*IN*/ ULONG ScatterGatherLength); 01905 01906 typedef NTSTATUS DDKAPI 01907 (*PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( 01908 /*IN*/ PDMA_ADAPTER DmaAdapter, 01909 /*IN*/ PSCATTER_GATHER_LIST ScatterGather, 01910 /*IN*/ PMDL OriginalMdl, 01911 /*OUT*/ PMDL *TargetMdl); 01912 01913 typedef struct _DMA_OPERATIONS { 01914 ULONG Size; 01915 PPUT_DMA_ADAPTER PutDmaAdapter; 01916 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer; 01917 PFREE_COMMON_BUFFER FreeCommonBuffer; 01918 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; 01919 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; 01920 PFREE_ADAPTER_CHANNEL FreeAdapterChannel; 01921 PFREE_MAP_REGISTERS FreeMapRegisters; 01922 PMAP_TRANSFER MapTransfer; 01923 PGET_DMA_ALIGNMENT GetDmaAlignment; 01924 PREAD_DMA_COUNTER ReadDmaCounter; 01925 PGET_SCATTER_GATHER_LIST GetScatterGatherList; 01926 PPUT_SCATTER_GATHER_LIST PutScatterGatherList; 01927 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList; 01928 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList; 01929 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList; 01930 } DMA_OPERATIONS, *PDMA_OPERATIONS; 01931 01932 typedef struct _DMA_ADAPTER { 01933 USHORT Version; 01934 USHORT Size; 01935 PDMA_OPERATIONS DmaOperations; 01936 } DMA_ADAPTER; 01937 01938 typedef enum _FILE_INFORMATION_CLASS { 01939 FileDirectoryInformation = 1, 01940 FileFullDirectoryInformation, 01941 FileBothDirectoryInformation, 01942 FileBasicInformation, 01943 FileStandardInformation, 01944 FileInternalInformation, 01945 FileEaInformation, 01946 FileAccessInformation, 01947 FileNameInformation, 01948 FileRenameInformation, 01949 FileLinkInformation, 01950 FileNamesInformation, 01951 FileDispositionInformation, 01952 FilePositionInformation, 01953 FileFullEaInformation, 01954 FileModeInformation, 01955 FileAlignmentInformation, 01956 FileAllInformation, 01957 FileAllocationInformation, 01958 FileEndOfFileInformation, 01959 FileAlternateNameInformation, 01960 FileStreamInformation, 01961 FilePipeInformation, 01962 FilePipeLocalInformation, 01963 FilePipeRemoteInformation, 01964 FileMailslotQueryInformation, 01965 FileMailslotSetInformation, 01966 FileCompressionInformation, 01967 FileObjectIdInformation, 01968 FileCompletionInformation, 01969 FileMoveClusterInformation, 01970 FileQuotaInformation, 01971 FileReparsePointInformation, 01972 FileNetworkOpenInformation, 01973 FileAttributeTagInformation, 01974 FileTrackingInformation, 01975 FileIdBothDirectoryInformation, 01976 FileIdFullDirectoryInformation, 01977 FileValidDataLengthInformation, 01978 FileShortNameInformation, 01979 FileMaximumInformation 01980 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; 01981 01982 typedef struct _FILE_POSITION_INFORMATION { 01983 LARGE_INTEGER CurrentByteOffset; 01984 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; 01985 01986 typedef struct _FILE_ALIGNMENT_INFORMATION { 01987 ULONG AlignmentRequirement; 01988 } FILE_ALIGNMENT_INFORMATION; 01989 01990 typedef struct _FILE_NAME_INFORMATION { 01991 ULONG FileNameLength; 01992 WCHAR FileName[1]; 01993 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; 01994 01995 typedef struct _FILE_BASIC_INFORMATION { 01996 LARGE_INTEGER CreationTime; 01997 LARGE_INTEGER LastAccessTime; 01998 LARGE_INTEGER LastWriteTime; 01999 LARGE_INTEGER ChangeTime; 02000 ULONG FileAttributes; 02001 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; 02002 02003 typedef struct _FILE_STANDARD_INFORMATION { 02004 LARGE_INTEGER AllocationSize; 02005 LARGE_INTEGER EndOfFile; 02006 ULONG NumberOfLinks; 02007 BOOLEAN DeletePending; 02008 BOOLEAN Directory; 02009 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; 02010 02011 typedef struct _FILE_NETWORK_OPEN_INFORMATION { 02012 LARGE_INTEGER CreationTime; 02013 LARGE_INTEGER LastAccessTime; 02014 LARGE_INTEGER LastWriteTime; 02015 LARGE_INTEGER ChangeTime; 02016 LARGE_INTEGER AllocationSize; 02017 LARGE_INTEGER EndOfFile; 02018 ULONG FileAttributes; 02019 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; 02020 02021 typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { 02022 ULONG FileAttributes; 02023 ULONG ReparseTag; 02024 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; 02025 02026 typedef struct _FILE_DISPOSITION_INFORMATION { 02027 BOOLEAN DoDeleteFile; 02028 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; 02029 02030 typedef struct _FILE_END_OF_FILE_INFORMATION { 02031 LARGE_INTEGER EndOfFile; 02032 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; 02033 02034 typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { 02035 LARGE_INTEGER ValidDataLength; 02036 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; 02037 02038 typedef enum _FSINFOCLASS { 02039 FileFsVolumeInformation = 1, 02040 FileFsLabelInformation, 02041 FileFsSizeInformation, 02042 FileFsDeviceInformation, 02043 FileFsAttributeInformation, 02044 FileFsControlInformation, 02045 FileFsFullSizeInformation, 02046 FileFsObjectIdInformation, 02047 FileFsDriverPathInformation, 02048 FileFsMaximumInformation 02049 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; 02050 02051 typedef struct _FILE_FS_DEVICE_INFORMATION { 02052 DEVICE_TYPE DeviceType; 02053 ULONG Characteristics; 02054 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; 02055 02056 typedef struct _FILE_FULL_EA_INFORMATION { 02057 ULONG NextEntryOffset; 02058 UCHAR Flags; 02059 UCHAR EaNameLength; 02060 USHORT EaValueLength; 02061 CHAR EaName[1]; 02062 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; 02063 02064 typedef ULONG_PTR ERESOURCE_THREAD; 02065 typedef ERESOURCE_THREAD *PERESOURCE_THREAD; 02066 02067 typedef struct _OWNER_ENTRY { 02068 ERESOURCE_THREAD OwnerThread; 02069 _ANONYMOUS_UNION union { 02070 LONG OwnerCount; 02071 ULONG TableSize; 02072 } DUMMYUNIONNAME; 02073 } OWNER_ENTRY, *POWNER_ENTRY; 02074 02075 /* ERESOURCE.Flag */ 02076 02077 #define ResourceNeverExclusive 0x0010 02078 #define ResourceReleaseByOtherThread 0x0020 02079 #define ResourceOwnedExclusive 0x0080 02080 02081 #define RESOURCE_HASH_TABLE_SIZE 64 02082 02083 typedef struct _ERESOURCE { 02084 LIST_ENTRY SystemResourcesList; 02085 POWNER_ENTRY OwnerTable; 02086 SHORT ActiveCount; 02087 USHORT Flag; 02088 PKSEMAPHORE SharedWaiters; 02089 PKEVENT ExclusiveWaiters; 02090 OWNER_ENTRY OwnerThreads[2]; 02091 ULONG ContentionCount; 02092 USHORT NumberOfSharedWaiters; 02093 USHORT NumberOfExclusiveWaiters; 02094 _ANONYMOUS_UNION union { 02095 PVOID Address; 02096 ULONG_PTR CreatorBackTraceIndex; 02097 } DUMMYUNIONNAME; 02098 KSPIN_LOCK SpinLock; 02099 } ERESOURCE, *PERESOURCE; 02100 02101 /* NOTE: PVOID for methods to avoid 'assignment from incompatible pointer type' warning */ 02102 typedef struct _DRIVER_EXTENSION { 02103 struct _DRIVER_OBJECT *DriverObject; 02104 PVOID AddDevice; 02105 ULONG Count; 02106 UNICODE_STRING ServiceKeyName; 02107 } DRIVER_EXTENSION, *PDRIVER_EXTENSION; 02108 02109 typedef BOOLEAN DDKAPI 02110 (*PFAST_IO_CHECK_IF_POSSIBLE)( 02111 /*IN*/ struct _FILE_OBJECT *FileObject, 02112 /*IN*/ PLARGE_INTEGER FileOffset, 02113 /*IN*/ ULONG Length, 02114 /*IN*/ BOOLEAN Wait, 02115 /*IN*/ ULONG LockKey, 02116 /*IN*/ BOOLEAN CheckForReadOperation, 02117 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02118 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02119 02120 typedef BOOLEAN DDKAPI 02121 (*PFAST_IO_READ)( 02122 /*IN*/ struct _FILE_OBJECT *FileObject, 02123 /*IN*/ PLARGE_INTEGER FileOffset, 02124 /*IN*/ ULONG Length, 02125 /*IN*/ BOOLEAN Wait, 02126 /*IN*/ ULONG LockKey, 02127 /*OUT*/ PVOID Buffer, 02128 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02129 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02130 02131 typedef BOOLEAN DDKAPI 02132 (*PFAST_IO_WRITE)( 02133 /*IN*/ struct _FILE_OBJECT *FileObject, 02134 /*IN*/ PLARGE_INTEGER FileOffset, 02135 /*IN*/ ULONG Length, 02136 /*IN*/ BOOLEAN Wait, 02137 /*IN*/ ULONG LockKey, 02138 /*IN*/ PVOID Buffer, 02139 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02140 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02141 02142 typedef BOOLEAN DDKAPI 02143 (*PFAST_IO_QUERY_BASIC_INFO)( 02144 /*IN*/ struct _FILE_OBJECT *FileObject, 02145 /*IN*/ BOOLEAN Wait, 02146 /*OUT*/ PFILE_BASIC_INFORMATION Buffer, 02147 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02148 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02149 02150 typedef BOOLEAN DDKAPI 02151 (*PFAST_IO_QUERY_STANDARD_INFO)( 02152 /*IN*/ struct _FILE_OBJECT *FileObject, 02153 /*IN*/ BOOLEAN Wait, 02154 /*OUT*/ PFILE_STANDARD_INFORMATION Buffer, 02155 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02156 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02157 02158 typedef BOOLEAN DDKAPI 02159 (*PFAST_IO_LOCK)( 02160 /*IN*/ struct _FILE_OBJECT *FileObject, 02161 /*IN*/ PLARGE_INTEGER FileOffset, 02162 /*IN*/ PLARGE_INTEGER Length, 02163 PEPROCESS ProcessId, 02164 ULONG Key, 02165 BOOLEAN FailImmediately, 02166 BOOLEAN ExclusiveLock, 02167 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02168 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02169 02170 typedef BOOLEAN DDKAPI 02171 (*PFAST_IO_UNLOCK_SINGLE)( 02172 /*IN*/ struct _FILE_OBJECT *FileObject, 02173 /*IN*/ PLARGE_INTEGER FileOffset, 02174 /*IN*/ PLARGE_INTEGER Length, 02175 PEPROCESS ProcessId, 02176 ULONG Key, 02177 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02178 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02179 02180 typedef BOOLEAN DDKAPI 02181 (*PFAST_IO_UNLOCK_ALL)( 02182 /*IN*/ struct _FILE_OBJECT *FileObject, 02183 PEPROCESS ProcessId, 02184 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02185 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02186 02187 typedef BOOLEAN DDKAPI 02188 (*PFAST_IO_UNLOCK_ALL_BY_KEY)( 02189 /*IN*/ struct _FILE_OBJECT *FileObject, 02190 PVOID ProcessId, 02191 ULONG Key, 02192 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02193 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02194 02195 typedef BOOLEAN DDKAPI 02196 (*PFAST_IO_DEVICE_CONTROL)( 02197 /*IN*/ struct _FILE_OBJECT *FileObject, 02198 /*IN*/ BOOLEAN Wait, 02199 /*IN*/ PVOID InputBuffer /*OPTIONAL*/, 02200 /*IN*/ ULONG InputBufferLength, 02201 /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/, 02202 /*IN*/ ULONG OutputBufferLength, 02203 /*IN*/ ULONG IoControlCode, 02204 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02205 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02206 02207 typedef VOID DDKAPI 02208 (*PFAST_IO_ACQUIRE_FILE)( 02209 /*IN*/ struct _FILE_OBJECT *FileObject); 02210 02211 typedef VOID DDKAPI 02212 (*PFAST_IO_RELEASE_FILE)( 02213 /*IN*/ struct _FILE_OBJECT *FileObject); 02214 02215 typedef VOID DDKAPI 02216 (*PFAST_IO_DETACH_DEVICE)( 02217 /*IN*/ struct _DEVICE_OBJECT *SourceDevice, 02218 /*IN*/ struct _DEVICE_OBJECT *TargetDevice); 02219 02220 typedef BOOLEAN DDKAPI 02221 (*PFAST_IO_QUERY_NETWORK_OPEN_INFO)( 02222 /*IN*/ struct _FILE_OBJECT *FileObject, 02223 /*IN*/ BOOLEAN Wait, 02224 /*OUT*/ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, 02225 /*OUT*/ struct _IO_STATUS_BLOCK *IoStatus, 02226 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02227 02228 typedef NTSTATUS DDKAPI 02229 (*PFAST_IO_ACQUIRE_FOR_MOD_WRITE)( 02230 /*IN*/ struct _FILE_OBJECT *FileObject, 02231 /*IN*/ PLARGE_INTEGER EndingOffset, 02232 /*OUT*/ struct _ERESOURCE **ResourceToRelease, 02233 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02234 02235 typedef BOOLEAN DDKAPI 02236 (*PFAST_IO_MDL_READ)( 02237 /*IN*/ struct _FILE_OBJECT *FileObject, 02238 /*IN*/ PLARGE_INTEGER FileOffset, 02239 /*IN*/ ULONG Length, 02240 /*IN*/ ULONG LockKey, 02241 /*OUT*/ PMDL *MdlChain, 02242 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02243 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02244 02245 typedef BOOLEAN DDKAPI 02246 (*PFAST_IO_MDL_READ_COMPLETE)( 02247 /*IN*/ struct _FILE_OBJECT *FileObject, 02248 /*IN*/ PMDL MdlChain, 02249 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02250 02251 typedef BOOLEAN DDKAPI 02252 (*PFAST_IO_PREPARE_MDL_WRITE)( 02253 /*IN*/ struct _FILE_OBJECT *FileObject, 02254 /*IN*/ PLARGE_INTEGER FileOffset, 02255 /*IN*/ ULONG Length, 02256 /*IN*/ ULONG LockKey, 02257 /*OUT*/ PMDL *MdlChain, 02258 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02259 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02260 02261 typedef BOOLEAN DDKAPI 02262 (*PFAST_IO_MDL_WRITE_COMPLETE)( 02263 /*IN*/ struct _FILE_OBJECT *FileObject, 02264 /*IN*/ PLARGE_INTEGER FileOffset, 02265 /*IN*/ PMDL MdlChain, 02266 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02267 02268 typedef BOOLEAN DDKAPI 02269 (*PFAST_IO_READ_COMPRESSED)( 02270 /*IN*/ struct _FILE_OBJECT *FileObject, 02271 /*IN*/ PLARGE_INTEGER FileOffset, 02272 /*IN*/ ULONG Length, 02273 /*IN*/ ULONG LockKey, 02274 /*OUT*/ PVOID Buffer, 02275 /*OUT*/ PMDL *MdlChain, 02276 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02277 /*OUT*/ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, 02278 /*IN*/ ULONG CompressedDataInfoLength, 02279 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02280 02281 typedef BOOLEAN DDKAPI 02282 (*PFAST_IO_WRITE_COMPRESSED)( 02283 /*IN*/ struct _FILE_OBJECT *FileObject, 02284 /*IN*/ PLARGE_INTEGER FileOffset, 02285 /*IN*/ ULONG Length, 02286 /*IN*/ ULONG LockKey, 02287 /*IN*/ PVOID Buffer, 02288 /*OUT*/ PMDL *MdlChain, 02289 /*OUT*/ PIO_STATUS_BLOCK IoStatus, 02290 /*IN*/ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, 02291 /*IN*/ ULONG CompressedDataInfoLength, 02292 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02293 02294 typedef BOOLEAN DDKAPI 02295 (*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)( 02296 /*IN*/ struct _FILE_OBJECT *FileObject, 02297 /*IN*/ PMDL MdlChain, 02298 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02299 02300 typedef BOOLEAN DDKAPI 02301 (*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( 02302 /*IN*/ struct _FILE_OBJECT *FileObject, 02303 /*IN*/ PLARGE_INTEGER FileOffset, 02304 /*IN*/ PMDL MdlChain, 02305 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02306 02307 typedef BOOLEAN DDKAPI 02308 (*PFAST_IO_QUERY_OPEN)( 02309 /*IN*/ struct _IRP *Irp, 02310 /*OUT*/ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, 02311 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02312 02313 typedef NTSTATUS DDKAPI 02314 (*PFAST_IO_RELEASE_FOR_MOD_WRITE)( 02315 /*IN*/ struct _FILE_OBJECT *FileObject, 02316 /*IN*/ struct _ERESOURCE *ResourceToRelease, 02317 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02318 02319 typedef NTSTATUS DDKAPI 02320 (*PFAST_IO_ACQUIRE_FOR_CCFLUSH)( 02321 /*IN*/ struct _FILE_OBJECT *FileObject, 02322 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02323 02324 typedef NTSTATUS DDKAPI 02325 (*PFAST_IO_RELEASE_FOR_CCFLUSH) ( 02326 /*IN*/ struct _FILE_OBJECT *FileObject, 02327 /*IN*/ struct _DEVICE_OBJECT *DeviceObject); 02328 02329 typedef struct _FAST_IO_DISPATCH { 02330 ULONG SizeOfFastIoDispatch; 02331 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible; 02332 PFAST_IO_READ FastIoRead; 02333 PFAST_IO_WRITE FastIoWrite; 02334 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo; 02335 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo; 02336 PFAST_IO_LOCK FastIoLock; 02337 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle; 02338 PFAST_IO_UNLOCK_ALL FastIoUnlockAll; 02339 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey; 02340 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl; 02341 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection; 02342 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection; 02343 PFAST_IO_DETACH_DEVICE FastIoDetachDevice; 02344 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo; 02345 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite; 02346 PFAST_IO_MDL_READ MdlRead; 02347 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete; 02348 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite; 02349 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete; 02350 PFAST_IO_READ_COMPRESSED FastIoReadCompressed; 02351 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed; 02352 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed; 02353 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed; 02354 PFAST_IO_QUERY_OPEN FastIoQueryOpen; 02355 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite; 02356 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush; 02357 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush; 02358 } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH; 02359 02360 typedef struct _DRIVER_OBJECT { 02361 CSHORT Type; 02362 CSHORT Size; 02363 PDEVICE_OBJECT DeviceObject; 02364 ULONG Flags; 02365 PVOID DriverStart; 02366 ULONG DriverSize; 02367 PVOID DriverSection; 02368 PDRIVER_EXTENSION DriverExtension; 02369 UNICODE_STRING DriverName; 02370 PUNICODE_STRING HardwareDatabase; 02371 PFAST_IO_DISPATCH FastIoDispatch; 02372 PDRIVER_INITIALIZE DriverInit; 02373 PDRIVER_STARTIO DriverStartIo; 02374 PDRIVER_UNLOAD DriverUnload; 02375 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; 02376 } DRIVER_OBJECT; 02377 typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; 02378 02379 typedef struct _SECTION_OBJECT_POINTERS { 02380 PVOID DataSectionObject; 02381 PVOID SharedCacheMap; 02382 PVOID ImageSectionObject; 02383 } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS; 02384 02385 typedef struct _IO_COMPLETION_CONTEXT { 02386 PVOID Port; 02387 PVOID Key; 02388 } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT; 02389 02390 /* FILE_OBJECT.Flags */ 02391 02392 #define FO_FILE_OPEN 0x00000001 02393 #define FO_SYNCHRONOUS_IO 0x00000002 02394 #define FO_ALERTABLE_IO 0x00000004 02395 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008 02396 #define FO_WRITE_THROUGH 0x00000010 02397 #define FO_SEQUENTIAL_ONLY 0x00000020 02398 #define FO_CACHE_SUPPORTED 0x00000040 02399 #define FO_NAMED_PIPE 0x00000080 02400 #define FO_STREAM_FILE 0x00000100 02401 #define FO_MAILSLOT 0x00000200 02402 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400 02403 #define FO_DIRECT_DEVICE_OPEN 0x00000800 02404 #define FO_FILE_MODIFIED 0x00001000 02405 #define FO_FILE_SIZE_CHANGED 0x00002000 02406 #define FO_CLEANUP_COMPLETE 0x00004000 02407 #define FO_TEMPORARY_FILE 0x00008000 02408 #define FO_DELETE_ON_CLOSE 0x00010000 02409 #define FO_OPENED_CASE_SENSITIVE 0x00020000 02410 #define FO_HANDLE_CREATED 0x00040000 02411 #define FO_FILE_FAST_IO_READ 0x00080000 02412 #define FO_RANDOM_ACCESS 0x00100000 02413 #define FO_FILE_OPEN_CANCELLED 0x00200000 02414 #define FO_VOLUME_OPEN 0x00400000 02415 #define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000 02416 #define FO_REMOTE_ORIGIN 0x01000000 02417 02418 typedef struct _FILE_OBJECT { 02419 CSHORT Type; 02420 CSHORT Size; 02421 PDEVICE_OBJECT DeviceObject; 02422 PVPB Vpb; 02423 PVOID FsContext; 02424 PVOID FsContext2; 02425 PSECTION_OBJECT_POINTERS SectionObjectPointer; 02426 PVOID PrivateCacheMap; 02427 NTSTATUS FinalStatus; 02428 struct _FILE_OBJECT *RelatedFileObject; 02429 BOOLEAN LockOperation; 02430 BOOLEAN DeletePending; 02431 BOOLEAN ReadAccess; 02432 BOOLEAN WriteAccess; 02433 BOOLEAN DeleteAccess; 02434 BOOLEAN SharedRead; 02435 BOOLEAN SharedWrite; 02436 BOOLEAN SharedDelete; 02437 ULONG Flags; 02438 UNICODE_STRING FileName; 02439 LARGE_INTEGER CurrentByteOffset; 02440 ULONG Waiters; 02441 ULONG Busy; 02442 PVOID LastLock; 02443 KEVENT Lock; 02444 KEVENT Event; 02445 PIO_COMPLETION_CONTEXT CompletionContext; 02446 } FILE_OBJECT; 02447 typedef struct _FILE_OBJECT *PFILE_OBJECT; 02448 02449 typedef enum _SECURITY_OPERATION_CODE { 02450 SetSecurityDescriptor, 02451 QuerySecurityDescriptor, 02452 DeleteSecurityDescriptor, 02453 AssignSecurityDescriptor 02454 } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE; 02455 02456 #define INITIAL_PRIVILEGE_COUNT 3 02457 02458 typedef struct _INITIAL_PRIVILEGE_SET { 02459 ULONG PrivilegeCount; 02460 ULONG Control; 02461 LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT]; 02462 } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET; 02463 02464 typedef struct _SECURITY_SUBJECT_CONTEXT { 02465 PACCESS_TOKEN ClientToken; 02466 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; 02467 PACCESS_TOKEN PrimaryToken; 02468 PVOID ProcessAuditId; 02469 } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT; 02470 02471 #include <pshpack4.h> 02472 typedef struct _ACCESS_STATE { 02473 LUID OperationID; 02474 BOOLEAN SecurityEvaluated; 02475 BOOLEAN GenerateAudit; 02476 BOOLEAN GenerateOnClose; 02477 BOOLEAN PrivilegesAllocated; 02478 ULONG Flags; 02479 ACCESS_MASK RemainingDesiredAccess; 02480 ACCESS_MASK PreviouslyGrantedAccess; 02481 ACCESS_MASK OriginalDesiredAccess; 02482 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext; 02483 PSECURITY_DESCRIPTOR SecurityDescriptor; 02484 PVOID AuxData; 02485 union { 02486 INITIAL_PRIVILEGE_SET InitialPrivilegeSet; 02487 PRIVILEGE_SET PrivilegeSet; 02488 } Privileges; 02489 02490 BOOLEAN AuditPrivileges; 02491 UNICODE_STRING ObjectName; 02492 UNICODE_STRING ObjectTypeName; 02493 } ACCESS_STATE, *PACCESS_STATE; 02494 #include <poppack.h> 02495 02496 typedef struct _IO_SECURITY_CONTEXT { 02497 PSECURITY_QUALITY_OF_SERVICE SecurityQos; 02498 PACCESS_STATE AccessState; 02499 ACCESS_MASK DesiredAccess; 02500 ULONG FullCreateOptions; 02501 } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT; 02502 02503 struct _IO_CSQ; 02504 02505 typedef struct _IO_CSQ_IRP_CONTEXT { 02506 ULONG Type; 02507 struct _IRP *Irp; 02508 struct _IO_CSQ *Csq; 02509 } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT; 02510 02511 typedef VOID DDKAPI 02512 (*PIO_CSQ_INSERT_IRP)( 02513 /*IN*/ struct _IO_CSQ *Csq, 02514 /*IN*/ PIRP Irp); 02515 02516 typedef VOID DDKAPI 02517 (*PIO_CSQ_REMOVE_IRP)( 02518 /*IN*/ struct _IO_CSQ *Csq, 02519 /*IN*/ PIRP Irp); 02520 02521 typedef PIRP DDKAPI 02522 (*PIO_CSQ_PEEK_NEXT_IRP)( 02523 /*IN*/ struct _IO_CSQ *Csq, 02524 /*IN*/ PIRP Irp, 02525 /*IN*/ PVOID PeekContext); 02526 02527 typedef VOID DDKAPI 02528 (*PIO_CSQ_ACQUIRE_LOCK)( 02529 /*IN*/ struct _IO_CSQ *Csq, 02530 /*OUT*/ PKIRQL Irql); 02531 02532 typedef VOID DDKAPI 02533 (*PIO_CSQ_RELEASE_LOCK)( 02534 /*IN*/ struct _IO_CSQ *Csq, 02535 /*IN*/ KIRQL Irql); 02536 02537 typedef VOID DDKAPI 02538 (*PIO_CSQ_COMPLETE_CANCELED_IRP)( 02539 /*IN*/ struct _IO_CSQ *Csq, 02540 /*IN*/ PIRP Irp); 02541 02542 typedef struct _IO_CSQ { 02543 ULONG Type; 02544 PIO_CSQ_INSERT_IRP CsqInsertIrp; 02545 PIO_CSQ_REMOVE_IRP CsqRemoveIrp; 02546 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp; 02547 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock; 02548 PIO_CSQ_RELEASE_LOCK CsqReleaseLock; 02549 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp; 02550 PVOID ReservePointer; 02551 } IO_CSQ, *PIO_CSQ; 02552 02553 #include <pshpack4.h> 02554 typedef struct _IO_STACK_LOCATION { 02555 UCHAR MajorFunction; 02556 UCHAR MinorFunction; 02557 UCHAR Flags; 02558 UCHAR Control; 02559 union { 02560 struct { 02561 PIO_SECURITY_CONTEXT SecurityContext; 02562 ULONG Options; 02563 USHORT POINTER_ALIGNMENT FileAttributes; 02564 USHORT ShareAccess; 02565 ULONG POINTER_ALIGNMENT EaLength; 02566 } Create; 02567 struct { 02568 ULONG Length; 02569 ULONG POINTER_ALIGNMENT Key; 02570 LARGE_INTEGER ByteOffset; 02571 } Read; 02572 struct { 02573 ULONG Length; 02574 ULONG POINTER_ALIGNMENT Key; 02575 LARGE_INTEGER ByteOffset; 02576 } Write; 02577 struct { 02578 ULONG Length; 02579 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; 02580 } QueryFile; 02581 struct { 02582 ULONG Length; 02583 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; 02584 PFILE_OBJECT FileObject; 02585 _ANONYMOUS_UNION union { 02586 _ANONYMOUS_STRUCT struct { 02587 BOOLEAN ReplaceIfExists; 02588 BOOLEAN AdvanceOnly; 02589 } DUMMYSTRUCTNAME; 02590 ULONG ClusterCount; 02591 HANDLE DeleteHandle; 02592 } DUMMYUNIONNAME; 02593 } SetFile; 02594 struct { 02595 ULONG Length; 02596 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; 02597 } QueryVolume; 02598 struct { 02599 ULONG OutputBufferLength; 02600 ULONG POINTER_ALIGNMENT InputBufferLength; 02601 ULONG POINTER_ALIGNMENT IoControlCode; 02602 PVOID Type3InputBuffer; 02603 } DeviceIoControl; 02604 struct { 02605 SECURITY_INFORMATION SecurityInformation; 02606 ULONG POINTER_ALIGNMENT Length; 02607 } QuerySecurity; 02608 struct { 02609 SECURITY_INFORMATION SecurityInformation; 02610 PSECURITY_DESCRIPTOR SecurityDescriptor; 02611 } SetSecurity; 02612 struct { 02613 PVPB Vpb; 02614 PDEVICE_OBJECT DeviceObject; 02615 } MountVolume; 02616 struct { 02617 PVPB Vpb; 02618 PDEVICE_OBJECT DeviceObject; 02619 } VerifyVolume; 02620 struct { 02621 struct _SCSI_REQUEST_BLOCK *Srb; 02622 } Scsi; 02623 struct { 02624 DEVICE_RELATION_TYPE Type; 02625 } QueryDeviceRelations; 02626 struct { 02627 CONST GUID *InterfaceType; 02628 USHORT Size; 02629 USHORT Version; 02630 PINTERFACE Interface; 02631 PVOID InterfaceSpecificData; 02632 } QueryInterface; 02633 struct { 02634 PDEVICE_CAPABILITIES Capabilities; 02635 } DeviceCapabilities; 02636 struct { 02637 PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList; 02638 } FilterResourceRequirements; 02639 struct { 02640 ULONG WhichSpace; 02641 PVOID Buffer; 02642 ULONG Offset; 02643 ULONG POINTER_ALIGNMENT Length; 02644 } ReadWriteConfig; 02645 struct { 02646 BOOLEAN Lock; 02647 } SetLock; 02648 struct { 02649 BUS_QUERY_ID_TYPE IdType; 02650 } QueryId; 02651 struct { 02652 DEVICE_TEXT_TYPE DeviceTextType; 02653 LCID POINTER_ALIGNMENT LocaleId; 02654 } QueryDeviceText; 02655 struct { 02656 BOOLEAN InPath; 02657 BOOLEAN Reserved[3]; 02658 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type; 02659 } UsageNotification; 02660 struct { 02661 SYSTEM_POWER_STATE PowerState; 02662 } WaitWake; 02663 struct { 02664 PPOWER_SEQUENCE PowerSequence; 02665 } PowerSequence; 02666 struct { 02667 ULONG SystemContext; 02668 POWER_STATE_TYPE POINTER_ALIGNMENT Type; 02669 POWER_STATE POINTER_ALIGNMENT State; 02670 POWER_ACTION POINTER_ALIGNMENT ShutdownType; 02671 } Power; 02672 struct { 02673 PCM_RESOURCE_LIST AllocatedResources; 02674 PCM_RESOURCE_LIST AllocatedResourcesTranslated; 02675 } StartDevice; 02676 struct { 02677 ULONG_PTR ProviderId; 02678 PVOID DataPath; 02679 ULONG BufferSize; 02680 PVOID Buffer; 02681 } WMI; 02682 struct { 02683 PVOID Argument1; 02684 PVOID Argument2; 02685 PVOID Argument3; 02686 PVOID Argument4; 02687 } Others; 02688 } Parameters; 02689 PDEVICE_OBJECT DeviceObject; 02690 PFILE_OBJECT FileObject; 02691 PIO_COMPLETION_ROUTINE CompletionRoutine; 02692 PVOID Context; 02693 } IO_STACK_LOCATION, *PIO_STACK_LOCATION; 02694 #include <poppack.h> 02695 02696 /* IO_STACK_LOCATION.Control */ 02697 02698 #define SL_PENDING_RETURNED 0x01 02699 #define SL_INVOKE_ON_CANCEL 0x20 02700 #define SL_INVOKE_ON_SUCCESS 0x40 02701 #define SL_INVOKE_ON_ERROR 0x80 02702 02703 typedef enum _KEY_INFORMATION_CLASS { 02704 KeyBasicInformation, 02705 KeyNodeInformation, 02706 KeyFullInformation, 02707 KeyNameInformation, 02708 KeyCachedInformation, 02709 KeyFlagsInformation 02710 } KEY_INFORMATION_CLASS; 02711 02712 typedef struct _KEY_BASIC_INFORMATION { 02713 LARGE_INTEGER LastWriteTime; 02714 ULONG TitleIndex; 02715 ULONG NameLength; 02716 WCHAR Name[1]; 02717 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION; 02718 02719 typedef struct _KEY_FULL_INFORMATION { 02720 LARGE_INTEGER LastWriteTime; 02721 ULONG TitleIndex; 02722 ULONG ClassOffset; 02723 ULONG ClassLength; 02724 ULONG SubKeys; 02725 ULONG MaxNameLen; 02726 ULONG MaxClassLen; 02727 ULONG Values; 02728 ULONG MaxValueNameLen; 02729 ULONG MaxValueDataLen; 02730 WCHAR Class[1]; 02731 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; 02732 02733 typedef struct _KEY_NODE_INFORMATION { 02734 LARGE_INTEGER LastWriteTime; 02735 ULONG TitleIndex; 02736 ULONG ClassOffset; 02737 ULONG ClassLength; 02738 ULONG NameLength; 02739 WCHAR Name[1]; 02740 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION; 02741 02742 typedef struct _KEY_VALUE_BASIC_INFORMATION { 02743 ULONG TitleIndex; 02744 ULONG Type; 02745 ULONG NameLength; 02746 WCHAR Name[1]; 02747 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION; 02748 02749 typedef struct _KEY_VALUE_FULL_INFORMATION { 02750 ULONG TitleIndex; 02751 ULONG Type; 02752 ULONG DataOffset; 02753 ULONG DataLength; 02754 ULONG NameLength; 02755 WCHAR Name[1]; 02756 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION; 02757 02758 typedef struct _KEY_VALUE_PARTIAL_INFORMATION { 02759 ULONG TitleIndex; 02760 ULONG Type; 02761 ULONG DataLength; 02762 UCHAR Data[1]; 02763 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; 02764 02765 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 { 02766 ULONG Type; 02767 ULONG DataLength; 02768 UCHAR Data[1]; 02769 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; 02770 02771 typedef struct _KEY_VALUE_ENTRY { 02772 PUNICODE_STRING ValueName; 02773 ULONG DataLength; 02774 ULONG DataOffset; 02775 ULONG Type; 02776 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY; 02777 02778 typedef enum _KEY_VALUE_INFORMATION_CLASS { 02779 KeyValueBasicInformation, 02780 KeyValueFullInformation, 02781 KeyValuePartialInformation, 02782 KeyValueFullInformationAlign64, 02783 KeyValuePartialInformationAlign64 02784 } KEY_VALUE_INFORMATION_CLASS; 02785 02786 /* KEY_VALUE_Xxx.Type */ 02787 02788 #define REG_NONE 0 02789 #define REG_SZ 1 02790 #define REG_EXPAND_SZ 2 02791 #define REG_BINARY 3 02792 #define REG_DWORD 4 02793 #define REG_DWORD_LITTLE_ENDIAN 4 02794 #define REG_DWORD_BIG_ENDIAN 5 02795 #define REG_LINK 6 02796 #define REG_MULTI_SZ 7 02797 #define REG_RESOURCE_LIST 8 02798 #define REG_FULL_RESOURCE_DESCRIPTOR 9 02799 #define REG_RESOURCE_REQUIREMENTS_LIST 10 02800 #define REG_QWORD 11 02801 #define REG_QWORD_LITTLE_ENDIAN 11 02802 02803 #define PCI_TYPE0_ADDRESSES 6 02804 #define PCI_TYPE1_ADDRESSES 2 02805 #define PCI_TYPE2_ADDRESSES 5 02806 02807 typedef struct _PCI_COMMON_CONFIG { 02808 USHORT VendorID; 02809 USHORT DeviceID; 02810 USHORT Command; 02811 USHORT Status; 02812 UCHAR RevisionID; 02813 UCHAR ProgIf; 02814 UCHAR SubClass; 02815 UCHAR BaseClass; 02816 UCHAR CacheLineSize; 02817 UCHAR LatencyTimer; 02818 UCHAR HeaderType; 02819 UCHAR BIST; 02820 union { 02821 struct _PCI_HEADER_TYPE_0 { 02822 ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; 02823 ULONG CIS; 02824 USHORT SubVendorID; 02825 USHORT SubSystemID; 02826 ULONG ROMBaseAddress; 02827 UCHAR CapabilitiesPtr; 02828 UCHAR Reserved1[3]; 02829 ULONG Reserved2; 02830 UCHAR InterruptLine; 02831 UCHAR InterruptPin; 02832 UCHAR MinimumGrant; 02833 UCHAR MaximumLatency; 02834 } type0; 02835 struct _PCI_HEADER_TYPE_1 { 02836 ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; 02837 UCHAR PrimaryBus; 02838 UCHAR SecondaryBus; 02839 UCHAR SubordinateBus; 02840 UCHAR SecondaryLatency; 02841 UCHAR IOBase; 02842 UCHAR IOLimit; 02843 USHORT SecondaryStatus; 02844 USHORT MemoryBase; 02845 USHORT MemoryLimit; 02846 USHORT PrefetchBase; 02847 USHORT PrefetchLimit; 02848 ULONG PrefetchBaseUpper32; 02849 ULONG PrefetchLimitUpper32; 02850 USHORT IOBaseUpper16; 02851 USHORT IOLimitUpper16; 02852 UCHAR CapabilitiesPtr; 02853 UCHAR Reserved1[3]; 02854 ULONG ROMBaseAddress; 02855 UCHAR InterruptLine; 02856 UCHAR InterruptPin; 02857 USHORT BridgeControl; 02858 } type1; 02859 struct _PCI_HEADER_TYPE_2 { 02860 ULONG SocketRegistersBaseAddress; 02861 UCHAR CapabilitiesPtr; 02862 UCHAR Reserved; 02863 USHORT SecondaryStatus; 02864 UCHAR PrimaryBus; 02865 UCHAR SecondaryBus; 02866 UCHAR SubordinateBus; 02867 UCHAR SecondaryLatency; 02868 struct { 02869 ULONG Base; 02870 ULONG Limit; 02871 } Range[PCI_TYPE2_ADDRESSES - 1]; 02872 UCHAR InterruptLine; 02873 UCHAR InterruptPin; 02874 USHORT BridgeControl; 02875 } type2; 02876 } u; 02877 UCHAR DeviceSpecific[192]; 02878 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; 02879 02880 /* PCI_COMMON_CONFIG.Command */ 02881 02882 #define PCI_ENABLE_IO_SPACE 0x0001 02883 #define PCI_ENABLE_MEMORY_SPACE 0x0002 02884 #define PCI_ENABLE_BUS_MASTER 0x0004 02885 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008 02886 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010 02887 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020 02888 #define PCI_ENABLE_PARITY 0x0040 02889 #define PCI_ENABLE_WAIT_CYCLE 0x0080 02890 #define PCI_ENABLE_SERR 0x0100 02891 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200 02892 02893 /* PCI_COMMON_CONFIG.Status */ 02894 02895 #define PCI_STATUS_CAPABILITIES_LIST 0x0010 02896 #define PCI_STATUS_66MHZ_CAPABLE 0x0020 02897 #define PCI_STATUS_UDF_SUPPORTED 0x0040 02898 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 02899 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 02900 #define PCI_STATUS_DEVSEL 0x0600 02901 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800 02902 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000 02903 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000 02904 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000 02905 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000 02906 02907 /* PCI_COMMON_CONFIG.HeaderType */ 02908 02909 #define PCI_MULTIFUNCTION 0x80 02910 #define PCI_DEVICE_TYPE 0x00 02911 #define PCI_BRIDGE_TYPE 0x01 02912 #define PCI_CARDBUS_BRIDGE_TYPE 0x02 02913 02914 #define PCI_CONFIGURATION_TYPE(PciData) \ 02915 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION) 02916 02917 #define PCI_MULTIFUNCTION_DEVICE(PciData) \ 02918 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0) 02919 02920 typedef struct _PCI_SLOT_NUMBER { 02921 union { 02922 struct { 02923 ULONG DeviceNumber : 5; 02924 ULONG FunctionNumber : 3; 02925 ULONG Reserved : 24; 02926 } bits; 02927 ULONG AsULONG; 02928 } u; 02929 } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER; 02930 02931 typedef enum _POOL_TYPE { 02932 NonPagedPool, 02933 PagedPool, 02934 NonPagedPoolMustSucceed, 02935 DontUseThisType, 02936 NonPagedPoolCacheAligned, 02937 PagedPoolCacheAligned, 02938 NonPagedPoolCacheAlignedMustS, 02939 MaxPoolType, 02940 NonPagedPoolSession = 32, 02941 PagedPoolSession, 02942 NonPagedPoolMustSucceedSession, 02943 DontUseThisTypeSession, 02944 NonPagedPoolCacheAlignedSession, 02945 PagedPoolCacheAlignedSession, 02946 NonPagedPoolCacheAlignedMustSSession 02947 } POOL_TYPE; 02948 02949 typedef enum _EX_POOL_PRIORITY { 02950 LowPoolPriority, 02951 LowPoolPrioritySpecialPoolOverrun = 8, 02952 LowPoolPrioritySpecialPoolUnderrun = 9, 02953 NormalPoolPriority = 16, 02954 NormalPoolPrioritySpecialPoolOverrun = 24, 02955 NormalPoolPrioritySpecialPoolUnderrun = 25, 02956 HighPoolPriority = 32, 02957 HighPoolPrioritySpecialPoolOverrun = 40, 02958 HighPoolPrioritySpecialPoolUnderrun = 41 02959 } EX_POOL_PRIORITY; 02960 02961 /* PRIVILEGE_SET.Control */ 02962 02963 #define PRIVILEGE_SET_ALL_NECESSARY 1 02964 02965 typedef struct _RTL_OSVERSIONINFOW { 02966 ULONG dwOSVersionInfoSize; 02967 ULONG dwMajorVersion; 02968 ULONG dwMinorVersion; 02969 ULONG dwBuildNumber; 02970 ULONG dwPlatformId; 02971 WCHAR szCSDVersion[128]; 02972 } RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW; 02973 02974 typedef struct _RTL_OSVERSIONINFOEXW { 02975 ULONG dwOSVersionInfoSize; 02976 ULONG dwMajorVersion; 02977 ULONG dwMinorVersion; 02978 ULONG dwBuildNumber; 02979 ULONG dwPlatformId; 02980 WCHAR szCSDVersion[128]; 02981 USHORT wServicePackMajor; 02982 USHORT wServicePackMinor; 02983 USHORT wSuiteMask; 02984 UCHAR wProductType; 02985 UCHAR wReserved; 02986 } RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW; 02987 02988 NTOSAPI 02989 ULONGLONG 02990 DDKAPI 02991 VerSetConditionMask( 02992 /*IN*/ ULONGLONG ConditionMask, 02993 /*IN*/ ULONG TypeMask, 02994 /*IN*/ UCHAR Condition); 02995 02996 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \ 02997 ((ConditionMask) = VerSetConditionMask((ConditionMask), \ 02998 (TypeBitMask), (ComparisonType))) 02999 03000 /* RtlVerifyVersionInfo() TypeMask */ 03001 03002 #define VER_MINORVERSION 0x0000001 03003 #define VER_MAJORVERSION 0x0000002 03004 #define VER_BUILDNUMBER 0x0000004 03005 #define VER_PLATFORMID 0x0000008 03006 #define VER_SERVICEPACKMINOR 0x0000010 03007 #define VER_SERVICEPACKMAJOR 0x0000020 03008 #define VER_SUITENAME 0x0000040 03009 #define VER_PRODUCT_TYPE 0x0000080 03010 03011 /* RtlVerifyVersionInfo() ComparisonType */ 03012 03013 #define VER_EQUAL 1 03014 #define VER_GREATER 2 03015 #define VER_GREATER_EQUAL 3 03016 #define VER_LESS 4 03017 #define VER_LESS_EQUAL 5 03018 #define VER_AND 6 03019 #define VER_OR 7 03020 03021 #define VER_CONDITION_MASK 7 03022 #define VER_NUM_BITS_PER_CONDITION_MASK 3 03023 03024 typedef struct _RTL_BITMAP { 03025 ULONG SizeOfBitMap; 03026 PULONG Buffer; 03027 } RTL_BITMAP, *PRTL_BITMAP; 03028 03029 typedef struct _RTL_BITMAP_RUN { 03030 ULONG StartingIndex; 03031 ULONG NumberOfBits; 03032 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN; 03033 03034 typedef NTSTATUS DDKAPI 03035 (*PRTL_QUERY_REGISTRY_ROUTINE)( 03036 /*IN*/ PWSTR ValueName, 03037 /*IN*/ ULONG ValueType, 03038 /*IN*/ PVOID ValueData, 03039 /*IN*/ ULONG ValueLength, 03040 /*IN*/ PVOID Context, 03041 /*IN*/ PVOID EntryContext); 03042 03043 #define RTL_REGISTRY_ABSOLUTE 0 03044 #define RTL_REGISTRY_SERVICES 1 03045 #define RTL_REGISTRY_CONTROL 2 03046 #define RTL_REGISTRY_WINDOWS_NT 3 03047 #define RTL_REGISTRY_DEVICEMAP 4 03048 #define RTL_REGISTRY_USER 5 03049 03050 /* RTL_QUERY_REGISTRY_TABLE.Flags */ 03051 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001 03052 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002 03053 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004 03054 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008 03055 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010 03056 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020 03057 #define RTL_QUERY_REGISTRY_DELETE 0x00000040 03058 03059 typedef struct _RTL_QUERY_REGISTRY_TABLE { 03060 PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; 03061 ULONG Flags; 03062 PWSTR Name; 03063 PVOID EntryContext; 03064 ULONG DefaultType; 03065 PVOID DefaultData; 03066 ULONG DefaultLength; 03067 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; 03068 03069 typedef struct _TIME_FIELDS { 03070 CSHORT Year; 03071 CSHORT Month; 03072 CSHORT Day; 03073 CSHORT Hour; 03074 CSHORT Minute; 03075 CSHORT Second; 03076 CSHORT Milliseconds; 03077 CSHORT Weekday; 03078 } TIME_FIELDS, *PTIME_FIELDS; 03079 03080 typedef PVOID DDKAPI 03081 (*PALLOCATE_FUNCTION)( 03082 /*IN*/ POOL_TYPE PoolType, 03083 /*IN*/ SIZE_T NumberOfBytes, 03084 /*IN*/ ULONG Tag); 03085 03086 typedef VOID DDKAPI 03087 (*PFREE_FUNCTION)( 03088 /*IN*/ PVOID Buffer); 03089 03090 #define GENERAL_LOOKASIDE_S \ 03091 SLIST_HEADER ListHead; \ 03092 USHORT Depth; \ 03093 USHORT MaximumDepth; \ 03094 ULONG TotalAllocates; \ 03095 _ANONYMOUS_UNION union { \ 03096 ULONG AllocateMisses; \ 03097 ULONG AllocateHits; \ 03098 } DUMMYUNIONNAME; \ 03099 ULONG TotalFrees; \ 03100 _ANONYMOUS_UNION union { \ 03101 ULONG FreeMisses; \ 03102 ULONG FreeHits; \ 03103 } DUMMYUNIONNAME2; \ 03104 POOL_TYPE Type; \ 03105 ULONG Tag; \ 03106 ULONG Size; \ 03107 PALLOCATE_FUNCTION Allocate; \ 03108 PFREE_FUNCTION Free; \ 03109 LIST_ENTRY ListEntry; \ 03110 ULONG LastTotalAllocates; \ 03111 _ANONYMOUS_UNION union { \ 03112 ULONG LastAllocateMisses; \ 03113 ULONG LastAllocateHits; \ 03114 } DUMMYUNIONNAME3; \ 03115 ULONG Future[2]; 03116 03117 typedef struct _GENERAL_LOOKASIDE { 03118 GENERAL_LOOKASIDE_S 03119 } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE; 03120 03121 typedef struct _NPAGED_LOOKASIDE_LIST { 03122 GENERAL_LOOKASIDE_S 03123 KSPIN_LOCK Obsoleted; 03124 } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST; 03125 03126 typedef struct _PAGED_LOOKASIDE_LIST { 03127 GENERAL_LOOKASIDE_S 03128 FAST_MUTEX Obsoleted; 03129 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST; 03130 03131 typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT; 03132 03133 typedef VOID DDKAPI (*PCALLBACK_FUNCTION)( 03134 /*IN*/ PVOID CallbackContext, 03135 /*IN*/ PVOID Argument1, 03136 /*IN*/ PVOID Argument2); 03137 03138 typedef enum _EVENT_TYPE { 03139 NotificationEvent, 03140 SynchronizationEvent 03141 } EVENT_TYPE; 03142 03143 typedef enum _KWAIT_REASON { 03144 Executive, 03145 FreePage, 03146 PageIn, 03147 PoolAllocation, 03148 DelayExecution, 03149 Suspended, 03150 UserRequest, 03151 WrExecutive, 03152 WrFreePage, 03153 WrPageIn, 03154 WrPoolAllocation, 03155 WrDelayExecution, 03156 WrSuspended, 03157 WrUserRequest, 03158 WrEventPair, 03159 WrQueue, 03160 WrLpcReceive, 03161 WrLpcReply, 03162 WrVirtualMemory, 03163 WrPageOut, 03164 WrRendezvous, 03165 Spare2, 03166 Spare3, 03167 Spare4, 03168 Spare5, 03169 Spare6, 03170 WrKernel, 03171 MaximumWaitReason 03172 } KWAIT_REASON; 03173 03174 typedef struct _KWAIT_BLOCK { 03175 LIST_ENTRY WaitListEntry; 03176 struct _KTHREAD * RESTRICTED_POINTER Thread; 03177 PVOID Object; 03178 struct _KWAIT_BLOCK * RESTRICTED_POINTER NextWaitBlock; 03179 USHORT WaitKey; 03180 USHORT WaitType; 03181 } KWAIT_BLOCK, *PKWAIT_BLOCK, *RESTRICTED_POINTER PRKWAIT_BLOCK; 03182 03183 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK; 03184 03185 typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK { 03186 BOOLEAN Removed; 03187 BOOLEAN Reserved[3]; 03188 LONG IoCount; 03189 KEVENT RemoveEvent; 03190 } IO_REMOVE_LOCK_COMMON_BLOCK; 03191 03192 typedef struct _IO_REMOVE_LOCK_DBG_BLOCK { 03193 LONG Signature; 03194 LONG HighWatermark; 03195 LONGLONG MaxLockedTicks; 03196 LONG AllocateTag; 03197 LIST_ENTRY LockList; 03198 KSPIN_LOCK Spin; 03199 LONG LowMemoryCount; 03200 ULONG Reserved1[4]; 03201 PVOID Reserved2; 03202 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks; 03203 } IO_REMOVE_LOCK_DBG_BLOCK; 03204 03205 typedef struct _IO_REMOVE_LOCK { 03206 IO_REMOVE_LOCK_COMMON_BLOCK Common; 03207 #ifdef DBG 03208 IO_REMOVE_LOCK_DBG_BLOCK Dbg; 03209 #endif 03210 } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK; 03211 03212 typedef struct _IO_WORKITEM *PIO_WORKITEM; 03213 03214 typedef VOID DDKAPI 03215 (*PIO_WORKITEM_ROUTINE)( 03216 /*IN*/ PDEVICE_OBJECT DeviceObject, 03217 /*IN*/ PVOID Context); 03218 03219 typedef struct _SHARE_ACCESS { 03220 ULONG OpenCount; 03221 ULONG Readers; 03222 ULONG Writers; 03223 ULONG Deleters; 03224 ULONG SharedRead; 03225 ULONG SharedWrite; 03226 ULONG SharedDelete; 03227 } SHARE_ACCESS, *PSHARE_ACCESS; 03228 03229 typedef enum _KINTERRUPT_MODE { 03230 LevelSensitive, 03231 Latched 03232 } KINTERRUPT_MODE; 03233 03234 typedef VOID DDKAPI 03235 (*PKINTERRUPT_ROUTINE)( 03236 VOID); 03237 03238 typedef enum _KPROFILE_SOURCE { 03239 ProfileTime, 03240 ProfileAlignmentFixup, 03241 ProfileTotalIssues, 03242 ProfilePipelineDry, 03243 ProfileLoadInstructions, 03244 ProfilePipelineFrozen, 03245 ProfileBranchInstructions, 03246 ProfileTotalNonissues, 03247 ProfileDcacheMisses, 03248 ProfileIcacheMisses, 03249 ProfileCacheMisses, 03250 ProfileBranchMispredictions, 03251 ProfileStoreInstructions, 03252 ProfileFpInstructions, 03253 ProfileIntegerInstructions, 03254 Profile2Issue, 03255 Profile3Issue, 03256 Profile4Issue, 03257 ProfileSpecialInstructions, 03258 ProfileTotalCycles, 03259 ProfileIcacheIssues, 03260 ProfileDcacheAccesses, 03261 ProfileMemoryBarrierCycles, 03262 ProfileLoadLinkedIssues, 03263 ProfileMaximum 03264 } KPROFILE_SOURCE; 03265 03266 typedef enum _CREATE_FILE_TYPE { 03267 CreateFileTypeNone, 03268 CreateFileTypeNamedPipe, 03269 CreateFileTypeMailslot 03270 } CREATE_FILE_TYPE; 03271 03272 typedef struct _CONFIGURATION_INFORMATION { 03273 ULONG DiskCount; 03274 ULONG FloppyCount; 03275 ULONG CdRomCount; 03276 ULONG TapeCount; 03277 ULONG ScsiPortCount; 03278 ULONG SerialCount; 03279 ULONG ParallelCount; 03280 BOOLEAN AtDiskPrimaryAddressClaimed; 03281 BOOLEAN AtDiskSecondaryAddressClaimed; 03282 ULONG Version; 03283 ULONG MediumChangerCount; 03284 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; 03285 03286 typedef enum _CONFIGURATION_TYPE { 03287 ArcSystem, 03288 CentralProcessor, 03289 FloatingPointProcessor, 03290 PrimaryIcache, 03291 PrimaryDcache, 03292 SecondaryIcache, 03293 SecondaryDcache, 03294 SecondaryCache, 03295 EisaAdapter, 03296 TcAdapter, 03297 ScsiAdapter, 03298 DtiAdapter, 03299 MultiFunctionAdapter, 03300 DiskController, 03301 TapeController, 03302 CdromController, 03303 WormController, 03304 SerialController, 03305 NetworkController, 03306 DisplayController, 03307 ParallelController, 03308 PointerController, 03309 KeyboardController, 03310 AudioController, 03311 OtherController, 03312 DiskPeripheral, 03313 FloppyDiskPeripheral, 03314 TapePeripheral, 03315 ModemPeripheral, 03316 MonitorPeripheral, 03317 PrinterPeripheral, 03318 PointerPeripheral, 03319 KeyboardPeripheral, 03320 TerminalPeripheral, 03321 OtherPeripheral, 03322 LinePeripheral, 03323 NetworkPeripheral, 03324 SystemMemory, 03325 DockingInformation, 03326 RealModeIrqRoutingTable, 03327 MaximumType 03328 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; 03329 03330 typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE)( 03331 /*IN*/ PVOID Context, 03332 /*IN*/ PUNICODE_STRING PathName, 03333 /*IN*/ INTERFACE_TYPE BusType, 03334 /*IN*/ ULONG BusNumber, 03335 /*IN*/ PKEY_VALUE_FULL_INFORMATION *BusInformation, 03336 /*IN*/ CONFIGURATION_TYPE ControllerType, 03337 /*IN*/ ULONG ControllerNumber, 03338 /*IN*/ PKEY_VALUE_FULL_INFORMATION *ControllerInformation, 03339 /*IN*/ CONFIGURATION_TYPE PeripheralType, 03340 /*IN*/ ULONG PeripheralNumber, 03341 /*IN*/ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); 03342 03343 typedef enum _WORK_QUEUE_TYPE { 03344 CriticalWorkQueue, 03345 DelayedWorkQueue, 03346 HyperCriticalWorkQueue, 03347 MaximumWorkQueue 03348 } WORK_QUEUE_TYPE; 03349 03350 typedef VOID DDKAPI 03351 (*PWORKER_THREAD_ROUTINE)( 03352 /*IN*/ PVOID Parameter); 03353 03354 typedef struct _WORK_QUEUE_ITEM { 03355 LIST_ENTRY List; 03356 PWORKER_THREAD_ROUTINE WorkerRoutine; 03357 PVOID Parameter; 03358 } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM; 03359 03360 typedef enum _KBUGCHECK_BUFFER_DUMP_STATE { 03361 BufferEmpty, 03362 BufferInserted, 03363 BufferStarted, 03364 BufferFinished, 03365 BufferIncomplete 03366 } KBUGCHECK_BUFFER_DUMP_STATE; 03367 03368 typedef VOID DDKAPI 03369 (*PKBUGCHECK_CALLBACK_ROUTINE)( 03370 /*IN*/ PVOID Buffer, 03371 /*IN*/ ULONG Length); 03372 03373 typedef struct _KBUGCHECK_CALLBACK_RECORD { 03374 LIST_ENTRY Entry; 03375 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine; 03376 PVOID Buffer; 03377 ULONG Length; 03378 PUCHAR Component; 03379 ULONG_PTR Checksum; 03380 UCHAR State; 03381 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; 03382 03383 /* 03384 * VOID 03385 * KeInitializeCallbackRecord( 03386 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord) 03387 */ 03388 #define KeInitializeCallbackRecord(CallbackRecord) \ 03389 CallbackRecord->State = BufferEmpty; 03390 03391 typedef enum _KDPC_IMPORTANCE { 03392 LowImportance, 03393 MediumImportance, 03394 HighImportance 03395 } KDPC_IMPORTANCE; 03396 03397 typedef enum _MEMORY_CACHING_TYPE_ORIG { 03398 MmFrameBufferCached = 2 03399 } MEMORY_CACHING_TYPE_ORIG; 03400 03401 typedef enum _MEMORY_CACHING_TYPE { 03402 MmNonCached = FALSE, 03403 MmCached = TRUE, 03404 MmWriteCombined = MmFrameBufferCached, 03405 MmHardwareCoherentCached, 03406 MmNonCachedUnordered, 03407 MmUSWCCached, 03408 MmMaximumCacheType 03409 } MEMORY_CACHING_TYPE; 03410 03411 typedef enum _MM_PAGE_PRIORITY { 03412 LowPagePriority, 03413 NormalPagePriority = 16, 03414 HighPagePriority = 32 03415 } MM_PAGE_PRIORITY; 03416 03417 typedef enum _LOCK_OPERATION { 03418 IoReadAccess, 03419 IoWriteAccess, 03420 IoModifyAccess 03421 } LOCK_OPERATION; 03422 03423 typedef enum _MM_SYSTEM_SIZE { 03424 MmSmallSystem, 03425 MmMediumSystem, 03426 MmLargeSystem 03427 } MM_SYSTEM_SIZE; 03428 03429 typedef struct _OBJECT_HANDLE_INFORMATION { 03430 ULONG HandleAttributes; 03431 ACCESS_MASK GrantedAccess; 03432 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; 03433 03434 typedef struct _CLIENT_ID { 03435 HANDLE UniqueProcess; 03436 HANDLE UniqueThread; 03437 } CLIENT_ID, *PCLIENT_ID; 03438 03439 typedef VOID DDKAPI 03440 (*PKSTART_ROUTINE)( 03441 /*IN*/ PVOID StartContext); 03442 03443 typedef VOID DDKAPI 03444 (*PCREATE_PROCESS_NOTIFY_ROUTINE)( 03445 /*IN*/ HANDLE ParentId, 03446 /*IN*/ HANDLE ProcessId, 03447 /*IN*/ BOOLEAN Create); 03448 03449 typedef VOID DDKAPI 03450 (*PCREATE_THREAD_NOTIFY_ROUTINE)( 03451 /*IN*/ HANDLE ProcessId, 03452 /*IN*/ HANDLE ThreadId, 03453 /*IN*/ BOOLEAN Create); 03454 03455 typedef struct _IMAGE_INFO { 03456 _ANONYMOUS_UNION union { 03457 ULONG Properties; 03458 _ANONYMOUS_STRUCT struct { 03459 ULONG ImageAddressingMode : 8; 03460 ULONG SystemModeImage : 1; 03461 ULONG ImageMappedToAllPids : 1; 03462 ULONG Reserved : 22; 03463 } DUMMYSTRUCTNAME; 03464 } DUMMYUNIONNAME; 03465 PVOID ImageBase; 03466 ULONG ImageSelector; 03467 SIZE_T ImageSize; 03468 ULONG ImageSectionNumber; 03469 } IMAGE_INFO, *PIMAGE_INFO; 03470 03471 #define IMAGE_ADDRESSING_MODE_32BIT 3 03472 03473 typedef VOID DDKAPI 03474 (*PLOAD_IMAGE_NOTIFY_ROUTINE)( 03475 /*IN*/ PUNICODE_STRING FullImageName, 03476 /*IN*/ HANDLE ProcessId, 03477 /*IN*/ PIMAGE_INFO ImageInfo); 03478 03479 typedef enum _PROCESSINFOCLASS { 03480 ProcessBasicInformation, 03481 ProcessQuotaLimits, 03482 ProcessIoCounters, 03483 ProcessVmCounters, 03484 ProcessTimes, 03485 ProcessBasePriority, 03486 ProcessRaisePriority, 03487 ProcessDebugPort, 03488 ProcessExceptionPort, 03489 ProcessAccessToken, 03490 ProcessLdtInformation, 03491 ProcessLdtSize, 03492 ProcessDefaultHardErrorMode, 03493 ProcessIoPortHandlers, 03494 ProcessPooledUsageAndLimits, 03495 ProcessWorkingSetWatch, 03496 ProcessUserModeIOPL, 03497 ProcessEnableAlignmentFaultFixup, 03498 ProcessPriorityClass, 03499 ProcessWx86Information, 03500 ProcessHandleCount, 03501 ProcessAffinityMask, 03502 ProcessPriorityBoost, 03503 ProcessDeviceMap, 03504 ProcessSessionInformation, 03505 ProcessForegroundInformation, 03506 ProcessWow64Information, 03507 ProcessImageFileName, 03508 ProcessLUIDDeviceMapsEnabled, 03509 ProcessBreakOnTermination, 03510 ProcessDebugObjectHandle, 03511 ProcessDebugFlags, 03512 ProcessHandleTracing, 03513 MaxProcessInfoClass 03514 } PROCESSINFOCLASS; 03515 03516 typedef enum _THREADINFOCLASS { 03517 ThreadBasicInformation, 03518 ThreadTimes, 03519 ThreadPriority, 03520 ThreadBasePriority, 03521 ThreadAffinityMask, 03522 ThreadImpersonationToken, 03523 ThreadDescriptorTableEntry, 03524 ThreadEnableAlignmentFaultFixup, 03525 ThreadEventPair_Reusable, 03526 ThreadQuerySetWin32StartAddress, 03527 ThreadZeroTlsCell, 03528 ThreadPerformanceCount, 03529 ThreadAmILastThread, 03530 ThreadIdealProcessor, 03531 ThreadPriorityBoost, 03532 ThreadSetTlsArrayAddress, 03533 ThreadIsIoPending, 03534 ThreadHideFromDebugger, 03535 ThreadBreakOnTermination, 03536 MaxThreadInfoClass 03537 } THREADINFOCLASS; 03538 03539 #define ES_SYSTEM_REQUIRED 0x00000001 03540 #define ES_DISPLAY_REQUIRED 0x00000002 03541 #define ES_USER_PRESENT 0x00000004 03542 #define ES_CONTINUOUS 0x80000000 03543 03544 typedef ULONG EXECUTION_STATE; 03545 03546 typedef VOID DDKAPI 03547 (*PREQUEST_POWER_COMPLETE)( 03548 /*IN*/ PDEVICE_OBJECT DeviceObject, 03549 /*IN*/ UCHAR MinorFunction, 03550 /*IN*/ POWER_STATE PowerState, 03551 /*IN*/ PVOID Context, 03552 /*IN*/ PIO_STATUS_BLOCK IoStatus); 03553 03554 typedef enum _TRACE_INFORMATION_CLASS { 03555 TraceIdClass, 03556 TraceHandleClass, 03557 TraceEnableFlagsClass, 03558 TraceEnableLevelClass, 03559 GlobalLoggerHandleClass, 03560 EventLoggerHandleClass, 03561 AllLoggerHandlesClass, 03562 TraceHandleByNameClass 03563 } TRACE_INFORMATION_CLASS; 03564 03565 typedef NTSTATUS DDKAPI 03566 (*PEX_CALLBACK_FUNCTION)( 03567 /*IN*/ PVOID CallbackContext, 03568 /*IN*/ PVOID Argument1, 03569 /*IN*/ PVOID Argument2); 03570 03571 03572 03573 /* 03574 ** Storage structures 03575 */ 03576 typedef enum _PARTITION_STYLE { 03577 PARTITION_STYLE_MBR, 03578 PARTITION_STYLE_GPT 03579 } PARTITION_STYLE; 03580 03581 typedef struct _CREATE_DISK_MBR { 03582 ULONG Signature; 03583 } CREATE_DISK_MBR, *PCREATE_DISK_MBR; 03584 03585 typedef struct _CREATE_DISK_GPT { 03586 GUID DiskId; 03587 ULONG MaxPartitionCount; 03588 } CREATE_DISK_GPT, *PCREATE_DISK_GPT; 03589 03590 typedef struct _CREATE_DISK { 03591 PARTITION_STYLE PartitionStyle; 03592 _ANONYMOUS_UNION union { 03593 CREATE_DISK_MBR Mbr; 03594 CREATE_DISK_GPT Gpt; 03595 } DUMMYUNIONNAME; 03596 } CREATE_DISK, *PCREATE_DISK; 03597 03598 typedef struct _DISK_SIGNATURE { 03599 ULONG PartitionStyle; 03600 _ANONYMOUS_UNION union { 03601 struct { 03602 ULONG Signature; 03603 ULONG CheckSum; 03604 } Mbr; 03605 struct { 03606 GUID DiskId; 03607 } Gpt; 03608 } DUMMYUNIONNAME; 03609 } DISK_SIGNATURE, *PDISK_SIGNATURE; 03610 03611 typedef VOID DDKFASTAPI 03612 (*PTIME_UPDATE_NOTIFY_ROUTINE)( 03613 /*IN*/ HANDLE ThreadId, 03614 /*IN*/ KPROCESSOR_MODE Mode); 03615 03616 #define DBG_STATUS_CONTROL_C 1 03617 #define DBG_STATUS_SYSRQ 2 03618 #define DBG_STATUS_BUGCHECK_FIRST 3 03619 #define DBG_STATUS_BUGCHECK_SECOND 4 03620 #define DBG_STATUS_FATAL 5 03621 #define DBG_STATUS_DEBUG_CONTROL 6 03622 #define DBG_STATUS_WORKER 7 03623 03624 typedef struct _PHYSICAL_MEMORY_RANGE { 03625 PHYSICAL_ADDRESS BaseAddress; 03626 LARGE_INTEGER NumberOfBytes; 03627 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; 03628 03629 typedef ULONG_PTR 03630 (*PDRIVER_VERIFIER_THUNK_ROUTINE)( 03631 /*IN*/ PVOID Context); 03632 03633 typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { 03634 PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; 03635 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine; 03636 } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS; 03637 03638 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001 03639 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002 03640 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004 03641 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008 03642 #define DRIVER_VERIFIER_IO_CHECKING 0x0010 03643 03644 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001 03645 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002 03646 03647 #define RTL_RANGE_LIST_SHARED_OK 0x00000001 03648 #define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002 03649 03650 #define RTL_RANGE_LIST_SHARED_OK 0x00000001 03651 #define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002 03652 03653 #define RTL_RANGE_LIST_MERGE_IF_CONFLICT RTL_RANGE_LIST_ADD_IF_CONFLICT 03654 03655 typedef struct _RTL_RANGE { 03656 ULONGLONG Start; 03657 ULONGLONG End; 03658 PVOID UserData; 03659 PVOID Owner; 03660 UCHAR Attributes; 03661 UCHAR Flags; 03662 } RTL_RANGE, *PRTL_RANGE; 03663 03664 #define RTL_RANGE_SHARED 0x01 03665 #define RTL_RANGE_CONFLICT 0x02 03666 03667 typedef struct _RTL_RANGE_LIST { 03668 LIST_ENTRY ListHead; 03669 ULONG Flags; 03670 ULONG Count; 03671 ULONG Stamp; 03672 } RTL_RANGE_LIST, *PRTL_RANGE_LIST; 03673 03674 typedef struct _RANGE_LIST_ITERATOR { 03675 PLIST_ENTRY RangeListHead; 03676 PLIST_ENTRY MergedHead; 03677 PVOID Current; 03678 ULONG Stamp; 03679 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR; 03680 03681 typedef BOOLEAN 03682 (*PRTL_CONFLICT_RANGE_CALLBACK)( 03683 /*IN*/ PVOID Context, 03684 /*IN*/ PRTL_RANGE Range); 03685 03686 #define HASH_STRING_ALGORITHM_DEFAULT 0 03687 #define HASH_STRING_ALGORITHM_X65599 1 03688 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff 03689 03690 typedef enum _SUITE_TYPE { 03691 SmallBusiness, 03692 Enterprise, 03693 BackOffice, 03694 CommunicationServer, 03695 TerminalServer, 03696 SmallBusinessRestricted, 03697 EmbeddedNT, 03698 DataCenter, 03699 SingleUserTS, 03700 Personal, 03701 Blade, 03702 MaxSuiteType 03703 } SUITE_TYPE; 03704 03705 typedef VOID DDKAPI 03706 (*PTIMER_APC_ROUTINE)( 03707 /*IN*/ PVOID TimerContext, 03708 /*IN*/ ULONG TimerLowValue, 03709 /*IN*/ LONG TimerHighValue); 03710 03711 03712 03713 /* 03714 ** WMI structures 03715 */ 03716 03717 typedef VOID DDKAPI 03718 (*WMI_NOTIFICATION_CALLBACK)( 03719 PVOID Wnode, 03720 PVOID Context); 03721 03722 03723 /* 03724 ** Architecture specific structures 03725 */ 03726 03727 #ifdef _X86_ 03728 03729 typedef ULONG PFN_NUMBER, *PPFN_NUMBER; 03730 03731 #define PASSIVE_LEVEL 0 03732 #define LOW_LEVEL 0 03733 #define APC_LEVEL 1 03734 #define DISPATCH_LEVEL 2 03735 #define SYNCH_LEVEL 27 03736 #define PROFILE_LEVEL 27 03737 #define CLOCK1_LEVEL 28 03738 #define CLOCK2_LEVEL 28 03739 #define IPI_LEVEL 29 03740 #define POWER_LEVEL 30 03741 #define HIGH_LEVEL 31 03742 03743 typedef struct _KPCR_TIB { 03744 PVOID ExceptionList; /* 00 */ 03745 PVOID StackBase; /* 04 */ 03746 PVOID StackLimit; /* 08 */ 03747 PVOID SubSystemTib; /* 0C */ 03748 _ANONYMOUS_UNION union { 03749 PVOID FiberData; /* 10 */ 03750 DWORD Version; /* 10 */ 03751 } DUMMYUNIONNAME; 03752 PVOID ArbitraryUserPointer; /* 14 */ 03753 struct _NT_TIB *Self; /* 18 */ 03754 } KPCR_TIB, *PKPCR_TIB; /* 1C */ 03755 03756 #define PCR_MINOR_VERSION 1 03757 #define PCR_MAJOR_VERSION 1 03758 03759 typedef struct _KPCR { 03760 KPCR_TIB Tib; /* 00 */ 03761 struct _KPCR *Self; /* 1C */ 03762 struct _KPRCB *PCRCB; /* 20 */ 03763 KIRQL Irql; /* 24 */ 03764 ULONG IRR; /* 28 */ 03765 ULONG IrrActive; /* 2C */ 03766 ULONG IDR; /* 30 */ 03767 PVOID KdVersionBlock; /* 34 */ 03768 PUSHORT IDT; /* 38 */ 03769 PUSHORT GDT; /* 3C */ 03770 struct _KTSS *TSS; /* 40 */ 03771 USHORT MajorVersion; /* 44 */ 03772 USHORT MinorVersion; /* 46 */ 03773 KAFFINITY SetMember; /* 48 */ 03774 ULONG StallScaleFactor; /* 4C */ 03775 UCHAR SpareUnused; /* 50 */ 03776 UCHAR Number; /* 51 */ 03777 } KPCR, *PKPCR; /* 54 */ 03778 03779 typedef struct _KFLOATING_SAVE { 03780 ULONG ControlWord; 03781 ULONG StatusWord; 03782 ULONG ErrorOffset; 03783 ULONG ErrorSelector; 03784 ULONG DataOffset; 03785 ULONG DataSelector; 03786 ULONG Cr0NpxState; 03787 ULONG Spare1; 03788 } KFLOATING_SAVE, *PKFLOATING_SAVE; 03789 03790 #define PAGE_SIZE 0x1000 03791 #define PAGE_SHIFT 12L 03792 03793 extern NTOSAPI PVOID *MmHighestUserAddress; 03794 extern NTOSAPI PVOID *MmSystemRangeStart; 03795 extern NTOSAPI ULONG *MmUserProbeAddress; 03796 03797 #define MM_HIGHEST_USER_ADDRESS *MmHighestUserAddress 03798 #define MM_SYSTEM_RANGE_START *MmSystemRangeStart 03799 #define MM_USER_PROBE_ADDRESS *MmUserProbeAddress 03800 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 03801 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000 03802 03803 #define KI_USER_SHARED_DATA 0xffdf0000 03804 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA) 03805 03806 #define EFLAG_SIGN 0x8000 03807 #define EFLAG_ZERO 0x4000 03808 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) 03809 03810 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) 03811 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) 03812 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) 03813 03814 typedef enum _INTERLOCKED_RESULT { 03815 ResultNegative = RESULT_NEGATIVE, 03816 ResultZero = RESULT_ZERO, 03817 ResultPositive = RESULT_POSITIVE 03818 } INTERLOCKED_RESULT; 03819 03820 NTOSAPI 03821 KIRQL 03822 DDKAPI 03823 KeGetCurrentIrql( 03824 VOID); 03825 03826 /* 03827 * ULONG 03828 * KeGetCurrentProcessorNumber( 03829 * VOID) 03830 */ 03831 #define KeGetCurrentProcessorNumber() \ 03832 ((ULONG)KeGetCurrentKPCR()->Number) 03833 03834 03835 #if __USE_NTOSKRNL__ 03836 /* CAREFUL: These are exported from ntoskrnl.exe as __fastcall functions, 03837 but are also exported from kernel32.dll and declared in winbase.h as 03838 __stdcall */ 03839 #if !defined(__INTERLOCKED_DECLARED) 03840 #define __INTERLOCKED_DECLARED 03841 03842 NTOSAPI 03843 LONG 03844 DDKFASTAPI 03845 InterlockedIncrement( 03846 /*IN*/ LONG VOLATILE *Addend); 03847 03848 NTOSAPI 03849 LONG 03850 DDKFASTAPI 03851 InterlockedDecrement( 03852 /*IN*/ LONG VOLATILE *Addend); 03853 03854 NTOSAPI 03855 LONG 03856 DDKFASTAPI 03857 InterlockedCompareExchange( 03858 /*IN OUT*/ PLONG VOLATILE Destination, 03859 /*IN*/ LONG Exchange, 03860 /*IN*/ LONG Comparand); 03861 03862 NTOSAPI 03863 LONG 03864 DDKFASTAPI 03865 InterlockedExchange( 03866 /*IN OUT*/ PLONG VOLATILE Target, 03867 /*IN*/ LONG Value); 03868 03869 NTOSAPI 03870 LONG 03871 DDKFASTAPI 03872 InterlockedExchangeAdd( 03873 /*IN OUT*/ PLONG VOLATILE Addend, 03874 /*IN*/ LONG Value); 03875 03876 /* 03877 * PVOID 03878 * InterlockedExchangePointer( 03879 * IN OUT PVOID VOLATILE *Target, 03880 * IN PVOID Value) 03881 */ 03882 #define InterlockedExchangePointer(Target, Value) \ 03883 ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value)) 03884 03885 /* 03886 * PVOID 03887 * InterlockedCompareExchangePointer( 03888 * IN OUT PVOID *Destination, 03889 * IN PVOID Exchange, 03890 * IN PVOID Comparand) 03891 */ 03892 #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \ 03893 ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand)) 03894 03895 #if (_WIN32_WINNT >= 0x0501) 03896 PSLIST_ENTRY 03897 DDKFASTAPI 03898 InterlockedPopEntrySList( 03899 /*IN*/ PSLIST_HEADER ListHead); 03900 03901 NTOSAPI 03902 PSLIST_ENTRY 03903 DDKFASTAPI 03904 InterlockedPushEntrySList( 03905 /*IN*/ PSLIST_HEADER ListHead, 03906 /*IN*/ PSLIST_ENTRY ListEntry); 03907 #endif /* _WIN32_WINNT >= 0x0501 */ 03908 03909 #endif /* !__INTERLOCKED_DECLARED */ 03910 #endif /* __USE_NTOSKRNL__ */ 03911 03912 NTOSAPI 03913 VOID 03914 DDKFASTAPI 03915 KefAcquireSpinLockAtDpcLevel( 03916 /*IN*/ PKSPIN_LOCK SpinLock); 03917 03918 NTOSAPI 03919 VOID 03920 DDKFASTAPI 03921 KefReleaseSpinLockFromDpcLevel( 03922 /*IN*/ PKSPIN_LOCK SpinLock); 03923 03924 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) 03925 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) 03926 03927 #define RtlCopyMemoryNonTemporal RtlCopyMemory 03928 03929 #define KeGetDcacheFillSize() 1L 03930 03931 #endif /* _X86_ */ 03932 03933 03934 03935 /* 03936 ** Utillity functions 03937 */ 03938 03939 #define ARGUMENT_PRESENT(ArgumentPointer) \ 03940 ((BOOLEAN) ((PVOID)ArgumentPointer != (PVOID)NULL)) 03941 03942 /* 03943 * ULONG 03944 * BYTE_OFFSET( 03945 * IN PVOID Va) 03946 */ 03947 #define BYTE_OFFSET(Va) \ 03948 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1))) 03949 03950 /* 03951 * ULONG 03952 * BYTES_TO_PAGES( 03953 * IN ULONG Size) 03954 */ 03955 #define BYTES_TO_PAGES(Size) \ 03956 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0)) 03957 03958 /* 03959 * PCHAR 03960 * CONTAINING_RECORD( 03961 * IN PCHAR Address, 03962 * IN TYPE Type, 03963 * IN PCHAR Field); 03964 */ 03965 #ifndef CONTAINING_RECORD 03966 #define CONTAINING_RECORD(Address, Type, Field) \ 03967 ((Type *) (((ULONG_PTR) Address) - FIELD_OFFSET(Type, Field))) 03968 #endif 03969 03970 /* LONG 03971 * FIELD_OFFSET( 03972 * IN TYPE Type, 03973 * IN PCHAR Field); 03974 */ 03975 #ifndef FIELD_OFFSET 03976 #define FIELD_OFFSET(Type, Field) \ 03977 ((LONG) (&(((Type *) 0)->Field))) 03978 #endif 03979 03980 /* 03981 * PVOID 03982 * PAGE_ALIGN( 03983 * IN PVOID Va) 03984 */ 03985 #define PAGE_ALIGN(Va) \ 03986 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1))) 03987 03988 /* 03989 * ULONG_PTR 03990 * ROUND_TO_PAGES( 03991 * IN ULONG_PTR Size) 03992 */ 03993 #define ROUND_TO_PAGES(Size) \ 03994 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))) 03995 03996 NTOSAPI 03997 VOID 03998 DDKAPI 03999 RtlAssert( 04000 /*IN*/ PVOID FailedAssertion, 04001 /*IN*/ PVOID FileName, 04002 /*IN*/ ULONG LineNumber, 04003 /*IN*/ PCHAR Message); 04004 04005 #ifdef DBG 04006 04007 #define ASSERT(exp) \ 04008 ((!(exp)) ? \ 04009 (RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE) : TRUE) 04010 04011 #define ASSERTMSG(msg, exp) \ 04012 ((!(exp)) ? \ 04013 (RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE) : TRUE) 04014 04015 #define RTL_SOFT_ASSERT(exp) \ 04016 ((!(_exp)) ? \ 04017 (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE) : TRUE) 04018 04019 #define RTL_SOFT_ASSERTMSG(msg, exp) \ 04020 ((!(exp)) ? \ 04021 (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE) : TRUE) 04022 04023 #define RTL_VERIFY(exp) ASSERT(exp) 04024 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp) 04025 04026 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp) 04027 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp) 04028 04029 #else /* !DBG */ 04030 04031 #define ASSERT(exp) ((VOID) 0) 04032 #define ASSERTMSG(msg, exp) ((VOID) 0) 04033 04034 #define RTL_SOFT_ASSERT(exp) ((VOID) 0) 04035 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0) 04036 04037 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE) 04038 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) 04039 04040 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE) 04041 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) 04042 04043 #endif /* DBG */ 04044 04045 04046 /* 04047 ** Driver support routines 04048 */ 04049 04050 /** Runtime library routines **/ 04051 04052 /* 04053 * VOID 04054 * InitializeListHead( 04055 * IN PLIST_ENTRY ListHead) 04056 */ 04057 #define InitializeListHead(_ListHead) \ 04058 { \ 04059 (_ListHead)->Flink = (_ListHead); \ 04060 (_ListHead)->Blink = (_ListHead); \ 04061 } 04062 04063 /* 04064 * VOID 04065 * InsertHeadList( 04066 * IN PLIST_ENTRY ListHead, 04067 * IN PLIST_ENTRY Entry) 04068 */ 04069 #define InsertHeadList(_ListHead, \ 04070 _Entry) \ 04071 { \ 04072 PLIST_ENTRY _OldFlink; \ 04073 _OldFlink = (_ListHead)->Flink; \ 04074 (_Entry)->Flink = _OldFlink; \ 04075 (_Entry)->Blink = (_ListHead); \ 04076 _OldFlink->Blink = (_Entry); \ 04077 (_ListHead)->Flink = (_Entry); \ 04078 } 04079 04080 /* 04081 * VOID 04082 * InsertTailList( 04083 * IN PLIST_ENTRY ListHead, 04084 * IN PLIST_ENTRY Entry) 04085 */ 04086 #define InsertTailList(_ListHead, \ 04087 _Entry) \ 04088 { \ 04089 PLIST_ENTRY _OldBlink; \ 04090 _OldBlink = (_ListHead)->Blink; \ 04091 (_Entry)->Flink = (_ListHead); \ 04092 (_Entry)->Blink = _OldBlink; \ 04093 _OldBlink->Flink = (_Entry); \ 04094 (_ListHead)->Blink = (_Entry); \ 04095 } 04096 04097 /* 04098 * BOOLEAN 04099 * IsListEmpty( 04100 * IN PLIST_ENTRY ListHead) 04101 */ 04102 #define IsListEmpty(_ListHead) \ 04103 ((_ListHead)->Flink == (_ListHead)) 04104 04105 static __inline PSINGLE_LIST_ENTRY 04106 PopEntryList( 04107 /*IN*/ PSINGLE_LIST_ENTRY ListHead) 04108 { 04109 PSINGLE_LIST_ENTRY Entry; 04110 04111 Entry = ListHead->Next; 04112 if (Entry != NULL) 04113 { 04114 ListHead->Next = Entry->Next; 04115 } 04116 return Entry; 04117 } 04118 04119 /* 04120 * VOID 04121 * PushEntryList( 04122 * IN PSINGLE_LIST_ENTRY ListHead, 04123 * IN PSINGLE_LIST_ENTRY Entry) 04124 */ 04125 #define PushEntryList(_ListHead, \ 04126 _Entry) \ 04127 { \ 04128 (_Entry)->Next = (_ListHead)->Next; \ 04129 (_ListHead)->Next = (_Entry); \ 04130 } 04131 04132 /* 04133 * VOID 04134 * RemoveEntryList( 04135 * IN PLIST_ENTRY Entry) 04136 */ 04137 #define RemoveEntryList(_Entry) \ 04138 { \ 04139 PLIST_ENTRY _OldFlink; \ 04140 PLIST_ENTRY _OldBlink; \ 04141 _OldFlink = (_Entry)->Flink; \ 04142 _OldBlink = (_Entry)->Blink; \ 04143 _OldFlink->Blink = _OldBlink; \ 04144 _OldBlink->Flink = _OldFlink; \ 04145 (_Entry)->Flink = NULL; \ 04146 (_Entry)->Blink = NULL; \ 04147 } 04148 04149 static __inline PLIST_ENTRY 04150 RemoveHeadList( 04151 /*IN*/ PLIST_ENTRY ListHead) 04152 { 04153 PLIST_ENTRY OldFlink; 04154 PLIST_ENTRY OldBlink; 04155 PLIST_ENTRY Entry; 04156 04157 Entry = ListHead->Flink; 04158 OldFlink = ListHead->Flink->Flink; 04159 OldBlink = ListHead->Flink->Blink; 04160 OldFlink->Blink = OldBlink; 04161 OldBlink->Flink = OldFlink; 04162 04163 if (Entry != ListHead) 04164 { 04165 Entry->Flink = NULL; 04166 Entry->Blink = NULL; 04167 } 04168 04169 return Entry; 04170 } 04171 04172 static __inline PLIST_ENTRY 04173 RemoveTailList( 04174 /*IN*/ PLIST_ENTRY ListHead) 04175 { 04176 PLIST_ENTRY OldFlink; 04177 PLIST_ENTRY OldBlink; 04178 PLIST_ENTRY Entry; 04179 04180 Entry = ListHead->Blink; 04181 OldFlink = ListHead->Blink->Flink; 04182 OldBlink = ListHead->Blink->Blink; 04183 OldFlink->Blink = OldBlink; 04184 OldBlink->Flink = OldFlink; 04185 04186 if (Entry != ListHead) 04187 { 04188 Entry->Flink = NULL; 04189 Entry->Blink = NULL; 04190 } 04191 04192 return Entry; 04193 } 04194 04195 /* 04196 * USHORT 04197 * QueryDepthSList( 04198 * IN PSLIST_HEADER SListHead) 04199 */ 04200 #define QueryDepthSList(_SListHead) \ 04201 ((USHORT) ((_SListHead)->Alignment & 0xffff)) 04202 04203 #define InterlockedFlushSList(ListHead) ExInterlockedFlushSList(ListHead) 04204 04205 NTOSAPI 04206 ULONG 04207 DDKAPI 04208 RtlAnsiStringToUnicodeSize( 04209 /*IN*/ PANSI_STRING AnsiString); 04210 04211 NTOSAPI 04212 NTSTATUS 04213 DDKAPI 04214 RtlAddRange( 04215 /*IN OUT*/ PRTL_RANGE_LIST RangeList, 04216 /*IN*/ ULONGLONG Start, 04217 /*IN*/ ULONGLONG End, 04218 /*IN*/ UCHAR Attributes, 04219 /*IN*/ ULONG Flags, 04220 /*IN*/ PVOID UserData /*OPTIONAL*/, 04221 /*IN*/ PVOID Owner /*OPTIONAL*/); 04222 04223 NTOSAPI 04224 NTSTATUS 04225 DDKAPI 04226 RtlAnsiStringToUnicodeString( 04227 /*IN OUT*/ PUNICODE_STRING DestinationString, 04228 /*IN*/ PANSI_STRING SourceString, 04229 /*IN*/ BOOLEAN AllocateDestinationString); 04230 04231 NTOSAPI 04232 NTSTATUS 04233 DDKAPI 04234 RtlAppendUnicodeStringToString( 04235 /*IN OUT*/ PUNICODE_STRING Destination, 04236 /*IN*/ PUNICODE_STRING Source); 04237 04238 NTOSAPI 04239 NTSTATUS 04240 DDKAPI 04241 RtlAppendUnicodeToString( 04242 /*IN OUT*/ PUNICODE_STRING Destination, 04243 /*IN*/ PCWSTR Source); 04244 04245 NTOSAPI 04246 BOOLEAN 04247 DDKAPI 04248 RtlAreBitsClear( 04249 /*IN*/ PRTL_BITMAP BitMapHeader, 04250 /*IN*/ ULONG StartingIndex, 04251 /*IN*/ ULONG Length); 04252 04253 NTOSAPI 04254 BOOLEAN 04255 DDKAPI 04256 RtlAreBitsSet( 04257 /*IN*/ PRTL_BITMAP BitMapHeader, 04258 /*IN*/ ULONG StartingIndex, 04259 /*IN*/ ULONG Length); 04260 04261 NTOSAPI 04262 NTSTATUS 04263 DDKAPI 04264 RtlCharToInteger( 04265 /*IN*/ PCSZ String, 04266 /*IN*/ ULONG Base /*OPTIONAL*/, 04267 /*IN OUT*/ PULONG Value); 04268 04269 NTOSAPI 04270 ULONG 04271 DDKAPI 04272 RtlCheckBit( 04273 /*IN*/ PRTL_BITMAP BitMapHeader, 04274 /*IN*/ ULONG BitPosition); 04275 04276 NTOSAPI 04277 NTSTATUS 04278 DDKAPI 04279 RtlCheckRegistryKey( 04280 /*IN*/ ULONG RelativeTo, 04281 /*IN*/ PWSTR Path); 04282 04283 NTOSAPI 04284 VOID 04285 DDKAPI 04286 RtlClearAllBits( 04287 /*IN*/ PRTL_BITMAP BitMapHeader); 04288 04289 NTOSAPI 04290 VOID 04291 DDKAPI 04292 RtlClearBit( 04293 PRTL_BITMAP BitMapHeader, 04294 ULONG BitNumber); 04295 04296 NTOSAPI 04297 VOID 04298 DDKAPI 04299 RtlClearBits( 04300 /*IN*/ PRTL_BITMAP BitMapHeader, 04301 /*IN*/ ULONG StartingIndex, 04302 /*IN*/ ULONG NumberToClear); 04303 04304 NTOSAPI 04305 SIZE_T 04306 DDKAPI 04307 RtlCompareMemory( 04308 /*IN*/ CONST VOID *Source1, 04309 /*IN*/ CONST VOID *Source2, 04310 /*IN*/ SIZE_T Length); 04311 04312 NTOSAPI 04313 LONG 04314 DDKAPI 04315 RtlCompareString( 04316 /*IN*/ PSTRING String1, 04317 /*IN*/ PSTRING String2, 04318 BOOLEAN CaseInSensitive); 04319 04320 NTOSAPI 04321 LONG 04322 DDKAPI 04323 RtlCompareUnicodeString( 04324 /*IN*/ PUNICODE_STRING String1, 04325 /*IN*/ PUNICODE_STRING String2, 04326 /*IN*/ BOOLEAN CaseInSensitive); 04327 04328 NTOSAPI 04329 LARGE_INTEGER 04330 DDKAPI 04331 RtlConvertLongToLargeInteger( 04332 /*IN*/ LONG SignedInteger); 04333 04334 NTOSAPI 04335 LUID 04336 DDKAPI 04337 RtlConvertLongToLuid( 04338 /*IN*/ LONG Long); 04339 04340 NTOSAPI 04341 LARGE_INTEGER 04342 DDKAPI 04343 RtlConvertUlongToLargeInteger( 04344 /*IN*/ ULONG UnsignedInteger); 04345 04346 NTOSAPI 04347 LUID 04348 DDKAPI 04349 RtlConvertUlongToLuid( 04350 ULONG Ulong); 04351 04352 /* 04353 * VOID 04354 * RtlCopyMemory( 04355 * IN VOID UNALIGNED *Destination, 04356 * IN CONST VOID UNALIGNED *Source, 04357 * IN SIZE_T Length) 04358 */ 04359 #ifndef RtlCopyMemory 04360 #define RtlCopyMemory(Destination, Source, Length) \ 04361 memcpy(Destination, Source, Length); 04362 #endif 04363 04364 #ifndef RtlCopyBytes 04365 #define RtlCopyBytes RtlCopyMemory 04366 #endif 04367 04368 NTOSAPI 04369 VOID 04370 DDKAPI 04371 RtlCopyMemory32( 04372 /*IN*/ VOID UNALIGNED *Destination, 04373 /*IN*/ CONST VOID UNALIGNED *Source, 04374 /*IN*/ ULONG Length); 04375 04376 NTOSAPI 04377 NTSTATUS 04378 DDKAPI 04379 RtlCopyRangeList( 04380 /*OUT*/ PRTL_RANGE_LIST CopyRangeList, 04381 /*IN*/ PRTL_RANGE_LIST RangeList); 04382 04383 NTOSAPI 04384 VOID 04385 DDKAPI 04386 RtlCopyString( 04387 /*IN OUT*/ PSTRING DestinationString, 04388 /*IN*/ PSTRING SourceString /*OPTIONAL*/); 04389 04390 NTOSAPI 04391 VOID 04392 DDKAPI 04393 RtlCopyUnicodeString( 04394 /*IN OUT*/ PUNICODE_STRING DestinationString, 04395 /*IN*/ PUNICODE_STRING SourceString); 04396 04397 NTOSAPI 04398 NTSTATUS 04399 DDKAPI 04400 RtlCreateRegistryKey( 04401 /*IN*/ ULONG RelativeTo, 04402 /*IN*/ PWSTR Path); 04403 04404 NTOSAPI 04405 NTSTATUS 04406 DDKAPI 04407 RtlCreateSecurityDescriptor( 04408 /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor, 04409 /*IN*/ ULONG Revision); 04410 04411 NTOSAPI 04412 NTSTATUS 04413 DDKAPI 04414 RtlDeleteOwnersRanges( 04415 /*IN OUT*/ PRTL_RANGE_LIST RangeList, 04416 /*IN*/ PVOID Owner); 04417 04418 NTOSAPI 04419 NTSTATUS 04420 DDKAPI 04421 RtlDeleteRange( 04422 /*IN OUT*/ PRTL_RANGE_LIST RangeList, 04423 /*IN*/ ULONGLONG Start, 04424 /*IN*/ ULONGLONG End, 04425 /*IN*/ PVOID Owner); 04426 04427 NTOSAPI 04428 NTSTATUS 04429 DDKAPI 04430 RtlDeleteRegistryValue( 04431 /*IN*/ ULONG RelativeTo, 04432 /*IN*/ PCWSTR Path, 04433 /*IN*/ PCWSTR ValueName); 04434 04435 NTOSAPI 04436 BOOL 04437 DDKAPI 04438 RtlDosPathNameToNtPathName_U( 04439 /*IN*/ PCWSTR DosPathName, 04440 /*OUT*/ PUNICODE_STRING NtPathName, 04441 /*OUT*/ PCWSTR *NtFileNamePart, 04442 /*OUT*/ VOID *DirectoryInfo); 04443 04444 /* 04445 * BOOLEAN 04446 * RtlEqualLuid( 04447 * IN LUID Luid1, 04448 * IN LUID Luid2) 04449 */ 04450 #define RtlEqualLuid(_Luid1, \ 04451 _Luid2) \ 04452 ((Luid1.LowPart == Luid2.LowPart) && (Luid1.HighPart == Luid2.HighPart)) 04453 04454 /* 04455 * ULONG 04456 * RtlEqualMemory( 04457 * IN VOID UNALIGNED *Destination, 04458 * IN CONST VOID UNALIGNED *Source, 04459 * IN SIZE_T Length) 04460 */ 04461 #define RtlEqualMemory(Destination, Source, Length) (!memcmp(Destination, Source, Length)) 04462 04463 NTOSAPI 04464 BOOLEAN 04465 DDKAPI 04466 RtlEqualString( 04467 /*IN*/ PSTRING String1, 04468 /*IN*/ PSTRING String2, 04469 /*IN*/ BOOLEAN CaseInSensitive); 04470 04471 NTOSAPI 04472 BOOLEAN 04473 DDKAPI 04474 RtlEqualUnicodeString( 04475 /*IN*/ CONST UNICODE_STRING *String1, 04476 /*IN*/ CONST UNICODE_STRING *String2, 04477 /*IN*/ BOOLEAN CaseInSensitive); 04478 04479 /* 04480 * VOID 04481 * RtlFillMemory( 04482 * IN VOID UNALIGNED *Destination, 04483 * IN SIZE_T Length, 04484 * IN UCHAR Fill) 04485 */ 04486 #ifndef RtlFillMemory 04487 #define RtlFillMemory(Destination, Length, Fill) \ 04488 memset(Destination, Fill, Length) 04489 #endif 04490 04491 #ifndef RtlFillBytes 04492 #define RtlFillBytes RtlFillMemory 04493 #endif 04494 04495 NTOSAPI 04496 ULONG 04497 DDKAPI 04498 RtlFindClearBits( 04499 /*IN*/ PRTL_BITMAP BitMapHeader, 04500 /*IN*/ ULONG NumberToFind, 04501 /*IN*/ ULONG HintIndex); 04502 04503 NTOSAPI 04504 ULONG 04505 DDKAPI 04506 RtlFindClearBitsAndSet( 04507 /*IN*/ PRTL_BITMAP BitMapHeader, 04508 /*IN*/ ULONG NumberToFind, 04509 /*IN*/ ULONG HintIndex); 04510 04511 NTOSAPI 04512 ULONG 04513 DDKAPI 04514 RtlFindClearRuns( 04515 /*IN*/ PRTL_BITMAP BitMapHeader, 04516 /*OUT*/ PRTL_BITMAP_RUN RunArray, 04517 /*IN*/ ULONG SizeOfRunArray, 04518 /*IN*/ BOOLEAN LocateLongestRuns); 04519 04520 NTOSAPI 04521 ULONG 04522 DDKAPI 04523 RtlFindFirstRunClear( 04524 /*IN*/ PRTL_BITMAP BitMapHeader, 04525 /*OUT*/ PULONG StartingIndex); 04526 04527 NTOSAPI 04528 ULONG 04529 DDKAPI 04530 RtlFindLastBackwardRunClear( 04531 /*IN*/ PRTL_BITMAP BitMapHeader, 04532 /*IN*/ ULONG FromIndex, 04533 /*OUT*/ PULONG StartingRunIndex); 04534 04535 NTOSAPI 04536 CCHAR 04537 DDKAPI 04538 RtlFindLeastSignificantBit( 04539 /*IN*/ ULONGLONG Set); 04540 04541 NTOSAPI 04542 ULONG 04543 DDKAPI 04544 RtlFindLongestRunClear( 04545 /*IN*/ PRTL_BITMAP BitMapHeader, 04546 /*OUT*/ PULONG StartingIndex); 04547 04548 NTOSAPI 04549 CCHAR 04550 DDKAPI 04551 RtlFindMostSignificantBit( 04552 /*IN*/ ULONGLONG Set); 04553 04554 NTOSAPI 04555 ULONG 04556 DDKAPI 04557 RtlFindNextForwardRunClear( 04558 /*IN*/ PRTL_BITMAP BitMapHeader, 04559 /*IN*/ ULONG FromIndex, 04560 /*OUT*/ PULONG StartingRunIndex); 04561 04562 NTOSAPI 04563 NTSTATUS 04564 DDKAPI 04565 RtlFindRange( 04566 /*IN*/ PRTL_RANGE_LIST RangeList, 04567 /*IN*/ ULONGLONG Minimum, 04568 /*IN*/ ULONGLONG Maximum, 04569 /*IN*/ ULONG Length, 04570 /*IN*/ ULONG Alignment, 04571 /*IN*/ ULONG Flags, 04572 /*IN*/ UCHAR AttributeAvailableMask, 04573 /*IN*/ PVOID Context /*OPTIONAL*/, 04574 /*IN*/ PRTL_CONFLICT_RANGE_CALLBACK Callback /*OPTIONAL*/, 04575 /*OUT*/ PULONGLONG Start); 04576 04577 NTOSAPI 04578 ULONG 04579 DDKAPI 04580 RtlFindSetBits( 04581 /*IN*/ PRTL_BITMAP BitMapHeader, 04582 /*IN*/ ULONG NumberToFind, 04583 /*IN*/ ULONG HintIndex); 04584 04585 NTOSAPI 04586 ULONG 04587 DDKAPI 04588 RtlFindSetBitsAndClear( 04589 /*IN*/ PRTL_BITMAP BitMapHeader, 04590 /*IN*/ ULONG NumberToFind, 04591 /*IN*/ ULONG HintIndex); 04592 04593 NTOSAPI 04594 VOID 04595 DDKAPI 04596 RtlFreeAnsiString( 04597 /*IN*/ PANSI_STRING AnsiString); 04598 04599 NTOSAPI 04600 VOID 04601 DDKAPI 04602 RtlFreeRangeList( 04603 /*IN*/ PRTL_RANGE_LIST RangeList); 04604 04605 NTOSAPI 04606 VOID 04607 DDKAPI 04608 RtlFreeUnicodeString( 04609 /*IN*/ PUNICODE_STRING UnicodeString); 04610 04611 NTOSAPI 04612 VOID 04613 DDKAPI 04614 RtlGetCallersAddress( 04615 /*OUT*/ PVOID *CallersAddress, 04616 /*OUT*/ PVOID *CallersCaller); 04617 04618 NTOSAPI 04619 NTSTATUS 04620 DDKAPI 04621 RtlGetVersion( 04622 /*IN OUT*/ PRTL_OSVERSIONINFOW lpVersionInformation); 04623 04624 NTOSAPI 04625 NTSTATUS 04626 DDKAPI 04627 RtlGetFirstRange( 04628 /*IN*/ PRTL_RANGE_LIST RangeList, 04629 /*OUT*/ PRTL_RANGE_LIST_ITERATOR Iterator, 04630 /*OUT*/ PRTL_RANGE *Range); 04631 04632 NTOSAPI 04633 NTSTATUS 04634 DDKAPI 04635 RtlGetNextRange( 04636 /*IN OUT*/ PRTL_RANGE_LIST_ITERATOR Iterator, 04637 /*OUT*/ PRTL_RANGE *Range, 04638 /*IN*/ BOOLEAN MoveForwards); 04639 04640 #define FOR_ALL_RANGES(RangeList, Iterator, Current) \ 04641 for (RtlGetFirstRange((RangeList), (Iterator), &(Current)); \ 04642 (Current) != NULL; \ 04643 RtlGetNextRange((Iterator), &(Current), TRUE)) 04644 04645 #define FOR_ALL_RANGES_BACKWARDS(RangeList, Iterator, Current) \ 04646 for (RtlGetLastRange((RangeList), (Iterator), &(Current)); \ 04647 (Current) != NULL; \ 04648 RtlGetNextRange((Iterator), &(Current), FALSE)) 04649 04650 NTOSAPI 04651 NTSTATUS 04652 DDKAPI 04653 RtlGUIDFromString( 04654 /*IN*/ PUNICODE_STRING GuidString, 04655 /*OUT*/ GUID *Guid); 04656 04657 NTOSAPI 04658 NTSTATUS 04659 DDKAPI 04660 RtlHashUnicodeString( 04661 /*IN*/ CONST UNICODE_STRING *String, 04662 /*IN*/ BOOLEAN CaseInSensitive, 04663 /*IN*/ ULONG HashAlgorithm, 04664 /*OUT*/ PULONG HashValue); 04665 04666 NTOSAPI 04667 VOID 04668 DDKAPI 04669 RtlInitAnsiString( 04670 /*IN OUT*/ PANSI_STRING DestinationString, 04671 /*IN*/ PCSZ SourceString); 04672 04673 NTOSAPI 04674 VOID 04675 DDKAPI 04676 RtlInitializeBitMap( 04677 /*IN*/ PRTL_BITMAP BitMapHeader, 04678 /*IN*/ PULONG BitMapBuffer, 04679 /*IN*/ ULONG SizeOfBitMap); 04680 04681 NTOSAPI 04682 VOID 04683 DDKAPI 04684 RtlInitializeRangeList( 04685 /*IN OUT*/ PRTL_RANGE_LIST RangeList); 04686 04687 NTOSAPI 04688 VOID 04689 DDKAPI 04690 RtlInitString( 04691 /*IN OUT*/ PSTRING DestinationString, 04692 /*IN*/ PCSZ SourceString); 04693 04694 NTOSAPI 04695 VOID 04696 DDKAPI 04697 RtlInitUnicodeString( 04698 /*IN OUT*/ PUNICODE_STRING DestinationString, 04699 /*IN*/ PCWSTR SourceString); 04700 04701 NTOSAPI 04702 NTSTATUS 04703 DDKAPI 04704 RtlInt64ToUnicodeString( 04705 /*IN*/ ULONGLONG Value, 04706 /*IN*/ ULONG Base /*OPTIONAL*/, 04707 /*IN OUT*/ PUNICODE_STRING String); 04708 04709 NTOSAPI 04710 NTSTATUS 04711 DDKAPI 04712 RtlIntegerToUnicodeString( 04713 /*IN*/ ULONG Value, 04714 /*IN*/ ULONG Base /*OPTIONAL*/, 04715 /*IN OUT*/ PUNICODE_STRING String); 04716 04717 NTOSAPI 04718 NTSTATUS 04719 DDKAPI 04720 RtlIntPtrToUnicodeString( 04721 PLONG Value, 04722 ULONG Base /*OPTIONAL*/, 04723 PUNICODE_STRING String); 04724 04725 NTOSAPI 04726 NTSTATUS 04727 DDKAPI 04728 RtlInvertRangeList( 04729 /*OUT*/ PRTL_RANGE_LIST InvertedRangeList, 04730 /*IN*/ PRTL_RANGE_LIST RangeList); 04731 04732 NTOSAPI 04733 NTSTATUS 04734 DDKAPI 04735 RtlIsRangeAvailable( 04736 /*IN*/ PRTL_RANGE_LIST RangeList, 04737 /*IN*/ ULONGLONG Start, 04738 /*IN*/ ULONGLONG End, 04739 /*IN*/ ULONG Flags, 04740 /*IN*/ UCHAR AttributeAvailableMask, 04741 /*IN*/ PVOID Context /*OPTIONAL*/, 04742 /*IN*/ PRTL_CONFLICT_RANGE_CALLBACK Callback /*OPTIONAL*/, 04743 /*OUT*/ PBOOLEAN Available); 04744 04745 /* 04746 * BOOLEAN 04747 * RtlIsZeroLuid( 04748 * IN PLUID L1) 04749 */ 04750 #define RtlIsZeroLuid(_L1) \ 04751 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart))) 04752 04753 NTOSAPI 04754 ULONG 04755 DDKAPI 04756 RtlLengthSecurityDescriptor( 04757 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor); 04758 04759 NTOSAPI 04760 VOID 04761 DDKAPI 04762 RtlMapGenericMask( 04763 /*IN OUT*/ PACCESS_MASK AccessMask, 04764 /*IN*/ PGENERIC_MAPPING GenericMapping); 04765 04766 NTOSAPI 04767 NTSTATUS 04768 DDKAPI 04769 RtlMergeRangeLists( 04770 /*OUT*/ PRTL_RANGE_LIST MergedRangeList, 04771 /*IN*/ PRTL_RANGE_LIST RangeList1, 04772 /*IN*/ PRTL_RANGE_LIST RangeList2, 04773 /*IN*/ ULONG Flags); 04774 04775 /* 04776 * VOID 04777 * RtlMoveMemory( 04778 * IN VOID UNALIGNED *Destination, 04779 * IN CONST VOID UNALIGNED *Source, 04780 * IN SIZE_T Length) 04781 */ 04782 #define RtlMoveMemory memmove 04783 04784 NTOSAPI 04785 ULONG 04786 DDKAPI 04787 RtlNumberOfClearBits( 04788 /*IN*/ PRTL_BITMAP BitMapHeader); 04789 04790 NTOSAPI 04791 ULONG 04792 DDKAPI 04793 RtlNumberOfSetBits( 04794 /*IN*/ PRTL_BITMAP BitMapHeader); 04795 04796 NTOSAPI 04797 VOID 04798 DDKFASTAPI 04799 RtlPrefetchMemoryNonTemporal( 04800 /*IN*/ PVOID Source, 04801 /*IN*/ SIZE_T Length); 04802 04803 NTOSAPI 04804 BOOLEAN 04805 DDKAPI 04806 RtlPrefixUnicodeString( 04807 /*IN*/ PUNICODE_STRING String1, 04808 /*IN*/ PUNICODE_STRING String2, 04809 /*IN*/ BOOLEAN CaseInSensitive); 04810 04811 NTOSAPI 04812 NTSTATUS 04813 DDKAPI 04814 RtlQueryRegistryValues( 04815 /*IN*/ ULONG RelativeTo, 04816 /*IN*/ PCWSTR Path, 04817 /*IN*/ PRTL_QUERY_REGISTRY_TABLE QueryTable, 04818 /*IN*/ PVOID Context, 04819 /*IN*/ PVOID Environment /*OPTIONAL*/); 04820 04821 NTOSAPI 04822 VOID 04823 DDKAPI 04824 RtlRetrieveUlong( 04825 /*IN OUT*/ PULONG DestinationAddress, 04826 /*IN*/ PULONG SourceAddress); 04827 04828 NTOSAPI 04829 VOID 04830 DDKAPI 04831 RtlRetrieveUshort( 04832 /*IN OUT*/ PUSHORT DestinationAddress, 04833 /*IN*/ PUSHORT SourceAddress); 04834 04835 NTOSAPI 04836 VOID 04837 DDKAPI 04838 RtlSetAllBits( 04839 /*IN*/ PRTL_BITMAP BitMapHeader); 04840 04841 NTOSAPI 04842 VOID 04843 DDKAPI 04844 RtlSetBit( 04845 PRTL_BITMAP BitMapHeader, 04846 ULONG BitNumber); 04847 04848 NTOSAPI 04849 VOID 04850 DDKAPI 04851 RtlSetBits( 04852 /*IN*/ PRTL_BITMAP BitMapHeader, 04853 /*IN*/ ULONG StartingIndex, 04854 /*IN*/ ULONG NumberToSet); 04855 04856 NTOSAPI 04857 NTSTATUS 04858 DDKAPI 04859 RtlSetDaclSecurityDescriptor( 04860 /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor, 04861 /*IN*/ BOOLEAN DaclPresent, 04862 /*IN*/ PACL Dacl /*OPTIONAL*/, 04863 /*IN*/ BOOLEAN DaclDefaulted /*OPTIONAL*/); 04864 04865 NTOSAPI 04866 VOID 04867 DDKAPI 04868 RtlStoreUlong( 04869 /*IN*/ PULONG Address, 04870 /*IN*/ ULONG Value); 04871 04872 NTOSAPI 04873 VOID 04874 DDKAPI 04875 RtlStoreUlonglong( 04876 /*IN OUT*/ PULONGLONG Address, 04877 ULONGLONG Value); 04878 04879 NTOSAPI 04880 VOID 04881 DDKAPI 04882 RtlStoreUlongPtr( 04883 /*IN OUT*/ PULONG_PTR Address, 04884 /*IN*/ ULONG_PTR Value); 04885 04886 NTOSAPI 04887 VOID 04888 DDKAPI 04889 RtlStoreUshort( 04890 /*IN*/ PUSHORT Address, 04891 /*IN*/ USHORT Value); 04892 04893 NTOSAPI 04894 NTSTATUS 04895 DDKAPI 04896 RtlStringFromGUID( 04897 /*IN*/ REFGUID Guid, 04898 /*OUT*/ PUNICODE_STRING GuidString); 04899 04900 #define RtlStringCbCopyA(dst, dst_len, src) strncpy(dst, src, dst_len) 04901 #define RtlStringCbPrintfA(args...) snprintf(args) 04902 #define RtlStringCbVPrintfA(args...) vsnprintf(args) 04903 04904 NTOSAPI 04905 BOOLEAN 04906 DDKAPI 04907 RtlTestBit( 04908 /*IN*/ PRTL_BITMAP BitMapHeader, 04909 /*IN*/ ULONG BitNumber); 04910 04911 NTOSAPI 04912 BOOLEAN 04913 DDKAPI 04914 RtlTimeFieldsToTime( 04915 /*IN*/ PTIME_FIELDS TimeFields, 04916 /*IN*/ PLARGE_INTEGER Time); 04917 04918 NTOSAPI 04919 VOID 04920 DDKAPI 04921 RtlTimeToTimeFields( 04922 /*IN*/ PLARGE_INTEGER Time, 04923 /*IN*/ PTIME_FIELDS TimeFields); 04924 04925 NTOSAPI 04926 ULONG 04927 DDKFASTAPI 04928 RtlUlongByteSwap( 04929 /*IN*/ ULONG Source); 04930 04931 NTOSAPI 04932 ULONGLONG 04933 DDKFASTAPI 04934 RtlUlonglongByteSwap( 04935 /*IN*/ ULONGLONG Source); 04936 04937 NTOSAPI 04938 ULONG 04939 DDKAPI 04940 RtlUnicodeStringToAnsiSize( 04941 /*IN*/ PUNICODE_STRING UnicodeString); 04942 04943 NTOSAPI 04944 NTSTATUS 04945 DDKAPI 04946 RtlUnicodeStringToAnsiString( 04947 /*IN OUT*/ PANSI_STRING DestinationString, 04948 /*IN*/ PUNICODE_STRING SourceString, 04949 /*IN*/ BOOLEAN AllocateDestinationString); 04950 04951 NTOSAPI 04952 NTSTATUS 04953 DDKAPI 04954 RtlUnicodeStringToInteger( 04955 /*IN*/ PUNICODE_STRING String, 04956 /*IN*/ ULONG Base /*OPTIONAL*/, 04957 /*OUT*/ PULONG Value); 04958 04959 NTOSAPI 04960 WCHAR 04961 DDKAPI 04962 RtlUpcaseUnicodeChar( 04963 /*IN*/ WCHAR SourceCharacter); 04964 04965 NTOSAPI 04966 NTSTATUS 04967 DDKAPI 04968 RtlUpcaseUnicodeString( 04969 /*IN OUT*/ PUNICODE_STRING DestinationString /*OPTIONAL*/, 04970 /*IN*/ PCUNICODE_STRING SourceString, 04971 /*IN*/ BOOLEAN AllocateDestinationString); 04972 04973 NTOSAPI 04974 CHAR 04975 DDKAPI 04976 RtlUpperChar( 04977 /*IN*/ CHAR Character); 04978 04979 NTOSAPI 04980 VOID 04981 DDKAPI 04982 RtlUpperString( 04983 /*IN OUT*/ PSTRING DestinationString, 04984 /*IN*/ PSTRING SourceString); 04985 04986 NTOSAPI 04987 USHORT 04988 DDKFASTAPI 04989 RtlUshortByteSwap( 04990 /*IN*/ USHORT Source); 04991 04992 NTOSAPI 04993 BOOLEAN 04994 DDKAPI 04995 RtlValidRelativeSecurityDescriptor( 04996 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptorInput, 04997 /*IN*/ ULONG SecurityDescriptorLength, 04998 /*IN*/ SECURITY_INFORMATION RequiredInformation); 04999 05000 NTOSAPI 05001 BOOLEAN 05002 DDKAPI 05003 RtlValidSecurityDescriptor( 05004 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor); 05005 05006 NTOSAPI 05007 NTSTATUS 05008 DDKAPI 05009 RtlVerifyVersionInfo( 05010 /*IN*/ PRTL_OSVERSIONINFOEXW VersionInfo, 05011 /*IN*/ ULONG TypeMask, 05012 /*IN*/ ULONGLONG ConditionMask); 05013 05014 NTOSAPI 05015 NTSTATUS 05016 DDKAPI 05017 RtlVolumeDeviceToDosName( 05018 /*IN*/ PVOID VolumeDeviceObject, 05019 /*OUT*/ PUNICODE_STRING DosName); 05020 05021 NTOSAPI 05022 ULONG 05023 DDKAPI 05024 RtlWalkFrameChain( 05025 /*OUT*/ PVOID *Callers, 05026 /*IN*/ ULONG Count, 05027 /*IN*/ ULONG Flags); 05028 05029 NTOSAPI 05030 NTSTATUS 05031 DDKAPI 05032 RtlWriteRegistryValue( 05033 /*IN*/ ULONG RelativeTo, 05034 /*IN*/ PCWSTR Path, 05035 /*IN*/ PCWSTR ValueName, 05036 /*IN*/ ULONG ValueType, 05037 /*IN*/ PVOID ValueData, 05038 /*IN*/ ULONG ValueLength); 05039 05040 NTOSAPI 05041 ULONG 05042 DDKAPI 05043 RtlxUnicodeStringToAnsiSize( 05044 /*IN*/ PUNICODE_STRING UnicodeString); 05045 05046 /* 05047 * VOID 05048 * RtlZeroMemory( 05049 * IN VOID UNALIGNED *Destination, 05050 * IN SIZE_T Length) 05051 */ 05052 #ifndef RtlZeroMemory 05053 #define RtlZeroMemory(Destination, Length) \ 05054 memset(Destination, 0, Length) 05055 #endif 05056 05057 #ifndef RtlZeroBytes 05058 #define RtlZeroBytes RtlZeroMemory 05059 #endif 05060 05061 05062 /** Executive support routines **/ 05063 05064 NTOSAPI 05065 VOID 05066 DDKFASTAPI 05067 ExAcquireFastMutex( 05068 /*IN*/ PFAST_MUTEX FastMutex); 05069 05070 NTOSAPI 05071 VOID 05072 DDKFASTAPI 05073 ExAcquireFastMutexUnsafe( 05074 /*IN*/ PFAST_MUTEX FastMutex); 05075 05076 NTOSAPI 05077 BOOLEAN 05078 DDKAPI 05079 ExAcquireResourceExclusiveLite( 05080 /*IN*/ PERESOURCE Resource, 05081 /*IN*/ BOOLEAN Wait); 05082 05083 NTOSAPI 05084 BOOLEAN 05085 DDKAPI 05086 ExAcquireResourceSharedLite( 05087 /*IN*/ PERESOURCE Resource, 05088 /*IN*/ BOOLEAN Wait); 05089 05090 NTOSAPI 05091 BOOLEAN 05092 DDKAPI 05093 ExAcquireSharedStarveExclusive( 05094 /*IN*/ PERESOURCE Resource, 05095 /*IN*/ BOOLEAN Wait); 05096 05097 NTOSAPI 05098 BOOLEAN 05099 DDKAPI 05100 ExAcquireSharedWaitForExclusive( 05101 /*IN*/ PERESOURCE Resource, 05102 /*IN*/ BOOLEAN Wait); 05103 05104 05105 NTOSAPI 05106 PSINGLE_LIST_ENTRY 05107 DDKFASTAPI 05108 ExInterlockedPopEntrySList( 05109 /*IN*/ PSLIST_HEADER ListHead, 05110 /*IN*/ PKSPIN_LOCK Lock); 05111 05112 05113 NTOSAPI 05114 PSINGLE_LIST_ENTRY 05115 DDKFASTAPI 05116 ExInterlockedPushEntrySList( 05117 /*IN*/ PSLIST_HEADER ListHead, 05118 /*IN*/ PSINGLE_LIST_ENTRY ListEntry, 05119 /*IN*/ PKSPIN_LOCK Lock); 05120 05121 05122 #if (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) 05123 #define ExInterlockedPopEntrySList(_ListHead, \ 05124 _Lock) \ 05125 InterlockedPopEntrySList(_ListHead) 05126 05127 #define ExInterlockedPushEntrySList(_ListHead, \ 05128 _ListEntry, \ 05129 _Lock) \ 05130 InterlockedPushEntrySList(_ListHead, _ListEntry) 05131 #endif /* __USE_NTOSKRNL__ */ 05132 05133 #define ExQueryDepthSList(ListHead) QueryDepthSList(ListHead) 05134 05135 static __inline PVOID 05136 ExAllocateFromNPagedLookasideList( 05137 /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside) 05138 { 05139 PVOID Entry; 05140 05141 Lookaside->TotalAllocates++; 05142 Entry = ExInterlockedPopEntrySList(&Lookaside->ListHead, 05143 &Lookaside->Obsoleted); 05144 if (Entry == NULL) { 05145 Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++; 05146 Entry = (Lookaside->Allocate)(Lookaside->Type, 05147 Lookaside->Size, 05148 Lookaside->Tag); 05149 } 05150 return Entry; 05151 } 05152 05153 static __inline VOID 05154 ExFreeToNPagedLookasideList( 05155 /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside, 05156 /*IN*/ PVOID Entry) 05157 { 05158 Lookaside->TotalFrees++; 05159 if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) { 05160 Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++; 05161 (Lookaside->Free)(Entry); 05162 } else { 05163 ExInterlockedPushEntrySList(&Lookaside->ListHead, 05164 (PSLIST_ENTRY)Entry, 05165 &Lookaside->Obsoleted); 05166 } 05167 } 05168 05169 #if (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) 05170 05171 static __inline PVOID 05172 ExAllocateFromPagedLookasideList( 05173 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside) 05174 { 05175 PVOID Entry; 05176 05177 Lookaside->TotalAllocates++; 05178 Entry = InterlockedPopEntrySList(&Lookaside->ListHead); 05179 if (Entry == NULL) { 05180 Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++; 05181 Entry = (Lookaside->Allocate)(Lookaside->Type, 05182 Lookaside->Size, 05183 Lookaside->Tag); 05184 } 05185 return Entry; 05186 } 05187 05188 static __inline VOID 05189 ExFreeToPagedLookasideList( 05190 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside, 05191 /*IN*/ PVOID Entry) 05192 { 05193 Lookaside->TotalFrees++; 05194 if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) { 05195 Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++; 05196 (Lookaside->Free)(Entry); 05197 } else { 05198 InterlockedPushEntrySList(&Lookaside->ListHead, 05199 (PSLIST_ENTRY)Entry); 05200 } 05201 } 05202 05203 #else /* (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) */ 05204 05205 NTOSAPI 05206 PVOID 05207 DDKAPI 05208 ExAllocateFromPagedLookasideList( 05209 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside); 05210 05211 NTOSAPI 05212 VOID 05213 DDKAPI 05214 ExFreeToPagedLookasideList( 05215 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside, 05216 /*IN*/ PVOID Entry); 05217 05218 #endif /* (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) */ 05219 05220 NTOSAPI 05221 PVOID 05222 DDKAPI 05223 ExAllocatePoolWithQuotaTag( 05224 /*IN*/ POOL_TYPE PoolType, 05225 /*IN*/ SIZE_T NumberOfBytes, 05226 /*IN*/ ULONG Tag); 05227 05228 NTOSAPI 05229 PVOID 05230 DDKAPI 05231 ExAllocatePoolWithTag( 05232 /*IN*/ POOL_TYPE PoolType, 05233 /*IN*/ SIZE_T NumberOfBytes, 05234 /*IN*/ ULONG Tag); 05235 05236 #ifdef POOL_TAGGING 05237 05238 #define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD') 05239 #define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD') 05240 05241 #else /* !POOL_TAGGING */ 05242 05243 NTOSAPI 05244 PVOID 05245 DDKAPI 05246 ExAllocatePool( 05247 /*IN*/ POOL_TYPE PoolType, 05248 /*IN*/ SIZE_T NumberOfBytes); 05249 05250 NTOSAPI 05251 PVOID 05252 DDKAPI 05253 ExAllocatePoolWithQuota( 05254 /*IN*/ POOL_TYPE PoolType, 05255 /*IN*/ SIZE_T NumberOfBytes); 05256 05257 #endif /* POOL_TAGGING */ 05258 05259 NTOSAPI 05260 PVOID 05261 DDKAPI 05262 ExAllocatePoolWithTagPriority( 05263 /*IN*/ POOL_TYPE PoolType, 05264 /*IN*/ SIZE_T NumberOfBytes, 05265 /*IN*/ ULONG Tag, 05266 /*IN*/ EX_POOL_PRIORITY Priority); 05267 05268 NTOSAPI 05269 VOID 05270 DDKAPI 05271 ExConvertExclusiveToSharedLite( 05272 /*IN*/ PERESOURCE Resource); 05273 05274 NTOSAPI 05275 NTSTATUS 05276 DDKAPI 05277 ExCreateCallback( 05278 /*OUT*/ PCALLBACK_OBJECT *CallbackObject, 05279 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 05280 /*IN*/ BOOLEAN Create, 05281 /*IN*/ BOOLEAN AllowMultipleCallbacks); 05282 05283 NTOSAPI 05284 VOID 05285 DDKAPI 05286 ExDeleteNPagedLookasideList( 05287 /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside); 05288 05289 NTOSAPI 05290 VOID 05291 DDKAPI 05292 ExDeletePagedLookasideList( 05293 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside); 05294 05295 NTOSAPI 05296 NTSTATUS 05297 DDKAPI 05298 ExDeleteResourceLite( 05299 /*IN*/ PERESOURCE Resource); 05300 05301 NTOSAPI 05302 VOID 05303 DDKAPI 05304 ExFreePool( 05305 /*IN*/ PVOID P); 05306 05307 #define PROTECTED_POOL 0x80000000 05308 05309 #ifdef POOL_TAGGING 05310 #define ExFreePool(P) ExFreePoolWithTag(P, 0) 05311 #endif 05312 05313 NTOSAPI 05314 VOID 05315 DDKAPI 05316 ExFreePoolWithTag( 05317 /*IN*/ PVOID P, 05318 /*IN*/ ULONG Tag); 05319 05320 /* 05321 * ERESOURCE_THREAD 05322 * ExGetCurrentResourceThread( 05323 * VOID); 05324 */ 05325 #define ExGetCurrentResourceThread() ((ERESOURCE_THREAD) PsGetCurrentThread()) 05326 05327 NTOSAPI 05328 ULONG 05329 DDKAPI 05330 ExGetExclusiveWaiterCount( 05331 /*IN*/ PERESOURCE Resource); 05332 05333 NTOSAPI 05334 KPROCESSOR_MODE 05335 DDKAPI 05336 ExGetPreviousMode( 05337 VOID); 05338 05339 NTOSAPI 05340 ULONG 05341 DDKAPI 05342 ExGetSharedWaiterCount( 05343 /*IN*/ PERESOURCE Resource); 05344 05345 NTOSAPI 05346 VOID 05347 DDKAPI 05348 KeInitializeEvent( 05349 /*IN*/ PRKEVENT Event, 05350 /*IN*/ EVENT_TYPE Type, 05351 /*IN*/ BOOLEAN State); 05352 05353 /* 05354 * VOID DDKAPI 05355 * ExInitializeFastMutex( 05356 * IN PFAST_MUTEX FastMutex) 05357 */ 05358 #define ExInitializeFastMutex(_FastMutex) \ 05359 { \ 05360 (_FastMutex)->Count = 1; \ 05361 (_FastMutex)->Owner = NULL; \ 05362 (_FastMutex)->Contention = 0; \ 05363 KeInitializeEvent(&(_FastMutex)->Event, SynchronizationEvent, FALSE); \ 05364 } 05365 05366 NTOSAPI 05367 VOID 05368 DDKAPI 05369 ExInitializeNPagedLookasideList( 05370 /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside, 05371 /*IN*/ PALLOCATE_FUNCTION Allocate /*OPTIONAL*/, 05372 /*IN*/ PFREE_FUNCTION Free /*OPTIONAL*/, 05373 /*IN*/ ULONG Flags, 05374 /*IN*/ SIZE_T Size, 05375 /*IN*/ ULONG Tag, 05376 /*IN*/ USHORT Depth); 05377 05378 NTOSAPI 05379 VOID 05380 DDKAPI 05381 ExInitializePagedLookasideList( 05382 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside, 05383 /*IN*/ PALLOCATE_FUNCTION Allocate /*OPTIONAL*/, 05384 /*IN*/ PFREE_FUNCTION Free /*OPTIONAL*/, 05385 /*IN*/ ULONG Flags, 05386 /*IN*/ SIZE_T Size, 05387 /*IN*/ ULONG Tag, 05388 /*IN*/ USHORT Depth); 05389 05390 NTOSAPI 05391 NTSTATUS 05392 DDKAPI 05393 ExInitializeResourceLite( 05394 /*IN*/ PERESOURCE Resource); 05395 05396 /* 05397 * VOID 05398 * InitializeSListHead( 05399 * IN PSLIST_HEADER SListHead) 05400 */ 05401 #define InitializeSListHead(_SListHead) \ 05402 (_SListHead)->Alignment = 0 05403 05404 #define ExInitializeSListHead InitializeSListHead 05405 05406 NTOSAPI 05407 LARGE_INTEGER 05408 DDKAPI 05409 ExInterlockedAddLargeInteger( 05410 /*IN*/ PLARGE_INTEGER Addend, 05411 /*IN*/ LARGE_INTEGER Increment, 05412 /*IN*/ PKSPIN_LOCK Lock); 05413 05414 NTOSAPI 05415 VOID 05416 DDKFASTAPI 05417 ExInterlockedAddLargeStatistic( 05418 /*IN*/ PLARGE_INTEGER Addend, 05419 /*IN*/ ULONG Increment); 05420 05421 NTOSAPI 05422 ULONG 05423 DDKAPI 05424 ExInterlockedAddUlong( 05425 /*IN*/ PULONG Addend, 05426 /*IN*/ ULONG Increment, 05427 PKSPIN_LOCK Lock); 05428 05429 NTOSAPI 05430 ULONG 05431 DDKFASTAPI 05432 ExfInterlockedAddUlong( 05433 /*IN*/ PULONG Addend, 05434 /*IN*/ ULONG Increment, 05435 PKSPIN_LOCK Lock); 05436 05437 05438 NTOSAPI 05439 LONGLONG 05440 DDKFASTAPI 05441 ExInterlockedCompareExchange64( 05442 /*IN OUT*/ PLONGLONG Destination, 05443 /*IN*/ PLONGLONG Exchange, 05444 /*IN*/ PLONGLONG Comparand, 05445 /*IN*/ PKSPIN_LOCK Lock); 05446 05447 NTOSAPI 05448 PSINGLE_LIST_ENTRY 05449 DDKFASTAPI 05450 ExInterlockedFlushSList( 05451 /*IN*/ PSLIST_HEADER ListHead); 05452 05453 NTOSAPI 05454 PLIST_ENTRY 05455 DDKAPI 05456 ExInterlockedInsertHeadList( 05457 /*IN*/ PLIST_ENTRY ListHead, 05458 /*IN*/ PLIST_ENTRY ListEntry, 05459 /*IN*/ PKSPIN_LOCK Lock); 05460 05461 NTOSAPI 05462 PLIST_ENTRY 05463 DDKFASTAPI 05464 ExfInterlockedInsertHeadList( 05465 /*IN*/ PLIST_ENTRY ListHead, 05466 /*IN*/ PLIST_ENTRY ListEntry, 05467 /*IN*/ PKSPIN_LOCK Lock); 05468 05469 NTOSAPI 05470 PLIST_ENTRY 05471 DDKAPI 05472 ExInterlockedInsertTailList( 05473 /*IN*/ PLIST_ENTRY ListHead, 05474 /*IN*/ PLIST_ENTRY ListEntry, 05475 /*IN*/ PKSPIN_LOCK Lock); 05476 05477 NTOSAPI 05478 PLIST_ENTRY 05479 DDKFASTAPI 05480 ExfInterlockedInsertTailList( 05481 /*IN*/ PLIST_ENTRY ListHead, 05482 /*IN*/ PLIST_ENTRY ListEntry, 05483 /*IN*/ PKSPIN_LOCK Lock); 05484 05485 NTOSAPI 05486 PSINGLE_LIST_ENTRY 05487 DDKAPI 05488 ExInterlockedPopEntryList( 05489 /*IN*/ PSINGLE_LIST_ENTRY ListHead, 05490 /*IN*/ PKSPIN_LOCK Lock); 05491 05492 NTOSAPI 05493 PSINGLE_LIST_ENTRY 05494 DDKFASTAPI 05495 ExfInterlockedPopEntryList( 05496 /*IN*/ PSINGLE_LIST_ENTRY ListHead, 05497 /*IN*/ PKSPIN_LOCK Lock); 05498 05499 05500 NTOSAPI 05501 PSINGLE_LIST_ENTRY 05502 DDKAPI 05503 ExInterlockedPushEntryList( 05504 /*IN*/ PSINGLE_LIST_ENTRY ListHead, 05505 /*IN*/ PSINGLE_LIST_ENTRY ListEntry, 05506 /*IN*/ PKSPIN_LOCK Lock); 05507 05508 NTOSAPI 05509 PSINGLE_LIST_ENTRY 05510 DDKFASTAPI 05511 ExfInterlockedPushEntryList( 05512 /*IN*/ PSINGLE_LIST_ENTRY ListHead, 05513 /*IN*/ PSINGLE_LIST_ENTRY ListEntry, 05514 /*IN*/ PKSPIN_LOCK Lock); 05515 05516 05517 NTOSAPI 05518 PLIST_ENTRY 05519 DDKAPI 05520 ExInterlockedRemoveHeadList( 05521 /*IN*/ PLIST_ENTRY ListHead, 05522 /*IN*/ PKSPIN_LOCK Lock); 05523 05524 NTOSAPI 05525 PLIST_ENTRY 05526 DDKFASTAPI 05527 ExfInterlockedRemoveHeadList( 05528 /*IN*/ PLIST_ENTRY ListHead, 05529 /*IN*/ PKSPIN_LOCK Lock); 05530 05531 05532 NTOSAPI 05533 BOOLEAN 05534 DDKAPI 05535 ExIsProcessorFeaturePresent( 05536 /*IN*/ ULONG ProcessorFeature); 05537 05538 NTOSAPI 05539 BOOLEAN 05540 DDKAPI 05541 ExIsResourceAcquiredExclusiveLite( 05542 /*IN*/ PERESOURCE Resource); 05543 05544 NTOSAPI 05545 USHORT 05546 DDKAPI 05547 ExIsResourceAcquiredLite( 05548 /*IN*/ PERESOURCE Resource); 05549 05550 NTOSAPI 05551 USHORT 05552 DDKAPI 05553 ExIsResourceAcquiredSharedLite( 05554 /*IN*/ PERESOURCE Resource); 05555 05556 NTOSAPI 05557 VOID 05558 DDKAPI 05559 ExLocalTimeToSystemTime( 05560 /*IN*/ PLARGE_INTEGER LocalTime, 05561 /*OUT*/ PLARGE_INTEGER SystemTime); 05562 05563 NTOSAPI 05564 VOID 05565 DDKAPI 05566 ExNotifyCallback( 05567 /*IN*/ PCALLBACK_OBJECT CallbackObject, 05568 /*IN*/ PVOID Argument1, 05569 /*IN*/ PVOID Argument2); 05570 05571 NTOSAPI 05572 VOID 05573 DDKAPI 05574 ExRaiseAccessViolation( 05575 VOID); 05576 05577 NTOSAPI 05578 VOID 05579 DDKAPI 05580 ExRaiseDatatypeMisalignment( 05581 VOID); 05582 05583 NTOSAPI 05584 VOID 05585 DDKAPI 05586 ExRaiseStatus( 05587 /*IN*/ NTSTATUS Status); 05588 05589 NTOSAPI 05590 PVOID 05591 DDKAPI 05592 ExRegisterCallback( 05593 /*IN*/ PCALLBACK_OBJECT CallbackObject, 05594 /*IN*/ PCALLBACK_FUNCTION CallbackFunction, 05595 /*IN*/ PVOID CallbackContext); 05596 05597 NTOSAPI 05598 VOID 05599 DDKAPI 05600 ExReinitializeResourceLite( 05601 /*IN*/ PERESOURCE Resource); 05602 05603 NTOSAPI 05604 VOID 05605 DDKFASTAPI 05606 ExReleaseFastMutex( 05607 /*IN*/ PFAST_MUTEX FastMutex); 05608 05609 NTOSAPI 05610 VOID 05611 DDKFASTAPI 05612 ExReleaseFastMutexUnsafe( 05613 /*IN*/ PFAST_MUTEX FastMutex); 05614 05615 NTOSAPI 05616 VOID 05617 DDKAPI 05618 ExReleaseResourceForThreadLite( 05619 /*IN*/ PERESOURCE Resource, 05620 /*IN*/ ERESOURCE_THREAD ResourceThreadId); 05621 05622 NTOSAPI 05623 VOID 05624 DDKFASTAPI 05625 ExReleaseResourceLite( 05626 /*IN*/ PERESOURCE Resource); 05627 05628 NTOSAPI 05629 VOID 05630 DDKAPI 05631 ExSetResourceOwnerPointer( 05632 /*IN*/ PERESOURCE Resource, 05633 /*IN*/ PVOID OwnerPointer); 05634 05635 NTOSAPI 05636 ULONG 05637 DDKAPI 05638 ExSetTimerResolution( 05639 /*IN*/ ULONG DesiredTime, 05640 /*IN*/ BOOLEAN SetResolution); 05641 05642 NTOSAPI 05643 VOID 05644 DDKAPI 05645 ExSystemTimeToLocalTime( 05646 /*IN*/ PLARGE_INTEGER SystemTime, 05647 /*OUT*/ PLARGE_INTEGER LocalTime); 05648 05649 NTOSAPI 05650 BOOLEAN 05651 DDKFASTAPI 05652 ExTryToAcquireFastMutex( 05653 /*IN*/ PFAST_MUTEX FastMutex); 05654 05655 NTOSAPI 05656 BOOLEAN 05657 DDKAPI 05658 ExTryToAcquireResourceExclusiveLite( 05659 /*IN*/ PERESOURCE Resource); 05660 05661 NTOSAPI 05662 VOID 05663 DDKAPI 05664 ExUnregisterCallback( 05665 /*IN*/ PVOID CbRegistration); 05666 05667 NTOSAPI 05668 NTSTATUS 05669 DDKAPI 05670 ExUuidCreate( 05671 /*OUT*/ UUID *Uuid); 05672 05673 NTOSAPI 05674 BOOLEAN 05675 DDKAPI 05676 ExVerifySuite( 05677 /*IN*/ SUITE_TYPE SuiteType); 05678 05679 #ifdef DBG 05680 05681 #define PAGED_CODE() { \ 05682 if (KeGetCurrentIrql() > APC_LEVEL) { \ 05683 KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \ 05684 ASSERT(FALSE); \ 05685 } \ 05686 } 05687 05688 #else 05689 05690 #define PAGED_CODE() 05691 05692 #endif 05693 05694 NTOSAPI 05695 VOID 05696 DDKAPI 05697 ProbeForRead( 05698 /*IN*/ CONST VOID *Address, 05699 /*IN*/ ULONG Length, 05700 /*IN*/ ULONG Alignment); 05701 05702 NTOSAPI 05703 VOID 05704 DDKAPI 05705 ProbeForWrite( 05706 /*IN*/ CONST VOID *Address, 05707 /*IN*/ ULONG Length, 05708 /*IN*/ ULONG Alignment); 05709 05710 05711 05712 /** Configuration manager routines **/ 05713 05714 NTOSAPI 05715 NTSTATUS 05716 DDKAPI 05717 CmRegisterCallback( 05718 /*IN*/ PEX_CALLBACK_FUNCTION Function, 05719 /*IN*/ PVOID Context, 05720 /*IN OUT*/ PLARGE_INTEGER Cookie); 05721 05722 NTOSAPI 05723 NTSTATUS 05724 DDKAPI 05725 CmUnRegisterCallback( 05726 /*IN*/ LARGE_INTEGER Cookie); 05727 05728 05729 05730 /** Filesystem runtime library routines **/ 05731 05732 NTOSAPI 05733 BOOLEAN 05734 DDKAPI 05735 FsRtlIsTotalDeviceFailure( 05736 /*IN*/ NTSTATUS Status); 05737 05738 05739 05740 /** Hardware abstraction layer routines **/ 05741 05742 NTOSAPI 05743 VOID 05744 DDKFASTAPI 05745 HalExamineMBR( 05746 /*IN*/ PDEVICE_OBJECT DeviceObject, 05747 /*IN*/ ULONG SectorSize, 05748 /*IN*/ ULONG MBRTypeIdentifier, 05749 /*OUT*/ PVOID Buffer); 05750 05751 NTOSAPI 05752 VOID 05753 DDKAPI 05754 READ_PORT_BUFFER_UCHAR( 05755 /*IN*/ PUCHAR Port, 05756 /*IN*/ PUCHAR Buffer, 05757 /*IN*/ ULONG Count); 05758 05759 NTOSAPI 05760 VOID 05761 DDKAPI 05762 READ_PORT_BUFFER_ULONG( 05763 /*IN*/ PULONG Port, 05764 /*IN*/ PULONG Buffer, 05765 /*IN*/ ULONG Count); 05766 05767 NTOSAPI 05768 VOID 05769 DDKAPI 05770 READ_PORT_BUFFER_USHORT( 05771 /*IN*/ PUSHORT Port, 05772 /*IN*/ PUSHORT Buffer, 05773 /*IN*/ ULONG Count); 05774 05775 NTOSAPI 05776 UCHAR 05777 DDKAPI 05778 READ_PORT_UCHAR( 05779 /*IN*/ PUCHAR Port); 05780 05781 NTOSAPI 05782 ULONG 05783 DDKAPI 05784 READ_PORT_ULONG( 05785 /*IN*/ PULONG Port); 05786 05787 NTOSAPI 05788 USHORT 05789 DDKAPI 05790 READ_PORT_USHORT( 05791 /*IN*/ PUSHORT Port); 05792 05793 NTOSAPI 05794 VOID 05795 DDKAPI 05796 READ_REGISTER_BUFFER_UCHAR( 05797 /*IN*/ PUCHAR Register, 05798 /*IN*/ PUCHAR Buffer, 05799 /*IN*/ ULONG Count); 05800 05801 NTOSAPI 05802 VOID 05803 DDKAPI 05804 READ_REGISTER_BUFFER_ULONG( 05805 /*IN*/ PULONG Register, 05806 /*IN*/ PULONG Buffer, 05807 /*IN*/ ULONG Count); 05808 05809 NTOSAPI 05810 VOID 05811 DDKAPI 05812 READ_REGISTER_BUFFER_USHORT( 05813 /*IN*/ PUSHORT Register, 05814 /*IN*/ PUSHORT Buffer, 05815 /*IN*/ ULONG Count); 05816 05817 NTOSAPI 05818 UCHAR 05819 DDKAPI 05820 READ_REGISTER_UCHAR( 05821 /*IN*/ PUCHAR Register); 05822 05823 NTOSAPI 05824 ULONG 05825 DDKAPI 05826 READ_REGISTER_ULONG( 05827 /*IN*/ PULONG Register); 05828 05829 NTOSAPI 05830 USHORT 05831 DDKAPI 05832 READ_REGISTER_USHORT( 05833 /*IN*/ PUSHORT Register); 05834 05835 NTOSAPI 05836 VOID 05837 DDKAPI 05838 WRITE_PORT_BUFFER_UCHAR( 05839 /*IN*/ PUCHAR Port, 05840 /*IN*/ PUCHAR Buffer, 05841 /*IN*/ ULONG Count); 05842 05843 NTOSAPI 05844 VOID 05845 DDKAPI 05846 WRITE_PORT_BUFFER_ULONG( 05847 /*IN*/ PULONG Port, 05848 /*IN*/ PULONG Buffer, 05849 /*IN*/ ULONG Count); 05850 05851 NTOSAPI 05852 VOID 05853 DDKAPI 05854 WRITE_PORT_BUFFER_USHORT( 05855 /*IN*/ PUSHORT Port, 05856 /*IN*/ PUSHORT Buffer, 05857 /*IN*/ ULONG Count); 05858 05859 NTOSAPI 05860 VOID 05861 DDKAPI 05862 WRITE_PORT_UCHAR( 05863 /*IN*/ PUCHAR Port, 05864 /*IN*/ UCHAR Value); 05865 05866 NTOSAPI 05867 VOID 05868 DDKAPI 05869 WRITE_PORT_ULONG( 05870 /*IN*/ PULONG Port, 05871 /*IN*/ ULONG Value); 05872 05873 NTOSAPI 05874 VOID 05875 DDKAPI 05876 WRITE_PORT_USHORT( 05877 /*IN*/ PUSHORT Port, 05878 /*IN*/ USHORT Value); 05879 05880 NTOSAPI 05881 VOID 05882 DDKAPI 05883 WRITE_REGISTER_BUFFER_UCHAR( 05884 /*IN*/ PUCHAR Register, 05885 /*IN*/ PUCHAR Buffer, 05886 /*IN*/ ULONG Count); 05887 05888 NTOSAPI 05889 VOID 05890 DDKAPI 05891 WRITE_REGISTER_BUFFER_ULONG( 05892 /*IN*/ PULONG Register, 05893 /*IN*/ PULONG Buffer, 05894 /*IN*/ ULONG Count); 05895 05896 NTOSAPI 05897 VOID 05898 DDKAPI 05899 WRITE_REGISTER_BUFFER_USHORT( 05900 /*IN*/ PUSHORT Register, 05901 /*IN*/ PUSHORT Buffer, 05902 /*IN*/ ULONG Count); 05903 05904 NTOSAPI 05905 VOID 05906 DDKAPI 05907 WRITE_REGISTER_UCHAR( 05908 /*IN*/ PUCHAR Register, 05909 /*IN*/ UCHAR Value); 05910 05911 NTOSAPI 05912 VOID 05913 DDKAPI 05914 WRITE_REGISTER_ULONG( 05915 /*IN*/ PULONG Register, 05916 /*IN*/ ULONG Value); 05917 05918 NTOSAPI 05919 VOID 05920 DDKAPI 05921 WRITE_REGISTER_USHORT( 05922 /*IN*/ PUSHORT Register, 05923 /*IN*/ USHORT Value); 05924 05925 /** I/O manager routines **/ 05926 05927 NTOSAPI 05928 VOID 05929 DDKAPI 05930 IoAcquireCancelSpinLock( 05931 /*OUT*/ PKIRQL Irql); 05932 05933 NTOSAPI 05934 NTSTATUS 05935 DDKAPI 05936 IoAcquireRemoveLockEx( 05937 /*IN*/ PIO_REMOVE_LOCK RemoveLock, 05938 /*IN*/ PVOID Tag /*OPTIONAL*/, 05939 /*IN*/ PCSTR File, 05940 /*IN*/ ULONG Line, 05941 /*IN*/ ULONG RemlockSize); 05942 05943 /* 05944 * NTSTATUS 05945 * IoAcquireRemoveLock( 05946 * IN PIO_REMOVE_LOCK RemoveLock, 05947 * IN PVOID Tag OPTIONAL) 05948 */ 05949 #define IoAcquireRemoveLock(_RemoveLock, \ 05950 _Tag) \ 05951 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK)) 05952 05953 /* 05954 * VOID 05955 * IoAdjustPagingPathCount( 05956 * IN PLONG Count, 05957 * IN BOOLEAN Increment) 05958 */ 05959 #define IoAdjustPagingPathCount(_Count, \ 05960 _Increment) \ 05961 { \ 05962 if (_Increment) \ 05963 { \ 05964 InterlockedIncrement(_Count); \ 05965 } \ 05966 else \ 05967 { \ 05968 InterlockedDecrement(_Count); \ 05969 } \ 05970 } 05971 05972 NTOSAPI 05973 VOID 05974 DDKAPI 05975 IoAllocateController( 05976 /*IN*/ PCONTROLLER_OBJECT ControllerObject, 05977 /*IN*/ PDEVICE_OBJECT DeviceObject, 05978 /*IN*/ PDRIVER_CONTROL ExecutionRoutine, 05979 /*IN*/ PVOID Context); 05980 05981 NTOSAPI 05982 NTSTATUS 05983 DDKAPI 05984 IoAllocateDriverObjectExtension( 05985 /*IN*/ PDRIVER_OBJECT DriverObject, 05986 /*IN*/ PVOID ClientIdentificationAddress, 05987 /*IN*/ ULONG DriverObjectExtensionSize, 05988 /*OUT*/ PVOID *DriverObjectExtension); 05989 05990 typedef struct _IO_ERROR_LOG_PACKET { 05991 UCHAR MajorFunctionCode; 05992 UCHAR RetryCount; 05993 USHORT DumpDataSize; 05994 USHORT NumberOfStrings; 05995 USHORT StringOffset; 05996 USHORT EventCategory; 05997 NTSTATUS ErrorCode; 05998 ULONG UniqueErrorValue; 05999 NTSTATUS FinalStatus; 06000 ULONG SequenceNumber; 06001 ULONG IoControlCode; 06002 LARGE_INTEGER DeviceOffset; 06003 ULONG DumpData[1]; 06004 } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; 06005 06006 NTOSAPI 06007 PVOID 06008 DDKAPI 06009 IoAllocateErrorLogEntry( 06010 /*IN*/ PVOID IoObject, 06011 /*IN*/ UCHAR EntrySize); 06012 06013 NTOSAPI 06014 PIRP 06015 DDKAPI 06016 IoAllocateIrp( 06017 /*IN*/ CCHAR StackSize, 06018 /*IN*/ BOOLEAN ChargeQuota); 06019 06020 NTOSAPI 06021 PMDL 06022 DDKAPI 06023 IoAllocateMdl( 06024 /*IN*/ PVOID VirtualAddress, 06025 /*IN*/ ULONG Length, 06026 /*IN*/ BOOLEAN SecondaryBuffer, 06027 /*IN*/ BOOLEAN ChargeQuota, 06028 /*IN OUT*/ PIRP Irp /*OPTIONAL*/); 06029 06030 NTOSAPI 06031 PIO_WORKITEM 06032 DDKAPI 06033 IoAllocateWorkItem( 06034 /*IN*/ PDEVICE_OBJECT DeviceObject); 06035 06036 /* 06037 * VOID IoAssignArcName( 06038 * IN PUNICODE_STRING ArcName, 06039 * IN PUNICODE_STRING DeviceName); 06040 */ 06041 #define IoAssignArcName(_ArcName, _DeviceName) ( \ 06042 IoCreateSymbolicLink((_ArcName), (_DeviceName))) 06043 06044 NTOSAPI 06045 NTSTATUS 06046 DDKAPI 06047 IoAttachDevice( 06048 /*IN*/ PDEVICE_OBJECT SourceDevice, 06049 /*IN*/ PUNICODE_STRING TargetDevice, 06050 /*OUT*/ PDEVICE_OBJECT *AttachedDevice); 06051 06052 NTOSAPI 06053 PDEVICE_OBJECT 06054 DDKAPI 06055 IoAttachDeviceToDeviceStack( 06056 /*IN*/ PDEVICE_OBJECT SourceDevice, 06057 /*IN*/ PDEVICE_OBJECT TargetDevice); 06058 06059 NTOSAPI 06060 PIRP 06061 DDKAPI 06062 IoBuildAsynchronousFsdRequest( 06063 /*IN*/ ULONG MajorFunction, 06064 /*IN*/ PDEVICE_OBJECT DeviceObject, 06065 /*IN OUT*/ PVOID Buffer /*OPTIONAL*/, 06066 /*IN*/ ULONG Length /*OPTIONAL*/, 06067 /*IN*/ PLARGE_INTEGER StartingOffset /*OPTIONAL*/, 06068 /*IN*/ PIO_STATUS_BLOCK IoStatusBlock /*OPTIONAL*/); 06069 06070 NTOSAPI 06071 PIRP 06072 DDKAPI 06073 IoBuildDeviceIoControlRequest( 06074 /*IN*/ ULONG IoControlCode, 06075 /*IN*/ PDEVICE_OBJECT DeviceObject, 06076 /*IN*/ PVOID InputBuffer /*OPTIONAL*/, 06077 /*IN*/ ULONG InputBufferLength, 06078 /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/, 06079 /*IN*/ ULONG OutputBufferLength, 06080 /*IN*/ BOOLEAN InternalDeviceIoControl, 06081 /*IN*/ PKEVENT Event, 06082 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock); 06083 06084 NTOSAPI 06085 VOID 06086 DDKAPI 06087 IoBuildPartialMdl( 06088 /*IN*/ PMDL SourceMdl, 06089 /*IN OUT*/ PMDL TargetMdl, 06090 /*IN*/ PVOID VirtualAddress, 06091 /*IN*/ ULONG Length); 06092 06093 NTOSAPI 06094 PIRP 06095 DDKAPI 06096 IoBuildSynchronousFsdRequest( 06097 /*IN*/ ULONG MajorFunction, 06098 /*IN*/ PDEVICE_OBJECT DeviceObject, 06099 /*IN OUT*/ PVOID Buffer /*OPTIONAL*/, 06100 /*IN*/ ULONG Length /*OPTIONAL*/, 06101 /*IN*/ PLARGE_INTEGER StartingOffset /*OPTIONAL*/, 06102 /*IN*/ PKEVENT Event, 06103 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock); 06104 06105 NTOSAPI 06106 NTSTATUS 06107 DDKFASTAPI 06108 IofCallDriver( 06109 /*IN*/ PDEVICE_OBJECT DeviceObject, 06110 /*IN OUT*/ PIRP Irp); 06111 06112 /* 06113 * NTSTATUS 06114 * IoCallDriver( 06115 * IN PDEVICE_OBJECT DeviceObject, 06116 * IN OUT PIRP Irp) 06117 */ 06118 #define IoCallDriver IofCallDriver 06119 06120 NTOSAPI 06121 VOID 06122 DDKAPI 06123 IoCancelFileOpen( 06124 /*IN*/ PDEVICE_OBJECT DeviceObject, 06125 /*IN*/ PFILE_OBJECT FileObject); 06126 06127 NTOSAPI 06128 BOOLEAN 06129 DDKAPI 06130 IoCancelIrp( 06131 /*IN*/ PIRP Irp); 06132 06133 NTOSAPI 06134 NTSTATUS 06135 DDKAPI 06136 IoCheckShareAccess( 06137 /*IN*/ ACCESS_MASK DesiredAccess, 06138 /*IN*/ ULONG DesiredShareAccess, 06139 /*IN OUT*/ PFILE_OBJECT FileObject, 06140 /*IN OUT*/ PSHARE_ACCESS ShareAccess, 06141 /*IN*/ BOOLEAN Update); 06142 06143 NTOSAPI 06144 VOID 06145 DDKFASTAPI 06146 IofCompleteRequest( 06147 /*IN*/ PIRP Irp, 06148 /*IN*/ CCHAR PriorityBoost); 06149 06150 /* 06151 * VOID 06152 * IoCompleteRequest( 06153 * IN PIRP Irp, 06154 * IN CCHAR PriorityBoost) 06155 */ 06156 #define IoCompleteRequest IofCompleteRequest 06157 06158 NTOSAPI 06159 NTSTATUS 06160 DDKAPI 06161 IoConnectInterrupt( 06162 /*OUT*/ PKINTERRUPT *InterruptObject, 06163 /*IN*/ PKSERVICE_ROUTINE ServiceRoutine, 06164 /*IN*/ PVOID ServiceContext, 06165 /*IN*/ PKSPIN_LOCK SpinLock /*OPTIONAL*/, 06166 /*IN*/ ULONG Vector, 06167 /*IN*/ KIRQL Irql, 06168 /*IN*/ KIRQL SynchronizeIrql, 06169 /*IN*/ KINTERRUPT_MODE InterruptMode, 06170 /*IN*/ BOOLEAN ShareVector, 06171 /*IN*/ KAFFINITY ProcessorEnableMask, 06172 /*IN*/ BOOLEAN FloatingSave); 06173 06174 /* 06175 * PIO_STACK_LOCATION 06176 * IoGetCurrentIrpStackLocation( 06177 * IN PIRP Irp) 06178 */ 06179 #define IoGetCurrentIrpStackLocation(_Irp) \ 06180 ((_Irp)->Tail.Overlay.CurrentStackLocation) 06181 06182 /* 06183 * PIO_STACK_LOCATION 06184 * IoGetNextIrpStackLocation( 06185 * IN PIRP Irp) 06186 */ 06187 #define IoGetNextIrpStackLocation(_Irp) \ 06188 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1) 06189 06190 /* 06191 * VOID 06192 * IoCopyCurrentIrpStackLocationToNext( 06193 * IN PIRP Irp) 06194 */ 06195 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \ 06196 { \ 06197 PIO_STACK_LOCATION _IrpSp; \ 06198 PIO_STACK_LOCATION _NextIrpSp; \ 06199 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \ 06200 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \ 06201 RtlCopyMemory(_NextIrpSp, _IrpSp, \ 06202 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \ 06203 _NextIrpSp->Control = 0; \ 06204 } 06205 06206 NTOSAPI 06207 PCONTROLLER_OBJECT 06208 DDKAPI 06209 IoCreateController( 06210 /*IN*/ ULONG Size); 06211 06212 NTOSAPI 06213 NTSTATUS 06214 DDKAPI 06215 IoCreateDevice( 06216 /*IN*/ PDRIVER_OBJECT DriverObject, 06217 /*IN*/ ULONG DeviceExtensionSize, 06218 /*IN*/ PUNICODE_STRING DeviceName /*OPTIONAL*/, 06219 /*IN*/ DEVICE_TYPE DeviceType, 06220 /*IN*/ ULONG DeviceCharacteristics, 06221 /*IN*/ BOOLEAN Exclusive, 06222 /*OUT*/ PDEVICE_OBJECT *DeviceObject); 06223 06224 NTOSAPI 06225 NTSTATUS 06226 DDKAPI 06227 IoCreateDisk( 06228 /*IN*/ PDEVICE_OBJECT DeviceObject, 06229 /*IN*/ PCREATE_DISK Disk); 06230 06231 NTOSAPI 06232 NTSTATUS 06233 DDKAPI 06234 IoCreateFile( 06235 /*OUT*/ PHANDLE FileHandle, 06236 /*IN*/ ACCESS_MASK DesiredAccess, 06237 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 06238 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 06239 /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/, 06240 /*IN*/ ULONG FileAttributes, 06241 /*IN*/ ULONG ShareAccess, 06242 /*IN*/ ULONG Disposition, 06243 /*IN*/ ULONG CreateOptions, 06244 /*IN*/ PVOID EaBuffer /*OPTIONAL*/, 06245 /*IN*/ ULONG EaLength, 06246 /*IN*/ CREATE_FILE_TYPE CreateFileType, 06247 /*IN*/ PVOID ExtraCreateParameters /*OPTIONAL*/, 06248 /*IN*/ ULONG Options); 06249 06250 NTOSAPI 06251 PKEVENT 06252 DDKAPI 06253 IoCreateNotificationEvent( 06254 /*IN*/ PUNICODE_STRING EventName, 06255 /*OUT*/ PHANDLE EventHandle); 06256 06257 NTOSAPI 06258 NTSTATUS 06259 DDKAPI 06260 IoCreateSymbolicLink( 06261 /*IN*/ PUNICODE_STRING SymbolicLinkName, 06262 /*IN*/ PUNICODE_STRING DeviceName); 06263 06264 NTOSAPI 06265 PKEVENT 06266 DDKAPI 06267 IoCreateSynchronizationEvent( 06268 /*IN*/ PUNICODE_STRING EventName, 06269 /*OUT*/ PHANDLE EventHandle); 06270 06271 NTOSAPI 06272 NTSTATUS 06273 DDKAPI 06274 IoCreateUnprotectedSymbolicLink( 06275 /*IN*/ PUNICODE_STRING SymbolicLinkName, 06276 /*IN*/ PUNICODE_STRING DeviceName); 06277 06278 NTOSAPI 06279 VOID 06280 DDKAPI 06281 IoCsqInitialize( 06282 PIO_CSQ Csq, 06283 /*IN*/ PIO_CSQ_INSERT_IRP CsqInsertIrp, 06284 /*IN*/ PIO_CSQ_REMOVE_IRP CsqRemoveIrp, 06285 /*IN*/ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, 06286 /*IN*/ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, 06287 /*IN*/ PIO_CSQ_RELEASE_LOCK CsqReleaseLock, 06288 /*IN*/ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); 06289 06290 NTOSAPI 06291 VOID 06292 DDKAPI 06293 IoCsqInsertIrp( 06294 /*IN*/ PIO_CSQ Csq, 06295 /*IN*/ PIRP Irp, 06296 /*IN*/ PIO_CSQ_IRP_CONTEXT Context); 06297 06298 NTOSAPI 06299 PIRP 06300 DDKAPI 06301 IoCsqRemoveIrp( 06302 /*IN*/ PIO_CSQ Csq, 06303 /*IN*/ PIO_CSQ_IRP_CONTEXT Context); 06304 06305 NTOSAPI 06306 PIRP 06307 DDKAPI 06308 IoCsqRemoveNextIrp( 06309 /*IN*/ PIO_CSQ Csq, 06310 /*IN*/ PVOID PeekContext); 06311 06312 NTOSAPI 06313 VOID 06314 DDKAPI 06315 IoDeleteController( 06316 /*IN*/ PCONTROLLER_OBJECT ControllerObject); 06317 06318 NTOSAPI 06319 VOID 06320 DDKAPI 06321 IoDeleteDevice( 06322 /*IN*/ PDEVICE_OBJECT DeviceObject); 06323 06324 NTOSAPI 06325 NTSTATUS 06326 DDKAPI 06327 IoDeleteSymbolicLink( 06328 /*IN*/ PUNICODE_STRING SymbolicLinkName); 06329 06330 /* 06331 * VOID 06332 * IoDeassignArcName( 06333 * IN PUNICODE_STRING ArcName) 06334 */ 06335 #define IoDeassignArcName IoDeleteSymbolicLink 06336 06337 NTOSAPI 06338 VOID 06339 DDKAPI 06340 IoDetachDevice( 06341 /*IN OUT*/ PDEVICE_OBJECT TargetDevice); 06342 06343 NTOSAPI 06344 VOID 06345 DDKAPI 06346 IoDisconnectInterrupt( 06347 /*IN*/ PKINTERRUPT InterruptObject); 06348 06349 NTOSAPI 06350 BOOLEAN 06351 DDKAPI 06352 IoForwardIrpSynchronously( 06353 /*IN*/ PDEVICE_OBJECT DeviceObject, 06354 /*IN*/ PIRP Irp); 06355 06356 #define IoForwardAndCatchIrp IoForwardIrpSynchronously 06357 06358 NTOSAPI 06359 VOID 06360 DDKAPI 06361 IoFreeController( 06362 /*IN*/ PCONTROLLER_OBJECT ControllerObject); 06363 06364 NTOSAPI 06365 VOID 06366 DDKAPI 06367 IoFreeErrorLogEntry( 06368 PVOID ElEntry); 06369 06370 NTOSAPI 06371 VOID 06372 DDKAPI 06373 IoFreeIrp( 06374 /*IN*/ PIRP Irp); 06375 06376 NTOSAPI 06377 VOID 06378 DDKAPI 06379 IoFreeMdl( 06380 /*IN*/ PMDL Mdl); 06381 06382 NTOSAPI 06383 VOID 06384 DDKAPI 06385 IoFreeWorkItem( 06386 /*IN*/ PIO_WORKITEM pIOWorkItem); 06387 06388 NTOSAPI 06389 PDEVICE_OBJECT 06390 DDKAPI 06391 IoGetAttachedDevice( 06392 /*IN*/ PDEVICE_OBJECT DeviceObject); 06393 06394 NTOSAPI 06395 PDEVICE_OBJECT 06396 DDKAPI 06397 IoGetAttachedDeviceReference( 06398 /*IN*/ PDEVICE_OBJECT DeviceObject); 06399 06400 NTOSAPI 06401 NTSTATUS 06402 DDKAPI 06403 IoGetBootDiskInformation( 06404 /*IN OUT*/ PBOOTDISK_INFORMATION BootDiskInformation, 06405 /*IN*/ ULONG Size); 06406 06407 NTOSAPI 06408 PCONFIGURATION_INFORMATION 06409 DDKAPI 06410 IoGetConfigurationInformation( 06411 VOID); 06412 06413 NTOSAPI 06414 PEPROCESS 06415 DDKAPI 06416 IoGetCurrentProcess( 06417 VOID); 06418 06419 NTOSAPI 06420 NTSTATUS 06421 DDKAPI 06422 IoGetDeviceInterfaceAlias( 06423 /*IN*/ PUNICODE_STRING SymbolicLinkName, 06424 /*IN*/ CONST GUID *AliasInterfaceClassGuid, 06425 /*OUT*/ PUNICODE_STRING AliasSymbolicLinkName); 06426 06427 NTOSAPI 06428 NTSTATUS 06429 DDKAPI 06430 IoGetDeviceInterfaces( 06431 /*IN*/ CONST GUID *InterfaceClassGuid, 06432 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject /*OPTIONAL*/, 06433 /*IN*/ ULONG Flags, 06434 /*OUT*/ PWSTR *SymbolicLinkList); 06435 06436 NTOSAPI 06437 NTSTATUS 06438 DDKAPI 06439 IoGetDeviceObjectPointer( 06440 /*IN*/ PUNICODE_STRING ObjectName, 06441 /*IN*/ ACCESS_MASK DesiredAccess, 06442 /*OUT*/ PFILE_OBJECT *FileObject, 06443 /*OUT*/ PDEVICE_OBJECT *DeviceObject); 06444 06445 NTOSAPI 06446 NTSTATUS 06447 DDKAPI 06448 IoGetDeviceProperty( 06449 /*IN*/ PDEVICE_OBJECT DeviceObject, 06450 /*IN*/ DEVICE_REGISTRY_PROPERTY DeviceProperty, 06451 /*IN*/ ULONG BufferLength, 06452 /*OUT*/ PVOID PropertyBuffer, 06453 /*OUT*/ PULONG ResultLength); 06454 06455 NTOSAPI 06456 PDEVICE_OBJECT 06457 DDKAPI 06458 IoGetDeviceToVerify( 06459 /*IN*/ PETHREAD Thread); 06460 06461 NTOSAPI 06462 PDMA_ADAPTER 06463 DDKAPI 06464 IoGetDmaAdapter( 06465 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject, 06466 /*IN*/ PDEVICE_DESCRIPTION DeviceDescription, 06467 /*IN OUT*/ PULONG NumberOfMapRegisters); 06468 06469 NTOSAPI 06470 PVOID 06471 DDKAPI 06472 IoGetDriverObjectExtension( 06473 /*IN*/ PDRIVER_OBJECT DriverObject, 06474 /*IN*/ PVOID ClientIdentificationAddress); 06475 06476 NTOSAPI 06477 PGENERIC_MAPPING 06478 DDKAPI 06479 IoGetFileObjectGenericMapping( 06480 VOID); 06481 06482 /* 06483 * ULONG 06484 * IoGetFunctionCodeFromCtlCode( 06485 * IN ULONG ControlCode) 06486 */ 06487 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \ 06488 (((_ControlCode) >> 2) & 0x00000FFF) 06489 06490 NTOSAPI 06491 PVOID 06492 DDKAPI 06493 IoGetInitialStack( 06494 VOID); 06495 06496 NTOSAPI 06497 PDEVICE_OBJECT 06498 DDKAPI 06499 IoGetRelatedDeviceObject( 06500 /*IN*/ PFILE_OBJECT FileObject); 06501 06502 NTOSAPI 06503 ULONG 06504 DDKAPI 06505 IoGetRemainingStackSize( 06506 VOID); 06507 06508 NTOSAPI 06509 VOID 06510 DDKAPI 06511 IoGetStackLimits( 06512 /*OUT*/ PULONG_PTR LowLimit, 06513 /*OUT*/ PULONG_PTR HighLimit); 06514 06515 NTOSAPI 06516 VOID 06517 DDKAPI 06518 KeInitializeDpc( 06519 /*IN*/ PRKDPC Dpc, 06520 /*IN*/ PKDEFERRED_ROUTINE DeferredRoutine, 06521 /*IN*/ PVOID DeferredContext); 06522 06523 /* 06524 * VOID 06525 * IoInitializeDpcRequest( 06526 * IN PDEVICE_OBJECT DeviceObject, 06527 * IN PIO_DPC_ROUTINE DpcRoutine) 06528 */ 06529 #define IoInitializeDpcRequest(_DeviceObject, \ 06530 _DpcRoutine) \ 06531 KeInitializeDpc(&(_DeviceObject)->Dpc, \ 06532 (PKDEFERRED_ROUTINE) (_DpcRoutine), \ 06533 _DeviceObject) 06534 06535 NTOSAPI 06536 VOID 06537 DDKAPI 06538 IoInitializeIrp( 06539 /*IN OUT*/ PIRP Irp, 06540 /*IN*/ USHORT PacketSize, 06541 /*IN*/ CCHAR StackSize); 06542 06543 NTOSAPI 06544 VOID 06545 DDKAPI 06546 IoInitializeRemoveLockEx( 06547 /*IN*/ PIO_REMOVE_LOCK Lock, 06548 /*IN*/ ULONG AllocateTag, 06549 /*IN*/ ULONG MaxLockedMinutes, 06550 /*IN*/ ULONG HighWatermark, 06551 /*IN*/ ULONG RemlockSize); 06552 06553 /* VOID 06554 * IoInitializeRemoveLock( 06555 * IN PIO_REMOVE_LOCK Lock, 06556 * IN ULONG AllocateTag, 06557 * IN ULONG MaxLockedMinutes, 06558 * IN ULONG HighWatermark) 06559 */ 06560 #define IoInitializeRemoveLock( \ 06561 Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \ 06562 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \ 06563 HighWatermark, sizeof(IO_REMOVE_LOCK)) 06564 06565 NTOSAPI 06566 NTSTATUS 06567 DDKAPI 06568 IoInitializeTimer( 06569 /*IN*/ PDEVICE_OBJECT DeviceObject, 06570 /*IN*/ PIO_TIMER_ROUTINE TimerRoutine, 06571 /*IN*/ PVOID Context); 06572 06573 NTOSAPI 06574 VOID 06575 DDKAPI 06576 IoInvalidateDeviceRelations( 06577 /*IN*/ PDEVICE_OBJECT DeviceObject, 06578 /*IN*/ DEVICE_RELATION_TYPE Type); 06579 06580 NTOSAPI 06581 VOID 06582 DDKAPI 06583 IoInvalidateDeviceState( 06584 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject); 06585 06586 NTOSAPI 06587 BOOLEAN 06588 DDKAPI 06589 IoIs32bitProcess( 06590 /*IN*/ PIRP Irp /*OPTIONAL*/); 06591 06592 /* 06593 * BOOLEAN 06594 * IoIsErrorUserInduced( 06595 * IN NTSTATUS Status); 06596 */ 06597 #define IoIsErrorUserInduced(Status) \ 06598 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \ 06599 ((Status) == STATUS_IO_TIMEOUT) || \ 06600 ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \ 06601 ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \ 06602 ((Status) == STATUS_VERIFY_REQUIRED) || \ 06603 ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \ 06604 ((Status) == STATUS_WRONG_VOLUME))) 06605 06606 NTOSAPI 06607 BOOLEAN 06608 DDKAPI 06609 IoIsWdmVersionAvailable( 06610 /*IN*/ UCHAR MajorVersion, 06611 /*IN*/ UCHAR MinorVersion); 06612 06613 NTOSAPI 06614 PIRP 06615 DDKAPI 06616 IoMakeAssociatedIrp( 06617 /*IN*/ PIRP Irp, 06618 /*IN*/ CCHAR StackSize); 06619 06620 /* 06621 * VOID 06622 * IoMarkIrpPending( 06623 * IN OUT PIRP Irp) 06624 */ 06625 #define IoMarkIrpPending(_Irp) \ 06626 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED) 06627 06628 NTOSAPI 06629 NTSTATUS 06630 DDKAPI 06631 IoOpenDeviceInterfaceRegistryKey( 06632 /*IN*/ PUNICODE_STRING SymbolicLinkName, 06633 /*IN*/ ACCESS_MASK DesiredAccess, 06634 /*OUT*/ PHANDLE DeviceInterfaceKey); 06635 06636 NTOSAPI 06637 NTSTATUS 06638 DDKAPI 06639 IoOpenDeviceRegistryKey( 06640 /*IN*/ PDEVICE_OBJECT DeviceObject, 06641 /*IN*/ ULONG DevInstKeyType, 06642 /*IN*/ ACCESS_MASK DesiredAccess, 06643 /*OUT*/ PHANDLE DevInstRegKey); 06644 06645 NTOSAPI 06646 NTSTATUS 06647 DDKAPI 06648 IoQueryDeviceDescription( 06649 /*IN*/ PINTERFACE_TYPE BusType /*OPTIONAL*/, 06650 /*IN*/ PULONG BusNumber /*OPTIONAL*/, 06651 /*IN*/ PCONFIGURATION_TYPE ControllerType /*OPTIONAL*/, 06652 /*IN*/ PULONG ControllerNumber /*OPTIONAL*/, 06653 /*IN*/ PCONFIGURATION_TYPE PeripheralType /*OPTIONAL*/, 06654 /*IN*/ PULONG PeripheralNumber /*OPTIONAL*/, 06655 /*IN*/ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, 06656 /*IN*/ PVOID Context); 06657 06658 NTOSAPI 06659 VOID 06660 DDKAPI 06661 IoQueueWorkItem( 06662 /*IN*/ PIO_WORKITEM pIOWorkItem, 06663 /*IN*/ PIO_WORKITEM_ROUTINE Routine, 06664 /*IN*/ WORK_QUEUE_TYPE QueueType, 06665 /*IN*/ PVOID Context); 06666 06667 NTOSAPI 06668 VOID 06669 DDKAPI 06670 IoRaiseHardError( 06671 /*IN*/ PIRP Irp, 06672 /*IN*/ PVPB Vpb /*OPTIONAL*/, 06673 /*IN*/ PDEVICE_OBJECT RealDeviceObject); 06674 06675 NTOSAPI 06676 BOOLEAN 06677 DDKAPI 06678 IoRaiseInformationalHardError( 06679 /*IN*/ NTSTATUS ErrorStatus, 06680 /*IN*/ PUNICODE_STRING String /*OPTIONAL*/, 06681 /*IN*/ PKTHREAD Thread /*OPTIONAL*/); 06682 06683 NTOSAPI 06684 NTSTATUS 06685 DDKAPI 06686 IoReadDiskSignature( 06687 /*IN*/ PDEVICE_OBJECT DeviceObject, 06688 /*IN*/ ULONG BytesPerSector, 06689 /*OUT*/ PDISK_SIGNATURE Signature); 06690 06691 NTOSAPI 06692 NTSTATUS 06693 DDKAPI 06694 IoReadPartitionTableEx( 06695 /*IN*/ PDEVICE_OBJECT DeviceObject, 06696 /*IN*/ struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); 06697 06698 NTOSAPI 06699 VOID 06700 DDKAPI 06701 IoRegisterBootDriverReinitialization( 06702 /*IN*/ PDRIVER_OBJECT DriverObject, 06703 /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine, 06704 /*IN*/ PVOID Context); 06705 06706 NTOSAPI 06707 VOID 06708 DDKAPI 06709 IoRegisterBootDriverReinitialization( 06710 /*IN*/ PDRIVER_OBJECT DriverObject, 06711 /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine, 06712 /*IN*/ PVOID Context); 06713 06714 NTOSAPI 06715 NTSTATUS 06716 DDKAPI 06717 IoRegisterDeviceInterface( 06718 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject, 06719 /*IN*/ CONST GUID *InterfaceClassGuid, 06720 /*IN*/ PUNICODE_STRING ReferenceString /*OPTIONAL*/, 06721 /*OUT*/ PUNICODE_STRING SymbolicLinkName); 06722 06723 NTOSAPI 06724 VOID 06725 DDKAPI 06726 IoRegisterDriverReinitialization( 06727 /*IN*/ PDRIVER_OBJECT DriverObject, 06728 /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine, 06729 /*IN*/ PVOID Context); 06730 06731 NTOSAPI 06732 NTSTATUS 06733 DDKAPI 06734 IoRegisterPlugPlayNotification( 06735 /*IN*/ IO_NOTIFICATION_EVENT_CATEGORY EventCategory, 06736 /*IN*/ ULONG EventCategoryFlags, 06737 /*IN*/ PVOID EventCategoryData /*OPTIONAL*/, 06738 /*IN*/ PDRIVER_OBJECT DriverObject, 06739 /*IN*/ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, 06740 /*IN*/ PVOID Context, 06741 /*OUT*/ PVOID *NotificationEntry); 06742 06743 NTOSAPI 06744 NTSTATUS 06745 DDKAPI 06746 IoRegisterShutdownNotification( 06747 /*IN*/ PDEVICE_OBJECT DeviceObject); 06748 06749 NTOSAPI 06750 VOID 06751 DDKAPI 06752 IoReleaseCancelSpinLock( 06753 /*IN*/ KIRQL Irql); 06754 06755 NTOSAPI 06756 VOID 06757 DDKAPI 06758 IoReleaseRemoveLockAndWaitEx( 06759 /*IN*/ PIO_REMOVE_LOCK RemoveLock, 06760 /*IN*/ PVOID Tag, 06761 /*IN*/ ULONG RemlockSize); 06762 06763 /* 06764 * VOID 06765 * IoReleaseRemoveLockAndWait( 06766 * IN PIO_REMOVE_LOCK RemoveLock, 06767 * IN PVOID Tag) 06768 */ 06769 #define IoReleaseRemoveLockAndWait(_RemoveLock, \ 06770 _Tag) \ 06771 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) 06772 06773 NTOSAPI 06774 VOID 06775 DDKAPI 06776 IoReleaseRemoveLockEx( 06777 /*IN*/ PIO_REMOVE_LOCK RemoveLock, 06778 /*IN*/ PVOID Tag, 06779 /*IN*/ ULONG RemlockSize); 06780 06781 /* 06782 * VOID 06783 * IoReleaseRemoveLock( 06784 * IN PIO_REMOVE_LOCK RemoveLock, 06785 * IN PVOID Tag) 06786 */ 06787 #define IoReleaseRemoveLock(_RemoveLock, \ 06788 _Tag) \ 06789 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) 06790 06791 NTOSAPI 06792 VOID 06793 DDKAPI 06794 IoRemoveShareAccess( 06795 /*IN*/ PFILE_OBJECT FileObject, 06796 /*IN OUT*/ PSHARE_ACCESS ShareAccess); 06797 06798 NTOSAPI 06799 NTSTATUS 06800 DDKAPI 06801 IoReportDetectedDevice( 06802 /*IN*/ PDRIVER_OBJECT DriverObject, 06803 /*IN*/ INTERFACE_TYPE LegacyBusType, 06804 /*IN*/ ULONG BusNumber, 06805 /*IN*/ ULONG SlotNumber, 06806 /*IN*/ PCM_RESOURCE_LIST ResourceList, 06807 /*IN*/ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements /*OPTIONAL*/, 06808 /*IN*/ BOOLEAN ResourceAssigned, 06809 /*IN OUT*/ PDEVICE_OBJECT *DeviceObject); 06810 06811 NTOSAPI 06812 NTSTATUS 06813 DDKAPI 06814 IoReportResourceForDetection( 06815 /*IN*/ PDRIVER_OBJECT DriverObject, 06816 /*IN*/ PCM_RESOURCE_LIST DriverList /*OPTIONAL*/, 06817 /*IN*/ ULONG DriverListSize /*OPTIONAL*/, 06818 /*IN*/ PDEVICE_OBJECT DeviceObject /*OPTIONAL*/, 06819 /*IN*/ PCM_RESOURCE_LIST DeviceList /*OPTIONAL*/, 06820 /*IN*/ ULONG DeviceListSize /*OPTIONAL*/, 06821 /*OUT*/ PBOOLEAN ConflictDetected); 06822 06823 NTOSAPI 06824 NTSTATUS 06825 DDKAPI 06826 IoReportResourceUsage( 06827 /*IN*/ PUNICODE_STRING DriverClassName /*OPTIONAL*/, 06828 /*IN*/ PDRIVER_OBJECT DriverObject, 06829 /*IN*/ PCM_RESOURCE_LIST DriverList /*OPTIONAL*/, 06830 /*IN*/ ULONG DriverListSize /*OPTIONAL*/, 06831 /*IN*/ PDEVICE_OBJECT DeviceObject, 06832 /*IN*/ PCM_RESOURCE_LIST DeviceList /*OPTIONAL*/, 06833 /*IN*/ ULONG DeviceListSize /*OPTIONAL*/, 06834 /*IN*/ BOOLEAN OverrideConflict, 06835 /*OUT*/ PBOOLEAN ConflictDetected); 06836 06837 NTOSAPI 06838 NTSTATUS 06839 DDKAPI 06840 IoReportTargetDeviceChange( 06841 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject, 06842 /*IN*/ PVOID NotificationStructure); 06843 06844 NTOSAPI 06845 NTSTATUS 06846 DDKAPI 06847 IoReportTargetDeviceChangeAsynchronous( 06848 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject, 06849 /*IN*/ PVOID NotificationStructure, 06850 /*IN*/ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback /*OPTIONAL*/, 06851 /*IN*/ PVOID Context /*OPTIONAL*/); 06852 06853 NTOSAPI 06854 VOID 06855 DDKAPI 06856 IoRequestDeviceEject( 06857 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject); 06858 06859 /* 06860 * VOID 06861 * IoRequestDpc( 06862 * IN PDEVICE_OBJECT DeviceObject, 06863 * IN PIRP Irp, 06864 * IN PVOID Context); 06865 */ 06866 #define IoRequestDpc(DeviceObject, Irp, Context)( \ 06867 KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context))) 06868 06869 NTOSAPI 06870 VOID 06871 DDKAPI 06872 IoReuseIrp( 06873 /*IN OUT*/ PIRP Irp, 06874 /*IN*/ NTSTATUS Status); 06875 06876 /* 06877 * PDRIVER_CANCEL 06878 * IoSetCancelRoutine( 06879 * IN PIRP Irp, 06880 * IN PDRIVER_CANCEL CancelRoutine) 06881 */ 06882 #define IoSetCancelRoutine(_Irp, \ 06883 _CancelRoutine) \ 06884 ((PDRIVER_CANCEL) InterlockedExchangePointer( \ 06885 (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine))) 06886 06887 /* 06888 * VOID 06889 * IoSetCompletionRoutine( 06890 * IN PIRP Irp, 06891 * IN PIO_COMPLETION_ROUTINE CompletionRoutine, 06892 * IN PVOID Context, 06893 * IN BOOLEAN InvokeOnSuccess, 06894 * IN BOOLEAN InvokeOnError, 06895 * IN BOOLEAN InvokeOnCancel) 06896 */ 06897 #define IoSetCompletionRoutine(_Irp, \ 06898 _CompletionRoutine, \ 06899 _Context, \ 06900 _InvokeOnSuccess, \ 06901 _InvokeOnError, \ 06902 _InvokeOnCancel) \ 06903 { \ 06904 PIO_STACK_LOCATION _IrpSp; \ 06905 ASSERT(_InvokeOnSuccess || _InvokeOnError || _InvokeOnCancel ? \ 06906 _CompletionRoutine != NULL : TRUE); \ 06907 _IrpSp = IoGetNextIrpStackLocation(_Irp); \ 06908 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \ 06909 _IrpSp->Context = (_Context); \ 06910 _IrpSp->Control = 0; \ 06911 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \ 06912 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \ 06913 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \ 06914 } 06915 06916 NTOSAPI 06917 VOID 06918 DDKAPI 06919 IoSetCompletionRoutineEx( 06920 /*IN*/ PDEVICE_OBJECT DeviceObject, 06921 /*IN*/ PIRP Irp, 06922 /*IN*/ PIO_COMPLETION_ROUTINE CompletionRoutine, 06923 /*IN*/ PVOID Context, 06924 /*IN*/ BOOLEAN InvokeOnSuccess, 06925 /*IN*/ BOOLEAN InvokeOnError, 06926 /*IN*/ BOOLEAN InvokeOnCancel); 06927 06928 NTOSAPI 06929 NTSTATUS 06930 DDKAPI 06931 IoSetDeviceInterfaceState( 06932 /*IN*/ PUNICODE_STRING SymbolicLinkName, 06933 /*IN*/ BOOLEAN Enable); 06934 06935 NTOSAPI 06936 VOID 06937 DDKAPI 06938 IoSetHardErrorOrVerifyDevice( 06939 /*IN*/ PIRP Irp, 06940 /*IN*/ PDEVICE_OBJECT DeviceObject); 06941 06942 /* 06943 * VOID 06944 * IoSetNextIrpStackLocation( 06945 * IN OUT PIRP Irp) 06946 */ 06947 #define IoSetNextIrpStackLocation(_Irp) \ 06948 { \ 06949 (_Irp)->CurrentLocation--; \ 06950 (_Irp)->Tail.Overlay.CurrentStackLocation--; \ 06951 } 06952 06953 NTOSAPI 06954 NTSTATUS 06955 DDKAPI 06956 IoSetPartitionInformationEx( 06957 /*IN*/ PDEVICE_OBJECT DeviceObject, 06958 /*IN*/ ULONG PartitionNumber, 06959 /*IN*/ struct _SET_PARTITION_INFORMATION_EX *PartitionInfo); 06960 06961 NTOSAPI 06962 VOID 06963 DDKAPI 06964 IoSetShareAccess( 06965 /*IN*/ ACCESS_MASK DesiredAccess, 06966 /*IN*/ ULONG DesiredShareAccess, 06967 /*IN OUT*/ PFILE_OBJECT FileObject, 06968 /*OUT*/ PSHARE_ACCESS ShareAccess); 06969 06970 NTOSAPI 06971 VOID 06972 DDKAPI 06973 IoSetStartIoAttributes( 06974 /*IN*/ PDEVICE_OBJECT DeviceObject, 06975 /*IN*/ BOOLEAN DeferredStartIo, 06976 /*IN*/ BOOLEAN NonCancelable); 06977 06978 NTOSAPI 06979 NTSTATUS 06980 DDKAPI 06981 IoSetSystemPartition( 06982 /*IN*/ PUNICODE_STRING VolumeNameString); 06983 06984 NTOSAPI 06985 BOOLEAN 06986 DDKAPI 06987 IoSetThreadHardErrorMode( 06988 /*IN*/ BOOLEAN EnableHardErrors); 06989 06990 /* 06991 * USHORT 06992 * IoSizeOfIrp( 06993 * IN CCHAR StackSize) 06994 */ 06995 #define IoSizeOfIrp(_StackSize) \ 06996 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION))))) 06997 06998 /* 06999 * VOID 07000 * IoSkipCurrentIrpStackLocation( 07001 * IN PIRP Irp) 07002 */ 07003 #define IoSkipCurrentIrpStackLocation(_Irp) \ 07004 { \ 07005 (_Irp)->CurrentLocation++; \ 07006 (_Irp)->Tail.Overlay.CurrentStackLocation++; \ 07007 } 07008 07009 NTOSAPI 07010 VOID 07011 DDKAPI 07012 IoStartNextPacket( 07013 /*IN*/ PDEVICE_OBJECT DeviceObject, 07014 /*IN*/ BOOLEAN Cancelable); 07015 07016 NTOSAPI 07017 VOID 07018 DDKAPI 07019 IoStartNextPacketByKey( 07020 /*IN*/ PDEVICE_OBJECT DeviceObject, 07021 /*IN*/ BOOLEAN Cancelable, 07022 /*IN*/ ULONG Key); 07023 07024 NTOSAPI 07025 VOID 07026 DDKAPI 07027 IoStartPacket( 07028 /*IN*/ PDEVICE_OBJECT DeviceObject, 07029 /*IN*/ PIRP Irp, 07030 /*IN*/ PULONG Key /*OPTIONAL*/, 07031 /*IN*/ PDRIVER_CANCEL CancelFunction /*OPTIONAL*/); 07032 07033 NTOSAPI 07034 VOID 07035 DDKAPI 07036 IoStartTimer( 07037 /*IN*/ PDEVICE_OBJECT DeviceObject); 07038 07039 NTOSAPI 07040 VOID 07041 DDKAPI 07042 IoStopTimer( 07043 /*IN*/ PDEVICE_OBJECT DeviceObject); 07044 07045 NTOSAPI 07046 NTSTATUS 07047 DDKAPI 07048 IoUnregisterPlugPlayNotification( 07049 /*IN*/ PVOID NotificationEntry); 07050 07051 NTOSAPI 07052 VOID 07053 DDKAPI 07054 IoUnregisterShutdownNotification( 07055 /*IN*/ PDEVICE_OBJECT DeviceObject); 07056 07057 NTOSAPI 07058 VOID 07059 DDKAPI 07060 IoUpdateShareAccess( 07061 /*IN*/ PFILE_OBJECT FileObject, 07062 /*IN OUT*/ PSHARE_ACCESS ShareAccess); 07063 07064 NTOSAPI 07065 NTSTATUS 07066 DDKAPI 07067 IoVerifyPartitionTable( 07068 /*IN*/ PDEVICE_OBJECT DeviceObject, 07069 /*IN*/ BOOLEAN FixErrors); 07070 07071 NTOSAPI 07072 NTSTATUS 07073 DDKAPI 07074 IoVolumeDeviceToDosName( 07075 /*IN*/ PVOID VolumeDeviceObject, 07076 /*OUT*/ PUNICODE_STRING DosName); 07077 07078 NTOSAPI 07079 NTSTATUS 07080 DDKAPI 07081 IoWMIAllocateInstanceIds( 07082 /*IN*/ GUID *Guid, 07083 /*IN*/ ULONG InstanceCount, 07084 /*OUT*/ ULONG *FirstInstanceId); 07085 07086 NTOSAPI 07087 ULONG 07088 DDKAPI 07089 IoWMIDeviceObjectToProviderId( 07090 /*IN*/ PDEVICE_OBJECT DeviceObject); 07091 07092 NTOSAPI 07093 NTSTATUS 07094 DDKAPI 07095 IoWMIDeviceObjectToInstanceName( 07096 /*IN*/ PVOID DataBlockObject, 07097 /*IN*/ PDEVICE_OBJECT DeviceObject, 07098 /*OUT*/ PUNICODE_STRING InstanceName); 07099 07100 NTOSAPI 07101 NTSTATUS 07102 DDKAPI 07103 IoWMIExecuteMethod( 07104 /*IN*/ PVOID DataBlockObject, 07105 /*IN*/ PUNICODE_STRING InstanceName, 07106 /*IN*/ ULONG MethodId, 07107 /*IN*/ ULONG InBufferSize, 07108 /*IN OUT*/ PULONG OutBufferSize, 07109 /*IN OUT*/ PUCHAR InOutBuffer); 07110 07111 NTOSAPI 07112 NTSTATUS 07113 DDKAPI 07114 IoWMIHandleToInstanceName( 07115 /*IN*/ PVOID DataBlockObject, 07116 /*IN*/ HANDLE FileHandle, 07117 /*OUT*/ PUNICODE_STRING InstanceName); 07118 07119 NTOSAPI 07120 NTSTATUS 07121 DDKAPI 07122 IoWMIOpenBlock( 07123 /*IN*/ GUID *DataBlockGuid, 07124 /*IN*/ ULONG DesiredAccess, 07125 /*OUT*/ PVOID *DataBlockObject); 07126 07127 NTOSAPI 07128 NTSTATUS 07129 DDKAPI 07130 IoWMIQueryAllData( 07131 /*IN*/ PVOID DataBlockObject, 07132 /*IN OUT*/ ULONG *InOutBufferSize, 07133 /*OUT*/ PVOID OutBuffer); 07134 07135 NTOSAPI 07136 NTSTATUS 07137 DDKAPI 07138 IoWMIQueryAllDataMultiple( 07139 /*IN*/ PVOID *DataBlockObjectList, 07140 /*IN*/ ULONG ObjectCount, 07141 /*IN OUT*/ ULONG *InOutBufferSize, 07142 /*OUT*/ PVOID OutBuffer); 07143 07144 NTOSAPI 07145 NTSTATUS 07146 DDKAPI 07147 IoWMIQuerySingleInstance( 07148 /*IN*/ PVOID DataBlockObject, 07149 /*IN*/ PUNICODE_STRING InstanceName, 07150 /*IN OUT*/ ULONG *InOutBufferSize, 07151 /*OUT*/ PVOID OutBuffer); 07152 07153 NTOSAPI 07154 NTSTATUS 07155 DDKAPI 07156 IoWMIQuerySingleInstanceMultiple( 07157 /*IN*/ PVOID *DataBlockObjectList, 07158 /*IN*/ PUNICODE_STRING InstanceNames, 07159 /*IN*/ ULONG ObjectCount, 07160 /*IN OUT*/ ULONG *InOutBufferSize, 07161 /*OUT*/ PVOID OutBuffer); 07162 07163 NTOSAPI 07164 NTSTATUS 07165 DDKAPI 07166 IoWMIRegistrationControl( 07167 /*IN*/ PDEVICE_OBJECT DeviceObject, 07168 /*IN*/ ULONG Action); 07169 07170 NTOSAPI 07171 NTSTATUS 07172 DDKAPI 07173 IoWMISetNotificationCallback( 07174 /*IN*/ PVOID Object, 07175 /*IN*/ WMI_NOTIFICATION_CALLBACK Callback, 07176 /*IN*/ PVOID Context); 07177 07178 NTOSAPI 07179 NTSTATUS 07180 DDKAPI 07181 IoWMISetSingleInstance( 07182 /*IN*/ PVOID DataBlockObject, 07183 /*IN*/ PUNICODE_STRING InstanceName, 07184 /*IN*/ ULONG Version, 07185 /*IN*/ ULONG ValueBufferSize, 07186 /*IN*/ PVOID ValueBuffer); 07187 07188 NTOSAPI 07189 NTSTATUS 07190 DDKAPI 07191 IoWMISetSingleItem( 07192 /*IN*/ PVOID DataBlockObject, 07193 /*IN*/ PUNICODE_STRING InstanceName, 07194 /*IN*/ ULONG DataItemId, 07195 /*IN*/ ULONG Version, 07196 /*IN*/ ULONG ValueBufferSize, 07197 /*IN*/ PVOID ValueBuffer); 07198 07199 NTOSAPI 07200 NTSTATUS 07201 DDKAPI 07202 IoWMISuggestInstanceName( 07203 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject /*OPTIONAL*/, 07204 /*IN*/ PUNICODE_STRING SymbolicLinkName /*OPTIONAL*/, 07205 /*IN*/ BOOLEAN CombineNames, 07206 /*OUT*/ PUNICODE_STRING SuggestedInstanceName); 07207 07208 NTOSAPI 07209 NTSTATUS 07210 DDKAPI 07211 IoWMIWriteEvent( 07212 /*IN*/ PVOID WnodeEventItem); 07213 07214 NTOSAPI 07215 VOID 07216 DDKAPI 07217 IoWriteErrorLogEntry( 07218 /*IN*/ PVOID ElEntry); 07219 07220 NTOSAPI 07221 NTSTATUS 07222 DDKAPI 07223 IoWritePartitionTableEx( 07224 /*IN*/ PDEVICE_OBJECT DeviceObject, 07225 /*IN*/ struct _DRIVE_LAYOUT_INFORMATION_EX *PartitionBuffer); 07226 07227 07228 07229 /** Kernel routines **/ 07230 07231 NTOSAPI 07232 VOID 07233 DDKFASTAPI 07234 KeAcquireInStackQueuedSpinLock( 07235 /*IN*/ PKSPIN_LOCK SpinLock, 07236 /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle); 07237 07238 NTOSAPI 07239 VOID 07240 DDKFASTAPI 07241 KeAcquireInStackQueuedSpinLockAtDpcLevel( 07242 /*IN*/ PKSPIN_LOCK SpinLock, 07243 /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle); 07244 07245 NTOSAPI 07246 KIRQL 07247 DDKAPI 07248 KeAcquireInterruptSpinLock( 07249 /*IN*/ PKINTERRUPT Interrupt); 07250 07251 NTOSAPI 07252 VOID 07253 DDKAPI 07254 KeAcquireSpinLock( 07255 /*IN*/ PKSPIN_LOCK SpinLock, 07256 /*OUT*/ PKIRQL OldIrql); 07257 07258 /* System Service Dispatch Table */ 07259 typedef PVOID (NTAPI * SSDT)(VOID); 07260 typedef SSDT * PSSDT; 07261 07262 /* System Service Parameters Table */ 07263 typedef UCHAR SSPT, * PSSPT; 07264 07265 typedef struct _SSDT_ENTRY { 07266 PSSDT SSDT; 07267 PULONG ServiceCounterTable; 07268 ULONG NumberOfServices; 07269 PSSPT SSPT; 07270 } SSDT_ENTRY, *PSSDT_ENTRY; 07271 07272 NTOSAPI 07273 BOOLEAN 07274 DDKAPI 07275 KeAddSystemServiceTable( 07276 /*IN*/ PSSDT SSDT, 07277 /*IN*/ PULONG ServiceCounterTable, 07278 /*IN*/ ULONG NumberOfServices, 07279 /*IN*/ PSSPT SSPT, 07280 /*IN*/ ULONG TableIndex); 07281 07282 NTOSAPI 07283 BOOLEAN 07284 DDKAPI 07285 KeAreApcsDisabled( 07286 VOID); 07287 07288 NTOSAPI 07289 VOID 07290 DDKAPI 07291 KeAttachProcess( 07292 /*IN*/ PEPROCESS Process); 07293 07294 NTOSAPI 07295 VOID 07296 DDKAPI 07297 KeBugCheck( 07298 /*IN*/ ULONG BugCheckCode); 07299 07300 NTOSAPI 07301 VOID 07302 DDKAPI 07303 KeBugCheckEx( 07304 /*IN*/ ULONG BugCheckCode, 07305 /*IN*/ ULONG_PTR BugCheckParameter1, 07306 /*IN*/ ULONG_PTR BugCheckParameter2, 07307 /*IN*/ ULONG_PTR BugCheckParameter3, 07308 /*IN*/ ULONG_PTR BugCheckParameter4); 07309 07310 NTOSAPI 07311 BOOLEAN 07312 DDKAPI 07313 KeCancelTimer( 07314 /*IN*/ PKTIMER Timer); 07315 07316 NTOSAPI 07317 VOID 07318 DDKAPI 07319 KeClearEvent( 07320 /*IN*/ PRKEVENT Event); 07321 07322 NTOSAPI 07323 NTSTATUS 07324 DDKAPI 07325 KeDelayExecutionThread( 07326 /*IN*/ KPROCESSOR_MODE WaitMode, 07327 /*IN*/ BOOLEAN Alertable, 07328 /*IN*/ PLARGE_INTEGER Interval); 07329 07330 NTOSAPI 07331 BOOLEAN 07332 DDKAPI 07333 KeDeregisterBugCheckCallback( 07334 /*IN*/ PKBUGCHECK_CALLBACK_RECORD CallbackRecord); 07335 07336 NTOSAPI 07337 VOID 07338 DDKAPI 07339 KeDetachProcess( 07340 VOID); 07341 07342 NTOSAPI 07343 VOID 07344 DDKAPI 07345 KeEnterCriticalRegion( 07346 VOID); 07347 07348 /* 07349 * VOID 07350 * KeFlushIoBuffers( 07351 * IN PMDL Mdl, 07352 * IN BOOLEAN ReadOperation, 07353 * IN BOOLEAN DmaOperation) 07354 */ 07355 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) 07356 07357 NTOSAPI 07358 VOID 07359 DDKAPI 07360 KeFlushQueuedDpcs(VOID); 07361 07362 NTOSAPI 07363 PRKTHREAD 07364 DDKAPI 07365 KeGetCurrentThread( 07366 VOID); 07367 07368 NTOSAPI 07369 KPROCESSOR_MODE 07370 DDKAPI 07371 KeGetPreviousMode( 07372 VOID); 07373 07374 NTOSAPI 07375 ULONG 07376 DDKAPI 07377 KeGetRecommendedSharedDataAlignment( 07378 VOID); 07379 07380 NTOSAPI 07381 VOID 07382 DDKAPI 07383 KeInitializeApc( 07384 /*IN*/ PKAPC Apc, 07385 /*IN*/ PKTHREAD Thread, 07386 /*IN*/ UCHAR StateIndex, 07387 /*IN*/ PKKERNEL_ROUTINE KernelRoutine, 07388 /*IN*/ PKRUNDOWN_ROUTINE RundownRoutine, 07389 /*IN*/ PKNORMAL_ROUTINE NormalRoutine, 07390 /*IN*/ UCHAR Mode, 07391 /*IN*/ PVOID Context); 07392 07393 NTOSAPI 07394 VOID 07395 DDKAPI 07396 KeInitializeDeviceQueue( 07397 /*IN*/ PKDEVICE_QUEUE DeviceQueue); 07398 07399 NTOSAPI 07400 VOID 07401 DDKAPI 07402 KeInitializeMutex( 07403 /*IN*/ PRKMUTEX Mutex, 07404 /*IN*/ ULONG Level); 07405 07406 NTOSAPI 07407 VOID 07408 DDKAPI 07409 KeInitializeSemaphore( 07410 /*IN*/ PRKSEMAPHORE Semaphore, 07411 /*IN*/ LONG Count, 07412 /*IN*/ LONG Limit); 07413 07414 NTOSAPI 07415 VOID 07416 DDKAPI 07417 KeInitializeSpinLock( 07418 /*IN*/ PKSPIN_LOCK SpinLock); 07419 07420 NTOSAPI 07421 VOID 07422 DDKAPI 07423 KeInitializeTimer( 07424 /*IN*/ PKTIMER Timer); 07425 07426 NTOSAPI 07427 VOID 07428 DDKAPI 07429 KeInitializeTimerEx( 07430 /*IN*/ PKTIMER Timer, 07431 /*IN*/ TIMER_TYPE Type); 07432 07433 NTOSAPI 07434 BOOLEAN 07435 DDKAPI 07436 KeInsertByKeyDeviceQueue( 07437 /*IN*/ PKDEVICE_QUEUE DeviceQueue, 07438 /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, 07439 /*IN*/ ULONG SortKey); 07440 07441 NTOSAPI 07442 BOOLEAN 07443 DDKAPI 07444 KeInsertDeviceQueue( 07445 /*IN*/ PKDEVICE_QUEUE DeviceQueue, 07446 /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); 07447 07448 NTOSAPI 07449 BOOLEAN 07450 DDKAPI 07451 KeInsertQueueDpc( 07452 /*IN*/ PRKDPC Dpc, 07453 /*IN*/ PVOID SystemArgument1, 07454 /*IN*/ PVOID SystemArgument2); 07455 07456 NTOSAPI 07457 VOID 07458 DDKAPI 07459 KeLeaveCriticalRegion( 07460 VOID); 07461 07462 #define KeMemoryBarrier() asm("mfence;") 07463 07464 NTOSAPI 07465 NTSTATUS 07466 DDKAPI 07467 KePulseEvent( 07468 /*IN*/ PRKEVENT Event, 07469 /*IN*/ KPRIORITY Increment, 07470 /*IN*/ BOOLEAN Wait); 07471 07472 NTOSAPI 07473 ULONGLONG 07474 DDKAPI 07475 KeQueryInterruptTime( 07476 VOID); 07477 07478 NTOSAPI 07479 LARGE_INTEGER 07480 DDKAPI 07481 KeQueryPerformanceCounter( 07482 /*OUT*/ PLARGE_INTEGER PerformanceFrequency /*OPTIONAL*/); 07483 07484 NTOSAPI 07485 KPRIORITY 07486 DDKAPI 07487 KeQueryPriorityThread( 07488 /*IN*/ PRKTHREAD Thread); 07489 07490 NTOSAPI 07491 VOID 07492 DDKAPI 07493 KeQuerySystemTime( 07494 /*OUT*/ PLARGE_INTEGER CurrentTime); 07495 07496 NTOSAPI 07497 VOID 07498 DDKAPI 07499 KeQueryTickCount( 07500 /*OUT*/ PLARGE_INTEGER TickCount); 07501 07502 NTOSAPI 07503 ULONG 07504 DDKAPI 07505 KeQueryTimeIncrement( 07506 VOID); 07507 07508 NTOSAPI 07509 LONG 07510 DDKAPI 07511 KeReadStateEvent( 07512 /*IN*/ PRKEVENT Event); 07513 07514 NTOSAPI 07515 LONG 07516 DDKAPI 07517 KeReadStateMutex( 07518 /*IN*/ PRKMUTEX Mutex); 07519 07520 NTOSAPI 07521 LONG 07522 DDKAPI 07523 KeReadStateSemaphore( 07524 /*IN*/ PRKSEMAPHORE Semaphore); 07525 07526 NTOSAPI 07527 BOOLEAN 07528 DDKAPI 07529 KeReadStateTimer( 07530 /*IN*/ PKTIMER Timer); 07531 07532 NTOSAPI 07533 BOOLEAN 07534 DDKAPI 07535 KeRegisterBugCheckCallback( 07536 /*IN*/ PKBUGCHECK_CALLBACK_RECORD CallbackRecord, 07537 /*IN*/ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, 07538 /*IN*/ PVOID Buffer, 07539 /*IN*/ ULONG Length, 07540 /*IN*/ PUCHAR Component); 07541 07542 NTOSAPI 07543 VOID 07544 DDKFASTAPI 07545 KeReleaseInStackQueuedSpinLock( 07546 /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle); 07547 07548 NTOSAPI 07549 VOID 07550 DDKFASTAPI 07551 KeReleaseInStackQueuedSpinLockFromDpcLevel( 07552 /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle); 07553 07554 NTOSAPI 07555 VOID 07556 DDKAPI 07557 KeReleaseInterruptSpinLock( 07558 /*IN*/ PKINTERRUPT Interrupt, 07559 /*IN*/ KIRQL OldIrql); 07560 07561 NTOSAPI 07562 LONG 07563 DDKAPI 07564 KeReleaseMutex( 07565 /*IN*/ PRKMUTEX Mutex, 07566 /*IN*/ BOOLEAN Wait); 07567 07568 NTOSAPI 07569 LONG 07570 DDKAPI 07571 KeReleaseSemaphore( 07572 /*IN*/ PRKSEMAPHORE Semaphore, 07573 /*IN*/ KPRIORITY Increment, 07574 /*IN*/ LONG Adjustment, 07575 /*IN*/ BOOLEAN Wait); 07576 07577 NTOSAPI 07578 VOID 07579 DDKAPI 07580 KeReleaseSpinLock( 07581 /*IN*/ PKSPIN_LOCK SpinLock, 07582 /*IN*/ KIRQL NewIrql); 07583 07584 NTOSAPI 07585 PKDEVICE_QUEUE_ENTRY 07586 DDKAPI 07587 KeRemoveByKeyDeviceQueue( 07588 /*IN*/ PKDEVICE_QUEUE DeviceQueue, 07589 /*IN*/ ULONG SortKey); 07590 07591 NTOSAPI 07592 PKDEVICE_QUEUE_ENTRY 07593 DDKAPI 07594 KeRemoveDeviceQueue( 07595 /*IN*/ PKDEVICE_QUEUE DeviceQueue); 07596 07597 NTOSAPI 07598 BOOLEAN 07599 DDKAPI 07600 KeRemoveEntryDeviceQueue( 07601 /*IN*/ PKDEVICE_QUEUE DeviceQueue, 07602 /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); 07603 07604 NTOSAPI 07605 BOOLEAN 07606 DDKAPI 07607 KeRemoveQueueDpc( 07608 /*IN*/ PRKDPC Dpc); 07609 07610 NTOSAPI 07611 LONG 07612 DDKAPI 07613 KeResetEvent( 07614 /*IN*/ PRKEVENT Event); 07615 07616 NTOSAPI 07617 NTSTATUS 07618 DDKAPI 07619 KeRestoreFloatingPointState( 07620 /*IN*/ PKFLOATING_SAVE FloatSave); 07621 07622 NTOSAPI 07623 NTSTATUS 07624 DDKAPI 07625 KeSaveFloatingPointState( 07626 /*OUT*/ PKFLOATING_SAVE FloatSave); 07627 07628 NTOSAPI 07629 LONG 07630 DDKAPI 07631 KeSetBasePriorityThread( 07632 /*IN*/ PRKTHREAD Thread, 07633 /*IN*/ LONG Increment); 07634 07635 NTOSAPI 07636 LONG 07637 DDKAPI 07638 KeSetEvent( 07639 /*IN*/ PRKEVENT Event, 07640 /*IN*/ KPRIORITY Increment, 07641 /*IN*/ BOOLEAN Wait); 07642 07643 NTOSAPI 07644 VOID 07645 DDKAPI 07646 KeSetImportanceDpc( 07647 /*IN*/ PRKDPC Dpc, 07648 /*IN*/ KDPC_IMPORTANCE Importance); 07649 07650 NTOSAPI 07651 KPRIORITY 07652 DDKAPI 07653 KeSetPriorityThread( 07654 /*IN*/ PKTHREAD Thread, 07655 /*IN*/ KPRIORITY Priority); 07656 07657 NTOSAPI 07658 VOID 07659 DDKAPI 07660 KeSetTargetProcessorDpc( 07661 /*IN*/ PRKDPC Dpc, 07662 /*IN*/ CCHAR Number); 07663 07664 NTOSAPI 07665 BOOLEAN 07666 DDKAPI 07667 KeSetTimer( 07668 /*IN*/ PKTIMER Timer, 07669 /*IN*/ LARGE_INTEGER DueTime, 07670 /*IN*/ PKDPC Dpc /*OPTIONAL*/); 07671 07672 NTOSAPI 07673 BOOLEAN 07674 DDKAPI 07675 KeSetTimerEx( 07676 /*IN*/ PKTIMER Timer, 07677 /*IN*/ LARGE_INTEGER DueTime, 07678 /*IN*/ LONG Period /*OPTIONAL*/, 07679 /*IN*/ PKDPC Dpc /*OPTIONAL*/); 07680 07681 NTOSAPI 07682 VOID 07683 DDKFASTAPI 07684 KeSetTimeUpdateNotifyRoutine( 07685 /*IN*/ PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine); 07686 07687 NTOSAPI 07688 VOID 07689 DDKAPI 07690 KeStallExecutionProcessor( 07691 /*IN*/ ULONG MicroSeconds); 07692 07693 NTOSAPI 07694 BOOLEAN 07695 DDKAPI 07696 KeSynchronizeExecution( 07697 /*IN*/ PKINTERRUPT Interrupt, 07698 /*IN*/ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, 07699 /*IN*/ PVOID SynchronizeContext); 07700 07701 NTOSAPI 07702 NTSTATUS 07703 DDKAPI 07704 KeWaitForMultipleObjects( 07705 /*IN*/ ULONG Count, 07706 /*IN*/ PVOID Object[], 07707 /*IN*/ WAIT_TYPE WaitType, 07708 /*IN*/ KWAIT_REASON WaitReason, 07709 /*IN*/ KPROCESSOR_MODE WaitMode, 07710 /*IN*/ BOOLEAN Alertable, 07711 /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL */, 07712 /*IN*/ PKWAIT_BLOCK WaitBlockArray /*OPTIONAL*/); 07713 07714 NTOSAPI 07715 NTSTATUS 07716 DDKAPI 07717 KeWaitForMutexObject( 07718 /*IN*/ PRKMUTEX Mutex, 07719 /*IN*/ KWAIT_REASON WaitReason, 07720 /*IN*/ KPROCESSOR_MODE WaitMode, 07721 /*IN*/ BOOLEAN Alertable, 07722 /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/); 07723 07724 NTOSAPI 07725 NTSTATUS 07726 DDKAPI 07727 KeWaitForSingleObject( 07728 /*IN*/ PVOID Object, 07729 /*IN*/ KWAIT_REASON WaitReason, 07730 /*IN*/ KPROCESSOR_MODE WaitMode, 07731 /*IN*/ BOOLEAN Alertable, 07732 /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/); 07733 07734 NTOSAPI 07735 VOID 07736 DDKAPI 07737 KeRaiseIrql( 07738 /*IN*/ KIRQL new_irql, 07739 /*OUT*/ PKIRQL old_irql); 07740 07741 NTOSAPI 07742 VOID 07743 DDKAPI 07744 KeLowerIrql( 07745 /*IN*/ KIRQL irql); 07746 07747 NTOSAPI 07748 KIRQL 07749 DDKAPI 07750 KeRaiseIrqlToDpcLevel( 07751 VOID); 07752 07753 /** Memory manager routines **/ 07754 07755 NTOSAPI 07756 NTSTATUS 07757 DDKAPI 07758 MmAdvanceMdl( 07759 /*IN*/ PMDL Mdl, 07760 /*IN*/ ULONG NumberOfBytes); 07761 07762 NTOSAPI 07763 PVOID 07764 DDKAPI 07765 MmAllocateContiguousMemory( 07766 /*IN*/ ULONG NumberOfBytes, 07767 /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress); 07768 07769 NTOSAPI 07770 PVOID 07771 DDKAPI 07772 MmAllocateContiguousMemorySpecifyCache( 07773 /*IN*/ SIZE_T NumberOfBytes, 07774 /*IN*/ PHYSICAL_ADDRESS LowestAcceptableAddress, 07775 /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress, 07776 /*IN*/ PHYSICAL_ADDRESS BoundaryAddressMultiple /*OPTIONAL*/, 07777 /*IN*/ MEMORY_CACHING_TYPE CacheType); 07778 07779 NTOSAPI 07780 PVOID 07781 DDKAPI 07782 MmAllocateMappingAddress( 07783 /*IN*/ SIZE_T NumberOfBytes, 07784 /*IN*/ ULONG PoolTag); 07785 07786 NTOSAPI 07787 PVOID 07788 DDKAPI 07789 MmAllocateNonCachedMemory( 07790 /*IN*/ ULONG NumberOfBytes); 07791 07792 NTOSAPI 07793 PMDL 07794 DDKAPI 07795 MmAllocatePagesForMdl( 07796 /*IN*/ PHYSICAL_ADDRESS LowAddress, 07797 /*IN*/ PHYSICAL_ADDRESS HighAddress, 07798 /*IN*/ PHYSICAL_ADDRESS SkipBytes, 07799 /*IN*/ SIZE_T TotalBytes); 07800 07801 NTOSAPI 07802 VOID 07803 DDKAPI 07804 MmBuildMdlForNonPagedPool( 07805 /*IN OUT*/ PMDL MemoryDescriptorList); 07806 07807 NTOSAPI 07808 NTSTATUS 07809 DDKAPI 07810 MmCreateSection( 07811 /*OUT*/ PSECTION_OBJECT *SectionObject, 07812 /*IN*/ ACCESS_MASK DesiredAccess, 07813 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/, 07814 /*IN*/ PLARGE_INTEGER MaximumSize, 07815 /*IN*/ ULONG SectionPageProtection, 07816 /*IN*/ ULONG AllocationAttributes, 07817 /*IN*/ HANDLE FileHandle /*OPTIONAL*/, 07818 /*IN*/ PFILE_OBJECT File /*OPTIONAL*/); 07819 07820 typedef enum _MMFLUSH_TYPE { 07821 MmFlushForDelete, 07822 MmFlushForWrite 07823 } MMFLUSH_TYPE; 07824 07825 NTOSAPI 07826 BOOLEAN 07827 DDKAPI 07828 MmFlushImageSection( 07829 /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer, 07830 /*IN*/ MMFLUSH_TYPE FlushType); 07831 07832 NTOSAPI 07833 VOID 07834 DDKAPI 07835 MmFreeContiguousMemory( 07836 /*IN*/ PVOID BaseAddress); 07837 07838 NTOSAPI 07839 VOID 07840 DDKAPI 07841 MmFreeContiguousMemorySpecifyCache( 07842 /*IN*/ PVOID BaseAddress, 07843 /*IN*/ SIZE_T NumberOfBytes, 07844 /*IN*/ MEMORY_CACHING_TYPE CacheType); 07845 07846 NTOSAPI 07847 VOID 07848 DDKAPI 07849 MmFreeMappingAddress( 07850 /*IN*/ PVOID BaseAddress, 07851 /*IN*/ ULONG PoolTag); 07852 07853 NTOSAPI 07854 VOID 07855 DDKAPI 07856 MmFreeNonCachedMemory( 07857 /*IN*/ PVOID BaseAddress, 07858 /*IN*/ SIZE_T NumberOfBytes); 07859 07860 NTOSAPI 07861 VOID 07862 DDKAPI 07863 MmFreePagesFromMdl( 07864 /*IN*/ PMDL MemoryDescriptorList); 07865 07866 /* 07867 * ULONG 07868 * MmGetMdlByteCount( 07869 * IN PMDL Mdl) 07870 */ 07871 #define MmGetMdlByteCount(_Mdl) \ 07872 ((_Mdl)->ByteCount) 07873 07874 /* 07875 * ULONG 07876 * MmGetMdlByteOffset( 07877 * IN PMDL Mdl) 07878 */ 07879 #define MmGetMdlByteOffset(_Mdl) \ 07880 ((_Mdl)->ByteOffset) 07881 07882 /* 07883 * PPFN_NUMBER 07884 * MmGetMdlPfnArray( 07885 * IN PMDL Mdl) 07886 */ 07887 #define MmGetMdlPfnArray(_Mdl) \ 07888 ((PPFN_NUMBER) ((_Mdl) + 1)) 07889 07890 /* 07891 * PVOID 07892 * MmGetMdlVirtualAddress( 07893 * IN PMDL Mdl) 07894 */ 07895 #define MmGetMdlVirtualAddress(_Mdl) \ 07896 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset)) 07897 07898 NTOSAPI 07899 PHYSICAL_ADDRESS 07900 DDKAPI 07901 MmGetPhysicalAddress( 07902 /*IN*/ PVOID BaseAddress); 07903 07904 NTOSAPI 07905 PPHYSICAL_MEMORY_RANGE 07906 DDKAPI 07907 MmGetPhysicalMemoryRanges( 07908 VOID); 07909 07910 NTOSAPI 07911 PVOID 07912 DDKAPI 07913 MmGetVirtualForPhysical( 07914 /*IN*/ PHYSICAL_ADDRESS PhysicalAddress); 07915 07916 NTOSAPI 07917 PVOID 07918 DDKAPI 07919 MmMapLockedPagesSpecifyCache( 07920 /*IN*/ PMDL MemoryDescriptorList, 07921 /*IN*/ KPROCESSOR_MODE AccessMode, 07922 /*IN*/ MEMORY_CACHING_TYPE CacheType, 07923 /*IN*/ PVOID BaseAddress, 07924 /*IN*/ ULONG BugCheckOnFailure, 07925 /*IN*/ MM_PAGE_PRIORITY Priority); 07926 07927 NTOSAPI 07928 PVOID 07929 DDKAPI 07930 MmMapLockedPagesWithReservedMapping( 07931 /*IN*/ PVOID MappingAddress, 07932 /*IN*/ ULONG PoolTag, 07933 /*IN*/ PMDL MemoryDescriptorList, 07934 /*IN*/ MEMORY_CACHING_TYPE CacheType); 07935 07936 NTOSAPI 07937 NTSTATUS 07938 DDKAPI 07939 MmMapUserAddressesToPage( 07940 /*IN*/ PVOID BaseAddress, 07941 /*IN*/ SIZE_T NumberOfBytes, 07942 /*IN*/ PVOID PageAddress); 07943 07944 NTOSAPI 07945 PVOID 07946 DDKAPI 07947 MmMapVideoDisplay( 07948 /*IN*/ PHYSICAL_ADDRESS PhysicalAddress, 07949 /*IN*/ SIZE_T NumberOfBytes, 07950 /*IN*/ MEMORY_CACHING_TYPE CacheType); 07951 07952 NTOSAPI 07953 NTSTATUS 07954 DDKAPI 07955 MmMapViewInSessionSpace( 07956 /*IN*/ PVOID Section, 07957 /*OUT*/ PVOID *MappedBase, 07958 /*IN OUT*/ PSIZE_T ViewSize); 07959 07960 NTOSAPI 07961 NTSTATUS 07962 DDKAPI 07963 MmMapViewInSystemSpace( 07964 /*IN*/ PVOID Section, 07965 /*OUT*/ PVOID *MappedBase, 07966 /*IN*/ PSIZE_T ViewSize); 07967 07968 NTOSAPI 07969 NTSTATUS 07970 DDKAPI 07971 MmMarkPhysicalMemoryAsBad( 07972 /*IN*/ PPHYSICAL_ADDRESS StartAddress, 07973 /*IN OUT*/ PLARGE_INTEGER NumberOfBytes); 07974 07975 NTOSAPI 07976 NTSTATUS 07977 DDKAPI 07978 MmMarkPhysicalMemoryAsGood( 07979 /*IN*/ PPHYSICAL_ADDRESS StartAddress, 07980 /*IN OUT*/ PLARGE_INTEGER NumberOfBytes); 07981 07982 /* 07983 * PVOID 07984 * MmGetSystemAddressForMdlSafe( 07985 * IN PMDL Mdl, 07986 * IN MM_PAGE_PRIORITY Priority) 07987 */ 07988 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \ 07989 ((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \ 07990 | MDL_SOURCE_IS_NONPAGED_POOL)) ? \ 07991 (_Mdl)->MappedSystemVa : \ 07992 (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \ 07993 KernelMode, MmCached, NULL, FALSE, _Priority) 07994 07995 NTOSAPI 07996 PVOID 07997 DDKAPI 07998 MmGetSystemRoutineAddress( 07999 /*IN*/ PUNICODE_STRING SystemRoutineName); 08000 08001 /* 08002 * ULONG 08003 * ADDRESS_AND_SIZE_TO_SPAN_PAGES( 08004 * IN PVOID Va, 08005 * IN ULONG Size) 08006 */ 08007 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \ 08008 _Size) \ 08009 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \ 08010 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)) 08011 08012 /* 08013 * VOID 08014 * MmInitializeMdl( 08015 * IN PMDL MemoryDescriptorList, 08016 * IN PVOID BaseVa, 08017 * IN SIZE_T Length) 08018 */ 08019 #define MmInitializeMdl(_MemoryDescriptorList, \ 08020 _BaseVa, \ 08021 _Length) \ 08022 { \ 08023 (_MemoryDescriptorList)->Next = (PMDL) NULL; \ 08024 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \ 08025 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \ 08026 (_MemoryDescriptorList)->MdlFlags = 0; \ 08027 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \ 08028 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \ 08029 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \ 08030 } 08031 08032 NTOSAPI 08033 BOOLEAN 08034 DDKAPI 08035 MmIsAddressValid( 08036 /*IN*/ PVOID VirtualAddress); 08037 08038 NTOSAPI 08039 LOGICAL 08040 DDKAPI 08041 MmIsDriverVerifying( 08042 /*IN*/ PDRIVER_OBJECT DriverObject); 08043 08044 NTOSAPI 08045 BOOLEAN 08046 DDKAPI 08047 MmIsThisAnNtAsSystem( 08048 VOID); 08049 08050 NTOSAPI 08051 NTSTATUS 08052 DDKAPI 08053 MmIsVerifierEnabled( 08054 /*OUT*/ PULONG VerifierFlags); 08055 08056 NTOSAPI 08057 PVOID 08058 DDKAPI 08059 MmLockPagableDataSection( 08060 /*IN*/ PVOID AddressWithinSection); 08061 08062 NTOSAPI 08063 PVOID 08064 DDKAPI 08065 MmLockPagableImageSection( 08066 /*IN*/ PVOID AddressWithinSection); 08067 08068 /* 08069 * PVOID 08070 * MmLockPagableCodeSection( 08071 * IN PVOID AddressWithinSection) 08072 */ 08073 #define MmLockPagableCodeSection MmLockPagableDataSection 08074 08075 NTOSAPI 08076 VOID 08077 DDKAPI 08078 MmLockPagableSectionByHandle( 08079 /*IN*/ PVOID ImageSectionHandle); 08080 08081 NTOSAPI 08082 PVOID 08083 DDKAPI 08084 MmMapIoSpace( 08085 /*IN*/ PHYSICAL_ADDRESS PhysicalAddress, 08086 /*IN*/ ULONG NumberOfBytes, 08087 /*IN*/ MEMORY_CACHING_TYPE CacheEnable); 08088 08089 NTOSAPI 08090 PVOID 08091 DDKAPI 08092 MmMapLockedPages( 08093 /*IN*/ PMDL MemoryDescriptorList, 08094 /*IN*/ KPROCESSOR_MODE AccessMode); 08095 08096 NTOSAPI 08097 VOID 08098 DDKAPI 08099 MmPageEntireDriver( 08100 /*IN*/ PVOID AddressWithinSection); 08101 08102 NTOSAPI 08103 VOID 08104 DDKAPI 08105 MmProbeAndLockProcessPages( 08106 /*IN OUT*/ PMDL MemoryDescriptorList, 08107 /*IN*/ PEPROCESS Process, 08108 /*IN*/ KPROCESSOR_MODE AccessMode, 08109 /*IN*/ LOCK_OPERATION Operation); 08110 08111 NTOSAPI 08112 NTSTATUS 08113 DDKAPI 08114 MmProtectMdlSystemAddress( 08115 /*IN*/ PMDL MemoryDescriptorList, 08116 /*IN*/ ULONG NewProtect); 08117 08118 NTOSAPI 08119 VOID 08120 DDKAPI 08121 MmUnmapLockedPages( 08122 /*IN*/ PVOID BaseAddress, 08123 /*IN*/ PMDL MemoryDescriptorList); 08124 08125 NTOSAPI 08126 NTSTATUS 08127 DDKAPI 08128 MmUnmapViewInSessionSpace( 08129 /*IN*/ PVOID MappedBase); 08130 08131 NTOSAPI 08132 NTSTATUS 08133 DDKAPI 08134 MmUnmapViewInSystemSpace( 08135 /*IN*/ PVOID MappedBase); 08136 08137 NTOSAPI 08138 VOID 08139 DDKAPI 08140 MmUnsecureVirtualMemory( 08141 /*IN*/ HANDLE SecureHandle); 08142 08143 /* 08144 * VOID 08145 * MmPrepareMdlForReuse( 08146 * IN PMDL Mdl) 08147 */ 08148 #define MmPrepareMdlForReuse(_Mdl) \ 08149 { \ 08150 if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \ 08151 ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \ 08152 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \ 08153 } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \ 08154 ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \ 08155 } \ 08156 } 08157 08158 NTOSAPI 08159 VOID 08160 DDKAPI 08161 MmProbeAndLockPages( 08162 /*IN OUT*/ PMDL MemoryDescriptorList, 08163 /*IN*/ KPROCESSOR_MODE AccessMode, 08164 /*IN*/ LOCK_OPERATION Operation); 08165 08166 NTOSAPI 08167 MM_SYSTEM_SIZE 08168 DDKAPI 08169 MmQuerySystemSize( 08170 VOID); 08171 08172 NTOSAPI 08173 NTSTATUS 08174 DDKAPI 08175 MmRemovePhysicalMemory( 08176 /*IN*/ PPHYSICAL_ADDRESS StartAddress, 08177 /*IN OUT*/ PLARGE_INTEGER NumberOfBytes); 08178 08179 NTOSAPI 08180 VOID 08181 DDKAPI 08182 MmResetDriverPaging( 08183 /*IN*/ PVOID AddressWithinSection); 08184 08185 NTOSAPI 08186 HANDLE 08187 DDKAPI 08188 MmSecureVirtualMemory( 08189 /*IN*/ PVOID Address, 08190 /*IN*/ SIZE_T Size, 08191 /*IN*/ ULONG ProbeMode); 08192 08193 NTOSAPI 08194 ULONG 08195 DDKAPI 08196 MmSizeOfMdl( 08197 /*IN*/ PVOID Base, 08198 /*IN*/ SIZE_T Length); 08199 08200 NTOSAPI 08201 VOID 08202 DDKAPI 08203 MmUnlockPagableImageSection( 08204 /*IN*/ PVOID ImageSectionHandle); 08205 08206 NTOSAPI 08207 VOID 08208 DDKAPI 08209 MmUnlockPages( 08210 /*IN*/ PMDL MemoryDescriptorList); 08211 08212 NTOSAPI 08213 VOID 08214 DDKAPI 08215 MmUnmapIoSpace( 08216 /*IN*/ PVOID BaseAddress, 08217 /*IN*/ SIZE_T NumberOfBytes); 08218 08219 NTOSAPI 08220 VOID 08221 DDKAPI 08222 MmUnmapReservedMapping( 08223 /*IN*/ PVOID BaseAddress, 08224 /*IN*/ ULONG PoolTag, 08225 /*IN*/ PMDL MemoryDescriptorList); 08226 08227 NTOSAPI 08228 VOID 08229 DDKAPI 08230 MmUnmapVideoDisplay( 08231 /*IN*/ PVOID BaseAddress, 08232 /*IN*/ SIZE_T NumberOfBytes); 08233 08234 08235 08236 /** Object manager routines **/ 08237 08238 NTOSAPI 08239 NTSTATUS 08240 DDKAPI 08241 ObAssignSecurity( 08242 /*IN*/ PACCESS_STATE AccessState, 08243 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor, 08244 /*IN*/ PVOID Object, 08245 /*IN*/ POBJECT_TYPE Type); 08246 08247 NTOSAPI 08248 VOID 08249 DDKAPI 08250 ObDereferenceSecurityDescriptor( 08251 PSECURITY_DESCRIPTOR SecurityDescriptor, 08252 ULONG Count); 08253 08254 NTOSAPI 08255 VOID 08256 DDKFASTAPI 08257 ObfDereferenceObject( 08258 /*IN*/ PVOID Object); 08259 08260 /* 08261 * VOID 08262 * ObDereferenceObject( 08263 * IN PVOID Object) 08264 */ 08265 #define ObDereferenceObject ObfDereferenceObject 08266 08267 NTOSAPI 08268 NTSTATUS 08269 DDKAPI 08270 ObGetObjectSecurity( 08271 /*IN*/ PVOID Object, 08272 /*OUT*/ PSECURITY_DESCRIPTOR *SecurityDescriptor, 08273 /*OUT*/ PBOOLEAN MemoryAllocated); 08274 08275 NTOSAPI 08276 NTSTATUS 08277 DDKAPI 08278 ObInsertObject( 08279 /*IN*/ PVOID Object, 08280 /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/, 08281 /*IN*/ ACCESS_MASK DesiredAccess, 08282 /*IN*/ ULONG AdditionalReferences, 08283 /*OUT*/ PVOID* ReferencedObject /*OPTIONAL*/, 08284 /*OUT*/ PHANDLE Handle); 08285 08286 NTOSAPI 08287 VOID 08288 DDKFASTAPI 08289 ObfReferenceObject( 08290 /*IN*/ PVOID Object); 08291 08292 NTOSAPI 08293 NTSTATUS 08294 DDKAPI 08295 ObLogSecurityDescriptor( 08296 /*IN*/ PSECURITY_DESCRIPTOR InputSecurityDescriptor, 08297 /*OUT*/ PSECURITY_DESCRIPTOR *OutputSecurityDescriptor, 08298 /*IN*/ ULONG RefBias); 08299 /* 08300 * VOID 08301 * ObReferenceObject( 08302 * IN PVOID Object) 08303 */ 08304 #define ObReferenceObject ObfReferenceObject 08305 08306 NTOSAPI 08307 VOID 08308 DDKAPI 08309 ObMakeTemporaryObject( 08310 /*IN*/ PVOID Object); 08311 08312 NTOSAPI 08313 NTSTATUS 08314 DDKAPI 08315 ObOpenObjectByName( 08316 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08317 /*IN*/ POBJECT_TYPE ObjectType, 08318 /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/, 08319 /*IN*/ KPROCESSOR_MODE AccessMode, 08320 /*IN*/ ACCESS_MASK DesiredAccess, 08321 /*IN*/ PACCESS_STATE PassedAccessState, 08322 /*OUT*/ PHANDLE Handle); 08323 08324 NTOSAPI 08325 NTSTATUS 08326 DDKAPI 08327 ObOpenObjectByPointer( 08328 /*IN*/ PVOID Object, 08329 /*IN*/ ULONG HandleAttributes, 08330 /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/, 08331 /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/, 08332 /*IN*/ POBJECT_TYPE ObjectType /*OPTIONAL*/, 08333 /*IN*/ KPROCESSOR_MODE AccessMode, 08334 /*OUT*/ PHANDLE Handle); 08335 08336 NTOSAPI 08337 NTSTATUS 08338 DDKAPI 08339 ObQueryObjectAuditingByHandle( 08340 /*IN*/ HANDLE Handle, 08341 /*OUT*/ PBOOLEAN GenerateOnClose); 08342 08343 NTOSAPI 08344 NTSTATUS 08345 DDKAPI 08346 ObReferenceObjectByHandle( 08347 /*IN*/ HANDLE Handle, 08348 /*IN*/ ACCESS_MASK DesiredAccess, 08349 /*IN*/ POBJECT_TYPE ObjectType /*OPTIONAL*/, 08350 /*IN*/ KPROCESSOR_MODE AccessMode, 08351 /*OUT*/ PVOID *Object, 08352 /*OUT*/ POBJECT_HANDLE_INFORMATION HandleInformation /*OPTIONAL*/); 08353 08354 NTOSAPI 08355 NTSTATUS 08356 DDKAPI 08357 ObReferenceObjectByName( 08358 /*IN*/ PUNICODE_STRING ObjectPath, 08359 /*IN*/ ULONG Attributes, 08360 /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/, 08361 /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/, 08362 /*IN*/ POBJECT_TYPE ObjectType, 08363 /*IN*/ KPROCESSOR_MODE AccessMode, 08364 /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/, 08365 /*OUT*/ PVOID *Object); 08366 08367 NTOSAPI 08368 NTSTATUS 08369 DDKAPI 08370 ObReferenceObjectByPointer( 08371 /*IN*/ PVOID Object, 08372 /*IN*/ ACCESS_MASK DesiredAccess, 08373 /*IN*/ POBJECT_TYPE ObjectType, 08374 /*IN*/ KPROCESSOR_MODE AccessMode); 08375 08376 NTOSAPI 08377 VOID 08378 DDKAPI 08379 ObReferenceSecurityDescriptor( 08380 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor, 08381 /*IN*/ ULONG Count); 08382 08383 NTOSAPI 08384 VOID 08385 DDKAPI 08386 ObReleaseObjectSecurity( 08387 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor, 08388 /*IN*/ BOOLEAN MemoryAllocated); 08389 08390 08391 08392 /** Process manager routines **/ 08393 08394 NTOSAPI 08395 NTSTATUS 08396 DDKAPI 08397 PsCreateSystemProcess( 08398 /*IN*/ PHANDLE ProcessHandle, 08399 /*IN*/ ACCESS_MASK DesiredAccess, 08400 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08401 08402 NTOSAPI 08403 NTSTATUS 08404 DDKAPI 08405 PsCreateSystemThread( 08406 /*OUT*/ PHANDLE ThreadHandle, 08407 /*IN*/ ULONG DesiredAccess, 08408 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/, 08409 /*IN*/ HANDLE ProcessHandle /*OPTIONAL*/, 08410 /*OUT*/ PCLIENT_ID ClientId /*OPTIONAL*/, 08411 /*IN*/ PKSTART_ROUTINE StartRoutine, 08412 /*IN*/ PVOID StartContext); 08413 08414 /* 08415 * PEPROCESS 08416 * PsGetCurrentProcess(VOID) 08417 */ 08418 #define PsGetCurrentProcess IoGetCurrentProcess 08419 08420 NTOSAPI 08421 HANDLE 08422 DDKAPI 08423 PsGetCurrentProcessId( 08424 VOID); 08425 08426 /* 08427 * PETHREAD 08428 * PsGetCurrentThread(VOID) 08429 */ 08430 #define PsGetCurrentThread() \ 08431 ((PETHREAD) KeGetCurrentThread()) 08432 08433 NTOSAPI 08434 HANDLE 08435 DDKAPI 08436 PsGetCurrentThreadId( 08437 VOID); 08438 08439 NTOSAPI 08440 BOOLEAN 08441 DDKAPI 08442 PsGetVersion( 08443 PULONG MajorVersion /*OPTIONAL*/, 08444 PULONG MinorVersion /*OPTIONAL*/, 08445 PULONG BuildNumber /*OPTIONAL*/, 08446 PUNICODE_STRING CSDVersion /*OPTIONAL*/); 08447 08448 NTOSAPI 08449 NTSTATUS 08450 DDKAPI 08451 PsRemoveCreateThreadNotifyRoutine( 08452 /*IN*/ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); 08453 08454 NTOSAPI 08455 NTSTATUS 08456 DDKAPI 08457 PsRemoveLoadImageNotifyRoutine( 08458 /*IN*/ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); 08459 08460 NTOSAPI 08461 NTSTATUS 08462 DDKAPI 08463 PsSetCreateProcessNotifyRoutine( 08464 /*IN*/ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, 08465 /*IN*/ BOOLEAN Remove); 08466 08467 NTOSAPI 08468 NTSTATUS 08469 DDKAPI 08470 PsSetCreateThreadNotifyRoutine( 08471 /*IN*/ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); 08472 08473 NTOSAPI 08474 NTSTATUS 08475 DDKAPI 08476 PsSetLoadImageNotifyRoutine( 08477 /*IN*/ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); 08478 08479 NTOSAPI 08480 NTSTATUS 08481 DDKAPI 08482 PsTerminateSystemThread( 08483 /*IN*/ NTSTATUS ExitStatus); 08484 08485 08486 08487 /** Security reference monitor routines **/ 08488 08489 NTOSAPI 08490 BOOLEAN 08491 DDKAPI 08492 SeAccessCheck( 08493 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor, 08494 /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, 08495 /*IN*/ BOOLEAN SubjectContextLocked, 08496 /*IN*/ ACCESS_MASK DesiredAccess, 08497 /*IN*/ ACCESS_MASK PreviouslyGrantedAccess, 08498 /*OUT*/ PPRIVILEGE_SET *Privileges /*OPTIONAL*/, 08499 /*IN*/ PGENERIC_MAPPING GenericMapping, 08500 /*IN*/ KPROCESSOR_MODE AccessMode, 08501 /*OUT*/ PACCESS_MASK GrantedAccess, 08502 /*OUT*/ PNTSTATUS AccessStatus); 08503 08504 NTOSAPI 08505 NTSTATUS 08506 DDKAPI 08507 SeAssignSecurity( 08508 /*IN*/ PSECURITY_DESCRIPTOR ParentDescriptor /*OPTIONAL*/, 08509 /*IN*/ PSECURITY_DESCRIPTOR ExplicitDescriptor /*OPTIONAL*/, 08510 /*OUT*/ PSECURITY_DESCRIPTOR *NewDescriptor, 08511 /*IN*/ BOOLEAN IsDirectoryObject, 08512 /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext, 08513 /*IN*/ PGENERIC_MAPPING GenericMapping, 08514 /*IN*/ POOL_TYPE PoolType); 08515 08516 NTOSAPI 08517 NTSTATUS 08518 DDKAPI 08519 SeAssignSecurityEx( 08520 /*IN*/ PSECURITY_DESCRIPTOR ParentDescriptor /*OPTIONAL*/, 08521 /*IN*/ PSECURITY_DESCRIPTOR ExplicitDescriptor /*OPTIONAL*/, 08522 /*OUT*/ PSECURITY_DESCRIPTOR *NewDescriptor, 08523 /*IN*/ GUID *ObjectType /*OPTIONAL*/, 08524 /*IN*/ BOOLEAN IsDirectoryObject, 08525 /*IN*/ ULONG AutoInheritFlags, 08526 /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext, 08527 /*IN*/ PGENERIC_MAPPING GenericMapping, 08528 /*IN*/ POOL_TYPE PoolType); 08529 08530 NTOSAPI 08531 NTSTATUS 08532 DDKAPI 08533 SeDeassignSecurity( 08534 /*IN OUT*/ PSECURITY_DESCRIPTOR *SecurityDescriptor); 08535 08536 NTOSAPI 08537 BOOLEAN 08538 DDKAPI 08539 SeSinglePrivilegeCheck( 08540 LUID PrivilegeValue, 08541 KPROCESSOR_MODE PreviousMode); 08542 08543 NTOSAPI 08544 BOOLEAN 08545 DDKAPI 08546 SeValidSecurityDescriptor( 08547 /*IN*/ ULONG Length, 08548 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor); 08549 08550 08551 08552 /** NtXxx routines **/ 08553 08554 NTOSAPI 08555 NTSTATUS 08556 DDKAPI 08557 NtOpenProcess( 08558 /*OUT*/ PHANDLE ProcessHandle, 08559 /*IN*/ ACCESS_MASK DesiredAccess, 08560 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08561 /*IN*/ PCLIENT_ID ClientId /*OPTIONAL*/); 08562 08563 NTOSAPI 08564 NTSTATUS 08565 DDKAPI 08566 NtQueryInformationProcess( 08567 /*IN*/ HANDLE ProcessHandle, 08568 /*IN*/ PROCESSINFOCLASS ProcessInformationClass, 08569 /*OUT*/ PVOID ProcessInformation, 08570 /*IN*/ ULONG ProcessInformationLength, 08571 /*OUT*/ PULONG ReturnLength /*OPTIONAL*/); 08572 08573 08574 08575 /** NtXxx and ZwXxx routines **/ 08576 08577 NTOSAPI 08578 NTSTATUS 08579 DDKAPI 08580 NtCancelTimer( 08581 /*IN*/ HANDLE TimerHandle, 08582 /*OUT*/ PBOOLEAN CurrentState /*OPTIONAL*/); 08583 08584 NTOSAPI 08585 NTSTATUS 08586 DDKAPI 08587 ZwCancelTimer( 08588 /*IN*/ HANDLE TimerHandle, 08589 /*OUT*/ PBOOLEAN CurrentState /*OPTIONAL*/); 08590 08591 NTOSAPI 08592 NTSTATUS 08593 DDKAPI 08594 NtClose( 08595 /*IN*/ HANDLE Handle); 08596 08597 NTOSAPI 08598 NTSTATUS 08599 DDKAPI 08600 ZwClose( 08601 /*IN*/ HANDLE Handle); 08602 08603 NTOSAPI 08604 NTSTATUS 08605 DDKAPI 08606 NtCreateDirectoryObject( 08607 /*OUT*/ PHANDLE DirectoryHandle, 08608 /*IN*/ ACCESS_MASK DesiredAccess, 08609 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08610 08611 NTOSAPI 08612 NTSTATUS 08613 DDKAPI 08614 ZwCreateDirectoryObject( 08615 /*OUT*/ PHANDLE DirectoryHandle, 08616 /*IN*/ ACCESS_MASK DesiredAccess, 08617 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08618 08619 NTOSAPI 08620 NTSTATUS 08621 DDKAPI 08622 NtCreateEvent( 08623 /*OUT*/ PHANDLE EventHandle, 08624 /*IN*/ ACCESS_MASK DesiredAccess, 08625 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08626 /*IN*/ BOOLEAN ManualReset, 08627 /*IN*/ BOOLEAN InitialState); 08628 08629 NTOSAPI 08630 NTSTATUS 08631 DDKAPI 08632 ZwCreateEvent( 08633 /*OUT*/ PHANDLE EventHandle, 08634 /*IN*/ ACCESS_MASK DesiredAccess, 08635 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08636 /*IN*/ BOOLEAN ManualReset, 08637 /*IN*/ BOOLEAN InitialState); 08638 08639 NTOSAPI 08640 NTSTATUS 08641 DDKAPI 08642 NtCreateFile( 08643 /*OUT*/ PHANDLE FileHandle, 08644 /*IN*/ ACCESS_MASK DesiredAccess, 08645 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08646 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 08647 /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/, 08648 /*IN*/ ULONG FileAttributes, 08649 /*IN*/ ULONG ShareAccess, 08650 /*IN*/ ULONG CreateDisposition, 08651 /*IN*/ ULONG CreateOptions, 08652 /*IN*/ PVOID EaBuffer /*OPTIONAL*/, 08653 /*IN*/ ULONG EaLength); 08654 08655 NTOSAPI 08656 NTSTATUS 08657 DDKAPI 08658 ZwCreateFile( 08659 /*OUT*/ PHANDLE FileHandle, 08660 /*IN*/ ACCESS_MASK DesiredAccess, 08661 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08662 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 08663 /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/, 08664 /*IN*/ ULONG FileAttributes, 08665 /*IN*/ ULONG ShareAccess, 08666 /*IN*/ ULONG CreateDisposition, 08667 /*IN*/ ULONG CreateOptions, 08668 /*IN*/ PVOID EaBuffer /*OPTIONAL*/, 08669 /*IN*/ ULONG EaLength); 08670 08671 NTOSAPI 08672 NTSTATUS 08673 DDKAPI 08674 NtCreateKey( 08675 /*OUT*/ PHANDLE KeyHandle, 08676 /*IN*/ ACCESS_MASK DesiredAccess, 08677 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08678 /*IN*/ ULONG TitleIndex, 08679 /*IN*/ PUNICODE_STRING Class /*OPTIONAL*/, 08680 /*IN*/ ULONG CreateOptions, 08681 /*OUT*/ PULONG Disposition /*OPTIONAL*/); 08682 08683 NTOSAPI 08684 NTSTATUS 08685 DDKAPI 08686 ZwCreateKey( 08687 /*OUT*/ PHANDLE KeyHandle, 08688 /*IN*/ ACCESS_MASK DesiredAccess, 08689 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08690 /*IN*/ ULONG TitleIndex, 08691 /*IN*/ PUNICODE_STRING Class /*OPTIONAL*/, 08692 /*IN*/ ULONG CreateOptions, 08693 /*OUT*/ PULONG Disposition /*OPTIONAL*/); 08694 08695 NTOSAPI 08696 NTSTATUS 08697 DDKAPI 08698 NtCreateTimer( 08699 /*OUT*/ PHANDLE TimerHandle, 08700 /*IN*/ ACCESS_MASK DesiredAccess, 08701 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/, 08702 /*IN*/ TIMER_TYPE TimerType); 08703 08704 NTOSAPI 08705 NTSTATUS 08706 DDKAPI 08707 ZwCreateTimer( 08708 /*OUT*/ PHANDLE TimerHandle, 08709 /*IN*/ ACCESS_MASK DesiredAccess, 08710 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/, 08711 /*IN*/ TIMER_TYPE TimerType); 08712 08713 NTOSAPI 08714 NTSTATUS 08715 DDKAPI 08716 NtDeleteKey( 08717 /*IN*/ HANDLE KeyHandle); 08718 08719 NTOSAPI 08720 NTSTATUS 08721 DDKAPI 08722 ZwDeleteKey( 08723 /*IN*/ HANDLE KeyHandle); 08724 08725 NTOSAPI 08726 NTSTATUS 08727 DDKAPI 08728 NtDeleteValueKey( 08729 /*IN*/ HANDLE KeyHandle, 08730 /*IN*/ PUNICODE_STRING ValueName); 08731 08732 NTOSAPI 08733 NTSTATUS 08734 DDKAPI 08735 ZwDeleteValueKey( 08736 /*IN*/ HANDLE KeyHandle, 08737 /*IN*/ PUNICODE_STRING ValueName); 08738 08739 NTOSAPI 08740 NTSTATUS 08741 DDKAPI 08742 NtDeviceIoControlFile( 08743 /*IN*/ HANDLE DeviceHandle, 08744 /*IN*/ HANDLE Event /*OPTIONAL*/, 08745 /*IN*/ PIO_APC_ROUTINE UserApcRoutine /*OPTIONAL*/, 08746 /*IN*/ PVOID UserApcContext /*OPTIONAL*/, 08747 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 08748 /*IN*/ ULONG IoControlCode, 08749 /*IN*/ PVOID InputBuffer, 08750 /*IN*/ ULONG InputBufferSize, 08751 /*OUT*/ PVOID OutputBuffer, 08752 /*IN*/ ULONG OutputBufferSize); 08753 08754 NTOSAPI 08755 NTSTATUS 08756 DDKAPI 08757 ZwDeviceIoControlFile( 08758 /*IN*/ HANDLE DeviceHandle, 08759 /*IN*/ HANDLE Event /*OPTIONAL*/, 08760 /*IN*/ PIO_APC_ROUTINE UserApcRoutine /*OPTIONAL*/, 08761 /*IN*/ PVOID UserApcContext /*OPTIONAL*/, 08762 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 08763 /*IN*/ ULONG IoControlCode, 08764 /*IN*/ PVOID InputBuffer, 08765 /*IN*/ ULONG InputBufferSize, 08766 /*OUT*/ PVOID OutputBuffer, 08767 /*IN*/ ULONG OutputBufferSize); 08768 08769 NTOSAPI 08770 NTSTATUS 08771 DDKAPI 08772 NtEnumerateKey( 08773 /*IN*/ HANDLE KeyHandle, 08774 /*IN*/ ULONG Index, 08775 /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass, 08776 /*OUT*/ PVOID KeyInformation, 08777 /*IN*/ ULONG Length, 08778 /*OUT*/ PULONG ResultLength); 08779 08780 NTOSAPI 08781 NTSTATUS 08782 DDKAPI 08783 ZwEnumerateKey( 08784 /*IN*/ HANDLE KeyHandle, 08785 /*IN*/ ULONG Index, 08786 /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass, 08787 /*OUT*/ PVOID KeyInformation, 08788 /*IN*/ ULONG Length, 08789 /*OUT*/ PULONG ResultLength); 08790 08791 NTOSAPI 08792 NTSTATUS 08793 DDKAPI 08794 NtEnumerateValueKey( 08795 /*IN*/ HANDLE KeyHandle, 08796 /*IN*/ ULONG Index, 08797 /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, 08798 /*OUT*/ PVOID KeyValueInformation, 08799 /*IN*/ ULONG Length, 08800 /*OUT*/ PULONG ResultLength); 08801 08802 NTOSAPI 08803 NTSTATUS 08804 DDKAPI 08805 ZwEnumerateValueKey( 08806 /*IN*/ HANDLE KeyHandle, 08807 /*IN*/ ULONG Index, 08808 /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, 08809 /*OUT*/ PVOID KeyValueInformation, 08810 /*IN*/ ULONG Length, 08811 /*OUT*/ PULONG ResultLength); 08812 08813 NTOSAPI 08814 NTSTATUS 08815 DDKAPI 08816 NtFlushKey( 08817 /*IN*/ HANDLE KeyHandle); 08818 08819 NTOSAPI 08820 NTSTATUS 08821 DDKAPI 08822 ZwFlushKey( 08823 /*IN*/ HANDLE KeyHandle); 08824 08825 NTOSAPI 08826 NTSTATUS 08827 DDKAPI 08828 NtMakeTemporaryObject( 08829 /*IN*/ HANDLE Handle); 08830 08831 NTOSAPI 08832 NTSTATUS 08833 DDKAPI 08834 ZwMakeTemporaryObject( 08835 /*IN*/ HANDLE Handle); 08836 08837 NTOSAPI 08838 NTSTATUS 08839 DDKAPI 08840 NtMapViewOfSection( 08841 /*IN*/ HANDLE SectionHandle, 08842 /*IN*/ HANDLE ProcessHandle, 08843 /*IN OUT*/ PVOID *BaseAddress, 08844 /*IN*/ ULONG ZeroBits, 08845 /*IN*/ ULONG CommitSize, 08846 /*IN OUT*/ PLARGE_INTEGER SectionOffset /*OPTIONAL*/, 08847 /*IN OUT*/ PSIZE_T ViewSize, 08848 /*IN*/ SECTION_INHERIT InheritDisposition, 08849 /*IN*/ ULONG AllocationType, 08850 /*IN*/ ULONG Protect); 08851 08852 NTOSAPI 08853 NTSTATUS 08854 DDKAPI 08855 ZwMapViewOfSection( 08856 /*IN*/ HANDLE SectionHandle, 08857 /*IN*/ HANDLE ProcessHandle, 08858 /*IN OUT*/ PVOID *BaseAddress, 08859 /*IN*/ ULONG ZeroBits, 08860 /*IN*/ ULONG CommitSize, 08861 /*IN OUT*/ PLARGE_INTEGER SectionOffset /*OPTIONAL*/, 08862 /*IN OUT*/ PSIZE_T ViewSize, 08863 /*IN*/ SECTION_INHERIT InheritDisposition, 08864 /*IN*/ ULONG AllocationType, 08865 /*IN*/ ULONG Protect); 08866 08867 NTOSAPI 08868 NTSTATUS 08869 DDKAPI 08870 NtOpenFile( 08871 /*OUT*/ PHANDLE FileHandle, 08872 /*IN*/ ACCESS_MASK DesiredAccess, 08873 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08874 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 08875 /*IN*/ ULONG ShareAccess, 08876 /*IN*/ ULONG OpenOptions); 08877 08878 NTOSAPI 08879 NTSTATUS 08880 DDKAPI 08881 ZwOpenFile( 08882 /*OUT*/ PHANDLE FileHandle, 08883 /*IN*/ ACCESS_MASK DesiredAccess, 08884 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, 08885 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 08886 /*IN*/ ULONG ShareAccess, 08887 /*IN*/ ULONG OpenOptions); 08888 08889 NTOSAPI 08890 NTSTATUS 08891 DDKAPI 08892 NtOpenKey( 08893 /*OUT*/ PHANDLE KeyHandle, 08894 /*IN*/ ACCESS_MASK DesiredAccess, 08895 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08896 08897 NTOSAPI 08898 NTSTATUS 08899 DDKAPI 08900 ZwOpenKey( 08901 /*OUT*/ PHANDLE KeyHandle, 08902 /*IN*/ ACCESS_MASK DesiredAccess, 08903 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08904 08905 NTOSAPI 08906 NTSTATUS 08907 DDKAPI 08908 NtOpenSection( 08909 /*OUT*/ PHANDLE SectionHandle, 08910 /*IN*/ ACCESS_MASK DesiredAccess, 08911 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08912 08913 NTOSAPI 08914 NTSTATUS 08915 DDKAPI 08916 ZwOpenSection( 08917 /*OUT*/ PHANDLE SectionHandle, 08918 /*IN*/ ACCESS_MASK DesiredAccess, 08919 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08920 08921 NTOSAPI 08922 NTSTATUS 08923 DDKAPI 08924 NtOpenSymbolicLinkObject( 08925 /*OUT*/ PHANDLE LinkHandle, 08926 /*IN*/ ACCESS_MASK DesiredAccess, 08927 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08928 08929 NTOSAPI 08930 NTSTATUS 08931 DDKAPI 08932 ZwOpenSymbolicLinkObject( 08933 /*OUT*/ PHANDLE LinkHandle, 08934 /*IN*/ ACCESS_MASK DesiredAccess, 08935 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08936 08937 NTOSAPI 08938 NTSTATUS 08939 DDKAPI 08940 NtOpenTimer( 08941 /*OUT*/ PHANDLE TimerHandle, 08942 /*IN*/ ACCESS_MASK DesiredAccess, 08943 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08944 08945 NTOSAPI 08946 NTSTATUS 08947 DDKAPI 08948 ZwOpenTimer( 08949 /*OUT*/ PHANDLE TimerHandle, 08950 /*IN*/ ACCESS_MASK DesiredAccess, 08951 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); 08952 08953 NTOSAPI 08954 NTSTATUS 08955 DDKAPI 08956 NtQueryInformationFile( 08957 /*IN*/ HANDLE FileHandle, 08958 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 08959 /*OUT*/ PVOID FileInformation, 08960 /*IN*/ ULONG Length, 08961 /*IN*/ FILE_INFORMATION_CLASS FileInformationClass); 08962 08963 NTOSAPI 08964 NTSTATUS 08965 DDKAPI 08966 ZwQueryInformationFile( 08967 /*IN*/ HANDLE FileHandle, 08968 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 08969 /*OUT*/ PVOID FileInformation, 08970 /*IN*/ ULONG Length, 08971 /*IN*/ FILE_INFORMATION_CLASS FileInformationClass); 08972 08973 NTOSAPI 08974 NTSTATUS 08975 DDKAPI 08976 NtQueryKey( 08977 /*IN*/ HANDLE KeyHandle, 08978 /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass, 08979 /*OUT*/ PVOID KeyInformation, 08980 /*IN*/ ULONG Length, 08981 /*OUT*/ PULONG ResultLength); 08982 08983 NTOSAPI 08984 NTSTATUS 08985 DDKAPI 08986 ZwQueryKey( 08987 /*IN*/ HANDLE KeyHandle, 08988 /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass, 08989 /*OUT*/ PVOID KeyInformation, 08990 /*IN*/ ULONG Length, 08991 /*OUT*/ PULONG ResultLength); 08992 08993 NTOSAPI 08994 NTSTATUS 08995 DDKAPI 08996 NtQuerySymbolicLinkObject( 08997 /*IN*/ HANDLE LinkHandle, 08998 /*IN OUT*/ PUNICODE_STRING LinkTarget, 08999 /*OUT*/ PULONG ReturnedLength /*OPTIONAL*/); 09000 09001 NTOSAPI 09002 NTSTATUS 09003 DDKAPI 09004 ZwQuerySymbolicLinkObject( 09005 /*IN*/ HANDLE LinkHandle, 09006 /*IN OUT*/ PUNICODE_STRING LinkTarget, 09007 /*OUT*/ PULONG ReturnedLength /*OPTIONAL*/); 09008 09009 NTOSAPI 09010 NTSTATUS 09011 DDKAPI 09012 NtQueryValueKey( 09013 /*IN*/ HANDLE KeyHandle, 09014 /*IN*/ PUNICODE_STRING ValueName, 09015 /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, 09016 /*OUT*/ PVOID KeyValueInformation, 09017 /*IN*/ ULONG Length, 09018 /*OUT*/ PULONG ResultLength); 09019 09020 NTOSAPI 09021 NTSTATUS 09022 DDKAPI 09023 ZwQueryValueKey( 09024 /*IN*/ HANDLE KeyHandle, 09025 /*IN*/ PUNICODE_STRING ValueName, 09026 /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, 09027 /*OUT*/ PVOID KeyValueInformation, 09028 /*IN*/ ULONG Length, 09029 /*OUT*/ PULONG ResultLength); 09030 09031 NTOSAPI 09032 NTSTATUS 09033 DDKAPI 09034 NtReadFile( 09035 /*IN*/ HANDLE FileHandle, 09036 /*IN*/ HANDLE Event /*OPTIONAL*/, 09037 /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/, 09038 /*IN*/ PVOID ApcContext /*OPTIONAL*/, 09039 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 09040 /*OUT*/ PVOID Buffer, 09041 /*IN*/ ULONG Length, 09042 /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/, 09043 /*IN*/ PULONG Key /*OPTIONAL*/); 09044 09045 NTOSAPI 09046 NTSTATUS 09047 DDKAPI 09048 ZwReadFile( 09049 /*IN*/ HANDLE FileHandle, 09050 /*IN*/ HANDLE Event /*OPTIONAL*/, 09051 /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/, 09052 /*IN*/ PVOID ApcContext /*OPTIONAL*/, 09053 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 09054 /*OUT*/ PVOID Buffer, 09055 /*IN*/ ULONG Length, 09056 /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/, 09057 /*IN*/ PULONG Key /*OPTIONAL*/); 09058 09059 NTOSAPI 09060 NTSTATUS 09061 DDKAPI 09062 NtSetEvent( 09063 /*IN*/ HANDLE EventHandle, 09064 /*IN*/ PULONG NumberOfThreadsReleased); 09065 09066 NTOSAPI 09067 NTSTATUS 09068 DDKAPI 09069 ZwSetEvent( 09070 /*IN*/ HANDLE EventHandle, 09071 /*IN*/ PULONG NumberOfThreadsReleased); 09072 09073 NTOSAPI 09074 NTSTATUS 09075 DDKAPI 09076 NtSetInformationFile( 09077 /*IN*/ HANDLE FileHandle, 09078 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 09079 /*IN*/ PVOID FileInformation, 09080 /*IN*/ ULONG Length, 09081 /*IN*/ FILE_INFORMATION_CLASS FileInformationClass); 09082 09083 NTOSAPI 09084 NTSTATUS 09085 DDKAPI 09086 ZwSetInformationFile( 09087 /*IN*/ HANDLE FileHandle, 09088 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 09089 /*IN*/ PVOID FileInformation, 09090 /*IN*/ ULONG Length, 09091 /*IN*/ FILE_INFORMATION_CLASS FileInformationClass); 09092 09093 NTOSAPI 09094 NTSTATUS 09095 DDKAPI 09096 NtSetInformationThread( 09097 /*IN*/ HANDLE ThreadHandle, 09098 /*IN*/ THREADINFOCLASS ThreadInformationClass, 09099 /*IN*/ PVOID ThreadInformation, 09100 /*IN*/ ULONG ThreadInformationLength); 09101 09102 NTOSAPI 09103 NTSTATUS 09104 DDKAPI 09105 ZwSetInformationThread( 09106 /*IN*/ HANDLE ThreadHandle, 09107 /*IN*/ THREADINFOCLASS ThreadInformationClass, 09108 /*IN*/ PVOID ThreadInformation, 09109 /*IN*/ ULONG ThreadInformationLength); 09110 09111 NTOSAPI 09112 NTSTATUS 09113 DDKAPI 09114 NtSetTimer( 09115 /*IN*/ HANDLE TimerHandle, 09116 /*IN*/ PLARGE_INTEGER DueTime, 09117 /*IN*/ PTIMER_APC_ROUTINE TimerApcRoutine /*OPTIONAL*/, 09118 /*IN*/ PVOID TimerContext /*OPTIONAL*/, 09119 /*IN*/ BOOLEAN WakeTimer, 09120 /*IN*/ LONG Period /*OPTIONAL*/, 09121 /*OUT*/ PBOOLEAN PreviousState /*OPTIONAL*/); 09122 09123 NTOSAPI 09124 NTSTATUS 09125 DDKAPI 09126 ZwSetTimer( 09127 /*IN*/ HANDLE TimerHandle, 09128 /*IN*/ PLARGE_INTEGER DueTime, 09129 /*IN*/ PTIMER_APC_ROUTINE TimerApcRoutine /*OPTIONAL*/, 09130 /*IN*/ PVOID TimerContext /*OPTIONAL*/, 09131 /*IN*/ BOOLEAN WakeTimer, 09132 /*IN*/ LONG Period /*OPTIONAL*/, 09133 /*OUT*/ PBOOLEAN PreviousState /*OPTIONAL*/); 09134 09135 NTOSAPI 09136 NTSTATUS 09137 DDKAPI 09138 NtSetValueKey( 09139 /*IN*/ HANDLE KeyHandle, 09140 /*IN*/ PUNICODE_STRING ValueName, 09141 /*IN*/ ULONG TitleIndex /*OPTIONAL*/, 09142 /*IN*/ ULONG Type, 09143 /*IN*/ PVOID Data, 09144 /*IN*/ ULONG DataSize); 09145 09146 NTOSAPI 09147 NTSTATUS 09148 DDKAPI 09149 ZwSetValueKey( 09150 /*IN*/ HANDLE KeyHandle, 09151 /*IN*/ PUNICODE_STRING ValueName, 09152 /*IN*/ ULONG TitleIndex /*OPTIONAL*/, 09153 /*IN*/ ULONG Type, 09154 /*IN*/ PVOID Data, 09155 /*IN*/ ULONG DataSize); 09156 09157 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */ 09158 #define AT_EXTENDABLE_FILE 0x00002000 09159 #define SEC_NO_CHANGE 0x00400000 09160 #define AT_RESERVED 0x20000000 09161 #define AT_ROUND_TO_PAGE 0x40000000 09162 09163 NTOSAPI 09164 NTSTATUS 09165 DDKAPI 09166 NtUnmapViewOfSection( 09167 /*IN*/ HANDLE ProcessHandle, 09168 /*IN*/ PVOID BaseAddress); 09169 09170 NTOSAPI 09171 NTSTATUS 09172 DDKAPI 09173 ZwUnmapViewOfSection( 09174 /*IN*/ HANDLE ProcessHandle, 09175 /*IN*/ PVOID BaseAddress); 09176 09177 NTOSAPI 09178 NTSTATUS 09179 DDKAPI 09180 NtWaitForSingleObject( 09181 /*IN*/ HANDLE Object, 09182 /*IN*/ BOOLEAN Alertable, 09183 /*IN*/ PLARGE_INTEGER Time); 09184 09185 NTOSAPI 09186 NTSTATUS 09187 DDKAPI 09188 ZwWaitForSingleObject( 09189 /*IN*/ HANDLE Object, 09190 /*IN*/ BOOLEAN Alertable, 09191 /*IN*/ PLARGE_INTEGER Time); 09192 09193 NTOSAPI 09194 NTSTATUS 09195 DDKAPI 09196 NtWriteFile( 09197 /*IN*/ HANDLE FileHandle, 09198 /*IN*/ HANDLE Event /*OPTIONAL*/, 09199 /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/, 09200 /*IN*/ PVOID ApcContext /*OPTIONAL*/, 09201 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 09202 /*IN*/ PVOID Buffer, 09203 /*IN*/ ULONG Length, 09204 /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/, 09205 /*IN*/ PULONG Key /*OPTIONAL*/); 09206 09207 NTOSAPI 09208 NTSTATUS 09209 DDKAPI 09210 ZwWriteFile( 09211 /*IN*/ HANDLE FileHandle, 09212 /*IN*/ HANDLE Event /*OPTIONAL*/, 09213 /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/, 09214 /*IN*/ PVOID ApcContext /*OPTIONAL*/, 09215 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, 09216 /*IN*/ PVOID Buffer, 09217 /*IN*/ ULONG Length, 09218 /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/, 09219 /*IN*/ PULONG Key /*OPTIONAL*/); 09220 09221 09222 09223 /** Power management support routines **/ 09224 09225 NTOSAPI 09226 NTSTATUS 09227 DDKAPI 09228 PoCallDriver( 09229 /*IN*/ PDEVICE_OBJECT DeviceObject, 09230 /*IN OUT*/ PIRP Irp); 09231 09232 NTOSAPI 09233 PULONG 09234 DDKAPI 09235 PoRegisterDeviceForIdleDetection( 09236 /*IN*/ PDEVICE_OBJECT DeviceObject, 09237 /*IN*/ ULONG ConservationIdleTime, 09238 /*IN*/ ULONG PerformanceIdleTime, 09239 /*IN*/ DEVICE_POWER_STATE State); 09240 09241 NTOSAPI 09242 PVOID 09243 DDKAPI 09244 PoRegisterSystemState( 09245 /*IN*/ PVOID StateHandle, 09246 /*IN*/ EXECUTION_STATE Flags); 09247 09248 NTOSAPI 09249 NTSTATUS 09250 DDKAPI 09251 PoRequestPowerIrp( 09252 /*IN*/ PDEVICE_OBJECT DeviceObject, 09253 /*IN*/ UCHAR MinorFunction, 09254 /*IN*/ POWER_STATE PowerState, 09255 /*IN*/ PREQUEST_POWER_COMPLETE CompletionFunction, 09256 /*IN*/ PVOID Context, 09257 /*OUT*/ PIRP *Irp /*OPTIONAL*/); 09258 09259 NTOSAPI 09260 NTSTATUS 09261 DDKAPI 09262 PoRequestShutdownEvent( 09263 /*OUT*/ PVOID *Event); 09264 09265 NTOSAPI 09266 VOID 09267 DDKAPI 09268 PoSetDeviceBusy( 09269 PULONG IdlePointer); 09270 09271 NTOSAPI 09272 POWER_STATE 09273 DDKAPI 09274 PoSetPowerState( 09275 /*IN*/ PDEVICE_OBJECT DeviceObject, 09276 /*IN*/ POWER_STATE_TYPE Type, 09277 /*IN*/ POWER_STATE State); 09278 09279 NTOSAPI 09280 VOID 09281 DDKAPI 09282 PoSetSystemState( 09283 /*IN*/ EXECUTION_STATE Flags); 09284 09285 NTOSAPI 09286 VOID 09287 DDKAPI 09288 PoStartNextPowerIrp( 09289 /*IN*/ PIRP Irp); 09290 09291 NTOSAPI 09292 VOID 09293 DDKAPI 09294 PoUnregisterSystemState( 09295 /*IN*/ PVOID StateHandle); 09296 09297 09298 09299 /** WMI library support routines **/ 09300 09301 NTOSAPI 09302 NTSTATUS 09303 DDKAPI 09304 WmiCompleteRequest( 09305 /*IN*/ PDEVICE_OBJECT DeviceObject, 09306 /*IN*/ PIRP Irp, 09307 /*IN*/ NTSTATUS Status, 09308 /*IN*/ ULONG BufferUsed, 09309 /*IN*/ CCHAR PriorityBoost); 09310 09311 NTOSAPI 09312 NTSTATUS 09313 DDKAPI 09314 WmiFireEvent( 09315 /*IN*/ PDEVICE_OBJECT DeviceObject, 09316 /*IN*/ LPGUID Guid, 09317 /*IN*/ ULONG InstanceIndex, 09318 /*IN*/ ULONG EventDataSize, 09319 /*IN*/ PVOID EventData); 09320 09321 NTOSAPI 09322 NTSTATUS 09323 DDKAPI 09324 WmiQueryTraceInformation( 09325 /*IN*/ TRACE_INFORMATION_CLASS TraceInformationClass, 09326 /*OUT*/ PVOID TraceInformation, 09327 /*IN*/ ULONG TraceInformationLength, 09328 /*OUT*/ PULONG RequiredLength /*OPTIONAL*/, 09329 /*IN*/ PVOID Buffer /*OPTIONAL*/); 09330 09331 NTOSAPI 09332 NTSTATUS 09333 DDKAPI 09334 WmiSystemControl( 09335 /*IN*/ PWMILIB_CONTEXT WmiLibInfo, 09336 /*IN*/ PDEVICE_OBJECT DeviceObject, 09337 /*IN*/ PIRP Irp, 09338 /*OUT*/ PSYSCTL_IRP_DISPOSITION IrpDisposition); 09339 09340 NTOSAPI 09341 NTSTATUS 09342 DDKCDECLAPI 09343 WmiTraceMessage( 09344 /*IN*/ TRACEHANDLE LoggerHandle, 09345 /*IN*/ ULONG MessageFlags, 09346 /*IN*/ LPGUID MessageGuid, 09347 /*IN*/ USHORT MessageNumber, 09348 /*IN*/ ...); 09349 09350 #if 0 09351 /* FIXME: Get va_list from where? */ 09352 NTOSAPI 09353 NTSTATUS 09354 DDKCDECLAPI 09355 WmiTraceMessageVa( 09356 /*IN*/ TRACEHANDLE LoggerHandle, 09357 /*IN*/ ULONG MessageFlags, 09358 /*IN*/ LPGUID MessageGuid, 09359 /*IN*/ USHORT MessageNumber, 09360 /*IN*/ va_list MessageArgList); 09361 #endif 09362 09363 09364 /** Kernel debugger routines **/ 09365 09366 NTOSAPI 09367 VOID 09368 DDKAPI 09369 KdDisableDebugger( 09370 VOID); 09371 09372 NTOSAPI 09373 VOID 09374 DDKAPI 09375 KdEnableDebugger( 09376 VOID); 09377 09378 NTOSAPI 09379 VOID 09380 DDKAPI 09381 DbgBreakPoint( 09382 VOID); 09383 09384 NTOSAPI 09385 VOID 09386 DDKAPI 09387 DbgBreakPointWithStatus( 09388 /*IN*/ ULONG Status); 09389 09390 NTOSAPI 09391 ULONG 09392 DDKCDECLAPI 09393 DbgPrint( 09394 /*IN*/ PCH Format, 09395 /*IN*/ ...); 09396 09397 NTOSAPI 09398 ULONG 09399 DDKCDECLAPI 09400 DbgPrintEx( 09401 /*IN*/ ULONG ComponentId, 09402 /*IN*/ ULONG Level, 09403 /*IN*/ PCH Format, 09404 /*IN*/ ...); 09405 09406 NTOSAPI 09407 ULONG 09408 DDKCDECLAPI 09409 DbgPrintReturnControlC( 09410 /*IN*/ PCH Format, 09411 /*IN*/ ...); 09412 09413 NTOSAPI 09414 NTSTATUS 09415 DDKAPI 09416 DbgQueryDebugFilterState( 09417 /*IN*/ ULONG ComponentId, 09418 /*IN*/ ULONG Level); 09419 09420 NTOSAPI 09421 NTSTATUS 09422 DDKAPI 09423 DbgSetDebugFilterState( 09424 /*IN*/ ULONG ComponentId, 09425 /*IN*/ ULONG Level, 09426 /*IN*/ BOOLEAN State); 09427 09428 #ifdef DBG 09429 09430 #define KdPrint(_x_) DbgPrint _x_ 09431 #define KdPrintEx(_x_) DbgPrintEx _x_ 09432 #define KdBreakPoint() DbgBreakPoint() 09433 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s) 09434 09435 #else /* !DBG */ 09436 09437 #define KdPrint(_x_) 09438 #define KdPrintEx(_x_) 09439 #define KdBreakPoint() 09440 #define KdBreakPointWithStatus(s) 09441 09442 #endif /* !DBG */ 09443 09444 extern NTOSAPI PBOOLEAN KdDebuggerNotPresent; 09445 extern NTOSAPI PBOOLEAN KdDebuggerEnabled; 09446 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled 09447 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent 09448 09449 #ifdef __cplusplus 09450 } 09451 #endif 09452 09453 #endif /* __WINDDK_H */
Generated on Tue Jul 12 2022 19:59:55 by
