Win10无法映射网络盘,求帮助!
发布网友
发布时间:2022-04-30 18:10
我来回答
共1个回答
热心网友
时间:2022-06-28 21:49
可以先拿到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: %s\n", name);
return FALSE;
}
else
{
printf("File attribute %x\n", 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 user\n");
return 0;
}
printf("Changed to normal user.\n");
CheckAccess(argv[1]);
return 0;
}
<img src="https://pic3.mg.com/50/49bfdb3482e45274fe56c6acdca631d7_hd.jpg" data-rawheight="178" data-rawwidth="434" class="origin_image zh-lightbox-thumb" width="434" data-original="https://pic3.mg.com/49bfdb3482e45274fe56c6acdca631d7_r.jpg">
这里略去了GetPIDByName实现。追问哇 好专业 都是代码我是萌新看不懂,可以加个好友 帮我远程解决一下吗