提示CreateFile的凭据

我想devise一个函数来检查文件的一些文本。 它需要一个文件path,这个path可以是一个UNCpath,例如\ path \ to \ file \ share。

它也将使用当前的用户凭据。 我想要做的是有能力提示用户使用新的凭据; 在伪代码中

hCreds = NULL; if (!fAutoLogon) { hCreds = PromptForCredentials(); } hFile = CreateFile( pszFile, GENERIC_READ, FILE_SHARE_READ , NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL , hCreds); 

使用CredUIPromptForCredentials()CredUIPromptForWindowsCredentials()获取用户的凭据,然后使用LogonUser()ImpersonateLoggedOnUser()模拟该用户,然后用您的UNC路径调用CreateFile() ,最后在您之后调用RevertToSelf()以停止模拟关闭文件。

您可以使用WNetAddConnection3()连接到网络共享:

  NETRESOURCE nr; nr.dwType = RESOURCETYPE_ANY; nr.lpLocalName = NULL; nr.lpRemoteName = dcpath; nr.lpProvider = NULL; dw = WNetAddConnection3(NULL, &nr, NULL, NULL, CONNECT_INTERACTIVE | CONNECT_PROMPT); 

这将提示输入凭据。 我相信路径字符串必须指向一个目录而不是一个文件; 通常它只是\\server\share

如果连接成功,则可以使用CreateFile()打开文件。 MPR将自动使用现有的连接。

完成使用文件后,应使用WNetCancelConnection()从服务器断开连接。

这种方法比雷米的一个潜在的优点是,即使你的服务器上的证书不同于本地机器上的证书,它也能工作。