Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//*************************************************************
//
// Copyright (c) Microsoft Corporation 1999 - 2000
// All rights reserved
//
// log.hxx
//
// Contains declarations for classes related to rsop logging
// for the folder redirection client-side extension
//
// Created: 8-01-1999 adamed
//
//*************************************************************
#if !defined(__LOG_HXX__)
#define __LOG_HXX__
//
// The prefix to the scope of management is always "LDAP://" --
// this constant refers to the length of that prefix
//
#define SOMID_PREFIX_LEN 7
#define REPORT_ATTRIBUTE_SET_STATUS( x , y ) \
{ \ if (FAILED( y )) \ { \ DebugMsg((DM_VERBOSE, IDS_RSOP_ATTRIBUTE_FAIL, x, y)); \ } \ }
#define WQL_INSTANCE L"NOT id = \"%s\""
#define WQL_AND L" AND "
WCHAR* StringDuplicate(WCHAR* wszOriginal);
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// Class: CRedirectionPolicy
//
// Synopsis: This class describes each folder that could be
// redirected by folder redirection policy and abstracts
// its persistence operations through an rsop schema
//
// Notes:
//
//-------------------------------------------------------------
class CRedirectionPolicy : public CPolicyRecord { public:
CRedirectionPolicy( CFileDB* pGpoData, CRedirectInfo* rgRedirect, LONG Precedence, HRESULT* phr);
~CRedirectionPolicy();
//
// Operations
//
HRESULT Write(); HRESULT Initialize(); void NormalizePrecedence( LONG Scale ); HRESULT CopyInheritedData( CRedirectionPolicy* pAncestralPolicy );
//
// Information methods
//
int GetFolderIndex(); int GetAncestorIndex(); BOOL HasAncestor(); BOOL HasInheritedData(); BOOL IsRedirected();
//
// Public data
//
CRedirectionPolicy* _pNext; // Used to link these objects in a list
private: HRESULT GetGroupInformation( WCHAR* wszGroupRedirectionData);
HRESULT ParseGroupInformation( WCHAR* wszGroupRedirectionData, LONG* pCount, WCHAR** rgwszGroups = NULL, WCHAR** rgwszPaths = NULL);
HRESULT GenerateInheritedPath( WCHAR* pwszAncestorPath, WCHAR** ppwszInheritedPath);
HRESULT GenerateLocalInheritedPath( WCHAR** ppwszInheritedPath );
//
// The following two arrays are parallel arrays
//
WCHAR** _rgwszGroups; // Security groups applying to this redirection
WCHAR** _rgwszRedirectedPaths; // Paths to which the folder is redirected for each of the groups in _rgwszGroups
LONG _cGroups; // Number of paths / security groups to which folder could be redirected
LONG _Precedence; // Precedence of this redirection with respect to other redirections
UNICODE_STRING _RedirectedSid; // Sid that caused this to redirect
WCHAR* _wszRedirectedPath; // Location to which this folder is redirected
WCHAR* _wszGPODSPath; // unique ds path of gpo from which this redirection came
WCHAR* _wszDisplayName; // Display name of the folder
WCHAR* _wszLocalizedName; // Localized file system name of the folder
WCHAR* _wszSOMId; // Scope of management to which this policy applied
DWORD _dwFlags; // Redirection flags
HRESULT _hrInit; // Result of object initialization
int _iFolderIndex; // Index referring to the folder
int _iAncestorIndex; // Index to this folder's ancestor (parent) folder
BOOL _bHasAncestor; // TRUE if this folder has an ancestor
BOOL _bMissingAncestor; // TRUE if this folder has an ancestor, but
// no policy was specified for that ancestor
CFileDB* _pGpoData; // needed to pass to utility functions
};
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// Class: CPrecedenceState
//
// Synopsis: This class keeps track of the precedence relationships
// between redirected folders. It is used to assign
// precedence to each candidate redirection policy
//
// Notes:
//
//-------------------------------------------------------------
class CPrecedenceState { public:
CPrecedenceState();
LONG UpdateFolderPrecedence( int iFolder ); LONG GetFolderPrecedence( int iFolder );
private:
LONG _rgFolderPrecedence[ EndRedirectable ]; // stores precedence of each winning policy for each folder
};
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// Class: CRedirectionLog
//
// Synopsis: This class abstracts the logging of folder redirection
// policy and provides methods to persist a representation
// of the folder redirection policy via rsop schema
//
// Notes:
//
//-------------------------------------------------------------
class CRedirectionLog : public CPolicyLog { public:
CRedirectionLog(); ~CRedirectionLog();
HRESULT AddRedirectionPolicies( CFileDB* pGpoData, CRedirectInfo* pRedirectionInfo);
void InitRsop( CRsopContext* pRsopContext, BOOL bForceRsop );
HRESULT WriteRsopLog();
HRESULT AddPreservedPolicy( WCHAR* wszFolderName );
private:
CRedirectionPolicy* GetAncestor( CRedirectionPolicy* pRedirectionPolicy );
void NormalizePrecedence( CRedirectionPolicy* pRedirectionPolicy ); void ClearRsopLog();
HRESULT AddAncestralPolicy( CRedirectionPolicy* pRedirectionPolicy );
CRedirectionPolicy* _pRedirectionList; // List of all candidate redirections
CRedirectionPolicy** _ppNextRedirection; // Pointer to reference to end of list
CPrecedenceState _PrecedenceState; // State of the precedence relationships among candidate redirections
WCHAR* _wszDeletionQuery; // Query used to clear settings
};
#endif // __LOG_HXX__
|