«Невозможно открыть файл» из-за проблем с temp-файлами

Issues related to VMProtect
Post Reply
00p$
Posts: 27
Joined: Thu May 09, 2019 8:20 am

«Невозможно открыть файл» из-за проблем с temp-файлами

Post by 00p$ »

Приветствую.
Использую консольную VMP 3.8.7.2001 (проблема была и с 3.8.5/3.8.6, другие не проверял) на Windows Server 2022.
Запускаю сразу несколько (4-7) процессов одновременно для обработки нескольких файлов.
Иногда возникали ошибки в вмп о невозможности открытия какого-то моего файла: [[VMProtect_Con.exe]] "[Ошибка] Невозможно открыть файл \"path\\to\\file.dll\""
Проблема появлялась случайно и не уходила сама по себе. Иногда помогал перезапуск родительской программы-менеджера, чаще - только перезапуск всего сервера.

Как оказалось, проблема появляется, если удалить папку «%LocalAppData%\Temp\<номер_используемый_в_вмп>», где появляются файлы vmpXXX.tmp при работе процессов. Вмп почему-то пересоздает эту папку только после перезагрузки сервера.
На сервере мало пространства на диске, оно часто забито на 90+%, поэтому включена авто-очистка диска, и файлы в temp регулярно чистятся. С этим и связываю случайное проявление проблемы ни с того, ни с сего.
Вопрос: можно ли как-то улучшить ситуацию с использованием временных файлов? Проверять наличие нужной папки, и если ее нет - создавать при каждом запуске процесса вмп? Да и улучшить репорт ошибок тоже не помешало бы, а то сейчас просто пишет, что не может открыть какой-то мой файл, хотя это неправда.

Прикрепляю лог ProcessMonitor одного из процессов, обратите внимание на ошибку NAME_NOT_FOUND при доступе к "C:\Users\USERNAME\AppData\Local\Temp\1":

Code: Select all

<event>
<ProcessIndex>144</ProcessIndex>
<Time_of_Day>8:34:11,5278705</Time_of_Day>
<Process_Name>VMProtect_Con.exe</Process_Name>
<PID>336</PID>
<Operation>CreateFile</Operation>
<Path>C:\Users\USERNAME\AppData\Local\Temp\1</Path>
<Result>NAME NOT FOUND</Result>
<Detail>Desired Access: Read Attributes, Disposition: Open, Options: Open Reparse Point, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a</Detail>
</event>
Attachments
procmon-vmpfail-log.zip
(1.51 KiB) Downloaded 68 times
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: «Невозможно открыть файл» из-за проблем с temp-файлами

Post by Admin »

Для создания темпового файла используется следующий код:

Code: Select all

		wchar_t lpTempPathBuffer[MAX_PATH], szTempFileName[MAX_PATH];
		DWORD dwRetVal = GetTempPathW(MAX_PATH, lpTempPathBuffer);
		if (dwRetVal <= MAX_PATH && (dwRetVal != 0)) {
			UINT uRetVal = GetTempFileNameW(lpTempPathBuffer, L"vmp", 0, szTempFileName);
			if (uRetVal > 0)
				ret  = os::ToUTF8(std::wstring(szTempFileName));
		}
Результат выглядит следующим образом:
"C:\Users\USERNAME\AppData\Local\Temp\vmp6AE6.tmp"

Никаких дополнительных подкаталогов внутри Temp не создается.
00p$
Posts: 27
Joined: Thu May 09, 2019 8:20 am

Re: «Невозможно открыть файл» из-за проблем с temp-файлами

Post by 00p$ »

Разобрался. У почти всех процессов в переменных окружения неправильные %TMP%/%TEMP%, ведут на "\Temp\XYZ\" вместо "\Temp\". А GetTempPath как раз получает значение отсюда. Так что к вмп действительно не относится, можно закрывать =)

P.S. Если кому интересно, то вот статья про данный феномен: https://rakhesh.com/windows/temp-enviro ... -after-it/
Post Reply