ディスク アービトレーション フレームワークを使用して、Cocoa アプリケーションでボリュームをアンマウントしようとしています。
電話する前に:
DADiskUnmount(disk,
kDADiskUnmountOptionDefault,
unmountCallback,
self );
後で呼び出されるコールバック関数を登録します。
void unmountCallback(DADiskRef disk, DADissenterRef dissenter, void *context )
{
if (dissenter != NULL)
{
DAReturn ret = DADissenterGetStatus(dissenter);
switch (ret) {
case kDAReturnBusy:
printf("kDAReturnBusy\n");
break;
}
}
この関数では、反対者の戻り値を解釈しようとしましたが、行き詰まりました。タイプ DAReturn で、kDAReturnBusy のような値を持つべきだと思いますが、たとえば、iTunes がボリュームを使用していてアンマウントできない場合、「ret」の値は 0xc010 で、よくわかりません。
アンマウントに失敗した場合は、ボリュームをアンマウントできない理由を確認し、別のアプリケーションが使用している場合は、このアプリケーションを閉じるようユーザーに通知します。