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);
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); } }
public static FileAttributes GetAttributes(this FileFlagAndAttributes FileFlagAndAttributes) => (FileAttributes)((uint)FileFlagAndAttributes & 0x000FFFFF);
public static void Deconstruct(this FileFlagAndAttributes FileFlagAndAttributes, out FileFlags FileFlags, FileAttributes FileAttributes) => (FileFlags, FileAttributes) = (GetFlags(FileFlagAndAttributes), GetAttributes(FileFlagAndAttributes));
public static FileFlags GetFlags(this FileFlagAndAttributes FileFlagAndAttributes) => (FileFlags)((uint)FileFlagAndAttributes & 0xFFF00000);
/// <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()); }
/// <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));
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);
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("対象となるドライブがありません。"); } }