Я работаю в 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.