// Execute a child process bool ExecProcess(char *exe_name, wchar_t *args_w) { bool ret; wchar_t exe_name_w[MAX_SIZE]; char args[MAX_SIZE]; STARTUPINFO info; STARTUPINFOW info_w; PROCESS_INFORMATION proc; // Validate arguments if (exe_name == NULL || args_w == NULL) { return false; } ZeroMemory(exe_name_w, sizeof(exe_name_w)); ZeroMemory(args, sizeof(args)); mbstowcs(exe_name_w, exe_name, strlen(exe_name)); wcstombs(args, args_w, sizeof(args)); ZeroMemory(&info, sizeof(info)); info.cb = sizeof(info); ZeroMemory(&info_w, sizeof(info_w)); info_w.cb = sizeof(info_w); ZeroMemory(&proc, sizeof(proc)); if (IsWindowsNt() == false) { ret = CreateProcess(exe_name, args, NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &info, &proc); } else { ret = CreateProcessW(exe_name_w, args_w, NULL, NULL, false, NORMAL_PRIORITY_CLASS, NULL, NULL, &info_w, &proc); } if (ret) { WaitForSingleObject(proc.hProcess, INFINITE); GetExitCodeProcess(proc.hProcess, &ret_code); } return ret; }
bool CNtDriverControl::Open(const TCHAR* pszDriverFileName, const TCHAR* pszDriverName) { if (IsWindowsNt() == false) return false; if (!Close()) return false; int Length; if (pszDriverFileName != NULL) { Length = lstrlen(pszDriverFileName); if (Length != 0) { m_pszDriverFileName = new TCHAR[Length+sizeof(TCHAR)]; if (m_pszDriverFileName == NULL) return false; lstrcpy(m_pszDriverFileName, pszDriverFileName); } } if (pszDriverName != NULL) { Length = lstrlen(pszDriverName); if (Length != 0) { m_pszDriverName = new TCHAR[Length+sizeof(TCHAR)]; if (m_pszDriverName == NULL) { if (m_pszDriverFileName != NULL) delete[] m_pszDriverFileName; m_pszDriverFileName = NULL; return false; } lstrcpy(m_pszDriverName, pszDriverName); } } return true; }