Я нашел этот вопрос где-то в интернете, и теперь столкнулся с той же проблемой. С небольшими изменениями у меня уже есть модифицированный вопрос ниже.
Вопрос:
Я хочу получить доступ к файлу на удаленном компьютере (10.10.20.30), но я не мог понять, как войти в систему на этом компьютере в моей программе. Есть ли простой Win API, который принимает сетевой путь, учетные данные и возвращает дескриптор файла? я просто хочу получить доступ к \ 10.10.20.30 \ share folder \ test.txt.
Любое предложение будет полезно.
извините за то, что не очень ясно в смысле кодирования.
Деталь:
Я хотел получить доступ к файлу, который находится в общей папке, но разрешение мне не дано. я использую :: CreateFile чтобы получить гендель файла. Но в этом случае я получаю код ошибки 5 (ACCESS_DENIED). Мне нужно использовать учетные данные пользователя (мой клиент) (пароль пользователя) для доступа к файлу, который является общим. Мне просто нужен дескриптор файла. Скажите, если я не прав :: CreateFile не может быть использован в этом случае с использованием или изменением атрибутов безопасности, как говорится в MSDN.
CreateFile игнорирует элемент lpSecurityDescriptor при открытии существующего файла. Я также думал об использовании оболочки Windows, но не смог найти решение.
Деталь проблемы
* Ну, это требование на удаленной машине, у меня нет разрешения EveryOne. Позвольте мне объяснить на примере. Предположим, что существует сеть с определенным доменом, имеющая по крайней мере 3 компьютера, скажем, 5. Теперь есть имена C1 (клиент), C2 (пункт назначения), C3, C4, C5. Теперь в этом случае я создам файл (любого типа) на компьютере C2 и положу его в папку, скажем, MyFolder. Теперь сделайте это, а затем удалите EveryOne из него. После этого добавьте C5 в качестве пользователя для доступа к нему. Теперь вы можете написать код с реализацией just :: CreateFile и запустить его как на компьютере C1 (клиент), так и на C5 (у него есть разрешение). Вы увидите, что клиент (C1) получит ошибку 5, что означает ACCESS_DENIED, но C5 выполнит его и получит дескриптор файла …… Теперь я повторяю свой вопрос, мне нужно получить дескриптор файла любым способом через мой имя пользователя и пароль, и моя программа получит дескриптор от этой машины C1 .. *
Пожалуйста, посоветуйте мне
заранее спасибо
:: CreateFile Fails с отказом в доступе — это программирование оболочки или другое решение или подсказка
Если ваше приложение не запущено под учетной записью пользователя, которая имеет достаточные разрешения для доступа к файлу, вам придется временно выдать себя за пользователя, у которого есть доступ. использование LogonUser()
войти в нужную учетную запись пользователя и получить для нее токен, а затем передать этот токен ImpersonateLoggedOnUser()
выдать себя за этого пользователя, а затем позвонить CreateFile()
(который будет использовать олицетворенные права) и использовать файл по мере необходимости, затем закройте файл и вызовите RevertToSelf()
прекратить выдавать себя за.
когда CreateFile
не удается с ERROR_ACCESS_DENIED
это означает, что процесс, который вызывает CreateFile
выполняется под учетной записью пользователя, у которого недостаточно прав для выполнения этой операции.
Вы решаете проблему путем:
CreateFile
с другим токеном пользователя.Суть в том, что никакое количество кода не поможет вам здесь. Эта проблема связана с безопасностью рассматриваемого объекта файловой системы. Это проблема администрирования, а не проблема программирования.