176 lines
3.8 KiB
C++
176 lines
3.8 KiB
C++
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name :
|
|
admacl.hxx
|
|
|
|
Abstract:
|
|
This header file declares Admin API Access Check API
|
|
|
|
Author:
|
|
|
|
Philippe Choquier 26-Nov-1996
|
|
--*/
|
|
|
|
#if !defined(_ADMACL_H)
|
|
#define _ADMACL_H
|
|
|
|
|
|
class CInitAdmacl {
|
|
public:
|
|
CInitAdmacl();
|
|
~CInitAdmacl();
|
|
};
|
|
|
|
extern CInitAdmacl g_cinitadmacl;
|
|
|
|
|
|
#define AAC_GETALL (DWORD)-1
|
|
#define AAC_ENUM_KEYS (DWORD)-2
|
|
#define AAC_COPYKEY (DWORD)-3
|
|
#define AAC_DELETEKEY (DWORD)-4
|
|
|
|
|
|
#define ISPATHDELIM(a) ((a)=='/' || (a)=='\\')
|
|
#define ISPATHDELIMW(a) ((a)==(WCHAR)'/' || (a)==(WCHAR)'\\')
|
|
|
|
#define ADMINACL_NONINIT_SIGN 0x4b6d2dc9
|
|
#define ADMINACL_INIT_SIGN 0x5a6d2dc9
|
|
#define ADMINACL_FREED_SIGN 0x676d2dc9
|
|
|
|
class CAdminAcl {
|
|
public:
|
|
CAdminAcl() { m_wchPath[0] = '\0';
|
|
m_dwAclRef = 0;
|
|
m_pAcl = NULL;
|
|
m_pMDCom = NULL;
|
|
m_dwSignature = ADMINACL_NONINIT_SIGN; }
|
|
|
|
~CAdminAcl() ;
|
|
|
|
LPWSTR GetPath() { return m_wchPath; }
|
|
|
|
BOOL Init( IMDCOM*,
|
|
LPVOID pvAdmin,
|
|
METADATA_HANDLE hAdminHandle,
|
|
LPCWSTR pszPath,
|
|
LPBYTE pAcl,
|
|
DWORD dwAclRef,
|
|
PBOOL pbIsPathCorrect );
|
|
|
|
LPBYTE GetAcl() { return m_pAcl; }
|
|
|
|
METADATA_HANDLE GetAdminHandle() { return m_hAdminHandle; }
|
|
|
|
LPVOID GetAdminContext() { return m_pvAdmin; }
|
|
|
|
public:
|
|
static LIST_ENTRY m_ListHead;
|
|
static CRITICAL_SECTION m_csList;
|
|
static LONG m_lInList;
|
|
DWORD m_dwSignature;
|
|
LIST_ENTRY m_ListEntry;
|
|
|
|
private:
|
|
WCHAR m_wchPath[MAX_PATH];
|
|
METADATA_HANDLE m_hAdminHandle;
|
|
LPBYTE m_pAcl;
|
|
DWORD m_dwAclRef;
|
|
LPVOID m_pvAdmin;
|
|
IMDCOM* m_pMDCom;
|
|
} ;
|
|
|
|
|
|
class COpenHandle {
|
|
public:
|
|
COpenHandle()
|
|
: m_pszPath( NULL )
|
|
{}
|
|
|
|
~COpenHandle()
|
|
{
|
|
if( m_pszPath )
|
|
{
|
|
LocalFree(m_pszPath);
|
|
}
|
|
}
|
|
|
|
LPWSTR GetPath() { return m_pszPath; }
|
|
|
|
HRESULT Init(METADATA_HANDLE hAdminHandle,
|
|
LPCWSTR pszPath,
|
|
LPCWSTR pszParentPath,
|
|
BOOL fIsNSE );
|
|
|
|
METADATA_HANDLE GetAdminHandle() { return m_hAdminHandle; }
|
|
|
|
BOOL GetAcl(
|
|
IMDCOM* pMDCom,
|
|
LPCWSTR pszPath,
|
|
LPBYTE* pAcl,
|
|
LPDWORD pdwRef );
|
|
|
|
|
|
BOOL CheckSubAcls(
|
|
IMDCOM *pMDCom,
|
|
LPCWSTR pszPath,
|
|
LPBOOL pfIsAnyAcl );
|
|
|
|
VOID AddRef() {InterlockedIncrement(&m_lRefCount);}
|
|
VOID Release(PVOID pvAdmin);
|
|
|
|
private:
|
|
LPWSTR m_pszPath;
|
|
METADATA_HANDLE m_hAdminHandle;
|
|
BOOL m_fIsNse;
|
|
long m_lRefCount;
|
|
} ;
|
|
|
|
BOOL
|
|
AdminAclNotifySetOrDeleteProp(
|
|
METADATA_HANDLE hMB,
|
|
DWORD dwId
|
|
);
|
|
|
|
BOOL
|
|
AdminAclAccessCheck(
|
|
IMDCOM* pMDCom,
|
|
LPVOID pvAdmin,
|
|
METADATA_HANDLE hMB,
|
|
LPCWSTR pszPath,
|
|
DWORD dwId, // check for MD_ADMIN_ACL, must have special right to write them
|
|
DWORD dwAccess, // METADATA_PERMISSION_*
|
|
COpenHandle* pohHandle,
|
|
LPBOOL pfEnableSecureAccess = NULL
|
|
);
|
|
|
|
BOOL
|
|
AdminAclNotifyOpen(
|
|
LPVOID pvAdmin,
|
|
METADATA_HANDLE hMB,
|
|
LPCWSTR pszPath,
|
|
BOOL fIsNse
|
|
);
|
|
|
|
BOOL
|
|
AdminAclNotifyClose(
|
|
LPVOID pvAdmin,
|
|
METADATA_HANDLE hMB
|
|
);
|
|
|
|
BOOL
|
|
AdminAclFlushCache(
|
|
);
|
|
|
|
|
|
void
|
|
AdminAclDisableAclCache();
|
|
|
|
void
|
|
AdminAclEnableAclCache();
|
|
|
|
#define IsAclCachingEnabled (g_lCacheAcls > 0)
|
|
|
|
#endif
|