С помощью этого метода мы можем двигаться по перечислителю хранилища.
ULONG uCount; STATSTG stat; while (lpEnum->Next(1,&stat,&uCount)==S_OK) { cout << (LPSTR)stat.pwcsName << endl; } lpEnum->Release();
Информацию о типе объекта мы получаем в структуре STATSTG. В этой структуре есть поле type, с помощью которого мы можем определить тип объекта:
if (lpEnum!=NULL) { cout << "Ok enum" << endl; ULONG uCount; STATSTG stat; while (lpEnum->Next(1,&stat,&uCount)==S_OK) { cout << (LPSTR)stat.pwcsName << endl; switch(stat.type) { case STGTY_STORAGE: cout << "Storage" << endl; break; case STGTY_STREAM: cout << "Stream" << endl; break; case STGTY_LOCKBYTES: cout << "LockBytes" << endl; break; case STGTY_PROPERTY: cout << "Property" << endl; break; default: cout << "Unknown type" << endl; } } lpEnum->Release(); }
pwcsName хранит название объекта. Вот теперь мы эти знания и применим к изучению имен в хранилище.
while (lpEnum->Next(1,&stat,&uCount)==S_OK) { char buffer[100]; wcstombs((CHAR*)&buffer,stat.pwcsName,sizeof(buffer)); cout << buffer << endl; }Вот результат.
Ok open Ok enum 1Table Macros CompObj ObjectPool WordDocument SummaryInformation DocumentSummaryInformation Press any key to continue
Вполне читаемо. А вот результат иследования Excel:
Ok open Ok enum Workbook SummaryInformation DocumentSummaryInformation Press any key to continue