我用CreateProcess()在vc中启动snort  
如果参数是 snort.exe -v 就可以启动snort
但是 如果用snort.exe -A fast -l ./log -h 192.168.1.0/24 -c IDS.conf 就无法启动,或者控制台一闪而过,在任务管理器中没有这个进程,
有那位大虾能帮帮忙 谢谢
附源码:SECURITY_ATTRIBUTES sa;
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
sa.nLength=sizeof(SECURITY_ATTRIBUTES);
if(!CreatePipe(&hRead,&hWrite,&sa,0))
{
MessageBox("创建匿名管道失败!");
return;
}
STARTUPINFO sui;
PROCESS_INFORMATION pi;
ZeroMemory(&sui,sizeof(STARTUPINFO));
sui.cb=sizeof(STARTUPINFO);
sui.dwFlags=STARTF_USESTDHANDLES;
sui.hStdInput=hRead;
sui.hStdOutput=hWrite;
sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);

if(!CreateProcess(NULL,"..//snort//snort.exe -A fast -l ./log -h 192.168.1.0/24 -c IDS.conf",NULL,NULL, TRUE,CREATE_NO_WINDOW,NULL,NULL,&sui,&pi))                                             
{
CloseHandle(hRead);
CloseHandle(hWrite);
hRead=NULL;
hWrite=NULL;
MessageBox("创建子进程失败!");
return;
}
else
{
WaitForSingleObject(pi.hProcess,INFINITE);
WaitForSingleObject(pi.hThread,INFINITE);

解决方案 »

  1.   

    过来顶一下
    其实就是
    STARTUPINFO sui;
    PROCESS_INFORMATION pi;
    ZeroMemory(&sui,sizeof(STARTUPINFO));
    sui.cb=sizeof(STARTUPINFO);
    sui.dwFlags=STARTF_USESTDHANDLES;
    sui.hStdInput=hRead;
    sui.hStdOutput=hWrite;
    sui.hStdError=GetStdHandle(STD_ERROR_HANDLE);if(!CreateProcess(NULL,"..//snort//snort.exe -A fast -l ./log -h 192.168.1.0/24 -c snort.conf",NULL,NULL, TRUE,CREATE_NO_WINDOW,NULL,NULL,&sui,&pi))                                             
    {
    CloseHandle(hRead);
    CloseHandle(hWrite);
    hRead=NULL;
    hWrite=NULL;
    MessageBox("创建子进程失败!");
    return;
    }
    else
    {
    WaitForSingleObject(pi.hProcess,INFINITE);
    WaitForSingleObject(pi.hThread,INFINITE);

    感觉是,"..//snort//snort.exe -A fast -l ./log -h 192.168.1.0/24 -c snort.conf"
    有问题  我用"..//snort//snort.exe -v"启动没有问题,然而把其它值得在snort源程序里面赋值也不行,
      

  2.   

    将命令行改为cmd /k ..//snort//snort.exe -A fast -l ./log -h 192.168.1.0/24 -c IDS.conf
    就不会一闪而过了,看提示的错误信息...
      

  3.   

    谢谢你的回答 ,好感动~~~~~
    我试了你的方法,不知道具体这句话的意思~~
    我直接通过任务管理器看通过命令提示符号 进程 cmd.exe 还有snort.exe进程
    如果按照你的做法只能打开cmd.exe 而且也是一闪而过~~~
    我试过 让snort只加参数 -v(不停的捕获数据包显示出来) 这样才能保证程序不会消失
      

  4.   

    问题解决~~~~在调试的时候在vc上打开有问题~~~`
    直接到debug目录双击启动控制程序就可以了~~~