zoukankan      html  css  js  c++  java
  • 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文本。

  • 相关阅读:
    深入理解 RPC
    Redis 深度历险
    tomcat性能优化
    高性能IO之Reactor模式
    常用sql语句整理[SQL Server]
    SQLite遇到的关于x64、x86问题
    C#和Javascript的try…catch…finally的一点差别
    C#写Windows服务
    Windows_7_休眠按钮没有了_如何找回?
    XmlReader读取XML
  • 原文地址:https://www.cnblogs.com/strive-sun/p/13410206.html
Copyright © 2011-2022 走看看