Exemplo n.º 1
0
        private static IReadOnlyCollection <Credential> Enumerate(string filter, CredEnumerateFlags flags = 0x0)
        {
            List <Credential> Results = new List <Credential>();

            UInt32 Count       = 0;
            IntPtr Credentials = IntPtr.Zero;

            bool Success = CredEnumerate(filter, (UInt32)flags, out Count, out Credentials);

            if (Success)
            {
                for (int i = 0; i < Count; i++)
                {
                    IntPtr CredPtr = Marshal.ReadIntPtr(Credentials, i * Marshal.SizeOf <IntPtr>());

                    CREDENTIAL Cred = Marshal.PtrToStructure <CREDENTIAL>(CredPtr);

                    Results.Add(Credential.FromWin32Credential(Cred));
                }

                CredFree(Credentials);

                return(Results);
            }
            else
            {
                ThrowLastWin32Error();
                return(null);
            }
        }
Exemplo n.º 2
0
 public static extern bool CredEnumerate(string filter, CredEnumerateFlags flag, out int count, out IntPtr pCredentials);
Exemplo n.º 3
0
        public static IDisposableGetter <IEnumerable <Credential> > Enumerate(string Filter = null, CredEnumerateFlags CredFlags = default(CredEnumerateFlags))
        {
            var Size = Marshal.SizeOf(typeof(IntPtr));

            if (Interop.CredEnumerate(Filter, CredFlags, out var count, out var pCredentials))
            {
                return(new CriticalCredGetterHandle <IEnumerable <Credential> >(pCredentials, p => Froms(count, p)));
            }
            var hresult   = Marshal.GetHRForLastWin32Error();
            var exception = Marshal.GetExceptionForHR(hresult);

            if (unchecked ((uint)hresult) == 0x80070032)
            {
                throw new NotSupportedException("not support.", exception);
            }
            throw exception;
        }