0X10.cpp
上传用户:hyz2004817
上传日期:2022-03-30
资源大小:226k
文件大小:2k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. extern HANDLE g_hExitEvent;
  3. //////////////////////////////////////////////////////////////
  4. //
  5. // 通过调用 ShellExecute 函数创建一个进程
  6. //
  7. BOOL 
  8. WINAPI 
  9. RCAID_0X10_HANDLER(
  10. SOCKET s, 
  11. RCAREQUESTHANDLEDATA * pData, 
  12. RCAREQUESTHEADER * pRCAHead, 
  13. HANDLE hEventArray[2]
  14. )
  15. {
  16. // 计算需要接收的总字节数
  17. int c = pRCAHead->requestBytes - sizeof( RCAREQUESTHEADER );
  18. char * buf;
  19. int ret;
  20. if( c <= 20 )
  21. return FALSE;
  22. buf = (char*)new char[c];
  23. if( buf == NULL )
  24. return TRUE;
  25. ret = RCARecv_EventSelectIO( s, hEventArray, buf, c );
  26. if( ret != c )
  27. {
  28. delete[] buf;
  29. return FALSE;
  30. }
  31. char * p = buf;
  32. DWORD strLength;
  33. p = buf;
  34. HWND hWnd = (HWND)(*p);
  35. p += 4;
  36. if( (p-buf) > c )
  37. goto request_end;
  38. char  *pOperation, *pFile, *pParam, *pDirectory;
  39. strLength = (DWORD)*p;
  40. if(  (DWORD)(*p) > 0 )
  41. pOperation = p + 4;
  42. else
  43. pOperation = NULL;
  44. p += (4 + strLength);
  45. if( (p-buf) > c )
  46. goto request_end;
  47. strLength = (DWORD)*p;
  48. if( (DWORD)(*p) > 0 )
  49. pFile = p + 4;
  50. else
  51. pFile = NULL;
  52. p += (4 + strLength);
  53. if( (p-buf) > c )
  54. goto request_end;
  55. strLength = (DWORD)*p;
  56. if( (DWORD)(*p) > 0 )
  57. pParam = p + 4;
  58. else
  59. pParam = NULL;
  60. p += (4 + strLength);
  61. if( (p-buf) > c )
  62. goto request_end;
  63. strLength = (DWORD)*p;
  64. if( (DWORD)(*p) > 0 )
  65. pDirectory  = p + 4;
  66. else
  67. pDirectory = NULL;
  68. p += (4 + strLength);
  69. if( (p-buf) > c )
  70. goto request_end;
  71. int nShowCmd = (int)*p;
  72. ShellExecute( hWnd, pOperation, pFile, pParam, pDirectory, nShowCmd );
  73. request_end:
  74. delete[] buf;
  75. return TRUE;
  76. }