0

ファイル名のリストを取得するために MFT を列挙しようとしています。

このコードは、Win32 プロジェクトで使用すると機能します。

MFT_ENUM_DATA med;
med.StartFileReferenceNumber = 0;
med.LowUsn = 0;
med.HighUsn = ujd.NextUsn;
BYTE pData[sizeof(DWORDLONG) + 0x10000];
DWORD cb;
while (DeviceIoControl(handleToVolume, FSCTL_ENUM_USN_DATA, &med, sizeof(med),
  pData, sizeof(pData), &cb, NULL) != FALSE) {
 //do the processing
}

しかし、C++/CLI で同じコードを使用すると、DeviceIoControlfalseGetLastErrorが返され、ERROR_INVALID_FUNCTION が返されます。同じコードを C# に変換すると、機能します。

何が起こっているのですか?

4

1 に答える 1

0

この定義があるかどうかを確認します。

#define FSCTL_ENUM_USN_DATA 
 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,44,METHOD_NEITHER,FILE_READ_DATA)

FILE_READ_DATAと置き換えますFILE_ANY_ACCESS

于 2017-05-27T20:56:57.690 に答える