- Kód: Vybrat vše
MftRecordInput: NTFS_FILE_RECORD_INPUT_BUFFER;
MftRecordOutput: ^NTFS_FILE_RECORD_OUTPUT_BUFFER;
Size:=sizeof(NTFS_FILE_RECORD_OUTPUT_BUFFER)+NtfsVolData.BytesPerFileRecordSegment-1;
GetMem(MftRecordOutput,Size);
DeviceIoControl(handle,FSCTL_GET_NTFS_FILE_RECORD,@MftRecordInput,sizeof(MftRecordInput), MftRecordOutput,Size,BytesReturned,nil)
Handle vytvářím
- Kód: Vybrat vše
handle:=CreateFile(PChar('\\.\'+FileName),GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE or FILE_SHARE_DELETE,nil,OPEN_EXISTING,0,0)
Pro úplnost dodávám, že pro FSCTL_GET_NTFS_VOLUME_DATA by měl být handle vytvořen '\\.\'+Filename[1]+':', ale to se mi nevede, naopak pomocí '\\.\'+FileName funguje OK.
Neporadí někdo, jak se chyby 5 zbavit a získat tak číslo záznamu v NTFS pro krátké soubory do 1kB ? (delší nejsou umístěny přímo v MFT záznamu, ale mají cluster assignment a funguje zde FSCTL_GET_RETRIEVAL_POINTERS)