首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DriverKit驱动程序如何通知应用程序?

DriverKit驱动程序如何通知应用程序?
EN

Stack Overflow用户
提问于 2020-08-24 10:18:20
回答 1查看 350关注 0票数 3

我知道如何向DriverKit发送数据并取回一些值,即应用程序调用IOConnectCallStructMethod(),驱动程序从应用程序中将OSData填充到structureOutput中。

在我的应用程序中,它使用IOConnectCallAsyncScalarMethod()和kext,使用sendAsyncResult64()让应用程序知道即将到来的事件。但是,DriverKit中不提供sendAsyncResult64()方法。

我看到AsyncCompletion看起来像是解决方案,但没有实现它的想法。有人知道怎么做吗?如果有任何建议,我将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2020-08-27 21:15:14

IOUserClient::AsyncCompletion确实是sendAsyncResult64()的替代品。

要成功调用它,需要保留在ExternalMethod调度函数中提供的IOUserClientMethodArgumentscompletion字段中提供的OSAction对象。然后,当您准备好发送异步结果时,调用

代码语言:javascript
复制
userclient->AsyncCompletion(saved_osaction, result, async_arguments, num_async_arguments);

当您不再需要OSAction对象时,不要忘记释放它。异步参数数组将被传递给用户空间应用程序中的处理函数,这与调用sendAsyncResult64()的kext相同。

请注意,您不能异步填充“小”structureOutput字段(4096字节或更少),因为这些字段必须在ExternalMethod处理程序中返回。只有当缓冲区大到可以通过structureOutputDescriptor传递时,才能保留该描述符,并在初始ExternalMethod返回后用数据填充它。然而,这与kext没有什么不同。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63553940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档