public uint RopLogon(LogonType logonType, string userESSDN, out RopLogonResponse logonResponse)
{
this.rawData = null;
this.response = null;
this.responseSOHs = null;
RopLogonRequest logonRequest;
uint objHandle1 = 0;
byte[] rawData1 = null;
object response1 = null;
List<List<uint>> responseSOHs1 = null;
logonRequest.RopId = 0xFE;
logonRequest.LogonId = 0x0;
logonRequest.OutputHandleIndex = 0x0;
logonRequest.StoreState = 0;
if (LogonType.PublicFolder == logonType)
{
// Logon to public folders
logonRequest.LogonFlags = 0x00;
// Logon to public folders
logonRequest.OpenFlags = 0x01000002;
logonRequest.EssdnSize = 0;
logonRequest.Essdn = null;
}
else
{
// Logon to a private mailbox
logonRequest.LogonFlags = 0x01;
// USE_PER_MDB_REPLID_MAPPING flag.
logonRequest.OpenFlags = 0x01000000;
if (userESSDN + "\0" == this.user1ESSDN)
{
logonRequest.EssdnSize = (ushort)Encoding.ASCII.GetByteCount(this.user1ESSDN);
logonRequest.Essdn = Encoding.ASCII.GetBytes(this.user1ESSDN);
}
else
{
logonRequest.EssdnSize = (ushort)Encoding.ASCII.GetByteCount(this.user2ESSDN);
logonRequest.Essdn = Encoding.ASCII.GetBytes(this.user2ESSDN);
}
}
responseSOHs1 = this.DoRPCCall(logonRequest, objHandle1, ref response1, ref rawData1);
logonResponse = (RopLogonResponse)response1;
this.mailboxGUID = logonResponse.MailboxGuid;
uint handle = responseSOHs1[0][logonResponse.OutputHandleIndex];
return handle;
}