internal KerberosTicketCacheInfo(KERB_TICKET_CACHE_INFO info) { ServerName = info.ServerName.ToString(); RealmName = info.RealmName.ToString(); StartTime = info.StartTime.ToDateTime(); EndTime = info.EndTime.ToDateTime(); RenewTime = info.RenewTime.ToDateTime(); EncryptionType = info.EncryptionType; TicketFlags = (KerberosTicketFlags)info.TicketFlags.SwapEndian(); }
private static NtResult <KerberosTicketCacheInfo[]> QueryTicketCacheList(SafeLsaLogonHandle handle, Luid logon_id, bool throw_on_error) { var package = handle.LookupAuthPackage(AuthenticationPackage.KERBEROS_NAME, throw_on_error); if (!package.IsSuccess) { return(package.Cast <KerberosTicketCacheInfo[]>()); } var request_struct = new KERB_QUERY_TKT_CACHE_REQUEST() { LogonId = logon_id, MessageType = KERB_PROTOCOL_MESSAGE_TYPE.KerbQueryTicketCacheMessage }; using (var request = request_struct.ToBuffer()) { using (var result = handle.CallPackage(package.Result, request, throw_on_error)) { if (!result.IsSuccess) { return(result.Cast <KerberosTicketCacheInfo[]>()); } if (!result.Result.Status.IsSuccess()) { return(result.Result.Status.CreateResultFromError <KerberosTicketCacheInfo[]>(throw_on_error)); } var response = result.Result.Buffer.Read <KERB_QUERY_TKT_CACHE_RESPONSE_HEADER>(0); if (response.CountOfTickets == 0) { return(new KerberosTicketCacheInfo[0].CreateResult()); } var buffer = BufferUtils.GetStructAtOffset <KERB_QUERY_TKT_CACHE_RESPONSE>(result.Result.Buffer, 0); KERB_TICKET_CACHE_INFO[] infos = new KERB_TICKET_CACHE_INFO[response.CountOfTickets]; buffer.Data.ReadArray(0, infos, 0, response.CountOfTickets); return(infos.Select(i => new KerberosTicketCacheInfo(i)).ToArray().CreateResult()); } } }