@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/windows-usb-device-handling-guide/#article>
    schema:about <https://comcomponent.com/knowledge/usb-connectivity-method-selection/>, <https://comcomponent.com/knowledge/usb-device-class/> ;
    schema:mentions <https://comcomponent.com/knowledge/virtual-com-port/>, <https://comcomponent.com/knowledge/hid/>, <https://comcomponent.com/knowledge/winusb/>, <https://comcomponent.com/knowledge/vendor-usb-sdk/>, <https://comcomponent.com/knowledge/umdf-driver/>, <https://comcomponent.com/knowledge/kmdf-driver/>, <https://comcomponent.com/knowledge/composite-usb-device/>, <https://comcomponent.com/knowledge/winusb-os-descriptor/>, <https://comcomponent.com/knowledge/concurrent-multi-app-access/>, <https://comcomponent.com/knowledge/usb-device-unique-identification/>, <https://comcomponent.com/knowledge/exclusive-hid-collection/>, <https://comcomponent.com/knowledge/usb-pnp-notification/>, <https://comcomponent.com/knowledge/usb-handle-invalidation/>, <https://comcomponent.com/knowledge/usb-selective-suspend/>, <https://comcomponent.com/knowledge/driver-catalog-signing/>, <https://comcomponent.com/knowledge/kernel-driver-signing/>, <https://comcomponent.com/knowledge/overlapped-io/>, <https://comcomponent.com/knowledge/getoverlappedresult/>, <https://comcomponent.com/knowledge/cancelioex/>, <https://comcomponent.com/knowledge/windows-forms/>, <https://comcomponent.com/knowledge/bitness-match-requirement/>, <https://comcomponent.com/knowledge/code-signing-cert/>, <https://comcomponent.com/knowledge/ev-certificate/> .

<https://comcomponent.com/knowledge/usb-connectivity-method-selection/> a skos:Concept ;
    skos:prefLabel "USB接続方式の選定"@ja ;
    skos:definition "機器がデバイスマネージャーで何として見えるかを起点に、標準クラスドライバー・WinUSB・UMDF・KMDFの順で検討する、USB機器とWindowsアプリを接続する方式の選び方。"@ja ;
    skos:altLabel "USB Client Driver Selection" ;
    skos:altLabel "USB機器アクセス方式の選び方"@ja ;
    ks:requires <https://comcomponent.com/knowledge/usb-device-class/> .

<https://comcomponent.com/knowledge/usb-device-class/> a skos:Concept ;
    skos:prefLabel "USBデバイスクラス"@ja ;
    skos:definition "USB-IFが定めるクラスコードによる機器の分類で、該当するクラスに応じてWindowsが標準クラスドライバーを自動的にロードするかどうかが決まる。"@ja ;
    skos:altLabel "USB Device Class" ;
    skos:altLabel "クラスコード"@ja .

<https://comcomponent.com/knowledge/winusb/> a skos:Concept ;
    skos:prefLabel "WinUSB方式"@ja ;
    skos:definition "Microsoft提供の汎用USBドライバーWinusb.sysを機能ドライバーとして載せ、ユーザーモードから直接エンドポイントに読み書きできるようにするUSB機器接続方式。"@ja ;
    skos:altLabel "Winusb.sys" ;
    skos:altLabel "WinUSB" ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/umdf-driver/> ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/concurrent-multi-app-access/> ;
    ks:uses <https://comcomponent.com/knowledge/cancelioex/> .

<https://comcomponent.com/knowledge/umdf-driver/> a skos:Concept ;
    skos:prefLabel "UMDFドライバー"@ja ;
    skos:definition "複数のアプリからの同時アクセスに対応できる、ユーザーモードで動作するWindowsドライバーフレームワーク。"@ja ;
    skos:altLabel "User-Mode Driver Framework" ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/kmdf-driver/> ;
    ks:recommendedFor <https://comcomponent.com/knowledge/concurrent-multi-app-access/> .

<https://comcomponent.com/knowledge/kmdf-driver/> a skos:Concept ;
    skos:prefLabel "KMDFドライバー"@ja ;
    skos:definition "UMDFでも対応できない要件(フィルタードライバーの積み上げなど)のときに検討する、カーネルモードで動作するWindowsドライバーフレームワーク。"@ja ;
    skos:altLabel "Kernel-Mode Driver Framework" ;
    ks:requires <https://comcomponent.com/knowledge/kernel-driver-signing/> .

<https://comcomponent.com/knowledge/composite-usb-device/> a skos:Concept ;
    skos:prefLabel "複合デバイス"@ja ;
    skos:definition "1本のUSBケーブルの先に複数の機能を持ち、Usbccgp.sysによって機能ごとに別々のデバイスとして展開されるUSB機器。"@ja ;
    skos:altLabel "Composite Device" ;
    skos:altLabel "Usbccgp.sys" ;
    ks:uses <https://comcomponent.com/knowledge/usb-device-class/> .

<https://comcomponent.com/knowledge/virtual-com-port/> a skos:Concept ;
    skos:prefLabel "仮想COMポート方式"@ja ;
    skos:definition "USBのCDC(ACM)クラスを名乗る機器にUsbser.sysなどが自動的に載り、アプリからはただのCOMポートとして扱えるようになるUSB機器接続方式。"@ja ;
    skos:altLabel "USBシリアル"@ja ;
    skos:altLabel "Virtual COM Port" ;
    skos:altLabel "CDC-ACM" ;
    ks:uses <https://comcomponent.com/knowledge/usb-device-class/> .

<https://comcomponent.com/knowledge/hid/> a skos:Concept ;
    skos:prefLabel "HID方式"@ja ;
    skos:definition "ドライバーの配布なしにWindows標準のHidclass.sys/Hidusb.sysで双方向のレポートをやり取りできる、USB機器接続方式の1つ。"@ja ;
    skos:altLabel "Human Interface Device" ;
    skos:altLabel "HID" ;
    ks:uses <https://comcomponent.com/knowledge/usb-device-class/> ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/exclusive-hid-collection/> .

<https://comcomponent.com/knowledge/winusb-os-descriptor/> a skos:Concept ;
    skos:prefLabel "Microsoft OS記述子(WinUSBの互換ID)"@ja ;
    skos:definition "機器のファームウェアが互換IDとしてWINUSBを報告するために実装する、Microsoft独自のUSB記述子(バージョン1.0と2.0がある)。"@ja ;
    skos:altLabel "Microsoft OS 1.0/2.0 Descriptors" ;
    skos:altLabel "MS_COMP_WINUSB" .

<https://comcomponent.com/knowledge/concurrent-multi-app-access/> a skos:Concept ;
    skos:prefLabel "複数アプリからの同時アクセス"@ja ;
    skos:definition "複数のアプリケーションが同時に同じUSB機器へアクセスするという要件。"@ja ;
    skos:altLabel "Multiple App Access" .

<https://comcomponent.com/knowledge/usb-device-unique-identification/> a skos:Concept ;
    skos:prefLabel "機器の一意識別"@ja ;
    skos:definition "COM番号やデバイスマネージャー上の並び順ではなく、VID/PID・シリアル番号・デバイスインターフェースパスなどで個々のUSB機器を識別する実装。"@ja ;
    skos:altLabel "Device Unique Identification" ;
    skos:altLabel "VID/PID+シリアル番号での識別"@ja .

<https://comcomponent.com/knowledge/exclusive-hid-collection/> a skos:Concept ;
    skos:prefLabel "排他HIDコレクション"@ja ;
    skos:definition "マウス・キーボード・タッチスクリーン・ペンなど、WindowsのRaw Input Managerが排他で開くため、他のアプリからは読み書きできないHIDのトップレベルコレクション。"@ja ;
    skos:altLabel "Exclusive HID Top-Level Collection" .

<https://comcomponent.com/knowledge/overlapped-io/> a skos:Concept ;
    skos:prefLabel "Overlapped I/O"@ja ;
    skos:definition "FILE_FLAG_OVERLAPPEDを付けて開いたハンドルに対し、操作ごとのOVERLAPPED構造体を渡して行うWin32の非同期I/Oの具体的な実装形態。モードはハンドル単位でCreateFileの時点に決まる。"@ja ;
    skos:altLabel "オーバーラップドI/O"@ja ;
    skos:altLabel "非同期I/O(Win32)"@ja .

<https://comcomponent.com/knowledge/getoverlappedresult/> a skos:Concept ;
    skos:prefLabel "GetOverlappedResult"@ja ;
    skos:definition "非同期操作の結果(成否と転送バイト数)を、対応するOVERLAPPED構造体から取得するWin32 API。bWait=TRUEで完了まで待つこともできる。"@ja .

<https://comcomponent.com/knowledge/cancelioex/> a skos:Concept ;
    skos:prefLabel "CancelIoEx"@ja ;
    skos:definition "どのスレッドが発行したかに関係なく、指定ハンドルの未完了I/Oにキャンセルを要求できるWin32 API。取り消された操作はERROR_OPERATION_ABORTEDでの完了として返る。"@ja .

<https://comcomponent.com/knowledge/usb-pnp-notification/> a skos:Concept ;
    skos:prefLabel "USB機器のPnP通知"@ja ;
    skos:definition "CM_Register_NotificationやRegisterDeviceNotificationを使って、USB機器の到着・削除をアプリがポーリングせずに検知する仕組み。"@ja ;
    skos:altLabel "CM_Register_Notification" ;
    skos:altLabel "RegisterDeviceNotification" ;
    skos:altLabel "WM_DEVICECHANGE" .

<https://comcomponent.com/knowledge/usb-handle-invalidation/> a skos:Concept ;
    skos:prefLabel "機器切断によるハンドルの無効化"@ja ;
    skos:definition "USB機器の取り外しによって開いていたハンドルが無効になり、そのままI/Oを続けるとアプリの異常終了を招きかねない状態。"@ja ;
    skos:altLabel "Device Removal Handle Invalidation" .

<https://comcomponent.com/knowledge/windows-forms/> a skos:Concept ;
    skos:prefLabel "Windows Forms"@ja ;
    skos:definition "デスクトップGUIアプリケーションを構築するための.NET/.NET FrameworkのUIフレームワーク。"@ja ;
    skos:altLabel "WinForms" .

<https://comcomponent.com/knowledge/usb-selective-suspend/> a skos:Concept ;
    skos:prefLabel "USBセレクティブサスペンド"@ja ;
    skos:definition "アイドル状態のUSB機器を低消費電力状態に入れるWindowsの電源管理機能。復帰に時間がかかるため初回応答の遅延の原因になり得る。"@ja ;
    skos:altLabel "USB Selective Suspend" .

<https://comcomponent.com/knowledge/driver-catalog-signing/> a skos:Concept ;
    skos:prefLabel "ドライバーパッケージのカタログ署名"@ja ;
    skos:definition "PnPのデバイスインストールでドライバーパッケージがDriver Storeにステージされるために必要な、カタログファイル(.cat)へのWHQLまたはSPC署名の要件。"@ja ;
    skos:altLabel "PnP Device Installation Signing" ;
    skos:altLabel ".catファイルの署名"@ja .

<https://comcomponent.com/knowledge/kernel-driver-signing/> a skos:Concept ;
    skos:prefLabel "カーネルモードドライバー署名(Windows 10 1607以降)"@ja ;
    skos:definition "Windows 10 バージョン1607以降、新規のカーネルモードドライバーがロードされるためにDev Portal(Partner Center)経由でMicrosoftによる署名を受けることを求める要件。"@ja ;
    skos:altLabel "Kernel-Mode Driver Signing" ;
    skos:altLabel "Dev Portal署名"@ja ;
    ks:requires <https://comcomponent.com/knowledge/ev-certificate/> .

<https://comcomponent.com/knowledge/ev-certificate/> a skos:Concept ;
    skos:prefLabel "EVコード署名証明書"@ja ;
    skos:definition "発行元のより厳格な本人確認を経て発行されるコード署名証明書。現在はSmartScreenの初回警告を自動的に回避する挙動を持たない。"@ja ;
    skos:altLabel "EV証明書"@ja ;
    skos:altLabel "Extended Validation証明書"@ja ;
    skos:broader <https://comcomponent.com/knowledge/code-signing-cert/> .

<https://comcomponent.com/knowledge/vendor-usb-sdk/> a skos:Concept ;
    skos:prefLabel "ベンダー提供SDK・専用ドライバー方式"@ja ;
    skos:definition "産業用カメラや計測器などで、ベンダーがドライバーとSDKをセットで提供し、それ以外の使い方が事実上できないUSB機器接続方式。"@ja ;
    skos:altLabel "Vendor SDK" ;
    skos:altLabel "ベンダーSDK"@ja .

<https://comcomponent.com/knowledge/bitness-match-requirement/> a skos:Concept ;
    skos:prefLabel "bitness一致要件"@ja ;
    skos:definition "ネイティブモジュール(in-procのCOMコンポーネント、P/Invokeで呼ぶDLL、ベンダー提供SDKのDLLなど)を読み込むホストプロセスと、そのモジュールのビット構成(32bit/64bit)が一致していなければならないという制約。"@ja ;
    skos:altLabel "32bit/64bitの一致"@ja ;
    skos:altLabel "bitness match" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/usb-connectivity-method-selection/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-class/> ;
    schema:description "USB接続方式の選定は、デバイスマネージャーでその機器がどのUSBデバイスクラスとして見えるかを確認するところから始まる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/supported-usb-classes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/winusb/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/umdf-driver/> ;
    schema:description "公式の選定順序は単純な方式から検討するもので、複数アプリの同時アクセスが不要ならWinUSBをUMDFドライバー開発より先に検討する。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/winusb-considerations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/umdf-driver/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/kmdf-driver/> ;
    schema:description "UMDFドライバーで対応できない場合に初めてKMDFドライバーの開発を検討するという順序になっている。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/winusb-considerations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/composite-usb-device/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-class/> ;
    schema:description "複合デバイスはUsbccgp.sysによって機能ごとに別々のUSBデバイスクラスを持つデバイスとして展開される。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/supported-usb-classes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/virtual-com-port/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-class/> ;
    schema:description "仮想COMポート方式は、CDC(通信クラス)というUSBデバイスクラスに標準ドライバーUsbser.sysが自動対応することで成立する。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/usb-driver-installation-based-on-compatible-ids> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/hid/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-class/> ;
    schema:description "HID方式は、HIDというUSBデバイスクラスにWindows標準のHidclass.sys/Hidusb.sysが対応することで、ドライバー配布なしに成立する。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/hid/hid-architecture> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/winusb/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-class/> ;
    schema:description "Vendor Specific(FFh)など標準クラスに属さない機器では、WinUSBの利用がMicrosoftの推奨になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/supported-usb-classes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/winusb/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/winusb-os-descriptor/> ;
    schema:description "INFの配布なしにWinusb.sysが自動的に機能ドライバーとして載るのは、機器のファームウェアがMicrosoft OS記述子を持ち互換IDとしてWINUSBを報告する場合に限られる。カスタムINFを配布する経路ではOS記述子は不要。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/automatic-installation-of-winusb> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/winusb/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/concurrent-multi-app-access/> ;
    schema:description "WinUSBは複数のアプリケーションが同時に同じ機器へアクセスすることをサポートしない。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/winusb-considerations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/umdf-driver/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/concurrent-multi-app-access/> ;
    schema:description "複数アプリが同時に同じ機器へアクセスする必要がある場合は、UMDFドライバーの開発が推奨される。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/winusb-considerations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/virtual-com-port/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-unique-identification/> ;
    schema:description "COM番号は機器の識別子ではないため、同型機を複数つなぐ構成や特定の1台を選ぶ必要がある場合は、VID/PID・シリアル番号から実行時にCOM番号を引き当てる一意識別を実装する。該当する1台しか繋がない構成や利用者に選ばせる設計では必須ではない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/cimwin32prov/win32-pnpentity> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/composite-usb-device/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-unique-identification/> ;
    schema:description "複合デバイスでは複数の機能が同じVID/PID・シリアル番号を共有するため、特定の機能を選び分ける必要がある場合はUSBインターフェース番号などを含めた一意識別が要る。該当する1台しか繋がない構成や利用者に選ばせる設計では必須ではない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/supported-usb-classes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/hid/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-unique-identification/> ;
    schema:description "HID方式で特定の1台を選び分ける必要がある場合は、VID/PID・シリアル番号(またはUsage Page/Usage)を用いて一意識別する。該当する1台しか繋がない構成や利用者に選ばせる設計では必須ではない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/hid/opening-hid-collections> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/winusb/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-unique-identification/> ;
    schema:description "WinUSB方式で特定の1台を選び分ける必要がある場合は、デバイスインターフェースパスを鍵にして一意識別を行う。該当する1台しか繋がない構成や利用者に選ばせる設計では必須ではない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/winusb-installation> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/hid/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/exclusive-hid-collection/> ;
    schema:description "マウス・キーボード・タッチスクリーン・ペンに相当するトップレベルコレクションはWindowsのRaw Input Managerが排他で開くため、HIDアプリからの読み書きができない。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/hid/hid-architecture> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/winusb/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-io/> ;
    schema:description "同期I/Oでは機器が応答しないとスレッドごと固まるリスクがあるため、WinUSBの読み取りはFILE_FLAG_OVERLAPPEDで開いた非同期I/O(Overlapped I/O)で回すのが実務上の通常の実装方法である(同期I/Oも可能)。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winusb/nf-winusb-winusb_readpipe> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/winusb/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/getoverlappedresult/> ;
    schema:description "WinUSBの非同期読み取りでは、転送できたバイト数をWinUsb_GetOverlappedResult(GetOverlappedResultに相当する仕組み)で取得する。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winusb/nf-winusb-winusb_readpipe> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/winusb/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/cancelioex/> ;
    schema:description "WinUSBのセッション後始末では、CancelIoExで処理中のI/Oを止めてから完了を回収し、ハンドルを解放する。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/ioapiset/nf-ioapiset-cancelioex> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/usb-pnp-notification/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/usb-handle-invalidation/> ;
    schema:description "PnP通知の購読は取り外しの検知に役立つが、それだけでは足りず、すべての読み書きの完了パスで削除系エラーをセッション終了として扱って初めて機器切断によるハンドル無効化への対処になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/cfgmgr32/nf-cfgmgr32-cm_register_notification> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/windows-forms/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/usb-pnp-notification/> ;
    schema:description "USB機器のPnP通知を受け取りたい場合、WinForms/WPFなど従来型デスクトップアプリでは、RegisterDeviceNotificationとWM_DEVICECHANGEの組み合わせで受け取る。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-registerdevicenotificationw> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/usb-selective-suspend/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/winusb-os-descriptor/> ;
    schema:description "WinUSBでのUSBセレクティブサスペンドは、拡張プロパティOS機能記述子(またはINF)のDeviceIdleEnabledなどの設定で構成できる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/automatic-installation-of-winusb> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/winusb/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/driver-catalog-signing/> ;
    schema:description "独自のINFを含むドライバーパッケージを配布する場合は、Microsoftのwinusb.sysを参照するだけのINFであっても、カタログファイルに署名がなければDriver Storeにステージされない。MS OS記述子でWINUSB互換IDを提示してinboxのwinusb.infにバインドさせる経路では、独自パッケージの配布自体が不要になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/install/pnp-device-installation-signing-requirements--windows-vista-and-later-> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/kmdf-driver/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/kernel-driver-signing/> ;
    schema:description "Windows 10 バージョン1607以降、新規のカーネルモードドライバーはDev Portal(Partner Center)経由のMicrosoftによる署名がなければロードされない。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/install/kernel-mode-code-signing-policy--windows-vista-and-later-> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/kernel-driver-signing/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/ev-certificate/> ;
    schema:description "Partner Centerのアカウント開設にはEVコード署名証明書が必要になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/install/kernel-mode-code-signing-policy--windows-vista-and-later-> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/vendor-usb-sdk/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/usb-device-class/> ;
    schema:description "デバイスマネージャーで既にベンダー製ドライバーが載っている機器は、方式Dであるベンダー提供SDK・専用ドライバーの対象になる。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows-hardware/drivers/usbcon/winusb-considerations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/vendor-usb-sdk/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/bitness-match-requirement/> ;
    schema:description "ベンダーSDKのDLLが32bit専用でビルドされている場合、64bitアプリのプロセスは32bit専用DLLを直接呼び出せず、bitness一致要件を満たす必要がある。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/winprog64/running-32-bit-applications> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/virtual-com-port/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/usb-pnp-notification/> ;
    schema:description "USB-シリアル機器はケーブルを抜くとポートが消えるため、抜き差しに対する耐性を持たせたい場合は、PnPの取り外し通知を受けてからポートをCloseする実装が安全とされる(実装しなくても直ちに動作不能になるわけではないが、抜去時に例外でアプリごと落ちる事故につながる)。"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winuser/nf-winuser-registerdevicenotificationw> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
