@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-io-sync-async-overlapped/#article>
    schema:about <https://comcomponent.com/knowledge/synchronous-io/>, <https://comcomponent.com/knowledge/asynchronous-io/>, <https://comcomponent.com/knowledge/overlapped-io/> ;
    schema:mentions <https://comcomponent.com/knowledge/createfile/>, <https://comcomponent.com/knowledge/overlapped-structure/>, <https://comcomponent.com/knowledge/io-manager/>, <https://comcomponent.com/knowledge/readfile/>, <https://comcomponent.com/knowledge/sync-completion/>, <https://comcomponent.com/knowledge/cache-manager/>, <https://comcomponent.com/knowledge/ntfs-compression/>, <https://comcomponent.com/knowledge/efs-encryption/>, <https://comcomponent.com/knowledge/extending-write/>, <https://comcomponent.com/knowledge/error-io-pending/>, <https://comcomponent.com/knowledge/getoverlappedresult/>, <https://comcomponent.com/knowledge/readfileex/>, <https://comcomponent.com/knowledge/apc/>, <https://comcomponent.com/knowledge/alertable-wait/>, <https://comcomponent.com/knowledge/cancelioex/>, <https://comcomponent.com/knowledge/cancelio/>, <https://comcomponent.com/knowledge/error-operation-aborted/>, <https://comcomponent.com/knowledge/cancelsynchronousio/>, <https://comcomponent.com/knowledge/setfilecompletionnotificationmodes/>, <https://comcomponent.com/knowledge/iocp/>, <https://comcomponent.com/knowledge/fileoptions-asynchronous/>, <https://comcomponent.com/knowledge/fake-async/>, <https://comcomponent.com/knowledge/randomaccess-dotnet/>, <https://comcomponent.com/knowledge/irp/>, <https://comcomponent.com/knowledge/cancellationtoken-dotnet/> .

<https://comcomponent.com/knowledge/synchronous-io/> a skos:Concept ;
    skos:prefLabel "同期I/O"@ja ;
    skos:definition "I/O要求の完了まで呼び出しが戻らないI/Oの形態。実体は「完了する前には戻らない」という保証であり、要求がペンディングになったときだけスレッドが待機状態になる。"@ja ;
    skos:altLabel "Synchronous I/O" .

<https://comcomponent.com/knowledge/asynchronous-io/> a skos:Concept ;
    skos:prefLabel "非同期I/O"@ja ;
    skos:definition "要求を発行した呼び出しがI/Oの完了を待たずにすぐ戻り、完了を別途の通知(イベント・APC・I/O完了ポートなど)で受け取るI/Oの形態。"@ja ;
    skos:altLabel "Asynchronous I/O" ;
    skos:altLabel "オーバーラップI/O"@ja ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/synchronous-io/> .

<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 ;
    ks:implements <https://comcomponent.com/knowledge/asynchronous-io/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/createfile/> ;
    ks:uses <https://comcomponent.com/knowledge/overlapped-structure/> .

<https://comcomponent.com/knowledge/createfile/> a skos:Concept ;
    skos:prefLabel "CreateFile"@ja ;
    skos:definition "ファイルだけでなく物理ディスク・ボリューム・COMポート・パイプなどのデバイスも、名前解決を通じて共通に開けるWin32 API。開いた対象ごとにファイルオブジェクトが作られる。"@ja ;
    skos:altLabel "CreateFileW" ;
    skos:altLabel "CreateFileA" .

<https://comcomponent.com/knowledge/overlapped-structure/> a skos:Concept ;
    skos:prefLabel "OVERLAPPED構造体"@ja ;
    skos:definition "発行中の非同期I/O操作1つを識別し、その状態(読み書き位置・完了イベント・転送バイト数)を運ぶデータ構造。同時に発行する操作の数だけ必要で、使い回すとデータ破損につながる。"@ja ;
    skos:altLabel "OVERLAPPED" .

<https://comcomponent.com/knowledge/io-manager/> a skos:Concept ;
    skos:prefLabel "I/Oマネージャー"@ja ;
    skos:definition "Windowsカーネルモードで、アプリケーションとデバイスドライバーの間のI/O要求を統括するコンポーネント。要求のほとんどをIRPに詰めてデバイススタックへ流す。"@ja ;
    skos:altLabel "I/O Manager" ;
    skos:altLabel "IOマネージャー"@ja ;
    ks:implements <https://comcomponent.com/knowledge/synchronous-io/> .

<https://comcomponent.com/knowledge/readfile/> a skos:Concept ;
    skos:prefLabel "ReadFile/WriteFile"@ja ;
    skos:definition "ファイルやデバイスの読み書きを行うWin32 API。非同期モードのハンドルに対してはOVERLAPPED構造体の指定が必須で、戻り値とGetLastErrorの組み合わせで結果が3通りに分かれる。"@ja ;
    skos:altLabel "ReadFile" ;
    skos:altLabel "WriteFile" .

<https://comcomponent.com/knowledge/sync-completion/> a skos:Concept ;
    skos:prefLabel "同期完了"@ja ;
    skos:definition "非同期モードのハンドルへ発行したI/Oが、呼び出しの中でその場(TRUEを返して)完了すること。キャッシュヒット・NTFS圧縮/暗号化・拡張書き込みなどで起こる。"@ja ;
    skos:altLabel "Synchronous Completion" ;
    ks:incompatibleWith <https://comcomponent.com/knowledge/error-io-pending/> .

<https://comcomponent.com/knowledge/cache-manager/> a skos:Concept ;
    skos:prefLabel "キャッシュマネージャー"@ja ;
    skos:definition "ファイルデータをメモリ上のシステムキャッシュに保持し、読み書きの多くをディスクI/Oなしで処理させるWindowsカーネルのコンポーネント。ファストI/Oの近道もこのキャッシュを直接利用する。"@ja ;
    skos:altLabel "Cache Manager" .

<https://comcomponent.com/knowledge/ntfs-compression/> a skos:Concept ;
    skos:prefLabel "NTFS圧縮"@ja ;
    skos:definition "データを圧縮ユニット単位で圧縮して格納するNTFSの透過的な圧縮機能。読み書きのたびに展開・再圧縮のコストが伴う。"@ja ;
    skos:altLabel "ファイル圧縮(NTFS)"@ja ;
    ks:mayCause <https://comcomponent.com/knowledge/sync-completion/> .

<https://comcomponent.com/knowledge/efs-encryption/> a skos:Concept ;
    skos:prefLabel "NTFS暗号化(EFS)ファイル"@ja ;
    skos:definition "EFS(Encrypting File System)で暗号化されたファイル。NTFS圧縮と同様、アクセスが同期処理に変換されるため非同期発行でも同期的に完了する。"@ja ;
    skos:altLabel "EFS" ;
    skos:altLabel "Encrypting File System" ;
    ks:mayCause <https://comcomponent.com/knowledge/sync-completion/> .

<https://comcomponent.com/knowledge/extending-write/> a skos:Concept ;
    skos:prefLabel "ファイルを伸ばす書き込み"@ja ;
    skos:definition "ファイルの長さを増やす書き込み操作。非同期発行でも同期的に完了する条件の1つ。"@ja ;
    skos:altLabel "Extending Write" ;
    ks:mayCause <https://comcomponent.com/knowledge/sync-completion/> .

<https://comcomponent.com/knowledge/error-io-pending/> a skos:Concept ;
    skos:prefLabel "ERROR_IO_PENDING"@ja ;
    skos:definition "非同期モードのハンドルへの発行が受理され、完了はまだであることを示すエラーコード(997)。エラーではなく「受理」を意味する。"@ja ;
    skos:altLabel "IO_PENDING" ;
    ks:requires <https://comcomponent.com/knowledge/overlapped-io/> .

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

<https://comcomponent.com/knowledge/readfileex/> a skos:Concept ;
    skos:prefLabel "ReadFileEx/WriteFileEx"@ja ;
    skos:definition "完了時に呼ばれる完了ルーチン(コールバック)を受け取るReadFile/WriteFileの拡張版。完了ルーチンは発行したスレッドのAPCキューに積まれる。"@ja ;
    skos:altLabel "ReadFileEx" ;
    skos:altLabel "WriteFileEx" ;
    skos:broader <https://comcomponent.com/knowledge/readfile/> ;
    ks:uses <https://comcomponent.com/knowledge/apc/> .

<https://comcomponent.com/knowledge/apc/> a skos:Concept ;
    skos:prefLabel "APC(非同期プロシージャコール)"@ja ;
    skos:definition "特定スレッドのコンテキストで非同期に実行される関数。各スレッドが自分のAPCキューを持ち、ユーザーモードAPCはスレッドがalertable状態のときにのみ実行される。"@ja ;
    skos:altLabel "Asynchronous Procedure Call" ;
    skos:altLabel "APC" ;
    ks:requires <https://comcomponent.com/knowledge/alertable-wait/> .

<https://comcomponent.com/knowledge/alertable-wait/> a skos:Concept ;
    skos:prefLabel "Alertable wait"@ja ;
    skos:definition "SleepEx・WaitForSingleObjectExなど、待機中にAPCキューのエントリを実行できる待機状態。APCが配達されるにはスレッドがこの状態に入っている必要がある。"@ja ;
    skos:altLabel "alertable待機"@ja .

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

<https://comcomponent.com/knowledge/cancelio/> a skos:Concept ;
    skos:prefLabel "CancelIo"@ja ;
    skos:definition "呼び出したスレッド自身が発行したI/O操作しか取り消せない、CancelIoExの前身にあたるWin32 API。"@ja ;
    ks:notRecommendedFor <https://comcomponent.com/knowledge/overlapped-io/> .

<https://comcomponent.com/knowledge/error-operation-aborted/> a skos:Concept ;
    skos:prefLabel "ERROR_OPERATION_ABORTED"@ja ;
    skos:definition "CancelIoEx等で取り消された操作が、完了として返ってくる際のエラーコード。この通知を受け取るまでOVERLAPPEDとバッファを解放してはならない。"@ja ;
    ks:requires <https://comcomponent.com/knowledge/overlapped-structure/> .

<https://comcomponent.com/knowledge/cancelsynchronousio/> a skos:Concept ;
    skos:prefLabel "CancelSynchronousIo"@ja ;
    skos:definition "指定したスレッドが実行中の同期I/O操作にキャンセルを要求するWin32 API。同期I/Oで固まっている別スレッドを外から取り消すために使う。"@ja ;
    ks:recommendedFor <https://comcomponent.com/knowledge/synchronous-io/> ;
    ks:mayCause <https://comcomponent.com/knowledge/error-operation-aborted/> .

<https://comcomponent.com/knowledge/setfilecompletionnotificationmodes/> a skos:Concept ;
    skos:prefLabel "SetFileCompletionNotificationModes"@ja ;
    skos:definition "I/Oが即時に成功した場合にI/O完了ポートへ完了パケットを積まない動作(FILE_SKIP_COMPLETION_PORT_ON_SUCCESS)を選べるWin32 API。OVERLAPPED.hEventのシグナルは抑止しない。"@ja ;
    skos:altLabel "FILE_SKIP_COMPLETION_PORT_ON_SUCCESS" ;
    ks:requires <https://comcomponent.com/knowledge/iocp/> .

<https://comcomponent.com/knowledge/iocp/> a skos:Concept ;
    skos:prefLabel "I/O完了ポート(IOCP)"@ja ;
    skos:definition "多数の非同期I/Oの完了通知を1つのFIFOキューに集約しつつ、実行可能なスレッド数をコンカレンシー値以下に保つスケジューリング機構を兼ねる、Windowsカーネルの仕組み。"@ja ;
    skos:altLabel "I/O Completion Port" ;
    skos:altLabel "IOCP" .

<https://comcomponent.com/knowledge/fileoptions-asynchronous/> a skos:Concept ;
    skos:prefLabel "FileOptions.Asynchronous"@ja ;
    skos:definition ".NETのFileStreamコンストラクターやFile.OpenHandleで、OSレベルの非同期I/O(FILE_FLAG_OVERLAPPED)を有効にする指定。ハンドルのモードを直接決める。"@ja ;
    skos:altLabel "useAsync" ;
    ks:implements <https://comcomponent.com/knowledge/overlapped-io/> ;
    ks:prevents <https://comcomponent.com/knowledge/fake-async/> .

<https://comcomponent.com/knowledge/fake-async/> a skos:Concept ;
    skos:prefLabel "見せかけの非同期"@ja ;
    skos:definition "同期モードのハンドルに対してReadAsync/WriteAsyncを呼んだ結果生じる状態。呼び出し元はブロックされないが、裏でスレッドプールのスレッドが同期読み書きを肩代わりして待つ。"@ja ;
    skos:altLabel "Fake Async" ;
    ks:requires <https://comcomponent.com/knowledge/synchronous-io/> .

<https://comcomponent.com/knowledge/randomaccess-dotnet/> a skos:Concept ;
    skos:prefLabel "File.OpenHandle + RandomAccess"@ja ;
    skos:definition ".NET 6以降で、SafeFileHandleとオフセットを明示して読み書きするAPI。Win32の非同期ハンドル+OVERLAPPED.Offsetという素の形に近い書き方ができる。"@ja ;
    skos:altLabel "RandomAccess" .

<https://comcomponent.com/knowledge/irp/> a skos:Concept ;
    skos:prefLabel "IRP(I/O要求パケット)"@ja ;
    skos:definition "デバイスドライバーに送られる要求のほとんどが詰め込まれるパケット。要求全体のヘッダーと、経由するドライバーの数だけ並ぶI/Oスタックロケーションを持つ。"@ja ;
    skos:altLabel "I/O Request Packet" ;
    skos:altLabel "IRP" .

<https://comcomponent.com/knowledge/cancellationtoken-dotnet/> a skos:Concept ;
    skos:prefLabel "CancellationToken(.NET)"@ja ;
    skos:definition ".NETの協調的キャンセルの仕組み。非同期モードのハンドルへのファイルI/Oでは、内部的にCancelIoExの呼び出しに行き着く。"@ja ;
    skos:altLabel "CancellationToken" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/overlapped-io/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/asynchronous-io/> ;
    schema:description "Overlapped I/Oは、FILE_FLAG_OVERLAPPEDとOVERLAPPED構造体という具体的なAPIの形で非同期I/Oを実装したもの"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/fileio/synchronous-and-asynchronous-i-o> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/overlapped-io/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/createfile/> ;
    schema:description "非同期モードはCreateFileにFILE_FLAG_OVERLAPPEDを渡すことでハンドル単位に決まり、呼び出しごとには切り替えられない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/fileio/synchronous-and-asynchronous-i-o>, <https://learn.microsoft.com/windows/win32/api/fileapi/nf-fileapi-readfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/overlapped-io/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-structure/> ;
    schema:description "発行中の操作1つを識別し、その状態(位置・完了・転送バイト数)を運ぶためにOVERLAPPED構造体を使う"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/minwinbase/ns-minwinbase-overlapped> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/io-manager/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/synchronous-io/> ;
    schema:description "要求がペンディングになった場合、I/Oマネージャーが完了を待ち合わせてからアプリへ制御を返すことで同期I/Oを実現する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/fileio/synchronous-and-asynchronous-i-o>, <https://learn.microsoft.com/windows-hardware/drivers/kernel/windows-kernel-mode-i-o-manager> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/asynchronous-io/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/synchronous-io/> ;
    schema:description "同じハンドルは同期モードか非同期モードのどちらか一方であり、呼び出しごとに切り替えることはできない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/fileio/synchronous-and-asynchronous-i-o> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/readfile/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-structure/> ;
    schema:description "非同期モードのハンドルにReadFile/WriteFileを発行する場合、OVERLAPPED構造体の指定が必須になる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/fileapi/nf-fileapi-readfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/readfile/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/sync-completion/> ;
    schema:description "非同期ハンドルへの発行でも、要求がすぐ満たせる場合はTRUEを返してその場で完了することがある"@ja ;
    ks:evidence <https://learn.microsoft.com/troubleshoot/windows/win32/asynchronous-disk-io-synchronous> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/sync-completion/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/cache-manager/> ;
    schema:description "同期完了の代表例は、要求されたデータがキャッシュマネージャーの管理するキャッシュに全部載っている場合である"@ja ;
    ks:evidence <https://learn.microsoft.com/troubleshoot/windows/win32/asynchronous-disk-io-synchronous> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/ntfs-compression/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/sync-completion/> ;
    schema:description "NTFS圧縮されたファイルへのアクセスは、ファイルシステムドライバーが同期処理に変換するため、非同期発行でも同期的に完了する"@ja ;
    ks:evidence <https://learn.microsoft.com/troubleshoot/windows/win32/asynchronous-disk-io-synchronous> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/efs-encryption/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/sync-completion/> ;
    schema:description "NTFS暗号化(EFS)されたファイルへのアクセスも、同期処理に変換されるため非同期発行でも同期的に完了する"@ja ;
    ks:evidence <https://learn.microsoft.com/troubleshoot/windows/win32/asynchronous-disk-io-synchronous> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/extending-write/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/sync-completion/> ;
    schema:description "ファイルの長さを伸ばす書き込みは同期処理になるため、非同期発行でも同期的に完了する"@ja ;
    ks:evidence <https://learn.microsoft.com/troubleshoot/windows/win32/asynchronous-disk-io-synchronous> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/sync-completion/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/error-io-pending/> ;
    schema:description "1回の発行結果として、TRUE(同期完了)とFALSE+ERROR_IO_PENDING(進行中)は同時には起こらない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/fileapi/nf-fileapi-readfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/readfile/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/error-io-pending/> ;
    schema:description "要求が受理されたが完了はまだの場合、FALSEとERROR_IO_PENDINGが返り、完了は通知側で受け取る"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/fileapi/nf-fileapi-readfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/error-io-pending/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-io/> ;
    schema:description "ERROR_IO_PENDINGは非同期モード(Overlapped I/O)のハンドルへの発行に特有の戻り値である"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/fileapi/nf-fileapi-readfile> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/getoverlappedresult/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-structure/> ;
    schema:description "GetOverlappedResultは、対応するOVERLAPPED構造体から操作の成否と転送バイト数を取り出す"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/ioapiset/nf-ioapiset-getoverlappedresult> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/readfileex/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/apc/> ;
    schema:description "ReadFileEx/WriteFileExは、完了時に呼ばれる完了ルーチンを発行したスレッドのAPCキューに積む方式で通知する"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/fileapi/nf-fileapi-readfileex>, <https://learn.microsoft.com/windows/win32/sync/asynchronous-procedure-calls> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/apc/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/alertable-wait/> ;
    schema:description "APCが実際に実行されるのは、対象スレッドがSleepExなどのalertable waitに入ったときに限られる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/fileio/alertable-i-o>, <https://learn.microsoft.com/windows/win32/sync/asynchronous-procedure-calls> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancelioex/> ;
    rdf:predicate ks:succeeds ;
    rdf:object <https://comcomponent.com/knowledge/cancelio/> ;
    schema:description "CancelIoExはCancelIoの後継で、発行したスレッド以外からも未完了I/Oを取り消せるようになった(Vistaで追加)"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/ioapiset/nf-ioapiset-cancelioex>, <https://learn.microsoft.com/windows/win32/api/ioapiset/nf-ioapiset-cancelio> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancelioex/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-structure/> ;
    schema:description "特定の1操作だけを取り消したい場合、対応するOVERLAPPEDへのポインターを渡す(NULLならそのハンドルの全操作が対象)"@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/cancelioex/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/error-operation-aborted/> ;
    schema:description "取り消しに成功した操作はERROR_OPERATION_ABORTEDとしての完了通知になる。完了間際だった操作は正常完了することもある"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/ioapiset/nf-ioapiset-cancelioex>, <https://learn.microsoft.com/windows/win32/fileio/canceling-pending-i-o-operations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/error-operation-aborted/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-structure/> ;
    schema:description "ERROR_OPERATION_ABORTEDの完了通知を受け取るまでは、OVERLAPPEDとバッファをカーネルが使用中であり解放してはならない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/fileio/canceling-pending-i-o-operations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancelsynchronousio/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/synchronous-io/> ;
    schema:description "同期I/Oで固まっている別スレッドを外から取り消したいときは、CancelIoEx系ではなくCancelSynchronousIoを使う"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/ioapiset/nf-ioapiset-cancelsynchronousio>, <https://learn.microsoft.com/windows/win32/fileio/canceling-pending-i-o-operations> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancelioex/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-io/> ;
    schema:description "非同期I/Oの取り消しには、どのスレッドが発行したかに関係なく使えるCancelIoExを使う"@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/cancelio/> ;
    rdf:predicate ks:notRecommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-io/> ;
    schema:description "CancelIoは呼び出したスレッド自身が発行した操作しか取り消せない制約があり、CancelIoExが使える環境であえて選ぶ理由はない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/ioapiset/nf-ioapiset-cancelio> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/setfilecompletionnotificationmodes/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/iocp/> ;
    schema:description "FILE_SKIP_COMPLETION_PORT_ON_SUCCESSが抑止できるのはI/O完了ポートへの完了パケットだけで、OVERLAPPED.hEventのシグナルは抑止されない"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-setfilecompletionnotificationmodes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/setfilecompletionnotificationmodes/> ;
    rdf:predicate ks:recommendedFor ;
    rdf:object <https://comcomponent.com/knowledge/sync-completion/> ;
    schema:description "同期完了時に結果はその場で分かっているので、高頻度I/Oでは完了ポートへのパケットを省いてキュー経由の無駄を減らす最適化として使う"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/winbase/nf-winbase-setfilecompletionnotificationmodes> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fileoptions-asynchronous/> ;
    rdf:predicate ks:implements ;
    rdf:object <https://comcomponent.com/knowledge/overlapped-io/> ;
    schema:description ".NETのFileOptions.Asynchronous(useAsync)はFILE_FLAG_OVERLAPPEDへの直通スイッチで、指定するとハンドルが非同期モードで開かれる"@ja ;
    ks:evidence <https://learn.microsoft.com/dotnet/standard/io/asynchronous-file-i-o> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fake-async/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/synchronous-io/> ;
    schema:description "見せかけの非同期は、ハンドルが同期モードのままReadAsync/WriteAsyncを呼んだときに生じる。スレッドプールのスレッドが同期読み書きを肩代わりして待つ"@ja ;
    ks:evidence <https://devblogs.microsoft.com/dotnet/file-io-improvements-in-dotnet-6/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/fileoptions-asynchronous/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/fake-async/> ;
    schema:description "FileOptions.Asynchronousでハンドルを非同期モードで開けば、ReadAsync呼び出しが本物の非同期I/Oになり、見せかけの非同期を避けられる"@ja ;
    ks:evidence <https://devblogs.microsoft.com/dotnet/file-io-improvements-in-dotnet-6/>, <https://learn.microsoft.com/dotnet/standard/io/asynchronous-file-i-o> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/randomaccess-dotnet/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/fileoptions-asynchronous/> ;
    schema:description ".NET 6以降のFile.OpenHandle+RandomAccessを非同期に使うには、FileOptions.Asynchronousでハンドルを開く"@ja ;
    ks:evidence <https://devblogs.microsoft.com/dotnet/file-io-improvements-in-dotnet-6/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancelsynchronousio/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/error-operation-aborted/> ;
    schema:description "CancelSynchronousIoで取り消された同期操作は、ERROR_OPERATION_ABORTEDでの失敗として返る"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/ioapiset/nf-ioapiset-cancelsynchronousio> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/overlapped-io/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/iocp/> ;
    schema:description "多数の同時I/Oを少数のスレッドで受ける完了通知の経路として、ハンドルをI/O完了ポートに関連付けることができる"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/fileio/i-o-completion-ports> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/asynchronous-io/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/sync-completion/> ;
    schema:description "非同期に発行しても、キャッシュヒットやNTFS圧縮・暗号化・拡張書き込みなどの条件が揃えばその場で完了することがあり、応答性は保証されない"@ja ;
    ks:evidence <https://learn.microsoft.com/troubleshoot/windows/win32/asynchronous-disk-io-synchronous> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancelioex/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/irp/> ;
    schema:description "CancelIoExは該当する未完了IRPにキャンセルをマークし、ドライバーのキャンセルルーチンを呼び出させる"@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/cancellationtoken-dotnet/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/cancelioex/> ;
    schema:description "非同期モードのハンドルであれば、.NETのCancellationTokenによるファイルI/Oのキャンセルは内部的にCancelIoExに行き着く"@ja ;
    ks:evidence <https://learn.microsoft.com/windows/win32/api/ioapiset/nf-ioapiset-cancelioex>, <https://learn.microsoft.com/dotnet/standard/io/asynchronous-file-i-o> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/cancellationtoken-dotnet/> ;
    rdf:predicate ks:incompatibleWith ;
    rdf:object <https://comcomponent.com/knowledge/fake-async/> ;
    schema:description "同期モードのハンドルによる見せかけの非同期では、取り消し対象となるオーバーラップ操作が存在しないため、CancellationTokenによる中断は確実には効かない"@ja ;
    ks:evidence <https://devblogs.microsoft.com/dotnet/file-io-improvements-in-dotnet-6/> ;
    ks:verifiedAt "2026-08-01" ;
    ks:certainty "context-dependent" .
