|
|
//+---------------------------------------------------------------------
//
// 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 <getuser.h>
} #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_
|