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文本。
win32 - 以编程方式访问远程计算机上的文件的更多相关文章
- 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如果服务器位于远程计算机上,请检查。。。
异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 无法向会话状态服务器发出会话状态请求.请确保 ASP.NET State Ser ...
- “远程调试监视器(MSVSMON.EXE)似乎没有在远程计算机上运行“的完美解决方案
今天调试程序时,Visual Studio突然报出了如下错误: Microsoft Visual Studio 远程调试监视器(MSVSMON.EXE)似乎没有在远程计算机上运行.这可能是因为防火墙阻 ...
- linux shell执行远程计算机上的命令或者脚本(ssh)
大数据平台下经常建立设计多个节点的集群需要统一部署,这就设计到守护进程或者部署脚本在不同节点执行,如果能在master机器上,统一执行脚本,一次性启动整个集群的服务,感觉很nice.因为,分享如下内容 ...
- 如何在远程计算机上运行PowerShell
问题: 不能在WORKGROUP里面的远程计算机里运行PowerShell指令,报错为用户名密码错 解决方法: 把两台机器上(远程计算机其和本机)都加入到trustedhosts 具体请参考 http ...
- 无法在web服务器上启动调试。Microsoft Visual Studio 远程调试监视器(MSVSMON.EXE)似乎没有在远程计算机上运行,VS2012调试错误
1.重启(无用) 2.关闭防火墙(无用) 3.开启文件与打印机共享(无用) 4.无远程调试权限,改为本地调试.或者是IIS中此项目没有启动.或者没有在IIS中新建此项目.
- 设置从本地copy文件到远程计算机上
1.运行中输入mstsc.exe调出远程连接桌面,点击选项 2.在“本地资源”选项卡点击“详细信息” 3.勾选“智能卡”下的“驱动器” 4.设置好后,远程计算机就可以复制,粘贴了
- [异常记录-12]Web Deploy部署:未能连接到远程计算机,请确保在远程计算机上安装了 Web Deploy 并启动了所需的进程("Web Management Service")
Web Deploy 安装 请参考:图文详解远程部署ASP.NET MVC 5项目 如此安装后还不行, 可以在卸载后重新安装 Web Deploy 时,不要选那个经典还是典型的安装选项,选自定义安装 ...
- 编程方式实现MySQL批量导入sql文件
有时候需要在本地导入一些stage环境的数据到本地mysql,面对1000+的sql文件(包含表结构和数据,放在同一个文件夹下),使用navicat一个一个导入sql文件显然有点太慢了,于是考虑使用s ...
- php访问远程服务器上的文件
test.php <?php $fp=fopen('http://www.baidu.com', 'r'); while (!feof($fp)) { $chunk=fgets($fp); ec ...
- 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件
以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件 2007/10/29 Mark BukovecEmpire Down Development 适用于:Mi ...
随机推荐
- [转帖]Linux系统管理-crond、chkconfig、systemd、unit、target
https://cloud.tencent.com/developer/article/1409845 10.23 linux任务计划cron crontab命令被用来提交和管理用户的需要周期性执行的 ...
- parquet极简学习
parquet极简学习 摘要 parquet的概念: Parquet文件是一种列式存储文件格式,广泛应用于大数据处理框架, 如Apache Hadoop和Apache Spark. 它通过将数据组织成 ...
- [转帖]GC Ergonomics间接引发的锁等待超时问题排查分析
https://www.cnblogs.com/micrari/p/8831834.html 1. 问题背景 上周线上某模块出现锁等待超时,如下图所示:我虽然不是该模块负责人,但出于好奇,也一起帮忙排 ...
- [转帖]ELKStack入门篇(二)之Nginx、Tomcat、Java日志收集以及TCP收集日志使用
https://www.cnblogs.com/linuxk/p/9273160.html 1.收集Nginx的json格式日志 1.1.Nginx安装 1.2.配置logstash [root@ ...
- [转帖]UseG1GC垃圾回收技术解析
https://www.cnblogs.com/yuanzipeng/p/13374690.html 介绍 G1 GC,全称Garbage-First Garbage Collector,通过-XX: ...
- vuex4的简单使用
安装vuex cnpm install vuex@next --save 官网地址是 https://vuex.vuejs.org/zh/guide/#%E6%9C%80%E7%AE%80%E5%8D ...
- 结构体定义及结构体粒度(alignment)
结构体定义及结构体粒度(alignment) #pragma pack(1) typedef struct _STUDENT_INFORMATION_ { int Age; char v1; int ...
- net core控制台程序使用依赖注入读取appsettings.json配置文件
.net 2.1有用,转自https://www.jianshu.com/p/726d1aa2795c 1.项目下添加appsettings.json文件,并将属性-复制到输出目录,设置为如果较新则复 ...
- 19.7 Boost Asio 传输序列化数据
序列化和反序列化是指将数据结构或对象转换为一组字节,以便在需要时可以将其存储在磁盘上或通过网络传输,并且可以在需要时重新创建原始对象或数据结构. 序列化是将内存中的对象转换为字节的过程.在序列化期间, ...
- C/C++ 数据结构与算法笔记
实现顺序表 #include <stdio.h> #include <stdlib.h> #define MaxSize 10 int Insert_Elem(int Arra ...