[Windows Phone 7 Development and Hacking] shinichi_wtn:
[XAP] SMSBackup V0.9, Backup & Export SMS/MSN/Facebook Messages [Updated 2012-05-19]

[Introduction]

Thunder_ in XDA have found that windows phone itself has a backup mechanism, it may backup messages on a regular basis, and store it at "\Application Data\Microsoft\Outlook\BackupVols\CommsBackup.xml" (see this link), so we can take the file, extract it and then we get our messages. Before version 0.7, the app automatically copy the "CommsBackup.xml" to IsolateStorage and extract them to readable sms.

Since CommsBackup.xml is generated by the system, we can't controll it. We often get only part of our messages because CommsBackup.xml doesn't contain newest ones.

The sms/msn(also many other datas) in Windows Phone actually stored at "\Application Data\Microsoft\Outlook\Stores\DeviceStore\store.vol". It is an EDB database. We can use native EDB API to explore and extract it. From Version 0.7, the app use this way to extract our messages and will never rely on CommsBackup.xml anymore:)

[Compatibility]

The app should be compatible with devices supported by WP7 Root Tools(need to mark the app as Trusted)

Also support fully-unlocked phones

[Features]

1. Automatically extract messages in store.vol, can sort messages by conversation or by sending time, can filter messages by contact, start/end date and keyword.

2. Export messages in txt/xml/csv format to IsolateStorage or SkyDrive.

If you export messages to IsolateStorage, you can use any IsolateStorage tool to download them to your computer.(The ID of this app is 09125ea9-95de-469a-aedc-22e35389ab0a);

If you export messages to SkyDrive, they will be uploaded to your SMS folder in SkyDrive(The folder is private, thus "just me")

3. Backup and restore "store.vol" and "PimIndex.vol", you can backup these two files before you flashing ROM and restore it later. This will keep your messages and contacts remain the same.(This feature is for professional users only)

[Versions History]

V0.9

1. Reduce memory usage(tested with 100,000 messages)

2. Speed up message importing process(faster than previous versions)

3. Add csv export option

4. Facebook messages will show Facebook friend's name(not the ID number in v0.8)

5. Switch backup mode(SMS or MSN) in Setting page.

V0.8

1. Add feature to backup MSN messages. You can switch backup mode(SMS or MSN) in the menu bar

2. Change UI of message list, looks more Metro now.

3. Improve contact identify algorithm.

4. Optimize the compatibility with WP7 Root Tools.

V0.7

1. Extract sms from store.vol directly, now you can backup and export all short messages and will never rely on CommsBackup.xml.

2. Optimize for fully-unlocked ROMs. If your phone is fully-unlocked, the app read store.vol directly; If your phone is interop-unlocked but not fully-unlocked, the app will copy store.vol to IsolateStorage and then read store.vol(because directly mount store.vol will cause Access Denied exception)

3. Add more setting options and remove exit confirm.

V0.6

1. Add support to backup and restore both store.vol and PimIndex.vol.

2. Increase max waiting time for file operation to 15 seconds(older version is 6 seconds). This may help those who have very big CommsBackup.xml or store.vol(>10MB)

3. In order to find how WP store contact's index in PimIndex.vol, I add a test feature(Click "test" in the menu bar) and need your feedbacks. Thanks!

V0.5

1. Add feature to export filtered messages. You can enable this in setting page.

2. Simplify setting page, no "save" button now.

3. Fix a bug in V0.4 which may show "import error: Value Does not fall within the expected range" when the app starts.

V0.4

1. Integrated with phone's contacts. For each message, the app will show contact's name if the phone number exists in any of the contacts, otherwise it will show pure number as before.

2. Add feature to filter sms. You can filter messages by contact, begin/end date and keyword. This will allow you search sms more quickly.

3. Add feature to restore system sms database store.vol, you can restore all sms and contacts after you flashing rom

4. Fix a bug when uploading txt to SkyDrive, the text document sometimes become incomplete or even blank.

Known bugs: Under certain conditions, it may show "import error: Value Does not fall within the expected range"

V0.3

1. Add double-language support(both en-US and zh-CN)

2. Fix the bug in V0.2 that the app may crash when uploading sms to SkyDrive

Known bugs: When uploading txt to SkyDrive, the text document sometimes become incomplete or even blank

V0.2

1. Add feature to export txt format

2. Add feature to upload sms to SkyDrive(some guys think IsolateStorage is not convenient)

3. Add feature to Backup system database "store.vol"

4. Fix some bugs that do not automatically update sms

Known bugs: the app may crash when uploading sms to SkyDrive

[Tutorial - How to backup and restore your sms]

The sms and contacts information(also many other datas) actually stored at "\Application Data\Microsoft\Outlook\Stores\DeviceStore\store.vol". To backup and restore this file will keep our text messages remain the same. Also, there is a file in the same folder named PimIndex.vol which contains contacts' indexes. WP use it to search contacts. So you must also backup and restore this file.

Below is the methods:

1. Open SMSBackup app(version>=0.6), go to "Export & Backup" page, navigate to "Backup", there are two buttons for backup and two buttons for restore.

2. Click "Backup store.vol" button to backup "store.vol", then the file will be copied to "BackupVols/store.vol" in IsolateStorage, you can use any IsolateStorage tool to download it to your computer(the same with PimIndex.vol).

3. When you need to restore sms and contacts(for example, after flashing a new ROM), you find the store.vol and PimIndex.vol you have already backup in your computer, use IsolateStorage tool to upload the two files to BackupVols folder.

4. Open SMSBackup app and navigate to the same page in step 1. Click "Restore store.vol" button, then click "Restore PimIndex.vol". When both have executed. Restart your phone immediately.

Important Note(Updated 25/2/2012): If you flash a new ROM, please add/sync live account first and then restore store.vol and PimIndex.vol; After restoring, sync again. If you failed in this way, you can restore store.vol and PimIndex.vol first and then add/sync live account. Since we do not know how WP manage accounts and other infos, so different problems may happen after restoring. Feedbacks and suggestions on restoring feature are welcome.

Important Note: the restore feature in version 0.5 is not perfect. It can restore all text messages and contacts successfully. But you may encounter the problem with searching contacts or wrong profile pictures in the People Hub. Thanks to the feedbacks by kahiro, 2new, AshleyT. The reason is that we haven't backup and restore PimIndex.vol. Now I'm researching on how WP store contact's index. I think we can modify this file to add indexes by ourselves. every contact is a 12 bytes in PimIndex.vol. I don't know what it means. If you can help me, please open SMSBackup V0.6, Click "test" in the menu bar to navigate to a new page, then click "Get Contact Index Format" button and reply the format string it shows(for example 01-00-00-00-02-00-07-00-8E-00-00-00). Thanks!

There are some users say the app may crash when login or upload to SkyDrive while some others do not have this problem. I use Microsoft Live SDK to connect to SkyDrive, I do not know if the SDK have some compatibility issues. I'll continue to find if there is anything wrong. Thanks for your feedbacks.

At last, thanks to Thunder__ who find the CommsBackup.xml file and endeffekt who find the store.vol file (see http://xdaforums.com/showthread.php?t=1072796); Thanks to the DiagProvXML app, I use the COM libraries to copy native files in early versions. Thanks Heathcliff74's wonderful guide on native code. Thanks to GoodDayToDie, he gave me good suggestions and idea.

Early versions download stats

V0.3 - 1897 views

V0.4 - 830 views

V0.5 - 1922 views

V0.6 - 1322 views