COMException:传递给系统调用的数据区域太小

时间:2008-11-03 15:08:50

标签: .net workflow-foundation com-interop

在创建Windows Workflow Foundation Runtime实例时,偶尔会出现此帖子标题中定义的消息以及HResult 0x8007007A。

错误文本非常自我解释,并且在Workflow Foundation程序集上使用Reflector我已将问题缩小到ADVAPI32.DLL中的以下调用之一。

SetKernelObjectSecurity RevertToSelf时 OpenProcessToken GetKernelObjectSecurity

我已经删除了RevertToSelf(),因为它不需要输入参数,所以不能传入太小的数据结构。

GetKernelObjectSecurity将结构作为输入,这可能是错误的,但这个错误是暂时的,没有明显的再现步骤。

认为感觉它与应用程序中某处的内存管理有关,但无法找到HResult意味着什么的良好定义。任何人都可以指出我对这个HResult的良好定义的方向吗?

1 个答案:

答案 0 :(得分:1)

我可以提供一些推测。

正如您所说,错误消息听起来很清楚。

OpenProcessToken似乎不太可能作为候选者,因为你永远不会直接传递内存区域的 size

GetKernelObjectSecurity或SetKernelObjectSecurity似乎是不错的候选者。我认为你不是直接调用它们,所以你不知道用什么逻辑将一个内存区域传递给那些函数。有可能是例如在您正在使用的某个库中有一个固定大小的缓冲区用于安全描述符,并且一旦缓冲区耗尽,它将获取缓冲区的剩余大小(例如零)并将其传递给GetKernelObjectSecurity吗?

(一般来说,我希望它更可能来自像这样的WF运行时实现错误,而不是例如操作系统错误。)