4 * Win32 Process Api functions
5 * Author: Boudewijn Dekker
6 * to do: many more to add ..
7 * open matters: ProcessInformation should be per process
8 and part of larger structure.
14 #define NT_CURRENT_PROCESS 0xFFFFFFFF
15 #define NT_CURRENT_THREAD 0xFFFFFFFE
18 HANDLE STDCALL
GetCurrentProcess(VOID
)
20 return NT_CURRENT_PROCESS
;
23 HANDLE STDCALL
GetCurrentThread()
25 return NT_CURRENT_PROCESS
;
35 return GetTeb()->dwProcessId
;
45 return GetTeb()->dwThreadId
;
48 UINT
WinExec ( LPCSTR lpCmdLine
, UINT uCmdShow
)
50 STARTUPINFO StartUpInfo
;
51 StartupInfo
.wShowWindow
= uCmdShow
;
52 PROCESS_INFORMATION ProcessInformation
;
53 StartupInfo
.cb
= sizeof(STARTUPINFO
);
54 StartupInfo
.dwFlags
= 0;
56 HINSTANCE hInst
= CreateProcess(NULL
,lpCmdLine
,NULL
,NULL
,FALSE
,NULL
,NULL
,NULL
,&StartupInfo
, &ProcessInformation
);
57 if ( hInst
== NULL
) {
58 dosErr
= GetLastError();
59 if ( dosErr
== 0x000000C1 )
60 return 0; // out of resources
64 if ( lpfuncGlobalRegisterWaitForInputIdle
!= NULL
)
65 lpfuncGlobalRegisterWaitForInputIdle(0x00007530,ProcessInformation
->hProcess
);
66 NtClose(ProcessInformation
->hProcess
);
67 NtClose(ProcessInformation
->hThread
);
74 VOID
RegisterWaitForInputIdle(lpfuncRegisterWaitForInputIdle
)
76 lpfuncGlobalRegisterWaitForInputIdle
= lpfuncRegisterWaitForInputIdle
; //77F450C8
80 #define STARTF_IO 0x00000700
85 LPSTARTUPINFO lpStartupInfo
88 NT_PEB
*pPeb
= GetTeb()->pPeb
;
90 if (lpStartupInfo
== NULL
) {
96 lpStartupInfo
->cb
= pPeb
->pPebInfo
->cb
;
97 lpStartupInfo
->lpReserved
= pPeb
->pPebInfo
->lpReserved1
;
98 lpStartupInfo
->lpDesktop
= pPeb
->pPebInfo
->lpDesktop
;
99 lpStartupInfo
->lpTitle
= pPeb
->pPebInfo
->lpTitle
;
100 lpStartupInfo
->dwX
= pPeb
->pPebInfo
->dwX
;
101 lpStartupInfo
->dwY
= pPeb
->pPebInfo
->dwY
;
102 lpStartupInfo
->dwXSize
= pPeb
->pPebInfo
->dwXSize
;
103 lpStartupInfo
->dwYSize
= pPeb
->pPebInfo
->dwYSize
;
104 lpStartupInfo
->dwXCountChars
= pPeb
->pPebInfo
->dwXCountChars
;
105 lpStartupInfo
->dwYCountChars
= pPeb
->pPebInfo
->dwYCountChars
;
106 lpStartupInfo
->dwFillAttribute
= pPeb
->pPebInfo
->dwFillAttribute
;
107 lpStartupInfo
->dwFlags
= pPeb
->pPebInfo
->dwFlags
;
108 lpStartupInfo
->wShowWindow
= pPeb
->pPebInfo
->wShowWindow
;
109 lpStartupInfo
->cbReserved2
= pPeb
->pPebInfo
->cbReserved
;
110 lpStartupInfo
->lpReserved2
= pPeb
->pPebInfo
->lpReserved2
;
111 if ( lpStartupInfo
.dwFlags
== STARTF_IO
) {
112 lpStartupInfo
->hStdInput
= pPeb
->pPebInfo
->hStdInput
;
113 lpStartupInfo
->hStdOutput
= pPeb
->pPebInfo
->hStdOutput
;
114 lpStartupInfo
->hStdError
= pPeb
->pPebInfo
->hStdError
;
121 BOOL
FlushInstructionCache(
125 LPCVOID lpBaseAddress
,
129 errCode
= NtFlushInstructionCache(hProcess
,lpBaseAddress
,dwSize
);
131 CompatibleError(errCode
);