Пожалуйста, обратите внимание, что пользователь заблокирован
Всем привет. Есть вопрос по поводу пути CurrentDirectory.
Я так понимаю он лежит в peb->ProcessParameters->CurrentDirectoryPath.
Как его правильно подменить? Я хочу избежать вызова SetCurrentDirectoryW.
Есть такой набросок
структура CurrentDirectoryPath меняется вроде бы корректно. По крайней мере ProcessHacker отображает корректную директорию для процесса.
Но относительные пути не работают. Скажем, хочу прочитать файл в этой директории и его не может найти. Отсюда следует то, что это не единственное место, где должен меняться этот путь.
Может кто-то разбирался с анализом RtlSetCurrentDirectory_U и знает чего не хватает?
Я так понимаю он лежит в peb->ProcessParameters->CurrentDirectoryPath.
Как его правильно подменить? Я хочу избежать вызова SetCurrentDirectoryW.
Есть такой набросок
C:
PPEB ppeb = get_peb();
int len = sizeof(WCHAR) * lstrlenW(path);
WCHAR slash[2] = { L'\\' , 0};
BOOL append_slash = *(path + lstrlenW(path) - 1) != L'\\'; // путь передали без слэша в конце
if (ppeb->ProcessParameters->CurrentDirectoryPath.MaximumLength > len + 1) {
lstrcpyW(ppeb->ProcessParameters->CurrentDirectoryPath.Buffer, path);
ppeb->ProcessParameters->CurrentDirectoryPath.Length = len;
if (append_slash) {
ppeb->ProcessParameters->CurrentDirectoryPath.Length += 1 * sizeof(WCHAR);
lstrcatW(ppeb->ProcessParameters->CurrentDirectoryPath.Buffer, slash);
}
}
структура CurrentDirectoryPath меняется вроде бы корректно. По крайней мере ProcessHacker отображает корректную директорию для процесса.
Но относительные пути не работают. Скажем, хочу прочитать файл в этой директории и его не может найти. Отсюда следует то, что это не единственное место, где должен меняться этот путь.
Может кто-то разбирался с анализом RtlSetCurrentDirectory_U и знает чего не хватает?