知識マップ: クリップボードとドラッグ&ドロップの仕組み ── OLEデータ転送を業務アプリで正しく扱う
記事「クリップボードとドラッグ&ドロップの仕組み ── OLEデータ転送を業務アプリで正しく扱う」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
クリップボードには1つのデータではなく、同じ内容が複数の形式で同時に置かれます。貼り付け先が理解できる形式を選ぶため、同じコピーでも貼り付け先によって結果が変わります。テキストはコードページ依存のCF_TEXTではなくCF_UNICODETEXTが正で、ファイルはCF_HDROPというパスの配列、書式付きテキストはバイトオフセットのヘッダーを持つ「HTML Format」で運ばれます。「コピー元アプリを閉じたら貼れなくなった」の正体は遅延レンダリングで、終了時の確定処理までがワンセットです。貼り付けるデータは外部由来の信用できない入力として扱います。ドラッグ&ドロップの正体はCOMで、クリップボードと同じIDataObjectをIDropSourceとIDropTargetがDoDragDropのループ越しに受け渡します。
flowchart LR
accTitle: クリップボードとドラッグ&ドロップの知識マップ
accDescr: クリップボードが同じ内容の複数形式を同時に持つ構造、CF_UNICODETEXTやCF_HDROP・HTML Formatといった形式、遅延レンダリングと終了時の確定、監視の推奨方式、ドラッグ&ドロップがIDataObjectを共有するCOMの仕組み、OleInitializeとUIPIの制約を示す図
windows_clipboard["Windowsのクリップボード"]
ole_drag_drop["OLEドラッグ&ドロップ"]
clipboard_format["クリップボード形式"]
cf_text["CF_TEXT"]
cf_hdrop["CF_HDROP"]
html_clipboard_format["HTML Format(登録形式)"]
dotnet_clipboard_class[".NETのClipboardクラス"]
oleinitialize_sta["OleInitialize(STA)"]
delayed_rendering["遅延レンダリング"]
oleflushclipboard["OleFlushClipboard"]
ui_thread_context["UIスレッドのコンテキスト"]
ole_data_object["IDataObject"]
untrusted_input_validation["信頼できない入力としての検証"]
clipboard_format_listener["AddClipboardFormatListener / WM_CLIPBOARDUPDATE"]
clipboard_history_policy["クリップボード履歴・デバイス間同期のポリシー"]
group_policy["グループポリシー"]
intune["Microsoft Intune"]
clipboard_history["クリップボード履歴・デバイス間同期"]
rdp_clipboard_redirection["RDPのクリップボードリダイレクト"]
uipi["UIPI(User Interface Privilege Isolation)"]
admin_rights["管理者権限"]
dragdropeffects["DragDropEffects(Copy / Move / Link)"]
hydration["ハイドレーション"]
windows_clipboard -->|"利用する"| clipboard_format
cf_text -->|"用いるのは非推奨"| windows_clipboard
cf_hdrop -->|"実装を担う"| clipboard_format
html_clipboard_format -->|"実装を担う"| clipboard_format
dotnet_clipboard_class -->|"前提とする"| oleinitialize_sta
delayed_rendering -->|"原因になり得る"| windows_clipboard
oleflushclipboard -->|"防止する"| delayed_rendering
delayed_rendering -.->|"原因になり得る"| ui_thread_context
ole_data_object -->|"前提とする"| untrusted_input_validation
windows_clipboard -->|"で確認できる"| clipboard_format_listener
clipboard_history_policy -->|"で構成できる"| group_policy
clipboard_history_policy -.->|"で構成できる"| intune
clipboard_history_policy -->|"防止する"| clipboard_history
rdp_clipboard_redirection -->|"で構成できる"| group_policy
ole_drag_drop -->|"利用する"| ole_data_object
ole_drag_drop -->|"前提とする"| oleinitialize_sta
uipi -->|"防止する"| ole_drag_drop
admin_rights -->|"原因になり得る"| uipi
ole_drag_drop -->|"利用する"| dragdropeffects
cf_hdrop -.->|"原因になり得る"| hydration
概念間の関係(全20件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Windowsのクリップボードはクリップボード形式を利用します。
- CF_TEXTをWindowsのクリップボードに用いることは推奨されません。
- CF_HDROPはクリップボード形式の実装を担います。
- HTML Format(登録形式)はクリップボード形式の実装を担います。
- .NETのClipboardクラスはOleInitialize(STA)を前提とします。
- 遅延レンダリングはWindowsのクリップボードの原因になることがあります。
- OleFlushClipboardは遅延レンダリングを防ぎます。
- 遅延レンダリングはUIスレッドのコンテキストの原因になることがあります。
- IDataObjectは信頼できない入力としての検証を前提とします。
- WindowsのクリップボードはAddClipboardFormatListener / WM_CLIPBOARDUPDATEで確認できます。
- クリップボード履歴・デバイス間同期のポリシーはグループポリシーで構成できます。
- クリップボード履歴・デバイス間同期のポリシーはMicrosoft Intuneで構成できます。
- クリップボード履歴・デバイス間同期のポリシーはクリップボード履歴・デバイス間同期を防ぎます。
- RDPのクリップボードリダイレクトはグループポリシーで構成できます。
- OLEドラッグ&ドロップはIDataObjectを利用します。
- OLEドラッグ&ドロップはOleInitialize(STA)を前提とします。
- UIPI(User Interface Privilege Isolation)はOLEドラッグ&ドロップを防ぎます。
- 管理者権限はUIPI(User Interface Privilege Isolation)の原因になることがあります。
- OLEドラッグ&ドロップはDragDropEffects(Copy / Move / Link)を利用します。
- CF_HDROPはハイドレーションの原因になることがあります。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。