ECDebug.cpp 77 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153
  1. /*
  2. * Copyright 2005 - 2016 Zarafa and its licensors
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU Affero General Public License, version 3,
  6. * as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU Affero General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU Affero General Public License
  14. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  15. *
  16. */
  17. #include <kopano/platform.h>
  18. #include <kopano/ECDebug.h>
  19. #include <mapidefs.h>
  20. #include <mapispi.h>
  21. #include <edkmdb.h>
  22. #include <kopano/mapiext.h>
  23. #include "freebusytags.h"
  24. #include <kopano/stringutil.h>
  25. #include <kopano/charset/convert.h>
  26. #include <kopano/ECTags.h>
  27. #include <kopano/EMSAbTag.h>
  28. #include <kopano/ECABEntryID.h>
  29. #include <mapiguid.h>
  30. #include <kopano/mapiguidext.h>
  31. #include <edkguid.h>
  32. #include <kopano/ECGuid.h>
  33. #include "freebusyguid.h"
  34. #include <iostream>
  35. #include <sstream>
  36. #include <kopano/mapi_ptr.h>
  37. using namespace std;
  38. namespace KC {
  39. #define RETURN_ERROR_CASE(x) \
  40. case x: \
  41. return (HR_FAILED(x) ? "FAILED: " #x : ((x == hrSuccess) ? #x : "WARNING: " #x));
  42. #define RETURN_CASE(x) \
  43. case x: \
  44. return #x;
  45. #define RETURN_PROP_CASE(pt) case PROP_ID(pt): return((#pt))
  46. /**
  47. * Guid debug list
  48. */
  49. static const INFOGUID sGuidList[] = {
  50. //Mapi
  51. {0, (GUID*)&IID_IUnknown, "IID_IUnknown"},
  52. {0, (GUID*)&IID_IMAPISession, "IID_IMAPISession"},
  53. {0, (GUID*)&IID_IMAPITable, "IID_IMAPITable"},
  54. {0, (GUID*)&IID_IMAPIAdviseSink, "IID_IMAPIAdviseSink"},
  55. {0, (GUID*)&IID_IMAPIProp, "IID_IMAPIProp"},
  56. {0, (GUID*)&IID_IProfSect, "IID_IProfSect"},
  57. {0, (GUID*)&IID_IMAPIStatus, "IID_IMAPIStatus"},
  58. {0, (GUID*)&IID_IMsgStore, "IID_IMsgStore"},
  59. {0, (GUID*)&IID_IMessage, "IID_IMessage"},
  60. {0, (GUID*)&IID_IAttachment, "IID_IAttachment"},
  61. {0, (GUID*)&IID_IAddrBook, "IID_IAddrBook"},
  62. {0, (GUID*)&IID_IMailUser, "IID_IMailUser"},
  63. {0, (GUID*)&IID_IMAPIContainer, "IID_IMAPIContainer"},
  64. {0, (GUID*)&IID_IMAPIFolder, "IID_IMAPIFolder"},
  65. {0, (GUID*)&IID_IABContainer, "IID_IABContainer"},
  66. {0, (GUID*)&IID_IDistList, "IID_IDistList"},
  67. {0, (GUID*)&IID_IMAPISup, "IID_IMAPISup"},
  68. {0, (GUID*)&IID_IMSProvider, "IID_IMSProvider"},
  69. {0, (GUID*)&IID_IABProvider, "IID_IABProvider"},
  70. {0, (GUID*)&IID_IXPProvider, "IID_IXPProvider"},
  71. {0, (GUID*)&IID_IMSLogon, "IID_IMSLogon"},
  72. {0, (GUID*)&IID_IABLogon, "IID_IABLogon"},
  73. {0, (GUID*)&IID_IXPLogon, "IID_IXPLogon"},
  74. {0, (GUID*)&IID_IMAPITableData, "IID_IMAPITableData"},
  75. {0, (GUID*)&IID_IMAPISpoolerInit, "IID_IMAPISpoolerInit"},
  76. {0, (GUID*)&IID_IMAPISpoolerSession, "IID_IMAPISpoolerSession"},
  77. {0, (GUID*)&IID_ITNEF, "IID_ITNEF"},
  78. {0, (GUID*)&IID_IMAPIPropData, "IID_IMAPIPropData"},
  79. {0, (GUID*)&IID_IMAPIControl, "IID_IMAPIControl"},
  80. {0, (GUID*)&IID_IProfAdmin, "IID_IProfAdmin"},
  81. {0, (GUID*)&IID_IMsgServiceAdmin, "IID_IMsgServiceAdmin"},
  82. {0, (GUID*)&IID_IMAPISpoolerService, "IID_IMAPISpoolerService"},
  83. {0, (GUID*)&IID_IMAPIProgress, "IID_IMAPIProgress"},
  84. {0, (GUID*)&IID_ISpoolerHook, "IID_ISpoolerHook"},
  85. {0, (GUID*)&IID_IMAPIViewContext, "IID_IMAPIViewContext"},
  86. {0, (GUID*)&IID_IMAPIFormMgr, "IID_IMAPIFormMgr"},
  87. {0, (GUID*)&IID_IEnumMAPIFormProp, "IID_IEnumMAPIFormProp"},
  88. {0, (GUID*)&IID_IMAPIFormInfo, "IID_IMAPIFormInfo"},
  89. {0, (GUID*)&IID_IProviderAdmin, "IID_IProviderAdmin"},
  90. {0, (GUID*)&IID_IMAPIForm, "IID_IMAPIForm"},
  91. {0, (GUID*)&IID_IPersistMessage, "IID_IPersistMessage"},
  92. {0, (GUID*)&IID_IMAPIViewAdviseSink, "IID_IMAPIViewAdviseSink"},
  93. {0, (GUID*)&IID_IStreamDocfile, "IID_IStreamDocfile"},
  94. {0, (GUID*)&IID_IMAPIFormProp, "IID_IMAPIFormProp"},
  95. {0, (GUID*)&IID_IMAPIFormContainer, "IID_IMAPIFormContainer"},
  96. {0, (GUID*)&IID_IMAPIFormAdviseSink, "IID_IMAPIFormAdviseSink"},
  97. {0, (GUID*)&IID_IStreamTnef, "IID_IStreamTnef"},
  98. {0, (GUID*)&IID_IMAPIFormFactory, "IID_IMAPIFormFactory"},
  99. {0, (GUID*)&IID_IMAPIMessageSite, "IID_IMAPIMessageSite"},
  100. {0, (GUID*)&PS_ROUTING_EMAIL_ADDRESSES, "PS_ROUTING_EMAIL_ADDRESSES"},
  101. {0, (GUID*)&PS_ROUTING_ADDRTYPE, "PS_ROUTING_ADDRTYPE"},
  102. {0, (GUID*)&PS_ROUTING_DISPLAY_NAME, "PS_ROUTING_DISPLAY_NAME"},
  103. {0, (GUID*)&PS_ROUTING_ENTRYID, "PS_ROUTING_ENTRYID"},
  104. {0, (GUID*)&PS_ROUTING_SEARCH_KEY, "PS_ROUTING_SEARCH_KEY"},
  105. {0, (GUID*)&MUID_PROFILE_INSTANCE, "MUID_PROFILE_INSTANCE"},
  106. //Exchange
  107. {1, (GUID*)&GUID_ExchangeFormExts, "GUID_ExchangeFormExts"},
  108. {1, (GUID*)&LIBID_aclcls, "LIBID_aclcls"},
  109. {1, (GUID*)&IID_IExchangeFolderACLs, "IID_IExchangeFolderACLs"},
  110. {1, (GUID*)&IID_IExchangeRuleExtCallback, "IID_IExchangeRuleExtCallback"},
  111. {1, (GUID*)&IID_IExchangeRuleExt, "IID_IExchangeRuleExt"},
  112. {1, (GUID*)&LIBID_rulecls, "LIBID_rulecls"},
  113. {1, (GUID*)&IID_IExchangeFolderRules, "IID_IExchangeFolderRules"},
  114. {1, (GUID*)&IID_IExchangeManageStore, "IID_IExchangeManageStore"},
  115. {1, (GUID*)&IID_IExchangeManageStore2, "IID_IExchangeManageStore2"},
  116. {1, (GUID*)&IID_IExchangeManageStore3, "IID_IExchangeManageStore3"},
  117. {1, (GUID*)&IID_IExchangeManageStore4, "IID_IExchangeManageStore4"},
  118. {1, (GUID*)&IID_IExchangeManageStore5, "IID_IExchangeManageStore5"},
  119. {1, (GUID*)&IID_IExchangeModifyTable, "IID_IExchangeModifyTable"},
  120. {1, (GUID*)&IID_IExchangeRuleAction, "IID_IExchangeRuleAction"},
  121. {1, (GUID*)&IID_IExchangeFastTransfer, "IID_IExchangeFastTransfer"},
  122. {1, (GUID*)&IID_IExchangeExportChanges, "IID_IExchangeExportChanges"},
  123. {1, (GUID*)&IID_IExchangeExportChanges2, "IID_IExchangeExportChanges2"},
  124. {1, (GUID*)&IID_IExchangeExportChanges3, "IID_IExchangeExportChanges3"},
  125. {1, (GUID*)&IID_IExchangeImportHierarchyChanges, "IID_IExchangeImportHierarchyChanges"},
  126. {1, (GUID*)&IID_IExchangeImportContentsChanges, "IID_IExchangeImportContentsChanges"},
  127. {1, (GUID*)&IID_IExchangeChangeAdvisor, "IID_IExchangeChangeAdvisor"},
  128. {1, (GUID*)&IID_IExchangeMessageConversion, "IID_IExchangeMessageConversion"},
  129. {1, (GUID*)&IID_IExchangeFavorites, "IID_IExchangeFavorites"},
  130. {1, (GUID*)&IID_IExchangeNntpNewsfeed, "IID_IExchangeNntpNewsfeed"},
  131. {1, (GUID*)&IID_IExchangeBadItemCallback, "IID_IExchangeBadItemCallback"},
  132. {1, (GUID*)&IID_IExchangeMoveUserProgress, "IID_IExchangeMoveUserProgress"},
  133. {1, (GUID*)&IID_IExchangeMessageCpid0, "IID_IExchangeMessageCpid0"},
  134. {1, (GUID*)&IID_IExchangeServer, "IID_IExchangeServer"},
  135. {1, (GUID*)&IID_IStorageGroup, "IID_IStorageGroup"},
  136. {1, (GUID*)&IID_IPublicStoreDB, "IID_IPublicStoreDB"},
  137. {1, (GUID*)&IID_IPublicStoreDB2, "IID_IPublicStoreDB2"},
  138. {1, (GUID*)&IID_IMailboxStoreDB, "IID_IMailboxStoreDB"},
  139. {1, (GUID*)&IID_IMailboxStoreDB2, "IID_IMailboxStoreDB2"},
  140. {1, (GUID*)&IID_IFolderTree, "IID_IFolderTree"},
  141. {1, (GUID*)&IID_IDataSource2, "IID_IDataSource2"},
  142. {1, (GUID*)&IID_IExchExtCallback, "IID_IExchExtCallback"},
  143. {1, (GUID*)&IID_IExchExt, "IID_IExchExt"},
  144. {1, (GUID*)&IID_IExchExtCommands, "IID_IExchExtCommands"},
  145. {1, (GUID*)&IID_IExchExtUserEvents, "IID_IExchExtUserEvents"},
  146. {1, (GUID*)&IID_IExchExtSessionEvents, "IID_IExchExtSessionEvents"},
  147. {1, (GUID*)&IID_IExchExtMessageEvents, "IID_IExchExtMessageEvents"},
  148. {1, (GUID*)&IID_IExchExtAttachedFileEvents, "IID_IExchExtAttachedFileEvents"},
  149. {1, (GUID*)&IID_IExchExtPropertySheets, "IID_IExchExtPropertySheets"},
  150. {1, (GUID*)&IID_IExchExtAdvancedCriteria, "IID_IExchExtAdvancedCriteria"},
  151. {1, (GUID*)&IID_IExchExtModeless, "IID_IExchExtModeless"},
  152. {1, (GUID*)&IID_IExchExtModelessCallback, "IID_IExchExtModelessCallback"},
  153. {1, (GUID*)&IID_IConverterSession, "IID_IConverterSession"},
  154. {1, (GUID*)&IID_IMAPIOffline, "IID_IMAPIOffline"},
  155. {1, (GUID*)&IID_IMAPIOfflineNotify, "IID_IMAPIOfflineNotify"},
  156. {1, (GUID*)&IID_IMAPIOfflineMgr, "IID_IMAPIOfflineMgr"},
  157. {1, (GUID*)&IID_IPSTX, "IID_IPSTX"},
  158. {1, (GUID*)&IID_IPSTX2, "IID_IPSTX2"},
  159. {1, (GUID*)&IID_IPSTX3, "IID_IPSTX3"},
  160. {1, (GUID*)&IID_IPSTX4, "IID_IPSTX4"},
  161. {1, (GUID*)&IID_IPSTX5, "IID_IPSTX5"},
  162. {1, (GUID*)&IID_IPSTX6, "IID_IPSTX6"},
  163. {1, (GUID*)&IID_IOSTX, "IID_IOSTX"},
  164. {1, (GUID*)&IID_IMAPIFolderNoProvChk, "IID_IMAPIFolderNoProvChk"},
  165. {1, (GUID*)&IID_IMessageNoProvChk, "IID_IMessageNoProvChk"},
  166. {1, (GUID*)&IID_IEnumFBBlock, "IID_IEnumFBBlock"},
  167. {1, (GUID*)&IID_IFreeBusyData, "IID_IFreeBusyData"},
  168. {1, (GUID*)&IID_IFreeBusySupport, "IID_IFreeBusySupport"},
  169. {1, (GUID*)&IID_IFreeBusyUpdate, "IID_IFreeBusyUpdate"},
  170. {1, (GUID*)&IID_IOlkErrorUnknown, "IID_IOlkErrorUnknown"},
  171. {1, (GUID*)&IID_IOlkEnum, "IID_IOlkEnum"},
  172. {1, (GUID*)&IID_IOlkAccountNotify, "IID_IOlkAccountNotify"},
  173. {1, (GUID*)&IID_IOlkAccountHelper, "IID_IOlkAccountHelper"},
  174. {1, (GUID*)&IID_IOlkAccountManager, "IID_IOlkAccountManager"},
  175. {1, (GUID*)&IID_IOlkAccount, "IID_IOlkAccount"},
  176. {1, (GUID*)&IID_IAttachmentSecurity, "IID_IAttachmentSecurity"}, //Outlook 2007
  177. {1, (GUID*)&IID_ISelectUnicode, "IID_ISelectUnicode"},
  178. {1, (GUID*)&IID_IMAPIClientShutdown, "IID_IMAPIClientShutdown"},
  179. {1, (GUID*)&IID_IMAPIProviderShutdown, "IID_IMAPIProviderShutdown"},
  180. {1, (GUID*)&GUID_Dilkie, "GUID_Dilkie"},
  181. {1, (GUID*)&IID_IMAPIWrappedObject, "IID_IMAPIWrappedObject"},
  182. {1, (GUID*)&IID_IMAPISessionUnknown, "IID_IMAPISessionUnknown"},
  183. {1, (GUID*)&IID_IMAPISupportUnknown, "IID_IMAPISupportUnknown"},
  184. {1, (GUID*)&IID_IMsgServiceAdmin2, "IID_IMsgServiceAdmin2"},
  185. {1, (GUID*)&IID_IAddrBookSession, "IID_IAddrBookSession"},
  186. {1, (GUID*)&IID_CAPONE_PROF, "IID_CAPONE_PROF"},
  187. {1, (GUID*)&IID_IMAPISync, "IID_IMAPISync"},
  188. {1, (GUID*)&IID_IMAPISyncProgressCallback, "IID_IMAPISyncProgressCallback"},
  189. {1, (GUID*)&IID_IMAPISecureMessage, "IID_IMAPISecureMessage"},
  190. {1, (GUID*)&IID_IMAPIGetSession, "IID_IMAPIGetSession"},
  191. // Kopano
  192. {3, (GUID*)&IID_IECSpooler, "IID_IECSpooler"},
  193. {3, (GUID*)&IID_IECServiceAdmin , "IID_IECServiceAdmin"},
  194. {3, (GUID*)&IID_ECMSProvider , "IID_ECMSProvider"},
  195. {3, (GUID*)&IID_ECXPProvider , "IID_ECXPProvider"},
  196. {3, (GUID*)&IID_ECABProvider , "IID_ECABProvider"},
  197. {3, (GUID*)&IID_ECMsgStore , "IID_ECMsgStore"},
  198. {3, (GUID*)&IID_ECMSLogon , "IID_ECMSLogon"},
  199. {3, (GUID*)&IID_ECXPLogon , "IID_ECXPLogon"},
  200. {3, (GUID*)&IID_ECABLogon , "IID_ECABLogon"},
  201. {3, (GUID*)&IID_ECMAPIFolder , "IID_ECMAPIFolder"},
  202. {3, (GUID*)&IID_ECMessage , "IID_ECMessage"},
  203. {3, (GUID*)&IID_ECMAPIProp , "IID_ECMAPIProp"},
  204. {3, (GUID*)&IID_ECMAPITable , "IID_ECMAPITable"},
  205. {3, (GUID*)&IID_ECRecipTable , "IID_ECRecipTable"},
  206. {3, (GUID*)&IID_ECUnknown , "IID_ECUnknown"},
  207. {3, (GUID*)&IID_ECTableOutGoingQueue , "IID_ECTableOutGoingQueue"},
  208. {3, (GUID*)&IID_ECNotifyClient , "IID_ECNotifyClient"},
  209. {3, (GUID*)&IID_IECPropStorage , "IID_IECPropStorage"},
  210. {3, (GUID*)&IID_ECTransport , "IID_ECTransport"},
  211. {3, (GUID*)&IID_ECMAPIFolderOps , "IID_ECMAPIFolderOps"},
  212. {3, (GUID*)&IID_ECTableView , "IID_ECTableView"},
  213. {3, (GUID*)&IID_ECExchangeModifyTable , "IID_ECExchangeModifyTable"},
  214. {3, (GUID*)&IID_ECMemBlock , "IID_ECMemBlock"},
  215. {3, (GUID*)&IID_ECMemTable , "IID_ECMemTable"},
  216. {3, (GUID*)&IID_ECMemTableView , "IID_ECMemTableView"},
  217. {3, (GUID*)&IID_ECMemStream , "IID_ECMemStream"},
  218. {3, (GUID*)&IDD_ECUserGroupArray , "IDD_ECUserGroupArray"},
  219. {3, (GUID*)&IDD_ECRightsArray , "IDD_ECRightsArray"},
  220. {3, (GUID*)&IID_ECTransportNotify , "IID_ECTransportNotify"},
  221. {3, (GUID*)&IID_ECAttach , "IID_ECAttach"},
  222. {3, (GUID*)&IID_ECMemPropStorage , "IID_ECMemPropStorage"},
  223. {3, (GUID*)&IID_ECExchangeImportHierarchyChanges , "IID_ECExchangeImportHierarchyChanges"},
  224. {3, (GUID*)&IID_ECExchangeImportContentsChanges , "IID_ECExchangeImportContentsChanges"},
  225. {3, (GUID*)&IID_ECExchangeExportChanges , "IID_ECExchangeExportChanges"},
  226. {3, (GUID*)&IID_WSABPropStorage , "IID_WSABPropStorage"},
  227. {3, (GUID*)&IID_ECABProp , "IID_ECABProp"},
  228. {3, (GUID*)&IID_ECMailUser , "IID_ECMailUser"},
  229. {3, (GUID*)&IID_ECDistList , "IID_ECDistList"},
  230. {3, (GUID*)&IID_ECMsgStoreOffline , "IID_ECMsgStoreOffline"},
  231. {3, (GUID*)&IID_ECMsgStoreOnline , "IID_ECMsgStoreOnline"},
  232. {3, (GUID*)&IID_IECExportAddressbookChanges , "IID_IECExportAddressbookChanges"},
  233. {3, (GUID*)&IID_ECFreeBusyUpdate , "IID_ECFreeBusyUpdate"},
  234. {3, (GUID*)&IID_IECExportChanges , "IID_IECExportChanges"},
  235. {3, (GUID*)&IID_ECEnumFBBlock , "IID_ECEnumFBBlock"},
  236. {3, (GUID*)&IID_ECFreeBusyData , "IID_ECFreeBusyData"},
  237. {3, (GUID*)&IID_ECFreeBusySupport , "IID_ECFreeBusySupport"},
  238. {3, (GUID*)&IID_IECImportContentsChanges, "IID_IECImportContentsChanges"},
  239. // kopano ms/ab/xp/ guids
  240. {3, (GUID*)&KOPANO_SERVICE_GUID , "Kopano Private store"},
  241. {3, (GUID*)&KOPANO_STORE_PUBLIC_GUID , "Kopano Public Store"},
  242. {3, (GUID*)&MUIDECSAB, "Kopano Address Book"},
  243. {3, (GUID*)&KOPANO_STORE_DELEGATE_GUID, "Kopano Delegate Store"},
  244. {3, (GUID*)&GUID_NULL , "GUID_NULL"},
  245. {4, (GUID*)&IID_IMSCapabilities, "IID_IMSCapabilities"},
  246. {4, (GUID*)&IID_IFolderSupport, "IID_IFolderSupport"},
  247. {4, (GUID*)&IID_IMessageRaw , "IID_IMessageRaw"},
  248. {4, (GUID*)&IID_IProxyStoreObject , "IID_IProxyStoreObject"},
  249. {4, (GUID*)&IID_IOutlookExtCallback , "IID_IOutlookExtCallback"},
  250. {4, (GUID*)&IID_IStream, "IID_IStream"},
  251. // Profile guids
  252. {4, (GUID*)&pbGlobalProfileSectionGuid , "pbGlobalProfileSectionGuid"},
  253. //Named property guid
  254. {5, (GUID*)&PS_PUBLIC_STRINGS, "PS_PUBLIC_STRINGS"},
  255. {5, (GUID*)&PS_MAPI, "PS_MAPI"},
  256. {5, (GUID*)&PS_INTERNET_HEADERS, "PS_INTERNET_HEADERS"},
  257. {5, (GUID*)&PSETID_Appointment, "PSETID_Appointment"},
  258. {5, (GUID*)&PSETID_Task, "PSETID_Task"},
  259. {5, (GUID*)&PSETID_Address, "PSETID_Address"},
  260. {5, (GUID*)&PSETID_Common, "PSETID_Common"},
  261. {5, (GUID*)&PSETID_Log, "PSETID_Log"},
  262. {5, (GUID*)&PSETID_Meeting, "PSETID_Meeting"},
  263. {5, (GUID*)&PSETID_Note, "PSETID_Note"},
  264. {5, (GUID*)&PSETID_Sharing, "PSETID_Sharing"},
  265. {5, (GUID*)&PSETID_PostRss, "PSETID_PostRss"},
  266. {5, (GUID*)&PSETID_UnifiedMessaging, "PSETID_UnifiedMessaging"},
  267. {5, (GUID*)&PSETID_AirSync, "PSETID_AirSync"},
  268. {5, (GUID*)&PSETID_CalendarAssistant, "PSETID_CalendarAssistant"},
  269. {5, (GUID*)&PSETID_CONTACT_FOLDER_RECIPIENT, "PSETID_CONTACT_FOLDER_RECIPIENT"},
  270. {5, (GUID*)&PSETID_Kopano_CalDav, "PSETID_Kopano_CalDav"},
  271. {5, (GUID*)&PS_EC_IMAP, "PS_EC_IMAP"},
  272. //End of list
  273. {0, NULL}
  274. };
  275. std::string GetMAPIErrorDescription(HRESULT hResult)
  276. {
  277. #define SUCCESS 0
  278. switch(hResult) {
  279. // Succes ( 6 )
  280. RETURN_ERROR_CASE(SUCCESS)
  281. RETURN_ERROR_CASE(MAPI_W_NO_SERVICE)
  282. RETURN_ERROR_CASE(MAPI_W_ERRORS_RETURNED)
  283. RETURN_ERROR_CASE(MAPI_W_POSITION_CHANGED)
  284. RETURN_ERROR_CASE(MAPI_W_APPROX_COUNT)
  285. RETURN_ERROR_CASE(MAPI_W_CANCEL_MESSAGE)
  286. RETURN_ERROR_CASE(MAPI_W_PARTIAL_COMPLETION)
  287. // Errors ( 69 )
  288. RETURN_ERROR_CASE(MAPI_E_INTERFACE_NOT_SUPPORTED)
  289. RETURN_ERROR_CASE(MAPI_E_CALL_FAILED)
  290. RETURN_ERROR_CASE(MAPI_E_NO_SUPPORT)
  291. RETURN_ERROR_CASE(MAPI_E_BAD_CHARWIDTH)
  292. RETURN_ERROR_CASE(MAPI_E_STRING_TOO_LONG)
  293. RETURN_ERROR_CASE(MAPI_E_UNKNOWN_FLAGS)
  294. RETURN_ERROR_CASE(MAPI_E_INVALID_ENTRYID)
  295. RETURN_ERROR_CASE(MAPI_E_INVALID_OBJECT)
  296. RETURN_ERROR_CASE(MAPI_E_OBJECT_CHANGED)
  297. RETURN_ERROR_CASE(MAPI_E_OBJECT_DELETED)
  298. RETURN_ERROR_CASE(MAPI_E_BUSY)
  299. RETURN_ERROR_CASE(MAPI_E_NOT_ENOUGH_DISK)
  300. RETURN_ERROR_CASE(MAPI_E_NOT_ENOUGH_RESOURCES)
  301. RETURN_ERROR_CASE(MAPI_E_NOT_FOUND)
  302. RETURN_ERROR_CASE(MAPI_E_VERSION)
  303. RETURN_ERROR_CASE(MAPI_E_LOGON_FAILED)
  304. RETURN_ERROR_CASE(MAPI_E_SESSION_LIMIT)
  305. RETURN_ERROR_CASE(MAPI_E_USER_CANCEL)
  306. RETURN_ERROR_CASE(MAPI_E_UNABLE_TO_ABORT)
  307. RETURN_ERROR_CASE(MAPI_E_NETWORK_ERROR)
  308. RETURN_ERROR_CASE(MAPI_E_DISK_ERROR)
  309. RETURN_ERROR_CASE(MAPI_E_TOO_COMPLEX)
  310. RETURN_ERROR_CASE(MAPI_E_BAD_COLUMN)
  311. RETURN_ERROR_CASE(MAPI_E_EXTENDED_ERROR)
  312. RETURN_ERROR_CASE(MAPI_E_COMPUTED)
  313. RETURN_ERROR_CASE(MAPI_E_CORRUPT_DATA)
  314. RETURN_ERROR_CASE(MAPI_E_UNCONFIGURED)
  315. RETURN_ERROR_CASE(MAPI_E_FAILONEPROVIDER)
  316. RETURN_ERROR_CASE(MAPI_E_UNKNOWN_CPID)
  317. RETURN_ERROR_CASE(MAPI_E_UNKNOWN_LCID)
  318. RETURN_ERROR_CASE(MAPI_E_PASSWORD_CHANGE_REQUIRED)
  319. RETURN_ERROR_CASE(MAPI_E_PASSWORD_EXPIRED)
  320. RETURN_ERROR_CASE(MAPI_E_INVALID_WORKSTATION_ACCOUNT)
  321. RETURN_ERROR_CASE(MAPI_E_INVALID_ACCESS_TIME)
  322. RETURN_ERROR_CASE(MAPI_E_ACCOUNT_DISABLED)
  323. RETURN_ERROR_CASE(MAPI_E_END_OF_SESSION)
  324. RETURN_ERROR_CASE(MAPI_E_UNKNOWN_ENTRYID)
  325. RETURN_ERROR_CASE(MAPI_E_MISSING_REQUIRED_COLUMN)
  326. RETURN_ERROR_CASE(MAPI_E_BAD_VALUE)
  327. RETURN_ERROR_CASE(MAPI_E_INVALID_TYPE)
  328. RETURN_ERROR_CASE(MAPI_E_TYPE_NO_SUPPORT)
  329. RETURN_ERROR_CASE(MAPI_E_UNEXPECTED_TYPE)
  330. RETURN_ERROR_CASE(MAPI_E_TOO_BIG)
  331. RETURN_ERROR_CASE(MAPI_E_DECLINE_COPY)
  332. RETURN_ERROR_CASE(MAPI_E_UNEXPECTED_ID)
  333. RETURN_ERROR_CASE(MAPI_E_UNABLE_TO_COMPLETE)
  334. RETURN_ERROR_CASE(MAPI_E_TIMEOUT)
  335. RETURN_ERROR_CASE(MAPI_E_TABLE_EMPTY)
  336. RETURN_ERROR_CASE(MAPI_E_TABLE_TOO_BIG)
  337. RETURN_ERROR_CASE(MAPI_E_INVALID_BOOKMARK)
  338. RETURN_ERROR_CASE(MAPI_E_WAIT)
  339. RETURN_ERROR_CASE(MAPI_E_CANCEL)
  340. RETURN_ERROR_CASE(MAPI_E_NOT_ME)
  341. RETURN_ERROR_CASE(MAPI_E_CORRUPT_STORE)
  342. RETURN_ERROR_CASE(MAPI_E_NOT_IN_QUEUE)
  343. RETURN_ERROR_CASE(MAPI_E_NO_SUPPRESS)
  344. RETURN_ERROR_CASE(MAPI_E_COLLISION)
  345. RETURN_ERROR_CASE(MAPI_E_NOT_INITIALIZED)
  346. RETURN_ERROR_CASE(MAPI_E_NON_STANDARD)
  347. RETURN_ERROR_CASE(MAPI_E_NO_RECIPIENTS)
  348. RETURN_ERROR_CASE(MAPI_E_SUBMITTED)
  349. RETURN_ERROR_CASE(MAPI_E_HAS_FOLDERS)
  350. RETURN_ERROR_CASE(MAPI_E_HAS_MESSAGES)
  351. RETURN_ERROR_CASE(MAPI_E_FOLDER_CYCLE)
  352. RETURN_ERROR_CASE(MAPI_E_STORE_FULL)
  353. RETURN_ERROR_CASE(MAPI_E_AMBIGUOUS_RECIP)
  354. RETURN_ERROR_CASE(MAPI_E_INVALID_PARAMETER)
  355. RETURN_ERROR_CASE(MAPI_E_NOT_ENOUGH_MEMORY)
  356. RETURN_ERROR_CASE(MAPI_E_NO_ACCESS)
  357. default:
  358. break;
  359. }
  360. char szResult[DEBUGBUFSIZE+1];
  361. snprintf(szResult, DEBUGBUFSIZE, "0x%08X", hResult);
  362. return szResult;
  363. }
  364. std::string PropNameFromPropArray(ULONG cValues, const SPropValue *lpPropArray)
  365. {
  366. std::string data;
  367. if(lpPropArray == NULL)
  368. return "NULL";
  369. else if(cValues == 0)
  370. return "EMPTY";
  371. for (unsigned int i = 0; i < cValues; ++i) {
  372. if(i>0)
  373. data+=", ";
  374. data += PropNameFromPropTag(lpPropArray[i].ulPropTag);
  375. data += ": ";
  376. data += PropValueToString(&lpPropArray[i]);
  377. data += "\n";
  378. }
  379. return data;
  380. }
  381. std::string PropNameFromPropTagArray(const SPropTagArray *lpPropTagArray)
  382. {
  383. std::string data;
  384. if(lpPropTagArray == NULL)
  385. return "NULL";
  386. else if(lpPropTagArray->cValues == 0)
  387. return "EMPTY";
  388. for (unsigned int i = 0; i < lpPropTagArray->cValues; ++i) {
  389. if(i>0)
  390. data+=", ";
  391. data += PropNameFromPropTag(lpPropTagArray->aulPropTag[i]);
  392. if (PROP_TYPE(lpPropTagArray->aulPropTag[i]) == PT_UNICODE)
  393. data += "_W";
  394. else if (PROP_TYPE(lpPropTagArray->aulPropTag[i]) == PT_STRING8)
  395. data += "_A";
  396. }
  397. return data;
  398. }
  399. std::string PropNameFromPropTag(ULONG ulPropTag)
  400. {
  401. switch (PROP_ID(ulPropTag))
  402. {
  403. // Begin <MAPItags.h>
  404. RETURN_PROP_CASE(PR_ACKNOWLEDGEMENT_MODE);
  405. RETURN_PROP_CASE(PR_ALTERNATE_RECIPIENT_ALLOWED);
  406. RETURN_PROP_CASE(PR_AUTHORIZING_USERS);
  407. RETURN_PROP_CASE(PR_AUTO_FORWARD_COMMENT);
  408. RETURN_PROP_CASE(PR_AUTO_FORWARDED);
  409. RETURN_PROP_CASE(PR_CONTENT_CONFIDENTIALITY_ALGORITHM_ID);
  410. RETURN_PROP_CASE(PR_CONTENT_CORRELATOR);
  411. RETURN_PROP_CASE(PR_CONTENT_IDENTIFIER);
  412. RETURN_PROP_CASE(PR_CONTENT_LENGTH);
  413. RETURN_PROP_CASE(PR_CONTENT_RETURN_REQUESTED);
  414. RETURN_PROP_CASE(PR_CONVERSATION_KEY);
  415. RETURN_PROP_CASE(PR_CONVERSION_EITS);
  416. RETURN_PROP_CASE(PR_CONVERSION_WITH_LOSS_PROHIBITED);
  417. RETURN_PROP_CASE(PR_CONVERTED_EITS);
  418. RETURN_PROP_CASE(PR_DEFERRED_DELIVERY_TIME);
  419. RETURN_PROP_CASE(PR_DELIVER_TIME);
  420. RETURN_PROP_CASE(PR_DISCARD_REASON);
  421. RETURN_PROP_CASE(PR_DISCLOSURE_OF_RECIPIENTS);
  422. RETURN_PROP_CASE(PR_DL_EXPANSION_HISTORY);
  423. RETURN_PROP_CASE(PR_DL_EXPANSION_PROHIBITED);
  424. RETURN_PROP_CASE(PR_EXPIRY_TIME);
  425. RETURN_PROP_CASE(PR_IMPLICIT_CONVERSION_PROHIBITED);
  426. RETURN_PROP_CASE(PR_IMPORTANCE);
  427. RETURN_PROP_CASE(PR_IPM_ID);
  428. RETURN_PROP_CASE(PR_LATEST_DELIVERY_TIME);
  429. RETURN_PROP_CASE(PR_MESSAGE_CLASS);
  430. RETURN_PROP_CASE(PR_MESSAGE_DELIVERY_ID);
  431. RETURN_PROP_CASE(PR_MESSAGE_SECURITY_LABEL);
  432. RETURN_PROP_CASE(PR_OBSOLETED_IPMS);
  433. RETURN_PROP_CASE(PR_ORIGINALLY_INTENDED_RECIPIENT_NAME);
  434. RETURN_PROP_CASE(PR_ORIGINAL_EITS);
  435. RETURN_PROP_CASE(PR_ORIGINATOR_CERTIFICATE);
  436. RETURN_PROP_CASE(PR_ORIGINATOR_DELIVERY_REPORT_REQUESTED);
  437. RETURN_PROP_CASE(PR_ORIGINATOR_RETURN_ADDRESS);
  438. RETURN_PROP_CASE(PR_PARENT_KEY);
  439. RETURN_PROP_CASE(PR_PRIORITY);
  440. RETURN_PROP_CASE(PR_ORIGIN_CHECK);
  441. RETURN_PROP_CASE(PR_PROOF_OF_SUBMISSION_REQUESTED);
  442. RETURN_PROP_CASE(PR_READ_RECEIPT_REQUESTED);
  443. RETURN_PROP_CASE(PR_RECEIPT_TIME);
  444. RETURN_PROP_CASE(PR_RECIPIENT_REASSIGNMENT_PROHIBITED);
  445. RETURN_PROP_CASE(PR_REDIRECTION_HISTORY);
  446. RETURN_PROP_CASE(PR_RELATED_IPMS);
  447. RETURN_PROP_CASE(PR_ORIGINAL_SENSITIVITY);
  448. RETURN_PROP_CASE(PR_LANGUAGES);
  449. RETURN_PROP_CASE(PR_REPLY_TIME);
  450. RETURN_PROP_CASE(PR_REPORT_TAG);
  451. RETURN_PROP_CASE(PR_REPORT_TIME);
  452. RETURN_PROP_CASE(PR_RETURNED_IPM);
  453. RETURN_PROP_CASE(PR_SECURITY);
  454. RETURN_PROP_CASE(PR_INCOMPLETE_COPY);
  455. RETURN_PROP_CASE(PR_SENSITIVITY);
  456. RETURN_PROP_CASE(PR_SUBJECT);
  457. RETURN_PROP_CASE(PR_SUBJECT_IPM);
  458. RETURN_PROP_CASE(PR_CLIENT_SUBMIT_TIME);
  459. RETURN_PROP_CASE(PR_REPORT_NAME);
  460. RETURN_PROP_CASE(PR_SENT_REPRESENTING_SEARCH_KEY);
  461. RETURN_PROP_CASE(PR_X400_CONTENT_TYPE);
  462. RETURN_PROP_CASE(PR_SUBJECT_PREFIX);
  463. RETURN_PROP_CASE(PR_NON_RECEIPT_REASON);
  464. RETURN_PROP_CASE(PR_RECEIVED_BY_ENTRYID);
  465. RETURN_PROP_CASE(PR_RECEIVED_BY_NAME);
  466. RETURN_PROP_CASE(PR_SENT_REPRESENTING_ENTRYID);
  467. RETURN_PROP_CASE(PR_SENT_REPRESENTING_NAME);
  468. RETURN_PROP_CASE(PR_RCVD_REPRESENTING_ENTRYID);
  469. RETURN_PROP_CASE(PR_RCVD_REPRESENTING_NAME);
  470. RETURN_PROP_CASE(PR_REPORT_ENTRYID);
  471. RETURN_PROP_CASE(PR_READ_RECEIPT_ENTRYID);
  472. RETURN_PROP_CASE(PR_MESSAGE_SUBMISSION_ID);
  473. RETURN_PROP_CASE(PR_PROVIDER_SUBMIT_TIME);
  474. RETURN_PROP_CASE(PR_ORIGINAL_SUBJECT);
  475. RETURN_PROP_CASE(PR_DISC_VAL);
  476. RETURN_PROP_CASE(PR_ORIG_MESSAGE_CLASS);
  477. RETURN_PROP_CASE(PR_ORIGINAL_AUTHOR_ENTRYID);
  478. RETURN_PROP_CASE(PR_ORIGINAL_AUTHOR_NAME);
  479. RETURN_PROP_CASE(PR_ORIGINAL_SUBMIT_TIME);
  480. RETURN_PROP_CASE(PR_REPLY_RECIPIENT_ENTRIES);
  481. RETURN_PROP_CASE(PR_REPLY_RECIPIENT_NAMES);
  482. RETURN_PROP_CASE(PR_RECEIVED_BY_SEARCH_KEY);
  483. RETURN_PROP_CASE(PR_RCVD_REPRESENTING_SEARCH_KEY);
  484. RETURN_PROP_CASE(PR_READ_RECEIPT_SEARCH_KEY);
  485. RETURN_PROP_CASE(PR_REPORT_SEARCH_KEY);
  486. RETURN_PROP_CASE(PR_ORIGINAL_DELIVERY_TIME);
  487. RETURN_PROP_CASE(PR_ORIGINAL_AUTHOR_SEARCH_KEY);
  488. RETURN_PROP_CASE(PR_MESSAGE_TO_ME);
  489. RETURN_PROP_CASE(PR_MESSAGE_CC_ME);
  490. RETURN_PROP_CASE(PR_MESSAGE_RECIP_ME);
  491. RETURN_PROP_CASE(PR_ORIGINAL_SENDER_NAME);
  492. RETURN_PROP_CASE(PR_ORIGINAL_SENDER_ENTRYID);
  493. RETURN_PROP_CASE(PR_ORIGINAL_SENDER_SEARCH_KEY);
  494. RETURN_PROP_CASE(PR_ORIGINAL_SENT_REPRESENTING_NAME);
  495. RETURN_PROP_CASE(PR_ORIGINAL_SENT_REPRESENTING_ENTRYID);
  496. RETURN_PROP_CASE(PR_ORIGINAL_SENT_REPRESENTING_SEARCH_KEY);
  497. RETURN_PROP_CASE(PR_START_DATE);
  498. RETURN_PROP_CASE(PR_END_DATE);
  499. RETURN_PROP_CASE(PR_OWNER_APPT_ID);
  500. RETURN_PROP_CASE(PR_RESPONSE_REQUESTED);
  501. RETURN_PROP_CASE(PR_SENT_REPRESENTING_ADDRTYPE);
  502. RETURN_PROP_CASE(PR_SENT_REPRESENTING_EMAIL_ADDRESS);
  503. RETURN_PROP_CASE(PR_ORIGINAL_SENDER_ADDRTYPE);
  504. RETURN_PROP_CASE(PR_ORIGINAL_SENDER_EMAIL_ADDRESS);
  505. RETURN_PROP_CASE(PR_ORIGINAL_SENT_REPRESENTING_ADDRTYPE);
  506. RETURN_PROP_CASE(PR_ORIGINAL_SENT_REPRESENTING_EMAIL_ADDRESS);
  507. RETURN_PROP_CASE(PR_CONVERSATION_TOPIC);
  508. RETURN_PROP_CASE(PR_CONVERSATION_INDEX);
  509. RETURN_PROP_CASE(PR_ORIGINAL_DISPLAY_BCC);
  510. RETURN_PROP_CASE(PR_ORIGINAL_DISPLAY_CC);
  511. RETURN_PROP_CASE(PR_ORIGINAL_DISPLAY_TO);
  512. RETURN_PROP_CASE(PR_RECEIVED_BY_ADDRTYPE);
  513. RETURN_PROP_CASE(PR_RECEIVED_BY_EMAIL_ADDRESS);
  514. RETURN_PROP_CASE(PR_RCVD_REPRESENTING_ADDRTYPE);
  515. RETURN_PROP_CASE(PR_RCVD_REPRESENTING_EMAIL_ADDRESS);
  516. RETURN_PROP_CASE(PR_ORIGINAL_AUTHOR_ADDRTYPE);
  517. RETURN_PROP_CASE(PR_ORIGINAL_AUTHOR_EMAIL_ADDRESS);
  518. RETURN_PROP_CASE(PR_ORIGINALLY_INTENDED_RECIP_ADDRTYPE);
  519. RETURN_PROP_CASE(PR_ORIGINALLY_INTENDED_RECIP_EMAIL_ADDRESS);
  520. RETURN_PROP_CASE(PR_TRANSPORT_MESSAGE_HEADERS);
  521. RETURN_PROP_CASE(PR_DELEGATION);
  522. RETURN_PROP_CASE(PR_TNEF_CORRELATION_KEY);
  523. RETURN_PROP_CASE(PR_BODY);
  524. RETURN_PROP_CASE(PR_REPORT_TEXT);
  525. RETURN_PROP_CASE(PR_ORIGINATOR_AND_DL_EXPANSION_HISTORY);
  526. RETURN_PROP_CASE(PR_REPORTING_DL_NAME);
  527. RETURN_PROP_CASE(PR_REPORTING_MTA_CERTIFICATE);
  528. RETURN_PROP_CASE(PR_RTF_SYNC_BODY_CRC);
  529. RETURN_PROP_CASE(PR_RTF_SYNC_BODY_COUNT);
  530. RETURN_PROP_CASE(PR_RTF_SYNC_BODY_TAG);
  531. RETURN_PROP_CASE(PR_RTF_COMPRESSED);
  532. RETURN_PROP_CASE(PR_RTF_SYNC_PREFIX_COUNT);
  533. RETURN_PROP_CASE(PR_RTF_SYNC_TRAILING_COUNT);
  534. RETURN_PROP_CASE(PR_ORIGINALLY_INTENDED_RECIP_ENTRYID);
  535. RETURN_PROP_CASE(PR_CONTENT_INTEGRITY_CHECK);
  536. RETURN_PROP_CASE(PR_EXPLICIT_CONVERSION);
  537. RETURN_PROP_CASE(PR_IPM_RETURN_REQUESTED);
  538. RETURN_PROP_CASE(PR_MESSAGE_TOKEN);
  539. RETURN_PROP_CASE(PR_NDR_REASON_CODE);
  540. RETURN_PROP_CASE(PR_NDR_DIAG_CODE);
  541. RETURN_PROP_CASE(PR_NON_RECEIPT_NOTIFICATION_REQUESTED);
  542. RETURN_PROP_CASE(PR_DELIVERY_POINT);
  543. RETURN_PROP_CASE(PR_ORIGINATOR_NON_DELIVERY_REPORT_REQUESTED);
  544. RETURN_PROP_CASE(PR_ORIGINATOR_REQUESTED_ALTERNATE_RECIPIENT);
  545. RETURN_PROP_CASE(PR_PHYSICAL_DELIVERY_BUREAU_FAX_DELIVERY);
  546. RETURN_PROP_CASE(PR_PHYSICAL_DELIVERY_MODE);
  547. RETURN_PROP_CASE(PR_PHYSICAL_DELIVERY_REPORT_REQUEST);
  548. RETURN_PROP_CASE(PR_PHYSICAL_FORWARDING_ADDRESS);
  549. RETURN_PROP_CASE(PR_PHYSICAL_FORWARDING_ADDRESS_REQUESTED);
  550. RETURN_PROP_CASE(PR_PHYSICAL_FORWARDING_PROHIBITED);
  551. RETURN_PROP_CASE(PR_PHYSICAL_RENDITION_ATTRIBUTES);
  552. RETURN_PROP_CASE(PR_PROOF_OF_DELIVERY);
  553. RETURN_PROP_CASE(PR_PROOF_OF_DELIVERY_REQUESTED);
  554. RETURN_PROP_CASE(PR_RECIPIENT_CERTIFICATE);
  555. RETURN_PROP_CASE(PR_RECIPIENT_NUMBER_FOR_ADVICE);
  556. RETURN_PROP_CASE(PR_RECIPIENT_TYPE);
  557. RETURN_PROP_CASE(PR_REGISTERED_MAIL_TYPE);
  558. RETURN_PROP_CASE(PR_REPLY_REQUESTED);
  559. RETURN_PROP_CASE(PR_REQUESTED_DELIVERY_METHOD);
  560. RETURN_PROP_CASE(PR_SENDER_ENTRYID);
  561. RETURN_PROP_CASE(PR_SENDER_NAME);
  562. RETURN_PROP_CASE(PR_SUPPLEMENTARY_INFO);
  563. RETURN_PROP_CASE(PR_TYPE_OF_MTS_USER);
  564. RETURN_PROP_CASE(PR_SENDER_SEARCH_KEY);
  565. RETURN_PROP_CASE(PR_SENDER_ADDRTYPE);
  566. RETURN_PROP_CASE(PR_SENDER_EMAIL_ADDRESS);
  567. RETURN_PROP_CASE(PR_CURRENT_VERSION);
  568. RETURN_PROP_CASE(PR_DELETE_AFTER_SUBMIT);
  569. RETURN_PROP_CASE(PR_DISPLAY_BCC);
  570. RETURN_PROP_CASE(PR_DISPLAY_CC);
  571. RETURN_PROP_CASE(PR_DISPLAY_TO);
  572. RETURN_PROP_CASE(PR_PARENT_DISPLAY);
  573. RETURN_PROP_CASE(PR_MESSAGE_DELIVERY_TIME);
  574. RETURN_PROP_CASE(PR_MESSAGE_FLAGS);
  575. RETURN_PROP_CASE(PR_MESSAGE_SIZE);
  576. RETURN_PROP_CASE(PR_PARENT_ENTRYID);
  577. RETURN_PROP_CASE(PR_SENTMAIL_ENTRYID);
  578. RETURN_PROP_CASE(PR_CORRELATE);
  579. RETURN_PROP_CASE(PR_CORRELATE_MTSID);
  580. RETURN_PROP_CASE(PR_DISCRETE_VALUES);
  581. RETURN_PROP_CASE(PR_RESPONSIBILITY);
  582. RETURN_PROP_CASE(PR_SPOOLER_STATUS);
  583. RETURN_PROP_CASE(PR_TRANSPORT_STATUS);
  584. RETURN_PROP_CASE(PR_MESSAGE_RECIPIENTS);
  585. RETURN_PROP_CASE(PR_MESSAGE_ATTACHMENTS);
  586. RETURN_PROP_CASE(PR_SUBMIT_FLAGS);
  587. RETURN_PROP_CASE(PR_RECIPIENT_STATUS);
  588. RETURN_PROP_CASE(PR_TRANSPORT_KEY);
  589. RETURN_PROP_CASE(PR_MSG_STATUS);
  590. RETURN_PROP_CASE(PR_MESSAGE_DOWNLOAD_TIME);
  591. RETURN_PROP_CASE(PR_CREATION_VERSION);
  592. RETURN_PROP_CASE(PR_MODIFY_VERSION);
  593. RETURN_PROP_CASE(PR_HASATTACH);
  594. RETURN_PROP_CASE(PR_BODY_CRC);
  595. RETURN_PROP_CASE(PR_NORMALIZED_SUBJECT);
  596. RETURN_PROP_CASE(PR_RTF_IN_SYNC);
  597. RETURN_PROP_CASE(PR_ATTACH_SIZE);
  598. RETURN_PROP_CASE(PR_ATTACH_NUM);
  599. RETURN_PROP_CASE(PR_PREPROCESS);
  600. RETURN_PROP_CASE(PR_ORIGINATING_MTA_CERTIFICATE);
  601. RETURN_PROP_CASE(PR_PROOF_OF_SUBMISSION);
  602. RETURN_PROP_CASE(PR_ENTRYID);
  603. RETURN_PROP_CASE(PR_OBJECT_TYPE);
  604. RETURN_PROP_CASE(PR_ICON);
  605. RETURN_PROP_CASE(PR_MINI_ICON);
  606. RETURN_PROP_CASE(PR_STORE_ENTRYID);
  607. RETURN_PROP_CASE(PR_STORE_RECORD_KEY);
  608. RETURN_PROP_CASE(PR_RECORD_KEY);
  609. RETURN_PROP_CASE(PR_MAPPING_SIGNATURE);
  610. RETURN_PROP_CASE(PR_ACCESS_LEVEL);
  611. RETURN_PROP_CASE(PR_INSTANCE_KEY);
  612. RETURN_PROP_CASE(PR_ROW_TYPE);
  613. RETURN_PROP_CASE(PR_ACCESS);
  614. RETURN_PROP_CASE(PR_ROWID);
  615. RETURN_PROP_CASE(PR_DISPLAY_NAME);
  616. RETURN_PROP_CASE(PR_ADDRTYPE);
  617. RETURN_PROP_CASE(PR_EMAIL_ADDRESS);
  618. RETURN_PROP_CASE(PR_COMMENT);
  619. RETURN_PROP_CASE(PR_DEPTH);
  620. RETURN_PROP_CASE(PR_PROVIDER_DISPLAY);
  621. RETURN_PROP_CASE(PR_CREATION_TIME);
  622. RETURN_PROP_CASE(PR_LAST_MODIFICATION_TIME);
  623. RETURN_PROP_CASE(PR_RESOURCE_FLAGS);
  624. RETURN_PROP_CASE(PR_PROVIDER_DLL_NAME);
  625. RETURN_PROP_CASE(PR_SEARCH_KEY);
  626. RETURN_PROP_CASE(PR_PROVIDER_UID);
  627. RETURN_PROP_CASE(PR_PROVIDER_ORDINAL);
  628. RETURN_PROP_CASE(PR_FORM_VERSION);
  629. RETURN_PROP_CASE(PR_FORM_CLSID);
  630. RETURN_PROP_CASE(PR_FORM_CONTACT_NAME);
  631. RETURN_PROP_CASE(PR_FORM_CATEGORY);
  632. RETURN_PROP_CASE(PR_FORM_CATEGORY_SUB);
  633. RETURN_PROP_CASE(PR_FORM_HOST_MAP);
  634. RETURN_PROP_CASE(PR_FORM_HIDDEN);
  635. RETURN_PROP_CASE(PR_FORM_DESIGNER_NAME);
  636. RETURN_PROP_CASE(PR_FORM_DESIGNER_GUID);
  637. RETURN_PROP_CASE(PR_FORM_MESSAGE_BEHAVIOR);
  638. RETURN_PROP_CASE(PR_DEFAULT_STORE);
  639. RETURN_PROP_CASE(PR_STORE_SUPPORT_MASK);
  640. RETURN_PROP_CASE(PR_STORE_STATE);
  641. RETURN_PROP_CASE(PR_IPM_SUBTREE_SEARCH_KEY);
  642. RETURN_PROP_CASE(PR_IPM_OUTBOX_SEARCH_KEY);
  643. RETURN_PROP_CASE(PR_IPM_WASTEBASKET_SEARCH_KEY);
  644. RETURN_PROP_CASE(PR_IPM_SENTMAIL_SEARCH_KEY);
  645. RETURN_PROP_CASE(PR_MDB_PROVIDER);
  646. RETURN_PROP_CASE(PR_RECEIVE_FOLDER_SETTINGS);
  647. RETURN_PROP_CASE(PR_VALID_FOLDER_MASK);
  648. RETURN_PROP_CASE(PR_IPM_SUBTREE_ENTRYID);
  649. RETURN_PROP_CASE(PR_IPM_OUTBOX_ENTRYID);
  650. RETURN_PROP_CASE(PR_IPM_WASTEBASKET_ENTRYID);
  651. RETURN_PROP_CASE(PR_IPM_SENTMAIL_ENTRYID);
  652. RETURN_PROP_CASE(PR_VIEWS_ENTRYID);
  653. RETURN_PROP_CASE(PR_COMMON_VIEWS_ENTRYID);
  654. RETURN_PROP_CASE(PR_FINDER_ENTRYID);
  655. RETURN_PROP_CASE(PR_CONTAINER_FLAGS);
  656. RETURN_PROP_CASE(PR_FOLDER_TYPE);
  657. RETURN_PROP_CASE(PR_CONTENT_COUNT);
  658. RETURN_PROP_CASE(PR_CONTENT_UNREAD);
  659. RETURN_PROP_CASE(PR_CREATE_TEMPLATES);
  660. RETURN_PROP_CASE(PR_DETAILS_TABLE);
  661. RETURN_PROP_CASE(PR_SEARCH);
  662. RETURN_PROP_CASE(PR_SELECTABLE);
  663. RETURN_PROP_CASE(PR_SUBFOLDERS);
  664. RETURN_PROP_CASE(PR_STATUS);
  665. RETURN_PROP_CASE(PR_ANR);
  666. RETURN_PROP_CASE(PR_CONTENTS_SORT_ORDER);
  667. RETURN_PROP_CASE(PR_CONTAINER_HIERARCHY);
  668. RETURN_PROP_CASE(PR_CONTAINER_CONTENTS);
  669. RETURN_PROP_CASE(PR_FOLDER_ASSOCIATED_CONTENTS);
  670. RETURN_PROP_CASE(PR_DEF_CREATE_DL);
  671. RETURN_PROP_CASE(PR_DEF_CREATE_MAILUSER);
  672. RETURN_PROP_CASE(PR_CONTAINER_CLASS);
  673. RETURN_PROP_CASE(PR_CONTAINER_MODIFY_VERSION);
  674. RETURN_PROP_CASE(PR_AB_PROVIDER_ID);
  675. RETURN_PROP_CASE(PR_DEFAULT_VIEW_ENTRYID);
  676. RETURN_PROP_CASE(PR_ASSOC_CONTENT_COUNT);
  677. RETURN_PROP_CASE(PR_ATTACHMENT_X400_PARAMETERS);
  678. RETURN_PROP_CASE(PR_ATTACH_DATA_OBJ);
  679. RETURN_PROP_CASE(PR_ATTACH_ENCODING);
  680. RETURN_PROP_CASE(PR_ATTACH_EXTENSION);
  681. RETURN_PROP_CASE(PR_ATTACH_FILENAME);
  682. RETURN_PROP_CASE(PR_ATTACH_METHOD);
  683. RETURN_PROP_CASE(PR_ATTACH_LONG_FILENAME);
  684. RETURN_PROP_CASE(PR_ATTACH_PATHNAME);
  685. RETURN_PROP_CASE(PR_ATTACH_RENDERING);
  686. RETURN_PROP_CASE(PR_ATTACH_TAG);
  687. RETURN_PROP_CASE(PR_RENDERING_POSITION);
  688. RETURN_PROP_CASE(PR_ATTACH_TRANSPORT_NAME);
  689. RETURN_PROP_CASE(PR_ATTACH_LONG_PATHNAME);
  690. RETURN_PROP_CASE(PR_ATTACH_MIME_TAG);
  691. RETURN_PROP_CASE(PR_ATTACH_ADDITIONAL_INFO);
  692. RETURN_PROP_CASE(PR_DISPLAY_TYPE);
  693. RETURN_PROP_CASE(PR_DISPLAY_TYPE_EX);
  694. RETURN_PROP_CASE(PR_TEMPLATEID);
  695. RETURN_PROP_CASE(PR_PRIMARY_CAPABILITY);
  696. RETURN_PROP_CASE(PR_7BIT_DISPLAY_NAME);
  697. RETURN_PROP_CASE(PR_ACCOUNT);
  698. RETURN_PROP_CASE(PR_ALTERNATE_RECIPIENT);
  699. RETURN_PROP_CASE(PR_CALLBACK_TELEPHONE_NUMBER);
  700. RETURN_PROP_CASE(PR_CONVERSION_PROHIBITED);
  701. RETURN_PROP_CASE(PR_DISCLOSE_RECIPIENTS);
  702. RETURN_PROP_CASE(PR_GENERATION);
  703. RETURN_PROP_CASE(PR_GIVEN_NAME);
  704. RETURN_PROP_CASE(PR_GOVERNMENT_ID_NUMBER);
  705. RETURN_PROP_CASE(PR_BUSINESS_TELEPHONE_NUMBER);
  706. RETURN_PROP_CASE(PR_HOME_TELEPHONE_NUMBER);
  707. RETURN_PROP_CASE(PR_INITIALS);
  708. RETURN_PROP_CASE(PR_KEYWORD);
  709. RETURN_PROP_CASE(PR_LANGUAGE);
  710. RETURN_PROP_CASE(PR_LOCATION);
  711. RETURN_PROP_CASE(PR_MAIL_PERMISSION);
  712. RETURN_PROP_CASE(PR_MHS_COMMON_NAME);
  713. RETURN_PROP_CASE(PR_ORGANIZATIONAL_ID_NUMBER);
  714. RETURN_PROP_CASE(PR_SURNAME);
  715. RETURN_PROP_CASE(PR_ORIGINAL_ENTRYID);
  716. RETURN_PROP_CASE(PR_ORIGINAL_DISPLAY_NAME);
  717. RETURN_PROP_CASE(PR_ORIGINAL_SEARCH_KEY);
  718. RETURN_PROP_CASE(PR_POSTAL_ADDRESS);
  719. RETURN_PROP_CASE(PR_COMPANY_NAME);
  720. RETURN_PROP_CASE(PR_TITLE);
  721. RETURN_PROP_CASE(PR_DEPARTMENT_NAME);
  722. RETURN_PROP_CASE(PR_OFFICE_LOCATION);
  723. RETURN_PROP_CASE(PR_PRIMARY_TELEPHONE_NUMBER);
  724. RETURN_PROP_CASE(PR_BUSINESS2_TELEPHONE_NUMBER);
  725. RETURN_PROP_CASE(PR_MOBILE_TELEPHONE_NUMBER);
  726. RETURN_PROP_CASE(PR_RADIO_TELEPHONE_NUMBER);
  727. RETURN_PROP_CASE(PR_CAR_TELEPHONE_NUMBER);
  728. RETURN_PROP_CASE(PR_OTHER_TELEPHONE_NUMBER);
  729. RETURN_PROP_CASE(PR_TRANSMITABLE_DISPLAY_NAME);
  730. RETURN_PROP_CASE(PR_PAGER_TELEPHONE_NUMBER);
  731. RETURN_PROP_CASE(PR_USER_CERTIFICATE);
  732. RETURN_PROP_CASE(PR_PRIMARY_FAX_NUMBER);
  733. RETURN_PROP_CASE(PR_BUSINESS_FAX_NUMBER);
  734. RETURN_PROP_CASE(PR_HOME_FAX_NUMBER);
  735. RETURN_PROP_CASE(PR_COUNTRY);
  736. RETURN_PROP_CASE(PR_LOCALITY);
  737. RETURN_PROP_CASE(PR_STATE_OR_PROVINCE);
  738. RETURN_PROP_CASE(PR_STREET_ADDRESS);
  739. RETURN_PROP_CASE(PR_POSTAL_CODE);
  740. RETURN_PROP_CASE(PR_POST_OFFICE_BOX);
  741. RETURN_PROP_CASE(PR_TELEX_NUMBER);
  742. RETURN_PROP_CASE(PR_ISDN_NUMBER);
  743. RETURN_PROP_CASE(PR_ASSISTANT_TELEPHONE_NUMBER);
  744. RETURN_PROP_CASE(PR_HOME2_TELEPHONE_NUMBER);
  745. RETURN_PROP_CASE(PR_ASSISTANT);
  746. RETURN_PROP_CASE(PR_SEND_RICH_INFO);
  747. RETURN_PROP_CASE(PR_WEDDING_ANNIVERSARY);
  748. RETURN_PROP_CASE(PR_BIRTHDAY);
  749. RETURN_PROP_CASE(PR_HOBBIES);
  750. RETURN_PROP_CASE(PR_MIDDLE_NAME);
  751. RETURN_PROP_CASE(PR_DISPLAY_NAME_PREFIX);
  752. RETURN_PROP_CASE(PR_PROFESSION);
  753. RETURN_PROP_CASE(PR_PREFERRED_BY_NAME);
  754. RETURN_PROP_CASE(PR_SPOUSE_NAME);
  755. RETURN_PROP_CASE(PR_COMPUTER_NETWORK_NAME);
  756. RETURN_PROP_CASE(PR_CUSTOMER_ID);
  757. RETURN_PROP_CASE(PR_TTYTDD_PHONE_NUMBER);
  758. RETURN_PROP_CASE(PR_FTP_SITE);
  759. RETURN_PROP_CASE(PR_GENDER);
  760. RETURN_PROP_CASE(PR_MANAGER_NAME);
  761. RETURN_PROP_CASE(PR_NICKNAME);
  762. RETURN_PROP_CASE(PR_PERSONAL_HOME_PAGE);
  763. RETURN_PROP_CASE(PR_BUSINESS_HOME_PAGE);
  764. RETURN_PROP_CASE(PR_CONTACT_VERSION);
  765. RETURN_PROP_CASE(PR_CONTACT_ENTRYIDS);
  766. RETURN_PROP_CASE(PR_CONTACT_ADDRTYPES);
  767. RETURN_PROP_CASE(PR_CONTACT_DEFAULT_ADDRESS_INDEX);
  768. RETURN_PROP_CASE(PR_CONTACT_EMAIL_ADDRESSES);
  769. RETURN_PROP_CASE(PR_COMPANY_MAIN_PHONE_NUMBER);
  770. RETURN_PROP_CASE(PR_CHILDRENS_NAMES);
  771. RETURN_PROP_CASE(PR_HOME_ADDRESS_CITY);
  772. RETURN_PROP_CASE(PR_HOME_ADDRESS_COUNTRY);
  773. RETURN_PROP_CASE(PR_HOME_ADDRESS_POSTAL_CODE);
  774. RETURN_PROP_CASE(PR_HOME_ADDRESS_STATE_OR_PROVINCE);
  775. RETURN_PROP_CASE(PR_HOME_ADDRESS_STREET);
  776. RETURN_PROP_CASE(PR_HOME_ADDRESS_POST_OFFICE_BOX);
  777. RETURN_PROP_CASE(PR_OTHER_ADDRESS_CITY);
  778. RETURN_PROP_CASE(PR_OTHER_ADDRESS_COUNTRY);
  779. RETURN_PROP_CASE(PR_OTHER_ADDRESS_POSTAL_CODE);
  780. RETURN_PROP_CASE(PR_OTHER_ADDRESS_STATE_OR_PROVINCE);
  781. RETURN_PROP_CASE(PR_OTHER_ADDRESS_STREET);
  782. RETURN_PROP_CASE(PR_OTHER_ADDRESS_POST_OFFICE_BOX);
  783. RETURN_PROP_CASE(PR_STORE_PROVIDERS);
  784. RETURN_PROP_CASE(PR_AB_PROVIDERS);
  785. RETURN_PROP_CASE(PR_TRANSPORT_PROVIDERS);
  786. RETURN_PROP_CASE(PR_DEFAULT_PROFILE);
  787. RETURN_PROP_CASE(PR_AB_SEARCH_PATH);
  788. RETURN_PROP_CASE(PR_AB_DEFAULT_DIR);
  789. RETURN_PROP_CASE(PR_AB_DEFAULT_PAB);
  790. RETURN_PROP_CASE(PR_FILTERING_HOOKS);
  791. RETURN_PROP_CASE(PR_SERVICE_NAME);
  792. RETURN_PROP_CASE(PR_SERVICE_DLL_NAME);
  793. RETURN_PROP_CASE(PR_SERVICE_ENTRY_NAME);
  794. RETURN_PROP_CASE(PR_SERVICE_UID);
  795. RETURN_PROP_CASE(PR_SERVICE_EXTRA_UIDS);
  796. RETURN_PROP_CASE(PR_SERVICES);
  797. RETURN_PROP_CASE(PR_SERVICE_SUPPORT_FILES);
  798. RETURN_PROP_CASE(PR_SERVICE_DELETE_FILES);
  799. RETURN_PROP_CASE(PR_AB_SEARCH_PATH_UPDATE);
  800. RETURN_PROP_CASE(PR_PROFILE_NAME);
  801. RETURN_PROP_CASE(PR_IDENTITY_DISPLAY);
  802. RETURN_PROP_CASE(PR_IDENTITY_ENTRYID);
  803. RETURN_PROP_CASE(PR_RESOURCE_METHODS);
  804. RETURN_PROP_CASE(PR_RESOURCE_TYPE);
  805. RETURN_PROP_CASE(PR_STATUS_CODE);
  806. RETURN_PROP_CASE(PR_IDENTITY_SEARCH_KEY);
  807. RETURN_PROP_CASE(PR_OWN_STORE_ENTRYID);
  808. RETURN_PROP_CASE(PR_RESOURCE_PATH);
  809. RETURN_PROP_CASE(PR_STATUS_STRING);
  810. RETURN_PROP_CASE(PR_X400_DEFERRED_DELIVERY_CANCEL);
  811. RETURN_PROP_CASE(PR_HEADER_FOLDER_ENTRYID);
  812. RETURN_PROP_CASE(PR_REMOTE_PROGRESS);
  813. RETURN_PROP_CASE(PR_REMOTE_PROGRESS_TEXT);
  814. RETURN_PROP_CASE(PR_REMOTE_VALIDATE_OK);
  815. RETURN_PROP_CASE(PR_CONTROL_FLAGS);
  816. RETURN_PROP_CASE(PR_CONTROL_STRUCTURE);
  817. RETURN_PROP_CASE(PR_CONTROL_TYPE);
  818. RETURN_PROP_CASE(PR_DELTAX);
  819. RETURN_PROP_CASE(PR_DELTAY);
  820. RETURN_PROP_CASE(PR_XPOS);
  821. RETURN_PROP_CASE(PR_YPOS);
  822. RETURN_PROP_CASE(PR_CONTROL_ID);
  823. RETURN_PROP_CASE(PR_INITIAL_DETAILS_PANE);
  824. // End <MAPItags.h>
  825. // Begin <edkmdb.h>
  826. RETURN_PROP_CASE(PR_PROFILE_VERSION);
  827. RETURN_PROP_CASE(PR_PROFILE_CONFIG_FLAGS);
  828. RETURN_PROP_CASE(PR_PROFILE_HOME_SERVER);
  829. RETURN_PROP_CASE(PR_PROFILE_HOME_SERVER_DN);
  830. RETURN_PROP_CASE(PR_PROFILE_HOME_SERVER_ADDRS);
  831. RETURN_PROP_CASE(PR_PROFILE_USER);
  832. RETURN_PROP_CASE(PR_PROFILE_CONNECT_FLAGS);
  833. RETURN_PROP_CASE(PR_PROFILE_TRANSPORT_FLAGS);
  834. RETURN_PROP_CASE(PR_PROFILE_UI_STATE);
  835. RETURN_PROP_CASE(PR_PROFILE_UNRESOLVED_NAME);
  836. RETURN_PROP_CASE(PR_PROFILE_UNRESOLVED_SERVER);
  837. RETURN_PROP_CASE(PR_PROFILE_BINDING_ORDER);
  838. RETURN_PROP_CASE(PR_PROFILE_MAX_RESTRICT);
  839. RETURN_PROP_CASE(PR_PROFILE_AB_FILES_PATH);
  840. RETURN_PROP_CASE(PR_PROFILE_OFFLINE_STORE_PATH);
  841. RETURN_PROP_CASE(PR_PROFILE_OFFLINE_INFO);
  842. RETURN_PROP_CASE(PR_PROFILE_ADDR_INFO);
  843. RETURN_PROP_CASE(PR_PROFILE_OPTIONS_DATA);
  844. RETURN_PROP_CASE(PR_PROFILE_SECURE_MAILBOX);
  845. RETURN_PROP_CASE(PR_DISABLE_WINSOCK);
  846. RETURN_PROP_CASE(PR_PROFILE_AUTH_PACKAGE);
  847. RETURN_PROP_CASE(PR_PROFILE_RECONNECT_INTERVAL);
  848. RETURN_PROP_CASE(PR_OST_ENCRYPTION);
  849. RETURN_PROP_CASE(PR_PROFILE_TYPE);
  850. RETURN_PROP_CASE(PR_PROFILE_MAILBOX);
  851. RETURN_PROP_CASE(PR_PROFILE_SERVER);
  852. RETURN_PROP_CASE(PR_PROFILE_SERVER_DN);
  853. RETURN_PROP_CASE(PR_PROFILE_FAVFLD_DISPLAY_NAME);
  854. RETURN_PROP_CASE(PR_PROFILE_FAVFLD_COMMENT);
  855. RETURN_PROP_CASE(PR_PROFILE_ALLPUB_DISPLAY_NAME);
  856. RETURN_PROP_CASE(PR_PROFILE_ALLPUB_COMMENT);
  857. RETURN_PROP_CASE(PR_PROFILE_MOAB);
  858. RETURN_PROP_CASE(PR_PROFILE_MOAB_GUID);
  859. RETURN_PROP_CASE(PR_PROFILE_MOAB_SEQ);
  860. RETURN_PROP_CASE(PR_GET_PROPS_EXCLUDE_PROP_ID_LIST);
  861. RETURN_PROP_CASE(PR_MAILBOX_OWNER_ENTRYID);
  862. RETURN_PROP_CASE(PR_MAILBOX_OWNER_NAME);
  863. RETURN_PROP_CASE(PR_OOF_STATE);
  864. RETURN_PROP_CASE(PR_HIERARCHY_SERVER);
  865. RETURN_PROP_CASE(PR_SCHEDULE_FOLDER_ENTRYID);
  866. RETURN_PROP_CASE(PR_IPM_DAF_ENTRYID);
  867. RETURN_PROP_CASE(PR_NON_IPM_SUBTREE_ENTRYID);
  868. RETURN_PROP_CASE(PR_EFORMS_REGISTRY_ENTRYID);
  869. RETURN_PROP_CASE(PR_SPLUS_FREE_BUSY_ENTRYID);
  870. RETURN_PROP_CASE(PR_OFFLINE_ADDRBOOK_ENTRYID);
  871. RETURN_PROP_CASE(PR_EFORMS_FOR_LOCALE_ENTRYID);
  872. RETURN_PROP_CASE(PR_FREE_BUSY_FOR_LOCAL_SITE_ENTRYID);
  873. RETURN_PROP_CASE(PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID);
  874. RETURN_PROP_CASE(PR_NEWSGROUP_ROOT_FOLDER_ENTRYID);
  875. RETURN_PROP_CASE(PR_OFFLINE_MESSAGE_ENTRYID);
  876. RETURN_PROP_CASE(PR_IPM_FAVORITES_ENTRYID);
  877. RETURN_PROP_CASE(PR_IPM_PUBLIC_FOLDERS_ENTRYID);
  878. RETURN_PROP_CASE(PR_FAVORITES_DEFAULT_NAME);
  879. RETURN_PROP_CASE(PR_SYS_CONFIG_FOLDER_ENTRYID);
  880. RETURN_PROP_CASE(PR_NNTP_ARTICLE_FOLDER_ENTRYID);
  881. RETURN_PROP_CASE(PR_EVENTS_ROOT_FOLDER_ENTRYID);
  882. RETURN_PROP_CASE(PR_GW_MTSIN_ENTRYID);
  883. RETURN_PROP_CASE(PR_GW_MTSOUT_ENTRYID);
  884. RETURN_PROP_CASE(PR_TRANSFER_ENABLED);
  885. RETURN_PROP_CASE(PR_TEST_LINE_SPEED);
  886. RETURN_PROP_CASE(PR_HIERARCHY_SYNCHRONIZER);
  887. RETURN_PROP_CASE(PR_CONTENTS_SYNCHRONIZER);
  888. RETURN_PROP_CASE(PR_COLLECTOR);
  889. RETURN_PROP_CASE(PR_FAST_TRANSFER);
  890. RETURN_PROP_CASE(PR_CHANGE_ADVISOR);
  891. RETURN_PROP_CASE(PR_CHANGE_NOTIFICATION_GUID);
  892. RETURN_PROP_CASE(PR_STORE_OFFLINE);
  893. RETURN_PROP_CASE(PR_REPLICATION_STYLE);
  894. RETURN_PROP_CASE(PR_REPLICATION_SCHEDULE);
  895. RETURN_PROP_CASE(PR_REPLICATION_MESSAGE_PRIORITY);
  896. RETURN_PROP_CASE(PR_OVERALL_MSG_AGE_LIMIT);
  897. RETURN_PROP_CASE(PR_REPLICATION_ALWAYS_INTERVAL);
  898. RETURN_PROP_CASE(PR_REPLICATION_MSG_SIZE);
  899. RETURN_PROP_CASE(PR_SOURCE_KEY);
  900. RETURN_PROP_CASE(PR_PARENT_SOURCE_KEY);
  901. RETURN_PROP_CASE(PR_CHANGE_KEY);
  902. RETURN_PROP_CASE(PR_PREDECESSOR_CHANGE_LIST);
  903. RETURN_PROP_CASE(PR_FOLDER_CHILD_COUNT);
  904. RETURN_PROP_CASE(PR_RIGHTS);
  905. RETURN_PROP_CASE(PR_ACL_TABLE);
  906. RETURN_PROP_CASE(PR_RULES_TABLE);
  907. RETURN_PROP_CASE(PR_HAS_RULES);
  908. RETURN_PROP_CASE(PR_HAS_MODERATOR_RULES);
  909. RETURN_PROP_CASE(PR_ADDRESS_BOOK_ENTRYID);
  910. RETURN_PROP_CASE(PR_EXTENDED_ACL_DATA);
  911. RETURN_PROP_CASE(PR_FOLDER_DESIGN_FLAGS);
  912. RETURN_PROP_CASE(PR_DESIGN_IN_PROGRESS);
  913. RETURN_PROP_CASE(PR_SECURE_ORIGINATION);
  914. RETURN_PROP_CASE(PR_PUBLISH_IN_ADDRESS_BOOK);
  915. RETURN_PROP_CASE(PR_RESOLVE_METHOD);
  916. RETURN_PROP_CASE(PR_ADDRESS_BOOK_DISPLAY_NAME);
  917. RETURN_PROP_CASE(PR_EFORMS_LOCALE_ID);
  918. RETURN_PROP_CASE(PR_REPLICA_LIST);
  919. RETURN_PROP_CASE(PR_OVERALL_AGE_LIMIT);
  920. RETURN_PROP_CASE(PR_IS_NEWSGROUP_ANCHOR);
  921. RETURN_PROP_CASE(PR_IS_NEWSGROUP);
  922. RETURN_PROP_CASE(PR_NEWSGROUP_COMPONENT);
  923. RETURN_PROP_CASE(PR_INTERNET_NEWSGROUP_NAME);
  924. RETURN_PROP_CASE(PR_NEWSFEED_INFO);
  925. RETURN_PROP_CASE(PR_PREVENT_MSG_CREATE);
  926. RETURN_PROP_CASE(PR_IMAP_INTERNAL_DATE);
  927. RETURN_PROP_CASE(PR_INBOUND_NEWSFEED_DN);
  928. RETURN_PROP_CASE(PR_OUTBOUND_NEWSFEED_DN);
  929. RETURN_PROP_CASE(PR_INTERNET_CHARSET);
  930. RETURN_PROP_CASE(PR_PUBLIC_FOLDER_ENTRYID);
  931. RETURN_PROP_CASE(PR_HIERARCHY_CHANGE_NUM);
  932. RETURN_PROP_CASE(PR_HAS_NAMED_PROPERTIES);
  933. RETURN_PROP_CASE(PR_CREATOR_NAME);
  934. RETURN_PROP_CASE(PR_CREATOR_ENTRYID);
  935. RETURN_PROP_CASE(PR_LAST_MODIFIER_NAME);
  936. RETURN_PROP_CASE(PR_LAST_MODIFIER_ENTRYID);
  937. RETURN_PROP_CASE(PR_REPLY_RECIPIENT_SMTP_PROXIES);
  938. RETURN_PROP_CASE(PR_HAS_DAMS);
  939. RETURN_PROP_CASE(PR_RULE_TRIGGER_HISTORY);
  940. RETURN_PROP_CASE(PR_MOVE_TO_STORE_ENTRYID);
  941. RETURN_PROP_CASE(PR_MOVE_TO_FOLDER_ENTRYID);
  942. RETURN_PROP_CASE(PR_REPLICA_SERVER);
  943. RETURN_PROP_CASE(PR_REPLICA_VERSION);
  944. RETURN_PROP_CASE(PR_DEFERRED_SEND_NUMBER);
  945. RETURN_PROP_CASE(PR_DEFERRED_SEND_UNITS);
  946. RETURN_PROP_CASE(PR_EXPIRY_NUMBER);
  947. RETURN_PROP_CASE(PR_EXPIRY_UNITS);
  948. RETURN_PROP_CASE(PR_DEFERRED_SEND_TIME);
  949. RETURN_PROP_CASE(PR_GW_ADMIN_OPERATIONS);
  950. RETURN_PROP_CASE(PR_P1_CONTENT);
  951. RETURN_PROP_CASE(PR_P1_CONTENT_TYPE);
  952. RETURN_PROP_CASE(PR_CLIENT_ACTIONS);
  953. RETURN_PROP_CASE(PR_DAM_ORIGINAL_ENTRYID);
  954. RETURN_PROP_CASE(PR_DAM_BACK_PATCHED);
  955. RETURN_PROP_CASE(PR_RULE_ERROR);
  956. RETURN_PROP_CASE(PR_RULE_ACTION_TYPE);
  957. RETURN_PROP_CASE(PR_RULE_ACTION_NUMBER);
  958. RETURN_PROP_CASE(PR_RULE_FOLDER_ENTRYID);
  959. RETURN_PROP_CASE(PR_ACTIVE_USER_ENTRYID);
  960. RETURN_PROP_CASE(PR_CONFLICT_ENTRYID);
  961. RETURN_PROP_CASE(PR_MESSAGE_LOCALE_ID);
  962. RETURN_PROP_CASE(PR_MESSAGE_CODEPAGE);
  963. RETURN_PROP_CASE(PR_STORAGE_QUOTA_LIMIT);
  964. RETURN_PROP_CASE(PR_EXCESS_STORAGE_USED);
  965. RETURN_PROP_CASE(PR_SVR_GENERATING_QUOTA_MSG);
  966. RETURN_PROP_CASE(PR_DELEGATED_BY_RULE);
  967. RETURN_PROP_CASE(PR_X400_ENVELOPE_TYPE);
  968. RETURN_PROP_CASE(PR_AUTO_RESPONSE_SUPPRESS);
  969. RETURN_PROP_CASE(PR_INTERNET_CPID);
  970. RETURN_PROP_CASE(PR_IN_CONFLICT);
  971. RETURN_PROP_CASE(PR_DELETED_ON);
  972. RETURN_PROP_CASE(PR_DELETED_MSG_COUNT);
  973. RETURN_PROP_CASE(PR_DELETED_ASSOC_MSG_COUNT);
  974. RETURN_PROP_CASE(PR_DELETED_FOLDER_COUNT);
  975. RETURN_PROP_CASE(PR_OLDEST_DELETED_ON);
  976. RETURN_PROP_CASE(PR_DELETED_MESSAGE_SIZE_EXTENDED);
  977. RETURN_PROP_CASE(PR_DELETED_NORMAL_MESSAGE_SIZE_EXTENDED);
  978. RETURN_PROP_CASE(PR_DELETED_ASSOC_MESSAGE_SIZE_EXTENDED);
  979. RETURN_PROP_CASE(PR_RETENTION_AGE_LIMIT);
  980. RETURN_PROP_CASE(PR_LAST_FULL_BACKUP);
  981. RETURN_PROP_CASE(PR_SECURE_IN_SITE);
  982. RETURN_PROP_CASE(PR_LONGTERM_ENTRYID_FROM_TABLE);
  983. RETURN_PROP_CASE(PR_ORIGINATOR_NAME);
  984. RETURN_PROP_CASE(PR_ORIGINATOR_ADDR);
  985. RETURN_PROP_CASE(PR_ORIGINATOR_ADDRTYPE);
  986. RETURN_PROP_CASE(PR_ORIGINATOR_ENTRYID);
  987. RETURN_PROP_CASE(PR_ARRIVAL_TIME);
  988. RETURN_PROP_CASE(PR_TRACE_INFO);
  989. RETURN_PROP_CASE(PR_INTERNAL_TRACE_INFO);
  990. RETURN_PROP_CASE(PR_SUBJECT_TRACE_INFO);
  991. RETURN_PROP_CASE(PR_RECIPIENT_NUMBER);
  992. RETURN_PROP_CASE(PR_MTS_SUBJECT_ID);
  993. RETURN_PROP_CASE(PR_REPORT_DESTINATION_NAME);
  994. RETURN_PROP_CASE(PR_REPORT_DESTINATION_ENTRYID);
  995. RETURN_PROP_CASE(PR_CONTENT_SEARCH_KEY);
  996. RETURN_PROP_CASE(PR_FOREIGN_ID);
  997. RETURN_PROP_CASE(PR_FOREIGN_REPORT_ID);
  998. RETURN_PROP_CASE(PR_FOREIGN_SUBJECT_ID);
  999. RETURN_PROP_CASE(PR_PROMOTE_PROP_ID_LIST);
  1000. RETURN_PROP_CASE(PR_MEMBER_ID);
  1001. RETURN_PROP_CASE(PR_MEMBER_NAME);
  1002. RETURN_PROP_CASE(PR_MEMBER_RIGHTS);
  1003. RETURN_PROP_CASE(PR_RULE_ID);
  1004. RETURN_PROP_CASE(PR_RULE_IDS);
  1005. RETURN_PROP_CASE(PR_RULE_SEQUENCE);
  1006. RETURN_PROP_CASE(PR_RULE_STATE);
  1007. RETURN_PROP_CASE(PR_RULE_USER_FLAGS);
  1008. RETURN_PROP_CASE(PR_RULE_CONDITION);
  1009. RETURN_PROP_CASE(PR_RULE_ACTIONS);
  1010. RETURN_PROP_CASE(PR_RULE_PROVIDER);
  1011. RETURN_PROP_CASE(PR_RULE_NAME);
  1012. RETURN_PROP_CASE(PR_RULE_LEVEL);
  1013. RETURN_PROP_CASE(PR_RULE_PROVIDER_DATA);
  1014. RETURN_PROP_CASE(PR_NT_USER_NAME);
  1015. RETURN_PROP_CASE(PR_LOCALE_ID);
  1016. RETURN_PROP_CASE(PR_LAST_LOGON_TIME);
  1017. RETURN_PROP_CASE(PR_LAST_LOGOFF_TIME);
  1018. RETURN_PROP_CASE(PR_STORAGE_LIMIT_INFORMATION);
  1019. RETURN_PROP_CASE(PR_FOLDER_FLAGS);
  1020. RETURN_PROP_CASE(PR_LAST_ACCESS_TIME);
  1021. RETURN_PROP_CASE(PR_RESTRICTION_COUNT);
  1022. RETURN_PROP_CASE(PR_CATEG_COUNT);
  1023. RETURN_PROP_CASE(PR_CACHED_COLUMN_COUNT);
  1024. RETURN_PROP_CASE(PR_NORMAL_MSG_W_ATTACH_COUNT);
  1025. RETURN_PROP_CASE(PR_ASSOC_MSG_W_ATTACH_COUNT);
  1026. RETURN_PROP_CASE(PR_RECIPIENT_ON_NORMAL_MSG_COUNT);
  1027. RETURN_PROP_CASE(PR_RECIPIENT_ON_ASSOC_MSG_COUNT);
  1028. RETURN_PROP_CASE(PR_ATTACH_ON_NORMAL_MSG_COUNT);
  1029. RETURN_PROP_CASE(PR_ATTACH_ON_ASSOC_MSG_COUNT);
  1030. RETURN_PROP_CASE(PR_NORMAL_MESSAGE_SIZE);
  1031. RETURN_PROP_CASE(PR_ASSOC_MESSAGE_SIZE);
  1032. RETURN_PROP_CASE(PR_FOLDER_PATHNAME);
  1033. RETURN_PROP_CASE(PR_OWNER_COUNT);
  1034. RETURN_PROP_CASE(PR_CONTACT_COUNT);
  1035. RETURN_PROP_CASE(PR_CODE_PAGE_ID);
  1036. RETURN_PROP_CASE(PR_SORT_LOCALE_ID);
  1037. RETURN_PROP_CASE(PR_AUTO_ADD_NEW_SUBS);
  1038. RETURN_PROP_CASE(PR_NEW_SUBS_GET_AUTO_ADD);
  1039. RETURN_PROP_CASE(PR_OFFLINE_FLAGS);
  1040. RETURN_PROP_CASE(PR_SYNCHRONIZE_FLAGS);
  1041. RETURN_PROP_CASE(PR_MESSAGE_SITE_NAME);
  1042. RETURN_PROP_CASE(PR_MESSAGE_PROCESSED);
  1043. RETURN_PROP_CASE(PR_MSG_BODY_ID);
  1044. RETURN_PROP_CASE(PR_BILATERAL_INFO);
  1045. RETURN_PROP_CASE(PR_DL_REPORT_FLAGS);
  1046. RETURN_PROP_CASE(PR_ABSTRACT);
  1047. RETURN_PROP_CASE(PR_PREVIEW);
  1048. RETURN_PROP_CASE(PR_PREVIEW_UNREAD);
  1049. RETURN_PROP_CASE(PR_DISABLE_FULL_FIDELITY);
  1050. RETURN_PROP_CASE(PR_OWA_URL);
  1051. //End <edkmdb.h>
  1052. //<EMSAbTag.h>
  1053. RETURN_PROP_CASE(PR_EMS_AB_SERVER);
  1054. RETURN_PROP_CASE(PR_EMS_AB_CONTAINERID);
  1055. RETURN_PROP_CASE(PR_EMS_AB_PARENT_ENTRYID);
  1056. RETURN_PROP_CASE(PR_EMS_AB_IS_MASTER);
  1057. RETURN_PROP_CASE(PR_EMS_AB_OBJECT_OID);
  1058. RETURN_PROP_CASE(PR_EMS_AB_HIERARCHY_PATH);
  1059. RETURN_PROP_CASE(PR_EMS_AB_CHILD_RDNS);
  1060. RETURN_PROP_CASE(PR_EMS_AB_OTHER_RECIPS);
  1061. RETURN_PROP_CASE(PR_EMS_AB_ACCESS_CATEGORY);
  1062. RETURN_PROP_CASE(PR_EMS_AB_ACTIVATION_SCHEDULE);
  1063. RETURN_PROP_CASE(PR_EMS_AB_ACTIVATION_STYLE);
  1064. RETURN_PROP_CASE(PR_EMS_AB_ADDRESS_ENTRY_DISPLAY_TABLE);
  1065. RETURN_PROP_CASE(PR_EMS_AB_ADDRESS_ENTRY_DISPLAY_TABLE_MSDOS);
  1066. RETURN_PROP_CASE(PR_EMS_AB_ADDRESS_SYNTAX);
  1067. RETURN_PROP_CASE(PR_EMS_AB_ADDRESS_TYPE);
  1068. RETURN_PROP_CASE(PR_EMS_AB_ADMD);
  1069. RETURN_PROP_CASE(PR_EMS_AB_ADMIN_DESCRIPTION);
  1070. RETURN_PROP_CASE(PR_EMS_AB_ADMIN_DISPLAY_NAME);
  1071. RETURN_PROP_CASE(PR_EMS_AB_ADMIN_EXTENSION_DLL);
  1072. RETURN_PROP_CASE(PR_EMS_AB_ALIASED_OBJECT_NAME);
  1073. RETURN_PROP_CASE(PR_EMS_AB_ALT_RECIPIENT);
  1074. RETURN_PROP_CASE(PR_EMS_AB_ALT_RECIPIENT_BL);
  1075. RETURN_PROP_CASE(PR_EMS_AB_ANCESTOR_ID);
  1076. RETURN_PROP_CASE(PR_EMS_AB_ASSOCIATION_LIFETIME);
  1077. RETURN_PROP_CASE(PR_EMS_AB_ASSOC_NT_ACCOUNT);
  1078. RETURN_PROP_CASE(PR_EMS_AB_ASSOC_REMOTE_DXA);
  1079. RETURN_PROP_CASE(PR_EMS_AB_AUTH_ORIG_BL);
  1080. RETURN_PROP_CASE(PR_EMS_AB_AUTHORITY_REVOCATION_LIST);
  1081. RETURN_PROP_CASE(PR_EMS_AB_AUTHORIZED_DOMAIN);
  1082. RETURN_PROP_CASE(PR_EMS_AB_AUTHORIZED_PASSWORD);
  1083. RETURN_PROP_CASE(PR_EMS_AB_AUTHORIZED_USER);
  1084. RETURN_PROP_CASE(PR_EMS_AB_AUTOREPLY);
  1085. RETURN_PROP_CASE(PR_EMS_AB_AUTOREPLY_MESSAGE);
  1086. RETURN_PROP_CASE(PR_EMS_AB_AUTOREPLY_SUBJECT);
  1087. RETURN_PROP_CASE(PR_EMS_AB_BRIDGEHEAD_SERVERS);
  1088. RETURN_PROP_CASE(PR_EMS_AB_BUSINESS_CATEGORY);
  1089. RETURN_PROP_CASE(PR_EMS_AB_BUSINESS_ROLES);
  1090. RETURN_PROP_CASE(PR_EMS_AB_CA_CERTIFICATE);
  1091. RETURN_PROP_CASE(PR_EMS_AB_CAN_CREATE_PF);
  1092. RETURN_PROP_CASE(PR_EMS_AB_CAN_CREATE_PF_BL);
  1093. RETURN_PROP_CASE(PR_EMS_AB_CAN_CREATE_PF_DL);
  1094. RETURN_PROP_CASE(PR_EMS_AB_CAN_CREATE_PF_DL_BL);
  1095. RETURN_PROP_CASE(PR_EMS_AB_CAN_NOT_CREATE_PF);
  1096. RETURN_PROP_CASE(PR_EMS_AB_CAN_NOT_CREATE_PF_BL);
  1097. RETURN_PROP_CASE(PR_EMS_AB_CAN_NOT_CREATE_PF_DL);
  1098. RETURN_PROP_CASE(PR_EMS_AB_CAN_NOT_CREATE_PF_DL_BL);
  1099. RETURN_PROP_CASE(PR_EMS_AB_CAN_PRESERVE_DNS);
  1100. //End CDO props
  1101. //Properties I've defined because they're missing from the headers.
  1102. // Begin <mapiext.h>
  1103. RETURN_PROP_CASE(PR_USER_X509_CERTIFICATE);
  1104. RETURN_PROP_CASE(PR_ADMIN_SECURITY_DESCRIPTOR);
  1105. RETURN_PROP_CASE(PR_NT_SECURITY_DESCRIPTOR);
  1106. RETURN_PROP_CASE(PR_BODY_HTML);
  1107. RETURN_PROP_CASE(PR_MSG_EDITOR_FORMAT);
  1108. RETURN_PROP_CASE(PR_INTERNET_MESSAGE_ID);
  1109. RETURN_PROP_CASE(PR_SMTP_ADDRESS);
  1110. RETURN_PROP_CASE(PR_DEF_POST_MSGCLASS);
  1111. RETURN_PROP_CASE(PR_DEF_POST_DISPLAYNAME);
  1112. RETURN_PROP_CASE(PR_INTERNET_ARTICLE_NUMBER);
  1113. RETURN_PROP_CASE(PR_FREEBUSY_ENTRYIDS);
  1114. RETURN_PROP_CASE(PR_INTERNET_CONTENT);
  1115. RETURN_PROP_CASE(PR_PACKED_NAME_PROPS);
  1116. RETURN_PROP_CASE(PR_ADDITIONAL_REN_ENTRYIDS);
  1117. RETURN_PROP_CASE(PR_IPM_APPOINTMENT_ENTRYID);
  1118. RETURN_PROP_CASE(PR_IPM_CONTACT_ENTRYID);
  1119. RETURN_PROP_CASE(PR_IPM_JOURNAL_ENTRYID);
  1120. RETURN_PROP_CASE(PR_IPM_NOTE_ENTRYID);
  1121. RETURN_PROP_CASE(PR_IPM_TASK_ENTRYID);
  1122. RETURN_PROP_CASE(PR_REM_ONLINE_ENTRYID);
  1123. RETURN_PROP_CASE(PR_REM_OFFLINE_ENTRYID);
  1124. RETURN_PROP_CASE(PR_IPM_DRAFTS_ENTRYID);
  1125. RETURN_PROP_CASE(PR_IPM_OL2007_ENTRYIDS);
  1126. //Freebusytags.h
  1127. RETURN_PROP_CASE(PR_FREEBUSY_ALL_EVENTS);
  1128. RETURN_PROP_CASE(PR_FREEBUSY_ALL_MONTHS);
  1129. RETURN_PROP_CASE(PR_FREEBUSY_BUSY_EVENTS);
  1130. RETURN_PROP_CASE(PR_FREEBUSY_BUSY_MONTHS);
  1131. RETURN_PROP_CASE(PR_FREEBUSY_EMAIL_ADDRESS);
  1132. RETURN_PROP_CASE(PR_FREEBUSY_END_RANGE);
  1133. RETURN_PROP_CASE(PR_FREEBUSY_LAST_MODIFIED);
  1134. RETURN_PROP_CASE(PR_FREEBUSY_NUM_MONTHS);
  1135. RETURN_PROP_CASE(PR_FREEBUSY_OOF_EVENTS);
  1136. RETURN_PROP_CASE(PR_FREEBUSY_OOF_MONTHS);
  1137. RETURN_PROP_CASE(PR_FREEBUSY_START_RANGE);
  1138. RETURN_PROP_CASE(PR_FREEBUSY_TENTATIVE_EVENTS);
  1139. RETURN_PROP_CASE(PR_FREEBUSY_TENTATIVE_MONTHS);
  1140. RETURN_PROP_CASE(PR_PERSONAL_FREEBUSY);
  1141. RETURN_PROP_CASE(PR_PROCESS_MEETING_REQUESTS);
  1142. RETURN_PROP_CASE(PR_DECLINE_CONFLICTING_MEETING_REQUESTS);
  1143. RETURN_PROP_CASE(PR_DECLINE_RECURRING_MEETING_REQUESTS);
  1144. RETURN_PROP_CASE(PR_SEND_INTERNET_ENCODING);
  1145. RETURN_PROP_CASE(PR_RECIPIENT_TRACKSTATUS);
  1146. RETURN_PROP_CASE(PR_RECIPIENT_FLAGS);
  1147. RETURN_PROP_CASE(PR_RECIPIENT_ENTRYID);
  1148. RETURN_PROP_CASE(PR_RECIPIENT_DISPLAY_NAME);
  1149. RETURN_PROP_CASE(PR_ICON_INDEX);
  1150. RETURN_PROP_CASE(PR_ATTR_HIDDEN);
  1151. RETURN_PROP_CASE(PR_ATTR_SYSTEM);
  1152. RETURN_PROP_CASE(PR_ATTR_READONLY);
  1153. RETURN_PROP_CASE(PR_URL_NAME);
  1154. RETURN_PROP_CASE(PR_LOCAL_COMMIT_TIME);
  1155. RETURN_PROP_CASE(PR_LOCAL_COMMIT_TIME_MAX);
  1156. RETURN_PROP_CASE(PR_DELETED_COUNT_TOTAL);
  1157. RETURN_PROP_CASE(PR_ICS_CHANGE_KEY);
  1158. RETURN_PROP_CASE(PR_CREATOR_SID);
  1159. RETURN_PROP_CASE(PR_LAST_MODIFIER_SID);
  1160. RETURN_PROP_CASE(PR_OST_OSTID);
  1161. RETURN_PROP_CASE(PR_OFFLINE_FOLDER);
  1162. RETURN_PROP_CASE(PR_FAV_PARENT_SOURCE_KEY);
  1163. RETURN_PROP_CASE(PR_TRUST_SENDER);
  1164. RETURN_PROP_CASE(PR_URL_COMP_NAME);
  1165. RETURN_PROP_CASE(PR_IN_REPLY_TO_ID);
  1166. RETURN_PROP_CASE(PR_MAX_CACHED_VIEWS);
  1167. RETURN_PROP_CASE(PR_ATTACH_FLAGS);
  1168. RETURN_PROP_CASE(PR_MDN_DISPOSITION_TYPE);
  1169. RETURN_PROP_CASE(PR_MDN_DISPOSITION_SENDINGMODE);
  1170. RETURN_PROP_CASE(PR_LAST_VERB_EXECUTED);
  1171. RETURN_PROP_CASE(PR_LAST_VERB_EXECUTION_TIME);
  1172. RETURN_PROP_CASE(PR_FOLDER_DISPLAY_FLAGS);
  1173. RETURN_PROP_CASE(PR_NET_FOLDER_FLAGS);
  1174. RETURN_PROP_CASE(PR_FOLDER_VIEWS_ONLY);
  1175. RETURN_PROP_CASE(PR_FOLDER_XVIEWINFO_E);
  1176. RETURN_PROP_CASE(PR_FOLDER_WEBVIEWINFO);
  1177. RETURN_PROP_CASE(PR_TODO_ITEM_FLAGS);
  1178. RETURN_PROP_CASE(PR_FOLLOWUP_ICON);
  1179. RETURN_PROP_CASE(PR_FLAG_STATUS);
  1180. RETURN_PROP_CASE(PR_FLAG_COMPLETE_TIME);
  1181. RETURN_PROP_CASE(PR_INETMAIL_OVERRIDE_FORMAT);
  1182. RETURN_PROP_CASE(PR_MANAGED_FOLDER_INFORMATION);
  1183. RETURN_PROP_CASE(PR_MANAGED_FOLDER_STORAGE_QUOTA);
  1184. RETURN_PROP_CASE(PR_ASSOCIATED_SHARING_PROVIDER);
  1185. RETURN_PROP_CASE(PR_EMSMDB_SECTION_UID);
  1186. RETURN_PROP_CASE(PR_EMSABP_USER_UID);
  1187. RETURN_PROP_CASE(PR_EMSMDB_LEGACY);
  1188. RETURN_PROP_CASE(PR_ARCHIVE_TAG);
  1189. RETURN_PROP_CASE(PR_ARCHIVE_PERIOD);
  1190. RETURN_PROP_CASE(PR_ARCHIVE_DATE);
  1191. RETURN_PROP_CASE(PR_RETENTION_FLAGS);
  1192. RETURN_PROP_CASE(PR_RETENTION_DATE);
  1193. RETURN_PROP_CASE(PR_POLICY_TAG);
  1194. RETURN_PROP_CASE(PR_CI_SEARCH_ENABLED);
  1195. RETURN_PROP_CASE(PR_CI_NOTIFICATION_ENABLED);
  1196. RETURN_PROP_CASE(PR_ROAMING_DATATYPES);
  1197. RETURN_PROP_CASE(PR_ITEM_TMPFLAGS);
  1198. RETURN_PROP_CASE(PR_SECURE_SUBMIT_FLAGS);
  1199. RETURN_PROP_CASE(PR_SECURITY_FLAGS);
  1200. RETURN_PROP_CASE(PR_CONVERSATION_ID);
  1201. RETURN_PROP_CASE(PR_STORE_UNICODE_MASK);
  1202. // end <mapiext.h>
  1203. // begin <ECTags.h>
  1204. RETURN_PROP_CASE(PR_EC_PATH);
  1205. RETURN_PROP_CASE(PR_EC_PORT);
  1206. RETURN_PROP_CASE(PR_EC_FLAGS);
  1207. RETURN_PROP_CASE(PR_EC_SSLKEY_PASS);
  1208. RETURN_PROP_CASE(PR_EC_PROXY_PORT);
  1209. RETURN_PROP_CASE(PR_EC_PROXY_USERNAME);
  1210. RETURN_PROP_CASE(PR_EC_PROXY_PASSWORD);
  1211. RETURN_PROP_CASE(PR_EC_PROXY_FLAGS);
  1212. RETURN_PROP_CASE(PR_EC_HIERARCHYID);
  1213. RETURN_PROP_CASE(PR_EC_STOREGUID);
  1214. RETURN_PROP_CASE(PR_EC_COMPANYID);
  1215. RETURN_PROP_CASE(PR_EC_QUOTA_MAIL_TIME);
  1216. RETURN_PROP_CASE(PR_EC_STATSTABLE_SYSTEM);
  1217. RETURN_PROP_CASE(PR_EC_STATSTABLE_USERS);
  1218. RETURN_PROP_CASE(PR_EC_STATSTABLE_COMPANY);
  1219. RETURN_PROP_CASE(PR_EC_STATS_SYSTEM_DESCRIPTION);
  1220. RETURN_PROP_CASE(PR_EC_STATS_SYSTEM_VALUE);
  1221. RETURN_PROP_CASE(PR_EC_STATS_SESSION_ID);
  1222. RETURN_PROP_CASE(PR_EC_STATS_SESSION_IPADDRESS);
  1223. RETURN_PROP_CASE(PR_EC_STATS_SESSION_IDLETIME);
  1224. RETURN_PROP_CASE(PR_EC_STATS_SESSION_CAPABILITY);
  1225. RETURN_PROP_CASE(PR_EC_STATS_SESSION_LOCKED);
  1226. RETURN_PROP_CASE(PR_EC_STATS_SESSION_BUSYSTATES);
  1227. RETURN_PROP_CASE(PR_EC_STATS_SESSION_CPU_USER);
  1228. RETURN_PROP_CASE(PR_EC_STATS_SESSION_CPU_SYSTEM);
  1229. RETURN_PROP_CASE(PR_EC_STATS_SESSION_CPU_REAL);
  1230. RETURN_PROP_CASE(PR_EC_STATS_SESSION_GROUP_ID);
  1231. RETURN_PROP_CASE(PR_EC_STATS_SESSION_PEER_PID);
  1232. RETURN_PROP_CASE(PR_EC_STATS_SESSION_CLIENT_VERSION);
  1233. RETURN_PROP_CASE(PR_EC_STATS_SESSION_CLIENT_APPLICATION);
  1234. RETURN_PROP_CASE(PR_EC_STATS_SESSION_REQUESTS);
  1235. RETURN_PROP_CASE(PR_EC_STATS_SESSION_CLIENT_APPLICATION_VERSION);
  1236. RETURN_PROP_CASE(PR_EC_STATS_SESSION_CLIENT_APPLICATION_MISC);
  1237. RETURN_PROP_CASE(PR_EC_OUTOFOFFICE);
  1238. RETURN_PROP_CASE(PR_EC_OUTOFOFFICE_MSG);
  1239. RETURN_PROP_CASE(PR_EC_OUTOFOFFICE_SUBJECT);
  1240. RETURN_PROP_CASE(PR_EC_OUTOFOFFICE_FROM);
  1241. RETURN_PROP_CASE(PR_EC_OUTOFOFFICE_UNTIL);
  1242. RETURN_PROP_CASE(PR_EC_WEBACCESS_SETTINGS);
  1243. RETURN_PROP_CASE(PR_EC_RECIPIENT_HISTORY);
  1244. RETURN_PROP_CASE(PR_EC_OBJECT);
  1245. RETURN_PROP_CASE(PR_EC_OUTGOING_FLAGS);
  1246. RETURN_PROP_CASE(PR_EC_IMAP_ID);
  1247. RETURN_PROP_CASE(PR_EC_IMAP_SUBSCRIBED);
  1248. RETURN_PROP_CASE(PR_EC_IMAP_MAX_ID);
  1249. RETURN_PROP_CASE(PR_EC_CLIENT_SUBMIT_DATE);
  1250. RETURN_PROP_CASE(PR_EC_MESSAGE_DELIVERY_DATE);
  1251. RETURN_PROP_CASE(PR_EC_SENDAS_USER_ENTRYIDS);
  1252. RETURN_PROP_CASE(PR_EC_CHANGE_ADVISOR);
  1253. RETURN_PROP_CASE(PR_EC_CHANGE_ONL_STATE);
  1254. RETURN_PROP_CASE(PR_EC_CHANGE_OFFL_STATE);
  1255. RETURN_PROP_CASE(PR_EC_SERVERPATH);
  1256. RETURN_PROP_CASE(PR_EC_SERVER_UID);
  1257. RETURN_PROP_CASE(PR_EC_SEARCHFOLDER_STATUS);
  1258. RETURN_PROP_CASE(PR_EC_OFFLINE_SYNC_STATUS);
  1259. RETURN_PROP_CASE(PR_EC_ONLINE_SYNC_STATUS);
  1260. RETURN_PROP_CASE(PR_EC_AB_SYNC_STATUS);
  1261. RETURN_PROP_CASE(PR_EC_SYNC_WAIT_TIME);
  1262. RETURN_PROP_CASE(PR_EC_SYNC_ON_NOTIFY);
  1263. RETURN_PROP_CASE(PR_EC_NONACTIVE);
  1264. RETURN_PROP_CASE(PR_EC_ADMINISTRATOR);
  1265. RETURN_PROP_CASE(PR_EC_MGR_ORG_ENTRYID);
  1266. RETURN_PROP_CASE(PR_AB_CHOOSE_DIRECTORY_AUTOMATICALLY);
  1267. // end <ECTags.h>
  1268. default:
  1269. {
  1270. static char szPropTag[39];
  1271. sprintf(szPropTag, "0x%08X", (unsigned int)ulPropTag);
  1272. return(szPropTag);
  1273. }
  1274. }
  1275. }//PropNameFromPropTag
  1276. const char *RelationalOperatorToString(ULONG relop)
  1277. {
  1278. switch(relop) {
  1279. RETURN_CASE(RELOP_GE)
  1280. RETURN_CASE(RELOP_GT)
  1281. RETURN_CASE(RELOP_LE)
  1282. RETURN_CASE(RELOP_LT)
  1283. RETURN_CASE(RELOP_NE)
  1284. RETURN_CASE(RELOP_RE)
  1285. RETURN_CASE(RELOP_EQ)
  1286. }
  1287. return "UNKNOWN";
  1288. }
  1289. std::string FuzzyLevelToString(ULONG ulFuzzyLevel)
  1290. {
  1291. int i=0;
  1292. std::string strResult;
  1293. if((ulFuzzyLevel&0xFFFF) == FL_FULLSTRING){
  1294. strResult += "FL_FULLSTRING";
  1295. ulFuzzyLevel&=~FL_FULLSTRING;
  1296. ++i;
  1297. }
  1298. if((ulFuzzyLevel&0xFFFF) == FL_PREFIX) {
  1299. if(i>0) strResult += ", ";
  1300. strResult += "FL_PREFIX";
  1301. ulFuzzyLevel&=~FL_PREFIX;
  1302. ++i;
  1303. }
  1304. if((ulFuzzyLevel&0xFFFF) == FL_SUBSTRING) {
  1305. if(i>0) strResult += ", ";
  1306. strResult += "FL_SUBSTRING";
  1307. ulFuzzyLevel&=~FL_SUBSTRING;
  1308. ++i;
  1309. }
  1310. if((ulFuzzyLevel&0xFFFF0000) == FL_IGNORECASE) {
  1311. if(i>0) strResult += ", ";
  1312. strResult += "FL_IGNORECASE";
  1313. ulFuzzyLevel&=~FL_IGNORECASE;
  1314. ++i;
  1315. }
  1316. if((ulFuzzyLevel&0xFFFF0000) == FL_IGNORENONSPACE) {
  1317. if(i>0) strResult += ", ";
  1318. strResult += "FL_IGNORENONSPACE";
  1319. ulFuzzyLevel&=~FL_IGNORENONSPACE;
  1320. ++i;
  1321. }
  1322. if((ulFuzzyLevel&0xFFFF0000) == FL_LOOSE) {
  1323. if(i>0) strResult += ", ";
  1324. strResult += "FL_LOOSE";
  1325. ulFuzzyLevel&=~FL_LOOSE;
  1326. ++i;
  1327. }
  1328. if(ulFuzzyLevel > 0) {
  1329. if(i>0) strResult += ", ";
  1330. strResult += "Not specified("+stringify(ulFuzzyLevel)+")";
  1331. }
  1332. return strResult;
  1333. }
  1334. std::string RestrictionToString(const SRestriction *lpRestriction,
  1335. unsigned int indent)
  1336. {
  1337. std::string strResult;
  1338. unsigned int i = 0;
  1339. unsigned int j = 0;
  1340. if(lpRestriction == NULL)
  1341. return "NULL";
  1342. for (j = 0; j < indent; ++j)
  1343. strResult += " ";
  1344. switch(lpRestriction->rt)
  1345. {
  1346. case RES_OR:
  1347. strResult = "RES_OR: ("+stringify(lpRestriction->res.resOr.cRes)+")\n";
  1348. for (i = 0; i < lpRestriction->res.resOr.cRes; ++i) {
  1349. for (j = 0; j < indent + 1; ++j)
  1350. strResult += " ";
  1351. strResult += "Restriction: "+ RestrictionToString(&lpRestriction->res.resOr.lpRes[i], indent+1)+"\n";
  1352. }
  1353. for (j = 0; j < indent; ++j)
  1354. strResult += " ";
  1355. return strResult + "---or---\n";
  1356. case RES_AND:
  1357. strResult = "RES_AND: ("+stringify(lpRestriction->res.resAnd.cRes)+")\n";
  1358. for (i = 0; i < lpRestriction->res.resAnd.cRes; ++i) {
  1359. for (j = 0; j < indent + 1; ++j)
  1360. strResult += " ";
  1361. strResult += "Restriction: " + RestrictionToString(&lpRestriction->res.resAnd.lpRes[i], indent+1);
  1362. }
  1363. for (j = 0; j < indent; ++j)
  1364. strResult += " ";
  1365. return strResult + "---and---\n";
  1366. case RES_BITMASK:
  1367. strResult = "RES_BITMASK:\n";
  1368. for (j = 0; j < indent; ++j)
  1369. strResult += " ";
  1370. switch (lpRestriction->res.resBitMask.relBMR){
  1371. case BMR_EQZ:
  1372. strResult += "BMR: R_EQZ\n";
  1373. break;
  1374. case BMR_NEZ:
  1375. strResult += "BMR: R_NEZ\n";
  1376. break;
  1377. default:
  1378. strResult += "BMR: Not specified("+stringify(lpRestriction->res.resBitMask.relBMR)+")\n";
  1379. break;
  1380. }
  1381. for (j = 0; j < indent; ++j)
  1382. strResult += " ";
  1383. strResult += "proptag: "+PropNameFromPropTag(lpRestriction->res.resBitMask.ulPropTag)+"\n";
  1384. for (j = 0; j < indent; ++j)
  1385. strResult += " ";
  1386. return strResult + "mask: " + stringify(lpRestriction->res.resBitMask.ulMask)+"\n";
  1387. case RES_COMMENT:
  1388. strResult = "RES_COMMENT:\n";
  1389. for (j = 0; j < indent; ++j)
  1390. strResult += " ";
  1391. strResult += "props: " + PropNameFromPropArray(lpRestriction->res.resComment.cValues, lpRestriction->res.resComment.lpProp)+"\n";
  1392. for (j = 0; j < indent; ++j)
  1393. strResult += " ";
  1394. return strResult + "restriction: " + RestrictionToString(lpRestriction->res.resComment.lpRes, indent + 1) + "\n";
  1395. case RES_COMPAREPROPS:
  1396. strResult = "RES_COMPAREPROPS:\n";
  1397. for (j = 0; j < indent; ++j)
  1398. strResult += " ";
  1399. strResult += "relop: ";
  1400. strResult += RelationalOperatorToString(lpRestriction->res.resCompareProps.relop);
  1401. strResult += "\n";
  1402. for (j = 0; j < indent; ++j)
  1403. strResult += " ";
  1404. strResult += "proptag1: "+PropNameFromPropTag(lpRestriction->res.resCompareProps.ulPropTag1)+"\n";
  1405. for (j = 0; j < indent; ++j)
  1406. strResult += " ";
  1407. return strResult + "proptag2: " + PropNameFromPropTag(lpRestriction->res.resCompareProps.ulPropTag2) + "\n";
  1408. case RES_CONTENT:
  1409. strResult = "RES_CONTENT:\n";
  1410. for (j = 0; j < indent; ++j)
  1411. strResult += " ";
  1412. strResult += "FuzzyLevel: "+FuzzyLevelToString(lpRestriction->res.resContent.ulFuzzyLevel)+"\n";
  1413. for (j = 0; j < indent; ++j)
  1414. strResult += " ";
  1415. strResult += "proptag: "+PropNameFromPropTag(lpRestriction->res.resContent.ulPropTag)+"\n";
  1416. for (j = 0; j < indent; ++j)
  1417. strResult += " ";
  1418. return strResult + "props: " + PropNameFromPropArray(1, lpRestriction->res.resContent.lpProp) + "\n";
  1419. case RES_EXIST:
  1420. strResult = "RES_EXIST:\n";
  1421. for (j = 0; j < indent; ++j)
  1422. strResult += " ";
  1423. return strResult + "proptag: " + PropNameFromPropTag(lpRestriction->res.resExist.ulPropTag) + "\n";
  1424. case RES_NOT:
  1425. strResult = "RES_NOT:\n";
  1426. for (j = 0; j < indent; ++j)
  1427. strResult += " ";
  1428. return strResult + "restriction: " + RestrictionToString(lpRestriction->res.resNot.lpRes, indent + 1) + "\n";
  1429. case RES_PROPERTY:
  1430. strResult = "RES_PROPERTY:\n";
  1431. for (j = 0; j < indent; ++j)
  1432. strResult += " ";
  1433. strResult += "relop: ";
  1434. strResult += RelationalOperatorToString(lpRestriction->res.resProperty.relop);
  1435. strResult += "\n";
  1436. for (j = 0; j < indent; ++j)
  1437. strResult += " ";
  1438. strResult += "proptag: "+PropNameFromPropTag(lpRestriction->res.resProperty.ulPropTag)+((lpRestriction->res.resProperty.ulPropTag&MV_FLAG)?" (MV_PROP)":"")+"\n";
  1439. for (j = 0; j < indent; ++j)
  1440. strResult += " ";
  1441. return strResult + "props: " + PropNameFromPropArray(1, lpRestriction->res.resProperty.lpProp) + ((lpRestriction->res.resProperty.lpProp->ulPropTag & MV_FLAG) ? " (MV_PROP)" : "") + "\n";
  1442. case RES_SIZE:
  1443. strResult = "RES_SIZE:\n";
  1444. for (j = 0; j < indent; ++j)
  1445. strResult += " ";
  1446. strResult += "relop: ";
  1447. strResult += RelationalOperatorToString(lpRestriction->res.resSize.relop);
  1448. strResult += "\n";
  1449. for (j = 0; j < indent; ++j)
  1450. strResult += " ";
  1451. strResult += "proptag: "+PropNameFromPropTag(lpRestriction->res.resSize.ulPropTag)+"\n";
  1452. for (j = 0; j < indent; ++j)
  1453. strResult += " ";
  1454. return strResult + "sizeofprop: " + stringify(lpRestriction->res.resSize.cb) + "\n";
  1455. case RES_SUBRESTRICTION:
  1456. strResult = "RES_SUBRESTRICTION:\n";
  1457. for (j = 0; j < indent; ++j)
  1458. strResult += " ";
  1459. switch (lpRestriction->res.resSub.ulSubObject) {
  1460. case PR_MESSAGE_RECIPIENTS:
  1461. strResult += "subobject: PR_MESSAGE_RECIPIENTS\n";
  1462. break;
  1463. case PR_MESSAGE_ATTACHMENTS:
  1464. strResult += "subobject: PR_MESSAGE_ATTACHMENTS\n";
  1465. break;
  1466. default:
  1467. strResult += "subobject: Not specified("+stringify(lpRestriction->res.resSub.ulSubObject)+")\n";
  1468. break;
  1469. }
  1470. for (j = 0; j < indent; ++j)
  1471. strResult += " ";
  1472. return strResult + "Restriction: " + RestrictionToString(lpRestriction->res.resSub.lpRes, indent + 1) + "\n";
  1473. default:
  1474. return "UNKNOWN TYPE:\n";
  1475. }
  1476. }
  1477. std::string PropValueToString(const SPropValue *lpPropValue)
  1478. {
  1479. std::string strResult;
  1480. //return "DEBUG OFF";
  1481. if(lpPropValue == NULL)
  1482. return "NULL";
  1483. switch(PROP_TYPE(lpPropValue->ulPropTag)) {
  1484. case PT_I2:
  1485. return "PT_I2: " + stringify(lpPropValue->Value.i) + ", " + stringify(lpPropValue->Value.i, true);
  1486. case PT_LONG:
  1487. return "PT_LONG: " + stringify(lpPropValue->Value.ul) + ", " + stringify(lpPropValue->Value.ul, true);
  1488. case PT_BOOLEAN:
  1489. return "PT_BOOLEAN: " + stringify(lpPropValue->Value.b);
  1490. case PT_R4:
  1491. return "PT_R4: " + stringify_float(lpPropValue->Value.flt);
  1492. case PT_DOUBLE:
  1493. return "PT_DOUBLE: " + stringify_double(lpPropValue->Value.dbl);
  1494. case PT_APPTIME:
  1495. return "PT_APPTIME: " + stringify_double(lpPropValue->Value.at);
  1496. case PT_CURRENCY:
  1497. return "PT_CURRENCY: lo=" + stringify(lpPropValue->Value.cur.Lo) + " hi=" + stringify(lpPropValue->Value.cur.Hi);
  1498. case PT_SYSTIME:
  1499. return "PT_SYSTIME: fth=" + stringify(lpPropValue->Value.ft.dwHighDateTime) + " ftl=" + stringify(lpPropValue->Value.ft.dwLowDateTime);
  1500. case PT_I8:
  1501. return "PT_I8: " + stringify(lpPropValue->Value.li.HighPart) + "," + stringify(lpPropValue->Value.li.LowPart);
  1502. case PT_UNICODE:
  1503. return "PT_UNICODE: " + convert_to<std::string>("UTF-8", lpPropValue->Value.lpszW, rawsize(lpPropValue->Value.lpszW), CHARSET_WCHAR);
  1504. case PT_STRING8:
  1505. return "PT_STRING8: " + (lpPropValue->Value.lpszA ? (std::string)lpPropValue->Value.lpszA : std::string("NULL"));
  1506. case PT_BINARY:
  1507. return "PT_BINARY: cb=" + stringify(lpPropValue->Value.bin.cb) +
  1508. " Data=" + (lpPropValue->Value.bin.lpb ? bin2hex(lpPropValue->Value.bin.cb, lpPropValue->Value.bin.lpb) : std::string("NULL"));
  1509. case PT_CLSID:
  1510. return "PT_CLSID: (Skip)";
  1511. case PT_NULL:
  1512. return "PT_NULL: ";
  1513. case PT_UNSPECIFIED:
  1514. return "PT_UNSPECIFIED: ";
  1515. case PT_ERROR:
  1516. return "PT_ERROR: " + GetMAPIErrorDescription(lpPropValue->Value.err);
  1517. case PT_SRESTRICTION:
  1518. return "PT_SRESTRICTION: structure...";
  1519. case PT_ACTIONS:
  1520. return "PT_ACTIONS: structure...";
  1521. case PT_OBJECT:
  1522. return "<OBJECT>";
  1523. case PT_MV_I2:
  1524. return "PT_MV_I2[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1525. case PT_MV_LONG:
  1526. return "PT_MV_LONG[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1527. case PT_MV_R4:
  1528. return "PT_MV_R4[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1529. case PT_MV_DOUBLE:
  1530. return "PT_MV_DOUBLE[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1531. case PT_MV_APPTIME:
  1532. return "PT_MV_APPTIME[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1533. case PT_MV_CURRENCY:
  1534. return "PT_MV_CURRENCY[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1535. case PT_MV_SYSTIME:
  1536. return "PT_MV_SYSTIME[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1537. case PT_MV_I8:
  1538. return "PT_MV_I8[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1539. case PT_MV_UNICODE:
  1540. strResult = "PT_MV_UNICODE[" + stringify(lpPropValue->Value.MVi.cValues) + "]" + "\n";
  1541. for (unsigned int i = 0; i < lpPropValue->Value.MVi.cValues; ++i)
  1542. strResult += std::string("\t") + convert_to<std::string>(lpPropValue->Value.MVszW.lppszW[i]) + "\n";
  1543. return strResult;
  1544. case PT_MV_STRING8:
  1545. strResult = "PT_MV_STRING8[" + stringify(lpPropValue->Value.MVi.cValues) + "]" + "\n";
  1546. for (unsigned int i = 0; i < lpPropValue->Value.MVi.cValues; ++i)
  1547. strResult += std::string("\t") + lpPropValue->Value.MVszA.lppszA[i] + "\n";
  1548. return strResult;
  1549. case PT_MV_BINARY:
  1550. return "PT_MV_BINARY[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1551. case PT_MV_CLSID:
  1552. return "PT_MV_CLSID[" + stringify(lpPropValue->Value.MVi.cValues) + "]";
  1553. default:
  1554. return "<UNKNOWN>";
  1555. }
  1556. }
  1557. std::string RowToString(const SRow *lpRow)
  1558. {
  1559. std::string strResult;
  1560. if(lpRow == NULL)
  1561. return "NULL";
  1562. for (unsigned int i = 0; i < lpRow->cValues; ++i)
  1563. strResult += PropNameFromPropTag(lpRow->lpProps[i].ulPropTag)+" : "+PropValueToString(&lpRow->lpProps[i]) + "\n";
  1564. return strResult;
  1565. }
  1566. static const char *ABFlags(ULONG ulFlag)
  1567. {
  1568. switch(ulFlag) {
  1569. case MAPI_UNRESOLVED:
  1570. return "MAPI_UNRESOLVED";
  1571. case MAPI_AMBIGUOUS:
  1572. return "MAPI_AMBIGUOUS";
  1573. case MAPI_RESOLVED:
  1574. return "MAPI_RESOLVED";
  1575. default:
  1576. return "UNKNOWN";
  1577. }
  1578. return NULL;
  1579. }
  1580. std::string AdrRowSetToString(const ADRLIST *lpAdrList,
  1581. const FlagList *lpFlagList)
  1582. {
  1583. std::string strResult;
  1584. if(lpAdrList == NULL)
  1585. return "NULL";
  1586. for (unsigned int i = 0; i < lpAdrList->cEntries; ++i) {
  1587. strResult += "row " + stringify(i) + " : " +
  1588. RowToString((LPSRow)&lpAdrList->aEntries[i]) + "\n";
  1589. if (lpFlagList != NULL) {
  1590. strResult += " flag=";
  1591. strResult += ABFlags(lpFlagList->ulFlag[i]);
  1592. strResult += "\n";
  1593. }
  1594. }
  1595. return strResult;
  1596. }
  1597. std::string RowSetToString(const SRowSet *lpRows)
  1598. {
  1599. // return "DEBUG OFF";
  1600. std::string strResult;
  1601. if(lpRows == NULL)
  1602. return "NULL";
  1603. for (unsigned int i = 0; i < lpRows->cRows; ++i)
  1604. strResult+= "row "+stringify(i) + " : " + RowToString(&lpRows->aRow[i]) + "\n";
  1605. return strResult;
  1606. }
  1607. std::string RowEntryToString(const ROWENTRY *lpRowEntry)
  1608. {
  1609. std::string strResult;
  1610. if(lpRowEntry == NULL)
  1611. return "NULL";
  1612. strResult = "rowflags: "+ stringify(lpRowEntry->ulRowFlags, true) + "\n";
  1613. for (unsigned int i = 0; i < lpRowEntry->cValues; ++i)
  1614. strResult += PropNameFromPropTag(lpRowEntry->rgPropVals[i].ulPropTag)+" : "+PropValueToString(&lpRowEntry->rgPropVals[i]) + "\n";
  1615. return strResult;
  1616. }
  1617. std::string RowListToString(const ROWLIST *lpRowList)
  1618. {
  1619. std::string strResult;
  1620. if(lpRowList == NULL)
  1621. return "NULL";
  1622. for (unsigned int i = 0; i < lpRowList->cEntries; ++i)
  1623. strResult+= "row "+stringify(i) + " : " + RowEntryToString(&lpRowList->aEntries[i]) + "\n";
  1624. return strResult;
  1625. }
  1626. const char *ActionToString(const ACTION *lpAction)
  1627. {
  1628. return "Action struct: NOT IMPLEMENTED";
  1629. }
  1630. std::string SortOrderToString(const SSortOrder *lpSort)
  1631. {
  1632. std::string strResult;
  1633. if(lpSort == NULL)
  1634. return "NULL";
  1635. strResult = PropNameFromPropTag(lpSort->ulPropTag);
  1636. strResult += ", Order: ";
  1637. switch(lpSort->ulOrder)
  1638. {
  1639. case TABLE_SORT_ASCEND:
  1640. return strResult + "TABLE_SORT_ASCEND";
  1641. case TABLE_SORT_COMBINE:
  1642. return strResult + "TABLE_SORT_COMBINE";
  1643. case TABLE_SORT_DESCEND:
  1644. return strResult + "TABLE_SORT_DESCEND";
  1645. default:
  1646. return strResult + "<UNKNOWN> " + stringify(lpSort->ulOrder);
  1647. }
  1648. }
  1649. std::string SortOrderSetToString(const SSortOrderSet *lpSortCriteria)
  1650. {
  1651. std::string strResult;
  1652. if(lpSortCriteria == NULL)
  1653. return "NULL";
  1654. strResult = "cCategories="+stringify(lpSortCriteria->cCategories)+" cExpanded="+stringify(lpSortCriteria->cExpanded)+"\n";
  1655. for (unsigned int i = 0; i < lpSortCriteria->cSorts; ++i)
  1656. strResult+= "row "+stringify(i) + " : " + SortOrderToString(&lpSortCriteria->aSort[i]) + "\n";
  1657. return strResult;
  1658. }
  1659. static const std::string
  1660. Notification_ErrorToString(const ERROR_NOTIFICATION *lpErr)
  1661. {
  1662. std::string str;
  1663. str = "( \n";
  1664. str += "\tDebug not implement\n";
  1665. str += ")\n";
  1666. return str;
  1667. }
  1668. /**
  1669. * Convert NEWMAIL_NOTIFICATION struct to a string
  1670. *
  1671. * @param[in] lpNewmail newmail struct of a notification to convert to string
  1672. * @return std::string string with hex representations of binary data
  1673. */
  1674. static std::string
  1675. Notification_NewMailToString(const NEWMAIL_NOTIFICATION *lpNewmail)
  1676. {
  1677. std::string str;
  1678. str = "( \n";
  1679. if(lpNewmail == NULL) {
  1680. str += "NULL";
  1681. goto exit;
  1682. }
  1683. str = "Entryid: cb="+stringify(lpNewmail->cbEntryID);
  1684. str+= " "+((lpNewmail->lpEntryID) ? bin2hex(lpNewmail->cbEntryID, (LPBYTE)lpNewmail->lpEntryID) : std::string("NULL")) + "\n";
  1685. str+= "Parentid: cb="+stringify(lpNewmail->cbParentID);
  1686. str+= " "+((lpNewmail->lpParentID) ? bin2hex(lpNewmail->cbParentID, (LPBYTE)lpNewmail->lpParentID) : std::string("NULL")) + "\n";
  1687. str+= "MessageClass:" + ((lpNewmail->lpszMessageClass) ? (std::string((char*)lpNewmail->lpszMessageClass)) : std::string("NULL")) + "\n";
  1688. str+= "MessageFlags:" + stringify(lpNewmail->ulMessageFlags, true) + "\n";
  1689. str+= "Flags:" + stringify(lpNewmail->ulFlags, true) + "\n";
  1690. exit:
  1691. str += ")\n";
  1692. return str;
  1693. }
  1694. static std::string
  1695. Notification_ObjectToString(const OBJECT_NOTIFICATION *lpObj)
  1696. {
  1697. std::string str;
  1698. str = "( \n";
  1699. if(lpObj == NULL) {
  1700. str += "NULL";
  1701. goto exit;
  1702. }
  1703. str+= "ObjType:" + stringify(lpObj->ulObjType, true) + "\n";
  1704. str+= "Entryid: cb="+stringify(lpObj->cbEntryID);
  1705. str+= " "+((lpObj->lpEntryID)?bin2hex(lpObj->cbEntryID, (LPBYTE)lpObj->lpEntryID) : std::string("NULL")) + "\n";
  1706. str+= "Parentid: cb="+stringify(lpObj->cbParentID);
  1707. str+= " "+((lpObj->lpParentID)?bin2hex(lpObj->cbParentID, (LPBYTE)lpObj->lpParentID) : std::string("NULL")) + "\n";
  1708. if(lpObj->cbOldID) {
  1709. str+= "Oldentryid: cb="+stringify(lpObj->cbOldID);
  1710. str+= " "+((lpObj->lpOldID)?bin2hex(lpObj->cbOldID, (LPBYTE)lpObj->lpOldID) : std::string("NULL")) + "\n";
  1711. }
  1712. if(lpObj->cbOldParentID) {
  1713. str+= "Oldparentid: cb="+stringify(lpObj->cbOldParentID);
  1714. str+= " "+((lpObj->lpOldParentID)?bin2hex(lpObj->cbOldParentID, (LPBYTE)lpObj->lpOldParentID) : std::string("NULL")) + "\n";
  1715. }
  1716. if(lpObj->lpPropTagArray)
  1717. str+= "PropTagArray="+PropNameFromPropTagArray(lpObj->lpPropTagArray)+"\n";
  1718. exit:
  1719. str += ")\n";
  1720. return str;
  1721. }
  1722. static const char *TableEventToString(ULONG ulTableEvent)
  1723. {
  1724. switch(ulTableEvent)
  1725. {
  1726. case TABLE_CHANGED:
  1727. return "TABLE_CHANGED";
  1728. case TABLE_ERROR:
  1729. return "TABLE_ERROR";
  1730. case TABLE_ROW_ADDED:
  1731. return "TABLE_ROW_ADDED";
  1732. case TABLE_ROW_DELETED:
  1733. return "TABLE_ROW_DELETED";
  1734. case TABLE_ROW_MODIFIED:
  1735. return "TABLE_ROW_MODIFIED";
  1736. case TABLE_SORT_DONE:
  1737. return "TABLE_SORT_DONE";
  1738. case TABLE_RESTRICT_DONE:
  1739. return "TABLE_RESTRICT_DONE";
  1740. case TABLE_SETCOL_DONE:
  1741. return "TABLE_SETCOL_DONE";
  1742. case TABLE_RELOAD:
  1743. return "TABLE_RELOAD";
  1744. default:
  1745. return "<invalidate TYPE>";
  1746. }
  1747. return NULL;
  1748. }
  1749. static std::string Notification_TableToString(const TABLE_NOTIFICATION *lpTab)
  1750. {
  1751. std::string str;
  1752. str = "( \n";
  1753. if(lpTab == NULL) {
  1754. str += "NULL";
  1755. goto exit;
  1756. }
  1757. str += "\tTableEvent: (";
  1758. str += TableEventToString(lpTab->ulTableEvent);
  1759. str += " )\n";
  1760. str += "\tPropIndex: (";
  1761. str += PropValueToString(&lpTab->propIndex);
  1762. str += " )\n";;
  1763. str += "\tPropPrior: (";
  1764. str += PropValueToString(&lpTab->propPrior);
  1765. str += " )\n";
  1766. str += "\tRow: (" + RowToString(&lpTab->row) + " )\n";
  1767. exit:
  1768. str += ")\n";
  1769. return str;
  1770. }
  1771. static std::string
  1772. Notification_StatusObjToString(const STATUS_OBJECT_NOTIFICATION *lpStatobj)
  1773. {
  1774. std::string str;
  1775. str = "( \n";
  1776. str += "\tDebug not implement\n";
  1777. str += ")\n";
  1778. return str;
  1779. }
  1780. static std::string
  1781. Notification_ExtendedToString(const EXTENDED_NOTIFICATION *lpExt)
  1782. {
  1783. std::string str;
  1784. str = "( \n";
  1785. if(lpExt == NULL) {
  1786. str += "NULL";
  1787. return str;
  1788. }
  1789. str += "\tEvent: (0x" + stringify(lpExt->ulEvent, true) + " )\n";
  1790. str += "\tcb: (0x" + stringify(lpExt->cb, true) + " )\n";
  1791. str += "\tdata: (0x" + bin2hex(lpExt->cb, lpExt->pbEventParameters) + " )\n";
  1792. str += ")\n";
  1793. return str;
  1794. }
  1795. static const char *EventTypeToString(ULONG ulEventType)
  1796. {
  1797. switch(ulEventType)
  1798. {
  1799. case fnevCriticalError: // ERROR_NOTIFICATION err;
  1800. return "CriticalError";
  1801. case fnevNewMail:
  1802. return "NewMail";
  1803. case fnevObjectCreated:
  1804. return "ObjectCreated";
  1805. case fnevObjectDeleted:
  1806. return "ObjectDeleted";
  1807. case fnevObjectModified:
  1808. return "ObjectModified";
  1809. case fnevObjectMoved:
  1810. return "ObjectMoved";
  1811. case fnevObjectCopied:
  1812. return "ObjectCopied";
  1813. case fnevSearchComplete:
  1814. return "SearchComplete";
  1815. case fnevTableModified:
  1816. return "TableModified";
  1817. case fnevStatusObjectModified:// STATUS_OBJECT_NOTIFICATION statobj;
  1818. return "StatusObjectModified";
  1819. case fnevExtended:// EXTENDED_NOTIFICATION ext;
  1820. return "Extended";
  1821. case fnevReservedForMapi:
  1822. default:
  1823. return "Unknown";
  1824. }
  1825. return NULL;
  1826. }
  1827. std::string NotificationToString(ULONG cNotification,
  1828. const NOTIFICATION *lpNotification)
  1829. {
  1830. std::string str;
  1831. if(lpNotification == NULL)
  1832. return "NULL";
  1833. for (ULONG i = 0; i < cNotification; ++i) {
  1834. if (cNotification > 1)
  1835. str += "item " + stringify(i) + " (\n";
  1836. str += "Eventtype: ( ";
  1837. str += EventTypeToString(lpNotification[i].ulEventType);
  1838. str += " )\n";
  1839. switch(lpNotification[i].ulEventType)
  1840. {
  1841. case fnevCriticalError: // ERROR_NOTIFICATION err;
  1842. str += Notification_ErrorToString(&lpNotification[i].info.err);
  1843. break;
  1844. case fnevNewMail: // NEWMAIL_NOTIFICATION newmail;
  1845. str += Notification_NewMailToString(&lpNotification[i].info.newmail);
  1846. break;
  1847. case fnevObjectCreated: //OBJECT_NOTIFICATION obj;
  1848. case fnevObjectDeleted:
  1849. case fnevObjectModified:
  1850. case fnevObjectMoved:
  1851. case fnevObjectCopied:
  1852. case fnevSearchComplete:
  1853. str += Notification_ObjectToString(&lpNotification[i].info.obj);
  1854. break;
  1855. case fnevTableModified:// TABLE_NOTIFICATION tab;
  1856. str += Notification_TableToString(&lpNotification[i].info.tab);
  1857. break;
  1858. case fnevStatusObjectModified:// STATUS_OBJECT_NOTIFICATION statobj;
  1859. str += Notification_StatusObjToString(&lpNotification[i].info.statobj);
  1860. break;
  1861. case fnevExtended:// EXTENDED_NOTIFICATION ext;
  1862. str += Notification_ExtendedToString(&lpNotification[i].info.ext);
  1863. break;
  1864. case fnevReservedForMapi:
  1865. default:
  1866. str += "Unknown";
  1867. break;
  1868. }
  1869. if (cNotification > 1)
  1870. str += ")\n";
  1871. }
  1872. return str;
  1873. }
  1874. std::string ProblemArrayToString(const SPropProblemArray *lpProblemArray)
  1875. {
  1876. std::string str;
  1877. ULONG i;
  1878. if (lpProblemArray == NULL)
  1879. return "NULL";
  1880. str = "Problems: ( " + stringify(lpProblemArray->cProblem) + "\n";
  1881. for (i = 0; i < lpProblemArray->cProblem; ++i) {
  1882. const SPropProblem *p = &lpProblemArray->aProblem[i];
  1883. str += " ( ulIndex: " + stringify(p->ulIndex, true) + " ulPropTag: " + stringify(p->ulPropTag, true) + " scode: " + stringify(p->scode, true) + "),\n";
  1884. }
  1885. str += ")\n";
  1886. return str;
  1887. }
  1888. std::string DBGGUIDToString(REFIID iid)
  1889. {
  1890. std::string guidIDD;
  1891. char szGuidId[DEBUGBUFSIZE+1];
  1892. int i = 0;
  1893. while(sGuidList[i].guid != NULL)
  1894. {
  1895. if(memcmp(&iid, sGuidList[i].guid, sizeof(GUID)) == 0){
  1896. guidIDD = sGuidList[i].szguidname;
  1897. break;
  1898. }
  1899. ++i;
  1900. }
  1901. if (guidIDD.empty()) {
  1902. snprintf(szGuidId, DEBUGBUFSIZE, "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}", iid.Data1, iid.Data2, iid.Data3, iid.Data4[0], iid.Data4[1], iid.Data4[2], iid.Data4[3], iid.Data4[4], iid.Data4[5], iid.Data4[6], iid.Data4[7]);
  1903. guidIDD = "Unknown ";
  1904. guidIDD+=szGuidId;
  1905. }
  1906. return guidIDD;
  1907. }
  1908. std::string MapiNameIdToString(const MAPINAMEID *pNameId)
  1909. {
  1910. std::string str;
  1911. if(pNameId == NULL)
  1912. return "NULL";
  1913. str = DBGGUIDToString(*pNameId->lpguid) + " -> ";
  1914. if (pNameId->ulKind == MNID_ID)
  1915. return str += "ID = " + stringify(pNameId->Kind.lID);
  1916. else if (pNameId->ulKind == MNID_STRING)
  1917. return str += "String= " + bin2hex(wcslen(pNameId->Kind.lpwstrName) * sizeof(WCHAR), (BYTE *)pNameId->Kind.lpwstrName);
  1918. return str += "Unknown kind";
  1919. }
  1920. std::string MapiNameIdListToString(ULONG cNames,
  1921. const MAPINAMEID *const *ppNames, const SPropTagArray *pptaga)
  1922. {
  1923. std::string str;
  1924. ULONG i;
  1925. if(ppNames == NULL)
  1926. return "NULL";
  1927. str = "NameIds: (" + stringify(cNames) + ")\n";
  1928. for (i = 0; i < cNames; ++i) {
  1929. str += MapiNameIdToString(ppNames[i]);
  1930. if(pptaga && pptaga->cValues == cNames) {
  1931. str += " -> ";
  1932. str += stringify(pptaga->aulPropTag[i], true);
  1933. }
  1934. str += "\n";
  1935. }
  1936. return str;
  1937. }
  1938. const char *ResourceTypeToString(ULONG ulResourceType)
  1939. {
  1940. switch (ulResourceType) {
  1941. RETURN_CASE(MAPI_STORE_PROVIDER);
  1942. RETURN_CASE(MAPI_AB);
  1943. RETURN_CASE(MAPI_AB_PROVIDER);
  1944. RETURN_CASE(MAPI_TRANSPORT_PROVIDER);
  1945. RETURN_CASE(MAPI_SPOOLER);
  1946. RETURN_CASE(MAPI_PROFILE_PROVIDER);
  1947. RETURN_CASE(MAPI_SUBSYSTEM);
  1948. RETURN_CASE(MAPI_HOOK_PROVIDER);
  1949. }
  1950. return "<Unknown type>";
  1951. }
  1952. const char *MsgServiceContextToString(ULONG ulContext)
  1953. {
  1954. switch(ulContext) {
  1955. RETURN_CASE(MSG_SERVICE_INSTALL);
  1956. RETURN_CASE(MSG_SERVICE_UNINSTALL);
  1957. RETURN_CASE(MSG_SERVICE_DELETE);
  1958. RETURN_CASE(MSG_SERVICE_PROVIDER_CREATE);
  1959. RETURN_CASE(MSG_SERVICE_PROVIDER_DELETE);
  1960. RETURN_CASE(MSG_SERVICE_CONFIGURE);
  1961. RETURN_CASE(MSG_SERVICE_CREATE);
  1962. }
  1963. return "<UNKNOWN>";
  1964. }
  1965. } /* namespace */