| [124] | 1 | /*
 | 
|---|
 | 2 |  * Process help functions
 | 
|---|
 | 3 |  *
 | 
|---|
 | 4 |  * Copyright (C) 1999 Sander van Leeuwen
 | 
|---|
 | 5 |  *
 | 
|---|
 | 6 |  * Project Odin Software License can be found in LICENSE.TXT
 | 
|---|
 | 7 |  *
 | 
|---|
 | 8 |  */
 | 
|---|
 | 9 | 
 | 
|---|
 | 10 | #ifndef _WPROCESS_H__
 | 
|---|
 | 11 | #define _WPROCESS_H__
 | 
|---|
 | 12 | 
 | 
|---|
| [130] | 13 | #define WIN32_TIBSEL
 | 
|---|
| [125] | 14 | 
 | 
|---|
| [1067] | 15 | #ifndef OS2_INCLUDED
 | 
|---|
| [1887] | 16 | #include <winprocess.h>
 | 
|---|
 | 17 | #else
 | 
|---|
| [2086] | 18 | #include <winconst.h>
 | 
|---|
| [1887] | 19 | typedef ULONG PDB;
 | 
|---|
| [1067] | 20 | #endif
 | 
|---|
| [127] | 21 | #include <thread.h>
 | 
|---|
| [9909] | 22 | #include <FastInfoBlocks.h>
 | 
|---|
| [127] | 23 | 
 | 
|---|
| [10279] | 24 | #define SELECTOR_OS2_FS         0x150b
 | 
|---|
 | 25 | 
 | 
|---|
| [8017] | 26 | #define MAKE_THREADID(processid, threadid)      ((processid << 16) | threadid)
 | 
|---|
 | 27 | #define ODIN_TO_OS2_THREADID(threadid)          (threadid & 0xFFFF)
 | 
|---|
 | 28 | 
 | 
|---|
| [9909] | 29 | #define ODIN_GetCurrentThreadId()    MAKE_THREADID(fibGetPid(), fibGetTid())
 | 
|---|
 | 30 | #define ODIN_GetCurrentProcessId()   fibGetPid()
 | 
|---|
 | 31 | 
 | 
|---|
| [8645] | 32 | TEB   *WIN32API CreateTEB(HANDLE hThread, DWORD dwThreadId);
 | 
|---|
 | 33 | TEB   *WIN32API InitializeMainThread();
 | 
|---|
 | 34 | 
 | 
|---|
 | 35 | //******************************************************************************
 | 
|---|
 | 36 | // Set up the TEB structure of the CURRENT (!) thread
 | 
|---|
 | 37 | //******************************************************************************
 | 
|---|
 | 38 | BOOL   WIN32API InitializeThread(TEB *teb, BOOL fMainThread = FALSE);
 | 
|---|
 | 39 | 
 | 
|---|
 | 40 | void   WIN32API DestroyTEB(TEB *teb);
 | 
|---|
| [5335] | 41 | ULONG  WIN32API GetProcessTIBSel();
 | 
|---|
| [124] | 42 | 
 | 
|---|
| [7829] | 43 | #define TIB_SWITCH_DEFAULT      0  //executable type determines whether or not FS is changed
 | 
|---|
 | 44 | #define TIB_SWITCH_FORCE_WIN32  1  //always switch to win32 TIB (FS is changed)
 | 
|---|
| [7810] | 45 | //
 | 
|---|
 | 46 | //Switch to WIN32 TIB (FS selector)
 | 
|---|
 | 47 | //NOTE: This is not done for Odin32 applications (LX), unless
 | 
|---|
 | 48 | //      fForceSwitch is TRUE)
 | 
|---|
 | 49 | USHORT WIN32API SetWin32TIB(BOOL fForceSwitch = TIB_SWITCH_DEFAULT);
 | 
|---|
| [281] | 50 | void   WIN32API RestoreOS2TIB();
 | 
|---|
| [7810] | 51 | 
 | 
|---|
| [1891] | 52 | void   SetPDBInstance(HINSTANCE hInstance);
 | 
|---|
| [127] | 53 | 
 | 
|---|
 | 54 | extern BOOL fExeStarted;
 | 
|---|
| [953] | 55 | extern BOOL fFreeLibrary;
 | 
|---|
| [9798] | 56 | extern BOOL fIsOS2Image;   //TRUE  -> Odin32 OS/2 application (not converted!)
 | 
|---|
 | 57 |                            //FALSE -> otherwise
 | 
|---|
 | 58 | extern BOOL fSwitchTIBSel; // TRUE  -> switch TIB selectors
 | 
|---|
 | 59 |                            // FALSE -> don't
 | 
|---|
| [21381] | 60 | extern BOOL fSEHEnabled;   // TRUE  -> SEH support enabled
 | 
|---|
 | 61 |                            // FALSE -> not enabled
 | 
|---|
| [4232] | 62 | extern BOOL fExitProcess;
 | 
|---|
| [127] | 63 | 
 | 
|---|
| [281] | 64 | //Flat pointer to thread TIB structure
 | 
|---|
 | 65 | extern DWORD  *TIBFlatPtr;
 | 
|---|
 | 66 | 
 | 
|---|
| [1885] | 67 | extern PDB ProcessPDB;
 | 
|---|
 | 68 | 
 | 
|---|
 | 69 | #define NtCurrentTeb GetThreadTEB
 | 
|---|
| [21352] | 70 | TEB  *WIN32API GetThreadTEB(void);
 | 
|---|
| [4657] | 71 | TEB  *WIN32API GetTEBFromThreadId(ULONG threadId);
 | 
|---|
 | 72 | TEB  *WIN32API GetTEBFromThreadHandle(HANDLE hThread);
 | 
|---|
| [320] | 73 | 
 | 
|---|
| [1887] | 74 | #ifndef OS2_INCLUDED
 | 
|---|
 | 75 | inline PDB * PROCESS_Current(void)
 | 
|---|
| [1885] | 76 | {
 | 
|---|
 | 77 |     return NtCurrentTeb()->process;
 | 
|---|
 | 78 | }
 | 
|---|
| [1887] | 79 | #endif
 | 
|---|
| [1885] | 80 | 
 | 
|---|
| [4234] | 81 | ULONG InitCommandLine(const char *pszPeExe);
 | 
|---|
| [9494] | 82 | BOOL  InitLoaders();
 | 
|---|
| [4234] | 83 | 
 | 
|---|
| [10294] | 84 | UINT WIN32API GetProcModuleFileNameA(ULONG lpvAddress, LPSTR lpszFileName, UINT cchFileNameMax);
 | 
|---|
 | 85 | 
 | 
|---|
| [4234] | 86 | #endif
 | 
|---|