4 * Windows Device Driver Kit -- common elements.
8 * Written by Casper S. Hornstrup <chorns@users.sourceforge.net>
9 * Copyright (C) 2002-2004, 2006, 2008-2011, 2015, 2016, 2022,
13 * Permission is hereby granted, free of charge, to any person obtaining a
14 * copy of this software and associated documentation files (the "Software"),
15 * to deal in the Software without restriction, including without limitation
16 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
17 * and/or sell copies of the Software, and to permit persons to whom the
18 * Software is furnished to do so, subject to the following conditions:
20 * The above copyright notice, this permission notice, and the following
21 * disclaimer shall be included in all copies or substantial portions of
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
27 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
29 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OF OR OTHER
30 * DEALINGS IN THE SOFTWARE.
34 #pragma GCC system_header
36 #if ! (defined _DDK_NTDDK_H || defined __WINIOCTL_H_SOURCED__)
37 /* Unless sourced by <winioctl.h>, (which represents only partial inclusion),
38 * <ddk/winddk.h> is subsidiary to <ddk/ntddk.h>, and cannot stand alone.
40 # error "Never include <ddk/winddk.h> directly; use <ddk/ntddk.h> instead."
42 /* We've reached here by a legitimate sequence of header inclusion...
44 # ifndef __WINIOCTL_H_SOURCED__
45 /* ...but it is NOT sourced by <winioctl.h>, so this is full inclusion:
46 * set the repeat inclusion guard, so we will not include it again.
48 # define _DDK_WINDDK_H
51 #if ! (defined _DDK_WINDDK_H && defined _WINIOCTL_H)
52 /* The declarations within this section are common to <ddk/winddk.h> and
53 * to <winioctl.h>, but if BOTH repeat inclusion guards are now defined,
54 * then we've already seen this; there is no need to process it again.
56 #define CTL_CODE(DT,FN,M,A) (((DT)<<16)|((FN)<<2)|((A)<<14)|(M))
57 #define DEVICE_TYPE_FROM_CTL_CODE(C) (((ULONG)((C) & (0xFFFF0000)) >> 16)
59 typedef ULONG DEVICE_TYPE;
61 { FILE_DEVICE_BEEP = 0x00000001UL,
62 FILE_DEVICE_CD_ROM = 0x00000002UL,
63 FILE_DEVICE_CD_ROM_FILE_SYSTEM = 0x00000003UL,
64 FILE_DEVICE_CONTROLLER = 0x00000004UL,
65 FILE_DEVICE_DATALINK = 0x00000005UL,
66 FILE_DEVICE_DFS = 0x00000006UL,
67 FILE_DEVICE_DISK = 0x00000007UL,
68 FILE_DEVICE_DISK_FILE_SYSTEM = 0x00000008UL,
69 FILE_DEVICE_FILE_SYSTEM = 0x00000009UL,
70 FILE_DEVICE_INPORT_PORT = 0x0000000AUL,
71 FILE_DEVICE_KEYBOARD = 0x0000000BUL,
72 FILE_DEVICE_MAILSLOT = 0x0000000CUL,
73 FILE_DEVICE_MIDI_IN = 0x0000000DUL,
74 FILE_DEVICE_MIDI_OUT = 0x0000000EUL,
75 FILE_DEVICE_MOUSE = 0x0000000FUL,
76 FILE_DEVICE_MULTI_UNC_PROVIDER = 0x00000010UL,
77 FILE_DEVICE_NAMED_PIPE = 0x00000011UL,
78 FILE_DEVICE_NETWORK = 0x00000012UL,
79 FILE_DEVICE_NETWORK_BROWSER = 0x00000013UL,
80 FILE_DEVICE_NETWORK_FILE_SYSTEM = 0x00000014UL,
81 FILE_DEVICE_NULL = 0x00000015UL,
82 FILE_DEVICE_PARALLEL_PORT = 0x00000016UL,
83 FILE_DEVICE_PHYSICAL_NETCARD = 0x00000017UL,
84 FILE_DEVICE_PRINTER = 0x00000018UL,
85 FILE_DEVICE_SCANNER = 0x00000019UL,
86 FILE_DEVICE_SERIAL_MOUSE_PORT = 0x0000001AUL,
87 FILE_DEVICE_SERIAL_PORT = 0x0000001BUL,
88 FILE_DEVICE_SCREEN = 0x0000001CUL,
89 FILE_DEVICE_SOUND = 0x0000001DUL,
90 FILE_DEVICE_STREAMS = 0x0000001EUL,
91 FILE_DEVICE_TAPE = 0x0000001FUL,
92 FILE_DEVICE_TAPE_FILE_SYSTEM = 0x00000020UL,
93 FILE_DEVICE_TRANSPORT = 0x00000021UL,
94 FILE_DEVICE_UNKNOWN = 0x00000022UL,
95 FILE_DEVICE_VIDEO = 0x00000023UL,
96 FILE_DEVICE_VIRTUAL_DISK = 0x00000024UL,
97 FILE_DEVICE_WAVE_IN = 0x00000025UL,
98 FILE_DEVICE_WAVE_OUT = 0x00000026UL,
99 FILE_DEVICE_8042_PORT = 0x00000027UL,
100 FILE_DEVICE_NETWORK_REDIRECTOR = 0x00000028UL,
101 FILE_DEVICE_BATTERY = 0x00000029UL,
102 FILE_DEVICE_BUS_EXTENDER = 0x0000002AUL,
103 FILE_DEVICE_MODEM = 0x0000002BUL,
104 FILE_DEVICE_VDM = 0x0000002CUL,
105 FILE_DEVICE_MASS_STORAGE = 0x0000002DUL,
106 FILE_DEVICE_SMB = 0x0000002EUL,
107 FILE_DEVICE_KS = 0x0000002FUL,
108 FILE_DEVICE_CHANGER = 0x00000030UL,
109 FILE_DEVICE_SMARTCARD = 0x00000031UL,
110 FILE_DEVICE_ACPI = 0x00000032UL,
111 FILE_DEVICE_DVD = 0x00000033UL,
112 FILE_DEVICE_FULLSCREEN_VIDEO = 0x00000034UL,
113 FILE_DEVICE_DFS_FILE_SYSTEM = 0x00000035UL,
114 FILE_DEVICE_DFS_VOLUME = 0x00000036UL,
115 FILE_DEVICE_SERENUM = 0x00000037UL,
116 FILE_DEVICE_TERMSRV = 0x00000038UL,
117 FILE_DEVICE_KSEC = 0x00000039UL,
118 FILE_DEVICE_FIPS = 0x0000003AUL
122 { FILE_ANY_ACCESS = 0x00000000UL,
123 FILE_SPECIAL_ACCESS = FILE_ANY_ACCESS,
124 FILE_READ_ACCESS = 0x00000001UL,
125 FILE_WRITE_ACCESS = 0x00000002UL
129 { METHOD_BUFFERED = 0,
130 METHOD_IN_DIRECT = 1,
131 METHOD_OUT_DIRECT = 2,
135 /* Some derived convenience macros; Microsoft do not specify these,
136 * but they help to keep the CTL_CODE specifications tidy.
138 #define __FILE_RW_ACCESS (FILE_READ_ACCESS | FILE_WRITE_ACCESS)
139 #define __FILE_AM_BUFFERED(F,OP) F(OP, METHOD_BUFFERED, FILE_ANY_ACCESS)
140 #define __FILE_RD_BUFFERED(F,OP) F(OP, METHOD_BUFFERED, FILE_READ_ACCESS)
141 #define __FILE_RW_BUFFERED(F,OP) F(OP, METHOD_BUFFERED, __FILE_RW_ACCESS)
144 struct _DRIVE_LAYOUT_INFORMATION_MBR
145 /* https://msdn.microsoft.com/en-us/library/windows/hardware/ff552668(v=vs.85).aspx */
147 } DRIVE_LAYOUT_INFORMATION_MBR, *PDRIVE_LAYOUT_INFORMATION_MBR;
150 struct _DRIVE_LAYOUT_INFORMATION_GPT
151 /* https://msdn.microsoft.com/en-us/library/windows/hardware/ff552664(v=vs.85).aspx */
153 LARGE_INTEGER StartingUsableOffset;
154 LARGE_INTEGER UsableLength;
155 ULONG MaxPartitionCount;
156 } DRIVE_LAYOUT_INFORMATION_GPT, *PDRIVE_LAYOUT_INFORMATION_GPT;
159 struct _PARTITION_INFORMATION_MBR
160 /* https://msdn.microsoft.com/en-us/library/windows/hardware/ff563767(v=vs.85).aspx */
161 { UCHAR PartitionType;
162 BOOLEAN BootIndicator;
163 BOOLEAN RecognizedPartition;
165 } PARTITION_INFORMATION_MBR, *PPARTITION_INFORMATION_MBR;
168 enum _PARTITION_STYLE
169 /* https://msdn.microsoft.com/en-us/library/windows/hardware/ff563773(v=vs.85).aspx */
170 { PARTITION_STYLE_MBR = 0,
171 PARTITION_STYLE_GPT = 1,
172 PARTITION_STYLE_RAW = 2
176 struct _CREATE_DISK_MBR
177 /* https://msdn.microsoft.com/en-us/library/windows/hardware/ff552490(v=vs.85).aspx */
179 } CREATE_DISK_MBR, *PCREATE_DISK_MBR;
182 struct _CREATE_DISK_GPT
183 /* https://msdn.microsoft.com/en-us/library/windows/hardware/ff552486(v=vs.85).aspx */
185 ULONG MaxPartitionCount;
186 } CREATE_DISK_GPT, *PCREATE_DISK_GPT;
190 /* https://msdn.microsoft.com/en-us/library/windows/hardware/ff552490(v=vs.85).aspx */
191 { PARTITION_STYLE PartitionStyle;
192 _ANONYMOUS_UNION union
193 { CREATE_DISK_MBR Mbr;
196 } CREATE_DISK, *PCREATE_DISK;
198 /* End of _DDK_WINDDK_H and _WINIOCTL_H common declarations.
202 /* Definitions specific to _DDK_WINDDK_H
207 #define DDKAPI __stdcall
208 #define DDKFASTAPI __fastcall
209 #define DDKCDECLAPI __cdecl
211 #if defined(_NTOSKRNL_)
213 # define NTOSAPI DECL_EXPORT
215 # define DECLARE_INTERNAL_OBJECT(x) typedef struct _##x; typedef struct _##x *P##x;
216 # define DECLARE_INTERNAL_OBJECT2(x,y) typedef struct _##x; typedef struct _##x *P##y;
219 # define NTOSAPI DECL_IMPORT
221 # define DECLARE_INTERNAL_OBJECT(x) struct _##x; typedef struct _##x *P##x;
222 # define DECLARE_INTERNAL_OBJECT2(x,y) struct _##x; typedef struct _##x *P##y;
225 #ifndef _NO_W32_PSEUDO_MODIFIERS
226 /* Pseudo modifiers for parameters...
228 * We don't use these unnecessary defines in the w32api headers. Define
229 * them by default since that is what people expect, but allow users to
230 * avoid the pollution, by defining _NO_W32_PSEUDO_MODIFIERS.
239 #define VOLATILE volatile
241 #define RESTRICTED_POINTER
242 #define POINTER_ALIGNMENT
244 #ifdef NONAMELESSUNION
245 # define _DDK_DUMMYUNION_MEMBER(name) DUMMYUNIONNAME.name
246 # define _DDK_DUMMYUNION_N_MEMBER(n, name) DUMMYUNIONNAME##n.name
248 # define _DDK_DUMMYUNION_MEMBER(name) name
249 # define _DDK_DUMMYUNION_N_MEMBER(n, name) name
252 /* Forward declarations
263 struct _DEVICE_OBJECT;
264 struct _DRIVER_OBJECT;
265 struct _SECTION_OBJECT;
266 struct _IO_STATUS_BLOCK;
267 struct _DEVICE_DESCRIPTION;
268 struct _SCATTER_GATHER_LIST;
270 DECLARE_INTERNAL_OBJECT(ADAPTER_OBJECT)
271 DECLARE_INTERNAL_OBJECT(DMA_ADAPTER)
272 DECLARE_INTERNAL_OBJECT(IO_STATUS_BLOCK)
273 DECLARE_INTERNAL_OBJECT(SECTION_OBJECT)
276 /* FIXME: Unknown definitions
278 struct _SET_PARTITION_INFORMATION_EX;
279 typedef ULONG WAIT_TYPE;
280 typedef HANDLE TRACEHANDLE;
281 typedef PVOID PWMILIB_CONTEXT;
282 typedef PVOID PSYSCTL_IRP_DISPOSITION;
283 typedef ULONG LOGICAL;
286 /* Routines specific to this DDK
288 #define TAG(_a, _b, _c, _d) (ULONG) \
289 (((_a) << 0) + ((_b) << 8) + ((_c) << 16) + ((_d) << 24))
292 static __inline__ struct _KPCR * KeGetCurrentKPCR( VOID )
296 __asm__ __volatile__ (
298 /* support -masm=intel */
299 "mov{l} {%%fs:0x18, %0|%0, %%fs:0x18}\n\t"
301 "movl %%fs:0x18, %0\n\t"
306 return (struct _KPCR *)(Value);
309 #elif defined( __WATCOMC__ )
310 extern struct _KPCR * KeGetCurrentKPCR( void );
311 #pragma aux KeGetCurrentKPCR = \
312 "mov eax, fs:[0x18]" \
318 typedef LONG KPRIORITY;
319 typedef UCHAR KIRQL, *PKIRQL;
320 typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
321 typedef ULONG_PTR KAFFINITY, *PKAFFINITY;
322 typedef CCHAR KPROCESSOR_MODE;
332 /* Structures not exposed to drivers
334 typedef struct _IO_TIMER *PIO_TIMER;
335 typedef struct _EPROCESS *PEPROCESS;
336 typedef struct _ETHREAD *PETHREAD;
337 typedef struct _KINTERRUPT *PKINTERRUPT;
338 typedef struct _OBJECT_TYPE *POBJECT_TYPE;
339 typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
340 typedef struct _COMPRESSED_DATA_INFO *PCOMPRESSED_DATA_INFO;
341 typedef struct _HAL_DISPATCH_TABLE *PHAL_DISPATCH_TABLE;
342 typedef struct _HAL_PRIVATE_DISPATCH_TABLE *PHAL_PRIVATE_DISPATCH_TABLE;
343 typedef struct _DRIVE_LAYOUT_INFORMATION *PDRIVE_LAYOUT_INFORMATION;
344 typedef struct _DRIVE_LAYOUT_INFORMATION_EX *PDRIVE_LAYOUT_INFORMATION_EX;
348 #define MAXIMUM_PROCESSORS 32
349 #define MAXIMUM_WAIT_OBJECTS 64
351 #define LOW_PRIORITY 0
352 #define LOW_REALTIME_PRIORITY 16
353 #define HIGH_PRIORITY 31
354 #define MAXIMUM_PRIORITY 32
356 #define FILE_SUPERSEDED 0x00000000
357 #define FILE_OPENED 0x00000001
358 #define FILE_CREATED 0x00000002
359 #define FILE_OVERWRITTEN 0x00000003
360 #define FILE_EXISTS 0x00000004
361 #define FILE_DOES_NOT_EXIST 0x00000005
364 /* FIXME: also in winnt.h; hence, already defined?
366 #define FILE_LIST_DIRECTORY 0x00000001
367 #define FILE_READ_DATA 0x00000001
368 #define FILE_ADD_FILE 0x00000002
369 #define FILE_WRITE_DATA 0x00000002
370 #define FILE_ADD_SUBDIRECTORY 0x00000004
371 #define FILE_APPEND_DATA 0x00000004
372 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
373 #define FILE_READ_EA 0x00000008
374 #define FILE_WRITE_EA 0x00000010
375 #define FILE_EXECUTE 0x00000020
376 #define FILE_TRAVERSE 0x00000020
377 #define FILE_DELETE_CHILD 0x00000040
378 #define FILE_READ_ATTRIBUTES 0x00000080
379 #define FILE_WRITE_ATTRIBUTES 0x00000100
381 #define FILE_SHARE_READ 0x00000001
382 #define FILE_SHARE_WRITE 0x00000002
383 #define FILE_SHARE_DELETE 0x00000004
384 #define FILE_SHARE_VALID_FLAGS 0x00000007
386 #define FILE_ATTRIBUTE_READONLY 0x00000001
387 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
388 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
389 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
390 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
391 #define FILE_ATTRIBUTE_DEVICE 0x00000040
392 #define FILE_ATTRIBUTE_NORMAL 0x00000080
393 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
394 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
395 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
396 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
397 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
398 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
399 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
400 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
402 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00017fb7
403 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
405 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
406 #define FILE_STRUCTURED_STORAGE 0x00000441
408 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
409 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
410 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
411 #define FILE_VALID_SET_FLAGS 0x00000036
413 #define FILE_SUPERSEDE 0x00000000
414 #define FILE_OPEN 0x00000001
415 #define FILE_CREATE 0x00000002
416 #define FILE_OPEN_IF 0x00000003
417 #define FILE_OVERWRITE 0x00000004
418 #define FILE_OVERWRITE_IF 0x00000005
419 #define FILE_MAXIMUM_DISPOSITION 0x00000005
421 #define FILE_DIRECTORY_FILE 0x00000001
422 #define FILE_WRITE_THROUGH 0x00000002
423 #define FILE_SEQUENTIAL_ONLY 0x00000004
424 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
425 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
426 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
427 #define FILE_NON_DIRECTORY_FILE 0x00000040
428 #define FILE_CREATE_TREE_CONNECTION 0x00000080
429 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
430 #define FILE_NO_EA_KNOWLEDGE 0x00000200
431 #define FILE_OPEN_FOR_RECOVERY 0x00000400
432 #define FILE_RANDOM_ACCESS 0x00000800
433 #define FILE_DELETE_ON_CLOSE 0x00001000
434 #define FILE_OPEN_BY_FILE_ID 0x00002000
435 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
436 #define FILE_NO_COMPRESSION 0x00008000
437 #define FILE_RESERVE_OPFILTER 0x00100000
438 #define FILE_OPEN_REPARSE_POINT 0x00200000
439 #define FILE_OPEN_NO_RECALL 0x00400000
440 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
442 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
444 #define FILE_GENERIC_EXECUTE \
445 (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE)
447 #define FILE_GENERIC_READ \
448 (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES \
449 | FILE_READ_EA | SYNCHRONIZE)
451 #define FILE_GENERIC_WRITE \
452 (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES \
453 | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE)
457 #define DIRECTORY_QUERY (0x0001)
458 #define DIRECTORY_TRAVERSE (0x0002)
459 #define DIRECTORY_CREATE_OBJECT (0x0004)
460 #define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)
461 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
463 /* Exported object types
465 extern NTOSAPI POBJECT_TYPE ExDesktopObjectType;
466 extern NTOSAPI POBJECT_TYPE ExEventObjectType;
467 extern NTOSAPI POBJECT_TYPE ExSemaphoreObjectType;
468 extern NTOSAPI POBJECT_TYPE ExWindowStationObjectType;
469 extern NTOSAPI POBJECT_TYPE IoAdapterObjectType;
470 extern NTOSAPI ULONG IoDeviceHandlerObjectSize;
471 extern NTOSAPI POBJECT_TYPE IoDeviceHandlerObjectType;
472 extern NTOSAPI POBJECT_TYPE IoDeviceObjectType;
473 extern NTOSAPI POBJECT_TYPE IoDriverObjectType;
474 extern NTOSAPI POBJECT_TYPE IoFileObjectType;
475 extern NTOSAPI POBJECT_TYPE LpcPortObjectType;
476 extern NTOSAPI POBJECT_TYPE MmSectionObjectType;
477 extern NTOSAPI POBJECT_TYPE SeTokenObjectType;
479 extern NTOSAPI CCHAR KeNumberProcessors;
480 extern NTOSAPI PHAL_DISPATCH_TABLE HalDispatchTable;
481 extern NTOSAPI PHAL_PRIVATE_DISPATCH_TABLE HalPrivateDispatchTable;
484 /* IRP function codes
486 #define IRP_MJ_CREATE 0x00
487 #define IRP_MJ_CREATE_NAMED_PIPE 0x01
488 #define IRP_MJ_CLOSE 0x02
489 #define IRP_MJ_READ 0x03
490 #define IRP_MJ_WRITE 0x04
491 #define IRP_MJ_QUERY_INFORMATION 0x05
492 #define IRP_MJ_SET_INFORMATION 0x06
493 #define IRP_MJ_QUERY_EA 0x07
494 #define IRP_MJ_SET_EA 0x08
495 #define IRP_MJ_FLUSH_BUFFERS 0x09
496 #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
497 #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
498 #define IRP_MJ_DIRECTORY_CONTROL 0x0c
499 #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
500 #define IRP_MJ_DEVICE_CONTROL 0x0e
501 #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
502 #define IRP_MJ_SCSI 0x0f
503 #define IRP_MJ_SHUTDOWN 0x10
504 #define IRP_MJ_LOCK_CONTROL 0x11
505 #define IRP_MJ_CLEANUP 0x12
506 #define IRP_MJ_CREATE_MAILSLOT 0x13
507 #define IRP_MJ_QUERY_SECURITY 0x14
508 #define IRP_MJ_SET_SECURITY 0x15
509 #define IRP_MJ_POWER 0x16
510 #define IRP_MJ_SYSTEM_CONTROL 0x17
511 #define IRP_MJ_DEVICE_CHANGE 0x18
512 #define IRP_MJ_QUERY_QUOTA 0x19
513 #define IRP_MJ_SET_QUOTA 0x1a
514 #define IRP_MJ_PNP 0x1b
515 #define IRP_MJ_PNP_POWER 0x1b
516 #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
518 #define IRP_MN_QUERY_DIRECTORY 0x01
519 #define IRP_MN_NOTIFY_CHANGE_DIRECTORY 0x02
521 #define IRP_MN_USER_FS_REQUEST 0x00
522 #define IRP_MN_MOUNT_VOLUME 0x01
523 #define IRP_MN_VERIFY_VOLUME 0x02
524 #define IRP_MN_LOAD_FILE_SYSTEM 0x03
525 #define IRP_MN_TRACK_LINK 0x04
526 #define IRP_MN_KERNEL_CALL 0x04
528 #define IRP_MN_LOCK 0x01
529 #define IRP_MN_UNLOCK_SINGLE 0x02
530 #define IRP_MN_UNLOCK_ALL 0x03
531 #define IRP_MN_UNLOCK_ALL_BY_KEY 0x04
533 #define IRP_MN_NORMAL 0x00
534 #define IRP_MN_DPC 0x01
535 #define IRP_MN_MDL 0x02
536 #define IRP_MN_COMPLETE 0x04
537 #define IRP_MN_COMPRESSED 0x08
539 #define IRP_MN_MDL_DPC (IRP_MN_MDL | IRP_MN_DPC)
540 #define IRP_MN_COMPLETE_MDL (IRP_MN_COMPLETE | IRP_MN_MDL)
541 #define IRP_MN_COMPLETE_MDL_DPC (IRP_MN_COMPLETE_MDL | IRP_MN_DPC)
543 #define IRP_MN_SCSI_CLASS 0x01
545 #define IRP_MN_START_DEVICE 0x00
546 #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
547 #define IRP_MN_REMOVE_DEVICE 0x02
548 #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
549 #define IRP_MN_STOP_DEVICE 0x04
550 #define IRP_MN_QUERY_STOP_DEVICE 0x05
551 #define IRP_MN_CANCEL_STOP_DEVICE 0x06
553 #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
554 #define IRP_MN_QUERY_INTERFACE 0x08
555 #define IRP_MN_QUERY_CAPABILITIES 0x09
556 #define IRP_MN_QUERY_RESOURCES 0x0A
557 #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
558 #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
559 #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
561 #define IRP_MN_READ_CONFIG 0x0F
562 #define IRP_MN_WRITE_CONFIG 0x10
563 #define IRP_MN_EJECT 0x11
564 #define IRP_MN_SET_LOCK 0x12
565 #define IRP_MN_QUERY_ID 0x13
566 #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
567 #define IRP_MN_QUERY_BUS_INFORMATION 0x15
568 #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
569 #define IRP_MN_SURPRISE_REMOVAL 0x17
570 #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
572 #define IRP_MN_WAIT_WAKE 0x00
573 #define IRP_MN_POWER_SEQUENCE 0x01
574 #define IRP_MN_SET_POWER 0x02
575 #define IRP_MN_QUERY_POWER 0x03
577 #define IRP_MN_QUERY_ALL_DATA 0x00
578 #define IRP_MN_QUERY_SINGLE_INSTANCE 0x01
579 #define IRP_MN_CHANGE_SINGLE_INSTANCE 0x02
580 #define IRP_MN_CHANGE_SINGLE_ITEM 0x03
581 #define IRP_MN_ENABLE_EVENTS 0x04
582 #define IRP_MN_DISABLE_EVENTS 0x05
583 #define IRP_MN_ENABLE_COLLECTION 0x06
584 #define IRP_MN_DISABLE_COLLECTION 0x07
585 #define IRP_MN_REGINFO 0x08
586 #define IRP_MN_EXECUTE_METHOD 0x09
588 #define IRP_MN_REGINFO_EX 0x0b
591 enum _IO_ALLOCATION_ACTION
593 DeallocateObject = 2,
594 DeallocateObjectKeepRegisters = 3
595 } IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION;
597 typedef IO_ALLOCATION_ACTION
598 (DDKAPI *PDRIVER_CONTROL)(
599 /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
600 /*IN*/ struct _IRP *Irp,
601 /*IN*/ PVOID MapRegisterBase,
606 (DDKAPI *PDRIVER_LIST_CONTROL)(
607 /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
608 /*IN*/ struct _IRP *Irp,
609 /*IN*/ struct _SCATTER_GATHER_LIST *ScatterGather,
614 (DDKAPI *PDRIVER_ADD_DEVICE)(
615 /*IN*/ struct _DRIVER_OBJECT *DriverObject,
616 /*IN*/ struct _DEVICE_OBJECT *PhysicalDeviceObject
620 (DDKAPI *PIO_COMPLETION_ROUTINE)(
621 /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
622 /*IN*/ struct _IRP *Irp,
627 (DDKAPI *PDRIVER_CANCEL)(
628 /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
629 /*IN*/ struct _IRP *Irp
633 (DDKAPI *PKDEFERRED_ROUTINE)(
634 /*IN*/ struct _KDPC *Dpc,
635 /*IN*/ PVOID DeferredContext,
636 /*IN*/ PVOID SystemArgument1,
637 /*IN*/ PVOID SystemArgument2
641 (DDKAPI *PDRIVER_DISPATCH)(
642 /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
643 /*IN*/ struct _IRP *Irp
647 (DDKAPI *PIO_DPC_ROUTINE)(
648 /*IN*/ struct _KDPC *Dpc,
649 /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
650 /*IN*/ struct _IRP *Irp,
655 (DDKAPI *PMM_DLL_INITIALIZE)(
656 /*IN*/ PUNICODE_STRING RegistryPath
660 (DDKAPI *PMM_DLL_UNLOAD)( VOID );
663 (DDKAPI *PDRIVER_ENTRY)(
664 /*IN*/ struct _DRIVER_OBJECT *DriverObject,
665 /*IN*/ PUNICODE_STRING RegistryPath
669 (DDKAPI *PDRIVER_INITIALIZE)(
670 /*IN*/ struct _DRIVER_OBJECT *DriverObject,
671 /*IN*/ PUNICODE_STRING RegistryPath
675 (DDKAPI *PKSERVICE_ROUTINE)(
676 /*IN*/ struct _KINTERRUPT *Interrupt,
677 /*IN*/ PVOID ServiceContext
681 (DDKAPI *PIO_TIMER_ROUTINE)(
682 /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
687 (DDKAPI *PDRIVER_REINITIALIZE)(
688 /*IN*/ struct _DRIVER_OBJECT *DriverObject,
689 /*IN*/ PVOID Context,
694 (DDKAPI *PDRIVER_STARTIO)(
695 /*IN*/ struct _DEVICE_OBJECT *DeviceObject,
696 /*IN*/ struct _IRP *Irp
700 (DDKAPI *PKSYNCHRONIZE_ROUTINE)(
701 /*IN*/ PVOID SynchronizeContext
705 (DDKAPI *PDRIVER_UNLOAD)(
706 /*IN*/ struct _DRIVER_OBJECT *DriverObject
712 ** Plug and Play structures
715 (*PINTERFACE_REFERENCE)(
720 (*PINTERFACE_DEREFERENCE)(
724 typedef BOOLEAN DDKAPI
725 (*PTRANSLATE_BUS_ADDRESS)(
726 /*IN*/ PVOID Context,
727 /*IN*/ PHYSICAL_ADDRESS BusAddress,
729 /*IN OUT*/ PULONG AddressSpace,
730 /*OUT*/ PPHYSICAL_ADDRESS TranslatedAddress
733 typedef struct _DMA_ADAPTER* DDKAPI
735 /*IN*/ PVOID Context,
736 /*IN*/ struct _DEVICE_DESCRIPTION *DeviceDescriptor,
737 /*OUT*/ PULONG NumberOfMapRegisters
741 (*PGET_SET_DEVICE_DATA)(
742 /*IN*/ PVOID Context,
743 /*IN*/ ULONG DataType,
751 { SYSTEM_POWER_STATE SystemState;
752 DEVICE_POWER_STATE DeviceState;
753 } POWER_STATE, *PPOWER_STATE;
756 enum _POWER_STATE_TYPE
759 } POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
762 struct _BUS_INTERFACE_STANDARD
766 PINTERFACE_REFERENCE InterfaceReference;
767 PINTERFACE_DEREFERENCE InterfaceDereference;
768 PTRANSLATE_BUS_ADDRESS TranslateBusAddress;
769 PGET_DMA_ADAPTER GetDmaAdapter;
770 PGET_SET_DEVICE_DATA SetBusData;
771 PGET_SET_DEVICE_DATA GetBusData;
772 } BUS_INTERFACE_STANDARD, *PBUS_INTERFACE_STANDARD;
775 struct _DEVICE_CAPABILITIES
780 ULONG LockSupported : 1;
781 ULONG EjectSupported : 1;
783 ULONG DockDevice : 1;
785 ULONG SilentInstall : 1;
786 ULONG RawDeviceOK : 1;
787 ULONG SurpriseRemovalOK : 1;
788 ULONG WakeFromD0 : 1;
789 ULONG WakeFromD1 : 1;
790 ULONG WakeFromD2 : 1;
791 ULONG WakeFromD3 : 1;
792 ULONG HardwareDisabled : 1;
793 ULONG NonDynamic : 1;
794 ULONG WarmEjectSupported : 1;
795 ULONG NoDisplayInUI : 1;
799 DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
800 SYSTEM_POWER_STATE SystemWake;
801 DEVICE_POWER_STATE DeviceWake;
805 } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
808 struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION
812 GUID InterfaceClassGuid;
813 PUNICODE_STRING SymbolicLinkName;
814 } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
817 struct _HWPROFILE_CHANGE_NOTIFICATION
821 } HWPROFILE_CHANGE_NOTIFICATION, *PHWPROFILE_CHANGE_NOTIFICATION;
830 PINTERFACE_REFERENCE InterfaceReference;
831 PINTERFACE_DEREFERENCE InterfaceDereference;
832 } INTERFACE, *PINTERFACE;
835 struct _PLUGPLAY_NOTIFICATION_HEADER
839 } PLUGPLAY_NOTIFICATION_HEADER, *PPLUGPLAY_NOTIFICATION_HEADER;
841 typedef ULONG PNP_DEVICE_STATE, *PPNP_DEVICE_STATE;
843 /* PNP_DEVICE_STATE */
845 #define PNP_DEVICE_DISABLED 0x00000001
846 #define PNP_DEVICE_DONT_DISPLAY_IN_UI 0x00000002
847 #define PNP_DEVICE_FAILED 0x00000004
848 #define PNP_DEVICE_REMOVED 0x00000008
849 #define PNP_DEVICE_RESOURCE_REQUIREMENTS_CHANGED 0x00000010
850 #define PNP_DEVICE_NOT_DISABLEABLE 0x00000020
853 struct _TARGET_DEVICE_CUSTOM_NOTIFICATION
857 struct _FILE_OBJECT *FileObject;
858 LONG NameBufferOffset;
859 UCHAR CustomDataBuffer[1];
860 } TARGET_DEVICE_CUSTOM_NOTIFICATION, *PTARGET_DEVICE_CUSTOM_NOTIFICATION;
863 struct _TARGET_DEVICE_REMOVAL_NOTIFICATION
867 struct _FILE_OBJECT *FileObject;
868 } TARGET_DEVICE_REMOVAL_NOTIFICATION, *PTARGET_DEVICE_REMOVAL_NOTIFICATION;
871 enum _BUS_QUERY_ID_TYPE
874 BusQueryCompatibleIDs,
876 BusQueryDeviceSerialNumber
877 } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
880 enum _DEVICE_TEXT_TYPE
881 { DeviceTextDescription,
882 DeviceTextLocationInformation
883 } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
886 enum _DEVICE_USAGE_NOTIFICATION_TYPE
887 { DeviceUsageTypeUndefined,
888 DeviceUsageTypePaging,
889 DeviceUsageTypeHibernation,
890 DeviceUsageTypeDumpFile
891 } DEVICE_USAGE_NOTIFICATION_TYPE;
894 struct _POWER_SEQUENCE
898 } POWER_SEQUENCE, *PPOWER_SEQUENCE;
901 { DevicePropertyDeviceDescription,
902 DevicePropertyHardwareID,
903 DevicePropertyCompatibleIDs,
904 DevicePropertyBootConfiguration,
905 DevicePropertyBootConfigurationTranslated,
906 DevicePropertyClassName,
907 DevicePropertyClassGuid,
908 DevicePropertyDriverKeyName,
909 DevicePropertyManufacturer,
910 DevicePropertyFriendlyName,
911 DevicePropertyLocationInformation,
912 DevicePropertyPhysicalDeviceObjectName,
913 DevicePropertyBusTypeGuid,
914 DevicePropertyLegacyBusType,
915 DevicePropertyBusNumber,
916 DevicePropertyEnumeratorName,
917 DevicePropertyAddress,
918 DevicePropertyUINumber,
919 DevicePropertyInstallState,
920 DevicePropertyRemovalPolicy
921 } DEVICE_REGISTRY_PROPERTY;
924 enum _IO_NOTIFICATION_EVENT_CATEGORY
925 { EventCategoryReserved,
926 EventCategoryHardwareProfileChange,
927 EventCategoryDeviceInterfaceChange,
928 EventCategoryTargetDeviceChange
929 } IO_NOTIFICATION_EVENT_CATEGORY;
931 #define PNPNOTIFY_DEVICE_INTERFACE_INCLUDE_EXISTING_INTERFACES 0x00000001
933 typedef NTSTATUS DDKAPI
934 (*PDRIVER_NOTIFICATION_CALLBACK_ROUTINE)(
935 /*IN*/ PVOID NotificationStructure,
940 (*PDEVICE_CHANGE_COMPLETE_CALLBACK)(
946 #define SYMBOLIC_LINK_QUERY 0x0001
947 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
950 /* FIXME: also in winnt.h; hence already defined?
952 #define DUPLICATE_CLOSE_SOURCE 0x00000001
953 #define DUPLICATE_SAME_ACCESS 0x00000002
954 #define DUPLICATE_SAME_ATTRIBUTES 0x00000004
959 struct _OBJECT_NAME_INFORMATION
960 { UNICODE_STRING Name;
961 } OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
965 /*IN*/ PVOID ApcContext,
966 /*IN*/ PIO_STATUS_BLOCK IoStatusBlock,
967 /*IN*/ ULONG Reserved
971 struct _IO_STATUS_BLOCK
972 { _ANONYMOUS_UNION union
976 ULONG_PTR Information;
981 /*IN*/ PVOID NormalContext,
982 /*IN*/ PVOID SystemArgument1,
983 /*IN*/ PVOID SystemArgument2
988 /*IN*/ struct _KAPC *Apc,
989 /*IN OUT*/ PKNORMAL_ROUTINE *NormalRoutine,
990 /*IN OUT*/ PVOID *NormalContext,
991 /*IN OUT*/ PVOID *SystemArgument1,
992 /*IN OUT*/ PVOID *SystemArgument2
996 (*PKRUNDOWN_ROUTINE)(
997 /*IN*/ struct _KAPC *Apc
1000 typedef BOOLEAN DDKAPI
1001 (*PKTRANSFER_ROUTINE)( VOID );
1008 struct _KTHREAD *Thread;
1009 LIST_ENTRY ApcListEntry;
1010 PKKERNEL_ROUTINE KernelRoutine;
1011 PKRUNDOWN_ROUTINE RundownRoutine;
1012 PKNORMAL_ROUTINE NormalRoutine;
1013 PVOID NormalContext;
1014 PVOID SystemArgument1;
1015 PVOID SystemArgument2;
1016 CCHAR ApcStateIndex;
1017 KPROCESSOR_MODE ApcMode;
1019 } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
1022 struct _KDEVICE_QUEUE
1025 LIST_ENTRY DeviceListHead;
1028 } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
1031 struct _KDEVICE_QUEUE_ENTRY
1032 { LIST_ENTRY DeviceListEntry;
1035 } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
1036 *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
1038 #define LOCK_QUEUE_WAIT 1
1039 #define LOCK_QUEUE_OWNER 2
1042 enum _KSPIN_LOCK_QUEUE_NUMBER
1043 { LockQueueDispatcherLock,
1044 LockQueueContextSwapLock,
1046 LockQueueSystemSpaceLock,
1048 LockQueueMasterLock,
1049 LockQueueNonPagedPoolLock,
1050 LockQueueIoCancelLock,
1051 LockQueueWorkQueueLock,
1053 LockQueueIoDatabaseLock,
1054 LockQueueIoCompletionLock,
1055 LockQueueNtfsStructLock,
1056 LockQueueAfdWorkQueueLock,
1058 LockQueueMaximumLock
1059 } KSPIN_LOCK_QUEUE_NUMBER, *PKSPIN_LOCK_QUEUE_NUMBER;
1062 struct _KSPIN_LOCK_QUEUE
1063 { struct _KSPIN_LOCK_QUEUE *VOLATILE Next;
1064 PKSPIN_LOCK VOLATILE Lock;
1065 } KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE;
1068 struct _KLOCK_QUEUE_HANDLE
1069 { KSPIN_LOCK_QUEUE LockQueue;
1071 } KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
1078 LIST_ENTRY DpcListEntry;
1079 PKDEFERRED_ROUTINE DeferredRoutine;
1080 PVOID DeferredContext;
1081 PVOID SystemArgument1;
1082 PVOID SystemArgument2;
1084 } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
1087 struct _WAIT_CONTEXT_BLOCK
1088 { KDEVICE_QUEUE_ENTRY WaitQueueEntry;
1089 struct _DRIVER_CONTROL *DeviceRoutine;
1090 PVOID DeviceContext;
1091 ULONG NumberOfMapRegisters;
1094 PKDPC BufferChainingDpc;
1095 } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
1098 struct _DISPATCHER_HEADER
1104 LIST_ENTRY WaitListHead;
1105 } DISPATCHER_HEADER, *PDISPATCHER_HEADER;
1109 { DISPATCHER_HEADER Header;
1110 } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
1114 { DISPATCHER_HEADER Header;
1116 } KSEMAPHORE, *PKSEMAPHORE, *RESTRICTED_POINTER PRKSEMAPHORE;
1121 struct _KTHREAD *Owner;
1125 } FAST_MUTEX, *PFAST_MUTEX;
1129 { DISPATCHER_HEADER Header;
1130 ULARGE_INTEGER DueTime;
1131 LIST_ENTRY TimerListEntry;
1134 } KTIMER, *PKTIMER, *RESTRICTED_POINTER PRKTIMER;
1138 { DISPATCHER_HEADER Header;
1139 LIST_ENTRY MutantListEntry;
1140 struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
1143 } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
1147 { NotificationTimer,
1148 SynchronizationTimer
1152 enum _TIMER_INFORMATION_CLASS
1153 { TimerBasicInformation
1154 } TIMER_INFORMATION_CLASS;
1157 struct _TIMER_BASIC_INFORMATION
1158 { LARGE_INTEGER TimeRemaining;
1159 BOOLEAN SignalState;
1160 } TIMER_BASIC_INFORMATION, *PTIMER_BASIC_INFORMATION;
1162 #define EVENT_INCREMENT 1
1163 #define IO_NO_INCREMENT 0
1164 #define IO_CD_ROM_INCREMENT 1
1165 #define IO_DISK_INCREMENT 1
1166 #define IO_KEYBOARD_INCREMENT 6
1167 #define IO_MAILSLOT_INCREMENT 2
1168 #define IO_MOUSE_INCREMENT 6
1169 #define IO_NAMED_PIPE_INCREMENT 2
1170 #define IO_NETWORK_INCREMENT 2
1171 #define IO_PARALLEL_INCREMENT 1
1172 #define IO_SERIAL_INCREMENT 2
1173 #define IO_SOUND_INCREMENT 8
1174 #define IO_VIDEO_INCREMENT 1
1175 #define SEMAPHORE_INCREMENT 1
1181 struct _MDL *MdlAddress;
1184 { struct _IRP *MasterIrp;
1188 LIST_ENTRY ThreadListEntry;
1189 IO_STATUS_BLOCK IoStatus;
1190 KPROCESSOR_MODE RequestorMode;
1191 BOOLEAN PendingReturned;
1193 CHAR CurrentLocation;
1196 CCHAR ApcEnvironment;
1197 UCHAR AllocationFlags;
1198 PIO_STATUS_BLOCK UserIosb;
1202 { PIO_APC_ROUTINE UserApcRoutine;
1203 PVOID UserApcContext;
1204 } AsynchronousParameters;
1205 LARGE_INTEGER AllocationSize;
1207 PDRIVER_CANCEL CancelRoutine;
1211 { _ANONYMOUS_UNION union
1212 { KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
1213 _ANONYMOUS_STRUCT struct
1214 { PVOID DriverContext[4];
1218 PCHAR AuxiliaryBuffer;
1219 _ANONYMOUS_STRUCT struct
1220 { LIST_ENTRY ListEntry;
1221 _ANONYMOUS_UNION union
1222 { struct _IO_STACK_LOCATION *CurrentStackLocation;
1226 struct _FILE_OBJECT *OriginalFileObject;
1229 PVOID CompletionKey;
1235 #define SL_FORCE_ACCESS_CHECK 0x01
1236 #define SL_OPEN_PAGING_FILE 0x02
1237 #define SL_OPEN_TARGET_DIRECTORY 0x04
1238 #define SL_CASE_SENSITIVE 0x80
1240 #define SL_KEY_SPECIFIED 0x01
1241 #define SL_OVERRIDE_VERIFY_VOLUME 0x02
1242 #define SL_WRITE_THROUGH 0x04
1243 #define SL_FT_SEQUENTIAL_WRITE 0x08
1245 #define SL_FAIL_IMMEDIATELY 0x01
1246 #define SL_EXCLUSIVE_LOCK 0x02
1248 #define SL_RESTART_SCAN 0x01
1249 #define SL_RETURN_SINGLE_ENTRY 0x02
1250 #define SL_INDEX_SPECIFIED 0x04
1252 #define SL_WATCH_TREE 0x01
1254 #define SL_ALLOW_RAW_MOUNT 0x01
1257 { IRP_NOCACHE = 0x0001,
1258 IRP_PAGING_IO = 0x0002,
1259 IRP_MOUNT_COMPLETION = 0x0002,
1260 IRP_SYNCHRONOUS_API = 0x0004,
1261 IRP_ASSOCIATED_IRP = 0x0008,
1262 IRP_BUFFERED_IO = 0x0010,
1263 IRP_DEALLOCATE_BUFFER = 0x0020,
1264 IRP_INPUT_OPERATION = 0x0040,
1265 IRP_SYNCHRONOUS_PAGING_IO = 0x0040,
1266 IRP_CREATE_OPERATION = 0x0080,
1267 IRP_READ_OPERATION = 0x0100,
1268 IRP_WRITE_OPERATION = 0x0200,
1269 IRP_CLOSE_OPERATION = 0x0400,
1270 IRP_DEFER_IO_COMPLETION = 0x0800,
1271 IRP_OB_QUERY_NAME = 0x1000,
1272 IRP_HOLD_DEVICE_QUEUE = 0x2000,
1273 IRP_RETRY_IO_COMPLETION = 0x4000
1277 struct _BOOTDISK_INFORMATION
1278 { LONGLONG BootPartitionOffset;
1279 LONGLONG SystemPartitionOffset;
1280 ULONG BootDeviceSignature;
1281 ULONG SystemDeviceSignature;
1282 } BOOTDISK_INFORMATION, *PBOOTDISK_INFORMATION;
1285 struct _BOOTDISK_INFORMATION_EX
1286 { LONGLONG BootPartitionOffset;
1287 LONGLONG SystemPartitionOffset;
1288 ULONG BootDeviceSignature;
1289 ULONG SystemDeviceSignature;
1290 GUID BootDeviceGuid;
1291 GUID SystemDeviceGuid;
1292 BOOLEAN BootDeviceIsGpt;
1293 BOOLEAN SystemDeviceIsGpt;
1294 } BOOTDISK_INFORMATION_EX, *PBOOTDISK_INFORMATION_EX;
1297 struct _EISA_MEMORY_TYPE
1298 { UCHAR ReadWrite : 1;
1300 UCHAR Reserved0 : 1;
1303 UCHAR Reserved1 : 1;
1304 UCHAR MoreEntries : 1;
1305 } EISA_MEMORY_TYPE, *PEISA_MEMORY_TYPE;
1307 #include <pshpack1.h>
1309 struct _EISA_MEMORY_CONFIGURATION
1310 { EISA_MEMORY_TYPE ConfigurationByte;
1312 USHORT AddressLowWord;
1313 UCHAR AddressHighByte;
1315 } EISA_MEMORY_CONFIGURATION, *PEISA_MEMORY_CONFIGURATION;
1316 #include <poppack.h>
1319 struct _EISA_IRQ_DESCRIPTOR
1320 { UCHAR Interrupt : 4;
1322 UCHAR LevelTriggered : 1;
1324 UCHAR MoreEntries : 1;
1325 } EISA_IRQ_DESCRIPTOR, *PEISA_IRQ_DESCRIPTOR;
1328 struct _EISA_IRQ_CONFIGURATION
1329 { EISA_IRQ_DESCRIPTOR ConfigurationByte;
1331 } EISA_IRQ_CONFIGURATION, *PEISA_IRQ_CONFIGURATION;
1334 struct _DMA_CONFIGURATION_BYTE0
1335 { UCHAR Channel : 3;
1338 UCHAR MoreEntries : 1;
1339 } DMA_CONFIGURATION_BYTE0;
1342 struct _DMA_CONFIGURATION_BYTE1
1343 { UCHAR Reserved0 : 2;
1344 UCHAR TransferSize : 2;
1346 UCHAR Reserved1 : 2;
1347 } DMA_CONFIGURATION_BYTE1;
1350 struct _EISA_DMA_CONFIGURATION
1351 { DMA_CONFIGURATION_BYTE0 ConfigurationByte0;
1352 DMA_CONFIGURATION_BYTE1 ConfigurationByte1;
1353 } EISA_DMA_CONFIGURATION, *PEISA_DMA_CONFIGURATION;
1355 #include <pshpack1.h>
1357 struct _EISA_PORT_DESCRIPTOR
1358 { UCHAR NumberPorts : 5;
1361 UCHAR MoreEntries : 1;
1362 } EISA_PORT_DESCRIPTOR, *PEISA_PORT_DESCRIPTOR;
1365 struct _EISA_PORT_CONFIGURATION
1366 { EISA_PORT_DESCRIPTOR Configuration;
1368 } EISA_PORT_CONFIGURATION, *PEISA_PORT_CONFIGURATION;
1369 #include <poppack.h>
1372 struct _CM_EISA_FUNCTION_INFORMATION
1373 { ULONG CompressedId;
1376 UCHAR MinorRevision;
1377 UCHAR MajorRevision;
1378 UCHAR Selections[26];
1379 UCHAR FunctionFlags;
1380 UCHAR TypeString[80];
1381 EISA_MEMORY_CONFIGURATION EisaMemory[9];
1382 EISA_IRQ_CONFIGURATION EisaIrq[7];
1383 EISA_DMA_CONFIGURATION EisaDma[4];
1384 EISA_PORT_CONFIGURATION EisaPort[20];
1385 UCHAR InitializationData[60];
1386 } CM_EISA_FUNCTION_INFORMATION, *PCM_EISA_FUNCTION_INFORMATION;
1388 /* CM_EISA_FUNCTION_INFORMATION.FunctionFlags
1390 #define EISA_FUNCTION_ENABLED 0x80
1391 #define EISA_FREE_FORM_DATA 0x40
1392 #define EISA_HAS_PORT_INIT_ENTRY 0x20
1393 #define EISA_HAS_PORT_RANGE 0x10
1394 #define EISA_HAS_DMA_ENTRY 0x08
1395 #define EISA_HAS_IRQ_ENTRY 0x04
1396 #define EISA_HAS_MEMORY_ENTRY 0x02
1397 #define EISA_HAS_TYPE_ENTRY 0x01
1398 #define EISA_HAS_INFORMATION \
1399 (EISA_HAS_PORT_RANGE + EISA_HAS_DMA_ENTRY + EISA_HAS_IRQ_ENTRY \
1400 + EISA_HAS_MEMORY_ENTRY + EISA_HAS_TYPE_ENTRY)
1403 struct _CM_EISA_SLOT_INFORMATION
1406 UCHAR MajorRevision;
1407 UCHAR MinorRevision;
1409 UCHAR NumberFunctions;
1410 UCHAR FunctionInformation;
1412 } CM_EISA_SLOT_INFORMATION, *PCM_EISA_SLOT_INFORMATION;
1414 /* CM_EISA_SLOT_INFORMATION.ReturnCode
1416 #define EISA_INVALID_SLOT 0x80
1417 #define EISA_INVALID_FUNCTION 0x81
1418 #define EISA_INVALID_CONFIGURATION 0x82
1419 #define EISA_EMPTY_SLOT 0x83
1420 #define EISA_INVALID_BIOS_CALL 0x86
1423 struct _CM_FLOPPY_DEVICE_DATA
1429 UCHAR StepRateHeadUnloadTime;
1432 UCHAR SectorLengthCode;
1433 UCHAR SectorPerTrack;
1434 UCHAR ReadWriteGapLength;
1435 UCHAR DataTransferLength;
1436 UCHAR FormatGapLength;
1437 UCHAR FormatFillCharacter;
1438 UCHAR HeadSettleTime;
1439 UCHAR MotorSettleTime;
1440 UCHAR MaximumTrackValue;
1441 UCHAR DataTransferRate;
1442 } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
1445 enum _INTERFACE_TYPE
1446 { InterfaceTypeUndefined = -1,
1463 MaximumInterfaceType
1464 } INTERFACE_TYPE, *PINTERFACE_TYPE;
1467 struct _PNP_BUS_INFORMATION
1469 INTERFACE_TYPE LegacyBusType;
1471 } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
1473 #include <pshpack1.h>
1475 struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
1477 UCHAR ShareDisposition;
1481 { PHYSICAL_ADDRESS Start;
1485 { PHYSICAL_ADDRESS Start;
1494 { PHYSICAL_ADDRESS Start;
1514 } DeviceSpecificData;
1516 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
1518 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type
1520 #define CmResourceTypeNull 0
1521 #define CmResourceTypePort 1
1522 #define CmResourceTypeInterrupt 2
1523 #define CmResourceTypeMemory 3
1524 #define CmResourceTypeDma 4
1525 #define CmResourceTypeDeviceSpecific 5
1526 #define CmResourceTypeBusNumber 6
1527 #define CmResourceTypeMaximum 7
1528 #define CmResourceTypeNonArbitrated 128
1529 #define CmResourceTypeConfigData 128
1530 #define CmResourceTypeDevicePrivate 129
1531 #define CmResourceTypePcCardConfig 130
1532 #define CmResourceTypeMfCardConfig 131
1534 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition
1537 enum _CM_SHARE_DISPOSITION
1538 { CmResourceShareUndetermined,
1539 CmResourceShareDeviceExclusive,
1540 CmResourceShareDriverExclusive,
1541 CmResourceShareShared
1542 } CM_SHARE_DISPOSITION;
1544 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort
1546 #define CM_RESOURCE_PORT_MEMORY 0x0000
1547 #define CM_RESOURCE_PORT_IO 0x0001
1548 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
1549 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
1550 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
1551 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
1552 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
1553 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
1555 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt
1557 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
1558 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
1560 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory
1562 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
1563 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
1564 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
1565 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
1566 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
1567 #define CM_RESOURCE_MEMORY_24 0x0010
1568 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
1570 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma
1572 #define CM_RESOURCE_DMA_8 0x0000
1573 #define CM_RESOURCE_DMA_16 0x0001
1574 #define CM_RESOURCE_DMA_32 0x0002
1575 #define CM_RESOURCE_DMA_8_AND_16 0x0004
1576 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
1577 #define CM_RESOURCE_DMA_TYPE_A 0x0010
1578 #define CM_RESOURCE_DMA_TYPE_B 0x0020
1579 #define CM_RESOURCE_DMA_TYPE_F 0x0040
1582 struct _CM_PARTIAL_RESOURCE_LIST
1586 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
1587 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
1590 struct _CM_FULL_RESOURCE_DESCRIPTOR
1591 { INTERFACE_TYPE InterfaceType;
1593 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
1594 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
1597 struct _CM_RESOURCE_LIST
1599 CM_FULL_RESOURCE_DESCRIPTOR List[1];
1600 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
1603 struct _CM_INT13_DRIVE_PARAMETER
1604 { USHORT DriveSelect;
1606 USHORT SectorsPerTrack;
1608 USHORT NumberDrives;
1609 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
1610 #include <poppack.h>
1613 struct _CM_KEYBOARD_DEVICE_DATA
1618 USHORT KeyboardFlags;
1619 } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
1621 #define KEYBOARD_INSERT_ON 0x80
1622 #define KEYBOARD_CAPS_LOCK_ON 0x40
1623 #define KEYBOARD_NUM_LOCK_ON 0x20
1624 #define KEYBOARD_SCROLL_LOCK_ON 0x10
1625 #define KEYBOARD_ALT_KEY_DOWN 0x08
1626 #define KEYBOARD_CTRL_KEY_DOWN 0x04
1627 #define KEYBOARD_LEFT_SHIFT_DOWN 0x02
1628 #define KEYBOARD_RIGHT_SHIFT_DOWN 0x01
1631 struct _CM_MCA_POS_DATA
1637 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
1640 struct CM_Power_Data_s
1642 DEVICE_POWER_STATE PD_MostRecentPowerState;
1643 ULONG PD_Capabilities;
1647 DEVICE_POWER_STATE PD_PowerStateMapping[PowerSystemMaximum];
1648 } CM_POWER_DATA, *PCM_POWER_DATA;
1650 #define PDCAP_D0_SUPPORTED 0x00000001
1651 #define PDCAP_D1_SUPPORTED 0x00000002
1652 #define PDCAP_D2_SUPPORTED 0x00000004
1653 #define PDCAP_D3_SUPPORTED 0x00000008
1654 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
1655 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
1656 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
1657 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
1658 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
1661 struct _CM_SCSI_DEVICE_DATA
1664 UCHAR HostIdentifier;
1665 } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA;
1668 struct _CM_SERIAL_DEVICE_DATA
1672 } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
1674 /* IO_RESOURCE_DESCRIPTOR.Option
1676 #define IO_RESOURCE_PREFERRED 0x01
1677 #define IO_RESOURCE_DEFAULT 0x02
1678 #define IO_RESOURCE_ALTERNATIVE 0x08
1681 struct _IO_RESOURCE_DESCRIPTOR
1684 UCHAR ShareDisposition;
1692 PHYSICAL_ADDRESS MinimumAddress;
1693 PHYSICAL_ADDRESS MaximumAddress;
1698 PHYSICAL_ADDRESS MinimumAddress;
1699 PHYSICAL_ADDRESS MaximumAddress;
1702 { ULONG MinimumVector;
1703 ULONG MaximumVector;
1706 { ULONG MinimumChannel;
1707 ULONG MaximumChannel;
1712 PHYSICAL_ADDRESS MinimumAddress;
1713 PHYSICAL_ADDRESS MaximumAddress;
1730 } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
1733 struct _IO_RESOURCE_LIST
1737 IO_RESOURCE_DESCRIPTOR Descriptors[1];
1738 } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
1741 struct _IO_RESOURCE_REQUIREMENTS_LIST
1743 INTERFACE_TYPE InterfaceType;
1747 ULONG AlternativeLists;
1748 IO_RESOURCE_LIST List[1];
1749 } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
1752 struct _CONTROLLER_OBJECT
1755 PVOID ControllerExtension;
1756 KDEVICE_QUEUE DeviceWaitQueue;
1758 LARGE_INTEGER Spare2;
1759 } CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;
1767 } DMA_WIDTH, *PDMA_WIDTH;
1777 } DMA_SPEED, *PDMA_SPEED;
1779 /* DEVICE_DESCRIPTION.Version
1781 #define DEVICE_DESCRIPTION_VERSION 0x0000
1782 #define DEVICE_DESCRIPTION_VERSION1 0x0001
1783 #define DEVICE_DESCRIPTION_VERSION2 0x0002
1786 struct _DEVICE_DESCRIPTION
1789 BOOLEAN ScatterGather;
1791 BOOLEAN AutoInitialize;
1792 BOOLEAN Dma32BitAddresses;
1793 BOOLEAN IgnoreCount;
1795 BOOLEAN Dma64BitAddresses;
1798 INTERFACE_TYPE InterfaceType;
1801 ULONG MaximumLength;
1803 } DEVICE_DESCRIPTION, *PDEVICE_DESCRIPTION;
1806 #define VPB_MOUNTED 0x0001
1807 #define VPB_LOCKED 0x0002
1808 #define VPB_PERSISTENT 0x0004
1809 #define VPB_REMOVE_PENDING 0x0008
1810 #define VPB_RAW_MOUNT 0x0010
1812 #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
1819 USHORT VolumeLabelLength;
1820 struct _DEVICE_OBJECT *DeviceObject;
1821 struct _DEVICE_OBJECT *RealDevice;
1823 ULONG ReferenceCount;
1824 WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
1827 /* DEVICE_OBJECT.Flags
1829 #define DO_VERIFY_VOLUME 0x00000002
1830 #define DO_BUFFERED_IO 0x00000004
1831 #define DO_EXCLUSIVE 0x00000008
1832 #define DO_DIRECT_IO 0x00000010
1833 #define DO_MAP_IO_BUFFER 0x00000020
1834 #define DO_DEVICE_HAS_NAME 0x00000040
1835 #define DO_DEVICE_INITIALIZING 0x00000080
1836 #define DO_SYSTEM_BOOT_PARTITION 0x00000100
1837 #define DO_LONG_TERM_REQUESTS 0x00000200
1838 #define DO_NEVER_LAST_DEVICE 0x00000400
1839 #define DO_SHUTDOWN_REGISTERED 0x00000800
1840 #define DO_BUS_ENUMERATED_DEVICE 0x00001000
1841 #define DO_POWER_PAGABLE 0x00002000
1842 #define DO_POWER_INRUSH 0x00004000
1843 #define DO_LOW_PRIORITY_FILESYSTEM 0x00010000
1845 /* DEVICE_OBJECT.Characteristics
1847 #define FILE_REMOVABLE_MEDIA 0x00000001
1848 #define FILE_READ_ONLY_DEVICE 0x00000002
1849 #define FILE_FLOPPY_DISKETTE 0x00000004
1850 #define FILE_WRITE_ONCE_MEDIA 0x00000008
1851 #define FILE_REMOTE_DEVICE 0x00000010
1852 #define FILE_DEVICE_IS_MOUNTED 0x00000020
1853 #define FILE_VIRTUAL_VOLUME 0x00000040
1854 #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080
1855 #define FILE_DEVICE_SECURE_OPEN 0x00000100
1857 /* DEVICE_OBJECT.AlignmentRequirement
1859 #define FILE_BYTE_ALIGNMENT 0x00000000
1860 #define FILE_WORD_ALIGNMENT 0x00000001
1861 #define FILE_LONG_ALIGNMENT 0x00000003
1862 #define FILE_QUAD_ALIGNMENT 0x00000007
1863 #define FILE_OCTA_ALIGNMENT 0x0000000f
1864 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
1865 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
1866 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
1867 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
1868 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
1870 /* DEVICE_OBJECT.DeviceType
1873 struct _DEVICE_OBJECT
1876 LONG ReferenceCount;
1877 struct _DRIVER_OBJECT *DriverObject;
1878 struct _DEVICE_OBJECT *NextDevice;
1879 struct _DEVICE_OBJECT *AttachedDevice;
1880 struct _IRP *CurrentIrp;
1883 ULONG Characteristics;
1885 PVOID DeviceExtension;
1886 DEVICE_TYPE DeviceType;
1889 { LIST_ENTRY ListEntry;
1890 WAIT_CONTEXT_BLOCK Wcb;
1892 ULONG AlignmentRequirement;
1893 KDEVICE_QUEUE DeviceQueue;
1895 ULONG ActiveThreadCount;
1896 PSECURITY_DESCRIPTOR SecurityDescriptor;
1900 struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
1902 } DEVICE_OBJECT, *PDEVICE_OBJECT;
1905 enum _DEVICE_RELATION_TYPE
1910 TargetDeviceRelation,
1912 } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
1915 struct _DEVICE_RELATIONS
1917 PDEVICE_OBJECT Objects[1];
1918 } DEVICE_RELATIONS, *PDEVICE_RELATIONS;
1921 struct _SCATTER_GATHER_ELEMENT
1922 { PHYSICAL_ADDRESS Address;
1925 } SCATTER_GATHER_ELEMENT, *PSCATTER_GATHER_ELEMENT;
1928 struct _SCATTER_GATHER_LIST
1929 { ULONG NumberOfElements;
1931 SCATTER_GATHER_ELEMENT Elements[0];
1932 } SCATTER_GATHER_LIST, *PSCATTER_GATHER_LIST;
1936 { struct _MDL *Next;
1939 struct _EPROCESS *Process;
1940 PVOID MappedSystemVa;
1946 #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
1947 #define MDL_PAGES_LOCKED 0x0002
1948 #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
1949 #define MDL_ALLOCATED_FIXED_SIZE 0x0008
1950 #define MDL_PARTIAL 0x0010
1951 #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
1952 #define MDL_IO_PAGE_READ 0x0040
1953 #define MDL_WRITE_OPERATION 0x0080
1954 #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
1955 #define MDL_FREE_EXTRA_PTES 0x0200
1956 #define MDL_IO_SPACE 0x0800
1957 #define MDL_NETWORK_HEADER 0x1000
1958 #define MDL_MAPPING_CAN_FAIL 0x2000
1959 #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
1961 #define MDL_MAPPING_FLAGS ( \
1962 MDL_MAPPED_TO_SYSTEM_VA | \
1963 MDL_PAGES_LOCKED | \
1964 MDL_SOURCE_IS_NONPAGED_POOL | \
1965 MDL_PARTIAL_HAS_BEEN_MAPPED | \
1966 MDL_PARENT_MAPPED_SYSTEM_VA | \
1971 (*PPUT_DMA_ADAPTER)(
1972 /*IN*/ PDMA_ADAPTER DmaAdapter);
1974 typedef PVOID DDKAPI
1975 (*PALLOCATE_COMMON_BUFFER)(
1976 /*IN*/ PDMA_ADAPTER DmaAdapter,
1977 /*IN*/ ULONG Length,
1978 /*OUT*/ PPHYSICAL_ADDRESS LogicalAddress,
1979 /*IN*/ BOOLEAN CacheEnabled);
1982 (*PFREE_COMMON_BUFFER)(
1983 /*IN*/ PDMA_ADAPTER DmaAdapter,
1984 /*IN*/ ULONG Length,
1985 /*IN*/ PHYSICAL_ADDRESS LogicalAddress,
1986 /*IN*/ PVOID VirtualAddress,
1987 /*IN*/ BOOLEAN CacheEnabled);
1989 typedef NTSTATUS DDKAPI
1990 (*PALLOCATE_ADAPTER_CHANNEL)(
1991 /*IN*/ PDMA_ADAPTER DmaAdapter,
1992 /*IN*/ PDEVICE_OBJECT DeviceObject,
1993 /*IN*/ ULONG NumberOfMapRegisters,
1994 /*IN*/ PDRIVER_CONTROL ExecutionRoutine,
1995 /*IN*/ PVOID Context);
1997 typedef BOOLEAN DDKAPI
1998 (*PFLUSH_ADAPTER_BUFFERS)(
1999 /*IN*/ PDMA_ADAPTER DmaAdapter,
2001 /*IN*/ PVOID MapRegisterBase,
2002 /*IN*/ PVOID CurrentVa,
2003 /*IN*/ ULONG Length,
2004 /*IN*/ BOOLEAN WriteToDevice);
2007 (*PFREE_ADAPTER_CHANNEL)(
2008 /*IN*/ PDMA_ADAPTER DmaAdapter);
2011 (*PFREE_MAP_REGISTERS)(
2012 /*IN*/ PDMA_ADAPTER DmaAdapter,
2013 PVOID MapRegisterBase,
2014 ULONG NumberOfMapRegisters);
2016 typedef PHYSICAL_ADDRESS DDKAPI
2018 /*IN*/ PDMA_ADAPTER DmaAdapter,
2020 /*IN*/ PVOID MapRegisterBase,
2021 /*IN*/ PVOID CurrentVa,
2022 /*IN OUT*/ PULONG Length,
2023 /*IN*/ BOOLEAN WriteToDevice);
2025 typedef ULONG DDKAPI
2026 (*PGET_DMA_ALIGNMENT)(
2027 /*IN*/ PDMA_ADAPTER DmaAdapter);
2029 typedef ULONG DDKAPI
2030 (*PREAD_DMA_COUNTER)(
2031 /*IN*/ PDMA_ADAPTER DmaAdapter);
2033 typedef NTSTATUS DDKAPI
2034 (*PGET_SCATTER_GATHER_LIST)(
2035 /*IN*/ PDMA_ADAPTER DmaAdapter,
2036 /*IN*/ PDEVICE_OBJECT DeviceObject,
2038 /*IN*/ PVOID CurrentVa,
2039 /*IN*/ ULONG Length,
2040 /*IN*/ PDRIVER_LIST_CONTROL ExecutionRoutine,
2041 /*IN*/ PVOID Context,
2042 /*IN*/ BOOLEAN WriteToDevice);
2045 (*PPUT_SCATTER_GATHER_LIST)(
2046 /*IN*/ PDMA_ADAPTER DmaAdapter,
2047 /*IN*/ PSCATTER_GATHER_LIST ScatterGather,
2048 /*IN*/ BOOLEAN WriteToDevice);
2050 typedef NTSTATUS DDKAPI
2051 (*PCALCULATE_SCATTER_GATHER_LIST_SIZE)(
2052 /*IN*/ PDMA_ADAPTER DmaAdapter,
2053 /*IN*/ PMDL Mdl /*OPTIONAL*/,
2054 /*IN*/ PVOID CurrentVa,
2055 /*IN*/ ULONG Length,
2056 /*OUT*/ PULONG ScatterGatherListSize,
2057 /*OUT*/ PULONG pNumberOfMapRegisters /*OPTIONAL*/);
2059 typedef NTSTATUS DDKAPI
2060 (*PBUILD_SCATTER_GATHER_LIST)(
2061 /*IN*/ PDMA_ADAPTER DmaAdapter,
2062 /*IN*/ PDEVICE_OBJECT DeviceObject,
2064 /*IN*/ PVOID CurrentVa,
2065 /*IN*/ ULONG Length,
2066 /*IN*/ PDRIVER_LIST_CONTROL ExecutionRoutine,
2067 /*IN*/ PVOID Context,
2068 /*IN*/ BOOLEAN WriteToDevice,
2069 /*IN*/ PVOID ScatterGatherBuffer,
2070 /*IN*/ ULONG ScatterGatherLength);
2072 typedef NTSTATUS DDKAPI
2073 (*PBUILD_MDL_FROM_SCATTER_GATHER_LIST)(
2074 /*IN*/ PDMA_ADAPTER DmaAdapter,
2075 /*IN*/ PSCATTER_GATHER_LIST ScatterGather,
2076 /*IN*/ PMDL OriginalMdl,
2077 /*OUT*/ PMDL *TargetMdl);
2080 struct _DMA_OPERATIONS
2082 PPUT_DMA_ADAPTER PutDmaAdapter;
2083 PALLOCATE_COMMON_BUFFER AllocateCommonBuffer;
2084 PFREE_COMMON_BUFFER FreeCommonBuffer;
2085 PALLOCATE_ADAPTER_CHANNEL AllocateAdapterChannel;
2086 PFLUSH_ADAPTER_BUFFERS FlushAdapterBuffers;
2087 PFREE_ADAPTER_CHANNEL FreeAdapterChannel;
2088 PFREE_MAP_REGISTERS FreeMapRegisters;
2089 PMAP_TRANSFER MapTransfer;
2090 PGET_DMA_ALIGNMENT GetDmaAlignment;
2091 PREAD_DMA_COUNTER ReadDmaCounter;
2092 PGET_SCATTER_GATHER_LIST GetScatterGatherList;
2093 PPUT_SCATTER_GATHER_LIST PutScatterGatherList;
2094 PCALCULATE_SCATTER_GATHER_LIST_SIZE CalculateScatterGatherList;
2095 PBUILD_SCATTER_GATHER_LIST BuildScatterGatherList;
2096 PBUILD_MDL_FROM_SCATTER_GATHER_LIST BuildMdlFromScatterGatherList;
2097 } DMA_OPERATIONS, *PDMA_OPERATIONS;
2103 PDMA_OPERATIONS DmaOperations;
2107 enum _FILE_INFORMATION_CLASS
2108 { FileDirectoryInformation = 1,
2109 FileFullDirectoryInformation,
2110 FileBothDirectoryInformation,
2111 FileBasicInformation,
2112 FileStandardInformation,
2113 FileInternalInformation,
2115 FileAccessInformation,
2116 FileNameInformation,
2117 FileRenameInformation,
2118 FileLinkInformation,
2119 FileNamesInformation,
2120 FileDispositionInformation,
2121 FilePositionInformation,
2122 FileFullEaInformation,
2123 FileModeInformation,
2124 FileAlignmentInformation,
2126 FileAllocationInformation,
2127 FileEndOfFileInformation,
2128 FileAlternateNameInformation,
2129 FileStreamInformation,
2130 FilePipeInformation,
2131 FilePipeLocalInformation,
2132 FilePipeRemoteInformation,
2133 FileMailslotQueryInformation,
2134 FileMailslotSetInformation,
2135 FileCompressionInformation,
2136 FileObjectIdInformation,
2137 FileCompletionInformation,
2138 FileMoveClusterInformation,
2139 FileQuotaInformation,
2140 FileReparsePointInformation,
2141 FileNetworkOpenInformation,
2142 FileAttributeTagInformation,
2143 FileTrackingInformation,
2144 FileIdBothDirectoryInformation,
2145 FileIdFullDirectoryInformation,
2146 FileValidDataLengthInformation,
2147 FileShortNameInformation,
2148 FileMaximumInformation
2149 } FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
2152 struct _FILE_POSITION_INFORMATION
2153 { LARGE_INTEGER CurrentByteOffset;
2154 } FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
2157 struct _FILE_ALIGNMENT_INFORMATION
2158 { ULONG AlignmentRequirement;
2159 } FILE_ALIGNMENT_INFORMATION;
2162 struct _FILE_NAME_INFORMATION
2163 { ULONG FileNameLength;
2165 } FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
2168 struct _FILE_BASIC_INFORMATION
2169 { LARGE_INTEGER CreationTime;
2170 LARGE_INTEGER LastAccessTime;
2171 LARGE_INTEGER LastWriteTime;
2172 LARGE_INTEGER ChangeTime;
2173 ULONG FileAttributes;
2174 } FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
2177 struct _FILE_STANDARD_INFORMATION
2178 { LARGE_INTEGER AllocationSize;
2179 LARGE_INTEGER EndOfFile;
2180 ULONG NumberOfLinks;
2181 BOOLEAN DeletePending;
2183 } FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
2186 struct _FILE_NETWORK_OPEN_INFORMATION
2187 { LARGE_INTEGER CreationTime;
2188 LARGE_INTEGER LastAccessTime;
2189 LARGE_INTEGER LastWriteTime;
2190 LARGE_INTEGER ChangeTime;
2191 LARGE_INTEGER AllocationSize;
2192 LARGE_INTEGER EndOfFile;
2193 ULONG FileAttributes;
2194 } FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
2197 struct _FILE_ATTRIBUTE_TAG_INFORMATION
2198 { ULONG FileAttributes;
2200 } FILE_ATTRIBUTE_TAG_INFORMATION, *PFILE_ATTRIBUTE_TAG_INFORMATION;
2203 struct _FILE_DISPOSITION_INFORMATION
2204 { BOOLEAN DoDeleteFile;
2205 } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
2208 struct _FILE_END_OF_FILE_INFORMATION
2209 { LARGE_INTEGER EndOfFile;
2210 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
2213 struct _FILE_VALID_DATA_LENGTH_INFORMATION
2214 { LARGE_INTEGER ValidDataLength;
2215 } FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
2219 { FileFsVolumeInformation = 1,
2220 FileFsLabelInformation,
2221 FileFsSizeInformation,
2222 FileFsDeviceInformation,
2223 FileFsAttributeInformation,
2224 FileFsControlInformation,
2225 FileFsFullSizeInformation,
2226 FileFsObjectIdInformation,
2227 FileFsDriverPathInformation,
2228 FileFsMaximumInformation
2229 } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
2232 struct _FILE_FS_DEVICE_INFORMATION
2233 { DEVICE_TYPE DeviceType;
2234 ULONG Characteristics;
2235 } FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
2238 struct _FILE_FULL_EA_INFORMATION
2239 { ULONG NextEntryOffset;
2242 USHORT EaValueLength;
2244 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
2246 typedef ULONG_PTR ERESOURCE_THREAD;
2247 typedef ERESOURCE_THREAD *PERESOURCE_THREAD;
2251 { ERESOURCE_THREAD OwnerThread;
2252 _ANONYMOUS_UNION union
2256 } OWNER_ENTRY, *POWNER_ENTRY;
2260 #define ResourceNeverExclusive 0x0010
2261 #define ResourceReleaseByOtherThread 0x0020
2262 #define ResourceOwnedExclusive 0x0080
2264 #define RESOURCE_HASH_TABLE_SIZE 64
2268 { LIST_ENTRY SystemResourcesList;
2269 POWNER_ENTRY OwnerTable;
2272 PKSEMAPHORE SharedWaiters;
2273 PKEVENT ExclusiveWaiters;
2274 OWNER_ENTRY OwnerThreads[2];
2275 ULONG ContentionCount;
2276 USHORT NumberOfSharedWaiters;
2277 USHORT NumberOfExclusiveWaiters;
2278 _ANONYMOUS_UNION union
2280 ULONG_PTR CreatorBackTraceIndex;
2282 KSPIN_LOCK SpinLock;
2283 } ERESOURCE, *PERESOURCE;
2285 /* NOTE: PVOID for methods to avoid 'assignment from incompatible pointer type' warning */
2287 struct _DRIVER_EXTENSION
2288 { struct _DRIVER_OBJECT *DriverObject;
2291 UNICODE_STRING ServiceKeyName;
2292 } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
2294 typedef BOOLEAN DDKAPI
2295 (*PFAST_IO_CHECK_IF_POSSIBLE)(
2296 /*IN*/ struct _FILE_OBJECT *FileObject,
2297 /*IN*/ PLARGE_INTEGER FileOffset,
2298 /*IN*/ ULONG Length,
2299 /*IN*/ BOOLEAN Wait,
2300 /*IN*/ ULONG LockKey,
2301 /*IN*/ BOOLEAN CheckForReadOperation,
2302 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2303 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2305 typedef BOOLEAN DDKAPI
2307 /*IN*/ struct _FILE_OBJECT *FileObject,
2308 /*IN*/ PLARGE_INTEGER FileOffset,
2309 /*IN*/ ULONG Length,
2310 /*IN*/ BOOLEAN Wait,
2311 /*IN*/ ULONG LockKey,
2312 /*OUT*/ PVOID Buffer,
2313 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2314 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2316 typedef BOOLEAN DDKAPI
2318 /*IN*/ struct _FILE_OBJECT *FileObject,
2319 /*IN*/ PLARGE_INTEGER FileOffset,
2320 /*IN*/ ULONG Length,
2321 /*IN*/ BOOLEAN Wait,
2322 /*IN*/ ULONG LockKey,
2323 /*IN*/ PVOID Buffer,
2324 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2325 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2327 typedef BOOLEAN DDKAPI
2328 (*PFAST_IO_QUERY_BASIC_INFO)(
2329 /*IN*/ struct _FILE_OBJECT *FileObject,
2330 /*IN*/ BOOLEAN Wait,
2331 /*OUT*/ PFILE_BASIC_INFORMATION Buffer,
2332 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2333 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2335 typedef BOOLEAN DDKAPI
2336 (*PFAST_IO_QUERY_STANDARD_INFO)(
2337 /*IN*/ struct _FILE_OBJECT *FileObject,
2338 /*IN*/ BOOLEAN Wait,
2339 /*OUT*/ PFILE_STANDARD_INFORMATION Buffer,
2340 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2341 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2343 typedef BOOLEAN DDKAPI
2345 /*IN*/ struct _FILE_OBJECT *FileObject,
2346 /*IN*/ PLARGE_INTEGER FileOffset,
2347 /*IN*/ PLARGE_INTEGER Length,
2348 PEPROCESS ProcessId,
2350 BOOLEAN FailImmediately,
2351 BOOLEAN ExclusiveLock,
2352 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2353 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2355 typedef BOOLEAN DDKAPI
2356 (*PFAST_IO_UNLOCK_SINGLE)(
2357 /*IN*/ struct _FILE_OBJECT *FileObject,
2358 /*IN*/ PLARGE_INTEGER FileOffset,
2359 /*IN*/ PLARGE_INTEGER Length,
2360 PEPROCESS ProcessId,
2362 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2363 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2365 typedef BOOLEAN DDKAPI
2366 (*PFAST_IO_UNLOCK_ALL)(
2367 /*IN*/ struct _FILE_OBJECT *FileObject,
2368 PEPROCESS ProcessId,
2369 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2370 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2372 typedef BOOLEAN DDKAPI
2373 (*PFAST_IO_UNLOCK_ALL_BY_KEY)(
2374 /*IN*/ struct _FILE_OBJECT *FileObject,
2377 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2378 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2380 typedef BOOLEAN DDKAPI
2381 (*PFAST_IO_DEVICE_CONTROL)(
2382 /*IN*/ struct _FILE_OBJECT *FileObject,
2383 /*IN*/ BOOLEAN Wait,
2384 /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
2385 /*IN*/ ULONG InputBufferLength,
2386 /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
2387 /*IN*/ ULONG OutputBufferLength,
2388 /*IN*/ ULONG IoControlCode,
2389 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2390 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2393 (*PFAST_IO_ACQUIRE_FILE)(
2394 /*IN*/ struct _FILE_OBJECT *FileObject);
2397 (*PFAST_IO_RELEASE_FILE)(
2398 /*IN*/ struct _FILE_OBJECT *FileObject);
2401 (*PFAST_IO_DETACH_DEVICE)(
2402 /*IN*/ struct _DEVICE_OBJECT *SourceDevice,
2403 /*IN*/ struct _DEVICE_OBJECT *TargetDevice);
2405 typedef BOOLEAN DDKAPI
2406 (*PFAST_IO_QUERY_NETWORK_OPEN_INFO)(
2407 /*IN*/ struct _FILE_OBJECT *FileObject,
2408 /*IN*/ BOOLEAN Wait,
2409 /*OUT*/ struct _FILE_NETWORK_OPEN_INFORMATION *Buffer,
2410 /*OUT*/ struct _IO_STATUS_BLOCK *IoStatus,
2411 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2413 typedef NTSTATUS DDKAPI
2414 (*PFAST_IO_ACQUIRE_FOR_MOD_WRITE)(
2415 /*IN*/ struct _FILE_OBJECT *FileObject,
2416 /*IN*/ PLARGE_INTEGER EndingOffset,
2417 /*OUT*/ struct _ERESOURCE **ResourceToRelease,
2418 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2420 typedef BOOLEAN DDKAPI
2421 (*PFAST_IO_MDL_READ)(
2422 /*IN*/ struct _FILE_OBJECT *FileObject,
2423 /*IN*/ PLARGE_INTEGER FileOffset,
2424 /*IN*/ ULONG Length,
2425 /*IN*/ ULONG LockKey,
2426 /*OUT*/ PMDL *MdlChain,
2427 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2428 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2430 typedef BOOLEAN DDKAPI
2431 (*PFAST_IO_MDL_READ_COMPLETE)(
2432 /*IN*/ struct _FILE_OBJECT *FileObject,
2433 /*IN*/ PMDL MdlChain,
2434 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2436 typedef BOOLEAN DDKAPI
2437 (*PFAST_IO_PREPARE_MDL_WRITE)(
2438 /*IN*/ struct _FILE_OBJECT *FileObject,
2439 /*IN*/ PLARGE_INTEGER FileOffset,
2440 /*IN*/ ULONG Length,
2441 /*IN*/ ULONG LockKey,
2442 /*OUT*/ PMDL *MdlChain,
2443 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2444 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2446 typedef BOOLEAN DDKAPI
2447 (*PFAST_IO_MDL_WRITE_COMPLETE)(
2448 /*IN*/ struct _FILE_OBJECT *FileObject,
2449 /*IN*/ PLARGE_INTEGER FileOffset,
2450 /*IN*/ PMDL MdlChain,
2451 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2453 typedef BOOLEAN DDKAPI
2454 (*PFAST_IO_READ_COMPRESSED)(
2455 /*IN*/ struct _FILE_OBJECT *FileObject,
2456 /*IN*/ PLARGE_INTEGER FileOffset,
2457 /*IN*/ ULONG Length,
2458 /*IN*/ ULONG LockKey,
2459 /*OUT*/ PVOID Buffer,
2460 /*OUT*/ PMDL *MdlChain,
2461 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2462 /*OUT*/ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
2463 /*IN*/ ULONG CompressedDataInfoLength,
2464 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2466 typedef BOOLEAN DDKAPI
2467 (*PFAST_IO_WRITE_COMPRESSED)(
2468 /*IN*/ struct _FILE_OBJECT *FileObject,
2469 /*IN*/ PLARGE_INTEGER FileOffset,
2470 /*IN*/ ULONG Length,
2471 /*IN*/ ULONG LockKey,
2472 /*IN*/ PVOID Buffer,
2473 /*OUT*/ PMDL *MdlChain,
2474 /*OUT*/ PIO_STATUS_BLOCK IoStatus,
2475 /*IN*/ struct _COMPRESSED_DATA_INFO *CompressedDataInfo,
2476 /*IN*/ ULONG CompressedDataInfoLength,
2477 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2479 typedef BOOLEAN DDKAPI
2480 (*PFAST_IO_MDL_READ_COMPLETE_COMPRESSED)(
2481 /*IN*/ struct _FILE_OBJECT *FileObject,
2482 /*IN*/ PMDL MdlChain,
2483 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2485 typedef BOOLEAN DDKAPI
2486 (*PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED)(
2487 /*IN*/ struct _FILE_OBJECT *FileObject,
2488 /*IN*/ PLARGE_INTEGER FileOffset,
2489 /*IN*/ PMDL MdlChain,
2490 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2492 typedef BOOLEAN DDKAPI
2493 (*PFAST_IO_QUERY_OPEN)(
2494 /*IN*/ struct _IRP *Irp,
2495 /*OUT*/ PFILE_NETWORK_OPEN_INFORMATION NetworkInformation,
2496 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2498 typedef NTSTATUS DDKAPI
2499 (*PFAST_IO_RELEASE_FOR_MOD_WRITE)(
2500 /*IN*/ struct _FILE_OBJECT *FileObject,
2501 /*IN*/ struct _ERESOURCE *ResourceToRelease,
2502 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2504 typedef NTSTATUS DDKAPI
2505 (*PFAST_IO_ACQUIRE_FOR_CCFLUSH)(
2506 /*IN*/ struct _FILE_OBJECT *FileObject,
2507 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2509 typedef NTSTATUS DDKAPI
2510 (*PFAST_IO_RELEASE_FOR_CCFLUSH) (
2511 /*IN*/ struct _FILE_OBJECT *FileObject,
2512 /*IN*/ struct _DEVICE_OBJECT *DeviceObject);
2515 struct _FAST_IO_DISPATCH
2516 { ULONG SizeOfFastIoDispatch;
2517 PFAST_IO_CHECK_IF_POSSIBLE FastIoCheckIfPossible;
2518 PFAST_IO_READ FastIoRead;
2519 PFAST_IO_WRITE FastIoWrite;
2520 PFAST_IO_QUERY_BASIC_INFO FastIoQueryBasicInfo;
2521 PFAST_IO_QUERY_STANDARD_INFO FastIoQueryStandardInfo;
2522 PFAST_IO_LOCK FastIoLock;
2523 PFAST_IO_UNLOCK_SINGLE FastIoUnlockSingle;
2524 PFAST_IO_UNLOCK_ALL FastIoUnlockAll;
2525 PFAST_IO_UNLOCK_ALL_BY_KEY FastIoUnlockAllByKey;
2526 PFAST_IO_DEVICE_CONTROL FastIoDeviceControl;
2527 PFAST_IO_ACQUIRE_FILE AcquireFileForNtCreateSection;
2528 PFAST_IO_RELEASE_FILE ReleaseFileForNtCreateSection;
2529 PFAST_IO_DETACH_DEVICE FastIoDetachDevice;
2530 PFAST_IO_QUERY_NETWORK_OPEN_INFO FastIoQueryNetworkOpenInfo;
2531 PFAST_IO_ACQUIRE_FOR_MOD_WRITE AcquireForModWrite;
2532 PFAST_IO_MDL_READ MdlRead;
2533 PFAST_IO_MDL_READ_COMPLETE MdlReadComplete;
2534 PFAST_IO_PREPARE_MDL_WRITE PrepareMdlWrite;
2535 PFAST_IO_MDL_WRITE_COMPLETE MdlWriteComplete;
2536 PFAST_IO_READ_COMPRESSED FastIoReadCompressed;
2537 PFAST_IO_WRITE_COMPRESSED FastIoWriteCompressed;
2538 PFAST_IO_MDL_READ_COMPLETE_COMPRESSED MdlReadCompleteCompressed;
2539 PFAST_IO_MDL_WRITE_COMPLETE_COMPRESSED MdlWriteCompleteCompressed;
2540 PFAST_IO_QUERY_OPEN FastIoQueryOpen;
2541 PFAST_IO_RELEASE_FOR_MOD_WRITE ReleaseForModWrite;
2542 PFAST_IO_ACQUIRE_FOR_CCFLUSH AcquireForCcFlush;
2543 PFAST_IO_RELEASE_FOR_CCFLUSH ReleaseForCcFlush;
2544 } FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
2547 struct _DRIVER_OBJECT
2550 PDEVICE_OBJECT DeviceObject;
2554 PVOID DriverSection;
2555 PDRIVER_EXTENSION DriverExtension;
2556 UNICODE_STRING DriverName;
2557 PUNICODE_STRING HardwareDatabase;
2558 PFAST_IO_DISPATCH FastIoDispatch;
2559 PDRIVER_INITIALIZE DriverInit;
2560 PDRIVER_STARTIO DriverStartIo;
2561 PDRIVER_UNLOAD DriverUnload;
2562 PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
2563 } DRIVER_OBJECT, *PDRIVER_OBJECT;
2566 struct _SECTION_OBJECT_POINTERS
2567 { PVOID DataSectionObject;
2568 PVOID SharedCacheMap;
2569 PVOID ImageSectionObject;
2570 } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
2573 struct _IO_COMPLETION_CONTEXT
2576 } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
2578 /* FILE_OBJECT.Flags
2580 #define FO_FILE_OPEN 0x00000001
2581 #define FO_SYNCHRONOUS_IO 0x00000002
2582 #define FO_ALERTABLE_IO 0x00000004
2583 #define FO_NO_INTERMEDIATE_BUFFERING 0x00000008
2584 #define FO_WRITE_THROUGH 0x00000010
2585 #define FO_SEQUENTIAL_ONLY 0x00000020
2586 #define FO_CACHE_SUPPORTED 0x00000040
2587 #define FO_NAMED_PIPE 0x00000080
2588 #define FO_STREAM_FILE 0x00000100
2589 #define FO_MAILSLOT 0x00000200
2590 #define FO_GENERATE_AUDIT_ON_CLOSE 0x00000400
2591 #define FO_DIRECT_DEVICE_OPEN 0x00000800
2592 #define FO_FILE_MODIFIED 0x00001000
2593 #define FO_FILE_SIZE_CHANGED 0x00002000
2594 #define FO_CLEANUP_COMPLETE 0x00004000
2595 #define FO_TEMPORARY_FILE 0x00008000
2596 #define FO_DELETE_ON_CLOSE 0x00010000
2597 #define FO_OPENED_CASE_SENSITIVE 0x00020000
2598 #define FO_HANDLE_CREATED 0x00040000
2599 #define FO_FILE_FAST_IO_READ 0x00080000
2600 #define FO_RANDOM_ACCESS 0x00100000
2601 #define FO_FILE_OPEN_CANCELLED 0x00200000
2602 #define FO_VOLUME_OPEN 0x00400000
2603 #define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000
2604 #define FO_REMOTE_ORIGIN 0x01000000
2610 PDEVICE_OBJECT DeviceObject;
2614 PSECTION_OBJECT_POINTERS SectionObjectPointer;
2615 PVOID PrivateCacheMap;
2616 NTSTATUS FinalStatus;
2617 struct _FILE_OBJECT *RelatedFileObject;
2618 BOOLEAN LockOperation;
2619 BOOLEAN DeletePending;
2621 BOOLEAN WriteAccess;
2622 BOOLEAN DeleteAccess;
2624 BOOLEAN SharedWrite;
2625 BOOLEAN SharedDelete;
2627 UNICODE_STRING FileName;
2628 LARGE_INTEGER CurrentByteOffset;
2634 PIO_COMPLETION_CONTEXT CompletionContext;
2635 } FILE_OBJECT, *PFILE_OBJECT;
2638 enum _SECURITY_OPERATION_CODE
2639 { SetSecurityDescriptor,
2640 QuerySecurityDescriptor,
2641 DeleteSecurityDescriptor,
2642 AssignSecurityDescriptor
2643 } SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
2645 #define INITIAL_PRIVILEGE_COUNT 3
2648 struct _INITIAL_PRIVILEGE_SET
2649 { ULONG PrivilegeCount;
2651 LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
2652 } INITIAL_PRIVILEGE_SET, *PINITIAL_PRIVILEGE_SET;
2655 struct _SECURITY_SUBJECT_CONTEXT
2656 { PACCESS_TOKEN ClientToken;
2657 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
2658 PACCESS_TOKEN PrimaryToken;
2659 PVOID ProcessAuditId;
2660 } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
2662 #include <pshpack4.h>
2664 struct _ACCESS_STATE
2666 BOOLEAN SecurityEvaluated;
2667 BOOLEAN GenerateAudit;
2668 BOOLEAN GenerateOnClose;
2669 BOOLEAN PrivilegesAllocated;
2671 ACCESS_MASK RemainingDesiredAccess;
2672 ACCESS_MASK PreviouslyGrantedAccess;
2673 ACCESS_MASK OriginalDesiredAccess;
2674 SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
2675 PSECURITY_DESCRIPTOR SecurityDescriptor;
2678 { INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
2679 PRIVILEGE_SET PrivilegeSet;
2681 BOOLEAN AuditPrivileges;
2682 UNICODE_STRING ObjectName;
2683 UNICODE_STRING ObjectTypeName;
2684 } ACCESS_STATE, *PACCESS_STATE;
2685 #include <poppack.h>
2688 struct _IO_SECURITY_CONTEXT
2689 { PSECURITY_QUALITY_OF_SERVICE SecurityQos;
2690 PACCESS_STATE AccessState;
2691 ACCESS_MASK DesiredAccess;
2692 ULONG FullCreateOptions;
2693 } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
2698 struct _IO_CSQ_IRP_CONTEXT
2701 struct _IO_CSQ *Csq;
2702 } IO_CSQ_IRP_CONTEXT, *PIO_CSQ_IRP_CONTEXT;
2705 (*PIO_CSQ_INSERT_IRP)(
2706 /*IN*/ struct _IO_CSQ *Csq,
2710 (*PIO_CSQ_REMOVE_IRP)(
2711 /*IN*/ struct _IO_CSQ *Csq,
2715 (*PIO_CSQ_PEEK_NEXT_IRP)(
2716 /*IN*/ struct _IO_CSQ *Csq,
2718 /*IN*/ PVOID PeekContext);
2721 (*PIO_CSQ_ACQUIRE_LOCK)(
2722 /*IN*/ struct _IO_CSQ *Csq,
2723 /*OUT*/ PKIRQL Irql);
2726 (*PIO_CSQ_RELEASE_LOCK)(
2727 /*IN*/ struct _IO_CSQ *Csq,
2731 (*PIO_CSQ_COMPLETE_CANCELED_IRP)(
2732 /*IN*/ struct _IO_CSQ *Csq,
2738 PIO_CSQ_INSERT_IRP CsqInsertIrp;
2739 PIO_CSQ_REMOVE_IRP CsqRemoveIrp;
2740 PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp;
2741 PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock;
2742 PIO_CSQ_RELEASE_LOCK CsqReleaseLock;
2743 PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp;
2744 PVOID ReservePointer;
2747 #include <pshpack4.h>
2749 struct _IO_STACK_LOCATION
2750 { UCHAR MajorFunction;
2751 UCHAR MinorFunction;
2756 { PIO_SECURITY_CONTEXT SecurityContext;
2758 USHORT POINTER_ALIGNMENT FileAttributes;
2760 ULONG POINTER_ALIGNMENT EaLength;
2764 ULONG POINTER_ALIGNMENT Key;
2765 LARGE_INTEGER ByteOffset;
2769 ULONG POINTER_ALIGNMENT Key;
2770 LARGE_INTEGER ByteOffset;
2774 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
2778 FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
2779 PFILE_OBJECT FileObject;
2780 _ANONYMOUS_UNION union
2781 { _ANONYMOUS_STRUCT struct
2782 { BOOLEAN ReplaceIfExists;
2783 BOOLEAN AdvanceOnly;
2786 HANDLE DeleteHandle;
2791 FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
2794 { ULONG OutputBufferLength;
2795 ULONG POINTER_ALIGNMENT InputBufferLength;
2796 ULONG POINTER_ALIGNMENT IoControlCode;
2797 PVOID Type3InputBuffer;
2800 { SECURITY_INFORMATION SecurityInformation;
2801 ULONG POINTER_ALIGNMENT Length;
2804 { SECURITY_INFORMATION SecurityInformation;
2805 PSECURITY_DESCRIPTOR SecurityDescriptor;
2809 PDEVICE_OBJECT DeviceObject;
2813 PDEVICE_OBJECT DeviceObject;
2816 { struct _SCSI_REQUEST_BLOCK *Srb;
2819 { DEVICE_RELATION_TYPE Type;
2820 } QueryDeviceRelations;
2822 { CONST GUID *InterfaceType;
2825 PINTERFACE Interface;
2826 PVOID InterfaceSpecificData;
2829 { PDEVICE_CAPABILITIES Capabilities;
2830 } DeviceCapabilities;
2832 { PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
2833 } FilterResourceRequirements;
2838 ULONG POINTER_ALIGNMENT Length;
2844 { BUS_QUERY_ID_TYPE IdType;
2847 { DEVICE_TEXT_TYPE DeviceTextType;
2848 LCID POINTER_ALIGNMENT LocaleId;
2852 BOOLEAN Reserved[3];
2853 DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
2854 } UsageNotification;
2856 { SYSTEM_POWER_STATE PowerState;
2859 { PPOWER_SEQUENCE PowerSequence;
2862 { ULONG SystemContext;
2863 POWER_STATE_TYPE POINTER_ALIGNMENT Type;
2864 POWER_STATE POINTER_ALIGNMENT State;
2865 POWER_ACTION POINTER_ALIGNMENT ShutdownType;
2868 { PCM_RESOURCE_LIST AllocatedResources;
2869 PCM_RESOURCE_LIST AllocatedResourcesTranslated;
2872 { ULONG_PTR ProviderId;
2884 PDEVICE_OBJECT DeviceObject;
2885 PFILE_OBJECT FileObject;
2886 PIO_COMPLETION_ROUTINE CompletionRoutine;
2888 } IO_STACK_LOCATION, *PIO_STACK_LOCATION;
2889 #include <poppack.h>
2891 /* IO_STACK_LOCATION.Control
2893 #define SL_PENDING_RETURNED 0x01
2894 #define SL_INVOKE_ON_CANCEL 0x20
2895 #define SL_INVOKE_ON_SUCCESS 0x40
2896 #define SL_INVOKE_ON_ERROR 0x80
2899 enum _KEY_INFORMATION_CLASS
2900 { KeyBasicInformation,
2904 KeyCachedInformation,
2906 } KEY_INFORMATION_CLASS;
2909 struct _KEY_BASIC_INFORMATION
2910 { LARGE_INTEGER LastWriteTime;
2914 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
2917 struct _KEY_FULL_INFORMATION
2918 { LARGE_INTEGER LastWriteTime;
2926 ULONG MaxValueNameLen;
2927 ULONG MaxValueDataLen;
2929 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
2932 struct _KEY_NODE_INFORMATION
2933 { LARGE_INTEGER LastWriteTime;
2939 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
2942 struct _KEY_VALUE_BASIC_INFORMATION
2947 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
2950 struct _KEY_VALUE_FULL_INFORMATION
2957 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
2960 struct _KEY_VALUE_PARTIAL_INFORMATION
2965 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
2968 struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
2972 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
2975 struct _KEY_VALUE_ENTRY
2976 { PUNICODE_STRING ValueName;
2980 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
2983 enum _KEY_VALUE_INFORMATION_CLASS
2984 { KeyValueBasicInformation,
2985 KeyValueFullInformation,
2986 KeyValuePartialInformation,
2987 KeyValueFullInformationAlign64,
2988 KeyValuePartialInformationAlign64
2989 } KEY_VALUE_INFORMATION_CLASS;
2991 /* KEY_VALUE_Xxx.Type
2995 #define REG_EXPAND_SZ 2
2996 #define REG_BINARY 3
2998 #define REG_DWORD_LITTLE_ENDIAN 4
2999 #define REG_DWORD_BIG_ENDIAN 5
3001 #define REG_MULTI_SZ 7
3002 #define REG_RESOURCE_LIST 8
3003 #define REG_FULL_RESOURCE_DESCRIPTOR 9
3004 #define REG_RESOURCE_REQUIREMENTS_LIST 10
3005 #define REG_QWORD 11
3006 #define REG_QWORD_LITTLE_ENDIAN 11
3008 #define PCI_TYPE0_ADDRESSES 6
3009 #define PCI_TYPE1_ADDRESSES 2
3010 #define PCI_TYPE2_ADDRESSES 5
3013 struct _PCI_COMMON_CONFIG
3022 UCHAR CacheLineSize;
3027 { struct _PCI_HEADER_TYPE_0
3028 { ULONG BaseAddresses[PCI_TYPE0_ADDRESSES];
3032 ULONG ROMBaseAddress;
3033 UCHAR CapabilitiesPtr;
3036 UCHAR InterruptLine;
3039 UCHAR MaximumLatency;
3041 struct _PCI_HEADER_TYPE_1
3042 { ULONG BaseAddresses[PCI_TYPE1_ADDRESSES];
3045 UCHAR SubordinateBus;
3046 UCHAR SecondaryLatency;
3049 USHORT SecondaryStatus;
3052 USHORT PrefetchBase;
3053 USHORT PrefetchLimit;
3054 ULONG PrefetchBaseUpper32;
3055 ULONG PrefetchLimitUpper32;
3056 USHORT IOBaseUpper16;
3057 USHORT IOLimitUpper16;
3058 UCHAR CapabilitiesPtr;
3060 ULONG ROMBaseAddress;
3061 UCHAR InterruptLine;
3063 USHORT BridgeControl;
3065 struct _PCI_HEADER_TYPE_2
3066 { ULONG SocketRegistersBaseAddress;
3067 UCHAR CapabilitiesPtr;
3069 USHORT SecondaryStatus;
3072 UCHAR SubordinateBus;
3073 UCHAR SecondaryLatency;
3077 } Range[PCI_TYPE2_ADDRESSES - 1];
3078 UCHAR InterruptLine;
3080 USHORT BridgeControl;
3083 UCHAR DeviceSpecific[192];
3084 } PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
3086 /* PCI_COMMON_CONFIG.Command
3088 #define PCI_ENABLE_IO_SPACE 0x0001
3089 #define PCI_ENABLE_MEMORY_SPACE 0x0002
3090 #define PCI_ENABLE_BUS_MASTER 0x0004
3091 #define PCI_ENABLE_SPECIAL_CYCLES 0x0008
3092 #define PCI_ENABLE_WRITE_AND_INVALIDATE 0x0010
3093 #define PCI_ENABLE_VGA_COMPATIBLE_PALETTE 0x0020
3094 #define PCI_ENABLE_PARITY 0x0040
3095 #define PCI_ENABLE_WAIT_CYCLE 0x0080
3096 #define PCI_ENABLE_SERR 0x0100
3097 #define PCI_ENABLE_FAST_BACK_TO_BACK 0x0200
3099 /* PCI_COMMON_CONFIG.Status
3101 #define PCI_STATUS_CAPABILITIES_LIST 0x0010
3102 #define PCI_STATUS_66MHZ_CAPABLE 0x0020
3103 #define PCI_STATUS_UDF_SUPPORTED 0x0040
3104 #define PCI_STATUS_FAST_BACK_TO_BACK 0x0080
3105 #define PCI_STATUS_DATA_PARITY_DETECTED 0x0100
3106 #define PCI_STATUS_DEVSEL 0x0600
3107 #define PCI_STATUS_SIGNALED_TARGET_ABORT 0x0800
3108 #define PCI_STATUS_RECEIVED_TARGET_ABORT 0x1000
3109 #define PCI_STATUS_RECEIVED_MASTER_ABORT 0x2000
3110 #define PCI_STATUS_SIGNALED_SYSTEM_ERROR 0x4000
3111 #define PCI_STATUS_DETECTED_PARITY_ERROR 0x8000
3113 /* PCI_COMMON_CONFIG.HeaderType
3115 #define PCI_MULTIFUNCTION 0x80
3116 #define PCI_DEVICE_TYPE 0x00
3117 #define PCI_BRIDGE_TYPE 0x01
3118 #define PCI_CARDBUS_BRIDGE_TYPE 0x02
3120 #define PCI_CONFIGURATION_TYPE(PciData) \
3121 (((PPCI_COMMON_CONFIG) (PciData))->HeaderType & ~PCI_MULTIFUNCTION)
3123 #define PCI_MULTIFUNCTION_DEVICE(PciData) \
3124 ((((PPCI_COMMON_CONFIG) (PciData))->HeaderType & PCI_MULTIFUNCTION) != 0)
3127 struct _PCI_SLOT_NUMBER
3130 { ULONG DeviceNumber : 5;
3131 ULONG FunctionNumber : 3;
3132 ULONG Reserved : 24;
3136 } PCI_SLOT_NUMBER, *PPCI_SLOT_NUMBER;
3142 NonPagedPoolMustSucceed,
3144 NonPagedPoolCacheAligned,
3145 PagedPoolCacheAligned,
3146 NonPagedPoolCacheAlignedMustS,
3148 NonPagedPoolSession = 32,
3150 NonPagedPoolMustSucceedSession,
3151 DontUseThisTypeSession,
3152 NonPagedPoolCacheAlignedSession,
3153 PagedPoolCacheAlignedSession,
3154 NonPagedPoolCacheAlignedMustSSession
3158 enum _EX_POOL_PRIORITY
3159 { LowPoolPriority = 0,
3160 LowPoolPrioritySpecialPoolOverrun = 8,
3161 LowPoolPrioritySpecialPoolUnderrun = 9,
3162 NormalPoolPriority = 16,
3163 NormalPoolPrioritySpecialPoolOverrun = 24,
3164 NormalPoolPrioritySpecialPoolUnderrun = 25,
3165 HighPoolPriority = 32,
3166 HighPoolPrioritySpecialPoolOverrun = 40,
3167 HighPoolPrioritySpecialPoolUnderrun = 41
3170 /* PRIVILEGE_SET.Control
3172 #define PRIVILEGE_SET_ALL_NECESSARY 1
3175 struct _RTL_OSVERSIONINFOW
3176 { ULONG dwOSVersionInfoSize;
3177 ULONG dwMajorVersion;
3178 ULONG dwMinorVersion;
3179 ULONG dwBuildNumber;
3181 WCHAR szCSDVersion[128];
3182 } RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;
3185 struct _RTL_OSVERSIONINFOEXW
3186 { ULONG dwOSVersionInfoSize;
3187 ULONG dwMajorVersion;
3188 ULONG dwMinorVersion;
3189 ULONG dwBuildNumber;
3191 WCHAR szCSDVersion[128];
3192 USHORT wServicePackMajor;
3193 USHORT wServicePackMinor;
3197 } RTL_OSVERSIONINFOEXW, *PRTL_OSVERSIONINFOEXW;
3199 NTOSAPI ULONGLONG DDKAPI
3200 VerSetConditionMask(
3201 /*IN*/ ULONGLONG ConditionMask,
3202 /*IN*/ ULONG TypeMask,
3203 /*IN*/ UCHAR Condition
3206 #define VER_SET_CONDITION(ConditionMask, TypeBitMask, ComparisonType) \
3207 ((ConditionMask) = VerSetConditionMask((ConditionMask), \
3208 (TypeBitMask), (ComparisonType)))
3210 /* RtlVerifyVersionInfo() TypeMask
3212 #define VER_MINORVERSION 0x0000001
3213 #define VER_MAJORVERSION 0x0000002
3214 #define VER_BUILDNUMBER 0x0000004
3215 #define VER_PLATFORMID 0x0000008
3216 #define VER_SERVICEPACKMINOR 0x0000010
3217 #define VER_SERVICEPACKMAJOR 0x0000020
3218 #define VER_SUITENAME 0x0000040
3219 #define VER_PRODUCT_TYPE 0x0000080
3221 /* RtlVerifyVersionInfo() ComparisonType
3224 #define VER_GREATER 2
3225 #define VER_GREATER_EQUAL 3
3227 #define VER_LESS_EQUAL 5
3231 #define VER_CONDITION_MASK 7
3232 #define VER_NUM_BITS_PER_CONDITION_MASK 3
3236 { ULONG SizeOfBitMap;
3238 } RTL_BITMAP, *PRTL_BITMAP;
3241 struct _RTL_BITMAP_RUN
3242 { ULONG StartingIndex;
3244 } RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
3246 typedef NTSTATUS DDKAPI
3247 (*PRTL_QUERY_REGISTRY_ROUTINE)(
3248 /*IN*/ PWSTR ValueName,
3249 /*IN*/ ULONG ValueType,
3250 /*IN*/ PVOID ValueData,
3251 /*IN*/ ULONG ValueLength,
3252 /*IN*/ PVOID Context,
3253 /*IN*/ PVOID EntryContext);
3255 #define RTL_REGISTRY_ABSOLUTE 0
3256 #define RTL_REGISTRY_SERVICES 1
3257 #define RTL_REGISTRY_CONTROL 2
3258 #define RTL_REGISTRY_WINDOWS_NT 3
3259 #define RTL_REGISTRY_DEVICEMAP 4
3260 #define RTL_REGISTRY_USER 5
3262 /* RTL_QUERY_REGISTRY_TABLE.Flags */
3263 #define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
3264 #define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
3265 #define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
3266 #define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
3267 #define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
3268 #define RTL_QUERY_REGISTRY_DIRECT 0x00000020
3269 #define RTL_QUERY_REGISTRY_DELETE 0x00000040
3272 struct _RTL_QUERY_REGISTRY_TABLE
3273 { PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
3279 ULONG DefaultLength;
3280 } RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
3290 CSHORT Milliseconds;
3292 } TIME_FIELDS, *PTIME_FIELDS;
3294 typedef PVOID DDKAPI
3295 (*PALLOCATE_FUNCTION)(
3296 /*IN*/ POOL_TYPE PoolType,
3297 /*IN*/ SIZE_T NumberOfBytes,
3302 (*PFREE_FUNCTION)( /*IN*/ PVOID Buffer );
3304 #define GENERAL_LOOKASIDE_S \
3305 SLIST_HEADER ListHead; \
3307 USHORT MaximumDepth; \
3308 ULONG TotalAllocates; \
3309 _ANONYMOUS_UNION union { \
3310 ULONG AllocateMisses; \
3311 ULONG AllocateHits; \
3314 _ANONYMOUS_UNION union { \
3317 } DUMMYUNIONNAME2; \
3321 PALLOCATE_FUNCTION Allocate; \
3322 PFREE_FUNCTION Free; \
3323 LIST_ENTRY ListEntry; \
3324 ULONG LastTotalAllocates; \
3325 _ANONYMOUS_UNION union { \
3326 ULONG LastAllocateMisses; \
3327 ULONG LastAllocateHits; \
3328 } DUMMYUNIONNAME3; \
3332 struct _GENERAL_LOOKASIDE
3333 { GENERAL_LOOKASIDE_S
3334 } GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
3337 struct _NPAGED_LOOKASIDE_LIST
3338 { GENERAL_LOOKASIDE_S
3339 KSPIN_LOCK Obsoleted;
3340 } NPAGED_LOOKASIDE_LIST, *PNPAGED_LOOKASIDE_LIST;
3343 struct _PAGED_LOOKASIDE_LIST
3344 { GENERAL_LOOKASIDE_S
3345 FAST_MUTEX Obsoleted;
3346 } PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
3348 typedef struct _CALLBACK_OBJECT *PCALLBACK_OBJECT;
3351 (*PCALLBACK_FUNCTION)(
3352 /*IN*/ PVOID CallbackContext,
3353 /*IN*/ PVOID Argument1,
3354 /*IN*/ PVOID Argument2
3359 { NotificationEvent,
3360 SynchronizationEvent
3397 { LIST_ENTRY WaitListEntry;
3398 struct _KTHREAD * RESTRICTED_POINTER Thread;
3400 struct _KWAIT_BLOCK * RESTRICTED_POINTER NextWaitBlock;
3403 } KWAIT_BLOCK, *PKWAIT_BLOCK, *RESTRICTED_POINTER PRKWAIT_BLOCK;
3405 typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK * PIO_REMOVE_LOCK_TRACKING_BLOCK;
3408 struct _IO_REMOVE_LOCK_COMMON_BLOCK
3410 BOOLEAN Reserved[3];
3413 } IO_REMOVE_LOCK_COMMON_BLOCK;
3416 struct _IO_REMOVE_LOCK_DBG_BLOCK
3419 LONGLONG MaxLockedTicks;
3421 LIST_ENTRY LockList;
3423 LONG LowMemoryCount;
3426 PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
3427 } IO_REMOVE_LOCK_DBG_BLOCK;
3430 struct _IO_REMOVE_LOCK
3431 { IO_REMOVE_LOCK_COMMON_BLOCK Common;
3433 IO_REMOVE_LOCK_DBG_BLOCK Dbg;
3435 } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
3437 typedef struct _IO_WORKITEM *PIO_WORKITEM;
3440 (*PIO_WORKITEM_ROUTINE)(
3441 /*IN*/ PDEVICE_OBJECT DeviceObject,
3442 /*IN*/ PVOID Context);
3445 struct _SHARE_ACCESS
3453 } SHARE_ACCESS, *PSHARE_ACCESS;
3456 enum _KINTERRUPT_MODE
3462 (*PKINTERRUPT_ROUTINE)( VOID );
3465 enum _KPROFILE_SOURCE
3467 ProfileAlignmentFixup,
3470 ProfileLoadInstructions,
3471 ProfilePipelineFrozen,
3472 ProfileBranchInstructions,
3473 ProfileTotalNonissues,
3474 ProfileDcacheMisses,
3475 ProfileIcacheMisses,
3477 ProfileBranchMispredictions,
3478 ProfileStoreInstructions,
3479 ProfileFpInstructions,
3480 ProfileIntegerInstructions,
3484 ProfileSpecialInstructions,
3486 ProfileIcacheIssues,
3487 ProfileDcacheAccesses,
3488 ProfileMemoryBarrierCycles,
3489 ProfileLoadLinkedIssues,
3494 enum _CREATE_FILE_TYPE
3495 { CreateFileTypeNone,
3496 CreateFileTypeNamedPipe,
3497 CreateFileTypeMailslot
3501 struct _CONFIGURATION_INFORMATION
3506 ULONG ScsiPortCount;
3508 ULONG ParallelCount;
3509 BOOLEAN AtDiskPrimaryAddressClaimed;
3510 BOOLEAN AtDiskSecondaryAddressClaimed;
3512 ULONG MediumChangerCount;
3513 } CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
3516 enum _CONFIGURATION_TYPE
3519 FloatingPointProcessor,
3529 MultiFunctionAdapter,
3543 FloppyDiskPeripheral,
3556 RealModeIrqRoutingTable,
3558 } CONFIGURATION_TYPE, *PCONFIGURATION_TYPE;
3561 (*PIO_QUERY_DEVICE_ROUTINE)(
3562 /*IN*/ PVOID Context,
3563 /*IN*/ PUNICODE_STRING PathName,
3564 /*IN*/ INTERFACE_TYPE BusType,
3565 /*IN*/ ULONG BusNumber,
3566 /*IN*/ PKEY_VALUE_FULL_INFORMATION *BusInformation,
3567 /*IN*/ CONFIGURATION_TYPE ControllerType,
3568 /*IN*/ ULONG ControllerNumber,
3569 /*IN*/ PKEY_VALUE_FULL_INFORMATION *ControllerInformation,
3570 /*IN*/ CONFIGURATION_TYPE PeripheralType,
3571 /*IN*/ ULONG PeripheralNumber,
3572 /*IN*/ PKEY_VALUE_FULL_INFORMATION *PeripheralInformation
3576 enum _WORK_QUEUE_TYPE
3577 { CriticalWorkQueue,
3579 HyperCriticalWorkQueue,
3584 (*PWORKER_THREAD_ROUTINE)(
3585 /*IN*/ PVOID Parameter);
3588 struct _WORK_QUEUE_ITEM
3590 PWORKER_THREAD_ROUTINE WorkerRoutine;
3592 } WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
3595 enum _KBUGCHECK_BUFFER_DUMP_STATE
3601 } KBUGCHECK_BUFFER_DUMP_STATE;
3604 (*PKBUGCHECK_CALLBACK_ROUTINE)(
3605 /*IN*/ PVOID Buffer,
3606 /*IN*/ ULONG Length);
3609 struct _KBUGCHECK_CALLBACK_RECORD
3611 PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine;
3617 } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
3620 * KeInitializeCallbackRecord(
3621 * IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord)
3623 #define KeInitializeCallbackRecord(CallbackRecord) \
3624 CallbackRecord->State = BufferEmpty;
3627 enum _KDPC_IMPORTANCE
3634 enum _MEMORY_CACHING_TYPE_ORIG
3635 { MmFrameBufferCached = 2
3636 } MEMORY_CACHING_TYPE_ORIG;
3639 enum _MEMORY_CACHING_TYPE
3640 { MmNonCached = FALSE,
3642 MmWriteCombined = MmFrameBufferCached,
3643 MmHardwareCoherentCached,
3644 MmNonCachedUnordered,
3647 } MEMORY_CACHING_TYPE;
3650 enum _MM_PAGE_PRIORITY
3651 { LowPagePriority = 0,
3652 NormalPagePriority = 16,
3653 HighPagePriority = 32
3657 enum _LOCK_OPERATION
3664 enum _MM_SYSTEM_SIZE
3671 struct _OBJECT_HANDLE_INFORMATION
3672 { ULONG HandleAttributes;
3673 ACCESS_MASK GrantedAccess;
3674 } OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
3678 { HANDLE UniqueProcess;
3679 HANDLE UniqueThread;
3680 } CLIENT_ID, *PCLIENT_ID;
3684 /*IN*/ PVOID StartContext);
3687 (*PCREATE_PROCESS_NOTIFY_ROUTINE)(
3688 /*IN*/ HANDLE ParentId,
3689 /*IN*/ HANDLE ProcessId,
3690 /*IN*/ BOOLEAN Create);
3693 (*PCREATE_THREAD_NOTIFY_ROUTINE)(
3694 /*IN*/ HANDLE ProcessId,
3695 /*IN*/ HANDLE ThreadId,
3696 /*IN*/ BOOLEAN Create);
3700 { _ANONYMOUS_UNION union
3702 _ANONYMOUS_STRUCT struct
3703 { ULONG ImageAddressingMode : 8;
3704 ULONG SystemModeImage : 1;
3705 ULONG ImageMappedToAllPids : 1;
3706 ULONG Reserved : 22;
3710 ULONG ImageSelector;
3712 ULONG ImageSectionNumber;
3713 } IMAGE_INFO, *PIMAGE_INFO;
3715 #define IMAGE_ADDRESSING_MODE_32BIT 3
3718 (*PLOAD_IMAGE_NOTIFY_ROUTINE)(
3719 /*IN*/ PUNICODE_STRING FullImageName,
3720 /*IN*/ HANDLE ProcessId,
3721 /*IN*/ PIMAGE_INFO ImageInfo);
3724 enum _PROCESSINFOCLASS
3725 { ProcessBasicInformation,
3730 ProcessBasePriority,
3731 ProcessRaisePriority,
3733 ProcessExceptionPort,
3735 ProcessLdtInformation,
3737 ProcessDefaultHardErrorMode,
3738 ProcessIoPortHandlers,
3739 ProcessPooledUsageAndLimits,
3740 ProcessWorkingSetWatch,
3741 ProcessUserModeIOPL,
3742 ProcessEnableAlignmentFaultFixup,
3743 ProcessPriorityClass,
3744 ProcessWx86Information,
3746 ProcessAffinityMask,
3747 ProcessPriorityBoost,
3749 ProcessSessionInformation,
3750 ProcessForegroundInformation,
3751 ProcessWow64Information,
3752 ProcessImageFileName,
3753 ProcessLUIDDeviceMapsEnabled,
3754 ProcessBreakOnTermination,
3755 ProcessDebugObjectHandle,
3757 ProcessHandleTracing,
3762 enum _THREADINFOCLASS
3763 { ThreadBasicInformation,
3768 ThreadImpersonationToken,
3769 ThreadDescriptorTableEntry,
3770 ThreadEnableAlignmentFaultFixup,
3771 ThreadEventPair_Reusable,
3772 ThreadQuerySetWin32StartAddress,
3774 ThreadPerformanceCount,
3775 ThreadAmILastThread,
3776 ThreadIdealProcessor,
3777 ThreadPriorityBoost,
3778 ThreadSetTlsArrayAddress,
3780 ThreadHideFromDebugger,
3781 ThreadBreakOnTermination,
3785 #define ES_SYSTEM_REQUIRED 0x00000001
3786 #define ES_DISPLAY_REQUIRED 0x00000002
3787 #define ES_USER_PRESENT 0x00000004
3788 #define ES_CONTINUOUS 0x80000000
3790 typedef ULONG EXECUTION_STATE;
3793 (*PREQUEST_POWER_COMPLETE)(
3794 /*IN*/ PDEVICE_OBJECT DeviceObject,
3795 /*IN*/ UCHAR MinorFunction,
3796 /*IN*/ POWER_STATE PowerState,
3797 /*IN*/ PVOID Context,
3798 /*IN*/ PIO_STATUS_BLOCK IoStatus
3802 enum _TRACE_INFORMATION_CLASS
3805 TraceEnableFlagsClass,
3806 TraceEnableLevelClass,
3807 GlobalLoggerHandleClass,
3808 EventLoggerHandleClass,
3809 AllLoggerHandlesClass,
3810 TraceHandleByNameClass
3811 } TRACE_INFORMATION_CLASS;
3813 typedef NTSTATUS DDKAPI
3814 (*PEX_CALLBACK_FUNCTION)(
3815 /*IN*/ PVOID CallbackContext,
3816 /*IN*/ PVOID Argument1,
3817 /*IN*/ PVOID Argument2
3821 /* Storage structures
3824 struct _DISK_SIGNATURE
3825 { ULONG PartitionStyle;
3826 _ANONYMOUS_UNION union
3835 } DISK_SIGNATURE, *PDISK_SIGNATURE;
3837 typedef VOID DDKFASTAPI
3838 (*PTIME_UPDATE_NOTIFY_ROUTINE)(
3839 /*IN*/ HANDLE ThreadId,
3840 /*IN*/ KPROCESSOR_MODE Mode
3843 #define DBG_STATUS_CONTROL_C 1
3844 #define DBG_STATUS_SYSRQ 2
3845 #define DBG_STATUS_BUGCHECK_FIRST 3
3846 #define DBG_STATUS_BUGCHECK_SECOND 4
3847 #define DBG_STATUS_FATAL 5
3848 #define DBG_STATUS_DEBUG_CONTROL 6
3849 #define DBG_STATUS_WORKER 7
3852 struct _PHYSICAL_MEMORY_RANGE
3853 { PHYSICAL_ADDRESS BaseAddress;
3854 LARGE_INTEGER NumberOfBytes;
3855 } PHYSICAL_MEMORY_RANGE, *PPHYSICAL_MEMORY_RANGE;
3858 (*PDRIVER_VERIFIER_THUNK_ROUTINE)( /*IN*/ PVOID Context );
3861 struct _DRIVER_VERIFIER_THUNK_PAIRS
3862 { PDRIVER_VERIFIER_THUNK_ROUTINE PristineRoutine;
3863 PDRIVER_VERIFIER_THUNK_ROUTINE NewRoutine;
3864 } DRIVER_VERIFIER_THUNK_PAIRS, *PDRIVER_VERIFIER_THUNK_PAIRS;
3866 #define DRIVER_VERIFIER_SPECIAL_POOLING 0x0001
3867 #define DRIVER_VERIFIER_FORCE_IRQL_CHECKING 0x0002
3868 #define DRIVER_VERIFIER_INJECT_ALLOCATION_FAILURES 0x0004
3869 #define DRIVER_VERIFIER_TRACK_POOL_ALLOCATIONS 0x0008
3870 #define DRIVER_VERIFIER_IO_CHECKING 0x0010
3872 #define RTL_RANGE_LIST_ADD_IF_CONFLICT 0x00000001
3873 #define RTL_RANGE_LIST_ADD_SHARED 0x00000002
3875 #define RTL_RANGE_LIST_SHARED_OK 0x00000001
3876 #define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002
3878 #define RTL_RANGE_LIST_SHARED_OK 0x00000001
3879 #define RTL_RANGE_LIST_NULL_CONFLICT_OK 0x00000002
3881 #define RTL_RANGE_LIST_MERGE_IF_CONFLICT RTL_RANGE_LIST_ADD_IF_CONFLICT
3891 } RTL_RANGE, *PRTL_RANGE;
3893 #define RTL_RANGE_SHARED 0x01
3894 #define RTL_RANGE_CONFLICT 0x02
3897 struct _RTL_RANGE_LIST
3898 { LIST_ENTRY ListHead;
3902 } RTL_RANGE_LIST, *PRTL_RANGE_LIST;
3905 struct _RANGE_LIST_ITERATOR
3906 { PLIST_ENTRY RangeListHead;
3907 PLIST_ENTRY MergedHead;
3910 } RTL_RANGE_LIST_ITERATOR, *PRTL_RANGE_LIST_ITERATOR;
3913 (*PRTL_CONFLICT_RANGE_CALLBACK)(
3914 /*IN*/ PVOID Context,
3915 /*IN*/ PRTL_RANGE Range
3918 #define HASH_STRING_ALGORITHM_DEFAULT 0
3919 #define HASH_STRING_ALGORITHM_X65599 1
3920 #define HASH_STRING_ALGORITHM_INVALID 0xffffffff
3927 CommunicationServer,
3929 SmallBusinessRestricted,
3939 (*PTIMER_APC_ROUTINE)(
3940 /*IN*/ PVOID TimerContext,
3941 /*IN*/ ULONG TimerLowValue,
3942 /*IN*/ LONG TimerHighValue
3949 (*WMI_NOTIFICATION_CALLBACK)(
3955 /* Architecture specific structures
3959 typedef ULONG PFN_NUMBER, *PPFN_NUMBER;
3961 #define PASSIVE_LEVEL 0
3964 #define DISPATCH_LEVEL 2
3965 #define SYNCH_LEVEL 27
3966 #define PROFILE_LEVEL 27
3967 #define CLOCK1_LEVEL 28
3968 #define CLOCK2_LEVEL 28
3969 #define IPI_LEVEL 29
3970 #define POWER_LEVEL 30
3971 #define HIGH_LEVEL 31
3975 { PVOID ExceptionList; /* 00 */
3976 PVOID StackBase; /* 04 */
3977 PVOID StackLimit; /* 08 */
3978 PVOID SubSystemTib; /* 0C */
3979 _ANONYMOUS_UNION union
3980 { PVOID FiberData; /* 10 */
3981 DWORD Version; /* 10 */
3983 PVOID ArbitraryUserPointer; /* 14 */
3984 struct _NT_TIB *Self; /* 18 */
3985 } KPCR_TIB, *PKPCR_TIB; /* 1C */
3987 #define PCR_MINOR_VERSION 1
3988 #define PCR_MAJOR_VERSION 1
3992 { KPCR_TIB Tib; /* 00 */
3993 struct _KPCR *Self; /* 1C */
3994 struct _KPRCB *PCRCB; /* 20 */
3995 KIRQL Irql; /* 24 */
3997 ULONG IrrActive; /* 2C */
3999 PVOID KdVersionBlock; /* 34 */
4000 PUSHORT IDT; /* 38 */
4001 PUSHORT GDT; /* 3C */
4002 struct _KTSS *TSS; /* 40 */
4003 USHORT MajorVersion; /* 44 */
4004 USHORT MinorVersion; /* 46 */
4005 KAFFINITY SetMember; /* 48 */
4006 ULONG StallScaleFactor; /* 4C */
4007 UCHAR SpareUnused; /* 50 */
4008 UCHAR Number; /* 51 */
4009 } KPCR, *PKPCR; /* 54 */
4012 struct _KFLOATING_SAVE
4013 { ULONG ControlWord;
4016 ULONG ErrorSelector;
4021 } KFLOATING_SAVE, *PKFLOATING_SAVE;
4023 #define PAGE_SIZE 0x1000
4024 #define PAGE_SHIFT 12L
4026 extern NTOSAPI PVOID *MmHighestUserAddress;
4027 extern NTOSAPI PVOID *MmSystemRangeStart;
4028 extern NTOSAPI ULONG *MmUserProbeAddress;
4030 #define MM_HIGHEST_USER_ADDRESS *MmHighestUserAddress
4031 #define MM_SYSTEM_RANGE_START *MmSystemRangeStart
4032 #define MM_USER_PROBE_ADDRESS *MmUserProbeAddress
4033 #define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
4034 #define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0C00000
4036 #define KI_USER_SHARED_DATA 0xffdf0000
4037 #define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
4039 #define EFLAG_SIGN 0x8000
4040 #define EFLAG_ZERO 0x4000
4041 #define EFLAG_SELECT (EFLAG_SIGN | EFLAG_ZERO)
4043 #define RESULT_NEGATIVE ((EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
4044 #define RESULT_ZERO ((~EFLAG_SIGN & EFLAG_ZERO) & EFLAG_SELECT)
4045 #define RESULT_POSITIVE ((~EFLAG_SIGN & ~EFLAG_ZERO) & EFLAG_SELECT)
4048 enum _INTERLOCKED_RESULT
4049 { ResultNegative = RESULT_NEGATIVE,
4050 ResultZero = RESULT_ZERO,
4051 ResultPositive = RESULT_POSITIVE
4052 } INTERLOCKED_RESULT;
4054 NTOSAPI KIRQL DDKAPI
4055 KeGetCurrentIrql( VOID );
4058 * KeGetCurrentProcessorNumber(
4061 #define KeGetCurrentProcessorNumber() \
4062 ((ULONG)KeGetCurrentKPCR()->Number)
4065 #if __USE_NTOSKRNL__
4066 /* CAREFUL: These are exported from ntoskrnl.exe as __fastcall functions,
4067 but are also exported from kernel32.dll and declared in winbase.h as
4069 #if !defined(__INTERLOCKED_DECLARED)
4070 #define __INTERLOCKED_DECLARED
4072 NTOSAPI LONG DDKFASTAPI
4073 InterlockedIncrement( /*IN*/ LONG VOLATILE *Addend );
4075 NTOSAPI LONG DDKFASTAPI
4076 InterlockedDecrement( /*IN*/ LONG VOLATILE *Addend );
4078 NTOSAPI LONG DDKFASTAPI
4079 InterlockedCompareExchange(
4080 /*IN OUT*/ PLONG VOLATILE Destination,
4081 /*IN*/ LONG Exchange,
4082 /*IN*/ LONG Comparand
4085 NTOSAPI LONG DDKFASTAPI
4086 InterlockedExchange(
4087 /*IN OUT*/ PLONG VOLATILE Target,
4091 NTOSAPI LONG DDKFASTAPI
4092 InterlockedExchangeAdd(
4093 /*IN OUT*/ PLONG VOLATILE Addend,
4098 * InterlockedExchangePointer(
4099 * IN OUT PVOID VOLATILE *Target,
4102 #define InterlockedExchangePointer(Target, Value) \
4103 ((PVOID) InterlockedExchange((PLONG) Target, (LONG) Value))
4105 /* PVOID InterlockedCompareExchangePointer(
4106 * IN OUT PVOID *Destination,
4107 * IN PVOID Exchange,
4108 * IN PVOID Comparand
4111 #define InterlockedCompareExchangePointer(Destination, Exchange, Comparand) \
4112 ((PVOID) InterlockedCompareExchange((PLONG) Destination, (LONG) Exchange, (LONG) Comparand))
4114 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
4115 PSLIST_ENTRY DDKFASTAPI
4116 InterlockedPopEntrySList( /*IN*/ PSLIST_HEADER ListHead );
4118 NTOSAPI PSLIST_ENTRY DDKFASTAPI
4119 InterlockedPushEntrySList(
4120 /*IN*/ PSLIST_HEADER ListHead,
4121 /*IN*/ PSLIST_ENTRY ListEntry
4123 #endif /* _WIN32_WINNT >= _WIN32_WINNT_WINXP */
4125 #endif /* !__INTERLOCKED_DECLARED */
4126 #endif /* __USE_NTOSKRNL__ */
4128 NTOSAPI VOID DDKFASTAPI
4129 KefAcquireSpinLockAtDpcLevel( /*IN*/ PKSPIN_LOCK SpinLock );
4131 NTOSAPI VOID DDKFASTAPI
4132 KefReleaseSpinLockFromDpcLevel( /*IN*/ PKSPIN_LOCK SpinLock );
4134 #define KeAcquireSpinLockAtDpcLevel(SpinLock) KefAcquireSpinLockAtDpcLevel(SpinLock)
4135 #define KeReleaseSpinLockFromDpcLevel(SpinLock) KefReleaseSpinLockFromDpcLevel(SpinLock)
4137 #define RtlCopyMemoryNonTemporal RtlCopyMemory
4139 #define KeGetDcacheFillSize() 1L
4143 /* Utility functions
4145 #define ARGUMENT_PRESENT(ArgumentPointer) \
4146 ((BOOLEAN) ((PVOID)ArgumentPointer != (PVOID)NULL))
4148 /* ULONG BYTE_OFFSET( IN PVOID Va )
4150 #define BYTE_OFFSET(Va) \
4151 ((ULONG) ((ULONG_PTR) (Va) & (PAGE_SIZE - 1)))
4153 /* ULONG BYTES_TO_PAGES( IN ULONG Size )
4155 #define BYTES_TO_PAGES(Size) \
4156 ((ULONG) ((ULONG_PTR) (Size) >> PAGE_SHIFT) + (((ULONG) (Size) & (PAGE_SIZE - 1)) != 0))
4158 /* PCHAR CONTAINING_RECORD(
4164 #ifndef CONTAINING_RECORD
4165 #define CONTAINING_RECORD(Address, Type, Field) \
4166 ((Type *) (((ULONG_PTR) Address) - FIELD_OFFSET(Type, Field)))
4169 /* LONG FIELD_OFFSET( IN TYPE Type, IN PCHAR Field );
4171 #ifndef FIELD_OFFSET
4172 #define FIELD_OFFSET(Type, Field) \
4173 ((LONG) (&(((Type *) 0)->Field)))
4176 /* PVOID PAGE_ALIGN( IN PVOID Va )
4178 #define PAGE_ALIGN(Va) \
4179 ((PVOID) ((ULONG_PTR)(Va) & ~(PAGE_SIZE - 1)))
4181 /* ULONG_PTR ROUND_TO_PAGES( IN ULONG_PTR Size )
4183 #define ROUND_TO_PAGES(Size) \
4184 ((ULONG_PTR) (((ULONG_PTR) Size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1)))
4188 /*IN*/ PVOID FailedAssertion,
4189 /*IN*/ PVOID FileName,
4190 /*IN*/ ULONG LineNumber,
4191 /*IN*/ PCHAR Message
4196 #define ASSERT(exp) \
4197 ((!(exp)) ? (RtlAssert( #exp, __FILE__, __LINE__, NULL ), FALSE) : TRUE)
4199 #define ASSERTMSG(msg, exp) \
4200 ((!(exp)) ? (RtlAssert( #exp, __FILE__, __LINE__, msg ), FALSE) : TRUE)
4202 #define RTL_SOFT_ASSERT(exp) \
4204 ? (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n",__FILE__,__LINE__,#exp),FALSE) \
4208 #define RTL_SOFT_ASSERTMSG(msg, exp) \
4210 ? (DbgPrint("%s(%d): Soft assertion failed\n Expression: %s\n Message: %s\n", \
4211 __FILE__, __LINE__, #exp, (msg)), FALSE) \
4215 #define RTL_VERIFY(exp) ASSERT(exp)
4216 #define RTL_VERIFYMSG(msg, exp) ASSERT(msg, exp)
4218 #define RTL_SOFT_VERIFY(exp) RTL_SOFT_ASSERT(exp)
4219 #define RTL_SOFT_VERIFYMSG(msg, exp) RTL_SOFT_ASSERTMSG(msg, exp)
4223 #define ASSERT(exp) ((VOID) 0)
4224 #define ASSERTMSG(msg, exp) ((VOID) 0)
4226 #define RTL_SOFT_ASSERT(exp) ((VOID) 0)
4227 #define RTL_SOFT_ASSERTMSG(msg, exp) ((VOID) 0)
4229 #define RTL_VERIFY(exp) ((exp) ? TRUE : FALSE)
4230 #define RTL_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
4232 #define RTL_SOFT_VERIFY(exp) ((exp) ? TRUE : FALSE)
4233 #define RTL_SOFT_VERIFYMSG(msg, exp) ((exp) ? TRUE : FALSE)
4238 /* Driver support routines
4241 /** Runtime library routines **/
4243 /* VOID InitializeListHead( IN PLIST_ENTRY ListHead )
4245 #define InitializeListHead(_ListHead) \
4246 { (_ListHead)->Flink = (_ListHead); \
4247 (_ListHead)->Blink = (_ListHead); \
4250 /* VOID InsertHeadList(
4251 * IN PLIST_ENTRY ListHead,
4252 * IN PLIST_ENTRY Entry
4255 #define InsertHeadList(_ListHead, _Entry) \
4256 { PLIST_ENTRY _OldFlink; \
4257 _OldFlink = (_ListHead)->Flink; \
4258 (_Entry)->Flink = _OldFlink; \
4259 (_Entry)->Blink = (_ListHead); \
4260 _OldFlink->Blink = (_Entry); \
4261 (_ListHead)->Flink = (_Entry); \
4264 /* VOID InsertTailList(
4265 * IN PLIST_ENTRY ListHead,
4266 * IN PLIST_ENTRY Entry
4269 #define InsertTailList(_ListHead, _Entry) \
4270 { PLIST_ENTRY _OldBlink; \
4271 _OldBlink = (_ListHead)->Blink; \
4272 (_Entry)->Flink = (_ListHead); \
4273 (_Entry)->Blink = _OldBlink; \
4274 _OldBlink->Flink = (_Entry); \
4275 (_ListHead)->Blink = (_Entry); \
4278 /* BOOLEAN IsListEmpty( IN PLIST_ENTRY ListHead )
4280 #define IsListEmpty(_ListHead) \
4281 ((_ListHead)->Flink == (_ListHead))
4283 static __inline__ PSINGLE_LIST_ENTRY
4284 PopEntryList( /*IN*/ PSINGLE_LIST_ENTRY ListHead )
4286 PSINGLE_LIST_ENTRY Entry;
4288 Entry = ListHead->Next;
4291 ListHead->Next = Entry->Next;
4296 /* VOID PushEntryList(
4297 * IN PSINGLE_LIST_ENTRY ListHead,
4298 * IN PSINGLE_LIST_ENTRY Entry
4301 #define PushEntryList(_ListHead, _Entry) \
4302 { (_Entry)->Next = (_ListHead)->Next; \
4303 (_ListHead)->Next = (_Entry); \
4306 /* VOID RemoveEntryList( IN PLIST_ENTRY Entry )
4308 #define RemoveEntryList(_Entry) \
4309 { PLIST_ENTRY _OldFlink; \
4310 PLIST_ENTRY _OldBlink; \
4311 _OldFlink = (_Entry)->Flink; \
4312 _OldBlink = (_Entry)->Blink; \
4313 _OldFlink->Blink = _OldBlink; \
4314 _OldBlink->Flink = _OldFlink; \
4315 (_Entry)->Flink = NULL; \
4316 (_Entry)->Blink = NULL; \
4319 static __inline__ PLIST_ENTRY
4320 RemoveHeadList( /*IN*/ PLIST_ENTRY ListHead )
4322 PLIST_ENTRY OldFlink;
4323 PLIST_ENTRY OldBlink;
4326 Entry = ListHead->Flink;
4327 OldFlink = ListHead->Flink->Flink;
4328 OldBlink = ListHead->Flink->Blink;
4329 OldFlink->Blink = OldBlink;
4330 OldBlink->Flink = OldFlink;
4332 if (Entry != ListHead)
4334 Entry->Flink = NULL;
4335 Entry->Blink = NULL;
4340 static __inline__ PLIST_ENTRY
4341 RemoveTailList( /*IN*/ PLIST_ENTRY ListHead )
4343 PLIST_ENTRY OldFlink;
4344 PLIST_ENTRY OldBlink;
4347 Entry = ListHead->Blink;
4348 OldFlink = ListHead->Blink->Flink;
4349 OldBlink = ListHead->Blink->Blink;
4350 OldFlink->Blink = OldBlink;
4351 OldBlink->Flink = OldFlink;
4353 if (Entry != ListHead)
4355 Entry->Flink = NULL;
4356 Entry->Blink = NULL;
4361 /* USHORT QueryDepthSList( IN PSLIST_HEADER SListHead )
4363 #define QueryDepthSList(_SListHead) \
4364 ((USHORT) ((_SListHead)->Alignment & 0xffff))
4366 #define InterlockedFlushSList(ListHead) ExInterlockedFlushSList(ListHead)
4368 NTOSAPI ULONG DDKAPI
4369 RtlAnsiStringToUnicodeSize( /*IN*/ PANSI_STRING AnsiString );
4371 NTOSAPI NTSTATUS DDKAPI
4373 /*IN OUT*/ PRTL_RANGE_LIST RangeList,
4374 /*IN*/ ULONGLONG Start,
4375 /*IN*/ ULONGLONG End,
4376 /*IN*/ UCHAR Attributes,
4378 /*IN*/ PVOID UserData /*OPTIONAL*/,
4379 /*IN*/ PVOID Owner /*OPTIONAL*/
4382 NTOSAPI NTSTATUS DDKAPI
4383 RtlAnsiStringToUnicodeString(
4384 /*IN OUT*/ PUNICODE_STRING DestinationString,
4385 /*IN*/ PANSI_STRING SourceString,
4386 /*IN*/ BOOLEAN AllocateDestinationString
4389 NTOSAPI NTSTATUS DDKAPI
4390 RtlAppendUnicodeStringToString(
4391 /*IN OUT*/ PUNICODE_STRING Destination,
4392 /*IN*/ PUNICODE_STRING Source
4395 NTOSAPI NTSTATUS DDKAPI
4396 RtlAppendUnicodeToString(
4397 /*IN OUT*/ PUNICODE_STRING Destination,
4398 /*IN*/ PCWSTR Source
4401 NTOSAPI BOOLEAN DDKAPI
4403 /*IN*/ PRTL_BITMAP BitMapHeader,
4404 /*IN*/ ULONG StartingIndex,
4408 NTOSAPI BOOLEAN DDKAPI
4410 /*IN*/ PRTL_BITMAP BitMapHeader,
4411 /*IN*/ ULONG StartingIndex,
4415 NTOSAPI NTSTATUS DDKAPI
4418 /*IN*/ ULONG Base /*OPTIONAL*/,
4419 /*IN OUT*/ PULONG Value
4422 NTOSAPI ULONG DDKAPI
4424 /*IN*/ PRTL_BITMAP BitMapHeader,
4425 /*IN*/ ULONG BitPosition
4428 NTOSAPI NTSTATUS DDKAPI
4429 RtlCheckRegistryKey(
4430 /*IN*/ ULONG RelativeTo,
4435 RtlClearAllBits( /*IN*/ PRTL_BITMAP BitMapHeader );
4438 RtlClearBit( PRTL_BITMAP BitMapHeader, ULONG BitNumber );
4442 /*IN*/ PRTL_BITMAP BitMapHeader,
4443 /*IN*/ ULONG StartingIndex,
4444 /*IN*/ ULONG NumberToClear
4447 NTOSAPI SIZE_T DDKAPI
4449 /*IN*/ CONST VOID *Source1,
4450 /*IN*/ CONST VOID *Source2,
4451 /*IN*/ SIZE_T Length
4456 /*IN*/ PSTRING String1,
4457 /*IN*/ PSTRING String2,
4458 BOOLEAN CaseInSensitive
4462 RtlCompareUnicodeString(
4463 /*IN*/ PUNICODE_STRING String1,
4464 /*IN*/ PUNICODE_STRING String2,
4465 /*IN*/ BOOLEAN CaseInSensitive
4468 NTOSAPI LARGE_INTEGER DDKAPI
4469 RtlConvertLongToLargeInteger( /*IN*/ LONG SignedInteger );
4472 RtlConvertLongToLuid( /*IN*/ LONG Long );
4474 NTOSAPI LARGE_INTEGER DDKAPI
4475 RtlConvertUlongToLargeInteger( /*IN*/ ULONG UnsignedInteger );
4478 RtlConvertUlongToLuid( ULONG Ulong );
4480 /* VOID RtlCopyMemory(
4481 * IN VOID UNALIGNED *Destination,
4482 * IN CONST VOID UNALIGNED *Source,
4486 #ifndef RtlCopyMemory
4487 #define RtlCopyMemory(Destination, Source, Length) \
4488 memcpy(Destination, Source, Length)
4491 #ifndef RtlCopyBytes
4492 #define RtlCopyBytes RtlCopyMemory
4497 /*IN*/ VOID UNALIGNED *Destination,
4498 /*IN*/ CONST VOID UNALIGNED *Source,
4502 NTOSAPI NTSTATUS DDKAPI
4504 /*OUT*/ PRTL_RANGE_LIST CopyRangeList,
4505 /*IN*/ PRTL_RANGE_LIST RangeList
4510 /*IN OUT*/ PSTRING DestinationString,
4511 /*IN*/ PSTRING SourceString /*OPTIONAL*/
4515 RtlCopyUnicodeString(
4516 /*IN OUT*/ PUNICODE_STRING DestinationString,
4517 /*IN*/ PUNICODE_STRING SourceString
4520 NTOSAPI NTSTATUS DDKAPI
4521 RtlCreateRegistryKey( /*IN*/ ULONG RelativeTo, /*IN*/ PWSTR Path );
4523 NTOSAPI NTSTATUS DDKAPI
4524 RtlCreateSecurityDescriptor(
4525 /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
4526 /*IN*/ ULONG Revision
4529 NTOSAPI NTSTATUS DDKAPI
4530 RtlDeleteOwnersRanges(
4531 /*IN OUT*/ PRTL_RANGE_LIST RangeList,
4535 NTOSAPI NTSTATUS DDKAPI
4537 /*IN OUT*/ PRTL_RANGE_LIST RangeList,
4538 /*IN*/ ULONGLONG Start,
4539 /*IN*/ ULONGLONG End,
4543 NTOSAPI NTSTATUS DDKAPI
4544 RtlDeleteRegistryValue(
4545 /*IN*/ ULONG RelativeTo,
4547 /*IN*/ PCWSTR ValueName
4551 RtlDosPathNameToNtPathName_U(
4552 /*IN*/ PCWSTR DosPathName,
4553 /*OUT*/ PUNICODE_STRING NtPathName,
4554 /*OUT*/ PCWSTR *NtFileNamePart,
4555 /*OUT*/ VOID *DirectoryInfo
4558 /* BOOLEAN RtlEqualLuid(
4563 #define RtlEqualLuid(_Luid1, _Luid2) \
4564 ((Luid1.LowPart == Luid2.LowPart) && (Luid1.HighPart == Luid2.HighPart))
4566 /* ULONG RtlEqualMemory(
4567 * IN VOID UNALIGNED *Destination,
4568 * IN CONST VOID UNALIGNED *Source,
4572 #define RtlEqualMemory(Destination, Source, Length) (!memcmp(Destination, Source, Length))
4574 NTOSAPI BOOLEAN DDKAPI
4576 /*IN*/ PSTRING String1,
4577 /*IN*/ PSTRING String2,
4578 /*IN*/ BOOLEAN CaseInSensitive
4581 NTOSAPI BOOLEAN DDKAPI
4582 RtlEqualUnicodeString(
4583 /*IN*/ CONST UNICODE_STRING *String1,
4584 /*IN*/ CONST UNICODE_STRING *String2,
4585 /*IN*/ BOOLEAN CaseInSensitive
4588 /* VOID RtlFillMemory(
4589 * IN VOID UNALIGNED *Destination,
4594 #ifndef RtlFillMemory
4595 #define RtlFillMemory(Destination, Length, Fill) \
4596 memset(Destination, Fill, Length)
4599 #ifndef RtlFillBytes
4600 #define RtlFillBytes RtlFillMemory
4603 NTOSAPI ULONG DDKAPI
4605 /*IN*/ PRTL_BITMAP BitMapHeader,
4606 /*IN*/ ULONG NumberToFind,
4607 /*IN*/ ULONG HintIndex
4610 NTOSAPI ULONG DDKAPI
4611 RtlFindClearBitsAndSet(
4612 /*IN*/ PRTL_BITMAP BitMapHeader,
4613 /*IN*/ ULONG NumberToFind,
4614 /*IN*/ ULONG HintIndex
4617 NTOSAPI ULONG DDKAPI
4619 /*IN*/ PRTL_BITMAP BitMapHeader,
4620 /*OUT*/ PRTL_BITMAP_RUN RunArray,
4621 /*IN*/ ULONG SizeOfRunArray,
4622 /*IN*/ BOOLEAN LocateLongestRuns
4625 NTOSAPI ULONG DDKAPI
4626 RtlFindFirstRunClear(
4627 /*IN*/ PRTL_BITMAP BitMapHeader,
4628 /*OUT*/ PULONG StartingIndex
4631 NTOSAPI ULONG DDKAPI
4632 RtlFindLastBackwardRunClear(
4633 /*IN*/ PRTL_BITMAP BitMapHeader,
4634 /*IN*/ ULONG FromIndex,
4635 /*OUT*/ PULONG StartingRunIndex
4638 NTOSAPI CCHAR DDKAPI
4639 RtlFindLeastSignificantBit( /*IN*/ ULONGLONG Set );
4641 NTOSAPI ULONG DDKAPI
4642 RtlFindLongestRunClear(
4643 /*IN*/ PRTL_BITMAP BitMapHeader,
4644 /*OUT*/ PULONG StartingIndex
4647 NTOSAPI CCHAR DDKAPI
4648 RtlFindMostSignificantBit( /*IN*/ ULONGLONG Set );
4650 NTOSAPI ULONG DDKAPI
4651 RtlFindNextForwardRunClear(
4652 /*IN*/ PRTL_BITMAP BitMapHeader,
4653 /*IN*/ ULONG FromIndex,
4654 /*OUT*/ PULONG StartingRunIndex
4657 NTOSAPI NTSTATUS DDKAPI
4659 /*IN*/ PRTL_RANGE_LIST RangeList,
4660 /*IN*/ ULONGLONG Minimum,
4661 /*IN*/ ULONGLONG Maximum,
4662 /*IN*/ ULONG Length,
4663 /*IN*/ ULONG Alignment,
4665 /*IN*/ UCHAR AttributeAvailableMask,
4666 /*IN*/ PVOID Context /*OPTIONAL*/,
4667 /*IN*/ PRTL_CONFLICT_RANGE_CALLBACK Callback /*OPTIONAL*/,
4668 /*OUT*/ PULONGLONG Start
4671 NTOSAPI ULONG DDKAPI
4673 /*IN*/ PRTL_BITMAP BitMapHeader,
4674 /*IN*/ ULONG NumberToFind,
4675 /*IN*/ ULONG HintIndex
4678 NTOSAPI ULONG DDKAPI
4679 RtlFindSetBitsAndClear(
4680 /*IN*/ PRTL_BITMAP BitMapHeader,
4681 /*IN*/ ULONG NumberToFind,
4682 /*IN*/ ULONG HintIndex
4686 RtlFreeAnsiString( /*IN*/ PANSI_STRING AnsiString );
4689 RtlFreeRangeList( /*IN*/ PRTL_RANGE_LIST RangeList );
4692 RtlFreeUnicodeString( /*IN*/ PUNICODE_STRING UnicodeString );
4695 RtlGetCallersAddress(
4696 /*OUT*/ PVOID *CallersAddress,
4697 /*OUT*/ PVOID *CallersCaller
4700 NTOSAPI NTSTATUS DDKAPI
4701 RtlGetVersion( /*IN OUT*/ PRTL_OSVERSIONINFOW lpVersionInformation );
4703 NTOSAPI NTSTATUS DDKAPI
4705 /*IN*/ PRTL_RANGE_LIST RangeList,
4706 /*OUT*/ PRTL_RANGE_LIST_ITERATOR Iterator,
4707 /*OUT*/ PRTL_RANGE *Range
4710 NTOSAPI NTSTATUS DDKAPI
4712 /*IN OUT*/ PRTL_RANGE_LIST_ITERATOR Iterator,
4713 /*OUT*/ PRTL_RANGE *Range,
4714 /*IN*/ BOOLEAN MoveForwards
4717 #define FOR_ALL_RANGES(RangeList, Iterator, Current) \
4718 for (RtlGetFirstRange((RangeList), (Iterator), &(Current)); \
4719 (Current) != NULL; \
4720 RtlGetNextRange((Iterator), &(Current), TRUE))
4722 #define FOR_ALL_RANGES_BACKWARDS(RangeList, Iterator, Current) \
4723 for (RtlGetLastRange((RangeList), (Iterator), &(Current)); \
4724 (Current) != NULL; \
4725 RtlGetNextRange((Iterator), &(Current), FALSE))
4727 NTOSAPI NTSTATUS DDKAPI
4729 /*IN*/ PUNICODE_STRING GuidString,
4733 NTOSAPI NTSTATUS DDKAPI
4734 RtlHashUnicodeString(
4735 /*IN*/ CONST UNICODE_STRING *String,
4736 /*IN*/ BOOLEAN CaseInSensitive,
4737 /*IN*/ ULONG HashAlgorithm,
4738 /*OUT*/ PULONG HashValue
4743 /*IN OUT*/ PANSI_STRING DestinationString,
4744 /*IN*/ PCSZ SourceString
4748 RtlInitializeBitMap(
4749 /*IN*/ PRTL_BITMAP BitMapHeader,
4750 /*IN*/ PULONG BitMapBuffer,
4751 /*IN*/ ULONG SizeOfBitMap
4755 RtlInitializeRangeList( /*IN OUT*/ PRTL_RANGE_LIST RangeList );
4759 /*IN OUT*/ PSTRING DestinationString,
4760 /*IN*/ PCSZ SourceString
4764 RtlInitUnicodeString(
4765 /*IN OUT*/ PUNICODE_STRING DestinationString,
4766 /*IN*/ PCWSTR SourceString
4769 NTOSAPI NTSTATUS DDKAPI
4770 RtlInt64ToUnicodeString(
4771 /*IN*/ ULONGLONG Value,
4772 /*IN*/ ULONG Base /*OPTIONAL*/,
4773 /*IN OUT*/ PUNICODE_STRING String
4776 NTOSAPI NTSTATUS DDKAPI
4777 RtlIntegerToUnicodeString(
4779 /*IN*/ ULONG Base /*OPTIONAL*/,
4780 /*IN OUT*/ PUNICODE_STRING String
4783 NTOSAPI NTSTATUS DDKAPI
4784 RtlIntPtrToUnicodeString(
4786 ULONG Base /*OPTIONAL*/,
4787 PUNICODE_STRING String
4790 NTOSAPI NTSTATUS DDKAPI
4792 /*OUT*/ PRTL_RANGE_LIST InvertedRangeList,
4793 /*IN*/ PRTL_RANGE_LIST RangeList
4796 NTOSAPI NTSTATUS DDKAPI
4797 RtlIsRangeAvailable(
4798 /*IN*/ PRTL_RANGE_LIST RangeList,
4799 /*IN*/ ULONGLONG Start,
4800 /*IN*/ ULONGLONG End,
4802 /*IN*/ UCHAR AttributeAvailableMask,
4803 /*IN*/ PVOID Context /*OPTIONAL*/,
4804 /*IN*/ PRTL_CONFLICT_RANGE_CALLBACK Callback /*OPTIONAL*/,
4805 /*OUT*/ PBOOLEAN Available
4808 /* BOOLEAN RtlIsZeroLuid( IN PLUID L1 )
4810 #define RtlIsZeroLuid(_L1) \
4811 ((BOOLEAN) ((!(_L1)->LowPart) && (!(_L1)->HighPart)))
4813 NTOSAPI ULONG DDKAPI
4814 RtlLengthSecurityDescriptor( /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor );
4818 /*IN OUT*/ PACCESS_MASK AccessMask,
4819 /*IN*/ PGENERIC_MAPPING GenericMapping
4822 NTOSAPI NTSTATUS DDKAPI
4824 /*OUT*/ PRTL_RANGE_LIST MergedRangeList,
4825 /*IN*/ PRTL_RANGE_LIST RangeList1,
4826 /*IN*/ PRTL_RANGE_LIST RangeList2,
4830 /* VOID RtlMoveMemory(
4831 * IN VOID UNALIGNED *Destination,
4832 * IN CONST VOID UNALIGNED *Source,
4836 #define RtlMoveMemory memmove
4838 NTOSAPI ULONG DDKAPI
4839 RtlNumberOfClearBits( /*IN*/ PRTL_BITMAP BitMapHeader );
4841 NTOSAPI ULONG DDKAPI
4842 RtlNumberOfSetBits( /*IN*/ PRTL_BITMAP BitMapHeader );
4844 NTOSAPI VOID DDKFASTAPI
4845 RtlPrefetchMemoryNonTemporal( /*IN*/ PVOID Source, /*IN*/ SIZE_T Length );
4847 NTOSAPI BOOLEAN DDKAPI
4848 RtlPrefixUnicodeString(
4849 /*IN*/ PUNICODE_STRING String1,
4850 /*IN*/ PUNICODE_STRING String2,
4851 /*IN*/ BOOLEAN CaseInSensitive
4854 NTOSAPI NTSTATUS DDKAPI
4855 RtlQueryRegistryValues(
4856 /*IN*/ ULONG RelativeTo,
4858 /*IN*/ PRTL_QUERY_REGISTRY_TABLE QueryTable,
4859 /*IN*/ PVOID Context,
4860 /*IN*/ PVOID Environment /*OPTIONAL*/
4865 /*IN OUT*/ PULONG DestinationAddress,
4866 /*IN*/ PULONG SourceAddress
4871 /*IN OUT*/ PUSHORT DestinationAddress,
4872 /*IN*/ PUSHORT SourceAddress
4876 RtlSetAllBits( /*IN*/ PRTL_BITMAP BitMapHeader );
4879 RtlSetBit( PRTL_BITMAP BitMapHeader, ULONG BitNumber );
4883 /*IN*/ PRTL_BITMAP BitMapHeader,
4884 /*IN*/ ULONG StartingIndex,
4885 /*IN*/ ULONG NumberToSet
4888 NTOSAPI NTSTATUS DDKAPI
4889 RtlSetDaclSecurityDescriptor(
4890 /*IN OUT*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
4891 /*IN*/ BOOLEAN DaclPresent,
4892 /*IN*/ PACL Dacl /*OPTIONAL*/,
4893 /*IN*/ BOOLEAN DaclDefaulted /*OPTIONAL*/
4897 RtlStoreUlong( /*IN*/ PULONG Address, /*IN*/ ULONG Value );
4900 RtlStoreUlonglong( /*IN OUT*/ PULONGLONG Address, ULONGLONG Value );
4903 RtlStoreUlongPtr( /*IN OUT*/ PULONG_PTR Address, /*IN*/ ULONG_PTR Value );
4906 RtlStoreUshort( /*IN*/ PUSHORT Address, /*IN*/ USHORT Value );
4908 NTOSAPI NTSTATUS DDKAPI
4909 RtlStringFromGUID( /*IN*/ REFGUID Guid, /*OUT*/ PUNICODE_STRING GuidString );
4911 #define RtlStringCbCopyA(dst, dst_len, src) strncpy(dst, src, dst_len)
\r
4912 #define RtlStringCbPrintfA(args...) snprintf(args)
\r
4913 #define RtlStringCbVPrintfA(args...) vsnprintf(args)
\r
4915 NTOSAPI BOOLEAN DDKAPI
4916 RtlTestBit( /*IN*/ PRTL_BITMAP BitMapHeader, /*IN*/ ULONG BitNumber );
4918 NTOSAPI BOOLEAN DDKAPI
4919 RtlTimeFieldsToTime(
4920 /*IN*/ PTIME_FIELDS TimeFields,
4921 /*IN*/ PLARGE_INTEGER Time
4925 RtlTimeToTimeFields(
4926 /*IN*/ PLARGE_INTEGER Time,
4927 /*IN*/ PTIME_FIELDS TimeFields
4930 NTOSAPI ULONG DDKFASTAPI
4931 RtlUlongByteSwap( /*IN*/ ULONG Source );
4933 NTOSAPI ULONGLONG DDKFASTAPI
4934 RtlUlonglongByteSwap( /*IN*/ ULONGLONG Source );
4936 NTOSAPI ULONG DDKAPI
4937 RtlUnicodeStringToAnsiSize( /*IN*/ PUNICODE_STRING UnicodeString );
4939 NTOSAPI NTSTATUS DDKAPI
4940 RtlUnicodeStringToAnsiString(
4941 /*IN OUT*/ PANSI_STRING DestinationString,
4942 /*IN*/ PUNICODE_STRING SourceString,
4943 /*IN*/ BOOLEAN AllocateDestinationString
4946 NTOSAPI NTSTATUS DDKAPI
4947 RtlUnicodeStringToInteger(
4948 /*IN*/ PUNICODE_STRING String,
4949 /*IN*/ ULONG Base /*OPTIONAL*/,
4950 /*OUT*/ PULONG Value
4953 NTOSAPI WCHAR DDKAPI
4954 RtlUpcaseUnicodeChar( /*IN*/ WCHAR SourceCharacter );
4956 NTOSAPI NTSTATUS DDKAPI
4957 RtlUpcaseUnicodeString(
4958 /*IN OUT*/ PUNICODE_STRING DestinationString /*OPTIONAL*/,
4959 /*IN*/ PCUNICODE_STRING SourceString,
4960 /*IN*/ BOOLEAN AllocateDestinationString
4964 RtlUpperChar( /*IN*/ CHAR Character );
4968 /*IN OUT*/ PSTRING DestinationString,
4969 /*IN*/ PSTRING SourceString
4972 NTOSAPI USHORT DDKFASTAPI
4973 RtlUshortByteSwap( /*IN*/ USHORT Source );
4975 NTOSAPI BOOLEAN DDKAPI
4976 RtlValidRelativeSecurityDescriptor(
4977 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptorInput,
4978 /*IN*/ ULONG SecurityDescriptorLength,
4979 /*IN*/ SECURITY_INFORMATION RequiredInformation
4982 NTOSAPI BOOLEAN DDKAPI
4983 RtlValidSecurityDescriptor( /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor );
4985 NTOSAPI NTSTATUS DDKAPI
4986 RtlVerifyVersionInfo(
4987 /*IN*/ PRTL_OSVERSIONINFOEXW VersionInfo,
4988 /*IN*/ ULONG TypeMask,
4989 /*IN*/ ULONGLONG ConditionMask
4992 NTOSAPI NTSTATUS DDKAPI
4993 RtlVolumeDeviceToDosName(
4994 /*IN*/ PVOID VolumeDeviceObject,
4995 /*OUT*/ PUNICODE_STRING DosName
4998 NTOSAPI ULONG DDKAPI
5000 /*OUT*/ PVOID *Callers,
5005 NTOSAPI NTSTATUS DDKAPI
5006 RtlWriteRegistryValue(
5007 /*IN*/ ULONG RelativeTo,
5009 /*IN*/ PCWSTR ValueName,
5010 /*IN*/ ULONG ValueType,
5011 /*IN*/ PVOID ValueData,
5012 /*IN*/ ULONG ValueLength
5015 NTOSAPI ULONG DDKAPI
5016 RtlxUnicodeStringToAnsiSize( /*IN*/ PUNICODE_STRING UnicodeString );
5018 #ifndef RtlZeroMemory
5019 /* VOID RtlZeroMemory(
5020 * IN VOID UNALIGNED *Destination,
5024 #define RtlZeroMemory(Destination, Length) \
5025 memset(Destination, 0, Length)
5028 #ifndef RtlZeroBytes
5029 #define RtlZeroBytes RtlZeroMemory
5033 /** Executive support routines **/
5035 NTOSAPI VOID DDKFASTAPI
5036 ExAcquireFastMutex( /*IN*/ PFAST_MUTEX FastMutex );
5038 NTOSAPI VOID DDKFASTAPI
5039 ExAcquireFastMutexUnsafe( /*IN*/ PFAST_MUTEX FastMutex );
5041 NTOSAPI BOOLEAN DDKAPI
5042 ExAcquireResourceExclusiveLite(
5043 /*IN*/ PERESOURCE Resource,
5047 NTOSAPI BOOLEAN DDKAPI
5048 ExAcquireResourceSharedLite( /*IN*/ PERESOURCE Resource, /*IN*/ BOOLEAN Wait );
5050 NTOSAPI BOOLEAN DDKAPI
5051 ExAcquireSharedStarveExclusive(
5052 /*IN*/ PERESOURCE Resource,
5056 NTOSAPI BOOLEAN DDKAPI
5057 ExAcquireSharedWaitForExclusive(
5058 /*IN*/ PERESOURCE Resource,
5062 NTOSAPI PSINGLE_LIST_ENTRY DDKFASTAPI
5063 ExInterlockedPopEntrySList(
5064 /*IN*/ PSLIST_HEADER ListHead,
5065 /*IN*/ PKSPIN_LOCK Lock
5068 NTOSAPI PSINGLE_LIST_ENTRY DDKFASTAPI
5069 ExInterlockedPushEntrySList(
5070 /*IN*/ PSLIST_HEADER ListHead,
5071 /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
5072 /*IN*/ PKSPIN_LOCK Lock
5075 #if (__USE_NTOSKRNL__) && (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
5076 #define ExInterlockedPopEntrySList(_ListHead, _Lock) \
5077 InterlockedPopEntrySList(_ListHead)
5079 #define ExInterlockedPushEntrySList(_ListHead, _ListEntry, _Lock) \
5080 InterlockedPushEntrySList(_ListHead, _ListEntry)
5081 #endif /* __USE_NTOSKRNL__ */
5083 #define ExQueryDepthSList(ListHead) QueryDepthSList(ListHead)
5085 static __inline__ PVOID
5086 ExAllocateFromNPagedLookasideList( /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside )
5090 Lookaside->TotalAllocates++;
5091 Entry = ExInterlockedPopEntrySList (&Lookaside->ListHead, &Lookaside->Obsoleted);
5093 { Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++;
5094 Entry = (Lookaside->Allocate)(Lookaside->Type, Lookaside->Size, Lookaside->Tag);
5099 static __inline__ VOID
5100 ExFreeToNPagedLookasideList(
5101 /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside,
5104 Lookaside->TotalFrees++;
5105 if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth)
5106 { Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++;
5107 (Lookaside->Free)(Entry);
5110 { ExInterlockedPushEntrySList(
5111 &Lookaside->ListHead, (PSLIST_ENTRY)Entry, &Lookaside->Obsoleted
5116 #if (__USE_NTOSKRNL__) && (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
5118 static __inline__ PVOID
5119 ExAllocateFromPagedLookasideList(
5120 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside)
5124 Lookaside->TotalAllocates++;
5125 Entry = InterlockedPopEntrySList(&Lookaside->ListHead);
5127 { Lookaside->_DDK_DUMMYUNION_MEMBER(AllocateMisses)++;
5128 Entry = (Lookaside->Allocate)(Lookaside->Type, Lookaside->Size, Lookaside->Tag);
5133 static __inline__ VOID
5134 ExFreeToPagedLookasideList(
5135 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside,
5138 Lookaside->TotalFrees++;
5139 if (ExQueryDepthSList(&Lookaside->ListHead) >= Lookaside->Depth)
5140 { Lookaside->_DDK_DUMMYUNION_N_MEMBER(2,FreeMisses)++;
5141 (Lookaside->Free)(Entry);
5144 { InterlockedPushEntrySList(&Lookaside->ListHead, (PSLIST_ENTRY)Entry);
5148 #else /* (__USE_NTOSKRNL__) && (_WIN32_WINNT >= _WIN32_WINNT_WINXP) */
5150 NTOSAPI PVOID DDKAPI
5151 ExAllocateFromPagedLookasideList( /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside );
5154 ExFreeToPagedLookasideList(
5155 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside,
5159 #endif /* (__USE_NTOSKRNL__) && (_WIN32_WINNT >= _WIN32_WINNT_WINXP) */
5161 NTOSAPI PVOID DDKAPI
5162 ExAllocatePoolWithQuotaTag(
5163 /*IN*/ POOL_TYPE PoolType,
5164 /*IN*/ SIZE_T NumberOfBytes,
5168 NTOSAPI PVOID DDKAPI
5169 ExAllocatePoolWithTag(
5170 /*IN*/ POOL_TYPE PoolType,
5171 /*IN*/ SIZE_T NumberOfBytes,
5177 #define ExAllocatePoolWithQuota(p,n) ExAllocatePoolWithQuotaTag(p,n,' kdD')
5178 #define ExAllocatePool(p,n) ExAllocatePoolWithTag(p,n,' kdD')
5180 #else /* !POOL_TAGGING */
5182 NTOSAPI PVOID DDKAPI
5183 ExAllocatePool( /*IN*/ POOL_TYPE PoolType, /*IN*/ SIZE_T NumberOfBytes );
5185 NTOSAPI PVOID DDKAPI
5186 ExAllocatePoolWithQuota( /*IN*/ POOL_TYPE PoolType, /*IN*/ SIZE_T NumberOfBytes );
5188 #endif /* POOL_TAGGING */
5190 NTOSAPI PVOID DDKAPI
5191 ExAllocatePoolWithTagPriority(
5192 /*IN*/ POOL_TYPE PoolType,
5193 /*IN*/ SIZE_T NumberOfBytes,
5195 /*IN*/ EX_POOL_PRIORITY Priority
5199 ExConvertExclusiveToSharedLite( /*IN*/ PERESOURCE Resource );
5201 NTOSAPI NTSTATUS DDKAPI
5203 /*OUT*/ PCALLBACK_OBJECT *CallbackObject,
5204 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
5205 /*IN*/ BOOLEAN Create,
5206 /*IN*/ BOOLEAN AllowMultipleCallbacks
5210 ExDeleteNPagedLookasideList( /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside );
5213 ExDeletePagedLookasideList( /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside );
5215 NTOSAPI NTSTATUS DDKAPI
5216 ExDeleteResourceLite( /*IN*/ PERESOURCE Resource );
5219 ExFreePool( /*IN*/ PVOID P );
5221 #define PROTECTED_POOL 0x80000000
5224 #define ExFreePool(P) ExFreePoolWithTag(P, 0)
5228 ExFreePoolWithTag( /*IN*/ PVOID P, /*IN*/ ULONG Tag );
5230 /* ERESOURCE_THREAD ExGetCurrentResourceThread( VOID );
5232 #define ExGetCurrentResourceThread() ((ERESOURCE_THREAD) PsGetCurrentThread())
5234 NTOSAPI ULONG DDKAPI
5235 ExGetExclusiveWaiterCount( /*IN*/ PERESOURCE Resource );
5237 NTOSAPI KPROCESSOR_MODE DDKAPI
5238 ExGetPreviousMode( VOID );
5240 NTOSAPI ULONG DDKAPI
5241 ExGetSharedWaiterCount( /*IN*/ PERESOURCE Resource );
5245 /*IN*/ PRKEVENT Event,
5246 /*IN*/ EVENT_TYPE Type,
5247 /*IN*/ BOOLEAN State);
5249 /* VOID DDKAPI ExInitializeFastMutex( IN PFAST_MUTEX FastMutex )
5251 #define ExInitializeFastMutex(_FastMutex) \
5252 { (_FastMutex)->Count = 1; \
5253 (_FastMutex)->Owner = NULL; \
5254 (_FastMutex)->Contention = 0; \
5255 KeInitializeEvent(&(_FastMutex)->Event, SynchronizationEvent, FALSE); \
5259 ExInitializeNPagedLookasideList(
5260 /*IN*/ PNPAGED_LOOKASIDE_LIST Lookaside,
5261 /*IN*/ PALLOCATE_FUNCTION Allocate /*OPTIONAL*/,
5262 /*IN*/ PFREE_FUNCTION Free /*OPTIONAL*/,
5270 ExInitializePagedLookasideList(
5271 /*IN*/ PPAGED_LOOKASIDE_LIST Lookaside,
5272 /*IN*/ PALLOCATE_FUNCTION Allocate /*OPTIONAL*/,
5273 /*IN*/ PFREE_FUNCTION Free /*OPTIONAL*/,
5280 NTOSAPI NTSTATUS DDKAPI
5281 ExInitializeResourceLite( /*IN*/ PERESOURCE Resource );
5283 /* VOID InitializeSListHead( IN PSLIST_HEADER SListHead )
5285 #define InitializeSListHead(_SListHead) \
5286 (_SListHead)->Alignment = 0
5288 #define ExInitializeSListHead InitializeSListHead
5290 NTOSAPI LARGE_INTEGER DDKAPI
5291 ExInterlockedAddLargeInteger(
5292 /*IN*/ PLARGE_INTEGER Addend,
5293 /*IN*/ LARGE_INTEGER Increment,
5294 /*IN*/ PKSPIN_LOCK Lock
5297 NTOSAPI VOID DDKFASTAPI
5298 ExInterlockedAddLargeStatistic(
5299 /*IN*/ PLARGE_INTEGER Addend,
5300 /*IN*/ ULONG Increment
5303 NTOSAPI ULONG DDKAPI
5304 ExInterlockedAddUlong(
5305 /*IN*/ PULONG Addend,
5306 /*IN*/ ULONG Increment,
5310 NTOSAPI ULONG DDKFASTAPI
5311 ExfInterlockedAddUlong(
5312 /*IN*/ PULONG Addend,
5313 /*IN*/ ULONG Increment,
5317 NTOSAPI LONGLONG DDKFASTAPI
5318 ExInterlockedCompareExchange64(
5319 /*IN OUT*/ PLONGLONG Destination,
5320 /*IN*/ PLONGLONG Exchange,
5321 /*IN*/ PLONGLONG Comparand,
5322 /*IN*/ PKSPIN_LOCK Lock
5325 NTOSAPI PSINGLE_LIST_ENTRY DDKFASTAPI
5326 ExInterlockedFlushSList( /*IN*/ PSLIST_HEADER ListHead );
5328 NTOSAPI PLIST_ENTRY DDKAPI
5329 ExInterlockedInsertHeadList(
5330 /*IN*/ PLIST_ENTRY ListHead,
5331 /*IN*/ PLIST_ENTRY ListEntry,
5332 /*IN*/ PKSPIN_LOCK Lock
5335 NTOSAPI PLIST_ENTRY DDKFASTAPI
5336 ExfInterlockedInsertHeadList(
5337 /*IN*/ PLIST_ENTRY ListHead,
5338 /*IN*/ PLIST_ENTRY ListEntry,
5339 /*IN*/ PKSPIN_LOCK Lock
5342 NTOSAPI PLIST_ENTRY DDKAPI
5343 ExInterlockedInsertTailList(
5344 /*IN*/ PLIST_ENTRY ListHead,
5345 /*IN*/ PLIST_ENTRY ListEntry,
5346 /*IN*/ PKSPIN_LOCK Lock
5349 NTOSAPI PLIST_ENTRY DDKFASTAPI
5350 ExfInterlockedInsertTailList(
5351 /*IN*/ PLIST_ENTRY ListHead,
5352 /*IN*/ PLIST_ENTRY ListEntry,
5353 /*IN*/ PKSPIN_LOCK Lock
5356 NTOSAPI PSINGLE_LIST_ENTRY DDKAPI
5357 ExInterlockedPopEntryList(
5358 /*IN*/ PSINGLE_LIST_ENTRY ListHead,
5359 /*IN*/ PKSPIN_LOCK Lock
5362 NTOSAPI PSINGLE_LIST_ENTRY DDKFASTAPI
5363 ExfInterlockedPopEntryList(
5364 /*IN*/ PSINGLE_LIST_ENTRY ListHead,
5365 /*IN*/ PKSPIN_LOCK Lock
5368 NTOSAPI PSINGLE_LIST_ENTRY DDKAPI
5369 ExInterlockedPushEntryList(
5370 /*IN*/ PSINGLE_LIST_ENTRY ListHead,
5371 /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
5372 /*IN*/ PKSPIN_LOCK Lock
5375 NTOSAPI PSINGLE_LIST_ENTRY DDKFASTAPI
5376 ExfInterlockedPushEntryList(
5377 /*IN*/ PSINGLE_LIST_ENTRY ListHead,
5378 /*IN*/ PSINGLE_LIST_ENTRY ListEntry,
5379 /*IN*/ PKSPIN_LOCK Lock
5382 NTOSAPI PLIST_ENTRY DDKAPI
5383 ExInterlockedRemoveHeadList(
5384 /*IN*/ PLIST_ENTRY ListHead,
5385 /*IN*/ PKSPIN_LOCK Lock
5388 NTOSAPI PLIST_ENTRY DDKFASTAPI
5389 ExfInterlockedRemoveHeadList(
5390 /*IN*/ PLIST_ENTRY ListHead,
5391 /*IN*/ PKSPIN_LOCK Lock
5394 NTOSAPI BOOLEAN DDKAPI
5395 ExIsProcessorFeaturePresent( /*IN*/ ULONG ProcessorFeature );
5397 NTOSAPI BOOLEAN DDKAPI
5398 ExIsResourceAcquiredExclusiveLite( /*IN*/ PERESOURCE Resource );
5400 NTOSAPI USHORT DDKAPI
5401 ExIsResourceAcquiredLite( /*IN*/ PERESOURCE Resource );
5403 NTOSAPI USHORT DDKAPI
5404 ExIsResourceAcquiredSharedLite( /*IN*/ PERESOURCE Resource );
5407 ExLocalTimeToSystemTime(
5408 /*IN*/ PLARGE_INTEGER LocalTime,
5409 /*OUT*/ PLARGE_INTEGER SystemTime
5414 /*IN*/ PCALLBACK_OBJECT CallbackObject,
5415 /*IN*/ PVOID Argument1,
5416 /*IN*/ PVOID Argument2
5420 ExRaiseAccessViolation( VOID );
5423 ExRaiseDatatypeMisalignment( VOID );
5426 ExRaiseStatus( /*IN*/ NTSTATUS Status );
5428 NTOSAPI PVOID DDKAPI
5430 /*IN*/ PCALLBACK_OBJECT CallbackObject,
5431 /*IN*/ PCALLBACK_FUNCTION CallbackFunction,
5432 /*IN*/ PVOID CallbackContext
5436 ExReinitializeResourceLite( /*IN*/ PERESOURCE Resource );
5438 NTOSAPI VOID DDKFASTAPI
5439 ExReleaseFastMutex( /*IN*/ PFAST_MUTEX FastMutex );
5441 NTOSAPI VOID DDKFASTAPI
5442 ExReleaseFastMutexUnsafe( /*IN*/ PFAST_MUTEX FastMutex );
5445 ExReleaseResourceForThreadLite(
5446 /*IN*/ PERESOURCE Resource,
5447 /*IN*/ ERESOURCE_THREAD ResourceThreadId
5450 NTOSAPI VOID DDKFASTAPI
5451 ExReleaseResourceLite( /*IN*/ PERESOURCE Resource );
5454 ExSetResourceOwnerPointer( /*IN*/ PERESOURCE Resource,
5455 /*IN*/ PVOID OwnerPointer
5458 NTOSAPI ULONG DDKAPI
5459 ExSetTimerResolution( /*IN*/ ULONG DesiredTime, /*IN*/ BOOLEAN SetResolution );
5462 ExSystemTimeToLocalTime(
5463 /*IN*/ PLARGE_INTEGER SystemTime,
5464 /*OUT*/ PLARGE_INTEGER LocalTime
5467 NTOSAPI BOOLEAN DDKFASTAPI
5468 ExTryToAcquireFastMutex( /*IN*/ PFAST_MUTEX FastMutex );
5470 NTOSAPI BOOLEAN DDKAPI
5471 ExTryToAcquireResourceExclusiveLite( /*IN*/ PERESOURCE Resource );
5474 ExUnregisterCallback( /*IN*/ PVOID CbRegistration );
5476 NTOSAPI NTSTATUS DDKAPI
5477 ExUuidCreate( /*OUT*/ UUID *Uuid );
5479 NTOSAPI BOOLEAN DDKAPI
5480 ExVerifySuite( /*IN*/ SUITE_TYPE SuiteType );
5483 # define PAGED_CODE() \
5484 { if (KeGetCurrentIrql() > APC_LEVEL) \
5485 { KdPrint( ("NTDDK: Pageable code called at IRQL > APC_LEVEL (%d)\n", KeGetCurrentIrql() )); \
5490 # define PAGED_CODE()
5495 /*IN*/ CONST VOID *Address,
5496 /*IN*/ ULONG Length,
5497 /*IN*/ ULONG Alignment
5502 /*IN*/ CONST VOID *Address,
5503 /*IN*/ ULONG Length,
5504 /*IN*/ ULONG Alignment
5508 /** Configuration manager routines **/
5510 NTOSAPI NTSTATUS DDKAPI
5512 /*IN*/ PEX_CALLBACK_FUNCTION Function,
5513 /*IN*/ PVOID Context,
5514 /*IN OUT*/ PLARGE_INTEGER Cookie
5517 NTOSAPI NTSTATUS DDKAPI
5518 CmUnRegisterCallback( /*IN*/ LARGE_INTEGER Cookie );
5521 /** Filesystem runtime library routines **/
5523 NTOSAPI BOOLEAN DDKAPI
5524 FsRtlIsTotalDeviceFailure( /*IN*/ NTSTATUS Status );
5528 /** Hardware abstraction layer routines **/
5530 NTOSAPI VOID DDKFASTAPI
5532 /*IN*/ PDEVICE_OBJECT DeviceObject,
5533 /*IN*/ ULONG SectorSize,
5534 /*IN*/ ULONG MBRTypeIdentifier,
5535 /*OUT*/ PVOID Buffer
5539 READ_PORT_BUFFER_UCHAR(
5541 /*IN*/ PUCHAR Buffer,
5546 READ_PORT_BUFFER_ULONG(
5548 /*IN*/ PULONG Buffer,
5553 READ_PORT_BUFFER_USHORT(
5554 /*IN*/ PUSHORT Port,
5555 /*IN*/ PUSHORT Buffer,
5559 NTOSAPI UCHAR DDKAPI
5560 READ_PORT_UCHAR( /*IN*/ PUCHAR Port );
5562 NTOSAPI ULONG DDKAPI
5563 READ_PORT_ULONG( /*IN*/ PULONG Port );
5565 NTOSAPI USHORT DDKAPI
5566 READ_PORT_USHORT( /*IN*/ PUSHORT Port );
5569 READ_REGISTER_BUFFER_UCHAR(
5570 /*IN*/ PUCHAR Register,
5571 /*IN*/ PUCHAR Buffer,
5576 READ_REGISTER_BUFFER_ULONG(
5577 /*IN*/ PULONG Register,
5578 /*IN*/ PULONG Buffer,
5583 READ_REGISTER_BUFFER_USHORT(
5584 /*IN*/ PUSHORT Register,
5585 /*IN*/ PUSHORT Buffer,
5589 NTOSAPI UCHAR DDKAPI
5590 READ_REGISTER_UCHAR( /*IN*/ PUCHAR Register );
5592 NTOSAPI ULONG DDKAPI
5593 READ_REGISTER_ULONG( /*IN*/ PULONG Register );
5595 NTOSAPI USHORT DDKAPI
5596 READ_REGISTER_USHORT( /*IN*/ PUSHORT Register );
5599 WRITE_PORT_BUFFER_UCHAR(
5601 /*IN*/ PUCHAR Buffer,
5606 WRITE_PORT_BUFFER_ULONG(
5608 /*IN*/ PULONG Buffer,
5613 WRITE_PORT_BUFFER_USHORT(
5614 /*IN*/ PUSHORT Port,
5615 /*IN*/ PUSHORT Buffer,
5620 WRITE_PORT_UCHAR( /*IN*/ PUCHAR Port, /*IN*/ UCHAR Value );
5623 WRITE_PORT_ULONG( /*IN*/ PULONG Port, /*IN*/ ULONG Value );
5626 WRITE_PORT_USHORT( /*IN*/ PUSHORT Port, /*IN*/ USHORT Value );
5629 WRITE_REGISTER_BUFFER_UCHAR(
5630 /*IN*/ PUCHAR Register,
5631 /*IN*/ PUCHAR Buffer,
5636 WRITE_REGISTER_BUFFER_ULONG(
5637 /*IN*/ PULONG Register,
5638 /*IN*/ PULONG Buffer,
5643 WRITE_REGISTER_BUFFER_USHORT(
5644 /*IN*/ PUSHORT Register,
5645 /*IN*/ PUSHORT Buffer,
5650 WRITE_REGISTER_UCHAR( /*IN*/ PUCHAR Register, /*IN*/ UCHAR Value );
5653 WRITE_REGISTER_ULONG( /*IN*/ PULONG Register, /*IN*/ ULONG Value );
5656 WRITE_REGISTER_USHORT( /*IN*/ PUSHORT Register, /*IN*/ USHORT Value );
5658 /** I/O manager routines **/
5661 IoAcquireCancelSpinLock( /*OUT*/ PKIRQL Irql );
5663 NTOSAPI NTSTATUS DDKAPI
5664 IoAcquireRemoveLockEx(
5665 /*IN*/ PIO_REMOVE_LOCK RemoveLock,
5666 /*IN*/ PVOID Tag /*OPTIONAL*/,
5669 /*IN*/ ULONG RemlockSize
5672 /* NTSTATUS IoAcquireRemoveLock(
5673 * IN PIO_REMOVE_LOCK RemoveLock,
5674 * IN PVOID Tag OPTIONAL
5677 #define IoAcquireRemoveLock(_RemoveLock, _Tag) \
5678 IoAcquireRemoveLockEx(_RemoveLock, _Tag, __FILE__, __LINE__, sizeof(IO_REMOVE_LOCK))
5680 /* VOID IoAdjustPagingPathCount( IN PLONG Count, IN BOOLEAN Increment )
5682 #define IoAdjustPagingPathCount(_Count, _Increment) \
5684 { InterlockedIncrement(_Count); \
5687 { InterlockedDecrement(_Count); \
5692 IoAllocateController(
5693 /*IN*/ PCONTROLLER_OBJECT ControllerObject,
5694 /*IN*/ PDEVICE_OBJECT DeviceObject,
5695 /*IN*/ PDRIVER_CONTROL ExecutionRoutine,
5696 /*IN*/ PVOID Context
5699 NTOSAPI NTSTATUS DDKAPI
5700 IoAllocateDriverObjectExtension(
5701 /*IN*/ PDRIVER_OBJECT DriverObject,
5702 /*IN*/ PVOID ClientIdentificationAddress,
5703 /*IN*/ ULONG DriverObjectExtensionSize,
5704 /*OUT*/ PVOID *DriverObjectExtension
5708 struct _IO_ERROR_LOG_PACKET
5709 { UCHAR MajorFunctionCode;
5711 USHORT DumpDataSize;
5712 USHORT NumberOfStrings;
5713 USHORT StringOffset;
5714 USHORT EventCategory;
5716 ULONG UniqueErrorValue;
5717 NTSTATUS FinalStatus;
5718 ULONG SequenceNumber;
5719 ULONG IoControlCode;
5720 LARGE_INTEGER DeviceOffset;
5722 } IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
5724 NTOSAPI PVOID DDKAPI
5725 IoAllocateErrorLogEntry( /*IN*/ PVOID IoObject, /*IN*/ UCHAR EntrySize );
5728 IoAllocateIrp( /*IN*/ CCHAR StackSize, /*IN*/ BOOLEAN ChargeQuota );
5732 /*IN*/ PVOID VirtualAddress,
5733 /*IN*/ ULONG Length,
5734 /*IN*/ BOOLEAN SecondaryBuffer,
5735 /*IN*/ BOOLEAN ChargeQuota,
5736 /*IN OUT*/ PIRP Irp /*OPTIONAL*/
5739 NTOSAPI PIO_WORKITEM DDKAPI
5740 IoAllocateWorkItem( /*IN*/ PDEVICE_OBJECT DeviceObject );
5742 /* VOID IoAssignArcName(
5743 * IN PUNICODE_STRING ArcName,
5744 * IN PUNICODE_STRING DeviceName
5747 #define IoAssignArcName(_ArcName, _DeviceName) \
5748 (IoCreateSymbolicLink((_ArcName), (_DeviceName)))
5750 NTOSAPI NTSTATUS DDKAPI
5752 /*IN*/ PDEVICE_OBJECT SourceDevice,
5753 /*IN*/ PUNICODE_STRING TargetDevice,
5754 /*OUT*/ PDEVICE_OBJECT *AttachedDevice
5757 NTOSAPI PDEVICE_OBJECT DDKAPI
5758 IoAttachDeviceToDeviceStack(
5759 /*IN*/ PDEVICE_OBJECT SourceDevice,
5760 /*IN*/ PDEVICE_OBJECT TargetDevice
5764 IoBuildAsynchronousFsdRequest(
5765 /*IN*/ ULONG MajorFunction,
5766 /*IN*/ PDEVICE_OBJECT DeviceObject,
5767 /*IN OUT*/ PVOID Buffer /*OPTIONAL*/,
5768 /*IN*/ ULONG Length /*OPTIONAL*/,
5769 /*IN*/ PLARGE_INTEGER StartingOffset /*OPTIONAL*/,
5770 /*IN*/ PIO_STATUS_BLOCK IoStatusBlock /*OPTIONAL*/
5774 IoBuildDeviceIoControlRequest(
5775 /*IN*/ ULONG IoControlCode,
5776 /*IN*/ PDEVICE_OBJECT DeviceObject,
5777 /*IN*/ PVOID InputBuffer /*OPTIONAL*/,
5778 /*IN*/ ULONG InputBufferLength,
5779 /*OUT*/ PVOID OutputBuffer /*OPTIONAL*/,
5780 /*IN*/ ULONG OutputBufferLength,
5781 /*IN*/ BOOLEAN InternalDeviceIoControl,
5782 /*IN*/ PKEVENT Event,
5783 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock
5788 /*IN*/ PMDL SourceMdl,
5789 /*IN OUT*/ PMDL TargetMdl,
5790 /*IN*/ PVOID VirtualAddress,
5795 IoBuildSynchronousFsdRequest(
5796 /*IN*/ ULONG MajorFunction,
5797 /*IN*/ PDEVICE_OBJECT DeviceObject,
5798 /*IN OUT*/ PVOID Buffer /*OPTIONAL*/,
5799 /*IN*/ ULONG Length /*OPTIONAL*/,
5800 /*IN*/ PLARGE_INTEGER StartingOffset /*OPTIONAL*/,
5801 /*IN*/ PKEVENT Event,
5802 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock
5805 NTOSAPI NTSTATUS DDKFASTAPI
5806 IofCallDriver( /*IN*/ PDEVICE_OBJECT DeviceObject, /*IN OUT*/ PIRP Irp );
5808 /* NTSTATUS IoCallDriver(
5809 * IN PDEVICE_OBJECT DeviceObject,
5812 #define IoCallDriver IofCallDriver
5816 /*IN*/ PDEVICE_OBJECT DeviceObject,
5817 /*IN*/ PFILE_OBJECT FileObject
5820 NTOSAPI BOOLEAN DDKAPI
5821 IoCancelIrp( /*IN*/ PIRP Irp );
5823 NTOSAPI NTSTATUS DDKAPI
5825 /*IN*/ ACCESS_MASK DesiredAccess,
5826 /*IN*/ ULONG DesiredShareAccess,
5827 /*IN OUT*/ PFILE_OBJECT FileObject,
5828 /*IN OUT*/ PSHARE_ACCESS ShareAccess,
5829 /*IN*/ BOOLEAN Update
5832 NTOSAPI VOID DDKFASTAPI
5833 IofCompleteRequest( /*IN*/ PIRP Irp, /*IN*/ CCHAR PriorityBoost );
5835 /* VOID IoCompleteRequest( IN PIRP Irp, IN CCHAR PriorityBoost )
5837 #define IoCompleteRequest IofCompleteRequest
5839 NTOSAPI NTSTATUS DDKAPI
5841 /*OUT*/ PKINTERRUPT *InterruptObject,
5842 /*IN*/ PKSERVICE_ROUTINE ServiceRoutine,
5843 /*IN*/ PVOID ServiceContext,
5844 /*IN*/ PKSPIN_LOCK SpinLock /*OPTIONAL*/,
5845 /*IN*/ ULONG Vector,
5847 /*IN*/ KIRQL SynchronizeIrql,
5848 /*IN*/ KINTERRUPT_MODE InterruptMode,
5849 /*IN*/ BOOLEAN ShareVector,
5850 /*IN*/ KAFFINITY ProcessorEnableMask,
5851 /*IN*/ BOOLEAN FloatingSave
5854 /* PIO_STACK_LOCATION IoGetCurrentIrpStackLocation( IN PIRP Irp )
5856 #define IoGetCurrentIrpStackLocation(_Irp) \
5857 ((_Irp)->Tail.Overlay.CurrentStackLocation)
5859 /* PIO_STACK_LOCATION IoGetNextIrpStackLocation( IN PIRP Irp )
5861 #define IoGetNextIrpStackLocation(_Irp) \
5862 ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
5864 /* VOID IoCopyCurrentIrpStackLocationToNext( IN PIRP Irp )
5866 #define IoCopyCurrentIrpStackLocationToNext(_Irp) \
5867 { PIO_STACK_LOCATION _IrpSp; \
5868 PIO_STACK_LOCATION _NextIrpSp; \
5869 _IrpSp = IoGetCurrentIrpStackLocation(_Irp); \
5870 _NextIrpSp = IoGetNextIrpStackLocation(_Irp); \
5871 RtlCopyMemory(_NextIrpSp, _IrpSp, \
5872 FIELD_OFFSET(IO_STACK_LOCATION, CompletionRoutine)); \
5873 _NextIrpSp->Control = 0; \
5876 NTOSAPI PCONTROLLER_OBJECT DDKAPI
5877 IoCreateController( /*IN*/ ULONG Size );
5879 NTOSAPI NTSTATUS DDKAPI
5881 /*IN*/ PDRIVER_OBJECT DriverObject,
5882 /*IN*/ ULONG DeviceExtensionSize,
5883 /*IN*/ PUNICODE_STRING DeviceName /*OPTIONAL*/,
5884 /*IN*/ DEVICE_TYPE DeviceType,
5885 /*IN*/ ULONG DeviceCharacteristics,
5886 /*IN*/ BOOLEAN Exclusive,
5887 /*OUT*/ PDEVICE_OBJECT *DeviceObject
5890 NTOSAPI NTSTATUS DDKAPI
5891 IoCreateDisk( /*IN*/ PDEVICE_OBJECT DeviceObject, /*IN*/ PCREATE_DISK Disk );
5893 NTOSAPI NTSTATUS DDKAPI
5895 /*OUT*/ PHANDLE FileHandle,
5896 /*IN*/ ACCESS_MASK DesiredAccess,
5897 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
5898 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
5899 /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/,
5900 /*IN*/ ULONG FileAttributes,
5901 /*IN*/ ULONG ShareAccess,
5902 /*IN*/ ULONG Disposition,
5903 /*IN*/ ULONG CreateOptions,
5904 /*IN*/ PVOID EaBuffer /*OPTIONAL*/,
5905 /*IN*/ ULONG EaLength,
5906 /*IN*/ CREATE_FILE_TYPE CreateFileType,
5907 /*IN*/ PVOID ExtraCreateParameters /*OPTIONAL*/,
5908 /*IN*/ ULONG Options
5911 NTOSAPI PKEVENT DDKAPI
5912 IoCreateNotificationEvent(
5913 /*IN*/ PUNICODE_STRING EventName,
5914 /*OUT*/ PHANDLE EventHandle
5917 NTOSAPI NTSTATUS DDKAPI
5918 IoCreateSymbolicLink(
5919 /*IN*/ PUNICODE_STRING SymbolicLinkName,
5920 /*IN*/ PUNICODE_STRING DeviceName
5923 NTOSAPI PKEVENT DDKAPI
5924 IoCreateSynchronizationEvent(
5925 /*IN*/ PUNICODE_STRING EventName,
5926 /*OUT*/ PHANDLE EventHandle
5929 NTOSAPI NTSTATUS DDKAPI
5930 IoCreateUnprotectedSymbolicLink(
5931 /*IN*/ PUNICODE_STRING SymbolicLinkName,
5932 /*IN*/ PUNICODE_STRING DeviceName
5938 /*IN*/ PIO_CSQ_INSERT_IRP CsqInsertIrp,
5939 /*IN*/ PIO_CSQ_REMOVE_IRP CsqRemoveIrp,
5940 /*IN*/ PIO_CSQ_PEEK_NEXT_IRP CsqPeekNextIrp,
5941 /*IN*/ PIO_CSQ_ACQUIRE_LOCK CsqAcquireLock,
5942 /*IN*/ PIO_CSQ_RELEASE_LOCK CsqReleaseLock,
5943 /*IN*/ PIO_CSQ_COMPLETE_CANCELED_IRP CsqCompleteCanceledIrp
5950 /*IN*/ PIO_CSQ_IRP_CONTEXT Context
5954 IoCsqRemoveIrp( /*IN*/ PIO_CSQ Csq, /*IN*/ PIO_CSQ_IRP_CONTEXT Context );
5957 IoCsqRemoveNextIrp( /*IN*/ PIO_CSQ Csq, /*IN*/ PVOID PeekContext );
5960 IoDeleteController( /*IN*/ PCONTROLLER_OBJECT ControllerObject );
5963 IoDeleteDevice( /*IN*/ PDEVICE_OBJECT DeviceObject );
5965 NTOSAPI NTSTATUS DDKAPI
5966 IoDeleteSymbolicLink( /*IN*/ PUNICODE_STRING SymbolicLinkName );
5968 /* VOID IoDeassignArcName( IN PUNICODE_STRING ArcName )
5970 #define IoDeassignArcName IoDeleteSymbolicLink
5973 IoDetachDevice( /*IN OUT*/ PDEVICE_OBJECT TargetDevice );
5976 IoDisconnectInterrupt( /*IN*/ PKINTERRUPT InterruptObject );
5978 NTOSAPI BOOLEAN DDKAPI
5979 IoForwardIrpSynchronously( /*IN*/ PDEVICE_OBJECT DeviceObject, /*IN*/ PIRP Irp );
5981 #define IoForwardAndCatchIrp IoForwardIrpSynchronously
5984 IoFreeController( /*IN*/ PCONTROLLER_OBJECT ControllerObject );
5987 IoFreeErrorLogEntry( PVOID ElEntry );
5990 IoFreeIrp( /*IN*/ PIRP Irp );
5993 IoFreeMdl( /*IN*/ PMDL Mdl );
5996 IoFreeWorkItem( /*IN*/ PIO_WORKITEM pIOWorkItem );
5998 NTOSAPI PDEVICE_OBJECT DDKAPI
5999 IoGetAttachedDevice( /*IN*/ PDEVICE_OBJECT DeviceObject );
6001 NTOSAPI PDEVICE_OBJECT DDKAPI
6002 IoGetAttachedDeviceReference( /*IN*/ PDEVICE_OBJECT DeviceObject );
6004 NTOSAPI NTSTATUS DDKAPI
6005 IoGetBootDiskInformation(
6006 /*IN OUT*/ PBOOTDISK_INFORMATION BootDiskInformation,
6010 NTOSAPI PCONFIGURATION_INFORMATION DDKAPI
6011 IoGetConfigurationInformation( VOID );
6013 NTOSAPI PEPROCESS DDKAPI
6014 IoGetCurrentProcess( VOID );
6016 NTOSAPI NTSTATUS DDKAPI
6017 IoGetDeviceInterfaceAlias(
6018 /*IN*/ PUNICODE_STRING SymbolicLinkName,
6019 /*IN*/ CONST GUID *AliasInterfaceClassGuid,
6020 /*OUT*/ PUNICODE_STRING AliasSymbolicLinkName
6023 NTOSAPI NTSTATUS DDKAPI
6024 IoGetDeviceInterfaces(
6025 /*IN*/ CONST GUID *InterfaceClassGuid,
6026 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject /*OPTIONAL*/,
6028 /*OUT*/ PWSTR *SymbolicLinkList
6031 NTOSAPI NTSTATUS DDKAPI
6032 IoGetDeviceObjectPointer(
6033 /*IN*/ PUNICODE_STRING ObjectName,
6034 /*IN*/ ACCESS_MASK DesiredAccess,
6035 /*OUT*/ PFILE_OBJECT *FileObject,
6036 /*OUT*/ PDEVICE_OBJECT *DeviceObject
6039 NTOSAPI NTSTATUS DDKAPI
6040 IoGetDeviceProperty(
6041 /*IN*/ PDEVICE_OBJECT DeviceObject,
6042 /*IN*/ DEVICE_REGISTRY_PROPERTY DeviceProperty,
6043 /*IN*/ ULONG BufferLength,
6044 /*OUT*/ PVOID PropertyBuffer,
6045 /*OUT*/ PULONG ResultLength
6048 NTOSAPI PDEVICE_OBJECT DDKAPI
6049 IoGetDeviceToVerify( /*IN*/ PETHREAD Thread );
6051 NTOSAPI PDMA_ADAPTER DDKAPI
6053 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject,
6054 /*IN*/ PDEVICE_DESCRIPTION DeviceDescription,
6055 /*IN OUT*/ PULONG NumberOfMapRegisters
6058 NTOSAPI PVOID DDKAPI
6059 IoGetDriverObjectExtension(
6060 /*IN*/ PDRIVER_OBJECT DriverObject,
6061 /*IN*/ PVOID ClientIdentificationAddress
6064 NTOSAPI PGENERIC_MAPPING DDKAPI
6065 IoGetFileObjectGenericMapping( VOID );
6067 /* ULONG IoGetFunctionCodeFromCtlCode( IN ULONG ControlCode )
6069 #define IoGetFunctionCodeFromCtlCode(_ControlCode) \
6070 (((_ControlCode) >> 2) & 0x00000FFF)
6072 NTOSAPI PVOID DDKAPI
6073 IoGetInitialStack( VOID );
6075 NTOSAPI PDEVICE_OBJECT DDKAPI
6076 IoGetRelatedDeviceObject( /*IN*/ PFILE_OBJECT FileObject );
6078 NTOSAPI ULONG DDKAPI
6079 IoGetRemainingStackSize( VOID );
6082 IoGetStackLimits( /*OUT*/ PULONG_PTR LowLimit, /*OUT*/ PULONG_PTR HighLimit );
6087 /*IN*/ PKDEFERRED_ROUTINE DeferredRoutine,
6088 /*IN*/ PVOID DeferredContext
6091 /* VOID IoInitializeDpcRequest(
6092 * IN PDEVICE_OBJECT DeviceObject,
6093 * IN PIO_DPC_ROUTINE DpcRoutine
6096 #define IoInitializeDpcRequest(_DeviceObject, _DpcRoutine) \
6097 KeInitializeDpc(&(_DeviceObject)->Dpc, \
6098 (PKDEFERRED_ROUTINE) (_DpcRoutine), _DeviceObject \
6103 /*IN OUT*/ PIRP Irp,
6104 /*IN*/ USHORT PacketSize,
6105 /*IN*/ CCHAR StackSize
6109 IoInitializeRemoveLockEx(
6110 /*IN*/ PIO_REMOVE_LOCK Lock,
6111 /*IN*/ ULONG AllocateTag,
6112 /*IN*/ ULONG MaxLockedMinutes,
6113 /*IN*/ ULONG HighWatermark,
6114 /*IN*/ ULONG RemlockSize
6117 /* VOID IoInitializeRemoveLock(
6118 * IN PIO_REMOVE_LOCK Lock,
6119 * IN ULONG AllocateTag,
6120 * IN ULONG MaxLockedMinutes,
6121 * IN ULONG HighWatermark
6124 #define IoInitializeRemoveLock(Lock, AllocateTag, MaxLockedMinutes, HighWatermark) \
6125 IoInitializeRemoveLockEx(Lock, AllocateTag, MaxLockedMinutes, \
6126 HighWatermark, sizeof(IO_REMOVE_LOCK) \
6129 NTOSAPI NTSTATUS DDKAPI
6131 /*IN*/ PDEVICE_OBJECT DeviceObject,
6132 /*IN*/ PIO_TIMER_ROUTINE TimerRoutine,
6133 /*IN*/ PVOID Context
6137 IoInvalidateDeviceRelations(
6138 /*IN*/ PDEVICE_OBJECT DeviceObject,
6139 /*IN*/ DEVICE_RELATION_TYPE Type
6143 IoInvalidateDeviceState( /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject );
6145 NTOSAPI BOOLEAN DDKAPI
6146 IoIs32bitProcess( /*IN*/ PIRP Irp /*OPTIONAL*/ );
6148 /* BOOLEAN IoIsErrorUserInduced( IN NTSTATUS Status )
6150 #define IoIsErrorUserInduced( Status ) \
6151 ((BOOLEAN)(((Status) == STATUS_DEVICE_NOT_READY) \
6152 || ((Status) == STATUS_IO_TIMEOUT) \
6153 || ((Status) == STATUS_MEDIA_WRITE_PROTECTED) \
6154 || ((Status) == STATUS_NO_MEDIA_IN_DEVICE) \
6155 || ((Status) == STATUS_VERIFY_REQUIRED) \
6156 || ((Status) == STATUS_UNRECOGNIZED_MEDIA) \
6157 || ((Status) == STATUS_WRONG_VOLUME)))
6159 NTOSAPI BOOLEAN DDKAPI
6160 IoIsWdmVersionAvailable( /*IN*/ UCHAR MajorVersion, /*IN*/ UCHAR MinorVersion );
6163 IoMakeAssociatedIrp( /*IN*/ PIRP Irp, /*IN*/ CCHAR StackSize );
6165 /* VOID IoMarkIrpPending( IN OUT PIRP Irp )
6167 #define IoMarkIrpPending(_Irp) \
6168 (IoGetCurrentIrpStackLocation(_Irp)->Control |= SL_PENDING_RETURNED)
6170 NTOSAPI NTSTATUS DDKAPI
6171 IoOpenDeviceInterfaceRegistryKey(
6172 /*IN*/ PUNICODE_STRING SymbolicLinkName,
6173 /*IN*/ ACCESS_MASK DesiredAccess,
6174 /*OUT*/ PHANDLE DeviceInterfaceKey
6177 NTOSAPI NTSTATUS DDKAPI
6178 IoOpenDeviceRegistryKey(
6179 /*IN*/ PDEVICE_OBJECT DeviceObject,
6180 /*IN*/ ULONG DevInstKeyType,
6181 /*IN*/ ACCESS_MASK DesiredAccess,
6182 /*OUT*/ PHANDLE DevInstRegKey
6185 NTOSAPI NTSTATUS DDKAPI
6186 IoQueryDeviceDescription(
6187 /*IN*/ PINTERFACE_TYPE BusType /*OPTIONAL*/,
6188 /*IN*/ PULONG BusNumber /*OPTIONAL*/,
6189 /*IN*/ PCONFIGURATION_TYPE ControllerType /*OPTIONAL*/,
6190 /*IN*/ PULONG ControllerNumber /*OPTIONAL*/,
6191 /*IN*/ PCONFIGURATION_TYPE PeripheralType /*OPTIONAL*/,
6192 /*IN*/ PULONG PeripheralNumber /*OPTIONAL*/,
6193 /*IN*/ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
6194 /*IN*/ PVOID Context
6199 /*IN*/ PIO_WORKITEM pIOWorkItem,
6200 /*IN*/ PIO_WORKITEM_ROUTINE Routine,
6201 /*IN*/ WORK_QUEUE_TYPE QueueType,
6202 /*IN*/ PVOID Context
6208 /*IN*/ PVPB Vpb /*OPTIONAL*/,
6209 /*IN*/ PDEVICE_OBJECT RealDeviceObject
6212 NTOSAPI BOOLEAN DDKAPI
6213 IoRaiseInformationalHardError(
6214 /*IN*/ NTSTATUS ErrorStatus,
6215 /*IN*/ PUNICODE_STRING String /*OPTIONAL*/,
6216 /*IN*/ PKTHREAD Thread /*OPTIONAL*/
6219 NTOSAPI NTSTATUS DDKAPI
6220 IoReadDiskSignature(
6221 /*IN*/ PDEVICE_OBJECT DeviceObject,
6222 /*IN*/ ULONG BytesPerSector,
6223 /*OUT*/ PDISK_SIGNATURE Signature
6226 NTOSAPI NTSTATUS DDKAPI
6227 IoReadPartitionTableEx(
6228 /*IN*/ PDEVICE_OBJECT DeviceObject,
6229 /*IN*/ struct _DRIVE_LAYOUT_INFORMATION_EX **PartitionBuffer
6233 IoRegisterBootDriverReinitialization(
6234 /*IN*/ PDRIVER_OBJECT DriverObject,
6235 /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
6236 /*IN*/ PVOID Context
6240 IoRegisterBootDriverReinitialization(
6241 /*IN*/ PDRIVER_OBJECT DriverObject,
6242 /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
6243 /*IN*/ PVOID Context
6246 NTOSAPI NTSTATUS DDKAPI
6247 IoRegisterDeviceInterface(
6248 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject,
6249 /*IN*/ CONST GUID *InterfaceClassGuid,
6250 /*IN*/ PUNICODE_STRING ReferenceString /*OPTIONAL*/,
6251 /*OUT*/ PUNICODE_STRING SymbolicLinkName
6255 IoRegisterDriverReinitialization(
6256 /*IN*/ PDRIVER_OBJECT DriverObject,
6257 /*IN*/ PDRIVER_REINITIALIZE DriverReinitializationRoutine,
6258 /*IN*/ PVOID Context
6261 NTOSAPI NTSTATUS DDKAPI
6262 IoRegisterPlugPlayNotification(
6263 /*IN*/ IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
6264 /*IN*/ ULONG EventCategoryFlags,
6265 /*IN*/ PVOID EventCategoryData /*OPTIONAL*/,
6266 /*IN*/ PDRIVER_OBJECT DriverObject,
6267 /*IN*/ PDRIVER_NOTIFICATION_CALLBACK_ROUTINE CallbackRoutine,
6268 /*IN*/ PVOID Context,
6269 /*OUT*/ PVOID *NotificationEntry
6272 NTOSAPI NTSTATUS DDKAPI
6273 IoRegisterShutdownNotification( /*IN*/ PDEVICE_OBJECT DeviceObject );
6276 IoReleaseCancelSpinLock( /*IN*/ KIRQL Irql );
6279 IoReleaseRemoveLockAndWaitEx(
6280 /*IN*/ PIO_REMOVE_LOCK RemoveLock,
6282 /*IN*/ ULONG RemlockSize
6285 /* VOID IoReleaseRemoveLockAndWait(
6286 * IN PIO_REMOVE_LOCK RemoveLock,
6290 #define IoReleaseRemoveLockAndWait(_RemoveLock, _Tag) \
6291 IoReleaseRemoveLockAndWaitEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
6294 IoReleaseRemoveLockEx(
6295 /*IN*/ PIO_REMOVE_LOCK RemoveLock,
6297 /*IN*/ ULONG RemlockSize
6300 /* VOID IoReleaseRemoveLock(
6301 * IN PIO_REMOVE_LOCK RemoveLock,
6305 #define IoReleaseRemoveLock(_RemoveLock, _Tag) \
6306 IoReleaseRemoveLockEx(_RemoveLock, _Tag, sizeof(IO_REMOVE_LOCK))
6309 IoRemoveShareAccess(
6310 /*IN*/ PFILE_OBJECT FileObject,
6311 /*IN OUT*/ PSHARE_ACCESS ShareAccess
6314 NTOSAPI NTSTATUS DDKAPI
6315 IoReportDetectedDevice(
6316 /*IN*/ PDRIVER_OBJECT DriverObject,
6317 /*IN*/ INTERFACE_TYPE LegacyBusType,
6318 /*IN*/ ULONG BusNumber,
6319 /*IN*/ ULONG SlotNumber,
6320 /*IN*/ PCM_RESOURCE_LIST ResourceList,
6321 /*IN*/ PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements /*OPTIONAL*/,
6322 /*IN*/ BOOLEAN ResourceAssigned,
6323 /*IN OUT*/ PDEVICE_OBJECT *DeviceObject
6326 NTOSAPI NTSTATUS DDKAPI
6327 IoReportResourceForDetection(
6328 /*IN*/ PDRIVER_OBJECT DriverObject,
6329 /*IN*/ PCM_RESOURCE_LIST DriverList /*OPTIONAL*/,
6330 /*IN*/ ULONG DriverListSize /*OPTIONAL*/,
6331 /*IN*/ PDEVICE_OBJECT DeviceObject /*OPTIONAL*/,
6332 /*IN*/ PCM_RESOURCE_LIST DeviceList /*OPTIONAL*/,
6333 /*IN*/ ULONG DeviceListSize /*OPTIONAL*/,
6334 /*OUT*/ PBOOLEAN ConflictDetected
6337 NTOSAPI NTSTATUS DDKAPI
6338 IoReportResourceUsage(
6339 /*IN*/ PUNICODE_STRING DriverClassName /*OPTIONAL*/,
6340 /*IN*/ PDRIVER_OBJECT DriverObject,
6341 /*IN*/ PCM_RESOURCE_LIST DriverList /*OPTIONAL*/,
6342 /*IN*/ ULONG DriverListSize /*OPTIONAL*/,
6343 /*IN*/ PDEVICE_OBJECT DeviceObject,
6344 /*IN*/ PCM_RESOURCE_LIST DeviceList /*OPTIONAL*/,
6345 /*IN*/ ULONG DeviceListSize /*OPTIONAL*/,
6346 /*IN*/ BOOLEAN OverrideConflict,
6347 /*OUT*/ PBOOLEAN ConflictDetected
6350 NTOSAPI NTSTATUS DDKAPI
6351 IoReportTargetDeviceChange(
6352 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject,
6353 /*IN*/ PVOID NotificationStructure
6356 NTOSAPI NTSTATUS DDKAPI
6357 IoReportTargetDeviceChangeAsynchronous(
6358 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject,
6359 /*IN*/ PVOID NotificationStructure,
6360 /*IN*/ PDEVICE_CHANGE_COMPLETE_CALLBACK Callback /*OPTIONAL*/,
6361 /*IN*/ PVOID Context /*OPTIONAL*/
6365 IoRequestDeviceEject( /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject );
6367 /* VOID IoRequestDpc(
6368 * IN PDEVICE_OBJECT DeviceObject,
6373 #define IoRequestDpc(DeviceObject, Irp, Context) \
6374 (KeInsertQueueDpc(&(DeviceObject)->Dpc, (Irp), (Context)))
6377 IoReuseIrp( /*IN OUT*/ PIRP Irp, /*IN*/ NTSTATUS Status );
6379 /* PDRIVER_CANCEL IoSetCancelRoutine(
6381 * IN PDRIVER_CANCEL CancelRoutine
6384 #define IoSetCancelRoutine(_Irp, _CancelRoutine) \
6385 ((PDRIVER_CANCEL)(InterlockedExchangePointer( \
6386 (PVOID *)(&(_Irp)->CancelRoutine), (PVOID)(_CancelRoutine)) \
6389 /* VOID IoSetCompletionRoutine(
6391 * IN PIO_COMPLETION_ROUTINE CompletionRoutine,
6393 * IN BOOLEAN InvokeOnSuccess,
6394 * IN BOOLEAN InvokeOnError,
6395 * IN BOOLEAN InvokeOnCancel
6398 #define IoSetCompletionRoutine(_Irp, _CompletionRoutine, _Context, \
6399 _InvokeOnSuccess, _InvokeOnError, _InvokeOnCancel \
6401 { PIO_STACK_LOCATION _IrpSp; \
6402 ASSERT(_InvokeOnSuccess || _InvokeOnError || _InvokeOnCancel ? \
6403 _CompletionRoutine != NULL : TRUE); \
6404 _IrpSp = IoGetNextIrpStackLocation(_Irp); \
6405 _IrpSp->CompletionRoutine = (PIO_COMPLETION_ROUTINE)(_CompletionRoutine); \
6406 _IrpSp->Context = (_Context); \
6407 _IrpSp->Control = 0; \
6408 if (_InvokeOnSuccess) _IrpSp->Control = SL_INVOKE_ON_SUCCESS; \
6409 if (_InvokeOnError) _IrpSp->Control |= SL_INVOKE_ON_ERROR; \
6410 if (_InvokeOnCancel) _IrpSp->Control |= SL_INVOKE_ON_CANCEL; \
6414 IoSetCompletionRoutineEx(
6415 /*IN*/ PDEVICE_OBJECT DeviceObject,
6417 /*IN*/ PIO_COMPLETION_ROUTINE CompletionRoutine,
6418 /*IN*/ PVOID Context,
6419 /*IN*/ BOOLEAN InvokeOnSuccess,
6420 /*IN*/ BOOLEAN InvokeOnError,
6421 /*IN*/ BOOLEAN InvokeOnCancel
6424 NTOSAPI NTSTATUS DDKAPI
6425 IoSetDeviceInterfaceState(
6426 /*IN*/ PUNICODE_STRING SymbolicLinkName,
6427 /*IN*/ BOOLEAN Enable
6431 IoSetHardErrorOrVerifyDevice(
6433 /*IN*/ PDEVICE_OBJECT DeviceObject
6436 /* VOID IoSetNextIrpStackLocation( IN OUT PIRP Irp )
6438 #define IoSetNextIrpStackLocation(_Irp) \
6439 { (_Irp)->CurrentLocation--; \
6440 (_Irp)->Tail.Overlay.CurrentStackLocation--; \
6443 NTOSAPI NTSTATUS DDKAPI
6444 IoSetPartitionInformationEx(
6445 /*IN*/ PDEVICE_OBJECT DeviceObject,
6446 /*IN*/ ULONG PartitionNumber,
6447 /*IN*/ struct _SET_PARTITION_INFORMATION_EX *PartitionInfo
6452 /*IN*/ ACCESS_MASK DesiredAccess,
6453 /*IN*/ ULONG DesiredShareAccess,
6454 /*IN OUT*/ PFILE_OBJECT FileObject,
6455 /*OUT*/ PSHARE_ACCESS ShareAccess
6459 IoSetStartIoAttributes(
6460 /*IN*/ PDEVICE_OBJECT DeviceObject,
6461 /*IN*/ BOOLEAN DeferredStartIo,
6462 /*IN*/ BOOLEAN NonCancelable
6465 NTOSAPI NTSTATUS DDKAPI
6466 IoSetSystemPartition( /*IN*/ PUNICODE_STRING VolumeNameString );
6468 NTOSAPI BOOLEAN DDKAPI
6469 IoSetThreadHardErrorMode( /*IN*/ BOOLEAN EnableHardErrors );
6471 /* USHORT IoSizeOfIrp( IN CCHAR StackSize )
6473 #define IoSizeOfIrp(_StackSize) \
6474 ((USHORT) (sizeof(IRP) + ((_StackSize) * (sizeof(IO_STACK_LOCATION)))))
6476 /* VOID IoSkipCurrentIrpStackLocation( IN PIRP Irp )
6478 #define IoSkipCurrentIrpStackLocation(_Irp) \
6479 { (_Irp)->CurrentLocation++; \
6480 (_Irp)->Tail.Overlay.CurrentStackLocation++; \
6485 /*IN*/ PDEVICE_OBJECT DeviceObject,
6486 /*IN*/ BOOLEAN Cancelable
6490 IoStartNextPacketByKey(
6491 /*IN*/ PDEVICE_OBJECT DeviceObject,
6492 /*IN*/ BOOLEAN Cancelable,
6498 /*IN*/ PDEVICE_OBJECT DeviceObject,
6500 /*IN*/ PULONG Key /*OPTIONAL*/,
6501 /*IN*/ PDRIVER_CANCEL CancelFunction /*OPTIONAL*/
6505 IoStartTimer( /*IN*/ PDEVICE_OBJECT DeviceObject );
6508 IoStopTimer( /*IN*/ PDEVICE_OBJECT DeviceObject );
6510 NTOSAPI NTSTATUS DDKAPI
6511 IoUnregisterPlugPlayNotification( /*IN*/ PVOID NotificationEntry );
6514 IoUnregisterShutdownNotification( /*IN*/ PDEVICE_OBJECT DeviceObject );
6517 IoUpdateShareAccess(
6518 /*IN*/ PFILE_OBJECT FileObject,
6519 /*IN OUT*/ PSHARE_ACCESS ShareAccess
6522 NTOSAPI NTSTATUS DDKAPI
6523 IoVerifyPartitionTable(
6524 /*IN*/ PDEVICE_OBJECT DeviceObject,
6525 /*IN*/ BOOLEAN FixErrors
6528 NTOSAPI NTSTATUS DDKAPI
6529 IoVolumeDeviceToDosName(
6530 /*IN*/ PVOID VolumeDeviceObject,
6531 /*OUT*/ PUNICODE_STRING DosName
6534 NTOSAPI NTSTATUS DDKAPI
6535 IoWMIAllocateInstanceIds(
6537 /*IN*/ ULONG InstanceCount,
6538 /*OUT*/ ULONG *FirstInstanceId
6541 NTOSAPI ULONG DDKAPI
6542 IoWMIDeviceObjectToProviderId( /*IN*/ PDEVICE_OBJECT DeviceObject );
6544 NTOSAPI NTSTATUS DDKAPI
6545 IoWMIDeviceObjectToInstanceName(
6546 /*IN*/ PVOID DataBlockObject,
6547 /*IN*/ PDEVICE_OBJECT DeviceObject,
6548 /*OUT*/ PUNICODE_STRING InstanceName
6551 NTOSAPI NTSTATUS DDKAPI
6553 /*IN*/ PVOID DataBlockObject,
6554 /*IN*/ PUNICODE_STRING InstanceName,
6555 /*IN*/ ULONG MethodId,
6556 /*IN*/ ULONG InBufferSize,
6557 /*IN OUT*/ PULONG OutBufferSize,
6558 /*IN OUT*/ PUCHAR InOutBuffer
6561 NTOSAPI NTSTATUS DDKAPI
6562 IoWMIHandleToInstanceName(
6563 /*IN*/ PVOID DataBlockObject,
6564 /*IN*/ HANDLE FileHandle,
6565 /*OUT*/ PUNICODE_STRING InstanceName
6568 NTOSAPI NTSTATUS DDKAPI
6570 /*IN*/ GUID *DataBlockGuid,
6571 /*IN*/ ULONG DesiredAccess,
6572 /*OUT*/ PVOID *DataBlockObject
6575 NTOSAPI NTSTATUS DDKAPI
6577 /*IN*/ PVOID DataBlockObject,
6578 /*IN OUT*/ ULONG *InOutBufferSize,
6579 /*OUT*/ PVOID OutBuffer
6582 NTOSAPI NTSTATUS DDKAPI
6583 IoWMIQueryAllDataMultiple(
6584 /*IN*/ PVOID *DataBlockObjectList,
6585 /*IN*/ ULONG ObjectCount,
6586 /*IN OUT*/ ULONG *InOutBufferSize,
6587 /*OUT*/ PVOID OutBuffer
6590 NTOSAPI NTSTATUS DDKAPI
6591 IoWMIQuerySingleInstance(
6592 /*IN*/ PVOID DataBlockObject,
6593 /*IN*/ PUNICODE_STRING InstanceName,
6594 /*IN OUT*/ ULONG *InOutBufferSize,
6595 /*OUT*/ PVOID OutBuffer
6598 NTOSAPI NTSTATUS DDKAPI
6599 IoWMIQuerySingleInstanceMultiple(
6600 /*IN*/ PVOID *DataBlockObjectList,
6601 /*IN*/ PUNICODE_STRING InstanceNames,
6602 /*IN*/ ULONG ObjectCount,
6603 /*IN OUT*/ ULONG *InOutBufferSize,
6604 /*OUT*/ PVOID OutBuffer
6607 NTOSAPI NTSTATUS DDKAPI
6608 IoWMIRegistrationControl(
6609 /*IN*/ PDEVICE_OBJECT DeviceObject,
6613 NTOSAPI NTSTATUS DDKAPI
6614 IoWMISetNotificationCallback(
6615 /*IN*/ PVOID Object,
6616 /*IN*/ WMI_NOTIFICATION_CALLBACK Callback,
6617 /*IN*/ PVOID Context
6620 NTOSAPI NTSTATUS DDKAPI
6621 IoWMISetSingleInstance(
6622 /*IN*/ PVOID DataBlockObject,
6623 /*IN*/ PUNICODE_STRING InstanceName,
6624 /*IN*/ ULONG Version,
6625 /*IN*/ ULONG ValueBufferSize,
6626 /*IN*/ PVOID ValueBuffer
6629 NTOSAPI NTSTATUS DDKAPI
6631 /*IN*/ PVOID DataBlockObject,
6632 /*IN*/ PUNICODE_STRING InstanceName,
6633 /*IN*/ ULONG DataItemId,
6634 /*IN*/ ULONG Version,
6635 /*IN*/ ULONG ValueBufferSize,
6636 /*IN*/ PVOID ValueBuffer
6639 NTOSAPI NTSTATUS DDKAPI
6640 IoWMISuggestInstanceName(
6641 /*IN*/ PDEVICE_OBJECT PhysicalDeviceObject /*OPTIONAL*/,
6642 /*IN*/ PUNICODE_STRING SymbolicLinkName /*OPTIONAL*/,
6643 /*IN*/ BOOLEAN CombineNames,
6644 /*OUT*/ PUNICODE_STRING SuggestedInstanceName
6647 NTOSAPI NTSTATUS DDKAPI
6648 IoWMIWriteEvent( /*IN*/ PVOID WnodeEventItem );
6651 IoWriteErrorLogEntry( /*IN*/ PVOID ElEntry );
6653 NTOSAPI NTSTATUS DDKAPI
6654 IoWritePartitionTableEx(
6655 /*IN*/ PDEVICE_OBJECT DeviceObject,
6656 /*IN*/ struct _DRIVE_LAYOUT_INFORMATION_EX *PartitionBuffer
6661 /** Kernel routines **/
6663 NTOSAPI VOID DDKFASTAPI
6664 KeAcquireInStackQueuedSpinLock(
6665 /*IN*/ PKSPIN_LOCK SpinLock,
6666 /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle
6669 NTOSAPI VOID DDKFASTAPI
6670 KeAcquireInStackQueuedSpinLockAtDpcLevel(
6671 /*IN*/ PKSPIN_LOCK SpinLock,
6672 /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle
6675 NTOSAPI KIRQL DDKAPI
6676 KeAcquireInterruptSpinLock( /*IN*/ PKINTERRUPT Interrupt );
6679 KeAcquireSpinLock( /*IN*/ PKSPIN_LOCK SpinLock, /*OUT*/ PKIRQL OldIrql );
6681 /* System Service Dispatch Table */
6682 typedef PVOID (NTAPI * SSDT)(VOID);
6683 typedef SSDT * PSSDT;
6685 /* System Service Parameters Table */
6686 typedef UCHAR SSPT, * PSSPT;
6691 PULONG ServiceCounterTable;
6692 ULONG NumberOfServices;
6694 } SSDT_ENTRY, *PSSDT_ENTRY;
6696 NTOSAPI BOOLEAN DDKAPI
6697 KeAddSystemServiceTable(
6699 /*IN*/ PULONG ServiceCounterTable,
6700 /*IN*/ ULONG NumberOfServices,
6702 /*IN*/ ULONG TableIndex
6705 NTOSAPI BOOLEAN DDKAPI
6706 KeAreApcsDisabled( VOID );
6709 KeAttachProcess( /*IN*/ PEPROCESS Process );
6712 KeBugCheck( /*IN*/ ULONG BugCheckCode );
6716 /*IN*/ ULONG BugCheckCode,
6717 /*IN*/ ULONG_PTR BugCheckParameter1,
6718 /*IN*/ ULONG_PTR BugCheckParameter2,
6719 /*IN*/ ULONG_PTR BugCheckParameter3,
6720 /*IN*/ ULONG_PTR BugCheckParameter4
6723 NTOSAPI BOOLEAN DDKAPI
6724 KeCancelTimer( /*IN*/ PKTIMER Timer );
6727 KeClearEvent( /*IN*/ PRKEVENT Event );
6729 NTOSAPI NTSTATUS DDKAPI
6730 KeDelayExecutionThread(
6731 /*IN*/ KPROCESSOR_MODE WaitMode,
6732 /*IN*/ BOOLEAN Alertable,
6733 /*IN*/ PLARGE_INTEGER Interval
6736 NTOSAPI BOOLEAN DDKAPI
6737 KeDeregisterBugCheckCallback( /*IN*/ PKBUGCHECK_CALLBACK_RECORD CallbackRecord );
6740 KeDetachProcess( VOID );
6743 KeEnterCriticalRegion( VOID );
6745 /* VOID KeFlushIoBuffers(
6747 * IN BOOLEAN ReadOperation,
6748 * IN BOOLEAN DmaOperation
6751 #define KeFlushIoBuffers(_Mdl, _ReadOperation, _DmaOperation)
6754 KeFlushQueuedDpcs( VOID );
6756 NTOSAPI PRKTHREAD DDKAPI
6757 KeGetCurrentThread( VOID );
6759 NTOSAPI KPROCESSOR_MODE DDKAPI
6760 KeGetPreviousMode( VOID );
6762 NTOSAPI ULONG DDKAPI
6763 KeGetRecommendedSharedDataAlignment( VOID );
6768 /*IN*/ PKTHREAD Thread,
6769 /*IN*/ UCHAR StateIndex,
6770 /*IN*/ PKKERNEL_ROUTINE KernelRoutine,
6771 /*IN*/ PKRUNDOWN_ROUTINE RundownRoutine,
6772 /*IN*/ PKNORMAL_ROUTINE NormalRoutine,
6774 /*IN*/ PVOID Context
6778 KeInitializeDeviceQueue( /*IN*/ PKDEVICE_QUEUE DeviceQueue );
6781 KeInitializeMutex( /*IN*/ PRKMUTEX Mutex, /*IN*/ ULONG Level );
6784 KeInitializeSemaphore(
6785 /*IN*/ PRKSEMAPHORE Semaphore,
6791 KeInitializeSpinLock( /*IN*/ PKSPIN_LOCK SpinLock );
6794 KeInitializeTimer( /*IN*/ PKTIMER Timer );
6797 KeInitializeTimerEx( /*IN*/ PKTIMER Timer, /*IN*/ TIMER_TYPE Type );
6799 NTOSAPI BOOLEAN DDKAPI
6800 KeInsertByKeyDeviceQueue(
6801 /*IN*/ PKDEVICE_QUEUE DeviceQueue,
6802 /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
6803 /*IN*/ ULONG SortKey
6806 NTOSAPI BOOLEAN DDKAPI
6807 KeInsertDeviceQueue(
6808 /*IN*/ PKDEVICE_QUEUE DeviceQueue,
6809 /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
6812 NTOSAPI BOOLEAN DDKAPI
6815 /*IN*/ PVOID SystemArgument1,
6816 /*IN*/ PVOID SystemArgument2
6820 KeLeaveCriticalRegion( VOID );
6823 void KeMemoryBarrier (void) { MemoryBarrier(); }
6825 NTOSAPI NTSTATUS DDKAPI
6827 /*IN*/ PRKEVENT Event,
6828 /*IN*/ KPRIORITY Increment,
6832 NTOSAPI ULONGLONG DDKAPI
6833 KeQueryInterruptTime( VOID );
6835 NTOSAPI LARGE_INTEGER DDKAPI
6836 KeQueryPerformanceCounter(
6837 /*OUT*/ PLARGE_INTEGER PerformanceFrequency /*OPTIONAL*/
6840 NTOSAPI KPRIORITY DDKAPI
6841 KeQueryPriorityThread( /*IN*/ PRKTHREAD Thread );
6844 KeQuerySystemTime( /*OUT*/ PLARGE_INTEGER CurrentTime );
6847 KeQueryTickCount( /*OUT*/ PLARGE_INTEGER TickCount );
6849 NTOSAPI ULONG DDKAPI
6850 KeQueryTimeIncrement( VOID );
6853 KeReadStateEvent( /*IN*/ PRKEVENT Event );
6856 KeReadStateMutex( /*IN*/ PRKMUTEX Mutex );
6859 KeReadStateSemaphore( /*IN*/ PRKSEMAPHORE Semaphore );
6861 NTOSAPI BOOLEAN DDKAPI
6862 KeReadStateTimer( /*IN*/ PKTIMER Timer );
6864 NTOSAPI BOOLEAN DDKAPI
6865 KeRegisterBugCheckCallback(
6866 /*IN*/ PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
6867 /*IN*/ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
6868 /*IN*/ PVOID Buffer,
6869 /*IN*/ ULONG Length,
6870 /*IN*/ PUCHAR Component
6873 NTOSAPI VOID DDKFASTAPI
6874 KeReleaseInStackQueuedSpinLock( /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle );
6876 NTOSAPI VOID DDKFASTAPI
6877 KeReleaseInStackQueuedSpinLockFromDpcLevel(
6878 /*IN*/ PKLOCK_QUEUE_HANDLE LockHandle
6882 KeReleaseInterruptSpinLock( /*IN*/ PKINTERRUPT Interrupt, /*IN*/ KIRQL OldIrql );
6885 KeReleaseMutex( /*IN*/ PRKMUTEX Mutex, /*IN*/ BOOLEAN Wait );
6889 /*IN*/ PRKSEMAPHORE Semaphore,
6890 /*IN*/ KPRIORITY Increment,
6891 /*IN*/ LONG Adjustment,
6896 KeReleaseSpinLock( /*IN*/ PKSPIN_LOCK SpinLock, /*IN*/ KIRQL NewIrql );
6898 NTOSAPI PKDEVICE_QUEUE_ENTRY DDKAPI
6899 KeRemoveByKeyDeviceQueue(
6900 /*IN*/ PKDEVICE_QUEUE DeviceQueue,
6901 /*IN*/ ULONG SortKey
6904 NTOSAPI PKDEVICE_QUEUE_ENTRY DDKAPI
6905 KeRemoveDeviceQueue( /*IN*/ PKDEVICE_QUEUE DeviceQueue );
6907 NTOSAPI BOOLEAN DDKAPI
6908 KeRemoveEntryDeviceQueue(
6909 /*IN*/ PKDEVICE_QUEUE DeviceQueue,
6910 /*IN*/ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry
6913 NTOSAPI BOOLEAN DDKAPI
6914 KeRemoveQueueDpc( /*IN*/ PRKDPC Dpc );
6917 KeResetEvent( /*IN*/ PRKEVENT Event );
6919 NTOSAPI NTSTATUS DDKAPI
6920 KeRestoreFloatingPointState( /*IN*/ PKFLOATING_SAVE FloatSave );
6922 NTOSAPI NTSTATUS DDKAPI
6923 KeSaveFloatingPointState( /*OUT*/ PKFLOATING_SAVE FloatSave );
6926 KeSetBasePriorityThread( /*IN*/ PRKTHREAD Thread, /*IN*/ LONG Increment );
6930 /*IN*/ PRKEVENT Event,
6931 /*IN*/ KPRIORITY Increment,
6936 KeSetImportanceDpc( /*IN*/ PRKDPC Dpc, /*IN*/ KDPC_IMPORTANCE Importance );
6938 NTOSAPI KPRIORITY DDKAPI
6939 KeSetPriorityThread( /*IN*/ PKTHREAD Thread, /*IN*/ KPRIORITY Priority );
6942 KeSetTargetProcessorDpc( /*IN*/ PRKDPC Dpc, /*IN*/ CCHAR Number );
6944 NTOSAPI BOOLEAN DDKAPI
6946 /*IN*/ PKTIMER Timer,
6947 /*IN*/ LARGE_INTEGER DueTime,
6948 /*IN*/ PKDPC Dpc /*OPTIONAL*/
6951 NTOSAPI BOOLEAN DDKAPI
6953 /*IN*/ PKTIMER Timer,
6954 /*IN*/ LARGE_INTEGER DueTime,
6955 /*IN*/ LONG Period /*OPTIONAL*/,
6956 /*IN*/ PKDPC Dpc /*OPTIONAL*/
6959 NTOSAPI VOID DDKFASTAPI
6960 KeSetTimeUpdateNotifyRoutine( /*IN*/ PTIME_UPDATE_NOTIFY_ROUTINE NotifyRoutine );
6963 KeStallExecutionProcessor( /*IN*/ ULONG MicroSeconds );
6965 NTOSAPI BOOLEAN DDKAPI
6966 KeSynchronizeExecution(
6967 /*IN*/ PKINTERRUPT Interrupt,
6968 /*IN*/ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
6969 /*IN*/ PVOID SynchronizeContext
6972 NTOSAPI NTSTATUS DDKAPI
6973 KeWaitForMultipleObjects(
6975 /*IN*/ PVOID Object[],
6976 /*IN*/ WAIT_TYPE WaitType,
6977 /*IN*/ KWAIT_REASON WaitReason,
6978 /*IN*/ KPROCESSOR_MODE WaitMode,
6979 /*IN*/ BOOLEAN Alertable,
6980 /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL */,
6981 /*IN*/ PKWAIT_BLOCK WaitBlockArray /*OPTIONAL*/
6984 NTOSAPI NTSTATUS DDKAPI
6985 KeWaitForMutexObject(
6986 /*IN*/ PRKMUTEX Mutex,
6987 /*IN*/ KWAIT_REASON WaitReason,
6988 /*IN*/ KPROCESSOR_MODE WaitMode,
6989 /*IN*/ BOOLEAN Alertable,
6990 /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/
6993 NTOSAPI NTSTATUS DDKAPI
6994 KeWaitForSingleObject(
6995 /*IN*/ PVOID Object,
6996 /*IN*/ KWAIT_REASON WaitReason,
6997 /*IN*/ KPROCESSOR_MODE WaitMode,
6998 /*IN*/ BOOLEAN Alertable,
6999 /*IN*/ PLARGE_INTEGER Timeout /*OPTIONAL*/
7003 KeRaiseIrql( /*IN*/ KIRQL new_irql, /*OUT*/ PKIRQL old_irql );
7006 KeLowerIrql( /*IN*/ KIRQL irql );
7008 NTOSAPI KIRQL DDKAPI
7009 KeRaiseIrqlToDpcLevel( VOID );
7011 /** Memory manager routines **/
7013 NTOSAPI NTSTATUS DDKAPI
7014 MmAdvanceMdl( /*IN*/ PMDL Mdl, /*IN*/ ULONG NumberOfBytes );
7016 NTOSAPI PVOID DDKAPI
7017 MmAllocateContiguousMemory(
7018 /*IN*/ ULONG NumberOfBytes,
7019 /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress
7022 NTOSAPI PVOID DDKAPI
7023 MmAllocateContiguousMemorySpecifyCache(
7024 /*IN*/ SIZE_T NumberOfBytes,
7025 /*IN*/ PHYSICAL_ADDRESS LowestAcceptableAddress,
7026 /*IN*/ PHYSICAL_ADDRESS HighestAcceptableAddress,
7027 /*IN*/ PHYSICAL_ADDRESS BoundaryAddressMultiple /*OPTIONAL*/,
7028 /*IN*/ MEMORY_CACHING_TYPE CacheType
7031 NTOSAPI PVOID DDKAPI
7032 MmAllocateMappingAddress( /*IN*/ SIZE_T NumberOfBytes, /*IN*/ ULONG PoolTag );
7034 NTOSAPI PVOID DDKAPI
7035 MmAllocateNonCachedMemory( /*IN*/ ULONG NumberOfBytes );
7038 MmAllocatePagesForMdl(
7039 /*IN*/ PHYSICAL_ADDRESS LowAddress,
7040 /*IN*/ PHYSICAL_ADDRESS HighAddress,
7041 /*IN*/ PHYSICAL_ADDRESS SkipBytes,
7042 /*IN*/ SIZE_T TotalBytes
7046 MmBuildMdlForNonPagedPool( /*IN OUT*/ PMDL MemoryDescriptorList );
7048 NTOSAPI NTSTATUS DDKAPI
7050 /*OUT*/ PSECTION_OBJECT *SectionObject,
7051 /*IN*/ ACCESS_MASK DesiredAccess,
7052 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
7053 /*IN*/ PLARGE_INTEGER MaximumSize,
7054 /*IN*/ ULONG SectionPageProtection,
7055 /*IN*/ ULONG AllocationAttributes,
7056 /*IN*/ HANDLE FileHandle /*OPTIONAL*/,
7057 /*IN*/ PFILE_OBJECT File /*OPTIONAL*/
7066 NTOSAPI BOOLEAN DDKAPI
7067 MmFlushImageSection(
7068 /*IN*/ PSECTION_OBJECT_POINTERS SectionObjectPointer,
7069 /*IN*/ MMFLUSH_TYPE FlushType
7073 MmFreeContiguousMemory( /*IN*/ PVOID BaseAddress );
7076 MmFreeContiguousMemorySpecifyCache(
7077 /*IN*/ PVOID BaseAddress,
7078 /*IN*/ SIZE_T NumberOfBytes,
7079 /*IN*/ MEMORY_CACHING_TYPE CacheType
7083 MmFreeMappingAddress( /*IN*/ PVOID BaseAddress, /*IN*/ ULONG PoolTag );
7086 MmFreeNonCachedMemory( /*IN*/ PVOID BaseAddress, /*IN*/ SIZE_T NumberOfBytes );
7089 MmFreePagesFromMdl( /*IN*/ PMDL MemoryDescriptorList );
7091 /* ULONG MmGetMdlByteCount( IN PMDL Mdl )
7093 #define MmGetMdlByteCount(_Mdl) ((_Mdl)->ByteCount)
7095 /* ULONG MmGetMdlByteOffset( IN PMDL Mdl )
7097 #define MmGetMdlByteOffset(_Mdl) ((_Mdl)->ByteOffset)
7099 /* PPFN_NUMBER MmGetMdlPfnArray( IN PMDL Mdl )
7101 #define MmGetMdlPfnArray(_Mdl) ((PPFN_NUMBER)((_Mdl) + 1))
7103 /* PVOID MmGetMdlVirtualAddress( IN PMDL Mdl )
7105 #define MmGetMdlVirtualAddress(_Mdl) \
7106 ((PVOID) ((PCHAR) ((_Mdl)->StartVa) + (_Mdl)->ByteOffset))
7108 NTOSAPI PHYSICAL_ADDRESS DDKAPI
7109 MmGetPhysicalAddress( /*IN*/ PVOID BaseAddress );
7111 NTOSAPI PPHYSICAL_MEMORY_RANGE DDKAPI
7112 MmGetPhysicalMemoryRanges( VOID );
7114 NTOSAPI PVOID DDKAPI
7115 MmGetVirtualForPhysical( /*IN*/ PHYSICAL_ADDRESS PhysicalAddress );
7117 NTOSAPI PVOID DDKAPI
7118 MmMapLockedPagesSpecifyCache(
7119 /*IN*/ PMDL MemoryDescriptorList,
7120 /*IN*/ KPROCESSOR_MODE AccessMode,
7121 /*IN*/ MEMORY_CACHING_TYPE CacheType,
7122 /*IN*/ PVOID BaseAddress,
7123 /*IN*/ ULONG BugCheckOnFailure,
7124 /*IN*/ MM_PAGE_PRIORITY Priority
7127 NTOSAPI PVOID DDKAPI
7128 MmMapLockedPagesWithReservedMapping(
7129 /*IN*/ PVOID MappingAddress,
7130 /*IN*/ ULONG PoolTag,
7131 /*IN*/ PMDL MemoryDescriptorList,
7132 /*IN*/ MEMORY_CACHING_TYPE CacheType
7135 NTOSAPI NTSTATUS DDKAPI
7136 MmMapUserAddressesToPage(
7137 /*IN*/ PVOID BaseAddress,
7138 /*IN*/ SIZE_T NumberOfBytes,
7139 /*IN*/ PVOID PageAddress
7142 NTOSAPI PVOID DDKAPI
7144 /*IN*/ PHYSICAL_ADDRESS PhysicalAddress,
7145 /*IN*/ SIZE_T NumberOfBytes,
7146 /*IN*/ MEMORY_CACHING_TYPE CacheType
7149 NTOSAPI NTSTATUS DDKAPI
7150 MmMapViewInSessionSpace(
7151 /*IN*/ PVOID Section,
7152 /*OUT*/ PVOID *MappedBase,
7153 /*IN OUT*/ PSIZE_T ViewSize
7156 NTOSAPI NTSTATUS DDKAPI
7157 MmMapViewInSystemSpace(
7158 /*IN*/ PVOID Section,
7159 /*OUT*/ PVOID *MappedBase,
7160 /*IN*/ PSIZE_T ViewSize
7163 NTOSAPI NTSTATUS DDKAPI
7164 MmMarkPhysicalMemoryAsBad(
7165 /*IN*/ PPHYSICAL_ADDRESS StartAddress,
7166 /*IN OUT*/ PLARGE_INTEGER NumberOfBytes
7169 NTOSAPI NTSTATUS DDKAPI
7170 MmMarkPhysicalMemoryAsGood(
7171 /*IN*/ PPHYSICAL_ADDRESS StartAddress,
7172 /*IN OUT*/ PLARGE_INTEGER NumberOfBytes
7175 /* PVOID MmGetSystemAddressForMdlSafe(
7177 * IN MM_PAGE_PRIORITY Priority
7180 #define MmGetSystemAddressForMdlSafe(_Mdl, _Priority) \
7181 ((_Mdl)->MdlFlags & (MDL_MAPPED_TO_SYSTEM_VA \
7182 | MDL_SOURCE_IS_NONPAGED_POOL)) \
7183 ? (_Mdl)->MappedSystemVa \
7184 : (PVOID)(MmMapLockedPagesSpecifyCache((_Mdl), \
7185 KernelMode, MmCached, NULL, FALSE, _Priority))
7187 NTOSAPI PVOID DDKAPI
7188 MmGetSystemRoutineAddress( /*IN*/ PUNICODE_STRING SystemRoutineName );
7190 /* ULONG ADDRESS_AND_SIZE_TO_SPAN_PAGES( IN PVOID Va, IN ULONG Size )
7192 #define ADDRESS_AND_SIZE_TO_SPAN_PAGES(_Va, _Size) \
7193 ((ULONG) ((((ULONG_PTR) (_Va) & (PAGE_SIZE - 1)) \
7194 + (_Size) + (PAGE_SIZE - 1)) >> PAGE_SHIFT))
7196 /* VOID MmInitializeMdl(
7197 * IN PMDL MemoryDescriptorList,
7202 #define MmInitializeMdl(_MemoryDescriptorList, _BaseVa, _Length) \
7203 { (_MemoryDescriptorList)->Next = (PMDL) NULL; \
7204 (_MemoryDescriptorList)->Size = (CSHORT) (sizeof(MDL) + \
7205 (sizeof(PFN_NUMBER) * ADDRESS_AND_SIZE_TO_SPAN_PAGES(_BaseVa, _Length))); \
7206 (_MemoryDescriptorList)->MdlFlags = 0; \
7207 (_MemoryDescriptorList)->StartVa = (PVOID) PAGE_ALIGN(_BaseVa); \
7208 (_MemoryDescriptorList)->ByteOffset = BYTE_OFFSET(_BaseVa); \
7209 (_MemoryDescriptorList)->ByteCount = (ULONG) _Length; \
7212 NTOSAPI BOOLEAN DDKAPI
7213 MmIsAddressValid( /*IN*/ PVOID VirtualAddress );
7215 NTOSAPI LOGICAL DDKAPI
7216 MmIsDriverVerifying( /*IN*/ PDRIVER_OBJECT DriverObject );
7218 NTOSAPI BOOLEAN DDKAPI
7219 MmIsThisAnNtAsSystem( VOID );
7221 NTOSAPI NTSTATUS DDKAPI
7222 MmIsVerifierEnabled( /*OUT*/ PULONG VerifierFlags );
7224 NTOSAPI PVOID DDKAPI
7225 MmLockPagableDataSection( /*IN*/ PVOID AddressWithinSection );
7227 NTOSAPI PVOID DDKAPI
7228 MmLockPagableImageSection( /*IN*/ PVOID AddressWithinSection );
7230 /* PVOID MmLockPagableCodeSection( IN PVOID AddressWithinSection )
7232 #define MmLockPagableCodeSection MmLockPagableDataSection
7235 MmLockPagableSectionByHandle( /*IN*/ PVOID ImageSectionHandle );
7237 NTOSAPI PVOID DDKAPI
7239 /*IN*/ PHYSICAL_ADDRESS PhysicalAddress,
7240 /*IN*/ ULONG NumberOfBytes,
7241 /*IN*/ MEMORY_CACHING_TYPE CacheEnable
7244 NTOSAPI PVOID DDKAPI
7246 /*IN*/ PMDL MemoryDescriptorList,
7247 /*IN*/ KPROCESSOR_MODE AccessMode
7251 MmPageEntireDriver( /*IN*/ PVOID AddressWithinSection );
7254 MmProbeAndLockProcessPages(
7255 /*IN OUT*/ PMDL MemoryDescriptorList,
7256 /*IN*/ PEPROCESS Process,
7257 /*IN*/ KPROCESSOR_MODE AccessMode,
7258 /*IN*/ LOCK_OPERATION Operation
7261 NTOSAPI NTSTATUS DDKAPI
7262 MmProtectMdlSystemAddress(
7263 /*IN*/ PMDL MemoryDescriptorList,
7264 /*IN*/ ULONG NewProtect
7268 MmUnmapLockedPages( /*IN*/ PVOID BaseAddress, /*IN*/ PMDL MemoryDescriptorList );
7270 NTOSAPI NTSTATUS DDKAPI
7271 MmUnmapViewInSessionSpace( /*IN*/ PVOID MappedBase );
7273 NTOSAPI NTSTATUS DDKAPI
7274 MmUnmapViewInSystemSpace( /*IN*/ PVOID MappedBase );
7277 MmUnsecureVirtualMemory( /*IN*/ HANDLE SecureHandle );
7279 /* VOID MmPrepareMdlForReuse( IN PMDL Mdl )
7281 #define MmPrepareMdlForReuse(_Mdl) \
7282 { if (((_Mdl)->MdlFlags & MDL_PARTIAL_HAS_BEEN_MAPPED) != 0) \
7283 { ASSERT(((_Mdl)->MdlFlags & MDL_PARTIAL) != 0); \
7284 MmUnmapLockedPages((_Mdl)->MappedSystemVa, (_Mdl)); \
7286 else if (((_Mdl)->MdlFlags & MDL_PARTIAL) == 0) \
7287 { ASSERT(((_Mdl)->MdlFlags & MDL_MAPPED_TO_SYSTEM_VA) == 0); \
7292 MmProbeAndLockPages(
7293 /*IN OUT*/ PMDL MemoryDescriptorList,
7294 /*IN*/ KPROCESSOR_MODE AccessMode,
7295 /*IN*/ LOCK_OPERATION Operation
7298 NTOSAPI MM_SYSTEM_SIZE DDKAPI
7299 MmQuerySystemSize( VOID );
7301 NTOSAPI NTSTATUS DDKAPI
7302 MmRemovePhysicalMemory(
7303 /*IN*/ PPHYSICAL_ADDRESS StartAddress,
7304 /*IN OUT*/ PLARGE_INTEGER NumberOfBytes
7308 MmResetDriverPaging( /*IN*/ PVOID AddressWithinSection );
7310 NTOSAPI HANDLE DDKAPI
7311 MmSecureVirtualMemory(
7312 /*IN*/ PVOID Address,
7314 /*IN*/ ULONG ProbeMode
7317 NTOSAPI ULONG DDKAPI
7318 MmSizeOfMdl( /*IN*/ PVOID Base, /*IN*/ SIZE_T Length );
7321 MmUnlockPagableImageSection( /*IN*/ PVOID ImageSectionHandle );
7324 MmUnlockPages( /*IN*/ PMDL MemoryDescriptorList );
7327 MmUnmapIoSpace( /*IN*/ PVOID BaseAddress, /*IN*/ SIZE_T NumberOfBytes );
7330 MmUnmapReservedMapping(
7331 /*IN*/ PVOID BaseAddress,
7332 /*IN*/ ULONG PoolTag,
7333 /*IN*/ PMDL MemoryDescriptorList
7337 MmUnmapVideoDisplay( /*IN*/ PVOID BaseAddress, /*IN*/ SIZE_T NumberOfBytes );
7340 /** Object manager routines **/
7342 NTOSAPI NTSTATUS DDKAPI
7344 /*IN*/ PACCESS_STATE AccessState,
7345 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
7346 /*IN*/ PVOID Object,
7347 /*IN*/ POBJECT_TYPE Type
7351 ObDereferenceSecurityDescriptor(
7352 PSECURITY_DESCRIPTOR SecurityDescriptor,
7356 NTOSAPI VOID DDKFASTAPI
7357 ObfDereferenceObject( /*IN*/ PVOID Object );
7359 /* VOID ObDereferenceObject( IN PVOID Object )
7361 #define ObDereferenceObject ObfDereferenceObject
7363 NTOSAPI NTSTATUS DDKAPI
7364 ObGetObjectSecurity(
7365 /*IN*/ PVOID Object,
7366 /*OUT*/ PSECURITY_DESCRIPTOR *SecurityDescriptor,
7367 /*OUT*/ PBOOLEAN MemoryAllocated
7370 NTOSAPI NTSTATUS DDKAPI
7372 /*IN*/ PVOID Object,
7373 /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/,
7374 /*IN*/ ACCESS_MASK DesiredAccess,
7375 /*IN*/ ULONG AdditionalReferences,
7376 /*OUT*/ PVOID* ReferencedObject /*OPTIONAL*/,
7377 /*OUT*/ PHANDLE Handle
7380 NTOSAPI VOID DDKFASTAPI
7381 ObfReferenceObject( /*IN*/ PVOID Object );
7383 NTOSAPI NTSTATUS DDKAPI
7384 ObLogSecurityDescriptor(
7385 /*IN*/ PSECURITY_DESCRIPTOR InputSecurityDescriptor,
7386 /*OUT*/ PSECURITY_DESCRIPTOR *OutputSecurityDescriptor,
7387 /*IN*/ ULONG RefBias
7390 /* VOID ObReferenceObject( IN PVOID Object )
7392 #define ObReferenceObject ObfReferenceObject
7395 ObMakeTemporaryObject( /*IN*/ PVOID Object );
7397 NTOSAPI NTSTATUS DDKAPI
7399 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7400 /*IN*/ POBJECT_TYPE ObjectType,
7401 /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/,
7402 /*IN*/ KPROCESSOR_MODE AccessMode,
7403 /*IN*/ ACCESS_MASK DesiredAccess,
7404 /*IN*/ PACCESS_STATE PassedAccessState,
7405 /*OUT*/ PHANDLE Handle
7408 NTOSAPI NTSTATUS DDKAPI
7409 ObOpenObjectByPointer(
7410 /*IN*/ PVOID Object,
7411 /*IN*/ ULONG HandleAttributes,
7412 /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/,
7413 /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/,
7414 /*IN*/ POBJECT_TYPE ObjectType /*OPTIONAL*/,
7415 /*IN*/ KPROCESSOR_MODE AccessMode,
7416 /*OUT*/ PHANDLE Handle
7419 NTOSAPI NTSTATUS DDKAPI
7420 ObQueryObjectAuditingByHandle(
7421 /*IN*/ HANDLE Handle,
7422 /*OUT*/ PBOOLEAN GenerateOnClose
7425 NTOSAPI NTSTATUS DDKAPI
7426 ObReferenceObjectByHandle(
7427 /*IN*/ HANDLE Handle,
7428 /*IN*/ ACCESS_MASK DesiredAccess,
7429 /*IN*/ POBJECT_TYPE ObjectType /*OPTIONAL*/,
7430 /*IN*/ KPROCESSOR_MODE AccessMode,
7431 /*OUT*/ PVOID *Object,
7432 /*OUT*/ POBJECT_HANDLE_INFORMATION HandleInformation /*OPTIONAL*/
7435 NTOSAPI NTSTATUS DDKAPI
7436 ObReferenceObjectByName(
7437 /*IN*/ PUNICODE_STRING ObjectPath,
7438 /*IN*/ ULONG Attributes,
7439 /*IN*/ PACCESS_STATE PassedAccessState /*OPTIONAL*/,
7440 /*IN*/ ACCESS_MASK DesiredAccess /*OPTIONAL*/,
7441 /*IN*/ POBJECT_TYPE ObjectType,
7442 /*IN*/ KPROCESSOR_MODE AccessMode,
7443 /*IN OUT*/ PVOID ParseContext /*OPTIONAL*/,
7444 /*OUT*/ PVOID *Object
7447 NTOSAPI NTSTATUS DDKAPI
7448 ObReferenceObjectByPointer(
7449 /*IN*/ PVOID Object,
7450 /*IN*/ ACCESS_MASK DesiredAccess,
7451 /*IN*/ POBJECT_TYPE ObjectType,
7452 /*IN*/ KPROCESSOR_MODE AccessMode
7456 ObReferenceSecurityDescriptor(
7457 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
7462 ObReleaseObjectSecurity(
7463 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
7464 /*IN*/ BOOLEAN MemoryAllocated
7468 /** Process manager routines **/
7470 NTOSAPI NTSTATUS DDKAPI
7471 PsCreateSystemProcess(
7472 /*IN*/ PHANDLE ProcessHandle,
7473 /*IN*/ ACCESS_MASK DesiredAccess,
7474 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7477 NTOSAPI NTSTATUS DDKAPI
7478 PsCreateSystemThread(
7479 /*OUT*/ PHANDLE ThreadHandle,
7480 /*IN*/ ULONG DesiredAccess,
7481 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
7482 /*IN*/ HANDLE ProcessHandle /*OPTIONAL*/,
7483 /*OUT*/ PCLIENT_ID ClientId /*OPTIONAL*/,
7484 /*IN*/ PKSTART_ROUTINE StartRoutine,
7485 /*IN*/ PVOID StartContext
7488 /* PEPROCESS PsGetCurrentProcess( VOID )
7490 #define PsGetCurrentProcess IoGetCurrentProcess
7492 NTOSAPI HANDLE DDKAPI
7493 PsGetCurrentProcessId( VOID );
7495 /* PETHREAD PsGetCurrentThread( VOID )
7497 #define PsGetCurrentThread() \
7498 ((PETHREAD) KeGetCurrentThread())
7500 NTOSAPI HANDLE DDKAPI
7501 PsGetCurrentThreadId( VOID );
7503 NTOSAPI BOOLEAN DDKAPI
7505 PULONG MajorVersion /*OPTIONAL*/,
7506 PULONG MinorVersion /*OPTIONAL*/,
7507 PULONG BuildNumber /*OPTIONAL*/,
7508 PUNICODE_STRING CSDVersion /*OPTIONAL*/
7511 NTOSAPI NTSTATUS DDKAPI
7512 PsRemoveCreateThreadNotifyRoutine(
7513 /*IN*/ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
7516 NTOSAPI NTSTATUS DDKAPI
7517 PsRemoveLoadImageNotifyRoutine(
7518 /*IN*/ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine
7521 NTOSAPI NTSTATUS DDKAPI
7522 PsSetCreateProcessNotifyRoutine(
7523 /*IN*/ PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine,
7524 /*IN*/ BOOLEAN Remove
7527 NTOSAPI NTSTATUS DDKAPI
7528 PsSetCreateThreadNotifyRoutine(
7529 /*IN*/ PCREATE_THREAD_NOTIFY_ROUTINE NotifyRoutine
7532 NTOSAPI NTSTATUS DDKAPI
7533 PsSetLoadImageNotifyRoutine( /*IN*/ PLOAD_IMAGE_NOTIFY_ROUTINE NotifyRoutine );
7535 NTOSAPI NTSTATUS DDKAPI
7536 PsTerminateSystemThread( /*IN*/ NTSTATUS ExitStatus );
7539 /** Security reference monitor routines **/
7541 NTOSAPI BOOLEAN DDKAPI
7543 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor,
7544 /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
7545 /*IN*/ BOOLEAN SubjectContextLocked,
7546 /*IN*/ ACCESS_MASK DesiredAccess,
7547 /*IN*/ ACCESS_MASK PreviouslyGrantedAccess,
7548 /*OUT*/ PPRIVILEGE_SET *Privileges /*OPTIONAL*/,
7549 /*IN*/ PGENERIC_MAPPING GenericMapping,
7550 /*IN*/ KPROCESSOR_MODE AccessMode,
7551 /*OUT*/ PACCESS_MASK GrantedAccess,
7552 /*OUT*/ PNTSTATUS AccessStatus
7555 NTOSAPI NTSTATUS DDKAPI
7557 /*IN*/ PSECURITY_DESCRIPTOR ParentDescriptor /*OPTIONAL*/,
7558 /*IN*/ PSECURITY_DESCRIPTOR ExplicitDescriptor /*OPTIONAL*/,
7559 /*OUT*/ PSECURITY_DESCRIPTOR *NewDescriptor,
7560 /*IN*/ BOOLEAN IsDirectoryObject,
7561 /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext,
7562 /*IN*/ PGENERIC_MAPPING GenericMapping,
7563 /*IN*/ POOL_TYPE PoolType
7566 NTOSAPI NTSTATUS DDKAPI
7568 /*IN*/ PSECURITY_DESCRIPTOR ParentDescriptor /*OPTIONAL*/,
7569 /*IN*/ PSECURITY_DESCRIPTOR ExplicitDescriptor /*OPTIONAL*/,
7570 /*OUT*/ PSECURITY_DESCRIPTOR *NewDescriptor,
7571 /*IN*/ GUID *ObjectType /*OPTIONAL*/,
7572 /*IN*/ BOOLEAN IsDirectoryObject,
7573 /*IN*/ ULONG AutoInheritFlags,
7574 /*IN*/ PSECURITY_SUBJECT_CONTEXT SubjectContext,
7575 /*IN*/ PGENERIC_MAPPING GenericMapping,
7576 /*IN*/ POOL_TYPE PoolType
7579 NTOSAPI NTSTATUS DDKAPI
7580 SeDeassignSecurity( /*IN OUT*/ PSECURITY_DESCRIPTOR *SecurityDescriptor );
7582 NTOSAPI BOOLEAN DDKAPI
7583 SeSinglePrivilegeCheck( LUID PrivilegeValue, KPROCESSOR_MODE PreviousMode );
7585 NTOSAPI BOOLEAN DDKAPI
7586 SeValidSecurityDescriptor(
7587 /*IN*/ ULONG Length,
7588 /*IN*/ PSECURITY_DESCRIPTOR SecurityDescriptor
7592 /** NtXxx routines **/
7594 NTOSAPI NTSTATUS DDKAPI
7596 /*OUT*/ PHANDLE ProcessHandle,
7597 /*IN*/ ACCESS_MASK DesiredAccess,
7598 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7599 /*IN*/ PCLIENT_ID ClientId /*OPTIONAL*/
7602 NTOSAPI NTSTATUS DDKAPI
7603 NtQueryInformationProcess(
7604 /*IN*/ HANDLE ProcessHandle,
7605 /*IN*/ PROCESSINFOCLASS ProcessInformationClass,
7606 /*OUT*/ PVOID ProcessInformation,
7607 /*IN*/ ULONG ProcessInformationLength,
7608 /*OUT*/ PULONG ReturnLength /*OPTIONAL*/
7612 /** NtXxx and ZwXxx routines **/
7614 NTOSAPI NTSTATUS DDKAPI
7616 /*IN*/ HANDLE TimerHandle,
7617 /*OUT*/ PBOOLEAN CurrentState /*OPTIONAL*/
7620 NTOSAPI NTSTATUS DDKAPI
7622 /*IN*/ HANDLE TimerHandle,
7623 /*OUT*/ PBOOLEAN CurrentState /*OPTIONAL*/
7626 NTOSAPI NTSTATUS DDKAPI
7627 NtClose( /*IN*/ HANDLE Handle );
7629 NTOSAPI NTSTATUS DDKAPI
7630 ZwClose( /*IN*/ HANDLE Handle );
7632 NTOSAPI NTSTATUS DDKAPI
7633 NtCreateDirectoryObject(
7634 /*OUT*/ PHANDLE DirectoryHandle,
7635 /*IN*/ ACCESS_MASK DesiredAccess,
7636 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7639 NTOSAPI NTSTATUS DDKAPI
7640 ZwCreateDirectoryObject(
7641 /*OUT*/ PHANDLE DirectoryHandle,
7642 /*IN*/ ACCESS_MASK DesiredAccess,
7643 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7646 NTOSAPI NTSTATUS DDKAPI
7648 /*OUT*/ PHANDLE EventHandle,
7649 /*IN*/ ACCESS_MASK DesiredAccess,
7650 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7651 /*IN*/ BOOLEAN ManualReset,
7652 /*IN*/ BOOLEAN InitialState
7655 NTOSAPI NTSTATUS DDKAPI
7657 /*OUT*/ PHANDLE EventHandle,
7658 /*IN*/ ACCESS_MASK DesiredAccess,
7659 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7660 /*IN*/ BOOLEAN ManualReset,
7661 /*IN*/ BOOLEAN InitialState
7664 NTOSAPI NTSTATUS DDKAPI
7666 /*OUT*/ PHANDLE FileHandle,
7667 /*IN*/ ACCESS_MASK DesiredAccess,
7668 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7669 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
7670 /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/,
7671 /*IN*/ ULONG FileAttributes,
7672 /*IN*/ ULONG ShareAccess,
7673 /*IN*/ ULONG CreateDisposition,
7674 /*IN*/ ULONG CreateOptions,
7675 /*IN*/ PVOID EaBuffer /*OPTIONAL*/,
7676 /*IN*/ ULONG EaLength
7679 NTOSAPI NTSTATUS DDKAPI
7681 /*OUT*/ PHANDLE FileHandle,
7682 /*IN*/ ACCESS_MASK DesiredAccess,
7683 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7684 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
7685 /*IN*/ PLARGE_INTEGER AllocationSize /*OPTIONAL*/,
7686 /*IN*/ ULONG FileAttributes,
7687 /*IN*/ ULONG ShareAccess,
7688 /*IN*/ ULONG CreateDisposition,
7689 /*IN*/ ULONG CreateOptions,
7690 /*IN*/ PVOID EaBuffer /*OPTIONAL*/,
7691 /*IN*/ ULONG EaLength
7694 NTOSAPI NTSTATUS DDKAPI
7696 /*OUT*/ PHANDLE KeyHandle,
7697 /*IN*/ ACCESS_MASK DesiredAccess,
7698 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7699 /*IN*/ ULONG TitleIndex,
7700 /*IN*/ PUNICODE_STRING Class /*OPTIONAL*/,
7701 /*IN*/ ULONG CreateOptions,
7702 /*OUT*/ PULONG Disposition /*OPTIONAL*/
7705 NTOSAPI NTSTATUS DDKAPI
7707 /*OUT*/ PHANDLE KeyHandle,
7708 /*IN*/ ACCESS_MASK DesiredAccess,
7709 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7710 /*IN*/ ULONG TitleIndex,
7711 /*IN*/ PUNICODE_STRING Class /*OPTIONAL*/,
7712 /*IN*/ ULONG CreateOptions,
7713 /*OUT*/ PULONG Disposition /*OPTIONAL*/
7716 NTOSAPI NTSTATUS DDKAPI
7718 /*OUT*/ PHANDLE TimerHandle,
7719 /*IN*/ ACCESS_MASK DesiredAccess,
7720 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
7721 /*IN*/ TIMER_TYPE TimerType
7724 NTOSAPI NTSTATUS DDKAPI
7726 /*OUT*/ PHANDLE TimerHandle,
7727 /*IN*/ ACCESS_MASK DesiredAccess,
7728 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes /*OPTIONAL*/,
7729 /*IN*/ TIMER_TYPE TimerType
7732 NTOSAPI NTSTATUS DDKAPI
7733 NtDeleteKey( /*IN*/ HANDLE KeyHandle );
7735 NTOSAPI NTSTATUS DDKAPI
7736 ZwDeleteKey( /*IN*/ HANDLE KeyHandle );
7738 NTOSAPI NTSTATUS DDKAPI
7739 NtDeleteValueKey( /*IN*/ HANDLE KeyHandle, /*IN*/ PUNICODE_STRING ValueName );
7741 NTOSAPI NTSTATUS DDKAPI
7742 ZwDeleteValueKey( /*IN*/ HANDLE KeyHandle, /*IN*/ PUNICODE_STRING ValueName );
7744 NTOSAPI NTSTATUS DDKAPI
7745 NtDeviceIoControlFile(
7746 /*IN*/ HANDLE DeviceHandle,
7747 /*IN*/ HANDLE Event /*OPTIONAL*/,
7748 /*IN*/ PIO_APC_ROUTINE UserApcRoutine /*OPTIONAL*/,
7749 /*IN*/ PVOID UserApcContext /*OPTIONAL*/,
7750 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
7751 /*IN*/ ULONG IoControlCode,
7752 /*IN*/ PVOID InputBuffer,
7753 /*IN*/ ULONG InputBufferSize,
7754 /*OUT*/ PVOID OutputBuffer,
7755 /*IN*/ ULONG OutputBufferSize
7758 NTOSAPI NTSTATUS DDKAPI
7759 ZwDeviceIoControlFile(
7760 /*IN*/ HANDLE DeviceHandle,
7761 /*IN*/ HANDLE Event /*OPTIONAL*/,
7762 /*IN*/ PIO_APC_ROUTINE UserApcRoutine /*OPTIONAL*/,
7763 /*IN*/ PVOID UserApcContext /*OPTIONAL*/,
7764 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
7765 /*IN*/ ULONG IoControlCode,
7766 /*IN*/ PVOID InputBuffer,
7767 /*IN*/ ULONG InputBufferSize,
7768 /*OUT*/ PVOID OutputBuffer,
7769 /*IN*/ ULONG OutputBufferSize
7772 NTOSAPI NTSTATUS DDKAPI
7774 /*IN*/ HANDLE KeyHandle,
7776 /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass,
7777 /*OUT*/ PVOID KeyInformation,
7778 /*IN*/ ULONG Length,
7779 /*OUT*/ PULONG ResultLength
7782 NTOSAPI NTSTATUS DDKAPI
7784 /*IN*/ HANDLE KeyHandle,
7786 /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass,
7787 /*OUT*/ PVOID KeyInformation,
7788 /*IN*/ ULONG Length,
7789 /*OUT*/ PULONG ResultLength
7792 NTOSAPI NTSTATUS DDKAPI
7793 NtEnumerateValueKey(
7794 /*IN*/ HANDLE KeyHandle,
7796 /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
7797 /*OUT*/ PVOID KeyValueInformation,
7798 /*IN*/ ULONG Length,
7799 /*OUT*/ PULONG ResultLength
7802 NTOSAPI NTSTATUS DDKAPI
7803 ZwEnumerateValueKey(
7804 /*IN*/ HANDLE KeyHandle,
7806 /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
7807 /*OUT*/ PVOID KeyValueInformation,
7808 /*IN*/ ULONG Length,
7809 /*OUT*/ PULONG ResultLength
7812 NTOSAPI NTSTATUS DDKAPI
7813 NtFlushKey( /*IN*/ HANDLE KeyHandle );
7815 NTOSAPI NTSTATUS DDKAPI
7816 ZwFlushKey( /*IN*/ HANDLE KeyHandle );
7818 NTOSAPI NTSTATUS DDKAPI
7819 NtMakeTemporaryObject( /*IN*/ HANDLE Handle );
7821 NTOSAPI NTSTATUS DDKAPI
7822 ZwMakeTemporaryObject( /*IN*/ HANDLE Handle );
7824 NTOSAPI NTSTATUS DDKAPI
7826 /*IN*/ HANDLE SectionHandle,
7827 /*IN*/ HANDLE ProcessHandle,
7828 /*IN OUT*/ PVOID *BaseAddress,
7829 /*IN*/ ULONG ZeroBits,
7830 /*IN*/ ULONG CommitSize,
7831 /*IN OUT*/ PLARGE_INTEGER SectionOffset /*OPTIONAL*/,
7832 /*IN OUT*/ PSIZE_T ViewSize,
7833 /*IN*/ SECTION_INHERIT InheritDisposition,
7834 /*IN*/ ULONG AllocationType,
7835 /*IN*/ ULONG Protect
7838 NTOSAPI NTSTATUS DDKAPI
7840 /*IN*/ HANDLE SectionHandle,
7841 /*IN*/ HANDLE ProcessHandle,
7842 /*IN OUT*/ PVOID *BaseAddress,
7843 /*IN*/ ULONG ZeroBits,
7844 /*IN*/ ULONG CommitSize,
7845 /*IN OUT*/ PLARGE_INTEGER SectionOffset /*OPTIONAL*/,
7846 /*IN OUT*/ PSIZE_T ViewSize,
7847 /*IN*/ SECTION_INHERIT InheritDisposition,
7848 /*IN*/ ULONG AllocationType,
7849 /*IN*/ ULONG Protect
7852 NTOSAPI NTSTATUS DDKAPI
7854 /*OUT*/ PHANDLE FileHandle,
7855 /*IN*/ ACCESS_MASK DesiredAccess,
7856 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7857 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
7858 /*IN*/ ULONG ShareAccess,
7859 /*IN*/ ULONG OpenOptions
7862 NTOSAPI NTSTATUS DDKAPI
7864 /*OUT*/ PHANDLE FileHandle,
7865 /*IN*/ ACCESS_MASK DesiredAccess,
7866 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes,
7867 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
7868 /*IN*/ ULONG ShareAccess,
7869 /*IN*/ ULONG OpenOptions
7872 NTOSAPI NTSTATUS DDKAPI
7874 /*OUT*/ PHANDLE KeyHandle,
7875 /*IN*/ ACCESS_MASK DesiredAccess,
7876 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7879 NTOSAPI NTSTATUS DDKAPI
7881 /*OUT*/ PHANDLE KeyHandle,
7882 /*IN*/ ACCESS_MASK DesiredAccess,
7883 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7886 NTOSAPI NTSTATUS DDKAPI
7888 /*OUT*/ PHANDLE SectionHandle,
7889 /*IN*/ ACCESS_MASK DesiredAccess,
7890 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7893 NTOSAPI NTSTATUS DDKAPI
7895 /*OUT*/ PHANDLE SectionHandle,
7896 /*IN*/ ACCESS_MASK DesiredAccess,
7897 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7900 NTOSAPI NTSTATUS DDKAPI
7901 NtOpenSymbolicLinkObject(
7902 /*OUT*/ PHANDLE LinkHandle,
7903 /*IN*/ ACCESS_MASK DesiredAccess,
7904 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7907 NTOSAPI NTSTATUS DDKAPI
7908 ZwOpenSymbolicLinkObject(
7909 /*OUT*/ PHANDLE LinkHandle,
7910 /*IN*/ ACCESS_MASK DesiredAccess,
7911 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7914 NTOSAPI NTSTATUS DDKAPI
7916 /*OUT*/ PHANDLE TimerHandle,
7917 /*IN*/ ACCESS_MASK DesiredAccess,
7918 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7921 NTOSAPI NTSTATUS DDKAPI
7923 /*OUT*/ PHANDLE TimerHandle,
7924 /*IN*/ ACCESS_MASK DesiredAccess,
7925 /*IN*/ POBJECT_ATTRIBUTES ObjectAttributes
7928 NTOSAPI NTSTATUS DDKAPI
7929 NtQueryInformationFile(
7930 /*IN*/ HANDLE FileHandle,
7931 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
7932 /*OUT*/ PVOID FileInformation,
7933 /*IN*/ ULONG Length,
7934 /*IN*/ FILE_INFORMATION_CLASS FileInformationClass
7937 NTOSAPI NTSTATUS DDKAPI
7938 ZwQueryInformationFile(
7939 /*IN*/ HANDLE FileHandle,
7940 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
7941 /*OUT*/ PVOID FileInformation,
7942 /*IN*/ ULONG Length,
7943 /*IN*/ FILE_INFORMATION_CLASS FileInformationClass
7946 NTOSAPI NTSTATUS DDKAPI
7948 /*IN*/ HANDLE KeyHandle,
7949 /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass,
7950 /*OUT*/ PVOID KeyInformation,
7951 /*IN*/ ULONG Length,
7952 /*OUT*/ PULONG ResultLength
7955 NTOSAPI NTSTATUS DDKAPI
7957 /*IN*/ HANDLE KeyHandle,
7958 /*IN*/ KEY_INFORMATION_CLASS KeyInformationClass,
7959 /*OUT*/ PVOID KeyInformation,
7960 /*IN*/ ULONG Length,
7961 /*OUT*/ PULONG ResultLength
7964 NTOSAPI NTSTATUS DDKAPI
7965 NtQuerySymbolicLinkObject(
7966 /*IN*/ HANDLE LinkHandle,
7967 /*IN OUT*/ PUNICODE_STRING LinkTarget,
7968 /*OUT*/ PULONG ReturnedLength /*OPTIONAL*/
7971 NTOSAPI NTSTATUS DDKAPI
7972 ZwQuerySymbolicLinkObject(
7973 /*IN*/ HANDLE LinkHandle,
7974 /*IN OUT*/ PUNICODE_STRING LinkTarget,
7975 /*OUT*/ PULONG ReturnedLength /*OPTIONAL*/
7978 NTOSAPI NTSTATUS DDKAPI
7980 /*IN*/ HANDLE TimerHandle,
7981 /*IN*/ TIMER_INFORMATION_CLASS TimerInformationClass,
7982 /*OUT*/ PVOID TimerInformation,
7983 /*IN*/ ULONG TimerInformationLength,
7984 /*OUT*/ PULONG ReturnedLength /*OPTIONAL*/
7987 NTOSAPI NTSTATUS DDKAPI
7989 /*IN*/ HANDLE TimerHandle,
7990 /*IN*/ TIMER_INFORMATION_CLASS TimerInformationClass,
7991 /*OUT*/ PVOID TimerInformation,
7992 /*IN*/ ULONG TimerInformationLength,
7993 /*OUT*/ PULONG ReturnedLength /*OPTIONAL*/
7996 NTOSAPI NTSTATUS DDKAPI
7998 /*IN*/ HANDLE KeyHandle,
7999 /*IN*/ PUNICODE_STRING ValueName,
8000 /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
8001 /*OUT*/ PVOID KeyValueInformation,
8002 /*IN*/ ULONG Length,
8003 /*OUT*/ PULONG ResultLength
8006 NTOSAPI NTSTATUS DDKAPI
8008 /*IN*/ HANDLE KeyHandle,
8009 /*IN*/ PUNICODE_STRING ValueName,
8010 /*IN*/ KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
8011 /*OUT*/ PVOID KeyValueInformation,
8012 /*IN*/ ULONG Length,
8013 /*OUT*/ PULONG ResultLength
8016 NTOSAPI NTSTATUS DDKAPI
8018 /*IN*/ HANDLE FileHandle,
8019 /*IN*/ HANDLE Event /*OPTIONAL*/,
8020 /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
8021 /*IN*/ PVOID ApcContext /*OPTIONAL*/,
8022 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
8023 /*OUT*/ PVOID Buffer,
8024 /*IN*/ ULONG Length,
8025 /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
8026 /*IN*/ PULONG Key /*OPTIONAL*/
8029 NTOSAPI NTSTATUS DDKAPI
8031 /*IN*/ HANDLE FileHandle,
8032 /*IN*/ HANDLE Event /*OPTIONAL*/,
8033 /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
8034 /*IN*/ PVOID ApcContext /*OPTIONAL*/,
8035 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
8036 /*OUT*/ PVOID Buffer,
8037 /*IN*/ ULONG Length,
8038 /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
8039 /*IN*/ PULONG Key /*OPTIONAL*/
8042 NTOSAPI NTSTATUS DDKAPI
8043 NtSetEvent( /*IN*/ HANDLE EventHandle, /*IN*/ PULONG NumberOfThreadsReleased );
8045 NTOSAPI NTSTATUS DDKAPI
8046 ZwSetEvent( /*IN*/ HANDLE EventHandle, /*IN*/ PULONG NumberOfThreadsReleased );
8048 NTOSAPI NTSTATUS DDKAPI
8049 NtSetInformationFile(
8050 /*IN*/ HANDLE FileHandle,
8051 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
8052 /*IN*/ PVOID FileInformation,
8053 /*IN*/ ULONG Length,
8054 /*IN*/ FILE_INFORMATION_CLASS FileInformationClass
8057 NTOSAPI NTSTATUS DDKAPI
8058 ZwSetInformationFile(
8059 /*IN*/ HANDLE FileHandle,
8060 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
8061 /*IN*/ PVOID FileInformation,
8062 /*IN*/ ULONG Length,
8063 /*IN*/ FILE_INFORMATION_CLASS FileInformationClass
8066 NTOSAPI NTSTATUS DDKAPI
8067 NtSetInformationThread(
8068 /*IN*/ HANDLE ThreadHandle,
8069 /*IN*/ THREADINFOCLASS ThreadInformationClass,
8070 /*IN*/ PVOID ThreadInformation,
8071 /*IN*/ ULONG ThreadInformationLength
8074 NTOSAPI NTSTATUS DDKAPI
8075 ZwSetInformationThread(
8076 /*IN*/ HANDLE ThreadHandle,
8077 /*IN*/ THREADINFOCLASS ThreadInformationClass,
8078 /*IN*/ PVOID ThreadInformation,
8079 /*IN*/ ULONG ThreadInformationLength
8082 NTOSAPI NTSTATUS DDKAPI
8084 /*IN*/ HANDLE TimerHandle,
8085 /*IN*/ PLARGE_INTEGER DueTime,
8086 /*IN*/ PTIMER_APC_ROUTINE TimerApcRoutine /*OPTIONAL*/,
8087 /*IN*/ PVOID TimerContext /*OPTIONAL*/,
8088 /*IN*/ BOOLEAN WakeTimer,
8089 /*IN*/ LONG Period /*OPTIONAL*/,
8090 /*OUT*/ PBOOLEAN PreviousState /*OPTIONAL*/
8093 NTOSAPI NTSTATUS DDKAPI
8095 /*IN*/ HANDLE TimerHandle,
8096 /*IN*/ PLARGE_INTEGER DueTime,
8097 /*IN*/ PTIMER_APC_ROUTINE TimerApcRoutine /*OPTIONAL*/,
8098 /*IN*/ PVOID TimerContext /*OPTIONAL*/,
8099 /*IN*/ BOOLEAN WakeTimer,
8100 /*IN*/ LONG Period /*OPTIONAL*/,
8101 /*OUT*/ PBOOLEAN PreviousState /*OPTIONAL*/
8104 NTOSAPI NTSTATUS DDKAPI
8106 /*IN*/ HANDLE KeyHandle,
8107 /*IN*/ PUNICODE_STRING ValueName,
8108 /*IN*/ ULONG TitleIndex /*OPTIONAL*/,
8111 /*IN*/ ULONG DataSize
8114 NTOSAPI NTSTATUS DDKAPI
8116 /*IN*/ HANDLE KeyHandle,
8117 /*IN*/ PUNICODE_STRING ValueName,
8118 /*IN*/ ULONG TitleIndex /*OPTIONAL*/,
8121 /*IN*/ ULONG DataSize
8124 /* [Nt|Zw]MapViewOfSection.InheritDisposition constants
8126 #define AT_EXTENDABLE_FILE 0x00002000
8127 #define SEC_NO_CHANGE 0x00400000
8128 #define AT_RESERVED 0x20000000
8129 #define AT_ROUND_TO_PAGE 0x40000000
8131 NTOSAPI NTSTATUS DDKAPI
8132 NtUnmapViewOfSection( /*IN*/ HANDLE ProcessHandle, /*IN*/ PVOID BaseAddress );
8134 NTOSAPI NTSTATUS DDKAPI
8135 ZwUnmapViewOfSection( /*IN*/ HANDLE ProcessHandle, /*IN*/ PVOID BaseAddress );
8137 NTOSAPI NTSTATUS DDKAPI
8138 NtWaitForSingleObject(
8139 /*IN*/ HANDLE Object,
8140 /*IN*/ BOOLEAN Alertable,
8141 /*IN*/ PLARGE_INTEGER Time
8144 NTOSAPI NTSTATUS DDKAPI
8145 ZwWaitForSingleObject(
8146 /*IN*/ HANDLE Object,
8147 /*IN*/ BOOLEAN Alertable,
8148 /*IN*/ PLARGE_INTEGER Time
8151 NTOSAPI NTSTATUS DDKAPI
8153 /*IN*/ HANDLE FileHandle,
8154 /*IN*/ HANDLE Event /*OPTIONAL*/,
8155 /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
8156 /*IN*/ PVOID ApcContext /*OPTIONAL*/,
8157 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
8158 /*IN*/ PVOID Buffer,
8159 /*IN*/ ULONG Length,
8160 /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
8161 /*IN*/ PULONG Key /*OPTIONAL*/
8164 NTOSAPI NTSTATUS DDKAPI
8166 /*IN*/ HANDLE FileHandle,
8167 /*IN*/ HANDLE Event /*OPTIONAL*/,
8168 /*IN*/ PIO_APC_ROUTINE ApcRoutine /*OPTIONAL*/,
8169 /*IN*/ PVOID ApcContext /*OPTIONAL*/,
8170 /*OUT*/ PIO_STATUS_BLOCK IoStatusBlock,
8171 /*IN*/ PVOID Buffer,
8172 /*IN*/ ULONG Length,
8173 /*IN*/ PLARGE_INTEGER ByteOffset /*OPTIONAL*/,
8174 /*IN*/ PULONG Key /*OPTIONAL*/
8178 /** Power management support routines **/
8180 NTOSAPI NTSTATUS DDKAPI
8181 PoCallDriver( /*IN*/ PDEVICE_OBJECT DeviceObject, /*IN OUT*/ PIRP Irp );
8183 NTOSAPI PULONG DDKAPI
8184 PoRegisterDeviceForIdleDetection(
8185 /*IN*/ PDEVICE_OBJECT DeviceObject,
8186 /*IN*/ ULONG ConservationIdleTime,
8187 /*IN*/ ULONG PerformanceIdleTime,
8188 /*IN*/ DEVICE_POWER_STATE State
8191 NTOSAPI PVOID DDKAPI
8192 PoRegisterSystemState( /*IN*/ PVOID StateHandle, /*IN*/ EXECUTION_STATE Flags );
8194 NTOSAPI NTSTATUS DDKAPI
8196 /*IN*/ PDEVICE_OBJECT DeviceObject,
8197 /*IN*/ UCHAR MinorFunction,
8198 /*IN*/ POWER_STATE PowerState,
8199 /*IN*/ PREQUEST_POWER_COMPLETE CompletionFunction,
8200 /*IN*/ PVOID Context,
8201 /*OUT*/ PIRP *Irp /*OPTIONAL*/
8204 NTOSAPI NTSTATUS DDKAPI
8205 PoRequestShutdownEvent( /*OUT*/ PVOID *Event );
8208 PoSetDeviceBusy( PULONG IdlePointer );
8210 NTOSAPI POWER_STATE DDKAPI
8212 /*IN*/ PDEVICE_OBJECT DeviceObject,
8213 /*IN*/ POWER_STATE_TYPE Type,
8214 /*IN*/ POWER_STATE State
8218 PoSetSystemState( /*IN*/ EXECUTION_STATE Flags );
8221 PoStartNextPowerIrp( /*IN*/ PIRP Irp );
8224 PoUnregisterSystemState( /*IN*/ PVOID StateHandle );
8227 /** WMI library support routines **/
8229 NTOSAPI NTSTATUS DDKAPI
8231 /*IN*/ PDEVICE_OBJECT DeviceObject,
8233 /*IN*/ NTSTATUS Status,
8234 /*IN*/ ULONG BufferUsed,
8235 /*IN*/ CCHAR PriorityBoost
8238 NTOSAPI NTSTATUS DDKAPI
8240 /*IN*/ PDEVICE_OBJECT DeviceObject,
8242 /*IN*/ ULONG InstanceIndex,
8243 /*IN*/ ULONG EventDataSize,
8244 /*IN*/ PVOID EventData
8247 NTOSAPI NTSTATUS DDKAPI
8248 WmiQueryTraceInformation(
8249 /*IN*/ TRACE_INFORMATION_CLASS TraceInformationClass,
8250 /*OUT*/ PVOID TraceInformation,
8251 /*IN*/ ULONG TraceInformationLength,
8252 /*OUT*/ PULONG RequiredLength /*OPTIONAL*/,
8253 /*IN*/ PVOID Buffer /*OPTIONAL*/
8256 NTOSAPI NTSTATUS DDKAPI
8258 /*IN*/ PWMILIB_CONTEXT WmiLibInfo,
8259 /*IN*/ PDEVICE_OBJECT DeviceObject,
8261 /*OUT*/ PSYSCTL_IRP_DISPOSITION IrpDisposition
8264 NTOSAPI NTSTATUS DDKCDECLAPI
8266 /*IN*/ TRACEHANDLE LoggerHandle,
8267 /*IN*/ ULONG MessageFlags,
8268 /*IN*/ LPGUID MessageGuid,
8269 /*IN*/ USHORT MessageNumber,
8274 /* FIXME: Get va_list from where? */
8275 NTOSAPI NTSTATUS DDKCDECLAPI
8277 /*IN*/ TRACEHANDLE LoggerHandle,
8278 /*IN*/ ULONG MessageFlags,
8279 /*IN*/ LPGUID MessageGuid,
8280 /*IN*/ USHORT MessageNumber,
8281 /*IN*/ va_list MessageArgList
8286 /** Kernel debugger routines **/
8289 KdDisableDebugger( VOID );
8292 KdEnableDebugger( VOID );
8295 DbgBreakPoint( VOID );
8298 DbgBreakPointWithStatus( /*IN*/ ULONG Status );
8300 NTOSAPI ULONG DDKCDECLAPI
8301 DbgPrint( /*IN*/ PCH Format, /*IN*/ ... );
8303 NTOSAPI ULONG DDKCDECLAPI
8305 /*IN*/ ULONG ComponentId,
8311 NTOSAPI ULONG DDKCDECLAPI
8312 DbgPrintReturnControlC( /*IN*/ PCH Format, /*IN*/ ... );
8314 NTOSAPI NTSTATUS DDKAPI
8315 DbgQueryDebugFilterState( /*IN*/ ULONG ComponentId, /*IN*/ ULONG Level );
8317 NTOSAPI NTSTATUS DDKAPI
8318 DbgSetDebugFilterState(
8319 /*IN*/ ULONG ComponentId,
8321 /*IN*/ BOOLEAN State
8326 #define KdPrint(_x_) DbgPrint _x_
8327 #define KdPrintEx(_x_) DbgPrintEx _x_
8328 #define KdBreakPoint() DbgBreakPoint()
8329 #define KdBreakPointWithStatus(s) DbgBreakPointWithStatus(s)
8333 #define KdPrint(_x_)
8334 #define KdPrintEx(_x_)
8335 #define KdBreakPoint()
8336 #define KdBreakPointWithStatus(s)
8340 extern NTOSAPI PBOOLEAN KdDebuggerNotPresent;
8341 extern NTOSAPI PBOOLEAN KdDebuggerEnabled;
8342 #define KD_DEBUGGER_ENABLED *KdDebuggerEnabled
8343 #define KD_DEBUGGER_NOT_PRESENT *KdDebuggerNotPresent
8347 #endif /* _DDK_WINDDK_H */
8348 #endif /* _DDK_NTDDK_H || __WINIOCTL_H_SOURCED__ */
8349 #endif /* !_DDK_WINDDK_H: $RCSfile$: end of file */