问题标签 [diskarbitration]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - OSX-Mounting DVD 以编程方式不启动用户指定的应用程序
我使用磁盘仲裁框架来管理各种驱动器和磁盘。
我已经注册了回调函数DADiskAppearedCallback
和DADiskDisappearCallback
.
对于 USB 驱动器,一切似乎都可以正常工作,但对于 CD/DVD,我遇到了问题。
加载 CD/DVD 后,我DADiskUnmount()
使用磁盘的 BSDName 卸载()驱动器。然后在对磁盘进行一些验证后,我DADiskMount()
使用 BSDName 再次安装()磁盘。
当我再次挂载 CD/DVD 时,在
系统偏好->硬件->Cds & DVSs
没有启动。
例如。对于视频 DVD - 打开 DVD 播放器。这里应该启动 DVD 播放器。
我该如何克服这个问题?
我仍在寻找遇到的解决方案,“SystemUIServer”管理应在插入 CD/DVD 时挂载的应用程序。我可以在 CD/DVD 安装上触发该操作吗?或者这是在 CD/DVD 挂载上手动启动用户提供的应用程序的正确方法吗?
objective-c - 将 NSArray 转换为 CFStringRef *
我需要一种将NSArray转换为与DADiskMountWithArguments的参数选项兼容的空终止列表的方法。
该文档将参数选项指定为类型的“空终止列表” CFStringRef arguments[]
。
我创建了一个 Mount 方法,我想通过参数传递一个NSArray,并且在我的方法中我需要将NSArray转换为 CFStringRef *。
我已经尝试过自己,但我总是遇到 ARC 的麻烦,而且我还没有找到任何好的方法来做到这一点。
我查看了 GitHub https://github.com/aburgh/Disk-Arbitrator/blob/master/Source/Disk.m中的 Disk-Arbitrator 项目以获取灵感,该应用程序的创建者使用此方法:
但这在 ARC 中是不允许的,我找不到办法。
更新以获得更好的清晰度:
这一行:
给出以下错误消息:
ARC 不允许将非 Objective-C 指针类型“void *”隐式转换为“__strong id *”
指向没有明确所有权的非常量类型“id”的指针。
为了解决这个问题,我尝试这样做:
然后这一行:
给出以下错误:
[错误] ARC 不允许将 Objective-C 指针隐式转换为“__unsafe_unretained id *”
[警告]不兼容的指针类型将“__string id”发送到“__unsafe_unretained id *”类型的参数
-getObjects:range:的声明如下所示:
因此,从我收到的错误消息中,我假设我必须将“__unsafe_unretained id *”传递给“getObjects:(id [])aBuffer”。所以要解决这个问题,我将我的 id 声明为 __unsafe_unretained,如下所示:
并像这样更新这一行:
现在我没有任何错误,但是在调用DADiskMountWithArguments 时,我收到以下错误:
ARC 不允许将 Objective-C 指针转换为“CFStringRef *”(又名“const struct __CFString **”)
所以在这里我卡住了,因为我无法修复这个错误,我不知道我之前是否犯了错误,或者我没有找到正确的方式发送 CFStringRef,因此我决定在这里寻求指导。
这是它在上下文中的样子,其中 args 是之前声明的NSArray:
所以我的问题是,如何使这种方法对 ARC 友好,或者是否有另一种/更好的方法可以从NSArray到以 NULL 结尾的 CFStringRef *
objective-c - 在回调方法中枚举磁盘时 DiskRef 消失
我在我正在处理的项目中使用了 GitHub 上的Disk-Arbitrator项目中的 DiskArbitration 类。
我正在通过hdiutil
有时为DARegisterDiskDescriptionChangedCallback
崩溃定义的回调方法安装/卸载 OS X 安装程序磁盘映像,因为磁盘列表在枚举时发生了变化,然后 get 传递的 diskref 变为NULL
.
这是回调调用的函数:
我通过复制和枚举解决了枚举时变异的问题。
但是,此代码有时会崩溃:"*** CFHash() called with NULL ***"
那是因为磁盘已经消失并且diskRef
可能已被释放。
所以,我需要一些提示。我想尝试制作 的副本diskRef
,并通过以下方式尝试:
但这也不起作用。有没有其他方法可以复制?还是有另一种方法我应该解决这个问题。
objective-c - 使用 DiskArbitration 在 OSX 中卸载磁盘
我正在尝试在 OSX 中卸载磁盘。代码工作正常,但只有在出现错误时,磁盘卸载成功时才会调用回调。我阅读了 DiskArbitrationProgGuide 并按照步骤操作,但还没有进展。有人可以帮我吗?
更新。感谢 Ken Thomases,代码现在可以工作了
cocoa - 卸载驱动器/卷而不弹出
我想在不弹出的情况下卸载磁盘。为此,我尝试了以下代码
它可以工作,但我想要卷的动态路径,在代码中它是静态的。我尝试将 NSString 更改为 CFStringRef,然后尝试在 path("/volumes/Untitled") 提及的地方使用,但它仍然相同。
欢迎任何建议。
macos - Mac App Sandbox 和 USB 设备卸载
我需要在沙盒应用程序中卸载 Objective-C 中的 USB 设备。
对于卸载,我使用:
来自磁盘仲裁。
在我激活沙盒之前一切正常。使用沙盒卸载 (DiskUnmountCallback) 返回失败。
我找不到设备卸载的沙盒权利设置,也找不到该问题的任何其他原因。
在授权中,我激活了“com.apple.security.device.usb”,但我仍然无法卸载 USB 设备。
macos - Thunderbolt 驱动器在磁盘仲裁/iokit 中未标记为可弹出,尽管它们显然是
我正在开发一个应用程序,它使用磁盘仲裁来找出哪些设备连接到机器并对连接/断开事件做出反应,并且多年来一直运行良好。就在最近,我发现在使用外部 Thunderbolt 驱动器时某些东西无法按预期工作,我对此进行了调试,发现卷的可弹出属性(映射到 kIOMediaEjectableKey i IOKit 的磁盘仲裁中的 kDADiskDescriptionMediaEjectableKey)设置为 false。但是,驱动器显示时带有弹出按钮。
finder 使用什么来确定此卷是否可弹出?显然不是明显的 kDADiskDescriptionMediaEjectableKey。
任何提示表示赞赏。
macos - 以编程方式获取 OSX Fusion Drive 信息
我正在开发一个项目,该项目将驱动器(及其相关的统计信息,例如由 显示的那些iostat
)和分区链接到挂载点,但在 OS X 处理Fusion Drive的方式上遇到了问题。
我已经能够从IO Registry and Disk Arbitration Framework收集有关驱动器和分区的信息。同样,我已经能够使用statfs(或mount
ordf
命令)关联驱动器和挂载点。但是,Fusion Drive 进入图片时缺少一个链接。这是一个示例输出diskutil list
:
iostat
来自(读取/写入/读取的字节数/写入的字节数,传输花费的时间等)的 IORegistry 统计信息与disk0
上述输出相关联。但是,df
(或等效的编程 statfs 函数)将/
挂载点与/dev/disk1
:
我希望能够将文件系统上的读/写/
与物理驱动器相关联disk0
。我花了几个小时在这里和其他地方寻找disk1
与disk0s2
. 的源代码diskutil
显然在DiskManagement
框架中,不公开。
除了以文本方式解析上述diskutil list
命令的输出之外,还有什么方法可以将已安装的(虚拟)融合驱动器与其底层(物理)分区相关联?
macos - 在 DiskArbitration 框架中取消注册回调的正确语法
我将实现一个观察者,以便在特定卷消失时得到通知。
中的通知NSWorkspace
不是一个选项,因为我需要有关设备关闭而不是设备卸载的通知。
注册很容易(我省略了错误处理)
回调闭包是
注销方法
需要一个泛型UnsafeMutableRawPointer
而不是特定的回调类型之一。
当我将回调闭包传递给callback
我得到的参数时
无法将类型“DADiskDisappearedCallback”(又名“@convention(c)(DADisk,可选)-> ()”)的值转换为预期的参数类型“UnsafeMutableRawPointer”
我的问题是:如何将回调对象转换volumeDidDisappearCallback
为UnsafeMutableRawPointer
?
macos - 有没有办法在从外部设备启动时保持内部驱动器段的卸载
对于使用本机 Mac 应用程序对驱动器和/或段进行取证成像,我从外部设备(usb、hdd 等)启动到 BaseSystem。我想在引导过程中保持内部驱动器和/或段未挂载(在引导之前无法知道驱动器/段卷名和/或 UUID)。稍后将禁用磁盘仲裁,挂载这些驱动器/段并对其进行映像。
我创建了一个用于挂载阻塞(在外部引导设备上)的守护进程(System/Library/LaunchDeamons),但它只阻止新连接的设备,而不是内部设备。
注 1:我从 Sierra (10.12.1) 的 BaseSystem.dmg 创建了启动映像,并修改了内容。
注意 2:由于在引导之前无法知道驱动器/段卷名称和/或 UUID,因此无法使用 fstab。
我需要一个方向,任何评论可能会有所帮助。谢谢。