HookBase.h
上传用户:kittypts
上传日期:2018-02-11
资源大小:241k
文件大小:2k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. /*
  2. *
  3. *  This file is
  4. *    Copyright (C) 2006-2008 Nektra S.A.
  5. *  
  6. *  This program is free software; you can redistribute it and/or modify
  7. *  it under the terms of the GNU Lesser General Public License as published by
  8. *  the Free Software Foundation; either version 2, or (at your option)
  9. *  any later version.
  10. *  
  11. *  This program is distributed in the hope that it will be useful,
  12. *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. *  GNU General Public License for more details.
  15. *  
  16. */
  17. #ifndef _HOOKBASE_H_
  18. #define _HOOKBASE_H_
  19. #include "FunctionWrapper.h"
  20. #include "VirtualCode.h"
  21. #include "LocalFunction.h"
  22. #include "HookTypes.h"
  23. /**
  24. Base class for local hooks.
  25. */
  26. class NktHookBase : public INktHookSimple
  27. {
  28. public:
  29. NktHookBase();
  30. ~NktHookBase();
  31. /**
  32. Call hooked function with specified context.
  33. */
  34. void CallFunction(NktHookCallContext*);
  35. /**
  36. Skip call and and use retVal on return.
  37. */
  38. void SkipCall(NktHookCallContext*, INT_PTR retVal);
  39. /**
  40. Global hooks enable:
  41. */
  42. static BOOL GetGlobalEnabled();
  43. static void SetGlobalEnabled(BOOL enable);
  44. /**
  45. Force return value in call.
  46. */
  47. void SetReturnValue(NktHookCallContext*, INT_PTR retVal);
  48. /**
  49. Force lastError value in call.
  50. */
  51. void SetLastError(NktHookCallContext*, INT_PTR err);
  52. /**
  53. Disable reports from calling thread.
  54. */
  55. static HANDLE DisableThreadReports();
  56. /**
  57. Restore previous state of thread reports.
  58. */
  59. static void RestoreThreadReports(HANDLE);
  60. /**
  61. Tells if reports are disabled for the calling thread.
  62. */
  63. static BOOL IsThreadDisabled();
  64. /**
  65. Enable / Disable reports
  66. */
  67. void SetEnabled(BOOL);
  68. BOOL GetEnabled() const;
  69. /**
  70. Get hook flags
  71. */
  72. int GetFlags() const;
  73. protected:
  74. /**
  75. Implement call of hooked function.
  76. */
  77. virtual void RawCallFunction(NktHookCallContext*) = ABSTRACT;
  78. protected:
  79. void SetHandler(const NktLocalFunction&);
  80. const NktFunctionWrapper& GetHandler() const;
  81. void SetFlags(int);
  82. void SetUserData(INT_PTR);
  83. INT_PTR GetUserData() const;
  84. /**
  85. Internal: First Handler.
  86. */
  87. void __fastcall InternalHandler(NktRegisters* reg, INT_PTR tag);
  88. private:
  89. NktLocalFunction _handler;
  90. int _flags;
  91. INT_PTR _userData;
  92. BOOL _disabled;
  93. protected:
  94. static BOOL hooksDisabled;
  95. };
  96. #endif //_HOOKBASE_H_