0
Answer

How to read store.vol file Windows phone 7

Ask a question
khue vu

khue vu

11y
1.7k
1
Hello!
I have file store.vol copy from Windows phone device(HTC HD7). I use EDB API to read it. 
My problem: I could not open store.vol file. ERROR_BAD_FORMAT. 
How can I open this file.
Thanks!!!
My code:
#include "stdafx.h"
#include "Winphone7_Lib.h"
#include "clsReadEDB.h"
#include <iosfwd>
#define EDB

extern "C"
{
#include <windbase_edb.h>
}


// clsReadEDB

IMPLEMENT_DYNAMIC(clsReadEDB, CWnd)

clsReadEDB::clsReadEDB()
{

}

void clsReadEDB::readFile(char* path)
{
	CEGUID guid; 
	CEVOLUMEOPTIONS cevo = {0}; 
	cevo.wVersion = 1; 
	CEOIDINFOEX oidInfo = {0}; 
	wchar_t buff[250]; 
	HANDLE hSes, hBD, hBDS; 
	BOOL rez; 
	rez = CeMountDBVolEx(&guid, L"store.vol", &cevo,OPEN_EXISTING); 
	if (rez == FALSE) { 
	
	} 
	DWORD dw = GetLastError();
	
	hBD = CeFindFirstDatabaseEx(&guid, 0); 
	if (hBD != INVALID_HANDLE_VALUE) 
	{ 
		oidInfo.wVersion = CEOIDINFOEX_VERSION; 
		oidInfo.wObjType = OBJTYPE_DATABASE; 
		//creare sesiune 
		hSes = CeCreateSession(&guid); 
		if (hSes == INVALID_HANDLE_VALUE) {/* error */} 
		CEOID oidBD = CeFindNextDatabaseEx(hBD, &guid); 
		while (oidBD != 0) 
		{ 
		//obtain database information 
			rez = CeOidGetInfoEx2(&guid, oidBD, &oidInfo); 
			if (rez != TRUE) {/* error */} 
			//open database 
			hBDS = CeOpenDatabaseInSession(hSes, &guid, &oidBD, 
				oidInfo.infDatabase.szDbaseName, NULL, CEDB_AUTOINCREMENT, NULL); 
			if (hBDS == INVALID_HANDLE_VALUE) {/* error */} 
			PCEPROPVAL pInreg = NULL; 
			PBYTE pBuffInreg = NULL;//memory is allocated by function 
			WORD wProp;//number of properties 
			DWORD dwLgInreg;// record lengths 
			//memory is allocatd by function 
			CEOID ceoid = CeReadRecordPropsEx(hBDS, CEDB_ALLOWREALLOC, &wProp, NULL, 
			&(LPBYTE)pBuffInreg, &dwLgInreg, NULL); 
			int k = 0; 
			while(ceoid != 0) 
			{ 
				pInreg = (PCEPROPVAL)pBuffInreg; 
				//for each field 
				for (int i = 0; i < wProp; i++) 
				{ 
					switch(LOWORD(pInreg->propid)) 
					{ 
						case CEVT_LPWSTR: 
							//process string values 
							break; 
							//integers 
						case CEVT_I2: 
						case CEVT_I4: 
						case CEVT_UI2: 
						case CEVT_UI4: 
						case CEVT_BLOB: 
						case CEVT_BOOL: 
							//process integer values 
							break; 
						case CEVT_R8:
							//process floating point values 
							break; 
						default: 
							//other types 
							break; 
					} 
					OutputDebugString(buff); 
					//next field 
					pInreg++; 
				} 
				LocalFree(pBuffInreg);

				//next record 
				ceoid = CeReadRecordPropsEx(hBDS, CEDB_ALLOWREALLOC, &wProp, NULL, 
				&(LPBYTE)pBuffInreg, &dwLgInreg, NULL); 
				k++; 
			} 
			CloseHandle(hBDS); 
			//next database 
			oidBD = CeFindNextDatabaseEx(hBD, &guid); 
		} 
		CloseHandle(hBD); 
		CloseHandle(hSes); 
	} 
	CeUnmountDBVol(&guid); 
}


clsReadEDB::~clsReadEDB()
{
}