//+--------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1993 - 1997. // // File: util.cpp // // Contents: Defnes the utility class CUtility // // Classes: // // Methods: // // History: 23-Apr-96 BruceMa Created. // //---------------------------------------------------------------------- #ifndef _UTIL_H_ #define _UTIL_H_ // note dependencies on the following two files #include "datapkt.h" #if !defined(STANDALONE_BUILD) extern "C" { #include } #endif #define COM_RIGHTS_EXECUTE 1 typedef struct { HKEY hRoot; TCHAR *szKeyPath; TCHAR *szValueName; } SSingleCallBack; typedef struct { HKEY hKey; HKEY *phClsids; unsigned cClsids; TCHAR *szTitle; } SRegKeyCallBack; typedef struct tagCallBackContext { PACKETTYPE pktType; int *pIndex; SECURITY_DESCRIPTOR *origSD; BOOL fIsIAC; union { SSingleCallBack single; SRegKeyCallBack regKey; } info; } SCallBackContext, *PCallBackContext; typedef struct { WORD Control; BYTE Reserved1; BYTE Revision; DWORD Owner; DWORD Group; DWORD Sacl; DWORD Dacl; } SSrSecurityDescriptor, *PSrSecurityDescriptor; typedef struct { BYTE Revision; BYTE Reserved1; WORD AclSize; WORD AceCount; WORD Reserved2; } SSrAcl, *PSrAcl; typedef struct { BYTE Type; BYTE Flags; WORD AceSize; ULONG AccessMask; } SSrAce, *PSrAce; #if !defined(STANDALONE_BUILD) #define USER_DETAILS_BUFFER_SIZE 1024 typedef struct tagUserDetailsPlus { USERDETAILS sUserDetails; BYTE bBuffer[USER_DETAILS_BUFFER_SIZE]; } SUserDetailsPlus; #endif enum dcomAclType { dcomAclAccess, dcomAclLaunch, dcomAclConfig }; class CUtility { public: CUtility(void); ~CUtility(void); void PostErrorMessage(void); void PostErrorMessage(int err); void CkForAccessDenied(int err); BOOL CkAccessRights(HKEY hRoot, LPCTSTR szKeyPath); int WriteRegSzNamedValue(HKEY hRoot, LPCTSTR szKeyPath, LPCTSTR szValueName, LPCTSTR szVal, DWORD dwSize); int WriteRegMultiSzNamedValue(HKEY hRoot, LPCTSTR szKeyPath, LPCTSTR szValueName, LPCTSTR szVal, DWORD dwSize); int WriteRegDwordNamedValue(HKEY hRoot, LPCTSTR szKeyPath, LPCTSTR szValueName, DWORD dwVal); int WriteRegSingleACL(HKEY hRoot, LPCTSTR szKeyPath, LPCTSTR szValueName, PSECURITY_DESCRIPTOR pSec); int WriteRegKeyACL(HKEY hKey, HKEY *phClsids, unsigned cClsids, PSECURITY_DESCRIPTOR pSec, PSECURITY_DESCRIPTOR pSecOrig); int WriteRegKeyACL2(HKEY hRoot, HKEY hKey, PSECURITY_DESCRIPTOR pSec, PSECURITY_DESCRIPTOR pSecOrig); int WriteLsaPassword(CLSID appid, LPCTSTR szPassword); int WriteSrvIdentity(LPCTSTR szService, LPCTSTR szIdentity); int DeleteRegKey(HKEY hRoot, LPCTSTR szKeyPath); int DeleteRegValue(HKEY hRoot, LPCTSTR szKeyPath, LPCTSTR szValueName); int ACLEditor(HWND hWnd, HKEY hRoot, LPCTSTR szKeyPath, LPCTSTR szValueName, int *nIndex, PACKETTYPE pktType, dcomAclType eAclType); int ACLEditor2(HWND hWnd, HKEY hKey, HKEY *phClsids, unsigned cClsids, TCHAR *szTitle, int *nIndex, PACKETTYPE pktType); BOOL InvokeUserBrowser(HWND hWnd, TCHAR *szUser); BOOL InvokeMachineBrowser(TCHAR *szMachine); int StringFromGUID(GUID &rguid, TCHAR *lpsz, int cbMax); BOOL IsEqualGuid(GUID &guid1, GUID &guid2); BOOL AdjustPrivilege(TCHAR *szPrivilege); BOOL VerifyRemoteMachine(TCHAR *szRemoteMachine); BOOL RetrieveUserPassword(TCHAR *szAppid, CString &sPassword); BOOL StoreUserPassword(TCHAR *szAppid, CString &sPassword); BOOL LookupProcessInfo(SID **ppSid, TCHAR **ppszPrincName); BOOL MakeSecDesc(SID *pSid, SECURITY_DESCRIPTOR **ppSD); BOOL ChangeService(LPCTSTR szService, LPCTSTR szIdentity, LPCTSTR szPassword, LPCTSTR szDisplay); int UpdateDCOMInfo(void); void FixHelp(CWnd* pWnd); BOOL CompareSDs(PSrSecurityDescriptor pSD1, PSrSecurityDescriptor pSD2); int SetAccountRights( LPCTSTR szUser, TCHAR *szPrivilege); BOOL CopySD(SECURITY_DESCRIPTOR *pSrc, SECURITY_DESCRIPTOR **pDest); void CopyAbsoluteSD(SECURITY_DESCRIPTOR *pSrc, SECURITY_DESCRIPTOR **pDest); void SetInheritanceFlags(SECURITY_DESCRIPTOR *pSec); BOOL CheckForValidSD(SECURITY_DESCRIPTOR *pSD); BOOL SDisIAC(SECURITY_DESCRIPTOR *pSD); SECURITY_DESCRIPTOR * IACfromSD(SECURITY_DESCRIPTOR * pSD); SECURITY_DESCRIPTOR * SDfromIAC(SECURITY_DESCRIPTOR * pIAC); // added for BDC fix HRESULT GetPrincipalSID (LPCTSTR Principal, PSID *Sid); // checks if we're on a BDC BOOL IsBackupDC(); TCHAR* PrimaryDCName(); private: BOOL CheckSDForCOM_RIGHTS_EXECUTE(SECURITY_DESCRIPTOR *pSD); SCallBackContext m_sCallBackContext; void *m_args[8]; HANDLE m_hRpc; BOOL m_bCheckedDC; BOOL m_bIsBdc; TCHAR* m_pszDomainController; }; extern CUtility g_util; extern HKEY g_hAppid; extern HKEY *g_rghkCLSID; extern unsigned g_cCLSIDs; extern TCHAR *g_szAppTitle; extern BOOL g_fReboot; extern TCHAR *g_szAppid; #endif //_UTIL_H_