private static IEnumerable <Credential> EnumerateCredentials() { IntPtr data = default; try { var result = NativeInterop.CredEnumerate(null, 0, out var count, out data); if (!result) { return(null); } var credentials = new List <Credential>(); for (var index = 0; index < count; index++) { var currentData = Marshal.ReadIntPtr(data + index * Marshal.SizeOf <IntPtr>()); var marshallResult = Marshaler.MarshalCredentialInstance(currentData); if (marshallResult.IsSuccess) { credentials.Add(marshallResult.Value); } // TODO Add logging and log a warning if marshalling fails } return(credentials); } finally { if (data != IntPtr.Zero) { NativeInterop.CredFree(data); } } }