0
파일 이름 목록을 가져 오기 위해 MFT를 열거하려고합니다.DeviceIoControl은 C++ 및 C#에서 작동하지만 C++/CLI에서 호출 될 때 ERROR_INVALID_FUNCTION을 반환합니다.
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에서 동일한 코드를 사용하는 경우, DeviceIoControl
은 false 제공하고 GetLastError
이 ERROR_INVALID_FUNCTION을 제공 :는 Win32 프로젝트에 사용하는 경우
이 코드는 작동합니다. 동일한 코드가 C#으로 변환되면 작동합니다.
어떤 아이디어가 있습니까? 이 정의가있는 경우
와
FILE_READ_DATA
을및 대체 당신은 관리 코드에 GetLastError''조심해야한다. 당신은 당신의 DllImport 속성에 올바른 플래그를 넣고'Marshal :: GetLastWin32Error'를 대신 사용해야합니다 ... 또한 영향력을 가지지는 않겠지 만, 당신은 영향을주기 전에'cb'를 0으로 초기화해야합니다. 요구. – Medinoc
관리되지 않는'DeviceIoControl'을 사용하고 있습니다. 'Marshal :: GetLastWin32Error'도 시도해 보았고 GetLastError와 같은 값 1을줍니다. 또한'cb'를 초기화했지만 좋지는 않습니다. 이것이 어떤 프로젝트 설정이나 속성 때문에 발생하는지 궁금합니다 ... –