//+------------------------------------------------------------------- // // 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 #include #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__