Advertisement
Guest User

Untitled

a guest
Aug 8th, 2013
971
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.31 KB | None | 0 0
  1. class CVMTHookManager
  2. {
  3. public:
  4. CVMTHookManager( void )
  5. {
  6. memset( this, 0, sizeof( CVMTHookManager ) );
  7. }
  8.  
  9. CVMTHookManager( PDWORD* ppdwClassBase )
  10. {
  11. bInitialize( ppdwClassBase );
  12. }
  13.  
  14. bool UnhookVMT( PDWORD* ppdwClassBase )
  15. {
  16. *ppdwClassBase = m_pdwOldVMT;
  17. return true;
  18. }
  19.  
  20. bool bInitialize( PDWORD* ppdwClassBase )
  21. {
  22. m_pdwOldVMT = *ppdwClassBase;
  23. m_dwVMTSize = dwGetVMTCount( *ppdwClassBase );
  24. m_pdwNewVMT = new DWORD[ m_dwVMTSize + 2 ];
  25. memcpy( m_pdwNewVMT, m_pdwOldVMT, sizeof( DWORD ) * m_dwVMTSize );
  26. *ppdwClassBase = m_pdwNewVMT;
  27. return true;
  28. }
  29.  
  30. bool bInitialize( PDWORD** pppdwClassBase )
  31. {
  32. return bInitialize( *pppdwClassBase );
  33. }
  34.  
  35. DWORD dwHookMethod( DWORD dwNewFunc, int iIndex )
  36. {
  37. if ( m_pdwNewVMT && m_pdwOldVMT && iIndex >= 0 && iIndex <= m_dwVMTSize )
  38. {
  39. m_pdwNewVMT[ iIndex ] = dwNewFunc;
  40. return m_pdwOldVMT[ iIndex ];
  41. }
  42.  
  43. return NULL;
  44. }
  45.  
  46. VOID dwUnHookMethod( int iIndex )
  47. {
  48. m_pdwNewVMT[ iIndex ] = m_pdwOldVMT[ iIndex ];
  49. }
  50.  
  51. private:
  52. DWORD dwGetVMTCount( PDWORD pdwVMT )
  53. {
  54. DWORD dwIndex;
  55. for ( dwIndex = 0; pdwVMT[ dwIndex ]; dwIndex++ )
  56. {
  57. if ( IsBadCodePtr( ( FARPROC ) pdwVMT[ dwIndex ] ) )
  58. {
  59. break;
  60. }
  61. }
  62. return dwIndex;
  63. }
  64. PDWORD m_pdwNewVMT, m_pdwOldVMT;
  65. DWORD m_dwVMTSize;
  66. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement