示例#1
0
 public static extern SafeFileHandle CreateFileW(
     [MarshalAs(UnmanagedType.LPWStr)] string filename,
     [MarshalAs(UnmanagedType.U4)] FileAccess access,
     [MarshalAs(UnmanagedType.U4)] FileShare share,
     IntPtr securityAttributes,
     [MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
     [MarshalAs(UnmanagedType.U4)] FileFlagAndAttributes flagsAndAttributes,
     IntPtr templateFile);
示例#2
0
 public void NewIoControlTest(string Path, FileAccess FileAccess = default, FileShare FileShare = default, FileMode CreationDisposition = default, FileFlagAndAttributes FlagAndAttributes = default)
 {
     using (var IoControl = new IoControl(Path, FileAccess, FileShare, CreationDisposition, FlagAndAttributes))
     {
         if (IoControl.IsInvalid)
         {
             Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
         }
         Trace.WriteLine(IoControl);
     }
 }
示例#3
0
 public static FileAttributes GetAttributes(this FileFlagAndAttributes FileFlagAndAttributes) => (FileAttributes)((uint)FileFlagAndAttributes & 0x000FFFFF);
示例#4
0
 public static void Deconstruct(this FileFlagAndAttributes FileFlagAndAttributes, out FileFlags FileFlags, FileAttributes FileAttributes)
 => (FileFlags, FileAttributes) = (GetFlags(FileFlagAndAttributes), GetAttributes(FileFlagAndAttributes));
示例#5
0
 public static FileFlags GetFlags(this FileFlagAndAttributes FileFlagAndAttributes) => (FileFlags)((uint)FileFlagAndAttributes & 0xFFF00000);
示例#6
0
        /// <summary>
        /// パスのジェネレータを元に解放が予約済の<see cref="IoControl"/>を生成する。
        /// </summary>
        /// <param name="PathGenerator"></param>
        /// <param name="FileAccess"></param>
        /// <param name="FileShare"></param>
        /// <param name="CreationDisposition"></param>
        /// <param name="FlagAndAttributes"></param>
        /// <returns></returns>
        /// <exception cref="AssertInconclusiveException"><paramref name="PathGenerator"/>により生成されたパスが一つも開けなかった場合</exception>
        public static IEnumerable <IoControl> GetIoControls(this IEnumerable <string> PathGenerator, FileAccess FileAccess = default, FileShare FileShare = default, FileMode CreationDisposition = default, FileFlagAndAttributes FlagAndAttributes = default)
        {
            IEnumerable <IoControl> Genarator()
            {
                foreach (var path in PathGenerator)
                {
                    var file = GetIoControl(path, FileAccess, FileShare, CreationDisposition, FlagAndAttributes);
                    if (file.IsInvalid)
                    {
                        file.Dispose();
                        continue;
                    }
                    yield return(file);
                }
            }

            if (PathGenerator == null)
            {
                throw new ArgumentNullException(nameof(PathGenerator));
            }
            return(Genarator());
        }
示例#7
0
 /// <summary>
 /// 論理ドライブのパスを元に解放が予約済の<see cref="IoControl"/>を生成する
 /// </summary>
 /// <param name="FileAccess"></param>
 /// <param name="FileShare"></param>
 /// <param name="CreationDisposition"></param>
 /// <param name="FlagAndAttributes"></param>
 /// <returns></returns>
 public static IEnumerable <IoControl> GetLogicalDrives(FileAccess FileAccess = default, FileShare FileShare = default, FileMode CreationDisposition = default, FileFlagAndAttributes FlagAndAttributes = default)
 => Using(GetIoControls(LogicalDrivePath, FileAccess, FileShare, CreationDisposition, FlagAndAttributes));
示例#8
0
 public static IoControl GetIoControl(string path, FileAccess FileAccess = default, FileShare FileShare = default, FileMode CreationDisposition = default, FileFlagAndAttributes FlagAndAttributes = default) => new IoControl(path, FileAccess, FileShare, CreationDisposition, FlagAndAttributes);
示例#9
0
        public static IEnumerable <IoControl.IoControl> GetScsiDrives(FileAccess FileAccess = default, FileShare FileShare = default, FileMode CreationDisposition = default, FileFlagAndAttributes FlagsAndAttributes = default)
        {
            bool hasDrive = false;

            foreach (var DeviceName in QueryDocDevice().Where(v => v.IndexOf("Scsi") == 0))
            {
                var Path = $@"\\.\{DeviceName}";
                using (var file = new IoControl.IoControl(Path, FileAccess, FileShare, CreationDisposition, FlagsAndAttributes))
                {
                    Trace.WriteLine($"Open {file} ... {(file.IsInvalid ? "NG" : "OK")}.");
                    if (file.IsInvalid)
                    {
                        continue;
                    }
                    hasDrive = true;
                    yield return(file);
                }
            }
            if (!hasDrive)
            {
                throw new Exception("対象となるドライブがありません。");
            }
        }