Puede usar la inyección DLL para llamar SetCurrentDirectory
después de que el proceso ya se haya iniciado. Esto requeriría que creara una aplicación de inyector, más la DLL para inyectar. Existen algunos tutoriales; Probablemente los dos mejores que he encontrado son:
Necesitará una buena cantidad de antecedentes de programación en C ++ (y un entorno de compilación de trabajo) para superar eso.
Sin embargo, esto supone que el servicio está mirando el directorio actual. Otra posibilidad es que esté usando %path%
. Usted dice que "comienza en system32
, intenta algunas ubicaciones más y, finalmente, su propio directorio", por lo que me parece más probable.
Compare los directorios que ve procmon
con su %path%
. Si son iguales, considere modificar el usuario SYSTEM %path%
o el %path%
usuario que ejecuta el servicio, de modo que el directorio que desea que busque sea el primero.
Sin embargo, creo que Fred tiene razón: es poco probable que veas un beneficio de rendimiento significativo al hacer esto, a menos que ocurra con mucha frecuencia. Las operaciones simples de apertura de archivos no son particularmente costosas, especialmente si se trata de una ruta local y el archivo en realidad no existe.