Что означает код NTSTATUS 0xC0000722 (STATUS_LPC_HANDLE_COUNT_EXCEEDED)?

 
Предыдущий Следующий
STATUS_CALLBACK_RETURNED_THREAD_AFFINITY STATUS_EXECUTABLE_MEMORY_WRITE

STATUS_LPC_HANDLE_COUNT_EXCEEDED

Собственное сообщение содержит слишком много передаваемых дескрипторов

LPC и ALPC могут передавать дескрипторы объектов ядра через атрибуты сообщения, но формат собственного сообщения и политика порта задают конечный предел их числа. Превышение этого предела является ошибкой построения протокола; увеличение буфера полезной нагрузки не увеличивает допустимый массив дескрипторов.

Большие пакеты дескрипторов следует перепроектировать. Передавайте только объекты, необходимые одной операции, разбивайте обмен на последовательность сообщений или представляйте коллекцию одним общим разделом либо объектом серверного посредника. Для каждой частичной передачи также нужны явные правила отката и закрытия.

Что проверить

  • Подсчитывайте дескрипторы после удаления недопустимых и повторяющихся записей, а не до расширения на уровне приложения.
  • Для каждого дескриптора фиксируйте требуемый доступ, тип объекта и правила передачи владения.
  • Разбивайте пакеты с идентификатором транзакции или последовательности, чтобы получатель мог обнаружить неполную доставку.
  • Закрывайте дублированные дескрипторы на всех путях ошибки, включая отклонение до принятия сообщения другой стороной.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.