T2.HXX
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:4k
源码类别:

Windows编程

开发平台:

Visual C++

  1. //+-------------------------------------------------------------------
  2. //
  3. // Copyright (C) 1995, Microsoft Corporation.
  4. //
  5. //  File:        t2.hxx
  6. //
  7. //  Contents:    general include things for the Control ACLS program
  8. //
  9. //  Classes:     none
  10. //
  11. //  History:     Dec-93        Created         DaveMont
  12. //
  13. //--------------------------------------------------------------------
  14. #include <stdio.h>
  15. #include <stdlib.h>
  16. #include <windows.h>
  17. #include <wchar.h>
  18. #ifndef __T2__
  19. #define __T2__
  20. VOID * Add2Ptr(VOID *pv, ULONG cb);
  21. //
  22. // indicates add denied ace
  23. #define GENERIC_NONE 0
  24. //
  25. // mask for command line options
  26. #define OPTION_REPLACE           0x00000001
  27. #define OPTION_REVOKE            0x00000002
  28. #define OPTION_DENY              0x00000004
  29. #define OPTION_GRANT             0x00000008
  30. #define OPTION_TREE              0x00000010
  31. #define OPTION_CONTINUE_ON_ERROR 0x00000020
  32. // command modes
  33. typedef enum
  34. {
  35.     MODE_DISPLAY            ,
  36.     MODE_REPLACE            ,
  37.     MODE_MODIFY             ,
  38.     MODE_DEBUG_ENUMERATE
  39. } MODE;
  40. // input arg modes, used in GetCmdArgs, and as index for start/end arg
  41. // counters, The order of the first 4 of these must match the order of the
  42. // command line option masks (above)
  43. typedef enum
  44. {
  45.     ARG_MODE_INDEX_REPLACE = 0,
  46.     ARG_MODE_INDEX_REVOKE,
  47.     ARG_MODE_INDEX_DENY,
  48.     ARG_MODE_INDEX_GRANT,
  49.     ARG_MODE_INDEX_DEBUG,
  50.     ARG_MODE_INDEX_EXTENDED,
  51.     ARG_MODE_INDEX_NEED_OPTION
  52. } ARG_MODE_INDEX;
  53. #define MAX_OPTIONS ARG_MODE_INDEX_GRANT + 1
  54. // max permissions per command line
  55. #define CMAXACES 64
  56. #if DBG
  57. // debug options:
  58. #define DEBUG_DISPLAY_SIDS      0x00000001
  59. #define DEBUG_DISPLAY_MASK      0x00000002
  60. #define DEBUG_LAST_ERROR        0x00000004
  61. #define DEBUG_ERRORS            0x00000008
  62. #define DEBUG_VERBOSE           0x00000010
  63. #define DEBUG_VERBOSER          0x00000020
  64. #define DEBUG_ENUMERATE_STAT    0x00000040
  65. #define DEBUG_ENUMERATE_FAIL    0x00000080
  66. #define DEBUG_ENUMERATE_RETURNS 0x00000100
  67. #define DEBUG_ENUMERATE_EXTRA   0x00000200
  68. #define DEBUG_SIZE_ALLOCATIONS  0x00000400
  69. #define DEBUG_ENUMERATE         0x00000800
  70. #define DISPLAY(a) if ((Debug & DEBUG_DISPLAY_MASK) || (Debug & DEBUG_DISPLAY_SIDS))  {fprintf a;}
  71. #define DISPLAY_MASK(a) if (Debug & DEBUG_DISPLAY_MASK)  {fprintf a;}
  72. #define DISPLAY_SIDS(a) if (Debug & DEBUG_DISPLAY_SIDS)  {fprintf a;}
  73. #define VERBOSE(a) if (Debug & DEBUG_VERBOSE)  {fprintf a;}
  74. #define VERBOSER(a) if (Debug & DEBUG_VERBOSER) {fprintf a;}
  75. #define ERRORS(a) if (Debug & DEBUG_ERRORS)  {fprintf a;}
  76. #define LAST_ERROR(a) if (Debug & DEBUG_LAST_ERROR)  {fprintf a;}
  77. #define ENUMERATE_STAT(a) if (Debug & DEBUG_ENUMERATE_STAT)  {fprintf a;}
  78. #define ENUMERATE_FAIL(a) if (Debug & DEBUG_ENUMERATE_FAIL)  {fprintf a;}
  79. #define ENUMERATE_RETURNS(a) if (Debug & DEBUG_ENUMERATE_RETURNS)  {fprintf a;}
  80. #define ENUMERATE_EXTRA(a) if (Debug & DEBUG_ENUMERATE_EXTRA)  {fprintf a;}
  81. #define SIZE(a) if (Debug & DEBUG_SIZE_ALLOCATIONS)  {fprintf a;}
  82. #else
  83. #define DISPLAY(a)
  84. #define DISPLAY_MASK(a)
  85. #define DISPLAY_SIDS(a)
  86. #define VERBOSE(a)
  87. #define VERBOSER(a)
  88. #define ERRORS(a)
  89. #define LAST_ERROR(a)
  90. #define ENUMERATE_STAT(a)
  91. #define ENUMERATE_FAIL(a)
  92. #define ENUMERATE_RETURNS(a)
  93. #define ENUMERATE_EXTRA(a)
  94. #define SIZE(a)
  95. #endif
  96. //+-------------------------------------------------------------------------
  97. //
  98. //  Class:     FastAllocator
  99. //
  100. //  Synopsis:  takes in a buffer, buffer size, and needed size, and either
  101. //             uses the buffer, or allocates a new one for the size
  102. //             and of course destroys it in the dtor
  103. //
  104. //--------------------------------------------------------------------------
  105. class FastAllocator
  106. {
  107. public:
  108.     inline FastAllocator(VOID *buf, LONG bufsize);
  109.     inline ~FastAllocator();
  110.     inline VOID *GetBuf(LONG neededsize);
  111. private:
  112.     VOID *_statbuf;
  113.     VOID *_allocatedbuf;
  114.     LONG  _statbufsize;
  115.     BOOL  _allocated;
  116. };
  117. FastAllocator::FastAllocator(VOID *buf, LONG bufsize)
  118.     :_statbuf(buf),
  119.      _statbufsize(bufsize),
  120.      _allocated(FALSE)
  121. {
  122. }
  123. FastAllocator::~FastAllocator()
  124. {
  125.     if (_allocated)
  126.         delete _allocatedbuf;
  127. }
  128. VOID *FastAllocator::GetBuf(LONG neededsize)
  129. {
  130.     if (neededsize > _statbufsize)
  131.     {
  132.        _allocatedbuf = (VOID *)new BYTE[neededsize];
  133.        if (_allocatedbuf)
  134.            _allocated = TRUE;
  135.     } else
  136.     {
  137.         _allocatedbuf = _statbuf;
  138.     }
  139.     return(_allocatedbuf);
  140. }
  141. #endif // __T2__