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.
 
 
 
 
 
 

210 lines
5.2 KiB

// Copyright (c) 2000-2001 Microsoft Corporation, All Rights Reserved
// JobObjectProps.cpp
//#define _WIN32_WINNT 0x0500
#include "precomp.h"
#include <wbemprov.h>
#include "FRQueryEx.h"
#include <vector>
#include "helpers.h"
#include "CVARIANT.h"
#include "CObjProps.h"
#include "CJobObjProps.h"
#include <crtdbg.h>
//*****************************************************************************
// BEGIN: Declaration of Win32_NamedJobObject class properties.
//*****************************************************************************
// WARNING!! MUST KEEP MEMBERS OF THE FOLLOWING ARRAY
// IN SYNCH WITH THE JOB_OBJ_PROPS ENUMERATION DECLARED
// IN CJobObjProps.h !!!
LPCWSTR g_rgJobObjPropNames[] =
{
{ L"CollectionID" },
{ L"BasicUIRestrictions" }
};
//*****************************************************************************
// END: Declaration of Win32_NamedJobObject class properties.
//*****************************************************************************
CJobObjProps::CJobObjProps(CHString& chstrNamespace)
: CObjProps(chstrNamespace)
{
}
CJobObjProps::CJobObjProps(
HANDLE hJob,
CHString& chstrNamespace)
: CObjProps(chstrNamespace),
m_hJob(hJob)
{
}
CJobObjProps::~CJobObjProps()
{
}
// Clients call this to establish which properties
// were requested. This function calls a base class
// helper, which calls our CheckProps function.
// The base class helper finally stores the result
// in the base class member m_dwReqProps.
HRESULT CJobObjProps::GetWhichPropsReq(
CFrameworkQuery& cfwq)
{
HRESULT hr = S_OK;
// Call base class version for help.
// Base class version will call our
// CheckProps function.
hr = CObjProps::GetWhichPropsReq(
cfwq,
CheckProps);
return hr;
}
DWORD CJobObjProps::CheckProps(
CFrameworkQuery& Query)
{
DWORD dwReqProps = PROP_NONE_REQUIRED;
// Get the requested properties for this
// specific object...
if (Query.IsPropertyRequired(g_rgJobObjPropNames[JO_ID]))
dwReqProps |= PROP_ID;
if (Query.IsPropertyRequired(g_rgJobObjPropNames[JO_JobObjectBasicUIRestrictions]))
dwReqProps |= PROP_JobObjectBasicUIRestrictions;
return dwReqProps;
}
void CJobObjProps::SetHandle(
const HANDLE hJob)
{
m_hJob = hJob;
}
HANDLE& CJobObjProps::GetHandle()
{
_ASSERT(m_hJob);
return m_hJob;
}
// Sets the key properties from the ObjectPath.
HRESULT CJobObjProps::SetKeysFromPath(
const BSTR ObjectPath,
IWbemContext __RPC_FAR *pCtx)
{
HRESULT hr = WBEM_S_NO_ERROR;
// This array contains the key field names
CHStringArray rgchstrKeys;
rgchstrKeys.Add(g_rgJobObjPropNames[JO_ID]);
// This array contains the index numbers
// in m_PropMap corresponding to the keys.
short sKeyNum[1];
sKeyNum[0] = JO_ID;
hr = CObjProps::SetKeysFromPath(
ObjectPath,
pCtx,
IDS_Win32_NamedJobObject,
rgchstrKeys,
sKeyNum);
return hr;
}
// Sets the key property from in supplied
// parameter.
HRESULT CJobObjProps::SetKeysDirect(
std::vector<CVARIANT>& vecvKeys)
{
HRESULT hr = WBEM_S_NO_ERROR;
if(vecvKeys.size() == 1)
{
short sKeyNum[1];
sKeyNum[0] = JO_ID;
hr = CObjProps::SetKeysDirect(
vecvKeys,
sKeyNum);
}
else
{
hr = WBEM_E_INVALID_PARAMETER;
}
return hr;
}
// Sets the non-key properties. Only those
// properties requested are set (as determined
// by base class member m_dwReqProps).
HRESULT CJobObjProps::SetNonKeyReqProps()
{
HRESULT hr = WBEM_S_NO_ERROR;
DWORD dwReqProps = GetReqProps();
if(dwReqProps & PROP_JobObjectBasicUIRestrictions)
{
// Get the value from the underlying JO:
JOBOBJECT_BASIC_UI_RESTRICTIONS jouir;
BOOL fQIJO = ::QueryInformationJobObject(
m_hJob,
JobObjectBasicUIRestrictions,
&jouir,
sizeof(JOBOBJECT_BASIC_UI_RESTRICTIONS),
NULL);
if(!fQIJO)
{
hr = WBEM_E_FAILED;
}
else
{
try // CVARIANT can throw...
{
// Store the value...
m_PropMap.insert(SHORT2PVARIANT::value_type(
JO_JobObjectBasicUIRestrictions,
new CVARIANT(jouir.UIRestrictionsClass)));
}
catch(CVARIANTError& cve)
{
hr = cve.GetWBEMError();
}
}
}
return hr;
}
HRESULT CJobObjProps::LoadPropertyValues(
IWbemClassObject* pIWCO)
{
HRESULT hr = WBEM_S_NO_ERROR;
if(!pIWCO) return E_POINTER;
hr = CObjProps::LoadPropertyValues(
g_rgJobObjPropNames,
pIWCO);
return hr;
}