예제 #1
0
        public static int CredEnum(string Filter, out Credential[] Credentials)
        {
            int count = 0;
            int Flags = 0x0;

            if (string.IsNullOrEmpty(Filter) ||
                "*" == Filter)
            {
                Filter = null;
                if (6 <= Environment.OSVersion.Version.Major)
                {
                    Flags = 0x1; //CRED_ENUMERATE_ALL_CREDENTIALS; only valid is OS >= Vista
                }
            }
            IntPtr pCredentials = IntPtr.Zero;

            if (!CredEnumerateW(Filter, Flags, out count, out pCredentials))
            {
                Credentials = null;
                return(Marshal.GetHRForLastWin32Error());
            }
            CriticalCredentialHandle CredHandle = new CriticalCredentialHandle(pCredentials);

            Credentials = CredHandle.GetCredentials(count);
            return(0);
        }
예제 #2
0
        public static int Query(string filter, out Credential[] credentials)
        {
            var flags = 0x0;

            if (string.IsNullOrEmpty(filter) || filter == "*")
            {
                filter = null;
                if (Environment.OSVersion.Version.Major >= 6) // CRED_ENUMERATE_ALL_CREDENTIALS; only valid is OS >= Vista
                {
                    flags = 0x1;
                }
            }
            if (!CredEnumerateW(filter, flags, out var count, out var credentialPtr))
            {
                credentials = null;
                return(Marshal.GetHRForLastWin32Error());
            }
            var credentialHandle = new CriticalCredentialHandle(credentialPtr);

            credentials = credentialHandle.GetCredentials(count);
            return(0);
        }