Я столкнулся с проблемой, когда процесс завершился ненормально, и, следовательно, некоторые общие ресурсы (BaseNamedObjects) остались невысвобожденными процессом.
Функция CreateFileMapping
возвращает ERROR_ALREADY_EXISTS
, что указывает на то, что разделяемая память уже существует.
После получения ERROR_ALREADY_EXISTS
с помощью CreateFileMapping возвращается дескриптор. Итак, у меня есть следующие запросы, связанные с вышеуказанным сценарием:
- Можем ли мы выполнить очистку, используя этот возвращенный дескриптор?
- Можем ли мы использовать дескриптор, возвращаемый CreateFileMapping?
- как очистить такой объект общей памяти?
OBJ_PERMANENT
(для этого нужно использовать собственный API и иметь специальные привилегии - так что можете считать, что нет) - объект будет автоматически уничтожен, когда все дескрипторы для него закрыты (имя будет удалено) и ссылка освобождена (ссылка может быть из сопоставления разделов). не нужно делать специальную очистку. не все процессы, у которых есть этот дескриптор, завершены, если вы получилиERROR_ALREADY_EXISTS
- person RbMm   schedule 04.06.2018