SERVICE.CPP
// This is a part of the Microsoft Management Console. 
// Copyright 1995 - 1997 Microsoft Corporation 
// All rights reserved. 
// 
// This source code is only intended as a supplement to the 
// Microsoft Management Console and related 
// electronic documentation provided with the interfaces. 
 
#include "stdafx.h" 
#include "Service.h" 
#include "CSnapin.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
void CFolder::Create(LPWSTR szName, int nImage, int nOpenImage,  
                                FOLDER_TYPES type, BOOL bHasChildren) 
{ 
    ASSERT(m_pScopeItem == NULL); // Calling create twice on this item? 
 
    // Two-stage construction 
    m_pScopeItem = new SCOPEDATAITEM; 
    memset(m_pScopeItem, 0, sizeof(SCOPEDATAITEM)); 
 
    // Set folder type  
    m_type = type; 
 
    // Add node name 
    if (szName != NULL) 
    { 
        m_pScopeItem->mask = SDI_STR; 
    m_pScopeItem->displayname = (unsigned short*)(-1); 
         
        UINT uiByteLen = (wcslen(szName) + 1) * sizeof(OLECHAR); 
        LPOLESTR psz = (LPOLESTR)::CoTaskMemAlloc(uiByteLen); 
     
        if (psz != NULL) 
        { 
            wcscpy(psz, szName); 
            m_pszName = psz; 
        } 
    } 
 
    // Add close image 
    if (nImage != 0) 
    { 
        m_pScopeItem->mask |= SDI_IMAGE; 
        m_pScopeItem->nImage = nImage; 
    } 
 
    // Add open image 
    if (nOpenImage != 0) 
    { 
        m_pScopeItem->mask |= SDI_OPENIMAGE; 
        m_pScopeItem->nOpenImage = nOpenImage; 
    } 
 
    // Add button to node if the folder has children 
    if (bHasChildren == TRUE) 
    { 
        m_pScopeItem->mask |= SDI_CHILDREN; 
        m_pScopeItem->cChildren = 1; 
    } 
}