win32

第一步,在一台计算机上将某个驱动器或者某个文件夹设为sharing模式。这是我们需要访问的共享文件夹。(不需要设置everyone权限)

第二步,我们需要为两台在同一domain下的计算机上建立连接。

使用 Net use 指令,我们可以在代码中添加该指令,具体参数请见文档。 或者我们从cmd中快捷创建。

C:WINDOWSsystem32>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
";
        CloseHandle(h);
    }
    else
    {
        std::cerr << "CreateFile() failed:" << GetLastError() << "
";
    }

    RevertToSelf();
    return 0;
}

  

如果上面没有任何错误,你会发现成功在远程计算机上创建了一个txt文本。

原文地址:https://www.cnblogs.com/strive-sun/p/13410206.html