Пример #1
0
// 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;
}
Пример #2
0
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;
}