#include #define FOPEN 0x01 #define FDEV 0x40 int main(int argc, char *argv[]) { int cbReserved2 = 4 + 3 * 5; char *lpReserved2 = malloc(cbReserved2); *(int *)lpReserved2 = 3; char *file_flags = lpReserved2 + 4; file_flags[0] = FOPEN | FDEV; file_flags[1] = FOPEN | FDEV; file_flags[2] = FOPEN | FDEV; HANDLE *file_handles = (HANDLE *)(lpReserved2 + 4 + 3); file_handles[0] = GetStdHandle(STD_INPUT_HANDLE); file_handles[1] = GetStdHandle(STD_OUTPUT_HANDLE); file_handles[2] = GetStdHandle(STD_ERROR_HANDLE); STARTUPINFO sui = { .cb = sizeof sui, .cbReserved2 = cbReserved2, .lpReserved2 = lpReserved2 }; PROCESS_INFORMATION pi; CreateProcess(0, argv[1], 0, 0, TRUE, 0, 0, 0, &sui, &pi); WaitForSingleObject(pi.hProcess, INFINITE); return 0; }