VirtualBox

source: vbox/trunk/src/VBox/Devices/Graphics/shaderlib/wine/include/ddk/wdm.h

最後變更 在這個檔案是 53206,由 vboxsync 提交於 10 年 前

Devices/vmsvga: header fixes

  • 屬性 svn:eol-style 設為 native
  • 屬性 svn:keywords 設為 Author Date Id Revision
檔案大小: 44.3 KB
 
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
40typedef LONG KPRIORITY;
41
42typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
43
44struct _KDPC;
45struct _KAPC;
46struct _IRP;
47struct _DEVICE_OBJECT;
48struct _DRIVER_OBJECT;
49
50typedef VOID (WINAPI *PKDEFERRED_ROUTINE)(struct _KDPC *, PVOID, PVOID, PVOID);
51typedef VOID (WINAPI *PKSTART_ROUTINE)(PVOID);
52
53typedef NTSTATUS (WINAPI *PDRIVER_INITIALIZE)(struct _DRIVER_OBJECT *, PUNICODE_STRING);
54typedef NTSTATUS (WINAPI *PDRIVER_DISPATCH)(struct _DEVICE_OBJECT *, struct _IRP *);
55typedef void (WINAPI *PDRIVER_STARTIO)(struct _DEVICE_OBJECT *, struct _IRP *);
56typedef void (WINAPI *PDRIVER_UNLOAD)(struct _DRIVER_OBJECT *);
57
58typedef 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
67typedef struct _KEVENT {
68 DISPATCHER_HEADER Header;
69} KEVENT, *PKEVENT, *RESTRICTED_POINTER PRKEVENT;
70
71typedef struct _KSEMAPHORE {
72 DISPATCHER_HEADER Header;
73 LONG Limit;
74} KSEMAPHORE, *PKSEMAPHORE, *PRKSEMAPHORE;
75
76typedef 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
88typedef 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
95typedef 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
103typedef 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
111typedef 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
141typedef struct _ALLOCATE_FUNCTION *PALLOCATE_FUNCTION;
142typedef struct _IO_TIMER *PIO_TIMER;
143typedef struct _IO_TIMER_ROUTINE *PIO_TIMER_ROUTINE;
144typedef struct _ETHREAD *PETHREAD;
145typedef struct _FREE_FUNCTION *PFREE_FUNCTION;
146typedef struct _KTHREAD *PKTHREAD, *PRKTHREAD;
147typedef struct _EPROCESS *PEPROCESS;
148typedef struct _ERESOURCE *PERESOURCE;
149typedef struct _IO_WORKITEM *PIO_WORKITEM;
150typedef struct _NPAGED_LOOKASIDE_LIST *PNPAGED_LOOKASIDE_LIST;
151typedef struct _PAGED_LOOKASIDE_LIST *PPAGED_LOOKASIDE_LIST;
152typedef struct _OBJECT_TYPE *POBJECT_TYPE;
153typedef struct _OBJECT_HANDLE_INFORMATION *POBJECT_HANDLE_INFORMATION;
154typedef struct _ZONE_HEADER *PZONE_HEADER;
155
156typedef 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
167typedef 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
179typedef enum _POOL_TYPE {
180 NonPagedPool,
181 PagedPool,
182 NonPagedPoolMustSucceed,
183 DontUseThisType,
184 NonPagedPoolCacheAligned,
185 PagedPoolCacheAligned,
186 NonPagedPoolCacheAlignedMustS,
187 MaxPoolType
188} POOL_TYPE;
189
190typedef 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
300typedef 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;
330typedef struct _DEVICE_OBJECT *PDEVICE_OBJECT;
331
332typedef struct _DEVICE_RELATIONS {
333 ULONG Count;
334 PDEVICE_OBJECT Objects[1];
335} DEVICE_RELATIONS;
336typedef struct _DEVICE_RELATIONS *PDEVICE_RELATIONS;
337
338typedef struct _DRIVER_EXTENSION {
339 struct _DRIVER_OBJECT *DriverObject;
340 PVOID AddDevice;
341 ULONG Count;
342 UNICODE_STRING ServiceKeyName;
343} DRIVER_EXTENSION, *PDRIVER_EXTENSION;
344
345typedef 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;
362typedef struct _DRIVER_OBJECT *PDRIVER_OBJECT;
363
364/* Irp definitions */
365typedef UCHAR KIRQL, *PKIRQL;
366typedef CCHAR KPROCESSOR_MODE;
367
368typedef VOID (WINAPI *PDRIVER_CANCEL)(
369 IN struct _DEVICE_OBJECT *DeviceObject,
370 IN struct _IRP *Irp);
371
372typedef VOID (WINAPI *PKNORMAL_ROUTINE)(
373 IN PVOID NormalContext,
374 IN PVOID SystemArgument1,
375 IN PVOID SystemArgument2);
376
377typedef 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
384typedef VOID (WINAPI *PKRUNDOWN_ROUTINE)(
385 IN struct _KAPC *Apc);
386
387typedef 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>
405typedef 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;
459typedef struct _IRP *PIRP;
460#include <poppack.h>
461
462typedef VOID (WINAPI *PINTERFACE_REFERENCE)(
463 PVOID Context);
464
465typedef VOID (WINAPI *PINTERFACE_DEREFERENCE)(
466 PVOID Context);
467
468typedef struct _INTERFACE {
469 USHORT Size;
470 USHORT Version;
471 PVOID Context;
472 PINTERFACE_REFERENCE InterfaceReference;
473 PINTERFACE_DEREFERENCE InterfaceDereference;
474} INTERFACE, *PINTERFACE;
475
476typedef struct _SECTION_OBJECT_POINTERS {
477 PVOID DataSectionObject;
478 PVOID SharedCacheMap;
479 PVOID ImageSectionObject;
480} SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
481
482typedef struct _IO_COMPLETION_CONTEXT {
483 PVOID Port;
484 PVOID Key;
485} IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
486
487typedef enum _DEVICE_RELATION_TYPE {
488 BusRelations,
489 EjectionRelations,
490 PowerRelations,
491 RemovalRelations,
492 TargetDeviceRelation,
493 SingleBusRelations
494} DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
495
496typedef 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;
525typedef struct _FILE_OBJECT *PFILE_OBJECT;
526
527#define INITIAL_PRIVILEGE_COUNT 3
528
529typedef 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
535typedef 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
542typedef 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
565typedef 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
572typedef 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
604typedef 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
612typedef 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
633typedef 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
639typedef 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
690typedef 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
697typedef 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
707typedef 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
715typedef 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
738typedef enum _DEVICE_TEXT_TYPE {
739 DeviceTextDescription,
740 DeviceTextLocationInformation
741} DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
742
743typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE {
744 DeviceUsageTypeUndefined,
745 DeviceUsageTypePaging,
746 DeviceUsageTypeHibernation,
747 DeviceUsageTypeDumpFile
748} DEVICE_USAGE_NOTIFICATION_TYPE;
749
750typedef struct _POWER_SEQUENCE {
751 ULONG SequenceD1;
752 ULONG SequenceD2;
753 ULONG SequenceD3;
754} POWER_SEQUENCE, *PPOWER_SEQUENCE;
755
756typedef enum _POWER_STATE_TYPE {
757 SystemPowerState,
758 DevicePowerState
759} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
760
761typedef union _POWER_STATE {
762 SYSTEM_POWER_STATE SystemState;
763 DEVICE_POWER_STATE DeviceState;
764} POWER_STATE, *PPOWER_STATE;
765
766typedef 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
809typedef 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
816typedef 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
822typedef struct _CM_RESOURCE_LIST {
823 ULONG Count;
824 CM_FULL_RESOURCE_DESCRIPTOR List[1];
825} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
826
827typedef 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>
838typedef 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
1007typedef 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
1018typedef MDL *PMDLX;
1019
1020typedef 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
1028typedef struct _KSYSTEM_TIME {
1029 ULONG LowPart;
1030 LONG High1Time;
1031 LONG High2Time;
1032} KSYSTEM_TIME, *PKSYSTEM_TIME;
1033
1034typedef 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
1042typedef 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
1056typedef 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
1102typedef 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
1112typedef enum _MM_PAGE_PRIORITY {
1113 LowPagePriority,
1114 NormalPagePriority = 16,
1115 HighPagePriority = 32
1116} MM_PAGE_PRIORITY;
1117
1118typedef enum _MM_SYSTEM_SIZE
1119{
1120 MmSmallSystem,
1121 MmMediumSystem,
1122 MmLargeSystem
1123} MM_SYSTEMSIZE;
1124
1125typedef 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
1132typedef struct _IO_REMOVE_LOCK_TRACKING_BLOCK *PIO_REMOVE_LOCK_TRACKING_BLOCK;
1133
1134typedef 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
1147typedef 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
1152typedef enum {
1153 IoReadAccess,
1154 IoWriteAccess,
1155 IoModifyAccess
1156} LOCK_OPERATION;
1157
1158typedef 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
1167NTSTATUS 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
1201PVOID WINAPI ExAllocatePool(POOL_TYPE,SIZE_T);
1202PVOID WINAPI ExAllocatePoolWithQuota(POOL_TYPE,SIZE_T);
1203PVOID WINAPI ExAllocatePoolWithTag(POOL_TYPE,SIZE_T,ULONG);
1204PVOID WINAPI ExAllocatePoolWithQuotaTag(POOL_TYPE,SIZE_T,ULONG);
1205void WINAPI ExFreePool(PVOID);
1206void WINAPI ExFreePoolWithTag(PVOID,ULONG);
1207
1208NTSTATUS WINAPI IoAllocateDriverObjectExtension(PDRIVER_OBJECT,PVOID,ULONG,PVOID*);
1209PVOID WINAPI IoAllocateErrorLogEntry(PVOID,UCHAR);
1210PIRP WINAPI IoAllocateIrp(CCHAR,BOOLEAN);
1211NTSTATUS WINAPI IoCallDriver(DEVICE_OBJECT*,IRP*);
1212VOID WINAPI IoCompleteRequest(IRP*,UCHAR);
1213NTSTATUS WINAPI IoCreateDevice(DRIVER_OBJECT*,ULONG,UNICODE_STRING*,DEVICE_TYPE,ULONG,BOOLEAN,DEVICE_OBJECT**);
1214NTSTATUS WINAPI IoCreateDriver(UNICODE_STRING*,PDRIVER_INITIALIZE);
1215NTSTATUS WINAPI IoCreateSymbolicLink(UNICODE_STRING*,UNICODE_STRING*);
1216void WINAPI IoDeleteDevice(DEVICE_OBJECT*);
1217void WINAPI IoDeleteDriver(DRIVER_OBJECT*);
1218NTSTATUS WINAPI IoDeleteSymbolicLink(UNICODE_STRING*);
1219void WINAPI IoFreeIrp(IRP*);
1220PEPROCESS WINAPI IoGetCurrentProcess(void);
1221NTSTATUS WINAPI IoGetDeviceInterfaces(const GUID*,PDEVICE_OBJECT,ULONG,PWSTR*);
1222NTSTATUS WINAPI IoGetDeviceObjectPointer(UNICODE_STRING*,ACCESS_MASK,PFILE_OBJECT*,PDEVICE_OBJECT*);
1223NTSTATUS WINAPI IoGetDeviceProperty(PDEVICE_OBJECT,DEVICE_REGISTRY_PROPERTY,ULONG,PVOID,PULONG);
1224PVOID WINAPI IoGetDriverObjectExtension(PDRIVER_OBJECT,PVOID);
1225PDEVICE_OBJECT WINAPI IoGetRelatedDeviceObject(PFILE_OBJECT);
1226void WINAPI IoInitializeIrp(IRP*,USHORT,CCHAR);
1227VOID WINAPI IoInitializeRemoveLockEx(PIO_REMOVE_LOCK,ULONG,ULONG,ULONG,ULONG);
1228NTSTATUS WINAPI IoWMIRegistrationControl(PDEVICE_OBJECT,ULONG);
1229
1230PKTHREAD WINAPI KeGetCurrentThread(void);
1231void WINAPI KeQuerySystemTime(LARGE_INTEGER*);
1232void WINAPI KeQueryTickCount(LARGE_INTEGER*);
1233ULONG WINAPI KeQueryTimeIncrement(void);
1234LONG WINAPI KeReleaseSemaphore(PRKSEMAPHORE,KPRIORITY,LONG,BOOLEAN);
1235LONG WINAPI KeResetEvent(PRKEVENT);
1236LONG WINAPI KeSetEvent(PRKEVENT,KPRIORITY,BOOLEAN);
1237KPRIORITY WINAPI KeSetPriorityThread(PKTHREAD,KPRIORITY);
1238
1239PVOID WINAPI MmAllocateContiguousMemory(SIZE_T,PHYSICAL_ADDRESS);
1240PVOID WINAPI MmAllocateNonCachedMemory(SIZE_T);
1241PMDL WINAPI MmAllocatePagesForMdl(PHYSICAL_ADDRESS,PHYSICAL_ADDRESS,PHYSICAL_ADDRESS,SIZE_T);
1242void WINAPI MmFreeNonCachedMemory(PVOID,SIZE_T);
1243MM_SYSTEMSIZE WINAPI MmQuerySystemSize(void);
1244
1245NTSTATUS WINAPI ObReferenceObjectByHandle(HANDLE,ACCESS_MASK,POBJECT_TYPE,KPROCESSOR_MODE,PVOID*,POBJECT_HANDLE_INFORMATION);
1246
1247POWER_STATE WINAPI PoSetPowerState(PDEVICE_OBJECT,POWER_STATE_TYPE,POWER_STATE);
1248NTSTATUS WINAPI PsCreateSystemThread(PHANDLE,ULONG,POBJECT_ATTRIBUTES,HANDLE,PCLIENT_ID,PKSTART_ROUTINE,PVOID);
1249#define PsGetCurrentProcess() IoGetCurrentProcess()
1250#define PsGetCurrentThread() ((PETHREAD)KeGetCurrentThread())
1251HANDLE WINAPI PsGetCurrentProcessId(void);
1252HANDLE WINAPI PsGetCurrentThreadId(void);
1253BOOLEAN WINAPI PsGetVersion(ULONG*,ULONG*,ULONG*,UNICODE_STRING*);
1254NTSTATUS WINAPI PsTerminateSystemThread(NTSTATUS);
1255
1256NTSTATUS WINAPI ZwAddBootEntry(PUNICODE_STRING,PUNICODE_STRING);
1257NTSTATUS WINAPI ZwAccessCheckAndAuditAlarm(PUNICODE_STRING,HANDLE,PUNICODE_STRING,PUNICODE_STRING,PSECURITY_DESCRIPTOR,ACCESS_MASK,PGENERIC_MAPPING,BOOLEAN,PACCESS_MASK,PBOOLEAN,PBOOLEAN);
1258NTSTATUS WINAPI ZwAdjustPrivilegesToken(HANDLE,BOOLEAN,PTOKEN_PRIVILEGES,DWORD,PTOKEN_PRIVILEGES,PDWORD);
1259NTSTATUS WINAPI ZwAlertThread(HANDLE ThreadHandle);
1260NTSTATUS WINAPI ZwAllocateVirtualMemory(HANDLE,PVOID*,ULONG,SIZE_T*,ULONG,ULONG);
1261NTSTATUS WINAPI ZwCancelIoFile(HANDLE,PIO_STATUS_BLOCK);
1262NTSTATUS WINAPI ZwCancelTimer(HANDLE, BOOLEAN*);
1263NTSTATUS WINAPI ZwClearEvent(HANDLE);
1264NTSTATUS WINAPI ZwClose(HANDLE);
1265NTSTATUS WINAPI ZwCloseObjectAuditAlarm(PUNICODE_STRING,HANDLE,BOOLEAN);
1266NTSTATUS WINAPI ZwConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
1267NTSTATUS WINAPI ZwCreateDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1268NTSTATUS WINAPI ZwCreateEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *,BOOLEAN,BOOLEAN);
1269NTSTATUS WINAPI ZwCreateFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,PLARGE_INTEGER,ULONG,ULONG,ULONG,ULONG,PVOID,ULONG);
1270NTSTATUS WINAPI ZwCreateKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,ULONG,const UNICODE_STRING*,ULONG,PULONG);
1271NTSTATUS WINAPI ZwCreateSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const LARGE_INTEGER*,ULONG,ULONG,HANDLE);
1272NTSTATUS WINAPI ZwCreateSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PUNICODE_STRING);
1273NTSTATUS WINAPI ZwCreateTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*, TIMER_TYPE);
1274NTSTATUS WINAPI ZwDeleteAtom(RTL_ATOM);
1275NTSTATUS WINAPI ZwDeleteFile(POBJECT_ATTRIBUTES);
1276NTSTATUS WINAPI ZwDeleteKey(HANDLE);
1277NTSTATUS WINAPI ZwDeleteValueKey(HANDLE,const UNICODE_STRING *);
1278NTSTATUS WINAPI ZwDeviceIoControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1279NTSTATUS WINAPI ZwDisplayString(PUNICODE_STRING);
1280NTSTATUS WINAPI ZwDuplicateObject(HANDLE,HANDLE,HANDLE,PHANDLE,ACCESS_MASK,ULONG,ULONG);
1281NTSTATUS WINAPI ZwDuplicateToken(HANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,SECURITY_IMPERSONATION_LEVEL,TOKEN_TYPE,PHANDLE);
1282NTSTATUS WINAPI ZwEnumerateKey(HANDLE,ULONG,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1283NTSTATUS WINAPI ZwEnumerateValueKey(HANDLE,ULONG,KEY_VALUE_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1284NTSTATUS WINAPI ZwFlushInstructionCache(HANDLE,LPCVOID,SIZE_T);
1285NTSTATUS WINAPI ZwFlushKey(HANDLE);
1286NTSTATUS WINAPI ZwFlushVirtualMemory(HANDLE,LPCVOID*,SIZE_T*,ULONG);
1287NTSTATUS WINAPI ZwFreeVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
1288NTSTATUS WINAPI ZwFsControlFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,PVOID,ULONG,PVOID,ULONG);
1289NTSTATUS WINAPI ZwInitiatePowerAction(POWER_ACTION,SYSTEM_POWER_STATE,ULONG,BOOLEAN);
1290NTSTATUS WINAPI ZwLoadDriver(const UNICODE_STRING *);
1291NTSTATUS WINAPI ZwLoadKey(const OBJECT_ATTRIBUTES *,OBJECT_ATTRIBUTES *);
1292NTSTATUS WINAPI ZwLockVirtualMemory(HANDLE,PVOID*,SIZE_T*,ULONG);
1293NTSTATUS WINAPI ZwMakeTemporaryObject(HANDLE);
1294NTSTATUS WINAPI ZwMapViewOfSection(HANDLE,HANDLE,PVOID*,ULONG,SIZE_T,const LARGE_INTEGER*,SIZE_T*,SECTION_INHERIT,ULONG,ULONG);
1295NTSTATUS WINAPI ZwNotifyChangeKey(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,ULONG,BOOLEAN,PVOID,ULONG,BOOLEAN);
1296NTSTATUS WINAPI ZwOpenDirectoryObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1297NTSTATUS WINAPI ZwOpenEvent(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1298NTSTATUS WINAPI ZwOpenFile(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES,PIO_STATUS_BLOCK,ULONG,ULONG);
1299NTSTATUS WINAPI ZwOpenKey(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES *);
1300NTSTATUS WINAPI ZwOpenProcess(PHANDLE,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1301NTSTATUS WINAPI ZwOpenProcessToken(HANDLE,DWORD,HANDLE *);
1302NTSTATUS WINAPI ZwOpenSection(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*);
1303NTSTATUS WINAPI ZwOpenSymbolicLinkObject(PHANDLE,ACCESS_MASK,POBJECT_ATTRIBUTES);
1304NTSTATUS WINAPI ZwOpenThread(HANDLE*,ACCESS_MASK,const OBJECT_ATTRIBUTES*,const CLIENT_ID*);
1305NTSTATUS WINAPI ZwOpenThreadToken(HANDLE,DWORD,BOOLEAN,HANDLE *);
1306NTSTATUS WINAPI ZwOpenTimer(HANDLE*, ACCESS_MASK, const OBJECT_ATTRIBUTES*);
1307NTSTATUS WINAPI ZwPowerInformation(POWER_INFORMATION_LEVEL,PVOID,ULONG,PVOID,ULONG);
1308NTSTATUS WINAPI ZwPulseEvent(HANDLE,PULONG);
1309NTSTATUS WINAPI ZwQueryDefaultLocale(BOOLEAN,LCID*);
1310NTSTATUS WINAPI ZwQueryDefaultUILanguage(LANGID*);
1311NTSTATUS WINAPI ZwQueryDirectoryFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS,BOOLEAN,PUNICODE_STRING,BOOLEAN);
1312NTSTATUS WINAPI ZwQueryDirectoryObject(HANDLE,PDIRECTORY_BASIC_INFORMATION,ULONG,BOOLEAN,BOOLEAN,PULONG,PULONG);
1313NTSTATUS WINAPI ZwQueryEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,BOOLEAN,PVOID,ULONG,PVOID,BOOLEAN);
1314NTSTATUS WINAPI ZwQueryFullAttributesFile(const OBJECT_ATTRIBUTES*,FILE_NETWORK_OPEN_INFORMATION*);
1315NTSTATUS WINAPI ZwQueryInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,LONG,FILE_INFORMATION_CLASS);
1316NTSTATUS WINAPI ZwQueryInformationThread(HANDLE,THREADINFOCLASS,PVOID,ULONG,PULONG);
1317NTSTATUS WINAPI ZwQueryInformationToken(HANDLE,DWORD,PVOID,DWORD,LPDWORD);
1318NTSTATUS WINAPI ZwQueryInstallUILanguage(LANGID*);
1319NTSTATUS WINAPI ZwQueryKey(HANDLE,KEY_INFORMATION_CLASS,void *,DWORD,DWORD *);
1320NTSTATUS WINAPI ZwQueryObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG, PULONG);
1321NTSTATUS WINAPI ZwQuerySecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,ULONG,PULONG);
1322NTSTATUS WINAPI ZwQuerySection(HANDLE,SECTION_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1323NTSTATUS WINAPI ZwQuerySymbolicLinkObject(HANDLE,PUNICODE_STRING,PULONG);
1324NTSTATUS WINAPI ZwQuerySystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG,PULONG);
1325NTSTATUS WINAPI ZwQueryTimerResolution(PULONG,PULONG,PULONG);
1326NTSTATUS WINAPI ZwQueryValueKey(HANDLE,const UNICODE_STRING *,KEY_VALUE_INFORMATION_CLASS,void *,DWORD,DWORD *);
1327NTSTATUS WINAPI ZwQueryVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1328NTSTATUS WINAPI ZwReadFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,PVOID,ULONG,PLARGE_INTEGER,PULONG);
1329NTSTATUS WINAPI ZwReplaceKey(POBJECT_ATTRIBUTES,HANDLE,POBJECT_ATTRIBUTES);
1330NTSTATUS WINAPI ZwRequestWaitReplyPort(HANDLE,PLPC_MESSAGE,PLPC_MESSAGE);
1331NTSTATUS WINAPI ZwResetEvent(HANDLE,PULONG);
1332NTSTATUS WINAPI ZwRestoreKey(HANDLE,HANDLE,ULONG);
1333NTSTATUS WINAPI ZwSaveKey(HANDLE,HANDLE);
1334NTSTATUS WINAPI ZwSecureConnectPort(PHANDLE,PUNICODE_STRING,PSECURITY_QUALITY_OF_SERVICE,PLPC_SECTION_WRITE,PSID,PLPC_SECTION_READ,PULONG,PVOID,PULONG);
1335NTSTATUS WINAPI ZwSetDefaultLocale(BOOLEAN,LCID);
1336NTSTATUS WINAPI ZwSetDefaultUILanguage(LANGID);
1337NTSTATUS WINAPI ZwSetEaFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG);
1338NTSTATUS WINAPI ZwSetEvent(HANDLE,PULONG);
1339NTSTATUS WINAPI ZwSetInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FILE_INFORMATION_CLASS);
1340NTSTATUS WINAPI ZwSetInformationKey(HANDLE,const int,PVOID,ULONG);
1341NTSTATUS WINAPI ZwSetInformationObject(HANDLE, OBJECT_INFORMATION_CLASS, PVOID, ULONG);
1342NTSTATUS WINAPI ZwSetInformationProcess(HANDLE,PROCESS_INFORMATION_CLASS,PVOID,ULONG);
1343NTSTATUS WINAPI ZwSetInformationThread(HANDLE,THREADINFOCLASS,LPCVOID,ULONG);
1344NTSTATUS WINAPI ZwSetIoCompletion(HANDLE,ULONG,ULONG,NTSTATUS,ULONG);
1345NTSTATUS WINAPI ZwSetSecurityObject(HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
1346NTSTATUS WINAPI ZwSetSystemInformation(SYSTEM_INFORMATION_CLASS,PVOID,ULONG);
1347NTSTATUS WINAPI ZwSetSystemTime(const LARGE_INTEGER*,LARGE_INTEGER*);
1348NTSTATUS WINAPI ZwSetTimer(HANDLE, const LARGE_INTEGER*, PTIMER_APC_ROUTINE, PVOID, BOOLEAN, ULONG, BOOLEAN*);
1349NTSTATUS WINAPI ZwSetValueKey(HANDLE,const UNICODE_STRING *,ULONG,ULONG,const void *,ULONG);
1350NTSTATUS WINAPI ZwSetVolumeInformationFile(HANDLE,PIO_STATUS_BLOCK,PVOID,ULONG,FS_INFORMATION_CLASS);
1351NTSTATUS WINAPI ZwSuspendThread(HANDLE,PULONG);
1352NTSTATUS WINAPI ZwTerminateProcess(HANDLE,LONG);
1353NTSTATUS WINAPI ZwUnloadDriver(const UNICODE_STRING *);
1354NTSTATUS WINAPI ZwUnloadKey(HANDLE);
1355NTSTATUS WINAPI ZwUnmapViewOfSection(HANDLE,PVOID);
1356NTSTATUS WINAPI ZwWaitForSingleObject(HANDLE,BOOLEAN,const LARGE_INTEGER*);
1357NTSTATUS WINAPI ZwWaitForMultipleObjects(ULONG,const HANDLE*,BOOLEAN,BOOLEAN,const LARGE_INTEGER*);
1358NTSTATUS WINAPI ZwWriteFile(HANDLE,HANDLE,PIO_APC_ROUTINE,PVOID,PIO_STATUS_BLOCK,const void*,ULONG,PLARGE_INTEGER,PULONG);
1359NTSTATUS WINAPI ZwYieldExecution(void);
1360
1361#endif
注意: 瀏覽 TracBrowser 來幫助您使用儲存庫瀏覽器

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette