public static FileStream Open(FileDataStream ads, FileMode mode, FileAccess access, FileShare share)
        {
            if (ads.Type != FileDataStreamType.Data)
            {
                throw new InvalidOperationException("Only $DATA streams can be opened for reading or writing.");
            }

            if (ads.Name.Length == 0) // default stream
            {
                return(ads.File.Open(mode, access, share));
            }

            var(nmode, nflags) = ManagedToNative(mode);
            var naccess = ManagedToNative(access);
            var nshare  = ManagedToNative(share);

            var lpFileName = $"{ads.File.FullName}:{ads.Name}";

            var hFile = Interop.CreateFileW(lpFileName, naccess, nshare, IntPtr.Zero, nmode, nflags, IntPtr.Zero);

            if (hFile == Interop.INVALID_HANDLE_VALUE)
            {
                ThrowErrorAsException(Marshal.GetLastWin32Error(), lpFileName);
                return(null);
            }

            return(new FileStream(new SafeFileHandle(hFile, true), access, 4096, true));
        }
        public static void Delete(FileDataStream ads)
        {
            if (ads.Type != FileDataStreamType.Data)
            {
                throw new InvalidOperationException("Only $DATA streams can be deleted.");
            }

            if (ads.Name.Length == 0) // default stream
            {
                ads.File.Delete();
                return;
            }

            var lpFileName = $"{ads.File.FullName}:{ads.Name}";

            if (!Interop.DeleteFileW(lpFileName))
            {
                ThrowErrorAsException(Marshal.GetLastWin32Error(), lpFileName);
            }
        }