>どうして読みとりアクセスで、FILE_SHARE_WRITEを指定する必要があるのでしょうか?
FILE_SHARE_WRTIEを指定しない、ということは、
「ほかのスレッド/プロセスに、書き込まれたくない」、という意思表示。
そして、1-2では、すでに、GENERIC_WRITEで開かれたハンドルが存在する。
つまり、「ほかのスレッド/プロセスに書き込まれる可能性がある」
というわけで、開くのに失敗するわけだよ。わかるかね?