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.
 
 
 
 
 
 

166 lines
4.9 KiB

//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000 Microsoft Corporation
//
// Module Name:
// CClusSvcAccountConfig.h
//
// Description:
// Header file for CClusSvcAccountConfig class.
// The CClusSvcAccountConfig class is an action that grants
// the required rights to the cluster service account.
//
// Implementation Files:
// CClusSvcAccountConfig.cpp
//
// Maintained By:
// Vij Vasu (Vvasu) 03-MAR-2000
//
//////////////////////////////////////////////////////////////////////////////
// Make sure that this file is included only once per compile path.
#pragma once
//////////////////////////////////////////////////////////////////////////
// Include Files
//////////////////////////////////////////////////////////////////////////
// For the CAction base class
#include "CAction.h"
// For LsaClose, LSA_HANDLE, etc.
#include <ntsecapi.h>
//////////////////////////////////////////////////////////////////////////
// Forward declarations
//////////////////////////////////////////////////////////////////////////
// The parent action of this action.
class CBaseClusterAddNode;
//////////////////////////////////////////////////////////////////////////////
//++
//
// class CClusSvcAccountConfig
//
// Description:
// The CClusSvcAccountConfigAccountConfig class is an action that grants
// the required rights to the cluster service account.
//
//--
//////////////////////////////////////////////////////////////////////////////
class CClusSvcAccountConfig : public CAction
{
public:
//////////////////////////////////////////////////////////////////////////
// Public constructors and destructors
//////////////////////////////////////////////////////////////////////////
// Constructor.
CClusSvcAccountConfig( CBaseClusterAddNode * pbcanParentActionIn );
// Default destructor.
~CClusSvcAccountConfig();
//////////////////////////////////////////////////////////////////////////
// Public methods
//////////////////////////////////////////////////////////////////////////
//
// Grant the required rights to the account.
//
void Commit();
//
// Revert the account to its previous state.
//
void Rollback();
// Returns the number of progress messages that this action will send.
UINT
UiGetMaxProgressTicks() const throw()
{
//
// The notification is:
// 1. Configuring the cluster service account
//
return 1;
}
private:
//////////////////////////////////////////////////////////////////////////
// Private type definitions
//////////////////////////////////////////////////////////////////////////
typedef CAction BaseClass;
typedef CSmartResource< CHandleTrait< PSID, PVOID, FreeSid > > SmartSid;
typedef CSmartGenericPtr< CArrayPtrTrait< LSA_UNICODE_STRING > > SmartLSAUnicodeStringArray;
//////////////////////////////////////////////////////////////////////////
// Private member functions
//////////////////////////////////////////////////////////////////////////
// Copy constructor
CClusSvcAccountConfig( const CClusSvcAccountConfig & );
// Assignment operator
CClusSvcAccountConfig & operator =( const CClusSvcAccountConfig & );
// Assign the required rights to the account.
void
ConfigureAccount();
// Undo the changes made in ConfigureAccount()
void
RevertAccount();
// Initialize an LSA_UNICODE_STRING structure.
void
InitLsaString(
LPWSTR pszSourceIn
, PLSA_UNICODE_STRING plusUnicodeStringOut
);
// Add/remove an account from the administrators account.
bool
FChangeAdminGroupMembership( PSID psidAccountSidIn, bool fAddIn );
//////////////////////////////////////////////////////////////////////////
// Private data
//////////////////////////////////////////////////////////////////////////
// Pointer the parent of this action.
CBaseClusterAddNode * m_pbcanParentAction;
// SID of the administrators group.
SmartSid m_ssidAdminSid;
// Name of the administrators group.
SmartSz m_sszAdminGroupName;
// Indicates if the cluster service account was already in the admin group or not.
bool m_fWasAreadyInGroup;
// List of unicode strings containing names of rights to be granted.
SmartLSAUnicodeStringArray m_srglusRightsToBeGrantedArray;
// Number of strings in the above array.
ULONG m_ulRightsToBeGrantedCount;
// Indicate if all the rights assigned to this account should be removed.
bool m_fRemoveAllRights;
// Were any rights granted to the account.
bool m_fRightsGrantSuccessful;
}; //*** class CClusSvcAccountConfig