84 lines
2.5 KiB
C++
84 lines
2.5 KiB
C++
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 2000-2001.
|
||
|
//
|
||
|
// File: PolicyKey.cpp
|
||
|
//
|
||
|
// Contents: Implementation of CPolicyKey
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
#include "stdafx.h"
|
||
|
#include <gpedit.h>
|
||
|
#include "PolicyKey.h"
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
#ifndef ALPHA
|
||
|
#define new DEBUG_NEW
|
||
|
#endif
|
||
|
#undef THIS_FILE
|
||
|
static char THIS_FILE[] = __FILE__;
|
||
|
#endif
|
||
|
|
||
|
CPolicyKey::CPolicyKey (IGPEInformation* pGPEInformation, PCWSTR pszKey, bool fIsMachineType)
|
||
|
: m_hKeyGroupPolicy (0),
|
||
|
m_hSubKey (0)
|
||
|
{
|
||
|
ASSERT (pszKey);
|
||
|
if ( pGPEInformation )
|
||
|
{
|
||
|
HRESULT hr = pGPEInformation->GetRegistryKey (
|
||
|
fIsMachineType ? GPO_SECTION_MACHINE : GPO_SECTION_USER,
|
||
|
&m_hKeyGroupPolicy);
|
||
|
ASSERT (SUCCEEDED (hr));
|
||
|
if ( SUCCEEDED (hr) )
|
||
|
{
|
||
|
if ( pszKey && pszKey[0] )
|
||
|
{
|
||
|
DWORD dwDisposition = 0;
|
||
|
LONG lResult = ::RegCreateKeyEx (m_hKeyGroupPolicy, // handle of an open key
|
||
|
pszKey, // address of subkey name
|
||
|
0, // reserved
|
||
|
L"", // address of class string
|
||
|
REG_OPTION_NON_VOLATILE, // special options flag
|
||
|
KEY_ALL_ACCESS, // desired security access
|
||
|
NULL, // address of key security structure
|
||
|
&m_hSubKey, // address of buffer for opened handle
|
||
|
&dwDisposition); // address of disposition value buffer
|
||
|
ASSERT (lResult == ERROR_SUCCESS);
|
||
|
if ( lResult != ERROR_SUCCESS )
|
||
|
{
|
||
|
_TRACE (0, L"RegCreateKeyEx (%s) failed: %d\n", pszKey,
|
||
|
lResult);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_TRACE (0, L"IGPEInformation::GetRegistryKey (%s) failed: 0x%x\n",
|
||
|
fIsMachineType ?
|
||
|
L"GPO_SECTION_MACHINE" : L"GPO_SECTION_USER",
|
||
|
hr);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
CPolicyKey::~CPolicyKey ()
|
||
|
{
|
||
|
if ( m_hSubKey )
|
||
|
VERIFY (ERROR_SUCCESS == ::RegCloseKey (m_hSubKey));
|
||
|
|
||
|
if ( m_hKeyGroupPolicy )
|
||
|
VERIFY (ERROR_SUCCESS == ::RegCloseKey (m_hKeyGroupPolicy));
|
||
|
}
|
||
|
|
||
|
HKEY CPolicyKey::GetKey () const
|
||
|
{
|
||
|
if (m_hSubKey)
|
||
|
return m_hSubKey;
|
||
|
else
|
||
|
{
|
||
|
return m_hKeyGroupPolicy;
|
||
|
}
|
||
|
}
|