我的开发人员!我非常希望至少你们中的一些人不会被这个问题包含的文本数量所吓倒(我只是尽力做到人道可能的描述).:)
对于那些认为我已经问过这个问题来编写恶意软件或其他东西的人.我想编写一个应用程序,允许用户选择在操作系统完成启动后启动的应用程序.整个想法是允许用户在操作系统完成启动之前通过按下之前绑定到应用程序的热键来选择这些应用程序.例如,用户打开他的Mac,键入SMTV并消失,当系统完成启动我的应用程序恢复输入并启动Safari,Mail,Tweetie和Vuze.我是新手,但我尽力帮助别人回答他们的问题 - 我想我可以期待同样的回报.检查我的个人资料和我的活动,然后开始尖叫恶意软件.
这个问题是问题的后续问题是否有可能恢复在Mac OS启动时完成的键盘输入?.
在Pekka的建议的指导下,我偶然发现了Christian Starkjohann 的一篇文章拦截键盘事件,描述了他和目标开发团队如何成功地将iBook的CDROM弹出键从F12重新分配到Shift + F12.主要部分是他们实际上拦截了键盘事件,这正是我所需要的.最后,Christian完全为像我这样的开发人员写了这篇文章,将iJect的想法用作类似功能的原型.
首先,我决定创建一个简单的内核扩展来简单地记录用户的键盘输入/var/log/kernel.log.我在XCode中启动了一个新的通用内核扩展项目,遵循Hello内核的指示:在Mac开发中心的内核扩展概念中找到的使用Xcode创建内核扩展教程创建一个Hello World项目,然后用来自的代码填充它iJect消息来源.结果如下:
TestKEXT.c
#include <sys/systm.h>
#include <mach/mach_types.h>
extern int HidHackLoad(void);
extern int HidHackUnload(void);
kern_return_t MacOSSCKEXT_start (kmod_info_t * ki, void * d) {
return HidHackLoad() == 0 ? KERN_SUCCESS : KERN_FAILURE;
}
kern_return_t MacOSSCKEXT_stop (kmod_info_t * ki, void * d) {
return HidHackUnload() == 0 ? KERN_SUCCESS : KERN_FAILURE;
} …Run Code Online (Sandbox Code Playgroud) 我正在开发一个应用程序,该应用程序执行自定义音频处理并将处理过的音频发送到USB耳机。我的要求是,在“系统偏好设置”的“音频输出设备”列表中,USB耳机对用户不可见。使用Apple的“ SampleUSBAudioOverrideDriver”无代码kext示例代码,我可以更改接口名称,但我确实需要隐藏它。可以将AppleUSBAudioDevice子类化吗?
我有一个7.1声道音频输出设备和一个自定义kext来驱动它.我的自定义应用程序需要向设备发送7.1后置声道音频数据,但设备只接收2声道音频数据.我在"音频MIDI设置"应用程序中选中了"配置扬声器"选项,并将其设置为立体声.当我将它设置为"7.1后环绕"时一切正常.在我的最终产品中,我不希望用户必须手动完成所有这些操作.所以,问题是 - 是否有任何Core Audio API或任何其他方式以编程方式执行此操作?

我正在更新我的一个设备的驱动程序,并希望kextunload旧驱动程序和kextload新的驱动程序,因此不再需要重新启动.
安装后我尝试:
sudo kextunload /System/Library/Extensions/Driver.kext
Run Code Online (Sandbox Code Playgroud)
发生的错误如下所示:
(内核)无法卸载kext com.driver.Driver; 类有实例:(内核)Kext com.driver.Driver类com_driver_Driver_USBAudioDevice有1个实例.无法卸载com.driver.Driver - (libkern/kext)kext正在使用或保留(无法卸载).
ioreg中不存在该设备.如何找出阻止我卸载驱动程序的实例?
我已经基于Wagerlabs代码(使用驱动程序用户客户机应用程序模型)为热插拔SCSI设备编写了设备驱动程序kext,并且一切正常。唯一剩下的担心是,驱动程序似乎没有被一致地释放,尤其是在应用程序崩溃的情况下。例如,当我尝试卸载kext时,即使在断开设备连接和关闭应用程序的情况下,仍然存在驱动程序和用户客户端的突出实例(驱动程序通常超过用户客户端)。
我已经登录了诸如之类的驱动程序功能free(),当我关闭计算机时,可以看到它们正在执行,因此这些实例显然仍可以终止。确保驱动程序实例终止并释放的“正确”方法是什么,即使主机应用程序崩溃,终止不当或通常不计划的事情?
我已经看到一些应用程序能够在 MacOS 上的 Finder 中将自己表示为外部磁盘。通常,这些是云存储应用程序,例如PCloud Drive和WD Discovery。我想知道他们是如何做到这一点的。
我意识到云存储可能只是实现了一些远程文件系统协议,例如 Samba 或 AFP。但是我仍然不太明白应用程序如何将文件系统直接挂载到 Finder 中。另外,如果不依赖网络存储,是否有更有效的方法来挂载虚拟文件系统?
我正在使用Xcode在mac上开发KEXT,每次编译后我都会通过终端更改权限并加载KEXT,然后从控制台应用程序读取结果.开发中的一些错误给系统带来内核恐慌,我不得不重启我的mac,这太烦人了.我想知道是否有更好的方法来开发和调试KEXT?
我尝试以编程方式在 Mac OS 中添加带有驱动程序的虚拟 USB 设备。IOKit 文档说:传统上,虚拟设备的驱动程序在 IOResources 上匹配,因为虚拟设备不发布自己的 nub。此类驱动程序的另一个示例是 HelloIOKit KEXT(在“使用 Xcode 创建设备驱动程序”中描述),它匹配 IOResources,因为它不控制任何硬件。
但是我没有找到在系统中添加虚拟设备的方法。我怎样才能做到这一点?
我将 mac book pro 迁移到了 mac mini。现在我每次启动时都会出现内核恐慌。使用安全模式启动可以正常工作,我发现内核扩展com.eltima.eveusb.kext.controller导致了问题。它来自 Mac 版 USB Network Gate应用程序,不幸的是我安装了一次来测试它。
我已经在 中搜索了内核扩展/System/Library/Extensions,但找不到任何匹配的扩展。
我怎样才能删除这个扩展(如上所述,应用程序本身已经被卸载)。
下面我附上了内核恐慌报告的一些部分。
非常感谢你的帮助。
Kernel Extensions in backtrace:
com.apple.iokit.IOPCIFamily(2.8)[447B4896-16FF-3616-95A2-1C516B2A1498]@0xffffff7f8e2ba000->0xffffff7f8e2e2fff
com.eltima.eveusb.kext.controller(2.0)[1C357F99-D355-3B55-890B-96E70B8231B1]@0xffffff7f8fa57000->0xffffff7f8fa74fff
dependency: com.apple.iokit.IOUSBFamily(650.4.4)[972D3024-AF9C-3E09-A9EC-D9AB2A559B38]@0xffffff7f8e743000
dependency: com.apple.iokit.IOPCIFamily(2.8)[447B4896-16FF-3616-95A2-1C516B2A1498]@0xffffff7f8e2ba000
dependency: com.apple.iokit.IOUSBUserClient(650.4.4)[FC4B241E-C861-3821-B0D0-03DD648D8D9A]@0xffffff7f8e7c2000
...
System uptime in nanoseconds: 62692972204
last loaded kext at 62359499086: com.eltima.eveusb.kext.controller 2.0.0 (addr 0xffffff7f8fa57000, size 122880)
loaded kexts:
com.eltima.eveusb.kext.controller 2.0.0
com.eltima.eveusb.kext.arbiter 2.0.0
com.shapeservices.msm.driver.MSMFramebuffer 3.3.2
com.shapeservices.msm.driver.MSMVideoDevice 3.3.2
com.apple.driver.AudioAUUC 1.60
com.apple.driver.AppleHDAHardwareConfigDriver 2.5.3fc1
com.apple.driver.AppleMikeyHIDDriver 124
com.apple.driver.AGPM 100.14.11
com.apple.driver.ApplePlatformEnabler 2.0.9d1
com.apple.driver.X86PlatformShim 1.0.0
com.apple.driver.AppleHDA 2.5.3fc1
...
Run Code Online (Sandbox Code Playgroud) 自 Mac OS 11 Big Sur 发布以来,Apple 仅允许在恢复模式下安装 kext 驱动程序。它还禁止从 Apple Store 安装 kext 驱动程序。我猜这是 macFuse 的终结,至少对于虚拟/云文件系统而言。迁移路径是什么以及如何为 Mac OS 11+ 构建虚拟文件系统,尤其是文档管理和云存储,类似于 OneDrive、DropBox 等。
我也可以猜测类似的问题也可能出现在 Windows 上。我可以想象,微软将遵循苹果的路径,在未来的版本中禁止 Windows 上的文件系统驱动程序和过滤器用于这些目的。如果发生这种情况,任何有关未来迁移的提示将不胜感激。
filesystems macfuse virtualfilesystem virtual-drive kernel-extension
kernel-extension ×10
macos ×9
iokit ×3
c++ ×2
core-audio ×2
kernel ×2
debugging ×1
driver ×1
filesystems ×1
finder ×1
installer ×1
keyboard ×1
macfuse ×1
usb ×1
xcode ×1