Want to get creator, lastmodifier, and other security info for an item in an event sink?
Want to get creator, lastmodifier, and other security info for an item in an event sink?
You can extract a considerable amount of security information using the https://schemas.microsoft.com/exchange/security/ namespace. The information returned is in XML, so individual elements need to be extracted from the XML. The following
vb function is an example that shows how to get security information.
'-----------------------------------------------------------------------------------
'GetItemSecurityInfo
' This function extracts security information for an item using an
' DispInfo.EventRecord. This can be used in an Event Sink from a method
' such as IExStoreSyncEvents_OnSyncSave.
'
' Input:
' ado_rec - This is a DispInfo.EventRecord (ado.record). The pEventInfo
' parameter from OnSyncSave, etc can be used.
' sSearchSIDType - Type of SID information - "creator", "lastmodifier", etc.
' Note: See https://schemas.microsoft.com/exchange/security/ Namespace
' sSearchValue - The specific value to return - "S:display_name", etc
' Returns:
' If sSearchValue is not set to "" then
' The security information for the item is returned.
' else
' An XML String containing the SID information is returned.
' Note: if you run the code and check the value of sReturn, you will see an
' XML document that contains all of the returned items you can extract using
' the sSearchValue argument.
' Example call:
' sCreator = GetItemSecurityInfo(ado_rec, "creator", "display_name")
' Note: You will need to set a project reference to Microsoft XML, v4.0
' Note: You can download MSXML 4.0 SP2 fro the following link:
' MSXML 4.0 Service Pack 2 (Microsoft XML Core Services)
' <https://www.microsoft.com/downloads/details.aspx?FamilyID=3144b72b-b4f2-46da-b4b6-c5d7485f2b42&displaylang=en>
' Note: for more info, go to:
' schemas.microsoft.com/exchange/security/ Namespace
' https://msdn.microsoft.com/library/default.asp?url=/library/en-us/wss/wss/_exch2k_schema_security_namespace.asp
'-----------------------------------------------------------------------------------
Private Function GetItemSecurityInfo(ado_rec As ADODB.Record, sSearchSIDType As String, sSearchValue) As String
Dim oDoc As New MSXML2.DOMDocument40
Set oDoc = New MSXML2.DOMDocument40
Dim oNodeList As IXMLDOMNodeList
Dim oNode As IXMLDOMNode
Dim sSearchValueW As String
Dim sReturn As String ' Return value
Dim sXML As String ' Holds the SID information in XML
sXML = ado_rec.Fields("https://schemas.microsoft.com/exchange/security/" & sSearchSIDType)
oDoc.loadXML sXML 'Load the XML text conaining all the SID information
'oDoc.Save "c:\test.xml" ' Uncomment to save to file
If sSearchValue <> "" Then
sSearchValueW = "S:" & sSearchValue ' See the text returned into sXML for what S: refers to
Set oNodeList = oDoc.getElementsByTagName(sSearchValueW) ' Get to the value we are looking for
Set oNode = oNodeList.nextNode
sReturn = oNode.Text ' OK, here it is
Else
sReturn = sXML
End If
GetItemSecurityInfo = sReturn
End Function