void CSstemPatchDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
// TODO: Add extra validation here
SECURITY_ATTRIBUTES sa;
HANDLE hRead, hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符
sa.bInheritHandle = TRUE; //创建的进程继承句柄
if (!CreatePipe(&hRead, &hWrite, &sa, 0)) //创建匿名管道
{
MessageBox(_T("CreatePipe Failed!"), _T("Tip"), MB_OK | MB_ICONWARNING);
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite; //新创建进程的标准输出连在写管道一端
si.wShowWindow = SW_HIDE; //隐藏窗口
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
TCHAR cmdline[256] = { _T("systeminfo.exe") };
//CString tmp,stredit2;
// GetDlgItemText(IDC_EDIT2,stredit2); //获取编辑框中输入的命令行
// tmp.Format(_T("cmd /C %s"),stredit2);
// _stprintf(cmdline,_T("%s"),tmp);
#ifdef _UNICODE
//MessageBox(_T("UNICODE!"), _T("提示"), MB_OK | MB_ICONWARNING);
#else
//MessageBox(_T("ANSI!"), _T("提示"), MB_OK | MB_ICONWARNING);
#endif
if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) //创建子进程
{
MessageBox(_T("CreateProcess Failed!"), _T("Tip"), MB_OK | MB_ICONWARNING);
return;
}
CloseHandle(hWrite); //关闭管道句柄
char buffer[4096] = { 0 };
CString strOutput;
CString PatchKB = { _T("KB4012212111") };
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL) //读取管道
break;
strOutput += buffer;
SetDlgItemText(IDC_EDIT1, strOutput); //显示输出信息到编辑框,并刷新窗口
//AfxMessageBox(strOutput);
//UpdateWindow();
//Sleep(100);
}
if (_tcsstr(strOutput, PatchKB))
{
AfxMessageBox(_T("Pass"));
}
else
AfxMessageBox(_T("Fail"));
CloseHandle(hRead);
CDialogEx::OnOK();
}
{
// TODO: 在此添加控件通知处理程序代码
// TODO: Add extra validation here
SECURITY_ATTRIBUTES sa;
HANDLE hRead, hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL; //使用系统默认的安全描述符
sa.bInheritHandle = TRUE; //创建的进程继承句柄
if (!CreatePipe(&hRead, &hWrite, &sa, 0)) //创建匿名管道
{
MessageBox(_T("CreatePipe Failed!"), _T("Tip"), MB_OK | MB_ICONWARNING);
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite; //新创建进程的标准输出连在写管道一端
si.wShowWindow = SW_HIDE; //隐藏窗口
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
TCHAR cmdline[256] = { _T("systeminfo.exe") };
//CString tmp,stredit2;
// GetDlgItemText(IDC_EDIT2,stredit2); //获取编辑框中输入的命令行
// tmp.Format(_T("cmd /C %s"),stredit2);
// _stprintf(cmdline,_T("%s"),tmp);
#ifdef _UNICODE
//MessageBox(_T("UNICODE!"), _T("提示"), MB_OK | MB_ICONWARNING);
#else
//MessageBox(_T("ANSI!"), _T("提示"), MB_OK | MB_ICONWARNING);
#endif
if (!CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NULL, NULL, NULL, &si, &pi)) //创建子进程
{
MessageBox(_T("CreateProcess Failed!"), _T("Tip"), MB_OK | MB_ICONWARNING);
return;
}
CloseHandle(hWrite); //关闭管道句柄
char buffer[4096] = { 0 };
CString strOutput;
CString PatchKB = { _T("KB4012212111") };
DWORD bytesRead;
while (true)
{
if (ReadFile(hRead, buffer, 4095, &bytesRead, NULL) == NULL) //读取管道
break;
strOutput += buffer;
SetDlgItemText(IDC_EDIT1, strOutput); //显示输出信息到编辑框,并刷新窗口
//AfxMessageBox(strOutput);
//UpdateWindow();
//Sleep(100);
}
if (_tcsstr(strOutput, PatchKB))
{
AfxMessageBox(_T("Pass"));
}
else
AfxMessageBox(_T("Fail"));
CloseHandle(hRead);
CDialogEx::OnOK();
}