"應用程式G"到底是甚麼? 每次關機都出現 - Windows
By Linda
at 2020-06-09T06:38
at 2020-06-09T06:38
Table of Contents
※ 引述《HIAWIE (魯歪妹)》之銘言:
: 每次關機的時候
: 都會出現目前正在使用的程式
: 系統會問我確定要關機嗎
: 而那個出現的應用程式名稱就一個字"G"
: 那到底是甚麼東西啊
: 病毒嗎?
: 請問有沒有人知道?
: → Ricestone: 昨天還前天我關機的時候也看到這莫名其妙的名字 06/08 14:18
: → Ricestone: 找到解釋了 https://zd.net/2XELFhv 06/08 14:21
來簡單翻譯重述一下這篇文章
首先, 會顯示出 G 一個字是一個年代久遠(!)的程式碼 bug
它其實應該要顯示「GDI+ 視窗 (<程式 exe 名>)」的
(文中有說這個 bug 在 20H1 (即 2004) 版本會修掉, 修掉之後就會顯示全名了)
之所以這個視窗的名字會這樣是因為, GDI+ 這東西最早最早是 Win98 的東西
最初在寫的時候雖然有考慮到當時還沒有廣為使用的 Unicode
但其中註冊某視窗時卻直接使用了給 ANSI 字串時要用的系統呼叫
(文中有提到是 DefWindowProcA, 這個 A 字即是 ANSI 版之意)
後來團隊在把程式碼轉編譯為 Unicode 版本時
這個系統呼叫由於是直寫「我要 ANSI 版」而不是「我要程式其他地方用的那版」
(通常這會是在程式中不寫那個 A 字, 然後用其他方式指定整支程式要用哪一版)
而這兩版的這個呼叫的參數是一樣的, 所以沒有在轉編譯時被編譯器抓到就留下來了
因此這表示系統會把一個要做為視窗標題的 Unicode 字串當成 ANSI 字串來看
其結果就是這個標題字串就會只剩下第一個字
(這一點其實只有當開頭是英文才成立, 不過這裡這個字串就是這樣)
那個顯示誰無法關閉的畫面其實是會去抓那支程式的其中一個視窗標題來顯示
而當沒有可見視窗時就會隨便抓一個隱藏的視窗的標題顯示
那如果抓到這種 GDI+ 的視窗的話就會發生只顯示 G 字的問題了
--
01010011 01101110 01010110 01111010 01100100 01000011 01000010 01001110 011000
10 00110010 00110101 01110000 01100001 00110010 01000101 01110101 01001001 010
00101 01001110 01101000 01100010 01101001 01000010 00110101 01100010 00110011
01010101 01100111 01100001 01000111 01010110 01101000 01100011 01101001 010000
10 01110100 01011010 01010100 00111000 01100111 01010010 01000111 00111001 011
10010 01100001 01010011 01000010 01000101 01100010 00110010 01110100 01110000
--
: 每次關機的時候
: 都會出現目前正在使用的程式
: 系統會問我確定要關機嗎
: 而那個出現的應用程式名稱就一個字"G"
: 那到底是甚麼東西啊
: 病毒嗎?
: 請問有沒有人知道?
: → Ricestone: 昨天還前天我關機的時候也看到這莫名其妙的名字 06/08 14:18
: → Ricestone: 找到解釋了 https://zd.net/2XELFhv 06/08 14:21
來簡單翻譯重述一下這篇文章
首先, 會顯示出 G 一個字是一個年代久遠(!)的程式碼 bug
它其實應該要顯示「GDI+ 視窗 (<程式 exe 名>)」的
(文中有說這個 bug 在 20H1 (即 2004) 版本會修掉, 修掉之後就會顯示全名了)
之所以這個視窗的名字會這樣是因為, GDI+ 這東西最早最早是 Win98 的東西
最初在寫的時候雖然有考慮到當時還沒有廣為使用的 Unicode
但其中註冊某視窗時卻直接使用了給 ANSI 字串時要用的系統呼叫
(文中有提到是 DefWindowProcA, 這個 A 字即是 ANSI 版之意)
後來團隊在把程式碼轉編譯為 Unicode 版本時
這個系統呼叫由於是直寫「我要 ANSI 版」而不是「我要程式其他地方用的那版」
(通常這會是在程式中不寫那個 A 字, 然後用其他方式指定整支程式要用哪一版)
而這兩版的這個呼叫的參數是一樣的, 所以沒有在轉編譯時被編譯器抓到就留下來了
因此這表示系統會把一個要做為視窗標題的 Unicode 字串當成 ANSI 字串來看
其結果就是這個標題字串就會只剩下第一個字
(這一點其實只有當開頭是英文才成立, 不過這裡這個字串就是這樣)
那個顯示誰無法關閉的畫面其實是會去抓那支程式的其中一個視窗標題來顯示
而當沒有可見視窗時就會隨便抓一個隱藏的視窗的標題顯示
那如果抓到這種 GDI+ 的視窗的話就會發生只顯示 G 字的問題了
--
01010011 01101110 01010110 01111010 01100100 01000011 01000010 01001110 011000
10 00110010 00110101 01110000 01100001 00110010 01000101 01110101 01001001 010
00101 01001110 01101000 01100010 01101001 01000010 00110101 01100010 00110011
01010101 01100111 01100001 01000111 01010110 01101000 01100011 01101001 010000
10 01110100 01011010 01010100 00111000 01100111 01010010 01000111 00111001 011
10010 01100001 01010011 01000010 01000101 01100010 00110010 01110100 01110000
--
Tags:
Windows
All Comments
By Eartha
at 2020-06-11T00:33
at 2020-06-11T00:33
By Franklin
at 2020-06-11T03:50
at 2020-06-11T03:50
By Frederica
at 2020-06-12T01:28
at 2020-06-12T01:28
By Jessica
at 2020-06-14T19:29
at 2020-06-14T19:29
By Ida
at 2020-06-18T17:44
at 2020-06-18T17:44
Related Posts
Winodows update 更新但不會動 吃CPU效能
By Aaliyah
at 2020-06-08T21:10
at 2020-06-08T21:10
老電腦vista 升級win7的可能性
By Charlie
at 2020-06-08T01:58
at 2020-06-08T01:58
"應用程式G"到底是甚麼? 每次關機都出現
By Zenobia
at 2020-06-07T22:21
at 2020-06-07T22:21
win10 消腫工具
By Damian
at 2020-06-07T15:13
at 2020-06-07T15:13
win10 消腫工具
By Ida
at 2020-06-06T22:42
at 2020-06-06T22:42