/// <summary>Implements the <see cref="T:System.Runtime.Serialization.ISerializable" /> interface and is called back by the deserialization event when deserialization is complete.</summary>
 /// <param name="sender">The source of the deserialization event. </param>
 void IDeserializationCallback.OnDeserialization(object sender)
 {
     this._token = (IntPtr)this._info.GetValue("m_userToken", typeof(IntPtr));
     this._name  = this._info.GetString("m_name");
     if (this._name != null)
     {
         string tokenName = WindowsIdentity.GetTokenName(this._token);
         if (tokenName != this._name)
         {
             throw new SerializationException("Token-Name mismatch.");
         }
     }
     else
     {
         this._name = WindowsIdentity.GetTokenName(this._token);
         if (this._name == string.Empty || this._name == null)
         {
             throw new SerializationException("Token doesn't match a user.");
         }
     }
     this._type          = this._info.GetString("m_type");
     this._account       = (WindowsAccountType)((int)this._info.GetValue("m_acctType", typeof(WindowsAccountType)));
     this._authenticated = this._info.GetBoolean("m_isAuthenticated");
 }