| /* |
| * winddk.h |
| * |
| * Windows Device Driver Kit |
| * |
| * This file is part of the w32api package. |
| * |
| * Contributors: |
| * Created by Casper S. Hornstrup <chorns@users.sourceforge.net> |
| * |
| * THIS SOFTWARE IS NOT COPYRIGHTED |
| * |
| * This source code is offered for use in the public domain. You may |
| * use, modify or distribute it freely. |
| * |
| * This code is distributed in the hope that it will be useful but |
| * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY |
| * DISCLAIMED. This includes but is not limited to warranties of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| * |
| */ |
| |
| #ifndef __WINDDK_H |
| #define __WINDDK_H |
| |
| #if __GNUC__ >= 3 |
| #pragma GCC system_header |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* |
| ** Definitions specific to this Device Driver Kit |
| */ |
| #define DDKAPI __stdcall |
| #define DDKFASTAPI __fastcall |
| #define DDKCDECLAPI __cdecl |
| |
| #if defined(_NTOSKRNL_) |
| #ifndef NTOSAPI |
| #define NTOSAPI DECL_EXPORT |
| #endif |
| #define DECLARE_INTERNAL_OBJECT(x) typedef struct _##x; typedef struct _##x *P##x; |
| #define DECLARE_INTERNAL_OBJECT2(x,y) typedef struct _##x; typedef struct _##x *P##y; |
| #else |
| #ifndef NTOSAPI |
| #define NTOSAPI DECL_IMPORT |
| #endif |
| #define DECLARE_INTERNAL_OBJECT(x) struct _##x; typedef struct _##x *P##x; |
| #define DECLARE_INTERNAL_OBJECT2(x,y) struct _##x; typedef struct _##x *P##y; |
| #endif |
| |
| /* Pseudo modifiers for parameters |
| We don't use these unnecessary defines in the w32api headers. Define |
| them by default since that is what people expect, but allow users |
| to avoid the pollution. */ |
| #ifndef _NO_W32_PSEUDO_MODIFIERS |
| #define IN |
| #define OUT |
| #define OPTIONAL |
| #define UNALLIGNED |
| #endif |
| |
| #define CONST const |
| #define VOLATILE volatile |
| |
| #define RESTRICTED_POINTER |
| #define POINTER_ALIGNMENT |
| |
| #ifdef NONAMELESSUNION |
| # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name |
| # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name |
| #else |
| # define _DDK_DUMMYUNION_MEMBER(name) name |
| # define _DDK_DUMMYUNION_N_MEMBER(n, name) name |
| #endif |
| |
| /* |
| ** Forward declarations |
| */ |
| |
| struct _IRP; |
| struct _MDL; |
| struct _KAPC; |
| struct _KDPC; |
| struct _KPCR; |
| struct _KPRCB; |
| struct _KTSS; |
| struct _FILE_OBJECT; |
| struct _DMA_ADAPTER; |
| struct _DEVICE_OBJECT; |
| struct _DRIVER_OBJECT; |
| struct _SECTION_OBJECT; |
| struct _IO_STATUS_BLOCK; |
| struct _DEVICE_DESCRIPTION; |
| struct _SCATTER_GATHER_LIST; |
| |
| DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT) |
| DECLARE_INTERNAL_OBJECT(DMA_ADAPTER) |
| DECLARE_INTERNAL_OBJECT(IO_STATUS_BLOCK) |
| DECLARE_INTERNAL_OBJECT(SECTION_OBJECT) |
| |
| #if 1 |
| /* FIXME: Unknown definitions */ |
| struct _SET_PARTITION_INFORMATION_EX; |
| typedef ULONG WAIT_TYPE; |
| typedef HANDLE TRACEHANDLE; |
| typedef PVOID PWMILIB_CONTEXT; |
| typedef PVOID PSYSCTL_IRP_DISPOSITION; |
| typedef ULONG LOGICAL; |
| #endif |
| |
| /* |
| ** Routines specific to this DDK |
| */ |
| |
| #define TAG(_a, _b, _c, _d) (ULONG) \ |
| (((_a) << 0) + ((_b) << 8) + ((_c) << 16) + ((_d) << 24)) |
| |
| #ifdef __GNUC__ |
| static __inline struct _KPCR * KeGetCurrentKPCR( |
| VOID) |
| { |
| ULONG Value; |
| |
| __asm__ __volatile__ ( |
| #if (__GNUC__ >= 3) |
| /* support -masm=intel */ |
| "mov{l} {%%fs:0x18, %0|%0, %%fs:0x18}\n\t" |
| #else |
| "movl %%fs:0x18, %0\n\t" |
| #endif |
| : "=r" (Value) |
| : /* no inputs */ |
| ); |
| return (struct _KPCR *) Value; |
| } |
| |
| #elif defined( __WATCOMC__ ) |
| |
| extern struct _KPCR * KeGetCurrentKPCR( void ); |
| #pragma aux KeGetCurrentKPCR = \ |
| "mov eax, fs:[0x18]" \ |
| value [ eax ]; |
| |
| #endif |
| |
| /* |
| ** Simple structures |
| */ |
| |
| typedef LONG KPRIORITY; |
| typedef UCHAR KIRQL, *PKIRQL; |
| typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK; |
| typedef ULONG_PTR KAFFINITY, *PKAFFINITY; |
| typedef CCHAR KPROCESSOR_MODE; |
| |
| typedef enum _MODE { |
| KernelMode, |
| UserMode, |
| MaximumMode |
| } MODE; |
| |
| |
| /* Structures not exposed to drivers */ |
| typedef struct _IO_TIMER *PIO_TIMER; |
| typedef struct _EPROCESS *PEPROCESS; |
| typedef struct _ETHREAD *PETHREAD; |
| typedef struct _KINTERRUPT *PKINTERRUPT; |
| typedef struct _OBJECT_TYPE *POBJECT_TYPE; |
| typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD; |
| typedef struct _COMPRESSED_DATA_INFO *PCOMPRESSED_DATA_INFO; |
| typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE; |
| typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE; |
| typedef struct _DRIVE_LAYOUT_INFORMATION *PDRIVE_LAYOUT_INFORMATION; |
| typedef struct _DRIVE_LAYOUT_INFORMATION_EX *PDRIVE_LAYOUT_INFORMATION_EX; |
| |
| /* Constants */ |
| #define MAXIMUM_PROCESSORS 32 |
| |
| #define MAXIMUM_WAIT_OBJECTS 64 |
| |
| #define METHOD_BUFFERED 0 |
| #define METHOD_IN_DIRECT 1 |
| #define METHOD_OUT_DIRECT 2 |
| #define METHOD_NEITHER 3 |
| |
| #define LOW_PRIORITY 0 |
| #define LOW_REALTIME_PRIORITY 16 |
| #define HIGH_PRIORITY 31 |
| #define MAXIMUM_PRIORITY 32 |
| |
| #define FILE_SUPERSEDED 0x00000000 |
| #define FILE_OPENED 0x00000001 |
| #define FILE_CREATED 0x00000002 |
| #define FILE_OVERWRITTEN 0x00000003 |
| #define FILE_EXISTS 0x00000004 |
| #define FILE_DOES_NOT_EXIST 0x00000005 |
| |
| /* also in winnt.h */ |
| #define FILE_LIST_DIRECTORY 0x00000001 |
| #define FILE_READ_DATA 0x00000001 |
| #define FILE_ADD_FILE 0x00000002 |
| #define FILE_WRITE_DATA 0x00000002 |
| #define FILE_ADD_SUBDIRECTORY 0x00000004 |
| #define FILE_APPEND_DATA 0x00000004 |
| #define FILE_CREATE_PIPE_INSTANCE 0x00000004 |
| #define FILE_READ_EA 0x00000008 |
| #define FILE_WRITE_EA 0x00000010 |
| #define FILE_EXECUTE 0x00000020 |
| #define FILE_TRAVERSE 0x00000020 |
| #define FILE_DELETE_CHILD 0x00000040 |
| #define FILE_READ_ATTRIBUTES 0x00000080 |
| #define FILE_WRITE_ATTRIBUTES 0x00000100 |
| |
| #define FILE_SHARE_READ 0x00000001 |
| #define FILE_SHARE_WRITE 0x00000002 |
| #define FILE_SHARE_DELETE 0x00000004 |
| #define FILE_SHARE_VALID_FLAGS 0x00000007 |
| |
| #define FILE_ATTRIBUTE_READONLY 0x00000001 |
| #define FILE_ATTRIBUTE_HIDDEN 0x00000002 |
| #define FILE_ATTRIBUTE_SYSTEM 0x00000004 |
| #define FILE_ATTRIBUTE_DIRECTORY 0x00000010 |
| #define FILE_ATTRIBUTE_ARCHIVE 0x00000020 |
| #define FILE_ATTRIBUTE_DEVICE 0x00000040 |
| #define FILE_ATTRIBUTE_NORMAL 0x00000080 |
| #define FILE_ATTRIBUTE_TEMPORARY 0x00000100 |
| #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200 |
| #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 |
| #define FILE_ATTRIBUTE_COMPRESSED 0x00000800 |
| #define FILE_ATTRIBUTE_OFFLINE 0x00001000 |
| #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000 |
| #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000 |
| |
| #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7 |
| #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7 |
| |
| #define FILE_COPY_STRUCTURED_STORAGE 0x00000041 |
| #define FILE_STRUCTURED_STORAGE 0x00000441 |
| |
| #define FILE_VALID_OPTION_FLAGS 0x00ffffff |
| #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032 |
| #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032 |
| #define FILE_VALID_SET_FLAGS 0x00000036 |
| |
| #define FILE_SUPERSEDE 0x00000000 |
| #define FILE_OPEN 0x00000001 |
| #define FILE_CREATE 0x00000002 |
| #define FILE_OPEN_IF 0x00000003 |
| #define FILE_OVERWRITE 0x00000004 |
| #define FILE_OVERWRITE_IF 0x00000005 |
| #define FILE_MAXIMUM_DISPOSITION 0x00000005 |
| |
| #define FILE_DIRECTORY_FILE 0x00000001 |
| #define FILE_WRITE_THROUGH 0x00000002 |
| #define FILE_SEQUENTIAL_ONLY 0x00000004 |
| #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008 |
| #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010 |
| #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020 |
| #define FILE_NON_DIRECTORY_FILE 0x00000040 |
| #define FILE_CREATE_TREE_CONNECTION 0x00000080 |
| #define FILE_COMPLETE_IF_OPLOCKED 0x00000100 |
| #define FILE_NO_EA_KNOWLEDGE 0x00000200 |
| #define FILE_OPEN_FOR_RECOVERY 0x00000400 |
| #define FILE_RANDOM_ACCESS 0x00000800 |
| #define FILE_DELETE_ON_CLOSE 0x00001000 |
| #define FILE_OPEN_BY_FILE_ID 0x00002000 |
| #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000 |
| #define FILE_NO_COMPRESSION 0x00008000 |
| #define FILE_RESERVE_OPFILTER 0x00100000 |
| #define FILE_OPEN_REPARSE_POINT 0x00200000 |
| #define FILE_OPEN_NO_RECALL 0x00400000 |
| #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000 |
| |
| #define FILE_ANY_ACCESS 0x00000000 |
| #define FILE_SPECIAL_ACCESS FILE_ANY_ACCESS |
| #define FILE_READ_ACCESS 0x00000001 |
| #define FILE_WRITE_ACCESS 0x00000002 |
| |
| #define FILE_ALL_ACCESS \ |
| (STANDARD_RIGHTS_REQUIRED | \ |
| SYNCHRONIZE | \ |
| 0x1FF) |
| |
| #define FILE_GENERIC_EXECUTE \ |
| (STANDARD_RIGHTS_EXECUTE | \ |
| FILE_READ_ATTRIBUTES | \ |
| FILE_EXECUTE | \ |
| SYNCHRONIZE) |
| |
| #define FILE_GENERIC_READ \ |
| (STANDARD_RIGHTS_READ | \ |
| FILE_READ_DATA | \ |
| FILE_READ_ATTRIBUTES | \ |
| FILE_READ_EA | \ |
| SYNCHRONIZE) |
| |
| #define FILE_GENERIC_WRITE \ |
| (STANDARD_RIGHTS_WRITE | \ |
| FILE_WRITE_DATA | \ |
| FILE_WRITE_ATTRIBUTES | \ |
| FILE_WRITE_EA | \ |
| FILE_APPEND_DATA | \ |
| SYNCHRONIZE) |
| /* end winnt.h */ |
| |
| #define DIRECTORY_QUERY (0x0001) |
| #define DIRECTORY_TRAVERSE (0x0002) |
| #define DIRECTORY_CREATE_OBJECT (0x0004) |
| #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008) |
| #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF) |
| |
| /* Exported object types */ |
| extern NTOSAPI POBJECT_TYPE ExDesktopObjectType; |
| extern NTOSAPI POBJECT_TYPE ExEventObjectType; |
| extern NTOSAPI POBJECT_TYPE ExSemaphoreObjectType; |
| extern NTOSAPI POBJECT_TYPE ExWindowStationObjectType; |
| extern NTOSAPI POBJECT_TYPE IoAdapterObjectType; |
| extern NTOSAPI ULONG IoDeviceHandlerObjectSize; |
| extern NTOSAPI POBJECT_TYPE IoDeviceHandlerObjectType; |
| extern NTOSAPI POBJECT_TYPE IoDeviceObjectType; |
| extern NTOSAPI POBJECT_TYPE IoDriverObjectType; |
| extern NTOSAPI POBJECT_TYPE IoFileObjectType; |
| extern NTOSAPI POBJECT_TYPE LpcPortObjectType; |
| extern NTOSAPI POBJECT_TYPE MmSectionObjectType; |
| extern NTOSAPI POBJECT_TYPE SeTokenObjectType; |
| |
| extern NTOSAPI CCHAR KeNumberProcessors; |
| extern NTOSAPI PHAL_DISPATCH_TABLE HalDispatchTable; |
| extern NTOSAPI PHAL_PRIVATE_DISPATCH_TABLE HalPrivateDispatchTable; |
| |
| |
| /* |
| ** IRP function codes |
| */ |
| |
| #define IRP_MJ_CREATE 0x00 |
| #define IRP_MJ_CREATE_NAMED_PIPE 0x01 |
| #define IRP_MJ_CLOSE 0x02 |
| #define IRP_MJ_READ 0x03 |
| #define IRP_MJ_WRITE 0x04 |
| #define IRP_MJ_QUERY_INFORMATION 0x05 |
| #define IRP_MJ_SET_INFORMATION 0x06 |
| #define IRP_MJ_QUERY_EA 0x07 |
| #define IRP_MJ_SET_EA 0x08 |
| #define IRP_MJ_FLUSH_BUFFERS 0x09 |
| #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a |
| #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b |
| #define IRP_MJ_DIRECTORY_CONTROL 0x0c |
| #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d |
| #define IRP_MJ_DEVICE_CONTROL 0x0e |
| #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f |
| #define IRP_MJ_SCSI 0x0f |
| #define IRP_MJ_SHUTDOWN 0x10 |
| #define IRP_MJ_LOCK_CONTROL 0x11 |
| #define IRP_MJ_CLEANUP 0x12 |
| #define IRP_MJ_CREATE_MAILSLOT 0x13 |
| #define IRP_MJ_QUERY_SECURITY 0x14 |
| #define IRP_MJ_SET_SECURITY 0x15 |
| #define IRP_MJ_POWER 0x16 |
| #define IRP_MJ_SYSTEM_CONTROL 0x17 |
| #define IRP_MJ_DEVICE_CHANGE 0x18 |
| #define IRP_MJ_QUERY_QUOTA 0x19 |
| #define IRP_MJ_SET_QUOTA 0x1a |
| #define IRP_MJ_PNP 0x1b |
| #define IRP_MJ_PNP_POWER 0x1b |
| #define IRP_MJ_MAXIMUM_FUNCTION 0x1b |
| |
| #define IRP_MN_QUERY_DIRECTORY 0x01 |
| #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02 |
| |
| #define IRP_MN_USER_FS_REQUEST 0x00 |
| #define IRP_MN_MOUNT_VOLUME 0x01 |
| #define IRP_MN_VERIFY_VOLUME 0x02 |
| #define IRP_MN_LOAD_FILE_SYSTEM 0x03 |
| #define IRP_MN_TRACK_LINK 0x04 |
| #define IRP_MN_KERNEL_CALL 0x04 |
| |
| #define IRP_MN_LOCK 0x01 |
| #define IRP_MN_UNLOCK_SINGLE 0x02 |
| #define IRP_MN_UNLOCK_ALL 0x03 |
| #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04 |
| |
| #define IRP_MN_NORMAL 0x00 |
| #define IRP_MN_DPC 0x01 |
| #define IRP_MN_MDL 0x02 |
| #define IRP_MN_COMPLETE 0x04 |
| #define IRP_MN_COMPRESSED 0x08 |
| |
| #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC) |
| #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL) |
| #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC) |
| |
| #define IRP_MN_SCSI_CLASS 0x01 |
| |
| #define IRP_MN_START_DEVICE 0x00 |
| #define IRP_MN_QUERY_REMOVE_DEVICE 0x01 |
| #define IRP_MN_REMOVE_DEVICE 0x02 |
| #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03 |
| #define IRP_MN_STOP_DEVICE 0x04 |
| #define IRP_MN_QUERY_STOP_DEVICE 0x05 |
| #define IRP_MN_CANCEL_STOP_DEVICE 0x06 |
| |
| #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07 |
| #define IRP_MN_QUERY_INTERFACE 0x08 |
| #define IRP_MN_QUERY_CAPABILITIES 0x09 |
| #define IRP_MN_QUERY_RESOURCES 0x0A |
| #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B |
| #define IRP_MN_QUERY_DEVICE_TEXT 0x0C |
| #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D |
| |
| #define IRP_MN_READ_CONFIG 0x0F |
| #define IRP_MN_WRITE_CONFIG 0x10 |
| #define IRP_MN_EJECT 0x11 |
| #define IRP_MN_SET_LOCK 0x12 |
| #define IRP_MN_QUERY_ID 0x13 |
| #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14 |
| #define IRP_MN_QUERY_BUS_INFORMATION 0x15 |
| #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16 |
| #define IRP_MN_SURPRISE_REMOVAL 0x17 |
| #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18 |
| |
| #define IRP_MN_WAIT_WAKE 0x00 |
| #define IRP_MN_POWER_SEQUENCE 0x01 |
| #define IRP_MN_SET_POWER 0x02 |
| #define IRP_MN_QUERY_POWER 0x03 |
| |
| #define IRP_MN_QUERY_ALL_DATA 0x00 |
| #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01 |
| #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02 |
| #define IRP_MN_CHANGE_SINGLE_ITEM 0x03 |
| #define IRP_MN_ENABLE_EVENTS 0x04 |
| #define IRP_MN_DISABLE_EVENTS 0x05 |
| #define IRP_MN_ENABLE_COLLECTION 0x06 |
| #define IRP_MN_DISABLE_COLLECTION 0x07 |
| #define IRP_MN_REGINFO 0x08 |
| #define IRP_MN_EXECUTE_METHOD 0x09 |
| |
| #define IRP_MN_REGINFO_EX 0x0b |
| |
| typedef enum _IO_ALLOCATION_ACTION { |
| KeepObject = 1, |
| DeallocateObject, |
| DeallocateObjectKeepRegisters |
| } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION; |
| |
| typedef IO_ALLOCATION_ACTION |
| (DDKAPI *PDRIVER_CONTROL)( |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject, |
| /*IN*/ struct _IRP *Irp, |
| /*IN*/ PVOID MapRegisterBase, |
| /*IN*/ PVOID Context); |
| |
| typedef VOID |
| (DDKAPI *PDRIVER_LIST_CONTROL)( |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject, |
| /*IN*/ struct _IRP *Irp, |
| /*IN*/ struct _SCATTER_GATHER_LIST *ScatterGather, |
| /*IN*/ PVOID Context); |
| |
| typedef NTSTATUS |
| (DDKAPI *PDRIVER_ADD_DEVICE)( |
| /*IN*/ struct _DRIVER_OBJECT *DriverObject, |
| /*IN*/ struct _DEVICE_OBJECT *PhysicalDeviceObject); |
| |
| typedef NTSTATUS |
| (DDKAPI *PIO_COMPLETION_ROUTINE)( |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject, |
| /*IN*/ struct _IRP *Irp, |
| /*IN*/ PVOID Context); |
| |
| typedef VOID |
| (DDKAPI *PDRIVER_CANCEL)( |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject, |
| /*IN*/ struct _IRP *Irp); |
| |
| typedef VOID |
| (DDKAPI *PKDEFERRED_ROUTINE)( |
| /*IN*/ struct _KDPC *Dpc, |
| /*IN*/ PVOID DeferredContext, |
| /*IN*/ PVOID SystemArgument1, |
| /*IN*/ PVOID SystemArgument2); |
| |
| typedef NTSTATUS |
| (DDKAPI *PDRIVER_DISPATCH)( |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject, |
| /*IN*/ struct _IRP *Irp); |
| |
| typedef VOID |
| (DDKAPI *PIO_DPC_ROUTINE)( |
| /*IN*/ struct _KDPC *Dpc, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject, |
| /*IN*/ struct _IRP *Irp, |
| /*IN*/ PVOID Context); |
| |
| typedef NTSTATUS |
| (DDKAPI *PMM_DLL_INITIALIZE)( |
| /*IN*/ PUNICODE_STRING RegistryPath); |
| |
| typedef NTSTATUS |
| (DDKAPI *PMM_DLL_UNLOAD)( |
| VOID); |
| |
| typedef NTSTATUS |
| (DDKAPI *PDRIVER_ENTRY)( |
| /*IN*/ struct _DRIVER_OBJECT *DriverObject, |
| /*IN*/ PUNICODE_STRING RegistryPath); |
| |
| typedef NTSTATUS |
| (DDKAPI *PDRIVER_INITIALIZE)( |
| /*IN*/ struct _DRIVER_OBJECT *DriverObject, |
| /*IN*/ PUNICODE_STRING RegistryPath); |
| |
| typedef BOOLEAN |
| (DDKAPI *PKSERVICE_ROUTINE)( |
| /*IN*/ struct _KINTERRUPT *Interrupt, |
| /*IN*/ PVOID ServiceContext); |
| |
| typedef VOID |
| (DDKAPI *PIO_TIMER_ROUTINE)( |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject, |
| /*IN*/ PVOID Context); |
| |
| typedef VOID |
| (DDKAPI *PDRIVER_REINITIALIZE)( |
| /*IN*/ struct _DRIVER_OBJECT *DriverObject, |
| /*IN*/ PVOID Context, |
| /*IN*/ ULONG Count); |
| |
| typedef NTSTATUS |
| (DDKAPI *PDRIVER_STARTIO)( |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject, |
| /*IN*/ struct _IRP *Irp); |
| |
| typedef BOOLEAN |
| (DDKAPI *PKSYNCHRONIZE_ROUTINE)( |
| /*IN*/ PVOID SynchronizeContext); |
| |
| typedef VOID |
| (DDKAPI *PDRIVER_UNLOAD)( |
| /*IN*/ struct _DRIVER_OBJECT *DriverObject); |
| |
| |
| |
| /* |
| ** Plug and Play structures |
| */ |
| |
| typedef VOID DDKAPI |
| (*PINTERFACE_REFERENCE)( |
| PVOID Context); |
| |
| typedef VOID DDKAPI |
| (*PINTERFACE_DEREFERENCE)( |
| PVOID Context); |
| |
| typedef BOOLEAN DDKAPI |
| (*PTRANSLATE_BUS_ADDRESS)( |
| /*IN*/ PVOID Context, |
| /*IN*/ PHYSICAL_ADDRESS BusAddress, |
| /*IN*/ ULONG Length, |
| /*IN OUT*/ PULONG AddressSpace, |
| /*OUT*/ PPHYSICAL_ADDRESS TranslatedAddress); |
| |
| typedef struct _DMA_ADAPTER* DDKAPI |
| (*PGET_DMA_ADAPTER)( |
| /*IN*/ PVOID Context, |
| /*IN*/ struct _DEVICE_DESCRIPTION *DeviceDescriptor, |
| /*OUT*/ PULONG NumberOfMapRegisters); |
| |
| typedef ULONG DDKAPI |
| (*PGET_SET_DEVICE_DATA)( |
| /*IN*/ PVOID Context, |
| /*IN*/ ULONG DataType, |
| /*IN*/ PVOID Buffer, |
| /*IN*/ ULONG Offset, |
| /*IN*/ ULONG Length); |
| |
| typedef union _POWER_STATE { |
| SYSTEM_POWER_STATE SystemState; |
| DEVICE_POWER_STATE DeviceState; |
| } POWER_STATE, *PPOWER_STATE; |
| |
| typedef enum _POWER_STATE_TYPE { |
| SystemPowerState, |
| DevicePowerState |
| } POWER_STATE_TYPE, *PPOWER_STATE_TYPE; |
| |
| typedef struct _BUS_INTERFACE_STANDARD { |
| USHORT Size; |
| USHORT Version; |
| PVOID Context; |
| PINTERFACE_REFERENCE InterfaceReference; |
| PINTERFACE_DEREFERENCE InterfaceDereference; |
| PTRANSLATE_BUS_ADDRESS TranslateBusAddress; |
| PGET_DMA_ADAPTER GetDmaAdapter; |
| PGET_SET_DEVICE_DATA SetBusData; |
| PGET_SET_DEVICE_DATA GetBusData; |
| } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD; |
| |
| typedef struct _DEVICE_CAPABILITIES { |
| USHORT Size; |
| USHORT Version; |
| ULONG DeviceD1 : 1; |
| ULONG DeviceD2 : 1; |
| ULONG LockSupported : 1; |
| ULONG EjectSupported : 1; |
| ULONG Removable : 1; |
| ULONG DockDevice : 1; |
| ULONG UniqueID : 1; |
| ULONG SilentInstall : 1; |
| ULONG RawDeviceOK : 1; |
| ULONG SurpriseRemovalOK : 1; |
| ULONG WakeFromD0 : 1; |
| ULONG WakeFromD1 : 1; |
| ULONG WakeFromD2 : 1; |
| ULONG WakeFromD3 : 1; |
| ULONG HardwareDisabled : 1; |
| ULONG NonDynamic : 1; |
| ULONG WarmEjectSupported : 1; |
| ULONG NoDisplayInUI : 1; |
| ULONG Reserved : 14; |
| ULONG Address; |
| ULONG UINumber; |
| DEVICE_POWER_STATE DeviceState[PowerSystemMaximum]; |
| SYSTEM_POWER_STATE SystemWake; |
| DEVICE_POWER_STATE DeviceWake; |
| ULONG D1Latency; |
| ULONG D2Latency; |
| ULONG D3Latency; |
| } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES; |
| |
| typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION { |
| USHORT Version; |
| USHORT Size; |
| GUID Event; |
| GUID InterfaceClassGuid; |
| PUNICODE_STRING SymbolicLinkName; |
| } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION; |
| |
| typedef struct _HWPROFILE_CHANGE_NOTIFICATION { |
| USHORT Version; |
| USHORT Size; |
| GUID Event; |
| } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION; |
| |
| #undef INTERFACE |
| |
| typedef struct _INTERFACE { |
| USHORT Size; |
| USHORT Version; |
| PVOID Context; |
| PINTERFACE_REFERENCE InterfaceReference; |
| PINTERFACE_DEREFERENCE InterfaceDereference; |
| } INTERFACE, *PINTERFACE; |
| |
| typedef struct _PLUGPLAY_NOTIFICATION_HEADER { |
| USHORT Version; |
| USHORT Size; |
| GUID Event; |
| } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER; |
| |
| typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE; |
| |
| /* PNP_DEVICE_STATE */ |
| |
| #define PNP_DEVICE_DISABLED 0x00000001 |
| #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002 |
| #define PNP_DEVICE_FAILED 0x00000004 |
| #define PNP_DEVICE_REMOVED 0x00000008 |
| #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010 |
| #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020 |
| |
| typedef struct _TARGET_DEVICE_CUSTOM_NOTIFICATION { |
| USHORT Version; |
| USHORT Size; |
| GUID Event; |
| struct _FILE_OBJECT *FileObject; |
| LONG NameBufferOffset; |
| UCHAR CustomDataBuffer[1]; |
| } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION; |
| |
| typedef struct _TARGET_DEVICE_REMOVAL_NOTIFICATION { |
| USHORT Version; |
| USHORT Size; |
| GUID Event; |
| struct _FILE_OBJECT *FileObject; |
| } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION; |
| |
| typedef enum _BUS_QUERY_ID_TYPE { |
| BusQueryDeviceID, |
| BusQueryHardwareIDs, |
| BusQueryCompatibleIDs, |
| BusQueryInstanceID, |
| BusQueryDeviceSerialNumber |
| } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE; |
| |
| typedef enum _DEVICE_TEXT_TYPE { |
| DeviceTextDescription, |
| DeviceTextLocationInformation |
| } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE; |
| |
| typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE { |
| DeviceUsageTypeUndefined, |
| DeviceUsageTypePaging, |
| DeviceUsageTypeHibernation, |
| DeviceUsageTypeDumpFile |
| } DEVICE_USAGE_NOTIFICATION_TYPE; |
| |
| typedef struct _POWER_SEQUENCE { |
| ULONG SequenceD1; |
| ULONG SequenceD2; |
| ULONG SequenceD3; |
| } POWER_SEQUENCE, *PPOWER_SEQUENCE; |
| |
| typedef enum { |
| DevicePropertyDeviceDescription, |
| DevicePropertyHardwareID, |
| DevicePropertyCompatibleIDs, |
| DevicePropertyBootConfiguration, |
| DevicePropertyBootConfigurationTranslated, |
| DevicePropertyClassName, |
| DevicePropertyClassGuid, |
| DevicePropertyDriverKeyName, |
| DevicePropertyManufacturer, |
| DevicePropertyFriendlyName, |
| DevicePropertyLocationInformation, |
| DevicePropertyPhysicalDeviceObjectName, |
| DevicePropertyBusTypeGuid, |
| DevicePropertyLegacyBusType, |
| DevicePropertyBusNumber, |
| DevicePropertyEnumeratorName, |
| DevicePropertyAddress, |
| DevicePropertyUINumber, |
| DevicePropertyInstallState, |
| DevicePropertyRemovalPolicy |
| } DEVICE_REGISTRY_PROPERTY; |
| |
| typedef enum _IO_NOTIFICATION_EVENT_CATEGORY { |
| EventCategoryReserved, |
| EventCategoryHardwareProfileChange, |
| EventCategoryDeviceInterfaceChange, |
| EventCategoryTargetDeviceChange |
| } IO_NOTIFICATION_EVENT_CATEGORY; |
| |
| #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001 |
| |
| typedef NTSTATUS DDKAPI |
| (*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)( |
| /*IN*/ PVOID NotificationStructure, |
| /*IN*/ PVOID Context); |
| |
| typedef VOID DDKAPI |
| (*PDEVICE_CHANGE_COMPLETE_CALLBACK)( |
| /*IN*/ PVOID Context); |
| |
| |
| |
| /* |
| ** System structures |
| */ |
| |
| #define SYMBOLIC_LINK_QUERY 0x0001 |
| #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1) |
| |
| /* also in winnt,h */ |
| #define DUPLICATE_CLOSE_SOURCE 0x00000001 |
| #define DUPLICATE_SAME_ACCESS 0x00000002 |
| #define DUPLICATE_SAME_ATTRIBUTES 0x00000004 |
| /* end winnt.h */ |
| |
| typedef struct _OBJECT_NAME_INFORMATION { |
| UNICODE_STRING Name; |
| } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; |
| |
| typedef VOID DDKAPI |
| (*PIO_APC_ROUTINE)( |
| /*IN*/ PVOID ApcContext, |
| /*IN*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ ULONG Reserved); |
| |
| typedef struct _IO_STATUS_BLOCK { |
| _ANONYMOUS_UNION union { |
| NTSTATUS Status; |
| PVOID Pointer; |
| } DUMMYUNIONNAME; |
| ULONG_PTR Information; |
| } IO_STATUS_BLOCK; |
| |
| typedef VOID DDKAPI |
| (*PKNORMAL_ROUTINE)( |
| /*IN*/ PVOID NormalContext, |
| /*IN*/ PVOID SystemArgument1, |
| /*IN*/ PVOID SystemArgument2); |
| |
| typedef VOID DDKAPI |
| (*PKKERNEL_ROUTINE)( |
| /*IN*/ struct _KAPC *Apc, |
| /*IN OUT*/ PKNORMAL_ROUTINE *NormalRoutine, |
| /*IN OUT*/ PVOID *NormalContext, |
| /*IN OUT*/ PVOID *SystemArgument1, |
| /*IN OUT*/ PVOID *SystemArgument2); |
| |
| typedef VOID DDKAPI |
| (*PKRUNDOWN_ROUTINE)( |
| /*IN*/ struct _KAPC *Apc); |
| |
| typedef BOOLEAN DDKAPI |
| (*PKTRANSFER_ROUTINE)( |
| VOID); |
| |
| typedef struct _KAPC { |
| CSHORT Type; |
| CSHORT Size; |
| ULONG Spare0; |
| struct _KTHREAD *Thread; |
| LIST_ENTRY ApcListEntry; |
| PKKERNEL_ROUTINE KernelRoutine; |
| PKRUNDOWN_ROUTINE RundownRoutine; |
| PKNORMAL_ROUTINE NormalRoutine; |
| PVOID NormalContext; |
| PVOID SystemArgument1; |
| PVOID SystemArgument2; |
| CCHAR ApcStateIndex; |
| KPROCESSOR_MODE ApcMode; |
| BOOLEAN Inserted; |
| } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC; |
| |
| typedef struct _KDEVICE_QUEUE { |
| CSHORT Type; |
| CSHORT Size; |
| LIST_ENTRY DeviceListHead; |
| KSPIN_LOCK Lock; |
| BOOLEAN Busy; |
| } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE; |
| |
| typedef struct _KDEVICE_QUEUE_ENTRY { |
| LIST_ENTRY DeviceListEntry; |
| ULONG SortKey; |
| BOOLEAN Inserted; |
| } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY, |
| *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY; |
| |
| #define LOCK_QUEUE_WAIT 1 |
| #define LOCK_QUEUE_OWNER 2 |
| |
| typedef enum _KSPIN_LOCK_QUEUE_NUMBER { |
| LockQueueDispatcherLock, |
| LockQueueContextSwapLock, |
| LockQueuePfnLock, |
| LockQueueSystemSpaceLock, |
| LockQueueVacbLock, |
| LockQueueMasterLock, |
| LockQueueNonPagedPoolLock, |
| LockQueueIoCancelLock, |
| LockQueueWorkQueueLock, |
| LockQueueIoVpbLock, |
| LockQueueIoDatabaseLock, |
| LockQueueIoCompletionLock, |
| LockQueueNtfsStructLock, |
| LockQueueAfdWorkQueueLock, |
| LockQueueBcbLock, |
| LockQueueMaximumLock |
| } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER; |
| |
| typedef struct _KSPIN_LOCK_QUEUE { |
| struct _KSPIN_LOCK_QUEUE *VOLATILE Next; |
| PKSPIN_LOCK VOLATILE Lock; |
| } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE; |
| |
| typedef struct _KLOCK_QUEUE_HANDLE { |
| KSPIN_LOCK_QUEUE LockQueue; |
| KIRQL OldIrql; |
| } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE; |
| |
| typedef struct _KDPC { |
| CSHORT Type; |
| UCHAR Number; |
| UCHAR Importance; |
| LIST_ENTRY DpcListEntry; |
| PKDEFERRED_ROUTINE DeferredRoutine; |
| PVOID DeferredContext; |
| PVOID SystemArgument1; |
| PVOID SystemArgument2; |
| PULONG_PTR Lock; |
| } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC; |
| |
| typedef struct _WAIT_CONTEXT_BLOCK { |
| KDEVICE_QUEUE_ENTRY WaitQueueEntry; |
| struct _DRIVER_CONTROL *DeviceRoutine; |
| PVOID DeviceContext; |
| ULONG NumberOfMapRegisters; |
| PVOID DeviceObject; |
| PVOID CurrentIrp; |
| PKDPC BufferChainingDpc; |
| } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK; |
| |
| typedef struct _DISPATCHER_HEADER { |
| UCHAR Type; |
| UCHAR Absolute; |
| UCHAR Size; |
| UCHAR Inserted; |
| LONG SignalState; |
| LIST_ENTRY WaitListHead; |
| } DISPATCHER_HEADER, *PDISPATCHER_HEADER; |
| |
| typedef struct _KEVENT { |
| DISPATCHER_HEADER Header; |
| } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT; |
| |
| typedef struct _KSEMAPHORE { |
| DISPATCHER_HEADER Header; |
| LONG Limit; |
| } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE; |
| |
| typedef struct _FAST_MUTEX { |
| LONG Count; |
| struct _KTHREAD *Owner; |
| ULONG Contention; |
| KEVENT Event; |
| ULONG OldIrql; |
| } FAST_MUTEX, *PFAST_MUTEX; |
| |
| typedef struct _KTIMER { |
| DISPATCHER_HEADER Header; |
| ULARGE_INTEGER DueTime; |
| LIST_ENTRY TimerListEntry; |
| struct _KDPC *Dpc; |
| LONG Period; |
| } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER; |
| |
| typedef struct _KMUTANT { |
| DISPATCHER_HEADER Header; |
| LIST_ENTRY MutantListEntry; |
| struct _KTHREAD *RESTRICTED_POINTER OwnerThread; |
| BOOLEAN Abandoned; |
| UCHAR ApcDisable; |
| } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX; |
| |
| typedef enum _TIMER_TYPE { |
| NotificationTimer, |
| SynchronizationTimer |
| } TIMER_TYPE; |
| |
| #define EVENT_INCREMENT 1 |
| #define IO_NO_INCREMENT 0 |
| #define IO_CD_ROM_INCREMENT 1 |
| #define IO_DISK_INCREMENT 1 |
| #define IO_KEYBOARD_INCREMENT 6 |
| #define IO_MAILSLOT_INCREMENT 2 |
| #define IO_MOUSE_INCREMENT 6 |
| #define IO_NAMED_PIPE_INCREMENT 2 |
| #define IO_NETWORK_INCREMENT 2 |
| #define IO_PARALLEL_INCREMENT 1 |
| #define IO_SERIAL_INCREMENT 2 |
| #define IO_SOUND_INCREMENT 8 |
| #define IO_VIDEO_INCREMENT 1 |
| #define SEMAPHORE_INCREMENT 1 |
| |
| typedef struct _IRP { |
| CSHORT Type; |
| USHORT Size; |
| struct _MDL *MdlAddress; |
| ULONG Flags; |
| union { |
| struct _IRP *MasterIrp; |
| LONG IrpCount; |
| PVOID SystemBuffer; |
| } AssociatedIrp; |
| LIST_ENTRY ThreadListEntry; |
| IO_STATUS_BLOCK IoStatus; |
| KPROCESSOR_MODE RequestorMode; |
| BOOLEAN PendingReturned; |
| CHAR StackCount; |
| CHAR CurrentLocation; |
| BOOLEAN Cancel; |
| KIRQL CancelIrql; |
| CCHAR ApcEnvironment; |
| UCHAR AllocationFlags; |
| PIO_STATUS_BLOCK UserIosb; |
| PKEVENT UserEvent; |
| union { |
| struct { |
| PIO_APC_ROUTINE UserApcRoutine; |
| PVOID UserApcContext; |
| } AsynchronousParameters; |
| LARGE_INTEGER AllocationSize; |
| } Overlay; |
| PDRIVER_CANCEL CancelRoutine; |
| PVOID UserBuffer; |
| union { |
| struct { |
| _ANONYMOUS_UNION union { |
| KDEVICE_QUEUE_ENTRY DeviceQueueEntry; |
| _ANONYMOUS_STRUCT struct { |
| PVOID DriverContext[4]; |
| } DUMMYSTRUCTNAME; |
| } DUMMYUNIONNAME; |
| PETHREAD Thread; |
| PCHAR AuxiliaryBuffer; |
| _ANONYMOUS_STRUCT struct { |
| LIST_ENTRY ListEntry; |
| _ANONYMOUS_UNION union { |
| struct _IO_STACK_LOCATION *CurrentStackLocation; |
| ULONG PacketType; |
| } DUMMYUNIONNAME; |
| } DUMMYSTRUCTNAME; |
| struct _FILE_OBJECT *OriginalFileObject; |
| } Overlay; |
| KAPC Apc; |
| PVOID CompletionKey; |
| } Tail; |
| } IRP; |
| typedef struct _IRP *PIRP; |
| |
| /* IRP.Flags */ |
| |
| #define SL_FORCE_ACCESS_CHECK 0x01 |
| #define SL_OPEN_PAGING_FILE 0x02 |
| #define SL_OPEN_TARGET_DIRECTORY 0x04 |
| #define SL_CASE_SENSITIVE 0x80 |
| |
| #define SL_KEY_SPECIFIED 0x01 |
| #define SL_OVERRIDE_VERIFY_VOLUME 0x02 |
| #define SL_WRITE_THROUGH 0x04 |
| #define SL_FT_SEQUENTIAL_WRITE 0x08 |
| |
| #define SL_FAIL_IMMEDIATELY 0x01 |
| #define SL_EXCLUSIVE_LOCK 0x02 |
| |
| #define SL_RESTART_SCAN 0x01 |
| #define SL_RETURN_SINGLE_ENTRY 0x02 |
| #define SL_INDEX_SPECIFIED 0x04 |
| |
| #define SL_WATCH_TREE 0x01 |
| |
| #define SL_ALLOW_RAW_MOUNT 0x01 |
| |
| #define CTL_CODE(DeviceType, Function, Method, Access)( \ |
| ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) |
| |
| #define DEVICE_TYPE_FROM_CTL_CODE(ctl) (((ULONG) (ctl & 0xffff0000)) >> 16) |
| |
| enum |
| { |
| IRP_NOCACHE = 0x1, |
| IRP_PAGING_IO = 0x2, |
| IRP_MOUNT_COMPLETION = 0x2, |
| IRP_SYNCHRONOUS_API = 0x4, |
| IRP_ASSOCIATED_IRP = 0x8, |
| IRP_BUFFERED_IO = 0x10, |
| IRP_DEALLOCATE_BUFFER = 0x20, |
| IRP_INPUT_OPERATION = 0x40, |
| IRP_SYNCHRONOUS_PAGING_IO = 0x40, |
| IRP_CREATE_OPERATION = 0x80, |
| IRP_READ_OPERATION = 0x100, |
| IRP_WRITE_OPERATION = 0x200, |
| IRP_CLOSE_OPERATION = 0x400, |
| IRP_DEFER_IO_COMPLETION = 0x800, |
| IRP_OB_QUERY_NAME = 0x1000, |
| IRP_HOLD_DEVICE_QUEUE = 0x2000, |
| IRP_RETRY_IO_COMPLETION = 0x4000 |
| }; |
| |
| |
| typedef struct _DRIVE_LAYOUT_INFORMATION_MBR { |
| ULONG Signature; |
| } DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR; |
| |
| typedef struct _DRIVE_LAYOUT_INFORMATION_GPT { |
| GUID DiskId; |
| LARGE_INTEGER StartingUsableOffset; |
| LARGE_INTEGER UsableLength; |
| ULONG MaxPartitionCount; |
| } DRIVE_LAYOUT_INFORMATION_GPT, *PDRIVE_LAYOUT_INFORMATION_GPT; |
| |
| typedef struct _PARTITION_INFORMATION_MBR { |
| UCHAR PartitionType; |
| BOOLEAN BootIndicator; |
| BOOLEAN RecognizedPartition; |
| ULONG HiddenSectors; |
| } PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR; |
| |
| |
| typedef struct _BOOTDISK_INFORMATION { |
| LONGLONG BootPartitionOffset; |
| LONGLONG SystemPartitionOffset; |
| ULONG BootDeviceSignature; |
| ULONG SystemDeviceSignature; |
| } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION; |
| |
| typedef struct _BOOTDISK_INFORMATION_EX { |
| LONGLONG BootPartitionOffset; |
| LONGLONG SystemPartitionOffset; |
| ULONG BootDeviceSignature; |
| ULONG SystemDeviceSignature; |
| GUID BootDeviceGuid; |
| GUID SystemDeviceGuid; |
| BOOLEAN BootDeviceIsGpt; |
| BOOLEAN SystemDeviceIsGpt; |
| } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX; |
| |
| typedef struct _EISA_MEMORY_TYPE { |
| UCHAR ReadWrite : 1; |
| UCHAR Cached : 1; |
| UCHAR Reserved0 : 1; |
| UCHAR Type : 2; |
| UCHAR Shared : 1; |
| UCHAR Reserved1 : 1; |
| UCHAR MoreEntries : 1; |
| } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE; |
| |
| #include <pshpack1.h> |
| typedef struct _EISA_MEMORY_CONFIGURATION { |
| EISA_MEMORY_TYPE ConfigurationByte; |
| UCHAR DataSize; |
| USHORT AddressLowWord; |
| UCHAR AddressHighByte; |
| USHORT MemorySize; |
| } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION; |
| #include <poppack.h> |
| |
| typedef struct _EISA_IRQ_DESCRIPTOR { |
| UCHAR Interrupt : 4; |
| UCHAR Reserved : 1; |
| UCHAR LevelTriggered : 1; |
| UCHAR Shared : 1; |
| UCHAR MoreEntries : 1; |
| } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR; |
| |
| typedef struct _EISA_IRQ_CONFIGURATION { |
| EISA_IRQ_DESCRIPTOR ConfigurationByte; |
| UCHAR Reserved; |
| } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION; |
| |
| typedef struct _DMA_CONFIGURATION_BYTE0 { |
| UCHAR Channel : 3; |
| UCHAR Reserved : 3; |
| UCHAR Shared : 1; |
| UCHAR MoreEntries : 1; |
| } DMA_CONFIGURATION_BYTE0; |
| |
| typedef struct _DMA_CONFIGURATION_BYTE1 { |
| UCHAR Reserved0 : 2; |
| UCHAR TransferSize : 2; |
| UCHAR Timing : 2; |
| UCHAR Reserved1 : 2; |
| } DMA_CONFIGURATION_BYTE1; |
| |
| typedef struct _EISA_DMA_CONFIGURATION { |
| DMA_CONFIGURATION_BYTE0 ConfigurationByte0; |
| DMA_CONFIGURATION_BYTE1 ConfigurationByte1; |
| } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION; |
| |
| #include <pshpack1.h> |
| typedef struct _EISA_PORT_DESCRIPTOR { |
| UCHAR NumberPorts : 5; |
| UCHAR Reserved : 1; |
| UCHAR Shared : 1; |
| UCHAR MoreEntries : 1; |
| } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR; |
| |
| typedef struct _EISA_PORT_CONFIGURATION { |
| EISA_PORT_DESCRIPTOR Configuration; |
| USHORT PortAddress; |
| } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION; |
| #include <poppack.h> |
| |
| typedef struct _CM_EISA_FUNCTION_INFORMATION { |
| ULONG CompressedId; |
| UCHAR IdSlotFlags1; |
| UCHAR IdSlotFlags2; |
| UCHAR MinorRevision; |
| UCHAR MajorRevision; |
| UCHAR Selections[26]; |
| UCHAR FunctionFlags; |
| UCHAR TypeString[80]; |
| EISA_MEMORY_CONFIGURATION EisaMemory[9]; |
| EISA_IRQ_CONFIGURATION EisaIrq[7]; |
| EISA_DMA_CONFIGURATION EisaDma[4]; |
| EISA_PORT_CONFIGURATION EisaPort[20]; |
| UCHAR InitializationData[60]; |
| } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION; |
| |
| /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags */ |
| |
| #define EISA_FUNCTION_ENABLED 0x80 |
| #define EISA_FREE_FORM_DATA 0x40 |
| #define EISA_HAS_PORT_INIT_ENTRY 0x20 |
| #define EISA_HAS_PORT_RANGE 0x10 |
| #define EISA_HAS_DMA_ENTRY 0x08 |
| #define EISA_HAS_IRQ_ENTRY 0x04 |
| #define EISA_HAS_MEMORY_ENTRY 0x02 |
| #define EISA_HAS_TYPE_ENTRY 0x01 |
| #define EISA_HAS_INFORMATION \ |
| (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \ |
| + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY) |
| |
| typedef struct _CM_EISA_SLOT_INFORMATION { |
| UCHAR ReturnCode; |
| UCHAR ReturnFlags; |
| UCHAR MajorRevision; |
| UCHAR MinorRevision; |
| USHORT Checksum; |
| UCHAR NumberFunctions; |
| UCHAR FunctionInformation; |
| ULONG CompressedId; |
| } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION; |
| |
| /* CM_EISA_SLOT_INFORMATION.ReturnCode */ |
| |
| #define EISA_INVALID_SLOT 0x80 |
| #define EISA_INVALID_FUNCTION 0x81 |
| #define EISA_INVALID_CONFIGURATION 0x82 |
| #define EISA_EMPTY_SLOT 0x83 |
| #define EISA_INVALID_BIOS_CALL 0x86 |
| |
| typedef struct _CM_FLOPPY_DEVICE_DATA { |
| USHORT Version; |
| USHORT Revision; |
| CHAR Size[8]; |
| ULONG MaxDensity; |
| ULONG MountDensity; |
| UCHAR StepRateHeadUnloadTime; |
| UCHAR HeadLoadTime; |
| UCHAR MotorOffTime; |
| UCHAR SectorLengthCode; |
| UCHAR SectorPerTrack; |
| UCHAR ReadWriteGapLength; |
| UCHAR DataTransferLength; |
| UCHAR FormatGapLength; |
| UCHAR FormatFillCharacter; |
| UCHAR HeadSettleTime; |
| UCHAR MotorSettleTime; |
| UCHAR MaximumTrackValue; |
| UCHAR DataTransferRate; |
| } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA; |
| |
| typedef enum _INTERFACE_TYPE { |
| InterfaceTypeUndefined = -1, |
| Internal, |
| Isa, |
| Eisa, |
| MicroChannel, |
| TurboChannel, |
| PCIBus, |
| VMEBus, |
| NuBus, |
| PCMCIABus, |
| CBus, |
| MPIBus, |
| MPSABus, |
| ProcessorInternal, |
| InternalPowerBus, |
| PNPISABus, |
| PNPBus, |
| MaximumInterfaceType |
| } INTERFACE_TYPE, *PINTERFACE_TYPE; |
| |
| typedef struct _PNP_BUS_INFORMATION { |
| GUID BusTypeGuid; |
| INTERFACE_TYPE LegacyBusType; |
| ULONG BusNumber; |
| } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION; |
| |
| #include <pshpack1.h> |
| typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR { |
| UCHAR Type; |
| UCHAR ShareDisposition; |
| USHORT Flags; |
| union { |
| struct { |
| PHYSICAL_ADDRESS Start; |
| ULONG Length; |
| } Generic; |
| struct { |
| PHYSICAL_ADDRESS Start; |
| ULONG Length; |
| } Port; |
| struct { |
| ULONG Level; |
| ULONG Vector; |
| ULONG Affinity; |
| } Interrupt; |
| struct { |
| PHYSICAL_ADDRESS Start; |
| ULONG Length; |
| } Memory; |
| struct { |
| ULONG Channel; |
| ULONG Port; |
| ULONG Reserved1; |
| } Dma; |
| struct { |
| ULONG Data[3]; |
| } DevicePrivate; |
| struct { |
| ULONG Start; |
| ULONG Length; |
| ULONG Reserved; |
| } BusNumber; |
| struct { |
| ULONG DataSize; |
| ULONG Reserved1; |
| ULONG Reserved2; |
| } DeviceSpecificData; |
| } u; |
| } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR; |
| |
| /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */ |
| |
| #define CmResourceTypeNull 0 |
| #define CmResourceTypePort 1 |
| #define CmResourceTypeInterrupt 2 |
| #define CmResourceTypeMemory 3 |
| #define CmResourceTypeDma 4 |
| #define CmResourceTypeDeviceSpecific 5 |
| #define CmResourceTypeBusNumber 6 |
| #define CmResourceTypeMaximum 7 |
| #define CmResourceTypeNonArbitrated 128 |
| #define CmResourceTypeConfigData 128 |
| #define CmResourceTypeDevicePrivate 129 |
| #define CmResourceTypePcCardConfig 130 |
| #define CmResourceTypeMfCardConfig 131 |
| |
| /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */ |
| |
| typedef enum _CM_SHARE_DISPOSITION { |
| CmResourceShareUndetermined, |
| CmResourceShareDeviceExclusive, |
| CmResourceShareDriverExclusive, |
| CmResourceShareShared |
| } CM_SHARE_DISPOSITION; |
| |
| /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */ |
| |
| #define CM_RESOURCE_PORT_MEMORY 0x0000 |
| #define CM_RESOURCE_PORT_IO 0x0001 |
| #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004 |
| #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008 |
| #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010 |
| #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020 |
| #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040 |
| #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080 |
| |
| /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */ |
| |
| #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000 |
| #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001 |
| |
| /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */ |
| |
| #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000 |
| #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001 |
| #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002 |
| #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004 |
| #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008 |
| #define CM_RESOURCE_MEMORY_24 0x0010 |
| #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020 |
| |
| /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */ |
| |
| #define CM_RESOURCE_DMA_8 0x0000 |
| #define CM_RESOURCE_DMA_16 0x0001 |
| #define CM_RESOURCE_DMA_32 0x0002 |
| #define CM_RESOURCE_DMA_8_AND_16 0x0004 |
| #define CM_RESOURCE_DMA_BUS_MASTER 0x0008 |
| #define CM_RESOURCE_DMA_TYPE_A 0x0010 |
| #define CM_RESOURCE_DMA_TYPE_B 0x0020 |
| #define CM_RESOURCE_DMA_TYPE_F 0x0040 |
| |
| typedef struct _CM_PARTIAL_RESOURCE_LIST { |
| USHORT Version; |
| USHORT Revision; |
| ULONG Count; |
| CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1]; |
| } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST; |
| |
| typedef struct _CM_FULL_RESOURCE_DESCRIPTOR { |
| INTERFACE_TYPE InterfaceType; |
| ULONG BusNumber; |
| CM_PARTIAL_RESOURCE_LIST PartialResourceList; |
| } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR; |
| |
| typedef struct _CM_RESOURCE_LIST { |
| ULONG Count; |
| CM_FULL_RESOURCE_DESCRIPTOR List[1]; |
| } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST; |
| |
| typedef struct _CM_INT13_DRIVE_PARAMETER { |
| USHORT DriveSelect; |
| ULONG MaxCylinders; |
| USHORT SectorsPerTrack; |
| USHORT MaxHeads; |
| USHORT NumberDrives; |
| } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER; |
| #include <poppack.h> |
| |
| typedef struct _CM_KEYBOARD_DEVICE_DATA { |
| USHORT Version; |
| USHORT Revision; |
| UCHAR Type; |
| UCHAR Subtype; |
| USHORT KeyboardFlags; |
| } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA; |
| |
| #define KEYBOARD_INSERT_ON 0x80 |
| #define KEYBOARD_CAPS_LOCK_ON 0x40 |
| #define KEYBOARD_NUM_LOCK_ON 0x20 |
| #define KEYBOARD_SCROLL_LOCK_ON 0x10 |
| #define KEYBOARD_ALT_KEY_DOWN 0x08 |
| #define KEYBOARD_CTRL_KEY_DOWN 0x04 |
| #define KEYBOARD_LEFT_SHIFT_DOWN 0x02 |
| #define KEYBOARD_RIGHT_SHIFT_DOWN 0x01 |
| |
| typedef struct _CM_MCA_POS_DATA { |
| USHORT AdapterId; |
| UCHAR PosData1; |
| UCHAR PosData2; |
| UCHAR PosData3; |
| UCHAR PosData4; |
| } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA; |
| |
| typedef struct CM_Power_Data_s { |
| ULONG PD_Size; |
| DEVICE_POWER_STATE PD_MostRecentPowerState; |
| ULONG PD_Capabilities; |
| ULONG PD_D1Latency; |
| ULONG PD_D2Latency; |
| ULONG PD_D3Latency; |
| DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum]; |
| } CM_POWER_DATA, *PCM_POWER_DATA; |
| |
| #define PDCAP_D0_SUPPORTED 0x00000001 |
| #define PDCAP_D1_SUPPORTED 0x00000002 |
| #define PDCAP_D2_SUPPORTED 0x00000004 |
| #define PDCAP_D3_SUPPORTED 0x00000008 |
| #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010 |
| #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020 |
| #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040 |
| #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080 |
| #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100 |
| |
| typedef struct _CM_SCSI_DEVICE_DATA { |
| USHORT Version; |
| USHORT Revision; |
| UCHAR HostIdentifier; |
| } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA; |
| |
| typedef struct _CM_SERIAL_DEVICE_DATA { |
| USHORT Version; |
| USHORT Revision; |
| ULONG BaudClock; |
| } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA; |
| |
| /* IO_RESOURCE_DESCRIPTOR.Option */ |
| |
| #define IO_RESOURCE_PREFERRED 0x01 |
| #define IO_RESOURCE_DEFAULT 0x02 |
| #define IO_RESOURCE_ALTERNATIVE 0x08 |
| |
| typedef struct _IO_RESOURCE_DESCRIPTOR { |
| UCHAR Option; |
| UCHAR Type; |
| UCHAR ShareDisposition; |
| UCHAR Spare1; |
| USHORT Flags; |
| USHORT Spare2; |
| union { |
| struct { |
| ULONG Length; |
| ULONG Alignment; |
| PHYSICAL_ADDRESS MinimumAddress; |
| PHYSICAL_ADDRESS MaximumAddress; |
| } Port; |
| struct { |
| ULONG Length; |
| ULONG Alignment; |
| PHYSICAL_ADDRESS MinimumAddress; |
| PHYSICAL_ADDRESS MaximumAddress; |
| } Memory; |
| struct { |
| ULONG MinimumVector; |
| ULONG MaximumVector; |
| } Interrupt; |
| struct { |
| ULONG MinimumChannel; |
| ULONG MaximumChannel; |
| } Dma; |
| struct { |
| ULONG Length; |
| ULONG Alignment; |
| PHYSICAL_ADDRESS MinimumAddress; |
| PHYSICAL_ADDRESS MaximumAddress; |
| } Generic; |
| struct { |
| ULONG Data[3]; |
| } DevicePrivate; |
| struct { |
| ULONG Length; |
| ULONG MinBusNumber; |
| ULONG MaxBusNumber; |
| ULONG Reserved; |
| } BusNumber; |
| struct { |
| ULONG Priority; |
| ULONG Reserved1; |
| ULONG Reserved2; |
| } ConfigData; |
| } u; |
| } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR; |
| |
| typedef struct _IO_RESOURCE_LIST { |
| USHORT Version; |
| USHORT Revision; |
| ULONG Count; |
| IO_RESOURCE_DESCRIPTOR Descriptors[1]; |
| } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST; |
| |
| typedef struct _IO_RESOURCE_REQUIREMENTS_LIST { |
| ULONG ListSize; |
| INTERFACE_TYPE InterfaceType; |
| ULONG BusNumber; |
| ULONG SlotNumber; |
| ULONG Reserved[3]; |
| ULONG AlternativeLists; |
| IO_RESOURCE_LIST List[1]; |
| } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST; |
| |
| typedef struct _CONTROLLER_OBJECT { |
| CSHORT Type; |
| CSHORT Size; |
| PVOID ControllerExtension; |
| KDEVICE_QUEUE DeviceWaitQueue; |
| ULONG Spare1; |
| LARGE_INTEGER Spare2; |
| } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT; |
| |
| typedef enum _DMA_WIDTH { |
| Width8Bits, |
| Width16Bits, |
| Width32Bits, |
| MaximumDmaWidth |
| } DMA_WIDTH, *PDMA_WIDTH; |
| |
| typedef enum _DMA_SPEED { |
| Compatible, |
| TypeA, |
| TypeB, |
| TypeC, |
| TypeF, |
| MaximumDmaSpeed |
| } DMA_SPEED, *PDMA_SPEED; |
| |
| /* DEVICE_DESCRIPTION.Version */ |
| |
| #define DEVICE_DESCRIPTION_VERSION 0x0000 |
| #define DEVICE_DESCRIPTION_VERSION1 0x0001 |
| #define DEVICE_DESCRIPTION_VERSION2 0x0002 |
| |
| typedef struct _DEVICE_DESCRIPTION { |
| ULONG Version; |
| BOOLEAN Master; |
| BOOLEAN ScatterGather; |
| BOOLEAN DemandMode; |
| BOOLEAN AutoInitialize; |
| BOOLEAN Dma32BitAddresses; |
| BOOLEAN IgnoreCount; |
| BOOLEAN Reserved1; |
| BOOLEAN Dma64BitAddresses; |
| ULONG BusNumber; |
| ULONG DmaChannel; |
| INTERFACE_TYPE InterfaceType; |
| DMA_WIDTH DmaWidth; |
| DMA_SPEED DmaSpeed; |
| ULONG MaximumLength; |
| ULONG DmaPort; |
| } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION; |
| |
| /* VPB.Flags */ |
| #define VPB_MOUNTED 0x0001 |
| #define VPB_LOCKED 0x0002 |
| #define VPB_PERSISTENT 0x0004 |
| #define VPB_REMOVE_PENDING 0x0008 |
| #define VPB_RAW_MOUNT 0x0010 |
| |
| #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR)) |
| |
| typedef struct _VPB { |
| CSHORT Type; |
| CSHORT Size; |
| USHORT Flags; |
| USHORT VolumeLabelLength; |
| struct _DEVICE_OBJECT *DeviceObject; |
| struct _DEVICE_OBJECT *RealDevice; |
| ULONG SerialNumber; |
| ULONG ReferenceCount; |
| WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)]; |
| } VPB, *PVPB; |
| |
| /* DEVICE_OBJECT.Flags */ |
| |
| #define DO_VERIFY_VOLUME 0x00000002 |
| #define DO_BUFFERED_IO 0x00000004 |
| #define DO_EXCLUSIVE 0x00000008 |
| #define DO_DIRECT_IO 0x00000010 |
| #define DO_MAP_IO_BUFFER 0x00000020 |
| #define DO_DEVICE_HAS_NAME 0x00000040 |
| #define DO_DEVICE_INITIALIZING 0x00000080 |
| #define DO_SYSTEM_BOOT_PARTITION 0x00000100 |
| #define DO_LONG_TERM_REQUESTS 0x00000200 |
| #define DO_NEVER_LAST_DEVICE 0x00000400 |
| #define DO_SHUTDOWN_REGISTERED 0x00000800 |
| #define DO_BUS_ENUMERATED_DEVICE 0x00001000 |
| #define DO_POWER_PAGABLE 0x00002000 |
| #define DO_POWER_INRUSH 0x00004000 |
| #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000 |
| |
| /* DEVICE_OBJECT.Characteristics */ |
| |
| #define FILE_REMOVABLE_MEDIA 0x00000001 |
| #define FILE_READ_ONLY_DEVICE 0x00000002 |
| #define FILE_FLOPPY_DISKETTE 0x00000004 |
| #define FILE_WRITE_ONCE_MEDIA 0x00000008 |
| #define FILE_REMOTE_DEVICE 0x00000010 |
| #define FILE_DEVICE_IS_MOUNTED 0x00000020 |
| #define FILE_VIRTUAL_VOLUME 0x00000040 |
| #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 |
| #define FILE_DEVICE_SECURE_OPEN 0x00000100 |
| |
| /* DEVICE_OBJECT.AlignmentRequirement */ |
| |
| #define FILE_BYTE_ALIGNMENT 0x00000000 |
| #define FILE_WORD_ALIGNMENT 0x00000001 |
| #define FILE_LONG_ALIGNMENT 0x00000003 |
| #define FILE_QUAD_ALIGNMENT 0x00000007 |
| #define FILE_OCTA_ALIGNMENT 0x0000000f |
| #define FILE_32_BYTE_ALIGNMENT 0x0000001f |
| #define FILE_64_BYTE_ALIGNMENT 0x0000003f |
| #define FILE_128_BYTE_ALIGNMENT 0x0000007f |
| #define FILE_256_BYTE_ALIGNMENT 0x000000ff |
| #define FILE_512_BYTE_ALIGNMENT 0x000001ff |
| |
| /* DEVICE_OBJECT.DeviceType */ |
| |
| #define DEVICE_TYPE ULONG |
| |
| #define FILE_DEVICE_BEEP 0x00000001 |
| #define FILE_DEVICE_CD_ROM 0x00000002 |
| #define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003 |
| #define FILE_DEVICE_CONTROLLER 0x00000004 |
| #define FILE_DEVICE_DATALINK 0x00000005 |
| #define FILE_DEVICE_DFS 0x00000006 |
| #define FILE_DEVICE_DISK 0x00000007 |
| #define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008 |
| #define FILE_DEVICE_FILE_SYSTEM 0x00000009 |
| #define FILE_DEVICE_INPORT_PORT 0x0000000a |
| #define FILE_DEVICE_KEYBOARD 0x0000000b |
| #define FILE_DEVICE_MAILSLOT 0x0000000c |
| #define FILE_DEVICE_MIDI_IN 0x0000000d |
| #define FILE_DEVICE_MIDI_OUT 0x0000000e |
| #define FILE_DEVICE_MOUSE 0x0000000f |
| #define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010 |
| #define FILE_DEVICE_NAMED_PIPE 0x00000011 |
| #define FILE_DEVICE_NETWORK 0x00000012 |
| #define FILE_DEVICE_NETWORK_BROWSER 0x00000013 |
| #define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014 |
| #define FILE_DEVICE_NULL 0x00000015 |
| #define FILE_DEVICE_PARALLEL_PORT 0x00000016 |
| #define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017 |
| #define FILE_DEVICE_PRINTER 0x00000018 |
| #define FILE_DEVICE_SCANNER 0x00000019 |
| #define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001a |
| #define FILE_DEVICE_SERIAL_PORT 0x0000001b |
| #define FILE_DEVICE_SCREEN 0x0000001c |
| #define FILE_DEVICE_SOUND 0x0000001d |
| #define FILE_DEVICE_STREAMS 0x0000001e |
| #define FILE_DEVICE_TAPE 0x0000001f |
| #define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020 |
| #define FILE_DEVICE_TRANSPORT 0x00000021 |
| #define FILE_DEVICE_UNKNOWN 0x00000022 |
| #define FILE_DEVICE_VIDEO 0x00000023 |
| #define FILE_DEVICE_VIRTUAL_DISK 0x00000024 |
| #define FILE_DEVICE_WAVE_IN 0x00000025 |
| #define FILE_DEVICE_WAVE_OUT 0x00000026 |
| #define FILE_DEVICE_8042_PORT 0x00000027 |
| #define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028 |
| #define FILE_DEVICE_BATTERY 0x00000029 |
| #define FILE_DEVICE_BUS_EXTENDER 0x0000002a |
| #define FILE_DEVICE_MODEM 0x0000002b |
| #define FILE_DEVICE_VDM 0x0000002c |
| #define FILE_DEVICE_MASS_STORAGE 0x0000002d |
| #define FILE_DEVICE_SMB 0x0000002e |
| #define FILE_DEVICE_KS 0x0000002f |
| #define FILE_DEVICE_CHANGER 0x00000030 |
| #define FILE_DEVICE_SMARTCARD 0x00000031 |
| #define FILE_DEVICE_ACPI 0x00000032 |
| #define FILE_DEVICE_DVD 0x00000033 |
| #define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034 |
| #define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035 |
| #define FILE_DEVICE_DFS_VOLUME 0x00000036 |
| #define FILE_DEVICE_SERENUM 0x00000037 |
| #define FILE_DEVICE_TERMSRV 0x00000038 |
| #define FILE_DEVICE_KSEC 0x00000039 |
| #define FILE_DEVICE_FIPS 0x0000003a |
| |
| typedef struct _DEVICE_OBJECT { |
| CSHORT Type; |
| USHORT Size; |
| LONG ReferenceCount; |
| struct _DRIVER_OBJECT *DriverObject; |
| struct _DEVICE_OBJECT *NextDevice; |
| struct _DEVICE_OBJECT *AttachedDevice; |
| struct _IRP *CurrentIrp; |
| PIO_TIMER Timer; |
| ULONG Flags; |
| ULONG Characteristics; |
| PVPB Vpb; |
| PVOID DeviceExtension; |
| DEVICE_TYPE DeviceType; |
| CCHAR StackSize; |
| union { |
| LIST_ENTRY ListEntry; |
| WAIT_CONTEXT_BLOCK Wcb; |
| } Queue; |
| ULONG AlignmentRequirement; |
| KDEVICE_QUEUE DeviceQueue; |
| KDPC Dpc; |
| ULONG ActiveThreadCount; |
| PSECURITY_DESCRIPTOR SecurityDescriptor; |
| KEVENT DeviceLock; |
| USHORT SectorSize; |
| USHORT Spare1; |
| struct _DEVOBJ_EXTENSION *DeviceObjectExtension; |
| PVOID Reserved; |
| } DEVICE_OBJECT; |
| typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT; |
| |
| typedef enum _DEVICE_RELATION_TYPE { |
| BusRelations, |
| EjectionRelations, |
| PowerRelations, |
| RemovalRelations, |
| TargetDeviceRelation, |
| SingleBusRelations |
| } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE; |
| |
| typedef struct _DEVICE_RELATIONS { |
| ULONG Count; |
| PDEVICE_OBJECT Objects[1]; |
| } DEVICE_RELATIONS, *PDEVICE_RELATIONS; |
| |
| typedef struct _SCATTER_GATHER_ELEMENT { |
| PHYSICAL_ADDRESS Address; |
| ULONG Length; |
| ULONG_PTR Reserved; |
| } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT; |
| |
| typedef struct _SCATTER_GATHER_LIST { |
| ULONG NumberOfElements; |
| ULONG_PTR Reserved; |
| SCATTER_GATHER_ELEMENT Elements[0]; |
| } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST; |
| |
| typedef struct _MDL { |
| struct _MDL *Next; |
| CSHORT Size; |
| CSHORT MdlFlags; |
| struct _EPROCESS *Process; |
| PVOID MappedSystemVa; |
| PVOID StartVa; |
| ULONG ByteCount; |
| ULONG ByteOffset; |
| } MDL, *PMDL; |
| |
| #define MDL_MAPPED_TO_SYSTEM_VA 0x0001 |
| #define MDL_PAGES_LOCKED 0x0002 |
| #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004 |
| #define MDL_ALLOCATED_FIXED_SIZE 0x0008 |
| #define MDL_PARTIAL 0x0010 |
| #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020 |
| #define MDL_IO_PAGE_READ 0x0040 |
| #define MDL_WRITE_OPERATION 0x0080 |
| #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100 |
| #define MDL_FREE_EXTRA_PTES 0x0200 |
| #define MDL_IO_SPACE 0x0800 |
| #define MDL_NETWORK_HEADER 0x1000 |
| #define MDL_MAPPING_CAN_FAIL 0x2000 |
| #define MDL_ALLOCATED_MUST_SUCCEED 0x4000 |
| |
| #define MDL_MAPPING_FLAGS ( \ |
| MDL_MAPPED_TO_SYSTEM_VA | \ |
| MDL_PAGES_LOCKED | \ |
| MDL_SOURCE_IS_NONPAGED_POOL | \ |
| MDL_PARTIAL_HAS_BEEN_MAPPED | \ |
| MDL_PARENT_MAPPED_SYSTEM_VA | \ |
| MDL_SYSTEM_VA | \ |
| MDL_IO_SPACE) |
| |
| typedef VOID DDKAPI |
| (*PPUT_DMA_ADAPTER)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter); |
| |
| typedef PVOID DDKAPI |
| (*PALLOCATE_COMMON_BUFFER)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ ULONG Length, |
| /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress, |
| /*IN*/ BOOLEAN CacheEnabled); |
| |
| typedef VOID DDKAPI |
| (*PFREE_COMMON_BUFFER)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ ULONG Length, |
| /*IN*/ PHYSICAL_ADDRESS LogicalAddress, |
| /*IN*/ PVOID VirtualAddress, |
| /*IN*/ BOOLEAN CacheEnabled); |
| |
| typedef NTSTATUS DDKAPI |
| (*PALLOCATE_ADAPTER_CHANNEL)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ ULONG NumberOfMapRegisters, |
| /*IN*/ PDRIVER_CONTROL ExecutionRoutine, |
| /*IN*/ PVOID Context); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFLUSH_ADAPTER_BUFFERS)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ PMDL Mdl, |
| /*IN*/ PVOID MapRegisterBase, |
| /*IN*/ PVOID CurrentVa, |
| /*IN*/ ULONG Length, |
| /*IN*/ BOOLEAN WriteToDevice); |
| |
| typedef VOID DDKAPI |
| (*PFREE_ADAPTER_CHANNEL)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter); |
| |
| typedef VOID DDKAPI |
| (*PFREE_MAP_REGISTERS)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| PVOID MapRegisterBase, |
| ULONG NumberOfMapRegisters); |
| |
| typedef PHYSICAL_ADDRESS DDKAPI |
| (*PMAP_TRANSFER)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ PMDL Mdl, |
| /*IN*/ PVOID MapRegisterBase, |
| /*IN*/ PVOID CurrentVa, |
| /*IN OUT*/ PULONG Length, |
| /*IN*/ BOOLEAN WriteToDevice); |
| |
| typedef ULONG DDKAPI |
| (*PGET_DMA_ALIGNMENT)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter); |
| |
| typedef ULONG DDKAPI |
| (*PREAD_DMA_COUNTER)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter); |
| |
| typedef NTSTATUS DDKAPI |
| (*PGET_SCATTER_GATHER_LIST)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PMDL Mdl, |
| /*IN*/ PVOID CurrentVa, |
| /*IN*/ ULONG Length, |
| /*IN*/ PDRIVER_LIST_CONTROL ExecutionRoutine, |
| /*IN*/ PVOID Context, |
| /*IN*/ BOOLEAN WriteToDevice); |
| |
| typedef VOID DDKAPI |
| (*PPUT_SCATTER_GATHER_LIST)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ PSCATTER_GATHER_LIST ScatterGather, |
| /*IN*/ BOOLEAN WriteToDevice); |
| |
| typedef NTSTATUS DDKAPI |
| (*PCALCULATE_SCATTER_GATHER_LIST_SIZE)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ PMDL Mdl /*OPTIONAL*/, |
| /*IN*/ PVOID CurrentVa, |
| /*IN*/ ULONG Length, |
| /*OUT*/ PULONG ScatterGatherListSize, |
| /*OUT*/ PULONG pNumberOfMapRegisters /*OPTIONAL*/); |
| |
| typedef NTSTATUS DDKAPI |
| (*PBUILD_SCATTER_GATHER_LIST)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PMDL Mdl, |
| /*IN*/ PVOID CurrentVa, |
| /*IN*/ ULONG Length, |
| /*IN*/ PDRIVER_LIST_CONTROL ExecutionRoutine, |
| /*IN*/ PVOID Context, |
| /*IN*/ BOOLEAN WriteToDevice, |
| /*IN*/ PVOID ScatterGatherBuffer, |
| /*IN*/ ULONG ScatterGatherLength); |
| |
| typedef NTSTATUS DDKAPI |
| (*PBUILD_MDL_FROM_SCATTER_GATHER_LIST)( |
| /*IN*/ PDMA_ADAPTER DmaAdapter, |
| /*IN*/ PSCATTER_GATHER_LIST ScatterGather, |
| /*IN*/ PMDL OriginalMdl, |
| /*OUT*/ PMDL *TargetMdl); |
| |
| typedef struct _DMA_OPERATIONS { |
| ULONG Size; |
| PPUT_DMA_ADAPTER PutDmaAdapter; |
| PALLOCATE_COMMON_BUFFER AllocateCommonBuffer; |
| PFREE_COMMON_BUFFER FreeCommonBuffer; |
| PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel; |
| PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers; |
| PFREE_ADAPTER_CHANNEL FreeAdapterChannel; |
| PFREE_MAP_REGISTERS FreeMapRegisters; |
| PMAP_TRANSFER MapTransfer; |
| PGET_DMA_ALIGNMENT GetDmaAlignment; |
| PREAD_DMA_COUNTER ReadDmaCounter; |
| PGET_SCATTER_GATHER_LIST GetScatterGatherList; |
| PPUT_SCATTER_GATHER_LIST PutScatterGatherList; |
| PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList; |
| PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList; |
| PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList; |
| } DMA_OPERATIONS, *PDMA_OPERATIONS; |
| |
| typedef struct _DMA_ADAPTER { |
| USHORT Version; |
| USHORT Size; |
| PDMA_OPERATIONS DmaOperations; |
| } DMA_ADAPTER; |
| |
| typedef enum _FILE_INFORMATION_CLASS { |
| FileDirectoryInformation = 1, |
| FileFullDirectoryInformation, |
| FileBothDirectoryInformation, |
| FileBasicInformation, |
| FileStandardInformation, |
| FileInternalInformation, |
| FileEaInformation, |
| FileAccessInformation, |
| FileNameInformation, |
| FileRenameInformation, |
| FileLinkInformation, |
| FileNamesInformation, |
| FileDispositionInformation, |
| FilePositionInformation, |
| FileFullEaInformation, |
| FileModeInformation, |
| FileAlignmentInformation, |
| FileAllInformation, |
| FileAllocationInformation, |
| FileEndOfFileInformation, |
| FileAlternateNameInformation, |
| FileStreamInformation, |
| FilePipeInformation, |
| FilePipeLocalInformation, |
| FilePipeRemoteInformation, |
| FileMailslotQueryInformation, |
| FileMailslotSetInformation, |
| FileCompressionInformation, |
| FileObjectIdInformation, |
| FileCompletionInformation, |
| FileMoveClusterInformation, |
| FileQuotaInformation, |
| FileReparsePointInformation, |
| FileNetworkOpenInformation, |
| FileAttributeTagInformation, |
| FileTrackingInformation, |
| FileIdBothDirectoryInformation, |
| FileIdFullDirectoryInformation, |
| FileValidDataLengthInformation, |
| FileShortNameInformation, |
| FileMaximumInformation |
| } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS; |
| |
| typedef struct _FILE_POSITION_INFORMATION { |
| LARGE_INTEGER CurrentByteOffset; |
| } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; |
| |
| typedef struct _FILE_ALIGNMENT_INFORMATION { |
| ULONG AlignmentRequirement; |
| } FILE_ALIGNMENT_INFORMATION; |
| |
| typedef struct _FILE_NAME_INFORMATION { |
| ULONG FileNameLength; |
| WCHAR FileName[1]; |
| } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION; |
| |
| typedef struct _FILE_BASIC_INFORMATION { |
| LARGE_INTEGER CreationTime; |
| LARGE_INTEGER LastAccessTime; |
| LARGE_INTEGER LastWriteTime; |
| LARGE_INTEGER ChangeTime; |
| ULONG FileAttributes; |
| } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; |
| |
| typedef struct _FILE_STANDARD_INFORMATION { |
| LARGE_INTEGER AllocationSize; |
| LARGE_INTEGER EndOfFile; |
| ULONG NumberOfLinks; |
| BOOLEAN DeletePending; |
| BOOLEAN Directory; |
| } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; |
| |
| typedef struct _FILE_NETWORK_OPEN_INFORMATION { |
| LARGE_INTEGER CreationTime; |
| LARGE_INTEGER LastAccessTime; |
| LARGE_INTEGER LastWriteTime; |
| LARGE_INTEGER ChangeTime; |
| LARGE_INTEGER AllocationSize; |
| LARGE_INTEGER EndOfFile; |
| ULONG FileAttributes; |
| } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; |
| |
| typedef struct _FILE_ATTRIBUTE_TAG_INFORMATION { |
| ULONG FileAttributes; |
| ULONG ReparseTag; |
| } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION; |
| |
| typedef struct _FILE_DISPOSITION_INFORMATION { |
| BOOLEAN DoDeleteFile; |
| } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; |
| |
| typedef struct _FILE_END_OF_FILE_INFORMATION { |
| LARGE_INTEGER EndOfFile; |
| } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; |
| |
| typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION { |
| LARGE_INTEGER ValidDataLength; |
| } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION; |
| |
| typedef enum _FSINFOCLASS { |
| FileFsVolumeInformation = 1, |
| FileFsLabelInformation, |
| FileFsSizeInformation, |
| FileFsDeviceInformation, |
| FileFsAttributeInformation, |
| FileFsControlInformation, |
| FileFsFullSizeInformation, |
| FileFsObjectIdInformation, |
| FileFsDriverPathInformation, |
| FileFsMaximumInformation |
| } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; |
| |
| typedef struct _FILE_FS_DEVICE_INFORMATION { |
| DEVICE_TYPE DeviceType; |
| ULONG Characteristics; |
| } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; |
| |
| typedef struct _FILE_FULL_EA_INFORMATION { |
| ULONG NextEntryOffset; |
| UCHAR Flags; |
| UCHAR EaNameLength; |
| USHORT EaValueLength; |
| CHAR EaName[1]; |
| } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION; |
| |
| typedef ULONG_PTR ERESOURCE_THREAD; |
| typedef ERESOURCE_THREAD *PERESOURCE_THREAD; |
| |
| typedef struct _OWNER_ENTRY { |
| ERESOURCE_THREAD OwnerThread; |
| _ANONYMOUS_UNION union { |
| LONG OwnerCount; |
| ULONG TableSize; |
| } DUMMYUNIONNAME; |
| } OWNER_ENTRY, *POWNER_ENTRY; |
| |
| /* ERESOURCE.Flag */ |
| |
| #define ResourceNeverExclusive 0x0010 |
| #define ResourceReleaseByOtherThread 0x0020 |
| #define ResourceOwnedExclusive 0x0080 |
| |
| #define RESOURCE_HASH_TABLE_SIZE 64 |
| |
| typedef struct _ERESOURCE { |
| LIST_ENTRY SystemResourcesList; |
| POWNER_ENTRY OwnerTable; |
| SHORT ActiveCount; |
| USHORT Flag; |
| PKSEMAPHORE SharedWaiters; |
| PKEVENT ExclusiveWaiters; |
| OWNER_ENTRY OwnerThreads[2]; |
| ULONG ContentionCount; |
| USHORT NumberOfSharedWaiters; |
| USHORT NumberOfExclusiveWaiters; |
| _ANONYMOUS_UNION union { |
| PVOID Address; |
| ULONG_PTR CreatorBackTraceIndex; |
| } DUMMYUNIONNAME; |
| KSPIN_LOCK SpinLock; |
| } ERESOURCE, *PERESOURCE; |
| |
| /* NOTE: PVOID for methods to avoid 'assignment from incompatible pointer type' warning */ |
| typedef struct _DRIVER_EXTENSION { |
| struct _DRIVER_OBJECT *DriverObject; |
| PVOID AddDevice; |
| ULONG Count; |
| UNICODE_STRING ServiceKeyName; |
| } DRIVER_EXTENSION, *PDRIVER_EXTENSION; |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_CHECK_IF_POSSIBLE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ ULONG Length, |
| /*IN*/ BOOLEAN Wait, |
| /*IN*/ ULONG LockKey, |
| /*IN*/ BOOLEAN CheckForReadOperation, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_READ)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ ULONG Length, |
| /*IN*/ BOOLEAN Wait, |
| /*IN*/ ULONG LockKey, |
| /*OUT*/ PVOID Buffer, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_WRITE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ ULONG Length, |
| /*IN*/ BOOLEAN Wait, |
| /*IN*/ ULONG LockKey, |
| /*IN*/ PVOID Buffer, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_QUERY_BASIC_INFO)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ BOOLEAN Wait, |
| /*OUT*/ PFILE_BASIC_INFORMATION Buffer, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_QUERY_STANDARD_INFO)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ BOOLEAN Wait, |
| /*OUT*/ PFILE_STANDARD_INFORMATION Buffer, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_LOCK)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ PLARGE_INTEGER Length, |
| PEPROCESS ProcessId, |
| ULONG Key, |
| BOOLEAN FailImmediately, |
| BOOLEAN ExclusiveLock, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_UNLOCK_SINGLE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ PLARGE_INTEGER Length, |
| PEPROCESS ProcessId, |
| ULONG Key, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_UNLOCK_ALL)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| PEPROCESS ProcessId, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_UNLOCK_ALL_BY_KEY)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| PVOID ProcessId, |
| ULONG Key, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_DEVICE_CONTROL)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ BOOLEAN Wait, |
| /*IN*/ PVOID InputBuffer /*OPTIONAL*/, |
| /*IN*/ ULONG InputBufferLength, |
| /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/, |
| /*IN*/ ULONG OutputBufferLength, |
| /*IN*/ ULONG IoControlCode, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef VOID DDKAPI |
| (*PFAST_IO_ACQUIRE_FILE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject); |
| |
| typedef VOID DDKAPI |
| (*PFAST_IO_RELEASE_FILE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject); |
| |
| typedef VOID DDKAPI |
| (*PFAST_IO_DETACH_DEVICE)( |
| /*IN*/ struct _DEVICE_OBJECT *SourceDevice, |
| /*IN*/ struct _DEVICE_OBJECT *TargetDevice); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_QUERY_NETWORK_OPEN_INFO)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ BOOLEAN Wait, |
| /*OUT*/ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer, |
| /*OUT*/ struct _IO_STATUS_BLOCK *IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef NTSTATUS DDKAPI |
| (*PFAST_IO_ACQUIRE_FOR_MOD_WRITE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER EndingOffset, |
| /*OUT*/ struct _ERESOURCE **ResourceToRelease, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_MDL_READ)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ ULONG Length, |
| /*IN*/ ULONG LockKey, |
| /*OUT*/ PMDL *MdlChain, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_MDL_READ_COMPLETE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PMDL MdlChain, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_PREPARE_MDL_WRITE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ ULONG Length, |
| /*IN*/ ULONG LockKey, |
| /*OUT*/ PMDL *MdlChain, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_MDL_WRITE_COMPLETE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ PMDL MdlChain, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_READ_COMPRESSED)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ ULONG Length, |
| /*IN*/ ULONG LockKey, |
| /*OUT*/ PVOID Buffer, |
| /*OUT*/ PMDL *MdlChain, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*OUT*/ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, |
| /*IN*/ ULONG CompressedDataInfoLength, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_WRITE_COMPRESSED)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ ULONG Length, |
| /*IN*/ ULONG LockKey, |
| /*IN*/ PVOID Buffer, |
| /*OUT*/ PMDL *MdlChain, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatus, |
| /*IN*/ struct _COMPRESSED_DATA_INFO *CompressedDataInfo, |
| /*IN*/ ULONG CompressedDataInfoLength, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PMDL MdlChain, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ PLARGE_INTEGER FileOffset, |
| /*IN*/ PMDL MdlChain, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef BOOLEAN DDKAPI |
| (*PFAST_IO_QUERY_OPEN)( |
| /*IN*/ struct _IRP *Irp, |
| /*OUT*/ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef NTSTATUS DDKAPI |
| (*PFAST_IO_RELEASE_FOR_MOD_WRITE)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ struct _ERESOURCE *ResourceToRelease, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef NTSTATUS DDKAPI |
| (*PFAST_IO_ACQUIRE_FOR_CCFLUSH)( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef NTSTATUS DDKAPI |
| (*PFAST_IO_RELEASE_FOR_CCFLUSH) ( |
| /*IN*/ struct _FILE_OBJECT *FileObject, |
| /*IN*/ struct _DEVICE_OBJECT *DeviceObject); |
| |
| typedef struct _FAST_IO_DISPATCH { |
| ULONG SizeOfFastIoDispatch; |
| PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible; |
| PFAST_IO_READ FastIoRead; |
| PFAST_IO_WRITE FastIoWrite; |
| PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo; |
| PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo; |
| PFAST_IO_LOCK FastIoLock; |
| PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle; |
| PFAST_IO_UNLOCK_ALL FastIoUnlockAll; |
| PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey; |
| PFAST_IO_DEVICE_CONTROL FastIoDeviceControl; |
| PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection; |
| PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection; |
| PFAST_IO_DETACH_DEVICE FastIoDetachDevice; |
| PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo; |
| PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite; |
| PFAST_IO_MDL_READ MdlRead; |
| PFAST_IO_MDL_READ_COMPLETE MdlReadComplete; |
| PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite; |
| PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete; |
| PFAST_IO_READ_COMPRESSED FastIoReadCompressed; |
| PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed; |
| PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed; |
| PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed; |
| PFAST_IO_QUERY_OPEN FastIoQueryOpen; |
| PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite; |
| PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush; |
| PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush; |
| } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH; |
| |
| typedef struct _DRIVER_OBJECT { |
| CSHORT Type; |
| CSHORT Size; |
| PDEVICE_OBJECT DeviceObject; |
| ULONG Flags; |
| PVOID DriverStart; |
| ULONG DriverSize; |
| PVOID DriverSection; |
| PDRIVER_EXTENSION DriverExtension; |
| UNICODE_STRING DriverName; |
| PUNICODE_STRING HardwareDatabase; |
| PFAST_IO_DISPATCH FastIoDispatch; |
| PDRIVER_INITIALIZE DriverInit; |
| PDRIVER_STARTIO DriverStartIo; |
| PDRIVER_UNLOAD DriverUnload; |
| PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1]; |
| } DRIVER_OBJECT; |
| typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT; |
| |
| typedef struct _SECTION_OBJECT_POINTERS { |
| PVOID DataSectionObject; |
| PVOID SharedCacheMap; |
| PVOID ImageSectionObject; |
| } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS; |
| |
| typedef struct _IO_COMPLETION_CONTEXT { |
| PVOID Port; |
| PVOID Key; |
| } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT; |
| |
| /* FILE_OBJECT.Flags */ |
| |
| #define FO_FILE_OPEN 0x00000001 |
| #define FO_SYNCHRONOUS_IO 0x00000002 |
| #define FO_ALERTABLE_IO 0x00000004 |
| #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008 |
| #define FO_WRITE_THROUGH 0x00000010 |
| #define FO_SEQUENTIAL_ONLY 0x00000020 |
| #define FO_CACHE_SUPPORTED 0x00000040 |
| #define FO_NAMED_PIPE 0x00000080 |
| #define FO_STREAM_FILE 0x00000100 |
| #define FO_MAILSLOT 0x00000200 |
| #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400 |
| #define FO_DIRECT_DEVICE_OPEN 0x00000800 |
| #define FO_FILE_MODIFIED 0x00001000 |
| #define FO_FILE_SIZE_CHANGED 0x00002000 |
| #define FO_CLEANUP_COMPLETE 0x00004000 |
| #define FO_TEMPORARY_FILE 0x00008000 |
| #define FO_DELETE_ON_CLOSE 0x00010000 |
| #define FO_OPENED_CASE_SENSITIVE 0x00020000 |
| #define FO_HANDLE_CREATED 0x00040000 |
| #define FO_FILE_FAST_IO_READ 0x00080000 |
| #define FO_RANDOM_ACCESS 0x00100000 |
| #define FO_FILE_OPEN_CANCELLED 0x00200000 |
| #define FO_VOLUME_OPEN 0x00400000 |
| #define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000 |
| #define FO_REMOTE_ORIGIN 0x01000000 |
| |
| typedef struct _FILE_OBJECT { |
| CSHORT Type; |
| CSHORT Size; |
| PDEVICE_OBJECT DeviceObject; |
| PVPB Vpb; |
| PVOID FsContext; |
| PVOID FsContext2; |
| PSECTION_OBJECT_POINTERS SectionObjectPointer; |
| PVOID PrivateCacheMap; |
| NTSTATUS FinalStatus; |
| struct _FILE_OBJECT *RelatedFileObject; |
| BOOLEAN LockOperation; |
| BOOLEAN DeletePending; |
| BOOLEAN ReadAccess; |
| BOOLEAN WriteAccess; |
| BOOLEAN DeleteAccess; |
| BOOLEAN SharedRead; |
| BOOLEAN SharedWrite; |
| BOOLEAN SharedDelete; |
| ULONG Flags; |
| UNICODE_STRING FileName; |
| LARGE_INTEGER CurrentByteOffset; |
| ULONG Waiters; |
| ULONG Busy; |
| PVOID LastLock; |
| KEVENT Lock; |
| KEVENT Event; |
| PIO_COMPLETION_CONTEXT CompletionContext; |
| } FILE_OBJECT; |
| typedef struct _FILE_OBJECT *PFILE_OBJECT; |
| |
| typedef enum _SECURITY_OPERATION_CODE { |
| SetSecurityDescriptor, |
| QuerySecurityDescriptor, |
| DeleteSecurityDescriptor, |
| AssignSecurityDescriptor |
| } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE; |
| |
| #define INITIAL_PRIVILEGE_COUNT 3 |
| |
| typedef struct _INITIAL_PRIVILEGE_SET { |
| ULONG PrivilegeCount; |
| ULONG Control; |
| LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT]; |
| } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET; |
| |
| typedef struct _SECURITY_SUBJECT_CONTEXT { |
| PACCESS_TOKEN ClientToken; |
| SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; |
| PACCESS_TOKEN PrimaryToken; |
| PVOID ProcessAuditId; |
| } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT; |
| |
| #include <pshpack4.h> |
| typedef struct _ACCESS_STATE { |
| LUID OperationID; |
| BOOLEAN SecurityEvaluated; |
| BOOLEAN GenerateAudit; |
| BOOLEAN GenerateOnClose; |
| BOOLEAN PrivilegesAllocated; |
| ULONG Flags; |
| ACCESS_MASK RemainingDesiredAccess; |
| ACCESS_MASK PreviouslyGrantedAccess; |
| ACCESS_MASK OriginalDesiredAccess; |
| SECURITY_SUBJECT_CONTEXT SubjectSecurityContext; |
| PSECURITY_DESCRIPTOR SecurityDescriptor; |
| PVOID AuxData; |
| union { |
| INITIAL_PRIVILEGE_SET InitialPrivilegeSet; |
| PRIVILEGE_SET PrivilegeSet; |
| } Privileges; |
| |
| BOOLEAN AuditPrivileges; |
| UNICODE_STRING ObjectName; |
| UNICODE_STRING ObjectTypeName; |
| } ACCESS_STATE, *PACCESS_STATE; |
| #include <poppack.h> |
| |
| typedef struct _IO_SECURITY_CONTEXT { |
| PSECURITY_QUALITY_OF_SERVICE SecurityQos; |
| PACCESS_STATE AccessState; |
| ACCESS_MASK DesiredAccess; |
| ULONG FullCreateOptions; |
| } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT; |
| |
| struct _IO_CSQ; |
| |
| typedef struct _IO_CSQ_IRP_CONTEXT { |
| ULONG Type; |
| struct _IRP *Irp; |
| struct _IO_CSQ *Csq; |
| } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT; |
| |
| typedef VOID DDKAPI |
| (*PIO_CSQ_INSERT_IRP)( |
| /*IN*/ struct _IO_CSQ *Csq, |
| /*IN*/ PIRP Irp); |
| |
| typedef VOID DDKAPI |
| (*PIO_CSQ_REMOVE_IRP)( |
| /*IN*/ struct _IO_CSQ *Csq, |
| /*IN*/ PIRP Irp); |
| |
| typedef PIRP DDKAPI |
| (*PIO_CSQ_PEEK_NEXT_IRP)( |
| /*IN*/ struct _IO_CSQ *Csq, |
| /*IN*/ PIRP Irp, |
| /*IN*/ PVOID PeekContext); |
| |
| typedef VOID DDKAPI |
| (*PIO_CSQ_ACQUIRE_LOCK)( |
| /*IN*/ struct _IO_CSQ *Csq, |
| /*OUT*/ PKIRQL Irql); |
| |
| typedef VOID DDKAPI |
| (*PIO_CSQ_RELEASE_LOCK)( |
| /*IN*/ struct _IO_CSQ *Csq, |
| /*IN*/ KIRQL Irql); |
| |
| typedef VOID DDKAPI |
| (*PIO_CSQ_COMPLETE_CANCELED_IRP)( |
| /*IN*/ struct _IO_CSQ *Csq, |
| /*IN*/ PIRP Irp); |
| |
| typedef struct _IO_CSQ { |
| ULONG Type; |
| PIO_CSQ_INSERT_IRP CsqInsertIrp; |
| PIO_CSQ_REMOVE_IRP CsqRemoveIrp; |
| PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp; |
| PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock; |
| PIO_CSQ_RELEASE_LOCK CsqReleaseLock; |
| PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp; |
| PVOID ReservePointer; |
| } IO_CSQ, *PIO_CSQ; |
| |
| #include <pshpack4.h> |
| typedef struct _IO_STACK_LOCATION { |
| UCHAR MajorFunction; |
| UCHAR MinorFunction; |
| UCHAR Flags; |
| UCHAR Control; |
| union { |
| struct { |
| PIO_SECURITY_CONTEXT SecurityContext; |
| ULONG Options; |
| USHORT POINTER_ALIGNMENT FileAttributes; |
| USHORT ShareAccess; |
| ULONG POINTER_ALIGNMENT EaLength; |
| } Create; |
| struct { |
| ULONG Length; |
| ULONG POINTER_ALIGNMENT Key; |
| LARGE_INTEGER ByteOffset; |
| } Read; |
| struct { |
| ULONG Length; |
| ULONG POINTER_ALIGNMENT Key; |
| LARGE_INTEGER ByteOffset; |
| } Write; |
| struct { |
| ULONG Length; |
| FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; |
| } QueryFile; |
| struct { |
| ULONG Length; |
| FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass; |
| PFILE_OBJECT FileObject; |
| _ANONYMOUS_UNION union { |
| _ANONYMOUS_STRUCT struct { |
| BOOLEAN ReplaceIfExists; |
| BOOLEAN AdvanceOnly; |
| } DUMMYSTRUCTNAME; |
| ULONG ClusterCount; |
| HANDLE DeleteHandle; |
| } DUMMYUNIONNAME; |
| } SetFile; |
| struct { |
| ULONG Length; |
| FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass; |
| } QueryVolume; |
| struct { |
| ULONG OutputBufferLength; |
| ULONG POINTER_ALIGNMENT InputBufferLength; |
| ULONG POINTER_ALIGNMENT IoControlCode; |
| PVOID Type3InputBuffer; |
| } DeviceIoControl; |
| struct { |
| SECURITY_INFORMATION SecurityInformation; |
| ULONG POINTER_ALIGNMENT Length; |
| } QuerySecurity; |
| struct { |
| SECURITY_INFORMATION SecurityInformation; |
| PSECURITY_DESCRIPTOR SecurityDescriptor; |
| } SetSecurity; |
| struct { |
| PVPB Vpb; |
| PDEVICE_OBJECT DeviceObject; |
| } MountVolume; |
| struct { |
| PVPB Vpb; |
| PDEVICE_OBJECT DeviceObject; |
| } VerifyVolume; |
| struct { |
| struct _SCSI_REQUEST_BLOCK *Srb; |
| } Scsi; |
| struct { |
| DEVICE_RELATION_TYPE Type; |
| } QueryDeviceRelations; |
| struct { |
| CONST GUID *InterfaceType; |
| USHORT Size; |
| USHORT Version; |
| PINTERFACE Interface; |
| PVOID InterfaceSpecificData; |
| } QueryInterface; |
| struct { |
| PDEVICE_CAPABILITIES Capabilities; |
| } DeviceCapabilities; |
| struct { |
| PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList; |
| } FilterResourceRequirements; |
| struct { |
| ULONG WhichSpace; |
| PVOID Buffer; |
| ULONG Offset; |
| ULONG POINTER_ALIGNMENT Length; |
| } ReadWriteConfig; |
| struct { |
| BOOLEAN Lock; |
| } SetLock; |
| struct { |
| BUS_QUERY_ID_TYPE IdType; |
| } QueryId; |
| struct { |
| DEVICE_TEXT_TYPE DeviceTextType; |
| LCID POINTER_ALIGNMENT LocaleId; |
| } QueryDeviceText; |
| struct { |
| BOOLEAN InPath; |
| BOOLEAN Reserved[3]; |
| DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type; |
| } UsageNotification; |
| struct { |
| SYSTEM_POWER_STATE PowerState; |
| } WaitWake; |
| struct { |
| PPOWER_SEQUENCE PowerSequence; |
| } PowerSequence; |
| struct { |
| ULONG SystemContext; |
| POWER_STATE_TYPE POINTER_ALIGNMENT Type; |
| POWER_STATE POINTER_ALIGNMENT State; |
| POWER_ACTION POINTER_ALIGNMENT ShutdownType; |
| } Power; |
| struct { |
| PCM_RESOURCE_LIST AllocatedResources; |
| PCM_RESOURCE_LIST AllocatedResourcesTranslated; |
| } StartDevice; |
| struct { |
| ULONG_PTR ProviderId; |
| PVOID DataPath; |
| ULONG BufferSize; |
| PVOID Buffer; |
| } WMI; |
| struct { |
| PVOID Argument1; |
| PVOID Argument2; |
| PVOID Argument3; |
| PVOID Argument4; |
| } Others; |
| } Parameters; |
| PDEVICE_OBJECT DeviceObject; |
| PFILE_OBJECT FileObject; |
| PIO_COMPLETION_ROUTINE CompletionRoutine; |
| PVOID Context; |
| } IO_STACK_LOCATION, *PIO_STACK_LOCATION; |
| #include <poppack.h> |
| |
| /* IO_STACK_LOCATION.Control */ |
| |
| #define SL_PENDING_RETURNED 0x01 |
| #define SL_INVOKE_ON_CANCEL 0x20 |
| #define SL_INVOKE_ON_SUCCESS 0x40 |
| #define SL_INVOKE_ON_ERROR 0x80 |
| |
| typedef enum _KEY_INFORMATION_CLASS { |
| KeyBasicInformation, |
| KeyNodeInformation, |
| KeyFullInformation, |
| KeyNameInformation, |
| KeyCachedInformation, |
| KeyFlagsInformation |
| } KEY_INFORMATION_CLASS; |
| |
| typedef struct _KEY_BASIC_INFORMATION { |
| LARGE_INTEGER LastWriteTime; |
| ULONG TitleIndex; |
| ULONG NameLength; |
| WCHAR Name[1]; |
| } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION; |
| |
| typedef struct _KEY_FULL_INFORMATION { |
| LARGE_INTEGER LastWriteTime; |
| ULONG TitleIndex; |
| ULONG ClassOffset; |
| ULONG ClassLength; |
| ULONG SubKeys; |
| ULONG MaxNameLen; |
| ULONG MaxClassLen; |
| ULONG Values; |
| ULONG MaxValueNameLen; |
| ULONG MaxValueDataLen; |
| WCHAR Class[1]; |
| } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; |
| |
| typedef struct _KEY_NODE_INFORMATION { |
| LARGE_INTEGER LastWriteTime; |
| ULONG TitleIndex; |
| ULONG ClassOffset; |
| ULONG ClassLength; |
| ULONG NameLength; |
| WCHAR Name[1]; |
| } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION; |
| |
| typedef struct _KEY_VALUE_BASIC_INFORMATION { |
| ULONG TitleIndex; |
| ULONG Type; |
| ULONG NameLength; |
| WCHAR Name[1]; |
| } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION; |
| |
| typedef struct _KEY_VALUE_FULL_INFORMATION { |
| ULONG TitleIndex; |
| ULONG Type; |
| ULONG DataOffset; |
| ULONG DataLength; |
| ULONG NameLength; |
| WCHAR Name[1]; |
| } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION; |
| |
| typedef struct _KEY_VALUE_PARTIAL_INFORMATION { |
| ULONG TitleIndex; |
| ULONG Type; |
| ULONG DataLength; |
| UCHAR Data[1]; |
| } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; |
| |
| typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 { |
| ULONG Type; |
| ULONG DataLength; |
| UCHAR Data[1]; |
| } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; |
| |
| typedef struct _KEY_VALUE_ENTRY { |
| PUNICODE_STRING ValueName; |
| ULONG DataLength; |
| ULONG DataOffset; |
| ULONG Type; |
| } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY; |
| |
| typedef enum _KEY_VALUE_INFORMATION_CLASS { |
| KeyValueBasicInformation, |
| KeyValueFullInformation, |
| KeyValuePartialInformation, |
| KeyValueFullInformationAlign64, |
| KeyValuePartialInformationAlign64 |
| } KEY_VALUE_INFORMATION_CLASS; |
| |
| /* KEY_VALUE_Xxx.Type */ |
| |
| #define REG_NONE 0 |
| #define REG_SZ 1 |
| #define REG_EXPAND_SZ 2 |
| #define REG_BINARY 3 |
| #define REG_DWORD 4 |
| #define REG_DWORD_LITTLE_ENDIAN 4 |
| #define REG_DWORD_BIG_ENDIAN 5 |
| #define REG_LINK 6 |
| #define REG_MULTI_SZ 7 |
| #define REG_RESOURCE_LIST 8 |
| #define REG_FULL_RESOURCE_DESCRIPTOR 9 |
| #define REG_RESOURCE_REQUIREMENTS_LIST 10 |
| #define REG_QWORD 11 |
| #define REG_QWORD_LITTLE_ENDIAN 11 |
| |
| #define PCI_TYPE0_ADDRESSES 6 |
| #define PCI_TYPE1_ADDRESSES 2 |
| #define PCI_TYPE2_ADDRESSES 5 |
| |
| typedef struct _PCI_COMMON_CONFIG { |
| USHORT VendorID; |
| USHORT DeviceID; |
| USHORT Command; |
| USHORT Status; |
| UCHAR RevisionID; |
| UCHAR ProgIf; |
| UCHAR SubClass; |
| UCHAR BaseClass; |
| UCHAR CacheLineSize; |
| UCHAR LatencyTimer; |
| UCHAR HeaderType; |
| UCHAR BIST; |
| union { |
| struct _PCI_HEADER_TYPE_0 { |
| ULONG BaseAddresses[PCI_TYPE0_ADDRESSES]; |
| ULONG CIS; |
| USHORT SubVendorID; |
| USHORT SubSystemID; |
| ULONG ROMBaseAddress; |
| UCHAR CapabilitiesPtr; |
| UCHAR Reserved1[3]; |
| ULONG Reserved2; |
| UCHAR InterruptLine; |
| UCHAR InterruptPin; |
| UCHAR MinimumGrant; |
| UCHAR MaximumLatency; |
| } type0; |
| struct _PCI_HEADER_TYPE_1 { |
| ULONG BaseAddresses[PCI_TYPE1_ADDRESSES]; |
| UCHAR PrimaryBus; |
| UCHAR SecondaryBus; |
| UCHAR SubordinateBus; |
| UCHAR SecondaryLatency; |
| UCHAR IOBase; |
| UCHAR IOLimit; |
| USHORT SecondaryStatus; |
| USHORT MemoryBase; |
| USHORT MemoryLimit; |
| USHORT PrefetchBase; |
| USHORT PrefetchLimit; |
| ULONG PrefetchBaseUpper32; |
| ULONG PrefetchLimitUpper32; |
| USHORT IOBaseUpper16; |
| USHORT IOLimitUpper16; |
| UCHAR CapabilitiesPtr; |
| UCHAR Reserved1[3]; |
| ULONG ROMBaseAddress; |
| UCHAR InterruptLine; |
| UCHAR InterruptPin; |
| USHORT BridgeControl; |
| } type1; |
| struct _PCI_HEADER_TYPE_2 { |
| ULONG SocketRegistersBaseAddress; |
| UCHAR CapabilitiesPtr; |
| UCHAR Reserved; |
| USHORT SecondaryStatus; |
| UCHAR PrimaryBus; |
| UCHAR SecondaryBus; |
| UCHAR SubordinateBus; |
| UCHAR SecondaryLatency; |
| struct { |
| ULONG Base; |
| ULONG Limit; |
| } Range[PCI_TYPE2_ADDRESSES - 1]; |
| UCHAR InterruptLine; |
| UCHAR InterruptPin; |
| USHORT BridgeControl; |
| } type2; |
| } u; |
| UCHAR DeviceSpecific[192]; |
| } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG; |
| |
| /* PCI_COMMON_CONFIG.Command */ |
| |
| #define PCI_ENABLE_IO_SPACE 0x0001 |
| #define PCI_ENABLE_MEMORY_SPACE 0x0002 |
| #define PCI_ENABLE_BUS_MASTER 0x0004 |
| #define PCI_ENABLE_SPECIAL_CYCLES 0x0008 |
| #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010 |
| #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020 |
| #define PCI_ENABLE_PARITY 0x0040 |
| #define PCI_ENABLE_WAIT_CYCLE 0x0080 |
| #define PCI_ENABLE_SERR 0x0100 |
| #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200 |
| |
| /* PCI_COMMON_CONFIG.Status */ |
| |
| #define PCI_STATUS_CAPABILITIES_LIST 0x0010 |
| #define PCI_STATUS_66MHZ_CAPABLE 0x0020 |
| #define PCI_STATUS_UDF_SUPPORTED 0x0040 |
| #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080 |
| #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100 |
| #define PCI_STATUS_DEVSEL 0x0600 |
| #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800 |
| #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000 |
| #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000 |
| #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000 |
| #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000 |
| |
| /* PCI_COMMON_CONFIG.HeaderType */ |
| |
| #define PCI_MULTIFUNCTION 0x80 |
| #define PCI_DEVICE_TYPE 0x00 |
| #define PCI_BRIDGE_TYPE 0x01 |
| #define PCI_CARDBUS_BRIDGE_TYPE 0x02 |
| |
| #define PCI_CONFIGURATION_TYPE(PciData) \ |
| (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION) |
| |
| #define PCI_MULTIFUNCTION_DEVICE(PciData) \ |
| ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0) |
| |
| typedef struct _PCI_SLOT_NUMBER { |
| union { |
| struct { |
| ULONG DeviceNumber : 5; |
| ULONG FunctionNumber : 3; |
| ULONG Reserved : 24; |
| } bits; |
| ULONG AsULONG; |
| } u; |
| } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER; |
| |
| typedef enum _POOL_TYPE { |
| NonPagedPool, |
| PagedPool, |
| NonPagedPoolMustSucceed, |
| DontUseThisType, |
| NonPagedPoolCacheAligned, |
| PagedPoolCacheAligned, |
| NonPagedPoolCacheAlignedMustS, |
| MaxPoolType, |
| NonPagedPoolSession = 32, |
| PagedPoolSession, |
| NonPagedPoolMustSucceedSession, |
| DontUseThisTypeSession, |
| NonPagedPoolCacheAlignedSession, |
| PagedPoolCacheAlignedSession, |
| NonPagedPoolCacheAlignedMustSSession |
| } POOL_TYPE; |
| |
| typedef enum _EX_POOL_PRIORITY { |
| LowPoolPriority, |
| LowPoolPrioritySpecialPoolOverrun = 8, |
| LowPoolPrioritySpecialPoolUnderrun = 9, |
| NormalPoolPriority = 16, |
| NormalPoolPrioritySpecialPoolOverrun = 24, |
| NormalPoolPrioritySpecialPoolUnderrun = 25, |
| HighPoolPriority = 32, |
| HighPoolPrioritySpecialPoolOverrun = 40, |
| HighPoolPrioritySpecialPoolUnderrun = 41 |
| } EX_POOL_PRIORITY; |
| |
| /* PRIVILEGE_SET.Control */ |
| |
| #define PRIVILEGE_SET_ALL_NECESSARY 1 |
| |
| typedef struct _RTL_OSVERSIONINFOW { |
| ULONG dwOSVersionInfoSize; |
| ULONG dwMajorVersion; |
| ULONG dwMinorVersion; |
| ULONG dwBuildNumber; |
| ULONG dwPlatformId; |
| WCHAR szCSDVersion[128]; |
| } RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW; |
| |
| typedef struct _RTL_OSVERSIONINFOEXW { |
| ULONG dwOSVersionInfoSize; |
| ULONG dwMajorVersion; |
| ULONG dwMinorVersion; |
| ULONG dwBuildNumber; |
| ULONG dwPlatformId; |
| WCHAR szCSDVersion[128]; |
| USHORT wServicePackMajor; |
| USHORT wServicePackMinor; |
| USHORT wSuiteMask; |
| UCHAR wProductType; |
| UCHAR wReserved; |
| } RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW; |
| |
| NTOSAPI |
| ULONGLONG |
| DDKAPI |
| VerSetConditionMask( |
| /*IN*/ ULONGLONG ConditionMask, |
| /*IN*/ ULONG TypeMask, |
| /*IN*/ UCHAR Condition); |
| |
| #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \ |
| ((ConditionMask) = VerSetConditionMask((ConditionMask), \ |
| (TypeBitMask), (ComparisonType))) |
| |
| /* RtlVerifyVersionInfo() TypeMask */ |
| |
| #define VER_MINORVERSION 0x0000001 |
| #define VER_MAJORVERSION 0x0000002 |
| #define VER_BUILDNUMBER 0x0000004 |
| #define VER_PLATFORMID 0x0000008 |
| #define VER_SERVICEPACKMINOR 0x0000010 |
| #define VER_SERVICEPACKMAJOR 0x0000020 |
| #define VER_SUITENAME 0x0000040 |
| #define VER_PRODUCT_TYPE 0x0000080 |
| |
| /* RtlVerifyVersionInfo() ComparisonType */ |
| |
| #define VER_EQUAL 1 |
| #define VER_GREATER 2 |
| #define VER_GREATER_EQUAL 3 |
| #define VER_LESS 4 |
| #define VER_LESS_EQUAL 5 |
| #define VER_AND 6 |
| #define VER_OR 7 |
| |
| #define VER_CONDITION_MASK 7 |
| #define VER_NUM_BITS_PER_CONDITION_MASK 3 |
| |
| typedef struct _RTL_BITMAP { |
| ULONG SizeOfBitMap; |
| PULONG Buffer; |
| } RTL_BITMAP, *PRTL_BITMAP; |
| |
| typedef struct _RTL_BITMAP_RUN { |
| ULONG StartingIndex; |
| ULONG NumberOfBits; |
| } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN; |
| |
| typedef NTSTATUS DDKAPI |
| (*PRTL_QUERY_REGISTRY_ROUTINE)( |
| /*IN*/ PWSTR ValueName, |
| /*IN*/ ULONG ValueType, |
| /*IN*/ PVOID ValueData, |
| /*IN*/ ULONG ValueLength, |
| /*IN*/ PVOID Context, |
| /*IN*/ PVOID EntryContext); |
| |
| #define RTL_REGISTRY_ABSOLUTE 0 |
| #define RTL_REGISTRY_SERVICES 1 |
| #define RTL_REGISTRY_CONTROL 2 |
| #define RTL_REGISTRY_WINDOWS_NT 3 |
| #define RTL_REGISTRY_DEVICEMAP 4 |
| #define RTL_REGISTRY_USER 5 |
| |
| /* RTL_QUERY_REGISTRY_TABLE.Flags */ |
| #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001 |
| #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002 |
| #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004 |
| #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008 |
| #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010 |
| #define RTL_QUERY_REGISTRY_DIRECT 0x00000020 |
| #define RTL_QUERY_REGISTRY_DELETE 0x00000040 |
| |
| typedef struct _RTL_QUERY_REGISTRY_TABLE { |
| PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine; |
| ULONG Flags; |
| PWSTR Name; |
| PVOID EntryContext; |
| ULONG DefaultType; |
| PVOID DefaultData; |
| ULONG DefaultLength; |
| } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE; |
| |
| typedef struct _TIME_FIELDS { |
| CSHORT Year; |
| CSHORT Month; |
| CSHORT Day; |
| CSHORT Hour; |
| CSHORT Minute; |
| CSHORT Second; |
| CSHORT Milliseconds; |
| CSHORT Weekday; |
| } TIME_FIELDS, *PTIME_FIELDS; |
| |
| typedef PVOID DDKAPI |
| (*PALLOCATE_FUNCTION)( |
| /*IN*/ POOL_TYPE PoolType, |
| /*IN*/ SIZE_T NumberOfBytes, |
| /*IN*/ ULONG Tag); |
| |
| typedef VOID DDKAPI |
| (*PFREE_FUNCTION)( |
| /*IN*/ PVOID Buffer); |
| |
| #define GENERAL_LOOKASIDE_S \ |
| SLIST_HEADER ListHead; \ |
| USHORT Depth; \ |
| USHORT MaximumDepth; \ |
| ULONG TotalAllocates; \ |
| _ANONYMOUS_UNION union { \ |
| ULONG AllocateMisses; \ |
| ULONG AllocateHits; \ |
| } DUMMYUNIONNAME; \ |
| ULONG TotalFrees; \ |
| _ANONYMOUS_UNION union { \ |
| ULONG FreeMisses; \ |
| ULONG FreeHits; \ |
| } DUMMYUNIONNAME2; \ |
| POOL_TYPE Type; \ |
| ULONG Tag; \ |
| ULONG Size; \ |
| PALLOCATE_FUNCTION Allocate; \ |
| PFREE_FUNCTION Free; \ |
| LIST_ENTRY ListEntry; \ |
| ULONG LastTotalAllocates; \ |
| _ANONYMOUS_UNION union { \ |
| ULONG LastAllocateMisses; \ |
| ULONG LastAllocateHits; \ |
| } DUMMYUNIONNAME3; \ |
| ULONG Future[2]; |
| |
| typedef struct _GENERAL_LOOKASIDE { |
| GENERAL_LOOKASIDE_S |
| } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE; |
| |
| typedef struct _NPAGED_LOOKASIDE_LIST { |
| GENERAL_LOOKASIDE_S |
| KSPIN_LOCK Obsoleted; |
| } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST; |
| |
| typedef struct _PAGED_LOOKASIDE_LIST { |
| GENERAL_LOOKASIDE_S |
| FAST_MUTEX Obsoleted; |
| } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST; |
| |
| typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT; |
| |
| typedef VOID DDKAPI (*PCALLBACK_FUNCTION)( |
| /*IN*/ PVOID CallbackContext, |
| /*IN*/ PVOID Argument1, |
| /*IN*/ PVOID Argument2); |
| |
| typedef enum _EVENT_TYPE { |
| NotificationEvent, |
| SynchronizationEvent |
| } EVENT_TYPE; |
| |
| typedef enum _KWAIT_REASON { |
| Executive, |
| FreePage, |
| PageIn, |
| PoolAllocation, |
| DelayExecution, |
| Suspended, |
| UserRequest, |
| WrExecutive, |
| WrFreePage, |
| WrPageIn, |
| WrPoolAllocation, |
| WrDelayExecution, |
| WrSuspended, |
| WrUserRequest, |
| WrEventPair, |
| WrQueue, |
| WrLpcReceive, |
| WrLpcReply, |
| WrVirtualMemory, |
| WrPageOut, |
| WrRendezvous, |
| Spare2, |
| Spare3, |
| Spare4, |
| Spare5, |
| Spare6, |
| WrKernel, |
| MaximumWaitReason |
| } KWAIT_REASON; |
| |
| typedef struct _KWAIT_BLOCK { |
| LIST_ENTRY WaitListEntry; |
| struct _KTHREAD * RESTRICTED_POINTER Thread; |
| PVOID Object; |
| struct _KWAIT_BLOCK * RESTRICTED_POINTER NextWaitBlock; |
| USHORT WaitKey; |
| USHORT WaitType; |
| } KWAIT_BLOCK, *PKWAIT_BLOCK, *RESTRICTED_POINTER PRKWAIT_BLOCK; |
| |
| typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK; |
| |
| typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK { |
| BOOLEAN Removed; |
| BOOLEAN Reserved[3]; |
| LONG IoCount; |
| KEVENT RemoveEvent; |
| } IO_REMOVE_LOCK_COMMON_BLOCK; |
| |
| typedef struct _IO_REMOVE_LOCK_DBG_BLOCK { |
| LONG Signature; |
| LONG HighWatermark; |
| LONGLONG MaxLockedTicks; |
| LONG AllocateTag; |
| LIST_ENTRY LockList; |
| KSPIN_LOCK Spin; |
| LONG LowMemoryCount; |
| ULONG Reserved1[4]; |
| PVOID Reserved2; |
| PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks; |
| } IO_REMOVE_LOCK_DBG_BLOCK; |
| |
| typedef struct _IO_REMOVE_LOCK { |
| IO_REMOVE_LOCK_COMMON_BLOCK Common; |
| #ifdef DBG |
| IO_REMOVE_LOCK_DBG_BLOCK Dbg; |
| #endif |
| } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK; |
| |
| typedef struct _IO_WORKITEM *PIO_WORKITEM; |
| |
| typedef VOID DDKAPI |
| (*PIO_WORKITEM_ROUTINE)( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PVOID Context); |
| |
| typedef struct _SHARE_ACCESS { |
| ULONG OpenCount; |
| ULONG Readers; |
| ULONG Writers; |
| ULONG Deleters; |
| ULONG SharedRead; |
| ULONG SharedWrite; |
| ULONG SharedDelete; |
| } SHARE_ACCESS, *PSHARE_ACCESS; |
| |
| typedef enum _KINTERRUPT_MODE { |
| LevelSensitive, |
| Latched |
| } KINTERRUPT_MODE; |
| |
| typedef VOID DDKAPI |
| (*PKINTERRUPT_ROUTINE)( |
| VOID); |
| |
| typedef enum _KPROFILE_SOURCE { |
| ProfileTime, |
| ProfileAlignmentFixup, |
| ProfileTotalIssues, |
| ProfilePipelineDry, |
| ProfileLoadInstructions, |
| ProfilePipelineFrozen, |
| ProfileBranchInstructions, |
| ProfileTotalNonissues, |
| ProfileDcacheMisses, |
| ProfileIcacheMisses, |
| ProfileCacheMisses, |
| ProfileBranchMispredictions, |
| ProfileStoreInstructions, |
| ProfileFpInstructions, |
| ProfileIntegerInstructions, |
| Profile2Issue, |
| Profile3Issue, |
| Profile4Issue, |
| ProfileSpecialInstructions, |
| ProfileTotalCycles, |
| ProfileIcacheIssues, |
| ProfileDcacheAccesses, |
| ProfileMemoryBarrierCycles, |
| ProfileLoadLinkedIssues, |
| ProfileMaximum |
| } KPROFILE_SOURCE; |
| |
| typedef enum _CREATE_FILE_TYPE { |
| CreateFileTypeNone, |
| CreateFileTypeNamedPipe, |
| CreateFileTypeMailslot |
| } CREATE_FILE_TYPE; |
| |
| typedef struct _CONFIGURATION_INFORMATION { |
| ULONG DiskCount; |
| ULONG FloppyCount; |
| ULONG CdRomCount; |
| ULONG TapeCount; |
| ULONG ScsiPortCount; |
| ULONG SerialCount; |
| ULONG ParallelCount; |
| BOOLEAN AtDiskPrimaryAddressClaimed; |
| BOOLEAN AtDiskSecondaryAddressClaimed; |
| ULONG Version; |
| ULONG MediumChangerCount; |
| } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION; |
| |
| typedef enum _CONFIGURATION_TYPE { |
| ArcSystem, |
| CentralProcessor, |
| FloatingPointProcessor, |
| PrimaryIcache, |
| PrimaryDcache, |
| SecondaryIcache, |
| SecondaryDcache, |
| SecondaryCache, |
| EisaAdapter, |
| TcAdapter, |
| ScsiAdapter, |
| DtiAdapter, |
| MultiFunctionAdapter, |
| DiskController, |
| TapeController, |
| CdromController, |
| WormController, |
| SerialController, |
| NetworkController, |
| DisplayController, |
| ParallelController, |
| PointerController, |
| KeyboardController, |
| AudioController, |
| OtherController, |
| DiskPeripheral, |
| FloppyDiskPeripheral, |
| TapePeripheral, |
| ModemPeripheral, |
| MonitorPeripheral, |
| PrinterPeripheral, |
| PointerPeripheral, |
| KeyboardPeripheral, |
| TerminalPeripheral, |
| OtherPeripheral, |
| LinePeripheral, |
| NetworkPeripheral, |
| SystemMemory, |
| DockingInformation, |
| RealModeIrqRoutingTable, |
| MaximumType |
| } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE; |
| |
| typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE)( |
| /*IN*/ PVOID Context, |
| /*IN*/ PUNICODE_STRING PathName, |
| /*IN*/ INTERFACE_TYPE BusType, |
| /*IN*/ ULONG BusNumber, |
| /*IN*/ PKEY_VALUE_FULL_INFORMATION *BusInformation, |
| /*IN*/ CONFIGURATION_TYPE ControllerType, |
| /*IN*/ ULONG ControllerNumber, |
| /*IN*/ PKEY_VALUE_FULL_INFORMATION *ControllerInformation, |
| /*IN*/ CONFIGURATION_TYPE PeripheralType, |
| /*IN*/ ULONG PeripheralNumber, |
| /*IN*/ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation); |
| |
| typedef enum _WORK_QUEUE_TYPE { |
| CriticalWorkQueue, |
| DelayedWorkQueue, |
| HyperCriticalWorkQueue, |
| MaximumWorkQueue |
| } WORK_QUEUE_TYPE; |
| |
| typedef VOID DDKAPI |
| (*PWORKER_THREAD_ROUTINE)( |
| /*IN*/ PVOID Parameter); |
| |
| typedef struct _WORK_QUEUE_ITEM { |
| LIST_ENTRY List; |
| PWORKER_THREAD_ROUTINE WorkerRoutine; |
| PVOID Parameter; |
| } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM; |
| |
| typedef enum _KBUGCHECK_BUFFER_DUMP_STATE { |
| BufferEmpty, |
| BufferInserted, |
| BufferStarted, |
| BufferFinished, |
| BufferIncomplete |
| } KBUGCHECK_BUFFER_DUMP_STATE; |
| |
| typedef VOID DDKAPI |
| (*PKBUGCHECK_CALLBACK_ROUTINE)( |
| /*IN*/ PVOID Buffer, |
| /*IN*/ ULONG Length); |
| |
| typedef struct _KBUGCHECK_CALLBACK_RECORD { |
| LIST_ENTRY Entry; |
| PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine; |
| PVOID Buffer; |
| ULONG Length; |
| PUCHAR Component; |
| ULONG_PTR Checksum; |
| UCHAR State; |
| } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; |
| |
| /* |
| * VOID |
| * KeInitializeCallbackRecord( |
| * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord) |
| */ |
| #define KeInitializeCallbackRecord(CallbackRecord) \ |
| CallbackRecord->State = BufferEmpty; |
| |
| typedef enum _KDPC_IMPORTANCE { |
| LowImportance, |
| MediumImportance, |
| HighImportance |
| } KDPC_IMPORTANCE; |
| |
| typedef enum _MEMORY_CACHING_TYPE_ORIG { |
| MmFrameBufferCached = 2 |
| } MEMORY_CACHING_TYPE_ORIG; |
| |
| typedef enum _MEMORY_CACHING_TYPE { |
| MmNonCached = FALSE, |
| MmCached = TRUE, |
| MmWriteCombined = MmFrameBufferCached, |
| MmHardwareCoherentCached, |
| MmNonCachedUnordered, |
| MmUSWCCached, |
| MmMaximumCacheType |
| } MEMORY_CACHING_TYPE; |
| |
| typedef enum _MM_PAGE_PRIORITY { |
| LowPagePriority, |
| NormalPagePriority = 16, |
| HighPagePriority = 32 |
| } MM_PAGE_PRIORITY; |
| |
| typedef enum _LOCK_OPERATION { |
| IoReadAccess, |
| IoWriteAccess, |
| IoModifyAccess |
| } LOCK_OPERATION; |
| |
| typedef enum _MM_SYSTEM_SIZE { |
| MmSmallSystem, |
| MmMediumSystem, |
| MmLargeSystem |
| } MM_SYSTEM_SIZE; |
| |
| typedef struct _OBJECT_HANDLE_INFORMATION { |
| ULONG HandleAttributes; |
| ACCESS_MASK GrantedAccess; |
| } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION; |
| |
| typedef struct _CLIENT_ID { |
| HANDLE UniqueProcess; |
| HANDLE UniqueThread; |
| } CLIENT_ID, *PCLIENT_ID; |
| |
| typedef VOID DDKAPI |
| (*PKSTART_ROUTINE)( |
| /*IN*/ PVOID StartContext); |
| |
| typedef VOID DDKAPI |
| (*PCREATE_PROCESS_NOTIFY_ROUTINE)( |
| /*IN*/ HANDLE ParentId, |
| /*IN*/ HANDLE ProcessId, |
| /*IN*/ BOOLEAN Create); |
| |
| typedef VOID DDKAPI |
| (*PCREATE_THREAD_NOTIFY_ROUTINE)( |
| /*IN*/ HANDLE ProcessId, |
| /*IN*/ HANDLE ThreadId, |
| /*IN*/ BOOLEAN Create); |
| |
| typedef struct _IMAGE_INFO { |
| _ANONYMOUS_UNION union { |
| ULONG Properties; |
| _ANONYMOUS_STRUCT struct { |
| ULONG ImageAddressingMode : 8; |
| ULONG SystemModeImage : 1; |
| ULONG ImageMappedToAllPids : 1; |
| ULONG Reserved : 22; |
| } DUMMYSTRUCTNAME; |
| } DUMMYUNIONNAME; |
| PVOID ImageBase; |
| ULONG ImageSelector; |
| SIZE_T ImageSize; |
| ULONG ImageSectionNumber; |
| } IMAGE_INFO, *PIMAGE_INFO; |
| |
| #define IMAGE_ADDRESSING_MODE_32BIT 3 |
| |
| typedef VOID DDKAPI |
| (*PLOAD_IMAGE_NOTIFY_ROUTINE)( |
| /*IN*/ PUNICODE_STRING FullImageName, |
| /*IN*/ HANDLE ProcessId, |
| /*IN*/ PIMAGE_INFO ImageInfo); |
| |
| typedef enum _PROCESSINFOCLASS { |
| ProcessBasicInformation, |
| ProcessQuotaLimits, |
| ProcessIoCounters, |
| ProcessVmCounters, |
| ProcessTimes, |
| ProcessBasePriority, |
| ProcessRaisePriority, |
| ProcessDebugPort, |
| ProcessExceptionPort, |
| ProcessAccessToken, |
| ProcessLdtInformation, |
| ProcessLdtSize, |
| ProcessDefaultHardErrorMode, |
| ProcessIoPortHandlers, |
| ProcessPooledUsageAndLimits, |
| ProcessWorkingSetWatch, |
| ProcessUserModeIOPL, |
| ProcessEnableAlignmentFaultFixup, |
| ProcessPriorityClass, |
| ProcessWx86Information, |
| ProcessHandleCount, |
| ProcessAffinityMask, |
| ProcessPriorityBoost, |
| ProcessDeviceMap, |
| ProcessSessionInformation, |
| ProcessForegroundInformation, |
| ProcessWow64Information, |
| ProcessImageFileName, |
| ProcessLUIDDeviceMapsEnabled, |
| ProcessBreakOnTermination, |
| ProcessDebugObjectHandle, |
| ProcessDebugFlags, |
| ProcessHandleTracing, |
| MaxProcessInfoClass |
| } PROCESSINFOCLASS; |
| |
| typedef enum _THREADINFOCLASS { |
| ThreadBasicInformation, |
| ThreadTimes, |
| ThreadPriority, |
| ThreadBasePriority, |
| ThreadAffinityMask, |
| ThreadImpersonationToken, |
| ThreadDescriptorTableEntry, |
| ThreadEnableAlignmentFaultFixup, |
| ThreadEventPair_Reusable, |
| ThreadQuerySetWin32StartAddress, |
| ThreadZeroTlsCell, |
| ThreadPerformanceCount, |
| ThreadAmILastThread, |
| ThreadIdealProcessor, |
| ThreadPriorityBoost, |
| ThreadSetTlsArrayAddress, |
| ThreadIsIoPending, |
| ThreadHideFromDebugger, |
| ThreadBreakOnTermination, |
| MaxThreadInfoClass |
| } THREADINFOCLASS; |
| |
| #define ES_SYSTEM_REQUIRED 0x00000001 |
| #define ES_DISPLAY_REQUIRED 0x00000002 |
| #define ES_USER_PRESENT 0x00000004 |
| #define ES_CONTINUOUS 0x80000000 |
| |
| typedef ULONG EXECUTION_STATE; |
| |
| typedef VOID DDKAPI |
| (*PREQUEST_POWER_COMPLETE)( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ UCHAR MinorFunction, |
| /*IN*/ POWER_STATE PowerState, |
| /*IN*/ PVOID Context, |
| /*IN*/ PIO_STATUS_BLOCK IoStatus); |
| |
| typedef enum _TRACE_INFORMATION_CLASS { |
| TraceIdClass, |
| TraceHandleClass, |
| TraceEnableFlagsClass, |
| TraceEnableLevelClass, |
| GlobalLoggerHandleClass, |
| EventLoggerHandleClass, |
| AllLoggerHandlesClass, |
| TraceHandleByNameClass |
| } TRACE_INFORMATION_CLASS; |
| |
| typedef NTSTATUS DDKAPI |
| (*PEX_CALLBACK_FUNCTION)( |
| /*IN*/ PVOID CallbackContext, |
| /*IN*/ PVOID Argument1, |
| /*IN*/ PVOID Argument2); |
| |
| |
| |
| /* |
| ** Storage structures |
| */ |
| typedef enum _PARTITION_STYLE { |
| PARTITION_STYLE_MBR, |
| PARTITION_STYLE_GPT |
| } PARTITION_STYLE; |
| |
| typedef struct _CREATE_DISK_MBR { |
| ULONG Signature; |
| } CREATE_DISK_MBR, *PCREATE_DISK_MBR; |
| |
| typedef struct _CREATE_DISK_GPT { |
| GUID DiskId; |
| ULONG MaxPartitionCount; |
| } CREATE_DISK_GPT, *PCREATE_DISK_GPT; |
| |
| typedef struct _CREATE_DISK { |
| PARTITION_STYLE PartitionStyle; |
| _ANONYMOUS_UNION union { |
| CREATE_DISK_MBR Mbr; |
| CREATE_DISK_GPT Gpt; |
| } DUMMYUNIONNAME; |
| } CREATE_DISK, *PCREATE_DISK; |
| |
| typedef struct _DISK_SIGNATURE { |
| ULONG PartitionStyle; |
| _ANONYMOUS_UNION union { |
| struct { |
| ULONG Signature; |
| ULONG CheckSum; |
| } Mbr; |
| struct { |
| GUID DiskId; |
| } Gpt; |
| } DUMMYUNIONNAME; |
| } DISK_SIGNATURE, *PDISK_SIGNATURE; |
| |
| typedef VOID DDKFASTAPI |
| (*PTIME_UPDATE_NOTIFY_ROUTINE)( |
| /*IN*/ HANDLE ThreadId, |
| /*IN*/ KPROCESSOR_MODE Mode); |
| |
| #define DBG_STATUS_CONTROL_C 1 |
| #define DBG_STATUS_SYSRQ 2 |
| #define DBG_STATUS_BUGCHECK_FIRST 3 |
| #define DBG_STATUS_BUGCHECK_SECOND 4 |
| #define DBG_STATUS_FATAL 5 |
| #define DBG_STATUS_DEBUG_CONTROL 6 |
| #define DBG_STATUS_WORKER 7 |
| |
| typedef struct _PHYSICAL_MEMORY_RANGE { |
| PHYSICAL_ADDRESS BaseAddress; |
| LARGE_INTEGER NumberOfBytes; |
| } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE; |
| |
| typedef ULONG_PTR |
| (*PDRIVER_VERIFIER_THUNK_ROUTINE)( |
| /*IN*/ PVOID Context); |
| |
| typedef struct _DRIVER_VERIFIER_THUNK_PAIRS { |
| PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine; |
| PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine; |
| } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS; |
| |
| #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001 |
| #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002 |
| #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004 |
| #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008 |
| #define DRIVER_VERIFIER_IO_CHECKING 0x0010 |
| |
| #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001 |
| #define RTL_RANGE_LIST_ADD_SHARED 0x00000002 |
| |
| #define RTL_RANGE_LIST_SHARED_OK 0x00000001 |
| #define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002 |
| |
| #define RTL_RANGE_LIST_SHARED_OK 0x00000001 |
| #define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002 |
| |
| #define RTL_RANGE_LIST_MERGE_IF_CONFLICT RTL_RANGE_LIST_ADD_IF_CONFLICT |
| |
| typedef struct _RTL_RANGE { |
| ULONGLONG Start; |
| ULONGLONG End; |
| PVOID UserData; |
| PVOID Owner; |
| UCHAR Attributes; |
| UCHAR Flags; |
| } RTL_RANGE, *PRTL_RANGE; |
| |
| #define RTL_RANGE_SHARED 0x01 |
| #define RTL_RANGE_CONFLICT 0x02 |
| |
| typedef struct _RTL_RANGE_LIST { |
| LIST_ENTRY ListHead; |
| ULONG Flags; |
| ULONG Count; |
| ULONG Stamp; |
| } RTL_RANGE_LIST, *PRTL_RANGE_LIST; |
| |
| typedef struct _RANGE_LIST_ITERATOR { |
| PLIST_ENTRY RangeListHead; |
| PLIST_ENTRY MergedHead; |
| PVOID Current; |
| ULONG Stamp; |
| } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR; |
| |
| typedef BOOLEAN |
| (*PRTL_CONFLICT_RANGE_CALLBACK)( |
| /*IN*/ PVOID Context, |
| /*IN*/ PRTL_RANGE Range); |
| |
| #define HASH_STRING_ALGORITHM_DEFAULT 0 |
| #define HASH_STRING_ALGORITHM_X65599 1 |
| #define HASH_STRING_ALGORITHM_INVALID 0xffffffff |
| |
| typedef enum _SUITE_TYPE { |
| SmallBusiness, |
| Enterprise, |
| BackOffice, |
| CommunicationServer, |
| TerminalServer, |
| SmallBusinessRestricted, |
| EmbeddedNT, |
| DataCenter, |
| SingleUserTS, |
| Personal, |
| Blade, |
| MaxSuiteType |
| } SUITE_TYPE; |
| |
| typedef VOID DDKAPI |
| (*PTIMER_APC_ROUTINE)( |
| /*IN*/ PVOID TimerContext, |
| /*IN*/ ULONG TimerLowValue, |
| /*IN*/ LONG TimerHighValue); |
| |
| |
| |
| /* |
| ** WMI structures |
| */ |
| |
| typedef VOID DDKAPI |
| (*WMI_NOTIFICATION_CALLBACK)( |
| PVOID Wnode, |
| PVOID Context); |
| |
| |
| /* |
| ** Architecture specific structures |
| */ |
| |
| #ifdef _X86_ |
| |
| typedef ULONG PFN_NUMBER, *PPFN_NUMBER; |
| |
| #define PASSIVE_LEVEL 0 |
| #define LOW_LEVEL 0 |
| #define APC_LEVEL 1 |
| #define DISPATCH_LEVEL 2 |
| #define SYNCH_LEVEL 27 |
| #define PROFILE_LEVEL 27 |
| #define CLOCK1_LEVEL 28 |
| #define CLOCK2_LEVEL 28 |
| #define IPI_LEVEL 29 |
| #define POWER_LEVEL 30 |
| #define HIGH_LEVEL 31 |
| |
| typedef struct _KPCR_TIB { |
| PVOID ExceptionList; /* 00 */ |
| PVOID StackBase; /* 04 */ |
| PVOID StackLimit; /* 08 */ |
| PVOID SubSystemTib; /* 0C */ |
| _ANONYMOUS_UNION union { |
| PVOID FiberData; /* 10 */ |
| DWORD Version; /* 10 */ |
| } DUMMYUNIONNAME; |
| PVOID ArbitraryUserPointer; /* 14 */ |
| struct _NT_TIB *Self; /* 18 */ |
| } KPCR_TIB, *PKPCR_TIB; /* 1C */ |
| |
| #define PCR_MINOR_VERSION 1 |
| #define PCR_MAJOR_VERSION 1 |
| |
| typedef struct _KPCR { |
| KPCR_TIB Tib; /* 00 */ |
| struct _KPCR *Self; /* 1C */ |
| struct _KPRCB *PCRCB; /* 20 */ |
| KIRQL Irql; /* 24 */ |
| ULONG IRR; /* 28 */ |
| ULONG IrrActive; /* 2C */ |
| ULONG IDR; /* 30 */ |
| PVOID KdVersionBlock; /* 34 */ |
| PUSHORT IDT; /* 38 */ |
| PUSHORT GDT; /* 3C */ |
| struct _KTSS *TSS; /* 40 */ |
| USHORT MajorVersion; /* 44 */ |
| USHORT MinorVersion; /* 46 */ |
| KAFFINITY SetMember; /* 48 */ |
| ULONG StallScaleFactor; /* 4C */ |
| UCHAR SpareUnused; /* 50 */ |
| UCHAR Number; /* 51 */ |
| } KPCR, *PKPCR; /* 54 */ |
| |
| typedef struct _KFLOATING_SAVE { |
| ULONG ControlWord; |
| ULONG StatusWord; |
| ULONG ErrorOffset; |
| ULONG ErrorSelector; |
| ULONG DataOffset; |
| ULONG DataSelector; |
| ULONG Cr0NpxState; |
| ULONG Spare1; |
| } KFLOATING_SAVE, *PKFLOATING_SAVE; |
| |
| #define PAGE_SIZE 0x1000 |
| #define PAGE_SHIFT 12L |
| |
| extern NTOSAPI PVOID *MmHighestUserAddress; |
| extern NTOSAPI PVOID *MmSystemRangeStart; |
| extern NTOSAPI ULONG *MmUserProbeAddress; |
| |
| #define MM_HIGHEST_USER_ADDRESS *MmHighestUserAddress |
| #define MM_SYSTEM_RANGE_START *MmSystemRangeStart |
| #define MM_USER_PROBE_ADDRESS *MmUserProbeAddress |
| #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000 |
| #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000 |
| |
| #define KI_USER_SHARED_DATA 0xffdf0000 |
| #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA) |
| |
| #define EFLAG_SIGN 0x8000 |
| #define EFLAG_ZERO 0x4000 |
| #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO) |
| |
| #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) |
| #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT) |
| #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT) |
| |
| typedef enum _INTERLOCKED_RESULT { |
| ResultNegative = RESULT_NEGATIVE, |
| ResultZero = RESULT_ZERO, |
| ResultPositive = RESULT_POSITIVE |
| } INTERLOCKED_RESULT; |
| |
| NTOSAPI |
| KIRQL |
| DDKAPI |
| KeGetCurrentIrql( |
| VOID); |
| |
| /* |
| * ULONG |
| * KeGetCurrentProcessorNumber( |
| * VOID) |
| */ |
| #define KeGetCurrentProcessorNumber() \ |
| ((ULONG)KeGetCurrentKPCR()->Number) |
| |
| |
| #if __USE_NTOSKRNL__ |
| /* CAREFUL: These are exported from ntoskrnl.exe as __fastcall functions, |
| but are also exported from kernel32.dll and declared in winbase.h as |
| __stdcall */ |
| #if !defined(__INTERLOCKED_DECLARED) |
| #define __INTERLOCKED_DECLARED |
| |
| NTOSAPI |
| LONG |
| DDKFASTAPI |
| InterlockedIncrement( |
| /*IN*/ LONG VOLATILE *Addend); |
| |
| NTOSAPI |
| LONG |
| DDKFASTAPI |
| InterlockedDecrement( |
| /*IN*/ LONG VOLATILE *Addend); |
| |
| NTOSAPI |
| LONG |
| DDKFASTAPI |
| InterlockedCompareExchange( |
| /*IN OUT*/ PLONG VOLATILE Destination, |
| /*IN*/ LONG Exchange, |
| /*IN*/ LONG Comparand); |
| |
| NTOSAPI |
| LONG |
| DDKFASTAPI |
| InterlockedExchange( |
| /*IN OUT*/ PLONG VOLATILE Target, |
| /*IN*/ LONG Value); |
| |
| NTOSAPI |
| LONG |
| DDKFASTAPI |
| InterlockedExchangeAdd( |
| /*IN OUT*/ PLONG VOLATILE Addend, |
| /*IN*/ LONG Value); |
| |
| /* |
| * PVOID |
| * InterlockedExchangePointer( |
| * IN OUT PVOID VOLATILE *Target, |
| * IN PVOID Value) |
| */ |
| #define InterlockedExchangePointer(Target, Value) \ |
| ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value)) |
| |
| /* |
| * PVOID |
| * InterlockedCompareExchangePointer( |
| * IN OUT PVOID *Destination, |
| * IN PVOID Exchange, |
| * IN PVOID Comparand) |
| */ |
| #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \ |
| ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand)) |
| |
| #if (_WIN32_WINNT >= 0x0501) |
| PSLIST_ENTRY |
| DDKFASTAPI |
| InterlockedPopEntrySList( |
| /*IN*/ PSLIST_HEADER ListHead); |
| |
| NTOSAPI |
| PSLIST_ENTRY |
| DDKFASTAPI |
| InterlockedPushEntrySList( |
| /*IN*/ PSLIST_HEADER ListHead, |
| /*IN*/ PSLIST_ENTRY ListEntry); |
| #endif /* _WIN32_WINNT >= 0x0501 */ |
| |
| #endif /* !__INTERLOCKED_DECLARED */ |
| #endif /* __USE_NTOSKRNL__ */ |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| KefAcquireSpinLockAtDpcLevel( |
| /*IN*/ PKSPIN_LOCK SpinLock); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| KefReleaseSpinLockFromDpcLevel( |
| /*IN*/ PKSPIN_LOCK SpinLock); |
| |
| #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock) |
| #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock) |
| |
| #define RtlCopyMemoryNonTemporal RtlCopyMemory |
| |
| #define KeGetDcacheFillSize() 1L |
| |
| #endif /* _X86_ */ |
| |
| |
| |
| /* |
| ** Utillity functions |
| */ |
| |
| #define ARGUMENT_PRESENT(ArgumentPointer) \ |
| ((BOOLEAN) ((PVOID)ArgumentPointer != (PVOID)NULL)) |
| |
| /* |
| * ULONG |
| * BYTE_OFFSET( |
| * IN PVOID Va) |
| */ |
| #define BYTE_OFFSET(Va) \ |
| ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1))) |
| |
| /* |
| * ULONG |
| * BYTES_TO_PAGES( |
| * IN ULONG Size) |
| */ |
| #define BYTES_TO_PAGES(Size) \ |
| ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0)) |
| |
| /* |
| * PCHAR |
| * CONTAINING_RECORD( |
| * IN PCHAR Address, |
| * IN TYPE Type, |
| * IN PCHAR Field); |
| */ |
| #ifndef CONTAINING_RECORD |
| #define CONTAINING_RECORD(Address, Type, Field) \ |
| ((Type *) (((ULONG_PTR) Address) - FIELD_OFFSET(Type, Field))) |
| #endif |
| |
| /* LONG |
| * FIELD_OFFSET( |
| * IN TYPE Type, |
| * IN PCHAR Field); |
| */ |
| #ifndef FIELD_OFFSET |
| #define FIELD_OFFSET(Type, Field) \ |
| ((LONG) (&(((Type *) 0)->Field))) |
| #endif |
| |
| /* |
| * PVOID |
| * PAGE_ALIGN( |
| * IN PVOID Va) |
| */ |
| #define PAGE_ALIGN(Va) \ |
| ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1))) |
| |
| /* |
| * ULONG_PTR |
| * ROUND_TO_PAGES( |
| * IN ULONG_PTR Size) |
| */ |
| #define ROUND_TO_PAGES(Size) \ |
| ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1))) |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlAssert( |
| /*IN*/ PVOID FailedAssertion, |
| /*IN*/ PVOID FileName, |
| /*IN*/ ULONG LineNumber, |
| /*IN*/ PCHAR Message); |
| |
| #ifdef DBG |
| |
| #define ASSERT(exp) \ |
| ((!(exp)) ? \ |
| (RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE) : TRUE) |
| |
| #define ASSERTMSG(msg, exp) \ |
| ((!(exp)) ? \ |
| (RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE) : TRUE) |
| |
| #define RTL_SOFT_ASSERT(exp) \ |
| ((!(_exp)) ? \ |
| (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n", __FILE__, __LINE__, #exp), FALSE) : TRUE) |
| |
| #define RTL_SOFT_ASSERTMSG(msg, exp) \ |
| ((!(exp)) ? \ |
| (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", __FILE__, __LINE__, #exp, (msg)), FALSE) : TRUE) |
| |
| #define RTL_VERIFY(exp) ASSERT(exp) |
| #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp) |
| |
| #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp) |
| #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp) |
| |
| #else /* !DBG */ |
| |
| #define ASSERT(exp) ((VOID) 0) |
| #define ASSERTMSG(msg, exp) ((VOID) 0) |
| |
| #define RTL_SOFT_ASSERT(exp) ((VOID) 0) |
| #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0) |
| |
| #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE) |
| #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) |
| |
| #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE) |
| #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE) |
| |
| #endif /* DBG */ |
| |
| |
| /* |
| ** Driver support routines |
| */ |
| |
| /** Runtime library routines **/ |
| |
| /* |
| * VOID |
| * InitializeListHead( |
| * IN PLIST_ENTRY ListHead) |
| */ |
| #define InitializeListHead(_ListHead) \ |
| { \ |
| (_ListHead)->Flink = (_ListHead); \ |
| (_ListHead)->Blink = (_ListHead); \ |
| } |
| |
| /* |
| * VOID |
| * InsertHeadList( |
| * IN PLIST_ENTRY ListHead, |
| * IN PLIST_ENTRY Entry) |
| */ |
| #define InsertHeadList(_ListHead, \ |
| _Entry) \ |
| { \ |
| PLIST_ENTRY _OldFlink; \ |
| _OldFlink = (_ListHead)->Flink; \ |
| (_Entry)->Flink = _OldFlink; \ |
| (_Entry)->Blink = (_ListHead); \ |
| _OldFlink->Blink = (_Entry); \ |
| (_ListHead)->Flink = (_Entry); \ |
| } |
| |
| /* |
| * VOID |
| * InsertTailList( |
| * IN PLIST_ENTRY ListHead, |
| * IN PLIST_ENTRY Entry) |
| */ |
| #define InsertTailList(_ListHead, \ |
| _Entry) \ |
| { \ |
| PLIST_ENTRY _OldBlink; \ |
| _OldBlink = (_ListHead)->Blink; \ |
| (_Entry)->Flink = (_ListHead); \ |
| (_Entry)->Blink = _OldBlink; \ |
| _OldBlink->Flink = (_Entry); \ |
| (_ListHead)->Blink = (_Entry); \ |
| } |
| |
| /* |
| * BOOLEAN |
| * IsListEmpty( |
| * IN PLIST_ENTRY ListHead) |
| */ |
| #define IsListEmpty(_ListHead) \ |
| ((_ListHead)->Flink == (_ListHead)) |
| |
| static __inline PSINGLE_LIST_ENTRY |
| PopEntryList( |
| /*IN*/ PSINGLE_LIST_ENTRY ListHead) |
| { |
| PSINGLE_LIST_ENTRY Entry; |
| |
| Entry = ListHead->Next; |
| if (Entry != NULL) |
| { |
| ListHead->Next = Entry->Next; |
| } |
| return Entry; |
| } |
| |
| /* |
| * VOID |
| * PushEntryList( |
| * IN PSINGLE_LIST_ENTRY ListHead, |
| * IN PSINGLE_LIST_ENTRY Entry) |
| */ |
| #define PushEntryList(_ListHead, \ |
| _Entry) \ |
| { \ |
| (_Entry)->Next = (_ListHead)->Next; \ |
| (_ListHead)->Next = (_Entry); \ |
| } |
| |
| /* |
| * VOID |
| * RemoveEntryList( |
| * IN PLIST_ENTRY Entry) |
| */ |
| #define RemoveEntryList(_Entry) \ |
| { \ |
| PLIST_ENTRY _OldFlink; \ |
| PLIST_ENTRY _OldBlink; \ |
| _OldFlink = (_Entry)->Flink; \ |
| _OldBlink = (_Entry)->Blink; \ |
| _OldFlink->Blink = _OldBlink; \ |
| _OldBlink->Flink = _OldFlink; \ |
| (_Entry)->Flink = NULL; \ |
| (_Entry)->Blink = NULL; \ |
| } |
| |
| static __inline PLIST_ENTRY |
| RemoveHeadList( |
| /*IN*/ PLIST_ENTRY ListHead) |
| { |
| PLIST_ENTRY OldFlink; |
| PLIST_ENTRY OldBlink; |
| PLIST_ENTRY Entry; |
| |
| Entry = ListHead->Flink; |
| OldFlink = ListHead->Flink->Flink; |
| OldBlink = ListHead->Flink->Blink; |
| OldFlink->Blink = OldBlink; |
| OldBlink->Flink = OldFlink; |
| |
| if (Entry != ListHead) |
| { |
| Entry->Flink = NULL; |
| Entry->Blink = NULL; |
| } |
| |
| return Entry; |
| } |
| |
| static __inline PLIST_ENTRY |
| RemoveTailList( |
| /*IN*/ PLIST_ENTRY ListHead) |
| { |
| PLIST_ENTRY OldFlink; |
| PLIST_ENTRY OldBlink; |
| PLIST_ENTRY Entry; |
| |
| Entry = ListHead->Blink; |
| OldFlink = ListHead->Blink->Flink; |
| OldBlink = ListHead->Blink->Blink; |
| OldFlink->Blink = OldBlink; |
| OldBlink->Flink = OldFlink; |
| |
| if (Entry != ListHead) |
| { |
| Entry->Flink = NULL; |
| Entry->Blink = NULL; |
| } |
| |
| return Entry; |
| } |
| |
| /* |
| * USHORT |
| * QueryDepthSList( |
| * IN PSLIST_HEADER SListHead) |
| */ |
| #define QueryDepthSList(_SListHead) \ |
| ((USHORT) ((_SListHead)->Alignment & 0xffff)) |
| |
| #define InterlockedFlushSList(ListHead) ExInterlockedFlushSList(ListHead) |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlAnsiStringToUnicodeSize( |
| /*IN*/ PANSI_STRING AnsiString); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlAddRange( |
| /*IN OUT*/ PRTL_RANGE_LIST RangeList, |
| /*IN*/ ULONGLONG Start, |
| /*IN*/ ULONGLONG End, |
| /*IN*/ UCHAR Attributes, |
| /*IN*/ ULONG Flags, |
| /*IN*/ PVOID UserData /*OPTIONAL*/, |
| /*IN*/ PVOID Owner /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlAnsiStringToUnicodeString( |
| /*IN OUT*/ PUNICODE_STRING DestinationString, |
| /*IN*/ PANSI_STRING SourceString, |
| /*IN*/ BOOLEAN AllocateDestinationString); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlAppendUnicodeStringToString( |
| /*IN OUT*/ PUNICODE_STRING Destination, |
| /*IN*/ PUNICODE_STRING Source); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlAppendUnicodeToString( |
| /*IN OUT*/ PUNICODE_STRING Destination, |
| /*IN*/ PCWSTR Source); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| RtlAreBitsClear( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG StartingIndex, |
| /*IN*/ ULONG Length); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| RtlAreBitsSet( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG StartingIndex, |
| /*IN*/ ULONG Length); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlCharToInteger( |
| /*IN*/ PCSZ String, |
| /*IN*/ ULONG Base /*OPTIONAL*/, |
| /*IN OUT*/ PULONG Value); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlCheckBit( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG BitPosition); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlCheckRegistryKey( |
| /*IN*/ ULONG RelativeTo, |
| /*IN*/ PWSTR Path); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlClearAllBits( |
| /*IN*/ PRTL_BITMAP BitMapHeader); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlClearBit( |
| PRTL_BITMAP BitMapHeader, |
| ULONG BitNumber); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlClearBits( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG StartingIndex, |
| /*IN*/ ULONG NumberToClear); |
| |
| NTOSAPI |
| SIZE_T |
| DDKAPI |
| RtlCompareMemory( |
| /*IN*/ CONST VOID *Source1, |
| /*IN*/ CONST VOID *Source2, |
| /*IN*/ SIZE_T Length); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| RtlCompareString( |
| /*IN*/ PSTRING String1, |
| /*IN*/ PSTRING String2, |
| BOOLEAN CaseInSensitive); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| RtlCompareUnicodeString( |
| /*IN*/ PUNICODE_STRING String1, |
| /*IN*/ PUNICODE_STRING String2, |
| /*IN*/ BOOLEAN CaseInSensitive); |
| |
| NTOSAPI |
| LARGE_INTEGER |
| DDKAPI |
| RtlConvertLongToLargeInteger( |
| /*IN*/ LONG SignedInteger); |
| |
| NTOSAPI |
| LUID |
| DDKAPI |
| RtlConvertLongToLuid( |
| /*IN*/ LONG Long); |
| |
| NTOSAPI |
| LARGE_INTEGER |
| DDKAPI |
| RtlConvertUlongToLargeInteger( |
| /*IN*/ ULONG UnsignedInteger); |
| |
| NTOSAPI |
| LUID |
| DDKAPI |
| RtlConvertUlongToLuid( |
| ULONG Ulong); |
| |
| /* |
| * VOID |
| * RtlCopyMemory( |
| * IN VOID UNALIGNED *Destination, |
| * IN CONST VOID UNALIGNED *Source, |
| * IN SIZE_T Length) |
| */ |
| #ifndef RtlCopyMemory |
| #define RtlCopyMemory(Destination, Source, Length) \ |
| memcpy(Destination, Source, Length); |
| #endif |
| |
| #ifndef RtlCopyBytes |
| #define RtlCopyBytes RtlCopyMemory |
| #endif |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlCopyMemory32( |
| /*IN*/ VOID UNALIGNED *Destination, |
| /*IN*/ CONST VOID UNALIGNED *Source, |
| /*IN*/ ULONG Length); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlCopyRangeList( |
| /*OUT*/ PRTL_RANGE_LIST CopyRangeList, |
| /*IN*/ PRTL_RANGE_LIST RangeList); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlCopyString( |
| /*IN OUT*/ PSTRING DestinationString, |
| /*IN*/ PSTRING SourceString /*OPTIONAL*/); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlCopyUnicodeString( |
| /*IN OUT*/ PUNICODE_STRING DestinationString, |
| /*IN*/ PUNICODE_STRING SourceString); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlCreateRegistryKey( |
| /*IN*/ ULONG RelativeTo, |
| /*IN*/ PWSTR Path); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlCreateSecurityDescriptor( |
| /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor, |
| /*IN*/ ULONG Revision); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlDeleteOwnersRanges( |
| /*IN OUT*/ PRTL_RANGE_LIST RangeList, |
| /*IN*/ PVOID Owner); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlDeleteRange( |
| /*IN OUT*/ PRTL_RANGE_LIST RangeList, |
| /*IN*/ ULONGLONG Start, |
| /*IN*/ ULONGLONG End, |
| /*IN*/ PVOID Owner); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlDeleteRegistryValue( |
| /*IN*/ ULONG RelativeTo, |
| /*IN*/ PCWSTR Path, |
| /*IN*/ PCWSTR ValueName); |
| |
| NTOSAPI |
| BOOL |
| DDKAPI |
| RtlDosPathNameToNtPathName_U( |
| /*IN*/ PCWSTR DosPathName, |
| /*OUT*/ PUNICODE_STRING NtPathName, |
| /*OUT*/ PCWSTR *NtFileNamePart, |
| /*OUT*/ VOID *DirectoryInfo); |
| |
| /* |
| * BOOLEAN |
| * RtlEqualLuid( |
| * IN LUID Luid1, |
| * IN LUID Luid2) |
| */ |
| #define RtlEqualLuid(_Luid1, \ |
| _Luid2) \ |
| ((Luid1.LowPart == Luid2.LowPart) && (Luid1.HighPart == Luid2.HighPart)) |
| |
| /* |
| * ULONG |
| * RtlEqualMemory( |
| * IN VOID UNALIGNED *Destination, |
| * IN CONST VOID UNALIGNED *Source, |
| * IN SIZE_T Length) |
| */ |
| #define RtlEqualMemory(Destination, Source, Length) (!memcmp(Destination, Source, Length)) |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| RtlEqualString( |
| /*IN*/ PSTRING String1, |
| /*IN*/ PSTRING String2, |
| /*IN*/ BOOLEAN CaseInSensitive); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| RtlEqualUnicodeString( |
| /*IN*/ CONST UNICODE_STRING *String1, |
| /*IN*/ CONST UNICODE_STRING *String2, |
| /*IN*/ BOOLEAN CaseInSensitive); |
| |
| /* |
| * VOID |
| * RtlFillMemory( |
| * IN VOID UNALIGNED *Destination, |
| * IN SIZE_T Length, |
| * IN UCHAR Fill) |
| */ |
| #ifndef RtlFillMemory |
| #define RtlFillMemory(Destination, Length, Fill) \ |
| memset(Destination, Fill, Length) |
| #endif |
| |
| #ifndef RtlFillBytes |
| #define RtlFillBytes RtlFillMemory |
| #endif |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlFindClearBits( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG NumberToFind, |
| /*IN*/ ULONG HintIndex); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlFindClearBitsAndSet( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG NumberToFind, |
| /*IN*/ ULONG HintIndex); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlFindClearRuns( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*OUT*/ PRTL_BITMAP_RUN RunArray, |
| /*IN*/ ULONG SizeOfRunArray, |
| /*IN*/ BOOLEAN LocateLongestRuns); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlFindFirstRunClear( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*OUT*/ PULONG StartingIndex); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlFindLastBackwardRunClear( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG FromIndex, |
| /*OUT*/ PULONG StartingRunIndex); |
| |
| NTOSAPI |
| CCHAR |
| DDKAPI |
| RtlFindLeastSignificantBit( |
| /*IN*/ ULONGLONG Set); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlFindLongestRunClear( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*OUT*/ PULONG StartingIndex); |
| |
| NTOSAPI |
| CCHAR |
| DDKAPI |
| RtlFindMostSignificantBit( |
| /*IN*/ ULONGLONG Set); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlFindNextForwardRunClear( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG FromIndex, |
| /*OUT*/ PULONG StartingRunIndex); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlFindRange( |
| /*IN*/ PRTL_RANGE_LIST RangeList, |
| /*IN*/ ULONGLONG Minimum, |
| /*IN*/ ULONGLONG Maximum, |
| /*IN*/ ULONG Length, |
| /*IN*/ ULONG Alignment, |
| /*IN*/ ULONG Flags, |
| /*IN*/ UCHAR AttributeAvailableMask, |
| /*IN*/ PVOID Context /*OPTIONAL*/, |
| /*IN*/ PRTL_CONFLICT_RANGE_CALLBACK Callback /*OPTIONAL*/, |
| /*OUT*/ PULONGLONG Start); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlFindSetBits( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG NumberToFind, |
| /*IN*/ ULONG HintIndex); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlFindSetBitsAndClear( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG NumberToFind, |
| /*IN*/ ULONG HintIndex); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlFreeAnsiString( |
| /*IN*/ PANSI_STRING AnsiString); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlFreeRangeList( |
| /*IN*/ PRTL_RANGE_LIST RangeList); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlFreeUnicodeString( |
| /*IN*/ PUNICODE_STRING UnicodeString); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlGetCallersAddress( |
| /*OUT*/ PVOID *CallersAddress, |
| /*OUT*/ PVOID *CallersCaller); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlGetVersion( |
| /*IN OUT*/ PRTL_OSVERSIONINFOW lpVersionInformation); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlGetFirstRange( |
| /*IN*/ PRTL_RANGE_LIST RangeList, |
| /*OUT*/ PRTL_RANGE_LIST_ITERATOR Iterator, |
| /*OUT*/ PRTL_RANGE *Range); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlGetNextRange( |
| /*IN OUT*/ PRTL_RANGE_LIST_ITERATOR Iterator, |
| /*OUT*/ PRTL_RANGE *Range, |
| /*IN*/ BOOLEAN MoveForwards); |
| |
| #define FOR_ALL_RANGES(RangeList, Iterator, Current) \ |
| for (RtlGetFirstRange((RangeList), (Iterator), &(Current)); \ |
| (Current) != NULL; \ |
| RtlGetNextRange((Iterator), &(Current), TRUE)) |
| |
| #define FOR_ALL_RANGES_BACKWARDS(RangeList, Iterator, Current) \ |
| for (RtlGetLastRange((RangeList), (Iterator), &(Current)); \ |
| (Current) != NULL; \ |
| RtlGetNextRange((Iterator), &(Current), FALSE)) |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlGUIDFromString( |
| /*IN*/ PUNICODE_STRING GuidString, |
| /*OUT*/ GUID *Guid); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlHashUnicodeString( |
| /*IN*/ CONST UNICODE_STRING *String, |
| /*IN*/ BOOLEAN CaseInSensitive, |
| /*IN*/ ULONG HashAlgorithm, |
| /*OUT*/ PULONG HashValue); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlInitAnsiString( |
| /*IN OUT*/ PANSI_STRING DestinationString, |
| /*IN*/ PCSZ SourceString); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlInitializeBitMap( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ PULONG BitMapBuffer, |
| /*IN*/ ULONG SizeOfBitMap); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlInitializeRangeList( |
| /*IN OUT*/ PRTL_RANGE_LIST RangeList); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlInitString( |
| /*IN OUT*/ PSTRING DestinationString, |
| /*IN*/ PCSZ SourceString); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlInitUnicodeString( |
| /*IN OUT*/ PUNICODE_STRING DestinationString, |
| /*IN*/ PCWSTR SourceString); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlInt64ToUnicodeString( |
| /*IN*/ ULONGLONG Value, |
| /*IN*/ ULONG Base /*OPTIONAL*/, |
| /*IN OUT*/ PUNICODE_STRING String); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlIntegerToUnicodeString( |
| /*IN*/ ULONG Value, |
| /*IN*/ ULONG Base /*OPTIONAL*/, |
| /*IN OUT*/ PUNICODE_STRING String); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlIntPtrToUnicodeString( |
| PLONG Value, |
| ULONG Base /*OPTIONAL*/, |
| PUNICODE_STRING String); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlInvertRangeList( |
| /*OUT*/ PRTL_RANGE_LIST InvertedRangeList, |
| /*IN*/ PRTL_RANGE_LIST RangeList); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlIsRangeAvailable( |
| /*IN*/ PRTL_RANGE_LIST RangeList, |
| /*IN*/ ULONGLONG Start, |
| /*IN*/ ULONGLONG End, |
| /*IN*/ ULONG Flags, |
| /*IN*/ UCHAR AttributeAvailableMask, |
| /*IN*/ PVOID Context /*OPTIONAL*/, |
| /*IN*/ PRTL_CONFLICT_RANGE_CALLBACK Callback /*OPTIONAL*/, |
| /*OUT*/ PBOOLEAN Available); |
| |
| /* |
| * BOOLEAN |
| * RtlIsZeroLuid( |
| * IN PLUID L1) |
| */ |
| #define RtlIsZeroLuid(_L1) \ |
| ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart))) |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlLengthSecurityDescriptor( |
| /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlMapGenericMask( |
| /*IN OUT*/ PACCESS_MASK AccessMask, |
| /*IN*/ PGENERIC_MAPPING GenericMapping); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlMergeRangeLists( |
| /*OUT*/ PRTL_RANGE_LIST MergedRangeList, |
| /*IN*/ PRTL_RANGE_LIST RangeList1, |
| /*IN*/ PRTL_RANGE_LIST RangeList2, |
| /*IN*/ ULONG Flags); |
| |
| /* |
| * VOID |
| * RtlMoveMemory( |
| * IN VOID UNALIGNED *Destination, |
| * IN CONST VOID UNALIGNED *Source, |
| * IN SIZE_T Length) |
| */ |
| #define RtlMoveMemory memmove |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlNumberOfClearBits( |
| /*IN*/ PRTL_BITMAP BitMapHeader); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlNumberOfSetBits( |
| /*IN*/ PRTL_BITMAP BitMapHeader); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| RtlPrefetchMemoryNonTemporal( |
| /*IN*/ PVOID Source, |
| /*IN*/ SIZE_T Length); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| RtlPrefixUnicodeString( |
| /*IN*/ PUNICODE_STRING String1, |
| /*IN*/ PUNICODE_STRING String2, |
| /*IN*/ BOOLEAN CaseInSensitive); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlQueryRegistryValues( |
| /*IN*/ ULONG RelativeTo, |
| /*IN*/ PCWSTR Path, |
| /*IN*/ PRTL_QUERY_REGISTRY_TABLE QueryTable, |
| /*IN*/ PVOID Context, |
| /*IN*/ PVOID Environment /*OPTIONAL*/); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlRetrieveUlong( |
| /*IN OUT*/ PULONG DestinationAddress, |
| /*IN*/ PULONG SourceAddress); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlRetrieveUshort( |
| /*IN OUT*/ PUSHORT DestinationAddress, |
| /*IN*/ PUSHORT SourceAddress); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlSetAllBits( |
| /*IN*/ PRTL_BITMAP BitMapHeader); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlSetBit( |
| PRTL_BITMAP BitMapHeader, |
| ULONG BitNumber); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlSetBits( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG StartingIndex, |
| /*IN*/ ULONG NumberToSet); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlSetDaclSecurityDescriptor( |
| /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor, |
| /*IN*/ BOOLEAN DaclPresent, |
| /*IN*/ PACL Dacl /*OPTIONAL*/, |
| /*IN*/ BOOLEAN DaclDefaulted /*OPTIONAL*/); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlStoreUlong( |
| /*IN*/ PULONG Address, |
| /*IN*/ ULONG Value); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlStoreUlonglong( |
| /*IN OUT*/ PULONGLONG Address, |
| ULONGLONG Value); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlStoreUlongPtr( |
| /*IN OUT*/ PULONG_PTR Address, |
| /*IN*/ ULONG_PTR Value); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlStoreUshort( |
| /*IN*/ PUSHORT Address, |
| /*IN*/ USHORT Value); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlStringFromGUID( |
| /*IN*/ REFGUID Guid, |
| /*OUT*/ PUNICODE_STRING GuidString); |
| |
| #define RtlStringCbCopyA(dst, dst_len, src) strncpy(dst, src, dst_len)
|
| #define RtlStringCbPrintfA(args...) snprintf(args)
|
| #define RtlStringCbVPrintfA(args...) vsnprintf(args)
|
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| RtlTestBit( |
| /*IN*/ PRTL_BITMAP BitMapHeader, |
| /*IN*/ ULONG BitNumber); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| RtlTimeFieldsToTime( |
| /*IN*/ PTIME_FIELDS TimeFields, |
| /*IN*/ PLARGE_INTEGER Time); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlTimeToTimeFields( |
| /*IN*/ PLARGE_INTEGER Time, |
| /*IN*/ PTIME_FIELDS TimeFields); |
| |
| NTOSAPI |
| ULONG |
| DDKFASTAPI |
| RtlUlongByteSwap( |
| /*IN*/ ULONG Source); |
| |
| NTOSAPI |
| ULONGLONG |
| DDKFASTAPI |
| RtlUlonglongByteSwap( |
| /*IN*/ ULONGLONG Source); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlUnicodeStringToAnsiSize( |
| /*IN*/ PUNICODE_STRING UnicodeString); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlUnicodeStringToAnsiString( |
| /*IN OUT*/ PANSI_STRING DestinationString, |
| /*IN*/ PUNICODE_STRING SourceString, |
| /*IN*/ BOOLEAN AllocateDestinationString); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlUnicodeStringToInteger( |
| /*IN*/ PUNICODE_STRING String, |
| /*IN*/ ULONG Base /*OPTIONAL*/, |
| /*OUT*/ PULONG Value); |
| |
| NTOSAPI |
| WCHAR |
| DDKAPI |
| RtlUpcaseUnicodeChar( |
| /*IN*/ WCHAR SourceCharacter); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlUpcaseUnicodeString( |
| /*IN OUT*/ PUNICODE_STRING DestinationString /*OPTIONAL*/, |
| /*IN*/ PCUNICODE_STRING SourceString, |
| /*IN*/ BOOLEAN AllocateDestinationString); |
| |
| NTOSAPI |
| CHAR |
| DDKAPI |
| RtlUpperChar( |
| /*IN*/ CHAR Character); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| RtlUpperString( |
| /*IN OUT*/ PSTRING DestinationString, |
| /*IN*/ PSTRING SourceString); |
| |
| NTOSAPI |
| USHORT |
| DDKFASTAPI |
| RtlUshortByteSwap( |
| /*IN*/ USHORT Source); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| RtlValidRelativeSecurityDescriptor( |
| /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptorInput, |
| /*IN*/ ULONG SecurityDescriptorLength, |
| /*IN*/ SECURITY_INFORMATION RequiredInformation); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| RtlValidSecurityDescriptor( |
| /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlVerifyVersionInfo( |
| /*IN*/ PRTL_OSVERSIONINFOEXW VersionInfo, |
| /*IN*/ ULONG TypeMask, |
| /*IN*/ ULONGLONG ConditionMask); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlVolumeDeviceToDosName( |
| /*IN*/ PVOID VolumeDeviceObject, |
| /*OUT*/ PUNICODE_STRING DosName); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlWalkFrameChain( |
| /*OUT*/ PVOID *Callers, |
| /*IN*/ ULONG Count, |
| /*IN*/ ULONG Flags); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| RtlWriteRegistryValue( |
| /*IN*/ ULONG RelativeTo, |
| /*IN*/ PCWSTR Path, |
| /*IN*/ PCWSTR ValueName, |
| /*IN*/ ULONG ValueType, |
| /*IN*/ PVOID ValueData, |
| /*IN*/ ULONG ValueLength); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| RtlxUnicodeStringToAnsiSize( |
| /*IN*/ PUNICODE_STRING UnicodeString); |
| |
| /* |
| * VOID |
| * RtlZeroMemory( |
| * IN VOID UNALIGNED *Destination, |
| * IN SIZE_T Length) |
| */ |
| #ifndef RtlZeroMemory |
| #define RtlZeroMemory(Destination, Length) \ |
| memset(Destination, 0, Length) |
| #endif |
| |
| #ifndef RtlZeroBytes |
| #define RtlZeroBytes RtlZeroMemory |
| #endif |
| |
| |
| /** Executive support routines **/ |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| ExAcquireFastMutex( |
| /*IN*/ PFAST_MUTEX FastMutex); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| ExAcquireFastMutexUnsafe( |
| /*IN*/ PFAST_MUTEX FastMutex); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| ExAcquireResourceExclusiveLite( |
| /*IN*/ PERESOURCE Resource, |
| /*IN*/ BOOLEAN Wait); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| ExAcquireResourceSharedLite( |
| /*IN*/ PERESOURCE Resource, |
| /*IN*/ BOOLEAN Wait); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| ExAcquireSharedStarveExclusive( |
| /*IN*/ PERESOURCE Resource, |
| /*IN*/ BOOLEAN Wait); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| ExAcquireSharedWaitForExclusive( |
| /*IN*/ PERESOURCE Resource, |
| /*IN*/ BOOLEAN Wait); |
| |
| |
| NTOSAPI |
| PSINGLE_LIST_ENTRY |
| DDKFASTAPI |
| ExInterlockedPopEntrySList( |
| /*IN*/ PSLIST_HEADER ListHead, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| |
| NTOSAPI |
| PSINGLE_LIST_ENTRY |
| DDKFASTAPI |
| ExInterlockedPushEntrySList( |
| /*IN*/ PSLIST_HEADER ListHead, |
| /*IN*/ PSINGLE_LIST_ENTRY ListEntry, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| |
| #if (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) |
| #define ExInterlockedPopEntrySList(_ListHead, \ |
| _Lock) \ |
| InterlockedPopEntrySList(_ListHead) |
| |
| #define ExInterlockedPushEntrySList(_ListHead, \ |
| _ListEntry, \ |
| _Lock) \ |
| InterlockedPushEntrySList(_ListHead, _ListEntry) |
| #endif /* __USE_NTOSKRNL__ */ |
| |
| #define ExQueryDepthSList(ListHead) QueryDepthSList(ListHead) |
| |
| static __inline PVOID |
| ExAllocateFromNPagedLookasideList( |
| /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside) |
| { |
| PVOID Entry; |
| |
| Lookaside->TotalAllocates++; |
| Entry = ExInterlockedPopEntrySList(&Lookaside->ListHead, |
| &Lookaside->Obsoleted); |
| if (Entry == NULL) { |
| Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++; |
| Entry = (Lookaside->Allocate)(Lookaside->Type, |
| Lookaside->Size, |
| Lookaside->Tag); |
| } |
| return Entry; |
| } |
| |
| static __inline VOID |
| ExFreeToNPagedLookasideList( |
| /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside, |
| /*IN*/ PVOID Entry) |
| { |
| Lookaside->TotalFrees++; |
| if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) { |
| Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++; |
| (Lookaside->Free)(Entry); |
| } else { |
| ExInterlockedPushEntrySList(&Lookaside->ListHead, |
| (PSLIST_ENTRY)Entry, |
| &Lookaside->Obsoleted); |
| } |
| } |
| |
| #if (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) |
| |
| static __inline PVOID |
| ExAllocateFromPagedLookasideList( |
| /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside) |
| { |
| PVOID Entry; |
| |
| Lookaside->TotalAllocates++; |
| Entry = InterlockedPopEntrySList(&Lookaside->ListHead); |
| if (Entry == NULL) { |
| Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++; |
| Entry = (Lookaside->Allocate)(Lookaside->Type, |
| Lookaside->Size, |
| Lookaside->Tag); |
| } |
| return Entry; |
| } |
| |
| static __inline VOID |
| ExFreeToPagedLookasideList( |
| /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside, |
| /*IN*/ PVOID Entry) |
| { |
| Lookaside->TotalFrees++; |
| if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth) { |
| Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++; |
| (Lookaside->Free)(Entry); |
| } else { |
| InterlockedPushEntrySList(&Lookaside->ListHead, |
| (PSLIST_ENTRY)Entry); |
| } |
| } |
| |
| #else /* (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) */ |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| ExAllocateFromPagedLookasideList( |
| /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExFreeToPagedLookasideList( |
| /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside, |
| /*IN*/ PVOID Entry); |
| |
| #endif /* (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501) */ |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| ExAllocatePoolWithQuotaTag( |
| /*IN*/ POOL_TYPE PoolType, |
| /*IN*/ SIZE_T NumberOfBytes, |
| /*IN*/ ULONG Tag); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| ExAllocatePoolWithTag( |
| /*IN*/ POOL_TYPE PoolType, |
| /*IN*/ SIZE_T NumberOfBytes, |
| /*IN*/ ULONG Tag); |
| |
| #ifdef POOL_TAGGING |
| |
| #define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD') |
| #define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD') |
| |
| #else /* !POOL_TAGGING */ |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| ExAllocatePool( |
| /*IN*/ POOL_TYPE PoolType, |
| /*IN*/ SIZE_T NumberOfBytes); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| ExAllocatePoolWithQuota( |
| /*IN*/ POOL_TYPE PoolType, |
| /*IN*/ SIZE_T NumberOfBytes); |
| |
| #endif /* POOL_TAGGING */ |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| ExAllocatePoolWithTagPriority( |
| /*IN*/ POOL_TYPE PoolType, |
| /*IN*/ SIZE_T NumberOfBytes, |
| /*IN*/ ULONG Tag, |
| /*IN*/ EX_POOL_PRIORITY Priority); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExConvertExclusiveToSharedLite( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ExCreateCallback( |
| /*OUT*/ PCALLBACK_OBJECT *CallbackObject, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*IN*/ BOOLEAN Create, |
| /*IN*/ BOOLEAN AllowMultipleCallbacks); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExDeleteNPagedLookasideList( |
| /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExDeletePagedLookasideList( |
| /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ExDeleteResourceLite( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExFreePool( |
| /*IN*/ PVOID P); |
| |
| #define PROTECTED_POOL 0x80000000 |
| |
| #ifdef POOL_TAGGING |
| #define ExFreePool(P) ExFreePoolWithTag(P, 0) |
| #endif |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExFreePoolWithTag( |
| /*IN*/ PVOID P, |
| /*IN*/ ULONG Tag); |
| |
| /* |
| * ERESOURCE_THREAD |
| * ExGetCurrentResourceThread( |
| * VOID); |
| */ |
| #define ExGetCurrentResourceThread() ((ERESOURCE_THREAD) PsGetCurrentThread()) |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| ExGetExclusiveWaiterCount( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| KPROCESSOR_MODE |
| DDKAPI |
| ExGetPreviousMode( |
| VOID); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| ExGetSharedWaiterCount( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeInitializeEvent( |
| /*IN*/ PRKEVENT Event, |
| /*IN*/ EVENT_TYPE Type, |
| /*IN*/ BOOLEAN State); |
| |
| /* |
| * VOID DDKAPI |
| * ExInitializeFastMutex( |
| * IN PFAST_MUTEX FastMutex) |
| */ |
| #define ExInitializeFastMutex(_FastMutex) \ |
| { \ |
| (_FastMutex)->Count = 1; \ |
| (_FastMutex)->Owner = NULL; \ |
| (_FastMutex)->Contention = 0; \ |
| KeInitializeEvent(&(_FastMutex)->Event, SynchronizationEvent, FALSE); \ |
| } |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExInitializeNPagedLookasideList( |
| /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside, |
| /*IN*/ PALLOCATE_FUNCTION Allocate /*OPTIONAL*/, |
| /*IN*/ PFREE_FUNCTION Free /*OPTIONAL*/, |
| /*IN*/ ULONG Flags, |
| /*IN*/ SIZE_T Size, |
| /*IN*/ ULONG Tag, |
| /*IN*/ USHORT Depth); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExInitializePagedLookasideList( |
| /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside, |
| /*IN*/ PALLOCATE_FUNCTION Allocate /*OPTIONAL*/, |
| /*IN*/ PFREE_FUNCTION Free /*OPTIONAL*/, |
| /*IN*/ ULONG Flags, |
| /*IN*/ SIZE_T Size, |
| /*IN*/ ULONG Tag, |
| /*IN*/ USHORT Depth); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ExInitializeResourceLite( |
| /*IN*/ PERESOURCE Resource); |
| |
| /* |
| * VOID |
| * InitializeSListHead( |
| * IN PSLIST_HEADER SListHead) |
| */ |
| #define InitializeSListHead(_SListHead) \ |
| (_SListHead)->Alignment = 0 |
| |
| #define ExInitializeSListHead InitializeSListHead |
| |
| NTOSAPI |
| LARGE_INTEGER |
| DDKAPI |
| ExInterlockedAddLargeInteger( |
| /*IN*/ PLARGE_INTEGER Addend, |
| /*IN*/ LARGE_INTEGER Increment, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| ExInterlockedAddLargeStatistic( |
| /*IN*/ PLARGE_INTEGER Addend, |
| /*IN*/ ULONG Increment); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| ExInterlockedAddUlong( |
| /*IN*/ PULONG Addend, |
| /*IN*/ ULONG Increment, |
| PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| ULONG |
| DDKFASTAPI |
| ExfInterlockedAddUlong( |
| /*IN*/ PULONG Addend, |
| /*IN*/ ULONG Increment, |
| PKSPIN_LOCK Lock); |
| |
| |
| NTOSAPI |
| LONGLONG |
| DDKFASTAPI |
| ExInterlockedCompareExchange64( |
| /*IN OUT*/ PLONGLONG Destination, |
| /*IN*/ PLONGLONG Exchange, |
| /*IN*/ PLONGLONG Comparand, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| PSINGLE_LIST_ENTRY |
| DDKFASTAPI |
| ExInterlockedFlushSList( |
| /*IN*/ PSLIST_HEADER ListHead); |
| |
| NTOSAPI |
| PLIST_ENTRY |
| DDKAPI |
| ExInterlockedInsertHeadList( |
| /*IN*/ PLIST_ENTRY ListHead, |
| /*IN*/ PLIST_ENTRY ListEntry, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| PLIST_ENTRY |
| DDKFASTAPI |
| ExfInterlockedInsertHeadList( |
| /*IN*/ PLIST_ENTRY ListHead, |
| /*IN*/ PLIST_ENTRY ListEntry, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| PLIST_ENTRY |
| DDKAPI |
| ExInterlockedInsertTailList( |
| /*IN*/ PLIST_ENTRY ListHead, |
| /*IN*/ PLIST_ENTRY ListEntry, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| PLIST_ENTRY |
| DDKFASTAPI |
| ExfInterlockedInsertTailList( |
| /*IN*/ PLIST_ENTRY ListHead, |
| /*IN*/ PLIST_ENTRY ListEntry, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| PSINGLE_LIST_ENTRY |
| DDKAPI |
| ExInterlockedPopEntryList( |
| /*IN*/ PSINGLE_LIST_ENTRY ListHead, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| PSINGLE_LIST_ENTRY |
| DDKFASTAPI |
| ExfInterlockedPopEntryList( |
| /*IN*/ PSINGLE_LIST_ENTRY ListHead, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| |
| NTOSAPI |
| PSINGLE_LIST_ENTRY |
| DDKAPI |
| ExInterlockedPushEntryList( |
| /*IN*/ PSINGLE_LIST_ENTRY ListHead, |
| /*IN*/ PSINGLE_LIST_ENTRY ListEntry, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| PSINGLE_LIST_ENTRY |
| DDKFASTAPI |
| ExfInterlockedPushEntryList( |
| /*IN*/ PSINGLE_LIST_ENTRY ListHead, |
| /*IN*/ PSINGLE_LIST_ENTRY ListEntry, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| |
| NTOSAPI |
| PLIST_ENTRY |
| DDKAPI |
| ExInterlockedRemoveHeadList( |
| /*IN*/ PLIST_ENTRY ListHead, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| NTOSAPI |
| PLIST_ENTRY |
| DDKFASTAPI |
| ExfInterlockedRemoveHeadList( |
| /*IN*/ PLIST_ENTRY ListHead, |
| /*IN*/ PKSPIN_LOCK Lock); |
| |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| ExIsProcessorFeaturePresent( |
| /*IN*/ ULONG ProcessorFeature); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| ExIsResourceAcquiredExclusiveLite( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| USHORT |
| DDKAPI |
| ExIsResourceAcquiredLite( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| USHORT |
| DDKAPI |
| ExIsResourceAcquiredSharedLite( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExLocalTimeToSystemTime( |
| /*IN*/ PLARGE_INTEGER LocalTime, |
| /*OUT*/ PLARGE_INTEGER SystemTime); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExNotifyCallback( |
| /*IN*/ PCALLBACK_OBJECT CallbackObject, |
| /*IN*/ PVOID Argument1, |
| /*IN*/ PVOID Argument2); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExRaiseAccessViolation( |
| VOID); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExRaiseDatatypeMisalignment( |
| VOID); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExRaiseStatus( |
| /*IN*/ NTSTATUS Status); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| ExRegisterCallback( |
| /*IN*/ PCALLBACK_OBJECT CallbackObject, |
| /*IN*/ PCALLBACK_FUNCTION CallbackFunction, |
| /*IN*/ PVOID CallbackContext); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExReinitializeResourceLite( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| ExReleaseFastMutex( |
| /*IN*/ PFAST_MUTEX FastMutex); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| ExReleaseFastMutexUnsafe( |
| /*IN*/ PFAST_MUTEX FastMutex); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExReleaseResourceForThreadLite( |
| /*IN*/ PERESOURCE Resource, |
| /*IN*/ ERESOURCE_THREAD ResourceThreadId); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| ExReleaseResourceLite( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExSetResourceOwnerPointer( |
| /*IN*/ PERESOURCE Resource, |
| /*IN*/ PVOID OwnerPointer); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| ExSetTimerResolution( |
| /*IN*/ ULONG DesiredTime, |
| /*IN*/ BOOLEAN SetResolution); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExSystemTimeToLocalTime( |
| /*IN*/ PLARGE_INTEGER SystemTime, |
| /*OUT*/ PLARGE_INTEGER LocalTime); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKFASTAPI |
| ExTryToAcquireFastMutex( |
| /*IN*/ PFAST_MUTEX FastMutex); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| ExTryToAcquireResourceExclusiveLite( |
| /*IN*/ PERESOURCE Resource); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ExUnregisterCallback( |
| /*IN*/ PVOID CbRegistration); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ExUuidCreate( |
| /*OUT*/ UUID *Uuid); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| ExVerifySuite( |
| /*IN*/ SUITE_TYPE SuiteType); |
| |
| #ifdef DBG |
| |
| #define PAGED_CODE() { \ |
| if (KeGetCurrentIrql() > APC_LEVEL) { \ |
| KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \ |
| ASSERT(FALSE); \ |
| } \ |
| } |
| |
| #else |
| |
| #define PAGED_CODE() |
| |
| #endif |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ProbeForRead( |
| /*IN*/ CONST VOID *Address, |
| /*IN*/ ULONG Length, |
| /*IN*/ ULONG Alignment); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ProbeForWrite( |
| /*IN*/ CONST VOID *Address, |
| /*IN*/ ULONG Length, |
| /*IN*/ ULONG Alignment); |
| |
| |
| |
| /** Configuration manager routines **/ |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| CmRegisterCallback( |
| /*IN*/ PEX_CALLBACK_FUNCTION Function, |
| /*IN*/ PVOID Context, |
| /*IN OUT*/ PLARGE_INTEGER Cookie); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| CmUnRegisterCallback( |
| /*IN*/ LARGE_INTEGER Cookie); |
| |
| |
| |
| /** Filesystem runtime library routines **/ |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| FsRtlIsTotalDeviceFailure( |
| /*IN*/ NTSTATUS Status); |
| |
| |
| |
| /** Hardware abstraction layer routines **/ |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| HalExamineMBR( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ ULONG SectorSize, |
| /*IN*/ ULONG MBRTypeIdentifier, |
| /*OUT*/ PVOID Buffer); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| READ_PORT_BUFFER_UCHAR( |
| /*IN*/ PUCHAR Port, |
| /*IN*/ PUCHAR Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| READ_PORT_BUFFER_ULONG( |
| /*IN*/ PULONG Port, |
| /*IN*/ PULONG Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| READ_PORT_BUFFER_USHORT( |
| /*IN*/ PUSHORT Port, |
| /*IN*/ PUSHORT Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| UCHAR |
| DDKAPI |
| READ_PORT_UCHAR( |
| /*IN*/ PUCHAR Port); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| READ_PORT_ULONG( |
| /*IN*/ PULONG Port); |
| |
| NTOSAPI |
| USHORT |
| DDKAPI |
| READ_PORT_USHORT( |
| /*IN*/ PUSHORT Port); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| READ_REGISTER_BUFFER_UCHAR( |
| /*IN*/ PUCHAR Register, |
| /*IN*/ PUCHAR Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| READ_REGISTER_BUFFER_ULONG( |
| /*IN*/ PULONG Register, |
| /*IN*/ PULONG Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| READ_REGISTER_BUFFER_USHORT( |
| /*IN*/ PUSHORT Register, |
| /*IN*/ PUSHORT Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| UCHAR |
| DDKAPI |
| READ_REGISTER_UCHAR( |
| /*IN*/ PUCHAR Register); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| READ_REGISTER_ULONG( |
| /*IN*/ PULONG Register); |
| |
| NTOSAPI |
| USHORT |
| DDKAPI |
| READ_REGISTER_USHORT( |
| /*IN*/ PUSHORT Register); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_PORT_BUFFER_UCHAR( |
| /*IN*/ PUCHAR Port, |
| /*IN*/ PUCHAR Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_PORT_BUFFER_ULONG( |
| /*IN*/ PULONG Port, |
| /*IN*/ PULONG Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_PORT_BUFFER_USHORT( |
| /*IN*/ PUSHORT Port, |
| /*IN*/ PUSHORT Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_PORT_UCHAR( |
| /*IN*/ PUCHAR Port, |
| /*IN*/ UCHAR Value); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_PORT_ULONG( |
| /*IN*/ PULONG Port, |
| /*IN*/ ULONG Value); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_PORT_USHORT( |
| /*IN*/ PUSHORT Port, |
| /*IN*/ USHORT Value); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_REGISTER_BUFFER_UCHAR( |
| /*IN*/ PUCHAR Register, |
| /*IN*/ PUCHAR Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_REGISTER_BUFFER_ULONG( |
| /*IN*/ PULONG Register, |
| /*IN*/ PULONG Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_REGISTER_BUFFER_USHORT( |
| /*IN*/ PUSHORT Register, |
| /*IN*/ PUSHORT Buffer, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_REGISTER_UCHAR( |
| /*IN*/ PUCHAR Register, |
| /*IN*/ UCHAR Value); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_REGISTER_ULONG( |
| /*IN*/ PULONG Register, |
| /*IN*/ ULONG Value); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| WRITE_REGISTER_USHORT( |
| /*IN*/ PUSHORT Register, |
| /*IN*/ USHORT Value); |
| |
| /** I/O manager routines **/ |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoAcquireCancelSpinLock( |
| /*OUT*/ PKIRQL Irql); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoAcquireRemoveLockEx( |
| /*IN*/ PIO_REMOVE_LOCK RemoveLock, |
| /*IN*/ PVOID Tag /*OPTIONAL*/, |
| /*IN*/ PCSTR File, |
| /*IN*/ ULONG Line, |
| /*IN*/ ULONG RemlockSize); |
| |
| /* |
| * NTSTATUS |
| * IoAcquireRemoveLock( |
| * IN PIO_REMOVE_LOCK RemoveLock, |
| * IN PVOID Tag OPTIONAL) |
| */ |
| #define IoAcquireRemoveLock(_RemoveLock, \ |
| _Tag) \ |
| IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK)) |
| |
| /* |
| * VOID |
| * IoAdjustPagingPathCount( |
| * IN PLONG Count, |
| * IN BOOLEAN Increment) |
| */ |
| #define IoAdjustPagingPathCount(_Count, \ |
| _Increment) \ |
| { \ |
| if (_Increment) \ |
| { \ |
| InterlockedIncrement(_Count); \ |
| } \ |
| else \ |
| { \ |
| InterlockedDecrement(_Count); \ |
| } \ |
| } |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoAllocateController( |
| /*IN*/ PCONTROLLER_OBJECT ControllerObject, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PDRIVER_CONTROL ExecutionRoutine, |
| /*IN*/ PVOID Context); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoAllocateDriverObjectExtension( |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ PVOID ClientIdentificationAddress, |
| /*IN*/ ULONG DriverObjectExtensionSize, |
| /*OUT*/ PVOID *DriverObjectExtension); |
| |
| typedef struct _IO_ERROR_LOG_PACKET { |
| UCHAR MajorFunctionCode; |
| UCHAR RetryCount; |
| USHORT DumpDataSize; |
| USHORT NumberOfStrings; |
| USHORT StringOffset; |
| USHORT EventCategory; |
| NTSTATUS ErrorCode; |
| ULONG UniqueErrorValue; |
| NTSTATUS FinalStatus; |
| ULONG SequenceNumber; |
| ULONG IoControlCode; |
| LARGE_INTEGER DeviceOffset; |
| ULONG DumpData[1]; |
| } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET; |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| IoAllocateErrorLogEntry( |
| /*IN*/ PVOID IoObject, |
| /*IN*/ UCHAR EntrySize); |
| |
| NTOSAPI |
| PIRP |
| DDKAPI |
| IoAllocateIrp( |
| /*IN*/ CCHAR StackSize, |
| /*IN*/ BOOLEAN ChargeQuota); |
| |
| NTOSAPI |
| PMDL |
| DDKAPI |
| IoAllocateMdl( |
| /*IN*/ PVOID VirtualAddress, |
| /*IN*/ ULONG Length, |
| /*IN*/ BOOLEAN SecondaryBuffer, |
| /*IN*/ BOOLEAN ChargeQuota, |
| /*IN OUT*/ PIRP Irp /*OPTIONAL*/); |
| |
| NTOSAPI |
| PIO_WORKITEM |
| DDKAPI |
| IoAllocateWorkItem( |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| /* |
| * VOID IoAssignArcName( |
| * IN PUNICODE_STRING ArcName, |
| * IN PUNICODE_STRING DeviceName); |
| */ |
| #define IoAssignArcName(_ArcName, _DeviceName) ( \ |
| IoCreateSymbolicLink((_ArcName), (_DeviceName))) |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoAttachDevice( |
| /*IN*/ PDEVICE_OBJECT SourceDevice, |
| /*IN*/ PUNICODE_STRING TargetDevice, |
| /*OUT*/ PDEVICE_OBJECT *AttachedDevice); |
| |
| NTOSAPI |
| PDEVICE_OBJECT |
| DDKAPI |
| IoAttachDeviceToDeviceStack( |
| /*IN*/ PDEVICE_OBJECT SourceDevice, |
| /*IN*/ PDEVICE_OBJECT TargetDevice); |
| |
| NTOSAPI |
| PIRP |
| DDKAPI |
| IoBuildAsynchronousFsdRequest( |
| /*IN*/ ULONG MajorFunction, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN OUT*/ PVOID Buffer /*OPTIONAL*/, |
| /*IN*/ ULONG Length /*OPTIONAL*/, |
| /*IN*/ PLARGE_INTEGER StartingOffset /*OPTIONAL*/, |
| /*IN*/ PIO_STATUS_BLOCK IoStatusBlock /*OPTIONAL*/); |
| |
| NTOSAPI |
| PIRP |
| DDKAPI |
| IoBuildDeviceIoControlRequest( |
| /*IN*/ ULONG IoControlCode, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PVOID InputBuffer /*OPTIONAL*/, |
| /*IN*/ ULONG InputBufferLength, |
| /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/, |
| /*IN*/ ULONG OutputBufferLength, |
| /*IN*/ BOOLEAN InternalDeviceIoControl, |
| /*IN*/ PKEVENT Event, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoBuildPartialMdl( |
| /*IN*/ PMDL SourceMdl, |
| /*IN OUT*/ PMDL TargetMdl, |
| /*IN*/ PVOID VirtualAddress, |
| /*IN*/ ULONG Length); |
| |
| NTOSAPI |
| PIRP |
| DDKAPI |
| IoBuildSynchronousFsdRequest( |
| /*IN*/ ULONG MajorFunction, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN OUT*/ PVOID Buffer /*OPTIONAL*/, |
| /*IN*/ ULONG Length /*OPTIONAL*/, |
| /*IN*/ PLARGE_INTEGER StartingOffset /*OPTIONAL*/, |
| /*IN*/ PKEVENT Event, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKFASTAPI |
| IofCallDriver( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN OUT*/ PIRP Irp); |
| |
| /* |
| * NTSTATUS |
| * IoCallDriver( |
| * IN PDEVICE_OBJECT DeviceObject, |
| * IN OUT PIRP Irp) |
| */ |
| #define IoCallDriver IofCallDriver |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoCancelFileOpen( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PFILE_OBJECT FileObject); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| IoCancelIrp( |
| /*IN*/ PIRP Irp); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoCheckShareAccess( |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ ULONG DesiredShareAccess, |
| /*IN OUT*/ PFILE_OBJECT FileObject, |
| /*IN OUT*/ PSHARE_ACCESS ShareAccess, |
| /*IN*/ BOOLEAN Update); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| IofCompleteRequest( |
| /*IN*/ PIRP Irp, |
| /*IN*/ CCHAR PriorityBoost); |
| |
| /* |
| * VOID |
| * IoCompleteRequest( |
| * IN PIRP Irp, |
| * IN CCHAR PriorityBoost) |
| */ |
| #define IoCompleteRequest IofCompleteRequest |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoConnectInterrupt( |
| /*OUT*/ PKINTERRUPT *InterruptObject, |
| /*IN*/ PKSERVICE_ROUTINE ServiceRoutine, |
| /*IN*/ PVOID ServiceContext, |
| /*IN*/ PKSPIN_LOCK SpinLock /*OPTIONAL*/, |
| /*IN*/ ULONG Vector, |
| /*IN*/ KIRQL Irql, |
| /*IN*/ KIRQL SynchronizeIrql, |
| /*IN*/ KINTERRUPT_MODE InterruptMode, |
| /*IN*/ BOOLEAN ShareVector, |
| /*IN*/ KAFFINITY ProcessorEnableMask, |
| /*IN*/ BOOLEAN FloatingSave); |
| |
| /* |
| * PIO_STACK_LOCATION |
| * IoGetCurrentIrpStackLocation( |
| * IN PIRP Irp) |
| */ |
| #define IoGetCurrentIrpStackLocation(_Irp) \ |
| ((_Irp)->Tail.Overlay.CurrentStackLocation) |
| |
| /* |
| * PIO_STACK_LOCATION |
| * IoGetNextIrpStackLocation( |
| * IN PIRP Irp) |
| */ |
| #define IoGetNextIrpStackLocation(_Irp) \ |
| ((_Irp)->Tail.Overlay.CurrentStackLocation - 1) |
| |
| /* |
| * VOID |
| * IoCopyCurrentIrpStackLocationToNext( |
| * IN PIRP Irp) |
| */ |
| #define IoCopyCurrentIrpStackLocationToNext(_Irp) \ |
| { \ |
| PIO_STACK_LOCATION _IrpSp; \ |
| PIO_STACK_LOCATION _NextIrpSp; \ |
| _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \ |
| _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \ |
| RtlCopyMemory(_NextIrpSp, _IrpSp, \ |
| FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \ |
| _NextIrpSp->Control = 0; \ |
| } |
| |
| NTOSAPI |
| PCONTROLLER_OBJECT |
| DDKAPI |
| IoCreateController( |
| /*IN*/ ULONG Size); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoCreateDevice( |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ ULONG DeviceExtensionSize, |
| /*IN*/ PUNICODE_STRING DeviceName /*OPTIONAL*/, |
| /*IN*/ DEVICE_TYPE DeviceType, |
| /*IN*/ ULONG DeviceCharacteristics, |
| /*IN*/ BOOLEAN Exclusive, |
| /*OUT*/ PDEVICE_OBJECT *DeviceObject); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoCreateDisk( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PCREATE_DISK Disk); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoCreateFile( |
| /*OUT*/ PHANDLE FileHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/, |
| /*IN*/ ULONG FileAttributes, |
| /*IN*/ ULONG ShareAccess, |
| /*IN*/ ULONG Disposition, |
| /*IN*/ ULONG CreateOptions, |
| /*IN*/ PVOID EaBuffer /*OPTIONAL*/, |
| /*IN*/ ULONG EaLength, |
| /*IN*/ CREATE_FILE_TYPE CreateFileType, |
| /*IN*/ PVOID ExtraCreateParameters /*OPTIONAL*/, |
| /*IN*/ ULONG Options); |
| |
| NTOSAPI |
| PKEVENT |
| DDKAPI |
| IoCreateNotificationEvent( |
| /*IN*/ PUNICODE_STRING EventName, |
| /*OUT*/ PHANDLE EventHandle); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoCreateSymbolicLink( |
| /*IN*/ PUNICODE_STRING SymbolicLinkName, |
| /*IN*/ PUNICODE_STRING DeviceName); |
| |
| NTOSAPI |
| PKEVENT |
| DDKAPI |
| IoCreateSynchronizationEvent( |
| /*IN*/ PUNICODE_STRING EventName, |
| /*OUT*/ PHANDLE EventHandle); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoCreateUnprotectedSymbolicLink( |
| /*IN*/ PUNICODE_STRING SymbolicLinkName, |
| /*IN*/ PUNICODE_STRING DeviceName); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoCsqInitialize( |
| PIO_CSQ Csq, |
| /*IN*/ PIO_CSQ_INSERT_IRP CsqInsertIrp, |
| /*IN*/ PIO_CSQ_REMOVE_IRP CsqRemoveIrp, |
| /*IN*/ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp, |
| /*IN*/ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock, |
| /*IN*/ PIO_CSQ_RELEASE_LOCK CsqReleaseLock, |
| /*IN*/ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoCsqInsertIrp( |
| /*IN*/ PIO_CSQ Csq, |
| /*IN*/ PIRP Irp, |
| /*IN*/ PIO_CSQ_IRP_CONTEXT Context); |
| |
| NTOSAPI |
| PIRP |
| DDKAPI |
| IoCsqRemoveIrp( |
| /*IN*/ PIO_CSQ Csq, |
| /*IN*/ PIO_CSQ_IRP_CONTEXT Context); |
| |
| NTOSAPI |
| PIRP |
| DDKAPI |
| IoCsqRemoveNextIrp( |
| /*IN*/ PIO_CSQ Csq, |
| /*IN*/ PVOID PeekContext); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoDeleteController( |
| /*IN*/ PCONTROLLER_OBJECT ControllerObject); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoDeleteDevice( |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoDeleteSymbolicLink( |
| /*IN*/ PUNICODE_STRING SymbolicLinkName); |
| |
| /* |
| * VOID |
| * IoDeassignArcName( |
| * IN PUNICODE_STRING ArcName) |
| */ |
| #define IoDeassignArcName IoDeleteSymbolicLink |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoDetachDevice( |
| /*IN OUT*/ PDEVICE_OBJECT TargetDevice); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoDisconnectInterrupt( |
| /*IN*/ PKINTERRUPT InterruptObject); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| IoForwardIrpSynchronously( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PIRP Irp); |
| |
| #define IoForwardAndCatchIrp IoForwardIrpSynchronously |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoFreeController( |
| /*IN*/ PCONTROLLER_OBJECT ControllerObject); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoFreeErrorLogEntry( |
| PVOID ElEntry); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoFreeIrp( |
| /*IN*/ PIRP Irp); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoFreeMdl( |
| /*IN*/ PMDL Mdl); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoFreeWorkItem( |
| /*IN*/ PIO_WORKITEM pIOWorkItem); |
| |
| NTOSAPI |
| PDEVICE_OBJECT |
| DDKAPI |
| IoGetAttachedDevice( |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| NTOSAPI |
| PDEVICE_OBJECT |
| DDKAPI |
| IoGetAttachedDeviceReference( |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoGetBootDiskInformation( |
| /*IN OUT*/ PBOOTDISK_INFORMATION BootDiskInformation, |
| /*IN*/ ULONG Size); |
| |
| NTOSAPI |
| PCONFIGURATION_INFORMATION |
| DDKAPI |
| IoGetConfigurationInformation( |
| VOID); |
| |
| NTOSAPI |
| PEPROCESS |
| DDKAPI |
| IoGetCurrentProcess( |
| VOID); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoGetDeviceInterfaceAlias( |
| /*IN*/ PUNICODE_STRING SymbolicLinkName, |
| /*IN*/ CONST GUID *AliasInterfaceClassGuid, |
| /*OUT*/ PUNICODE_STRING AliasSymbolicLinkName); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoGetDeviceInterfaces( |
| /*IN*/ CONST GUID *InterfaceClassGuid, |
| /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject /*OPTIONAL*/, |
| /*IN*/ ULONG Flags, |
| /*OUT*/ PWSTR *SymbolicLinkList); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoGetDeviceObjectPointer( |
| /*IN*/ PUNICODE_STRING ObjectName, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*OUT*/ PFILE_OBJECT *FileObject, |
| /*OUT*/ PDEVICE_OBJECT *DeviceObject); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoGetDeviceProperty( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ DEVICE_REGISTRY_PROPERTY DeviceProperty, |
| /*IN*/ ULONG BufferLength, |
| /*OUT*/ PVOID PropertyBuffer, |
| /*OUT*/ PULONG ResultLength); |
| |
| NTOSAPI |
| PDEVICE_OBJECT |
| DDKAPI |
| IoGetDeviceToVerify( |
| /*IN*/ PETHREAD Thread); |
| |
| NTOSAPI |
| PDMA_ADAPTER |
| DDKAPI |
| IoGetDmaAdapter( |
| /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject, |
| /*IN*/ PDEVICE_DESCRIPTION DeviceDescription, |
| /*IN OUT*/ PULONG NumberOfMapRegisters); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| IoGetDriverObjectExtension( |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ PVOID ClientIdentificationAddress); |
| |
| NTOSAPI |
| PGENERIC_MAPPING |
| DDKAPI |
| IoGetFileObjectGenericMapping( |
| VOID); |
| |
| /* |
| * ULONG |
| * IoGetFunctionCodeFromCtlCode( |
| * IN ULONG ControlCode) |
| */ |
| #define IoGetFunctionCodeFromCtlCode(_ControlCode) \ |
| (((_ControlCode) >> 2) & 0x00000FFF) |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| IoGetInitialStack( |
| VOID); |
| |
| NTOSAPI |
| PDEVICE_OBJECT |
| DDKAPI |
| IoGetRelatedDeviceObject( |
| /*IN*/ PFILE_OBJECT FileObject); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| IoGetRemainingStackSize( |
| VOID); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoGetStackLimits( |
| /*OUT*/ PULONG_PTR LowLimit, |
| /*OUT*/ PULONG_PTR HighLimit); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeInitializeDpc( |
| /*IN*/ PRKDPC Dpc, |
| /*IN*/ PKDEFERRED_ROUTINE DeferredRoutine, |
| /*IN*/ PVOID DeferredContext); |
| |
| /* |
| * VOID |
| * IoInitializeDpcRequest( |
| * IN PDEVICE_OBJECT DeviceObject, |
| * IN PIO_DPC_ROUTINE DpcRoutine) |
| */ |
| #define IoInitializeDpcRequest(_DeviceObject, \ |
| _DpcRoutine) \ |
| KeInitializeDpc(&(_DeviceObject)->Dpc, \ |
| (PKDEFERRED_ROUTINE) (_DpcRoutine), \ |
| _DeviceObject) |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoInitializeIrp( |
| /*IN OUT*/ PIRP Irp, |
| /*IN*/ USHORT PacketSize, |
| /*IN*/ CCHAR StackSize); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoInitializeRemoveLockEx( |
| /*IN*/ PIO_REMOVE_LOCK Lock, |
| /*IN*/ ULONG AllocateTag, |
| /*IN*/ ULONG MaxLockedMinutes, |
| /*IN*/ ULONG HighWatermark, |
| /*IN*/ ULONG RemlockSize); |
| |
| /* VOID |
| * IoInitializeRemoveLock( |
| * IN PIO_REMOVE_LOCK Lock, |
| * IN ULONG AllocateTag, |
| * IN ULONG MaxLockedMinutes, |
| * IN ULONG HighWatermark) |
| */ |
| #define IoInitializeRemoveLock( \ |
| Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \ |
| IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \ |
| HighWatermark, sizeof(IO_REMOVE_LOCK)) |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoInitializeTimer( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PIO_TIMER_ROUTINE TimerRoutine, |
| /*IN*/ PVOID Context); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoInvalidateDeviceRelations( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ DEVICE_RELATION_TYPE Type); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoInvalidateDeviceState( |
| /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| IoIs32bitProcess( |
| /*IN*/ PIRP Irp /*OPTIONAL*/); |
| |
| /* |
| * BOOLEAN |
| * IoIsErrorUserInduced( |
| * IN NTSTATUS Status); |
| */ |
| #define IoIsErrorUserInduced(Status) \ |
| ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) || \ |
| ((Status) == STATUS_IO_TIMEOUT) || \ |
| ((Status) == STATUS_MEDIA_WRITE_PROTECTED) || \ |
| ((Status) == STATUS_NO_MEDIA_IN_DEVICE) || \ |
| ((Status) == STATUS_VERIFY_REQUIRED) || \ |
| ((Status) == STATUS_UNRECOGNIZED_MEDIA) || \ |
| ((Status) == STATUS_WRONG_VOLUME))) |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| IoIsWdmVersionAvailable( |
| /*IN*/ UCHAR MajorVersion, |
| /*IN*/ UCHAR MinorVersion); |
| |
| NTOSAPI |
| PIRP |
| DDKAPI |
| IoMakeAssociatedIrp( |
| /*IN*/ PIRP Irp, |
| /*IN*/ CCHAR StackSize); |
| |
| /* |
| * VOID |
| * IoMarkIrpPending( |
| * IN OUT PIRP Irp) |
| */ |
| #define IoMarkIrpPending(_Irp) \ |
| (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED) |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoOpenDeviceInterfaceRegistryKey( |
| /*IN*/ PUNICODE_STRING SymbolicLinkName, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*OUT*/ PHANDLE DeviceInterfaceKey); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoOpenDeviceRegistryKey( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ ULONG DevInstKeyType, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*OUT*/ PHANDLE DevInstRegKey); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoQueryDeviceDescription( |
| /*IN*/ PINTERFACE_TYPE BusType /*OPTIONAL*/, |
| /*IN*/ PULONG BusNumber /*OPTIONAL*/, |
| /*IN*/ PCONFIGURATION_TYPE ControllerType /*OPTIONAL*/, |
| /*IN*/ PULONG ControllerNumber /*OPTIONAL*/, |
| /*IN*/ PCONFIGURATION_TYPE PeripheralType /*OPTIONAL*/, |
| /*IN*/ PULONG PeripheralNumber /*OPTIONAL*/, |
| /*IN*/ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine, |
| /*IN*/ PVOID Context); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoQueueWorkItem( |
| /*IN*/ PIO_WORKITEM pIOWorkItem, |
| /*IN*/ PIO_WORKITEM_ROUTINE Routine, |
| /*IN*/ WORK_QUEUE_TYPE QueueType, |
| /*IN*/ PVOID Context); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoRaiseHardError( |
| /*IN*/ PIRP Irp, |
| /*IN*/ PVPB Vpb /*OPTIONAL*/, |
| /*IN*/ PDEVICE_OBJECT RealDeviceObject); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| IoRaiseInformationalHardError( |
| /*IN*/ NTSTATUS ErrorStatus, |
| /*IN*/ PUNICODE_STRING String /*OPTIONAL*/, |
| /*IN*/ PKTHREAD Thread /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoReadDiskSignature( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ ULONG BytesPerSector, |
| /*OUT*/ PDISK_SIGNATURE Signature); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoReadPartitionTableEx( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoRegisterBootDriverReinitialization( |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine, |
| /*IN*/ PVOID Context); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoRegisterBootDriverReinitialization( |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine, |
| /*IN*/ PVOID Context); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoRegisterDeviceInterface( |
| /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject, |
| /*IN*/ CONST GUID *InterfaceClassGuid, |
| /*IN*/ PUNICODE_STRING ReferenceString /*OPTIONAL*/, |
| /*OUT*/ PUNICODE_STRING SymbolicLinkName); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoRegisterDriverReinitialization( |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine, |
| /*IN*/ PVOID Context); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoRegisterPlugPlayNotification( |
| /*IN*/ IO_NOTIFICATION_EVENT_CATEGORY EventCategory, |
| /*IN*/ ULONG EventCategoryFlags, |
| /*IN*/ PVOID EventCategoryData /*OPTIONAL*/, |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine, |
| /*IN*/ PVOID Context, |
| /*OUT*/ PVOID *NotificationEntry); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoRegisterShutdownNotification( |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoReleaseCancelSpinLock( |
| /*IN*/ KIRQL Irql); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoReleaseRemoveLockAndWaitEx( |
| /*IN*/ PIO_REMOVE_LOCK RemoveLock, |
| /*IN*/ PVOID Tag, |
| /*IN*/ ULONG RemlockSize); |
| |
| /* |
| * VOID |
| * IoReleaseRemoveLockAndWait( |
| * IN PIO_REMOVE_LOCK RemoveLock, |
| * IN PVOID Tag) |
| */ |
| #define IoReleaseRemoveLockAndWait(_RemoveLock, \ |
| _Tag) \ |
| IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoReleaseRemoveLockEx( |
| /*IN*/ PIO_REMOVE_LOCK RemoveLock, |
| /*IN*/ PVOID Tag, |
| /*IN*/ ULONG RemlockSize); |
| |
| /* |
| * VOID |
| * IoReleaseRemoveLock( |
| * IN PIO_REMOVE_LOCK RemoveLock, |
| * IN PVOID Tag) |
| */ |
| #define IoReleaseRemoveLock(_RemoveLock, \ |
| _Tag) \ |
| IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK)) |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoRemoveShareAccess( |
| /*IN*/ PFILE_OBJECT FileObject, |
| /*IN OUT*/ PSHARE_ACCESS ShareAccess); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoReportDetectedDevice( |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ INTERFACE_TYPE LegacyBusType, |
| /*IN*/ ULONG BusNumber, |
| /*IN*/ ULONG SlotNumber, |
| /*IN*/ PCM_RESOURCE_LIST ResourceList, |
| /*IN*/ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements /*OPTIONAL*/, |
| /*IN*/ BOOLEAN ResourceAssigned, |
| /*IN OUT*/ PDEVICE_OBJECT *DeviceObject); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoReportResourceForDetection( |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ PCM_RESOURCE_LIST DriverList /*OPTIONAL*/, |
| /*IN*/ ULONG DriverListSize /*OPTIONAL*/, |
| /*IN*/ PDEVICE_OBJECT DeviceObject /*OPTIONAL*/, |
| /*IN*/ PCM_RESOURCE_LIST DeviceList /*OPTIONAL*/, |
| /*IN*/ ULONG DeviceListSize /*OPTIONAL*/, |
| /*OUT*/ PBOOLEAN ConflictDetected); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoReportResourceUsage( |
| /*IN*/ PUNICODE_STRING DriverClassName /*OPTIONAL*/, |
| /*IN*/ PDRIVER_OBJECT DriverObject, |
| /*IN*/ PCM_RESOURCE_LIST DriverList /*OPTIONAL*/, |
| /*IN*/ ULONG DriverListSize /*OPTIONAL*/, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PCM_RESOURCE_LIST DeviceList /*OPTIONAL*/, |
| /*IN*/ ULONG DeviceListSize /*OPTIONAL*/, |
| /*IN*/ BOOLEAN OverrideConflict, |
| /*OUT*/ PBOOLEAN ConflictDetected); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoReportTargetDeviceChange( |
| /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject, |
| /*IN*/ PVOID NotificationStructure); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoReportTargetDeviceChangeAsynchronous( |
| /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject, |
| /*IN*/ PVOID NotificationStructure, |
| /*IN*/ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback /*OPTIONAL*/, |
| /*IN*/ PVOID Context /*OPTIONAL*/); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoRequestDeviceEject( |
| /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject); |
| |
| /* |
| * VOID |
| * IoRequestDpc( |
| * IN PDEVICE_OBJECT DeviceObject, |
| * IN PIRP Irp, |
| * IN PVOID Context); |
| */ |
| #define IoRequestDpc(DeviceObject, Irp, Context)( \ |
| KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context))) |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoReuseIrp( |
| /*IN OUT*/ PIRP Irp, |
| /*IN*/ NTSTATUS Status); |
| |
| /* |
| * PDRIVER_CANCEL |
| * IoSetCancelRoutine( |
| * IN PIRP Irp, |
| * IN PDRIVER_CANCEL CancelRoutine) |
| */ |
| #define IoSetCancelRoutine(_Irp, \ |
| _CancelRoutine) \ |
| ((PDRIVER_CANCEL) InterlockedExchangePointer( \ |
| (PVOID *) &(_Irp)->CancelRoutine, (PVOID) (_CancelRoutine))) |
| |
| /* |
| * VOID |
| * IoSetCompletionRoutine( |
| * IN PIRP Irp, |
| * IN PIO_COMPLETION_ROUTINE CompletionRoutine, |
| * IN PVOID Context, |
| * IN BOOLEAN InvokeOnSuccess, |
| * IN BOOLEAN InvokeOnError, |
| * IN BOOLEAN InvokeOnCancel) |
| */ |
| #define IoSetCompletionRoutine(_Irp, \ |
| _CompletionRoutine, \ |
| _Context, \ |
| _InvokeOnSuccess, \ |
| _InvokeOnError, \ |
| _InvokeOnCancel) \ |
| { \ |
| PIO_STACK_LOCATION _IrpSp; \ |
| ASSERT(_InvokeOnSuccess || _InvokeOnError || _InvokeOnCancel ? \ |
| _CompletionRoutine != NULL : TRUE); \ |
| _IrpSp = IoGetNextIrpStackLocation(_Irp); \ |
| _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \ |
| _IrpSp->Context = (_Context); \ |
| _IrpSp->Control = 0; \ |
| if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \ |
| if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \ |
| if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \ |
| } |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoSetCompletionRoutineEx( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PIRP Irp, |
| /*IN*/ PIO_COMPLETION_ROUTINE CompletionRoutine, |
| /*IN*/ PVOID Context, |
| /*IN*/ BOOLEAN InvokeOnSuccess, |
| /*IN*/ BOOLEAN InvokeOnError, |
| /*IN*/ BOOLEAN InvokeOnCancel); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoSetDeviceInterfaceState( |
| /*IN*/ PUNICODE_STRING SymbolicLinkName, |
| /*IN*/ BOOLEAN Enable); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoSetHardErrorOrVerifyDevice( |
| /*IN*/ PIRP Irp, |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| /* |
| * VOID |
| * IoSetNextIrpStackLocation( |
| * IN OUT PIRP Irp) |
| */ |
| #define IoSetNextIrpStackLocation(_Irp) \ |
| { \ |
| (_Irp)->CurrentLocation--; \ |
| (_Irp)->Tail.Overlay.CurrentStackLocation--; \ |
| } |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoSetPartitionInformationEx( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ ULONG PartitionNumber, |
| /*IN*/ struct _SET_PARTITION_INFORMATION_EX *PartitionInfo); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoSetShareAccess( |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ ULONG DesiredShareAccess, |
| /*IN OUT*/ PFILE_OBJECT FileObject, |
| /*OUT*/ PSHARE_ACCESS ShareAccess); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoSetStartIoAttributes( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ BOOLEAN DeferredStartIo, |
| /*IN*/ BOOLEAN NonCancelable); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoSetSystemPartition( |
| /*IN*/ PUNICODE_STRING VolumeNameString); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| IoSetThreadHardErrorMode( |
| /*IN*/ BOOLEAN EnableHardErrors); |
| |
| /* |
| * USHORT |
| * IoSizeOfIrp( |
| * IN CCHAR StackSize) |
| */ |
| #define IoSizeOfIrp(_StackSize) \ |
| ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION))))) |
| |
| /* |
| * VOID |
| * IoSkipCurrentIrpStackLocation( |
| * IN PIRP Irp) |
| */ |
| #define IoSkipCurrentIrpStackLocation(_Irp) \ |
| { \ |
| (_Irp)->CurrentLocation++; \ |
| (_Irp)->Tail.Overlay.CurrentStackLocation++; \ |
| } |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoStartNextPacket( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ BOOLEAN Cancelable); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoStartNextPacketByKey( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ BOOLEAN Cancelable, |
| /*IN*/ ULONG Key); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoStartPacket( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PIRP Irp, |
| /*IN*/ PULONG Key /*OPTIONAL*/, |
| /*IN*/ PDRIVER_CANCEL CancelFunction /*OPTIONAL*/); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoStartTimer( |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoStopTimer( |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoUnregisterPlugPlayNotification( |
| /*IN*/ PVOID NotificationEntry); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoUnregisterShutdownNotification( |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoUpdateShareAccess( |
| /*IN*/ PFILE_OBJECT FileObject, |
| /*IN OUT*/ PSHARE_ACCESS ShareAccess); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoVerifyPartitionTable( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ BOOLEAN FixErrors); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoVolumeDeviceToDosName( |
| /*IN*/ PVOID VolumeDeviceObject, |
| /*OUT*/ PUNICODE_STRING DosName); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIAllocateInstanceIds( |
| /*IN*/ GUID *Guid, |
| /*IN*/ ULONG InstanceCount, |
| /*OUT*/ ULONG *FirstInstanceId); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| IoWMIDeviceObjectToProviderId( |
| /*IN*/ PDEVICE_OBJECT DeviceObject); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIDeviceObjectToInstanceName( |
| /*IN*/ PVOID DataBlockObject, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*OUT*/ PUNICODE_STRING InstanceName); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIExecuteMethod( |
| /*IN*/ PVOID DataBlockObject, |
| /*IN*/ PUNICODE_STRING InstanceName, |
| /*IN*/ ULONG MethodId, |
| /*IN*/ ULONG InBufferSize, |
| /*IN OUT*/ PULONG OutBufferSize, |
| /*IN OUT*/ PUCHAR InOutBuffer); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIHandleToInstanceName( |
| /*IN*/ PVOID DataBlockObject, |
| /*IN*/ HANDLE FileHandle, |
| /*OUT*/ PUNICODE_STRING InstanceName); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIOpenBlock( |
| /*IN*/ GUID *DataBlockGuid, |
| /*IN*/ ULONG DesiredAccess, |
| /*OUT*/ PVOID *DataBlockObject); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIQueryAllData( |
| /*IN*/ PVOID DataBlockObject, |
| /*IN OUT*/ ULONG *InOutBufferSize, |
| /*OUT*/ PVOID OutBuffer); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIQueryAllDataMultiple( |
| /*IN*/ PVOID *DataBlockObjectList, |
| /*IN*/ ULONG ObjectCount, |
| /*IN OUT*/ ULONG *InOutBufferSize, |
| /*OUT*/ PVOID OutBuffer); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIQuerySingleInstance( |
| /*IN*/ PVOID DataBlockObject, |
| /*IN*/ PUNICODE_STRING InstanceName, |
| /*IN OUT*/ ULONG *InOutBufferSize, |
| /*OUT*/ PVOID OutBuffer); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIQuerySingleInstanceMultiple( |
| /*IN*/ PVOID *DataBlockObjectList, |
| /*IN*/ PUNICODE_STRING InstanceNames, |
| /*IN*/ ULONG ObjectCount, |
| /*IN OUT*/ ULONG *InOutBufferSize, |
| /*OUT*/ PVOID OutBuffer); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIRegistrationControl( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ ULONG Action); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMISetNotificationCallback( |
| /*IN*/ PVOID Object, |
| /*IN*/ WMI_NOTIFICATION_CALLBACK Callback, |
| /*IN*/ PVOID Context); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMISetSingleInstance( |
| /*IN*/ PVOID DataBlockObject, |
| /*IN*/ PUNICODE_STRING InstanceName, |
| /*IN*/ ULONG Version, |
| /*IN*/ ULONG ValueBufferSize, |
| /*IN*/ PVOID ValueBuffer); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMISetSingleItem( |
| /*IN*/ PVOID DataBlockObject, |
| /*IN*/ PUNICODE_STRING InstanceName, |
| /*IN*/ ULONG DataItemId, |
| /*IN*/ ULONG Version, |
| /*IN*/ ULONG ValueBufferSize, |
| /*IN*/ PVOID ValueBuffer); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMISuggestInstanceName( |
| /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject /*OPTIONAL*/, |
| /*IN*/ PUNICODE_STRING SymbolicLinkName /*OPTIONAL*/, |
| /*IN*/ BOOLEAN CombineNames, |
| /*OUT*/ PUNICODE_STRING SuggestedInstanceName); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWMIWriteEvent( |
| /*IN*/ PVOID WnodeEventItem); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| IoWriteErrorLogEntry( |
| /*IN*/ PVOID ElEntry); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| IoWritePartitionTableEx( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ struct _DRIVE_LAYOUT_INFORMATION_EX *PartitionBuffer); |
| |
| |
| |
| /** Kernel routines **/ |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| KeAcquireInStackQueuedSpinLock( |
| /*IN*/ PKSPIN_LOCK SpinLock, |
| /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| KeAcquireInStackQueuedSpinLockAtDpcLevel( |
| /*IN*/ PKSPIN_LOCK SpinLock, |
| /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle); |
| |
| NTOSAPI |
| KIRQL |
| DDKAPI |
| KeAcquireInterruptSpinLock( |
| /*IN*/ PKINTERRUPT Interrupt); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeAcquireSpinLock( |
| /*IN*/ PKSPIN_LOCK SpinLock, |
| /*OUT*/ PKIRQL OldIrql); |
| |
| /* System Service Dispatch Table */ |
| typedef PVOID (NTAPI * SSDT)(VOID); |
| typedef SSDT * PSSDT; |
| |
| /* System Service Parameters Table */ |
| typedef UCHAR SSPT, * PSSPT; |
| |
| typedef struct _SSDT_ENTRY { |
| PSSDT SSDT; |
| PULONG ServiceCounterTable; |
| ULONG NumberOfServices; |
| PSSPT SSPT; |
| } SSDT_ENTRY, *PSSDT_ENTRY; |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeAddSystemServiceTable( |
| /*IN*/ PSSDT SSDT, |
| /*IN*/ PULONG ServiceCounterTable, |
| /*IN*/ ULONG NumberOfServices, |
| /*IN*/ PSSPT SSPT, |
| /*IN*/ ULONG TableIndex); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeAreApcsDisabled( |
| VOID); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeAttachProcess( |
| /*IN*/ PEPROCESS Process); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeBugCheck( |
| /*IN*/ ULONG BugCheckCode); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeBugCheckEx( |
| /*IN*/ ULONG BugCheckCode, |
| /*IN*/ ULONG_PTR BugCheckParameter1, |
| /*IN*/ ULONG_PTR BugCheckParameter2, |
| /*IN*/ ULONG_PTR BugCheckParameter3, |
| /*IN*/ ULONG_PTR BugCheckParameter4); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeCancelTimer( |
| /*IN*/ PKTIMER Timer); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeClearEvent( |
| /*IN*/ PRKEVENT Event); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| KeDelayExecutionThread( |
| /*IN*/ KPROCESSOR_MODE WaitMode, |
| /*IN*/ BOOLEAN Alertable, |
| /*IN*/ PLARGE_INTEGER Interval); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeDeregisterBugCheckCallback( |
| /*IN*/ PKBUGCHECK_CALLBACK_RECORD CallbackRecord); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeDetachProcess( |
| VOID); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeEnterCriticalRegion( |
| VOID); |
| |
| /* |
| * VOID |
| * KeFlushIoBuffers( |
| * IN PMDL Mdl, |
| * IN BOOLEAN ReadOperation, |
| * IN BOOLEAN DmaOperation) |
| */ |
| #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation) |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeFlushQueuedDpcs(VOID); |
| |
| NTOSAPI |
| PRKTHREAD |
| DDKAPI |
| KeGetCurrentThread( |
| VOID); |
| |
| NTOSAPI |
| KPROCESSOR_MODE |
| DDKAPI |
| KeGetPreviousMode( |
| VOID); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| KeGetRecommendedSharedDataAlignment( |
| VOID); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeInitializeApc( |
| /*IN*/ PKAPC Apc, |
| /*IN*/ PKTHREAD Thread, |
| /*IN*/ UCHAR StateIndex, |
| /*IN*/ PKKERNEL_ROUTINE KernelRoutine, |
| /*IN*/ PKRUNDOWN_ROUTINE RundownRoutine, |
| /*IN*/ PKNORMAL_ROUTINE NormalRoutine, |
| /*IN*/ UCHAR Mode, |
| /*IN*/ PVOID Context); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeInitializeDeviceQueue( |
| /*IN*/ PKDEVICE_QUEUE DeviceQueue); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeInitializeMutex( |
| /*IN*/ PRKMUTEX Mutex, |
| /*IN*/ ULONG Level); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeInitializeSemaphore( |
| /*IN*/ PRKSEMAPHORE Semaphore, |
| /*IN*/ LONG Count, |
| /*IN*/ LONG Limit); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeInitializeSpinLock( |
| /*IN*/ PKSPIN_LOCK SpinLock); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeInitializeTimer( |
| /*IN*/ PKTIMER Timer); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeInitializeTimerEx( |
| /*IN*/ PKTIMER Timer, |
| /*IN*/ TIMER_TYPE Type); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeInsertByKeyDeviceQueue( |
| /*IN*/ PKDEVICE_QUEUE DeviceQueue, |
| /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry, |
| /*IN*/ ULONG SortKey); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeInsertDeviceQueue( |
| /*IN*/ PKDEVICE_QUEUE DeviceQueue, |
| /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeInsertQueueDpc( |
| /*IN*/ PRKDPC Dpc, |
| /*IN*/ PVOID SystemArgument1, |
| /*IN*/ PVOID SystemArgument2); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeLeaveCriticalRegion( |
| VOID); |
| |
| #define KeMemoryBarrier() asm("mfence;") |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| KePulseEvent( |
| /*IN*/ PRKEVENT Event, |
| /*IN*/ KPRIORITY Increment, |
| /*IN*/ BOOLEAN Wait); |
| |
| NTOSAPI |
| ULONGLONG |
| DDKAPI |
| KeQueryInterruptTime( |
| VOID); |
| |
| NTOSAPI |
| LARGE_INTEGER |
| DDKAPI |
| KeQueryPerformanceCounter( |
| /*OUT*/ PLARGE_INTEGER PerformanceFrequency /*OPTIONAL*/); |
| |
| NTOSAPI |
| KPRIORITY |
| DDKAPI |
| KeQueryPriorityThread( |
| /*IN*/ PRKTHREAD Thread); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeQuerySystemTime( |
| /*OUT*/ PLARGE_INTEGER CurrentTime); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeQueryTickCount( |
| /*OUT*/ PLARGE_INTEGER TickCount); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| KeQueryTimeIncrement( |
| VOID); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| KeReadStateEvent( |
| /*IN*/ PRKEVENT Event); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| KeReadStateMutex( |
| /*IN*/ PRKMUTEX Mutex); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| KeReadStateSemaphore( |
| /*IN*/ PRKSEMAPHORE Semaphore); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeReadStateTimer( |
| /*IN*/ PKTIMER Timer); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeRegisterBugCheckCallback( |
| /*IN*/ PKBUGCHECK_CALLBACK_RECORD CallbackRecord, |
| /*IN*/ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine, |
| /*IN*/ PVOID Buffer, |
| /*IN*/ ULONG Length, |
| /*IN*/ PUCHAR Component); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| KeReleaseInStackQueuedSpinLock( |
| /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| KeReleaseInStackQueuedSpinLockFromDpcLevel( |
| /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeReleaseInterruptSpinLock( |
| /*IN*/ PKINTERRUPT Interrupt, |
| /*IN*/ KIRQL OldIrql); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| KeReleaseMutex( |
| /*IN*/ PRKMUTEX Mutex, |
| /*IN*/ BOOLEAN Wait); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| KeReleaseSemaphore( |
| /*IN*/ PRKSEMAPHORE Semaphore, |
| /*IN*/ KPRIORITY Increment, |
| /*IN*/ LONG Adjustment, |
| /*IN*/ BOOLEAN Wait); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeReleaseSpinLock( |
| /*IN*/ PKSPIN_LOCK SpinLock, |
| /*IN*/ KIRQL NewIrql); |
| |
| NTOSAPI |
| PKDEVICE_QUEUE_ENTRY |
| DDKAPI |
| KeRemoveByKeyDeviceQueue( |
| /*IN*/ PKDEVICE_QUEUE DeviceQueue, |
| /*IN*/ ULONG SortKey); |
| |
| NTOSAPI |
| PKDEVICE_QUEUE_ENTRY |
| DDKAPI |
| KeRemoveDeviceQueue( |
| /*IN*/ PKDEVICE_QUEUE DeviceQueue); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeRemoveEntryDeviceQueue( |
| /*IN*/ PKDEVICE_QUEUE DeviceQueue, |
| /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeRemoveQueueDpc( |
| /*IN*/ PRKDPC Dpc); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| KeResetEvent( |
| /*IN*/ PRKEVENT Event); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| KeRestoreFloatingPointState( |
| /*IN*/ PKFLOATING_SAVE FloatSave); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| KeSaveFloatingPointState( |
| /*OUT*/ PKFLOATING_SAVE FloatSave); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| KeSetBasePriorityThread( |
| /*IN*/ PRKTHREAD Thread, |
| /*IN*/ LONG Increment); |
| |
| NTOSAPI |
| LONG |
| DDKAPI |
| KeSetEvent( |
| /*IN*/ PRKEVENT Event, |
| /*IN*/ KPRIORITY Increment, |
| /*IN*/ BOOLEAN Wait); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeSetImportanceDpc( |
| /*IN*/ PRKDPC Dpc, |
| /*IN*/ KDPC_IMPORTANCE Importance); |
| |
| NTOSAPI |
| KPRIORITY |
| DDKAPI |
| KeSetPriorityThread( |
| /*IN*/ PKTHREAD Thread, |
| /*IN*/ KPRIORITY Priority); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeSetTargetProcessorDpc( |
| /*IN*/ PRKDPC Dpc, |
| /*IN*/ CCHAR Number); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeSetTimer( |
| /*IN*/ PKTIMER Timer, |
| /*IN*/ LARGE_INTEGER DueTime, |
| /*IN*/ PKDPC Dpc /*OPTIONAL*/); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeSetTimerEx( |
| /*IN*/ PKTIMER Timer, |
| /*IN*/ LARGE_INTEGER DueTime, |
| /*IN*/ LONG Period /*OPTIONAL*/, |
| /*IN*/ PKDPC Dpc /*OPTIONAL*/); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| KeSetTimeUpdateNotifyRoutine( |
| /*IN*/ PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeStallExecutionProcessor( |
| /*IN*/ ULONG MicroSeconds); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| KeSynchronizeExecution( |
| /*IN*/ PKINTERRUPT Interrupt, |
| /*IN*/ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine, |
| /*IN*/ PVOID SynchronizeContext); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| KeWaitForMultipleObjects( |
| /*IN*/ ULONG Count, |
| /*IN*/ PVOID Object[], |
| /*IN*/ WAIT_TYPE WaitType, |
| /*IN*/ KWAIT_REASON WaitReason, |
| /*IN*/ KPROCESSOR_MODE WaitMode, |
| /*IN*/ BOOLEAN Alertable, |
| /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL */, |
| /*IN*/ PKWAIT_BLOCK WaitBlockArray /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| KeWaitForMutexObject( |
| /*IN*/ PRKMUTEX Mutex, |
| /*IN*/ KWAIT_REASON WaitReason, |
| /*IN*/ KPROCESSOR_MODE WaitMode, |
| /*IN*/ BOOLEAN Alertable, |
| /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| KeWaitForSingleObject( |
| /*IN*/ PVOID Object, |
| /*IN*/ KWAIT_REASON WaitReason, |
| /*IN*/ KPROCESSOR_MODE WaitMode, |
| /*IN*/ BOOLEAN Alertable, |
| /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeRaiseIrql( |
| /*IN*/ KIRQL new_irql, |
| /*OUT*/ PKIRQL old_irql); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KeLowerIrql( |
| /*IN*/ KIRQL irql); |
| |
| NTOSAPI |
| KIRQL |
| DDKAPI |
| KeRaiseIrqlToDpcLevel( |
| VOID); |
| |
| /** Memory manager routines **/ |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmAdvanceMdl( |
| /*IN*/ PMDL Mdl, |
| /*IN*/ ULONG NumberOfBytes); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmAllocateContiguousMemory( |
| /*IN*/ ULONG NumberOfBytes, |
| /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmAllocateContiguousMemorySpecifyCache( |
| /*IN*/ SIZE_T NumberOfBytes, |
| /*IN*/ PHYSICAL_ADDRESS LowestAcceptableAddress, |
| /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress, |
| /*IN*/ PHYSICAL_ADDRESS BoundaryAddressMultiple /*OPTIONAL*/, |
| /*IN*/ MEMORY_CACHING_TYPE CacheType); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmAllocateMappingAddress( |
| /*IN*/ SIZE_T NumberOfBytes, |
| /*IN*/ ULONG PoolTag); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmAllocateNonCachedMemory( |
| /*IN*/ ULONG NumberOfBytes); |
| |
| NTOSAPI |
| PMDL |
| DDKAPI |
| MmAllocatePagesForMdl( |
| /*IN*/ PHYSICAL_ADDRESS LowAddress, |
| /*IN*/ PHYSICAL_ADDRESS HighAddress, |
| /*IN*/ PHYSICAL_ADDRESS SkipBytes, |
| /*IN*/ SIZE_T TotalBytes); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmBuildMdlForNonPagedPool( |
| /*IN OUT*/ PMDL MemoryDescriptorList); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmCreateSection( |
| /*OUT*/ PSECTION_OBJECT *SectionObject, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/, |
| /*IN*/ PLARGE_INTEGER MaximumSize, |
| /*IN*/ ULONG SectionPageProtection, |
| /*IN*/ ULONG AllocationAttributes, |
| /*IN*/ HANDLE FileHandle /*OPTIONAL*/, |
| /*IN*/ PFILE_OBJECT File /*OPTIONAL*/); |
| |
| typedef enum _MMFLUSH_TYPE { |
| MmFlushForDelete, |
| MmFlushForWrite |
| } MMFLUSH_TYPE; |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| MmFlushImageSection( |
| /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer, |
| /*IN*/ MMFLUSH_TYPE FlushType); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmFreeContiguousMemory( |
| /*IN*/ PVOID BaseAddress); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmFreeContiguousMemorySpecifyCache( |
| /*IN*/ PVOID BaseAddress, |
| /*IN*/ SIZE_T NumberOfBytes, |
| /*IN*/ MEMORY_CACHING_TYPE CacheType); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmFreeMappingAddress( |
| /*IN*/ PVOID BaseAddress, |
| /*IN*/ ULONG PoolTag); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmFreeNonCachedMemory( |
| /*IN*/ PVOID BaseAddress, |
| /*IN*/ SIZE_T NumberOfBytes); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmFreePagesFromMdl( |
| /*IN*/ PMDL MemoryDescriptorList); |
| |
| /* |
| * ULONG |
| * MmGetMdlByteCount( |
| * IN PMDL Mdl) |
| */ |
| #define MmGetMdlByteCount(_Mdl) \ |
| ((_Mdl)->ByteCount) |
| |
| /* |
| * ULONG |
| * MmGetMdlByteOffset( |
| * IN PMDL Mdl) |
| */ |
| #define MmGetMdlByteOffset(_Mdl) \ |
| ((_Mdl)->ByteOffset) |
| |
| /* |
| * PPFN_NUMBER |
| * MmGetMdlPfnArray( |
| * IN PMDL Mdl) |
| */ |
| #define MmGetMdlPfnArray(_Mdl) \ |
| ((PPFN_NUMBER) ((_Mdl) + 1)) |
| |
| /* |
| * PVOID |
| * MmGetMdlVirtualAddress( |
| * IN PMDL Mdl) |
| */ |
| #define MmGetMdlVirtualAddress(_Mdl) \ |
| ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset)) |
| |
| NTOSAPI |
| PHYSICAL_ADDRESS |
| DDKAPI |
| MmGetPhysicalAddress( |
| /*IN*/ PVOID BaseAddress); |
| |
| NTOSAPI |
| PPHYSICAL_MEMORY_RANGE |
| DDKAPI |
| MmGetPhysicalMemoryRanges( |
| VOID); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmGetVirtualForPhysical( |
| /*IN*/ PHYSICAL_ADDRESS PhysicalAddress); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmMapLockedPagesSpecifyCache( |
| /*IN*/ PMDL MemoryDescriptorList, |
| /*IN*/ KPROCESSOR_MODE AccessMode, |
| /*IN*/ MEMORY_CACHING_TYPE CacheType, |
| /*IN*/ PVOID BaseAddress, |
| /*IN*/ ULONG BugCheckOnFailure, |
| /*IN*/ MM_PAGE_PRIORITY Priority); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmMapLockedPagesWithReservedMapping( |
| /*IN*/ PVOID MappingAddress, |
| /*IN*/ ULONG PoolTag, |
| /*IN*/ PMDL MemoryDescriptorList, |
| /*IN*/ MEMORY_CACHING_TYPE CacheType); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmMapUserAddressesToPage( |
| /*IN*/ PVOID BaseAddress, |
| /*IN*/ SIZE_T NumberOfBytes, |
| /*IN*/ PVOID PageAddress); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmMapVideoDisplay( |
| /*IN*/ PHYSICAL_ADDRESS PhysicalAddress, |
| /*IN*/ SIZE_T NumberOfBytes, |
| /*IN*/ MEMORY_CACHING_TYPE CacheType); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmMapViewInSessionSpace( |
| /*IN*/ PVOID Section, |
| /*OUT*/ PVOID *MappedBase, |
| /*IN OUT*/ PSIZE_T ViewSize); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmMapViewInSystemSpace( |
| /*IN*/ PVOID Section, |
| /*OUT*/ PVOID *MappedBase, |
| /*IN*/ PSIZE_T ViewSize); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmMarkPhysicalMemoryAsBad( |
| /*IN*/ PPHYSICAL_ADDRESS StartAddress, |
| /*IN OUT*/ PLARGE_INTEGER NumberOfBytes); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmMarkPhysicalMemoryAsGood( |
| /*IN*/ PPHYSICAL_ADDRESS StartAddress, |
| /*IN OUT*/ PLARGE_INTEGER NumberOfBytes); |
| |
| /* |
| * PVOID |
| * MmGetSystemAddressForMdlSafe( |
| * IN PMDL Mdl, |
| * IN MM_PAGE_PRIORITY Priority) |
| */ |
| #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \ |
| ((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \ |
| | MDL_SOURCE_IS_NONPAGED_POOL)) ? \ |
| (_Mdl)->MappedSystemVa : \ |
| (PVOID) MmMapLockedPagesSpecifyCache((_Mdl), \ |
| KernelMode, MmCached, NULL, FALSE, _Priority) |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmGetSystemRoutineAddress( |
| /*IN*/ PUNICODE_STRING SystemRoutineName); |
| |
| /* |
| * ULONG |
| * ADDRESS_AND_SIZE_TO_SPAN_PAGES( |
| * IN PVOID Va, |
| * IN ULONG Size) |
| */ |
| #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, \ |
| _Size) \ |
| ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \ |
| + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT)) |
| |
| /* |
| * VOID |
| * MmInitializeMdl( |
| * IN PMDL MemoryDescriptorList, |
| * IN PVOID BaseVa, |
| * IN SIZE_T Length) |
| */ |
| #define MmInitializeMdl(_MemoryDescriptorList, \ |
| _BaseVa, \ |
| _Length) \ |
| { \ |
| (_MemoryDescriptorList)->Next = (PMDL) NULL; \ |
| (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \ |
| (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \ |
| (_MemoryDescriptorList)->MdlFlags = 0; \ |
| (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \ |
| (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \ |
| (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \ |
| } |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| MmIsAddressValid( |
| /*IN*/ PVOID VirtualAddress); |
| |
| NTOSAPI |
| LOGICAL |
| DDKAPI |
| MmIsDriverVerifying( |
| /*IN*/ PDRIVER_OBJECT DriverObject); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| MmIsThisAnNtAsSystem( |
| VOID); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmIsVerifierEnabled( |
| /*OUT*/ PULONG VerifierFlags); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmLockPagableDataSection( |
| /*IN*/ PVOID AddressWithinSection); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmLockPagableImageSection( |
| /*IN*/ PVOID AddressWithinSection); |
| |
| /* |
| * PVOID |
| * MmLockPagableCodeSection( |
| * IN PVOID AddressWithinSection) |
| */ |
| #define MmLockPagableCodeSection MmLockPagableDataSection |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmLockPagableSectionByHandle( |
| /*IN*/ PVOID ImageSectionHandle); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmMapIoSpace( |
| /*IN*/ PHYSICAL_ADDRESS PhysicalAddress, |
| /*IN*/ ULONG NumberOfBytes, |
| /*IN*/ MEMORY_CACHING_TYPE CacheEnable); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| MmMapLockedPages( |
| /*IN*/ PMDL MemoryDescriptorList, |
| /*IN*/ KPROCESSOR_MODE AccessMode); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmPageEntireDriver( |
| /*IN*/ PVOID AddressWithinSection); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmProbeAndLockProcessPages( |
| /*IN OUT*/ PMDL MemoryDescriptorList, |
| /*IN*/ PEPROCESS Process, |
| /*IN*/ KPROCESSOR_MODE AccessMode, |
| /*IN*/ LOCK_OPERATION Operation); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmProtectMdlSystemAddress( |
| /*IN*/ PMDL MemoryDescriptorList, |
| /*IN*/ ULONG NewProtect); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmUnmapLockedPages( |
| /*IN*/ PVOID BaseAddress, |
| /*IN*/ PMDL MemoryDescriptorList); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmUnmapViewInSessionSpace( |
| /*IN*/ PVOID MappedBase); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmUnmapViewInSystemSpace( |
| /*IN*/ PVOID MappedBase); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmUnsecureVirtualMemory( |
| /*IN*/ HANDLE SecureHandle); |
| |
| /* |
| * VOID |
| * MmPrepareMdlForReuse( |
| * IN PMDL Mdl) |
| */ |
| #define MmPrepareMdlForReuse(_Mdl) \ |
| { \ |
| if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) { \ |
| ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \ |
| MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \ |
| } else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) { \ |
| ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \ |
| } \ |
| } |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmProbeAndLockPages( |
| /*IN OUT*/ PMDL MemoryDescriptorList, |
| /*IN*/ KPROCESSOR_MODE AccessMode, |
| /*IN*/ LOCK_OPERATION Operation); |
| |
| NTOSAPI |
| MM_SYSTEM_SIZE |
| DDKAPI |
| MmQuerySystemSize( |
| VOID); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| MmRemovePhysicalMemory( |
| /*IN*/ PPHYSICAL_ADDRESS StartAddress, |
| /*IN OUT*/ PLARGE_INTEGER NumberOfBytes); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmResetDriverPaging( |
| /*IN*/ PVOID AddressWithinSection); |
| |
| NTOSAPI |
| HANDLE |
| DDKAPI |
| MmSecureVirtualMemory( |
| /*IN*/ PVOID Address, |
| /*IN*/ SIZE_T Size, |
| /*IN*/ ULONG ProbeMode); |
| |
| NTOSAPI |
| ULONG |
| DDKAPI |
| MmSizeOfMdl( |
| /*IN*/ PVOID Base, |
| /*IN*/ SIZE_T Length); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmUnlockPagableImageSection( |
| /*IN*/ PVOID ImageSectionHandle); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmUnlockPages( |
| /*IN*/ PMDL MemoryDescriptorList); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmUnmapIoSpace( |
| /*IN*/ PVOID BaseAddress, |
| /*IN*/ SIZE_T NumberOfBytes); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmUnmapReservedMapping( |
| /*IN*/ PVOID BaseAddress, |
| /*IN*/ ULONG PoolTag, |
| /*IN*/ PMDL MemoryDescriptorList); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| MmUnmapVideoDisplay( |
| /*IN*/ PVOID BaseAddress, |
| /*IN*/ SIZE_T NumberOfBytes); |
| |
| |
| |
| /** Object manager routines **/ |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObAssignSecurity( |
| /*IN*/ PACCESS_STATE AccessState, |
| /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor, |
| /*IN*/ PVOID Object, |
| /*IN*/ POBJECT_TYPE Type); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ObDereferenceSecurityDescriptor( |
| PSECURITY_DESCRIPTOR SecurityDescriptor, |
| ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| ObfDereferenceObject( |
| /*IN*/ PVOID Object); |
| |
| /* |
| * VOID |
| * ObDereferenceObject( |
| * IN PVOID Object) |
| */ |
| #define ObDereferenceObject ObfDereferenceObject |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObGetObjectSecurity( |
| /*IN*/ PVOID Object, |
| /*OUT*/ PSECURITY_DESCRIPTOR *SecurityDescriptor, |
| /*OUT*/ PBOOLEAN MemoryAllocated); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObInsertObject( |
| /*IN*/ PVOID Object, |
| /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ ULONG AdditionalReferences, |
| /*OUT*/ PVOID* ReferencedObject /*OPTIONAL*/, |
| /*OUT*/ PHANDLE Handle); |
| |
| NTOSAPI |
| VOID |
| DDKFASTAPI |
| ObfReferenceObject( |
| /*IN*/ PVOID Object); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObLogSecurityDescriptor( |
| /*IN*/ PSECURITY_DESCRIPTOR InputSecurityDescriptor, |
| /*OUT*/ PSECURITY_DESCRIPTOR *OutputSecurityDescriptor, |
| /*IN*/ ULONG RefBias); |
| /* |
| * VOID |
| * ObReferenceObject( |
| * IN PVOID Object) |
| */ |
| #define ObReferenceObject ObfReferenceObject |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ObMakeTemporaryObject( |
| /*IN*/ PVOID Object); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObOpenObjectByName( |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*IN*/ POBJECT_TYPE ObjectType, |
| /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/, |
| /*IN*/ KPROCESSOR_MODE AccessMode, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ PACCESS_STATE PassedAccessState, |
| /*OUT*/ PHANDLE Handle); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObOpenObjectByPointer( |
| /*IN*/ PVOID Object, |
| /*IN*/ ULONG HandleAttributes, |
| /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/, |
| /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/, |
| /*IN*/ POBJECT_TYPE ObjectType /*OPTIONAL*/, |
| /*IN*/ KPROCESSOR_MODE AccessMode, |
| /*OUT*/ PHANDLE Handle); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObQueryObjectAuditingByHandle( |
| /*IN*/ HANDLE Handle, |
| /*OUT*/ PBOOLEAN GenerateOnClose); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObReferenceObjectByHandle( |
| /*IN*/ HANDLE Handle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_TYPE ObjectType /*OPTIONAL*/, |
| /*IN*/ KPROCESSOR_MODE AccessMode, |
| /*OUT*/ PVOID *Object, |
| /*OUT*/ POBJECT_HANDLE_INFORMATION HandleInformation /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObReferenceObjectByName( |
| /*IN*/ PUNICODE_STRING ObjectPath, |
| /*IN*/ ULONG Attributes, |
| /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/, |
| /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/, |
| /*IN*/ POBJECT_TYPE ObjectType, |
| /*IN*/ KPROCESSOR_MODE AccessMode, |
| /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/, |
| /*OUT*/ PVOID *Object); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ObReferenceObjectByPointer( |
| /*IN*/ PVOID Object, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_TYPE ObjectType, |
| /*IN*/ KPROCESSOR_MODE AccessMode); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ObReferenceSecurityDescriptor( |
| /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor, |
| /*IN*/ ULONG Count); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| ObReleaseObjectSecurity( |
| /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor, |
| /*IN*/ BOOLEAN MemoryAllocated); |
| |
| |
| |
| /** Process manager routines **/ |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PsCreateSystemProcess( |
| /*IN*/ PHANDLE ProcessHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PsCreateSystemThread( |
| /*OUT*/ PHANDLE ThreadHandle, |
| /*IN*/ ULONG DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/, |
| /*IN*/ HANDLE ProcessHandle /*OPTIONAL*/, |
| /*OUT*/ PCLIENT_ID ClientId /*OPTIONAL*/, |
| /*IN*/ PKSTART_ROUTINE StartRoutine, |
| /*IN*/ PVOID StartContext); |
| |
| /* |
| * PEPROCESS |
| * PsGetCurrentProcess(VOID) |
| */ |
| #define PsGetCurrentProcess IoGetCurrentProcess |
| |
| NTOSAPI |
| HANDLE |
| DDKAPI |
| PsGetCurrentProcessId( |
| VOID); |
| |
| /* |
| * PETHREAD |
| * PsGetCurrentThread(VOID) |
| */ |
| #define PsGetCurrentThread() \ |
| ((PETHREAD) KeGetCurrentThread()) |
| |
| NTOSAPI |
| HANDLE |
| DDKAPI |
| PsGetCurrentThreadId( |
| VOID); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| PsGetVersion( |
| PULONG MajorVersion /*OPTIONAL*/, |
| PULONG MinorVersion /*OPTIONAL*/, |
| PULONG BuildNumber /*OPTIONAL*/, |
| PUNICODE_STRING CSDVersion /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PsRemoveCreateThreadNotifyRoutine( |
| /*IN*/ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PsRemoveLoadImageNotifyRoutine( |
| /*IN*/ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PsSetCreateProcessNotifyRoutine( |
| /*IN*/ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, |
| /*IN*/ BOOLEAN Remove); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PsSetCreateThreadNotifyRoutine( |
| /*IN*/ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PsSetLoadImageNotifyRoutine( |
| /*IN*/ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PsTerminateSystemThread( |
| /*IN*/ NTSTATUS ExitStatus); |
| |
| |
| |
| /** Security reference monitor routines **/ |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| SeAccessCheck( |
| /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor, |
| /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext, |
| /*IN*/ BOOLEAN SubjectContextLocked, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ ACCESS_MASK PreviouslyGrantedAccess, |
| /*OUT*/ PPRIVILEGE_SET *Privileges /*OPTIONAL*/, |
| /*IN*/ PGENERIC_MAPPING GenericMapping, |
| /*IN*/ KPROCESSOR_MODE AccessMode, |
| /*OUT*/ PACCESS_MASK GrantedAccess, |
| /*OUT*/ PNTSTATUS AccessStatus); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| SeAssignSecurity( |
| /*IN*/ PSECURITY_DESCRIPTOR ParentDescriptor /*OPTIONAL*/, |
| /*IN*/ PSECURITY_DESCRIPTOR ExplicitDescriptor /*OPTIONAL*/, |
| /*OUT*/ PSECURITY_DESCRIPTOR *NewDescriptor, |
| /*IN*/ BOOLEAN IsDirectoryObject, |
| /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext, |
| /*IN*/ PGENERIC_MAPPING GenericMapping, |
| /*IN*/ POOL_TYPE PoolType); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| SeAssignSecurityEx( |
| /*IN*/ PSECURITY_DESCRIPTOR ParentDescriptor /*OPTIONAL*/, |
| /*IN*/ PSECURITY_DESCRIPTOR ExplicitDescriptor /*OPTIONAL*/, |
| /*OUT*/ PSECURITY_DESCRIPTOR *NewDescriptor, |
| /*IN*/ GUID *ObjectType /*OPTIONAL*/, |
| /*IN*/ BOOLEAN IsDirectoryObject, |
| /*IN*/ ULONG AutoInheritFlags, |
| /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext, |
| /*IN*/ PGENERIC_MAPPING GenericMapping, |
| /*IN*/ POOL_TYPE PoolType); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| SeDeassignSecurity( |
| /*IN OUT*/ PSECURITY_DESCRIPTOR *SecurityDescriptor); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| SeSinglePrivilegeCheck( |
| LUID PrivilegeValue, |
| KPROCESSOR_MODE PreviousMode); |
| |
| NTOSAPI |
| BOOLEAN |
| DDKAPI |
| SeValidSecurityDescriptor( |
| /*IN*/ ULONG Length, |
| /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor); |
| |
| |
| |
| /** NtXxx routines **/ |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtOpenProcess( |
| /*OUT*/ PHANDLE ProcessHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*IN*/ PCLIENT_ID ClientId /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtQueryInformationProcess( |
| /*IN*/ HANDLE ProcessHandle, |
| /*IN*/ PROCESSINFOCLASS ProcessInformationClass, |
| /*OUT*/ PVOID ProcessInformation, |
| /*IN*/ ULONG ProcessInformationLength, |
| /*OUT*/ PULONG ReturnLength /*OPTIONAL*/); |
| |
| |
| |
| /** NtXxx and ZwXxx routines **/ |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwCancelTimer( |
| /*IN*/ HANDLE TimerHandle, |
| /*OUT*/ PBOOLEAN CurrentState /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtClose( |
| /*IN*/ HANDLE Handle); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwClose( |
| /*IN*/ HANDLE Handle); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwCreateDirectoryObject( |
| /*OUT*/ PHANDLE DirectoryHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtCreateEvent( |
| /*OUT*/ PHANDLE EventHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*IN*/ BOOLEAN ManualReset, |
| /*IN*/ BOOLEAN InitialState); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwCreateEvent( |
| /*OUT*/ PHANDLE EventHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*IN*/ BOOLEAN ManualReset, |
| /*IN*/ BOOLEAN InitialState); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwCreateFile( |
| /*OUT*/ PHANDLE FileHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/, |
| /*IN*/ ULONG FileAttributes, |
| /*IN*/ ULONG ShareAccess, |
| /*IN*/ ULONG CreateDisposition, |
| /*IN*/ ULONG CreateOptions, |
| /*IN*/ PVOID EaBuffer /*OPTIONAL*/, |
| /*IN*/ ULONG EaLength); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwCreateKey( |
| /*OUT*/ PHANDLE KeyHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*IN*/ ULONG TitleIndex, |
| /*IN*/ PUNICODE_STRING Class /*OPTIONAL*/, |
| /*IN*/ ULONG CreateOptions, |
| /*OUT*/ PULONG Disposition /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwCreateTimer( |
| /*OUT*/ PHANDLE TimerHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/, |
| /*IN*/ TIMER_TYPE TimerType); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwDeleteKey( |
| /*IN*/ HANDLE KeyHandle); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwDeleteValueKey( |
| /*IN*/ HANDLE KeyHandle, |
| /*IN*/ PUNICODE_STRING ValueName); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtDeviceIoControlFile( |
| /*IN*/ HANDLE DeviceHandle, |
| /*IN*/ HANDLE Event /*OPTIONAL*/, |
| /*IN*/ PIO_APC_ROUTINE UserApcRoutine /*OPTIONAL*/, |
| /*IN*/ PVOID UserApcContext /*OPTIONAL*/, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ ULONG IoControlCode, |
| /*IN*/ PVOID InputBuffer, |
| /*IN*/ ULONG InputBufferSize, |
| /*OUT*/ PVOID OutputBuffer, |
| /*IN*/ ULONG OutputBufferSize); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwDeviceIoControlFile( |
| /*IN*/ HANDLE DeviceHandle, |
| /*IN*/ HANDLE Event /*OPTIONAL*/, |
| /*IN*/ PIO_APC_ROUTINE UserApcRoutine /*OPTIONAL*/, |
| /*IN*/ PVOID UserApcContext /*OPTIONAL*/, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ ULONG IoControlCode, |
| /*IN*/ PVOID InputBuffer, |
| /*IN*/ ULONG InputBufferSize, |
| /*OUT*/ PVOID OutputBuffer, |
| /*IN*/ ULONG OutputBufferSize); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwEnumerateKey( |
| /*IN*/ HANDLE KeyHandle, |
| /*IN*/ ULONG Index, |
| /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass, |
| /*OUT*/ PVOID KeyInformation, |
| /*IN*/ ULONG Length, |
| /*OUT*/ PULONG ResultLength); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwEnumerateValueKey( |
| /*IN*/ HANDLE KeyHandle, |
| /*IN*/ ULONG Index, |
| /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, |
| /*OUT*/ PVOID KeyValueInformation, |
| /*IN*/ ULONG Length, |
| /*OUT*/ PULONG ResultLength); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwFlushKey( |
| /*IN*/ HANDLE KeyHandle); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwMakeTemporaryObject( |
| /*IN*/ HANDLE Handle); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtMapViewOfSection( |
| /*IN*/ HANDLE SectionHandle, |
| /*IN*/ HANDLE ProcessHandle, |
| /*IN OUT*/ PVOID *BaseAddress, |
| /*IN*/ ULONG ZeroBits, |
| /*IN*/ ULONG CommitSize, |
| /*IN OUT*/ PLARGE_INTEGER SectionOffset /*OPTIONAL*/, |
| /*IN OUT*/ PSIZE_T ViewSize, |
| /*IN*/ SECTION_INHERIT InheritDisposition, |
| /*IN*/ ULONG AllocationType, |
| /*IN*/ ULONG Protect); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwMapViewOfSection( |
| /*IN*/ HANDLE SectionHandle, |
| /*IN*/ HANDLE ProcessHandle, |
| /*IN OUT*/ PVOID *BaseAddress, |
| /*IN*/ ULONG ZeroBits, |
| /*IN*/ ULONG CommitSize, |
| /*IN OUT*/ PLARGE_INTEGER SectionOffset /*OPTIONAL*/, |
| /*IN OUT*/ PSIZE_T ViewSize, |
| /*IN*/ SECTION_INHERIT InheritDisposition, |
| /*IN*/ ULONG AllocationType, |
| /*IN*/ ULONG Protect); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtOpenFile( |
| /*OUT*/ PHANDLE FileHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ ULONG ShareAccess, |
| /*IN*/ ULONG OpenOptions); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwOpenFile( |
| /*OUT*/ PHANDLE FileHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ ULONG ShareAccess, |
| /*IN*/ ULONG OpenOptions); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwOpenKey( |
| /*OUT*/ PHANDLE KeyHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwOpenSection( |
| /*OUT*/ PHANDLE SectionHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwOpenSymbolicLinkObject( |
| /*OUT*/ PHANDLE LinkHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwOpenTimer( |
| /*OUT*/ PHANDLE TimerHandle, |
| /*IN*/ ACCESS_MASK DesiredAccess, |
| /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwQueryInformationFile( |
| /*IN*/ HANDLE FileHandle, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*OUT*/ PVOID FileInformation, |
| /*IN*/ ULONG Length, |
| /*IN*/ FILE_INFORMATION_CLASS FileInformationClass); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwQueryKey( |
| /*IN*/ HANDLE KeyHandle, |
| /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass, |
| /*OUT*/ PVOID KeyInformation, |
| /*IN*/ ULONG Length, |
| /*OUT*/ PULONG ResultLength); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwQuerySymbolicLinkObject( |
| /*IN*/ HANDLE LinkHandle, |
| /*IN OUT*/ PUNICODE_STRING LinkTarget, |
| /*OUT*/ PULONG ReturnedLength /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwQueryValueKey( |
| /*IN*/ HANDLE KeyHandle, |
| /*IN*/ PUNICODE_STRING ValueName, |
| /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, |
| /*OUT*/ PVOID KeyValueInformation, |
| /*IN*/ ULONG Length, |
| /*OUT*/ PULONG ResultLength); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtReadFile( |
| /*IN*/ HANDLE FileHandle, |
| /*IN*/ HANDLE Event /*OPTIONAL*/, |
| /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/, |
| /*IN*/ PVOID ApcContext /*OPTIONAL*/, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*OUT*/ PVOID Buffer, |
| /*IN*/ ULONG Length, |
| /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/, |
| /*IN*/ PULONG Key /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwReadFile( |
| /*IN*/ HANDLE FileHandle, |
| /*IN*/ HANDLE Event /*OPTIONAL*/, |
| /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/, |
| /*IN*/ PVOID ApcContext /*OPTIONAL*/, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*OUT*/ PVOID Buffer, |
| /*IN*/ ULONG Length, |
| /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/, |
| /*IN*/ PULONG Key /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtSetEvent( |
| /*IN*/ HANDLE EventHandle, |
| /*IN*/ PULONG NumberOfThreadsReleased); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwSetEvent( |
| /*IN*/ HANDLE EventHandle, |
| /*IN*/ PULONG NumberOfThreadsReleased); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwSetInformationFile( |
| /*IN*/ HANDLE FileHandle, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ PVOID FileInformation, |
| /*IN*/ ULONG Length, |
| /*IN*/ FILE_INFORMATION_CLASS FileInformationClass); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwSetInformationThread( |
| /*IN*/ HANDLE ThreadHandle, |
| /*IN*/ THREADINFOCLASS ThreadInformationClass, |
| /*IN*/ PVOID ThreadInformation, |
| /*IN*/ ULONG ThreadInformationLength); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwSetTimer( |
| /*IN*/ HANDLE TimerHandle, |
| /*IN*/ PLARGE_INTEGER DueTime, |
| /*IN*/ PTIMER_APC_ROUTINE TimerApcRoutine /*OPTIONAL*/, |
| /*IN*/ PVOID TimerContext /*OPTIONAL*/, |
| /*IN*/ BOOLEAN WakeTimer, |
| /*IN*/ LONG Period /*OPTIONAL*/, |
| /*OUT*/ PBOOLEAN PreviousState /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwSetValueKey( |
| /*IN*/ HANDLE KeyHandle, |
| /*IN*/ PUNICODE_STRING ValueName, |
| /*IN*/ ULONG TitleIndex /*OPTIONAL*/, |
| /*IN*/ ULONG Type, |
| /*IN*/ PVOID Data, |
| /*IN*/ ULONG DataSize); |
| |
| /* [Nt|Zw]MapViewOfSection.InheritDisposition constants */ |
| #define AT_EXTENDABLE_FILE 0x00002000 |
| #define SEC_NO_CHANGE 0x00400000 |
| #define AT_RESERVED 0x20000000 |
| #define AT_ROUND_TO_PAGE 0x40000000 |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtUnmapViewOfSection( |
| /*IN*/ HANDLE ProcessHandle, |
| /*IN*/ PVOID BaseAddress); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwUnmapViewOfSection( |
| /*IN*/ HANDLE ProcessHandle, |
| /*IN*/ PVOID BaseAddress); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtWaitForSingleObject( |
| /*IN*/ HANDLE Object, |
| /*IN*/ BOOLEAN Alertable, |
| /*IN*/ PLARGE_INTEGER Time); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwWaitForSingleObject( |
| /*IN*/ HANDLE Object, |
| /*IN*/ BOOLEAN Alertable, |
| /*IN*/ PLARGE_INTEGER Time); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| NtWriteFile( |
| /*IN*/ HANDLE FileHandle, |
| /*IN*/ HANDLE Event /*OPTIONAL*/, |
| /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/, |
| /*IN*/ PVOID ApcContext /*OPTIONAL*/, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ PVOID Buffer, |
| /*IN*/ ULONG Length, |
| /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/, |
| /*IN*/ PULONG Key /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| ZwWriteFile( |
| /*IN*/ HANDLE FileHandle, |
| /*IN*/ HANDLE Event /*OPTIONAL*/, |
| /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/, |
| /*IN*/ PVOID ApcContext /*OPTIONAL*/, |
| /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock, |
| /*IN*/ PVOID Buffer, |
| /*IN*/ ULONG Length, |
| /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/, |
| /*IN*/ PULONG Key /*OPTIONAL*/); |
| |
| |
| |
| /** Power management support routines **/ |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PoCallDriver( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN OUT*/ PIRP Irp); |
| |
| NTOSAPI |
| PULONG |
| DDKAPI |
| PoRegisterDeviceForIdleDetection( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ ULONG ConservationIdleTime, |
| /*IN*/ ULONG PerformanceIdleTime, |
| /*IN*/ DEVICE_POWER_STATE State); |
| |
| NTOSAPI |
| PVOID |
| DDKAPI |
| PoRegisterSystemState( |
| /*IN*/ PVOID StateHandle, |
| /*IN*/ EXECUTION_STATE Flags); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PoRequestPowerIrp( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ UCHAR MinorFunction, |
| /*IN*/ POWER_STATE PowerState, |
| /*IN*/ PREQUEST_POWER_COMPLETE CompletionFunction, |
| /*IN*/ PVOID Context, |
| /*OUT*/ PIRP *Irp /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| PoRequestShutdownEvent( |
| /*OUT*/ PVOID *Event); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| PoSetDeviceBusy( |
| PULONG IdlePointer); |
| |
| NTOSAPI |
| POWER_STATE |
| DDKAPI |
| PoSetPowerState( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ POWER_STATE_TYPE Type, |
| /*IN*/ POWER_STATE State); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| PoSetSystemState( |
| /*IN*/ EXECUTION_STATE Flags); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| PoStartNextPowerIrp( |
| /*IN*/ PIRP Irp); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| PoUnregisterSystemState( |
| /*IN*/ PVOID StateHandle); |
| |
| |
| |
| /** WMI library support routines **/ |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| WmiCompleteRequest( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PIRP Irp, |
| /*IN*/ NTSTATUS Status, |
| /*IN*/ ULONG BufferUsed, |
| /*IN*/ CCHAR PriorityBoost); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| WmiFireEvent( |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ LPGUID Guid, |
| /*IN*/ ULONG InstanceIndex, |
| /*IN*/ ULONG EventDataSize, |
| /*IN*/ PVOID EventData); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| WmiQueryTraceInformation( |
| /*IN*/ TRACE_INFORMATION_CLASS TraceInformationClass, |
| /*OUT*/ PVOID TraceInformation, |
| /*IN*/ ULONG TraceInformationLength, |
| /*OUT*/ PULONG RequiredLength /*OPTIONAL*/, |
| /*IN*/ PVOID Buffer /*OPTIONAL*/); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| WmiSystemControl( |
| /*IN*/ PWMILIB_CONTEXT WmiLibInfo, |
| /*IN*/ PDEVICE_OBJECT DeviceObject, |
| /*IN*/ PIRP Irp, |
| /*OUT*/ PSYSCTL_IRP_DISPOSITION IrpDisposition); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKCDECLAPI |
| WmiTraceMessage( |
| /*IN*/ TRACEHANDLE LoggerHandle, |
| /*IN*/ ULONG MessageFlags, |
| /*IN*/ LPGUID MessageGuid, |
| /*IN*/ USHORT MessageNumber, |
| /*IN*/ ...); |
| |
| #if 0 |
| /* FIXME: Get va_list from where? */ |
| NTOSAPI |
| NTSTATUS |
| DDKCDECLAPI |
| WmiTraceMessageVa( |
| /*IN*/ TRACEHANDLE LoggerHandle, |
| /*IN*/ ULONG MessageFlags, |
| /*IN*/ LPGUID MessageGuid, |
| /*IN*/ USHORT MessageNumber, |
| /*IN*/ va_list MessageArgList); |
| #endif |
| |
| |
| /** Kernel debugger routines **/ |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KdDisableDebugger( |
| VOID); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| KdEnableDebugger( |
| VOID); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| DbgBreakPoint( |
| VOID); |
| |
| NTOSAPI |
| VOID |
| DDKAPI |
| DbgBreakPointWithStatus( |
| /*IN*/ ULONG Status); |
| |
| NTOSAPI |
| ULONG |
| DDKCDECLAPI |
| DbgPrint( |
| /*IN*/ PCH Format, |
| /*IN*/ ...); |
| |
| NTOSAPI |
| ULONG |
| DDKCDECLAPI |
| DbgPrintEx( |
| /*IN*/ ULONG ComponentId, |
| /*IN*/ ULONG Level, |
| /*IN*/ PCH Format, |
| /*IN*/ ...); |
| |
| NTOSAPI |
| ULONG |
| DDKCDECLAPI |
| DbgPrintReturnControlC( |
| /*IN*/ PCH Format, |
| /*IN*/ ...); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| DbgQueryDebugFilterState( |
| /*IN*/ ULONG ComponentId, |
| /*IN*/ ULONG Level); |
| |
| NTOSAPI |
| NTSTATUS |
| DDKAPI |
| DbgSetDebugFilterState( |
| /*IN*/ ULONG ComponentId, |
| /*IN*/ ULONG Level, |
| /*IN*/ BOOLEAN State); |
| |
| #ifdef DBG |
| |
| #define KdPrint(_x_) DbgPrint _x_ |
| #define KdPrintEx(_x_) DbgPrintEx _x_ |
| #define KdBreakPoint() DbgBreakPoint() |
| #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s) |
| |
| #else /* !DBG */ |
| |
| #define KdPrint(_x_) |
| #define KdPrintEx(_x_) |
| #define KdBreakPoint() |
| #define KdBreakPointWithStatus(s) |
| |
| #endif /* !DBG */ |
| |
| extern NTOSAPI PBOOLEAN KdDebuggerNotPresent; |
| extern NTOSAPI PBOOLEAN KdDebuggerEnabled; |
| #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled |
| #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* __WINDDK_H */ |