windows-nt/Source/XPSP1/NT/ds/win32/accctrl2/inc/apiutil.hxx

195 lines
6.6 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
//+-------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 1996.
//
// File: APIUTIL.HXX
//
// Contents: Private definitions and function prototypes used by the
// access control API utility funcitons
//
// History: 14-Sep-96 MacM Created
//
//--------------------------------------------------------------------
#ifndef __APIUTIL_HXX__
#define __APIUTIL_HXX__
//#include <martaexp.hxx>
#include <martaexp.h>
#define SE_AUDIT_BOTH 99
typedef struct _ACCESS_ENTRY
{
ACCESS_MODE AccessMode;
DWORD InheritType;
ACCESS_MASK AccessMask;
TRUSTEE Trustee;
} ACCESS_ENTRY, *PACCESS_ENTRY;
//
// This structure is used hold information regarding the
// functions imported from the NTMARTA dll
//
typedef struct _MARTA_NTMARTA_INFO
{
HMODULE hDll; // Module handle of the DLL
// after being loaded
pfNTMartaLookupTrustee pfTrustee; // AccLookupAccountTrustee
pfNTMartaLookupName pfName; // AccLookupAccountName
pfNTMartaLookupSid pfSid; // AccLookupAccountSid
pfNTMartaSetAList pfSetAList; // AccSetEntriesInAList
pfNTMartaAToSD pfAToSD; // AccConvertAccessToSecurityDescriptor
pfNTMartaSDToA pfSDToA; // AccConvertSDToAccess
pfNTMartaAclToA pfAclToA; // AccConvertAclToAccess
pfNTMartaGetAccess pfGetAccess; // AccGetAccessForTrustee
pfNTMartaGetExplicit pfGetExplicit; // AccGetExplicitEntries
pfNTMartaGetNamedRights pfrGetNamedRights; // AccRewriteGetRights
pfNTMartaSetNamedRights pfrSetNamedRights; // AccRewriteSetRights
pfNTMartaGetHandleRights pfrGetHandleRights; // AccRewriteGetHandleRights
pfNTMartaSetHandleRights pfrSetHandleRights; // AccRewriteSetHandleRights
pfNTMartaSetEntriesInAcl pfrSetEntriesInAcl; // AccRewriteSetEntriesInAcl
pfNTMartaGetExplicitEntriesFromAcl pfrGetExplicitEntriesFromAcl; // AccRewriteGetExplicitEntriesFromAcl
pfNTMartaTreeResetNamedSecurityInfo pfrTreeResetNamedSecurityInfo; // AccTreeResetNamedSecurityInfo
pfNTMartaGetInheritanceSource pfrGetInheritanceSource; // AccGetInheritanceSource
pfNTMartaFreeIndexArray pfrFreeIndexArray; // AccFreeIndexArray
} MARTA_NTMARTA_INFO, *PMARTA_NTMARTA_INFO;
extern MARTA_NTMARTA_INFO gNtMartaInfo;
//
// This node is used by ConvertAListToNamedBasedx
//
typedef struct _CONVERT_ALIST_NODE
{
PWSTR *ppwszInfoAddress;
PWSTR pwszOldValue;
PULONG pulVal1Address;
ULONG ulOldVal1;
PULONG pulVal2Address;
ULONG ulOldVal2;
} CONVERT_ALIST_NODE, *PCONVERT_ALIST_NODE;
//
// This macro will load the providers if it hasn't already done so, and exit
// on failure
//
#define LOAD_PROVIDERS(err) \
err = AccProvpInitProviders(&gAccProviders); \
if(err != ERROR_SUCCESS) \
{ \
return(err); \
}
//
// Function prototypes
//
VOID
CleanupConvertNode(PVOID pvNode);
inline
DWORD
AllocAndInsertCNode(CSList &SaveList,
PWSTR *ppwszAddress,
PWSTR pwszOldValue,
PWSTR pwszNewValue,
PULONG pulVal1Address = NULL,
ULONG ulOldVal1 = 0,
ULONG ulNewVal1 = 0,
PULONG pulVal2Address = NULL,
ULONG ulOldVal2 = 0,
ULONG ulNewVal2 = 0);
DWORD
GetTrusteeWForSid(PSID pSid,
PTRUSTEEW pTrusteeW);
DWORD
ConvertStringWToStringA(IN PWSTR pwszString,
OUT PSTR *ppszString);
DWORD
ConvertStringAToStringW(IN PSTR pszString,
OUT PWSTR *ppwszString);
DWORD
ConvertTrusteeAToTrusteeW(IN PTRUSTEE_A pTrusteeA,
OUT PTRUSTEE_W pTrusteeW,
IN BOOL fSidToName);
DWORD
ConvertTrusteeWToTrusteeA(IN PTRUSTEE_W pTrusteeW,
OUT PTRUSTEE_A pTrusteeA,
IN BOOL fSidToName);
DWORD
ConvertAListWToAlistAInplace(IN PACTRL_ACCESSW pAListW);
DWORD
ConvertAListToNamedBasedW(IN PACTRL_ACCESSW pAListW,
IN CSList& ChangedList);
DWORD
ConvertAListAToNamedBasedW(IN PACTRL_ACCESSA pAListA,
IN CSList& ChangedList,
IN BOOL fSidToName,
OUT PACTRL_ACCESSW *ppAListW);
DWORD
ConvertTrusteeWToTrusteeA(IN PTRUSTEE_W pTrusteeW,
OUT PTRUSTEE_A *ppTrusteeA);
DWORD
ConvertExplicitAccessAToExplicitAccessW(IN ULONG cAccesses,
IN PEXPLICIT_ACCESS_A pAccessA,
OUT PEXPLICIT_ACCESS_W *ppAccessW);
DWORD
ConvertExplicitAccessWToExplicitAccessA(IN ULONG cAccesses,
IN PEXPLICIT_ACCESS_W pAccessW,
OUT PEXPLICIT_ACCESS_A *ppAccessA);
VOID
ConvertAccessRightToAccessMask(IN ACCESS_RIGHTS AccessRight,
OUT PACCESS_MASK pAccessMask);
extern "C"
{
VOID
ConvertAccessMaskToAccessRight(IN ACCESS_MASK AccessMask,
OUT PACCESS_RIGHTS pAccessRight);
}
DWORD
ConvertExplicitAccessAToW(IN ULONG cEntries,
IN PEXPLICIT_ACCESS_A pExplicit,
IN CSList& ChangedList);
DWORD
ConvertAccessWToExplicitW(IN PACTRL_ACCESSW pAccess,
OUT PULONG pcEntries,
OUT PEXPLICIT_ACCESS *ppExplicit);
DWORD
ConvertAccessWToExplicitA(IN PACTRL_ACCESSW pAccess,
OUT PULONG pcEntries,
OUT PEXPLICIT_ACCESSA *ppExplicit);
DWORD
Win32ExplicitAccessToAccessEntry(IN ULONG cCount,
IN PEXPLICIT_ACCESS pExplicitAccessList,
OUT PACCESS_ENTRY *pAccessEntryList);
DWORD
AccessEntryToWin32ExplicitAccess(IN ULONG cCountOfAccessEntries,
IN PACCESS_ENTRY pListOfAccessEntries,
OUT PEXPLICIT_ACCESS *pListOfExplicitAccesses);
#endif // ifdef __APIUTIL_HXX__