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

PlugIns编程

开发平台:

Visual C++

  1. /*****************************************************************************
  2. Windows Live Messenger Plugin Demo
  3. Copyright (C) 2008  Hern醤 Di Pietro
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 3 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program.  If not, see <http://www.gnu.org/licenses/>.
  14. /*****************************************************************************/
  15. #ifndef RESOURCE_MANAGER_H
  16. #define RESOURCE_MANAGER_H
  17. #include <windows.h>
  18. #include <map>
  19. // resource-modification constants
  20. #define RR_APPEND 0x1
  21. #define RR_INSERT 0x2
  22. #define RR_REPLACE 0x3
  23. #define RR_COPY 0x4
  24. #define RR_NEW 0xFF
  25. #define RR_NONE RR_COPY
  26. // Data for resources residing on injected-DLL resource section
  27. typedef struct tagRESOURCEINFO
  28. {
  29. UINT uResId;
  30. LPWSTR wszResType;
  31. HRSRC hrsrc;
  32. DWORD dwSize;
  33. HGLOBAL hResData;
  34. LPVOID pvData;
  35. } RESOURCEINFO;
  36. class CResourceManager
  37. {
  38. typedef struct __RMD
  39. {
  40. UINT iModType;
  41. LPVOID pvAddress;
  42. LPVOID pvResData;
  43. DWORD cbOldSize; // original size of resource
  44. DWORD cbSize; // size of additional resource data
  45. DWORD cbNewSize; // modified resource size
  46. UINT cbWhere; // position to modify resource 
  47. // valid for RR_INSERT only
  48. bool fAlloc; // modified resource allocated?
  49. RESOURCEINFO ri; // data of injected-DLL resident resource
  50. } RESOURCE_MOD_DESCRIPTOR;
  51. typedef std::pair<LPVOID, ULONGLONG> RESOURCE_POINTER;
  52. typedef std::pair<HGLOBAL, RESOURCE_POINTER> RESOURCE_POINTER_ENTRY;
  53. typedef std::pair<ULONGLONG, RESOURCE_MOD_DESCRIPTOR> RESOURCE_ENTRY;
  54. typedef std::pair<HRSRC, ULONGLONG> RESOURCE_HANDLE_ENTRY;
  55. typedef std::map<ULONGLONG, RESOURCE_MOD_DESCRIPTOR> REGISTERED_RESOURCE_TABLE;
  56. typedef std::map<HRSRC, ULONGLONG> RESOURCE_HANDLE_TABLE;
  57. typedef std::map<HGLOBAL, RESOURCE_POINTER> RESOURCE_POINTER_TABLE;
  58. REGISTERED_RESOURCE_TABLE m_regResourceTable;
  59. RESOURCE_HANDLE_TABLE m_handleTable;
  60. RESOURCE_POINTER_TABLE m_ptrTable;
  61. public:
  62. CResourceManager(void);
  63. ~CResourceManager(void);
  64. void RegisterResource (DWORD type, DWORD name, LPVOID resData, DWORD cbResDataSize,
  65.    UINT resModType, UINT cbWhere = 0);
  66. void RegisterNewResource (DWORD dwType, DWORD dwName, const RESOURCEINFO&);
  67. bool IsResourceRegistered (const DWORD, const DWORD);
  68. bool IsHandleRegistered (const HRSRC);
  69. bool IsDataPointerRegistered (const HGLOBAL);
  70. bool IsNewResource (const ULONGLONG&);
  71. void AddHandleTableEntry (const ULONGLONG& ResourceEntry, const HRSRC);
  72. void AddPointerTableEntry (const ULONGLONG&, const HGLOBAL);
  73. void SetResourcePointer (const HGLOBAL, LPVOID);
  74. ULONGLONG ResourceIDFromHandle (const HRSRC);
  75. ULONGLONG ResourceIDFromDataHandle (const HGLOBAL);
  76. LPVOID AllocResource (const HGLOBAL);
  77. void SetResourceSize(const ULONGLONG&, const DWORD);
  78. DWORD GetOriginalResourceSize (const HRSRC);
  79. DWORD GetOriginalResourceSize (const ULONGLONG&);
  80. DWORD GetFixedResourceSize (const HRSRC);
  81. HRSRC GetDLLResourceHandle(const ULONGLONG&);
  82. DWORD GetDLLResourceSize(const ULONGLONG&);
  83. HGLOBAL GetDLLResourceDataHandle(const ULONGLONG& ulid);
  84. void DumpTables ();
  85. };
  86. #endif // RESOURCE_MANAGER_H