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.
 
 
 
 
 
 

90 lines
2.5 KiB

// DOManage.cpp - The snap-in manager-specific version of
// CDataObject
//
// Copyright (c) 1998-1999 Microsoft Corporation
#include "StdAfx.h"
#include "DataObj.h"
/*
* CreateDisplayName - Return the text that displays as the root node
* for the snap-in.
*
* History: a-jsari 9/28/97
*
* Note: The hGlobal in lpMedium must be freed by the caller. (See Create for
* details).
*/
HRESULT CManagerDataObject::CreateDisplayName(LPSTGMEDIUM lpMedium)
{
CString strDisplayName;
AFX_MANAGE_STATE(AfxGetStaticModuleState());
USES_CONVERSION;
CDataSource *pDataSource = pSource();
if (pDataSource == NULL)
{
FORMATETC fmtMachine = {(CLIPFORMAT) CDataObject::m_cfMachineName, NULL, DVASPECT_CONTENT, TYMED_HGLOBAL};
STGMEDIUM stgMachine;
stgMachine.tymed = TYMED_HGLOBAL;
stgMachine.hGlobal = ::GlobalAlloc(GMEM_MOVEABLE, (MAX_PATH + 1)* sizeof(WCHAR));
stgMachine.pUnkForRelease = NULL;
HRESULT hr = GetDataHere(&fmtMachine, &stgMachine);
if (hr == S_OK)
{
CString strMachine = W2T((LPWSTR)::GlobalLock(stgMachine.hGlobal));
::GlobalUnlock(stgMachine.hGlobal);
HGLOBAL hGlobal = ::GlobalFree(stgMachine.hGlobal);
ASSERT(hGlobal == NULL);
if (strMachine.Left(2) != CString(_T("\\\\")))
strMachine = CString(_T("\\\\")) + strMachine;
strDisplayName.Format(IDS_NODENAME, strMachine);
}
else
strDisplayName.LoadString(IDS_DESCRIPTION);
}
else
{
VERIFY(pSource()->GetNodeName(strDisplayName));
}
return Create(reinterpret_cast<const void *>(WSTR_FROM_CSTRING(strDisplayName)),
((strDisplayName.GetLength() + 1) * sizeof(WCHAR)), lpMedium);
}
/*
* CreateNodeTypeData - Return the NodeType for the root node in lpMedium's
* hGlobal pointer.
*
* History: a-jsari 9/28/97 Initial version
*
* Note: The hGlobal in lpMedium must be freed by the caller. (See Create for
* details).
*/
HRESULT CManagerDataObject::CreateNodeTypeData(LPSTGMEDIUM pMedium)
{
// Create the node type object in GUID format
return Create(reinterpret_cast<const void *>(&cNodeTypeStatic), sizeof(GUID), pMedium);
}
/*
* CreateNodeTypeStringData - Return the root node's NodeType in string form
* in lpMedium's hGlobal pointer
*
* History: a-jsari 9/28/97 Initial version
*
* Note: The hGlobal in lpMedium must be freed by the caller. (See Create for
* details).
*/
HRESULT CManagerDataObject::CreateNodeTypeStringData(LPSTGMEDIUM pMedium)
{
USES_CONVERSION;
return Create(WSTR_FROM_CSTRING(cszNodeTypeStatic),
((_tcslen(cszNodeTypeStatic) + 1) * sizeof(WCHAR)), pMedium);
}