Leaked source code of windows server 2003
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.
 
 
 
 
 
 

130 lines
3.0 KiB

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1998 **/
/**********************************************************************/
/*
extract.h
FILE HISTORY:
*/
#ifndef _EXTRACT_H
#define _EXTRACT_H
#if _MSC_VER >= 1000 // VC 5.0 or later
#pragma once
#endif
#ifndef __mmc_h__
#include <mmc.h>
#endif
struct INTERNAL
{
INTERNAL()
{
m_type = CCT_UNINITIALIZED;
m_cookie = -1;
m_index = -1;
ZeroMemory(&m_clsid, sizeof(CLSID));
};
~INTERNAL() {}
DATA_OBJECT_TYPES m_type; // What context is the data object.
MMC_COOKIE m_cookie; // What object the cookie represents
CString m_string; //
CLSID m_clsid; // Class ID of who created this data object
int m_index; // index of the item in the virtual listbox
BOOL HasVirtualIndex() { return m_index != -1; }
int GetVirtualIndex() { return m_index; }
INTERNAL & operator=(const INTERNAL& rhs)
{
if (&rhs == this)
return *this;
m_type = rhs.m_type;
m_cookie = rhs.m_cookie;
m_string = rhs.m_string;
memcpy(&m_clsid, &rhs.m_clsid, sizeof(CLSID));
return *this;
}
BOOL operator==(const INTERNAL& rhs)
{
return rhs.m_string == m_string;
}
};
// SPINTERNAL
DeclareSmartPointer(SPINTERNAL, INTERNAL, if (m_p) GlobalFree((void *) m_p) )
//
// Extracts a data type from a data object
//
template <class TYPE>
TYPE* Extract(LPDATAOBJECT lpDataObject, CLIPFORMAT cf, int nSize)
{
ASSERT(lpDataObject != NULL);
TYPE* p = NULL;
STGMEDIUM stgmedium = { TYMED_HGLOBAL, NULL };
FORMATETC formatetc = { cf, NULL,
DVASPECT_CONTENT, -1, TYMED_HGLOBAL
};
int len;
// Allocate memory for the stream
if (nSize == -1)
{
len = sizeof(TYPE);
}
else
{
//int len = (cf == CDataObject::m_cfWorkstation) ?
// ((MAX_COMPUTERNAME_LENGTH+1) * sizeof(TYPE)) : sizeof(TYPE);
len = nSize;
}
stgmedium.hGlobal = GlobalAlloc(GMEM_SHARE, len);
// Get the workstation name from the data object
do
{
if (stgmedium.hGlobal == NULL)
break;
if (FAILED(lpDataObject->GetDataHere(&formatetc, &stgmedium)))
break;
p = reinterpret_cast<TYPE*>(stgmedium.hGlobal);
if (p == NULL)
break;
} while (FALSE);
return p;
}
struct INTERNAL;
TFSCORE_API(INTERNAL*) ExtractInternalFormat(LPDATAOBJECT lpDataObject);
TFSCORE_API(GUID *) ExtractNodeType(LPDATAOBJECT lpDataObject);
TFSCORE_API(CLSID *) ExtractClassID(LPDATAOBJECT lpDataObject);
TFSCORE_API(WCHAR *) ExtractComputerName(LPDATAOBJECT lpDataObject);
TFSCORE_API(BOOL) IsMMCMultiSelectDataObject(LPDATAOBJECT lpDataObject);
#endif