win32 - 以程式設計方式訪問遠端計算機上的檔案
阿新 • • 發佈:2020-07-31
第一步,在一臺計算機上將某個驅動器或者某個資料夾設為sharing模式。這是我們需要訪問的共享資料夾。(不需要設定everyone許可權)
第二步,我們需要為兩臺在同一domain下的計算機上建立連線。
使用Net use指令,我們可以在程式碼中新增該指令,具體引數請見文件。 或者我們從cmd中快捷建立。
C:\WINDOWS\system32>net use \\ShareFolder /user:username password
需要說的是,ShareFolder是指共享資料夾或者驅動器的路徑, username 和 password是該計算機上的登入名和密碼。
當返回The command completed successfully.
第三步,使用LogonUser()
登入到所需的使用者帳戶,並獲得一個令牌,然後傳遞令牌ImpersonateLoggedOnUser()
來冒充該使用者,然後呼叫CreateFile()
(將使用模擬的權利),並使用該檔案根據需要,然後關閉該檔案並呼叫RevertToSelf()
到停止假冒。
各個api的使用參閱文件介紹,下面我會給出程式碼示例。
#include <Windows.h> #include <iostream> using namespace std; int main() { HANDLE hToken; BOOL dwRet = LogonUser(L"usrname", L"domain", L"password", LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &hToken); dwRet = ImpersonateLoggedOnUser(hToken); int err = GetLastError(); HANDLE h = CreateFile(L"shareFolder_path", // name of the file, suach as: \\\\xxx\\share\\test.txt GENERIC_READ | GENERIC_WRITE, // open for writing 0, // sharing mode, none in this case 0, // use default security descriptor CREATE_ALWAYS, // overwrite if exists FILE_ATTRIBUTE_NORMAL, 0); err = GetLastError(); if (h) { std::cout << "CreateFile() succeeded\n"; CloseHandle(h); } else { std::cerr << "CreateFile() failed:" << GetLastError() << "\n"; } RevertToSelf(); return 0; }
如果上面沒有任何錯誤,你會發現成功在遠端計算機上建立了一個txt文字。