![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
NtReadFile NtFsControlFile. Разница возвращаемых данных.
Riply © (2008-04-04 21:34:00)Здравствуйте !
Давным давно я поднимала этот вопрос. Тогда ответа не нашли.
Может сейчас у кого-нибудь будут идеи, как объяснить(понять) следующий факт:
Читаем файловую запись двумя способами: NtReadFile и NtFsControlFile(..., FSCTL_GET_NTFS_FILE_RECORD, ...).
В первом случае получаем мусор, во втором корректные данные.
(какой именно FileRecord прочитала NtFsControlFile - проверяется).
Эффект довольно трудно, но воиспроизводим (я приводила диск в "непотребное" состояние :)
Когда я столкнулась с разницой между прямым чтением и чтении через API, подумла
что вот она - причина и списала этот вопрос на всевозможные "кеширования" и "буферизации".
Но сейчас, похоже, это объяснение не проходит.
Во всяком случае, эффект наблюдается (на тех одних и тех же файловых объектах)
как после длительной работы, так и сразу после холодного рестарта.
Очень бы хотелось понять происходящее. Кто что думает: какие могут быть причины ?
Riply (2008-04-05 00:42:00) [41]Может это поможет ?
Здесь выдержка атрибутов сканируемой директории (сожержит только файлы).
Пробегаюсь по ее Lcn-ам.
И при чтении Lcn`а 221544 вылетаю из цикла с ошибкой несовпадения MagicType у рекорда.
Передаю этот Lcn в вынесенную процедуру и убеждаюсь, что читается по-разному.
Если в основном блоке заменить ReadFile на ControlFile, то все работает.
\??\D:\DestDir_46\0
MultiSectorHeader
NTFS_RECORD_HEADER
cbType FILE
UpdateSequenceArrayOffset 48
UpdateSequenceArraySize 3
_Usn64 108368966
SequenceNumber 1
LinkCount 1
AttributesOffset 56
Flags Dir
BytesInUse 808
BytesAllocated 1024
BaseFileRecordSegment
SegmentNumberLowPart 0
SegmentNumberHighPart 0
SequenceNumber 0
NextAttributeNumber 8
SelfRecord 88986
TypeCode AT_STANDARD_INFORMATION
RecordLength 96
FormCode RESIDENT
Name
Flags STANDART
Instance 0
ValueLength 72
ValueOffset 24
_Flags Not Indexed: 0
CreationTime 2008.04.03 22.05.50
ChangeTime 2008.04.03 22.06.29
LastWriteTime 2008.04.03 22.06.29
LastAccessTime 2008.04.05 00.28.20
FileAttributes $0
MaxVersionsNum 0
VersionNum 0
ClassId 0
OwnerId 0
SecurityId 260
QuotaCharge 0
Usn64 0
TypeCode AT_FILE_NAME
RecordLength 96
FormCode RESIDENT
Name
Flags STANDART
Instance 2
ValueLength 68
ValueOffset 24
_Flags Indexed: 1
ParentDirectory
SegmentNumberLowPart 57290
SegmentNumberHighPart 0
SequenceNumber 1
CreationTime 2008.04.03 22.05.50
ChangeTime 2008.04.03 22.05.50
LastWriteTime 2008.04.03 22.05.50
LastAccessTime 2008.04.03 22.05.50
AllocatedSize 0
DataSize 0
FileAttributes $10000000I30
AlignmentOrReserved 0
FILE_NAME_WIN32_AND_DOS = 0
TypeCode AT_INDEX_ROOT
RecordLength 88
FormCode RESIDENT
Name $I30
Flags STANDART
Instance 7
ValueLength 56
ValueOffset 32
_Flags Not Indexed: 0
cbType AT_FILE_NAME
CollationRule 1
BytesPerIndexBlock 4096
ClustersPerIndexBlock 2
DirectoryIndex
EntriesOffset 16
IndexBlockLength 40
AllocatedSize 40
Flags Large
Enum Dir Entries
TypeCode AT_INDEX_ALLOCATION
RecordLength 416
FormCode NONRESIDENT
Name $I30
Flags STANDART
Instance 3
LowestVcn 0
HighestVcn 231
MappingPairsOffset 72
_CompressionUnit 0
AllocatedLength 475136
FileSize 475136
ValidDataLength 475136
TotalAllocated 13511017930227748
TypeCode AT_BITMAP
RecordLength 48
FormCode RESIDENT
Name $I30
Flags STANDART
Instance 4
ValueLength 16
ValueOffset 32
_Flags Not Indexed: 0
RETRIEVAL_POINTERS_BUFFER
ExtentCount 111
Index 0 Lcn 228215 Count 2
Index 1 Lcn 228291 Count 2
Index 2 Lcn 228348 Count 2
Index 3 Lcn 228393 Count 2
Index 4 Lcn 228444 Count 2
Index 5 Lcn 228468 Count 4
Index 6 Lcn 228522 Count 2
Index 7 Lcn 228565 Count 2
Index 8 Lcn 228639 Count 2
Index 9 Lcn 228673 Count 2
Index 10 Lcn 228720 Count 2
Index 11 Lcn 228743 Count 2
Index 12 Lcn 228787 Count 2
Index 13 Lcn 228835 Count 2
Index 14 Lcn 228901 Count 2
Index 15 Lcn 228975 Count 2
Index 16 Lcn 229023 Count 2
Index 17 Lcn 229085 Count 2
Index 18 Lcn 229129 Count 2
Index 19 Lcn 229173 Count 2
Index 20 Lcn 229235 Count 2
Index 21 Lcn 229269 Count 2
Index 22 Lcn 229334 Count 2
Index 23 Lcn 229372 Count 2
Index 24 Lcn 229403 Count 2
Index 25 Lcn 229447 Count 2
Index 26 Lcn 229490 Count 2
Index 27 Lcn 229561 Count 2
Index 28 Lcn 229623 Count 2
Index 29 Lcn 222468 Count 2
Index 30 Lcn 222518 Count 2
Index 31 Lcn 222581 Count 2
Index 32 Lcn 222631 Count 2
Index 33 Lcn 222676 Count 2
Index 34 Lcn 222729 Count 4
Index 35 Lcn 222795 Count 2
Index 36 Lcn 222852 Count 2
Index 37 Lcn 222908 Count 2
Index 38 Lcn 222949 Count 2
Index 39 Lcn 222999 Count 2
Index 40 Lcn 223050 Count 2
Index 41 Lcn 223115 Count 2
Index 42 Lcn 223187 Count 2
Index 43 Lcn 223262 Count 2
Index 44 Lcn 223309 Count 2
Index 45 Lcn 223363 Count 2
Index 46 Lcn 223412 Count 2
Index 47 Lcn 223464 Count 2
Index 48 Lcn 223559 Count 2
Index 49 Lcn 223615 Count 2
Index 50 Lcn 223649 Count 2
Index 51 Lcn 223700 Count 4
Index 52 Lcn 223741 Count 2
Index 53 Lcn 223792 Count 2
Index 54 Lcn 223876 Count 2
Index 55 Lcn 223931 Count 2
Index 56 Lcn 223993 Count 2
Index 57 Lcn 224068 Count 2
Index 58 Lcn 224108 Count 2
Index 59 Lcn 224148 Count 2
Index 60 Lcn 224233 Count 2
Index 61 Lcn 224290 Count 2
Index 62 Lcn 224327 Count 2
Index 63 Lcn 224387 Count 2
Index 64 Lcn 224429 Count 2
Index 65 Lcn 224473 Count 2
Index 66 Lcn 224532 Count 2
Index 67 Lcn 224577 Count 2
Index 68 Lcn 224619 Count 6
Index 69 Lcn 224641 Count 2
Index 70 Lcn 224661 Count 2
Index 71 Lcn 221544 Count 2
Index 72 Lcn 221588 Count 2
Index 73 Lcn 221657 Count 2
Index 74 Lcn 221709 Count 2
Index 75 Lcn 221758 Count 2
Index 76 Lcn 221808 Count 2
Index 77 Lcn 221845 Count 2
Index 78 Lcn 221878 Count 2
Index 79 Lcn 221925 Count 2
Index 80 Lcn 221952 Count 2
Index 81 Lcn 222022 Count 2
Index 82 Lcn 222059 Count 2
Index 83 Lcn 222094 Count 2
Index 84 Lcn 222114 Count 2
Index 85 Lcn 222151 Count 4
Index 86 Lcn 222200 Count 2
Index 87 Lcn 222245 Count 2
Index 88 Lcn 222273 Count 2
Index 89 Lcn 222304 Count 2
Index 90 Lcn 222340 Count 2
Index 91 Lcn 222394 Count 2
Index 92 Lcn 222431 Count 1
Index 93 Lcn 221120 Count 1
Index 94 Lcn 221155 Count 2
Index 95 Lcn 221193 Count 2
Index 96 Lcn 221236 Count 2
Index 97 Lcn 221267 Count 2
Index 98 Lcn 221311 Count 2
Index 99 Lcn 221335 Count 2
Index 100 Lcn 221380 Count 2
Index 101 Lcn 221419 Count 2
Index 102 Lcn 221446 Count 2
Index 103 Lcn 221502 Count 2
Index 104 Lcn 220992 Count 2
Index 105 Lcn 221030 Count 2
Index 106 Lcn 221051 Count 2
Index 107 Lcn 221085 Count 2
Index 108 Lcn 221115 Count 2
Index 109 Lcn 220962 Count 2
Index 110 Lcn 220914 Count 2
Riply (2008-04-05 00:24:00) [42]> [2] guav © (05.04.08 00:11)
> Я думаю что причина в том что в программе ошибка :)
Я понимаю, что ошибка может быть везде, но перепроверила сто раз.
Вынесла все в отдельную процедуру.
Передаю в нее номер рекода, читаю так и так и сравниваю результат.
Что может быть проще ?
> Пришли образ где явление наблюдается.
Образ чего прислать ?
Ты учитывай, что у меня Dual-up :)
guav (2008-04-05 00:11:00) [43]> Кто что думает: какие могут быть причины ?
Я думаю что причина в том что в программе ошибка :)
Пришли образ где явление наблюдается.
Riply (2008-04-04 21:36:00) [44]> [0] Riply © (04.04.08 21:34)
> Читаем файловую запись двумя способами: NtReadFile и NtFsControlFile
NtReadFile - имеется ввиду "прямое" чтение.