Você pode usar a injeção de DLL para chamar SetCurrentDirectory
depois que o processo já foi iniciado. Isso exigiria a criação de um aplicativo injetor, além da DLL para injetar. Existem alguns tutoriais; provavelmente os dois melhores que eu encontrei são:
Você precisará de uma quantidade razoável de experiência em programação C ++ (e um ambiente de construção funcional) para superar isso.
No entanto, isso pressupõe que o serviço esteja olhando para o diretório atual. Outra possibilidade é que esteja usando %path%
. Você diz que "começa em system32
, tenta mais alguns locais e, eventualmente, seu próprio diretório", então isso me parece mais provável.
Compare os diretórios que você vê procmon
com o seu %path%
. Se eles são o mesmo, considerar a modificação ou a SYSTEM %path%
ou a %path%
do usuário que executa o serviço, de modo que o diretório que você quer que ele procure é o primeiro.
Porém, acredito que Fred esteja certo - é improvável que você veja qualquer benefício significativo no desempenho fazendo isso, a menos que isso ocorra com muita frequência. Operações simples de abertura de arquivos não são particularmente caras, especialmente se for um caminho local e o arquivo não existir realmente.