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.
 
 
 
 
 
 

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;
}
}