source: trunk/include/win/winnt.h@ 2191

Last change on this file since 2191 was 2073, checked in by sandervl, 26 years ago

fixes for compiling win32 apps in OS/2

File size: 38.2 KB
Line 
1/*
2 * Win32 definitions for Windows NT
3 *
4 * Copyright 1996 Alexandre Julliard
5 */
6
7#ifndef __WINE_WINNT_H
8#define __WINE_WINNT_H
9
10#include "windef.h"
11
12#include "pshpack1.h"
13/* Defines */
14
15#define UNREFERENCED_PARAMETER(a)
16
17/* Argument 1 passed to the DllEntryProc. */
18#define DLL_PROCESS_DETACH 0 /* detach process (unload library) */
19#define DLL_PROCESS_ATTACH 1 /* attach process (load library) */
20#define DLL_THREAD_ATTACH 2 /* attach new thread */
21#define DLL_THREAD_DETACH 3 /* detach thread */
22
23
24/* u.x.wProcessorArchitecture (NT) */
25#define PROCESSOR_ARCHITECTURE_INTEL 0
26#define PROCESSOR_ARCHITECTURE_MIPS 1
27#define PROCESSOR_ARCHITECTURE_ALPHA 2
28#define PROCESSOR_ARCHITECTURE_PPC 3
29#define PROCESSOR_ARCHITECTURE_SHX 4
30#define PROCESSOR_ARCHITECTURE_ARM 5
31#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
32
33/* dwProcessorType */
34#define PROCESSOR_INTEL_386 386
35#define PROCESSOR_INTEL_486 486
36#define PROCESSOR_INTEL_PENTIUM 586
37#define PROCESSOR_INTEL_860 860
38#define PROCESSOR_MIPS_R2000 2000
39#define PROCESSOR_MIPS_R3000 3000
40#define PROCESSOR_MIPS_R4000 4000
41#define PROCESSOR_ALPHA_21064 21064
42#define PROCESSOR_PPC_601 601
43#define PROCESSOR_PPC_603 603
44#define PROCESSOR_PPC_604 604
45#define PROCESSOR_PPC_620 620
46#define PROCESSOR_HITACHI_SH3 10003
47#define PROCESSOR_HITACHI_SH3E 10004
48#define PROCESSOR_HITACHI_SH4 10005
49#define PROCESSOR_MOTOROLA_821 821
50#define PROCESSOR_SHx_SH3 103
51#define PROCESSOR_SHx_SH4 104
52#define PROCESSOR_STRONGARM 2577
53#define PROCESSOR_ARM720 1824 /* 0x720 */
54#define PROCESSOR_ARM820 2080 /* 0x820 */
55#define PROCESSOR_ARM920 2336 /* 0x920 */
56#define PROCESSOR_ARM_7TDMI 70001
57
58#define ANYSIZE_ARRAY 1
59
60#define MINCHAR 0x80
61#define MAXCHAR 0x7f
62#define MINSHORT 0x8000
63#define MAXSHORT 0x7fff
64#define MINLONG 0x80000000
65#define MAXLONG 0x7fffffff
66#define MAXBYTE 0xff
67#define MAXWORD 0xffff
68#define MAXDWORD 0xffffffff
69
70#define FIELD_OFFSET(type, field) \
71 ((LONG)(INT)&(((type *)0)->field))
72
73#define CONTAINING_RECORD(address, type, field) \
74 ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
75
76/* Types */
77
78/* TCHAR data types definitions for Winelib. */
79/* These types are _not_ defined for the emulator, because they */
80/* depend on the UNICODE macro that only exists in user's code. */
81
82#if !defined(__WINE__) && !defined(__WINE_WINDEF_H)
83# ifdef UNICODE
84typedef LPWSTR LPTSTR;
85typedef LPCWSTR LPCTSTR;
86#define __TEXT(string) L##string /*probably wrong */
87# else /* UNICODE */
88typedef LPSTR LPTSTR;
89typedef LPCSTR LPCTSTR;
90#define __TEXT(string) string
91# endif /* UNICODE */
92#endif /* __WINE__ */
93#define TEXT(quote) __TEXT(quote)
94
95typedef BYTE BOOLEAN;
96typedef BOOLEAN *PBOOLEAN;
97
98typedef struct _LIST_ENTRY {
99 struct _LIST_ENTRY *Flink;
100 struct _LIST_ENTRY *Blink;
101} LIST_ENTRY, *PLIST_ENTRY;
102
103typedef struct _SINGLE_LIST_ENTRY {
104 struct _SINGLE_LIST_ENTRY *Next;
105} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
106
107/* Heap flags */
108
109#define HEAP_NO_SERIALIZE 0x00000001
110#define HEAP_GROWABLE 0x00000002
111#define HEAP_GENERATE_EXCEPTIONS 0x00000004
112#define HEAP_ZERO_MEMORY 0x00000008
113#define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
114#define HEAP_TAIL_CHECKING_ENABLED 0x00000020
115#define HEAP_FREE_CHECKING_ENABLED 0x00000040
116#define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
117#define HEAP_CREATE_ALIGN_16 0x00010000
118#define HEAP_CREATE_ENABLE_TRACING 0x00020000
119#define HEAP_WINE_SEGPTR 0x01000000 /* Not a Win32 flag */
120#define HEAP_WINE_CODESEG 0x02000000 /* Not a Win32 flag */
121#define HEAP_WINE_CODE16SEG 0x04000000 /* Not a Win32 flag */
122
123/* Processor feature flags. */
124#define PF_FLOATING_POINT_PRECISION_ERRATA 0
125#define PF_FLOATING_POINT_EMULATED 1
126#define PF_COMPARE_EXCHANGE_DOUBLE 2
127#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
128#define PF_PPC_MOVEMEM_64BIT_OK 4
129#define PF_ALPHA_BYTE_INSTRUCTIONS 5
130
131
132/* The Win32 register context */
133
134/* CONTEXT is the CPU-dependent context; it should be used */
135/* wherever a platform-specific context is needed (e.g. exception */
136/* handling, Win32 register functions). */
137
138/* CONTEXT86 is the i386-specific context; it should be used */
139/* wherever only a 386 context makes sense (e.g. DOS interrupts, */
140/* Win16 register functions), so that this code can be compiled */
141/* on all platforms. */
142
143#define SIZE_OF_80387_REGISTERS 80
144
145typedef struct _FLOATING_SAVE_AREA
146{
147 DWORD ControlWord;
148 DWORD StatusWord;
149 DWORD TagWord;
150 DWORD ErrorOffset;
151 DWORD ErrorSelector;
152 DWORD DataOffset;
153 DWORD DataSelector;
154 BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
155 DWORD Cr0NpxState;
156} FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
157
158typedef struct _CONTEXT86
159{
160 DWORD ContextFlags;
161
162 /* These are selected by CONTEXT_DEBUG_REGISTERS */
163 DWORD Dr0;
164 DWORD Dr1;
165 DWORD Dr2;
166 DWORD Dr3;
167 DWORD Dr6;
168 DWORD Dr7;
169
170 /* These are selected by CONTEXT_FLOATING_POINT */
171 FLOATING_SAVE_AREA FloatSave;
172
173 /* These are selected by CONTEXT_SEGMENTS */
174 DWORD SegGs;
175 DWORD SegFs;
176 DWORD SegEs;
177 DWORD SegDs;
178
179 /* These are selected by CONTEXT_INTEGER */
180 DWORD Edi;
181 DWORD Esi;
182 DWORD Ebx;
183 DWORD Edx;
184 DWORD Ecx;
185 DWORD Eax;
186
187 /* These are selected by CONTEXT_CONTROL */
188 DWORD Ebp;
189 DWORD Eip;
190 DWORD SegCs;
191 DWORD EFlags;
192 DWORD Esp;
193 DWORD SegSs;
194} CONTEXT86;
195
196#define CONTEXT_X86 0x00010000
197#define CONTEXT_i386 CONTEXT_X86
198#define CONTEXT_i486 CONTEXT_X86
199
200#define CONTEXT86_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
201#define CONTEXT86_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
202#define CONTEXT86_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
203#define CONTEXT86_FLOATING_POINT (CONTEXT_i386 | 0x0008L) /* 387 state */
204#define CONTEXT86_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */
205#define CONTEXT86_FULL (CONTEXT86_CONTROL | CONTEXT86_INTEGER | CONTEXT86_SEGMENTS)
206
207/* i386 context definitions */
208#ifdef __i386__
209
210#define CONTEXT_CONTROL CONTEXT86_CONTROL
211#define CONTEXT_INTEGER CONTEXT86_INTEGER
212#define CONTEXT_SEGMENTS CONTEXT86_SEGMENTS
213#define CONTEXT_FLOATING_POINT CONTEXT86_FLOATING_POINT
214#define CONTEXT_DEBUG_REGISTERS CONTEXT86_DEBUG_REGISTERS
215#define CONTEXT_FULL CONTEXT86_FULL
216
217typedef CONTEXT86 CONTEXT;
218
219#endif /* __i386__ */
220
221/* Alpha context definitions */
222#ifdef _ALPHA_
223
224#define CONTEXT_ALPHA 0x00020000
225
226#define CONTEXT_CONTROL (CONTEXT_ALPHA | 0x00000001L)
227#define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA | 0x00000002L)
228#define CONTEXT_INTEGER (CONTEXT_ALPHA | 0x00000004L)
229#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
230
231typedef struct _CONTEXT
232{
233 /* selected by CONTEXT_FLOATING_POINT */
234 ULONGLONG FltF0;
235 ULONGLONG FltF1;
236 ULONGLONG FltF2;
237 ULONGLONG FltF3;
238 ULONGLONG FltF4;
239 ULONGLONG FltF5;
240 ULONGLONG FltF6;
241 ULONGLONG FltF7;
242 ULONGLONG FltF8;
243 ULONGLONG FltF9;
244 ULONGLONG FltF10;
245 ULONGLONG FltF11;
246 ULONGLONG FltF12;
247 ULONGLONG FltF13;
248 ULONGLONG FltF14;
249 ULONGLONG FltF15;
250 ULONGLONG FltF16;
251 ULONGLONG FltF17;
252 ULONGLONG FltF18;
253 ULONGLONG FltF19;
254 ULONGLONG FltF20;
255 ULONGLONG FltF21;
256 ULONGLONG FltF22;
257 ULONGLONG FltF23;
258 ULONGLONG FltF24;
259 ULONGLONG FltF25;
260 ULONGLONG FltF26;
261 ULONGLONG FltF27;
262 ULONGLONG FltF28;
263 ULONGLONG FltF29;
264 ULONGLONG FltF30;
265 ULONGLONG FltF31;
266
267 /* selected by CONTEXT_INTEGER */
268 ULONGLONG IntV0;
269 ULONGLONG IntT0;
270 ULONGLONG IntT1;
271 ULONGLONG IntT2;
272 ULONGLONG IntT3;
273 ULONGLONG IntT4;
274 ULONGLONG IntT5;
275 ULONGLONG IntT6;
276 ULONGLONG IntT7;
277 ULONGLONG IntS0;
278 ULONGLONG IntS1;
279 ULONGLONG IntS2;
280 ULONGLONG IntS3;
281 ULONGLONG IntS4;
282 ULONGLONG IntS5;
283 ULONGLONG IntFp;
284 ULONGLONG IntA0;
285 ULONGLONG IntA1;
286 ULONGLONG IntA2;
287 ULONGLONG IntA3;
288 ULONGLONG IntA4;
289 ULONGLONG IntA5;
290 ULONGLONG IntT8;
291 ULONGLONG IntT9;
292 ULONGLONG IntT10;
293 ULONGLONG IntT11;
294 ULONGLONG IntRa;
295 ULONGLONG IntT12;
296 ULONGLONG IntAt;
297 ULONGLONG IntGp;
298 ULONGLONG IntSp;
299 ULONGLONG IntZero;
300
301 /* selected by CONTEXT_FLOATING_POINT */
302 ULONGLONG Fpcr;
303 ULONGLONG SoftFpcr;
304
305 /* selected by CONTEXT_CONTROL */
306 ULONGLONG Fir;
307 DWORD Psr;
308 DWORD ContextFlags;
309 DWORD Fill[4];
310} CONTEXT;
311
312#define _QUAD_PSR_OFFSET HighSoftFpcr
313#define _QUAD_FLAGS_OFFSET HighFir
314
315#endif /* _ALPHA_ */
316
317/* Mips context definitions */
318#ifdef _MIPS_
319
320#define CONTEXT_R4000 0x00010000
321
322#define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001)
323#define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002)
324#define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004)
325
326#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
327
328typedef struct _CONTEXT
329{
330 DWORD Argument[4];
331 /* These are selected by CONTEXT_FLOATING_POINT */
332 DWORD FltF0;
333 DWORD FltF1;
334 DWORD FltF2;
335 DWORD FltF3;
336 DWORD FltF4;
337 DWORD FltF5;
338 DWORD FltF6;
339 DWORD FltF7;
340 DWORD FltF8;
341 DWORD FltF9;
342 DWORD FltF10;
343 DWORD FltF11;
344 DWORD FltF12;
345 DWORD FltF13;
346 DWORD FltF14;
347 DWORD FltF15;
348 DWORD FltF16;
349 DWORD FltF17;
350 DWORD FltF18;
351 DWORD FltF19;
352 DWORD FltF20;
353 DWORD FltF21;
354 DWORD FltF22;
355 DWORD FltF23;
356 DWORD FltF24;
357 DWORD FltF25;
358 DWORD FltF26;
359 DWORD FltF27;
360 DWORD FltF28;
361 DWORD FltF29;
362 DWORD FltF30;
363 DWORD FltF31;
364
365 /* These are selected by CONTEXT_INTEGER */
366 DWORD IntZero;
367 DWORD IntAt;
368 DWORD IntV0;
369 DWORD IntV1;
370 DWORD IntA0;
371 DWORD IntA1;
372 DWORD IntA2;
373 DWORD IntA3;
374 DWORD IntT0;
375 DWORD IntT1;
376 DWORD IntT2;
377 DWORD IntT3;
378 DWORD IntT4;
379 DWORD IntT5;
380 DWORD IntT6;
381 DWORD IntT7;
382 DWORD IntS0;
383 DWORD IntS1;
384 DWORD IntS2;
385 DWORD IntS3;
386 DWORD IntS4;
387 DWORD IntS5;
388 DWORD IntS6;
389 DWORD IntS7;
390 DWORD IntT8;
391 DWORD IntT9;
392 DWORD IntK0;
393 DWORD IntK1;
394 DWORD IntGp;
395 DWORD IntSp;
396 DWORD IntS8;
397 DWORD IntRa;
398 DWORD IntLo;
399 DWORD IntHi;
400
401 /* These are selected by CONTEXT_FLOATING_POINT */
402 DWORD Fsr;
403
404 /* These are selected by CONTEXT_CONTROL */
405 DWORD Fir;
406 DWORD Psr;
407
408 DWORD ContextFlags;
409 DWORD Fill[2];
410} CONTEXT;
411
412#endif /* _MIPS_ */
413
414/* PowerPC context definitions */
415#ifdef __PPC__
416
417#define CONTEXT_CONTROL 0x0001
418#define CONTEXT_FLOATING_POINT 0x0002
419#define CONTEXT_INTEGER 0x0004
420#define CONTEXT_DEBUG_REGISTERS 0x0008
421#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
422
423typedef struct
424{
425 /* These are selected by CONTEXT_FLOATING_POINT */
426 double Fpr0;
427 double Fpr1;
428 double Fpr2;
429 double Fpr3;
430 double Fpr4;
431 double Fpr5;
432 double Fpr6;
433 double Fpr7;
434 double Fpr8;
435 double Fpr9;
436 double Fpr10;
437 double Fpr11;
438 double Fpr12;
439 double Fpr13;
440 double Fpr14;
441 double Fpr15;
442 double Fpr16;
443 double Fpr17;
444 double Fpr18;
445 double Fpr19;
446 double Fpr20;
447 double Fpr21;
448 double Fpr22;
449 double Fpr23;
450 double Fpr24;
451 double Fpr25;
452 double Fpr26;
453 double Fpr27;
454 double Fpr28;
455 double Fpr29;
456 double Fpr30;
457 double Fpr31;
458 double Fpscr;
459
460 /* These are selected by CONTEXT_INTEGER */
461 DWORD Gpr0;
462 DWORD Gpr1;
463 DWORD Gpr2;
464 DWORD Gpr3;
465 DWORD Gpr4;
466 DWORD Gpr5;
467 DWORD Gpr6;
468 DWORD Gpr7;
469 DWORD Gpr8;
470 DWORD Gpr9;
471 DWORD Gpr10;
472 DWORD Gpr11;
473 DWORD Gpr12;
474 DWORD Gpr13;
475 DWORD Gpr14;
476 DWORD Gpr15;
477 DWORD Gpr16;
478 DWORD Gpr17;
479 DWORD Gpr18;
480 DWORD Gpr19;
481 DWORD Gpr20;
482 DWORD Gpr21;
483 DWORD Gpr22;
484 DWORD Gpr23;
485 DWORD Gpr24;
486 DWORD Gpr25;
487 DWORD Gpr26;
488 DWORD Gpr27;
489 DWORD Gpr28;
490 DWORD Gpr29;
491 DWORD Gpr30;
492 DWORD Gpr31;
493
494 DWORD Cr;
495 DWORD Xer;
496
497 /* These are selected by CONTEXT_CONTROL */
498 DWORD Msr;
499 DWORD Iar;
500 DWORD Lr;
501 DWORD Ctr;
502
503 DWORD ContextFlags;
504 DWORD Fill[3];
505
506 /* These are selected by CONTEXT_DEBUG_REGISTERS */
507 DWORD Dr0;
508 DWORD Dr1;
509 DWORD Dr2;
510 DWORD Dr3;
511 DWORD Dr4;
512 DWORD Dr5;
513 DWORD Dr6;
514 DWORD Dr7;
515} CONTEXT;
516
517typedef struct _STACK_FRAME_HEADER
518{
519 DWORD BackChain;
520 DWORD GlueSaved1;
521 DWORD GlueSaved2;
522 DWORD Reserved1;
523 DWORD Spare1;
524 DWORD Spare2;
525
526 DWORD Parameter0;
527 DWORD Parameter1;
528 DWORD Parameter2;
529 DWORD Parameter3;
530 DWORD Parameter4;
531 DWORD Parameter5;
532 DWORD Parameter6;
533 DWORD Parameter7;
534} STACK_FRAME_HEADER,*PSTACK_FRAME_HEADER;
535
536#endif /* __PPC__ */
537
538#ifdef __sparc__
539
540/*
541 * FIXME:
542 *
543 * There is no official CONTEXT structure defined for the SPARC
544 * architecture, so I just made one up.
545 *
546 * This structure is valid only for 32-bit SPARC architectures,
547 * not for 64-bit SPARC.
548 *
549 * Note that this structure contains only the 'top-level' registers;
550 * the rest of the register window chain is not visible.
551 *
552 * The layout follows the Solaris 'prgregset_t' structure.
553 *
554 */
555
556#define CONTEXT_SPARC 0x10000000
557
558#define CONTEXT_CONTROL (CONTEXT_SPARC | 0x00000001)
559#define CONTEXT_FLOATING_POINT (CONTEXT_SPARC | 0x00000002)
560#define CONTEXT_INTEGER (CONTEXT_SPARC | 0x00000004)
561
562#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
563
564typedef struct _CONTEXT
565{
566 DWORD ContextFlags;
567
568 /* These are selected by CONTEXT_INTEGER */
569 DWORD g0;
570 DWORD g1;
571 DWORD g2;
572 DWORD g3;
573 DWORD g4;
574 DWORD g5;
575 DWORD g6;
576 DWORD g7;
577 DWORD o0;
578 DWORD o1;
579 DWORD o2;
580 DWORD o3;
581 DWORD o4;
582 DWORD o5;
583 DWORD o6;
584 DWORD o7;
585 DWORD l0;
586 DWORD l1;
587 DWORD l2;
588 DWORD l3;
589 DWORD l4;
590 DWORD l5;
591 DWORD l6;
592 DWORD l7;
593 DWORD i0;
594 DWORD i1;
595 DWORD i2;
596 DWORD i3;
597 DWORD i4;
598 DWORD i5;
599 DWORD i6;
600 DWORD i7;
601
602 /* These are selected by CONTEXT_CONTROL */
603 DWORD psr;
604 DWORD pc;
605 DWORD npc;
606 DWORD y;
607 DWORD wim;
608 DWORD tbr;
609
610 /* FIXME: floating point registers missing */
611
612} CONTEXT;
613
614#endif
615
616#if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
617#error You need to define a CONTEXT for your CPU
618#endif
619
620typedef CONTEXT *PCONTEXT;
621typedef HANDLE *PHANDLE;
622
623#ifdef __WINE__
624
625/* Macros for easier access to i386 context registers */
626
627#define EAX_reg(context) ((context)->Eax)
628#define EBX_reg(context) ((context)->Ebx)
629#define ECX_reg(context) ((context)->Ecx)
630#define EDX_reg(context) ((context)->Edx)
631#define ESI_reg(context) ((context)->Esi)
632#define EDI_reg(context) ((context)->Edi)
633#define EBP_reg(context) ((context)->Ebp)
634
635#define CS_reg(context) ((context)->SegCs)
636#define DS_reg(context) ((context)->SegDs)
637#define ES_reg(context) ((context)->SegEs)
638#define FS_reg(context) ((context)->SegFs)
639#define GS_reg(context) ((context)->SegGs)
640#define SS_reg(context) ((context)->SegSs)
641
642#define EFL_reg(context) ((context)->EFlags)
643#define EIP_reg(context) ((context)->Eip)
644#define ESP_reg(context) ((context)->Esp)
645
646#define AX_reg(context) (*(WORD*)&EAX_reg(context))
647#define BX_reg(context) (*(WORD*)&EBX_reg(context))
648#define CX_reg(context) (*(WORD*)&ECX_reg(context))
649#define DX_reg(context) (*(WORD*)&EDX_reg(context))
650#define SI_reg(context) (*(WORD*)&ESI_reg(context))
651#define DI_reg(context) (*(WORD*)&EDI_reg(context))
652#define BP_reg(context) (*(WORD*)&EBP_reg(context))
653
654#define AL_reg(context) (*(BYTE*)&EAX_reg(context))
655#define AH_reg(context) (*((BYTE*)&EAX_reg(context)+1))
656#define BL_reg(context) (*(BYTE*)&EBX_reg(context))
657#define BH_reg(context) (*((BYTE*)&EBX_reg(context)+1))
658#define CL_reg(context) (*(BYTE*)&ECX_reg(context))
659#define CH_reg(context) (*((BYTE*)&ECX_reg(context)+1))
660#define DL_reg(context) (*(BYTE*)&EDX_reg(context))
661#define DH_reg(context) (*((BYTE*)&EDX_reg(context)+1))
662
663#define SET_CFLAG(context) (EFL_reg(context) |= 0x0001)
664#define RESET_CFLAG(context) (EFL_reg(context) &= ~0x0001)
665#define SET_ZFLAG(context) (EFL_reg(context) |= 0x0040)
666#define RESET_ZFLAG(context) (EFL_reg(context) &= ~0x0040)
667
668#define ISV86(context) (EFL_reg(context) & 0x00020000)
669#define V86BASE(context) ((context)->Dr7) /* ugly */
670
671
672/* Macros to retrieve the current context */
673
674#ifdef __i386__
675#define _DEFINE_REGS_ENTRYPOINT( name, fn, args ) \
676 __asm__(".align 4\n\t" \
677 ".globl " #name "\n\t" \
678 ".type " #name ",@function\n\t" \
679 #name ":\n\t" \
680 "call CALL32_Regs\n\t" \
681 ".long " #fn "\n\t" \
682 ".byte " #args ", " #args "\n\t");
683
684#define DEFINE_REGS_ENTRYPOINT_0( name, fn ) \
685 _DEFINE_REGS_ENTRYPOINT( name, fn, 0 )
686#define DEFINE_REGS_ENTRYPOINT_1( name, fn, t1 ) \
687 _DEFINE_REGS_ENTRYPOINT( name, fn, 4 )
688#define DEFINE_REGS_ENTRYPOINT_2( name, fn, t1, t2 ) \
689 _DEFINE_REGS_ENTRYPOINT( name, fn, 8 )
690#define DEFINE_REGS_ENTRYPOINT_3( name, fn, t1, t2, t3 ) \
691 _DEFINE_REGS_ENTRYPOINT( name, fn, 12 )
692#define DEFINE_REGS_ENTRYPOINT_4( name, fn, t1, t2, t3, t4 ) \
693 _DEFINE_REGS_ENTRYPOINT( name, fn, 16 )
694
695#endif /* __i386__ */
696
697#ifdef __sparc__
698/* FIXME: use getcontext() to retrieve full context */
699#define _GET_CONTEXT \
700 CONTEXT context; \
701 do { memset(&context, 0, sizeof(CONTEXT)); \
702 context.ContextFlags = CONTEXT_CONTROL; \
703 context.pc = (DWORD)__builtin_return_address(0); \
704 } while (0)
705
706#define DEFINE_REGS_ENTRYPOINT_0( name, fn ) \
707 void WINAPI name ( void ) \
708 { _GET_CONTEXT; fn( &context ); }
709#define DEFINE_REGS_ENTRYPOINT_1( name, fn, t1 ) \
710 void WINAPI name ( t1 a1 ) \
711 { _GET_CONTEXT; fn( a1, &context ); }
712#define DEFINE_REGS_ENTRYPOINT_2( name, fn, t1, t2 ) \
713 void WINAPI name ( t1 a1, t2 a2 ) \
714 { _GET_CONTEXT; fn( a1, a2, &context ); }
715#define DEFINE_REGS_ENTRYPOINT_3( name, fn, t1, t2, t3 ) \
716 void WINAPI name ( t1 a1, t2 a2, t3 a3 ) \
717 { _GET_CONTEXT; fn( a1, a2, a3, &context ); }
718#define DEFINE_REGS_ENTRYPOINT_4( name, fn, t1, t2, t3, t4 ) \
719 void WINAPI name ( t1 a1, t2 a2, t3 a3, t4 a4 ) \
720 { _GET_CONTEXT; fn( a1, a2, a3, a4, &context ); }
721
722#endif /* __sparc__ */
723
724#ifndef DEFINE_REGS_ENTRYPOINT_0
725#error You need to define DEFINE_REGS_ENTRYPOINT macros for your CPU
726#endif
727
728#ifdef __i386__
729# define GET_IP(context) ((LPVOID)(context)->Eip)
730#endif
731#ifdef __sparc__
732# define GET_IP(context) ((LPVOID)(context)->pc)
733#endif
734
735#if !defined(GET_IP) && !defined(RC_INVOKED)
736# error You must define GET_IP for this CPU
737#endif
738
739#endif /* __WINE__ */
740
741/*
742 * Exception codes
743 */
744
745#define STATUS_SUCCESS 0x00000000
746#define STATUS_WAIT_0 0x00000000
747#define STATUS_ABANDONED_WAIT_0 0x00000080
748#define STATUS_USER_APC 0x000000C0
749#define STATUS_TIMEOUT 0x00000102
750#define STATUS_PENDING 0x00000103
751#define STATUS_GUARD_PAGE_VIOLATION 0x80000001
752#define STATUS_DATATYPE_MISALIGNMENT 0x80000002
753#define STATUS_BREAKPOINT 0x80000003
754#define STATUS_SINGLE_STEP 0x80000004
755#define STATUS_BUFFER_OVERFLOW 0x80000005
756#define STATUS_UNSUCCESSFUL 0xC0000001
757#define STATUS_ACCESS_VIOLATION 0xC0000005
758#define STATUS_IN_PAGE_ERROR 0xC0000006
759#define STATUS_INVALID_PARAMETER 0xC000000D
760#define STATUS_NO_MEMORY 0xC0000017
761#define STATUS_CONFLICTING_ADDRESSES 0xC0000018
762#define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
763#define STATUS_BUFFER_TOO_SMALL 0xC0000023
764#define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025
765#define STATUS_INVALID_DISPOSITION 0xC0000026
766#define STATUS_UNWIND 0xC0000027
767#define STATUS_BAD_STACK 0xC0000028
768#define STATUS_INVALID_UNWIND_TARGET 0xC0000029
769#define STATUS_UNKNOWN_REVISION 0xC0000058
770#define STATUS_INVALID_SECURITY_DESCR 0xC0000079
771#define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
772#define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
773#define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
774#define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
775#define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
776#define STATUS_FLOAT_OVERFLOW 0xC0000091
777#define STATUS_FLOAT_STACK_CHECK 0xC0000092
778#define STATUS_FLOAT_UNDERFLOW 0xC0000093
779#define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
780#define STATUS_INTEGER_OVERFLOW 0xC0000095
781#define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
782#define STATUS_INVALID_PARAMETER_2 0xC00000F0
783#define STATUS_STACK_OVERFLOW 0xC00000FD
784#define STATUS_CONTROL_C_EXIT 0xC000013A
785
786#define MAXIMUM_WAIT_OBJECTS 64
787#define MAXIMUM_SUSPEND_COUNT 127
788
789#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
790#define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT
791#define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT
792#define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP
793#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED
794#define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND
795#define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO
796#define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT
797#define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION
798#define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW
799#define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK
800#define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW
801#define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO
802#define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW
803#define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION
804#define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR
805#define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION
806#define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION
807#define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW
808#define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION
809#define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION
810#define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE
811#define CONTROL_C_EXIT STATUS_CONTROL_C_EXIT
812
813/* Wine extension; Windows doesn't have a name for this code */
814#define EXCEPTION_CRITICAL_SECTION_WAIT 0xc0000194
815
816
817/*
818 * Return values from the actual exception handlers
819 */
820
821#define ExceptionContinueExecution 0
822#define ExceptionContinueSearch 1
823#define ExceptionNestedException 2
824#define ExceptionCollidedUnwind 3
825
826/*
827 * Return values from filters in except() and from UnhandledExceptionFilter
828 */
829
830#define EXCEPTION_EXECUTE_HANDLER 1
831#define EXCEPTION_CONTINUE_SEARCH 0
832#define EXCEPTION_CONTINUE_EXECUTION -1
833
834/*
835 * From OS/2 2.0 exception handling
836 * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD
837 */
838
839#define EH_NONCONTINUABLE 0x01
840#define EH_UNWINDING 0x02
841#define EH_EXIT_UNWIND 0x04
842#define EH_STACK_INVALID 0x08
843#define EH_NESTED_CALL 0x10
844
845#define EXCEPTION_CONTINUABLE 0
846#define EXCEPTION_NONCONTINUABLE EH_NONCONTINUABLE
847
848/*
849 * The exception record used by Win32 to give additional information
850 * about exception to exception handlers.
851 */
852
853#define EXCEPTION_MAXIMUM_PARAMETERS 15
854
855typedef struct __EXCEPTION_RECORD
856{
857 DWORD ExceptionCode;
858 DWORD ExceptionFlags;
859 struct __EXCEPTION_RECORD *ExceptionRecord;
860
861 LPVOID ExceptionAddress;
862 DWORD NumberParameters;
863 DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
864} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
865
866/*
867 * The exception pointers structure passed to exception filters
868 * in except() and the UnhandledExceptionFilter().
869 */
870
871typedef struct _EXCEPTION_POINTERS
872{
873 PEXCEPTION_RECORD ExceptionRecord;
874 PCONTEXT ContextRecord;
875} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
876
877
878/*
879 * The exception frame, used for registering exception handlers
880 * Win32 cares only about this, but compilers generally emit
881 * larger exception frames for their own use.
882 */
883
884struct __EXCEPTION_FRAME;
885
886typedef DWORD (*PEXCEPTION_HANDLER)(PEXCEPTION_RECORD,struct __EXCEPTION_FRAME*,
887 PCONTEXT,struct __EXCEPTION_FRAME **);
888
889typedef struct __EXCEPTION_FRAME
890{
891 struct __EXCEPTION_FRAME *Prev;
892 PEXCEPTION_HANDLER Handler;
893} EXCEPTION_FRAME, *PEXCEPTION_FRAME;
894
895#include "poppack.h"
896
897/*
898 * function pointer to a exception filter
899 */
900
901typedef LONG (* CALLBACK PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo);
902typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
903
904DWORD WINAPI UnhandledExceptionFilter( PEXCEPTION_POINTERS epointers );
905LPTOP_LEVEL_EXCEPTION_FILTER
906WINAPI SetUnhandledExceptionFilter( LPTOP_LEVEL_EXCEPTION_FILTER filter );
907
908/* status values for ContinueDebugEvent */
909#define DBG_CONTINUE 0x00010002
910#define DBG_TERMINATE_THREAD 0x40010003
911#define DBG_TERMINATE_PROCESS 0x40010004
912#define DBG_CONTROL_C 0x40010005
913#define DBG_CONTROL_BREAK 0x40010008
914#define DBG_EXCEPTION_NOT_HANDLED 0x80010001
915
916struct _TEB;
917
918#ifdef __WINE__
919
920#ifndef __WIN32OS2__
921#if defined(__i386__)
922static inline struct _TEB * WINE_UNUSED __get_teb(void)
923{
924 struct _TEB *teb;
925 __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb));
926 return teb;
927}
928#elif defined(HAVE__LWP_CREATE)
929extern void *_lwp_getprivate(void);
930static inline struct _TEB * WINE_UNUSED __get_teb(void)
931{
932 return (struct _TEB *)_lwp_getprivate();
933}
934#else
935#error NtCurrentTeb() not defined for this architecture!
936#endif
937
938#define NtCurrentTeb() __get_teb()
939
940#else /* __WINE__ */
941extern struct _TEB * WINAPI NtCurrentTeb(void);
942#endif
943#endif //__WIN32OS2__
944
945/*
946 * Here follows typedefs for security and tokens.
947 */
948
949/*
950 * First a constant for the following typdefs.
951 */
952
953#define ANYSIZE_ARRAY 1
954
955/* FIXME: Orphan. What does it point to? */
956typedef PVOID PACCESS_TOKEN;
957
958/*
959 * TOKEN_INFORMATION_CLASS
960 */
961
962typedef enum _TOKEN_INFORMATION_CLASS {
963 TokenUser = 1,
964 TokenGroups,
965 TokenPrivileges,
966 TokenOwner,
967 TokenPrimaryGroup,
968 TokenDefaultDacl,
969 TokenSource,
970 TokenType,
971 TokenImpersonationLevel,
972 TokenStatistics
973} TOKEN_INFORMATION_CLASS;
974
975#ifndef _SECURITY_DEFINED
976#define _SECURITY_DEFINED
977
978#include "pshpack1.h"
979
980typedef DWORD ACCESS_MASK, *PACCESS_MASK;
981
982typedef struct _GENERIC_MAPPING {
983 ACCESS_MASK GenericRead;
984 ACCESS_MASK GenericWrite;
985 ACCESS_MASK GenericExecute;
986 ACCESS_MASK GenericAll;
987} GENERIC_MAPPING, *PGENERIC_MAPPING;
988
989#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
990#define SID_IDENTIFIER_AUTHORITY_DEFINED
991typedef struct {
992 BYTE Value[6];
993} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
994#endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */
995
996#ifndef SID_DEFINED
997#define SID_DEFINED
998typedef struct _SID {
999 BYTE Revision;
1000 BYTE SubAuthorityCount;
1001 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
1002 DWORD SubAuthority[1];
1003} SID,*PSID;
1004#endif /* !defined(SID_DEFINED) */
1005
1006#define SID_REVISION (1) /* Current revision */
1007#define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
1008#define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */
1009
1010
1011/*
1012 * ACL
1013 */
1014
1015typedef struct _ACL {
1016 BYTE AclRevision;
1017 BYTE Sbz1;
1018 WORD AclSize;
1019 WORD AceCount;
1020 WORD Sbz2;
1021} ACL, *PACL;
1022
1023/* SECURITY_DESCRIPTOR */
1024#define SECURITY_DESCRIPTOR_REVISION 1
1025#define SECURITY_DESCRIPTOR_REVISION1 1
1026
1027
1028#define SE_OWNER_DEFAULTED 0x0001
1029#define SE_GROUP_DEFAULTED 0x0002
1030#define SE_DACL_PRESENT 0x0004
1031#define SE_DACL_DEFAULTED 0x0008
1032#define SE_SACL_PRESENT 0x0010
1033#define SE_SACL_DEFAULTED 0x0020
1034#define SE_SELF_RELATIVE 0x8000
1035
1036typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
1037typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL, *LPSECURITY_DESCRIPTOR;
1038
1039/* The security descriptor structure */
1040typedef struct {
1041 BYTE Revision;
1042 BYTE Sbz1;
1043 SECURITY_DESCRIPTOR_CONTROL Control;
1044 PSID Owner;
1045 PSID Group;
1046 PACL Sacl;
1047 PACL Dacl;
1048} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
1049
1050#define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
1051
1052#include "poppack.h"
1053
1054#endif /* _SECURITY_DEFINED */
1055
1056#include "pshpack1.h"
1057
1058/*
1059 * SID_AND_ATTRIBUTES
1060 */
1061
1062typedef struct _SID_AND_ATTRIBUTES {
1063 PSID Sid;
1064 DWORD Attributes;
1065} SID_AND_ATTRIBUTES ;
1066
1067/*
1068 * TOKEN_USER
1069 */
1070
1071typedef struct _TOKEN_USER {
1072 SID_AND_ATTRIBUTES User;
1073} TOKEN_USER;
1074
1075/*
1076 * TOKEN_GROUPS
1077 */
1078
1079typedef struct _TOKEN_GROUPS {
1080 DWORD GroupCount;
1081 SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
1082} TOKEN_GROUPS;
1083
1084/*
1085 * LUID_AND_ATTRIBUTES
1086 */
1087#ifdef __WIN32OS2__
1088typedef struct _LARGE_INTEGER {
1089 ULONG LowPart;
1090 LONG HighPart;
1091} LARGE_INTEGER, *LPLARGE_INTEGER, *PLARGE_INTEGER;
1092
1093typedef struct _ULARGE_INTEGER {
1094 ULONG LowPart;
1095 LONG HighPart;
1096} ULARGE_INTEGER, *LPULARGE_INTEGER, *PULARGE_INTEGER;
1097#else
1098typedef union _LARGE_INTEGER {
1099 struct {
1100 DWORD LowPart;
1101 LONG HighPart;
1102 } DUMMYSTRUCTNAME;
1103 LONGLONG QuadPart;
1104} LARGE_INTEGER, *LPLARGE_INTEGER, *PLARGE_INTEGER;
1105
1106typedef union _ULARGE_INTEGER {
1107 struct {
1108 DWORD LowPart;
1109 LONG HighPart;
1110 } DUMMYSTRUCTNAME;
1111 LONGLONG QuadPart;
1112} ULARGE_INTEGER, *LPULARGE_INTEGER, *PULARGE_INTEGER;
1113#endif
1114/*
1115 * Locally Unique Identifier
1116 */
1117
1118typedef LARGE_INTEGER LUID,*PLUID;
1119
1120typedef struct _LUID_AND_ATTRIBUTES {
1121 LUID Luid;
1122 DWORD Attributes;
1123} LUID_AND_ATTRIBUTES;
1124
1125/*
1126 * PRIVILEGE_SET
1127 */
1128
1129typedef struct _PRIVILEGE_SET {
1130 DWORD PrivilegeCount;
1131 DWORD Control;
1132 LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
1133} PRIVILEGE_SET, *PPRIVILEGE_SET;
1134
1135/*
1136 * TOKEN_PRIVILEGES
1137 */
1138
1139typedef struct _TOKEN_PRIVILEGES {
1140 DWORD PrivilegeCount;
1141 LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
1142} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
1143
1144/*
1145 * TOKEN_OWNER
1146 */
1147
1148typedef struct _TOKEN_OWNER {
1149 PSID Owner;
1150} TOKEN_OWNER;
1151
1152/*
1153 * TOKEN_PRIMARY_GROUP
1154 */
1155
1156typedef struct _TOKEN_PRIMARY_GROUP {
1157 PSID PrimaryGroup;
1158} TOKEN_PRIMARY_GROUP;
1159
1160
1161/*
1162 * TOKEN_DEFAULT_DACL
1163 */
1164
1165typedef struct _TOKEN_DEFAULT_DACL {
1166 PACL DefaultDacl;
1167} TOKEN_DEFAULT_DACL;
1168
1169/*
1170 * TOKEN_SOURCEL
1171 */
1172
1173typedef struct _TOKEN_SOURCE {
1174 char Sourcename[8];
1175 LUID SourceIdentifier;
1176} TOKEN_SOURCE;
1177
1178/*
1179 * TOKEN_TYPE
1180 */
1181
1182typedef enum tagTOKEN_TYPE {
1183 TokenPrimary = 1,
1184 TokenImpersonation
1185} TOKEN_TYPE;
1186
1187/*
1188 * SECURITY_IMPERSONATION_LEVEL
1189 */
1190
1191typedef enum _SECURITY_IMPERSONATION_LEVEL {
1192 SecurityAnonymous,
1193 SecurityIdentification,
1194 SecurityImpersonation,
1195 SecurityDelegation
1196} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
1197
1198
1199typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,
1200 * PSECURITY_CONTEXT_TRACKING_MODE;
1201/*
1202 * Quality of Service
1203 */
1204
1205typedef struct _SECURITY_QUALITY_OF_SERVICE {
1206 DWORD Length;
1207 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
1208 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
1209 BOOL EffectiveOnly;
1210} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
1211
1212/*
1213 * TOKEN_STATISTICS
1214 */
1215
1216typedef struct _TOKEN_STATISTICS {
1217 LUID TokenId;
1218 LUID AuthenticationId;
1219 LARGE_INTEGER ExpirationTime;
1220 TOKEN_TYPE TokenType;
1221 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
1222 DWORD DynamicCharged;
1223 DWORD DynamicAvailable;
1224 DWORD GroupCount;
1225 DWORD PrivilegeCount;
1226 LUID ModifiedId;
1227} TOKEN_STATISTICS;
1228
1229/*
1230 * ACLs of NT
1231 */
1232
1233#define ACL_REVISION 2
1234
1235#define ACL_REVISION1 1
1236#define ACL_REVISION2 2
1237
1238/* ACEs, directly starting after an ACL */
1239typedef struct _ACE_HEADER {
1240 BYTE AceType;
1241 BYTE AceFlags;
1242 WORD AceSize;
1243} ACE_HEADER,*PACE_HEADER;
1244
1245/* AceType */
1246#define ACCESS_ALLOWED_ACE_TYPE 0
1247#define ACCESS_DENIED_ACE_TYPE 1
1248#define SYSTEM_AUDIT_ACE_TYPE 2
1249#define SYSTEM_ALARM_ACE_TYPE 3
1250
1251/* inherit AceFlags */
1252#define OBJECT_INHERIT_ACE 0x01
1253#define CONTAINER_INHERIT_ACE 0x02
1254#define NO_PROPAGATE_INHERIT_ACE 0x04
1255#define INHERIT_ONLY_ACE 0x08
1256#define VALID_INHERIT_FLAGS 0x0F
1257
1258/* AceFlags mask for what events we (should) audit */
1259#define SUCCESSFUL_ACCESS_ACE_FLAG 0x40
1260#define FAILED_ACCESS_ACE_FLAG 0x80
1261
1262/* different ACEs depending on AceType
1263 * SidStart marks the begin of a SID
1264 * so the thing finally looks like this:
1265 * 0: ACE_HEADER
1266 * 4: ACCESS_MASK
1267 * 8... : SID
1268 */
1269typedef struct _ACCESS_ALLOWED_ACE {
1270 ACE_HEADER Header;
1271 DWORD Mask;
1272 DWORD SidStart;
1273} ACCESS_ALLOWED_ACE,*PACCESS_ALLOWED_ACE;
1274
1275typedef struct _ACCESS_DENIED_ACE {
1276 ACE_HEADER Header;
1277 DWORD Mask;
1278 DWORD SidStart;
1279} ACCESS_DENIED_ACE,*PACCESS_DENIED_ACE;
1280
1281typedef struct _SYSTEM_AUDIT_ACE {
1282 ACE_HEADER Header;
1283 DWORD Mask;
1284 DWORD SidStart;
1285} SYSTEM_AUDIT_ACE,*PSYSTEM_AUDIT_ACE;
1286
1287typedef struct _SYSTEM_ALARM_ACE {
1288 ACE_HEADER Header;
1289 DWORD Mask;
1290 DWORD SidStart;
1291} SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
1292
1293typedef enum tagSID_NAME_USE {
1294 SidTypeUser = 1,
1295 SidTypeGroup,
1296 SidTypeDomain,
1297 SidTypeAlias,
1298 SidTypeWellKnownGroup,
1299 SidTypeDeletedAccount,
1300 SidTypeInvalid,
1301 SidTypeUnknown
1302} SID_NAME_USE,*PSID_NAME_USE;
1303
1304/* Access rights */
1305
1306#define DELETE 0x00010000
1307#define READ_CONTROL 0x00020000
1308#define WRITE_DAC 0x00040000
1309#define WRITE_OWNER 0x00080000
1310#define SYNCHRONIZE 0x00100000
1311#define STANDARD_RIGHTS_REQUIRED 0x000f0000
1312
1313#define STANDARD_RIGHTS_READ READ_CONTROL
1314#define STANDARD_RIGHTS_WRITE READ_CONTROL
1315#define STANDARD_RIGHTS_EXECUTE READ_CONTROL
1316
1317#define STANDARD_RIGHTS_ALL 0x001f0000
1318
1319#define SPECIFIC_RIGHTS_ALL 0x0000ffff
1320
1321#define GENERIC_READ 0x80000000
1322#define GENERIC_WRITE 0x40000000
1323#define GENERIC_EXECUTE 0x20000000
1324#define GENERIC_ALL 0x10000000
1325
1326#define MAXIMUM_ALLOWED 0x02000000
1327#define ACCESS_SYSTEM_SECURITY 0x01000000
1328
1329#define EVENT_MODIFY_STATE 0x0002
1330#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
1331
1332#define SEMAPHORE_MODIFY_STATE 0x0002
1333#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
1334
1335#define MUTEX_MODIFY_STATE 0x0001
1336#define MUTEX_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1)
1337
1338#define PROCESS_TERMINATE 0x0001
1339#define PROCESS_CREATE_THREAD 0x0002
1340#define PROCESS_VM_OPERATION 0x0008
1341#define PROCESS_VM_READ 0x0010
1342#define PROCESS_VM_WRITE 0x0020
1343#define PROCESS_DUP_HANDLE 0x0040
1344#define PROCESS_CREATE_PROCESS 0x0080
1345#define PROCESS_SET_QUOTA 0x0100
1346#define PROCESS_SET_INFORMATION 0x0200
1347#define PROCESS_QUERY_INFORMATION 0x0400
1348#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xfff)
1349
1350#define THREAD_TERMINATE 0x0001
1351#define THREAD_SUSPEND_RESUME 0x0002
1352#define THREAD_GET_CONTEXT 0x0008
1353#define THREAD_SET_CONTEXT 0x0010
1354#define THREAD_SET_INFORMATION 0x0020
1355#define THREAD_QUERY_INFORMATION 0x0040
1356#define THREAD_SET_THREAD_TOKEN 0x0080
1357#define THREAD_IMPERSONATE 0x0100
1358#define THREAD_DIRECT_IMPERSONATION 0x0200
1359#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff)
1360
1361#define THREAD_BASE_PRIORITY_LOWRT 15
1362#define THREAD_BASE_PRIORITY_MAX 2
1363#define THREAD_BASE_PRIORITY_MIN -2
1364#define THREAD_BASE_PRIORITY_IDLE -15
1365
1366#define FILE_READ_DATA 0x0001 /* file & pipe */
1367#define FILE_LIST_DIRECTORY 0x0001 /* directory */
1368#define FILE_WRITE_DATA 0x0002 /* file & pipe */
1369#define FILE_ADD_FILE 0x0002 /* directory */
1370#define FILE_APPEND_DATA 0x0004 /* file */
1371#define FILE_ADD_SUBDIRECTORY 0x0004 /* directory */
1372#define FILE_CREATE_PIPE_INSTANCE 0x0004 /* named pipe */
1373#define FILE_READ_EA 0x0008 /* file & directory */
1374#define FILE_READ_PROPERTIES FILE_READ_EA
1375#define FILE_WRITE_EA 0x0010 /* file & directory */
1376#define FILE_WRITE_PROPERTIES FILE_WRITE_EA
1377#define FILE_EXECUTE 0x0020 /* file */
1378#define FILE_TRAVERSE 0x0020 /* directory */
1379#define FILE_DELETE_CHILD 0x0040 /* directory */
1380#define FILE_READ_ATTRIBUTES 0x0080 /* all */
1381#define FILE_WRITE_ATTRIBUTES 0x0100 /* all */
1382#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
1383
1384#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
1385 FILE_READ_ATTRIBUTES | FILE_READ_EA | \
1386 SYNCHRONIZE)
1387#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
1388 FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
1389 FILE_APPEND_DATA | SYNCHRONIZE)
1390#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
1391 FILE_READ_ATTRIBUTES | SYNCHRONIZE)
1392
1393
1394/* File attribute flags
1395 */
1396#define FILE_SHARE_READ 0x00000001L
1397#define FILE_SHARE_WRITE 0x00000002L
1398#define FILE_SHARE_DELETE 0x00000004L
1399#define FILE_ATTRIBUTE_READONLY 0x00000001L
1400#define FILE_ATTRIBUTE_HIDDEN 0x00000002L
1401#define FILE_ATTRIBUTE_SYSTEM 0x00000004L
1402#define FILE_ATTRIBUTE_LABEL 0x00000008L /* Not in Windows API */
1403#define FILE_ATTRIBUTE_DIRECTORY 0x00000010L
1404#define FILE_ATTRIBUTE_ARCHIVE 0x00000020L
1405#define FILE_ATTRIBUTE_NORMAL 0x00000080L
1406#define FILE_ATTRIBUTE_TEMPORARY 0x00000100L
1407#define FILE_ATTRIBUTE_ATOMIC_WRITE 0x00000200L
1408#define FILE_ATTRIBUTE_XACTION_WRITE 0x00000400L
1409#define FILE_ATTRIBUTE_COMPRESSED 0x00000800L
1410#define FILE_ATTRIBUTE_OFFLINE 0x00001000L
1411
1412/* File alignments (NT) */
1413#define FILE_BYTE_ALIGNMENT 0x00000000
1414#define FILE_WORD_ALIGNMENT 0x00000001
1415#define FILE_LONG_ALIGNMENT 0x00000003
1416#define FILE_QUAD_ALIGNMENT 0x00000007
1417#define FILE_OCTA_ALIGNMENT 0x0000000f
1418#define FILE_32_BYTE_ALIGNMENT 0x0000001f
1419#define FILE_64_BYTE_ALIGNMENT 0x0000003f
1420#define FILE_128_BYTE_ALIGNMENT 0x0000007f
1421#define FILE_256_BYTE_ALIGNMENT 0x000000ff
1422#define FILE_512_BYTE_ALIGNMENT 0x000001ff
1423
1424/* Registry security values */
1425#define OWNER_SECURITY_INFORMATION 0x00000001
1426#define GROUP_SECURITY_INFORMATION 0x00000002
1427#define DACL_SECURITY_INFORMATION 0x00000004
1428#define SACL_SECURITY_INFORMATION 0x00000008
1429
1430#include "poppack.h"
1431
1432#endif /* __WINE_WINNT_H */
Note: See TracBrowser for help on using the repository browser.