File: System\Diagnostics\Eventing\Reader\EventBookmark.cs
Project: ndp\fx\src\Core\System.Core.csproj (System.Core)
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
/*============================================================
**
** Class: EventBookmark
**
** Purpose: 
** This public class represents an opaque Event Bookmark obtained
** from an EventRecord.  The bookmark denotes a unique identifier
** for the event instance as well as marks the location in the 
** the result set of the EventReader that the event instance was 
** obtained from.
**
============================================================*/
using System.Runtime.InteropServices;
using System.Security.Permissions;
using System.Runtime.Serialization;
 
namespace System.Diagnostics.Eventing.Reader {
 
    //
    // NOTE: This class must be generic enough to be used across 
    // eventing base implementations.  Cannot add anything 
    // that ties it to one particular implementation.
    //
    
    /// <summary>
    /// Represents an opaque Event Bookmark obtained from an EventRecord.  
    /// The bookmark denotes a unique identifier for the event instance as 
    /// well as marks the location in the the result set of the EventReader 
    /// that the event instance was obtained from.
    /// </summary>
    [Serializable]
    [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
    public class EventBookmark : ISerializable {
        string bookmark;
 
        internal EventBookmark(string bookmarkText) {
            if (bookmarkText == null)
                throw new ArgumentNullException("bookmarkText");
            this.bookmark = bookmarkText;
        }
 
        protected EventBookmark(SerializationInfo info, StreamingContext context) {
            if (info == null)
                throw new ArgumentNullException("info");
            this.bookmark = info.GetString("BookmarkText");    
        }
 
        // SecurityCritical due to inherited link demand for GetObjectData.
        [System.Security.SecurityCritical,SecurityPermissionAttribute(SecurityAction.LinkDemand,Flags = SecurityPermissionFlag.SerializationFormatter)]
        void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {
             GetObjectData( info, context );
        }
 
        // SecurityCritical due to inherited link demand for GetObjectData.
        [System.Security.SecurityCritical,SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.SerializationFormatter)]
        protected virtual void GetObjectData(SerializationInfo info, StreamingContext context) {
 
            if (info == null)
                throw new ArgumentNullException("info");
            info.AddValue("BookmarkText", this.bookmark);
        }
 
        internal string BookmarkText { get { return bookmark; } } 
    }
}