The spec for pst mentions that the name-id-map is one per pst. This map may contain several pidlid properties as defined in their spec MS-OXPROPS, but from the looks of it most of these pidlid properties appear to be message specific. How are properties for each message stored/managed in this name-id-map ?
Asked
Active
Viewed 191 times
0
-
I am not sure I understand the question - named properties are stored like any other properties, e.g. PR_SUBJECT. – Dmitry Streblechenko May 22 '14 at 14:24
-
The question is that if the name-id-map is one per pst, then how do we figure out the PR_SUBJECT for a msg in a pst ? I am guessing that the NID_NAME_TO_ID_MAP states that these properties have been set/exist in the pst and somehow the table structure which stores the relevant data for a msg uses this map to fetch the key and then looks up the value from its own structure – sunny May 22 '14 at 17:19
1 Answers
1
No, the messages store the 4 byte property tags. E.g. PR_SUBJECT_A (which is not a named property and hence does not need to be mapped) is 0x0037001E.
The map is needed only if a client calls IMAPIProp::GetIDsFromNames and IMAPIProp::GetNamesFromIDs. In the former case, you get the GUID and the id (either string or an int) and you need to lookup the 4 byte (or rather 2 bytes since the lower 2 bytes are prop type) prop tag corresponding to that GUID/id combination. In case of GetNamesFromIDs, you do reverse lookup - given the prop tag, return the GUID/id.

Dmitry Streblechenko
- 62,942
- 4
- 53
- 78
-
So what does the map really represent ? and where do we need to do the lookup (in the table structure of the msg ? ) – sunny May 22 '14 at 19:06
-
Say for instance I am interested in a named property like [PidLidOwnerCriticalChange](http://msdn.microsoft.com/en-us/library/ee160551(v=exchg.80).aspx) then where would the value for this property stored ? (in the table structure of the msg? What is the purpose of the named map ?) – sunny May 22 '14 at 19:13
-
1If you want PidLidOwnerCriticalChange, you will need to use {6ED8DA90-450B-101B-98DA-00AA003F1305} and 0x0000001A to look up the property tag corresponding to that property using the map. Then you will need to set the right property type (PT_SYSTIME = 0x0040), then look up the actual value of that property in the data for the particular message. – Dmitry Streblechenko May 22 '14 at 20:11
-
for the sake of completeness, you meant "look up the actual value of that property" using the property tag right ? – sunny May 23 '14 at 00:54
-
Correct. There is only one property tag for that combination of GUID/id, but each message can have a different property value for that tag. – Dmitry Streblechenko May 24 '14 at 05:11