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.
 
 
 
 
 
 

133 lines
3.3 KiB

//+----------------------------------------------------------------------------
//
// File: loadconnfolder.cpp
//
// Module: CMSTP.EXE
//
// Synopsis: This source file contains the code that implements the
// CLoadConnFolder Class.
//
// Copyright (c) 1997-1999 Microsoft Corporation
//
// Author: quintinb Created 07/14/98
//
//+----------------------------------------------------------------------------
#include "cmmaster.h"
CLoadConnFolder::CLoadConnFolder()
{
ULONG ulCount;
// "CLSID_MyComputer\CLSID_ControlPanel\CLSID_ConnectionsFolder"
// Note -- ParseDisplayName() is miss declared, it should take a const ptr
//
#define NETCON_FOLDER_PATH L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\" \
L"::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\" \
L"::{7007acc7-3202-11d1-aad2-00805fc1270e}";
WCHAR c_szMyFolderName[] = NETCON_FOLDER_PATH;
//
// Set initial states of class vars
//
m_pConnectionsFolder = NULL;
m_ConnFolderpidl = NULL;
m_pDesktopFolder = NULL;
m_HrClassState = E_UNEXPECTED;
//
// Start retrieving the conn folder
//
m_HrClassState = CoInitialize(NULL);
//
// Save whether CoInit succeeded or not
//
m_CoInit = SUCCEEDED(m_HrClassState);
if (SUCCEEDED(m_HrClassState))
{
//
// Get the desktop folder, so we can parse the display name and get
// the UI object of the connections folder
//
m_HrClassState = SHGetDesktopFolder(&m_pDesktopFolder);
if (SUCCEEDED(m_HrClassState))
{
m_HrClassState = m_pDesktopFolder->ParseDisplayName(NULL, 0, (WCHAR *) c_szMyFolderName,
&ulCount, &m_ConnFolderpidl, NULL);
if (SUCCEEDED(m_HrClassState))
{
//
// Now we have the pidl for the Connections Folder
//
m_HrClassState = m_pDesktopFolder->BindToObject(m_ConnFolderpidl, NULL, IID_IShellFolder,
(LPVOID*)(&m_pConnectionsFolder));
}
}
}
}
CLoadConnFolder::~CLoadConnFolder()
{
if (m_pConnectionsFolder)
{
m_pConnectionsFolder->Release();
m_pConnectionsFolder = NULL;
}
if (m_pDesktopFolder)
{
m_pDesktopFolder->Release();
m_pDesktopFolder = NULL;
}
if (m_ConnFolderpidl)
{
LPMALLOC pMalloc;
HRESULT hr = SHGetMalloc(&pMalloc);
if (SUCCEEDED(hr))
{
pMalloc->Free(m_ConnFolderpidl);
pMalloc->Release();
m_ConnFolderpidl = NULL;
}
}
if (m_CoInit)
{
CoUninitialize();
}
m_HrClassState = S_FALSE;
}
HRESULT CLoadConnFolder::HrLaunchConnFolder()
{
SHELLEXECUTEINFO sei;
HRESULT hr = S_OK;
if (NULL != m_ConnFolderpidl)
{
ZeroMemory(&sei, sizeof(sei));
sei.cbSize = sizeof(sei);
sei.fMask = SEE_MASK_IDLIST | SEE_MASK_CLASSNAME;
sei.lpIDList = m_ConnFolderpidl;
sei.lpClass = TEXT("folder");
sei.hwnd = NULL; //lpcmi->hwnd;
sei.nShow = SW_SHOWNORMAL;
sei.lpVerb = TEXT("open");
if (!ShellExecuteEx(&sei))
{
hr = HRESULT_FROM_WIN32(GetLastError());
}
}
return hr;
}