windows-nt/Source/XPSP1/NT/sdktools/cacls/t2.hxx
2020-09-26 16:20:57 +08:00

185 lines
5 KiB
C++

//+-------------------------------------------------------------------
//
// Copyright (C) 1995, Microsoft Corporation.
//
// File: t2.hxx
//
// Contents: general include things for the Control ACLS program
//
// Classes: none
//
// History: Dec-93 Created DaveMont
//
//--------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <wchar.h>
#ifndef __T2__
#define __T2__
VOID * Add2Ptr(VOID *pv, ULONG cb);
//
// indicates add denied ace
#define GENERIC_NONE 0
//
// mask for command line options
#define OPTION_REPLACE 0x00000001
#define OPTION_REVOKE 0x00000002
#define OPTION_DENY 0x00000004
#define OPTION_GRANT 0x00000008
#define OPTION_TREE 0x00000010
#define OPTION_CONTINUE_ON_ERROR 0x00000020
// command modes
typedef enum
{
MODE_DISPLAY ,
MODE_REPLACE ,
MODE_MODIFY ,
MODE_DEBUG_ENUMERATE
} MODE;
// input arg modes, used in GetCmdArgs, and as index for start/end arg
// counters, The order of the first 4 of these must match the order of the
// command line option masks (above)
typedef enum
{
ARG_MODE_INDEX_REPLACE = 0,
ARG_MODE_INDEX_REVOKE,
ARG_MODE_INDEX_DENY,
ARG_MODE_INDEX_GRANT,
ARG_MODE_INDEX_DEBUG,
ARG_MODE_INDEX_EXTENDED,
ARG_MODE_INDEX_NEED_OPTION
} ARG_MODE_INDEX;
#define MAX_OPTIONS ARG_MODE_INDEX_GRANT + 1
// max permissions per command line
#define CMAXACES 64
#if DBG
// debug options:
void __cdecl cprintf(LPCTSTR pszFormat, ...);
void __cdecl fcprintf(FILE *pOut, LPCTSTR pszFormat, ...);
void vfcprintf(FILE *pOut, LPCTSTR pszFormat, va_list argList);
#define DEBUG_DISPLAY_SIDS 0x00000001
#define DEBUG_DISPLAY_MASK 0x00000002
#define DEBUG_LAST_ERROR 0x00000004
#define DEBUG_ERRORS 0x00000008
#define DEBUG_VERBOSE 0x00000010
#define DEBUG_VERBOSER 0x00000020
#define DEBUG_ENUMERATE_STAT 0x00000040
#define DEBUG_ENUMERATE_FAIL 0x00000080
#define DEBUG_ENUMERATE_RETURNS 0x00000100
#define DEBUG_ENUMERATE_EXTRA 0x00000200
#define DEBUG_SIZE_ALLOCATIONS 0x00000400
#define DEBUG_ENUMERATE 0x00000800
#define DISPLAY(a) if ((Debug & DEBUG_DISPLAY_MASK) || (Debug & DEBUG_DISPLAY_SIDS)) {fprintf a;}
#define DISPLAYW(a) if ((Debug & DEBUG_DISPLAY_MASK) || (Debug & DEBUG_DISPLAY_SIDS)) {fcprintf a;}
#define DISPLAY_MASK(a) if (Debug & DEBUG_DISPLAY_MASK) {fprintf a;}
#define DISPLAY_MASKW(a) if (Debug & DEBUG_DISPLAY_MASK) {fcprintf a;}
#define DISPLAY_SIDS(a) if (Debug & DEBUG_DISPLAY_SIDS) {fprintf a;}
#define DISPLAY_SIDSW(a) if (Debug & DEBUG_DISPLAY_SIDS) {fcprintf a;}
#define VERBOSE(a) if (Debug & DEBUG_VERBOSE) {fprintf a;}
#define VERBOSEW(a) if (Debug & DEBUG_VERBOSER) {fcprintf a;}
#define VERBOSER(a) if (Debug & DEBUG_VERBOSER) {fprintf a;}
#define VERBOSERW(a) if (Debug & DEBUG_VERBOSER) {fcprintf a;}
#define ERRORS(a) if (Debug & DEBUG_ERRORS) {fprintf a;}
#define ERRORSW(a) if (Debug & DEBUG_ERRORS) {fcprintf a;}
#define LAST_ERROR(a) if (Debug & DEBUG_LAST_ERROR) {fprintf a;}
#define ENUMERATE_STAT(a) if (Debug & DEBUG_ENUMERATE_STAT) {fprintf a;}
#define ENUMERATE_FAIL(a) if (Debug & DEBUG_ENUMERATE_FAIL) {fprintf a;}
#define ENUMERATE_RETURNS(a) if (Debug & DEBUG_ENUMERATE_RETURNS) {fprintf a;}
#define ENUMERATE_EXTRA(a) if (Debug & DEBUG_ENUMERATE_EXTRA) {fprintf a;}
#define SIZE(a) if (Debug & DEBUG_SIZE_ALLOCATIONS) {fprintf a;}
#else
#define DISPLAY(a)
#define DISPLAYW(a)
#define DISPLAY_MASK(a)
#define DISPLAY_MASKW(a)
#define DISPLAY_SIDS(a)
#define DISPLAY_SIDSW(a)
#define VERBOSE(a)
#define VERBOSEW(a)
#define VERBOSER(a)
#define VERBOSERW(a)
#define ERRORS(a)
#define ERRORSW(a)
#define LAST_ERROR(a)
#define ENUMERATE_STAT(a)
#define ENUMERATE_FAIL(a)
#define ENUMERATE_RETURNS(a)
#define ENUMERATE_EXTRA(a)
#define SIZE(a)
#endif
//+-------------------------------------------------------------------------
//
// Class: FastAllocator
//
// Synopsis: takes in a buffer, buffer size, and needed size, and either
// uses the buffer, or allocates a new one for the size
// and of course destroys it in the dtor
//
//--------------------------------------------------------------------------
class FastAllocator
{
public:
inline FastAllocator(VOID *buf, LONG bufsize);
inline ~FastAllocator();
inline VOID *GetBuf(LONG neededsize);
private:
VOID *_statbuf;
VOID *_allocatedbuf;
LONG _statbufsize;
BOOL _allocated;
};
FastAllocator::FastAllocator(VOID *buf, LONG bufsize)
:_statbuf(buf),
_statbufsize(bufsize),
_allocated(FALSE)
{
}
FastAllocator::~FastAllocator()
{
if (_allocated)
delete _allocatedbuf;
}
VOID *FastAllocator::GetBuf(LONG neededsize)
{
if (neededsize > _statbufsize)
{
_allocatedbuf = (VOID *)new BYTE[neededsize];
if (_allocatedbuf)
_allocated = TRUE;
} else
{
_allocatedbuf = _statbuf;
}
return(_allocatedbuf);
}
#endif // __T2__