File: process.h

package info (click to toggle)
wine 0.0.980315-1
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 10,136 kB
  • ctags: 26,112
  • sloc: ansic: 156,310; makefile: 1,160; yacc: 807; perl: 655; lex: 555; sh: 304
file content (119 lines) | stat: -rw-r--r-- 5,594 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
 * Process definitions
 *
 * Copyright 1996 Alexandre Julliard
 */

#ifndef __WINE_PROCESS_H
#define __WINE_PROCESS_H

#include "windows.h"
#include "winbase.h"
#include "winnt.h"
#include "k32obj.h"
#include "pe_image.h"
#include "task.h"

/* Process handle entry */
typedef struct
{
    DWORD    access;  /* Access flags */
    K32OBJ  *ptr;     /* Object ptr */
} HANDLE_ENTRY;

/* Process handle table */
typedef struct
{
    DWORD         count;
    HANDLE_ENTRY  entries[1];
} HANDLE_TABLE;

/* Win32 process environment database */
typedef struct
{
    LPSTR           environ;          /* 00 Process environment strings */
    DWORD           env_size;         /* 04 Environment size (was: Unknown) */
    LPSTR           cmd_line;         /* 08 Command line */
    LPSTR           cur_dir;          /* 0c Current directory */
    STARTUPINFO32A *startup_info;     /* 10 Startup information */
    HANDLE32        hStdin;           /* 14 Handle for standard input */
    HANDLE32        hStdout;          /* 18 Handle for standard output */
    HANDLE32        hStderr;          /* 1c Handle for standard error */
    DWORD           unknown2;         /* 20 Unknown */
    DWORD           inherit_console;  /* 24 Inherit console flag */
    DWORD           break_type;       /* 28 Console events flag */
    K32OBJ         *break_sem;        /* 2c SetConsoleCtrlHandler semaphore */
    K32OBJ         *break_event;      /* 30 SetConsoleCtrlHandler event */
    K32OBJ         *break_thread;     /* 34 SetConsoleCtrlHandler thread */
    void           *break_handlers;   /* 38 List of console handlers */
} ENVDB;

/* Win32 process database */
typedef struct _PDB32
{
    K32OBJ           header;           /* 00 Kernel object header */
    DWORD            unknown1;         /* 08 Unknown */
    K32OBJ          *event;            /* 0c Pointer to an event object */
    DWORD            exit_code;        /* 10 Process exit code */
    DWORD            unknown2;         /* 14 Unknown */
    HANDLE32         heap;             /* 18 Default process heap */
    HANDLE32         mem_context;      /* 1c Process memory context */
    DWORD            flags;            /* 20 Flags */
    void            *pdb16;            /* 24 DOS PSP */
    WORD             PSP_sel;          /* 28 Selector to DOS PSP */
    WORD             module;           /* 2a IMTE for the process module */
    WORD             threads;          /* 2c Number of threads */
    WORD             running_threads;  /* 2e Number of running threads */
    WORD             unknown3;         /* 30 Unknown */
    WORD             ring0_threads;    /* 32 Number of ring 0 threads */
    HANDLE32         system_heap;      /* 34 System heap to allocate handles */
    HTASK32          task;             /* 38 Win16 task */
    void            *mem_map_files;    /* 3c Pointer to mem-mapped files */
    ENVDB           *env_db;           /* 40 Environment database */
    HANDLE_TABLE    *handle_table;     /* 44 Handle table */
    struct _PDB32   *parent;           /* 48 Parent process */
    PE_MODREF       *modref_list;      /* 4c MODREF list */
    void            *thread_list;      /* 50 List of threads */
    void            *debuggee_CB;      /* 54 Debuggee context block */
    void            *local_heap_free;  /* 58 Head of local heap free list */
    DWORD            unknown4;         /* 5c Unknown */
    CRITICAL_SECTION crit_section;     /* 60 Critical section */
    DWORD            unknown5[3];      /* 78 Unknown */
    K32OBJ          *console;          /* 84 Console */
    DWORD            tls_bits[2];      /* 88 TLS in-use bits */
    DWORD            process_dword;    /* 90 Unknown */
    struct _PDB32   *group;            /* 94 Process group */
    PE_MODREF       *exe_modref;       /* 98 MODREF for the process EXE */
    LPTOP_LEVEL_EXCEPTION_FILTER top_filter; /* 9c Top exception filter */
    DWORD            priority;         /* a0 Priority level */
    HANDLE32         heap_list;        /* a4 Head of process heap list */
    void            *heap_handles;     /* a8 Head of heap handles list */
    DWORD            unknown6;         /* ac Unknown */
    K32OBJ          *console_provider; /* b0 Console provider (??) */
    WORD             env_selector;     /* b4 Selector to process environment */
    WORD             error_mode;       /* b6 Error mode */
    K32OBJ          *load_done_evt;    /* b8 Event for process loading done */
    DWORD            unknown7;         /* bc Unknown */
    DWORD            unknown8;         /* c0 Unknown (NT) */
    LCID             locale;           /* c4 Locale to be queried by GetThreadLocale (NT) */
} PDB32;

/* PDB <-> Process id conversion macros */
#define PROCESS_OBFUSCATOR     ((DWORD)0xdeadbeef)
#define PROCESS_ID_TO_PDB(id)  ((PDB32 *)((id) ^ PROCESS_OBFUSCATOR))
#define PDB_TO_PROCESS_ID(pdb) ((DWORD)(pdb) ^ PROCESS_OBFUSCATOR)

/* scheduler/handle.c */
extern HANDLE_TABLE *HANDLE_AllocTable( PDB32 *process );
extern HANDLE32 HANDLE_Alloc( K32OBJ *ptr, DWORD access, BOOL32 inherit );
extern K32OBJ *HANDLE_GetObjPtr( HANDLE32 handle, K32OBJ_TYPE type,
                                 DWORD access );
extern BOOL32 HANDLE_SetObjPtr( HANDLE32 handle, K32OBJ *ptr, DWORD access );

/* scheduler/process.c */
extern PDB32 *PROCESS_Current(void);
extern PDB32 *PROCESS_GetPtr( HANDLE32 handle, DWORD access );
extern PDB32 *PROCESS_IdToPDB( DWORD id );
extern PDB32 *PROCESS_Create( TDB *pTask, LPCSTR cmd_line );
extern void PROCESS_CloseObjHandles(PDB32 *pdb, K32OBJ *ptr);
#endif  /* __WINE_PROCESS_H */