/*++ Copyright (C) 1996-2001 Microsoft Corporation Module Name: SECOBJ.CPP Abstract: Implements classes related to A51 security model Classes implemented: CWmiSecurityCheck Main class of security model History: 07/20/00 marioh Created. --*/ #include "precomp.h" #include #include #include #include #include "secobj.h" //*************************************************************************** // //*************************************************************************** CWmiSecurityCheck::CWmiSecurityCheck ( ) { m_lCount =1; m_pSD = NULL; m_pParent = NULL; InitializeCriticalSection (&m_cs); } //*************************************************************************** // //*************************************************************************** CWmiSecurityCheck::~CWmiSecurityCheck ( ) { // free descriptor if ( m_pSD != NULL ) delete m_pSD; DeleteCriticalSection (&m_cs); } //*************************************************************************** // //*************************************************************************** LONG CWmiSecurityCheck::AddRef ( ) { return InterlockedIncrement ( &m_lCount ); } //*************************************************************************** // //*************************************************************************** LONG CWmiSecurityCheck::Release ( ) { LONG lCount = InterlockedDecrement ( &m_lCount ); if ( lCount == 0 ) delete this; return lCount; } //*************************************************************************** // //*************************************************************************** HRESULT CWmiSecurityCheck::SetScopeSD ( PSECURITY_DESCRIPTOR pSD ) { HRESULT hRes = S_OK; if ( pSD != NULL ) { // Copy the SD for local purposes SIZE_T dwSize = GetSecurityDescriptorLength(pSD); // Get the SD Length SECURITY_DESCRIPTOR* piSD = (SECURITY_DESCRIPTOR*) new BYTE[dwSize]; // Allocate mem for SD copy ZeroMemory(piSD, dwSize); // Clear memory CopyMemory(piSD, pSD, dwSize); // Copy the original SD m_pSD = new CNtSecurityDescriptor (piSD); // Initialize new SD wrapper with SD if (m_pSD==NULL) hRes = WBEM_E_OUT_OF_MEMORY; // Failed due to out of memory } return hRes; } //*************************************************************************** // //*************************************************************************** HRESULT CWmiSecurityCheck::SpawnSubscope ( CWmiSecurityCheck** ppSecObj) { HRESULT hRes = S_OK; // Initialize new instance of CWmiSecurityCheck *ppSecObj = new CWmiSecurityCheck; if ( ppSecObj == NULL ) // Failed due to out of memory hRes = WBEM_E_OUT_OF_MEMORY; else { (*ppSecObj)->m_pParent = this; // Set the backlink for synthezised SD builds } return hRes; } //*************************************************************************** // //*************************************************************************** HRESULT CWmiSecurityCheck::AccessCheck ( DWORD dwMask, PSECURITY_DESCRIPTOR pSD) { HRESULT hRes = S_OK; // Stub return hRes; } //*************************************************************************** // //*************************************************************************** HRESULT CWmiSecurityCheck::ComputeEffectiveSD ( PSECURITY_DESCRIPTOR pSD, DWORD dwSdSize ) { HRESULT hRes = S_OK; // Stub return hRes; }