win10管理员权限无法访问网络映射盘?
来源:windows 网络用户发布,如有版权联系网管删除 2018-09-18
问题描述如下:
问题如下:
开发了一个工具,调用了getopenfilename用于选择文件,这个工具在win7下无论以管理员权限还是普通用户权限运行都可以正常选择网络映射盘;但是到win10下就以普通用户运行可以看到网络映射盘,以管理员权限运行就看不到映射盘。
经测试,win10下的notepad,如果以管理员权限运行也看不到映射盘。
大约了解了一下,原因可能是因为,win10 的uac隔离更严格,普通用户权限创建的网络映射盘,管理员权限是无权访问的。
问题1:
在win10下以管理员权限如何看到普通用户权限创建的映射盘?
问题2:
是否有办法通过ChangeWindowMessageFilter来通过白名单消息的方式解决问题,要处理哪些消息?
问题3:
Windows下到底哪些类型API需要使用管理员权限运行?
参考答案如下:
可以先拿到explorer的token,再用Impersonate切换当前线程的用户,这样就相当于用explorer的视角观察所有映射出来的盘。
BOOL ChangeUser(){ DWORD pid = GetPIDByName(L"explorer.exe"); if (pid == -1) return FALSE; HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); if (hProc == INVALID_HANDLE_VALUE) return FALSE; HANDLE hToken; if (!OpenProcessToken(hProc, TOKEN_ALL_ACCESS, &hToken)) return FALSE; return ImpersonateLoggedOnUser(hToken);}BOOL CheckAccess(const char* name){ DWORD attr = GetFileAttributesA(name); if (attr == -1) { printf("No access to file: %sn", name); return FALSE; } else { printf("File attribute %xn", attr); return TRUE; }}int main(int argc, char** argv){ if (argc < 2) return 0; if (CheckAccess(argv[1])) return 0; if (!ChangeUser()) { printf("Failed to change usern"); return 0; } printf("Changed to normal user.n"); CheckAccess(argv[1]); return 0;}

这里略去了GetPIDByName实现。
参考答案如下:
对。管理员权限下要重新net use。
查看评论 回复
"win10管理员权限无法访问网络映射盘?"的相关文章
- 上一篇:微软还是水土不服 Win10版小米4体验
- 下一篇:win10系统中怎么设置分辨率