| Предыдущий | Следующий |
| RPC_S_SEND_INCOMPLETE | RPC_S_INVALID_ASYNC_CALL |
RPC_S_INVALID_ASYNC_HANDLE
Асинхронный API RPC отклонил сам дескриптор состояния
RPC_S_INVALID_ASYNC_HANDLE означает, что переданное значение RPC_ASYNC_STATE не является допустимым дескриптором асинхронного вызова. Структура могла быть не инициализирована, её поля, принадлежащие среде выполнения, могли быть изменены, она могла выйти из области видимости либо уже перейти в конечное состояние жизненного цикла, несовместимое с API.
Инициализируйте каждое состояние с помощью RpcAsyncInitializeHandle, сохраняйте его адрес и память до окончательного завершения и никогда не изменяйте Size, Signature, Lockили StubInfo. Сопоставляйте операции отмены, запроса состояния и завершения по одному и тому же указателю состояния. Побайтовое копирование структуры создаёт второго недопустимого владельца, а не ещё один дескриптор вызова.
Что проверить
- Записывайте адрес состояния, результат инициализации и каждый API, использующий его.
- Сохраняйте структуру до тех пор, пока RpcAsyncCompleteCall не вернёт окончательный результат.
- Не перезаписывайте поля, принадлежащие среде выполнения, и не используйте стековую память повторно слишком рано.
Ссылки
- Microsoft: инициализация RPC_ASYNC_STATE
- Microsoft: структура RPC_ASYNC_STATE
- Microsoft: API, проверяющие асинхронный дескриптор
Нужно найти другой код? Найти другой код состояния или ошибки.