| Предыдущий | Следующий |
| ERROR_INVALID_PORT_ATTRIBUTES | ERROR_INVALID_QUOTA_LOWER |
ERROR_PORT_MESSAGE_TOO_LONG
Сообщение LPC или ALPC слишком велико
ERROR_PORT_MESSAGE_TOO_LONG означает, что сообщение, переданное в собственную операцию запроса порта или запроса-ответа, превышает максимально допустимый размер. Ограничение может учитывать заголовки и выравнивание, а не только байты полезной нагрузки приложения.
Распространённые причины
- Сериализация неограниченного объекта непосредственно в одно IPC-сообщение.
- Игнорирование накладных расходов заголовка протокола и выравнивания.
- Поле длины задано в символах, тогда как транспорт ожидает байты.
- Клиент и сервер используют разные версии структуры.
Диагностика
Журналируйте полный размер сообщения, размер полезной нагрузки, версию заголовка и согласованный максимум. Проверяйте все вложенные длины и защищайте операции сложения от переполнения. Воспроизводите проблему на той же архитектуре и сборке ОС.
Решение
Разделяйте данные на ограниченные фрагменты, помещайте объёмные данные в общую память или секцию с файловой поддержкой, а через порт передавайте только дескрипторы. До выделения памяти определите явные ограничения протокола.
Рекомендации по безопасности
Отклоняйте слишком большие входящие сообщения как можно раньше. Не выделяйте память только по недоверенному заявленному значению длины и не обрезайте структурированные сообщения, поскольку обрезка может изменить их смысл.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
