+ if (CFMutableDictionaryRef dict = IOServiceMatching("IOPlatformExpertDevice")) {
+ if (io_service_t service = IOServiceGetMatchingService(kIOMasterPortDefault, dict)) {
+ if (CFTypeRef serial = IORegistryEntryCreateCFProperty(service, CFSTR(kIOPlatformSerialNumberKey), kCFAllocatorDefault, 0)) {
+ SerialNumber_ = [[NSString alloc] initWithString:(NSString *)serial];
+ CFRelease(serial);
+ }
+
+ if (CFTypeRef ecid = IORegistryEntrySearchCFProperty(service, kIODeviceTreePlane, CFSTR("unique-chip-id"), kCFAllocatorDefault, kIORegistryIterateRecursively)) {
+ NSData *data((NSData *) ecid);
+ size_t length([data length]);
+ uint8_t bytes[length];
+ [data getBytes:bytes];
+ char string[length * 2 + 1];
+ for (size_t i(0); i != length; ++i)
+ sprintf(string + i * 2, "%.2X", bytes[length - i - 1]);
+ ChipID_ = [[NSString alloc] initWithUTF8String:string];
+ CFRelease(ecid);
+ }
+
+ IOObjectRelease(service);
+ }
+ }
+