This commit was generated by cvs2svn to compensate for changes in r52,
[reactos.git] / reactos / lib / kernel32 / process / proc.c
1 #include <windows.h>
2 #include <process.h>
3 /*
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.
9 */
10
11
12
13
14 #define NT_CURRENT_PROCESS 0xFFFFFFFF
15 #define NT_CURRENT_THREAD 0xFFFFFFFE
16
17
18 HANDLE STDCALL GetCurrentProcess(VOID)
19 {
20 return NT_CURRENT_PROCESS;
21 }
22
23 HANDLE STDCALL GetCurrentThread()
24 {
25 return NT_CURRENT_PROCESS;
26 }
27
28 #if 0
29
30 WINBASEAPI
31 DWORD
32 WINAPI
33 GetCurrentProcessId()
34 {
35 return GetTeb()->dwProcessId;
36 }
37
38
39 WINBASEAPI
40 DWORD
41 WINAPI
42 GetCurrentThreadId()
43 {
44
45 return GetTeb()->dwThreadId;
46 }
47
48 UINT WinExec ( LPCSTR lpCmdLine, UINT uCmdShow )
49 {
50 STARTUPINFO StartUpInfo;
51 StartupInfo.wShowWindow = uCmdShow ;
52 PROCESS_INFORMATION ProcessInformation;
53 StartupInfo.cb = sizeof(STARTUPINFO);
54 StartupInfo.dwFlags = 0;
55
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
61 else
62 return dosErr;
63 }
64 if ( lpfuncGlobalRegisterWaitForInputIdle != NULL )
65 lpfuncGlobalRegisterWaitForInputIdle(0x00007530,ProcessInformation->hProcess);
66 NtClose(ProcessInformation->hProcess);
67 NtClose(ProcessInformation->hThread);
68 return;
69
70 }
71
72
73
74 VOID RegisterWaitForInputIdle(lpfuncRegisterWaitForInputIdle)
75 {
76 lpfuncGlobalRegisterWaitForInputIdle = lpfuncRegisterWaitForInputIdle; //77F450C8
77 }
78
79
80 #define STARTF_IO 0x00000700
81
82 VOID
83 STDCALL
84 GetStartupInfoW(
85 LPSTARTUPINFO lpStartupInfo
86 )
87 {
88 NT_PEB *pPeb = GetTeb()->pPeb;
89
90 if (lpStartupInfo == NULL ) {
91 SetLastError(-1);
92 return;
93 }
94
95
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;
115 }
116
117
118 }
119
120
121 BOOL FlushInstructionCache(
122
123
124 HANDLE hProcess,
125 LPCVOID lpBaseAddress,
126 DWORD dwSize
127 )
128 {
129 errCode = NtFlushInstructionCache(hProcess,lpBaseAddress,dwSize);
130 if ( errCode < 0 ) {
131 CompatibleError(errCode);
132 return FALSE;
133 }
134 }
135
136 #endif