merge trunk head (37902)
[reactos.git] / reactos / include / ddk / wdm.h
1 #ifndef _WDMDDK_
2 #define _WDMDDK_
3
4 //
5 // Dependencies
6 //
7 #define NT_INCLUDED
8 #include <excpt.h>
9 #include <ntdef.h>
10 #include <ntstatus.h>
11
12 #ifdef __GNUC__
13 #include "intrin.h"
14 #endif
15
16 typedef struct _CONTEXT *PCONTEXT;
17
18 //
19 // Resource list definitions
20 //
21 typedef int CM_RESOURCE_TYPE;
22
23 #define CmResourceTypeNull 0
24 #define CmResourceTypePort 1
25 #define CmResourceTypeInterrupt 2
26 #define CmResourceTypeMemory 3
27 #define CmResourceTypeDma 4
28 #define CmResourceTypeDeviceSpecific 5
29 #define CmResourceTypeBusNumber 6
30 #define CmResourceTypeNonArbitrated 128
31 #define CmResourceTypeConfigData 128
32 #define CmResourceTypeDevicePrivate 129
33 #define CmResourceTypePcCardConfig 130
34 #define CmResourceTypeMfCardConfig 131
35
36
37
38 //
39 // Global debug flag
40 //
41 extern ULONG NtGlobalFlag;
42
43
44
45 //
46 // Section map options
47 //
48 typedef enum _SECTION_INHERIT {
49 ViewShare = 1,
50 ViewUnmap = 2
51 } SECTION_INHERIT;
52
53 //
54 // Section access rights
55 //
56 #define SECTION_QUERY 0x0001
57 #define SECTION_MAP_WRITE 0x0002
58 #define SECTION_MAP_READ 0x0004
59 #define SECTION_MAP_EXECUTE 0x0008
60 #define SECTION_EXTEND_SIZE 0x0010
61 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
62
63 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\
64 SECTION_MAP_WRITE | \
65 SECTION_MAP_READ | \
66 SECTION_MAP_EXECUTE | \
67 SECTION_EXTEND_SIZE)
68
69 #define SESSION_QUERY_ACCESS 0x0001
70 #define SESSION_MODIFY_ACCESS 0x0002
71
72 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
73 SESSION_QUERY_ACCESS | \
74 SESSION_MODIFY_ACCESS)
75
76
77
78 #define SEGMENT_ALL_ACCESS SECTION_ALL_ACCESS
79
80 #define PAGE_NOACCESS 0x01
81 #define PAGE_READONLY 0x02
82 #define PAGE_READWRITE 0x04
83 #define PAGE_WRITECOPY 0x08
84 #define PAGE_EXECUTE 0x10
85 #define PAGE_EXECUTE_READ 0x20
86 #define PAGE_EXECUTE_READWRITE 0x40
87 #define PAGE_EXECUTE_WRITECOPY 0x80
88 #define PAGE_GUARD 0x100
89 #define PAGE_NOCACHE 0x200
90 #define PAGE_WRITECOMBINE 0x400
91
92 #define MEM_COMMIT 0x1000
93 #define MEM_RESERVE 0x2000
94 #define MEM_DECOMMIT 0x4000
95 #define MEM_RELEASE 0x8000
96 #define MEM_FREE 0x10000
97 #define MEM_PRIVATE 0x20000
98 #define MEM_MAPPED 0x40000
99 #define MEM_RESET 0x80000
100 #define MEM_TOP_DOWN 0x100000
101 #define MEM_LARGE_PAGES 0x20000000
102 #define MEM_4MB_PAGES 0x80000000
103
104 #define SEC_RESERVE 0x4000000
105 #define SEC_LARGE_PAGES 0x80000000
106
107 #define PROCESS_DUP_HANDLE (0x0040)
108
109 #if (NTDDI_VERSION >= NTDDI_VISTA)
110 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
111 0xFFFF)
112 #else
113 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
114 0xFFF)
115 #endif
116
117
118
119 //
120 // Processor features
121 //
122 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
123 #define PF_FLOATING_POINT_EMULATED 1
124 #define PF_COMPARE_EXCHANGE_DOUBLE 2
125 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
126 #define PF_PPC_MOVEMEM_64BIT_OK 4
127 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
128 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
129 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
130 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
131 #define PF_PAE_ENABLED 9
132 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
133 #define PF_SSE_DAZ_MODE_AVAILABLE 11
134 #define PF_NX_ENABLED 12
135 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
136 #define PF_COMPARE_EXCHANGE128 14
137 #define PF_COMPARE64_EXCHANGE128 15
138 #define PF_CHANNELS_ENABLED 16
139
140
141
142 //
143 // Intrinsics (note: taken from our winnt.h)
144 // FIXME: 64-bit
145 //
146 #if defined(__GNUC__)
147
148 static __inline__ BOOLEAN
149 InterlockedBitTestAndSet(IN LONG volatile *Base,
150 IN LONG Bit)
151 {
152 #if defined(_M_IX86)
153 LONG OldBit;
154 __asm__ __volatile__("lock "
155 "btsl %2,%1\n\t"
156 "sbbl %0,%0\n\t"
157 :"=r" (OldBit),"+m" (*Base)
158 :"Ir" (Bit)
159 : "memory");
160 return OldBit;
161 #else
162 return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1;
163 #endif
164 }
165
166 static __inline__ BOOLEAN
167 InterlockedBitTestAndReset(IN LONG volatile *Base,
168 IN LONG Bit)
169 {
170 #if defined(_M_IX86)
171 LONG OldBit;
172 __asm__ __volatile__("lock "
173 "btrl %2,%1\n\t"
174 "sbbl %0,%0\n\t"
175 :"=r" (OldBit),"+m" (*Base)
176 :"Ir" (Bit)
177 : "memory");
178 return OldBit;
179 #else
180 return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1;
181 #endif
182 }
183
184 #define BitScanForward _BitScanForward
185 #define BitScanReverse _BitScanReverse
186
187 #endif
188
189
190 #if defined(_M_IX86)
191 #define YieldProcessor() __asm__ __volatile__("pause");
192 #elif defined (_M_AMD64)
193 #define YieldProcessor() __asm__ __volatile__("pause");
194 #elif defined(_M_PPC)
195 #define YieldProcessor() __asm__ __volatile__("nop");
196 #elif defined(_M_MIPS)
197 #define YieldProcessor() __asm__ __volatile__("nop");
198 #elif defined(_M_ARM)
199 #define YieldProcessor()
200 #else
201 #error Unknown architecture
202 #endif
203
204
205
206 //
207 // Slist Header
208 //
209 #ifndef _SLIST_HEADER_
210 #define _SLIST_HEADER_
211
212 #define SLIST_ENTRY SINGLE_LIST_ENTRY
213 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
214 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
215
216 typedef union _SLIST_HEADER {
217 ULONGLONG Alignment;
218 struct {
219 SLIST_ENTRY Next;
220 USHORT Depth;
221 USHORT Sequence;
222 } DUMMYSTRUCTNAME;
223 } SLIST_HEADER, *PSLIST_HEADER;
224
225 #endif /* _SLIST_HEADER_ */
226
227
228
229 //
230 // Power States/Levels
231 //
232 typedef enum _SYSTEM_POWER_STATE {
233 PowerSystemUnspecified,
234 PowerSystemWorking,
235 PowerSystemSleeping1,
236 PowerSystemSleeping2,
237 PowerSystemSleeping3,
238 PowerSystemHibernate,
239 PowerSystemShutdown,
240 PowerSystemMaximum
241 } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
242
243 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
244
245 typedef enum _POWER_INFORMATION_LEVEL {
246 SystemPowerPolicyAc,
247 SystemPowerPolicyDc,
248 VerifySystemPolicyAc,
249 VerifySystemPolicyDc,
250 SystemPowerCapabilities,
251 SystemBatteryState,
252 SystemPowerStateHandler,
253 ProcessorStateHandler,
254 SystemPowerPolicyCurrent,
255 AdministratorPowerPolicy,
256 SystemReserveHiberFile,
257 ProcessorInformation,
258 SystemPowerInformation,
259 ProcessorStateHandler2,
260 LastWakeTime,
261 LastSleepTime,
262 SystemExecutionState,
263 SystemPowerStateNotifyHandler,
264 ProcessorPowerPolicyAc,
265 ProcessorPowerPolicyDc,
266 VerifyProcessorPowerPolicyAc,
267 VerifyProcessorPowerPolicyDc,
268 ProcessorPowerPolicyCurrent
269 } POWER_INFORMATION_LEVEL;
270
271 typedef enum {
272 PowerActionNone,
273 PowerActionReserved,
274 PowerActionSleep,
275 PowerActionHibernate,
276 PowerActionShutdown,
277 PowerActionShutdownReset,
278 PowerActionShutdownOff,
279 PowerActionWarmEject
280 } POWER_ACTION, *PPOWER_ACTION;
281
282 typedef enum _DEVICE_POWER_STATE {
283 PowerDeviceUnspecified,
284 PowerDeviceD0,
285 PowerDeviceD1,
286 PowerDeviceD2,
287 PowerDeviceD3,
288 PowerDeviceMaximum
289 } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
290
291 #define ES_SYSTEM_REQUIRED 0x00000001
292 #define ES_DISPLAY_REQUIRED 0x00000002
293 #define ES_USER_PRESENT 0x00000004
294 #define ES_CONTINUOUS 0x80000000
295
296 typedef ULONG EXECUTION_STATE;
297
298 typedef enum {
299 LT_DONT_CARE,
300 LT_LOWEST_LATENCY
301 } LATENCY_TIME;
302
303
304
305 //
306 // Access/Security Stuff
307 //
308 typedef ULONG ACCESS_MASK, *PACCESS_MASK;
309 typedef PVOID PACCESS_TOKEN;
310
311 #define DELETE 0x00010000L
312 #define READ_CONTROL 0x00020000L
313 #define WRITE_DAC 0x00040000L
314 #define WRITE_OWNER 0x00080000L
315 #define SYNCHRONIZE 0x00100000L
316 #define STANDARD_RIGHTS_REQUIRED 0x000F0000L
317 #define STANDARD_RIGHTS_READ READ_CONTROL
318 #define STANDARD_RIGHTS_WRITE READ_CONTROL
319 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
320 #define STANDARD_RIGHTS_ALL 0x001F0000L
321 #define SPECIFIC_RIGHTS_ALL 0x0000FFFFL
322 #define ACCESS_SYSTEM_SECURITY 0x01000000L
323 #define MAXIMUM_ALLOWED 0x02000000L
324 #define GENERIC_READ 0x80000000L
325 #define GENERIC_WRITE 0x40000000L
326 #define GENERIC_EXECUTE 0x20000000L
327 #define GENERIC_ALL 0x10000000L
328
329 typedef struct _GENERIC_MAPPING {
330 ACCESS_MASK GenericRead;
331 ACCESS_MASK GenericWrite;
332 ACCESS_MASK GenericExecute;
333 ACCESS_MASK GenericAll;
334 } GENERIC_MAPPING, *PGENERIC_MAPPING;
335
336 #define ACL_REVISION 2
337 #define ACL_REVISION_DS 4
338
339 #define ACL_REVISION1 1
340 #define ACL_REVISION2 2
341 #define ACL_REVISION3 3
342 #define ACL_REVISION4 4
343 #define MIN_ACL_REVISION ACL_REVISION2
344 #define MAX_ACL_REVISION ACL_REVISION4
345
346 typedef struct _ACL {
347 UCHAR AclRevision;
348 UCHAR Sbz1;
349 USHORT AclSize;
350 USHORT AceCount;
351 USHORT Sbz2;
352 } ACL, *PACL;
353
354
355
356 //
357 // Current security descriptor revision value
358 //
359 #define SECURITY_DESCRIPTOR_REVISION (1)
360 #define SECURITY_DESCRIPTOR_REVISION1 (1)
361
362 //
363 // Privilege attributes
364 //
365 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
366 #define SE_PRIVILEGE_ENABLED (0x00000002L)
367 #define SE_PRIVILEGE_REMOVED (0X00000004L)
368 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
369
370 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
371 SE_PRIVILEGE_ENABLED | \
372 SE_PRIVILEGE_REMOVED | \
373 SE_PRIVILEGE_USED_FOR_ACCESS)
374
375 #include <pshpack4.h>
376 typedef struct _LUID_AND_ATTRIBUTES {
377 LUID Luid;
378 ULONG Attributes;
379 } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
380 #include <poppack.h>
381 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
382 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
383
384
385
386 //
387 // Privilege sets
388 //
389 #define PRIVILEGE_SET_ALL_NECESSARY (1)
390
391 typedef struct _PRIVILEGE_SET {
392 ULONG PrivilegeCount;
393 ULONG Control;
394 LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
395 } PRIVILEGE_SET,*PPRIVILEGE_SET;
396
397 typedef enum _SECURITY_IMPERSONATION_LEVEL {
398 SecurityAnonymous,
399 SecurityIdentification,
400 SecurityImpersonation,
401 SecurityDelegation
402 } SECURITY_IMPERSONATION_LEVEL, * PSECURITY_IMPERSONATION_LEVEL;
403
404 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
405 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
406 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
407 #define VALID_IMPERSONATION_LEVEL(Level) (((Level) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((Level) <= SECURITY_MAX_IMPERSONATION_LEVEL))
408
409 #define SECURITY_DYNAMIC_TRACKING (TRUE)
410 #define SECURITY_STATIC_TRACKING (FALSE)
411
412 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;
413
414 typedef struct _SECURITY_QUALITY_OF_SERVICE {
415 ULONG Length;
416 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
417 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
418 BOOLEAN EffectiveOnly;
419 } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
420
421 typedef struct _SE_IMPERSONATION_STATE {
422 PACCESS_TOKEN Token;
423 BOOLEAN CopyOnOpen;
424 BOOLEAN EffectiveOnly;
425 SECURITY_IMPERSONATION_LEVEL Level;
426 } SE_IMPERSONATION_STATE, *PSE_IMPERSONATION_STATE;
427
428 #define OWNER_SECURITY_INFORMATION (0x00000001L)
429 #define GROUP_SECURITY_INFORMATION (0x00000002L)
430 #define DACL_SECURITY_INFORMATION (0x00000004L)
431 #define SACL_SECURITY_INFORMATION (0x00000008L)
432 #define LABEL_SECURITY_INFORMATION (0x00000010L)
433
434 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
435 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
436 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
437 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
438
439
440
441 //
442 // Registry Access Rights
443 //
444 #define KEY_QUERY_VALUE (0x0001)
445 #define KEY_SET_VALUE (0x0002)
446 #define KEY_CREATE_SUB_KEY (0x0004)
447 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
448 #define KEY_NOTIFY (0x0010)
449 #define KEY_CREATE_LINK (0x0020)
450 #define KEY_WOW64_32KEY (0x0200)
451 #define KEY_WOW64_64KEY (0x0100)
452 #define KEY_WOW64_RES (0x0300)
453
454 #define KEY_READ ((STANDARD_RIGHTS_READ |\
455 KEY_QUERY_VALUE |\
456 KEY_ENUMERATE_SUB_KEYS |\
457 KEY_NOTIFY) \
458 & \
459 (~SYNCHRONIZE))
460
461 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
462 KEY_SET_VALUE |\
463 KEY_CREATE_SUB_KEY) \
464 & \
465 (~SYNCHRONIZE))
466
467 #define KEY_EXECUTE ((KEY_READ) \
468 & \
469 (~SYNCHRONIZE))
470
471 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
472 KEY_QUERY_VALUE |\
473 KEY_SET_VALUE |\
474 KEY_CREATE_SUB_KEY |\
475 KEY_ENUMERATE_SUB_KEYS |\
476 KEY_NOTIFY |\
477 KEY_CREATE_LINK) \
478 & \
479 (~SYNCHRONIZE))
480
481 //
482 // Registry Open/Create Options
483 //
484 #define REG_OPTION_RESERVED (0x00000000L)
485 #define REG_OPTION_NON_VOLATILE (0x00000000L)
486 #define REG_OPTION_VOLATILE (0x00000001L)
487 #define REG_OPTION_CREATE_LINK (0x00000002L)
488 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
489 #define REG_OPTION_OPEN_LINK (0x00000008L)
490
491 #define REG_LEGAL_OPTION \
492 (REG_OPTION_RESERVED |\
493 REG_OPTION_NON_VOLATILE |\
494 REG_OPTION_VOLATILE |\
495 REG_OPTION_CREATE_LINK |\
496 REG_OPTION_BACKUP_RESTORE |\
497 REG_OPTION_OPEN_LINK)
498
499 //
500 // Key creation/open disposition
501 //
502 #define REG_CREATED_NEW_KEY (0x00000001L)
503 #define REG_OPENED_EXISTING_KEY (0x00000002L)
504
505 //
506 // Key restore & hive load flags
507 //
508 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
509 #define REG_REFRESH_HIVE (0x00000002L)
510 #define REG_NO_LAZY_FLUSH (0x00000004L)
511 #define REG_FORCE_RESTORE (0x00000008L)
512 #define REG_APP_HIVE (0x00000010L)
513 #define REG_PROCESS_PRIVATE (0x00000020L)
514 #define REG_START_JOURNAL (0x00000040L)
515 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
516 #define REG_HIVE_NO_RM (0x00000100L)
517 #define REG_HIVE_SINGLE_LOG (0x00000200L)
518
519 //
520 // Unload Flags
521 //
522 #define REG_FORCE_UNLOAD 1
523
524 //
525 // Notify Filter Values
526 //
527 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
528 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
529 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
530 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
531
532 #define REG_LEGAL_CHANGE_FILTER \
533 (REG_NOTIFY_CHANGE_NAME |\
534 REG_NOTIFY_CHANGE_ATTRIBUTES |\
535 REG_NOTIFY_CHANGE_LAST_SET |\
536 REG_NOTIFY_CHANGE_SECURITY)
537
538
539
540 //
541 // Thread Access Rights
542 //
543 #define THREAD_TERMINATE (0x0001)
544 #define THREAD_SUSPEND_RESUME (0x0002)
545 #define THREAD_ALERT (0x0004)
546 #define THREAD_GET_CONTEXT (0x0008)
547 #define THREAD_SET_CONTEXT (0x0010)
548 #define THREAD_SET_INFORMATION (0x0020)
549 #define THREAD_SET_LIMITED_INFORMATION (0x0400)
550 #define THREAD_QUERY_LIMITED_INFORMATION (0x0800)
551 #if (NTDDI_VERSION >= NTDDI_VISTA)
552 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
553 0xFFFF)
554 #else
555 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
556 0x3FF)
557 #endif
558
559 //
560 // Service Start Types
561 //
562 #define SERVICE_BOOT_START 0x00000000
563 #define SERVICE_SYSTEM_START 0x00000001
564 #define SERVICE_AUTO_START 0x00000002
565 #define SERVICE_DEMAND_START 0x00000003
566 #define SERVICE_DISABLED 0x00000004
567
568 //
569 // Exception Records
570 //
571 #define EXCEPTION_NONCONTINUABLE 1
572 #define EXCEPTION_MAXIMUM_PARAMETERS 15
573
574 typedef struct _EXCEPTION_RECORD {
575 NTSTATUS ExceptionCode;
576 ULONG ExceptionFlags;
577 struct _EXCEPTION_RECORD *ExceptionRecord;
578 PVOID ExceptionAddress;
579 ULONG NumberParameters;
580 ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
581 } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
582
583 typedef struct _EXCEPTION_RECORD32 {
584 NTSTATUS ExceptionCode;
585 ULONG ExceptionFlags;
586 ULONG ExceptionRecord;
587 ULONG ExceptionAddress;
588 ULONG NumberParameters;
589 ULONG ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
590 } EXCEPTION_RECORD32, *PEXCEPTION_RECORD32;
591
592 typedef struct _EXCEPTION_RECORD64 {
593 NTSTATUS ExceptionCode;
594 ULONG ExceptionFlags;
595 ULONG64 ExceptionRecord;
596 ULONG64 ExceptionAddress;
597 ULONG NumberParameters;
598 ULONG __unusedAlignment;
599 ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
600 } EXCEPTION_RECORD64, *PEXCEPTION_RECORD64;
601
602 typedef struct _EXCEPTION_POINTERS {
603 PEXCEPTION_RECORD ExceptionRecord;
604 PCONTEXT ContextRecord;
605 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
606
607
608
609 //
610 // Process Qoutas
611 //
612 typedef struct _QUOTA_LIMITS {
613 SIZE_T PagedPoolLimit;
614 SIZE_T NonPagedPoolLimit;
615 SIZE_T MinimumWorkingSetSize;
616 SIZE_T MaximumWorkingSetSize;
617 SIZE_T PagefileLimit;
618 LARGE_INTEGER TimeLimit;
619 } QUOTA_LIMITS, *PQUOTA_LIMITS;
620
621 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
622 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
623 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
624 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
625 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
626
627
628
629 #endif // _WDMDDK_