I am writing an application in MAC-OS using Objective-C , to read Boot-Sector of USB Drive and just to modify some bytes in it. I created object of NSWorkspace, but problem is that how can pass USB-Drive Path in openFile methods. Thanks
Did you mean NSWorkspace ? http://developer.apple.com/library/...es/NSWorkspace_Class/Reference/Reference.html What have you tried that hasn't worked ? Are you sure this is the class you want for what you want to do ? What exactly are you trying to achieve where you think you need to modify some bytes in the boot sector of a USB flash drive ? To modify a device at such a level under Unix, you usually require access to the character device special file which will present you the device in "raw" mode. Under OS X, I believe these files will be /dev/rdisk# where # is replaced by the disk number. NSWorkspace doesn't sound like what you need at all, except maybe to get a list of mounted media using the - (NSArray *)mountedRemovableMedia method. But frankly, this won't give you the DSF for the USB media. openFile doesn't do what you think it does, it basically acts as if you've double clicked a file. You probably need to look a bit deeper here, the I/O Kit API is probably more in-tune with what you want to do, along with the I/O Registry : http://developer.apple.com/library/.../AH_Family_Reference/AH_Family_Reference.html Once you have the info for the USB device, just go for standard ANSI C or POSIX stuff to manipulate the bits in the file (fopen()/open(), fseek(), fprintf()/fputc(), fclose()/close()).
Open USB Drive as File using NSWorkplace in Objective-C Hi, In Windows I am using "CreateFile" API to get handle USB DRIVE e.g( H:\\ etc.) and using "DeviceIoControl" to mount and Unmount USB Drive to update its Boot Sector. This same functionality I want to use in MAC-OS. I can open using ANSI-C functions but Mount/Unmount... how can be. Thanks
Did you read my second link ? That's a pretty hefty document I pointed to (the I/O kit reference). It should contain everything you need to know. But again I question why you feel the need to even modify the boot sector of a USB drive ?
Use DiskArbitration framework to get local drives. Then feed the kDADiskDescriptionMediaBSDNameKey of the disk to opendev(). You can also then use DADiskUnmount(), DADiskMount(), and DADiskEject().
I did a project like this a few years ago. I ended up reading the /dev/rdisk file. The link below will explain how the data is structured. Open the /dev/rdisk file for reading and march down the bytes. http://www.microsoft.com/whdc/system/platform/firmware/fatgen.mspx