1/* 2cc idtest.c -o /tmp/idtest -Wall -framework IOKit -framework CoreFoundation 3 */ 4 5#include <assert.h> 6#include <CoreFoundation/CoreFoundation.h> 7#include <IOKit/IOKitLib.h> 8#include <IOKit/IOKitKeys.h> 9 10int main(int argc, char **argv) 11{ 12 io_registry_entry_t service; 13 io_connect_t connect; 14 SInt32 id1, id2, id3; 15 kern_return_t status; 16 17 service = IORegistryEntryFromPath(kIOMasterPortDefault, 18 kIOServicePlane ":/IOResources/IODisplayWrangler"); 19 assert(service); 20 if (service) 21 { 22 status = IOServiceOpen(service, mach_task_self(), 0, &connect); 23 IOObjectRelease(service); 24 assert(kIOReturnSuccess == status); 25 26 } 27 28 enum { kAlloc, kFree }; 29enum { 30 kIOAccelSpecificID = 0x00000001 31}; 32 33 34 status = IOConnectMethodScalarIScalarO(connect, kAlloc, 2, 1, kNilOptions, 0, &id1); 35 assert(kIOReturnSuccess == status); 36 printf("ID: %x\n", id1); 37 status = IOConnectMethodScalarIScalarO(connect, kFree, 2, 0, kNilOptions, id1); 38 assert(kIOReturnSuccess == status); 39 status = IOConnectMethodScalarIScalarO(connect, kAlloc, 2, 1, kNilOptions, 0, &id1); 40 assert(kIOReturnSuccess == status); 41 printf("ID: %x\n", id1); 42 43 44 status = IOConnectMethodScalarIScalarO(connect, kAlloc, 2, 1, kIOAccelSpecificID, 53, &id2); 45 assert(kIOReturnSuccess == status); 46 printf("ID: %x\n", id2); 47 48 49 status = IOConnectMethodScalarIScalarO(connect, kFree, 2, 0, kNilOptions, id1); 50 assert(kIOReturnSuccess == status); 51 printf("free ID: %d\n", id1); 52 53 status = IOConnectMethodScalarIScalarO(connect, kFree, 2, 0, kNilOptions, id2); 54 assert(kIOReturnSuccess == status); 55 printf("free ID: %d\n", id2); 56 57 exit(0); 58} 59 60 61