1 | /*
|
---|
2 | * Copyright 2004-2005 Ivan Leo Puoti
|
---|
3 | *
|
---|
4 | * This library is free software; you can redistribute it and/or
|
---|
5 | * modify it under the terms of the GNU Lesser General Public
|
---|
6 | * License as published by the Free Software Foundation; either
|
---|
7 | * version 2.1 of the License, or (at your option) any later version.
|
---|
8 | *
|
---|
9 | * This library is distributed in the hope that it will be useful,
|
---|
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
12 | * Lesser General Public License for more details.
|
---|
13 | *
|
---|
14 | * You should have received a copy of the GNU Lesser General Public
|
---|
15 | * License along with this library; if not, write to the Free Software
|
---|
16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
---|
17 | */
|
---|
18 |
|
---|
19 | /*
|
---|
20 | * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
|
---|
21 | * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
|
---|
22 | * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
|
---|
23 | * a choice of LGPL license versions is made available with the language indicating
|
---|
24 | * that LGPLv2 or any later version may be used, or where a choice of which version
|
---|
25 | * of the LGPL is applied is otherwise unspecified.
|
---|
26 | */
|
---|
27 |
|
---|
28 | #ifndef _WDMDDK_
|
---|
29 | #define _WDMDDK_
|
---|
30 | #define _NTDDK_
|
---|
31 |
|
---|
32 | #include <ntstatus.h>
|
---|
33 |
|
---|
34 | #ifdef _WIN64
|
---|
35 | #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
|
---|
36 | #else
|
---|
37 | #define POINTER_ALIGNMENT
|
---|
38 | #endif
|
---|
39 |
|
---|
40 | typedef LONG KPRIORITY;
|
---|
41 |
|
---|
42 | typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
|
---|
43 |
|
---|
44 | struct _KDPC;
|
---|
45 | struct _KAPC;
|
---|
46 | struct _IRP;
|
---|
47 | struct _DEVICE_OBJECT;
|
---|
48 | struct _DRIVER_OBJECT;
|
---|
49 |
|
---|
50 | typedef VOID (WINAPI *PKDEFERRED_ROUTINE)(struct _KDPC *, PVOID, PVOID, PVOID);
|
---|
51 | typedef VOID (WINAPI *PKSTART_ROUTINE)(PVOID);
|
---|
52 |
|
---|
53 | typedef NTSTATUS (WINAPI *PDRIVER_INITIALIZE)(struct _DRIVER_OBJECT *, PUNICODE_STRING);
|
---|
54 | typedef NTSTATUS (WINAPI *PDRIVER_DISPATCH)(struct _DEVICE_OBJECT *, struct _IRP *);
|
---|
55 | typedef void (WINAPI *PDRIVER_STARTIO)(struct _DEVICE_OBJECT *, struct _IRP *);
|
---|
56 | typedef void (WINAPI *PDRIVER_UNLOAD)(struct _DRIVER_OBJECT *);
|
---|
57 |
|
---|
58 | typedef struct _DISPATCHER_HEADER {
|
---|
59 | UCHAR Type;
|
---|
60 | UCHAR Absolute;
|
---|
61 | UCHAR Size;
|
---|
62 | UCHAR Inserted;
|
---|
63 | LONG SignalState;
|
---|
64 | LIST_ENTRY WaitListHead;
|
---|
65 | } DISPATCHER_HEADER, *PDISPATCHER_HEADER;
|
---|
66 |
|
---|
67 | typedef struct _KEVENT {
|
---|
68 | DISPATCHER_HEADER Header;
|
---|
69 | } KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
|
---|
70 |
|
---|
71 | typedef struct _KSEMAPHORE {
|
---|
72 | DISPATCHER_HEADER Header;
|
---|
73 | LONG Limit;
|
---|
74 | } KSEMAPHORE, *PKSEMAPHORE, *PRKSEMAPHORE;
|
---|
75 |
|
---|
76 | typedef struct _KDPC {
|
---|
77 | CSHORT Type;
|
---|
78 | UCHAR Number;
|
---|
79 | UCHAR Importance;
|
---|
80 | LIST_ENTRY DpcListEntry;
|
---|
81 | PKDEFERRED_ROUTINE DeferredRoutine;
|
---|
82 | PVOID DeferredContext;
|
---|
83 | PVOID SystemArgument1;
|
---|
84 | PVOID SystemArgument2;
|
---|
85 | PULONG_PTR Lock;
|
---|
86 | } KDPC, *PKDPC, *RESTRICTED_POINTER PRKDPC;
|
---|
87 |
|
---|
88 | typedef struct _KDEVICE_QUEUE_ENTRY {
|
---|
89 | LIST_ENTRY DeviceListEntry;
|
---|
90 | ULONG SortKey;
|
---|
91 | BOOLEAN Inserted;
|
---|
92 | } KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY,
|
---|
93 | *RESTRICTED_POINTER PRKDEVICE_QUEUE_ENTRY;
|
---|
94 |
|
---|
95 | typedef struct _KDEVICE_QUEUE {
|
---|
96 | CSHORT Type;
|
---|
97 | CSHORT Size;
|
---|
98 | LIST_ENTRY DeviceListHead;
|
---|
99 | KSPIN_LOCK Lock;
|
---|
100 | BOOLEAN Busy;
|
---|
101 | } KDEVICE_QUEUE, *PKDEVICE_QUEUE, *RESTRICTED_POINTER PRKDEVICE_QUEUE;
|
---|
102 |
|
---|
103 | typedef struct _KMUTANT {
|
---|
104 | DISPATCHER_HEADER Header;
|
---|
105 | LIST_ENTRY MutantListEntry;
|
---|
106 | struct _KTHREAD *RESTRICTED_POINTER OwnerThread;
|
---|
107 | BOOLEAN Abandoned;
|
---|
108 | UCHAR ApcDisable;
|
---|
109 | } KMUTANT, *PKMUTANT, *RESTRICTED_POINTER PRKMUTANT, KMUTEX, *PKMUTEX, *RESTRICTED_POINTER PRKMUTEX;
|
---|
110 |
|
---|
111 | typedef enum _KWAIT_REASON
|
---|
112 | {
|
---|
113 | Executive,
|
---|
114 | FreePage,
|
---|
115 | PageIn,
|
---|
116 | PoolAllocation,
|
---|
117 | DelayExecution,
|
---|
118 | Suspended,
|
---|
119 | UserRequest,
|
---|
120 | WrExecutive,
|
---|
121 | WrFreePage,
|
---|
122 | WrPageIn,
|
---|
123 | WrDelayExecution,
|
---|
124 | WrSuspended,
|
---|
125 | WrUserRequest,
|
---|
126 | WrQueue,
|
---|
127 | WrLpcReceive,
|
---|
128 | WrLpcReply,
|
---|
129 | WrVirtualMemory,
|
---|
130 | WrPageOut,
|
---|
131 | WrRendezvous,
|
---|
132 | Spare2,
|
---|
133 | Spare3,
|
---|
134 | Spare4,
|
---|
135 | Spare5,
|
---|
136 | Spare6,
|
---|
137 | WrKernel,
|
---|
138 | MaximumWaitReason,
|
---|
139 | } KWAIT_REASON;
|
---|
140 |
|
---|
141 | typedef struct _ALLOCATE_FUNCTION *PALLOCATE_FUNCTION;
|
---|
142 | typedef struct _IO_TIMER *PIO_TIMER;
|
---|
143 | typedef struct _IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
|
---|
144 | typedef struct _ETHREAD *PETHREAD;
|
---|
145 | typedef struct _FREE_FUNCTION *PFREE_FUNCTION;
|
---|
146 | typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
|
---|
147 | typedef struct _EPROCESS *PEPROCESS;
|
---|
148 | typedef struct _ERESOURCE *PERESOURCE;
|
---|
149 | typedef struct _IO_WORKITEM *PIO_WORKITEM;
|
---|
150 | typedef struct _NPAGED_LOOKASIDE_LIST *PNPAGED_LOOKASIDE_LIST;
|
---|
151 | typedef struct _PAGED_LOOKASIDE_LIST *PPAGED_LOOKASIDE_LIST;
|
---|
152 | typedef struct _OBJECT_TYPE *POBJECT_TYPE;
|
---|
153 | typedef struct _OBJECT_HANDLE_INFORMATION *POBJECT_HANDLE_INFORMATION;
|
---|
154 | typedef struct _ZONE_HEADER *PZONE_HEADER;
|
---|
155 |
|
---|
156 | typedef struct _FAST_MUTEX
|
---|
157 | {
|
---|
158 | LONG Count;
|
---|
159 | PKTHREAD Owner;
|
---|
160 | ULONG Contention;
|
---|
161 | KEVENT Gate;
|
---|
162 | ULONG OldIrql;
|
---|
163 | } FAST_MUTEX, *PFAST_MUTEX;
|
---|
164 |
|
---|
165 | #define MAXIMUM_VOLUME_LABEL_LENGTH (32 * sizeof(WCHAR))
|
---|
166 |
|
---|
167 | typedef struct _VPB {
|
---|
168 | CSHORT Type;
|
---|
169 | CSHORT Size;
|
---|
170 | USHORT Flags;
|
---|
171 | USHORT VolumeLabelLength;
|
---|
172 | struct _DEVICE_OBJECT *DeviceObject;
|
---|
173 | struct _DEVICE_OBJECT *RealDevice;
|
---|
174 | ULONG SerialNumber;
|
---|
175 | ULONG ReferenceCount;
|
---|
176 | WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
|
---|
177 | } VPB, *PVPB;
|
---|
178 |
|
---|
179 | typedef enum _POOL_TYPE {
|
---|
180 | NonPagedPool,
|
---|
181 | PagedPool,
|
---|
182 | NonPagedPoolMustSucceed,
|
---|
183 | DontUseThisType,
|
---|
184 | NonPagedPoolCacheAligned,
|
---|
185 | PagedPoolCacheAligned,
|
---|
186 | NonPagedPoolCacheAlignedMustS,
|
---|
187 | MaxPoolType
|
---|
188 | } POOL_TYPE;
|
---|
189 |
|
---|
190 | typedef struct _WAIT_CONTEXT_BLOCK {
|
---|
191 | KDEVICE_QUEUE_ENTRY WaitQueueEntry;
|
---|
192 | struct _DRIVER_CONTROL *DeviceRoutine;
|
---|
193 | PVOID DeviceContext;
|
---|
194 | ULONG NumberOfMapRegisters;
|
---|
195 | PVOID DeviceObject;
|
---|
196 | PVOID CurrentIrp;
|
---|
197 | PKDPC BufferChainingDpc;
|
---|
198 | } WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
|
---|
199 |
|
---|
200 | #define DO_BUFFERED_IO 0x00000004
|
---|
201 | #define DO_EXCLUSIVE 0x00000008
|
---|
202 | #define DO_DIRECT_IO 0x00000010
|
---|
203 | #define DO_MAP_IO_BUFFER 0x00000020
|
---|
204 | #define DO_DEVICE_INITIALIZING 0x00000080
|
---|
205 | #define DO_SHUTDOWN_REGISTERED 0x00000800
|
---|
206 | #define DO_BUS_ENUMERATED_DEVICE 0x00001000
|
---|
207 | #define DO_POWER_PAGABLE 0x00002000
|
---|
208 | #define DO_POWER_INRUSH 0x00004000
|
---|
209 |
|
---|
210 | #define IO_NO_INCREMENT 0
|
---|
211 | #define IO_CD_ROM_INCREMENT 1
|
---|
212 | #define IO_DISK_INCREMENT 1
|
---|
213 | #define IO_KEYBOARD_INCREMENT 6
|
---|
214 | #define IO_MAILSLOT_INCREMENT 2
|
---|
215 | #define IO_MOUSE_INCREMENT 6
|
---|
216 | #define IO_NAMED_PIPE_INCREMENT 2
|
---|
217 | #define IO_NETWORK_INCREMENT 2
|
---|
218 | #define IO_PARALLEL_INCREMENT 1
|
---|
219 | #define IO_SERIAL_INCREMENT 2
|
---|
220 | #define IO_SOUND_INCREMENT 8
|
---|
221 | #define IO_VIDEO_INCREMENT 1
|
---|
222 |
|
---|
223 | #ifndef DEVICE_TYPE
|
---|
224 | #define DEVICE_TYPE ULONG
|
---|
225 | #endif
|
---|
226 | #define IRP_MJ_MAXIMUM_FUNCTION 0x1b
|
---|
227 | #define IRP_MJ_CREATE 0x00
|
---|
228 | #define IRP_MJ_CREATE_NAMED_PIPE 0x01
|
---|
229 | #define IRP_MJ_CLOSE 0x02
|
---|
230 | #define IRP_MJ_READ 0x03
|
---|
231 | #define IRP_MJ_WRITE 0x04
|
---|
232 | #define IRP_MJ_QUERY_INFORMATION 0x05
|
---|
233 | #define IRP_MJ_SET_INFORMATION 0x06
|
---|
234 | #define IRP_MJ_QUERY_EA 0x07
|
---|
235 | #define IRP_MJ_SET_EA 0x08
|
---|
236 | #define IRP_MJ_FLUSH_BUFFERS 0x09
|
---|
237 | #define IRP_MJ_QUERY_VOLUME_INFORMATION 0x0a
|
---|
238 | #define IRP_MJ_SET_VOLUME_INFORMATION 0x0b
|
---|
239 | #define IRP_MJ_DIRECTORY_CONTROL 0x0c
|
---|
240 | #define IRP_MJ_FILE_SYSTEM_CONTROL 0x0d
|
---|
241 | #define IRP_MJ_DEVICE_CONTROL 0x0e
|
---|
242 | #define IRP_MJ_INTERNAL_DEVICE_CONTROL 0x0f
|
---|
243 | #define IRP_MJ_SHUTDOWN 0x10
|
---|
244 | #define IRP_MJ_LOCK_CONTROL 0x11
|
---|
245 | #define IRP_MJ_CLEANUP 0x12
|
---|
246 | #define IRP_MJ_CREATE_MAILSLOT 0x13
|
---|
247 | #define IRP_MJ_QUERY_SECURITY 0x14
|
---|
248 | #define IRP_MJ_SET_SECURITY 0x15
|
---|
249 | #define IRP_MJ_POWER 0x16
|
---|
250 | #define IRP_MJ_SYSTEM_CONTROL 0x17
|
---|
251 | #define IRP_MJ_DEVICE_CHANGE 0x18
|
---|
252 | #define IRP_MJ_QUERY_QUOTA 0x19
|
---|
253 | #define IRP_MJ_SET_QUOTA 0x1a
|
---|
254 | #define IRP_MJ_PNP 0x1b
|
---|
255 |
|
---|
256 | #define IRP_MN_START_DEVICE 0x00
|
---|
257 | #define IRP_MN_QUERY_REMOVE_DEVICE 0x01
|
---|
258 | #define IRP_MN_REMOVE_DEVICE 0x02
|
---|
259 | #define IRP_MN_CANCEL_REMOVE_DEVICE 0x03
|
---|
260 | #define IRP_MN_STOP_DEVICE 0x04
|
---|
261 | #define IRP_MN_QUERY_STOP_DEVICE 0x05
|
---|
262 | #define IRP_MN_CANCEL_STOP_DEVICE 0x06
|
---|
263 | #define IRP_MN_QUERY_DEVICE_RELATIONS 0x07
|
---|
264 | #define IRP_MN_QUERY_INTERFACE 0x08
|
---|
265 | #define IRP_MN_QUERY_CAPABILITIES 0x09
|
---|
266 | #define IRP_MN_QUERY_RESOURCES 0x0A
|
---|
267 | #define IRP_MN_QUERY_RESOURCE_REQUIREMENTS 0x0B
|
---|
268 | #define IRP_MN_QUERY_DEVICE_TEXT 0x0C
|
---|
269 | #define IRP_MN_FILTER_RESOURCE_REQUIREMENTS 0x0D
|
---|
270 | #define IRP_MN_READ_CONFIG 0x0F
|
---|
271 | #define IRP_MN_WRITE_CONFIG 0x10
|
---|
272 | #define IRP_MN_EJECT 0x11
|
---|
273 | #define IRP_MN_SET_LOCK 0x12
|
---|
274 | #define IRP_MN_QUERY_ID 0x13
|
---|
275 | #define IRP_MN_QUERY_PNP_DEVICE_STATE 0x14
|
---|
276 | #define IRP_MN_QUERY_BUS_INFORMATION 0x15
|
---|
277 | #define IRP_MN_DEVICE_USAGE_NOTIFICATION 0x16
|
---|
278 | #define IRP_MN_SURPRISE_REMOVAL 0x17
|
---|
279 | #define IRP_MN_QUERY_LEGACY_BUS_INFORMATION 0x18
|
---|
280 |
|
---|
281 | #define IRP_QUOTA_CHARGED 0x01
|
---|
282 | #define IRP_ALLOCATED_MUST_SUCCEED 0x02
|
---|
283 | #define IRP_ALLOCATED_FIXED_SIZE 0x04
|
---|
284 | #define IRP_LOOKASIDE_ALLOCATION 0x08
|
---|
285 |
|
---|
286 | #define IO_TYPE_ADAPTER 0x01
|
---|
287 | #define IO_TYPE_CONTROLLER 0x02
|
---|
288 | #define IO_TYPE_DEVICE 0x03
|
---|
289 | #define IO_TYPE_DRIVER 0x04
|
---|
290 | #define IO_TYPE_FILE 0x05
|
---|
291 | #define IO_TYPE_IRP 0x06
|
---|
292 | #define IO_TYPE_MASTER_ADAPTER 0x07
|
---|
293 | #define IO_TYPE_OPEN_PACKET 0x08
|
---|
294 | #define IO_TYPE_TIMER 0x09
|
---|
295 | #define IO_TYPE_VPB 0x0a
|
---|
296 | #define IO_TYPE_ERROR_LOG 0x0b
|
---|
297 | #define IO_TYPE_ERROR_MESSAGE 0x0c
|
---|
298 | #define IO_TYPE_DEVICE_OBJECT_EXTENSION 0x0d
|
---|
299 |
|
---|
300 | typedef struct _DEVICE_OBJECT {
|
---|
301 | CSHORT Type;
|
---|
302 | USHORT Size;
|
---|
303 | LONG ReferenceCount;
|
---|
304 | struct _DRIVER_OBJECT *DriverObject;
|
---|
305 | struct _DEVICE_OBJECT *NextDevice;
|
---|
306 | struct _DEVICE_OBJECT *AttachedDevice;
|
---|
307 | struct _IRP *CurrentIrp;
|
---|
308 | PIO_TIMER Timer;
|
---|
309 | ULONG Flags;
|
---|
310 | ULONG Characteristics;
|
---|
311 | PVPB Vpb;
|
---|
312 | PVOID DeviceExtension;
|
---|
313 | DEVICE_TYPE DeviceType;
|
---|
314 | CCHAR StackSize;
|
---|
315 | union {
|
---|
316 | LIST_ENTRY ListEntry;
|
---|
317 | WAIT_CONTEXT_BLOCK Wcb;
|
---|
318 | } Queue;
|
---|
319 | ULONG AlignmentRequirement;
|
---|
320 | KDEVICE_QUEUE DeviceQueue;
|
---|
321 | KDPC Dpc;
|
---|
322 | ULONG ActiveThreadCount;
|
---|
323 | PSECURITY_DESCRIPTOR SecurityDescriptor;
|
---|
324 | KEVENT DeviceLock;
|
---|
325 | USHORT SectorSize;
|
---|
326 | USHORT Spare1;
|
---|
327 | struct _DEVOBJ_EXTENSION *DeviceObjectExtension;
|
---|
328 | PVOID Reserved;
|
---|
329 | } DEVICE_OBJECT;
|
---|
330 | typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
|
---|
331 |
|
---|
332 | typedef struct _DEVICE_RELATIONS {
|
---|
333 | ULONG Count;
|
---|
334 | PDEVICE_OBJECT Objects[1];
|
---|
335 | } DEVICE_RELATIONS;
|
---|
336 | typedef struct _DEVICE_RELATIONS *PDEVICE_RELATIONS;
|
---|
337 |
|
---|
338 | typedef struct _DRIVER_EXTENSION {
|
---|
339 | struct _DRIVER_OBJECT *DriverObject;
|
---|
340 | PVOID AddDevice;
|
---|
341 | ULONG Count;
|
---|
342 | UNICODE_STRING ServiceKeyName;
|
---|
343 | } DRIVER_EXTENSION, *PDRIVER_EXTENSION;
|
---|
344 |
|
---|
345 | typedef struct _DRIVER_OBJECT {
|
---|
346 | CSHORT Type;
|
---|
347 | CSHORT Size;
|
---|
348 | PDEVICE_OBJECT DeviceObject;
|
---|
349 | ULONG Flags;
|
---|
350 | PVOID DriverStart;
|
---|
351 | ULONG DriverSize;
|
---|
352 | PVOID DriverSection;
|
---|
353 | PDRIVER_EXTENSION DriverExtension;
|
---|
354 | UNICODE_STRING DriverName;
|
---|
355 | PUNICODE_STRING HardwareDatabase;
|
---|
356 | PVOID FastIoDispatch;
|
---|
357 | PDRIVER_INITIALIZE DriverInit;
|
---|
358 | PDRIVER_STARTIO DriverStartIo;
|
---|
359 | PDRIVER_UNLOAD DriverUnload;
|
---|
360 | PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
|
---|
361 | } DRIVER_OBJECT;
|
---|
362 | typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
|
---|
363 |
|
---|
364 | /* Irp definitions */
|
---|
365 | typedef UCHAR KIRQL, *PKIRQL;
|
---|
366 | typedef CCHAR KPROCESSOR_MODE;
|
---|
367 |
|
---|
368 | typedef VOID (WINAPI *PDRIVER_CANCEL)(
|
---|
369 | IN struct _DEVICE_OBJECT *DeviceObject,
|
---|
370 | IN struct _IRP *Irp);
|
---|
371 |
|
---|
372 | typedef VOID (WINAPI *PKNORMAL_ROUTINE)(
|
---|
373 | IN PVOID NormalContext,
|
---|
374 | IN PVOID SystemArgument1,
|
---|
375 | IN PVOID SystemArgument2);
|
---|
376 |
|
---|
377 | typedef VOID (WINAPI *PKKERNEL_ROUTINE)(
|
---|
378 | IN struct _KAPC *Apc,
|
---|
379 | IN OUT PKNORMAL_ROUTINE *NormalRoutine,
|
---|
380 | IN OUT PVOID *NormalContext,
|
---|
381 | IN OUT PVOID *SystemArgument1,
|
---|
382 | IN OUT PVOID *SystemArgument2);
|
---|
383 |
|
---|
384 | typedef VOID (WINAPI *PKRUNDOWN_ROUTINE)(
|
---|
385 | IN struct _KAPC *Apc);
|
---|
386 |
|
---|
387 | typedef struct _KAPC {
|
---|
388 | CSHORT Type;
|
---|
389 | CSHORT Size;
|
---|
390 | ULONG Spare0;
|
---|
391 | struct _KTHREAD *Thread;
|
---|
392 | LIST_ENTRY ApcListEntry;
|
---|
393 | PKKERNEL_ROUTINE KernelRoutine;
|
---|
394 | PKRUNDOWN_ROUTINE RundownRoutine;
|
---|
395 | PKNORMAL_ROUTINE NormalRoutine;
|
---|
396 | PVOID NormalContext;
|
---|
397 | PVOID SystemArgument1;
|
---|
398 | PVOID SystemArgument2;
|
---|
399 | CCHAR ApcStateIndex;
|
---|
400 | KPROCESSOR_MODE ApcMode;
|
---|
401 | BOOLEAN Inserted;
|
---|
402 | } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC;
|
---|
403 |
|
---|
404 | #include <pshpack1.h>
|
---|
405 | typedef struct _IRP {
|
---|
406 | CSHORT Type;
|
---|
407 | USHORT Size;
|
---|
408 | struct _MDL *MdlAddress;
|
---|
409 | ULONG Flags;
|
---|
410 | union {
|
---|
411 | struct _IRP *MasterIrp;
|
---|
412 | LONG IrpCount;
|
---|
413 | PVOID SystemBuffer;
|
---|
414 | } AssociatedIrp;
|
---|
415 | LIST_ENTRY ThreadListEntry;
|
---|
416 | IO_STATUS_BLOCK IoStatus;
|
---|
417 | KPROCESSOR_MODE RequestorMode;
|
---|
418 | BOOLEAN PendingReturned;
|
---|
419 | CHAR StackCount;
|
---|
420 | CHAR CurrentLocation;
|
---|
421 | BOOLEAN Cancel;
|
---|
422 | KIRQL CancelIrql;
|
---|
423 | CCHAR ApcEnvironment;
|
---|
424 | UCHAR AllocationFlags;
|
---|
425 | PIO_STATUS_BLOCK UserIosb;
|
---|
426 | PKEVENT UserEvent;
|
---|
427 | union {
|
---|
428 | struct {
|
---|
429 | PIO_APC_ROUTINE UserApcRoutine;
|
---|
430 | PVOID UserApcContext;
|
---|
431 | } AsynchronousParameters;
|
---|
432 | LARGE_INTEGER AllocationSize;
|
---|
433 | } Overlay;
|
---|
434 | PDRIVER_CANCEL CancelRoutine;
|
---|
435 | PVOID UserBuffer;
|
---|
436 | union {
|
---|
437 | struct {
|
---|
438 | union {
|
---|
439 | KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
|
---|
440 | struct {
|
---|
441 | PVOID DriverContext[4];
|
---|
442 | } DUMMYSTRUCTNAME;
|
---|
443 | } DUMMYUNIONNAME1;
|
---|
444 | PETHREAD Thread;
|
---|
445 | PCHAR AuxiliaryBuffer;
|
---|
446 | struct {
|
---|
447 | LIST_ENTRY ListEntry;
|
---|
448 | union {
|
---|
449 | struct _IO_STACK_LOCATION *CurrentStackLocation;
|
---|
450 | ULONG PacketType;
|
---|
451 | } DUMMYUNIONNAME2;
|
---|
452 | } DUMMYSTRUCTNAME;
|
---|
453 | struct _FILE_OBJECT *OriginalFileObject;
|
---|
454 | } Overlay;
|
---|
455 | KAPC Apc;
|
---|
456 | PVOID CompletionKey;
|
---|
457 | } Tail;
|
---|
458 | } IRP;
|
---|
459 | typedef struct _IRP *PIRP;
|
---|
460 | #include <poppack.h>
|
---|
461 |
|
---|
462 | typedef VOID (WINAPI *PINTERFACE_REFERENCE)(
|
---|
463 | PVOID Context);
|
---|
464 |
|
---|
465 | typedef VOID (WINAPI *PINTERFACE_DEREFERENCE)(
|
---|
466 | PVOID Context);
|
---|
467 |
|
---|
468 | typedef struct _INTERFACE {
|
---|
469 | USHORT Size;
|
---|
470 | USHORT Version;
|
---|
471 | PVOID Context;
|
---|
472 | PINTERFACE_REFERENCE InterfaceReference;
|
---|
473 | PINTERFACE_DEREFERENCE InterfaceDereference;
|
---|
474 | } INTERFACE, *PINTERFACE;
|
---|
475 |
|
---|
476 | typedef struct _SECTION_OBJECT_POINTERS {
|
---|
477 | PVOID DataSectionObject;
|
---|
478 | PVOID SharedCacheMap;
|
---|
479 | PVOID ImageSectionObject;
|
---|
480 | } SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
|
---|
481 |
|
---|
482 | typedef struct _IO_COMPLETION_CONTEXT {
|
---|
483 | PVOID Port;
|
---|
484 | PVOID Key;
|
---|
485 | } IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
|
---|
486 |
|
---|
487 | typedef enum _DEVICE_RELATION_TYPE {
|
---|
488 | BusRelations,
|
---|
489 | EjectionRelations,
|
---|
490 | PowerRelations,
|
---|
491 | RemovalRelations,
|
---|
492 | TargetDeviceRelation,
|
---|
493 | SingleBusRelations
|
---|
494 | } DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
|
---|
495 |
|
---|
496 | typedef struct _FILE_OBJECT {
|
---|
497 | CSHORT Type;
|
---|
498 | CSHORT Size;
|
---|
499 | PDEVICE_OBJECT DeviceObject;
|
---|
500 | PVPB Vpb;
|
---|
501 | PVOID FsContext;
|
---|
502 | PVOID FsContext2;
|
---|
503 | PSECTION_OBJECT_POINTERS SectionObjectPointer;
|
---|
504 | PVOID PrivateCacheMap;
|
---|
505 | NTSTATUS FinalStatus;
|
---|
506 | struct _FILE_OBJECT *RelatedFileObject;
|
---|
507 | BOOLEAN LockOperation;
|
---|
508 | BOOLEAN DeletePending;
|
---|
509 | BOOLEAN ReadAccess;
|
---|
510 | BOOLEAN WriteAccess;
|
---|
511 | BOOLEAN DeleteAccess;
|
---|
512 | BOOLEAN SharedRead;
|
---|
513 | BOOLEAN SharedWrite;
|
---|
514 | BOOLEAN SharedDelete;
|
---|
515 | ULONG Flags;
|
---|
516 | UNICODE_STRING FileName;
|
---|
517 | LARGE_INTEGER CurrentByteOffset;
|
---|
518 | ULONG Waiters;
|
---|
519 | ULONG Busy;
|
---|
520 | PVOID LastLock;
|
---|
521 | KEVENT Lock;
|
---|
522 | KEVENT Event;
|
---|
523 | PIO_COMPLETION_CONTEXT CompletionContext;
|
---|
524 | } FILE_OBJECT;
|
---|
525 | typedef struct _FILE_OBJECT *PFILE_OBJECT;
|
---|
526 |
|
---|
527 | #define INITIAL_PRIVILEGE_COUNT 3
|
---|
528 |
|
---|
529 | typedef struct _INITIAL_PRIVILEGE_SET {
|
---|
530 | ULONG PrivilegeCount;
|
---|
531 | ULONG Control;
|
---|
532 | LUID_AND_ATTRIBUTES Privilege[INITIAL_PRIVILEGE_COUNT];
|
---|
533 | } INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
|
---|
534 |
|
---|
535 | typedef struct _SECURITY_SUBJECT_CONTEXT {
|
---|
536 | PACCESS_TOKEN ClientToken;
|
---|
537 | SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
|
---|
538 | PACCESS_TOKEN PrimaryToken;
|
---|
539 | PVOID ProcessAuditId;
|
---|
540 | } SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
|
---|
541 |
|
---|
542 | typedef struct _ACCESS_STATE {
|
---|
543 | LUID OperationID;
|
---|
544 | BOOLEAN SecurityEvaluated;
|
---|
545 | BOOLEAN GenerateAudit;
|
---|
546 | BOOLEAN GenerateOnClose;
|
---|
547 | BOOLEAN PrivilegesAllocated;
|
---|
548 | ULONG Flags;
|
---|
549 | ACCESS_MASK RemainingDesiredAccess;
|
---|
550 | ACCESS_MASK PreviouslyGrantedAccess;
|
---|
551 | ACCESS_MASK OriginalDesiredAccess;
|
---|
552 | SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
|
---|
553 | PSECURITY_DESCRIPTOR SecurityDescriptor;
|
---|
554 | PVOID AuxData;
|
---|
555 | union {
|
---|
556 | INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
|
---|
557 | PRIVILEGE_SET PrivilegeSet;
|
---|
558 | } Privileges;
|
---|
559 |
|
---|
560 | BOOLEAN AuditPrivileges;
|
---|
561 | UNICODE_STRING ObjectName;
|
---|
562 | UNICODE_STRING ObjectTypeName;
|
---|
563 | } ACCESS_STATE, *PACCESS_STATE;
|
---|
564 |
|
---|
565 | typedef struct _IO_SECURITY_CONTEXT {
|
---|
566 | PSECURITY_QUALITY_OF_SERVICE SecurityQos;
|
---|
567 | PACCESS_STATE AccessState;
|
---|
568 | ACCESS_MASK DesiredAccess;
|
---|
569 | ULONG FullCreateOptions;
|
---|
570 | } IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
|
---|
571 |
|
---|
572 | typedef struct _DEVICE_CAPABILITIES {
|
---|
573 | USHORT Size;
|
---|
574 | USHORT Version;
|
---|
575 | ULONG DeviceD1 : 1;
|
---|
576 | ULONG DeviceD2 : 1;
|
---|
577 | ULONG LockSupported : 1;
|
---|
578 | ULONG EjectSupported : 1;
|
---|
579 | ULONG Removable : 1;
|
---|
580 | ULONG DockDevice : 1;
|
---|
581 | ULONG UniqueID : 1;
|
---|
582 | ULONG SilentInstall : 1;
|
---|
583 | ULONG RawDeviceOK : 1;
|
---|
584 | ULONG SurpriseRemovalOK : 1;
|
---|
585 | ULONG WakeFromD0 : 1;
|
---|
586 | ULONG WakeFromD1 : 1;
|
---|
587 | ULONG WakeFromD2 : 1;
|
---|
588 | ULONG WakeFromD3 : 1;
|
---|
589 | ULONG HardwareDisabled : 1;
|
---|
590 | ULONG NonDynamic : 1;
|
---|
591 | ULONG WarmEjectSupported : 1;
|
---|
592 | ULONG NoDisplayInUI : 1;
|
---|
593 | ULONG Reserved : 14;
|
---|
594 | ULONG Address;
|
---|
595 | ULONG UINumber;
|
---|
596 | DEVICE_POWER_STATE DeviceState[PowerSystemMaximum];
|
---|
597 | SYSTEM_POWER_STATE SystemWake;
|
---|
598 | DEVICE_POWER_STATE DeviceWake;
|
---|
599 | ULONG D1Latency;
|
---|
600 | ULONG D2Latency;
|
---|
601 | ULONG D3Latency;
|
---|
602 | } DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
|
---|
603 |
|
---|
604 | typedef struct _DEVICE_INTERFACE_CHANGE_NOTIFICATION {
|
---|
605 | USHORT Version;
|
---|
606 | USHORT Size;
|
---|
607 | GUID Event;
|
---|
608 | GUID InterfaceClassGuid;
|
---|
609 | PUNICODE_STRING SymbolicLinkName;
|
---|
610 | } DEVICE_INTERFACE_CHANGE_NOTIFICATION, *PDEVICE_INTERFACE_CHANGE_NOTIFICATION;
|
---|
611 |
|
---|
612 | typedef enum _INTERFACE_TYPE {
|
---|
613 | InterfaceTypeUndefined = -1,
|
---|
614 | Internal,
|
---|
615 | Isa,
|
---|
616 | Eisa,
|
---|
617 | MicroChannel,
|
---|
618 | TurboChannel,
|
---|
619 | PCIBus,
|
---|
620 | VMEBus,
|
---|
621 | NuBus,
|
---|
622 | PCMCIABus,
|
---|
623 | CBus,
|
---|
624 | MPIBus,
|
---|
625 | MPSABus,
|
---|
626 | ProcessorInternal,
|
---|
627 | InternalPowerBus,
|
---|
628 | PNPISABus,
|
---|
629 | PNPBus,
|
---|
630 | MaximumInterfaceType
|
---|
631 | } INTERFACE_TYPE, *PINTERFACE_TYPE;
|
---|
632 |
|
---|
633 | typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
|
---|
634 |
|
---|
635 | #define IO_RESOURCE_PREFERRED 0x01
|
---|
636 | #define IO_RESOURCE_DEFAULT 0x02
|
---|
637 | #define IO_RESOURCE_ALTERNATIVE 0x08
|
---|
638 |
|
---|
639 | typedef struct _IO_RESOURCE_DESCRIPTOR {
|
---|
640 | UCHAR Option;
|
---|
641 | UCHAR Type;
|
---|
642 | UCHAR ShareDisposition;
|
---|
643 | UCHAR Spare1;
|
---|
644 | USHORT Flags;
|
---|
645 | USHORT Spare2;
|
---|
646 | union {
|
---|
647 | struct {
|
---|
648 | ULONG Length;
|
---|
649 | ULONG Alignment;
|
---|
650 | PHYSICAL_ADDRESS MinimumAddress;
|
---|
651 | PHYSICAL_ADDRESS MaximumAddress;
|
---|
652 | } Port;
|
---|
653 | struct {
|
---|
654 | ULONG Length;
|
---|
655 | ULONG Alignment;
|
---|
656 | PHYSICAL_ADDRESS MinimumAddress;
|
---|
657 | PHYSICAL_ADDRESS MaximumAddress;
|
---|
658 | } Memory;
|
---|
659 | struct {
|
---|
660 | ULONG MinimumVector;
|
---|
661 | ULONG MaximumVector;
|
---|
662 | } Interrupt;
|
---|
663 | struct {
|
---|
664 | ULONG MinimumChannel;
|
---|
665 | ULONG MaximumChannel;
|
---|
666 | } Dma;
|
---|
667 | struct {
|
---|
668 | ULONG Length;
|
---|
669 | ULONG Alignment;
|
---|
670 | PHYSICAL_ADDRESS MinimumAddress;
|
---|
671 | PHYSICAL_ADDRESS MaximumAddress;
|
---|
672 | } Generic;
|
---|
673 | struct {
|
---|
674 | ULONG Data[3];
|
---|
675 | } DevicePrivate;
|
---|
676 | struct {
|
---|
677 | ULONG Length;
|
---|
678 | ULONG MinBusNumber;
|
---|
679 | ULONG MaxBusNumber;
|
---|
680 | ULONG Reserved;
|
---|
681 | } BusNumber;
|
---|
682 | struct {
|
---|
683 | ULONG Priority;
|
---|
684 | ULONG Reserved1;
|
---|
685 | ULONG Reserved2;
|
---|
686 | } ConfigData;
|
---|
687 | } u;
|
---|
688 | } IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
|
---|
689 |
|
---|
690 | typedef struct _IO_RESOURCE_LIST {
|
---|
691 | USHORT Version;
|
---|
692 | USHORT Revision;
|
---|
693 | ULONG Count;
|
---|
694 | IO_RESOURCE_DESCRIPTOR Descriptors[1];
|
---|
695 | } IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
|
---|
696 |
|
---|
697 | typedef struct _IO_RESOURCE_REQUIREMENTS_LIST {
|
---|
698 | ULONG ListSize;
|
---|
699 | INTERFACE_TYPE InterfaceType;
|
---|
700 | ULONG BusNumber;
|
---|
701 | ULONG SlotNumber;
|
---|
702 | ULONG Reserved[3];
|
---|
703 | ULONG AlternativeLists;
|
---|
704 | IO_RESOURCE_LIST List[1];
|
---|
705 | } IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
|
---|
706 |
|
---|
707 | typedef enum _BUS_QUERY_ID_TYPE {
|
---|
708 | BusQueryDeviceID,
|
---|
709 | BusQueryHardwareIDs,
|
---|
710 | BusQueryCompatibleIDs,
|
---|
711 | BusQueryInstanceID,
|
---|
712 | BusQueryDeviceSerialNumber
|
---|
713 | } BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
|
---|
714 |
|
---|
715 | typedef enum {
|
---|
716 | DevicePropertyDeviceDescription,
|
---|
717 | DevicePropertyHardwareID,
|
---|
718 | DevicePropertyCompatibleIDs,
|
---|
719 | DevicePropertyBootConfiguration,
|
---|
720 | DevicePropertyBootConfigurationTranslated,
|
---|
721 | DevicePropertyClassName,
|
---|
722 | DevicePropertyClassGuid,
|
---|
723 | DevicePropertyDriverKeyName,
|
---|
724 | DevicePropertyManufacturer,
|
---|
725 | DevicePropertyFriendlyName,
|
---|
726 | DevicePropertyLocationInformation,
|
---|
727 | DevicePropertyPhysicalDeviceObjectName,
|
---|
728 | DevicePropertyBusTypeGuid,
|
---|
729 | DevicePropertyLegacyBusType,
|
---|
730 | DevicePropertyBusNumber,
|
---|
731 | DevicePropertyEnumeratorName,
|
---|
732 | DevicePropertyAddress,
|
---|
733 | DevicePropertyUINumber,
|
---|
734 | DevicePropertyInstallState,
|
---|
735 | DevicePropertyRemovalPolicy
|
---|
736 | } DEVICE_REGISTRY_PROPERTY;
|
---|
737 |
|
---|
738 | typedef enum _DEVICE_TEXT_TYPE {
|
---|
739 | DeviceTextDescription,
|
---|
740 | DeviceTextLocationInformation
|
---|
741 | } DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
|
---|
742 |
|
---|
743 | typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
|
---|
744 | DeviceUsageTypeUndefined,
|
---|
745 | DeviceUsageTypePaging,
|
---|
746 | DeviceUsageTypeHibernation,
|
---|
747 | DeviceUsageTypeDumpFile
|
---|
748 | } DEVICE_USAGE_NOTIFICATION_TYPE;
|
---|
749 |
|
---|
750 | typedef struct _POWER_SEQUENCE {
|
---|
751 | ULONG SequenceD1;
|
---|
752 | ULONG SequenceD2;
|
---|
753 | ULONG SequenceD3;
|
---|
754 | } POWER_SEQUENCE, *PPOWER_SEQUENCE;
|
---|
755 |
|
---|
756 | typedef enum _POWER_STATE_TYPE {
|
---|
757 | SystemPowerState,
|
---|
758 | DevicePowerState
|
---|
759 | } POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
|
---|
760 |
|
---|
761 | typedef union _POWER_STATE {
|
---|
762 | SYSTEM_POWER_STATE SystemState;
|
---|
763 | DEVICE_POWER_STATE DeviceState;
|
---|
764 | } POWER_STATE, *PPOWER_STATE;
|
---|
765 |
|
---|
766 | typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
|
---|
767 | UCHAR Type;
|
---|
768 | UCHAR ShareDisposition;
|
---|
769 | USHORT Flags;
|
---|
770 | union {
|
---|
771 | struct {
|
---|
772 | PHYSICAL_ADDRESS Start;
|
---|
773 | ULONG Length;
|
---|
774 | } Generic;
|
---|
775 | struct {
|
---|
776 | PHYSICAL_ADDRESS Start;
|
---|
777 | ULONG Length;
|
---|
778 | } Port;
|
---|
779 | struct {
|
---|
780 | ULONG Level;
|
---|
781 | ULONG Vector;
|
---|
782 | ULONG Affinity;
|
---|
783 | } Interrupt;
|
---|
784 | struct {
|
---|
785 | PHYSICAL_ADDRESS Start;
|
---|
786 | ULONG Length;
|
---|
787 | } Memory;
|
---|
788 | struct {
|
---|
789 | ULONG Channel;
|
---|
790 | ULONG Port;
|
---|
791 | ULONG Reserved1;
|
---|
792 | } Dma;
|
---|
793 | struct {
|
---|
794 | ULONG Data[3];
|
---|
795 | } DevicePrivate;
|
---|
796 | struct {
|
---|
797 | ULONG Start;
|
---|
798 | ULONG Length;
|
---|
799 | ULONG Reserved;
|
---|
800 | } BusNumber;
|
---|
801 | struct {
|
---|
802 | ULONG DataSize;
|
---|
803 | ULONG Reserved1;
|
---|
804 | ULONG Reserved2;
|
---|
805 | } DeviceSpecificData;
|
---|
806 | } u;
|
---|
807 | } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
|
---|
808 |
|
---|
809 | typedef struct _CM_PARTIAL_RESOURCE_LIST {
|
---|
810 | USHORT Version;
|
---|
811 | USHORT Revision;
|
---|
812 | ULONG Count;
|
---|
813 | CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
|
---|
814 | } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
|
---|
815 |
|
---|
816 | typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
|
---|
817 | INTERFACE_TYPE InterfaceType;
|
---|
818 | ULONG BusNumber;
|
---|
819 | CM_PARTIAL_RESOURCE_LIST PartialResourceList;
|
---|
820 | } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
|
---|
821 |
|
---|
822 | typedef struct _CM_RESOURCE_LIST {
|
---|
823 | ULONG Count;
|
---|
824 | CM_FULL_RESOURCE_DESCRIPTOR List[1];
|
---|
825 | } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
|
---|
826 |
|
---|
827 | typedef NTSTATUS (WINAPI *PIO_COMPLETION_ROUTINE)(
|
---|
828 | IN struct _DEVICE_OBJECT *DeviceObject,
|
---|
829 | IN struct _IRP *Irp,
|
---|
830 | IN PVOID Context);
|
---|
831 |
|
---|
832 | #define SL_PENDING_RETURNED 0x01
|
---|
833 | #define SL_INVOKE_ON_CANCEL 0x20
|
---|
834 | #define SL_INVOKE_ON_SUCCESS 0x40
|
---|
835 | #define SL_INVOKE_ON_ERROR 0x80
|
---|
836 |
|
---|
837 | #include <pshpack1.h>
|
---|
838 | typedef struct _IO_STACK_LOCATION {
|
---|
839 | UCHAR MajorFunction;
|
---|
840 | UCHAR MinorFunction;
|
---|
841 | UCHAR Flags;
|
---|
842 | UCHAR Control;
|
---|
843 | union {
|
---|
844 | struct {
|
---|
845 | PIO_SECURITY_CONTEXT SecurityContext;
|
---|
846 | ULONG Options;
|
---|
847 | USHORT POINTER_ALIGNMENT FileAttributes;
|
---|
848 | USHORT ShareAccess;
|
---|
849 | ULONG POINTER_ALIGNMENT EaLength;
|
---|
850 | } Create;
|
---|
851 | struct {
|
---|
852 | ULONG Length;
|
---|
853 | ULONG POINTER_ALIGNMENT Key;
|
---|
854 | LARGE_INTEGER ByteOffset;
|
---|
855 | } Read;
|
---|
856 | struct {
|
---|
857 | ULONG Length;
|
---|
858 | ULONG POINTER_ALIGNMENT Key;
|
---|
859 | LARGE_INTEGER ByteOffset;
|
---|
860 | } Write;
|
---|
861 | struct {
|
---|
862 | ULONG Length;
|
---|
863 | FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
|
---|
864 | } QueryFile;
|
---|
865 | struct {
|
---|
866 | ULONG Length;
|
---|
867 | FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
|
---|
868 | PFILE_OBJECT FileObject;
|
---|
869 | union {
|
---|
870 | struct {
|
---|
871 | BOOLEAN ReplaceIfExists;
|
---|
872 | BOOLEAN AdvanceOnly;
|
---|
873 | } DUMMYSTRUCTNAME;
|
---|
874 | ULONG ClusterCount;
|
---|
875 | HANDLE DeleteHandle;
|
---|
876 | } DUMMYUNIONNAME;
|
---|
877 | } SetFile;
|
---|
878 | struct {
|
---|
879 | ULONG Length;
|
---|
880 | FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
|
---|
881 | } QueryVolume;
|
---|
882 | struct {
|
---|
883 | ULONG OutputBufferLength;
|
---|
884 | ULONG POINTER_ALIGNMENT InputBufferLength;
|
---|
885 | ULONG POINTER_ALIGNMENT IoControlCode;
|
---|
886 | PVOID Type3InputBuffer;
|
---|
887 | } DeviceIoControl;
|
---|
888 | struct {
|
---|
889 | SECURITY_INFORMATION SecurityInformation;
|
---|
890 | ULONG POINTER_ALIGNMENT Length;
|
---|
891 | } QuerySecurity;
|
---|
892 | struct {
|
---|
893 | SECURITY_INFORMATION SecurityInformation;
|
---|
894 | PSECURITY_DESCRIPTOR SecurityDescriptor;
|
---|
895 | } SetSecurity;
|
---|
896 | struct {
|
---|
897 | PVPB Vpb;
|
---|
898 | PDEVICE_OBJECT DeviceObject;
|
---|
899 | } MountVolume;
|
---|
900 | struct {
|
---|
901 | PVPB Vpb;
|
---|
902 | PDEVICE_OBJECT DeviceObject;
|
---|
903 | } VerifyVolume;
|
---|
904 | struct {
|
---|
905 | struct _SCSI_REQUEST_BLOCK *Srb;
|
---|
906 | } Scsi;
|
---|
907 | struct {
|
---|
908 | DEVICE_RELATION_TYPE Type;
|
---|
909 | } QueryDeviceRelations;
|
---|
910 | struct {
|
---|
911 | const GUID *InterfaceType;
|
---|
912 | USHORT Size;
|
---|
913 | USHORT Version;
|
---|
914 | PINTERFACE Interface;
|
---|
915 | PVOID InterfaceSpecificData;
|
---|
916 | } QueryInterface;
|
---|
917 | struct {
|
---|
918 | PDEVICE_CAPABILITIES Capabilities;
|
---|
919 | } DeviceCapabilities;
|
---|
920 | struct {
|
---|
921 | PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
|
---|
922 | } FilterResourceRequirements;
|
---|
923 | struct {
|
---|
924 | ULONG WhichSpace;
|
---|
925 | PVOID Buffer;
|
---|
926 | ULONG Offset;
|
---|
927 | ULONG POINTER_ALIGNMENT Length;
|
---|
928 | } ReadWriteConfig;
|
---|
929 | struct {
|
---|
930 | BOOLEAN Lock;
|
---|
931 | } SetLock;
|
---|
932 | struct {
|
---|
933 | BUS_QUERY_ID_TYPE IdType;
|
---|
934 | } QueryId;
|
---|
935 | struct {
|
---|
936 | DEVICE_TEXT_TYPE DeviceTextType;
|
---|
937 | LCID POINTER_ALIGNMENT LocaleId;
|
---|
938 | } QueryDeviceText;
|
---|
939 | struct {
|
---|
940 | BOOLEAN InPath;
|
---|
941 | BOOLEAN Reserved[3];
|
---|
942 | DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
|
---|
943 | } UsageNotification;
|
---|
944 | struct {
|
---|
945 | SYSTEM_POWER_STATE PowerState;
|
---|
946 | } WaitWake;
|
---|
947 | struct {
|
---|
948 | PPOWER_SEQUENCE PowerSequence;
|
---|
949 | } PowerSequence;
|
---|
950 | struct {
|
---|
951 | ULONG SystemContext;
|
---|
952 | POWER_STATE_TYPE POINTER_ALIGNMENT Type;
|
---|
953 | POWER_STATE POINTER_ALIGNMENT State;
|
---|
954 | POWER_ACTION POINTER_ALIGNMENT ShutdownType;
|
---|
955 | } Power;
|
---|
956 | struct {
|
---|
957 | PCM_RESOURCE_LIST AllocatedResources;
|
---|
958 | PCM_RESOURCE_LIST AllocatedResourcesTranslated;
|
---|
959 | } StartDevice;
|
---|
960 | struct {
|
---|
961 | ULONG_PTR ProviderId;
|
---|
962 | PVOID DataPath;
|
---|
963 | ULONG BufferSize;
|
---|
964 | PVOID Buffer;
|
---|
965 | } WMI;
|
---|
966 | struct {
|
---|
967 | PVOID Argument1;
|
---|
968 | PVOID Argument2;
|
---|
969 | PVOID Argument3;
|
---|
970 | PVOID Argument4;
|
---|
971 | } Others;
|
---|
972 | } Parameters;
|
---|
973 | PDEVICE_OBJECT DeviceObject;
|
---|
974 | PFILE_OBJECT FileObject;
|
---|
975 | PIO_COMPLETION_ROUTINE CompletionRoutine;
|
---|
976 | PVOID Context;
|
---|
977 | } IO_STACK_LOCATION, *PIO_STACK_LOCATION;
|
---|
978 | #include <poppack.h>
|
---|
979 |
|
---|
980 | /* MDL definitions */
|
---|
981 |
|
---|
982 | #define MDL_MAPPED_TO_SYSTEM_VA 0x0001
|
---|
983 | #define MDL_PAGES_LOCKED 0x0002
|
---|
984 | #define MDL_SOURCE_IS_NONPAGED_POOL 0x0004
|
---|
985 | #define MDL_ALLOCATED_FIXED_SIZE 0x0008
|
---|
986 | #define MDL_PARTIAL 0x0010
|
---|
987 | #define MDL_PARTIAL_HAS_BEEN_MAPPED 0x0020
|
---|
988 | #define MDL_IO_PAGE_READ 0x0040
|
---|
989 | #define MDL_WRITE_OPERATION 0x0080
|
---|
990 | #define MDL_PARENT_MAPPED_SYSTEM_VA 0x0100
|
---|
991 | #define MDL_FREE_EXTRA_PTES 0x0200
|
---|
992 | #define MDL_DESCRIBES_AWE 0x0400
|
---|
993 | #define MDL_IO_SPACE 0x0800
|
---|
994 | #define MDL_NETWORK_HEADER 0x1000
|
---|
995 | #define MDL_MAPPING_CAN_FAIL 0x2000
|
---|
996 | #define MDL_ALLOCATED_MUST_SUCCEED 0x4000
|
---|
997 | #define MDL_INTERNAL 0x8000
|
---|
998 |
|
---|
999 | #define MDL_MAPPING_FLAGS (MDL_MAPPED_TO_SYSTEM_VA | \
|
---|
1000 | MDL_PAGES_LOCKED | \
|
---|
1001 | MDL_SOURCE_IS_NONPAGED_POOL | \
|
---|
1002 | MDL_PARTIAL_HAS_BEEN_MAPPED | \
|
---|
1003 | MDL_PARENT_MAPPED_SYSTEM_VA | \
|
---|
1004 | MDL_SYSTEM_VA | \
|
---|
1005 | MDL_IO_SPACE )
|
---|
1006 |
|
---|
1007 | typedef struct _MDL {
|
---|
1008 | struct _MDL *Next;
|
---|
1009 | CSHORT Size;
|
---|
1010 | CSHORT MdlFlags;
|
---|
1011 | struct _EPROCESS *Process;
|
---|
1012 | PVOID MappedSystemVa;
|
---|
1013 | PVOID StartVa;
|
---|
1014 | ULONG ByteCount;
|
---|
1015 | ULONG ByteOffset;
|
---|
1016 | } MDL, *PMDL;
|
---|
1017 |
|
---|
1018 | typedef MDL *PMDLX;
|
---|
1019 |
|
---|
1020 | typedef struct _KTIMER {
|
---|
1021 | DISPATCHER_HEADER Header;
|
---|
1022 | ULARGE_INTEGER DueTime;
|
---|
1023 | LIST_ENTRY TimerListEntry;
|
---|
1024 | struct _KDPC *Dpc;
|
---|
1025 | LONG Period;
|
---|
1026 | } KTIMER, *PKTIMER;
|
---|
1027 |
|
---|
1028 | typedef struct _KSYSTEM_TIME {
|
---|
1029 | ULONG LowPart;
|
---|
1030 | LONG High1Time;
|
---|
1031 | LONG High2Time;
|
---|
1032 | } KSYSTEM_TIME, *PKSYSTEM_TIME;
|
---|
1033 |
|
---|
1034 | typedef enum _NT_PRODUCT_TYPE {
|
---|
1035 | NtProductWinNt = 1,
|
---|
1036 | NtProductLanManNt,
|
---|
1037 | NtProductServer
|
---|
1038 | } NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
|
---|
1039 |
|
---|
1040 | #define PROCESSOR_FEATURE_MAX 64
|
---|
1041 |
|
---|
1042 | typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
|
---|
1043 | {
|
---|
1044 | StandardDesign,
|
---|
1045 | NEC98x86,
|
---|
1046 | EndAlternatives
|
---|
1047 | } ALTERNATIVE_ARCHITECTURE_TYPE;
|
---|
1048 |
|
---|
1049 | #define NX_SUPPORT_POLICY_ALWAYSOFF 0
|
---|
1050 | #define NX_SUPPORT_POLICY_ALWAYSON 1
|
---|
1051 | #define NX_SUPPORT_POLICY_OPTIN 2
|
---|
1052 | #define NX_SUPPORT_POLICY_OPTOUT 3
|
---|
1053 |
|
---|
1054 | #define MAX_WOW64_SHARED_ENTRIES 16
|
---|
1055 |
|
---|
1056 | typedef struct _KUSER_SHARED_DATA {
|
---|
1057 | ULONG TickCountLowDeprecated;
|
---|
1058 | ULONG TickCountMultiplier;
|
---|
1059 | volatile KSYSTEM_TIME InterruptTime;
|
---|
1060 | volatile KSYSTEM_TIME SystemTime;
|
---|
1061 | volatile KSYSTEM_TIME TimeZoneBias;
|
---|
1062 | USHORT ImageNumberLow;
|
---|
1063 | USHORT ImageNumberHigh;
|
---|
1064 | WCHAR NtSystemRoot[260];
|
---|
1065 | ULONG MaxStackTraceDepth;
|
---|
1066 | ULONG CryptoExponent;
|
---|
1067 | ULONG TimeZoneId;
|
---|
1068 | ULONG LargePageMinimum;
|
---|
1069 | ULONG Reserved2[7];
|
---|
1070 | NT_PRODUCT_TYPE NtProductType;
|
---|
1071 | BOOLEAN ProductTypeIsValid;
|
---|
1072 | ULONG NtMajorVersion;
|
---|
1073 | ULONG NtMinorVersion;
|
---|
1074 | BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
|
---|
1075 | ULONG Reserved1;
|
---|
1076 | ULONG Reserved3;
|
---|
1077 | volatile ULONG TimeSlip;
|
---|
1078 | ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
|
---|
1079 | LARGE_INTEGER SystemExpirationDate;
|
---|
1080 | ULONG SuiteMask;
|
---|
1081 | BOOLEAN KdDebuggerEnabled;
|
---|
1082 | UCHAR NXSupportPolicy;
|
---|
1083 | volatile ULONG ActiveConsoleId;
|
---|
1084 | volatile ULONG DismountCount;
|
---|
1085 | ULONG ComPlusPackage;
|
---|
1086 | ULONG LastSystemRITEventTickCount;
|
---|
1087 | ULONG NumberOfPhysicalPages;
|
---|
1088 | BOOLEAN SafeBootMode;
|
---|
1089 | ULONG TraceLogging;
|
---|
1090 | ULONGLONG TestRetInstruction;
|
---|
1091 | ULONG SystemCall;
|
---|
1092 | ULONG SystemCallReturn;
|
---|
1093 | ULONGLONG SystemCallPad[3];
|
---|
1094 | union {
|
---|
1095 | volatile KSYSTEM_TIME TickCount;
|
---|
1096 | volatile ULONG64 TickCountQuad;
|
---|
1097 | } DUMMYUNIONNAME;
|
---|
1098 | ULONG Cookie;
|
---|
1099 | ULONG Wow64SharedInformation[MAX_WOW64_SHARED_ENTRIES];
|
---|
1100 | } KSHARED_USER_DATA, *PKSHARED_USER_DATA;
|
---|
1101 |
|
---|
1102 | typedef enum _MEMORY_CACHING_TYPE {
|
---|
1103 | MmNonCached = 0,
|
---|
1104 | MmCached = 1,
|
---|
1105 | MmWriteCombined = 2,
|
---|
1106 | MmHardwareCoherentCached = 3,
|
---|
1107 | MmNonCachedUnordered = 4,
|
---|
1108 | MmUSWCCached = 5,
|
---|
1109 | MmMaximumCacheType = 6
|
---|
1110 | } MEMORY_CACHING_TYPE;
|
---|
1111 |
|
---|
1112 | typedef enum _MM_PAGE_PRIORITY {
|
---|
1113 | LowPagePriority,
|
---|
1114 | NormalPagePriority = 16,
|
---|
1115 | HighPagePriority = 32
|
---|
1116 | } MM_PAGE_PRIORITY;
|
---|
1117 |
|
---|
1118 | typedef enum _MM_SYSTEM_SIZE
|
---|
1119 | {
|
---|
1120 | MmSmallSystem,
|
---|
1121 | MmMediumSystem,
|
---|
1122 | MmLargeSystem
|
---|
1123 | } MM_SYSTEMSIZE;
|
---|
1124 |
|
---|
1125 | typedef struct _IO_REMOVE_LOCK_COMMON_BLOCK {
|
---|
1126 | BOOLEAN Removed;
|
---|
1127 | BOOLEAN Reserved[3];
|
---|
1128 | LONG IoCount;
|
---|
1129 | KEVENT RemoveEvent;
|
---|
1130 | } IO_REMOVE_LOCK_COMMON_BLOCK;
|
---|
1131 |
|
---|
1132 | typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK *PIO_REMOVE_LOCK_TRACKING_BLOCK;
|
---|
1133 |
|
---|
1134 | typedef struct _IO_REMOVE_LOCK_DBG_BLOCK {
|
---|
1135 | LONG Signature;
|
---|
1136 | LONG HighWatermark;
|
---|
1137 | LONGLONG MaxLockedTicks;
|
---|
1138 | LONG AllocateTag;
|
---|
1139 | LIST_ENTRY LockList;
|
---|
1140 | KSPIN_LOCK Spin;
|
---|
1141 | LONG LowMemoryCount;
|
---|
1142 | ULONG Reserved1[4];
|
---|
1143 | PVOID Reserved2;
|
---|
1144 | PIO_REMOVE_LOCK_TRACKING_BLOCK Blocks;
|
---|
1145 | } IO_REMOVE_LOCK_DBG_BLOCK;
|
---|
1146 |
|
---|
1147 | typedef struct _IO_REMOVE_LOCK {
|
---|
1148 | IO_REMOVE_LOCK_COMMON_BLOCK Common;
|
---|
1149 | IO_REMOVE_LOCK_DBG_BLOCK Dbg;
|
---|
1150 | } IO_REMOVE_LOCK, *PIO_REMOVE_LOCK;
|
---|
1151 |
|
---|
1152 | typedef enum {
|
---|
1153 | IoReadAccess,
|
---|
1154 | IoWriteAccess,
|
---|
1155 | IoModifyAccess
|
---|
1156 | } LOCK_OPERATION;
|
---|
1157 |
|
---|
1158 | typedef struct _CALLBACK_OBJECT
|
---|
1159 | {
|
---|
1160 | ULONG Signature;
|
---|
1161 | KSPIN_LOCK Lock;
|
---|
1162 | LIST_ENTRY RegisteredCallbacks;
|
---|
1163 | BOOLEAN AllowMultipleCallbacks;
|
---|
1164 | UCHAR reserved[3];
|
---|
1165 | } CALLBACK_OBJECT, *PCALLBACK_OBJECT;
|
---|
1166 |
|
---|
1167 | NTSTATUS WINAPI ObCloseHandle(IN HANDLE handle);
|
---|
1168 |
|
---|
1169 | #ifdef NONAMELESSUNION
|
---|
1170 | # ifdef NONAMELESSSTRUCT
|
---|
1171 | # define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.u2.CurrentStackLocation)
|
---|
1172 | # define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.u2.CurrentStackLocation - 1)
|
---|
1173 | # else
|
---|
1174 | # define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.u2.CurrentStackLocation)
|
---|
1175 | # define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.u2.CurrentStackLocation - 1)
|
---|
1176 | # endif
|
---|
1177 | #else
|
---|
1178 | # ifdef NONAMELESSSTRUCT
|
---|
1179 | # define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.CurrentStackLocation)
|
---|
1180 | # define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.s.CurrentStackLocation - 1)
|
---|
1181 | # else
|
---|
1182 | # define IoGetCurrentIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.CurrentStackLocation)
|
---|
1183 | # define IoGetNextIrpStackLocation(_Irp) ((_Irp)->Tail.Overlay.CurrentStackLocation - 1)
|
---|
1184 | # endif
|
---|
1185 | #endif
|
---|
1186 |
|
---|
1187 | #define KernelMode 0
|
---|
1188 | #define UserMode 1
|
---|
1189 |
|
---|
1190 | /* directory object access rights */
|
---|
1191 | #define DIRECTORY_QUERY 0x0001
|
---|
1192 | #define DIRECTORY_TRAVERSE 0x0002
|
---|
1193 | #define DIRECTORY_CREATE_OBJECT 0x0004
|
---|
1194 | #define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
|
---|
1195 | #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
|
---|
1196 |
|
---|
1197 | /* symbolic link access rights */
|
---|
1198 | #define SYMBOLIC_LINK_QUERY 0x0001
|
---|
1199 | #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
|
---|
1200 |
|
---|
1201 | PVOID WINAPI ExAllocatePool(POOL_TYPE,SIZE_T);
|
---|
1202 | PVOID WINAPI ExAllocatePoolWithQuota(POOL_TYPE,SIZE_T);
|
---|
1203 | PVOID WINAPI ExAllocatePoolWithTag(POOL_TYPE,SIZE_T,ULONG);
|
---|
1204 | PVOID WINAPI ExAllocatePoolWithQuotaTag(POOL_TYPE,SIZE_T,ULONG);
|
---|
1205 | void WINAPI ExFreePool(PVOID);
|
---|
1206 | void WINAPI ExFreePoolWithTag(PVOID,ULONG);
|
---|
1207 |
|
---|
1208 | NTSTATUS WINAPI IoAllocateDriverObjectExtension(PDRIVER_OBJECT,PVOID,ULONG,PVOID*);
|
---|
1209 | PVOID WINAPI IoAllocateErrorLogEntry(PVOID,UCHAR);
|
---|
1210 | PIRP WINAPI IoAllocateIrp(CCHAR,BOOLEAN);
|
---|
1211 | NTSTATUS WINAPI IoCallDriver(DEVICE_OBJECT*,IRP*);
|
---|
1212 | VOID WINAPI IoCompleteRequest(IRP*,UCHAR);
|
---|
1213 | NTSTATUS WINAPI IoCreateDevice(DRIVER_OBJECT*,ULONG,UNICODE_STRING*,DEVICE_TYPE,ULONG,BOOLEAN,DEVICE_OBJECT**);
|
---|
1214 | NTSTATUS WINAPI IoCreateDriver(UNICODE_STRING*,PDRIVER_INITIALIZE);
|
---|
1215 | NTSTATUS WINAPI IoCreateSymbolicLink(UNICODE_STRING*,UNICODE_STRING*);
|
---|
1216 | void WINAPI IoDeleteDevice(DEVICE_OBJECT*);
|
---|
1217 | void WINAPI IoDeleteDriver(DRIVER_OBJECT*);
|
---|
1218 | NTSTATUS WINAPI IoDeleteSymbolicLink(UNICODE_STRING*);
|
---|
1219 | void WINAPI IoFreeIrp(IRP*);
|
---|
1220 | PEPROCESS WINAPI IoGetCurrentProcess(void);
|
---|
1221 | NTSTATUS WINAPI IoGetDeviceInterfaces(const GUID*,PDEVICE_OBJECT,ULONG,PWSTR*);
|
---|
1222 | NTSTATUS WINAPI IoGetDeviceObjectPointer(UNICODE_STRING*,ACCESS_MASK,PFILE_OBJECT*,PDEVICE_OBJECT*);
|
---|
1223 | NTSTATUS WINAPI IoGetDeviceProperty(PDEVICE_OBJECT,DEVICE_REGISTRY_PROPERTY,ULONG,PVOID,PULONG);
|
---|
1224 | PVOID WINAPI IoGetDriverObjectExtension(PDRIVER_OBJECT,PVOID);
|
---|
1225 | PDEVICE_OBJECT WINAPI IoGetRelatedDeviceObject(PFILE_OBJECT);
|
---|
1226 | void WINAPI IoInitializeIrp(IRP*,USHORT,CCHAR);
|
---|
1227 | VOID WINAPI IoInitializeRemoveLockEx(PIO_REMOVE_LOCK,ULONG,ULONG,ULONG,ULONG);
|
---|
1228 | NTSTATUS WINAPI IoWMIRegistrationControl(PDEVICE_OBJECT,ULONG);
|
---|
1229 |
|
---|
1230 | PKTHREAD WINAPI KeGetCurrentThread(void);
|
---|
1231 | void WINAPI KeQuerySystemTime(LARGE_INTEGER*);
|
---|
1232 | void WINAPI KeQueryTickCount(LARGE_INTEGER*);
|
---|
1233 | ULONG WINAPI KeQueryTimeIncrement(void);
|
---|
1234 | LONG WINAPI KeReleaseSemaphore(PRKSEMAPHORE,KPRIORITY,LONG,BOOLEAN);
|
---|
1235 | LONG WINAPI KeResetEvent(PRKEVENT);
|
---|
1236 | LONG WINAPI KeSetEvent(PRKEVENT,KPRIORITY,BOOLEAN);
|
---|
1237 | KPRIORITY WINAPI KeSetPriorityThread(PKTHREAD,KPRIORITY);
|
---|
1238 |
|
---|
1239 | PVOID WINAPI MmAllocateContiguousMemory(SIZE_T,PHYSICAL_ADDRESS);
|
---|
1240 | PVOID WINAPI MmAllocateNonCachedMemory(SIZE_T);
|
---|
1241 | PMDL WINAPI MmAllocatePagesForMdl(PHYSICAL_ADDRESS,PHYSICAL_ADDRESS,PHYSICAL_ADDRESS,SIZE_T);
|
---|
1242 | void WINAPI MmFreeNonCachedMemory(PVOID,SIZE_T);
|
---|
1243 | MM_SYSTEMSIZE WINAPI MmQuerySystemSize(void);
|
---|
1244 |
|
---|
1245 | NTSTATUS WINAPI ObReferenceObjectByHandle(HANDLE,ACCESS_MASK,POBJECT_TYPE,KPROCESSOR_MODE,PVOID*,POBJECT_HANDLE_INFORMATION);
|
---|
1246 |
|
---|
1247 | POWER_STATE WINAPI PoSetPowerState(PDEVICE_OBJECT,POWER_STATE_TYPE,POWER_STATE);
|
---|
1248 | NTSTATUS WINAPI PsCreateSystemThread(PHANDLE,ULONG,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PKSTART_ROUTINE,PVOID);
|
---|
1249 | #define PsGetCurrentProcess() IoGetCurrentProcess()
|
---|
1250 | #define PsGetCurrentThread() ((PETHREAD)KeGetCurrentThread())
|
---|
1251 | HANDLE WINAPI PsGetCurrentProcessId(void);
|
---|
1252 | HANDLE WINAPI PsGetCurrentThreadId(void);
|
---|
1253 | BOOLEAN WINAPI PsGetVersion(ULONG*,ULONG*,ULONG*,UNICODE_STRING*);
|
---|
1254 | NTSTATUS WINAPI PsTerminateSystemThread(NTSTATUS);
|
---|
1255 |
|
---|
1256 | NTSTATUS WINAPI ZwAddBootEntry(PUNICODE_STRING,PUNICODE_STRING);
|
---|
1257 | NTSTATUS WINAPI ZwAccessCheckAndAuditAlarm(PUNICODE_STRING,HANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,ACCESS_MASK,PGENERIC_MAPPING,BOOLEAN,PACCESS_MASK,PBOOLEAN,PBOOLEAN);
|
---|
1258 | NTSTATUS WINAPI ZwAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
|
---|
1259 | NTSTATUS WINAPI ZwAlertThread(HANDLE ThreadHandle);
|
---|
1260 | NTSTATUS WINAPI ZwAllocateVirtualMemory(HANDLE,PVOID*,ULONG,SIZE_T*,ULONG,ULONG);
|
---|
1261 | NTSTATUS WINAPI ZwCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
|
---|
1262 | NTSTATUS WINAPI ZwCancelTimer(HANDLE, BOOLEAN*);
|
---|
1263 | NTSTATUS WINAPI ZwClearEvent(HANDLE);
|
---|
1264 | NTSTATUS WINAPI ZwClose(HANDLE);
|
---|
1265 | NTSTATUS WINAPI ZwCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN);
|
---|
1266 | NTSTATUS WINAPI ZwConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
|
---|
1267 | NTSTATUS WINAPI ZwCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
|
---|
1268 | NTSTATUS WINAPI ZwCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
|
---|
1269 | NTSTATUS WINAPI ZwCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
|
---|
1270 | NTSTATUS WINAPI ZwCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
|
---|
1271 | NTSTATUS WINAPI ZwCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
|
---|
1272 | NTSTATUS WINAPI ZwCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING);
|
---|
1273 | NTSTATUS WINAPI ZwCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
|
---|
1274 | NTSTATUS WINAPI ZwDeleteAtom(RTL_ATOM);
|
---|
1275 | NTSTATUS WINAPI ZwDeleteFile(POBJECT_ATTRIBUTES);
|
---|
1276 | NTSTATUS WINAPI ZwDeleteKey(HANDLE);
|
---|
1277 | NTSTATUS WINAPI ZwDeleteValueKey(HANDLE,const UNICODE_STRING *);
|
---|
1278 | NTSTATUS WINAPI ZwDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
|
---|
1279 | NTSTATUS WINAPI ZwDisplayString(PUNICODE_STRING);
|
---|
1280 | NTSTATUS WINAPI ZwDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
|
---|
1281 | NTSTATUS WINAPI ZwDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
|
---|
1282 | NTSTATUS WINAPI ZwEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
|
---|
1283 | NTSTATUS WINAPI ZwEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
|
---|
1284 | NTSTATUS WINAPI ZwFlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
|
---|
1285 | NTSTATUS WINAPI ZwFlushKey(HANDLE);
|
---|
1286 | NTSTATUS WINAPI ZwFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,ULONG);
|
---|
1287 | NTSTATUS WINAPI ZwFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
|
---|
1288 | NTSTATUS WINAPI ZwFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
|
---|
1289 | NTSTATUS WINAPI ZwInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
|
---|
1290 | NTSTATUS WINAPI ZwLoadDriver(const UNICODE_STRING *);
|
---|
1291 | NTSTATUS WINAPI ZwLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
|
---|
1292 | NTSTATUS WINAPI ZwLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
|
---|
1293 | NTSTATUS WINAPI ZwMakeTemporaryObject(HANDLE);
|
---|
1294 | NTSTATUS WINAPI ZwMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,SIZE_T,const LARGE_INTEGER*,SIZE_T*,SECTION_INHERIT,ULONG,ULONG);
|
---|
1295 | NTSTATUS WINAPI ZwNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
|
---|
1296 | NTSTATUS WINAPI ZwOpenDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
|
---|
1297 | NTSTATUS WINAPI ZwOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
|
---|
1298 | NTSTATUS WINAPI ZwOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
|
---|
1299 | NTSTATUS WINAPI ZwOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
|
---|
1300 | NTSTATUS WINAPI ZwOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
|
---|
1301 | NTSTATUS WINAPI ZwOpenProcessToken(HANDLE,DWORD,HANDLE *);
|
---|
1302 | NTSTATUS WINAPI ZwOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
|
---|
1303 | NTSTATUS WINAPI ZwOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
|
---|
1304 | NTSTATUS WINAPI ZwOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
|
---|
1305 | NTSTATUS WINAPI ZwOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
|
---|
1306 | NTSTATUS WINAPI ZwOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
|
---|
1307 | NTSTATUS WINAPI ZwPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
|
---|
1308 | NTSTATUS WINAPI ZwPulseEvent(HANDLE,PULONG);
|
---|
1309 | NTSTATUS WINAPI ZwQueryDefaultLocale(BOOLEAN,LCID*);
|
---|
1310 | NTSTATUS WINAPI ZwQueryDefaultUILanguage(LANGID*);
|
---|
1311 | NTSTATUS WINAPI ZwQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
|
---|
1312 | NTSTATUS WINAPI ZwQueryDirectoryObject(HANDLE,PDIRECTORY_BASIC_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG);
|
---|
1313 | NTSTATUS WINAPI ZwQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
|
---|
1314 | NTSTATUS WINAPI ZwQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
|
---|
1315 | NTSTATUS WINAPI ZwQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
|
---|
1316 | NTSTATUS WINAPI ZwQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
|
---|
1317 | NTSTATUS WINAPI ZwQueryInformationToken(HANDLE,DWORD,PVOID,DWORD,LPDWORD);
|
---|
1318 | NTSTATUS WINAPI ZwQueryInstallUILanguage(LANGID*);
|
---|
1319 | NTSTATUS WINAPI ZwQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
|
---|
1320 | NTSTATUS WINAPI ZwQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
|
---|
1321 | NTSTATUS WINAPI ZwQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
|
---|
1322 | NTSTATUS WINAPI ZwQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
|
---|
1323 | NTSTATUS WINAPI ZwQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG);
|
---|
1324 | NTSTATUS WINAPI ZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
|
---|
1325 | NTSTATUS WINAPI ZwQueryTimerResolution(PULONG,PULONG,PULONG);
|
---|
1326 | NTSTATUS WINAPI ZwQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
|
---|
1327 | NTSTATUS WINAPI ZwQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
|
---|
1328 | NTSTATUS WINAPI ZwReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
|
---|
1329 | NTSTATUS WINAPI ZwReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);
|
---|
1330 | NTSTATUS WINAPI ZwRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
|
---|
1331 | NTSTATUS WINAPI ZwResetEvent(HANDLE,PULONG);
|
---|
1332 | NTSTATUS WINAPI ZwRestoreKey(HANDLE,HANDLE,ULONG);
|
---|
1333 | NTSTATUS WINAPI ZwSaveKey(HANDLE,HANDLE);
|
---|
1334 | NTSTATUS WINAPI ZwSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
|
---|
1335 | NTSTATUS WINAPI ZwSetDefaultLocale(BOOLEAN,LCID);
|
---|
1336 | NTSTATUS WINAPI ZwSetDefaultUILanguage(LANGID);
|
---|
1337 | NTSTATUS WINAPI ZwSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
|
---|
1338 | NTSTATUS WINAPI ZwSetEvent(HANDLE,PULONG);
|
---|
1339 | NTSTATUS WINAPI ZwSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
|
---|
1340 | NTSTATUS WINAPI ZwSetInformationKey(HANDLE,const int,PVOID,ULONG);
|
---|
1341 | NTSTATUS WINAPI ZwSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
|
---|
1342 | NTSTATUS WINAPI ZwSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG);
|
---|
1343 | NTSTATUS WINAPI ZwSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
|
---|
1344 | NTSTATUS WINAPI ZwSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
|
---|
1345 | NTSTATUS WINAPI ZwSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
|
---|
1346 | NTSTATUS WINAPI ZwSetSystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG);
|
---|
1347 | NTSTATUS WINAPI ZwSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
|
---|
1348 | NTSTATUS WINAPI ZwSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
|
---|
1349 | NTSTATUS WINAPI ZwSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
|
---|
1350 | NTSTATUS WINAPI ZwSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
|
---|
1351 | NTSTATUS WINAPI ZwSuspendThread(HANDLE,PULONG);
|
---|
1352 | NTSTATUS WINAPI ZwTerminateProcess(HANDLE,LONG);
|
---|
1353 | NTSTATUS WINAPI ZwUnloadDriver(const UNICODE_STRING *);
|
---|
1354 | NTSTATUS WINAPI ZwUnloadKey(HANDLE);
|
---|
1355 | NTSTATUS WINAPI ZwUnmapViewOfSection(HANDLE,PVOID);
|
---|
1356 | NTSTATUS WINAPI ZwWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
|
---|
1357 | NTSTATUS WINAPI ZwWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
|
---|
1358 | NTSTATUS WINAPI ZwWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
|
---|
1359 | NTSTATUS WINAPI ZwYieldExecution(void);
|
---|
1360 |
|
---|
1361 | #endif
|
---|