597 lines
15 KiB
C++
597 lines
15 KiB
C++
//-------------------------------------------------------------------------
|
|
// File: PolicyTemplateEditPropertiesDlg.cpp
|
|
//
|
|
// Author : Kishnan Nedungadi
|
|
//
|
|
// created : 3/27/2000
|
|
//-------------------------------------------------------------------------
|
|
|
|
#include "stdafx.h"
|
|
#include <wbemidl.h>
|
|
#include <commctrl.h>
|
|
#include "resource.h"
|
|
#include "defines.h"
|
|
#include "ntdmutils.h"
|
|
#include "SchemaManager.h"
|
|
#include "PolicyTemplateManager.h"
|
|
#include "PolicyTemplateEditPropertiesDlg.h"
|
|
#include "EditPropertyDlgs.h"
|
|
|
|
|
|
extern USHORT g_CIMTypes[];
|
|
extern CSimpleArray<BSTR> g_bstrCIMTypes;
|
|
|
|
CEditPolicyTemplatePropertiesPageDlg * g_pEditPolicyTemplatePropertiesPage = NULL;
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
INT_PTR CALLBACK EditPolicyTemplatePropertiesPageDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
if(g_pEditPolicyTemplatePropertiesPage)
|
|
{
|
|
return g_pEditPolicyTemplatePropertiesPage->EditPolicyTemplatePropertiesPageDlgProc(hDlg, iMessage, wParam, lParam);
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
CEditPolicyTemplatePropertiesPageDlg::CEditPolicyTemplatePropertiesPageDlg(IWbemClassObject * pIPolicyTemplateClassObject, IWbemServices * pIWbemServices)
|
|
{
|
|
_ASSERT(pIPolicyTemplateClassObject);
|
|
_ASSERT(pIWbemServices);
|
|
|
|
m_hWnd = NULL;
|
|
m_pIPolicyTemplateClassObject = pIPolicyTemplateClassObject;
|
|
m_pIWbemServices = pIWbemServices;
|
|
}
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
CEditPolicyTemplatePropertiesPageDlg::~CEditPolicyTemplatePropertiesPageDlg()
|
|
{
|
|
}
|
|
|
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
INT_PTR CALLBACK CEditPolicyTemplatePropertiesPageDlg::EditPolicyTemplatePropertiesPageDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
LPPSHNOTIFY lppsn = NULL;
|
|
|
|
switch(iMessage)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
m_hWnd = hDlg;
|
|
|
|
InitializeDialog();
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_DESTROY:
|
|
{
|
|
DestroyDialog();
|
|
break;
|
|
}
|
|
|
|
case WM_COMMAND:
|
|
{
|
|
switch(LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
{
|
|
OnOK();
|
|
return TRUE;
|
|
break;
|
|
}
|
|
case IDCANCEL:
|
|
{
|
|
EndDialog(m_hWnd, IDCANCEL);
|
|
return TRUE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(BN_CLICKED == HIWORD(wParam) && IDC_EDIT == LOWORD(wParam))
|
|
{
|
|
OnEdit();
|
|
return TRUE;
|
|
}
|
|
|
|
if(BN_CLICKED == HIWORD(wParam) && IDC_IMPORT == LOWORD(wParam))
|
|
{
|
|
OnImport();
|
|
return TRUE;
|
|
}
|
|
|
|
if(BN_CLICKED == HIWORD(wParam) && IDC_EXPORT == LOWORD(wParam))
|
|
{
|
|
OnExport();
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
LPNMHDR lpnm = (LPNMHDR) lParam;
|
|
|
|
switch (lpnm->code)
|
|
{
|
|
case NM_DBLCLK :
|
|
{
|
|
if(lpnm->idFrom == IDC_POLICY_TEMPLATE_PROPERTIES_LIST)
|
|
{
|
|
OnEdit();
|
|
return TRUE;
|
|
}
|
|
break;
|
|
}
|
|
|
|
default :
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::InitializeDialog()
|
|
{
|
|
HRESULT hr;
|
|
LVCOLUMN lvColumn;
|
|
CComBSTR bstrTemp;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
//Initialize the Property List Control
|
|
m_hwndPropertiesListView = GetDlgItem(m_hWnd, IDC_POLICY_TEMPLATE_PROPERTIES_LIST);
|
|
NTDM_ERR_IF_NULL(m_hwndPropertiesListView);
|
|
ListView_SetExtendedListViewStyle(m_hwndPropertiesListView, LVS_EX_FULLROWSELECT);
|
|
|
|
lvColumn.mask = LVCF_TEXT|LVCF_FMT;
|
|
lvColumn.fmt = LVCFMT_LEFT;
|
|
|
|
bstrTemp.LoadString(_Module.GetResourceInstance(), IDS_NAME);
|
|
lvColumn.pszText = bstrTemp;
|
|
NTDM_ERR_IF_MINUSONE(ListView_InsertColumn(m_hwndPropertiesListView, 0, &lvColumn));
|
|
|
|
bstrTemp.LoadString(_Module.GetResourceInstance(), IDS_TYPE);
|
|
lvColumn.pszText = bstrTemp;
|
|
NTDM_ERR_IF_MINUSONE(ListView_InsertColumn(m_hwndPropertiesListView, 1, &lvColumn));
|
|
|
|
bstrTemp.LoadString(_Module.GetResourceInstance(), IDS_VALUE);
|
|
lvColumn.pszText = bstrTemp;
|
|
NTDM_ERR_IF_MINUSONE(ListView_InsertColumn(m_hwndPropertiesListView, 2, &lvColumn));
|
|
|
|
PopulatePolicyTemplatePropertiesList();
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// cleanup
|
|
|
|
return hr;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::DestroyDialog()
|
|
{
|
|
HRESULT hr;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
NTDM_ERR_IF_FAIL(ClearPolicyTemplatePropertiesList());
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// cleanup
|
|
|
|
return hr;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::ClearPolicyTemplatePropertiesList()
|
|
{
|
|
HRESULT hr;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
ListView_DeleteAllItems(m_hwndPropertiesListView);
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// cleanup
|
|
|
|
return hr;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::PopulatePolicyTemplatePropertiesList()
|
|
{
|
|
HRESULT hr;
|
|
CComPtr<IEnumWbemClassObject> pEnumWbemClassObject;
|
|
CComBSTR bstrName;
|
|
CComVariant vValue;
|
|
CIMTYPE cimType;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
NTDM_ERR_IF_FAIL(ClearPolicyTemplatePropertiesList());
|
|
|
|
if(!m_pIWbemServices)
|
|
NTDM_EXIT(E_FAIL);
|
|
|
|
NTDM_ERR_MSG_IF_FAIL(m_pIPolicyTemplateClassObject->BeginEnumeration(WBEM_FLAG_NONSYSTEM_ONLY));
|
|
|
|
while(true)
|
|
{
|
|
NTDM_ERR_MSG_IF_FAIL(m_pIPolicyTemplateClassObject->Next(0, &bstrName, &vValue, &cimType, NULL));
|
|
|
|
if(WBEM_S_NO_MORE_DATA == hr)
|
|
break;
|
|
|
|
NTDM_ERR_IF_FAIL(AddItemToPropertyList(bstrName, &vValue, cimType));
|
|
}
|
|
|
|
|
|
NTDM_ERR_MSG_IF_FAIL(m_pIPolicyTemplateClassObject->EndEnumeration());
|
|
|
|
NTDM_ERR_IF_FALSE(ListView_SetColumnWidth(m_hwndPropertiesListView, 0, LVSCW_AUTOSIZE_USEHEADER));
|
|
NTDM_ERR_IF_FALSE(ListView_SetColumnWidth(m_hwndPropertiesListView, 1, LVSCW_AUTOSIZE_USEHEADER));
|
|
NTDM_ERR_IF_FALSE(ListView_SetColumnWidth(m_hwndPropertiesListView, 2, LVSCW_AUTOSIZE_USEHEADER));
|
|
|
|
ListView_SetItemState(m_hwndPropertiesListView, 0, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// cleanup
|
|
|
|
return hr;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::AddItemToPropertyList(LPCTSTR pcszName, VARIANT * pvValue, CIMTYPE cimType, long lIndex)
|
|
{
|
|
HRESULT hr;
|
|
LVITEM lvItem;
|
|
CComVariant vValue;
|
|
long i;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
vValue = *pvValue;
|
|
|
|
// Name
|
|
lvItem.mask = LVIF_TEXT;
|
|
lvItem.iItem = lIndex;
|
|
lvItem.iSubItem = 0;
|
|
lvItem.pszText = (LPTSTR)pcszName;
|
|
|
|
lvItem.iItem = ListView_InsertItem(m_hwndPropertiesListView, &lvItem);
|
|
NTDM_ERR_IF_MINUSONE(lvItem.iItem);
|
|
|
|
// Type
|
|
lvItem.mask = LVIF_TEXT;
|
|
lvItem.iSubItem = 1;
|
|
lvItem.pszText = _T("");
|
|
for(i=0; i<g_bstrCIMTypes.GetSize(); i++)
|
|
{
|
|
// if Array and the type contains CIM_FLAG_ARRAY then show array
|
|
if((g_CIMTypes[i] == cimType)||((g_CIMTypes[i] == CIM_FLAG_ARRAY) && (CIM_FLAG_ARRAY & cimType)))
|
|
{
|
|
lvItem.pszText = (LPTSTR)g_bstrCIMTypes[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
NTDM_ERR_IF_MINUSONE(ListView_SetItem(m_hwndPropertiesListView, &lvItem));
|
|
|
|
|
|
// Value
|
|
if FAILED(hr = VariantChangeType(&vValue, &vValue, VARIANT_ALPHABOOL|VARIANT_LOCALBOOL, VT_BSTR))
|
|
{
|
|
if(V_VT(&vValue) == VT_NULL)
|
|
{
|
|
vValue = _T("");
|
|
}
|
|
else
|
|
{
|
|
CComBSTR bstrTemp;
|
|
bstrTemp.LoadString(_Module.GetResourceInstance(), IDS_UNABLE_TO_DISPLAY);
|
|
|
|
vValue = bstrTemp;
|
|
}
|
|
|
|
hr = NOERROR;
|
|
}
|
|
|
|
lvItem.mask = LVIF_TEXT;
|
|
lvItem.iSubItem = 2;
|
|
lvItem.pszText = vValue.bstrVal;
|
|
|
|
NTDM_ERR_IF_MINUSONE(ListView_SetItem(m_hwndPropertiesListView, &lvItem));
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// cleanup
|
|
|
|
return hr;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::OnEdit()
|
|
{
|
|
HRESULT hr;
|
|
long lSelectionMark;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
lSelectionMark = ListView_GetSelectionMark(m_hwndPropertiesListView);
|
|
|
|
if(-1 == lSelectionMark)
|
|
{
|
|
CNTDMUtils::DisplayMessage(m_hWnd, IDS_ERR_NO_PROPERTY_SELECTED);
|
|
NTDM_EXIT(E_FAIL);
|
|
}
|
|
else
|
|
{
|
|
TCHAR pszBuffer[SZ_MAX_SIZE];
|
|
VARIANT vValue;
|
|
CComBSTR bstrName;
|
|
CComBSTR bstrType;
|
|
CIMTYPE cimType;
|
|
LVITEM lvItem;
|
|
long i;
|
|
|
|
VariantInit(&vValue);
|
|
|
|
// get the property info
|
|
lvItem.mask = LVIF_TEXT;
|
|
lvItem.iItem = lSelectionMark;
|
|
lvItem.iSubItem = 0;
|
|
lvItem.pszText = pszBuffer;
|
|
lvItem.cchTextMax = SZ_MAX_SIZE;
|
|
|
|
NTDM_ERR_IF_FALSE(ListView_GetItem(m_hwndPropertiesListView, &lvItem));
|
|
|
|
if(lvItem.pszText)
|
|
{
|
|
bstrName = lvItem.pszText;
|
|
long lSpecialCaseProperty = 0;
|
|
|
|
NTDM_ERR_MSG_IF_FAIL(m_pIPolicyTemplateClassObject->Get(bstrName, 0, &vValue, &cimType, NULL));
|
|
|
|
if(_tcscmp(_T("RangeSettings"), bstrName) == 0)
|
|
{
|
|
lSpecialCaseProperty = CEditProperty::psc_ranges;
|
|
}
|
|
|
|
for(i=0; i<g_bstrCIMTypes.GetSize(); i++)
|
|
{
|
|
// if Array and the type contains CIM_FLAG_ARRAY then show array
|
|
if((g_CIMTypes[i] == cimType)||((g_CIMTypes[i] == CIM_FLAG_ARRAY) && (CIM_FLAG_ARRAY & cimType)))
|
|
{
|
|
bstrType = (LPTSTR)g_bstrCIMTypes[i];
|
|
break;
|
|
}
|
|
}
|
|
|
|
CEditProperty dlgProps(m_hWnd, lvItem.pszText, bstrType, &vValue, m_pIWbemServices, lSpecialCaseProperty);
|
|
if(IDOK == dlgProps.Run())
|
|
{
|
|
// delete the selected entry
|
|
NTDM_ERR_MSG_IF_FAIL(m_pIPolicyTemplateClassObject->Put(bstrName, 0, &vValue, cimType));
|
|
NTDM_ERR_IF_FALSE(ListView_DeleteItem(m_hwndPropertiesListView, lSelectionMark));
|
|
NTDM_ERR_IF_FAIL(AddItemToPropertyList(bstrName, &vValue, cimType, lSelectionMark));
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// cleanup
|
|
|
|
return hr;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::OnOK()
|
|
{
|
|
HRESULT hr;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
NTDM_ERR_MSG_IF_FAIL(m_pIWbemServices->PutInstance(m_pIPolicyTemplateClassObject, WBEM_FLAG_CREATE_OR_UPDATE, NULL, NULL));
|
|
|
|
hr = S_OK;
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// cleanup
|
|
if(SUCCEEDED(hr))
|
|
{
|
|
EndDialog(m_hWnd, IDOK);
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::OnImport()
|
|
{
|
|
HRESULT hr;
|
|
CComBSTR bstrPolicyTemplate;
|
|
TCHAR pszFile[MAX_PATH];
|
|
CComBSTR bstrTemp;
|
|
|
|
pszFile[0] = 0;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
bstrTemp.LoadString(_Module.GetResourceInstance(), IDS_ALL_FILES_FILTER);
|
|
bstrPolicyTemplate.LoadString(_Module.GetResourceInstance(), IDS_MOF_FILES_FILTER);
|
|
bstrPolicyTemplate += bstrTemp;
|
|
CNTDMUtils::ReplaceCharacter(bstrPolicyTemplate, L'@', L'\0');
|
|
|
|
if(CNTDMUtils::OpenFileNameDlg(bstrPolicyTemplate, _T("*.*"), m_hWnd, pszFile) && pszFile)
|
|
{
|
|
CComPtr<IMofCompiler>pIMofCompiler;
|
|
CComPtr<IWbemClassObject>pINamespaceClass;
|
|
CComPtr<IWbemClassObject>pIWbemNewInstance;
|
|
CComPtr<IWbemClassObject>pIWbemClassObject;
|
|
CComVariant vValue = _T("DeleteThisNamespace");
|
|
WBEM_COMPILE_STATUS_INFO pInfo;
|
|
|
|
// Generate a temporary namespace
|
|
bstrTemp = _T("__Namespace");
|
|
NTDM_ERR_MSG_IF_FAIL(m_pIWbemServices->GetObject(bstrTemp, WBEM_FLAG_RETURN_WBEM_COMPLETE, NULL, &pINamespaceClass, NULL));
|
|
NTDM_ERR_MSG_IF_FAIL(pINamespaceClass->SpawnInstance(0, &pIWbemNewInstance));
|
|
NTDM_ERR_MSG_IF_FAIL(pIWbemNewInstance->Put(_T("Name"), 0, &vValue, CIM_STRING));
|
|
NTDM_ERR_MSG_IF_FAIL(m_pIWbemServices->PutInstance(pIWbemNewInstance, WBEM_FLAG_CREATE_OR_UPDATE, NULL, NULL));
|
|
|
|
// mofcomp the file into that namespace
|
|
NTDM_ERR_MSG_IF_FAIL(CoCreateInstance(CLSID_MofCompiler, NULL, CLSCTX_INPROC_SERVER,IID_IMofCompiler, (void**)&pIMofCompiler));
|
|
NTDM_ERR_IF_FAIL(pIMofCompiler->CompileFile(pszFile, _T("\\\\.\\root\\policy\\DeleteThisNamespace"), NULL, NULL, NULL, WBEM_FLAG_DONT_ADD_TO_LIST, WBEM_FLAG_CREATE_ONLY, WBEM_FLAG_CREATE_ONLY, &pInfo));
|
|
|
|
if(hr != WBEM_S_NO_ERROR)
|
|
{
|
|
CNTDMUtils::DisplayMessage(m_hWnd, IDS_FAILED_COMPILING_MOF_FILE);
|
|
NTDM_EXIT(E_FAIL);
|
|
}
|
|
|
|
// get the 1st instance of MSFT_PolicyTemplate from the newly created namespace
|
|
NTDM_ERR_IF_FAIL(GetInstanceOfClass(bstrTemp, _T("MSFT_PolicyTemplate"), &pIWbemClassObject));
|
|
|
|
// copy the properties
|
|
m_pIPolicyTemplateClassObject = pIWbemClassObject;
|
|
PopulatePolicyTemplatePropertiesList();
|
|
}
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// finally delete the namespace that we created above
|
|
{
|
|
CComVariant vValue = "\\\\.\\root\\policy:__Namespace.Name=\"DeleteThisNamespace\"";
|
|
m_pIWbemServices->DeleteInstance(V_BSTR(&vValue), 0, NULL, NULL);
|
|
}
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::GetInstanceOfClass(BSTR pszNamespace, LPCTSTR pszClass, IWbemClassObject ** ppWbemClassObject)
|
|
{
|
|
HRESULT hr;
|
|
CComPtr<IWbemLocator>pIWbemLocator;
|
|
CComPtr<IWbemServices>pIWbemServices;
|
|
CComPtr<IEnumWbemClassObject>pEnumWbemClassObject;
|
|
CComBSTR bstrClass = _T("MSFT_PolicyTemplate");
|
|
ULONG uReturned;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
// create the webm locator
|
|
NTDM_ERR_MSG_IF_FAIL(CoCreateInstance(CLSID_WbemLocator, 0, CLSCTX_INPROC_SERVER,
|
|
IID_IWbemLocator, (LPVOID *) &pIWbemLocator));
|
|
|
|
NTDM_ERR_MSG_IF_FAIL(pIWbemLocator->ConnectServer( pszNamespace,
|
|
NULL,
|
|
NULL,
|
|
NULL,
|
|
0,
|
|
NULL,
|
|
NULL,
|
|
&pIWbemServices));
|
|
|
|
NTDM_ERR_MSG_IF_FAIL(CoSetProxyBlanket(pIWbemServices, RPC_C_AUTHN_WINNT, RPC_C_AUTHZ_NONE, NULL,
|
|
RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE ,
|
|
NULL, EOAC_NONE));
|
|
|
|
NTDM_ERR_MSG_IF_FAIL(pIWbemServices->CreateInstanceEnum(bstrClass, WBEM_FLAG_FORWARD_ONLY, NULL, &pEnumWbemClassObject));
|
|
NTDM_ERR_MSG_IF_FAIL(pEnumWbemClassObject->Next(WBEM_INFINITE, 1, ppWbemClassObject, &uReturned));
|
|
|
|
if(!uReturned)
|
|
NTDM_EXIT(E_FAIL);
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// cleanup
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
STDMETHODIMP CEditPolicyTemplatePropertiesPageDlg::OnExport()
|
|
{
|
|
HRESULT hr;
|
|
CComBSTR bstrTemp;
|
|
CComBSTR bstrPolicyTemplate;
|
|
TCHAR pszFile[MAX_PATH];
|
|
CComBSTR bstrObjectText;
|
|
HANDLE hFile = NULL;
|
|
DWORD dwWritten;
|
|
pszFile[0] = 0;
|
|
|
|
NTDM_BEGIN_METHOD()
|
|
|
|
bstrTemp.LoadString(_Module.GetResourceInstance(), IDS_ALL_FILES_FILTER);
|
|
bstrPolicyTemplate.LoadString(_Module.GetResourceInstance(), IDS_MOF_FILES_FILTER);
|
|
bstrPolicyTemplate += bstrTemp;
|
|
CNTDMUtils::ReplaceCharacter(bstrPolicyTemplate, L'@', L'\0');
|
|
|
|
if(CNTDMUtils::SaveFileNameDlg(bstrPolicyTemplate, _T("*.mof"), m_hWnd, pszFile))
|
|
{
|
|
if(_tcslen(pszFile))
|
|
{
|
|
NTDM_ERR_MSG_IF_FAIL(m_pIPolicyTemplateClassObject->GetObjectText(0, &bstrObjectText));
|
|
|
|
// save to pszFile
|
|
hFile = CreateFile(pszFile, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
|
|
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
|
if(hFile == INVALID_HANDLE_VALUE)
|
|
{
|
|
NTDM_ERR_GETLASTERROR_IF_NULL(NULL);
|
|
goto error;
|
|
}
|
|
|
|
if(hFile)
|
|
{
|
|
NTDM_ERR_GETLASTERROR_IF_NULL(WriteFile(hFile, bstrObjectText, _tcslen(bstrObjectText) * sizeof(TCHAR), &dwWritten, NULL));
|
|
NTDM_ERR_GETLASTERROR_IF_NULL(CloseHandle(hFile));
|
|
hFile = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
NTDM_END_METHOD()
|
|
|
|
// cleanup
|
|
if(hFile)
|
|
{
|
|
CloseHandle(hFile);
|
|
hFile = NULL;
|
|
}
|
|
|
|
return hr;
|
|
}
|