1. 程式人生 > 實用技巧 >win32 - 以程式設計方式訪問遠端計算機上的檔案

win32 - 以程式設計方式訪問遠端計算機上的檔案

第一步,在一臺計算機上將某個驅動器或者某個資料夾設為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文字。