private void PurgeAllTickets( IntPtr lsaHandle, UInt32 kerberosPackageId) { IntPtr purgeCacheRequestPtr = IntPtr.Zero; IntPtr purgeCacheResponsePtr = IntPtr.Zero; try { using (var empty = new OSCalls.UNICODE_STRING("")) { var purgeCacheRequest = new OSCalls.KERB_PURGE_TKT_CACHE_REQUEST { MessageType = OSCalls.KERB_PROTOCOL_MESSAGE_TYPE.KerbPurgeTicketCacheMessage, LogonId = new OSCalls.LUID(), ServerName = empty, RealmName = empty, }; var purgeCacheRequestSize = Marshal.SizeOf(purgeCacheRequest); purgeCacheRequestPtr = Marshal.AllocHGlobal(purgeCacheRequestSize); Marshal.StructureToPtr(purgeCacheRequest, purgeCacheRequestPtr, false); OSCalls.NtStatus ntSubStatus; ulong purgeCacheResponseSize; var ntStatus = OSCalls.LsaCallAuthenticationPackage( lsaHandle, kerberosPackageId, purgeCacheRequestPtr, purgeCacheRequestSize, out purgeCacheResponsePtr, out purgeCacheResponseSize, out ntSubStatus); if (ntStatus != OSCalls.NtStatus.Success || ntSubStatus != OSCalls.NtStatus.Success) { throw new Win32Exception( string.Format( "PurgeAllTickets->LsaCallAuthenticationPackage failed, ntStatus={0}, ntSubStatus={1}", ntStatus, ntSubStatus)); } } } finally { if (purgeCacheRequestPtr != IntPtr.Zero) { Marshal.FreeHGlobal(purgeCacheRequestPtr); } if (purgeCacheResponsePtr != IntPtr.Zero) { OSCalls.LsaFreeReturnBuffer(purgeCacheResponsePtr); } } }
private void PurgeAllTickets( IntPtr lsaHandle, UInt32 kerberosPackageId) { IntPtr purgeCacheRequestPtr = IntPtr.Zero; IntPtr purgeCacheResponsePtr = IntPtr.Zero; try { using (var empty = new OSCalls.UNICODE_STRING("")) { var purgeCacheRequest = new OSCalls.KERB_PURGE_TKT_CACHE_REQUEST { MessageType = OSCalls.KERB_PROTOCOL_MESSAGE_TYPE.KerbPurgeTicketCacheMessage, LogonId = new OSCalls.LUID(), ServerName = empty, RealmName = empty, }; var purgeCacheRequestSize = Marshal.SizeOf(purgeCacheRequest); purgeCacheRequestPtr = Marshal.AllocHGlobal(purgeCacheRequestSize); Marshal.StructureToPtr(purgeCacheRequest, purgeCacheRequestPtr, false); OSCalls.NtStatus ntSubStatus; ulong purgeCacheResponseSize; var ntStatus = OSCalls.LsaCallAuthenticationPackage( lsaHandle, kerberosPackageId, purgeCacheRequestPtr, purgeCacheRequestSize, out purgeCacheResponsePtr, out purgeCacheResponseSize, out ntSubStatus); if (ntStatus != OSCalls.NtStatus.Success || ntSubStatus != OSCalls.NtStatus.Success) throw new Win32Exception( string.Format( "PurgeAllTickets->LsaCallAuthenticationPackage failed, ntStatus={0}, ntSubStatus={1}", ntStatus, ntSubStatus)); } } finally { if (purgeCacheRequestPtr != IntPtr.Zero) Marshal.FreeHGlobal(purgeCacheRequestPtr); if (purgeCacheResponsePtr != IntPtr.Zero) OSCalls.LsaFreeReturnBuffer(purgeCacheResponsePtr); } }