Ява олицетворение - PullRequest
       11

Ява олицетворение

1 голос
/ 18 августа 2011

У нас есть процесс Java, работающий как пользователь локальной системы в Windows, которому требуется доступ к файлу, который принадлежит другому пользователю в системе. Из того, что я понимаю, у пользователя локальной системы должны быть права выдавать себя за этого пользователя. Для этого мы передаем tid и pid программы, которая обращается к файлу, и получаем от него информацию пользователя (токен). Затем мы устанавливаем токен в текущем потоке. Примерно так:

DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenImpersonation,&hTokenDup);
SetThreadToken(NULL, hTokenDup);

Где hToken можно получить, открыв поток и обработав его идентификатором. Проблема в том, что когда я пытаюсь получить доступ к файлу, доступ к которому имеет только пользователь, и никому другому я не могу его прочитать. Я получаю ошибку «Отказано в доступе». Таким образом, вопрос заключается в том, должен ли я иметь доступ к этому файлу через олицетворение, и если да, то правильно ли он выдавать себя за другого пользователя, которому предоставлен threadid и pid. Я думаю, я также видел бы различное поведение между Windows 7 и Windows XP.

1 Ответ

1 голос
/ 18 августа 2011

Для начала вы должны всегда проверять возвращаемые значения ваших вызовов Windows API. Только тогда вы будете уверены, что токен действительно был скопирован и назначен вашему процессу.

Олицетворение требует некоторых привилегий, которые я не совсем уверен, что вы имели бы, если вы простой пользователь. Я подозреваю, что функция DuplicateTokenEx не работает. Повторите попытку с правами администратора (используйте инструмент «Запуск от имени…») и сообщите нам, как это происходит.

...