Beispiel #1
0
        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());
        }
Beispiel #2
0
 /// <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);
Beispiel #7
0
 internal static unsafe String GetMountPointFsType(statfs data)
 {
     return Marshal.PtrToStringAnsi((IntPtr)data.f_fstypename);
 }
Beispiel #8
0
 internal static unsafe String GetMountPointFsType(statfs data)
 {
     return(Marshal.PtrToStringAnsi((IntPtr)data.f_fstypename));
 }
Beispiel #9
0
 internal static unsafe String GetMountPointFsType(statfs data)
 {
     return(((LinuxFileSystemTypes)data.f_type).ToString());
 }
Beispiel #10
0
 private static unsafe extern int get_statfs(string path, out statfs buffer);
Beispiel #11
0
 internal static unsafe extern int getmntinfo(statfs** ppBuffer, int flags);