Как открыть метаданные/системные файлы NTFS: $LogFile, $Volume, $Bitmap?

Я работаю в 64-разрядной версии Windows 7. Я хочу получить идентификатор файла, связанный с некоторыми системными файлами NTFS. Некоторые из них ("$Mft", "$MftMirr") я могу открыть, но другие ("$LogFile" и "$Bitmap") завершаются ошибкой "отказано в доступе" или недопустимым параметром ("$Volume"). Я пытался сделать это как администратор и запустить как локальную службу, но они все равно терпят неудачу. Я использую следующее:

/* open the file for checking the File ID */
h = CreateFileW (
        argv[i]                   , // _In_      LPCTSTR lpFileName,
        FILE_READ_ATTRIBUTES      , // _In_      DWORD dwDesiredAccess,
        FILE_SHARE_DELETE |
        FILE_SHARE_READ   |
        FILE_SHARE_WRITE          , // _In_      DWORD dwShareMode,
        NULL                      , // _In_opt_  LPSECURITY_ATTRIBUTES lpSecurityAttributes,
        OPEN_EXISTING             , // _In_      DWORD dwCreationDisposition,
        FILE_ATTRIBUTE_NORMAL| FILE_FLAG_BACKUP_SEMANTICS, // _In_      DWORD dwFlagsAndAttributes,
        NULL                        // _In_opt_  HANDLE hTemplateFile
    );
if (h == INVALID_HANDLE_VALUE) {
    err = GetLastError();
    wprintf(L"Can't open: '%s'. err:%u(0x%x)\n", argv[i], err, err);
    continue;
}

Я также установил следующие привилегии (я знаю, что это излишне, но я не знал, какие из них будут работать): SE_TCB_NAME, SE_DEBUG_NAME, SE_SECURITY_NAME, SE_BACKUP_NAME, SE_RESTORE_NAME, SE_MANAGE_VOLUME_NAME.


person user3124401    schedule 21.12.2013    source источник
comment
Ваш вопрос не имеет смысла, потому что системные файлы NTFS имеют фиксированный идентификатор (номер записи MFT), например, $MFT всегда равен нулю.   -  person Xearinox    schedule 21.12.2013


Ответы (1)


Вы можете использовать fget или ntfscopy, упомянутые здесь: http://blog.opensecurityresearch.com/2011/10/how-to-acquire-locked-files-from.html

person tal    schedule 03.11.2014