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.
313 lines
8.8 KiB
313 lines
8.8 KiB
/*++
|
|
|
|
Copyright (C) 1998-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
COMOBJ.CPP
|
|
|
|
Abstract:
|
|
|
|
Implements mofcomp com objects.
|
|
|
|
History:
|
|
|
|
a-davj 17-Sept-98 Created.
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
#include "commain.h"
|
|
#include "wbemcli.h"
|
|
#include "wbemprov.h"
|
|
#include "wbemint.h"
|
|
#include "comobj.h"
|
|
#include "mofout.h"
|
|
#include "mofparse.h"
|
|
#include "dllcalls.h"
|
|
#include "datasrc.h"
|
|
|
|
SCODE Compile(CMofParser & Parser, IWbemServices *pOverride, IWbemContext * pCtx, long lOptionFlags, long lClassFlags, long lInstanceFlags,
|
|
WCHAR * wszDefault, WCHAR *UserName, WCHAR *pPassword , WCHAR *Authority,
|
|
WCHAR * wszBmof, bool bInProc, WBEM_COMPILE_STATUS_INFO *pInfo);
|
|
|
|
void ClearStatus(WBEM_COMPILE_STATUS_INFO *pInfo)
|
|
{
|
|
if(pInfo)
|
|
{
|
|
pInfo->lPhaseError = 0; // 0, 1, 2, or 3 matching current return value
|
|
pInfo->hRes = 0; // Actual error
|
|
pInfo->ObjectNum = 0;
|
|
pInfo->FirstLine = 0;
|
|
pInfo->LastLine = 0;
|
|
pInfo->dwOutFlags = 0;
|
|
}
|
|
}
|
|
|
|
HRESULT APIENTRY CompileFileViaDLL(
|
|
/* [in] */ LPWSTR FileName,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LPWSTR User,
|
|
/* [in] */ LPWSTR Authority,
|
|
/* [in] */ LPWSTR Password,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo)
|
|
{
|
|
SCODE sc;
|
|
if(FileName == NULL)
|
|
return WBEM_E_INVALID_PARAMETER;
|
|
|
|
TCHAR cFile[MAX_PATH];
|
|
ClearStatus(pInfo);
|
|
TCHAR * pFile = NULL;
|
|
if(FileName)
|
|
{
|
|
CopyOrConvert(cFile, FileName, MAX_PATH);
|
|
pFile = cFile;
|
|
}
|
|
|
|
try
|
|
{
|
|
DebugInfo dbg((lOptionFlags & WBEM_FLAG_CONSOLE_PRINT) != 0);
|
|
CMofParser Parser(pFile, &dbg);
|
|
|
|
sc = Compile(Parser, NULL, NULL, lOptionFlags, lClassFlags, lInstanceFlags,
|
|
ServerAndNamespace, User, Password, Authority,
|
|
NULL, false, pInfo);
|
|
}
|
|
catch (GenericException ge)
|
|
{
|
|
sc = ge.GetHRESULT();
|
|
}
|
|
return sc;
|
|
|
|
}
|
|
|
|
HRESULT APIENTRY CreateBMOFViaDLL(
|
|
/* [in] */ LPWSTR TextFileName,
|
|
/* [in] */ LPWSTR BMOFFileName,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo)
|
|
{
|
|
SCODE sc;
|
|
TCHAR cFile[MAX_PATH];
|
|
|
|
if(TextFileName == NULL || BMOFFileName == NULL)
|
|
return WBEM_E_INVALID_PARAMETER;
|
|
|
|
ClearStatus(pInfo);
|
|
TCHAR * pFile = NULL;
|
|
if(TextFileName)
|
|
{
|
|
CopyOrConvert(cFile, TextFileName, MAX_PATH);
|
|
pFile = cFile;
|
|
}
|
|
try
|
|
{
|
|
|
|
DebugInfo dbg((lOptionFlags & WBEM_FLAG_CONSOLE_PRINT) != 0);
|
|
CMofParser Parser(pFile, &dbg);
|
|
|
|
sc = Compile(Parser, NULL, NULL, lOptionFlags, lClassFlags, lInstanceFlags,
|
|
ServerAndNamespace, NULL, NULL, NULL,
|
|
BMOFFileName, false, pInfo);
|
|
}
|
|
catch (GenericException ge)
|
|
{
|
|
sc = ge.GetHRESULT();
|
|
}
|
|
return sc;
|
|
|
|
}
|
|
|
|
|
|
HRESULT CMofComp::CompileFile(
|
|
/* [in] */ LPWSTR FileName,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LPWSTR User,
|
|
/* [in] */ LPWSTR Authority,
|
|
/* [in] */ LPWSTR Password,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo)
|
|
{
|
|
SCODE sc;
|
|
if(FileName == NULL)
|
|
return WBEM_E_INVALID_PARAMETER;
|
|
|
|
TCHAR cFile[MAX_PATH];
|
|
ClearStatus(pInfo);
|
|
TCHAR * pFile = NULL;
|
|
if(FileName)
|
|
{
|
|
CopyOrConvert(cFile, FileName, MAX_PATH);
|
|
pFile = cFile;
|
|
}
|
|
|
|
try
|
|
{
|
|
DebugInfo dbg((lOptionFlags & WBEM_FLAG_CONSOLE_PRINT) != 0);
|
|
CMofParser Parser(pFile, &dbg);
|
|
if((lOptionFlags & WBEM_FLAG_CHECK_ONLY) && (lOptionFlags & WBEM_FLAG_CONSOLE_PRINT))
|
|
Parser.SetToDoScopeCheck();
|
|
|
|
sc = Compile(Parser, NULL, NULL, lOptionFlags, lClassFlags, lInstanceFlags,
|
|
ServerAndNamespace, User, Password, Authority,
|
|
NULL, false, pInfo);
|
|
}
|
|
catch (GenericException ge)
|
|
{
|
|
sc = ge.GetHRESULT();
|
|
}
|
|
return sc;
|
|
|
|
}
|
|
|
|
HRESULT CMofComp::CompileBuffer(
|
|
/* [in] */ long BuffSize,
|
|
/* [size_is][in] */ BYTE __RPC_FAR *pBuffer,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LPWSTR User,
|
|
/* [in] */ LPWSTR Authority,
|
|
/* [in] */ LPWSTR Password,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo)
|
|
{
|
|
|
|
SCODE sc;
|
|
if(pBuffer == NULL || BuffSize == 0)
|
|
return WBEM_E_INVALID_PARAMETER;
|
|
DebugInfo dbg((lOptionFlags & WBEM_FLAG_CONSOLE_PRINT) != 0);
|
|
CMofParser Parser(&dbg);
|
|
try
|
|
{
|
|
|
|
Parser.SetBuffer((char *)pBuffer, BuffSize);
|
|
sc = Compile(Parser, NULL, NULL, lOptionFlags, lClassFlags, lInstanceFlags,
|
|
ServerAndNamespace, User, Password, Authority,
|
|
NULL, false, pInfo);
|
|
}
|
|
catch(...)
|
|
{
|
|
sc = WBEM_E_FAILED;
|
|
}
|
|
return sc;
|
|
}
|
|
|
|
HRESULT CMofComp::CreateBMOF(
|
|
/* [in] */ LPWSTR TextFileName,
|
|
/* [in] */ LPWSTR BMOFFileName,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo)
|
|
{
|
|
SCODE sc;
|
|
TCHAR cFile[MAX_PATH];
|
|
|
|
if(TextFileName == NULL || BMOFFileName == NULL)
|
|
return WBEM_E_INVALID_PARAMETER;
|
|
|
|
ClearStatus(pInfo);
|
|
TCHAR * pFile = NULL;
|
|
if(TextFileName)
|
|
{
|
|
CopyOrConvert(cFile, TextFileName, MAX_PATH);
|
|
pFile = cFile;
|
|
}
|
|
|
|
try
|
|
{
|
|
DebugInfo dbg((lOptionFlags & WBEM_FLAG_CONSOLE_PRINT) != 0);
|
|
CMofParser Parser(pFile, &dbg);
|
|
|
|
sc = Compile(Parser, NULL, NULL, lOptionFlags, lClassFlags, lInstanceFlags,
|
|
ServerAndNamespace, NULL, NULL, NULL,
|
|
BMOFFileName, false, pInfo);
|
|
}
|
|
catch (GenericException ge)
|
|
{
|
|
sc = ge.GetHRESULT();
|
|
}
|
|
return sc;
|
|
}
|
|
|
|
HRESULT CWinmgmtMofComp::WinmgmtCompileFile(
|
|
/* [in] */ LPWSTR FileName,
|
|
/* [in] */ LPWSTR ServerAndNamespace,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [in] */ IWbemServices __RPC_FAR *pOverride,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo)
|
|
{
|
|
SCODE sc;
|
|
TCHAR cFile[MAX_PATH];
|
|
if(FileName == NULL)
|
|
return WBEM_E_INVALID_PARAMETER;
|
|
ClearStatus(pInfo);
|
|
TCHAR * pFile = NULL;
|
|
if(FileName)
|
|
{
|
|
CopyOrConvert(cFile, FileName, MAX_PATH);
|
|
pFile = cFile;
|
|
}
|
|
|
|
try
|
|
{
|
|
DebugInfo dbg((lOptionFlags & WBEM_FLAG_CONSOLE_PRINT) != 0);
|
|
CMofParser Parser(pFile, &dbg);
|
|
|
|
sc = Compile(Parser, pOverride, pCtx, lOptionFlags, lClassFlags, lInstanceFlags,
|
|
ServerAndNamespace, NULL, NULL, NULL,
|
|
NULL, true, pInfo);
|
|
}
|
|
catch (GenericException ge)
|
|
{
|
|
sc = ge.GetHRESULT();
|
|
}
|
|
return sc;
|
|
}
|
|
|
|
HRESULT CWinmgmtMofComp::WinmgmtCompileBuffer(
|
|
/* [in] */ long BuffSize,
|
|
/* [size_is][in] */ BYTE __RPC_FAR *pBuffer,
|
|
/* [in] */ LONG lOptionFlags,
|
|
/* [in] */ LONG lClassFlags,
|
|
/* [in] */ LONG lInstanceFlags,
|
|
/* [in] */ IWbemServices __RPC_FAR *pOverride,
|
|
/* [in] */ IWbemContext __RPC_FAR *pCtx,
|
|
/* [out][in] */ WBEM_COMPILE_STATUS_INFO __RPC_FAR *pInfo)
|
|
{
|
|
|
|
if(pBuffer == NULL || BuffSize == 0)
|
|
return WBEM_E_INVALID_PARAMETER;
|
|
|
|
DebugInfo dbg((lOptionFlags & WBEM_FLAG_CONSOLE_PRINT) != 0);
|
|
CMofParser Parser(&dbg);
|
|
try
|
|
{
|
|
|
|
Parser.SetBuffer((char *)pBuffer, BuffSize);
|
|
SCODE sc = Compile(Parser, pOverride, pCtx, lOptionFlags, lClassFlags, lInstanceFlags,
|
|
NULL, NULL, NULL, NULL, NULL, true, pInfo);
|
|
return sc;
|
|
}
|
|
catch(...)
|
|
{
|
|
return S_FALSE;
|
|
}
|
|
|
|
}
|
|
|
|
|