- Timestamp:
- Sep 12, 2008 11:47:28 AM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/win/PerformanceWin.cpp
r12400 r12418 99 99 100 100 if (SUCCEEDED (hr = CoCreateInstance( 101 CLSID_WbemLocator, 101 CLSID_WbemLocator, 102 102 NULL, 103 103 CLSCTX_INPROC_SERVER, … … 132 132 NULL, 133 133 CLSCTX_INPROC_SERVER, 134 IID_IWbemRefresher, 134 IID_IWbemRefresher, 135 135 (void**) &mRefresher))) 136 136 { … … 141 141 // Add an enumerator to the refresher. 142 142 if (SUCCEEDED (hr = pConfig->AddEnum( 143 mNameSpace, 144 L"Win32_PerfRawData_PerfOS_Processor", 145 0, 146 NULL, 147 &mEnumProcessor, 143 mNameSpace, 144 L"Win32_PerfRawData_PerfOS_Processor", 145 0, 146 NULL, 147 &mEnumProcessor, 148 148 &mEnumProcessorID))) 149 149 { 150 150 hr = pConfig->AddEnum( 151 151 mNameSpace, 152 L"Win32_PerfRawData_PerfProc_Process", 153 0, 154 NULL, 155 &mEnumProcess, 152 L"Win32_PerfRawData_PerfProc_Process", 153 0, 154 NULL, 155 &mEnumProcess, 156 156 &mEnumProcessID); 157 157 } … … 239 239 int CollectorWin::getObjects(IWbemHiPerfEnum *mEnum, IWbemObjectAccess ***objArray, DWORD *numReturned) 240 240 { 241 HRESULT hr; 242 DWORD dwNumObjects = 0; 243 241 /* 242 * Get the number of objects. 243 * Note that the caller ASSUMES that at least one object is returned, so fail if there are none. 244 */ 244 245 *objArray = NULL; 245 246 *numReturned = 0; 246 hr = mEnum->GetObjects(0L, dwNumObjects, *objArray, numReturned); 247 248 // If the buffer was not big enough, 249 // allocate a bigger buffer and retry. 250 if (hr == WBEM_E_BUFFER_TOO_SMALL 251 && *numReturned > dwNumObjects) 252 { 253 *objArray = new IWbemObjectAccess*[*numReturned]; 254 if (NULL == *objArray) 255 { 256 Log (("Could not allocate enumerator access objects\n")); 257 return VERR_NO_MEMORY; 258 } 259 260 SecureZeroMemory(*objArray, 261 *numReturned*sizeof(IWbemObjectAccess*)); 262 dwNumObjects = *numReturned; 263 264 if (FAILED (hr = mEnum->GetObjects(0L, 265 dwNumObjects, *objArray, numReturned))) 266 { 267 delete [] objArray; 268 Log (("Failed to get objects from enumerator. HR = %x\n", hr)); 269 return VERR_INTERNAL_ERROR; 270 } 271 } 272 else if (FAILED (hr)) 273 { 274 Log (("Failed to get objects from enumerator. HR = %x\n", hr)); 247 HRESULT hr = mEnum->GetObjects(0L, 0, *objArray, numReturned); 248 if (hr != WBEM_E_BUFFER_TOO_SMALL) 249 { 250 Log (("Failed to get the object count from the enumerator. HR = %x *numReturned=%d\n", hr, *numReturned)); 251 return VERR_INTERNAL_ERROR; 252 } 253 254 /* 255 * Allocate an array with the right lenght and get the actual objects. 256 */ 257 DWORD cObjects = *numReturned; 258 *objArray = new IWbemObjectAccess*[cObjects]; 259 if (!*objArray) 260 { 261 Log (("Could not allocate enumerator access objects\n")); 262 return VERR_NO_MEMORY; 263 } 264 SecureZeroMemory(*objArray, cObjects * sizeof(IWbemObjectAccess*)); 265 hr = mEnum->GetObjects(0L, cObjects, *objArray, numReturned); 266 if (FAILED(hr) || *numReturned == 0) 267 { 268 delete [] *objArray; 269 *objArray = NULL; 270 Log (("Failed to get the objects from the enumerator. HR = %x *numReturned=%d cObjects=%d\n", hr, *numReturned, cObjects)); 275 271 return VERR_INTERNAL_ERROR; 276 272 } … … 466 462 { 467 463 MEMORYSTATUSEX mstat; 468 464 469 465 mstat.dwLength = sizeof(mstat); 470 466 if (GlobalMemoryStatusEx(&mstat))
Note:
See TracChangeset
for help on using the changeset viewer.