internal static ExportedSecurityContext ExportContext(SecHandle context, SecPkgContextExportFlags export_flags, string package, bool client) { if (context is null) { throw new ArgumentNullException(nameof(context)); } SecBuffer buffer = new SecBuffer() { BufferType = SecurityBufferType.Empty }; try { SecurityNativeMethods.ExportSecurityContext(context, export_flags, buffer, out SafeKernelObjectHandle token).CheckResult(); return(new ExportedSecurityContext(package, buffer.ToArray(), !token.IsInvalid ? NtToken.FromHandle(token) : null, client)); } finally { if (buffer.pvBuffer != IntPtr.Zero) { SecurityNativeMethods.FreeContextBuffer(buffer.pvBuffer); } } }
internal static ExportedSecurityContext ExportContext(SecHandle context, SecPkgContextExportFlags export_flags, string package) { using (SecBuffer buffer = new SecBuffer(SecurityBufferType.Empty, 64 * 1024)) { SecurityNativeMethods.ExportSecurityContext(context, SecPkgContextExportFlags.None, buffer, out SafeKernelObjectHandle token).CheckResult(); return(new ExportedSecurityContext(package, buffer.ToArray(), NtToken.FromHandle(token))); } }
internal static extern SecStatusCode ExportSecurityContext( SecHandle phContext, SecPkgContextExportFlags fFlags, [In, Out] SecBuffer pPackedContext, out SafeKernelObjectHandle pToken );