/// <summary> /// Initializes the client-side security context from a credental handle. /// </summary> /// <param name="outputBuffer">The buffer that will hold the output token.</param> /// <param name="serverBuffer">The buffer containing the input data from the server.</param> /// <param name="credential">The credential handle.</param> /// <param name="serverPrincipal">The server principal.</param> /// <param name="requestedAttributes">The requested attributes.</param> /// <returns>A <see cref="SecurityStatus" /> representing the result of the operation.</returns> public SecurityStatus InitializeSecurityContext(SecureBuffer outputBuffer, SecureBuffer serverBuffer, SafeCredentialHandle credential, string serverPrincipal, SecurityContextAttributes requestedAttributes) { SecurityContextAttributes finalAttributes = SecurityContextAttributes.None; Timestamp expiry = new Timestamp(); using (SecureBufferAdapter outputAdapter = new SecureBufferAdapter(outputBuffer)) { using (SecureBufferAdapter serverAdapter = new SecureBufferAdapter(serverBuffer)) { return(NativeMethods.InitializeSecurityContext_2 ( ref credential.RawHandle, ref RawHandle, serverPrincipal, requestedAttributes, 0, NativeMethods.SecureBufferDataRep.Network, serverAdapter.Handle, 0, ref RawHandle, outputAdapter.Handle, ref finalAttributes, ref expiry )); } } }
/// <summary> /// Establishes a security context between the server and a remote client. /// </summary> /// <param name="outputBuffer">The buffer that will hold the output token.</param> /// <param name="clientBuffer">The buffer containing the input data from the client.</param> /// <param name="credential">The credential handle.</param> /// <param name="requestedAttributes">The requested attributes.</param> /// <returns>A <see cref="SecurityStatus" /> representing the result of the operation.</returns> public SecurityStatus AcceptSecurityContext(SecureBuffer outputBuffer, SecureBuffer clientBuffer, SafeCredentialHandle credential, SecurityContextAttributes requestedAttributes) { SecurityContextAttributes finalAttributes = SecurityContextAttributes.None; Timestamp expiry = new Timestamp(); using (SecureBufferAdapter outputAdapter = new SecureBufferAdapter(outputBuffer)) { using (SecureBufferAdapter clientAdapter = new SecureBufferAdapter(clientBuffer)) { if (this.IsInvalid) { return(NativeMethods.AcceptSecurityContext_1 ( ref credential.RawHandle, IntPtr.Zero, clientAdapter.Handle, requestedAttributes, NativeMethods.SecureBufferDataRep.Network, ref RawHandle, outputAdapter.Handle, ref finalAttributes, ref expiry )); } else { return(NativeMethods.AcceptSecurityContext_2 ( ref credential.RawHandle, ref RawHandle, clientAdapter.Handle, requestedAttributes, NativeMethods.SecureBufferDataRep.Network, ref RawHandle, outputAdapter.Handle, ref finalAttributes, ref expiry )); } } } }