| Предыдущий | Следующий |
| STATUS_TOO_MANY_THREADS | STATUS_TOKEN_ALREADY_IN_USE |
STATUS_THREAD_NOT_IN_PROCESS
Идентификаторы потока и процесса указывают на разное владение процессом
Каждый поток Windows принадлежит одному процессу. Этот статус означает, что операция, принимающая контекст процесса и потока, обнаружила: поток не входит в указанный процесс. Это точнее, чем недействительный идентификатор потока: поток может существовать, но пара «процесс—поток» неверна.
Зафиксируйте оба идентификатора и проверьте связь с помощью GetProcessIdOfThread или эквивалентной нативной информации до выполнения операции. Гонки перечисления также могут создавать устаревшие пары, если процесс завершился, а идентификаторы позднее были переиспользованы. Не исправляйте ошибку подстановкой текущего процесса, если операция действительно не предназначена для текущего потока.
Что проверить
- Записывайте идентификаторы целевого процесса и потока как одну связанную пару.
- Проверяйте принадлежность потока непосредственно перед операцией, изменяющей состояние.
- Исследуйте устаревшие кэши перечисления и переиспользование идентификаторов в отложенной асинхронной работе.
Ссылки
- Microsoft: OpenThread
- System Informer PHNT: нативный API процессов и потоков
- Открытые спецификации Microsoft: значения NTSTATUS
Нужно найти другой код? Найти другой код состояния или ошибки.
