| Предыдущий | Следующий |
| ERROR_INVALID_LOGON_TYPE | ERROR_RXACT_INVALID_STATE |
ERROR_CANNOT_IMPERSONATE
Сервер канала ещё не прочитал сообщение клиента, чей контекст безопасности требуется олицетворить
ImpersonateNamedPipeClient переводит серверный поток в контекст безопасности клиента, связанного с последним прочитанным из канала сообщением. Поэтому API требует, чтобы сервер сначала прочитал данные клиента. Ошибка указывает на нарушение порядка в протоколе именованного канала, а не просто на отсутствие SeImpersonatePrivilege.
Отслеживайте подключение, чтение, олицетворение, обработку запроса и RevertToSelf в одном серверном потоке. При перекрывающемся вводе-выводе убедитесь, что чтение действительно завершилось до вызова олицетворения. Всегда проверяйте возвращаемое значение: Microsoft предупреждает, что при неудачном олицетворении поток остаётся в прежнем контексте процесса, который может быть привилегированнее клиента. Не продолжайте обработку клиентского запроса после отказа. Если проблема в уровне олицетворения или привилегии, фиксируйте её отдельно после исправления порядка чтения сообщения.
Что проверить
- Убедитесь, что перед олицетворением сообщение клиента успешно прочитано.
- Для перекрывающихся каналов ждите завершения чтения, а не только его отправки.
- Прерывайте обработку клиента при отказе олицетворения и всегда завершайте успешное олицетворение вызовом RevertToSelf.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
