g_assert((FileOffset->QuadPart&~(PAGE_SIZE-1))==((FileOffset->QuadPart+Length-1)&~(PAGE_SIZE-1)));
SharedCacheMap=captive_FileObject_to_SharedCacheMap(FileObject);
+ /* Do not invalide 'map'ped data otherwise ntfs.sys of NT-5.1sp1 mount crashes.
+ */
captive_private_bcb_pin_object=captive_private_bcb_pin_object_get_ref(SharedCacheMap,
- CAPTIVE_ROUND_DOWN64(FileOffset->QuadPart,PAGE_SIZE));
+ CAPTIVE_ROUND_DOWN64(FileOffset->QuadPart,PAGE_SIZE),
+ FALSE); /* invalidate_new */
captive_shared_cache_map_data_validate_noread(SharedCacheMap,FileOffset->QuadPart,FileOffset->QuadPart+Length);
CAPTIVE_ROUND_DOWN64(FileOffset->QuadPart,PAGE_SIZE))))
g_object_ref(captive_private_bcb_pin_object);
}
- else
+ else {
+ /* Invalide possibly only 'map'ped data as we need to re-read them on CcPinRead().
+ * Otherwise any file written by fastfat.sys of NT-5.1sp1 will corrupt
+ * the code+55AA of DOS boot sector (disk offset 0x0).
+ */
captive_private_bcb_pin_object=captive_private_bcb_pin_object_get_ref(SharedCacheMap,
- CAPTIVE_ROUND_DOWN64(FileOffset->QuadPart,PAGE_SIZE));
+ CAPTIVE_ROUND_DOWN64(FileOffset->QuadPart,PAGE_SIZE),
+ TRUE); /* invalidate_new */
+ }
if (captive_private_bcb_pin_object) {
captive_shared_cache_map_data_validate_read(SharedCacheMap,FileObject,FileOffset->QuadPart,FileOffset->QuadPart+Length);
SharedCacheMap=captive_FileObject_to_SharedCacheMap(FileObject);
captive_private_bcb_pin_object=captive_private_bcb_pin_object_get_ref(SharedCacheMap,
- CAPTIVE_ROUND_DOWN64(FileOffset->QuadPart,PAGE_SIZE));
+ CAPTIVE_ROUND_DOWN64(FileOffset->QuadPart,PAGE_SIZE),
+ FALSE); /* invalidate_new: FIXME: Is it compatible? */
captive_shared_cache_map_set_data_valid(SharedCacheMap,FileOffset->QuadPart,FileOffset->QuadPart+Length);
if (Zero)