У нас есть процесс Java, работающий как пользователь локальной системы в Windows, которому требуется доступ к файлу, который принадлежит другому пользователю в системе. Из того, что я понимаю, у пользователя локальной системы должны быть права выдавать себя за этого пользователя. Для этого мы передаем tid и pid программы, которая обращается к файлу, и получаем от него информацию пользователя (токен). Затем мы устанавливаем токен в текущем потоке. Примерно так:
DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenImpersonation,&hTokenDup);
SetThreadToken(NULL, hTokenDup);
Где hToken можно получить, открыв поток и обработав его идентификатором.
Проблема в том, что когда я пытаюсь получить доступ к файлу, доступ к которому имеет только пользователь, и никому другому я не могу его прочитать. Я получаю ошибку «Отказано в доступе». Таким образом, вопрос заключается в том, должен ли я иметь доступ к этому файлу через олицетворение, и если да, то правильно ли он выдавать себя за другого пользователя, которому предоставлен threadid и pid. Я думаю, я также видел бы различное поведение между Windows 7 и Windows XP.