Здравствуйте. Пытаюсь получить MFT-Record, код следующий: Код (Text): ns=ZwFsControlFile( hVolume, //Handle NULL, //Event NULL, //ApcRoutine NULL, //ApcContext &StatusBlock, //IoStatusBlock FSCTL_GET_NTFS_VOLUME_DATA, //IoControlCode NULL, //InputBuffer 0, //InputBufferLength &OutRecordInfo, //OutputBuffer sizeof(OutRecordInfo) //OutputBufferLength ); InBuf.FileReferenceNumber.QuadPart=FileIndex; pOutBuf=ExAllocatePoolWithTag(NonPagedPool, (sizeof (NTFS_FILE_RECORD_OUTPUT_BUFFER) + sizeof (OutRecordInfo.BytesPerFileRecordSegment) - 1), 'MFTr'); if (pOutBuf==NULL) { DbgPrint("Unable to allocate memory for NTFS_FILE_RECORD_OUTPUT_BUFFER struct. Terminating..."); return; } ns=ZwFsControlFile( hVolume, //Handle NULL, //Event NULL, //ApcRoutine NULL, //ApcContext &StatusBlock, //IoStatusBlock FSCTL_GET_NTFS_FILE_RECORD, //IoControlCode &InBuf, //InputBuffer sizeof(InBuf), //InputBufferLength pOutBuf, //OutputBuffer (sizeof (NTFS_FILE_RECORD_OUTPUT_BUFFER) + sizeof (OutRecordInfo.BytesPerFileRecordSegment) - 1) //OutputBufferLength ); Размер выходного буфера определял в соответствие со статьей из msdn: Второй вызов ZwFsControlFile возвращает STATUS_BUFFER_OVERFLOW. Причем, этот статус возвращается даже при увеличении выходного буфера в 10 раз. Почему так, кто подскажет?
sizeof (OutRecordInfo.BytesPerFileRecordSegment) заменить на OutRecordInfo.BytesPerFileRecordSegment.