标签: diskarbitration

尝试在OS X中卸载卷时解释返回值(反对者)

我正在尝试使用磁盘仲裁框架在我的Cocoa应用程序中卸载卷.

致电之前:

DADiskUnmount(disk, 
              kDADiskUnmountOptionDefault, 
              unmountCallback, 
              self );
Run Code Online (Sandbox Code Playgroud)

我注册了一个后来调用的回调函数:

void unmountCallback(DADiskRef disk, DADissenterRef dissenter, void *context )
{
   if (dissenter != NULL) 
    {
        DAReturn ret = DADissenterGetStatus(dissenter);

        switch (ret) {
        case kDAReturnBusy:
            printf("kDAReturnBusy\n");
            break;
    } 
}
Run Code Online (Sandbox Code Playgroud)

在这个函数中,我尝试解释反对者返回值但是卡住了.我认为它应该是DAReturn类型并且具有类似kDAReturnBusy的值但是当例如iTunes正在使用该卷并且它无法卸载时"ret"具有值0xc010,我不太明白.

如果卸载失败,我想找出无法卸载卷的原因,以及其他应用程序使用它时提醒用户关闭此应用程序.

cocoa objective-c diskarbitration

8
推荐指数
1
解决办法
804
查看次数

如何在Mac OS X上操作期间防止弹出磁盘?

我有一个长期运行的任务,在已安装的USB驱动器上执行一系列文件操作,我想阻止用户在发生这种情况时从Finder(或其他地方)弹出驱动器.有一个取消按钮,允许任务随时结束.

我曾假设在任务期间保持文件句柄在已安装的卷上打开可以解决问题,但它没有奏效.

这是我尝试的(删除错误处理):

NSString *tempFilePath = @"/Volumes/myVolume/.myTempFile";
if ([[NSFileManager defaultManager] fileExistsAtPath:tempFilePath] == NO) {
    [[NSFileManager defaultManager] createFileAtPath:tempFilePath contents:nil attributes:nil]
}

_tempFile = [NSFileHandle fileHandleForWritingAtPath:tempFilePath];
Run Code Online (Sandbox Code Playgroud)

有关我可以采取哪些措施以确保防止卷弹出的任何想法?

macos objective-c diskarbitration

6
推荐指数
1
解决办法
1805
查看次数

Mac OS X沙盒和磁盘仲裁

当您对应用程序进行沙盒处理时,似乎没有权利使用DVD驱动器.

有没有人想出一种方法来访问它,特别是磁盘仲裁通知?

macos sandbox diskarbitration

6
推荐指数
1
解决办法
536
查看次数

如何在OSX上迭代所有已安装的文件系统

我有兴趣在OSX上迭代所有挂载的文件系统(目前运行10.9 Mavericks).我正在寻找类似于getmntent()或mount shell命令的输出(尽管我想从目标C中执行此操作,因此解析shell命令的输出显然不是最佳的).

我一直在查看磁盘仲裁框架,看来我可以使用此框架通知mount和unmount事件.我可能在那里遗漏了一些东西,但我不清楚是否有办法使用磁盘仲裁迭代现有的已安装文件系统.

我已经探索过使用getfsent(),它似乎会提供一个解决方案,但经过测试后我发现我没有从迭代getfsent()获得多个条目.请参阅以下代码:

struct fstab* fsentry;
setfsent();
fsentry = getfsent();
while(fsentry)
{
    //do something with fsentry
    fsentry = getfsent();
}
endfsent();
Run Code Online (Sandbox Code Playgroud)

我到这里的唯一条目是/ file系统.第二次调用getfsent()时,它返回NULL,好像没有更多的条目.mount命令向我展示了其他几个包括已安装的cifs/smb文件系统:

/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
//user@<ip address>/public on /Volumes/public (smbfs, nodev, nosuid, mounted by user)
Run Code Online (Sandbox Code Playgroud)

所以似乎getfsent()开始做我期望的,但由于某种原因停止?

总结我的问题是:在OSX上迭代文件系统的最佳方法是什么?

如果有人对我为什么只从getfsent()获得一个结果的答案,我也会对此感兴趣.

macos bsd posix diskarbitration osx-mavericks

6
推荐指数
1
解决办法
3280
查看次数

以编程方式安装OSX不会启动用户指定的应用程序

我使用磁盘仲裁框架来管理各种驱动器和磁盘.

我已经注册了回调函数DADiskAppearedCallbackDADiskDisappearCallback.

对于usb驱动器,所有设备似乎都运行良好,但对于CD/DVD,我遇到了问题.

CD/DVD加载后,我已DADiskUnmount()使用磁盘的BSDName 卸载()驱动器.然后在对磁盘进行一些验证后,我DADiskMount()再次使用BSDName mount()磁盘.

当我再次安装CD/DVD时,默认应用程序设置在

系统偏好 - >硬件 - > Cds和DVS

没有上手.

例如.对于视频DVD - 打开DVD播放器.DVD播放器应该在这里推出.

请提供任何克服此问题的建议.

谢谢

我仍然在寻找解决方案,"SystemUIServer"管理应该在插入CD/DVD时安装的应用程序.我可以在CD/DVD装载上触发该操作吗?或者这是在CD/DVD装载上手动启动用户提供的应用程序的正确方法吗?

macos cocoa diskarbitration cddvd

6
推荐指数
1
解决办法
278
查看次数

在Mac OS X中仅使用给定文件路径以编程方式安装磁盘/卷

我有一个文件路径列表.这些路径可能会导致未安装的卷上的文件.在尝试访问文件之前,如何以编程方式告诉操作系统安装卷?

我知道这可能是某种方式,因为iTunes似乎做到了.例如,如果我开始播放位于iTunes中未安装的网络附加卷上的歌曲,则会自动为我安装音量.

如果我尝试以指定路径以编程方式打开文件,操作系统是否应该自动为我安装卷?或者我是否需要使用磁盘仲裁框架或类似方法手动安装驱动器?

如果我需要使用磁盘仲裁框架,具体需要做什么?

c++ macos mount diskarbitration

5
推荐指数
1
解决办法
2185
查看次数

以编程方式在mac os x中安装磁盘映像(DMG)

问:如何以编程方式安装苹果磁盘映像?

我的做法是类似于使用磁盘仲裁安装如图所示这里.我不想使用任何命令行工具.

卸载和弹出工作完美,但挂载需要BSD名称(通常用于磁盘块文件).我也看过DiskArbitrator的源代码,这个工具hdiutil在后台用于为DMG创建块文件.

是否有任何其他方法/框架为我的磁盘映像创建块文件,以便我可以使用它来挂载DMG?

我已经看到了这个

macos mount objective-c dmg diskarbitration

5
推荐指数
0
解决办法
1613
查看次数

检测卸载可移动存储的时间

我正在开发一个应用程序,它可以检测卸载存储器或从USB强行拔出可移动存储器时发生的事件.我怎样才能收到这些活动?

我已经看到NSWorkspace了第一种顺利卸载设备的可能性,但是这个类有-unmountAndEjectDeviceAtPath:卸载设备的方法.有人能指出一些检测未安装卷的示例代码吗?

cocoa volume removable-drive diskarbitration nsworkspace

4
推荐指数
2
解决办法
1933
查看次数

以编程方式检索OS X磁盘分区UUID

我有一个分区的路径.如何在不使用终端命令的情况下以编程方式检索该分区的UUID?一个例子会更有帮助.

macos uuid volume diskarbitration

4
推荐指数
2
解决办法
6787
查看次数

使用 DiskArbitration 在 OSX 中卸载磁盘

我正在尝试在 OSX 中卸载磁盘。代码工作正常,但是只有在出现错误时,磁盘卸载成功时才会调用回调。我阅读了 DiskArbitrationProgGuide 并按照步骤操作,但尚未取得任何进展。有人可以帮我吗?

@interface DriverUtilitiesController()

void unmount_done(DADiskRef disk,
                  DADissenterRef dissenter,
                  void *context);

@end

+ (void)umnountDrivePath:(NSString *)voulumePath
{
    DASessionRef session = DASessionCreate(kCFAllocatorDefault);

    CFURLRef path = CFURLCreateWithString(NULL, (__bridge CFStringRef)voulumePath, NULL);

    DADiskRef disk = DADiskCreateFromVolumePath(kCFAllocatorDefault, session, path);

    DADiskUnmount(disk, kDADiskUnmountOptionDefault, unmount_done, NULL);

    CFRelease(disk);
}

#pragma mark - Unmount Callback

void unmount_done(DADiskRef disk,
                  DADissenterRef dissenter,
                  void *context)
{

    NSLog(@"Inside unmount_done");

    if (dissenter)
    {
        // Unmount failed. //
        NSLog(@"Unmount failed.");

    } else {
        NSLog(@"Unmounted Volume");
    }
}
Run Code Online (Sandbox Code Playgroud)

正在更新。感谢 Ken Thomases,代码现在可以运行了

- (id)init
{ …
Run Code Online (Sandbox Code Playgroud)

macos objective-c diskarbitration

4
推荐指数
1
解决办法
1461
查看次数

区分HFS +和HFS标准卷

IOKit和DiskArbitration框架可以告诉我很多关于mac上挂载卷的事情,但它们似乎无法区分HFS +和HFS标准卷.

由于IOKit/DA键Content,DAVolumeKind并且DAMediaContent总是Apple_HFS和两个HFS标准和HFS +卷HFS.

diskutil和DiskUtility.app 可以区分,但我似乎没有Apple开源.

ps statfs(2)没有区分

macos iokit diskarbitration

1
推荐指数
1
解决办法
1830
查看次数