Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+---------------------------------------------------------------------------
//
// 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; }
|