Advertisement
Guest User

Untitled

a guest
Jul 31st, 2013
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 1.28 KB | None | 0 0
  1.     extern(Windows) private static BOOL receiveMsg_Hooked(ubyte* buffer, int* pSize)
  2.     {
  3.  
  4.         void* instancePtr;
  5.  
  6.         asm
  7.         {
  8.             mov instancePtr, ECX;
  9.         }
  10.        
  11.         if (instance._clientState.networkInstance is null)
  12.         {
  13.             instance._clientState.networkInstance = instancePtr;
  14.         }
  15.        
  16.         BOOL result = instance.receiveMsgHook.invokeOriginal(instancePtr, buffer, pSize);
  17.        
  18.         ConcurrentQueue!(NetMsg) recvQueue = instance._clientState.recvQueue;
  19.         NetMsg msg;
  20.        
  21.         if (result)
  22.         {
  23.            
  24.             ushort msgSize = *cast(ushort*)buffer;
  25.            
  26.             if ((msgSize < 1024) && (msgSize == *pSize))
  27.             {
  28.                
  29.                 HANDLE ctbRecvPipe = instance._clientState.ctbRecvPipe;
  30.                 uint bytesWritten;
  31.                
  32.                 WriteFile(ctbRecvPipe, buffer, *pSize, &bytesWritten, null);           
  33.  
  34.                 result = FALSE;        
  35.  
  36.                 if (!recvQueue.empty)
  37.                 {
  38.                    
  39.                     if (recvQueue.dequeue(msg))
  40.                     {
  41.  
  42.                         *pSize = msg.size;
  43.                         buffer[0..msg.size] = (cast(ubyte*)&msg.size)[0..msg.size];
  44.  
  45.                         result = TRUE;
  46.                        
  47.                     }          
  48.                 }          
  49.             }
  50.         }
  51.         else
  52.         {
  53.            
  54.             if (!recvQueue.empty)
  55.             {
  56.                
  57.                 if (recvQueue.dequeue(msg))
  58.                 {
  59.                    
  60.                     *pSize = msg.size;
  61.                     buffer[0..msg.size] = (cast(ubyte*)&msg.size)[0..msg.size];
  62.                    
  63.                     result = TRUE;
  64.                    
  65.                 }
  66.             }          
  67.         }
  68.        
  69.         return result;     
  70.  
  71.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement