Esempio n. 1
0
        private static AutoRohlikovac.Credential ReadCredential(Credential credential)
        {
            var applicationName = Marshal.PtrToStringUni(credential.TargetName);
            var userName = Marshal.PtrToStringUni(credential.UserName);
            string secret = null;
            if (credential.CredentialBlob != IntPtr.Zero)
            {
                secret = Marshal.PtrToStringUni(credential.CredentialBlob, (int) credential.CredentialBlobSize/2);
            }

            return new AutoRohlikovac.Credential(credential.Type, applicationName, userName, secret);
        }
Esempio n. 2
0
        public static int WriteCredential(string applicationName, string userName, string secret)
        {
            var byteArray = Encoding.Unicode.GetBytes(secret);
            if (byteArray.Length > 512)
                throw new ArgumentOutOfRangeException(secret, @"The secret message has exceeded 512 bytes.");

            var credential = new Credential
            {
                AttributeCount = 0,
                Attributes = IntPtr.Zero,
                Comment = IntPtr.Zero,
                TargetAlias = IntPtr.Zero,
                Type = CredentialType.Generic,
                Persist = (uint) CredentialPersistence.LocalMachine,
                CredentialBlobSize = (uint) Encoding.Unicode.GetBytes(secret).Length,
                TargetName = Marshal.StringToCoTaskMemUni(applicationName),
                CredentialBlob = Marshal.StringToCoTaskMemUni(secret),
                UserName = Marshal.StringToCoTaskMemUni(userName ?? Environment.UserName)
            };

            var written = CredWrite(ref credential, 0);
            var lastError = Marshal.GetLastWin32Error();

            Marshal.FreeCoTaskMem(credential.TargetName);
            Marshal.FreeCoTaskMem(credential.CredentialBlob);
            Marshal.FreeCoTaskMem(credential.UserName);

            if (written)
                return 0;

            throw new Exception($"CredWrite failed with the error code {lastError}.");
        }