from __future__ import annotations
__all__ = [
'AddressBookType',
'ADVF',
'AppointmentAuxilaryFlag',
'AppointmentColor',
'AppointmentStateFlag',
'AttachmentPermissionType',
'AttachmentType',
'BCImageAlignment',
'BCImageSource',
'BCLabelFormat',
'BCTemplateID',
'BCTextFormat',
'BodyTypes',
'BusyStatus',
'ClientIntentFlag',
'ClipboardFormat',
'Color',
'ContactAddressIndex',
'ContactLinkState',
'DeencapType',
'DevModeFields',
'DirectoryEntryType',
'DisplayType',
'DMPaperSize',
'DVAspect',
'ElectronicAddressProperties',
'EntryIDType',
'EntryIDTypeHex',
'ErrorBehavior',
'ErrorCode',
'ErrorCodeType',
'Gender',
'IconIndex',
'Importance',
'InsecureFeatures',
'LogFlags',
'MacintoshEncoding',
'MeetingObjectChange',
'MeetingRecipientType',
'MeetingType',
'MessageFormat',
'MessageType',
'NamedPropertyType',
'NoteColor',
'ODTCf',
'ODTPersist1',
'ODTPersist2',
'OORBodyFormat',
'PostalAddressID',
'Priority',
'PropertiesType',
'PropertyFlags',
'RecipientRowFlagType',
'RecipientType',
'RecurCalendarType',
'RecurDOW',
'RecurEndType',
'RecurFrequency',
'RecurMonthNthWeek',
'RecurPatternTypeSpecificWeekday',
'RecurPatternType',
'ResponseStatus',
'ResponseType',
'RetentionFlags',
'RuleActionType',
'SaveType',
'Sensitivity',
'ServerProcessingAction',
'SideEffect',
'TaskAcceptance',
'TaskHistory',
'TaskMode',
'TaskMultipleRecipients',
'TaskOwnership',
'TaskRequestType',
'TaskState',
'TaskStatus',
'TZFlag',
'WrappedType',
]
import enum
from typing import Any, Dict, Iterable, List, Set, Type, Union
[docs]class AddressBookType(enum.IntEnum):
"""
The type of object that an address book entry ID represents.
MUST be one of these or it is invalid.
"""
LOCAL_MAIL_USER = 0x000
DISTRIBUTION_LIST = 0x001
BULLETIN_BOARD_OR_PUBLIC_FOLDER = 0x002
AUTOMATED_MAILBOX = 0x003
ORGANIZATIONAL_MAILBOX = 0x004
PRIVATE_DISTRIBUTION_LIST = 0x005
REMOTE_MAIL_USER = 0x006
CONTAINER = 0x100
TEMPLATE = 0x101
ONE_OFF_USER = 0x102
SEARCH = 0x200
[docs]class ADVF(enum.IntEnum):
ADVF_NODATA = 1
ADVF_PRIMEFIRST = 2
ADVF_ONLYONCE = 4
ADVF_DATAONSTOP = 64
ADVFCACHE_NOHANDLER = 8
ADVFCACHE_FORVEBUILTIN = 16
ADVFCACHE_ONSAVE = 32
[docs]class AppointmentAuxilaryFlag(enum.IntFlag):
"""
Describes the auxilary state of the object.
* COPIED: The Calendar object was copied from another Calendar folder.
* FORCE_MEETING_RESPONSE: The client of server can require that a Meeting
Response object be sent to the organizer when a response is chosen.
* FORWARDED: The object was forwarded by the organizer or another recipient.
* REPAIR_UPDATE_MESSAGE: The meeting request is a Repair Update Message sent
from a server-side calendar repair system.
"""
COPIED = 0b1
FORCE_MEETING_RESPONSE = 0b10
FORWARDED = 0b100
REPAIR_UPDATE_MESSAGE = 0b100000
[docs]class AppointmentColor(enum.IntEnum):
NONE = 0x00000000
RED = 0x00000001
BLUE = 0x00000002
GREEN = 0x00000003
GREY = 0x00000004
ORANGE = 0x00000005
CYAN = 0x00000006
OLIVE = 0x00000007
PURPLE = 0x00000008
TEAL = 0x00000009
YELLOW = 0x0000000A
[docs]class AppointmentStateFlag(enum.IntFlag):
"""
The appointment start of the object.
* MEETING: The object is a Meeting object or meeting-related object.
* RECEIVED: The represented object was received from someone else.
* CANCELED: The Meeting object that is represented has been canceled.
"""
MEETING = 0b1
RECEIVED = 0b10
CANCELED = 0b100
[docs]class AttachmentPermissionType(enum.IntEnum):
"""
The permission type data associated with a web reference attachment.
"""
NONE = 0
VIEW = 1
EDIT = 2
[docs]class AttachmentType(enum.IntEnum):
"""
The type represented by the attachment.
* DATA: An attachment stored as plain bytes in the MSG file.
* MSG: A normally embedded MSG file.
* WEB: An attachment referencing a resource on the web.
* SIGNED: An attachment of a signed message that is *not* an MSG file.
* SIGNED_EMBEDDED: An MSG file embedded in a signed message.
* BROKEN: An attachment with a critical issue.
* UNSUPPORTED: An attachment that does not match any supported types.
* UNKNOWN: The attachment type could not be determined.
"""
DATA = 0
MSG = 1
WEB = 2
SIGNED = 3
BROKEN = 4
UNSUPPORTED = 5
SIGNED_EMBEDDED = 6
CUSTOM = 7
UNKNOWN = 0xFFFFFFFF
[docs]class BCImageAlignment(enum.IntEnum):
STRETCH = 0x00
TOP_LEFT = 0x01
TOP_CENTER = 0x02
TOP_RIGHT = 0x03
MIDDLE_LEFT = 0x04
MIDDLE_CENTER = 0x05
MIDDLE_RIGHT = 0x06
BOTTOM_LEFT = 0x07
BOTTOM_CENTER = 0x08
BOTTOM_RIGHT = 0x09
[docs]class BCImageSource(enum.IntEnum):
CONTACT_PHOTO = 0
CARD_PHOTO = 1
[docs]class BCTemplateID(enum.IntEnum):
"""
The template ID for a business card.
* IM_ALIGN_LEFT: The image area will be left aligned, stretching the full
height of the card vertically; text fields will appear to the right of
the image area.
* IM_ALIGN_RIGHT: The image area will be right aligned, stretching the full
height of the card vertically; text fields will appear to the left of
the image area.
* IM_ALIGN_TOP: The image area will be aligned to the top, stretching the
full width of the card horizontally; text fields will appear under the
image area.
* IM_ALIGN_BOTTOM: The image area will be aligned to the bottom, stretching
the full width of the card horizontally; text fields will appear above
the image area.
* NO_IMAGE: No image area is included in the card, only text fields are
included.
* BACKGROUND: The image area will be used as a background for the card,
stretching the full height and width of the card. Text fields are
displayed on top of the image area.
"""
IM_ALIGN_LEFT = 0x00
IM_ALIGN_RIGHT = 0x01
IM_ALIGN_TOP = 0x02
IM_ALIGN_BOTTOM = 0x03
NO_IMAGE = 0x04
BACKGROUND = 0x05
[docs]class BCTextFormat(enum.IntFlag):
"""
The alignment and formatting for the text field.
If none of the bits are set, the text field is displayed as a single line,
left-aligned.
RIGHT and CENTER are mutually exclusive.
"""
DEFAULT = 0b000000
MULTILINE = 0b000001
BOLD = 0b000010
ITALIC = 0b000100
UNDERLINE = 0b001000
RIGHT = 0b010000
CENTER = 0b100000
[docs]class BodyTypes(enum.IntFlag):
"""
Enum representing the types of bodies found in a message.
This does not include bodies generated from other sources, and so is a good
detection method for generated bodies (if you check a body and it is not
null, but it is not listed in the enum, then it was generated from another
body).
This is an IntFlag enum, so to check if a body was found use the in operator
with the body you are checking. For example:
.. code-block:: python
>>> rtfFound: bool = BodyTypes.RTF in msg.detectedBodies
"""
NONE = 0b000
PLAIN = 0b001
RTF = 0b010
HTML = 0b100
ALL = 0b111
[docs]class BusyStatus(enum.IntEnum):
"""
The availability of a use for the event described by the object.
* OL_FREE: The user is available.
* OL_TENTATIVE: The user has a tentative event scheduled.
* OL_BUSY: The user is busy.
* OL_OUT_OF_OFFICE: The user is Out of Office.
* OL_WORKING_ELSEWHERE: The user is working from a location other than the
office.
"""
OL_FREE = 0x00000000
OL_TENTATIVE = 0x00000001
OL_BUSY = 0x00000002
OL_OUT_OF_OFFICE = 0x00000003
OL_WORKING_ELSEWHERE = 0x00000004
[docs]class ClientIntentFlag(enum.IntFlag):
"""
An action a user has taken on a Meeting object.
* MANAGER: The user is the owner of the Meeting object's Calendar folder. If
set, DELEGATE SHOULD NOT be set.
* DELEGATE: The user is a delegate acting on a Meeting object in a
delegator's Calendar folder. If set, MANAGER SHOULD NOT be set.
* DELETED_WITH_NO_RESPONSE: The user deleted the Meeting object with no
response sent to the organizer.
* DELETED_EXCEPTION_WITH_NO_RESPONSE: The user deleted an exception to a
recurring series with no response sent to the organizer.
* RESPONDED_TENTATIVE: The user tentatively accepted the meeting request.
* RESPONSED_ACCEPT: The user accepted the meeting request.
* RESPONDED_DECLINE: The user declined the meeting request.
* MODIFIED_START_TIME: The user modified the start time.
* MODIFIED_END_TIME: The user modified the end time.
* MODIFIED_LOCATION: The user changed the location of the meeting.
* RESPONDED_EXCEPTION_DECLINE: The user declined an exception to a recurring
series.
* CANCELED: The user canceled a meeting request.
* EXCEPTION_CANCELED: The user canceled an exception to a recurring series.
"""
MANAGER = 0b1
DELEGATE = 0b10
DELETED_WITH_NO_RESPONSE = 0b100
DELETED_EXCEPTION_WITH_NO_RESPONSE = 0b1000
RESPONDED_TENTATIVE = 0b10000
RESPONSED_ACCEPT = 0b100000
RESPONDED_DECLINE = 0b1000000
MODIFIED_START_TIME = 0b10000000
MODIFIED_END_TIME = 0b100000000
MODIFIED_LOCATION = 0b1000000000
RESPONDED_EXCEPTION_DECLINE = 0b10000000000
CANCELED = 0b100000000000
EXCEPTION_CANCELED = 0b1000000000000
[docs]class Color(enum.IntEnum):
RED = 0
BLACK = 1
[docs]class DeencapType(enum.IntEnum):
"""
Enum to specify to custom deencapsulation functions the type of data being
requested.
"""
PLAIN = 0
HTML = 1
[docs]class DevModeFields(enum.IntFlag):
DM_NUP = 0b00000000000000000000000000000010
DM_SCALE = 0b00000000000000000000000000001000
DM_PAPERWIDTH = 0b00000000000000000000000000010000
DM_PAPERLENGTH = 0b00000000000000000000000000100000
DM_PAPERSIZE = 0b00000000000000000000000001000000
DM_ORIENTATION = 0b00000000000000000000000010000000
DM_COLLATE = 0b00000000000000000000000100000000
DM_TTOPTION = 0b00000000000000000000001000000000
DM_YRESOLUTION = 0b00000000000000000000010000000000
DM_DUPLEX = 0b00000000000000000000100000000000
DM_COLOR = 0b00000000000000000001000000000000
DM_PRINTQUALITY = 0b00000000000000000010000000000000
DM_DEFAULTSOURCE = 0b00000000000000000100000000000000
DM_COPIES = 0b00000000000000001000000000000000
DM_ICMMETHOD = 0b00000000000000010000000000000000
DM_FORMNAME = 0b00000000100000000000000000000000
DM_DITHERTYPE = 0b00100000000000000000000000000000
DM_MEDIATYPE = 0b01000000000000000000000000000000
DM_ICMINTENT = 0b10000000000000000000000000000000
[docs]class DirectoryEntryType(enum.IntEnum):
UNALLOCATED = 0
UNKNOWN = 0
STORAGE = 1
STREAM = 2
ROOT_STORAGE = 5
[docs]class DisplayType(enum.IntEnum):
MAILUSER = 0x0000
DISTLIST = 0x0001
FORUM = 0x0002
AGENT = 0x0003
ORGANIZATION = 0x0004
PRIVATE_DISTLIST = 0x0005
REMOTE_MAILUSER = 0x0006
CONTAINER = 0x0100
TEMPLATE = 0x0101
ADDRESS_TEMPLATE = 0x0102
SEARCH = 0x0200
[docs]class DMPaperSize(enum.IntEnum):
"""
The size of the output media for printers.
Value *SHOULD* be one of these, however it MAY be a device-specific value
that is greater than or equal to 0x0100.
"""
DMPAPER_LETTER = 0x0001
DMPAPER_LETTERSMALL = 0x0002
DMPAPER_TABLOID = 0x0003
DMPAPER_LEDGER = 0x0004
DMPAPER_LEGAL = 0x0005
DMPAPER_STATEMENT = 0x0006
DMPAPER_EXECUTIVE = 0x0007
DMPAPER_A3 = 0x0008
DMPAPER_A4 = 0x0009
DMPAPER_A4SMALL = 0x000A
DMPAPER_A5 = 0x000B
DMPAPER_B4 = 0x000C
DMPAPER_B5 = 0x000D
DMPAPER_FOLIO = 0x000E
DMPAPER_QUARTO = 0x000F
DMPAPER_10X14 = 0x0010
DMPAPER_11X17 = 0x0011
DMPAPER_NOTE = 0x0012
DMPAPER_ENV_9 = 0x0013
DMPAPER_ENV_10 = 0x0014
DMPAPER_ENV_11 = 0x0015
DMPAPER_ENV_12 = 0x0016
DMPAPER_ENV_14 = 0x0017
DMPAPER_CSHEET = 0x0018
DMPAPER_DSHEET = 0x0019
DMPAPER_ESHEET = 0x001A
DMPAPER_ENV_DL = 0x001B
DMPAPER_ENV_C5 = 0x001C
DMPAPER_ENV_C3 = 0x001D
DMPAPER_ENV_C4 = 0x001E
DMPAPER_ENV_C6 = 0x001F
DMPAPER_ENV_C65 = 0x0020
DMPAPER_ENV_B4 = 0x0021
DMPAPER_ENV_B5 = 0x0022
DMPAPER_ENV_B6 = 0x0023
DMPAPER_ENV_ITALY = 0x0024
DMPAPER_ENV_MONARCH = 0x0025
DMPAPER_ENV_PERSONAL = 0x0026
DMPAPER_FANFOLD_US = 0x0027
DMPAPER_FANFOLD_STD_GERMAN = 0x0028
DMPAPER_FANFOLD_LGL_GERMAN = 0x0029
DMPAPER_DBL_JAPANESE_POSTCARD = 0x0045
DMPAPER_A6 = 0x0046
DMPAPER_JENV_KAKU2 = 0x0047
DMPAPER_JENV_KAKU3 = 0x0048
DMPAPER_JENV_CHOU3 = 0x0049
DMPAPER_JENV_CHOU4 = 0x004A
DMPAPER_LETTER_ROTATED = 0x004B
DMPAPER_A3_ROTATED = 0x004C
DMPAPER_A4_ROTATED = 0x004D
DMPAPER_A5_ROTATED = 0x004E
DMPAPER_B4_JIS_ROTATED = 0x004F
DMPAPER_B5_JIS_ROTATED = 0x0050
DMPAPER_JAPANESE_POSTCARD_ROTATED = 0x0051
DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED = 0x0052
DMPAPER_A6_ROTATED = 0x0053
DMPAPER_JENV_KAKU2_ROTATED = 0x0054
DMPAPER_JENV_KAKU3_ROTATED = 0x0055
DMPAPER_JENV_CHOU3_ROTATED = 0x0056
DMPAPER_JENV_CHOU4_ROTATED = 0x0057
DMPAPER_B6_JIS = 0x0058
DMPAPER_B6_JIS_ROTATED = 0x0059
DMPAPER_12X11 = 0x005A
DMPAPER_JENV_YOU4 = 0x005B
DMPAPER_JENV_YOU4_ROTATED = 0x005C
DMPAPER_P16K = 0x005D
DMPAPER_P32K = 0x005E
DMPAPER_P32KBIG = 0x005F
DMPAPER_PENV_1 = 0x0060
DMPAPER_PENV_2 = 0x0061
DMPAPER_PENV_3 = 0x0062
DMPAPER_PENV_4 = 0x0063
DMPAPER_PENV_5 = 0x0064
DMPAPER_PENV_6 = 0x0065
DMPAPER_PENV_7 = 0x0066
DMPAPER_PENV_8 = 0x0067
DMPAPER_PENV_9 = 0x0068
DMPAPER_PENV_10 = 0x0069
DMPAPER_P16K_ROTATED = 0x006A
DMPAPER_P32K_ROTATED = 0x006B
DMPAPER_P32KBIG_ROTATED = 0x006C
DMPAPER_PENV_1_ROTATED = 0x006D
DMPAPER_PENV_2_ROTATED = 0x006E
DMPAPER_PENV_3_ROTATED = 0x006F
DMPAPER_PENV_4_ROTATED = 0x0070
DMPAPER_PENV_5_ROTATED = 0x0071
DMPAPER_PENV_6_ROTATED = 0x0072
DMPAPER_PENV_7_ROTATED = 0x0073
DMPAPER_PENV_8_ROTATED = 0x0074
DMPAPER_PENV_9_ROTATED = 0x0075
DMPAPER_PENV_10_ROTATED = 0x0076
# TODO
[docs]class DVAspect(enum.IntEnum):
"""
Part of the extra data for Outlook signatures.
Different sources seem to disagree on the meanings, so I'm sticking to the
meanings in the official Microsoft documentation of the DVASPECT
enumeration.
"""
CONTENT = 1
THUMBNAIL = 2
ICON = 4
DOCPRINT = 8
[docs]class ElectronicAddressProperties(enum.IntEnum):
[docs] @classmethod
def fromIter(cls, items: Iterable[int]) -> Set[ElectronicAddressProperties]:
"""
Uses the iterable of ints to create a set of this enum.
"""
return {cls(x) for x in items}
EMAIL_1 = 0x00000000
EMAIL_2 = 0x00000001
EMAIL_3 = 0x00000002
BUSINESS_FAX = 0x00000003
HOME_FAX = 0x00000004
PRIMARY_FAX = 0x00000005
[docs]class EntryIDType(enum.Enum):
"""
Converts a UID to the type of Entry ID structure.
"""
[docs] def toHex(self):
"""
Converts an EntryIDType to it's hex equivelent.
"""
return EntryIDTypeHex[self.name]
# This is the same as the one used for permanent IDs, and the strucutre is
# near identical too. Anything that needs a PermanentEntryID will need to
# specifically ask for it instead of autogenerating it.
ADDRESS_BOOK_RECIPIENT = b'\xDC\xA7\x40\xC8\xC0\x42\x10\x1A\xB4\xB9\x08\x00\x2B\x2F\xE1\x82'
# Contact address or personal distribution list recipient.
CA_OR_PDL_RECIPIENT = b'\xFE\x42\xAA\x0A\x18\xC7\x1A\x10\xE8\x85\x0B\x65\x1C\x24\x00\x00'
# This is also used for the Store Object EntryID structure.
NNTP_NEWSGROUP_FOLDER = b'\x38\xA1\xBB\x10\x05\xE5\x10\x1A\xA1\xBB\x08\x00\x2B\x2A\x56\xC2'
ONE_OFF_RECIPIENT = b'\x81\x2B\x1F\xA4\xBE\xA3\x10\x19\x9D\x6E\x00\xDD\x01\x0F\x54\x02'
PUBLIC_MESSAGE_STORE = b'\x1A\x44\x73\x90\xAA\x66\x11\xCD\x9B\xC8\x00\xAA\x00\x2F\xC4\x5A'
# [MS-OXOCNTC] WrappedEntryId Structure.
WRAPPED = b'\xC0\x91\xAD\xD3\x51\x9D\xCF\x11\xA4\xA9\x00\xAA\x00\x47\xFA\xA4'
[docs]class EntryIDTypeHex(enum.Enum):
"""
Converts a UID to the type of Entry ID structure.
Uses a hex string instead of bytes for the value.
"""
[docs] def toRaw(self):
"""
Converts and EntryIDTypeHex to it's raw equivelent.
"""
return EntryIDType[self.name]
ADDRESS_BOOK_RECIPIENT = 'DCA740C8C042101AB4B908002B2FE182'
# Contact address or personal distribution list recipient.
CA_OR_PDL_RECIPIENT = 'FE42AA0A18C71A10E8850B651C240000'
NNTP_NEWSGROUP_FOLDER = '38A1BB1005E5101AA1BB08002B2A56C2'
ONE_OFF_RECIPIENT = '812B1FA4BEA310199D6E00DD010F5402'
PUBLIC_MESSAGE_STORE = '1A447390AA6611CD9BC800AA002FC45A'
# [MS-OXOCNTC] WrappedEntryId Structure.
WRAPPED = 'C091ADD3519DCF11A4A900AA0047FAA4'
[docs]class ErrorBehavior(enum.IntFlag):
"""
The behavior to follow when handling an error in an MSG file and it's
attachments.
Specifying an option indicates the behavior for the situation is to log a
message, if anything, instead of raising an exception. This is an int flag
enum, so the options you want will be ORed with each other.
* THROW: Throw the exception regardless of type.
* ATTACH_NOT_IMPLEMENTED: Silence the exception for NotImplementedError.
* ATTACH_BROKEN: Silence the exception for broken attachments.
* CUSTOM_ATTACH_TOLERANT: Makes custom attachments more tolerant for
data that is validated but not used.
* ATTACH_SUPPRESS_ALL: Silence the exception for NotImplementedError, for
broken attachments, and for custom attachment issues.
* RTFDE_MALFORMED: Silences errors about malformed RTF data.
* RTFDE_UNKNOWN_ERROR: Silences errors from RTFDE that are not normal.
* RTFDE: Silences all errors from RTFDE.
* STANDARDS_VIOLATION: Silences StandardViolationError where acceptable.
* OLE_DEFECT_INCORRECT: Silences defects of type DEFECT_INCORRECT that are
enabled by default. This can lead to strange bugs.
* NAMED_NAME_STREAM: Silences errors caused by invalid indexes into the
name stream for named properties. Any properties with an invalid name will
simply be dropped.
* SUPPRESS_ALL: Silences all of the above.
"""
THROW = 0b00000000
# Attachments.
ATTACH_NOT_IMPLEMENTED = 0b00000001
ATTACH_BROKEN = 0b00000010
CUSTOM_ATTACH_TOLERANT = 0b00000100
ATTACH_SUPPRESS_ALL = 0b00000111
# RTFDE.
RTFDE_MALFORMED = 0b00001000
RTFDE_UNKNOWN_ERROR = 0b00010000
RTFDE = 0b00011000
# General.
STANDARDS_VIOLATION = 0b00100000
OLE_DEFECT_INCORRECT = 0b01000000
# Named Properties.
NAMED_NAME_STREAM = 0b10000000
SUPPRESS_ALL = 0b111111111111
[docs]class ErrorCode(enum.IntEnum):
SUCCESS = 0x00000000
GENERAL_FAILURE = 0x80004005
OUT_OF_MEMORY = 0x8007000E
INVALID_PARAMETER = 0x80070057
NO_INTERFACE = 0x80004002
ACCESS_DENIED = 0x80070005
STORAGE_INVALID_FUNCTION = 0x80030001
STORAGE_ACCESS_DENIED = 0x80030005
STORAGE_INSUFFICIENT_MEMORY = 0x80030008
STORAGE_INVALID_POINTER = 0x80030009
STORAGE_READ_FAULT = 0x8003001E
STORAGE_LOCK_VIOLATION = 0x80030021
STORAGE_INVALID_PARAMETER = 0x80030057
STREAM_SIZE_ERROR = 0x80030070
STORAGE_INVALID_FLAG = 0x800300FF
STORAGE_CANNOT_SAVE = 0x80030103
NOT_SUPPORTED = 0x80040102
INVALID_CHARACTER_WIDTH = 0x80040103
STRING_TOO_LONG = 0x80040105
INVALID_FLAG = 0x80040106
INVALID_ENTRY_ID = 0x80040107
INVALID_OBJECT = 0x80040108
OBJECT_CHANGED = 0x80040109
OBJECT_DELETED = 0x8004010A
SERVER_BUSY = 0x8004010B
OUT_OF_DISK = 0x8004010D
OUT_OF_RESOURCES = 0x8004010E
NOT_FOUND = 0x8004010F
VERSION_MISMATCH = 0x80040110
LOGON_FAILED = 0x80040111
TOO_MANY_SESSIONS = 0x80040112
USER_CANCELED = 0x80040113
ABORT_FAILED = 0x80040114
NETWORK_ERROR = 0x80040115
DISK_ERROR = 0x80040116
TOO_COMPLEX = 0x80040117
INVALID_COLUMN = 0x80040118
COMPUTED_VALUE = 0x8004011A
CORRUPT_DATA = 0x8004011B
INVALID_CODEPAGE = 0x8004011E
INVALID_LOCALE = 0x8004011F
TIME_SKEW = 0x80040123
END_OF_SESSION = 0x80040200
UNKNOWN_ENTRY_ID = 0x80040201
NOT_COMPLETED = 0x80040400
TIMEOUT = 0x80040401
EMPTY_TABLE = 0x80040402
TABLE_TOO_BIG = 0x80040403
INVALID_BOOKMARK = 0x80040405
ERROR_WAIT = 0x80040500
ERROR_CANCEL = 0x80040501
NO_SUPPRESS = 0x80040602
COLLIDING_NAMES = 0x80040604
NOT_INITIALIZED = 0x80040605
NO_RECIPIENTS = 0x80040607
ALREADY_SENT = 0x80040608
HAS_FOLDERS = 0x80040609
HAS_MESSAGES = 0x8004060A
FOLDER_CYCLE = 0x8004060B
TOO_MANY_LOCKS = 0x8004060D
AMBIGUOUS_RECIPIENT = 0x80040700
SYNC_OBJECT_DELETED = 0x80040800
IGNORE_FAILURE = 0x80040801
SYNC_CONFLICT = 0x80040802
NO_PARENT_FOLDER = 0x80040803
CYCLE_DETECTED = 0x80040804
NOT_SYNCHRONIZED = 0x80040805
NAMED_PROPERTY_QUOTA = 0x80040900
NOT_IMPLEMENTED = 0x80040FFF
[docs]class ErrorCodeType(enum.IntEnum):
"""
Enum representing values for PtypErrorCode.
See "Additional Error Codes" in [MS-OXCDATA].
"""
SUCCESS = 0x00000000
ISAM_ERROR = 0x000003EA
UNKNOWN_USER = 0x000003EB
EXITING = 0x000003ED
BAD_CONFIGURATION = 0x000003EE
UNKNOWN_CODE_PAGE = 0x000003EF
SERVER_MEMORY = 0x000003F0
LOGIN_PERMISSION = 0x000003F2
DATABASE_ROLLED_BACK = 0x000003F3
DATABASE_COPIED_ERROR = 0x000003F4
AUDIT_NOT_ALLOWED = 0x000003F5
ZOMBIE_USER = 0x000003F6
UNCONVERTABLE_ACL = 0x000003F7
NO_FREE_JET_SESSIONS = 0x0000044C
DIFFERENT_JET_SESSION = 0x0000044D
FILE_REMOVE = 0x0000044F
PARAMETER_OVERFLOW = 0x00000450
BAD_VERSION = 0x00000451
TOO_MANY_COLUMNS = 0x00000452
HAVE_MORE = 0x00000453
DATABASE_ERROR = 0x00000454
INDEX_NAME_TOO_BIG = 0x00000455
UNSUPPORTED_PROPERTY = 0x00000456
MESSAGE_NOT_SAVED = 0x00000457
UNPUBLISHED_NOTIFICATION = 0x00000459
DIFFERENT_ROOT = 0x0000045B
BAD_FOLDER_NAME = 0x0000045C
ATTACHMENT_OPEN = 0x0000045D
INVALID_COLLAPSE_STATE = 0x0000045E
SKIP_MY_CHILDREN = 0x0000045F
SEARCH_FOLDER = 0x00000460
NOT_SEARCH_FOLDER = 0x00000461
FOLDER_SET_RECEIVE = 0x00000462
NO_RECEIVE_FOLDER = 0x00000463
DELETE_SUBMITTED_MESSAGE = 0x00000465
INVALID_RECIPIENTS = 0x00000467
NO_REPLICA_HERE = 0x00000468
NO_REPLICA_AVAILABLE = 0x00000469
PUBLIC_DATABASE = 0x0000046A
NOT_PUBLIC_DATABASE = 0x0000046B
RECORD_NOT_FOUND = 0x0000046C
REPLICATION_CONFLICT = 0x0000046D
FX_BUFFER_OVERRUN = 0x00000470
FX_BUFFER_EMPTY = 0x00000471
FX_PARTIAL_VALUE = 0x00000472
FX_NO_ROOM = 0x00000473
TIME_EXPIRED = 0x00000474
DESTINATION_ERROR = 0x00000475
DATABASE_NOT_INITIALIZED = 0x00000476
WRONG_SERVER = 0x00000478
BUFFER_TOO_SMALL = 0x0000047D
ATTACHMENT_RESOLUTION_REQUIRED = 0x0000047E
SERVER_PAUSED = 0x0000047F
SERVER_BUSY = 0x00000480
NO_SUCH_LOGON = 0x00000481
LOAD_LIBRARY_FAILED = 0x00000482
ALREADY_CONFIGURED = 0x00000483
NOT_CONFIGURED = 0x00000484
DATA_LOSS = 0x00000485
MAXIMUM_SEND_THREAD_EXCEEDED = 0x00000488
FX_ERROR_MARKER = 0x00000489
NO_FREE_JTABS = 0x0000048A
NOT_PRIVATE_DATABASE = 0x0000048B
ISINTEG_MDB = 0x0000048C
RECOVERY_MISMATCH = 0x0000048D
TABLE_MAY_NOT_BE_DELETED = 0x0000048E
SEARCH_FOLDER_SCOPE_VIOLATION = 0x00000490
RPC_REGISTER_IF = 0x000004B1
RPC_LISTEN = 0x000004B2
RPC_FORMAT = 0x000004B6
NO_COPY_TO = 0x000004B7
NULL_OBJECT = 0x000004B9
RPC_AUTHENTICATION = 0x000004BC
RPC_BAD_AUTHENTICATION_LEVEL = 0x000004BD
NULL_COMMENT_RESTRICTION = 0x000004BE
RULES_LOAD_ERROR = 0x000004CC
RULES_DELIVER_ERR = 0x000004CD
RULES_PARSING_ERR = 0x000004CE
RULES_CREATE_DAE = 0x000004CF
RULES_CREATE_DAM = 0x000004D0
RULES_NO_MOVE_COPY_FOLDER = 0x000004D1
RULES_NO_FOLDER_RIGHTS = 0x000004D2
MESSAGE_TOO_BIG = 0x000004D4
FORM_NOT_VALID = 0x000004D5
NOT_AUTHORIZED = 0x000004D6
DELETE_MESSAGE = 0x000004D7
BOUNCE_MESSAGE = 0x000004D8
QUOTA_EXCEEDED = 0x000004D9
MAX_SUBMISSION_EXCEEDED = 0x000004DA
MAX_ATTACHMENT_EXCEEDED = 0x000004DB
SEND_AS_DENIED = 0x000004DC
SHUTOFF_QUOTA_EXCEEDED = 0x000004DD
TOO_MANY_OPEN_OBJECTS = 0x000004DE
CLIENT_VERSION_BLOCKED = 0x000004DF
RPC_HTTP_DISALLOWED = 0x000004E0
CACHED_MODE_REQUIRED = 0x000004E1
FOLDER_NOT_CLEANED_UP = 0x000004E3
FORMAT_ERROR = 0x000004ED
NOT_EXPANDED = 0x000004F7
NOT_COLLAPSED = 0x000004F8
NO_EXPAND_LEAF_ROW = 0x000004F9
UNREGISTERED_NAME_PROP = 0x000004FA
FOLDER_DISABLED = 0x000004FB
DOMAIN_ERROR = 0x000004FC
NO_CREATE_RIGHT = 0x000004FF
PUBLIC_ROOT = 0x00000500
NO_READ_RIGHT = 0x00000501
NO_CREATE_SUBFOLDER_RIGHT = 0x00000502
MESSAGE_CYCLE = 0x00000504
NULL_DESTINATION_OBJECT = 0x00000503
TOO_MANY_RECIPS = 0x00000505
VIRUS_SCAN_IN_PROGRESS = 0x0000050A
VIRUS_DETECTED = 0x0000050B
MAILBOX_IN_TRANSIT = 0x0000050C
BACKUP_IN_PROGRESS = 0x0000050D
VIRUS_MESSAGE_DELETED = 0x0000050E
INVALID_BACKUP_SEQUENCE = 0x0000050F
INVALID_BACKUP_TYPE = 0x00000510
TOO_MANY_BACKUPS = 0x00000511
RESTORE_IN_PROGRESS = 0x00000512
DUPLICATE_OBJECT = 0x00000579
OBJECT_NOT_FOUND = 0x0000057A
FIXUP_REPLY_RULE = 0x0000057B
TEMPLATE_NOT_FOUND = 0x0000057C
RULE_EXECUTION = 0x0000057D
DS_NO_SUCH_OBJECT = 0x0000057E
ALREADY_TOMBSTONED = 0x0000057F
READ_ONLY_TRANSACTION = 0x00000596
PAUSED = 0x0000060E
NOT_PAUSED = 0x0000060F
WRONG_MAILBOX = 0x00000648
CHANGE_PASSWORD = 0x0000064C
PASSWORD_EXPIRED = 0x0000064D
INVALID_WORKSTATION = 0x0000064E
INVALID_LOGON_HOURS = 0x0000064F
ACCOUNT_DISABLED = 0x00000650
RULE_VERSION = 0x000006A4
RULE_FORMAT = 0x000006A5
RULE_SEND_AS_DENIED = 0x000006A6
NO_SERVER_SUPPORT = 0x000006B9
LOCK_TIMED_OUT = 0x000006BA
OBJECT_LOCKED = 0x000006BB
INVALID_LOCK_NAMESPACE = 0x000006BD
MESSAGE_DELETED = 0x000007D6
PROTOCOL_DISABLED = 0x000007D8
CLEARTEXT_LOGON_DISABLED = 0x000007D9
REJECTED = 0x000007EE
AMBIGUOUS_ALIAS = 0x0000089A
UNKNOWN_MAILBOX = 0x0000089B
EXPRESSION_RESERVED = 0x000008FC
EXPRESSION_PARSE_DEPTH = 0x000008FD
EXPRESSION_ARGUMENT_TYPE = 0x000008FE
EXPRESSION_SYNTAX = 0x000008FF
EXPRESSION_BAD_STRING_TOKEN = 0x00000900
EXPRESSION_BAD_COL_TOKEN = 0x00000901
EXPRESSION_TYPE_MISMATCH = 0x00000902
EXPRESSION_OPERATOR_NOT_SUPPORTED = 0x00000903
EXPRESSION_DIVIDE_BY_ZERO = 0x00000904
EXPRESSION_UNARY_ARGUMENT = 0x00000905
NOT_LOCKED = 0x00000960
CLIENT_EVENT = 0x00000961
CORRUPT_EVENT = 0x00000965
CORRUPT_WATERMARK = 0x00000966
EVENT_ERROR = 0x00000967
WATERMARK_ERROR = 0x00000968
NON_CANONICAL_ACL = 0x00000969
MAILBOX_DISABLED = 0x0000096C
RULES_FOLDER_OVER_QUOTA = 0x0000096D
ADDRESS_BOOK_UNAVAILABLE = 0x0000096E
ADDRESS_BOOK_ERROR = 0x0000096F
ADDRESS_BOOK_OBJECT_NOT_FOUND = 0x00000971
ADDRESS_BOOK_PROPERTY_ERROR = 0x00000972
NOT_ENCRYPTED = 0x00000970
RPC_SERVER_TOO_BUSY = 0x00000973
RPC_OUT_OF_MEMORY = 0x00000974
RPC_SERVER_OUT_OF_MEMORY = 0x00000975
RPC_OUT_OF_RESOURCES = 0x00000976
RPC_SERVER_UNAVAILABLE = 0x00000977
SECURE_SUBMIT_ERROR = 0x0000097A
EVENTS_DELETED = 0x0000097C
SUBSYSTEM_STOPPING = 0x0000097D
ATTENDANT_UNAVAILABLE = 0x0000097E
CI_STOPPING = 0x00000A28
FX_INVALID_STATE = 0x00000A29
FX_UNEXPECTED_MARKER = 0x00000A2A
DUPLICATE_DELIVERY = 0x00000A2B
CONDITION_VIOLATION = 0x00000A2C
MAXIMUM_CONNECTION_POOLS_EXCEEDED = 0x00000A2D
INVALID_RPC_HANDLE = 0x00000A2E
EVENT_NOT_FOUND = 0x00000A2F
PROPERTY_NOT_PROMOTED = 0x00000A30
LOW_FREE_SPACE_FOR_DATABASE = 0x00000A31
LOW_FREE_SPACE_FOR_LOGS = 0x00000A32
MAILBOX_IS_QUARANTINED = 0x00000A33
DATABASE_MOUNT_IN_PROGRESS = 0x00000A34
DATABASE_DISMOUNT_IN_PROGRESS = 0x00000A35
CONNECTIONS_OVER_BUDGET = 0x00000A36
NOT_FOUND_IN_CONTAINER = 0x00000A37
CANNOT_REMOVE = 0x00000A38
INVALID_CONNECTION_POOL = 0x00000A39
VIRUS_SCAN_GENERAL_FAILURE = 0x00000A3A
ISAM_ERROR_RFS_FAILURE = 0xFFFFFF9C
ISAM_ERROR_RFS_NOT_ARMED = 0xFFFFFF9B
ISAM_ERROR_FILE_CLOSE = 0xFFFFFF9A
ISAM_ERROR_OUT_OF_THREADS = 0xFFFFFF99
ISAM_ERROR_TOO_MANY_IO = 0xFFFFFF97
ISAM_ERROR_TASK_DROPPED = 0xFFFFFF96
ISAM_ERROR_INTERNAL_ERROR = 0xFFFFFF95
ISAM_ERROR_DATABASE_BUFFER_DEPENDENCIES_CORRUPTED = 0xFFFFFF01
ISAM_ERROR_PREVIOUS_VERSION = 0xFFFFFEBE
ISAM_ERROR_PAGE_BOUNDARY = 0xFFFFFEBD
ISAM_ERROR_KEY_BOUNDARY = 0xFFFFFEBC
ISAM_ERROR_BAD_PAGE_LINK = 0xFFFFFEB9
ISAM_ERROR_BAD_BOOKMARK = 0xFFFFFEB8
ISAM_ERROR_NT_SYSTEM_CALL_FAILED = 0xFFFFFEB2
ISAM_ERROR_BAD_PARENT_PAGE_LINK = 0xFFFFFEAE
ISAM_ERROR_SP_AVAIL_EXT_CACHE_OUT_OF_SYNC = 0xFFFFFEAC
ISAM_ERROR_SP_AVAIL_EXT_CORRUPTED = 0xFFFFFEAB
ISAM_ERROR_SP_AVAIL_EXT_CACHE_OUT_OF_MEMORY = 0xFFFFFEAA
ISAM_ERROR_SP_OWN_EXT_CORRUPTED = 0xFFFFFEA9
ISAM_ERROR_DB_TIME_CORRUPTED = 0xFFFFFEA8
ISAM_ERROR_KEY_TRUNCATED = 0xFFFFFEA6
ISAM_ERROR_KEY_TOO_BIG = 0xFFFFFE68
ISAM_ERROR_INVALID_LOGGED_OPERATION = 0xFFFFFE0C
ISAM_ERROR_LOG_FILE_CORRUPT = 0xFFFFFE0B
ISAM_ERROR_NO_BACKUP_DIRECTORY = 0xFFFFFE09
ISAM_ERROR_BACKUP_DIRECTORY_NOT_EMPTY = 0xFFFFFE08
ISAM_ERROR_BACKUP_IN_PROGRESS = 0xFFFFFE07
ISAM_ERROR_RESTORE_IN_PROGRESS = 0xFFFFFE06
ISAM_ERROR_MISSING_PREVIOUS_LOG_FILE = 0xFFFFFE03
ISAM_ERROR_LOG_WRITE_FAIL = 0xFFFFFE02
ISAM_ERROR_LOG_DISABLED_DUE_TO_RECOVERY_FAILURE = 0xFFFFFE01
ISAM_ERROR_CANNOT_LOG_DURING_RECOVERY_REDO = 0xFFFFFE00
ISAM_ERROR_LOG_GENERATION_MISMATCH = 0xFFFFFDFF
ISAM_ERROR_BAD_LOG_VERSION = 0xFFFFFDFE
ISAM_ERROR_INVALID_LOG_SEQUENCE = 0xFFFFFDFD
ISAM_ERROR_LOGGING_DISABLED = 0xFFFFFDFC
ISAM_ERROR_LOG_BUFFER_TOO_SMALL = 0xFFFFFDFB
ISAM_ERROR_LOG_SEQUENCE_END = 0xFFFFFDF9
ISAM_ERROR_NO_BACKUP = 0xFFFFFDF8
ISAM_ERROR_INVALID_BACKUP_SEQUENCE = 0xFFFFFDF7
ISAM_ERROR_BACKUP_NOT_ALLOWED_YET = 0xFFFFFDF5
ISAM_ERROR_DELETE_BACKUP_FILE_FAIL = 0xFFFFFDF4
ISAM_ERROR_MAKE_BACKUP_DIRECTORY_FAIL = 0xFFFFFDF3
ISAM_ERROR_INVALID_BACKUP = 0xFFFFFDF2
ISAM_ERROR_RECOVERED_WITH_ERRORS = 0xFFFFFDF1
ISAM_ERROR_MISSING_LOG_FILE = 0xFFFFFDF0
ISAM_ERROR_LOG_DISK_FULL = 0xFFFFFDEF
ISAM_ERROR_BAD_LOG_SIGNATURE = 0xFFFFFDEE
ISAM_ERROR_BAD_DB_SIGNATURE = 0xFFFFFDED
ISAM_ERROR_BAD_CHECKPOINT_SIGNATURE = 0xFFFFFDEC
ISAM_ERROR_CHECKPOINT_CORRUPT = 0xFFFFFDEB
ISAM_ERROR_MISSING_PATCH_PAGE = 0xFFFFFDEA
ISAM_ERROR_BAD_PATCH_PAGE = 0xFFFFFDE9
ISAM_ERROR_REDO_ABRUPT_ENDED = 0xFFFFFDE8
ISAM_ERROR_BAD_SLV_SIGNATURE = 0xFFFFFDE7
ISAM_ERROR_PATCH_FILE_MISSING = 0xFFFFFDE6
ISAM_ERROR_DATABASE_LOG_SET_MISMATCH = 0xFFFFFDE5
ISAM_ERROR_DATABASE_STREAMING_FILE_MISMATCH = 0xFFFFFDE4
ISAM_ERROR_LOG_FILE_SIZE_MISMATCH = 0xFFFFFDE3
ISAM_ERROR_CHECKPOINT_FILE_NOT_FOUND = 0xFFFFFDE2
ISAM_ERROR_REQUIRED_LOG_FILES_MISSING = 0xFFFFFDE1
ISAM_ERROR_SOFT_RECOVERY_ON_BACKUP_DATABASE = 0xFFFFFDE0
ISAM_ERROR_LOG_FILE_SIZE_MISMATCH_DATABASES_CONSISTENT = 0xFFFFFDDF
ISAM_ERROR_LOG_SECTOR_SIZE_MISMATCH = 0xFFFFFDDE
ISAM_ERROR_LOG_SECTOR_SIZE_MISMATCH_DATABASES_CONSISTENT = 0xFFFFFDDD
ISAM_ERROR_LOG_SEQUENCE_END_DATABASES_CONSISTENT = 0xFFFFFDDC
ISAM_ERROR_STREAMING_DATA_NOT_LOGGED = 0xFFFFFDDB
ISAM_ERROR_DATABASE_DIRTY_SHUTDOWN = 0xFFFFFDDA
ISAM_ERROR_CONSISTENT_TIME_MISMATCH = 0xFFFFFDD9
ISAM_ERROR_DATABASE_PATCH_FILE_MISMATCH = 0xFFFFFDD8
ISAM_ERROR_ENDING_RESTORE_LOG_TOO_LOW = 0xFFFFFDD7
ISAM_ERROR_STARTING_RESTORE_LOG_TOO_HIGH = 0xFFFFFDD6
ISAM_ERROR_GIVEN_LOG_FILE_HAS_BAD_SIGNATURE = 0xFFFFFDD5
ISAM_ERROR_GIVEN_LOG_FILE_IS_NOT_CONTIGUOUS = 0xFFFFFDD4
ISAM_ERROR_MISSING_RESTORE_LOG_FILES = 0xFFFFFDD3
ISAM_ERROR_MISSING_FULL_BACKUP = 0xFFFFFDD0
ISAM_ERROR_BAD_BACKUP_DATABASE_SIZE = 0xFFFFFDCF
ISAM_ERROR_DATABASE_ALREADY_UPGRADED = 0xFFFFFDCE
ISAM_ERROR_DATABASE_INCOMPLETE_UPGRADE = 0xFFFFFDCD
ISAM_ERROR_MISSING_CURRENT_LOG_FILES = 0xFFFFFDCB
ISAM_ERROR_DB_TIME_TOO_OLD = 0xFFFFFDCA
ISAM_ERROR_DB_TIME_TOO_NEW = 0xFFFFFDC9
ISAM_ERROR_MISSING_FILE_TO_BACKUP = 0xFFFFFDC7
ISAM_ERROR_LOG_TORN_WRITE_DURING_HARD_RESTORE = 0xFFFFFDC6
ISAM_ERROR_LOG_TORN_WRITE_DURING_HARD_RECOVERY = 0xFFFFFDC5
ISAM_ERROR_LOG_CORRUPT_DURING_HARD_RESTORE = 0xFFFFFDC3
ISAM_ERROR_LOG_CORRUPT_DURING_HARD_RECOVERY = 0xFFFFFDC2
ISAM_ERROR_MUST_DISABLE_LOGGING_FOR_DB_UPGRADE = 0xFFFFFDC1
ISAM_ERROR_BAD_RESTORE_TARGET_INSTANCE = 0xFFFFFDBF
ISAM_ERROR_RECOVERED_WITHOUT_UNDO = 0xFFFFFDBD
ISAM_ERROR_DATABASES_NOT_FROM_SAME_SNAPSHOT = 0xFFFFFDBC
ISAM_ERROR_SOFT_RECOVERY_ON_SNAPSHOT = 0xFFFFFDBB
ISAM_ERROR_COMMITTED_LOG_FILES_MISSING = 0xFFFFFDBA
ISAM_ERROR_COMMITTED_LOG_FILES_CORRUPT = 0xFFFFFDB6
ISAM_ERROR_UNICODE_TRANSLATION_BUFFER_TOO_SMALL = 0xFFFFFDA7
ISAM_ERROR_UNICODE_TRANSLATION_FAIL = 0xFFFFFDA6
ISAM_ERROR_UNICODE_NORMALIZATION_NOT_SUPPORTED = 0xFFFFFDA5
ISAM_ERROR_EXISTING_LOG_FILE_HAS_BAD_SIGNATURE = 0xFFFFFD9E
ISAM_ERROR_EXISTING_LOG_FILE_IS_NOT_CONTIGUOUS = 0xFFFFFD9D
ISAM_ERROR_LOG_READ_VERIFY_FAILURE = 0xFFFFFD9C
ISAM_ERROR_SLV_READ_VERIFY_FAILURE = 0xFFFFFD9B
ISAM_ERROR_CHECKPOINT_DEPTH_TOO_DEEP = 0xFFFFFD9A
ISAM_ERROR_RESTORE_OF_NON_BACKUP_DATABASE = 0xFFFFFD99
ISAM_ERROR_INVALID_GRBIT = 0xFFFFFC7C
ISAM_ERROR_TERM_IN_PROGRESS = 0xFFFFFC18
ISAM_ERROR_FEATURE_NOT_AVAILABLE = 0xFFFFFC17
ISAM_ERROR_INVALID_NAME = 0xFFFFFC16
ISAM_ERROR_INVALID_PARAMETER = 0xFFFFFC15
ISAM_ERROR_DATABASE_FILE_READ_ONLY = 0xFFFFFC10
ISAM_ERROR_INVALID_DATABASE_ID = 0xFFFFFC0E
ISAM_ERROR_OUT_OF_MEMORY = 0xFFFFFC0D
ISAM_ERROR_OUT_OF_DATABASE_SPACE = 0xFFFFFC0C
ISAM_ERROR_OUT_OF_CURSORS = 0xFFFFFC0B
ISAM_ERROR_OUT_OF_BUFFERS = 0xFFFFFC0A
ISAM_ERROR_TOO_MANY_INDEXES = 0xFFFFFC09
ISAM_ERROR_TOO_MANY_KEYS = 0xFFFFFC08
ISAM_ERROR_RECORD_DELETED = 0xFFFFFC07
ISAM_ERROR_READ_VERIFY_FAILURE = 0xFFFFFC06
ISAM_ERROR_PAGE_NOT_INITIALIZED = 0xFFFFFC05
ISAM_ERROR_OUT_OF_FILE_HANDLES = 0xFFFFFC04
ISAM_ERROR_DISK_IO = 0xFFFFFC02
ISAM_ERROR_INVALID_PATH = 0xFFFFFC01
ISAM_ERROR_INVALID_SYSTEM_PATH = 0xFFFFFC00
ISAM_ERROR_INVALID_LOG_DIRECTORY = 0xFFFFFBFF
ISAM_ERROR_RECORD_TOO_BIG = 0xFFFFFBFE
ISAM_ERROR_TOO_MANY_OPEN_DATABASES = 0xFFFFFBFD
ISAM_ERROR_INVALID_DATABASE = 0xFFFFFBFC
ISAM_ERROR_NOT_INITIALIZED = 0xFFFFFBFB
ISAM_ERROR_ALREADY_INITIALIZED = 0xFFFFFBFA
ISAM_ERROR_INIT_IN_PROGRESS = 0xFFFFFBF9
ISAM_ERROR_FILE_ACCESS_DENIED = 0xFFFFFBF8
ISAM_ERROR_BUFFER_TOO_SMALL = 0xFFFFFBF2
ISAM_ERROR_TOO_MANY_COLUMNS = 0xFFFFFBF0
ISAM_ERROR_CONTAINER_NOT_EMPTY = 0xFFFFFBED
ISAM_ERROR_INVALID_FILENAME = 0xFFFFFBEC
ISAM_ERROR_INVALID_BOOKMARK = 0xFFFFFBEB
ISAM_ERROR_COLUMN_IN_USE = 0xFFFFFBEA
ISAM_ERROR_INVALID_BUFFER_SIZE = 0xFFFFFBE9
ISAM_ERROR_COLUMN_NOT_UPDATABLE = 0xFFFFFBE8
ISAM_ERROR_INDEX_IN_USE = 0xFFFFFBE5
ISAM_ERROR_LINK_NOT_SUPPORTED = 0xFFFFFBE4
ISAM_ERROR_NULL_KEY_DISALLOWED = 0xFFFFFBE3
ISAM_ERROR_NOT_IN_TRANSACTION = 0xFFFFFBE2
ISAM_ERROR_TOO_MANY_ACTIVE_USERS = 0xFFFFFBDD
ISAM_ERROR_INVALID_COUNTRY = 0xFFFFFBDB
ISAM_ERROR_INVALID_LANGUAGE_ID = 0xFFFFFBDA
ISAM_ERROR_INVALID_CODE_PAGE = 0xFFFFFBD9
ISAM_ERROR_INVALID_LC_MAP_STRING_FLAGS = 0xFFFFFBD8
ISAM_ERROR_VERSION_STORE_ENTRY_TOO_BIG = 0xFFFFFBD7
ISAM_ERROR_VERSION_STORE_OUT_OF_MEMORY_AND_CLEANUP_TIMED_OUT = 0xFFFFFBD6
ISAM_ERROR_VERSION_STORE_OUT_OF_MEMORY = 0xFFFFFBD3
ISAM_ERROR_CANNOT_INDEX = 0xFFFFFBD1
ISAM_ERROR_RECORD_NOT_DELETED = 0xFFFFFBD0
ISAM_ERROR_TOO_MANY_MEMPOOL_ENTRIES = 0xFFFFFBCF
ISAM_ERROR_OUT_OF_OBJECT_I_DS = 0xFFFFFBCE
ISAM_ERROR_OUT_OF_LONG_VALUE_I_DS = 0xFFFFFBCD
ISAM_ERROR_OUT_OF_AUTOINCREMENT_VALUES = 0xFFFFFBCC
ISAM_ERROR_OUT_OF_DBTIME_VALUES = 0xFFFFFBCB
ISAM_ERROR_OUT_OF_SEQUENTIAL_INDEX_VALUES = 0xFFFFFBCA
ISAM_ERROR_RUNNING_IN_ONE_INSTANCE_MODE = 0xFFFFFBC8
ISAM_ERROR_RUNNING_IN_MULTI_INSTANCE_MODE = 0xFFFFFBC7
ISAM_ERROR_SYSTEM_PARAMS_ALREADY_SET = 0xFFFFFBC6
ISAM_ERROR_SYSTEM_PATH_IN_USE = 0xFFFFFBC5
ISAM_ERROR_LOG_FILE_PATH_IN_USE = 0xFFFFFBC4
ISAM_ERROR_TEMP_PATH_IN_USE = 0xFFFFFBC3
ISAM_ERROR_INSTANCE_NAME_IN_USE = 0xFFFFFBC2
ISAM_ERROR_INSTANCE_UNAVAILABLE = 0xFFFFFBBE
ISAM_ERROR_DATABASE_UNAVAILABLE = 0xFFFFFBBD
ISAM_ERROR_INSTANCE_UNAVAILABLE_DUE_TO_FATAL_LOG_DISK_FULL = 0xFFFFFBBC
ISAM_ERROR_OUT_OF_SESSIONS = 0xFFFFFBB3
ISAM_ERROR_WRITE_CONFLICT = 0xFFFFFBB2
ISAM_ERROR_TRANS_TOO_DEEP = 0xFFFFFBB1
ISAM_ERROR_INVALID_SESID = 0xFFFFFBB0
ISAM_ERROR_WRITE_CONFLICT_PRIMARY_INDEX = 0xFFFFFBAF
ISAM_ERROR_IN_TRANSACTION = 0xFFFFFBAC
ISAM_ERROR_ROLLBACK_REQUIRED = 0xFFFFFBAB
ISAM_ERROR_TRANS_READ_ONLY = 0xFFFFFBAA
ISAM_ERROR_SESSION_WRITE_CONFLICT = 0xFFFFFBA9
ISAM_ERROR_RECORD_TOO_BIG_FOR_BACKWARD_COMPATIBILITY = 0xFFFFFBA8
ISAM_ERROR_CANNOT_MATERIALIZE_FORWARD_ONLY_SORT = 0xFFFFFBA7
ISAM_ERROR_SESID_TABLE_ID_MISMATCH = 0xFFFFFBA6
ISAM_ERROR_INVALID_INSTANCE = 0xFFFFFBA5
ISAM_ERROR_DATABASE_DUPLICATE = 0xFFFFFB4F
ISAM_ERROR_DATABASE_IN_USE = 0xFFFFFB4E
ISAM_ERROR_DATABASE_NOT_FOUND = 0xFFFFFB4D
ISAM_ERROR_DATABASE_INVALID_NAME = 0xFFFFFB4C
ISAM_ERROR_DATABASE_INVALID_PAGES = 0xFFFFFB4B
ISAM_ERROR_DATABASE_CORRUPTED = 0xFFFFFB4A
ISAM_ERROR_DATABASE_LOCKED = 0xFFFFFB49
ISAM_ERROR_CANNOT_DISABLE_VERSIONING = 0xFFFFFB48
ISAM_ERROR_INVALID_DATABASE_VERSION = 0xFFFFFB47
ISAM_ERROR_DATABASE200_FORMAT = 0xFFFFFB46
ISAM_ERROR_DATABASE400_FORMAT = 0xFFFFFB45
ISAM_ERROR_DATABASE500_FORMAT = 0xFFFFFB44
ISAM_ERROR_PAGE_SIZE_MISMATCH = 0xFFFFFB43
ISAM_ERROR_TOO_MANY_INSTANCES = 0xFFFFFB42
ISAM_ERROR_DATABASE_SHARING_VIOLATION = 0xFFFFFB41
ISAM_ERROR_ATTACHED_DATABASE_MISMATCH = 0xFFFFFB40
ISAM_ERROR_DATABASE_INVALID_PATH = 0xFFFFFB3F
ISAM_ERROR_DATABASE_ID_IN_USE = 0xFFFFFB3E
ISAM_ERROR_FORCE_DETACH_NOT_ALLOWED = 0xFFFFFB3D
ISAM_ERROR_CATALOG_CORRUPTED = 0xFFFFFB3C
ISAM_ERROR_PARTIALLY_ATTACHED_DB = 0xFFFFFB3B
ISAM_ERROR_DATABASE_SIGN_IN_USE = 0xFFFFFB3A
ISAM_ERROR_DATABASE_CORRUPTED_NO_REPAIR = 0xFFFFFB38
ISAM_ERROR_INVALID_CREATE_DB_VERSION = 0xFFFFFB37
ISAM_ERROR_TABLE_LOCKED = 0xFFFFFAEA
ISAM_ERROR_TABLE_DUPLICATE = 0xFFFFFAE9
ISAM_ERROR_TABLE_IN_USE = 0xFFFFFAE8
ISAM_ERROR_OBJECT_NOT_FOUND = 0xFFFFFAE7
ISAM_ERROR_DENSITY_INVALID = 0xFFFFFAE5
ISAM_ERROR_TABLE_NOT_EMPTY = 0xFFFFFAE4
ISAM_ERROR_INVALID_TABLE_ID = 0xFFFFFAE2
ISAM_ERROR_TOO_MANY_OPEN_TABLES = 0xFFFFFAE1
ISAM_ERROR_ILLEGAL_OPERATION = 0xFFFFFAE0
ISAM_ERROR_TOO_MANY_OPEN_TABLES_AND_CLEANUP_TIMED_OUT = 0xFFFFFADF
ISAM_ERROR_OBJECT_DUPLICATE = 0xFFFFFADE
ISAM_ERROR_INVALID_OBJECT = 0xFFFFFADC
ISAM_ERROR_CANNOT_DELETE_TEMP_TABLE = 0xFFFFFADB
ISAM_ERROR_CANNOT_DELETE_SYSTEM_TABLE = 0xFFFFFADA
ISAM_ERROR_CANNOT_DELETE_TEMPLATE_TABLE = 0xFFFFFAD9
ISAM_ERROR_EXCLUSIVE_TABLE_LOCK_REQUIRED = 0xFFFFFAD6
ISAM_ERROR_FIXED_DDL = 0xFFFFFAD5
ISAM_ERROR_FIXED_INHERITED_DDL = 0xFFFFFAD4
ISAM_ERROR_CANNOT_NEST_DDL = 0xFFFFFAD3
ISAM_ERROR_DDL_NOT_INHERITABLE = 0xFFFFFAD2
ISAM_ERROR_INVALID_SETTINGS = 0xFFFFFAD0
ISAM_ERROR_CLIENT_REQUEST_TO_STOP_JET_SERVICE = 0xFFFFFACF
ISAM_ERROR_CANNOT_ADD_FIXED_VAR_COLUMN_TO_DERIVED_TABLE = 0xFFFFFACE
ISAM_ERROR_INDEX_CANT_BUILD = 0xFFFFFA87
ISAM_ERROR_INDEX_HAS_PRIMARY = 0xFFFFFA86
ISAM_ERROR_INDEX_DUPLICATE = 0xFFFFFA85
ISAM_ERROR_INDEX_NOT_FOUND = 0xFFFFFA84
ISAM_ERROR_INDEX_MUST_STAY = 0xFFFFFA83
ISAM_ERROR_INDEX_INVALID_DEF = 0xFFFFFA82
ISAM_ERROR_INVALID_CREATE_INDEX = 0xFFFFFA7F
ISAM_ERROR_TOO_MANY_OPEN_INDEXES = 0xFFFFFA7E
ISAM_ERROR_MULTI_VALUED_INDEX_VIOLATION = 0xFFFFFA7D
ISAM_ERROR_INDEX_BUILD_CORRUPTED = 0xFFFFFA7C
ISAM_ERROR_PRIMARY_INDEX_CORRUPTED = 0xFFFFFA7B
ISAM_ERROR_SECONDARY_INDEX_CORRUPTED = 0xFFFFFA7A
ISAM_ERROR_INVALID_INDEX_ID = 0xFFFFFA78
ISAM_ERROR_INDEX_TUPLES_SECONDARY_INDEX_ONLY = 0xFFFFFA6A
ISAM_ERROR_INDEX_TUPLES_TOO_MANY_COLUMNS = 0xFFFFFA69
ISAM_ERROR_INDEX_TUPLES_NON_UNIQUE_ONLY = 0xFFFFFA68
ISAM_ERROR_INDEX_TUPLES_TEXT_BINARY_COLUMNS_ONLY = 0xFFFFFA67
ISAM_ERROR_INDEX_TUPLES_VAR_SEG_MAC_NOT_ALLOWED = 0xFFFFFA66
ISAM_ERROR_INDEX_TUPLES_INVALID_LIMITS = 0xFFFFFA65
ISAM_ERROR_INDEX_TUPLES_CANNOT_RETRIEVE_FROM_INDEX = 0xFFFFFA64
ISAM_ERROR_INDEX_TUPLES_KEY_TOO_SMALL = 0xFFFFFA63
ISAM_ERROR_COLUMN_LONG = 0xFFFFFA23
ISAM_ERROR_COLUMN_NO_CHUNK = 0xFFFFFA22
ISAM_ERROR_COLUMN_DOES_NOT_FIT = 0xFFFFFA21
ISAM_ERROR_NULL_INVALID = 0xFFFFFA20
ISAM_ERROR_COLUMN_INDEXED = 0xFFFFFA1F
ISAM_ERROR_COLUMN_TOO_BIG = 0xFFFFFA1E
ISAM_ERROR_COLUMN_NOT_FOUND = 0xFFFFFA1D
ISAM_ERROR_COLUMN_DUPLICATE = 0xFFFFFA1C
ISAM_ERROR_MULTI_VALUED_COLUMN_MUST_BE_TAGGED = 0xFFFFFA1B
ISAM_ERROR_COLUMN_REDUNDANT = 0xFFFFFA1A
ISAM_ERROR_INVALID_COLUMN_TYPE = 0xFFFFFA19
ISAM_ERROR_TAGGED_NOT_NULL = 0xFFFFFA16
ISAM_ERROR_NO_CURRENT_INDEX = 0xFFFFFA15
ISAM_ERROR_KEY_IS_MADE = 0xFFFFFA14
ISAM_ERROR_BAD_COLUMN_ID = 0xFFFFFA13
ISAM_ERROR_BAD_ITAG_SEQUENCE = 0xFFFFFA12
ISAM_ERROR_COLUMN_IN_RELATIONSHIP = 0xFFFFFA11
ISAM_ERROR_CANNOT_BE_TAGGED = 0xFFFFFA0F
ISAM_ERROR_DEFAULT_VALUE_TOO_BIG = 0xFFFFFA0C
ISAM_ERROR_MULTI_VALUED_DUPLICATE = 0xFFFFFA0B
ISAM_ERROR_LV_CORRUPTED = 0xFFFFFA0A
ISAM_ERROR_MULTI_VALUED_DUPLICATE_AFTER_TRUNCATION = 0xFFFFFA08
ISAM_ERROR_DERIVED_COLUMN_CORRUPTION = 0xFFFFFA07
ISAM_ERROR_INVALID_PLACEHOLDER_COLUMN = 0xFFFFFA06
ISAM_ERROR_RECORD_NOT_FOUND = 0xFFFFF9BF
ISAM_ERROR_RECORD_NO_COPY = 0xFFFFF9BE
ISAM_ERROR_NO_CURRENT_RECORD = 0xFFFFF9BD
ISAM_ERROR_RECORD_PRIMARY_CHANGED = 0xFFFFF9BC
ISAM_ERROR_KEY_DUPLICATE = 0xFFFFF9BB
ISAM_ERROR_ALREADY_PREPARED = 0xFFFFF9B9
ISAM_ERROR_KEY_NOT_MADE = 0xFFFFF9B8
ISAM_ERROR_UPDATE_NOT_PREPARED = 0xFFFFF9B7
ISAM_ERROR_DATA_HAS_CHANGED = 0xFFFFF9B5
ISAM_ERROR_LANGUAGE_NOT_SUPPORTED = 0xFFFFF9AD
ISAM_ERROR_TOO_MANY_SORTS = 0xFFFFF95B
ISAM_ERROR_INVALID_ON_SORT = 0xFFFFF95A
ISAM_ERROR_TEMP_FILE_OPEN_ERROR = 0xFFFFF8F5
ISAM_ERROR_TOO_MANY_ATTACHED_DATABASES = 0xFFFFF8F3
ISAM_ERROR_DISK_FULL = 0xFFFFF8F0
ISAM_ERROR_PERMISSION_DENIED = 0xFFFFF8EF
ISAM_ERROR_FILE_NOT_FOUND = 0xFFFFF8ED
ISAM_ERROR_FILE_INVALID_TYPE = 0xFFFFF8EC
ISAM_ERROR_AFTER_INITIALIZATION = 0xFFFFF8C6
ISAM_ERROR_LOG_CORRUPTED = 0xFFFFF8C4
ISAM_ERROR_INVALID_OPERATION = 0xFFFFF88E
ISAM_ERROR_ACCESS_DENIED = 0xFFFFF88D
ISAM_ERROR_TOO_MANY_SPLITS = 0xFFFFF88B
ISAM_ERROR_SESSION_SHARING_VIOLATION = 0xFFFFF88A
ISAM_ERROR_ENTRY_POINT_NOT_FOUND = 0xFFFFF889
ISAM_ERROR_SESSION_CONTEXT_ALREADY_SET = 0xFFFFF888
ISAM_ERROR_SESSION_CONTEXT_NOT_SET_BY_THIS_THREAD = 0xFFFFF887
ISAM_ERROR_SESSION_IN_USE = 0xFFFFF886
ISAM_ERROR_RECORD_FORMAT_CONVERSION_FAILED = 0xFFFFF885
ISAM_ERROR_ONE_DATABASE_PER_SESSION = 0xFFFFF884
ISAM_ERROR_ROLLBACK_ERROR = 0xFFFFF883
ISAM_ERROR_CALLBACK_FAILED = 0xFFFFF7CB
ISAM_ERROR_CALLBACK_NOT_RESOLVED = 0xFFFFF7CA
ISAM_ERROR_OS_SNAPSHOT_INVALID_SEQUENCE = 0xFFFFF69F
ISAM_ERROR_OS_SNAPSHOT_TIME_OUT = 0xFFFFF69E
ISAM_ERROR_OS_SNAPSHOT_NOT_ALLOWED = 0xFFFFF69D
ISAM_ERROR_OS_SNAPSHOT_INVALID_SNAP_ID = 0xFFFFF69C
ISAM_ERROR_LS_CALLBACK_NOT_SPECIFIED = 0xFFFFF448
ISAM_ERROR_LS_ALREADY_SET = 0xFFFFF447
ISAM_ERROR_LS_NOT_SET = 0xFFFFF446
ISAM_ERROR_FILE_IO_SPARSE = 0xFFFFF060
ISAM_ERROR_FILE_IO_BEYOND_EOF = 0xFFFFF05F
ISAM_ERROR_FILE_COMPRESSED = 0xFFFFF05B
[docs]class Gender(enum.IntEnum):
# Seems rather binary, which is less than ideal. We are directly using the
# terms used by the documentation.
UNSPECIFIED = 0x0000
FEMALE = 0x0001
MALE = 0x0002
[docs]class IconIndex(enum.IntEnum):
[docs] @classmethod
def tryMake(cls, value: int) -> Union[IconIndex, int]:
"""
Try to make an instance, returning the value on failure.
"""
try:
return cls(value)
except ValueError:
return value
UNSPECIFIED = 0xFFFFFFFF
SINGLE_INSTANCE_APPOINTMENT = 0x00000400
RECURRING_APPOINTMENT = 0x00000401
SINGLE_INSTANCE_MEETING = 0x00000402
RECURRING_MEETING = 0x00000403
MEETING_REQUEST_UPDATE = 0x00000404
ACCEPT_MEETING_REQUEST = 0x00000405
DECLINE_MEETING_REQUEST = 0x00000406
TENTATIVELY_ACCEPT_MEETING_REQUEST = 0x00000407
MEETING_CANCELLATION = 0x00000408
MEETING_UPDATE_INFORMATIONAL = 0x00000409
FORWARD_NOTIFICATION = 0x0000040B
[docs]class Importance(enum.IntEnum):
LOW = 0
MEDIUM = 1
HIGH = 2
[docs]class InsecureFeatures(enum.IntFlag):
"""
Insecure options that can be enabled for an MSG file.
Using ALL is not recommended unless you check this list before updating to
a new version of the module, as new features may have been added. It is
also not recommended to use these on files you do not trust.
The following features are avilable:
* NONE: No insecure features are allowed (default).
* PIL_IMAGE_PARSING: Various operations requiring PIL or Pillow that will
read image data from parts of the MSG file. These operations are usually
constructing new images or are converting from one format to another.
This may expose you to security issues from those libraries.
* ALL: All of the previously listed features will be enabled for the MSG
file.
"""
NONE = 0b0000
PIL_IMAGE_PARSING = 0b0001
ALL = 0b1111
[docs]class LogFlags(enum.IntFlag):
NO_JOURNAL_ASSOCIATED_ATT = 0x00000000
HAS_JOUNRAL_ASSOCIATED_ATT = 0x40000000
[docs]class MacintoshEncoding(enum.IntEnum):
"""
The encoding to use for Macintosh-specific data attachments.
"""
BIN_HEX = 0
UUENCODE = 1
APPLE_SINGLE = 2
APPLE_DOUBLE = 3
[docs]class MeetingObjectChange(enum.IntFlag):
"""
Indicates a property that has changed on a meeting object.
* START: The start has changed.
* END: The end has changed.
* RECUR: The recurrence pattern has changed.
* LOCATION: The location has changed.
* SUBJECT: The subject has changed.
* REQUIRED_ATTENDEE: One or more required attendees were added.
* OPTIONAL_ATTENDEE: One or more optional attendees were added.
* BODY: The body was modified.
* RESPONSE: The responseRequested or replyRequested property has changed.
* ALLOW_PROPOSE: The appointmentNotAllowPropose property has changed.
"""
START = 0b1
END = 0b10
RECUR = 0b100
LOCATION = 0b1000
SUBJECT = 0b10000
REQUIRED_ATTENDEE = 0b100000
OPTIONAL_ATTENDEE = 0b1000000
BODY = 0b10000000
RESPONSE = 0b1000000000
ALLOW_PROPOSE = 0b10000000000
DEPRECATED = 0b100000000000
[docs]class MeetingRecipientType(enum.IntEnum):
ORGANIZER = 0x01
SENDABLE_REQUIRED_ATTENDEE = 0x01
SENDABLE_OPTIONAL_ATTENDEE = 0x02
SENDABLE_RESOURCE_OBJECT = 0x03
[docs]class MeetingType(enum.IntEnum):
"""
The type of Meeting Request object of Meeting Update object.
* EMPTY: Unspecified.
* REQUEST: The meeting request is the initial request.
* FULL: Attendees were added, the meeting was cancelled and the organizer is
uncancelling it, and or the start, end, or recurrance property was
changed.
* INFO: An informational update was made to the meeting and it is not one of
the conditions for FULL.
* OUT_OF_DATE: A newer Meeting Request object or MeetingUpdate object was
received after this one.
* DELEGATOR_COPY: Set on the delegator's copy when a delegate will handle
meeting-related objects.
"""
EMPTY = 0x00000000
REQUEST = 0x00000001
FULL = 0x00010000
INFO = 0x00020000
OUT_OF_DATE = 0x00080000
DELEGATOR_COPY = 0x00100000
[docs]class MessageType(enum.IntEnum):
PRIVATE_FOLDER = 0x0001
PUBLIC_FOLDER = 0x0003
MAPPED_PUBLIC_FOLDER = 0x0005
PRIVATE_MESSAGE = 0x0007
PUBLIC_MESSAGE = 0x0009
MAPPED_PUBLIC_MESSAGE = 0x000B
PUBLIC_NEWSGROUP_FOLDER = 0x000C
[docs]class NamedPropertyType(enum.IntEnum):
NUMERICAL_NAMED = 0
STRING_NAMED = 1
[docs]class NoteColor(enum.IntEnum):
BLUE = 0
GREEN = 1
PINK = 2
YELLOW = 3
WHITE = 4
[docs]class ODTCf(enum.IntEnum):
"""
Values for the ``cf`` field of the ODT structure.
"""
UNSPECIFIED = 0x0000
RICH_TEXT_FORMAT = 0x0001
TEXT_FORMAT = 0x0002
METAFILE = 0x0003
BITMAP = 0x0004
DEVICE_INDEPENDENT_BITMAP = 0x0005
HTML_FORMAT = 0x000A
UNICODE_TEXT_FORMAT = 0x0014
[docs]class ODTPersist1(enum.IntFlag):
"""
Flag values for ODTPersist1, in the order they would appear when unpacking a
little endian unsigned short.
"""
NONE = 0b0000000000000000
RESERVED_1 = 0b0000000000000001
F_DEF_HANDLER = 0b0000000000000010
RESERVED_2 = 0b0000000000000100
RESERVED_3 = 0b0000000000001000
F_LINK = 0b0000000000010000
RESERVED_4 = 0b0000000000100000
F_ICON = 0b0000000001000000
F_IS_OLE1 = 0b0000000010000000
F_MANUAL = 0b0000000100000000
F_RECOMPOSE_ON_RESIZE = 0b0000001000000000
RESERVED_5 = 0b0000010000000000
RESERVED_6 = 0b0000100000000000
F_OCX = 0b0001000000000000
F_STREAM = 0b0010000000000000
RESERVED_7 = 0b0100000000000000
F_VIEW_OBJECT = 0b1000000000000000
[docs]class ODTPersist2(enum.IntFlag):
"""
Flag values for ODTPersist2, in the order they would appear when unpacking a
little endian unsigned short.
"""
NONE = 0b0000000000000000
F_EMF = 0b0000000000000001
RESERVED_1 = 0b0000000000000010
F_QUERIED_EMF = 0b0000000000000100
F_STORED_AS_EMF = 0b0000000000001000
RESERVED_2 = 0b0000000000010000
RESERVED_3 = 0b0000000000100000
RESERVED_4 = 0b0000000001000000
RESERVED_5 = 0b0000000010000000
RESERVED_6 = 0b0000000100000000
RESERVED_7 = 0b0000001000000000
RESERVED_8 = 0b0000010000000000
RESERVED_9 = 0b0000100000000000
RESERVED_10 = 0b0001000000000000
RESERVED_11 = 0b0010000000000000
RESERVED_12 = 0b0100000000000000
RESERVED_13 = 0b1000000000000000
[docs]class OORBodyFormat(enum.IntEnum):
"""
The body format for One Off Recipients.
"""
TEXT_ONLY = 0b0011
HTML_ONLY = 0b0111
TEXT_AND_HTML = 0b1011
# This one isn't actually listed in the documentation, but I've seen it and
# this is my best guess for what a format of 0 is meant to mean. This will
# also prevent the code from failing on a 0 format.
UNSPECIFIED = 0b0000
[docs]class PostalAddressID(enum.IntEnum):
UNSPECIFIED = 0x00000000
HOME = 0x00000001
WORK = 0x00000002
OTHER = 0x00000003
[docs]class Priority(enum.IntEnum):
URGENT = 0x00000001
NORMAL = 0x00000000
NOT_URGENT = 0xFFFFFFFF
[docs]class PropertiesType(enum.IntEnum):
"""
The type of the properties instance.
"""
MESSAGE = 0
MESSAGE_EMBED = 1
ATTACHMENT = 2
RECIPIENT = 3
[docs]class PropertyFlags(enum.IntFlag):
MANDATORY = 0b001
READABLE = 0b010
WRITABLE = 0b100
[docs]class RecipientRowFlagType(enum.IntEnum):
NOTYPE = 0x0
X500DN = 0x1
MSMAIL = 0x2
SMTP = 0x3
FAX = 0x4
PROFESSIONALOFFICESYSTEM = 0x5
PERSONALDESTRIBUTIONLIST1 = 0x6
PERSONALDESTRIBUTIONLIST2 = 0x7
[docs]class RecipientType(enum.IntEnum):
"""
The type of recipient.
"""
SENDER = 0
TO = 1
CC = 2
BCC = 3
[docs]class RecurCalendarType(enum.IntEnum):
DEFAULT = 0x0000
CAL_GREGORIAN = 0x0001
CAL_GREGORIAN_US = 0x0002
CAL_JAPAN = 0x0003
CAL_TAIWAN = 0x0004
CAL_KOREA = 0x0005
CAL_HIJRI = 0x0006
CAL_THAI = 0x0007
CAL_HEBREW = 0x0008
CAL_GREGORIAN_ME_FRENCH = 0x0009
CAL_GREGORIAN_ARABIC = 0x000A
CAL_GREGORIAN_XLIT_ENGLISH = 0x000B
CAL_GREGORIAN_XLIT_FRENCH = 0x000C
CAL_LUNAR_JAPANESE = 0x000E
CAL_CHINESE_LUNAR = 0x000F
CAL_SAKA = 0x0010
CAL_LUNAR_ETO_CHN = 0x0011
CAL_LUNAR_ETO_KOR = 0x0012
CAL_LUNAR_ROKUYOU = 0x0013
CAL_LUNAR_KOREAN = 0x0014
CAL_UMALQURA = 0x0017
[docs]class RecurDOW(enum.IntEnum):
SUNDAY = 0x00000000
MONDAY = 0x00000001
TUESDAY = 0x00000002
WEDNESDAY = 0x00000003
THURSDAY = 0x00000004
FRIDAY = 0x00000005
SATURDAY = 0x00000006
[docs]class RecurEndType(enum.IntEnum):
[docs] @classmethod
def fromInt(cls, value: int) -> RecurEndType:
"""
Some enum values CAN be created from more than one int, so handle that.
"""
return cls(0x00002023) if value == 0xFFFFFFFF else cls(value)
END_AFTER_DATE = 0x00002021
END_AFTER_N_OCCURRENCES = 0x00002022
NEVER_END = 0x00002023
[docs]class RecurFrequency(enum.IntEnum):
"""
See [MS-OXOCAL] for details.
"""
DAILY = 0x200A
WEEKLY = 0x200B
MONTHLY = 0x200C
YEARLY = 0x200D
[docs]class RecurMonthNthWeek(enum.IntEnum):
FIRST = 0x00000001
SECOND = 0x00000002
THIRD = 0x00000003
FOURTH = 0x00000004
LAST = 0x00000005
[docs]class RecurPatternTypeSpecificWeekday(enum.IntFlag):
"""
See [MS-OXOCAL] for details.
"""
SATURDAY = 0b10
FRIDAY = 0b100
THURSDAY = 0b1000
WEDNESDAY = 0b10000
TUESDAY = 0b100000
MONDAY = 0b1000000
SUNDAY = 0b10000000
[docs]class RecurPatternType(enum.IntEnum):
"""
See [MS-OXOCAL] for details.
"""
DAY = 0x0000
WEEK = 0x0001
MONTH = 0x0002
MONTH_NTH = 0x0003
MONTH_END = 0x0004
HJ_MONTH = 0x000A
HJ_MONTH_NTH = 0x000B
HJ_MONTH_END = 0x000C
[docs]class ResponseStatus(enum.IntEnum):
"""
The response status of an attendee.
* NONE: No response is required for this object.
* ORGANIZED: This Meeting object belongs to the organizer.
* TENTATIVE: The attendee has tentatively accepted.
* ACCEPTED: The attendee has accepted.
* DECLINED: The attendee has declined.
* NOT_RESPONDED: The attendee has not yet responded.
"""
[docs] @classmethod
def fromIter(cls, items: Iterable[int]) -> List[ResponseStatus]:
"""
Uses the iterable of ints to create a list of this enum.
"""
return [cls(x) for x in items]
NONE = 0x00000000
ORGANIZED = 0x00000001
TENTATIVE = 0x00000002
ACCEPTED = 0x00000003
DECLINED = 0x00000004
NOT_RESPONDED = 0x00000005
[docs]class ResponseType(enum.Enum):
"""
The type of response for a Meeting Response object.
"""
ACCEPT = 'pos'
DECLINE = 'neg'
TENTATIVE = 'tent'
[docs]class RetentionFlags(enum.IntFlag):
"""
Flags that specify the status of nature of an item's retention tag or
archive tag.
See the section labeled "PidTagRetentionFlags" of [MS-OXCMSG] for details.
"""
EXPLICIT_TAG = 0x001
USER_OVERRIDE = 0x002
AUTO_TAG = 0x004
PERSONAL_TAG = 0x008
EXPLICIT_ARCHIVE_TAG = 0x010
KEEP_IN_PLACE = 0x020
SYSTEM_DATA = 0x040
NEEDS_RESCAN = 0x080
PENDING_RESCAN = 0x100
[docs]class RuleActionType(enum.IntEnum):
OP_MOVE = 0x01
OP_COPY = 0x02
OP_REPLY = 0x03
OP_OOF_REPLY = 0x04
OP_DEFER_ACTION = 0x05
OP_BOUNCE = 0x06
OP_FORWARD = 0x07
OP_DELEGATE = 0x08
OP_TAG = 0x09
OP_DELETE = 0x0A
OP_MARK_AS_READ = 0x0B
[docs]class SaveType(enum.IntEnum):
"""
Specifies the way that a function saved the data.
Used to determine how the return value from a save function should be read.
* CUSTOM: An unlisted save method was used, and the second value is
unspecified.
* NONE: No data was saved, and the second tuple value should be None.
* FILE: A single file was save, and the location is the second value.
* FILES: Multiple files were created, and the second value is a list of the
locations.
* FOLDER: A folder was created to store data, and the location is the second
value.
* FOLDERS: Multiple folders were created to store data, and the second value
is a list of the locations.
"""
CUSTOM = -1
NONE = 0
FILE = 1
FILES = 2
FOLDER = 3
FOLDERS = 4
[docs]class Sensitivity(enum.IntEnum):
NORMAL = 0
PERSONAL = 1
PRIVATE = 2
CONFIDENTIAL = 3
[docs]class ServerProcessingAction(enum.IntFlag):
"""
Actions taken on a meeting-related object.
"""
DELEGATOR_WANTS_COPY = 0x00000002
CREATED_ON_PRINCIPLE = 0x00000010
UPDATED_CAL_ITEM = 0x00000080
COPIED_OLD_PROPERTIES = 0x00000100
SEND_AUTO_RESPONSE = 0x00000400
REVIVED_EXCEPTION = 0x00000800
PROCESSED_MEETING_FORWARD_NOTIFICATION = 0x00001000
[docs]class SideEffect(enum.IntFlag):
"""
A flag for how a Message object is handled by the client in relation to
certain user interface actions.
* OPEN_TO_DELETE: The client opens the Message object when deleting.
* NO_FRAME: No UI is associated with the Message object.
* COERCE_TO_INDEX: The client moves the Message object to the Inbox folder
when moving or copying to a Folder object with the PidTagContainerClass
property set to "IPF.Note".
* OPEN_TO_COPY: The client opens the Message object when copying to another
folder.
* OPEN_TO_MOVE: The client opens the Message object when moving to another
folder.
* OPEN_FOR_CTX_MENU: The client opens the Message object when displaying
context-sensitive commands, such as a context menu, to the end user.
* CANNOT_UNDO_DELETE: The client cannot undo a delete operation. Must not be
set unless the OPEN_TO_DELETE flag is set.
* CANNOT_UNDO_COPY: The client cannot undo a copy operation. Must not be set
unless the OPEN_TO_COPY flag is set.
* CANNOT_UNDO_MOVE: The client cannot undo a move operation. Must not be set
unless the OPEN_TO_MOVE flag is set.
* HAS_SCRIPT: The Message object contains end-user script.
* OPEN_TO_PERM_DELETE: The client opens the Message object to permanently
delete it.
"""
OPEN_TO_DELETE = 0b1
NO_FRAME = 0b1000
COERCE_TO_INDEX = 0b10000
OPEN_TO_COPY = 0b100000
OPEN_TO_MOVE = 0b1000000
OPEN_FOR_CTX_MENU = 0b100000000
CANNOT_UNDO_DELETE = 0b10000000000
CANNOT_UNDO_COPY = 0b100000000000
CANNOT_UNDO_MOVE = 0b1000000000000
HAS_SCRIPT = 0b10000000000000
OPEN_TO_PERM_DELETE = 0b100000000000000
[docs]class TaskAcceptance(enum.IntEnum):
"""
The acceptance state of the task.
"""
NOT_ASSIGNED = 0x00000000
UNKNOWN = 0x00000001
ACCEPTED = 0x00000002
REJECTED = 0x00000003
[docs]class TaskHistory(enum.IntEnum):
"""
The type of the last change to the Task object.
"""
NONE = 0x00000000
ACCEPTED = 0x00000001
REJECTED = 0x00000002
OTHER = 0x00000003
DUE_DATE_CHANGED = 0x00000004
ASSIGNED = 0x00000005
[docs]class TaskMode(enum.IntEnum):
"""
The mode of the Task object used in task communication (PidLidTaskMode).
* UNASSIGNED: The Task object is not assigned.
* EMBEDDED_REQUEST: The Task object is embedded in a task request.
* ACCEPTED: The Task object has been accepted by the task assignee.
* REJECTED: The Task object was rejected by the task assignee.
* EMBEDDED_UPDATE: The Task object is embedded in a task update.
* SELF_ASSIGNED: The Task object was assigned to the task assigner
(self-delegation).
"""
UNASSIGNED = 0
EMBEDDED_REQUEST = 1
ACCEPTED = 2
REJECTED = 3
EMBEDDED_UPDATE = 4
SELF_ASSIGNED = 5
[docs]class TaskMultipleRecipients(enum.IntFlag):
SENT = 0x00000001
RECEIVED = 0x00000002
[docs]class TaskOwnership(enum.IntEnum):
"""
The role of the current user relative to the Task object.
* NOT_ASSIGNED: The Task object is not assigned.
* ASSIGNERS_COPY: The Task object is the task assigner's copy of the Task
object.
* ASSIGNEES_COPY: The Task object is the task assignee's copy of the Task
object.
"""
NOT_ASSIGNED = 0x00000000
ASSIGNERS_COPY = 0x00000001
ASSIGNEES_COPY = 0x00000002
[docs]class TaskRequestType(enum.IntEnum):
"""
The type of task request.
* REQUEST: A plain request.
* ACCEPT: Task has been accepted.
* DECLINE: Task has been declined.
* UPDATE: Task has been updated.
"""
[docs] @classmethod
def fromClassType(cls, classType: str) -> TaskRequestType:
"""
Convert a class type string into a TaskRequestType.
"""
classType = classType.lower()
if 'accept' in classType:
return cls(1)
if 'decline' in classType:
return cls(2)
if 'update' in classType:
return cls(3)
return cls(0)
REQUEST = 0
ACCEPT = 1
DECLINE = 2
UPDATE = 3
[docs]class TaskState(enum.IntEnum):
"""
TaskState.
* NOT_ASSIGNED: The Task object is not assigned.
* ASSIGNEES_COPY_ACCEPTED: The Task object is the task assignee's copy of an
assigned Task object.
* ASSIGNERS_COPY_ACCEPTED: The Task object is the task assigner's copy of an
assigned Task object.
* ASSIGNERS_COPY_REJECTED: The Task object is the task assigner's copy of a
rejected Task object.
* EMBEDDED_REJECTION: This Task object was created to correspond to a Task
object that was embedded in a task rejection but could not be found
locally.
"""
NOT_ASSIGNED = 0x00000001
ASSIGNEES_COPY_ACCEPTED = 0x00000002
ASSIGNERS_COPY_ACCEPTED = 0x00000003
ASSIGNERS_COPY_REJECTED = 0x00000004
EMBEDDED_REJECTION = 0x00000005
[docs]class TaskStatus(enum.IntEnum):
"""
The status of a task object (PidLidTaskStatus).
* NOT_STARTED: The user has not started the task.
* IN_PROGRESS: The users's work on the Task object is in progress.
* COMPLETE: The user's work on the Task object is complete.
* WAITING_ON_OTHER: The user is waiting on somebody else.
* DEFERRED: The user has deferred work on the Task object.
"""
NOT_STARTED = 0x00000000
IN_PROGRESS = 0x00000001
COMPLETE = 0x00000002
WAITING_ON_OTHER = 0x00000003
DEFERRED = 0x00000004
[docs]class TZFlag(enum.IntFlag):
"""
Flags for a TZRule object as defined in [MS-OXOCAL].
* RECUR_CURRENT_TZREG: The rule is associated with a recurring series.
* EFFECTIVE_TZREG: The rule is the effective rule.
"""
RECUR_CURRENT_TZREG = 0b1
EFFECTIVE_TZREG = 0b10
[docs]class WrappedType(enum.IntEnum):
MESSAGE_STORE = 0x6
MAILBOX_STORE = 0xC
class _EnumDeprecator:
"""
Special class for handling deprecated enums in a way that shouldn't break
existing code, including code for checking ``is`` on a member of the enum.
"""
def __init__(self, oldClassName: str, newClass: Type[enum.Enum], nameConversion: Dict[str, Any] = {}, valueConversion: Dict = {}):
"""
:param oldClassName: The name to use in the deprecation message.
:param newClass: The new enum class to look for the value in.
:param nameConversion: A dictionary of old names to new names to
convert if needed. If a name is the same, it can be omitted.
:param valueConversion: A dictionary of old values to new values used
when getting a value from the enum.
"""
self.__warnMessage = f'Enum {oldClassName} is deprecated and has been replaced with {newClass.__name__}. Please update your code.'
self.__new = newClass
self.__nameConv = nameConversion
self.__valConv = valueConversion
def __call__(self, val):
# Warn about the deprecation
import warnings
warnings.warn(self.__warnMessage, DeprecationWarning)
return self.__new(self.__valConv.get(val, val))
def __getattr__(self, key):
# Warn about the deprecation
import warnings
warnings.warn(self.__warnMessage, DeprecationWarning)
return getattr(self.__new, self.__nameConv.get(key, key))
def __getitem__(self, name):
# Warn about the deprecation
import warnings
warnings.warn(self.__warnMessage, DeprecationWarning)
return self.__new.__getitem__(self.__nameConv.get(name, name))