| Предыдущий | Следующий |
| ERROR_ACCESS_DENIED | ERROR_ARENA_TRASHED |
ERROR_INVALID_HANDLE
Дескриптор нельзя использовать с запрошенным API
ERROR_INVALID_HANDLE означает, что API получил значение дескриптора, которое в текущем процессе не относится к допустимому совместимому объекту ядра. Типичные причины: двойное закрытие, неинициализированные поля, ошибки владения и использование псевдодескриптора там, где требуется настоящий дескриптор.
Шаги отладки
- Отследите, где дескриптор был создан, передан, дублирован и закрыт.
- Инициализируйте переменные дескрипторов документированным недопустимым значением и сбрасывайте их после закрытия.
- Убедитесь, что тип дескриптора соответствует вызываемому API.
- Проверьте гонки, в которых один поток закрывает объект, пока другой продолжает его использовать.
Профилактика
Назначьте каждому дескриптору явного владельца и по возможности используйте в C++ обёртки, привязанные к области видимости. Повтор с тем же дескриптором бессмыслен; после исправления жизненного цикла создайте базовый объект заново.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.