0

WinAPIアプリケーションをデバッグしていました。
関数を呼び出す直前のCreateFileMappingAファイルのサイズは0Kbでした。関数を呼び出した直後、ファイルは約200Kbになりました。オンラインのWindowsAPIドキュメントを参照しようとしましたが、関数呼び出し後にファイルの書き込みが発生するかどうかはわかりませんでした(またはおそらく理解できませんでした)。flProtectパラメータの値はでしたPAGE_READWRITE
関数が実際に何をするのか、そして特になぜこれがファイルに書き込むのかを知りたいのです。

4

1 に答える 1

1

調査の結果、関数CreateFileMappingAが次のように呼び出されていることがわかりました。
CreateFileMappingA(fh, NULL, PAGE_READWRITE, 0, 0x336BC, "kll");
ドキュメントによると、ファイルサイズがマッピングのターゲットの長さよりも小さい場合、ファイルはサイズに合わせて拡張されます。
したがって、私の場合、ファイルは作成されたばかりです。

fh = CreateFileA("file2.dat", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE,
        NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);


したがって、最初に、ファイル「file2.dat」が書き込み権限で作成されます。0Kbになります。次に、上記のCreateFileMappingAの呼び出しの直後に、ファイルサイズは0x336BCバイト、つまり206Kbになります。

于 2013-02-18T18:09:37.883 に答える