MSDN は、ReadFile()
機能の説明で次のように述べています。
hFile が で開かれる場合
FILE_FLAG_OVERLAPPED
、lpOverlapped パラメータは有効で一意の構造体を指す必要がありますOVERLAPPED
。そうしないと、関数が読み取り操作が完了したと誤って報告する可能性があります。
上記の推奨事項に違反しているアプリケーションがいくつかあり、問題の深刻度を知りたいです。つまり、プログラムは で作成された名前付きパイプをFILE_FLAG_OVERLAPPED
使用しますが、次の呼び出しを使用してそこから読み取ります。
ReadFile(handle, &buf, n, &n_read, NULL);
つまりNULL
、パラメーターとして渡されlpOverlapped
ます。ドキュメントによると、その呼び出しは状況によっては正しく機能しないはずです。問題を再現するために多くの時間を費やしましたが、再現できませんでした! 私は常にすべてのデータを適切な場所に適切なタイミングで取得しました。ただし、名前付きパイプのみをテストしていました。
ReadFile() が誤って返され、データがまだバッファにない場合でも正常に完了したことを報告することを期待できるのはいつですか? 問題を再現するにはどうすればよいですか? ファイル、パイプ、ソケット、コンソール、またはその他のデバイスで発生しますか? 特定のバージョンの OS を使用する必要がありますか? または特定のバージョンの読み取り (ハンドルを I/O 完了ポートに登録するなど)? または、プロセス/スレッドの読み取りと書き込みの特定の同期?
または、いつ失敗しますか?わたしにはできる :/
助けてください!
よろしく、 マーティン