64 ビットの Windows 7 を実行しています。一部の NTFS システム ファイルに関連付けられている FileID を取得したいと考えています。一部 (「$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