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(); }
public static extern int statfs64(string path, ref statfs buf);