次の方法で共有


ChangeWindowMessageFilter 関数 (winuser.h)

[ ChangeWindowMessageFilter 関数の使用は、プロセス全体のスコープがあるため、お勧めしません。 代わりに、 ChangeWindowMessageFilterEx 関数を使用して、必要に応じて特定のウィンドウへのアクセスを制御します。 ChangeWindowMessageFilter は、今後のバージョンの Windows ではサポートされない場合があります。]

ユーザー インターフェイス特権分離 (UIPI) メッセージ フィルターのメッセージを追加または削除します。

構文

BOOL ChangeWindowMessageFilter(
  [in] UINT  message,
  [in] DWORD dwFlag
);

パラメーター

[in] message

型: UINT

フィルターに追加または削除するメッセージ。

[in] dwFlag

型: DWORD

実行するアクション。 次のいずれかの値です。

[値] 意味
MSGFLT_ADD
1
メッセージをフィルターに追加します。 これは、メッセージの受信を許可する効果があります。
MSGFLT_REMOVE
2
フィルターから メッセージ を削除します。 これは、メッセージをブロックする効果があります。

戻り値

種類: BOOL

成功した場合は TRUE。それ以外の場合は FALSE。 詳細なエラー情報を得るには、GetLastError を呼び出します。

メモ メッセージはフィルターから正常に削除できますが、メッセージがブロックされる保証ではありません。 詳細については、「解説」を参照してください。
 

解説

UIPI は、低い整合性レベルの送信者からメッセージを受信できないようにするセキュリティ機能です。 WM_USER より上 の値を持つこのようなメッセージはすべて、既定でブロックされます。 フィルターは、直感に反して、許可されるメッセージの一覧です。 そのため、フィルターにメッセージを追加すると、メッセージを低い整合性の送信者から受信できますが、メッセージを削除すると、そのメッセージの受信がブロックされます。

フィルター設定に関係なく、フィルターを通過するには 、WM_USER 未満の値を持つ特定のメッセージが必要です。 この関数を呼び出して、フィルターからこれらのメッセージの 1 つを削除すると、 TRUE が返されます。 ただし、メッセージは呼び出し元プロセスによって引き続き受信されます。

SECURITY_MANDATORY_LOW_RID以下のプロセスでは、フィルターを変更できません。 これらのプロセスがこの関数を呼び出すと、失敗します。

整合性レベルの詳細については、「保護モードでのインターネット エクスプローラーの理解と動作」を参照してください。

要件

要件
サポートされている最小のクライアント Windows Vista [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2008 [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー winuser.h (Windows.h を含む)
Library User32.lib
[DLL] User32.dll