2015-02-23 117 views
3

我想设计一个函数来检查文件的某些文本。它需要一个文件路径,并且此路径可以是UNC路径,例如\ path \ to \ file \ share。为CreateFile提示凭证

它也将使用当前用户凭证。我想要做的是有能力提示用户输入新的凭证;在伪

hCreds = NULL; 
if (!fAutoLogon) { hCreds = PromptForCredentials(); } 

hFile = CreateFile(pszFile, GENERIC_READ, FILE_SHARE_READ , 
        NULL, OPEN_EXISTING, 
        FILE_ATTRIBUTE_NORMAL, NULL , hCreds); 

回答

1

您可以连接到使用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()与服务器断开连接。

这种方法相对于Remy而言的一个潜在优势是,即使您的服务器上的凭据与本地计算机上的凭据不同,它也能正常工作。