writethread.cpp
上传用户:heseme
上传日期:2009-12-23
资源大小:228k
文件大小:3k
开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "FireWall1.h"
  3. #include "ip.h"
  4. #include "authentication.h"
  5. /////////////////////////////////////
  6. /*
  7. 本程序公共缓冲区global[80]的Buffer内容进行处理,
  8. 最终写入虚拟网卡,不管是入栈还是出栈。
  9. global_var global[80]见"testddk.h"
  10. 用到两种类型变量控制县城同步,
  11. 其中global_mutex是一个mutex,
  12. 用于控制global[]的下标Write_cur。
  13. global[].hMutex是一组Event,
  14. 用于控制缓冲区。
  15. */
  16. ////////////////////////////////////////
  17. extern global_var global[80];
  18. static write=0;
  19. extern HANDLE global_handle,global_handle1;
  20. extern BOOL CloseAll;
  21. extern ULONG initialized;
  22. extern BYTE INNO,OUTNO;
  23. extern HANDLE global_mutex;//控制Write_cur
  24. static int Write_cur=0;//global[]的下标
  25. static int writecomp=0;
  26. extern int Resno;//恢复县城
  27. VOID WINAPI WriteCompletionRoutine(DWORD dwErrorCode, 
  28.    DWORD dwNumberOfBytesTransferred, 
  29.    LPOVERLAPPED pOverlapped);
  30. extern HANDLE mythread_write;  
  31. VOID WriteBuffer(BYTE *Buffer,LPOVERLAPPED pOverlapped);
  32. extern VOID   ipfilter_pkt(ULONG ethlen,BYTE *m);
  33. extern void ipfilter_response_pkt(BYTE *rout,ULONG outlen,ULONG inlen,BYTE *min);
  34. extern BOOL NatPacket(BYTE* total_EthBuffer);
  35. int Flag2;
  36. BOOL ACK1;
  37. BYTE  SpecialBuffer[1500],SpecialBuffer1[1500];
  38. extern BOOL ACK;
  39. VOID WriteThread()
  40. {
  41. while(!CloseAll)
  42. {
  43. if(Write_cur>79)Write_cur=0;
  44. {
  45. DWORD dw=WaitForSingleObject(global[Write_cur].hMutex,INFINITE);
  46. if(dw==WAIT_OBJECT_0)
  47. {
  48. DWORD dwmutex=WaitForSingleObject(global_mutex,INFINITE);
  49. if(dwmutex==WAIT_OBJECT_0)
  50. {
  51. //begin filter
  52.   ipfilter_pkt(1600,global[Write_cur].Buffer);
  53.  //end filter
  54.   BOOL ok;
  55.   
  56.   ok=ProtoMain(global[Write_cur].Buffer);
  57.   NatPacket(global[Write_cur].Buffer);
  58. /*   if ((global[Write_cur].Buffer[0]==0)&&(global[Write_cur].Buffer[1]==(INNO-0x30)))
  59.     ok=Authentication(global[Write_cur].Buffer+2);
  60. if((global[Write_cur].Buffer[0]==0)&&(global[Write_cur].Buffer[1]==(OUTNO-0x30)))
  61.     ContentFilter((char*)(global[Write_cur].Buffer+2));
  62. if (!ok)
  63. {
  64. global[Write_cur].Buffer[0]=1;
  65. // global[Write_cur].Buffer[1]=2;
  66. }
  67. SystemLog();*/
  68. //end filter
  69. WriteBuffer(global[Write_cur].Buffer,
  70. &global[Write_cur].overlap);
  71. // WriteFileEx(global_handle,global[Write_cur].Buffer,1516,&global[Write_cur].overlap,
  72.   // WriteCompletionRoutine);
  73. BOOL R3=ReleaseMutex(global_mutex);
  74. SleepEx(1,TRUE);
  75. Write_cur++;
  76. }
  77. }
  78. }
  79. }
  80. }
  81. VOID WriteBuffer(BYTE *Buffer,LPOVERLAPPED pOverlapped)
  82. {
  83. BOOL ok=FALSE;
  84. ok=WriteFileEx(global_handle,Buffer,1516,pOverlapped,
  85.   WriteCompletionRoutine);
  86. SendSpecialBuffer();
  87. }
  88. VOID WINAPI WriteCompletionRoutine(DWORD dwErrorCode, 
  89.    DWORD dwNumberOfBytesTransferred, 
  90.    LPOVERLAPPED pOverlapped)
  91. {
  92. }