1

Windowsでは、を介してデバイスとボリュームを開くことができますCreateFile()。以前はこれをデバイスから正常に使用していましたReadFile()が、今はメモリマッピングに切り替えたいと思います。次のコードではINVALID_HANDLE_VALUE、の値を受け取りb、、にc設定されて87ERROR_INVALID_PARAMETERます。

HANDLE a = ::CreateFileA("\\\\.\\h:", GENERIC_READ, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY | FILE_FLAG_NO_BUFFERING, NULL);
HANDLE b = ::CreateFileMappingA(a, NULL, PAGE_READONLY, 0, 0, NULL);
DWORD c = ::GetLastError();

どうすればこれを機能させることができますか?

4

1 に答える 1

6

できません。CreateFileMappingは、ファイルへのマッピングのみを作成できます。ReadFileCreateFileMappingのhFileパラメーターのドキュメントの違いを見てください。ReadFileの場合は、受け入れるさまざまなタイプのハンドル(デバイスを含む)をすべて一覧表示します。CreateFileMappingの場合は、ファイルのみを一覧表示します。

于 2009-10-27T05:50:46.933 に答える