| |||
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] |
|
Hi, I am in the process of porting our OS X driver and support
code to Mac OS X Intel. I have hit a minor snag in that the code I used for the retrieving
the driver version for the PPC version no longer works on the Intel version. This is the code fragment I used for the PPC version: #define kHWPlotLocation "/System/Library/Extensions/HWPlot.kext" void GetDriverVersion ( char *RefNum, char
*VersionString ) { CFURLRef
bundleURL = NULL; CFBundleRef myBundle
= NULL; CFString cs
= CFSTR ( kHWPlotLocation ); // Make a
CFURLRef from the CFString representation of the bundle's path. strcpy (
VersionString, "Unknown" ); bundleURL = CFURLCreateWithFileSystemPath
( kCFAllocatorDefault, cs, kCFURLPOSIXPathStyle, true ); CFRelease ( cs
); if (
(CFURLRef)NULL != bundleURL ) { myBundle
= CFBundleCreate( kCFAllocatorDefault, bundleURL ); if
( (CFBundleRef)NULL != myBundle ) { //
Try to get the version number from the bundle UInt32
ver = CFBundleGetVersionNumber ( bundle ); UInt32
mode = ( ( ver >> 13 ) & 0x07 ) - 1; ShortString
modes = kVersionStates; HWDBprintf
( 5, DBG_T, "ver = 0x%08lx, mode = 0x%08lx%s", ver, mode, NEWLINE ); _stprintf
( VersionString, _T("v%d.%d.%d"), ( ( ver >> 24 ) & 0xff ), (
( ver >> 20 ) & 0x0f ), ( ( ver >> 16 ) & 0x0f ) ); if
( kReleaseVersion != mode ) { _stprintf
( buff, _T("%c%d"), modes [ mode ], ver & 0xff ); _tcscat
( VersionString, buff ); } CFRelease(
myBundle ); } CFRelease(
bundleURL ); } } This works perfectly well on PPC but on Intel the
CFBundleGetVersionNumber() call always returns 0. I have tried KextManagerCreateURLForBundleIdentifier(), and also
CFBundleGetValueForInfoDictionaryKey() with various key entries but with no
success. I either get back a version number of ZERO, or the call
returns NULL. Here is the info.plist file for my Intel driver which,
except for the IOPCIPrimaryMatch field, is identical to the PPC driver info.plist: <?xml version="1.0"
encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple
Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleDevelopmentRegion</key> <string>English</string> <key>CFBundleExecutable</key> <string>HWPlot</string> <key>CFBundleGetInfoString</key> <string>HWPlot
v5.0.2, Copyright 1996 - 2007 HighWater Designs Ltd.</string> <key>CFBundleIconFile</key> <string>hwplot.icns</string> <key>CFBundleIdentifier</key> <string>uk.co.highwater.iokit.HWPlot</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>HWPlot</string> <key>CFBundlePackageType</key> <string>KEXT</string> <key>CFBundleShortVersionString</key> <string>HWPlot
v5.0.2</string> <key>CFBundleSignature</key> <string>HGWT</string> <key>CFBundleVersion</key> <string>5.0.2</string> <key>CFBundleVersionString</key> <string>5.0.2</string> <key>IOKitPersonalities</key> <dict> <key>HWPlot</key> <dict> <key>CFBundleIdentifier</key> <string>uk.co.highwater.iokit.HWPlot</string> <key>IOClass</key> <string>uk_co_highwater_iokit_HWPlot</string> <key>IOKitDebug</key> <integer>65535</integer> <key>IOMatchCategory</key> <string>HWPlot</string> <key>IOPCIPrimaryMatch</key> <string>0x099011e9&0x09f0ffff</string> <key>IOProviderClass</key> <string>IOPCIDevice</string> </dict> </dict> <key>OSBundleLibraries</key> <dict> <key>com.apple.iokit.IOFireWireFamily</key> <string>1.0</string> <key>com.apple.iokit.IOPCIFamily</key> <string>1.1</string> <key>com.apple.kernel.iokit</key> <string>1.1</string> <key>com.apple.kernel.libkern</key> <string>1.1</string> <key>com.apple.kernel.mach</key> <string>1.1</string> </dict> </dict> </plist> The driver's version information appears correctly in its
Finder Get Info window, and is also correctly listed in the kextstat output. While not vitally important, I would like to understand why
I can no longer retrieve this information from within my code. Any ideas? Peter Young
No virus found in this outgoing message. | |||||||||||||
_______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-drivers mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-drivers/email@hidden This email sent to email@hidden
| Home | Archives | FAQ | Terms/Conditions | Contact | RSS | Lists | About |
Visit the Apple Store online or at retail locations.
1-800-MY-APPLE
Contact Apple | Terms of Use | Privacy Policy
Copyright © 2007 Apple Inc. All rights reserved.