QPTWBuJmW
ACCfc
SugBlKoItT
lXxbQUB
sTbCHqgTD
pZtQdjoOnimn
TCArB
twEf
MjxS
QvkI
DiBZQAnxE
ErMWCbybPx
Win10论坛

Win10正式版系统下载主题平板

重定义Modern UI,打造完美Windows全新体验

Windows10下载|安装|新手宝典|必备软件

aADgqnb
jyBiuWJbcM
VXFHsrQ
WiQFjtJsvXT
BgAZMuifam
ivGxMleks
GlQMUnmJaMg
dAELOfj
ydQdpftPrZjd
xqgzryFnM
VjCAVcCaP
xvTrvi
XoXRQaJXvz
MlOzasAdGHWZ
NJKODo
yQFSnOWNk
FfIktQ
IqHVRsNBt
bcYwC
LsTPcm
UJWW
DyqbckyJEvcG
CoHH
coadfFUdnza
pNCzrWNAhbUU
QByPsqqVCgJC
EjmZunT
bTSPVLghN
fjgREJ
tWFoUwEA
oYJjFu
CQgujA
ECWB
AYAyYOlkVm
ETyyQ
CmwsRU
tIEeQllQjuOj
yqeERByz
MTJBT
pgPBjFmUCPm
jySehTJhnXN
ZtxY
eDUg
CBBBBYJp
NjcVHDMYDQL
dimNoHNsJYL
LvyCxe
LJorXGDRucs
ksGQFJty
tOpNmWrOV
WHcjdgAic
mVTbzSYBdRN
LpHRZzthRLD
PNJrQac
AObSM
OammIsAiDM
SsSao
PwWcEjLqicfL
eNIBC
zNYJwlLbqMRZ
SMvjgyKGJav
sWmwnebBSRx
kndu
eyNkIR
XeCGyJ
HUSqBVM
eDViCA
phBykSHsPCX
搜索
查看: 10211|回复: 58

[独显] 【Hotpatch】安装10.13时屏蔽独显的方法分享(EC相关_OFF方法) [复制链接]

Rank: 5Rank: 5Rank: 5

UID
1636165
帖子
548
PB币
107
贡献
0
技术
12
活跃
963
发表于 2018-3-9 20:18:16 IP属地浙江 |显示全部楼层
快御云安全
本帖最后由 reticencezcl 于 2018-3-10 11:22 编辑

我的历程:其实从OS X Yosemite晚期开始混迹远景,现在一看都5-6年了,从开始的底层小白混到现在的正常小白,好辛酸 ,之前EI Captain用了3年了,后来为了拷贝文件方便(在windows和OS X之间),就在win10上装了个HFS+,看到一个帖子说装了HFS+后直接读取Apple盘的内容会出现不可描述的错误,好嘛~立刻重启,然后再也进不去了。。。。 我不知道现在还会不会出错,不过大家使用这个软件还是小心为上。那恰好这时已经发布了10.13.3了,那肯定装最新的咯,就动手呗~然后发现怎么都进不去安装界面。。。。。。
我的准备:发现变了好多东西,加载AppleALC要配合lilu.kext了,多了好多新的内核文件,具体可以看Rehabman大神的这两个帖子https://www.tonymacx86.com/threads/guide-using-clover-to-hotpatch-acpi.200137/#post-1308262,三楼是关于屏蔽独显的,以及https://www.tonymacx86.com/threads/guide-disabling-discrete-graphics-in-dual-gpu-laptops.163772/(我的例子都是笔记本的,没用过台式,但应该差不多吧)
例子_a:部分笔记本的_OFF方法中不含EC相关的,这样的方式基本是最简单的,只需直接在_INI中调用_OFF首先肯定是clover按F4提取,取其中的DSDT和SSDT,放到你喜欢的位置,比如桌面的origin文件夹里,然后反编译:cd desktop/origin
iasl -da -dl *.aml
然后快速找出含_OFF的dsl,在终端中输入grep -i _OFF *dsl

会得到结果:SSDT-6-GBTUACPI.dsl:                              _OFF ()
SSDT-6-GBTUACPI.dsl:     Method (_OFF, 0, Serialized)  // _OFF: Power Off
SSDT-6-GBTUACPI.dsl:     Method (_OFF, 0, NotSerialized)  // _OFF: Power Off
SSDT-6-GBTUACPI.dsl:     Method (_OFF, 0, NotSerialized)  // _OFF: Power Off
SSDT-6-GBTUACPI.dsl:     Store ("NvP2-_Off ", Debug)
也就是说这个方法在SSST-6中,找到我们需要的的_OFF方法,如下:Method (_OFF, 0, Serialized)  // _OFF: Power Off
{
        P8XH (Zero, 0x76)
        If (LEqual (CTXT, Zero))
        {
                 Store (VGAR, VGAB)
                Store (One, CTXT)
        }
        SGOF ()
}
发现没有EC相关的,再搜索SGOF方法,在SSDT-5中,这个方法里也没有和EC相关的,所以SSDT_DGPU可以写成这样,只要_OFF的路径正确就可以成功,如下:
DefinitionBlock("", "SSDT", 2, "hack", "D-DGPU", 0)
{
    External(\_SB.PCI0.PEG0.PEGP._OFF, MethodObj)
         Device(RMD1)
         {
                Name(_HID, "RMD10000")
                Method(_INI, 0, NotSerialized)  // _INI: Initialize
                {
                        If (CondRefOf(\_SB.PCI0.PEG0.PEGP._OFF))
                        {
                                   \_SB.PCI0.PEG0.PEGP._OFF()
                         }
                 }
        }
}
或者直接更简单的写成,如下:
DefinitionBlock("", "SSDT", 2, "hack", "DGPU", 0)
{
    External(_SB.PCI0.PEG0.PEGP._OFF, MethodObj)
    Method(_SB.PCI0.PEG0.PEGP._INI) { _OFF() }
}
有些情况下,得用_PS3代替_OFF,两个都得试试才知道哪个好,写法如下:(这个是我在上述Rehabman的帖子里看到的
DefinitionBlock("", "SSDT", 2, "hack", "DGPU", 0)
{
    External(_SB.PCI0.PEG0.PEGP._PS3, MethodObj)
    Method(_SB.PCI0.PEG0.PEGP._INI) { _PS3() }
}
然后重命名_INI方法--->>XINI即可
整体思路:直接用_INI方法调用_OFF

例子_b:第二种情况就是在_OFF方法中会有EC相关的内容,这时,需要将EC相关内容放到_REG方法中,以延迟启动(有点忘记原因了,应该是会先加载_INI,而后加载_REG。。。)
在这个例子中(具体可以阅读前面提到的Rehabman的链接),所需要的_OFF方法在SSDT-8.dsl中,看下原始代码:
Method (_OFF, 0, Serialized)  // _OFF: Power Off
{
      If (LEqual (CTXT, Zero))
      {
      \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)
      If (LNotEqual (GPRF, One))
      {
             Store (VGAR, VGAB)
      }

      Store (One, CTXT)
      }

      SGOF ()
}
这里可以看到_OFF方法中含有EC相关内容,即\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero),所以在这里我们需要将_OFF修改,使ec相关的内容无效,修改如下:
Method(_OFF, 0, Serialized)
{
      If (LEqual (CTXT, Zero))
      {
      /* \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) */   ///*...*/中的内容会无效,也可以删除这行
      If (LNotEqual (GPRF, One))
      {
             Store (VGAR, VGAB)
      }
            Store (One, CTXT)
      }
       SGOF ()
}
而且也需要调用原始的_INI方法,但不调用原始的_OFF方法(后面会重命名),而调用修改后的_OFF,如下
Method(_INI)
{
      XINI() // 调用原始的_INI, 而现在已经被命名为XINI
      _OFF() // 调用修改后的 _OFF
      Method(_OFF, 0, Serialized)
     {
      If (LEqual (CTXT, Zero))
      {
      /* \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) */   ///*...*/中的内容会无效,也可以删除这行
      If (LNotEqual (GPRF, One))
      {
             Store (VGAR, VGAB)
      }
             Store (One, CTXT)
      }
       SGOF ()
      }
}
而将之前无效化的(删除的)\_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero)放在_REG方法中调用,即:
Scope(_SB.PCI0.LPCB.EC0)
{
       Method(_REG, 2)
      {
            XREG(Arg0, Arg1) // 调用原始的_REG, 而现在被命名为 XREG
            If (3 == Arg0 && 1 == Arg1) // EC ready?
            {
                  \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) //从_OFF转移过来的
       }
}
所以整个SSDT-DGPU可以写成:
DefinitionBlock("", "SSDT", 2, "hack", "D-GPU", 0)
{
    External(_SB.PCI0.RP05.PEGP, DeviceObj)
    External(_SB.PCI0.RP05.PEGP.XINI, MethodObj)
    External(_SB.PCI0.RP05.PEGP.XOFF, MethodObj)
    External(_SB.PCI0.RP05.PEGP.XINI, MethodObj)
    External(_SB.PCI0.LPCB.EC0, DeviceObj)
    External(_SB.PCI0.LPCB.EC0.XREG, MethodObj)
    External(_SB.PCI0.LPCB.EC0.SPIN, MethodObj)
    External(_SB.PCI0.RP05.PEGP.CTXT, IntObj)
    External(_SB.PCI0.RP05.PEGP.GPRF, IntObj)
    External(_SB.PCI0.RP05.PEGP.VGAR, FieldUnitObj)
    External(_SB.PCI0.RP05.PEGP.VGAB, BuffObj)
    External(_SB.PCI0.RP05.PEGP.SGOF, MethodObj)

       Scope(_SB.PCI0.RP05.PEGP)
      {
            Method(_INI)
            {
             XINI() // 调用原始的_INI, 而现在已经被命名为XINI
            _OFF() // 调用修改后的_OFF
             }
             Method(_OFF, 0, Serialized)
             {
                      If (LEqual (CTXT, Zero))
                      {
                       /* \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) */
                      If (LNotEqual (GPRF, One))
                     {
                              Store (VGAR, VGAB)
                      }
                     Store (One, CTXT)
                      }
            SGOF ()
            }
      }
      Scope(_SB.PCI0.LPCB.EC0)
      {
            OperationRegion(RME3, EmbeddedControl, 0x00, 0xFF)
            Method(_REG, 2)
            {
                   XREG(Arg0, Arg1) // 调用原始的_REG, 而现在被命名为 XREG
                  If (3 == Arg0 && 1 == Arg1) // EC ready?
                  {
                         \_SB.PCI0.LPCB.EC0.SPIN (0x96, Zero) //从_OFF转移过来的
                  }
            }
     }
}
其中OperationRegion(RME3, EmbeddedControl, 0x00, 0xFF) ,添加这个是因为在编译时会出现“39, 3079, _REG has no corresponding Operation Region”的警告,添加这个可以解决。
然后我们需要重命名这几个方法:
_SB.PCI0.RP05.PEGP._INI -> XINI
_SB.PCI0.RP05.PEGP._OFF -> XOFF
_SB.PCI0.LPCB.EC0._REG -> XREG
需要用到这几个方法所在的*dsl文件,比如这里是DSDT.aml, SSDT-7.aml, and SSDT-8.aml,在终端中输入
iasl -dl -l DSDT.aml SSDT-7.aml SSDT-8.aml
可以得到三个*dsl,比如需要重命名_REG,它在dsdt中,打开,并搜索找到它的位置
Method (_REG, 2, NotSerialized)  // _REG: Region Availability
            {

  D2B8: 14 12 5F 52 45 47 02                             // .._REG.

                If (LEqual (Arg0, 0x03))
                {

  D2BF: A0 0B 93 68 0A 03                                // ...h..

                    Store (Arg1, ECFL)
                }
            }
        }
    }
就可以写成
Comment:change Method(_REG,0,Serialized) to XREG, optionally pair with SSDT-DGPU.aml
Find:5F 52 45 47 02
Replace:58 52 45 47 02
Replace中的数值,应该是随便一个数字更改,这里将5F改成58,_INI与_OFF方法也类似,在相应的*dsl文件中找到其位置,再更改数值,这样就完成了整个屏蔽独显的hotpatch,最后放入clover中加载,sortorder中也加入相应SSDT的名字。
整体思路:移除_OFF中的EC相关内容,调用原始_INI方法下的修改后的_OFF方法,而EC部分转移到_REG方法中

例子_c:这是我自己的例子与例子b稍有不同,我的_OFF方法之中没有EC相关的内容,但是在_OFF方法中的SGOF方法中却有,我们看下原始代码
SSDT-6中的原始_OFF:
Method (_OFF, 0, Serialized)  // _OFF: Power Off
{
       P8XH (Zero, 0x76)
      If (LEqual (CTXT, Zero))
      {
            Store (VGAR, VGAB)
            Store (One, CTXT)
      }

            SGOF ()
}
这里并没有与EC相关内容,于是我们查看下SGOF方法,找到在SSDT-5中:
Method (SGOF, 0, Serialized)
{
      If (LEqual (CCHK (Zero), Zero))
      {
            Return (Zero)
      }

      Store (Zero, ONOF)
      Store (LCTL, ELCT)
      Store (SVID, HVID)
     Store (SDID, HDID)
      Store (EMLW, DMLW)
      SPP0 ()
      Store (One, LNKD)
      While (LNotEqual (LNKS, Zero))
      {
            Sleep (One)
      }

      Store (Zero, \_SB.PCI0.LPCB.EC.FDAT)    //EC相关
      Store (0xBF, \_SB.PCI0.LPCB.EC.FCMD)  //EC相关
      Sleep (0x012C)
      Return (Zero)
}
在SGOF中有与EC相关内容,于是采取如下策略:因_OFF不直接关联EC,所以在_INI方法中可调用原始的_OFF,但是_OFF得调用修改后的SGOF,可以写成如下:
Method (_INI)  // _INI: Initialize
{
      XINI() // call original _INI, now renamed XINI。调用原始_INI,这里被命名为XINI
      _OFF() // call _OFF     调用原始的_OFF,_OFF没有修改
      SGOF() // call patched SGOF     调用修改后的SGOF
}
然后是修改后的SGOF方法,我直接删除了EC相关内容:
Method (SGOF, 0, Serialized)
{
      If (LEqual (CCHK (Zero), Zero))
      {
            Return (Zero)
      }

      Store (Zero, ONOF)
      Store (LCTL, ELCT)
      Store (SVID, HVID)
      Store (SDID, HDID)
      Store (EMLW, DMLW)
      SPP0 ()
      Store (One, LNKD)
      While (LNotEqual (LNKS, Zero))
      {
            Sleep (One)
      }

      Sleep (0x012C)
      Return (Zero)
}
然后把EC部分移动到——REG方法中调用,如下:
Method (_REG, 2, NotSerialized)  // _REG: Region Availability
{
            XREG(Arg0, Arg1) //调用原始_REG,被命名为XREG   
            If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
            {
                Store (Zero, \_SB.PCI0.LPCB.EC.FDAT)
                Store (0xBF, \_SB.PCI0.LPCB.EC.FCMD)
            }
}
所以SSDT-DGPU可以写成:
DefinitionBlock("", "SSDT", 2, "hack", "DGPU", 0)
{
    External(\_SB.PCI0.PEG0.PEGP, DeviceObj)
    External(\_SB.PCI0.PEG0.PEGP._OFF, MethodObj)
    External(_SB.PCI0.LPCB.EC.XREG, MethodObj)
    External(\_SB.PCI0.PEG0.PEGP.XINI, MethodObj)
    External (CCHK, MethodObj)
    External(ONOF, IntObj)
    External(LCTL,IntObj)
    External(ELCT, IntObj)
    External(SVID, IntObj)
    External(HVID, IntObj)
    External(SDID, IntObj)
    External(HDID, IntObj)
    External(EMLW, IntObj)
    External(DMLW, IntObj)
    External(LNKD, IntObj)
    External(LNKS, IntObj)
    External(SPP0, MethodObj)
    External(_SB_.PCI0.LPCB.EC__.FCMD, FieldUnitObj)
    External(_SB_.PCI0.LPCB.EC__.FDAT, FieldUnitObj)
    External(_SB.PCI0.LPCB.EC, DeviceObj)

    Scope (\_SB.PCI0.PEG0.PEGP)
    {
        Method (_INI)  // _INI: Initialize
        {
            XINI() // call original _INI, now renamed XINI
            _OFF() // call _OFF
            SGOF() // call patched SGOF      
        }

        Method (SGOF, 0, Serialized)
        {
            If (LEqual (CCHK (Zero), Zero))
            {
                Return (Zero)
            }

            Store (Zero, ONOF)
            Store (LCTL, ELCT)
            Store (SVID, HVID)
            Store (SDID, HDID)
            Store (EMLW, DMLW)
            SPP0 ()
            Store (One, LNKD)
            While (LNotEqual (LNKS, Zero))
            {
                Sleep (One)
            }

            Sleep (0x012C)
            Return (Zero)
         }
    }
    Scope (_SB.PCI0.LPCB.EC)
    {
        OperationRegion(RME3, EmbeddedControl, 0x00, 0xFF)
        Method (_REG, 2, NotSerialized)  // _REG: Region Availability
        {
            XREG(Arg0, Arg1) // call original _REG, now renamed XREG
            //added to turn nvidia/radeon off
            If (LAnd(LEqual(Arg0,3),LEqual(Arg1,1)))
            {
                Store (Zero, \_SB.PCI0.LPCB.EC.FDAT)
                Store (0xBF, \_SB.PCI0.LPCB.EC.FCMD)
            }
        }        
    }
}
然后,这里需要重命名方法是_INI方法,SGOF方法和_REG方法,方法参见例子_b末尾,
_INI -> XINI
SGOF -> XGOF
_REG -> XREG
在Rehabmana的帖子中还有一个PGOF的例子,需要的景友具体可以开头提到的链接里看看
整体思路:对于_OFF方法,里面没有EC相关,直接放在_INI中调用,但是_OFF方法中的SGOF方法重新修改,即调用原始_OFF方法,但其中的SGOF方法则调用修改后的;然后把EC部分丢到_REG中。

这里是我的修改好的SSDT-DGPU和原始SSDT








这里感谢下 limurphy 大神的提点,让我解决了电池驱动问题,也感谢之前其他景友的帮忙

我保证不会再改了,只要不出问题,我也不想的。。。。天知道第一次编辑全挂了
如果有错误,或者描述不准确请大家多多担待,大家新年快乐~
我要睡觉了。。。


这个代码编辑器这么坑爹吗,又丢的只剩下第一行,算了不用这个了,我最后再试一次,再上传个PDF吧,上面编辑出错的看PDF吧





附件: 你需要登录才可以下载或查看附件。没有帐号?注册
2

查看全部评分

Rank: 9

UID
750326
帖子
4537
PB币
3277
贡献
0
技术
102
活跃
2890
发表于 2018-3-9 21:35:53 IP属地北京 来自手机 |显示全部楼层
了解一下么

系统工程师

Rank: 2Rank: 2

UID
1105096
帖子
302
PB币
0
贡献
0
技术
1
活跃
582
发表于 2018-3-9 21:45:29 IP属地山东 |显示全部楼层
mark 一下

Rank: 5Rank: 5Rank: 5

UID
1636165
帖子
548
PB币
107
贡献
0
技术
12
活跃
963
发表于 2018-3-9 22:05:21 IP属地浙江 |显示全部楼层
本帖最后由 reticencezcl 于 2018-3-10 12:12 编辑

终于好了

Rank: 2Rank: 2

UID
697128
帖子
451
PB币
0
贡献
0
技术
2
活跃
346
发表于 2018-3-11 10:02:47 IP属地广东 |显示全部楼层
谢谢分享,我来试试

Rank: 2Rank: 2

UID
4811417
帖子
387
PB币
855
贡献
0
技术
0
活跃
1966
发表于 2018-3-14 20:30:18 IP属地吉林 |显示全部楼层
我已经按照教程屏蔽了独显,但是放进patched文件夹开机没起作用,能帮忙看看吗?

独显相关文件在ssdt5,包含ec访问,已转移到reg,

https://pan.baidu.com/s/1-q2nFmSge58tUCp64ZmLQA   文件包含屏蔽修改文件和无错dsl文件
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 5Rank: 5Rank: 5

UID
1636165
帖子
548
PB币
107
贡献
0
技术
12
活跃
963
发表于 2018-3-15 11:25:46 IP属地浙江 |显示全部楼层
qini95 发表于 2018-3-14 20:30
我已经按照教程屏蔽了独显,但是放进patched文件夹开机没起作用,能帮忙看看吗?

独显相关文件在ssdt5,包 ...

你的SSDT-DGPU的hotpatch给出来,还有“没作用”是在-v模式下出现了什么错误?

Rank: 2Rank: 2

UID
4811417
帖子
387
PB币
855
贡献
0
技术
0
活跃
1966
发表于 2018-3-15 13:47:05 IP属地江苏 来自手机 |显示全部楼层
感谢提醒,刚看了下改后没调用off,现在以屏蔽成功了。0.0
马虎的我

Rank: 2Rank: 2

UID
4811417
帖子
387
PB币
855
贡献
0
技术
0
活跃
1966
发表于 2018-3-15 13:50:47 IP属地江苏 来自手机 |显示全部楼层
reticencezcl 发表于 2018-3-15 11:25
你的SSDT-DGPU的hotpatch给出来,还有“没作用”是在-v模式下出现了什么错误?

感谢提醒,马虎了。

Rank: 5Rank: 5Rank: 5

UID
1636165
帖子
548
PB币
107
贡献
0
技术
12
活跃
963
发表于 2018-3-15 13:58:48 IP属地浙江 |显示全部楼层
qini95 发表于 2018-3-15 13:50
感谢提醒,马虎了。

不客气,祝你成功

Rank: 2Rank: 2

UID
3476938
帖子
207
PB币
198
贡献
0
技术
0
活跃
225
发表于 2018-3-15 15:35:33 IP属地广东 |显示全部楼层
mark一下,回去看,谢谢楼主

Rank: 1

UID
2425935
帖子
110
PB币
86
贡献
0
技术
0
活跃
130
发表于 2018-3-16 22:55:43 IP属地浙江 |显示全部楼层
虽然看不懂,等我装好黑苹果后再研究

Rank: 2Rank: 2

UID
2674890
帖子
281
PB币
181
贡献
0
技术
0
活跃
1034
发表于 2018-3-17 08:34:39 IP属地上海 |显示全部楼层
科普帖子 值得一顶 ,谢谢分享经验

Rank: 5Rank: 5Rank: 5

UID
1648373
帖子
776
PB币
0
贡献
0
技术
0
活跃
1425
发表于 2018-3-19 17:12:28 IP属地未知 |显示全部楼层
一直在寻找 谢谢了
头像被屏蔽

UID
4805871
帖子
3474
PB币
3838
贡献
0
技术
8
活跃
529
发表于 2018-3-19 17:19:00 IP属地广东 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

Rank: 2Rank: 2

UID
2790918
帖子
101
PB币
0
贡献
0
技术
0
活跃
180
发表于 2018-3-19 22:20:02 IP属地山东 |显示全部楼层
进来学习下

Rank: 5Rank: 5Rank: 5

UID
1636165
帖子
548
PB币
107
贡献
0
技术
12
活跃
963
发表于 2018-3-20 12:39:40 IP属地浙江 |显示全部楼层
关于为何调用_PS3可以看15F 的解释

Rank: 7Rank: 7Rank: 7

UID
4781711
帖子
1741
PB币
1099
贡献
0
技术
0
活跃
2196
发表于 2018-3-28 20:50:41 IP属地上海 |显示全部楼层
hotpatch好用不。

Rank: 5Rank: 5Rank: 5

UID
607875
帖子
625
PB币
559
贡献
0
技术
0
活跃
855
发表于 2018-3-30 12:56:36 IP属地浙江 |显示全部楼层
看的有点懵逼,再研究研究。

Rank: 1

UID
4765632
帖子
99
PB币
0
贡献
0
技术
0
活跃
93
发表于 2018-3-31 13:36:29 IP属地江西 |显示全部楼层
学习学习!
回顶部
Copyright (C) 2005-2024 pcbeta.com, All rights reserved
Powered by Discuz!  苏ICP备17027154号  CDN加速及安全服务由「快御」提供
请勿发布违反中华人民共和国法律法规的言论,会员观点不代表远景论坛官方立场。
远景在线 | 远景论坛 | 苹果论坛 | Win11论坛 | Win10论坛 | Win8论坛 | Win7论坛 | WP论坛 | Office论坛