Ви можете використовувати ін'єкцію DLL для виклику SetCurrentDirectory
після того, як процес вже запущений. Для цього знадобиться створити інжекторну програму, а також DLL для введення. Існують деякі навчальні посібники; Мабуть, два найкращих, яких я знайшов, це:
Вам знадобиться гідна кількість програм програмування C ++ (і робоче середовище побудови), щоб пройти це.
Однак це передбачає, що служба переглядає поточний каталог. Інша можливість - це використання %path%
. Ви кажете, що це "починається з system32
, намагається ще кілька місць розташування, а згодом і власний каталог", тому мені це здається більш імовірним.
Порівняйте каталоги, які ви бачите у procmon
своїх %path%
. Якщо вони однакові, розглянути питання про зміну або SYSTEM %path%
або %path%
користувача запустити службу, так що каталог ви хочете, щоб шукати в першу чергу.
Я вважаю, що Фред має рацію - навряд чи ви побачите якусь істотну користь від виконання будь-якого з цих дій, якщо це не дуже часто. Прості операції з відкриттям файлів не є особливо дорогими, особливо якщо це локальний шлях і файл насправді не існує.