public override byte[] GetDiskId() { var stat = new statfs(); var statted = statfs64("/", ref stat); if (statted == 0) { using (var session = DASessionCreate(CFTypeRef.None)) using (var disk = DADiskCreateFromBSDName(CFTypeRef.None, session, stat.f_mntfromname)) using (var properties = DADiskCopyDescription(disk)) using (var key = CFStringCreateWithCString(CFTypeRef.None, DiskArbitration.kDADiskDescriptionMediaUUIDKey, CFStringEncoding.kCFStringEncodingASCII)) { IntPtr cfuuid = IntPtr.Zero; if (CFDictionaryGetValueIfPresent(properties, key, out cfuuid)) { using (var uuidString = CFUUIDCreateString(CFTypeRef.None, cfuuid)) { var stringBuilder = new StringBuilder(64); if (CFStringGetCString(uuidString, stringBuilder, stringBuilder.Capacity, CFStringEncoding.kCFStringEncodingASCII)) { return(Encoding.ASCII.GetBytes(stringBuilder.ToString())); } } } } } return(base.GetDiskId()); }
/// <summary> /// Attempts to get a statfs struct for a given mount point. /// </summary> /// <param name="name">The drive name to retrieve the statfs data for.</param> /// <param name="data">The data retrieved from the mount point.</param> /// <returns>Returns true if data was filled with the results; otherwise, false.</returns> internal static bool TryGetStatFsForDriveName(string name, out statfs data, out int errno) { data = default(statfs); errno = 0; if (get_statfs(name, out data) < 0) { errno = Marshal.GetLastWin32Error(); return false; } return true; }
/// <summary> /// Attempts to get a statfs struct for a given mount point. /// </summary> /// <param name="name">The drive name to retrieve the statfs data for.</param> /// <param name="data">The data retrieved from the mount point.</param> /// <returns>Returns true if data was filled with the results; otherwise, false.</returns> internal static bool TryGetStatFsForDriveName(string name, out statfs data, out ErrorInfo errorInfo) { data = default(statfs); if (get_statfs(name, out data) < 0) { errorInfo = Interop.Sys.GetLastErrorInfo(); return(false); } errorInfo = default(ErrorInfo); return(true); }
/// <summary> /// Attempts to get a statfs struct for a given mount point. /// </summary> /// <param name="name">The drive name to retrieve the statfs data for.</param> /// <param name="data">The data retrieved from the mount point.</param> /// <returns>Returns true if data was filled with the results; otherwise, false.</returns> internal static bool TryGetStatFsForDriveName(string name, out statfs data, out ErrorInfo errorInfo) { data = default(statfs); if (get_statfs(name, out data) < 0) { errorInfo = Interop.Sys.GetLastErrorInfo(); return false; } errorInfo = default(ErrorInfo); return true; }
/// <summary> /// Gets a statfs struct for a given mount point /// </summary> /// <param name="name">The drive name to retrieve the statfs data for</param> /// <returns>Returns </returns> internal static unsafe statfs GetStatFsForDriveName(string name) { statfs data = default(statfs); int result = get_statfs(name, out data); if (result < 0) { int errno = Marshal.GetLastWin32Error(); if (errno == Interop.Errors.ENOENT) { throw new System.IO.DriveNotFoundException(SR.Format(SR.IO_DriveNotFound_Drive, name)); // match Win32 exception } else { throw Interop.GetExceptionForIoErrno(errno, isDirectory: true); } } else { return(data); } }
private static unsafe extern int get_statfs(string path, out statfs buffer);
internal static unsafe String GetMountPointFsType(statfs data) { return Marshal.PtrToStringAnsi((IntPtr)data.f_fstypename); }
internal static unsafe String GetMountPointFsType(statfs data) { return(Marshal.PtrToStringAnsi((IntPtr)data.f_fstypename)); }
internal static unsafe String GetMountPointFsType(statfs data) { return(((LinuxFileSystemTypes)data.f_type).ToString()); }
internal static unsafe extern int getmntinfo(statfs** ppBuffer, int flags);