/// <summary> /// A new windows credentials handle. /// </summary> /// <param name="principal">String that specifies the name of the principal whose credentials the handle will reference.</param> /// <param name="identity">User identity.</param> /// <param name="package">Name of the security package with which these credentials will be used.</param> /// <param name="credentialUse">A flag that indicates how these credentials will be used. One of Secur32.SECPKG_CRED_OUTBOUND, Secur32.SECPKG_CRED_INBOUND.</param> public WindowsCredentialsHandle( string principal, WindowsAuthIdentity identity, int credentialUse, string package) { Secur32.SEC_WINNT_AUTH_IDENTITY authIdentity = new Secur32.SEC_WINNT_AUTH_IDENTITY( identity.Username, identity.Domain, identity.Password); IntPtr authIdentityPtr = Marshal.AllocHGlobal(Marshal.SizeOf(authIdentity)); Marshal.StructureToPtr(authIdentity, authIdentityPtr, false); int rc = Secur32.AcquireCredentialsHandle( principal, package, credentialUse, IntPtr.Zero, authIdentityPtr, 0, IntPtr.Zero, out Handle, out clientLifetime); Marshal.FreeHGlobal(authIdentityPtr); if (rc != Secur32.SEC_E_OK) { throw new Win32Exception(rc); } }
/// <summary> /// /// </summary> /// <param name="package"></param> /// <param name="identity"></param> /// <param name="targetName"></param> /// <param name="fContextReq"></param> /// <param name="targetDataRep"></param> /// <returns></returns> public static WindowsSecurityContext Get(string package, string targetName, WindowsAuthIdentity identity, int fContextReq, int targetDataRep) { using (WindowsCredentialsHandle credentialsHandle = new WindowsCredentialsHandle( string.Empty, identity, Secur32.SECPKG_CRED_OUTBOUND, package)) { return(new WindowsSecurityContext( targetName, credentialsHandle, package, fContextReq, targetDataRep)); } }
/// <summary> /// /// </summary> /// <param name="package"></param> /// <param name="identity"></param> /// <param name="targetName"></param> /// <param name="fContextReq"></param> /// <param name="targetDataRep"></param> /// <returns></returns> public static WindowsSecurityContext Get(string package, string targetName, WindowsAuthIdentity identity, int fContextReq, int targetDataRep) { using (WindowsCredentialsHandle credentialsHandle = new WindowsCredentialsHandle( string.Empty, identity, Secur32.SECPKG_CRED_OUTBOUND, package)) { return new WindowsSecurityContext( targetName, credentialsHandle, package, fContextReq, targetDataRep); } }