179 lines
4.3 KiB
C++
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;
|
|
}
|
|
|
|
|
|
|