Утечки памяти в расширении Explorer

У нас есть расширение проводника, позволяющее пользователю просматривать содержимое нашего внешнего устройства. Расширение работает нормально, но после ночи автоматического тестирования объем памяти процесса проводника увеличился. Я провел целый день, настраивая среду, в которой я могу использовать UMHD для создания снимков процесса проводника, а затем сравнивать их, чтобы увидеть, какие утечки. Он указывает на несколько разных функций, но, согласно документам, мы используем их правильно.

SHGetNameFromIDList

Эта функция вызывается для получения имени папки в GetDisplayNameOf реализация. После использования возвращенной строки она освобождается с помощью CoTaskMemFree функционировать как указано. Однако, согласно UMHD, этот процесс иногда приводит к утечке памяти. Но только иногда. Для одного теста я насчитал>5000 вызовов этой функции, но только ~1% из них просочились. Я также проверил, что ни один из вызовов не вернул код ошибки. Есть ли какие-то проблемы с потоками, о которых мне нужно знать??

Другое дело, я вижу (в трассировке стека), что функция ntdll!RtlpAllocateHeap используется для выделения памяти, а не CoTaskMemAlloc что вы могли ожидать.

SHCreateDataObject

Эта функция используется в GetIOObjectOf реализация, а также утечки. Кажется, объект, выделенный нами здесь, никогда не освобождается исследователем. Должны ли мы освободить это? В таком случае когда?

_vsnprintf_s

Эта функция также использует ntdll!RtlpAllocateHeap функция, чтобы выделить то, что утечка. Зачем??

Я на W10 Pro 1803.

Кроме того, при проверке сравнения между снимками, только небольшая часть утечек фактически включает наш код. Похоже, исследователь очень плохо вытекает из коробки.

Какие-либо предложения?

0 ответов

Другие вопросы по тегам