2015-02-23 2 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's является то, что он работает, даже если ваши учетные данные на сервере отличаются от учетных данных на локальной машине.

4

Использование CredUIPromptForCredentials() или CredUIPromptForWindowsCredentials() получить учетные данные пользователя, а затем использовать LogonUser() и ImpersonateLoggedOnUser() выдать себя за этот пользователь, а затем вызвать CreateFile() с путем UNC, а затем, наконец, позвонить RevertToSelf() остановить олицетворения после закрытия файла.

Смежные вопросы