windows-nt/Source/XPSP1/NT/admin/wmi/wbem/winmgmt/secobj/secobj.cpp

149 lines
3.5 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
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 <windows.h>
#include <aclapi.h>
#include <winntsec.h>
#include <wbemcli.h>
#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;
}