For reading Non ole files(office 2007 files) if (NonOLEGetMetaHandler(m_bstrFileName, &clsidMetaHandler) == S_OK) { CoInitialize(NULL); // Create instance of the Metadata Handler object... hr = CoCreateInstance(clsidMetaHandler, NULL, CLSCTX_INPROC, IID_IPersistFile,(void**)&prtsf); if (SUCCEEDED(hr)) { // Ask it to load the file for parsing... hr = prtsf->Load(m_bstrFileName, (STGM_READWRITE | STGM_SHARE_EXCLUSIVE)); if (SUCCEEDED(hr)) { // If it succeeded, ask for the property set storage... hr = prtsf->QueryInterface(IID_IPropertySetStorage,(void**)&m_pPropSetStg); if (SUCCEEDED(hr)) { //ASSIGN_INTERFACE(m_pPrstFile, prtsf); // hr= m_pPropSetStg->Create(FMTID_SummaryInformation, // 0, // PROPSETFLAG_DEFAULT, // STGM_READWRITE | STGM_SHARE_EXCLUSIVE,&m_pSummaryInfoStg); hr = SetSummaryInfoStorage(); if(FAILED(hr)) { printf(" Summaryinfo storage failed w/error %08lx", hr); return hr; } hr = SetCustomInfoStorage(); if(FAILED(hr)) { printf(" Custom storage failed w/error %08lx", hr); return hr; } prtsf->Release(); } } HRESULT CFileProperties::NonOLEGetMetaHandler(LPCWSTR pwszFile, LPCLSID lpClsid) { HRESULT hret = REGDB_E_CLASSNOTREG; // Assume no handler HKEY hkeyExt, hkeyHandler = NULL; LPSTR pszExt; if ((pwszFile == NULL) || (*pwszFile == L'\0') || (lpClsid == NULL)) return E_INVALIDARG; // Get the extension for the file... pszExt = NonOLEConvertToMBCS(GetExtensionPart(pwszFile), CP_ACP); if (pszExt == NULL) return E_OUTOFMEMORY; // Now get the key that is associated with that extension... hkeyExt = GetHKCRKey("%s", pszExt); if (hkeyExt) { // Check for the handler under that ke