-
Notifications
You must be signed in to change notification settings - Fork 790
/
EdkMdb.h
2400 lines (1997 loc) · 108 KB
/
EdkMdb.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
* EDKMDB.H
*
* Microsoft Exchange Information Store
* Copyright (C) 1986-2002, Microsoft Corporation
*
* Contains declarations of additional properties and interfaces
* offered by Microsoft Exchange Information Store
*/
#ifndef EDKMDB_INCLUDED
#define EDKMDB_INCLUDED
/*
* WARNING: Many of the property id values contained within this
* file are subject to change. For best results please use the
* literals declared here instead of the numerical values.
*/
#define pidStoreNonTransMin 0x0E40
#define pidExchangeXmitReservedMin 0x3FE0
#define pidExchangeNonXmitReservedMin 0x65E0
#define pidProfileMin 0x6600
#define pidStoreMin 0x6618
#define pidFolderMin 0x6638
#define pidMessageReadOnlyMin 0x6640
#define pidMessageWriteableMin 0x6658
#define pidAttachReadOnlyMin 0x666C
#define pidSpecialMin 0x6670
#define pidAdminMin 0x6690
#define pidSecureProfileMin PROP_ID_SECURE_MIN
#define pidRenMsgFldMin 0x1080
#define pidLocalStoreInternalMin 0x6500 // Using a portion of the user-defined non-tranmittable prop for local store
#define pidLocalStoreInternalMax 0x65C0
/*------------------------------------------------------------------------
*
* PROFILE properties
*
* These are used in profiles which contain the Exchange Messaging
* Service. These profiles contain a "global section" used to store
* common data, plus individual sections for the transport provider,
* one store provider for the user, one store provider for the public
* store, and one store provider for each additional mailbox the user
* has delegate access to.
*
*-----------------------------------------------------------------------*/
/* GUID of the global section */
#define pbGlobalProfileSectionGuid "\x13\xDB\xB0\xC8\xAA\x05\x10\x1A\x9B\xB0\x00\xAA\x00\x2F\xC4\x5A"
/* Properties in the global section */
#define PR_PROFILE_VERSION PROP_TAG(PT_LONG, pidProfileMin + 0x00)
#define PR_PROFILE_CONFIG_FLAGS PROP_TAG(PT_LONG, pidProfileMin + 0x01)
#define PR_PROFILE_HOME_SERVER PROP_TAG(PT_STRING8, pidProfileMin + 0x02)
#define PR_PROFILE_HOME_SERVER_DN PROP_TAG(PT_STRING8, pidProfileMin + 0x12)
#define PR_PROFILE_HOME_SERVER_ADDRS PROP_TAG(PT_MV_STRING8, pidProfileMin + 0x13)
#define PR_PROFILE_USER PROP_TAG(PT_STRING8, pidProfileMin + 0x03)
#define PR_PROFILE_CONNECT_FLAGS PROP_TAG(PT_LONG, pidProfileMin + 0x04)
#define PR_PROFILE_TRANSPORT_FLAGS PROP_TAG(PT_LONG, pidProfileMin + 0x05)
#define PR_PROFILE_UI_STATE PROP_TAG(PT_LONG, pidProfileMin + 0x06)
#define PR_PROFILE_UNRESOLVED_NAME PROP_TAG(PT_STRING8, pidProfileMin + 0x07)
#define PR_PROFILE_UNRESOLVED_SERVER PROP_TAG(PT_STRING8, pidProfileMin + 0x08)
#define PR_PROFILE_BINDING_ORDER PROP_TAG(PT_STRING8, pidProfileMin + 0x09)
#define PR_PROFILE_MAX_RESTRICT PROP_TAG(PT_LONG, pidProfileMin + 0x0D)
#define PR_PROFILE_AB_FILES_PATH PROP_TAG(PT_STRING8, pidProfileMin + 0xE)
#define PR_PROFILE_OFFLINE_STORE_PATH PROP_TAG(PT_STRING8, pidProfileMin + 0x10)
#define PR_PROFILE_OFFLINE_INFO PROP_TAG(PT_BINARY, pidProfileMin + 0x11)
#define PR_PROFILE_ADDR_INFO PROP_TAG(PT_BINARY, pidSpecialMin + 0x17)
#define PR_PROFILE_OPTIONS_DATA PROP_TAG(PT_BINARY, pidSpecialMin + 0x19)
#define PR_PROFILE_SECURE_MAILBOX PROP_TAG(PT_BINARY, pidSecureProfileMin + 0)
#define PR_DISABLE_WINSOCK PROP_TAG(PT_LONG, pidProfileMin + 0x18)
#define PR_PROFILE_AUTH_PACKAGE PROP_TAG(PT_LONG, pidProfileMin + 0x19) // dup tag of PR_USER_ENTRYID
#define PR_PROFILE_RECONNECT_INTERVAL PROP_TAG(PT_LONG, pidProfileMin + 0x1a) // dup tag of PR_USER_NAME
#define PR_PROFILE_SERVER_VERSION PROP_TAG(PT_LONG, pidProfileMin + 0x1b)
/* SE 233155 - MarkH: EMSABP DCR /*
/* Properties in the abp section - I got these values from AlecDun (Outlook team) */
#define PR_PROFILE_ABP_ALLOW_RECONNECT PROP_TAG(PT_LONG, pidProfileMin + 0x39)
#define PR_PROFILE_ABP_MTHREAD_TIMEOUT_SECS PROP_TAG(PT_LONG, pidProfileMin + 0x3A)
/* Properties passed through the Service Entry to the OST */
#define PR_OST_ENCRYPTION PROP_TAG(PT_LONG, 0x6702)
/* Values for PR_OST_ENCRYPTION */
#define OSTF_NO_ENCRYPTION ((DWORD)0x80000000)
#define OSTF_COMPRESSABLE_ENCRYPTION ((DWORD)0x40000000)
#define OSTF_BEST_ENCRYPTION ((DWORD)0x20000000)
/* Properties in each profile section */
#define PR_PROFILE_OPEN_FLAGS PROP_TAG(PT_LONG, pidProfileMin + 0x09)
#define PR_PROFILE_TYPE PROP_TAG(PT_LONG, pidProfileMin + 0x0A)
#define PR_PROFILE_MAILBOX PROP_TAG(PT_STRING8, pidProfileMin + 0x0B)
#define PR_PROFILE_SERVER PROP_TAG(PT_STRING8, pidProfileMin + 0x0C)
#define PR_PROFILE_SERVER_DN PROP_TAG(PT_STRING8, pidProfileMin + 0x14)
/* Properties in the Public Folders section */
#define PR_PROFILE_FAVFLD_DISPLAY_NAME PROP_TAG(PT_STRING8, pidProfileMin + 0x0F)
#define PR_PROFILE_FAVFLD_COMMENT PROP_TAG(PT_STRING8, pidProfileMin + 0x15)
#define PR_PROFILE_ALLPUB_DISPLAY_NAME PROP_TAG(PT_STRING8, pidProfileMin + 0x16)
#define PR_PROFILE_ALLPUB_COMMENT PROP_TAG(PT_STRING8, pidProfileMin + 0x17)
/* Properties for Multiple Offline Address Book support (MOAB) */
#define PR_PROFILE_MOAB PROP_TAG(PT_STRING8, pidSpecialMin + 0x0B)
#define PR_PROFILE_MOAB_GUID PROP_TAG(PT_STRING8, pidSpecialMin + 0x0C)
#define PR_PROFILE_MOAB_SEQ PROP_TAG(PT_LONG, pidSpecialMin + 0x0D)
// Property for setting a list of prop_ids to be excluded
// from the GetProps(NULL) call.
#define PR_GET_PROPS_EXCLUDE_PROP_ID_LIST PROP_TAG(PT_BINARY, pidSpecialMin + 0x0E)
// Current value for PR_PROFILE_VERSION
#define PROFILE_VERSION ((ULONG)0x501)
// Bit values for PR_PROFILE_CONFIG_FLAGS
#define CONFIG_SERVICE ((ULONG)0x00000001)
#define CONFIG_SHOW_STARTUP_UI ((ULONG)0x00000002)
#define CONFIG_SHOW_CONNECT_UI ((ULONG)0x00000004)
#define CONFIG_PROMPT_FOR_CREDENTIALS ((ULONG)0x00000008)
#define CONFIG_NO_AUTO_DETECT ((ULONG)0x00000010)
#define CONFIG_OST_CACHE_ONLY ((ULONG)0x00000020)
// Bit values for PR_PROFILE_CONNECT_FLAGS
#define CONNECT_USE_ADMIN_PRIVILEGE ((ULONG)1)
#define CONNECT_NO_RPC_ENCRYPTION ((ULONG)2)
#define CONNECT_USE_SEPARATE_CONNECTION ((ULONG)4)
#define CONNECT_NO_UNDER_COVER_CONNECTION ((ULONG)8)
#define CONNECT_ANONYMOUS_ACCESS ((ULONG)16)
#define CONNECT_NO_NOTIFICATIONS ((ULONG)32)
#define CONNECT_NO_TABLE_NOTIFICATIONS ((ULONG)32) /* BUGBUG: TEMPORARY */
#define CONNECT_NO_ADDRESS_RESOLUTION ((ULONG)64)
#define CONNECT_RESTORE_DATABASE ((ULONG)128)
// Bit values for PR_PROFILE_TRANSPORT_FLAGS
#define TRANSPORT_DOWNLOAD ((ULONG)1)
#define TRANSPORT_UPLOAD ((ULONG)2)
// Bit values for PR_PROFILE_OPEN_FLAGS
#define OPENSTORE_USE_ADMIN_PRIVILEGE ((ULONG)0x00000001)
#define OPENSTORE_PUBLIC ((ULONG)0x00000002)
#define OPENSTORE_HOME_LOGON ((ULONG)0x00000004)
#define OPENSTORE_TAKE_OWNERSHIP ((ULONG)0x00000008)
#define OPENSTORE_OVERRIDE_HOME_MDB ((ULONG)0x00000010)
#define OPENSTORE_TRANSPORT ((ULONG)0x00000020)
#define OPENSTORE_REMOTE_TRANSPORT ((ULONG)0x00000040)
#define OPENSTORE_INTERNET_ANONYMOUS ((ULONG)0x00000080)
#define OPENSTORE_ALTERNATE_SERVER ((ULONG)0x00000100) /* reserved for internal use */
#define OPENSTORE_IGNORE_HOME_MDB ((ULONG)0x00000200) /* reserved for internal use */
#define OPENSTORE_NO_MAIL ((ULONG)0x00000400) /* reserved for internal use */
#define OPENSTORE_OVERRIDE_LAST_MODIFIER ((ULONG)0x00000800)
#define OPENSTORE_CALLBACK_LOGON ((ULONG)0x00001000) /* reserved for internal use */
#define OPENSTORE_LOCAL ((ULONG)0x00002000)
#define OPENSTORE_FAIL_IF_NO_MAILBOX ((ULONG)0x00004000) /* reserved for internal use */
#define OPENSTORE_CACHE_EXCHANGE ((ULONG)0x00008000)
#define OPENSTORE_CLI_WITH_NAMEDPROP_FIX ((ULONG)0x00010000) /* reserved for internal use */
#define OPENSTORE_ENABLE_LAZY_LOGGING ((ULONG)0x00020000) /* reserved for internal use */
#define OPENSTORE_CLI_WITH_REPLID_GUID_MAPPING_FIX ((ULONG)0x00040000) /* reserved for internal use */
#define OPENSTORE_NO_LOCALIZATION ((ULONG)0x00080000) /* reserved for internal use */
#define OPENSTORE_RESTORE_DATABASE ((ULONG)0x00100000)
#define OPENSTORE_XFOREST_MOVE ((ULONG)0x00200000) /* reserved for internal use */
// Values for PR_PROFILE_TYPE
#define PROFILE_PRIMARY_USER ((ULONG)1)
#define PROFILE_DELEGATE ((ULONG)2)
#define PROFILE_PUBLIC_STORE ((ULONG)3)
#define PROFILE_SUBSCRIPTION ((ULONG)4)
/*------------------------------------------------------------------------
*
* MDB object properties
*
*-----------------------------------------------------------------------*/
/* PR_MDB_PROVIDER GUID in stores table */
#define pbExchangeProviderPrimaryUserGuid "\x54\x94\xA1\xC0\x29\x7F\x10\x1B\xA5\x87\x08\x00\x2B\x2A\x25\x17"
#define pbExchangeProviderDelegateGuid "\x9e\xb4\x77\x00\x74\xe4\x11\xce\x8c\x5e\x00\xaa\x00\x42\x54\xe2"
#define pbExchangeProviderPublicGuid "\x78\xb2\xfa\x70\xaf\xf7\x11\xcd\x9b\xc8\x00\xaa\x00\x2f\xc4\x5a"
#define pbExchangeProviderXportGuid "\xa9\x06\x40\xe0\xd6\x93\x11\xcd\xaf\x95\x00\xaa\x00\x4a\x35\xc3"
#define pbExchangeProviderLocalStoreGuid "\x2D\xE5\x6B\xA1\x64\x6E\x11\xd2\x8D\x4E\x00\xC0\x4F\xAE\x23\x71"
#define pbExchangeProviderPersistStoreGuid "\x98\xA2\x3D\x67\x62\xCF\x4d\x34\x82\x79\xDB\xFA\x6A\x50\x8B\x31"
// All properties in this section are readonly
// Identity of store
// All stores
#define PR_USER_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x01)
#define PR_USER_NAME PROP_TAG(PT_STRING8, pidStoreMin + 0x02)
// All mailbox stores
#define PR_MAILBOX_OWNER_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x03)
#define PR_MAILBOX_OWNER_NAME PROP_TAG(PT_STRING8, pidStoreMin + 0x04)
#define PR_OOF_STATE PROP_TAG(PT_BOOLEAN, pidStoreMin + 0x05)
// Bug#255023 Provide quota information to MAPI clients to avoid large emails from ever reaching the server
#define PR_MAX_SUBMIT_MESSAGE_SIZE PROP_TAG(PT_LONG, 0x666D)
#define PR_PROHIBIT_SEND_QUOTA PROP_TAG(PT_LONG, 0x666E)
// Public stores -- name of hierarchy server
#define PR_HIERARCHY_SERVER PROP_TAG(PT_TSTRING, pidStoreMin + 0x1B)
// Entryids of special folders
// All mailbox stores
#define PR_SCHEDULE_FOLDER_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x06)
// All mailbox and gateway stores
#define PR_IPM_DAF_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x07)
// Public store
#define PR_NON_IPM_SUBTREE_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x08)
#define PR_EFORMS_REGISTRY_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x09)
#define PR_SPLUS_FREE_BUSY_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x0A)
#define PR_OFFLINE_ADDRBOOK_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x0B)
#define PR_NNTP_CONTROL_FOLDER_ENTRYID PROP_TAG(PT_BINARY, pidSpecialMin + 0x1B)
#define PR_EFORMS_FOR_LOCALE_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x0C)
#define PR_FREE_BUSY_FOR_LOCAL_SITE_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x0D)
#define PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x0E)
#define PR_NEWSGROUP_ROOT_FOLDER_ENTRYID PROP_TAG(PT_BINARY, pidSpecialMin + 0x1C)
#define PR_OFFLINE_MESSAGE_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x0F)
#define PR_IPM_FAVORITES_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x18)
#define PR_IPM_PUBLIC_FOLDERS_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x19)
#define PR_FAVORITES_DEFAULT_NAME PROP_TAG(PT_STRING8, pidStoreMin + 0x1D)
#define PR_SYS_CONFIG_FOLDER_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x1E)
#define PR_NNTP_ARTICLE_FOLDER_ENTRYID PROP_TAG(PT_BINARY, pidSpecialMin + 0x1A)
#define PR_EVENTS_ROOT_FOLDER_ENTRYID PROP_TAG(PT_BINARY, pidSpecialMin + 0xA)
// Gateway stores
#define PR_GW_MTSIN_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x10)
#define PR_GW_MTSOUT_ENTRYID PROP_TAG(PT_BINARY, pidStoreMin + 0x11)
#define PR_TRANSFER_ENABLED PROP_TAG(PT_BOOLEAN, pidStoreMin + 0x12)
// This property is preinitialized to 256 bytes of zeros
// GetProp on this property is guaranteed to RPC. May be used
// to determine line speed of connection to server.
#define PR_TEST_LINE_SPEED PROP_TAG(PT_BINARY, pidStoreMin + 0x13)
// Used with OpenProperty to get interface, also on folders
#define PR_HIERARCHY_SYNCHRONIZER PROP_TAG(PT_OBJECT, pidStoreMin + 0x14)
#define PR_CONTENTS_SYNCHRONIZER PROP_TAG(PT_OBJECT, pidStoreMin + 0x15)
#define PR_COLLECTOR PROP_TAG(PT_OBJECT, pidStoreMin + 0x16)
// Used with OpenProperty to get interface for folders, messages, attachmentson
#define PR_FAST_TRANSFER PROP_TAG(PT_OBJECT, pidStoreMin + 0x17)
// Used with OpenProperty to get interface for store object
#define PR_CHANGE_ADVISOR PROP_TAG(PT_OBJECT, pidStoreMin + 0x1C)
// used to set the ics notification suppression guid
#define PR_CHANGE_NOTIFICATION_GUID PROP_TAG(PT_CLSID, pidStoreMin + 0x1F)
// This property is available on mailbox and public stores. If it exists
// and its value is TRUE, the store is connected to the offline store provider.
#define PR_STORE_OFFLINE PROP_TAG(PT_BOOLEAN, pidStoreMin + 0x1A)
// In transit state for store object. This state is
// set when mail is being moved and it pauses mail delivery
// to the mail box
#define PR_IN_TRANSIT PROP_TAG(PT_BOOLEAN, pidStoreMin)
// Writable only with Admin rights, available on public stores and folders
#define PR_REPLICATION_STYLE PROP_TAG(PT_LONG, pidAdminMin)
#define PR_REPLICATION_SCHEDULE PROP_TAG(PT_BINARY, pidAdminMin + 0x01)
#define PR_REPLICATION_MESSAGE_PRIORITY PROP_TAG(PT_LONG, pidAdminMin + 0x02)
// Writable only with Admin rights, available on public stores
#define PR_OVERALL_MSG_AGE_LIMIT PROP_TAG(PT_LONG, pidAdminMin + 0x03)
#define PR_REPLICATION_ALWAYS_INTERVAL PROP_TAG(PT_LONG, pidAdminMin + 0x04)
#define PR_REPLICATION_MSG_SIZE PROP_TAG(PT_LONG, pidAdminMin + 0x05)
// default replication style=always interval (minutes)
#define STYLE_ALWAYS_INTERVAL_DEFAULT (ULONG)15
// default replication message size limit (KB)
#define REPLICATION_MESSAGE_SIZE_LIMIT_DEFAULT (ULONG)300
// Values for PR_REPLICATION_STYLE
#define STYLE_NEVER (ULONG)0 // never replicate
#define STYLE_NORMAL (ULONG)1 // use 84 byte schedule TIB
#define STYLE_ALWAYS (ULONG)2 // replicate at fastest rate
#define STYLE_DEFAULT (ULONG) - 1 // default value
/*------------------------------------------------------------------------
*
* INCREMENTAL CHANGE SYNCHRONIZATION
* folder and message properties
*
*-----------------------------------------------------------------------*/
#define PR_SOURCE_KEY PROP_TAG(PT_BINARY, pidExchangeNonXmitReservedMin + 0x0)
#define PR_PARENT_SOURCE_KEY PROP_TAG(PT_BINARY, pidExchangeNonXmitReservedMin + 0x1)
#define PR_CHANGE_KEY PROP_TAG(PT_BINARY, pidExchangeNonXmitReservedMin + 0x2)
#define PR_PREDECESSOR_CHANGE_LIST PROP_TAG(PT_BINARY, pidExchangeNonXmitReservedMin + 0x3)
// msg-folder only property
// actual FID for a msg-folder row
// ptagFID for message rows
// ptagInstanceID for subfolder rows
#define PR_SOURCE_FID PROP_TAG(PT_I8, pidStoreNonTransMin + 0x1F)
/*------------------------------------------------------------------------
*
* FOLDER object properties
*
*-----------------------------------------------------------------------*/
// folders table property used by PKM to define the catalog guid for content
// indexing and searching; doubles as index enable/disable
#define PR_CATALOG PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x1B)
// Is CI searching enabled on this folder?
#define PR_CI_SEARCH_ENABLED PROP_TAG(PT_BOOLEAN, pidStoreNonTransMin + 0x1C)
// Is notification-based indexing enabled on this folder?
#define PR_CI_NOTIFICATION_ENABLED PROP_TAG(PT_BOOLEAN, pidStoreNonTransMin + 0x1D)
// Max number of cached view allowed
#define PR_MAX_CACHED_VIEWS PROP_TAG(PT_LONG, pidStoreNonTransMin + 0x28)
// Max number of indices allowed
// Review : this ptag is used for PR_MIME_HANDLER_CLASSIDS, but because the context
// is different I am reusing it here.
#define PR_MAX_INDICES PROP_TAG(PT_LONG, pidStoreNonTransMin + 0x1E)
// folders table property containing list of guid/restriction pairs
#define PR_IMPLIED_RESTRICTIONS PROP_TAG(PT_MV_BINARY, pidSpecialMin + 0x0F)
// Read only, available on all folders
#define PR_FOLDER_CHILD_COUNT PROP_TAG(PT_LONG, pidFolderMin)
#define PR_RIGHTS PROP_TAG(PT_LONG, pidFolderMin + 0x01)
#define PR_ACL_TABLE PROP_TAG(PT_OBJECT, pidExchangeXmitReservedMin)
#define PR_RULES_TABLE PROP_TAG(PT_OBJECT, pidExchangeXmitReservedMin + 0x1)
#define PR_HAS_RULES PROP_TAG(PT_BOOLEAN, pidFolderMin + 0x02)
#define PR_HAS_MODERATOR_RULES PROP_TAG(PT_BOOLEAN, pidFolderMin + 0x07)
// Read only, available only for public folders
#define PR_ADDRESS_BOOK_ENTRYID PROP_TAG(PT_BINARY, pidFolderMin + 0x03)
// Writable, available on folders in all stores
#define PR_ACL_DATA PROP_TAG(PT_BINARY, pidExchangeXmitReservedMin)
#define PR_RULES_DATA PROP_TAG(PT_BINARY, pidExchangeXmitReservedMin + 0x1)
#define PR_EXTENDED_ACL_DATA PROP_TAG(PT_BINARY, pidExchangeXmitReservedMin + 0x1E)
#define PR_FOLDER_DESIGN_FLAGS PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0x2)
#define PR_DESIGN_IN_PROGRESS PROP_TAG(PT_BOOLEAN, pidExchangeXmitReservedMin + 0x4)
#define PR_SECURE_ORIGINATION PROP_TAG(PT_BOOLEAN, pidExchangeXmitReservedMin + 0x5)
// Writable, available only for public folders
#define PR_PUBLISH_IN_ADDRESS_BOOK PROP_TAG(PT_BOOLEAN, pidExchangeXmitReservedMin + 0x6)
#define PR_RESOLVE_METHOD PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0x7)
#define PR_ADDRESS_BOOK_DISPLAY_NAME PROP_TAG(PT_TSTRING, pidExchangeXmitReservedMin + 0x8)
// Writable, used to indicate locale id for eforms registry subfolders
#define PR_EFORMS_LOCALE_ID PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0x9)
// Writable only with Admin rights, available only for public folders
#define PR_REPLICA_LIST PROP_TAG(PT_BINARY, pidAdminMin + 0x8)
#define PR_OVERALL_AGE_LIMIT PROP_TAG(PT_LONG, pidAdminMin + 0x9)
// Newsgroup related properties. Writable only with Admin rights.
#define PR_IS_NEWSGROUP_ANCHOR PROP_TAG(PT_BOOLEAN, pidAdminMin + 0x06)
#define PR_IS_NEWSGROUP PROP_TAG(PT_BOOLEAN, pidAdminMin + 0x07)
#define PR_NEWSGROUP_COMPONENT PROP_TAG(PT_STRING8, pidAdminMin + 0x15)
#define PR_INTERNET_NEWSGROUP_NAME PROP_TAG(PT_STRING8, pidAdminMin + 0x17)
#define PR_NEWSFEED_INFO PROP_TAG(PT_BINARY, pidAdminMin + 0x16)
// Newsgroup related property.
#define PR_PREVENT_MSG_CREATE PROP_TAG(PT_BOOLEAN, pidExchangeNonXmitReservedMin + 0x14)
// IMAP internal date
#define PR_IMAP_INTERNAL_DATE PROP_TAG(PT_SYSTIME, pidExchangeNonXmitReservedMin + 0x15)
// Virtual properties to refer to Newsfeed DNs. Cannot get/set these on
// any object. Supported currently only in specifying restrictions.
#define PR_INBOUND_NEWSFEED_DN PROP_TAG(PT_STRING8, pidSpecialMin + 0x1D)
#define PR_OUTBOUND_NEWSFEED_DN PROP_TAG(PT_STRING8, pidSpecialMin + 0x1E)
// Used for controlling content conversion in NNTP
#define PR_INTERNET_CHARSET PROP_TAG(PT_TSTRING, pidAdminMin + 0xA)
// PR_RESOLVE_METHOD values
#define RESOLVE_METHOD_DEFAULT ((LONG)0) // default handling attach conflicts
#define RESOLVE_METHOD_LAST_WRITER_WINS ((LONG)1) // the last writer will win conflict
#define RESOLVE_METHOD_NO_CONFLICT_NOTIFICATION ((LONG)2) // no conflict notif
// Read only, available only for public folder favorites
#define PR_PUBLIC_FOLDER_ENTRYID PROP_TAG(PT_BINARY, pidFolderMin + 0x04)
// Read only. changes everytime a subfolder is created or deleted
#define PR_HIERARCHY_CHANGE_NUM PROP_TAG(PT_LONG, pidFolderMin + 0x06)
// For IFS/OLEDB to set and get user sid in LOGON
#define PR_USER_SID PROP_TAG(PT_BINARY, PROP_ID(ptagSearchState)) // pidInternalNoAccessNonTransMin+0x23)
#define PR_CREATOR_TOKEN PR_USER_SID
/*------------------------------------------------------------------------
*
* MESSAGE object properties
*
*-----------------------------------------------------------------------*/
// Read only, automatically set on all messages in all stores
#define PR_HAS_NAMED_PROPERTIES PROP_TAG(PT_BOOLEAN, pidMessageReadOnlyMin + 0x0A)
// Read only but outside the provider specific range for replication thru GDK-GWs
#define PR_CREATOR_NAME PROP_TAG(PT_TSTRING, pidExchangeXmitReservedMin + 0x18)
#define PR_CREATOR_ENTRYID PROP_TAG(PT_BINARY, pidExchangeXmitReservedMin + 0x19)
#define PR_LAST_MODIFIER_NAME PROP_TAG(PT_TSTRING, pidExchangeXmitReservedMin + 0x1A)
#define PR_LAST_MODIFIER_ENTRYID PROP_TAG(PT_BINARY, pidExchangeXmitReservedMin + 0x1B)
#define PR_REPLY_RECIPIENT_SMTP_PROXIES PROP_TAG(PT_TSTRING, pidExchangeXmitReservedMin + 0x1C)
// Read only, appears on messages which have DAM's pointing to them
#define PR_HAS_DAMS PROP_TAG(PT_BOOLEAN, pidExchangeXmitReservedMin + 0x0A)
#define PR_RULE_TRIGGER_HISTORY PROP_TAG(PT_BINARY, pidExchangeXmitReservedMin + 0x12)
#define PR_MOVE_TO_STORE_ENTRYID PROP_TAG(PT_BINARY, pidExchangeXmitReservedMin + 0x13)
#define PR_MOVE_TO_FOLDER_ENTRYID PROP_TAG(PT_BINARY, pidExchangeXmitReservedMin + 0x14)
// Read only, available only on messages in the public store
#define PR_REPLICA_SERVER PROP_TAG(PT_TSTRING, pidMessageReadOnlyMin + 0x04)
#define PR_REPLICA_VERSION PROP_TAG(PT_I8, pidMessageReadOnlyMin + 0x0B)
// SID versions of standard messaging properties
#define PR_CREATOR_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x18)
#define PR_LAST_MODIFIER_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x19)
#define PR_SENDER_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x0d)
#define PR_SENT_REPRESENTING_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x0e)
#define PR_ORIGINAL_SENDER_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x0f)
#define PR_ORIGINAL_SENT_REPRESENTING_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x10)
#define PR_READ_RECEIPT_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x11)
#define PR_REPORT_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x12)
#define PR_ORIGINATOR_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x13)
#define PR_REPORT_DESTINATION_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x14)
#define PR_ORIGINAL_AUTHOR_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x15)
#define PR_RECEIVED_BY_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x16)
#define PR_RCVD_REPRESENTING_SID PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x17)
#define PR_TRUST_SENDER_NO 0x00000000L
#define PR_TRUST_SENDER_YES 0x00000001L
#define PR_TRUST_SENDER PROP_TAG(PT_LONG, pidStoreNonTransMin + 0x39)
// XML versions of SID properties
#define PR_CREATOR_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x2C)
#define PR_LAST_MODIFIER_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x2D)
#define PR_SENDER_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x2E)
#define PR_SENT_REPRESENTING_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x2F)
#define PR_ORIGINAL_SENDER_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x30)
#define PR_ORIGINAL_SENT_REPRESENTING_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x31)
#define PR_READ_RECEIPT_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x32)
#define PR_REPORT_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x33)
#define PR_ORIGINATOR_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x34)
#define PR_REPORT_DESTINATION_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x35)
#define PR_ORIGINAL_AUTHOR_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x36)
#define PR_RECEIVED_BY_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x37)
#define PR_RCVD_REPRESENTING_SID_AS_XML PROP_TAG(PT_TSTRING, pidStoreNonTransMin + 0x38)
// those two are pseudo-properties on folder. calling OFOLD::EcGetProps(PR_RESERVE_RANGE_OF_IDS) is
// equivalent to calling EcGetLocalRepIdsOp(), calling OFOLD::EcSetProps(PR_MERGE_MIDSET_DELETED)
// is equivalen to calling OFOLD::EcSetLocalRepMidsetDeleted()
#define PR_MERGE_MIDSET_DELETED PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x3a) // 0x0E7A0102
#define PR_RESERVE_RANGE_OF_IDS PROP_TAG(PT_BINARY, pidStoreNonTransMin + 0x3b) // 0x0E7B0102
// computed message property (read only)
// 44 byte binary property - used by PKM as globally unique message key
// 22 bytes of global ID for FID
// 22 bytes of global ID for VID
#define PR_FID_VID PROP_TAG(PT_BINARY, pidMessageReadOnlyMin + 0x0C)
#define PR_FID_MID PR_FID_VID // NSK : temporary to allow transition
// message property - read only, xref ID in global ID format - used by PKM
#define PR_ORIGIN_ID PROP_TAG(PT_BINARY, pidMessageReadOnlyMin + 0x0D)
// computed message property used in search folders to determine quality of
// search hit match
// NOTE: ptag.h consumers, see also ptagMsgFolderTemplateRes3
#define PR_RANK PROP_TAG(PT_LONG, pidAdminMin + 0x82)
// msg-folder property, read only
// value is PR_MSG_DELIVERY_TIME if it exists, else PR_CREATION_TIME
// used as the default sort time when subfolder rows are returned in views
#define PR_MSG_FOLD_TIME PROP_TAG(PT_SYSTIME, pidMessageReadOnlyMin + 0x14)
#define PR_ICS_CHANGE_KEY PROP_TAG(PT_BINARY, pidMessageReadOnlyMin + 0x15)
#define PR_DEFERRED_SEND_NUMBER PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0xB)
#define PR_DEFERRED_SEND_UNITS PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0xC)
#define PR_EXPIRY_NUMBER PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0xD)
#define PR_EXPIRY_UNITS PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0xE)
// Writeable, deferred send time
#define PR_DEFERRED_SEND_TIME PROP_TAG(PT_SYSTIME, pidExchangeXmitReservedMin + 0xF)
// Writeable, intended for both folders and messages in gateway mailbox
#define PR_GW_ADMIN_OPERATIONS PROP_TAG(PT_LONG, pidMessageWriteableMin)
// Writeable, used for DMS messages
#define PR_P1_CONTENT PROP_TAG(PT_BINARY, 0x1100)
#define PR_P1_CONTENT_TYPE PROP_TAG(PT_BINARY, 0x1101)
// Properties on deferred action messages
#define PR_CLIENT_ACTIONS PROP_TAG(PT_BINARY, pidMessageReadOnlyMin + 0x5)
#define PR_DAM_ORIGINAL_ENTRYID PROP_TAG(PT_BINARY, pidMessageReadOnlyMin + 0x6)
#define PR_DAM_BACK_PATCHED PROP_TAG(PT_BOOLEAN, pidMessageReadOnlyMin + 0x7)
// Properties on deferred action error messages
#define PR_RULE_ERROR PROP_TAG(PT_LONG, pidMessageReadOnlyMin + 0x8)
#define PR_RULE_ACTION_TYPE PROP_TAG(PT_LONG, pidMessageReadOnlyMin + 0x9)
#define PR_RULE_ACTION_NUMBER PROP_TAG(PT_LONG, pidMessageReadOnlyMin + 0x10)
#define PR_RULE_FOLDER_ENTRYID PROP_TAG(PT_BINARY, pidMessageReadOnlyMin + 0x11)
// Mime representation of a message.
// Defined as 3 different types for convenience. Will be stored as file handle
// internally.
#define PR_INTERNET_CONTENT PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0x1)
#define PR_INTERNET_CONTENT_HANDLE PROP_TAG(PT_FILE_HANDLE, pidMessageWriteableMin + 0x1)
#define PR_INTERNET_CONTENT_EA PROP_TAG(PT_FILE_EA, pidMessageWriteableMin + 0x1)
// Dot-stuff state property on message
#define PR_DOTSTUFF_STATE PROP_TAG(PT_LONG, pidUserNonTransmitMin + 0x1)
// Raw byte count of mime stream, if mime exists.
#define PR_MIME_SIZE PROP_TAG(PT_LONG, 0x6746)
#define PR_MIME_SIZE_EXTENDED PROP_TAG(PT_I8, 0x6746)
// Raw byte count of ptagInternetContent, whether it is a mime message
// or freedoc using OURL
#define PR_FILE_SIZE PROP_TAG(PT_LONG, 0x6747)
#define PR_FILE_SIZE_EXTENDED PROP_TAG(PT_I8, 0x6747)
// Sender's editor format
#define PR_MSG_EDITOR_FORMAT PROP_TAG(PT_LONG, 0x5909)
#define EDITOR_FORMAT_DONTKNOW ((ULONG)0)
#define EDITOR_FORMAT_PLAINTEXT ((ULONG)1)
#define EDITOR_FORMAT_HTML ((ULONG)2)
#define EDITOR_FORMAT_RTF ((ULONG)3)
#ifdef pidInternalWriteableNonTransMin
#if pidInternalWritableNonTranMin - 0x6740
#pragma error("pidInternalWritableNonTransMin definition has changed, must change definition of PR_MIME_SIZE")
#endif
#endif
// State of this inid as far as conversion is concerned.
// Reusing mailbox table property
#define PR_CONVERSION_STATE PROP_TAG(PT_LONG, PROP_ID(ptagAdminNickName))
// Property to represent native html content - assumed to be in the internet
// codepage as determined by PR_INTERNET_CPID
//
#define PR_HTML PROP_TAG(PT_BINARY, PROP_ID(PR_BODY_HTML))
// computed property used for moderated folder rule
// it's an EntryId whose value is:
// ptagSenderEntryId on delivery
// LOGON::PbUserEntryId() for all other cases (move/copy/post)
#define PR_ACTIVE_USER_ENTRYID PROP_TAG(PT_BINARY, pidMessageReadOnlyMin + 0x12)
// Property on conflict notification indicating entryid of conflicting object
#define PR_CONFLICT_ENTRYID PROP_TAG(PT_BINARY, pidExchangeXmitReservedMin + 0x10)
// Property on messages to indicate the language client used to create this message
#define PR_MESSAGE_LOCALE_ID PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0x11)
#define PR_MESSAGE_CODEPAGE PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0x1D)
// Properties on Quota warning messages to indicate Storage quota and Excess used
#define PR_STORAGE_QUOTA_LIMIT PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0x15)
#define PR_EXCESS_STORAGE_USED PROP_TAG(PT_LONG, pidExchangeXmitReservedMin + 0x16)
#define PR_SVR_GENERATING_QUOTA_MSG PROP_TAG(PT_TSTRING, pidExchangeXmitReservedMin + 0x17)
// Property affixed by delegation rule and deleted on forwards
#define PR_DELEGATED_BY_RULE PROP_TAG(PT_BOOLEAN, pidExchangeXmitReservedMin + 0x3)
// Message status bit used to indicate message is in conflict
#define MSGSTATUS_IN_CONFLICT ((ULONG)0x800)
// Message status bit used to indicate the IMAP4 $MDNSent flag
#define MSGSTATUS_MDNSENT ((ULONG)0x4000)
// used to indicate how much X400 private extension data is present: none, just the
// message level, or both the message and recipient levels
// !!The high order byte of this ULONG is reserved.!!
#define ENV_BLANK ((ULONG)0x00000000)
#define ENV_RECIP_NUM ((ULONG)0x00000001)
#define ENV_MSG_EXT ((ULONG)0x00000002)
#define ENV_RECIP_EXT ((ULONG)0x00000004)
#define PR_X400_ENVELOPE_TYPE PROP_TAG(PT_LONG, pidMessageReadOnlyMin + 0x13)
#define X400_ENV_PLAIN (ENV_BLANK) // no extension
#define X400_ENV_VALID_RECIP (ENV_RECIP_NUM | ENV_MSG_EXT) // just the message level extension
#define X400_ENV_FULL_EXT (ENV_RECIP_NUM | ENV_MSG_EXT | ENV_RECIP_EXT) // both message and recipient levels
//
// bitmask that indicates whether RN, NRN, DR, NDR, OOF, Auto-Reply should be suppressed
//
#define AUTO_RESPONSE_SUPPRESS_DR ((ULONG)0x00000001)
#define AUTO_RESPONSE_SUPPRESS_NDR ((ULONG)0x00000002)
#define AUTO_RESPONSE_SUPPRESS_RN ((ULONG)0x00000004)
#define AUTO_RESPONSE_SUPPRESS_NRN ((ULONG)0x00000008)
#define AUTO_RESPONSE_SUPPRESS_OOF ((ULONG)0x00000010)
#define AUTO_RESPONSE_SUPPRESS_AUTO_REPLY ((ULONG)0x00000020)
// raid 91101 - Flag indicates No RFC821 From field
#define AUTO_RESPONSE_SUPPRESS_NORFC821FROM ((ULONG)0x00000040)
#define PR_AUTO_RESPONSE_SUPPRESS PROP_TAG(PT_LONG, pidExchangeXmitReservedMin - 0x01)
#define PR_INTERNET_CPID PROP_TAG(PT_LONG, pidExchangeXmitReservedMin - 0x02)
#define PR_SYNCEVENT_FIRED PROP_TAG(PT_BOOLEAN, pidMessageReadOnlyMin + 0x0F)
/*------------------------------------------------------------------------
*
* ATTACHMENT object properties
*
*-----------------------------------------------------------------------*/
// Appears on attachments to a message marked to be in conflict. Identifies
// those attachments which are conflicting versions of the top level message
#define PR_IN_CONFLICT PROP_TAG(PT_BOOLEAN, pidAttachReadOnlyMin)
/*------------------------------------------------------------------------
*
* DUMPSTER properties
*
*-----------------------------------------------------------------------*/
// Indicates when a message, folder, or mailbox has been deleted.
// (Read only, non transmittable property).
#define PR_DELETED_ON PROP_TAG(PT_SYSTIME, pidSpecialMin + 0x1F)
// Read-only folder properties which indicate the number of messages, and child folders
// that have been "soft" deleted in this folder (and the time the first message was deleted).
#define PR_DELETED_MSG_COUNT PROP_TAG(PT_LONG, pidFolderMin + 0x08)
#define PR_DELETED_ASSOC_MSG_COUNT PROP_TAG(PT_LONG, pidFolderMin + 0x0B)
#define PR_DELETED_FOLDER_COUNT PROP_TAG(PT_LONG, pidFolderMin + 0x09)
#define PR_OLDEST_DELETED_ON PROP_TAG(PT_SYSTIME, pidFolderMin + 0x0A)
// Total size of all soft deleted messages
#define PR_DELETED_MESSAGE_SIZE_EXTENDED PROP_TAG(PT_I8, pidAdminMin + 0xB)
// Total size of all normal soft deleted messages
#define PR_DELETED_NORMAL_MESSAGE_SIZE_EXTENDED PROP_TAG(PT_I8, pidAdminMin + 0xC)
// Total size of all associated soft deleted messages
#define PR_DELETED_ASSOC_MESSAGE_SIZE_EXTENDED PROP_TAG(PT_I8, pidAdminMin + 0xD)
// This property controls the retention age limit (minutes) for the Private/Public MDB,
// Mailbox (private only), or Folder (public).
// Note - the Folder/Mailbox retention, if set, overrides the MDB retention.
#define PR_RETENTION_AGE_LIMIT PROP_TAG(PT_LONG, pidAdminMin + 0x34)
// This property controls if we maintain per user read/unread for a public
// folder. By default (if this property is missing or set to FALSE) we will
// maintain per user read/unread.
#define PR_DISABLE_PERUSER_READ PROP_TAG(PT_BOOLEAN, pidAdminMin + 0x35)
// This property is set by JET after a full backup has occurred.
// It is used to determine whether or not messages and folders can be "hard" deleted
// before a full backup has captured the last modification to the object.
#define PR_LAST_FULL_BACKUP PROP_TAG(PT_SYSTIME, pidSpecialMin + 0x15)
/*------------------------------------------------------------------------
* URL related properties
*-----------------------------------------------------------------------*/
// This is read only property.
#define PR_URL_NAME PROP_TAG(PT_TSTRING, pidAdminMin + 0x77) // 0x6707
#define PR_URL_NAME_A PROP_TAG(PT_STRING8, pidAdminMin + 0x77)
#define PR_URL_NAME_W PROP_TAG(PT_UNICODE, pidAdminMin + 0x77)
// This is a read-write property.
#define PR_URL_COMP_NAME PROP_TAG(PT_TSTRING, pidRenMsgFldMin + 0x73)
#define PR_URL_COMP_NAME_A PROP_TAG(PT_STRING8, pidRenMsgFldMin + 0x73)
#define PR_URL_COMP_NAME_W PROP_TAG(PT_UNICODE, pidRenMsgFldMin + 0x73)
// this is a read-only property
#define PR_PARENT_URL_NAME PROP_TAG(PT_TSTRING, pidAdminMin + 0x7D) // 0x670d
#define PR_PARENT_URL_NAME_A PROP_TAG(PT_STRING8, pidAdminMin + 0x7D)
#define PR_PARENT_URL_NAME_W PROP_TAG(PT_UNICODE, pidAdminMin + 0x7D)
// read-only property
#define PR_FLAT_URL_NAME PROP_TAG(PT_TSTRING, pidAdminMin + 0x7E) // 0x670e
#define PR_FLAT_URL_NAME_A PROP_TAG(PT_STRING8, pidAdminMin + 0x7E)
#define PR_FLAT_URL_NAME_W PROP_TAG(PT_UNICODE, pidAdminMin + 0x7E)
// read-only property
#define PR_SRC_URL_NAME PROP_TAG(PT_TSTRING, pidAdminMin + 0x7F) // 0x670f
#define PR_SRC_URL_NAME_A PROP_TAG(PT_STRING8, pidAdminMin + 0x7F)
#define PR_SRC_URL_NAME_W PROP_TAG(PT_UNICODE, pidAdminMin + 0x7F)
// Constant wstring to specify URL with fid</mid> encoded directly in the URL
// For example, URL L"/~FlatUrlSpace/1-401" will refer to folder with FID 1-401
// and URL L"/~FlatUrlSpace/1-401/2-8fb" will refer to message with MID 2-8fb
// in that folder.
// But remember that the FID/MID have to be long term, i.e GUID-Globcnt,
// the replid used above is simply to explain the idea simpler.
#define WSZ_URL_FLAT_FOLDER_SPACE L"/-FlatUrlSpace-/"
#define cwchUrlFlatFolderSpace 16
// Property that defines whether a folder is secure or not
#define PR_SECURE_IN_SITE PROP_TAG(PT_BOOLEAN, pidAdminMin + 0xE)
// PR_LOCAL_COMMIT_TIME is maintained on folders and messages. It is the
// FileTime when the object was modified last on the given MDB. It is updated
// any time the object is modified (including replicated in change).This is
// strictly computed, non-transmittable and non-copyable.
#define PR_LOCAL_COMMIT_TIME PROP_TAG(PT_SYSTIME, pidAdminMin + 0x79)
// PR_LOCAL_COMMIT_TIME_MAX is maintained on folders only.
// It is >= PR_LOCAL_COMMIT_TIME of all messages in the folder. It is updated
// any time any message in the folder is modified. This is strictly computed,
// non-transmittable and non-copyable.
#define PR_LOCAL_COMMIT_TIME_MAX PROP_TAG(PT_SYSTIME, pidAdminMin + 0x7a)
// PR_DELETED_COUNT_TOTAL is maintained on folders only.
// It is the total number of messages deleted in this folder from the beginning
// of time (well, rather from the time this feature is checked-in, folders from
// old servers that are upgraded will start with 0). If the count overflows the
// 4 bytes, it will start again at 0. This is updated whenever a message in the
// folder is deleted. This is strictly computed, non-transmitabble and
// non-copyable.
#define PR_DELETED_COUNT_TOTAL PROP_TAG(PT_LONG, pidAdminMin + 0x7b)
// PR_AUTO_RESET is maintained on messages only. It's PT_MV_CLSID and is deleted
// (by the store) anytime a message is saved, if it has not been
// explicitly set on the message between the time it was opened and saved
// (by the user/app that opened and later saved the message).
// It is intended to be used by async callback agents.
#define PR_AUTO_RESET PROP_TAG(PT_MV_CLSID, pidAdminMin + 0x7c)
/*------------------------------------------------------------------------
*
* TABLE object properties
*
* Id Range: 0x662F-0x662F
*
*-----------------------------------------------------------------------*/
// This property can be used in a contents table to get PR_ENTRYID returned
// as a long term entryid instead of a short term entryid.
#define PR_LONGTERM_ENTRYID_FROM_TABLE PROP_TAG(PT_BINARY, pidSpecialMin)
// This is read only property that is used for contents tables that include
// subfolder entries.
#define PR_SUBFOLDER PROP_TAG(PT_BOOLEAN, pidAdminMin + 0x78)
/*------------------------------------------------------------------------
*
* Gateway "MTE" ENVELOPE properties
*
* Id Range: 0x66E0-0x66FF
*
*-----------------------------------------------------------------------*/
#define PR_ORIGINATOR_NAME PROP_TAG(PT_TSTRING, pidMessageWriteableMin + 0x3)
#define PR_ORIGINATOR_ADDR PROP_TAG(PT_TSTRING, pidMessageWriteableMin + 0x4)
#define PR_ORIGINATOR_ADDRTYPE PROP_TAG(PT_TSTRING, pidMessageWriteableMin + 0x5)
#define PR_ORIGINATOR_ENTRYID PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0x6)
#define PR_ARRIVAL_TIME PROP_TAG(PT_SYSTIME, pidMessageWriteableMin + 0x7)
#define PR_TRACE_INFO PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0x8)
#define PR_INTERNAL_TRACE_INFO PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0x12)
#define PR_SUBJECT_TRACE_INFO PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0x9)
#define PR_RECIPIENT_NUMBER PROP_TAG(PT_LONG, pidMessageWriteableMin + 0xA)
#define PR_MTS_SUBJECT_ID PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0xB)
#define PR_REPORT_DESTINATION_NAME PROP_TAG(PT_TSTRING, pidMessageWriteableMin + 0xC)
#define PR_REPORT_DESTINATION_ENTRYID PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0xD)
#define PR_CONTENT_SEARCH_KEY PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0xE)
#define PR_FOREIGN_ID PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0xF)
#define PR_FOREIGN_REPORT_ID PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0x10)
#define PR_FOREIGN_SUBJECT_ID PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0x11)
#define PR_PROMOTE_PROP_ID_LIST PROP_TAG(PT_BINARY, pidMessageWriteableMin + 0x13)
#define PR_MTS_ID PR_MESSAGE_SUBMISSION_ID
#define PR_MTS_REPORT_ID PR_MESSAGE_SUBMISSION_ID
/*------------------------------------------------------------------------
*
* Trace properties format
* PR_TRACE_INFO
* PR_INTERNAL_TRACE_INFO
*
*-----------------------------------------------------------------------*/
#define MAX_ADMD_NAME_SIZ 17
#define MAX_PRMD_NAME_SIZ 17
#define MAX_COUNTRY_NAME_SIZ 4
#define MAX_MTA_NAME_SIZ 33
#define ADMN_PAD 3
#define PRMD_PAD 3
#define COUNTRY_PAD 0
#define MTA_PAD 3
#define PRMD_PAD_FOR_ACTIONS 2
#define MTA_PAD_FOR_ACTIONS 2
typedef struct {
LONG lAction; // The routing action the tracing site
// took.(1984 actions only)
FILETIME ftArrivalTime; // The time at which the communique
// entered the tracing site.
FILETIME ftDeferredTime; // The time are which the tracing site
// released the message.
char rgchADMDName[MAX_ADMD_NAME_SIZ + ADMN_PAD]; // ADMD
char rgchCountryName[MAX_COUNTRY_NAME_SIZ + COUNTRY_PAD]; // Country
char rgchPRMDId[MAX_PRMD_NAME_SIZ + PRMD_PAD]; // PRMD
char rgchAttADMDName[MAX_ADMD_NAME_SIZ + ADMN_PAD]; // Attempted ADMD
char rgchAttCountryName[MAX_COUNTRY_NAME_SIZ + COUNTRY_PAD]; // Attempted Country
char rgchAttPRMDId[MAX_PRMD_NAME_SIZ + PRMD_PAD_FOR_ACTIONS]; // Attempted PRMD
BYTE bAdditionalActions; // 1998 additional actions
} TRACEENTRY, FAR *LPTRACEENTRY;
typedef struct {
ULONG cEntries; // Number of trace entries
TRACEENTRY rgtraceentry[MAPI_DIM]; // array of trace entries
} TRACEINFO, FAR *LPTRACEINFO;
typedef struct {
LONG lAction; // The 1984 routing action the tracing domain took.
FILETIME ftArrivalTime; // The time at which the communique entered the tracing domain.
FILETIME ftDeferredTime; // The time are which the tracing domain released the message.
char rgchADMDName[MAX_ADMD_NAME_SIZ + ADMN_PAD]; // ADMD
char rgchCountryName[MAX_COUNTRY_NAME_SIZ + COUNTRY_PAD]; // Country
char rgchPRMDId[MAX_PRMD_NAME_SIZ + PRMD_PAD]; // PRMD
char rgchAttADMDName[MAX_ADMD_NAME_SIZ + ADMN_PAD]; // Attempted ADMD
char rgchAttCountryName[MAX_COUNTRY_NAME_SIZ + COUNTRY_PAD]; // Attempted Country
char rgchAttPRMDId[MAX_PRMD_NAME_SIZ + PRMD_PAD]; // Attempted PRMD
char rgchMTAName[MAX_MTA_NAME_SIZ + MTA_PAD]; // MTA Name
char rgchAttMTAName[MAX_MTA_NAME_SIZ + MTA_PAD_FOR_ACTIONS]; // Attempted MTA Name
BYTE bAdditionalActions; // 1988 additional actions
} INTTRACEENTRY, *PINTTRACEENTRY;
typedef struct {
ULONG cEntries; // Number of trace entries
INTTRACEENTRY rgIntTraceEntry[MAPI_DIM]; // array of internal trace entries
} INTTRACEINFO, *PINTTRACEINFO;
/*------------------------------------------------------------------------
*
* "IExchangeModifyTable" Interface Declaration
*
* Used for get/set rules and access control on folders.
*
*-----------------------------------------------------------------------*/
/* ulRowFlags */
#define ROWLIST_REPLACE ((ULONG)1)
#define ROW_ADD ((ULONG)1)
#define ROW_MODIFY ((ULONG)2)
#define ROW_REMOVE ((ULONG)4)
#define ROW_EMPTY (ROW_ADD | ROW_REMOVE)
typedef struct _ROWENTRY {
ULONG ulRowFlags;
ULONG cValues;
LPSPropValue rgPropVals;
} ROWENTRY, FAR *LPROWENTRY;
typedef struct _ROWLIST {
ULONG cEntries;
ROWENTRY aEntries[MAPI_DIM];
} ROWLIST, FAR *LPROWLIST;
#define EXCHANGE_IEXCHANGEMODIFYTABLE_METHODS(IPURE) \
MAPIMETHOD(GetLastError) \
(THIS_ HRESULT hResult, ULONG ulFlags, LPMAPIERROR FAR * lppMAPIError) IPURE; \
MAPIMETHOD(GetTable) \
(THIS_ ULONG ulFlags, LPMAPITABLE FAR * lppTable) IPURE; \
MAPIMETHOD(ModifyTable) \
(THIS_ ULONG ulFlags, LPROWLIST lpMods) IPURE;
#undef INTERFACE
#define INTERFACE IExchangeModifyTable
DECLARE_MAPI_INTERFACE_(IExchangeModifyTable,
IUnknown){MAPI_IUNKNOWN_METHODS(PURE) EXCHANGE_IEXCHANGEMODIFYTABLE_METHODS(PURE)};
#undef IMPL
#define IMPL
DECLARE_MAPI_INTERFACE_PTR(IExchangeModifyTable, LPEXCHANGEMODIFYTABLE);
/* Special flag bit for GetContentsTable, GetHierarchyTable and
OpenEntry.
Supported by > 5.x servers
If set in GetContentsTable and GetHierarchyTable
we will show only items that are soft deleted, i.e deleted
by user but not yet purged from the system. If set in OpenEntry
we will open this item even if it is soft deleted */
/* Flag bits must not collide by existing definitions in Mapi */
/****** MAPI_UNICODE ((ULONG) 0x80000000) above */
/****** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) below */
/****** MAPI_ASSOCIATED ((ULONG) 0x00000040) below */
/****** CONVENIENT_DEPTH ((ULONG) 0x00000001) */
#define SHOW_SOFT_DELETES ((ULONG)0x00000002)
#define SHOW_SUBFOLDERS ((ULONG)0x00000004)
// reserved flag bit(s) - do not set
#define MAPI_RESERVED1 ((ULONG)0x00010000)
// Do not block this OpenMessage (MAPI's OpenEntry)
#define MDB_OPEN_MSG_NO_BLOCK ((ULONG)0x00000020)
// Unlock a MID at SaveChanges
/****** KEEP_OPEN_READONLY ((ULONG) 0x00000001) */
/****** KEEP_OPEN_READWRITE ((ULONG) 0x00000002) */
/****** FORCE_SAVE ((ULONG) 0x00000004) */
/****** MAPI_DEFERRED_ERRORS ((ULONG) 0x00000008) */
#define MDB_SAVE_MSG_UNLOCK ((ULONG)0x00000040)
/* Special flag bit for DeleteFolder
Supported by > 5.x servers
If set the server will hard delete the folder (i.e it will not be
retained for later recovery) */
/* Flag bits must not collide by existing definitions in Mapi */
/* DeleteFolder */
/***** #define DEL_MESSAGES ((ULONG) 0x00000001) */
/***** #define FOLDER_DIALOG ((ULONG) 0x00000002) */
/***** #define DEL_FOLDERS ((ULONG) 0x00000004) */
/* EmptyFolder */
/***** #define DEL_ASSOCIATED ((ULONG) 0x00000008) */
#define DELETE_HARD_DELETE ((ULONG)0x00000010)
/* Access Control Specifics */
// Properties
#define PR_MEMBER_ID PROP_TAG(PT_I8, pidSpecialMin + 0x01)
#define PR_MEMBER_NAME PROP_TAG(PT_TSTRING, pidSpecialMin + 0x02)
#define PR_MEMBER_ENTRYID PR_ENTRYID
#define PR_MEMBER_RIGHTS PROP_TAG(PT_LONG, pidSpecialMin + 0x03)
// Security bits
typedef DWORD RIGHTS;
#define frightsReadAny 0x0000001L
#define frightsCreate 0x0000002L
#define frightsEditOwned 0x0000008L
#define frightsDeleteOwned 0x0000010L
#define frightsEditAny 0x0000020L
#define frightsDeleteAny 0x0000040L
#define frightsCreateSubfolder 0x0000080L
#define frightsOwner 0x0000100L
#define frightsContact 0x0000200L // NOTE: not part of rightsAll
#define frightsVisible 0x0000400L
#define rightsNone 0x00000000
#define rightsReadOnly frightsReadAny
#define rightsReadWrite (frightsReadAny | frightsEditAny)
#define rightsAll 0x00005FBL
//
// Mailbox specific access rights.
//
//
// Note that the sdpermUser rights do NOT exist in any security descriptor, they
// are maintained on the mailbox object in the store, and initialized from the
// user object in the DS.
//
#define fsdpermUserDeleteMailbox DELETE
#define fsdpermUserMailboxOwner 0x00000001
#define fsdpermUserSendAs 0x00000002
#define fsdpermUserPrimaryUser 0x00000004
#define sdpermUserGenericRead (STANDARD_RIGHTS_READ)
// generic execute
#define sdpermUserGenericExecute (STANDARD_RIGHTS_EXECUTE)
// generic write
#define sdpermUserGenericWrite (STANDARD_RIGHTS_WRITE | fsdpermUserDeleteMailbox)
// generic all
#define sdpermUserGenericAll \
(STANDARD_RIGHTS_ALL | fsdpermUserMailboxOwner | fsdpermUserSendAs | fsdpermUserPrimaryUser)
//
// Message specific rights.
//
typedef DWORD SDRIGHTS;
#define fsdrightReadBody 0x00000001 //** ONLY ON MESSAGES, SAME AS FILE_READ_DATA
#define fsdrightListContents 0x00000001 //** ONLY ON FOLDERS, SAME AS FILE_LIST_DATA - IGNORED
#define fsdrightWriteBody 0x00000002 //** ONLY ON MESSAGES, SAME AS FILE_WRITE_DATA
#define fsdrightCreateItem 0x00000002 //** ONLY ON FOLDERs, SAME AS FILE_ADD_FILE
#define fsdrightAppendMsg 0x00000004 //** ONLY ON MESSAGES, SAME AS FILE_WRITE_DATA. ENFORCED BY IFS.
#define fsdrightCreateContainer 0x00000004 //** ONLY ON FOLDERS, SAME AS FILE_ADD_FILE
#define fsdrightReadProperty 0x00000008 //** SAME AS FILE_READ_EA
#define fsdrightWriteProperty 0x00000010 //** SAME AS FILE_WRITE_EA
#define fsdrightExecute 0x00000020 // Same as FILE_EXECUTE/FILE_TRAVERSE. ENFORCED BY IFS
#define fsdrightReserved1 0x00000040 // Same as FILE_DELETE_CHILD.. Currently unused
#define fsdrightReadAttributes 0x00000080 // Same as FILE_READ_ATTRIBUTES. Currently unused
#define fsdrightWriteAttributes 0x00000100 // Same as FILE_WRITE_ATTRIBUTES. Currently unused
#define fsdrightWriteOwnProperty 0x00000200 //** ONLY ON MESSAGES
#define fsdrightDeleteOwnItem 0x00000400 //** ONLY ON MESSAGES
#define fsdrightViewItem 0x00000800