38{
51#ifdef UNICODE
53#else
55#endif
56 DWORD dwAffinityMask = 0;
61
62 while (1)
63 {
65 {
66 Rest++;
67 }
69 {
72 }
73 else if (*Rest ==
_T(
'/'))
74 {
76 Rest++;
79 {
81 return 0;
82 }
84 {
87 {
89 Rest++;
91 }
93 }
95 {
96
98 }
100 {
102 }
104 {
106 }
108 {
111 Rest++;
113
115 if (*
end !=
_T(
'\0') || dwAffinityMask == 0 ||
116 dwAffinityMask == (
DWORD)-1)
117 {
119 return 1;
120 }
122 }
124 {
125 dwCreationFlags &= ~CREATE_NEW_CONSOLE;
127 }
129 {
131 }
133 {
135 }
137 {
139 }
141 {
143 }
145 {
147 }
149 {
151 }
153 {
155 }
157 {
159 }
162 {
164 }
165 else
166 {
168 return 0;
169 }
170 }
171 else
172 {
173
174
175 break;
176 }
177 }
178
179
181 if (!comspec)
182 {
183 WARN(
"Cannot allocate memory for start comspec!\n");
185 return 1;
186 }
190 {
192 }
193 else
194 {
196 {
197 LPTSTR Oldcomspec = comspec;
200 {
202 return 1;
203 }
205 }
206 }
207
209
210 if (!*Rest)
211 {
212 Rest =
_T(
"cmd.exe");
213 }
214 else
215
216 {
219
220 for (
i = 0; Rest[
i];
i++)
221 {
222 if (Rest[
i] ==
_T(
'\"'))
223 bInside = !bInside;
225 {
228 break;
229 }
230 }
231 }
232
235
236
237
239 {
240
243 {
245 _stprintf(szFullCmdLine,
_T(
"\"%s\" /K %s"), comspec, Rest);
247 }
248 else
249 {
251 _tcscpy(szFullCmdLine, szFullName);
252 }
253
254
256 {
259 }
260
261
267
272 {
273 if (dwAffinityMask)
274 {
277 }
279 }
280 }
281 else
282 {
283
284
285 _tcscpy(szFullName, szUnquotedName);
286 }
287
289 {
290
295 }
296
298 {
299 if (bWait)
300 {
305 }
307
308
309 {
312
315 {
318
319
322 {
324 }
325
327
328
330 }
331 }
332 }
333 else
334 {
336 _T(
"Error executing CreateProcess()!!\n"));
337 }
338
340 return 0;
341}
static VOID ErrorMessage(_In_ DWORD dwErrorCode, _In_opt_ PCWSTR pszMsg,...)
#define STRING_ERROR_INVALID_PARAM_FORMAT
LPTSTR lpOriginalEnvironment
HANDLE RunFile(DWORD flags, LPTSTR filename, LPTSTR params, LPTSTR directory, INT show)
BOOL SearchForExecutable(LPCTSTR, LPTSTR)
VOID error_out_of_memory(VOID)
VOID ConOutResPaging(BOOL StartPaging, UINT resID)
#define ConErrResPrintf(uID,...)
#define STRING_TYPE_ERROR1
#define STRING_START_HELP1
static VOID StripQuotes(LPSTR in)
#define cmd_realloc(ptr, size)
UINT WINAPI DECLSPEC_HOTPATCH GetConsoleOutputCP(VOID)
UINT WINAPI DECLSPEC_HOTPATCH GetConsoleCP(VOID)
BOOL WINAPI GetExitCodeProcess(IN HANDLE hProcess, IN LPDWORD lpExitCode)
BOOL WINAPI SetProcessAffinityMask(IN HANDLE hProcess, IN DWORD_PTR dwProcessAffinityMask)
DWORD WINAPI ResumeThread(IN HANDLE hThread)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
#define IsConsoleHandle(h)
HANDLE ConStreamGetOSHandle(IN PCON_STREAM Stream)
#define ConStdStreamsSetCacheCodePage(InputCodePage, OutputCodePage)
LANGID ConSetThreadUILanguage(IN LANGID LangId OPTIONAL)
static TCHAR * GetParameter(TCHAR **pPointer)
#define SEE_MASK_NOCLOSEPROCESS
_In_opt_ LPCSTR lpDirectory
#define SEE_MASK_NO_CONSOLE
_In_ int _In_ BOOL bCreate
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define GetEnvironmentVariable
#define NORMAL_PRIORITY_CLASS
DWORD WINAPI GetLastError(void)
#define STARTF_USESHOWWINDOW
#define REALTIME_PRIORITY_CLASS
#define BELOW_NORMAL_PRIORITY_CLASS
#define CREATE_UNICODE_ENVIRONMENT
#define HIGH_PRIORITY_CLASS
#define CREATE_SHARED_WOW_VDM
#define CREATE_SEPARATE_WOW_VDM
#define CREATE_NEW_PROCESS_GROUP
#define IDLE_PRIORITY_CLASS
#define CREATE_NEW_CONSOLE
#define ABOVE_NORMAL_PRIORITY_CLASS
#define ERROR_ENVVAR_NOT_FOUND