Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

140 lines
3.2 KiB

/*****************************************************************************\
Author: Corey Morgan (coreym)
Copyright (c) 1998-2000 Microsoft Corporation
\*****************************************************************************/
#include <fwcommon.h>
#include <pdhp.h>
#define SECURITY_WIN32
#include <security.h>
#include "smlogprv.h"
CSmonLog SysmonLogProv( PROVIDER_NAME_SMONLOG, L"root\\wmi" );
const static WCHAR* pSmonLogErrorClass = L"\\\\.\\root\\wmi:SmonLogError";
CSmonLog::CSmonLog (LPCWSTR lpwszName, LPCWSTR lpwszNameSpace ) :
Provider(lpwszName, lpwszNameSpace)
{
}
CSmonLog::~CSmonLog ()
{
}
HRESULT
CSmonLog::EnumerateInstances( MethodContext* pMethodContext, long lFlags )
{
HRESULT hr = WBEM_S_NO_ERROR;
DWORD dwSize = 0;
LPTSTR mszCollections = NULL;
hr = PdhPlaEnumCollections( NULL, &dwSize, mszCollections );
mszCollections = (LPTSTR)malloc( dwSize * sizeof(TCHAR) );
if( mszCollections ){
LPTSTR strCollection;
hr = PdhPlaEnumCollections( NULL, &dwSize, mszCollections );
if( hr == ERROR_SUCCESS ){
strCollection = mszCollections;
while( strCollection != NULL && *strCollection != '\0' ){
CInstance *pInstance = CreateNewInstance(pMethodContext);
if( SUCCEEDED( LoadPropertyValues(pInstance, strCollection ) )){
hr = pInstance->Commit();
}
pInstance->Release();
strCollection += ( _tcslen( strCollection ) + 1 );
}
}
}
return hr;
}
HRESULT CSmonLog::GetObject ( CInstance* pInstance, long lFlags )
{
HRESULT hr = WBEM_E_NOT_FOUND;
CHString Name;
PDH_PLA_INFO_W info;
DWORD dwSize = sizeof(PDH_PLA_INFO_W);
ZeroMemory( &info, dwSize );
pInstance->GetCHString( L"Name", Name );
hr = PdhPlaGetInfoW( (LPWSTR)(LPCWSTR)Name, NULL, &dwSize, &info );
return hr;
}
HRESULT
CSmonLog::LoadPropertyValues(
CInstance *pInstance,
LPWSTR strName
)
{
pInstance->SetCHString( L"Name", strName );
return WBEM_S_NO_ERROR;
}
HRESULT CSmonLog::PutInstance( const CInstance &Instance, long lFlags )
{
HRESULT hr = WBEM_E_UNSUPPORTED_PARAMETER;
return hr;
}
HRESULT
CSmonLog::SetRunAs( const CInstance &Instance, CInstance *pInParams )
{
HRESULT hr;
CHString Name;
CHString User;
CHString Password;
Instance.GetCHString( L"Name", Name );
pInParams->GetCHString( L"User", User );
pInParams->GetCHString( L"Password", Password );
RevertToSelf();
hr = PdhiPlaSetRunAs( (LPWSTR)(LPCWSTR)Name, NULL, (LPWSTR)(LPCWSTR)User, (LPWSTR)(LPCWSTR)Password );
return hr;
}
HRESULT
CSmonLog::ExecMethod(
const CInstance& Instance,
const BSTR bstrMethodName,
CInstance *pInParams,
CInstance *pOutParams,
long lFlags
)
{
HRESULT hr = WBEM_E_PROVIDER_NOT_CAPABLE;
HRESULT hResult = ERROR_SUCCESS;
if( _wcsicmp( bstrMethodName, L"SetRunAs") == 0 ){
hResult = SetRunAs( Instance, pInParams );
hr = WBEM_S_NO_ERROR;
}
pOutParams->SetDWORD( L"ReturnValue", hResult );
return hr;
}