標籤:clip art gpo hang last 無法 clipboard 傳遞 不同
ChangeWindowMessageFilterEx 函數,為指定視窗修改使用者介面權限隔離 (UIPI) 訊息過濾器。
函數原型:
[cpp] view plain copy
- BOOL WINAPI ChangeWindowMessageFilterEx(
- __in HWND hWnd,
- __in UINT message,
- __in DWORD action,
- __inout_opt PCHANGEFILTERSTRUCT pChangeFilterStruct
- );
【參數】
hWnd
要修改其 UIPI 訊息過濾器的視窗控制代碼。
message
要允許或阻止通過訊息過濾器的訊息。
action
要執行的操作,可以採取下列值之一:
MSGFLT_ALLOW :允許訊息通過過濾器。允許視窗接收該訊息,不管源訊息是什麼,甚至它來自一個低特權的進程。
MSGFLT_DISALLOW :如果訊息來自低特權的進程,阻止它轉遞給視窗。
MSGFLT_RESET :為視窗重設訊息過濾器為預設,任何全域允許訊息或進程範圍內的將通過。但不包含這兩個類別,其中其中來自低特權的進程將被阻塞。
pChangeFilterStruct
指向CHANGEFILTERSTRUCT結構指標的可選項。
【傳回值】
如果函數成功,則傳回值為非零值。
如果該函數失敗,則傳回值為零。要擷取擴充的錯誤的資訊,請調用GetLastError 。
eg:
//用於取消低許可權程式向高許可權程式發送訊息不成功的限制
BOOL bRes = ChangeWindowMessageFilterEx(m_hWnd, WM_COPYDATA, MSGFLT_ALLOW, NULL);
--------------------------------------------------------------------------------------------------------------------------------
UIPI:使用者介面權限隔離(User Interface Privilege Isolation),是 Windows 7 通過 MIC 機制新引入的一種安全特性,用於攔截接收比自身進程 MIC 等級低的進程發來的訊息。UIPI 的目的是為了規範不同進程視窗之間的視窗訊息處理過程,預設情況下,高許可權進程不會接收到低許可權進程發送的視窗訊息的,但是低許可權進程能夠接收到高許可權進程的視窗訊息。UIPI 的本質是系統檢查目標視窗和發送方是否具有相同的 MIC 等級或者發送方具有更高的 MIC 等級,如果符合上述條件,則允許訊息的傳遞,否則將訊息丟棄。
因此,在 Windows 7 作業系統中啟動並執行使用者進程,如果運行時具有不同的完整性等級,即具有不同的 MIC 等級,那麼相互間的通訊將會無法像 Windows XP 那樣正常進行。
MIC:訊息完整性檢查(Message Integrity Check),是 Windows 7 增加的 Windows 安全性實體存取控制安全機制,系統利用完整性層級對一個安全性實體進行標記,通過降低進程的完整性層級可以限制其對安全性實體的寫入許可權,這一點類似於使用者帳戶組的成員被限制訪問系統組件這種方式。完整性檢查機制使得用更少的許可權或以更低的完整性層級運行一些程式,會降低進程修改系統或損害使用者資料檔案的可能性。在 Windows 7 中訊息完整性檢查分為 6 個等級,如下所示:
| MIC等級 |
說明 |
| SECURITY_MANDATORY_UNTRUSTED_RID |
不信任的MIC等級 |
| SECURITY_MANDATORY_LOW_RID |
低MIC等級,如IE |
| SECURITY_MANDATORY_MEDIUM_RID |
中MIC等級,預設為這個等級,如Explorer |
| SECURITY_MANDATORY_HIGH_RID |
高MIC等級,以管理員身份啟動並執行程式 |
| SECURITY_MANDATORY_SYSTEM_RID |
系統MIC等級,一般是服務應用程式 |
| SECURITY_MANDATORY_PROTECTED_PROCESS_RID |
被保護進程的MIC等級
|
70158598
ChangeWindowMessageFilterEx 概述(用於取消低許可權程式向高許可權程式發送訊息不成功的限制,分6個等級)