尝试在 iMobileDevice 中查找设备的 STORAGE SIZE 时,lockdownd_get_value() 的 KEY 是什么?

What's the KEY for lockdownd_get_value(), when trying to find STORAGE SIZE of device in iMobileDevice?

我正在尝试使用 iMobileDevice 从我的 iPhone 中获取尽可能多的信息,但我无法在 libimobiledevice [=21] 中找到要搜索的支持键列表=] 或其他地方。我知道像 here 这样的地方存在并且很有帮助,但在使用 lockdownd_get_value(LockdownClientHandle ld, string domain, string KEY, out PListHandle value) 时并不完全支持它们。这就是我的使用方式。

ReadOnlyCollection<string> udids;
int count = 0;

var idevice = LibiMobileDevice.Instance.iDevice;
var lockdown = LibiMobileDevice.Instance.Lockdown;

var ret = idevice.idevice_get_device_list(out udids, ref count);

if (ret == iDeviceError.NoDevice)
{
    // Not actually an error in our case
    return;
}

ret.ThrowOnError();

// Get the device name
foreach (var udid in udids)
{
    string t1;

    PlistHandle tested1;

    //Find serial number in plist
    lockdown.lockdownd_get_value(lockdownHandle, null, "SerialNumber", out 
    tested1);

    //Get string values from plist
    tested1.Api.Plist.plist_get_string_val(tested1, out t1);

    Console.WriteLine(t1);
}

另外,是否有支持所有按键的参考列表?

您可以使用 ideviceinfo 命令行实用程序探索锁定所公开的密钥。 ideviceinfo --help 列出已知域,其中包括 com.apple.disk_usage 并且听起来很有趣。通常,指定域但省略键会得到该域中所有键及其值的列表:

让我们看看是什么让我们:

> ideviceinfo -q com.apple.disk_usage

AmountDataAvailable: 24795447296
AmountDataReserved: 209715200
AmountRestoreAvailable: 30147182592
CalculateDiskUsage: OkilyDokily
NANDInfo: AQAA...
TotalDataAvailable: 25086046208
TotalDataCapacity: 26836963328
TotalDiskCapacity: 32000000000
TotalSystemAvailable: 0
TotalSystemCapacity: 5142020096

在您的情况下,com.apple.disk_usage 域中的 TotalDiskCapacity 键似乎就是您要查找的内容。您可以使用 lockdown.lockdown_get_value(lockdownHandle, "com.apple.disk_usage", "TotalDiskCapacity", out tests1) 获取 属性 列表句柄,其中应包含请求的值。

我还发现您可以通过 afc 访问 disk_usage 信息:

LockdownServiceDescriptorHandle ldsHandle;
AfcClientHandle afcClient;

idevice.idevice_new(out deviceHandle, udid).ThrowOnError();

lockdown.lockdownd_client_new_with_handshake(deviceHandle, out lockdownHandle, 
   "Quamotion").ThrowOnError();

lockdown.lockdownd_start_service(lockdownHandle, "com.apple.afc", out ldsHandle);

ldsHandle.Api.Afc.afc_client_new(deviceHandle, ldsHandle, out afcClient);

ldsHandle.Api.Afc.afc_get_device_info_key(afcClient, "FSTotalBytes", out totalSize);