V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
q9REUgpVVCU77pWj
V2EX  ›  程序员

XLServicePlatform 到底需不需算不算流氓?

  •  
  •   q9REUgpVVCU77pWj · 2018-05-18 05:37:02 +08:00 · 11273 次点击
    这是一个创建于 2381 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是我挖的坑

    • 起因 是昨天 V2 连着两个迅雷的帖子比较热,就在里面吐槽了一下长久骚扰我的 UAC 权限请求。结果一位自称迅雷员工的用户就一通解释说明,说 XLservicePlatform 这个服务有多么地重要。看来大家对迅雷的 XLServicePlatform 服务有一些误解 - V2EX
    • 为什么我要单独开一个帖回复呢? 因为好像发帖才可以用 markdown,希望大家看的时候易读一点。
    • 背景 使用迅雷极速 win 版。买过会员,感觉速度没快广告没少,断供两年多了。

    个人判断软件是否流氓的原则

    • 是否必要
    • 用户是否有选择权
    • 何时运行

    对方的解释和我的感想

    其实这个解释,以前在搜索怎么干掉这个服务的时候已经在某乎看到过一次了。好像还是某技术高管回的。

    “ XLServicePlatform ”服务具有以下几个功能: 1、在 Windows Vista 引入的 UAC 增加了一种磁盘安全机制。在迅雷进程没有管理员权限的情况下,创建固实文件申请磁盘空间后,迅雷一旦开始写入数据,系统就会将文件所在区块的所有数据写成 0 (相当于“初始化”)。以防没有权限的应用程序访问到磁盘上被标记为删除但尚未擦除的旧数据。 完成初始化的速度取决于磁盘本身的写入性能,在此期间磁盘的 IO 性能几乎全部被占用。因此会造成其它磁盘读写请求被延迟。于是会看到许多应用程序停止响应。而下载的文件越大,完成初始化需要的时间越长。直至文件所在区块全部初始化完成,迅雷才可以写入下载的数据。( uTorrent 在勾选了“提前申请磁盘空间”后,如果也没有管理员权限,那么下载大文件也会出现同样的情况。) 为了避免这个问题,迅雷利用系统服务具有管理员权限这一特性,在迅雷下载大于 100MB 的文件时,由“ XLServicePlatform ”服务来申请磁盘空间,这时系统就不会花时间提前将文件所在区块初始化,迅雷就可以直接写入数据了。

    • 精简一下,就是不开这个服务的话,其它磁盘读写请求被延迟。于是会看到许多应用程序停止响应。
    • 个人在禁用这个服务的情况下,下高清片,5G 到 40G,从未感觉到卡顿。所以对这个功能的必要性,我是存疑的。
    • 用户选择权,比如我觉得不开也没卡顿,那我能不能选择关?贵方自己也说了,uTorrent 提供选项了。
    • 何时运行?我没下载的时候它不用运行吧?

    2、目前最新版本的迅雷客户端都增加了“驱动层浏览器支持”功能,用于在不安装任何浏览器扩展的条件下,支持“ Edge、Chrome、Firefox ”等浏览器。该功能依赖“ XLServicePlatform ”服务进行初始化。

    • 是否必要?我禁了这个服务,chrome 照样还是能自动打开迅雷下载的。而且凭什么强制监视我浏览器?
    • 用户选择权。迅雷里自己也有不监听浏览器的选项。是不是说我勾了不监听,你们还是想要通过这个服务监听,只是假装没听到?
    • 何时启动。我没开浏览器的时候它运行了干嘛?

    3、迅雷下载 JS-SDK 需要通过“ XLServicePlatform ”服务跟网页中的 JS 进行交互,比如判断是否安装迅雷,以及传递下载链接等信息,如果这个服务被停止,当你点击网页中使用迅雷下载 JS-SDK 实现的下载按钮时,会认为你没有安装迅雷,从而提示你安装迅雷。

    • 是否必要?同上,禁了这个服务,迅雷照样可用。
    • 选择权是不可能有选择权的。
    • 何时启动。同上。

    鉴于以上功能对于大多数用户的下载体验都十分重要,所以我们没有提供关闭此服务的选项。如果你用不着这些功能,是可以手动停止服务的。

    • 以上功能对大部分用户很重要?你们怎么知道的?
    • 你们没提供关闭的功能,怎么知道用户不想关?要么开放个真实有效的关闭功能,试试反馈数据敢嘛?
    • 看各大搜索引擎,用户貌似对你们的善意不领情啊? 各大浏览器搜索 XLServicePlatform
    • 手动停止服务,是每次装完迅雷必做的。但是每次启动迅雷都弹 UAC 试图再次打开是怎么回事?

    总结

    • 禁用这个服务,迅雷的下载功能并没有可感知的影响,可以正常工作。必要性不高。
    • 用户选择权。无。
    • 运行时间。开机启动,关闭服务会自动重启。需要到系统服务里禁用。并且下次启动迅雷还会弹 UAC,试图修改该服务的权限。

    解决方案

    网上看到说火绒能阻止 UAC 弹窗,未尝试。我不想装杀毒软件。


    只有这三个功能吗?

    仅仅根据对方复制粘贴的答案作了回复。对方也再三强调没有扫硬盘,那我就相信。
    但这个服务除了上述提到的三点,还有没有其他“功能”?
    如果它能给浏览器做那么多“功能”,那是否应该相信它只关注下载,绝不会偷看浏览器的其它内容?


    哪有什么流氓?上你是为了让你爽!

    最后说句政治不正确的,你强奸小白不惹到我们也就算了。
    我都到服务里明确禁用掉这个服务了,你还每次 UAC 弹一下,而且专挑有点洁癖的用户下手,这不是找骂嘛。虽然可以理解你们可能怕被其他家的流氓误杀。
    但这就好比妹子已经明确拒绝你了,你还时不时说说骚话打打嘴炮,便宜占不到,就留个难看的吃相。

    18 条回复    2018-05-18 23:58:28 +08:00
    jdjd
        1
    jdjd  
       2018-05-18 06:41:02 +08:00 via iPhone
    图样
    你禁用了服务,别人请求了 uac,难道就不能干点别的吗
    jdjd
        2
    jdjd  
       2018-05-18 06:44:58 +08:00 via iPhone
    迅雷是一个 VIP 会员都要看广告的公司
    迅雷是一个能把所有大家觉得不错的产品砍掉然后推出找骂产品的公司
    我只能说迅雷为中国的反盗版事业也是做出了很大贡献
    msg7086
        3
    msg7086  
       2018-05-18 06:52:15 +08:00   ❤️ 5
    Windows 下的非填充分配文件空间系统调用叫做 SetFileValidData。
    它的作用是给一个文件预先分配文件空间,和 POSIX 下的 fallocate 类似,除了一点不同 —— 分配的空间里的旧数据是可以被程序读取的。
    比如你删除了一张敏感照片,然后点开了一部电影开始下载,那么这部电影所占用的文件,很可能会包含你删除的那张照片的数据。
    对于这样的危险操作,微软也是限定了这个函数的使用权限。一个程序必须要拥有 SE_MANAGE_VOLUME 特权才可以预分配空间。SE_MANAGE_VOLUME 权限可以通过 AdjustTokenPrivileges 函数对程序自身进行提权而得到。提权需要以管理员权限运行程序才行。
    也就是说,任何一个程序,想要预先分配空间(以大幅减少磁盘碎片),必须以管理员权限运行,然后对自身提权,然后才可以打开文件进行写入操作。

    著名开源下载软件 aria2 有这么几种模式:
    1. 不分配。写一块是一块,如果遇上 NTFS 这样的智障 FS,顺序下载完以后都可能会产生几千片碎片。
    如果多线程下载,当程序第一次写入靠后的块时,一样会将未下载的空间写零。

    2. 预先写零分配。从头到尾写一遍零。如果是个 10G 的电影,就得等上 2 分钟写完零以后再开始下载。

    3. 预先分配。用管理员权限提权后直接分配空间。这种方式性能最好,文件碎片少,不需要等待,但是缺点就是要管理员权限,而且没下载完的文件里会有辣鸡(或者敏感)数据。

    归根结底就是微软 API 的毛病。要是像 POSIX 一样支持 fallocate,我就不需要没事就把 aria2 提权到管理员了。
    0987363
        4
    0987363  
       2018-05-18 07:00:00 +08:00 via Android
    前几天在系统监视器里发现这个进程正在读取的文件隔几秒换一个。。。最近几个月就没打开过迅雷。。
    Valyrian
        5
    Valyrian  
       2018-05-18 07:02:05 +08:00
    @msg7086 这。。windows 是不是傻?预先分配后,还没写入的部分直接返回 0 不行?非要如实汇报吗?
    innoink
        6
    innoink  
       2018-05-18 07:02:28 +08:00 via Android
    迅雷选择成立公司本身就是一个错误
    jdjd
        7
    jdjd  
       2018-05-18 07:10:19 +08:00 via iPhone
    @0987363 胡说,人家那个迅雷产品人员才信誓旦旦的说了,迅雷不会这样,不信你们用监视器自己看
    msg7086
        8
    msg7086  
       2018-05-18 07:19:30 +08:00
    @Valyrian 是,这傻叉设计为人诟病许久了。
    verrickt
        9
    verrickt  
       2018-05-18 07:29:11 +08:00 via Android   ❤️ 2
    所以我把所有需要 uac 权限的应用都丢到沙箱里了,你应用程序爱怎么折腾怎么折腾,反正我用完了你就得不留痕迹的死。
    沙箱外只用 uwp 和开源软件。
    ColinZeb
        10
    ColinZeb  
       2018-05-18 08:15:55 +08:00 via iPhone
    @verrickt 难道你没听说过越😄
    plko345
        11
    plko345  
       2018-05-18 09:03:35 +08:00
    @verrickt 我放到虚拟机里了哈哈哈
    Abblee
        12
    Abblee  
       2018-05-18 09:05:05 +08:00 via iPhone
    算流氓也不算流氓,毕竟世界上不是程序员一种群体
    h82258652
        13
    h82258652  
       2018-05-18 09:13:12 +08:00
    话说我倒是想知道那个 DownloadSDKServer 为啥把我磁盘跑满了。。。
    nannanziyu
        14
    nannanziyu  
       2018-05-18 09:16:57 +08:00   ❤️ 1
    @msg7086
    了解下 SetEndOfFile
    AX5N
        15
    AX5N  
       2018-05-18 09:19:15 +08:00
    这个功能如 3 楼所说,还是很必要的,ut 也有,但 ut 并不会强制让你开启一个服务,只是在运行的时候以管理员权限运行就得了。
    tifang
        16
    tifang  
       2018-05-18 09:47:12 +08:00
    解决方案:在 sandboxie 中安装使用迅雷,在盒子里它没法安装驱动。只需注意 UAC 弹窗即可。同理对大部分流氓软件此法都有效。
    iwtbauh
        17
    iwtbauh  
       2018-05-18 10:17:27 +08:00 via Android
    @msg7086

    fallocate 不是 POSIX,POSIX 的那个叫 posix_fallocate
    msg7086
        18
    msg7086  
       2018-05-18 23:58:28 +08:00
    @nannanziyu SetEndOfFile 在随机写入的时候会填零。
    多线程分片下载的时候,靠后的区块在首次写入的时候会导致之前的所有区块填零,会阻塞整个线程。
    这就是我说的第一条,不分配的情况。

    @iwtbauh 感谢指正。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1065 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 19:13 · PVG 03:13 · LAX 11:13 · JFK 14:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.