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