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.
 
 
 
 
 
 

191 lines
6.5 KiB

#include <windows.h>
#include <stdio.h>
#include <stdarg.h>
#include <objbase.h>
#include <wbemcli.h>
void FillUpContext(IWbemContext *pContext)
{
VARIANT vValue;
// IncludeQualifiers
VariantInit(&vValue);
vValue.vt = VT_BOOL;
vValue.boolVal = VARIANT_FALSE;
pContext->SetValue(L"IncludeQualifiers", 0, &vValue);
VariantClear(&vValue);
// PathLevel
//
// pathLevelAnonymous = 0
// pathLevelNamed,
// pathLevelLocal,
// pathLevelFull
VariantInit(&vValue);
vValue.vt = VT_I4;
vValue.lVal = 0;
pContext->SetValue(L"PathLevel", 0, &vValue);
VariantClear(&vValue);
// ExcludeSystemProperties
VariantInit(&vValue);
vValue.vt = VT_BOOL;
vValue.boolVal = VARIANT_TRUE;
pContext->SetValue(L"ExcludeSystemProperties", 0, &vValue);
VariantClear(&vValue);
}
int _cdecl main(int argc, char * argv[])
{
if(FAILED(CoInitialize(NULL)))
return 1;
HRESULT hr = E_FAIL;
IWbemObjectTextSrc *pSrc = NULL;
IWbemLocator *pL = NULL;
if(SUCCEEDED(hr = CoCreateInstance (CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER,
IID_IWbemLocator, (void**) &pL)))
{
// Create a context object
IWbemContext *pContext = NULL;
if(SUCCEEDED(hr = CoCreateInstance (CLSID_WbemContext, NULL, CLSCTX_INPROC_SERVER,
IID_IWbemContext, (void**) &pContext)))
{
FillUpContext(pContext);
IWbemServices *pConnection = NULL;
BSTR strNs = SysAllocString(L"root\\cimv2");
BSTR strText = NULL;
if(SUCCEEDED(hr = pL->ConnectServer(strNs, NULL, NULL, NULL, 0, NULL, NULL, &pConnection)))
{
IWbemClassObject *pClass = NULL;
//BSTR strObj = SysAllocString(L"MethCLass.KeyProp=\"abc\"");
// BSTR strObj = SysAllocString(L"MethCLass");
BSTR strObj = SysAllocString(L"Win32_LogicalDisk");
if(SUCCEEDED(hr = CoCreateInstance (CLSID_WbemObjectTextSrc, NULL, CLSCTX_INPROC_SERVER,
IID_IWbemObjectTextSrc, (void**) &pSrc)))
{
// Test for GetObject
if(SUCCEEDED(hr = pConnection->GetObject(strObj, 0, NULL, &pClass, NULL)))
{
if(SUCCEEDED(hr = pSrc->GetText(0, pClass, WMI_OBJ_TEXT_CIM_DTD_2_0, pContext, &strText)))
{
printf("GETOBJECT SUCCEEDED\n");
printf("================================================\n");
wprintf(strText);
}
else
printf("GetText failed with %x\n", hr);
pClass->Release();
}
else
printf("GetObject failed with %x\n", hr);
}
else
printf("CoCreateInstance on WbemObjectTextSrc failed with %x\n", hr);
// Test for PutClass
strText = SysAllocString(
L"<CLASS NAME=\"abc\"><PROPERTY NAME=\"__PATH\" TYPE=\"string\"><VALUE>\\\\CALVINIDS\\root\\DEFAULT:abc</VALUE></PROPERTY>"
L"<PROPERTY NAME=\"__NAMESPACE\" TYPE=\"string\"><VALUE>root\\DEFAULT</VALUE></PROPERTY>"
L"<PROPERTY NAME=\"__SERVER\" TYPE=\"string\"><VALUE>CALVINIDS</VALUE></PROPERTY><PROPERTY.ARRAY NAME=\"__DERIVATION\" TYPE=\"string\"><VALUE.ARRAY></VALUE.ARRAY></PROPERTY.ARRAY>"
L"<PROPERTY NAME=\"__PROPERTY_COUNT\" TYPE=\"sint32\"><VALUE>1</VALUE></PROPERTY>"
L"<PROPERTY NAME=\"__RELPATH\" TYPE=\"string\"><VALUE>abc</VALUE></PROPERTY>"
L"<PROPERTY NAME=\"__DYNASTY\" TYPE=\"string\"><VALUE>abc</VALUE></PROPERTY>"
L"<PROPERTY NAME=\"__SUPERCLASS\" TYPE=\"string\"></PROPERTY>"
L"<PROPERTY NAME=\"__CLASS\" TYPE=\"string\"><VALUE>abc</VALUE></PROPERTY>"
L"<PROPERTY NAME=\"__GENUS\" TYPE=\"sint32\"><VALUE>1</VALUE></PROPERTY>"
L"<PROPERTY.ARRAY NAME=\"__SECURITY_DESCRIPTOR\" TYPE=\"uint8\"></PROPERTY.ARRAY>"
L"<PROPERTY NAME=\"__TCREATED\" TYPE=\"uint64\"></PROPERTY>"
L"<PROPERTY NAME=\"__TEXPIRATION\" TYPE=\"uint64\"></PROPERTY>"
L"<PROPERTY NAME=\"__TMODIFIED\" TYPE=\"uint64\"></PROPERTY>"
L"<PROPERTY NAME=\"ssad\" TYPE=\"string\"></PROPERTY></CLASS>");
IWbemClassObject *pNewObj = NULL;
/* strText = SysAllocString(L"<INSTANCE CLASSNAME=\"BLUESCREEN\">"\
L"<PROPERTY NAME=\"STOPCODE\" TYPE=\"string\"><VALUE>e2</VALUE></PROPERTY>"\
L"<PROPERTY.ARRAY NAME=\"IPADDRESS\" TYPE=\"string\">"\
L"<VALUE.ARRAY>"\
L"<VALUE>\"192.168.0.10\"</VALUE>"\
L"</VALUE.ARRAY>"\
L"</PROPERTY.ARRAY>"\
L"</INSTANCE>");*/
// strText = SysAllocString(L"<CLASS NAME='test'><PROPERTY></PROPERTY></CLASS>");
if(SUCCEEDED(hr = pSrc->CreateFromText(0, strText, WMI_OBJ_TEXT_CIM_DTD_2_0, NULL, &pNewObj)))
{
wprintf(L"\n\nCREATEFROMTEXT() SUCCEEDED FOR %s\n\n", strText);
// Test to get the RELPATH
VARIANT var;
VariantInit(&var);
if(FAILED(pNewObj->Get (L"__RELPATH", 0, &var, NULL, NULL)))
exit(0);
BSTR strXML = NULL;
if(SUCCEEDED(hr = pSrc->GetText(0, pNewObj, WMI_OBJ_TEXT_WMI_DTD_2_0, NULL, &strXML)))
{
printf("PutClass Succeeded: Result is\n");
wprintf(strXML);
}
else
printf("GetText on new class failed!\n");
}
else
printf("\n\nCREATEFROMTEXT() FAILED with %x\n\n", hr);
// Test for ExecQuery
//BSTR strQuery = SysAllocString(L"Select GroupName, Name, UserName from Win32_ProgramGroup");
BSTR strQuery = SysAllocString(L"Select * from Win32_ProgramGroup");
BSTR strQueryLang = SysAllocString(L"WQL");
IEnumWbemClassObject *pEnum = NULL;
if(FAILED(hr = CoSetProxyBlanket(pConnection, RPC_C_AUTHN_DEFAULT, RPC_C_AUTHZ_DEFAULT, NULL,
RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_DEFAULT)))
{
printf("Failed to set proxy blanket\n");
exit(1);
}
if(SUCCEEDED(hr = pConnection->ExecQuery(strQueryLang, strQuery, 0, NULL, &pEnum)))
{
IWbemClassObject *pNextObject = NULL;
DWORD dwCount = 1;
while(SUCCEEDED(pEnum->Next(WBEM_INFINITE , 1, &pNextObject, &dwCount)) && dwCount == 1)
{
BSTR strText = NULL;
if(SUCCEEDED(hr = pSrc->GetText(0, pNextObject, WMI_OBJ_TEXT_WMI_DTD_2_0, pContext, &strText)))
{
printf("EXECQUERY SUCCEEDED\n");
printf("================================================\n");
wprintf(strText);
SysFreeString(strText);
}
else
printf("GetText failed with %x\n", hr);
pNextObject->Release();
}
pEnum->Release();
}
else
printf("ExecQuery failed with %x\n", hr);
}
else
printf("ConnectServer on root\\cimv2 failed with %x\n", hr);
}
}
else
printf("CoCreateInstance on Locator failed with %x\n", hr);
return 0;
}