我在互联网上的某个地方发现这个问题现在面临同样的问题。几乎没有什么变化,我已经在下面修改了问题。
问题:
我想访问远程机器 (10.10.20.30) 上的文件,但我无法理解如何在我的程序中登录到该机器。是否有任何简单的 win api 可以获取网络路径、凭据并返回文件句柄?我只想访问\10.10.20.30\share folder\test.txt。 任何建议都会有所帮助。
抱歉,编码意义不是很清楚。 细节: 我想访问共享文件夹中共享的文件,但未授予我权限。我正在使用 ::CreateFile 来获取文件的 handel。但在这种情况下,我收到错误代码 5 (ACCESS_DENIED)。我需要使用用户(我的客户)凭据(用户名密码)来访问共享的文件。我只需要文件句柄。如果我错了请告诉我::CreateFile 在这种情况下不能通过使用或修改安全属性来使用,如 MSDN 所说。 CreateFile 在打开现有文件时会忽略 lpSecurityDescriptor 成员。我也考虑过使用 Window shell,但无法重新制定解决方案。
问题详情 *好吧,远程机器的要求是这样的,我没有 EveryOne 权限。让我通过一个例子来解释。假设某个域的网络至少有 3 台计算机,比如说 5。现在名称是 C1(客户端)、C2(目标)、C3、C4、C5。现在在这种情况下,我将在 C2 机器上创建一个文件(任何类型)并将其放入一个文件夹中,比如 MyFolder。现在让它共享,然后从中删除 EveryOne。之后将 C5 添加为用户以访问它。现在您可以看到仅使用::CreateFile 实现编写一些代码,并在机器 C1(客户端)和 C5(它具有权限)上运行它。您将看到客户端 (C1) 将收到错误 5,这意味着 ACCESS_DENIED 但 C5 将执行它并获取文件句柄......现在我再次重复我的问题我需要通过我的任何方式获取文件句柄用户名和密码,我的程序将从那台 C1 机器上获取句柄..*
请多多指教 提前致谢
::CreateFile 失败并拒绝访问是 shell 编程或其他解决方案或提示
最佳答案
如果您的应用程序未在具有足够权限访问该文件的用户帐户下运行,则您将不得不暂时模拟具有访问权限的用户。使用 LogonUser()
登录到所需的用户帐户并为其获取 token ,然后将该 token 传递给 ImpersonateLoggedOnUser()
模拟该用户,然后调用 CreateFile()
(这将使用模拟的权限)并根据需要使用该文件,然后关闭该文件并调用 RevertToSelf()
停止模仿。
关于c++ -::createFile winApi 失败并出现错误 5 (access_denied)。是 shell 编程还是其他解决方案或任何提示。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18974687/