ExFreeToPagedLookasideList): Guard inline versions with (__USE_NTOSKRNL__) && (_WIN32_WINNT >= 0x0501). Declare as external functions for earlier _WIN32_WINNT.
		
			
				
	
	
		
			9229 lines
		
	
	
		
			201 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			9229 lines
		
	
	
		
			201 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * 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 __attribute__((stdcall))
 | 
						|
#define DDKFASTAPI __attribute__((fastcall))
 | 
						|
#define DDKCDECLAPI __attribute__((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 */
 | 
						|
#define IN
 | 
						|
#define OUT
 | 
						|
#define OPTIONAL
 | 
						|
#define UNALLIGNED
 | 
						|
 | 
						|
#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))
 | 
						|
 | 
						|
static __inline struct _KPCR * KeGetCurrentKPCR(
 | 
						|
  VOID)
 | 
						|
{
 | 
						|
  ULONG Value;
 | 
						|
 | 
						|
  __asm__ __volatile__ ("movl %%fs:0x18, %0\n\t"
 | 
						|
	  : "=r" (Value)
 | 
						|
    : /* no inputs */
 | 
						|
  );
 | 
						|
  return (struct _KPCR *) Value;
 | 
						|
}
 | 
						|
 | 
						|
/*
 | 
						|
** Simple structures
 | 
						|
*/
 | 
						|
 | 
						|
typedef LONG KPRIORITY;
 | 
						|
typedef UCHAR KIRQL, *PKIRQL;
 | 
						|
typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
 | 
						|
typedef ULONG 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()->ProcessorNumber)
 | 
						|
 | 
						|
 | 
						|
#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 PLONG  VOLATILE  Addend);
 | 
						|
 | 
						|
NTOSAPI
 | 
						|
LONG
 | 
						|
DDKFASTAPI
 | 
						|
InterlockedDecrement(
 | 
						|
  IN PLONG  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);
 | 
						|
 | 
						|
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 OPTIONAL PVOID  Tag  OPTIONAL,
 | 
						|
  IN PCSTR  File,
 | 
						|
  IN ULONG  Line,
 | 
						|
  IN ULONG  RemlockSize);
 | 
						|
 | 
						|
/*
 | 
						|
 * NTSTATUS
 | 
						|
 * IoAcquireRemoveLock(
 | 
						|
 *   IN PIO_REMOVE_LOCK  RemoveLock,
 | 
						|
 *   IN OPTIONAL PVOID  Tag)
 | 
						|
 */
 | 
						|
#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
 | 
						|
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);
 | 
						|
 | 
						|
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);
 | 
						|
 | 
						|
#if defined(_X86_)
 | 
						|
 | 
						|
NTOSAPI
 | 
						|
VOID
 | 
						|
FASTCALL
 | 
						|
KfLowerIrql(
 | 
						|
  IN KIRQL  NewIrql);
 | 
						|
 | 
						|
NTOSAPI
 | 
						|
KIRQL
 | 
						|
FASTCALL
 | 
						|
KfRaiseIrql(
 | 
						|
  IN KIRQL  NewIrql);
 | 
						|
 | 
						|
#define KeLowerIrql(a) KfLowerIrql(a)
 | 
						|
#define KeRaiseIrql(a,b) *(b) = KfRaiseIrql(a)
 | 
						|
 | 
						|
#else
 | 
						|
 | 
						|
NTOSAPI
 | 
						|
VOID
 | 
						|
DDKAPI
 | 
						|
KeLowerIrql(
 | 
						|
  IN KIRQL  NewIrql);
 | 
						|
 | 
						|
NTOSAPI
 | 
						|
KIRQL
 | 
						|
DDKAPI
 | 
						|
KeRaiseIrql(
 | 
						|
  IN KIRQL  NewIrql);
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
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 */
 |