diff --git a/RecentActivity/build.xml b/RecentActivity/build.xml
index af346f58e7..18b655e7ce 100644
--- a/RecentActivity/build.xml
+++ b/RecentActivity/build.xml
@@ -19,6 +19,9 @@
+
+
+
diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties
index 1750a4287c..5122eca455 100644
--- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties
+++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/Bundle.properties
@@ -105,3 +105,5 @@ SearchEngineURLQueryAnalyzer.toString=Name\: {0}\n\
SearchEngineURLQueryAnalyzer.parentModuleName.noSpace=RecentActivity
SearchEngineURLQueryAnalyzer.parentModuleName=Recent Activity
UsbDeviceIdMapper.parseAndLookup.text=Product\: {0}
+ExtractEdge.moduleName=Microsoft Edge
+ExtractEdge.errMsg.unableFindESEViewer=Unable to find ESEDatabaseViewer
diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java
new file mode 100755
index 0000000000..39df34a8c4
--- /dev/null
+++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/ExtractEdge.java
@@ -0,0 +1,217 @@
+/*
+ *
+ * Autopsy Forensic Browser
+ *
+ * Copyright 2019 Basis Technology Corp.
+ *
+ * Copyright 2012 42six Solutions.
+ * Contact: aebadirad 42six com
+ * Project Contact/Architect: carrier sleuthkit org
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.sleuthkit.autopsy.recentactivity;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import org.openide.modules.InstalledFileLocator;
+import org.openide.util.NbBundle;
+import org.sleuthkit.autopsy.casemodule.Case;
+import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
+import org.sleuthkit.autopsy.coreutils.ExecUtil;
+import org.sleuthkit.autopsy.coreutils.Logger;
+import org.sleuthkit.autopsy.datamodel.ContentUtils;
+import org.sleuthkit.autopsy.ingest.DataSourceIngestModuleProcessTerminator;
+import org.sleuthkit.autopsy.ingest.IngestJobContext;
+import org.sleuthkit.autopsy.ingest.IngestServices;
+import org.sleuthkit.datamodel.AbstractFile;
+import org.sleuthkit.datamodel.Content;
+import org.sleuthkit.datamodel.TskCoreException;
+
+/**
+ *
+ * @author kelly
+ */
+public class ExtractEdge extends Extract{
+
+ private static final Logger logger = Logger.getLogger(ExtractIE.class.getName());
+ private final IngestServices services = IngestServices.getInstance();
+ private final String moduleTempResultsDir;
+ private Content dataSource;
+ private IngestJobContext context;
+
+ private static String ESE_TOOL_NAME = "ESEDatabaseView.exe";
+ private static File ESE_TOOL_FILE;
+ private static String EDGE_WEBCACHE_NAME = "WebCacheV01.dat";
+ private static String EDGE = "Edge";
+
+ ExtractEdge() throws NoCurrentCaseException{
+ moduleName = NbBundle.getMessage(Chrome.class, "ExtractEdge.moduleName");
+ moduleTempResultsDir = RAImageIngestModule.getRATempPath(Case.getCurrentCaseThrows(), EDGE) + File.separator + "results";
+ }
+
+ @Override
+ void process(Content dataSource, IngestJobContext context) {
+ this.dataSource = dataSource;
+ this.context = context;
+ dataFound = false;
+
+ Path path = Paths.get("ESEDatabaseView", ESE_TOOL_NAME);
+ ESE_TOOL_FILE = InstalledFileLocator.getDefault().locate(path.toString(), ExtractEdge.class.getPackage().getName(), false); //NON-NLS
+ if (ESE_TOOL_FILE == null) {
+ this.addErrorMessage(
+ NbBundle.getMessage(this.getClass(), "ExtractEdge.errMsg.unableFindESEViewer", this.getName()));
+ logger.log(Level.SEVERE, "Error finding ESEDatabaseViewer program "); //NON-NLS
+ }
+
+ // get WebCacheV01.dat files
+ org.sleuthkit.autopsy.casemodule.services.FileManager fileManager = currentCase.getServices().getFileManager();
+ List webCachFiles;
+ try {
+ webCachFiles = fileManager.findFiles(dataSource, EDGE_WEBCACHE_NAME); //NON-NLS
+ } catch (TskCoreException ex) {
+ this.addErrorMessage(NbBundle.getMessage(this.getClass(), "ExtractIE.getHistory.errMsg.errGettingHistFiles",
+ this.getName()));
+ logger.log(Level.WARNING, "Error fetching 'index.data' files for Internet Explorer history."); //NON-NLS
+ return;
+ }
+
+ if (webCachFiles.isEmpty()) {
+ String msg = NbBundle.getMessage(this.getClass(), "ExtractIE.getHistory.errMsg.noHistFiles");
+ logger.log(Level.INFO, msg);
+ return;
+ }
+
+ dataFound = true;
+
+ File resultsDir = new File(moduleTempResultsDir);
+ resultsDir.mkdirs();
+
+ String temps;
+ String indexFileName;
+ for(AbstractFile indexFile : webCachFiles) {
+
+ //Run the dumper
+ indexFileName = "WebCacheV01" + Integer.toString((int) indexFile.getId()) + ".dat";
+ temps = RAImageIngestModule.getRATempPath(currentCase, EDGE) + File.separator + indexFileName; //NON-NLS
+ File datFile = new File(temps);
+ if (context.dataSourceIngestIsCancelled()) {
+ break;
+ }
+ try {
+ ContentUtils.writeToFile(indexFile, datFile, context::dataSourceIngestIsCancelled);
+ } catch (IOException e) {
+ logger.log(Level.WARNING, "Error while trying to write index.dat file " + datFile.getAbsolutePath(), e); //NON-NLS
+ this.addErrorMessage(
+ NbBundle.getMessage(this.getClass(), "ExtractIE.getHistory.errMsg.errWriteFile", this.getName(),
+ datFile.getAbsolutePath()));
+ continue;
+ }
+
+ executeDumper(path.toAbsolutePath().toString(), datFile.getAbsolutePath(), moduleTempResultsDir);
+
+ this.getHistory();
+ this.getCookie(); // Not implemented yet
+ this.getDownload(); // Not implemented yet
+
+ // cleam up the temp files
+ }
+
+ // Bookmarks come from a different file
+ this.getBookmark();
+ }
+
+ private boolean executeDumper(String dumperPath, String inputFile, String outputDir){
+ final String outputFileFullPath = moduleTempResultsDir + File.separator + inputFile;
+ final String errFileFullPath = moduleTempResultsDir + File.separator + inputFile + ".err"; //NON-NLS
+ logger.log(Level.INFO, "Writing ESEDatabaseViewer results to: {0}", outputFileFullPath); //NON-NLS
+
+ List commandLine = new ArrayList<>();
+ commandLine.add(dumperPath);
+ commandLine.add("/table");
+ commandLine.add(inputFile);
+ commandLine.add("/scomma");
+ commandLine.add(outputDir + "\\webcache_*.csv");
+
+ ProcessBuilder processBuilder = new ProcessBuilder(commandLine);
+ processBuilder.redirectOutput(new File(outputFileFullPath));
+ processBuilder.redirectError(new File(errFileFullPath));
+
+ String str = processBuilder.command().toString();
+
+ int result;
+ try{
+ result = ExecUtil.execute(processBuilder, new DataSourceIngestModuleProcessTerminator(context));
+ }catch(IOException ex){
+
+ }
+
+ return false;
+ }
+
+ private void createWebCachTempFiles(){
+
+ }
+
+ private void cleanupWebCacheTempFiles(){
+
+ }
+
+ private boolean executeESEDumper(String eseToolFilePath, String eseFilPath, String outputFileName){
+ final String outputFileFullPath = moduleTempResultsDir + File.separator + outputFileName;
+ final String errFileFullPath = moduleTempResultsDir + File.separator + outputFileName + ".err";
+
+ logger.log(Level.INFO, "Writing ESEDatabaseViewer results to: {0}", outputFileFullPath); //NON-NLS
+ List commandLine = new ArrayList<>();
+
+
+ ProcessBuilder processBuilder = new ProcessBuilder(commandLine);
+ processBuilder.redirectOutput(new File(outputFileFullPath));
+ processBuilder.redirectError(new File(errFileFullPath));
+
+ return false;
+ }
+
+ /**
+ * Query for history databases and add artifacts
+ */
+ private void getHistory() {
+
+ }
+
+ /**
+ * Search for bookmark files and make artifacts.
+ */
+ private void getBookmark() {
+
+ }
+
+ /**
+ * Queries for cookie files and adds artifacts
+ */
+ private void getCookie() {
+
+ }
+
+ /**
+ * Queries for download files and adds artifacts
+ */
+ private void getDownload() {
+
+ }
+}
diff --git a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/RAImageIngestModule.java b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/RAImageIngestModule.java
index 5f1c31664a..7e959660f4 100644
--- a/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/RAImageIngestModule.java
+++ b/RecentActivity/src/org/sleuthkit/autopsy/recentactivity/RAImageIngestModule.java
@@ -59,8 +59,10 @@ public final class RAImageIngestModule implements DataSourceIngestModule {
this.context = context;
Extract iexplore;
+ Extract edge;
try {
iexplore = new ExtractIE();
+ edge = new ExtractEdge();
} catch (NoCurrentCaseException ex) {
throw new IngestModuleException(ex.getMessage(), ex);
}
@@ -76,6 +78,7 @@ public final class RAImageIngestModule implements DataSourceIngestModule {
extractors.add(chrome);
extractors.add(firefox);
extractors.add(iexplore);
+ extractors.add(edge);
extractors.add(recentDocuments);
extractors.add(SEUQA); // this needs to run after the web browser modules
extractors.add(registry); // this should run after quicker modules like the browser modules and needs to run before the DataSourceUsageAnalyzer
@@ -85,6 +88,7 @@ public final class RAImageIngestModule implements DataSourceIngestModule {
browserExtractors.add(chrome);
browserExtractors.add(firefox);
browserExtractors.add(iexplore);
+ browserExtractors.add(edge);
for (Extract extractor : extractors) {
extractor.init();
diff --git a/thirdparty/ESEDatabaseView/ESEDatabaseView.cfg b/thirdparty/ESEDatabaseView/ESEDatabaseView.cfg
new file mode 100755
index 0000000000..c0ebf42833
--- /dev/null
+++ b/thirdparty/ESEDatabaseView/ESEDatabaseView.cfg
@@ -0,0 +1,33 @@
+[General]
+AutoSizeColumnsOnTableChange=1
+MarkOddEvenRows=0
+ShowGridLines=0
+SaveFilterIndex=0
+ShowInfoTip=1
+AutoDetectDateTime=1
+ConvertGMTToLocalTime=0
+BinaryURLAsString=0
+DetectBinaryUTF16=0
+DetectBinaryAscii=0
+SaveFileEncoeding=0
+AlignNumbersToRight=0
+UseQuickFilter=0
+QuickFilterString=
+QuickFilterColumnsMode=1
+QuickFilterFindMode=1
+QuickFilterShowHide=1
+TrayIcon=0
+WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 22 02 00 00 9D FC FF FF 2A 07 00 00 4A FF FF FF
+Columns=
+Sort=0
+[RecentFiles]
+0=
+1=
+2=
+3=
+4=
+5=
+6=
+7=
+8=
+9=
diff --git a/thirdparty/ESEDatabaseView/ESEDatabaseView.chm b/thirdparty/ESEDatabaseView/ESEDatabaseView.chm
new file mode 100755
index 0000000000..b4dc3a33a4
Binary files /dev/null and b/thirdparty/ESEDatabaseView/ESEDatabaseView.chm differ
diff --git a/thirdparty/ESEDatabaseView/ESEDatabaseView.exe b/thirdparty/ESEDatabaseView/ESEDatabaseView.exe
new file mode 100755
index 0000000000..17cc8299ae
Binary files /dev/null and b/thirdparty/ESEDatabaseView/ESEDatabaseView.exe differ
diff --git a/thirdparty/ESEDatabaseView/readme.txt b/thirdparty/ESEDatabaseView/readme.txt
new file mode 100755
index 0000000000..40baf7e2a1
--- /dev/null
+++ b/thirdparty/ESEDatabaseView/readme.txt
@@ -0,0 +1,392 @@
+
+
+
+ESEDatabaseView v1.62
+Copyright (c) 2013 - 2018 Nir Sofer
+Web site: http://www.nirsoft.net
+
+
+
+Description
+===========
+
+ESEDatabaseView is a simple utility that reads and displays the data
+stored inside Extensible Storage Engine (ESE) database (Also known as
+'Jet Blue' or .edb file). It displays a list of all tables available in
+the opened database file, allows you to choose the desired table to view,
+and then when you choose a table, it displays all records found in the
+selected table. ESEDatabaseView also allows you to easily choose one or
+more records, and then export them into
+comma-delimited/tab-delimited/html/xml file, or copy the records to the
+clipboard (Ctrl+C) and then paste them into Excel or other spreadsheet
+application.
+
+
+
+System Requirements
+===================
+
+This utility works on any version of Windows, starting from Windows 2000
+and up to Windows 10. Both 32-bit and 64-bit systems are supported.
+esent.dll (The dll file of Extensible Storage Engine) is not required to
+read the database.
+
+
+
+Versions History
+================
+
+
+* Version 1.62:
+ o Fixed to sort date/time columns properly.
+
+* Version 1.61:
+ o Added 'Run As Administrator' option (Ctrl+F11).
+
+* Version 1.60:
+ o Fixed bug: On some tables ESEDatabaseView failed to read properly
+ some of the fields.
+ o Added 'Detect Ascii Strings In Binary Data' option. When it's
+ turned on, ESEDatabaseView displays binary data as string if it
+ detects that the binary data is Ascii string. This option is useful
+ for cookies names and values (CookieEntryEx_XX tables) in the
+ database of MS-Edge browser (WebCacheV01.dat).
+ o Added 'Put Icon On Tray' option.
+
+* Version 1.54:
+ o Added new quick filter options: 'Find records with all words
+ (space-delimited list)' and 'Find records with all strings
+ (comma-delimited list)'
+ o Added new quick filter combo-box: 'Show only items match the
+ filter' and 'Hide items that match the filter'.
+
+* Version 1.53:
+ o Added 'Open spartan.edb Database' which automatically opens the
+ spartan.edb database of IE11. This file stores the Favorites of IE11
+ and the full path of this file is
+ %LOCALAPPDATA%\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\Micros
+ oftEdge\User\Default\DataStore\Data\nouser1\120712-0049\DBStore\spartan
+ .edb)
+ o Made the display of binary data a little faster.
+
+* Version 1.52:
+ o Added 'Detect UTF-16 Strings In Binary Data'. When it's turned
+ on, ESEDatabaseView displays binary data as string if it detects that
+ the binary data is UTF-16 string. (e.g: 'Key' field in MSysLocales
+ table)
+ o Fixed bug: 'Copy Selected Items' worked improperly when setting
+ the 'Unicode/Ascii Save Mode' to 'Always UTF-8'.
+
+* Version 1.51:
+ o Fixed the 'Show Binary URL As String' feature to work properly
+ when the URL string starts in different position.
+
+* Version 1.50:
+ o Added 'Quick Filter' feature (View -> Use Quick Filter or
+ Ctrl+Q). When it's turned on, you can type a string in the text-box
+ added under the tables combo-box and ESEDatabaseView will instantly
+ filter the ESE database records, showing only lines that contain the
+ string you typed.
+
+* Version 1.43:
+ o Added 'Save All Items' (Shift+Ctrl+S).
+
+* Version 1.42:
+ o Fixed bug: ESEDatabaseView crashed when using the find option
+ while the last item was selected.
+
+* Version 1.41:
+ o Added 'Align Numeric Columns To Right' option.
+
+* Version 1.40:
+ o Fixed bug: On some databases/tables (like Recipient table in
+ store.vol or tbUpdateLocalizedProps table in DataStore.edb)
+ ESEDatabaseView omitted the first 4 characters of a string.
+ o Added 'Select All' and 'Deselect All' buttons to the 'Choose
+ Column' window.
+
+* Version 1.37:
+ o You can now choose the desired encoding (ANSI, UTF-8, UTF-16) to
+ save the csv/xml/text/html files. (Under the Options menu)
+
+* Version 1.36:
+ o Added 'New ESEDatabaseView Instance' under the File menu, for
+ opening a new window of ESEDatabaseView.
+
+* Version 1.35:
+ o When 'Auto Detect 64-bit Date/Time Value' option is turned on,
+ ESEDatabaseView now detects the Modified field of tbFiles table
+ inside DataStore.edb
+ o The properties window is now resizable.
+
+* Version 1.33:
+ o Fixed issue: ESEDatabaseView failed to display dates earlier than
+ 01/01/1986.
+
+* Version 1.32:
+ o Added 'Show Binary URL As String'. When it's turned on, the Urls
+ field of tbFiles table inside DataStore.edb is displayed as string.
+
+* Version 1.31:
+ o Fixed the 'Open Locked IE10/IE11 Database' option to work with
+ the latest build of Windows 10/IE11.
+
+* Version 1.30:
+ o Added option to export to JSON file.
+ o Fixed bug: ESEDatabaseView failed to load records on some
+ tables/databases.
+ o Fixed bug: ESEDatabaseView crashed when trying to load a very
+ large binary value.
+
+* Version 1.25:
+ o Fixed bug: ESEDatabaseView displayed incorrect values in
+ date/time fields.
+
+* Version 1.24:
+ o Fixed bug: ESEDatabaseView failed to remember the last
+ size/position of the main window if it was not located in the primary
+ monitor.
+
+* Version 1.23:
+ o You can now specify an empty string ("") in order to send the
+ data to stdout, for example:
+ ESEDatabaseView.exe /table "c:\temp\contacts.edb"
+ "SimpleContact-v081111-0122-1303" /scomma ""
+
+* Version 1.22:
+ o Added 'Copy Sorted Column Data' option, which copies to the
+ clipboard the text of all selected items, but only the column that is
+ currently sorted.
+
+* Version 1.21:
+ o Fixed to find the correct item when typing the string you want to
+ search into the main List View.
+
+* Version 1.20:
+ o Added option to export all tables from command-line (Each table
+ in a separated file), for example:
+ ESEDatabaseView.exe /table "C:\temp\WebCacheV01.dat" * /scomma
+ "C:\Temp\export\webcache_*.csv"
+
+* Version 1.18:
+ o Fixed to display local date/time values according to daylight
+ saving time settings.
+
+* Version 1.17:
+ o Added 'Open SoftwareDistribution Database' option, which opens
+ the database file containing information about installed Winodws
+ updates (C:\WINDOWS\SoftwareDistribution\DataStore\DataStore.edb)
+
+* Version 1.16:
+ o Added 'Clear Recent Files List' option.
+
+* Version 1.15:
+ o Added 'Open Recent File' menu, which allows you to easily open
+ the last 10 database files that you previously opened.
+
+* Version 1.10:
+ o Added 'Open Locked IE10 Database' option, which copies the locked
+ database file of Internet Explorer 10 (WebCacheV01.dat or
+ WebCacheV24.dat) into a temporary filename, and then opens the
+ temporary filename in ESEDatabaseView. You can use this option to
+ easily view the cache/history/cookies information stored by IE10.
+
+* Version 1.07:
+ o Fixed the flickering appeared while scrolling the database
+ records.
+
+* Version 1.06:
+ o Added 'Convert Date/Time From GMT To Local Time' option.
+
+* Version 1.05:
+ o Added command-line support
+
+* Version 1.00 - First release.
+
+
+
+Known Limitations
+=================
+
+
+* Currently, ESEDatabaseView is somewhat a Beta version. It generally
+ reads the ESE databases properly, but in tables with complex data
+ structure, you may experience the following problems:
+ o Some fields in some of the records may display incorrect value or
+ display empty string while it actually contains some data.
+ o ESEDatabaseView may hang/stop responding when loading a table
+ with large amount of data.
+
+
+
+
+Example for ESE Databases
+=========================
+
+ESE Databases are used by many Microsoft products. Usually, the file
+extension of ESE database is .edb, but in some products the file
+extension is different.
+Here's some examples for .edb files used by Microsoft products:
+* contacts.edb - Stores contacts information in Microsoft live products.
+* WLCalendarStore.edb - Stores calendar information in Microsoft
+ Windows Live Mail.
+* Mail.MSMessageStore - Stores messages information in Microsoft
+ Windows Live Mail.
+* WebCacheV24.dat and WebCacheV01.dat - Stores cache, history, and
+ cookies information in Internet Explorer 10.
+* Mailbox Database.edb and Public Folder Database.edb - Stores mail
+ data in Microsoft Exchange Server.
+* Windows.edb - Stores index information (for Windows search) by
+ Windows operating system.
+* DataStore.edb - Stores Windows updates information (Located under
+ C:\windows\SoftwareDistribution\DataStore )
+* spartan.edb - Stores the Favorites of Internet Explorer 10/11.
+ (Stored under
+ %LOCALAPPDATA%\Packages\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\AC\Microsof
+ tEdge\User\Default\DataStore\Data\nouser1\120712-0049)
+
+
+
+Start Using ESEDatabaseView
+===========================
+
+ESEDatabaseView doesn't require any installation process or additional
+dll files. In order to start using it, simple run the executable file
+(ESEDatabaseView.exe) and then use the 'Open ESE Database File' option
+(Ctrl+O) to open the desired .edb file. You can also drag the database
+file from Explorer window into the window of ESEDatabaseView.
+
+After opening the desired database file, the combo-box located below the
+toolbar is filled with the list of all tables found in the database. By
+default, MSysObjects table is selected and displayed in the main window
+of ESEDatabaseView. MSysObjects is a system table available in all ESE
+databases which provides the list of all tables and fields stored in the
+database.
+In order to view the content of another table, simply choose the desired
+table in the combo-box located below the toolbar.
+
+By default, the table is sorted according to the first column, but you
+can sort by another field, simply by clicking the desired column header.
+The sorting is made according to the type of the field, so... for
+example, if the field is an integer value, then ESEDatabaseView will use
+a numeric comparison in order to sort the column properly.
+
+You can select one or more records (or select all records with Ctrl+A)
+and then export them into text/csv/tab-delimited/html/xml file, by using
+the 'Save Selected Items' option. You can also copy the selected records
+into the clipboard (Ctrl+C) and then paste them (Ctrl+V) into Excel or
+other spreadsheet application.
+
+
+
+Command-Line Options
+====================
+
+
+
+/table
+Specifies the database and table to open. If the is "*" ,
+all tables will be exported, each table in a separated file.
+
+/stext
+Save the database table into a regular text file.
+
+/stab
+Save the database table into a tab-delimited text file.
+
+/scomma
+Save the database table into a comma-delimited text file (csv).
+
+/stabular
+Save the database table into a tabular text file.
+
+/shtml
+Save the database table into HTML file (Horizontal).
+
+/sverhtml
+Save the database table into HTML file (Vertical).
+
+/sxml
+Save the database table into XML file.
+
+/sjson
+Save the database table into JSON file.
+
+/sort
+This command-line option can be used with other save options for sorting
+by the desired column. The parameter can specify the column
+index (0 for the first column, 1 for the second column, and so on) or the
+name of the column, like "StatusState" and "CalculatedBuddyIdentifier".
+You can specify the '~' prefix character (e.g:
+"~CalculatedBuddyIdentifier") if you want to sort in descending order.
+You can put multiple /sort in the command-line if you want to sort by
+multiple columns.
+
+Examples:
+ESEDatabaseView.exe /table "c:\temp\contacts.edb"
+"SimpleContact-v081111-0122-1303" /scomma c:\temp\1.csv
+ESEDatabaseView.exe /table "c:\files\contacts.edb"
+"SimpleContact-v081111-0777-1111" /shtml c:\files\1.html /Sort
+"CalculatedBuddyIdentifier"
+
+Example for exporting all tables: (Each table is exported into a
+separated file)
+ESEDatabaseView.exe /table "C:\temp\WebCacheV01.dat" * /scomma
+"C:\Temp\export\webcache_*.csv"
+
+The table name will replace the '*' character specified in the export
+filename. For example, if the table name is Container1, then the exported
+filename will be webcache_Container1.csv
+
+
+
+Translating ESEDatabaseView to other languages
+==============================================
+
+In order to translate ESEDatabaseView to other language, follow the
+instructions below:
+1. Run ESEDatabaseView with /savelangfile parameter:
+ ESEDatabaseView.exe /savelangfile
+ A file named ESEDatabaseView_lng.ini will be created in the folder of
+ ESEDatabaseView utility.
+2. Open the created language file in Notepad or in any other text
+ editor.
+3. Translate all string entries to the desired language. Optionally,
+ you can also add your name and/or a link to your Web site.
+ (TranslatorName and TranslatorURL values) If you add this information,
+ it'll be used in the 'About' window.
+4. After you finish the translation, Run ESEDatabaseView, and all
+ translated strings will be loaded from the language file.
+ If you want to run ESEDatabaseView without the translation, simply
+ rename the language file, or move it to another folder.
+
+
+
+License
+=======
+
+This utility is released as freeware. You are allowed to freely
+distribute this utility via floppy disk, CD-ROM, Internet, or in any
+other way, as long as you don't charge anything for this and you don't
+sell it or distribute it as a part of commercial product. If you
+distribute this utility, you must include all files in the distribution
+package, without any modification !
+
+
+
+Disclaimer
+==========
+
+The software is provided "AS IS" without any warranty, either expressed
+or implied, including, but not limited to, the implied warranties of
+merchantability and fitness for a particular purpose. The author will not
+be liable for any special, incidental, consequential or indirect damages
+due to loss of data or any other reason.
+
+
+
+Feedback
+========
+
+If you have any problem, suggestion, comment, or you found a bug in my
+utility, you can send a message to nirsofer@yahoo.com