コード例 #1
0
                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);
                        }
                    }
                }
コード例 #2
0
                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);
                    }

                }