COMException: область данных, переданная системному вызову, слишком мала - PullRequest
1 голос
/ 03 ноября 2008

Сообщение, определенное в заголовке этого сообщения, вместе с HResult 0x8007007A иногда возникает при создании экземпляра среды выполнения Windows Workflow Foundation.

Текст ошибки довольно понятен, и с помощью Reflector над сборками Workflow Foundation я сузил проблему до одного из следующих вызовов в ADVAPI32.DLL.

SetKernelObjectSecurity RevertToSelf OpenProcessToken GetKernelObjectSecurity

Я исключил RevertToSelf (), потому что он не принимает входных параметров, поэтому не может передавать слишком малую структуру данных.

GetKernelObjectSecurity принимает в качестве входных данных структуру, и это может быть ошибочным, но эта ошибка временная, без видимых шагов воспроизведения.

Я думаю, чувствует, что это связано с управлением памятью где-то в приложении, но не может отследить точное определение значения HResult. Кто-нибудь может указать мне правильное определение этого HResult?

1 Ответ

1 голос
/ 03 ноября 2008

Я могу привести некоторые предположения.

Как вы говорите, сообщение об ошибке звучит довольно объяснительно.

OpenProcessToken кажется менее вероятным кандидатом, поскольку вы никогда напрямую не передадите ему размер области памяти.

GetKernelObjectSecurity или SetKernelObjectSecurity кажутся хорошими кандидатами. Я так понимаю, вы не вызываете их напрямую, поэтому вы не знаете, какая логика используется для передачи области памяти в эти функции. Возможно ли, например, что в одной из используемых вами библиотек есть буфер фиксированного размера для дескрипторов безопасности, и после того, как буфер исчерпан, он берет оставшийся размер буфера (например, ноль) и передает его в GetKernelObjectSecurity для вас?

(В общем, я ожидал бы, что это будет скорее из-за ошибки реализации во время выполнения WF, а не, например, из-за ошибки ОС.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...