windows-nt/Source/XPSP1/NT/shell/ext/gina/usersettings.cpp
2020-09-26 16:20:57 +08:00

117 lines
3.1 KiB
C++

// --------------------------------------------------------------------------
// Module Name: UserSettings.h
//
// Copyright (c) 2000, Microsoft Corporation
//
// A class to handle opening and reading/writing from the HKCU key in either
// an impersonation context or not.
//
// History: 2000-04-26 vtan created
// --------------------------------------------------------------------------
#include "StandardHeader.h"
#include "UserSettings.h"
#include <sddl.h>
#include "RegistryResources.h"
#include "TokenInformation.h"
// --------------------------------------------------------------------------
// CUserSettings::CUserSettings
//
// Arguments:
//
// Returns: <none>
//
// Purpose:
//
// History: 2000-04-26 vtan created
// --------------------------------------------------------------------------
CUserSettings::CUserSettings (void) :
_hKeyCurrentUser(HKEY_CURRENT_USER)
{
HANDLE hToken;
if (OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hToken) != FALSE)
{
PSID pSID;
CTokenInformation tokenInformation(hToken);
pSID = tokenInformation.GetUserSID();
if (pSID != NULL)
{
LPTSTR pszSIDString;
if (ConvertSidToStringSid(pSID, &pszSIDString) != FALSE)
{
TW32(RegOpenKeyEx(HKEY_USERS,
pszSIDString,
0,
KEY_READ,
&_hKeyCurrentUser));
ReleaseMemory(pszSIDString);
}
}
TBOOL(CloseHandle(hToken));
}
}
// --------------------------------------------------------------------------
// CUserSettings::~CUserSettings
//
// Arguments:
//
// Returns: <none>
//
// Purpose:
//
// History: 2000-04-26 vtan created
// --------------------------------------------------------------------------
CUserSettings::~CUserSettings (void)
{
if (HKEY_CURRENT_USER != _hKeyCurrentUser)
{
TW32(RegCloseKey(_hKeyCurrentUser));
_hKeyCurrentUser = HKEY_CURRENT_USER;
}
}
// --------------------------------------------------------------------------
// CUserSettings::IsRestrictedNoClose
//
// Arguments:
//
// Returns: bool
//
// Purpose:
//
// History: 2000-04-26 vtan created
// --------------------------------------------------------------------------
bool CUserSettings::IsRestrictedNoClose (void)
{
bool fIsRestrictedNoClose;
CRegKey regKey;
fIsRestrictedNoClose = false;
if (ERROR_SUCCESS == regKey.Open(_hKeyCurrentUser,
TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer"),
KEY_QUERY_VALUE))
{
DWORD dwValue;
if (ERROR_SUCCESS == regKey.GetDWORD(TEXT("NoClose"),
dwValue))
{
fIsRestrictedNoClose = (dwValue != 0);
}
}
return(fIsRestrictedNoClose);
}