我想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()从服务器断开连接。
这种方法比雷米的一个潜在的优点是,即使你的服务器上的证书不同于本地机器上的证书,它也能工作。