之前发在msfn.org的,现在来这里转述一遍
http://www.msfn.org/board/index.php?showtopic=128585
win32k.sys在SP3后有n个补丁,其中的SP3QFE分支(不管此补丁是否有QDR分支或SP2QFE分支,在SP3QFE分支中的情况都相同)有以下bug:
这是英文原版RTM以及所有SP3GDR分支中,win32k.sys资源内的消息表的一部分(message table)
.....
236, "show status"
237, "EnableHexNumpad"
606, "DdeSendTimeout"
607, "LowLevelHooksTimeout"
.....
这是英文SP3QFE分支中(958282-v2/959252-v2/954211)中,win32k.sys消息表的一部分
.....
236, "show status"
237, "EnableHexNumpad"
243, "Embedded Standard"
244, "Embedded POSReady 2009"
606, "DdeSendTimeout"
607, "LowLevelHooksTimeout"
.....
我们看到,多了两个新条目 #243 和 #244.在kb943326中,则是仅多243一条。
问题就在于,在中文(日文也有这个问题,其他非英文语言没有看过)的SP3QFE分支的win32k.sys中,导入消息表资源时,未考虑进新添加的这两条资源,也就是说,成了下面的结果:
.....
236, "show status"
237, "EnableHexNumpad"
243, "DdeSendTimeout"
244, "LowLevelHooksTimeout"
606, "MouseSensitivity"(原608)
607, "CaretWidth"(原609)
.....
新加入的#243和#244“占用”了之前606和607的资源,同理,606、607…………所定义的资源也都逐个顺延两条。直到消息表的结束,末两条由于编译时分配不到语言资源,变成了英文的原文。
这样直接导致了一系列的消息错误问题。