# -*- coding: utf-8 -*-
"""Windows Registry plugin for the Microsoft Office MRU."""
import re
from dfdatetime import filetime as dfdatetime_filetime
from plaso.containers import events
from plaso.parsers import winreg_parser
from plaso.parsers.winreg_plugins import interface
[docs]
class OfficeMRUWindowsRegistryEventData(events.EventData):
"""Microsoft Office MRU Windows Registry event data.
Attributes:
key_path (str): Windows Registry key path.
last_written_time (dfdatetime.DateTimeValues): entry last written date and
time.
value_string (str): MRU value.
"""
DATA_TYPE = 'windows:registry:office_mru'
[docs]
def __init__(self):
"""Initializes event data."""
super(OfficeMRUWindowsRegistryEventData, self).__init__(
data_type=self.DATA_TYPE)
self.key_path = None
self.last_written_time = None
self.value_string = None
[docs]
class OfficeMRUListWindowsRegistryEventData(events.EventData):
"""Microsoft Office MRU list Windows Registry event data.
Attributes:
entries (str): most recently used (MRU) entries.
key_path (str): Windows Registry key path.
last_written_time (dfdatetime.DateTimeValues): entry last written date and
time.
"""
DATA_TYPE = 'windows:registry:office_mru_list'
[docs]
def __init__(self):
"""Initializes event data."""
super(OfficeMRUListWindowsRegistryEventData, self).__init__(
data_type=self.DATA_TYPE)
self.entries = None
self.key_path = None
self.last_written_time = None
[docs]
class OfficeMRUPlugin(interface.WindowsRegistryPlugin):
"""Plugin that parses Microsoft Office MRU keys."""
NAME = 'microsoft_office_mru'
DATA_FORMAT = 'Microsoft Office MRU Registry data'
FILTERS = frozenset([
interface.WindowsRegistryKeyPathFilter(
'HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\'
'Access\\File MRU'),
interface.WindowsRegistryKeyPathFilter(
'HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\'
'Access\\Place MRU'),
interface.WindowsRegistryKeyPathFilter(
'HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\'
'Excel\\File MRU'),
interface.WindowsRegistryKeyPathFilter(
'HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\'
'Excel\\Place MRU'),
interface.WindowsRegistryKeyPathFilter(
'HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\'
'PowerPoint\\File MRU'),
interface.WindowsRegistryKeyPathFilter(
'HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\'
'PowerPoint\\Place MRU'),
interface.WindowsRegistryKeyPathFilter(
'HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\'
'Word\\File MRU'),
interface.WindowsRegistryKeyPathFilter(
'HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\14.0\\'
'Word\\Place MRU')])
_RE_VALUE_NAME = re.compile(r'^Item [0-9]+$', re.I)
# The Office 12 item MRU is formatted as:
# [F00000000][T%FILETIME%]*\\%FILENAME%
# The Office 14 item MRU is formatted as:
# [F00000000][T%FILETIME%][O00000000]*%FILENAME%
_RE_VALUE_DATA = re.compile(r'\[F00000000\]\[T([0-9A-Z]+)\].*\*[\\]?(.*)')
winreg_parser.WinRegistryParser.RegisterPlugin(OfficeMRUPlugin)