栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在Windows上,是否可以以其他用户身份运行单个goroutine?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在Windows上,是否可以以其他用户身份运行单个goroutine?

从理论上讲,这是不可能的,因为在Linux和Windows上,用户身份的概念仅存在于OS级别的线程中,goroutines 不是 OS线程-
而是轻量级实体,它们映射到真实的OS线程由Go调度程序(可执行文件内置的Go运行时的一部分)提供,并且在其生命周期内,goroutine可能在不同的时间在不同的OS线程上执行。

但是针对您的情况,存在某种“退出舱门”,其最初旨在帮助调用

C
代码:
runtime.LockOSThread()
。一旦goroutine调用了此函数,它就会被卡在当前正在运行的线程上,并且不会被安排在goroutine退出或调用之前被调用
runtime.UnlockOSThread()

您可以这样使用:

go func() {  runtime.LockOSThread()  defer runtime.UnlockOSThread()  impersonate() // acquires and assumes some other credentials  ...}

该假想

impersonate()
功能的实现超出了此问题的范围;您可以使用该
syscall
软件包调用任何Win32 API函数-
有关示例,请参见标准的Go库。


请注意,

runtime.LockOSThread()
在实际场景中调用会导致将整个OS线程专用于单个goroutine(而通常它们中的很多都只能在一个goroutine上运行),因此,如果您计划生成许多此类锁在OS线程中的goroutine,准备应对增加的OS资源使用情况。

更新: 一个工作示例,该示例在带有Go
1.2.1 / i386的Windows XP Pro SP3 32位上进行了测试。

它对由密码“ foo”标识的用户“ foo”进行硬编码。要在Windows上快速创建用户,请执行

net user foo * /ADD

并在出现提示时键入两次密码。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/469023.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号