V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
naoh1000
V2EX  ›  奇思妙想

想做个 Windows 上类似 Docker 的软件来安装国产软件

  •  2
     
  •   naoh1000 · 2020-11-11 11:58:46 +08:00 via iPhone · 5746 次点击
    这是一个创建于 1466 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Sandboxie 的文件权限管理是黑名单机制的,即你只能禁止运行在里面的软件读取某个文件夹。这不能很好地阻止国产软件扫描硬盘。我想做一个软件,在里面运行一个软件安装包会自动创建一个容器,容器内只能访问一些系统文件,用户可以把主机上的某个需要用到的目录挂载进容器,或者创建 volumes 来持久化数据,像 Docker 一样。最近注意到 Containerd 已经支持了 Windows 的进程隔离(非 Hyper-V )想问下 V 友这样做的可行性以及基于 Sandboxie 开发还是 Containerd 开发容易一些。
    22 条回复    2020-11-27 01:49:58 +08:00
    mouyase
        1
    mouyase  
       2020-11-11 12:08:16 +08:00 via Android
    不懂但是支持
    zjlletian
        2
    zjlletian  
       2020-11-11 12:24:00 +08:00
    Containerd 是基于 linux 的,你想说的应该是 windows 下的云端软件,你搜一下云端软件就知道了,好几年前比较火,不过这玩意儿已经凉的差不多了。。
    naoh1000
        3
    naoh1000  
    OP
       2020-11-11 12:25:26 +08:00 via iPhone
    @zjlletian 不是云端软件,是运行在用户电脑上的。看 Containerd 的 Readme.md ,这项目是支持 Windows 的。
    Cooky
        4
    Cooky  
       2020-11-11 12:26:46 +08:00 via Android
    沙盘不用禁止读写,直接把目录设成空的就完了
    0TSH60F7J2rVkg8t
        5
    0TSH60F7J2rVkg8t  
       2020-11-11 12:28:18 +08:00 via iPhone
    我估计实现不了,因为国产软件在 Windows 下全都用了驱动,驱动在 ring0 层,docker 的模式应该隔离不了
    jinliming2
        6
    jinliming2  
       2020-11-11 13:53:41 +08:00 via iPhone
    我觉得比较靠谱的是参考 windows 10 自带的那个 Sandbox 。
    zh584728
        7
    zh584728  
       2020-11-11 14:05:09 +08:00
    @jinliming2 windows 10 自带的沙盒好像不能保存,关闭后就销毁了
    Osk
        8
    Osk  
       2020-11-11 14:06:24 +08:00 via Android
    Windows 自带的沙盘,也是 hyper-v 。。。
    codehz
        9
    codehz  
       2020-11-11 20:28:07 +08:00
    我也在研究这个,但是这玩意没有文档,然后我测试了一下 container.dll 里的 WcCreateDescriptionFromXml 函数,大致研究出了一部分选项(里面文本是乱编的,肯定不能正确创建,但是至少试探出了能过解析的选项列表)

    然而,一旦传递给 WcCreateContainer 函数,除了 job 命名空间能创建之外,其他的全部爆炸。。。我打算回归手动使用 bindfltapi.dll wcifsapi.dll iphlpapi.dll 去折腾...
    前两个大概是和文件系统重定向有关的,后者用 SetJobCompartmentId 来管理网络命名空间
    注册表看起来涉及 \Device\VRegDriver
    挂载点似乎就是直接和 \\.\MountPointManager 通讯
    命名管道也是 \\.\Pipe
    lxilu
        10
    lxilu  
       2020-11-11 21:41:28 +08:00 via iPhone
    用标准账户运行
    Yangz
        11
    Yangz  
       2020-11-12 01:57:55 +08:00 via Android
    @naoh1000 不,那个“云端软件”不是指云端技术,而是有一个软件平台名字就叫做“云端软件”
    zjlletian
        12
    zjlletian  
       2020-11-12 11:45:02 +08:00
    @naoh1000 只是名字叫云端软件,并不是现在的所谓的云的概念,你去了解一下就知道了
    tankb52
        13
    tankb52  
       2020-11-12 11:52:56 +08:00
    @naoh1000
    2012 年的 windows 端软件了。
    可以看下面的链接介绍。

    http://xbeta.info/yunduan.htm
    http://xiazai.zol.com.cn/detail/37/366961.shtml
    systemcall
        14
    systemcall  
       2020-11-13 18:44:58 +08:00 via Android
    Windows 下有不同级别的容器。Windows Sandbox,win32 转制的 UWP,Windows Defend 应用程序高级防护是不同的级别,微软自己的文档有
    我想到一个方法,就是用 Windows Sandbox 来弄一块与宿主隔离的环境,里面再跑自己的容器
    Windows Sandbox 自己有文件夹共享、启动脚本、GPU 虚拟化这类功能。不能存盘不见得是坏事,只要对应用程序来说是有存盘的功能的就可以了,自己的沙盒漏沙了都不要紧
    给 Windows Sandbox 里面加进去存档的目录,启动时运行自己的沙盒就行了。不过没有试过在那里面加载没有签名的驱动,不知道能不能跑起来
    systemcall
        15
    systemcall  
       2020-11-13 18:48:42 +08:00 via Android
    @ahhui 不知道能不能把那些驱动丢到一个 VM 里面跑。驱动和主程序之间好像走的是 RPC 吧,不清楚这方面的东西。
    国产软件为了兼容 XP 和没有装显卡驱动的电脑,就算没有 3D 加速一样的跑。感觉丢到虚拟机里面可能还要快一些,因为没有多少文件给他们扫
    0TSH60F7J2rVkg8t
        16
    0TSH60F7J2rVkg8t  
       2020-11-13 21:28:57 +08:00 via iPhone
    @systemcall 这个问题我回答不了,不是驱动专家。可能要请教相关专业人士。不过国产软件带驱动也能在虚拟机里跑,但你如果本来要做 docker 的结果搞成了 vmware 的话,那工程可就浩大了
    codehz
        17
    codehz  
       2020-11-14 01:50:54 +08:00 via Android
    @naoh1000 containerd 的方案没窗口,只能用 ui 自动化 api 操作(
    muzuiget
        18
    muzuiget  
       2020-11-16 14:41:46 +08:00
    Windows 版的 Docker 还是虚拟机的,不用 Docker 了,直接虚拟机就行。
    naoh1000
        19
    naoh1000  
    OP
       2020-11-16 15:57:56 +08:00
    @muzuiget Docker 的 Containerd 已经支持了 Windows 的进程隔离(限 Windows 2019 )
    Joker123456789
        20
    Joker123456789  
       2020-11-19 15:46:59 +08:00
    可以研究下 ios 的 app 管理机制。
    codehz
        21
    codehz  
       2020-11-19 16:42:29 +08:00
    @naoh1000 #19 测试了一下,基础机制都有,只限 windows server 的原因大概是许可证的问题(
    搜索关键字 windows serversilo
    qsnow6
        22
    qsnow6  
       2020-11-27 01:49:58 +08:00 via iPhone
    不行就来一个虚拟机专门跑国产软件
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1980 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:20 · PVG 00:20 · LAX 08:20 · JFK 11:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.