:: createFile winApi завершается с ошибкой 5 (access_denied). Это программирование оболочки или другое решение или любой намек.

Я нашел этот вопрос где-то в интернете, и теперь столкнулся с той же проблемой. С небольшими изменениями у меня уже есть модифицированный вопрос ниже.

Вопрос:

Я хочу получить доступ к файлу на удаленном компьютере (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 с отказом в доступе — это программирование оболочки или другое решение или подсказка

2

Решение

Если ваше приложение не запущено под учетной записью пользователя, которая имеет достаточные разрешения для доступа к файлу, вам придется временно выдать себя за пользователя, у которого есть доступ. использование LogonUser() войти в нужную учетную запись пользователя и получить для нее токен, а затем передать этот токен ImpersonateLoggedOnUser() выдать себя за этого пользователя, а затем позвонить CreateFile() (который будет использовать олицетворенные права) и использовать файл по мере необходимости, затем закройте файл и вызовите RevertToSelf() прекратить выдавать себя за.

2

Другие решения

когда CreateFile не удается с ERROR_ACCESS_DENIED это означает, что процесс, который вызывает CreateFile выполняется под учетной записью пользователя, у которого недостаточно прав для выполнения этой операции.

Вы решаете проблему путем:

  1. Предоставление этому пользователю достаточных прав.
  2. Запуск процесса под другой учетной записью пользователя с достаточными правами. Или используя олицетворение для вызова CreateFile с другим токеном пользователя.
  3. Защита рассматриваемого файла таким образом, чтобы исходный пользователь с ограниченными правами имел право выполнять операцию.

Суть в том, что никакое количество кода не поможет вам здесь. Эта проблема связана с безопасностью рассматриваемого объекта файловой системы. Это проблема администрирования, а не проблема программирования.

1

По вопросам рекламы [email protected]