windows获取系统补丁+匿名管道

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!"),MB_OK | MB_ICONWARNING);  
#endif  
if (!CreateProcess(NULL,cmdline,NULL,TRUE,&si,&pi))  //创建子进程  
{
MessageBox(_T("CreateProcess Failed!"),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();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐