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

  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <stdarg.h>
  4. #include <objbase.h>
  5. #include <wbemcli.h>
  6. void FillUpContext(IWbemContext *pContext)
  7. {
  8. VARIANT vValue;
  9. // IncludeQualifiers
  10. VariantInit(&vValue);
  11. vValue.vt = VT_BOOL;
  12. vValue.boolVal = VARIANT_FALSE;
  13. pContext->SetValue(L"IncludeQualifiers", 0, &vValue);
  14. VariantClear(&vValue);
  15. // PathLevel
  16. //
  17. // pathLevelAnonymous = 0
  18. // pathLevelNamed,
  19. // pathLevelLocal,
  20. // pathLevelFull
  21. VariantInit(&vValue);
  22. vValue.vt = VT_I4;
  23. vValue.lVal = 0;
  24. pContext->SetValue(L"PathLevel", 0, &vValue);
  25. VariantClear(&vValue);
  26. // ExcludeSystemProperties
  27. VariantInit(&vValue);
  28. vValue.vt = VT_BOOL;
  29. vValue.boolVal = VARIANT_TRUE;
  30. pContext->SetValue(L"ExcludeSystemProperties", 0, &vValue);
  31. VariantClear(&vValue);
  32. }
  33. int _cdecl main(int argc, char * argv[])
  34. {
  35. if(FAILED(CoInitialize(NULL)))
  36. return 1;
  37. HRESULT hr = E_FAIL;
  38. IWbemObjectTextSrc *pSrc = NULL;
  39. IWbemLocator *pL = NULL;
  40. if(SUCCEEDED(hr = CoCreateInstance (CLSID_WbemLocator, NULL, CLSCTX_INPROC_SERVER,
  41. IID_IWbemLocator, (void**) &pL)))
  42. {
  43. // Create a context object
  44. IWbemContext *pContext = NULL;
  45. if(SUCCEEDED(hr = CoCreateInstance (CLSID_WbemContext, NULL, CLSCTX_INPROC_SERVER,
  46. IID_IWbemContext, (void**) &pContext)))
  47. {
  48. FillUpContext(pContext);
  49. IWbemServices *pConnection = NULL;
  50. BSTR strNs = SysAllocString(L"root\\cimv2");
  51. BSTR strText = NULL;
  52. if(SUCCEEDED(hr = pL->ConnectServer(strNs, NULL, NULL, NULL, 0, NULL, NULL, &pConnection)))
  53. {
  54. IWbemClassObject *pClass = NULL;
  55. //BSTR strObj = SysAllocString(L"MethCLass.KeyProp=\"abc\"");
  56. // BSTR strObj = SysAllocString(L"MethCLass");
  57. BSTR strObj = SysAllocString(L"Win32_LogicalDisk");
  58. if(SUCCEEDED(hr = CoCreateInstance (CLSID_WbemObjectTextSrc, NULL, CLSCTX_INPROC_SERVER,
  59. IID_IWbemObjectTextSrc, (void**) &pSrc)))
  60. {
  61. // Test for GetObject
  62. if(SUCCEEDED(hr = pConnection->GetObject(strObj, 0, NULL, &pClass, NULL)))
  63. {
  64. if(SUCCEEDED(hr = pSrc->GetText(0, pClass, WMI_OBJ_TEXT_CIM_DTD_2_0, pContext, &strText)))
  65. {
  66. printf("GETOBJECT SUCCEEDED\n");
  67. printf("================================================\n");
  68. wprintf(strText);
  69. }
  70. else
  71. printf("GetText failed with %x\n", hr);
  72. pClass->Release();
  73. }
  74. else
  75. printf("GetObject failed with %x\n", hr);
  76. }
  77. else
  78. printf("CoCreateInstance on WbemObjectTextSrc failed with %x\n", hr);
  79. // Test for PutClass
  80. strText = SysAllocString(
  81. L"<CLASS NAME=\"abc\"><PROPERTY NAME=\"__PATH\" TYPE=\"string\"><VALUE>\\\\CALVINIDS\\root\\DEFAULT:abc</VALUE></PROPERTY>"
  82. L"<PROPERTY NAME=\"__NAMESPACE\" TYPE=\"string\"><VALUE>root\\DEFAULT</VALUE></PROPERTY>"
  83. L"<PROPERTY NAME=\"__SERVER\" TYPE=\"string\"><VALUE>CALVINIDS</VALUE></PROPERTY><PROPERTY.ARRAY NAME=\"__DERIVATION\" TYPE=\"string\"><VALUE.ARRAY></VALUE.ARRAY></PROPERTY.ARRAY>"
  84. L"<PROPERTY NAME=\"__PROPERTY_COUNT\" TYPE=\"sint32\"><VALUE>1</VALUE></PROPERTY>"
  85. L"<PROPERTY NAME=\"__RELPATH\" TYPE=\"string\"><VALUE>abc</VALUE></PROPERTY>"
  86. L"<PROPERTY NAME=\"__DYNASTY\" TYPE=\"string\"><VALUE>abc</VALUE></PROPERTY>"
  87. L"<PROPERTY NAME=\"__SUPERCLASS\" TYPE=\"string\"></PROPERTY>"
  88. L"<PROPERTY NAME=\"__CLASS\" TYPE=\"string\"><VALUE>abc</VALUE></PROPERTY>"
  89. L"<PROPERTY NAME=\"__GENUS\" TYPE=\"sint32\"><VALUE>1</VALUE></PROPERTY>"
  90. L"<PROPERTY.ARRAY NAME=\"__SECURITY_DESCRIPTOR\" TYPE=\"uint8\"></PROPERTY.ARRAY>"
  91. L"<PROPERTY NAME=\"__TCREATED\" TYPE=\"uint64\"></PROPERTY>"
  92. L"<PROPERTY NAME=\"__TEXPIRATION\" TYPE=\"uint64\"></PROPERTY>"
  93. L"<PROPERTY NAME=\"__TMODIFIED\" TYPE=\"uint64\"></PROPERTY>"
  94. L"<PROPERTY NAME=\"ssad\" TYPE=\"string\"></PROPERTY></CLASS>");
  95. IWbemClassObject *pNewObj = NULL;
  96. /* strText = SysAllocString(L"<INSTANCE CLASSNAME=\"BLUESCREEN\">"\
  97. L"<PROPERTY NAME=\"STOPCODE\" TYPE=\"string\"><VALUE>e2</VALUE></PROPERTY>"\
  98. L"<PROPERTY.ARRAY NAME=\"IPADDRESS\" TYPE=\"string\">"\
  99. L"<VALUE.ARRAY>"\
  100. L"<VALUE>\"192.168.0.10\"</VALUE>"\
  101. L"</VALUE.ARRAY>"\
  102. L"</PROPERTY.ARRAY>"\
  103. L"</INSTANCE>");*/
  104. // strText = SysAllocString(L"<CLASS NAME='test'><PROPERTY></PROPERTY></CLASS>");
  105. if(SUCCEEDED(hr = pSrc->CreateFromText(0, strText, WMI_OBJ_TEXT_CIM_DTD_2_0, NULL, &pNewObj)))
  106. {
  107. wprintf(L"\n\nCREATEFROMTEXT() SUCCEEDED FOR %s\n\n", strText);
  108. // Test to get the RELPATH
  109. VARIANT var;
  110. VariantInit(&var);
  111. if(FAILED(pNewObj->Get (L"__RELPATH", 0, &var, NULL, NULL)))
  112. exit(0);
  113. BSTR strXML = NULL;
  114. if(SUCCEEDED(hr = pSrc->GetText(0, pNewObj, WMI_OBJ_TEXT_WMI_DTD_2_0, NULL, &strXML)))
  115. {
  116. printf("PutClass Succeeded: Result is\n");
  117. wprintf(strXML);
  118. }
  119. else
  120. printf("GetText on new class failed!\n");
  121. }
  122. else
  123. printf("\n\nCREATEFROMTEXT() FAILED with %x\n\n", hr);
  124. // Test for ExecQuery
  125. //BSTR strQuery = SysAllocString(L"Select GroupName, Name, UserName from Win32_ProgramGroup");
  126. BSTR strQuery = SysAllocString(L"Select * from Win32_ProgramGroup");
  127. BSTR strQueryLang = SysAllocString(L"WQL");
  128. IEnumWbemClassObject *pEnum = NULL;
  129. if(FAILED(hr = CoSetProxyBlanket(pConnection, RPC_C_AUTHN_DEFAULT, RPC_C_AUTHZ_DEFAULT, NULL,
  130. RPC_C_AUTHN_LEVEL_CONNECT, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_DEFAULT)))
  131. {
  132. printf("Failed to set proxy blanket\n");
  133. exit(1);
  134. }
  135. if(SUCCEEDED(hr = pConnection->ExecQuery(strQueryLang, strQuery, 0, NULL, &pEnum)))
  136. {
  137. IWbemClassObject *pNextObject = NULL;
  138. DWORD dwCount = 1;
  139. while(SUCCEEDED(pEnum->Next(WBEM_INFINITE , 1, &pNextObject, &dwCount)) && dwCount == 1)
  140. {
  141. BSTR strText = NULL;
  142. if(SUCCEEDED(hr = pSrc->GetText(0, pNextObject, WMI_OBJ_TEXT_WMI_DTD_2_0, pContext, &strText)))
  143. {
  144. printf("EXECQUERY SUCCEEDED\n");
  145. printf("================================================\n");
  146. wprintf(strText);
  147. SysFreeString(strText);
  148. }
  149. else
  150. printf("GetText failed with %x\n", hr);
  151. pNextObject->Release();
  152. }
  153. pEnum->Release();
  154. }
  155. else
  156. printf("ExecQuery failed with %x\n", hr);
  157. }
  158. else
  159. printf("ConnectServer on root\\cimv2 failed with %x\n", hr);
  160. }
  161. }
  162. else
  163. printf("CoCreateInstance on Locator failed with %x\n", hr);
  164. return 0;
  165. }