windows-nt/Source/XPSP1/NT/net/upnp/upnpui/dll/foldreg.cpp
2020-09-26 16:20:57 +08:00

179 lines
4.3 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: F O L D R E G . C P P
//
// Contents: Register the folder class
//
// Notes:
//
// Author: jeffspr 30 Sep 1997
//
//----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
extern const WCHAR c_szUPnPUIDll[];
extern const TCHAR c_sztUPnPUIDll[];
//---[ Constants ]------------------------------------------------------------
static const TCHAR c_szShellFolderAttributeVal[] = TEXT("Attributes");
static const TCHAR c_szShellFolderKey[] =
TEXT("CLSID\\{e57ce731-33e8-4c51-8354-bb4de9d215d1}\\ShellFolder");
static const TCHAR c_szDelegateFolderKey[] =
TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\NetworkNeighborhood\\NameSpace\\DelegateFolders");
static const TCHAR c_szDelegateCLSID[] =
TEXT("{e57ce731-33e8-4c51-8354-bb4de9d215d1}");
static const TCHAR c_szCLSID[] =
TEXT("CLSID");
//---[ Constant globals ]-----------------------------------------------------
//
const WCHAR c_szUPnPUIDll[] = L"upnpui.dll";
const TCHAR c_sztUPnPUIDll[] = TEXT("upnpui.dll");
//+---------------------------------------------------------------------------
//
// Function: HrRegisterFolderClass
//
// Purpose: Fix the registry values for the Shell entries under HKCR,
// CLSID\{CLSID}. The code generated from the RGS script doesn't
// support our replaceable params by default, so we'll fix
// it up after the fact.
//
// Arguments:
// (none)
//
// Returns:
//
// Author: jeffspr 23 Sep 1997
//
// Notes:
//
HRESULT HrRegisterFolderClass()
{
HRESULT hr = S_OK;
LONG lResult = 0;
TCHAR szRegValue[MAX_PATH+1];
TCHAR szWinDir[MAX_PATH+1];
// Adjust the AppID for Local Server or Service
CRegKey keyShellFolder;
if (GetWindowsDirectory(szWinDir, MAX_PATH+1))
{
lResult = keyShellFolder.Open(HKEY_CLASSES_ROOT, c_szShellFolderKey);
if (lResult == ERROR_SUCCESS)
{
DWORD dwFlags = SFGAO_FOLDER;
hr = RegSetValueEx(keyShellFolder,
c_szShellFolderAttributeVal,
0,
REG_BINARY,
(LPBYTE) &dwFlags,
sizeof (dwFlags));
keyShellFolder.Close();
}
else
{
// Translate LRESULT to HR
//
hr = HRESULT_FROM_WIN32(lResult);
}
}
else // GetWindowsDirectory failed
{
hr = HrFromLastWin32Error();
}
return hr;
}
HRESULT HrUnRegisterUPnPUIKey() {
HRESULT hr = S_OK;
LONG lResult = 0;
TCHAR szWinDir[MAX_PATH+1];
// Adjust the AppID for Local Server or Service
CRegKey keyShellFolder;
if (GetWindowsDirectory(szWinDir, MAX_PATH+1))
{
lResult = keyShellFolder.Open(HKEY_CLASSES_ROOT, c_szCLSID);
if (lResult == ERROR_SUCCESS)
{
lResult = keyShellFolder.RecurseDeleteKey(c_szDelegateCLSID);
if(lResult != ERROR_SUCCESS)
hr = HRESULT_FROM_WIN32(lResult);
keyShellFolder.Close();
}
else
{
// Translate LRESULT to HR
//
hr = HRESULT_FROM_WIN32(lResult);
}
}
else // GetWindowsDirectory failed
{
hr = HrFromLastWin32Error();
}
return hr;
}
HRESULT HrUnRegisterDelegateFolderKey()
{
HRESULT hr = S_OK;
LONG lResult = 0;
TCHAR szWinDir[MAX_PATH+1];
// Adjust the AppID for Local Server or Service
CRegKey keyShellFolder;
if (GetWindowsDirectory(szWinDir, MAX_PATH+1))
{
lResult = keyShellFolder.Open(HKEY_LOCAL_MACHINE, c_szDelegateFolderKey);
if (lResult == ERROR_SUCCESS)
{
hr = keyShellFolder.DeleteSubKey(c_szDelegateCLSID);
keyShellFolder.Close();
}
else
{
// Translate LRESULT to HR
//
hr = HRESULT_FROM_WIN32(lResult);
}
}
else // GetWindowsDirectory failed
{
hr = HrFromLastWin32Error();
}
return hr;
}