huangqi412 发表于 2019-2-12 16:56:10

WIN7铁粉们 八代核显真正可用的驱动有了

估计还是很多人喜欢用WIN7,之前八代核显装WIN7播不了视频,年前网上发现有可以播视频的WIN驱动了,安装测试了一段时间,终于终结了我的本本一整年不支持视频的历史。需要的可以试试。
文件直下:https://pan.baidu.com/s/1A3FTSL5feZISUjk-rzuEcg提取码:2wqb

相关链接:https://www.sysceo.com/forum/thread-44363-1-1.html
应求直接发布修改好的驱动,基于21.20.16.4839,只添加了UHD 620的支持,需要别的请自行修改。其实不太喜欢直接发binary,之后被人改来改去,麻烦的很。

链接:

游客,如果您要查看本帖隐藏内容请回复


下载的请认准这个MD5:b5bf707e5bfb24cbc7f5884f9730290e

最近买了新本子,Dell 7472,CPU 8代I7 8550U,MX150独显。之前就听说Intel新CPU对windows 7支持不好,以为这么久了应该会有相关破解,但是搜了一大圈发现,现有破解都不完美。基本上很难稳定使用,包括驱动总裁的版本,也一样的问题,视频播放不了。只好自己动手丰衣足食,折腾了好久终于弄得差不多了,自用基本完美,参见下面的视频:
http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1

破解参考了国外一些论坛的inf修改方法,加上自己解决了播放视频的问题,基本上就完美了。

之前在国外的论坛上也发表了具体的破解方法,根本文内容一样,今天发在这里,希望驱动总裁的开发人员能够多学习,造福广大同胞,不要搞些不完美的东西就发布了。顺便diss Intel和Microsoft,这么抱团混蛋下去吃枣药丸。

首先第一步是选好驱动,这一步非常重要,总的基本原则有三条,第一,驱动支持WDDM 1.1,即windows 7的显示驱动模型。第二,驱动核心dll和sys文件的import表内包含的函数和dll在windows7内可用或者可替代。第三,最好能够支持新的硬件,Kabylake-R,和coffee lake。但是这一点反倒没那么重要。

这里需要大概说下Intel Graphics的驱动框架,基本上intel的驱动又几大部分组成,第一部分是kernel内驱动,miniport驱动,文件对应igdkmd64.sys。第二部分和核心用户态驱动,对应文件igdumdim32.dll,igdumdim64.dll,igd10iumd32.dll,igd10iumd64.dll等等。第三部分是其他接口比如OpenGL,OpenCL,Video等等的支持库文件。

这里我们选择一款能够比较容易达到我们的目的的驱动,就要看这些文件在Win7里面的情况。首先内核部分的驱动,这部分功能虽然简单,但是决定了驱动是否能在对应的操作系统正常加载,这部分不行就会在设备管理器里面看到黄色的叹号了。我们要在Windows 7下使用驱动,那么我们的驱动版本选择就要选择一款带有Windows 7支持的驱动,简单说那些纯粹只支持Windows 10的驱动能够好用的概率就不大了。

因为Intel的驱动虽然可能同时支持Windows 7和其他操作系统,但是相应的sys文件和dll文件并不是多份,所以一款包含了windows 7的驱动保证了我们的内核驱动可以正常加载,同时用户态驱动的dll的import函数应该也是可以支持windows 7的。

国外的网友尝试使用支持windows 7的内核驱动混合支持新CPU的用户态驱动,这样做有可能是可行的,但是功能上和稳定性上都达不到完美(可以播放视频,但是3D功能缺失,而且频繁蓝屏)。因为毕竟系统架构差异较大,不同版本的文件能够一直正常工作的概率并不大。

我也试过混合驱动,包括将win10驱动fix import表之后加载,但是效果均不理想,这里面主要是WDDM框架的问题,因为Intel的先看架构是个轻内核态功能,重用户态功能的驱动,他的内核态驱动功能很小,主要支持基本都在用户态的dll里面,所以即使Win10的DLL可以fix了在win7下加载,但是因为DLL内部对于WDDM的支持版本有区别,驱动仍然不能正常使用。只有部分少量的驱动可以同时支持win7和win10,且不稳定。

所以最终,我还是选择了一款支持Windows 7,但是不支持新CPU的驱动,但是时间上比较新,属于在新CPU发布之后。因为要保证稳定性和功能可用的话,要先保证windows 7下驱动可以加载,而新老硬件架构的更新是幅度是相当小的,尤其是类似从Kabylake到Kabylake-R这种更新,硬件几乎没有区别,所以我们保证一款能够支持7th CPU且支持Windows 7的驱动是最佳选择。但是这种选择带来的问题就是对于更新的Coffelake的支持就比较难了,当然我没有测试过,可能也是可以支持的。

这里我选择的版本是21.20.16.4839,这个系列驱动的最新版本是21.20.16.4860,在Intel官方网站上可以下载到,这两版驱动的区别并不大,不过4839进入了windows升级的catalog,所以应该更稳定。两款我都试过,破解都可以完美运行。

这个系列的驱动,支持windows 7,但是只包含6代CPU,在windows 8-windows10上支持7代CPU,不支持8代CPU,首先我们先去下载一个回来:

https://www.station-drivers.com/index.php?option=com_remository&Itemid=352&func=fileinfo&id=3256&lang=en

之后,我们要进行inf文件的修改,这部分在网上有很多类似的教程,核心的步骤就两部:

第一步,确定硬件ID,到控制面板 - 设备管理器 - 找到intel集成显卡 - 右键单击属性 - 详细信息选项卡 - 描述下拉菜单选择 硬件ID 就能看到了,比如 UHD620 硬件ID是: PCI\VEN_8086&DEV_5917&CC_0300。
第二步,将这个硬件ID加入到inf文件中windows 7安装部分,我们解压下载好的驱动,找到Graphics文件夹下的igdlh64.inf文件,文本编辑器打开。找到

;=====================================================================
;    Windows 7 Install - DT Only
;=====================================================================

; SKL HW
%iSKLULTGT1%         = iSKLD_w7, PCI\VEN_8086&DEV_1906
%iSKLULTGT2%         = iSKLD_w7, PCI\VEN_8086&DEV_1916


这里是win7驱动的设备安装描述段,%iSKLULTGT2%这部分是设备名称宏定义,用来代替设备名称,iSKLD_w7指的是具体的安装操作执行段,PCI\VEN_8086&DEV_1916这部分就是对应的硬件ID了。这里我们的需要做的就是起一个新的名字宏定义,然后使用Sakylake的win7安装操作(iSKLD_w7),安装我们的硬件ID,所以我们在和部分最后加上这样一行:

%iKBLULTGT2R% = iSKLD_w7, PCI\VEN_8086&DEV_5917

至于iSKLD_w7怎么执行的,我们到下面去找就知道了,这里可能有人问,我们不应该使用Kabylake的执行段吗?很可惜这个驱动里面kabylake的执行段都是给win8 和win10的,能用但是需要自己改造,而且最终其实跟SKLD的没有什么差别。比较有意思的就是关于iKLBD_w7段,这个段其实在Intel的官方驱动里面也曾经存在过,但是只有两款驱动,这两款驱动现在比较难找到了。这是唯一官方宣称能够支持Windows 7的7代CPU的Intel显卡两款驱动,所以实际上7代CPU并不需要破解,只要找到这两款驱动就可以了,有兴趣的可以自己去找:

21.20.16.4508 (08/27/2016)
21.20.16.4526 (09/23/2016)


而这两款驱动实际上就是我们选择的驱动21.20.16.4839的非常早期版本。Kabylake是2016年Q3发布的,2017 1月份出货,所以会有这两款驱动。


我们自己定义了一个新的名字宏%iKBLULTGT2R%,所以记得在文件最后部分,把UHD 620的名字加上:

iKBLULTGT1   =   "Intel(R) HD Graphics 610"
iKBLULTGT2   =   "Intel(R) HD Graphics 620"
iKBLULTGT2R   =   "Intel(R) UHD Graphics 620"
iKBLULTGT2F    =   "Intel(R) HD Graphics 620"
iKBLULTGT3E15=   "Intel(R) Iris(TM) Plus Graphics 640"



修改好后保存,这时候你可以试一下这个驱动,这个驱动的3D功能部分是好使的,Aero是可以打开的。但是播放视频的时候有报错,任何播放器都会崩。

所以我们着手解决这个问题即可。报错位于igdumdim32.dll @0x59c4EA0C,正好位于用户态核心驱动的DLL里面,我们需要调试下看看发生了什么。随便选一个会crash的播放器,架上ollygdb之类的东西,随便什么,在LoadLibrarA下断点,打开个视频,看到igdumdim32.dll加载后,gdi32.dll也跟着加载,跟到播放器代码空间,此时需要保证igdumdim32.dll代码段已经加载。找到0x59c4EA0C这个地址,发现是在这么个函数里面:

59C4E948    8B87 0C010000   mov   eax, dword ptr ds:
59C4E94E    53            push    ebx
59C4E94F    57            push    edi
59C4E950    FFD0            call    eax
59C4E952    8B8F 00010000   mov   ecx, dword ptr ds:
59C4E958    8BD8            mov   ebx, eax
59C4E95A    8D45 DC         lea   eax, dword ptr ss:
59C4E95D    50            push    eax
59C4E95E    57            push    edi
59C4E95F    FFD1            call    ecx
59C4E961    8B56 10         mov   edx, dword ptr ds:
59C4E964    8B0A            mov   ecx, dword ptr ds:
59C4E966    F7C1 00002000   test    ecx, 200000
59C4E96C    74 0C         je      short 59C4E97A                   ; igdumdim.59C4E97A
59C4E96E    C746 18 2404655>mov   dword ptr ds:, 5E650424
59C4E975    E9 84000000   jmp   59C4E9FE                         ; igdumdim.59C4E9FE
59C4E97A    F7C1 00000004   test    ecx, 4000000
59C4E980    74 09         je      short 59C4E98B                   ; igdumdim.59C4E98B
59C4E982    C746 18 5C04655>mov   dword ptr ds:, 5E65045C
59C4E989    EB 73         jmp   short 59C4E9FE                   ; igdumdim.59C4E9FE
59C4E98B    F7C1 00000020   test    ecx, 20000000
59C4E991    74 09         je      short 59C4E99C                   ; igdumdim.59C4E99C
59C4E993    C746 18 9404655>mov   dword ptr ds:, 5E650494
59C4E99A    EB 62         jmp   short 59C4E9FE                   ; igdumdim.59C4E9FE
59C4E99C    85C9            test    ecx, ecx
59C4E99E    79 09         jns   short 59C4E9A9                   ; igdumdim.59C4E9A9
59C4E9A0    C746 18 CC04655>mov   dword ptr ds:, 5E6504CC
59C4E9A7    EB 55         jmp   short 59C4E9FE                   ; igdumdim.59C4E9FE
59C4E9A9    8B45 DC         mov   eax, dword ptr ss:
59C4E9AC    83F8 15         cmp   eax, 15
59C4E9AF    74 1C         je      short 59C4E9CD                   ; igdumdim.59C4E9CD
59C4E9B1    83F8 16         cmp   eax, 16
59C4E9B4    74 17         je      short 59C4E9CD                   ; igdumdim.59C4E9CD
59C4E9B6    83F8 13         cmp   eax, 13
59C4E9B9    75 43         jnz   short 59C4E9FE                   ; igdumdim.59C4E9FE
59C4E9BB    F742 04 0000000>test    dword ptr ds:, 2000000
59C4E9C2    75 A3         je   short 59C4E9FE                   ; igdumdim.59C4E9FE
59C4E9C4    C746 18 AC05655>mov   dword ptr ds:, 5E6505AC
59C4E9CB    EB 31         jmp   short 59C4E9FE                   ; igdumdim.59C4E9FE
59C4E9CD    8B42 04         mov   eax, dword ptr ds:
59C4E9D0    A9 00004000   test    eax, 400000
59C4E9D5    74 09         je      short 59C4E9E0                   ; igdumdim.59C4E9E0
59C4E9D7    C746 18 3C05655>mov   dword ptr ds:, 5E65053C
59C4E9DE    EB 1E         jmp   short 59C4E9FE                   ; igdumdim.59C4E9FE
59C4E9E0    A9 00008000   test    eax, 800000
59C4E9E5    74 09         je      short 59C4E9F0                   ; igdumdim.59C4E9F0
59C4E9E7    C746 18 0405655>mov   dword ptr ds:, 5E650504
59C4E9EE    EB 0E         jmp   short 59C4E9FE                   ; igdumdim.59C4E9FE
59C4E9F0    A9 00000001   test    eax, 1000000
59C4E9F5    74 07         je      short 59C4E9FE                   ; igdumdim.59C4E9FE
59C4E9F7    C746 18 7405655>mov   dword ptr ds:, 5E650574
59C4E9FE    85DB            test    ebx, ebx
59C4EA00    74 0D         je      short 59C4EA0F                   ; igdumdim.59C4EA0F
59C4EA02    8B4B 04         mov   ecx, dword ptr ds:
59C4EA05    85C9            test    ecx, ecx
59C4EA07    74 06         je      short 59C4EA0F                   ; igdumdim.59C4EA0F
59C4EA09    8B46 18         mov   eax, dword ptr ds:
59C4EA0C    8948 0C         mov   dword ptr ds:, ecx         <============ 这里挂了
59C4EA0F    C746 1C 1800000>mov   dword ptr ds:, 18
59C4EA16    C746 20 4000000>mov   dword ptr ds:, 40
59C4EA1D    C746 24 4000000>mov   dword ptr ds:, 40
59C4EA24    C746 28 4000000>mov   dword ptr ds:, 40
59C4EA2B    C746 2C 0400000>mov   dword ptr ds:, 4
59C4EA32    C746 30 1000000>mov   dword ptr ds:, 10
59C4EA39    C746 34 1000000>mov   dword ptr ds:, 10
59C4EA40    C746 38 0008000>mov   dword ptr ds:, 800
59C4EA47    C746 3C 8000000>mov   dword ptr ds:, 80
59C4EA4E    C746 40 2000000>mov   dword ptr ds:, 20
59C4EA55    C746 44 0008000>mov   dword ptr ds:, 800
59C4EA5C    C746 48 2004000>mov   dword ptr ds:, 420
59C4EA63    C746 4C 4004000>mov   dword ptr ds:, 440
59C4EA6A    C746 50 2000000>mov   dword ptr ds:, 20
59C4EA71    C746 54 1000000>mov   dword ptr ds:, 10
59C4EA78    56            push    esi
59C4EA79    C786 B8000000 3>mov   dword ptr ds:, 59C4D630
59C4EA83    C786 BC000000 1>mov   dword ptr ds:, 59C4E410
59C4EA8D    C786 C0000000 3>mov   dword ptr ds:, 59C4D830
59C4EA97    C786 C4000000 4>mov   dword ptr ds:, 59C4E440
59C4EAA1    C786 C8000000 A>mov   dword ptr ds:, 59D71FA0
59C4EAAB    C786 CC000000 1>mov   dword ptr ds:, 59C4DB10
59C4EAB5    C786 D4000000 8>mov   dword ptr ds:, 59C4E680
59C4EABF    C786 D8000000 1>mov   dword ptr ds:, 59C4DC10
59C4EAC9    C786 DC000000 8>mov   dword ptr ds:, 59C4E680
59C4EAD3    C786 E0000000 8>mov   dword ptr ds:, 59C4E880
59C4EADD    C786 E4000000 2>mov   dword ptr ds:, 59C4DD20
59C4EAE7    C786 EC000000 6>mov   dword ptr ds:, 59C4CE60
59C4EAF1    C786 F0000000 D>mov   dword ptr ds:, 59C4CED0
59C4EAFB    C786 F4000000 8>mov   dword ptr ds:, 59C4CC80
59C4EB05    C786 F8000000 F>mov   dword ptr ds:, 59C4E8F0
59C4EB0F    E8 7CF8FFFF   call    59C4E390                         ; igdumdim.59C4E390
59C4EB14    8B4D FC         mov   ecx, dword ptr ss:
59C4EB17    5B            pop   ebx
59C4EB18    5F            pop   edi
59C4EB19    33CD            xor   ecx, ebp
59C4EB1B    5E            pop   esi
59C4EB1C    E8 7354EEFF   call    59B33F94                         ; igdumdim.59B33F94
59C4EB21    8BE5            mov   esp, ebp
59C4EB23    5D            pop   ebp
59C4EB24    C2 0400         retn    4


这个函数大意是通过 59C4E95F 这里的call读出来一个flag,然后根据这个flag上的掩码标记对59C4EB0F这个函数的参数进行配置。反复调试尝试前面解析flag的那些转跳组合,最后发现
59C4E991这里的je不要跳就可以了,所以改成nop即可。

之后rva转成文件偏移,修改dll即可。

这里给一个特征,方便大家修改,对于igdumdim32.dll,查找一下二进制:

83 F8 13 75 43 F7 42 04 00 00 00 02

后面的两个字节改为 90 90 即可

对于igdumdim64.dll,搜索:

01 76 17 83 F9 13 75 44 F7 42 04 00 00 00 02

后面两个字节也修改为 90 90 即可

修改好后保存,安装驱动即可。如果已经安装了之前的驱动,重启到安全模式下,igdumdim32.dll替换到windows/sysWow64下,igdumdim64.dll替换到windows/system32下即可。

需要注意的是,安装之前一定要先卸载独立显卡的驱动,安装好后再重新安装一遍独立显卡驱动。另外独立显卡驱动不推荐版本太新的。我的MX150用最新的总在桌面卡住,用397.64版非常完美。

xuxi2009 发表于 2019-2-12 17:51:19

佩服楼主的折腾精神,话说win10用习惯了也会像用win7一样难以割舍

mfkiwl 发表于 2019-2-12 17:58:38

非常感谢LZ,要考虑装回win7了。win10的自动更新策略不能忍,时不时就能折腾出一个毛病了,然后大半天或几天用不了

mfkiwl 发表于 2019-2-12 18:00:33

修改好后保存,安装驱动即可。如果已经安装了之前的驱动,重启到安全模式下,igdumdim32.dll替换到windows/sysWow64下,igdumdim64.dll替换到windows/system32下即可

这段是否写反了:记得是system32下装32位的文件,sysWow64装64位文件

wye11083 发表于 2019-2-12 18:33:49

mfkiwl 发表于 2019-2-12 18:00
修改好后保存,安装驱动即可。如果已经安装了之前的驱动,重启到安全模式下,igdumdim32.dll替换到windows/ ...

你记错了。wow64是32位运行库路径。

蛋定 发表于 2019-2-12 18:43:11

做个记号

cemi 发表于 2019-2-12 19:21:41

请问楼主这个驱动能适用于I7-8700K吗?
我被win10折磨死了, win10刚装好的时候的用起来还是可以的,不过用了一段时间后,稍微有些旧的软件运行起来慢如蜗牛,一直很想回到win7。

eva015401 发表于 2019-2-12 19:45:19

用了win10已经很难主动回win7,除非工作电脑

putty 发表于 2019-2-12 20:32:33

好帖, 特此mark一下。。。

liwei_jlu 发表于 2019-2-12 21:09:35

mfkiwl 发表于 2019-2-12 17:58
非常感谢LZ,要考虑装回win7了。win10的自动更新策略不能忍,时不时就能折腾出一个毛病了,然后大半天或几 ...

一直用ltsc,还没出现过强制更新的问题

hugohehuan 发表于 2019-2-13 01:53:12

本帖最后由 hugohehuan 于 2019-2-13 01:55 编辑

楼主好人
另外想问一下“igdumdim32.dll替换到windows/sysWow64下,igdumdim64.dll替换到windows/system32下即可。”确定没有写反?

90999 发表于 2019-2-13 02:34:27

hugohehuan 发表于 2019-2-13 01:53
楼主好人
另外想问一下“igdumdim32.dll替换到windows/sysWow64下,igdumdim64.dll替换到windows/system32 ...

WOW64是32位的,32BIT的WINNT是没有WOW64的.
SYSTEM32则和系统同样。

postek 发表于 2019-2-13 08:39:49

我是没这个精神头了。等现在的电脑退役就之际上 win10 64位了。 现在还是win7 32位。我打算从了微软了。依了他了。

ilikemcu 发表于 2019-2-13 08:59:19

自从用了win10的LTSB2016之后,感觉再也回不到WIN7了,现在除了我的ATOM N270/1G内存的小主机还跑着WIN7X86当家庭NAS,也就虚拟机里还留着一个WIN7了,其它的机器都是WIN10 LTSC2019,比WIN7好用太多了。

wyn20007 发表于 2019-2-13 09:44:09

做个记号

wqsjob 发表于 2019-2-13 09:47:16

mfkiwl 发表于 2019-2-12 17:58
非常感谢LZ,要考虑装回win7了。win10的自动更新策略不能忍,时不时就能折腾出一个毛病了,然后大半天或几 ...

关键是,有可能永远开不了机。

huangqi412 发表于 2019-2-13 10:07:57

hugohehuan 发表于 2019-2-13 01:53
楼主好人
另外想问一下“igdumdim32.dll替换到windows/sysWow64下,igdumdim64.dll替换到windows/system32 ...

我没有替换直接简单粗暴的卸载显卡驱动 再重新安装驱动

huangqi412 发表于 2019-2-13 10:09:10

liwei_jlu 发表于 2019-2-12 21:09
一直用ltsc,还没出现过强制更新的问题

怎么做到的?手上还有几台本也是ltsc20162019 都有都会自动更新无法禁止

huangqi412 发表于 2019-2-13 10:11:03

cemi 发表于 2019-2-12 19:21
请问楼主这个驱动能适用于I7-8700K吗?
我被win10折磨死了, win10刚装好的时候的用起来还是可以的,不过用 ...

看原文吧要看cpu架构你这个是台式机吧   台式机有独显不用纠结这个问题笔记本才绕不过

huangqi412 发表于 2019-2-13 10:18:44

mfkiwl 发表于 2019-2-12 18:00
修改好后保存,安装驱动即可。如果已经安装了之前的驱动,重启到安全模式下,igdumdim32.dll替换到windows/ ...

你重新装回win7不涉及替换啊直接装驱动

liub007 发表于 2019-2-15 01:28:39

继续xp中!

kxm2008 发表于 2019-2-15 07:35:35

我还在继续老机器上重装XP

tang0571 发表于 2019-2-15 09:31:50

佩服lz,不过真懒的折腾了,哈哈,凑合着用吧!!
还是留名一下备用,谢谢!

rengo 发表于 2019-2-16 19:58:28

自动更新这个东西实在是太别扭了
但是现在是个软件就几个月一更新

xuekcd 发表于 2019-5-28 17:50:46

好用吗?我下了,谢谢!明天试试行不行

ddz123abcdef 发表于 2019-5-28 20:30:31

楼主,你那个配置的电脑性能怎么样?小型3d画图怎么样?显示屏显示效果呢?重量应该很轻吧?

zywhjj 发表于 2019-5-28 23:49:22

好像很给力,可惜我研究不来
最近给公司配的几台电脑,全部都用第七代的CPU,没办法,笔记本用了win10的,特别不习惯。
为了省几块钱,公司网管都装360杀毒和安全卫士,公司的proe,装上去,每次开3D都很卡,后来重装系统啥的,整了很久,后来发现把360卸载掉就好了。

zhiwei 发表于 2019-5-29 07:42:04

新CPU在Win7上面无USB驱动,这个怎么整?上次搞了几天都搞不定。

yyts 发表于 2019-5-29 08:26:38

本帖最后由 yyts 于 2019-5-29 08:28 编辑

就跟当年用32位win7一样(笔记本内存已经超过3G了),老是要找什么破解4G内存的补丁,就是不愿意换64位觉得兼容有问题,后面一试毛问题都没有

现在可能是老了,不愿意折腾这个没多大意义的事情了。

gracialee 发表于 2019-7-17 21:07:35

有空了我折腾试试,看WIN7的8代U好使不,另外,9代U的驱动有吗?{:titter:}

moon2jin 发表于 2019-7-17 21:11:59

zywhjj 发表于 2019-5-28 23:49
好像很给力,可惜我研究不来
最近给公司配的几台电脑,全部都用第七代的CPU,没办法,笔记本用了win10的, ...

同样的,哈哈!专找7代 cpu!

zywhjj 发表于 2019-7-18 01:10:58

moon2jin 发表于 2019-7-17 21:11
同样的,哈哈!专找7代 cpu!

还想再买台笔记本电脑,不懂买啥
win10的,居然没办法安装avr的下载器驱动。哎

huangqi412 发表于 2020-1-15 15:02:26

有没有可以帮下载新驱动的   Intel Win7/Win8.1的5068版 6/7/8/9代CPU核显驱动
http://www.smxdiy.com/forum.php?mod=viewthread&tid=1489&extra=page=1&page=1
页: [1]
查看完整版本: WIN7铁粉们 八代核显真正可用的驱动有了