понедельник, 31 октября 2022 г.

Autochk и запись на диск

Забавный факт - если писать на диск данные во время работы Autochk, то система зависнет:


Воспроизвести можно так: fsutil dirty set C: и перезагрузка.

Включенный verifier даст больше информации, чем скрин выше:

[FltMgr] Mini-filter verification enabled for "test" filter.
KDTARGET: Refreshing KD connection
Driver Verifier: Enabled for test.sys, flags 0x209bb, build 9200, key IeDrfOgBNzQtNzJiutJGkF
Autochk cannot lock system volume due to a sharing violation.
This is caused by a driver holding a file opened for write access.

Check all newly added driver NtCreateFile and NtOpenFile calls or run:
       !FindAutochkBlockers
From "kd" to list the files which may be preventing autochk from running.
Break instruction exception - code 80000003 (first chance)
0033:000007f7`1955e790 cc              int     3
kd> k
 # Child-SP          RetAddr           Call Site
00 0000000a`53ac9ba0 0000000a`53bc6d90 0x000007f7`1955e790
01 0000000a`53ac9ba8 00000000`00000000 0x0000000a`53bc6d90
kd>  !FindAutochkBlockers
Kernel handle Error reading handle count.

007c: Object: fffffa801ad93f20  GrantedAccess: 00000004
Type: File Flag: 00000000
File Name: \Program Files (x86)\Test\2022_10_21_11_01_54_372837.log

00a0: Object: fffffa801ae19d60  GrantedAccess: 00000004
Type: File Flag: 00000000
File Name: \Program Files (x86)\Test\2022_10_21_11_01_54_683864.log

00cc: Object: fffffa801b23e070  GrantedAccess: 00000001
Type: File Flag: 00000000
File Name:

00d8: Object: fffffa801ad7a770  GrantedAccess: 0012019f
Type: File Flag: 00000000
File Name: \$Extend\$RmMetadata\$TxfLog\$TxfLogContainer00000000000000000002

00dc: Object: fffffa801ad7aa20  GrantedAccess: 0012019f
Type: File Flag: 00000000
File Name: \$Extend\$RmMetadata\$TxfLog\$TxfLogContainer00000000000000000001

00e0: Object: fffffa801ada1350  GrantedAccess: 0012019f
Type: File Flag: 00000000
File Name: \$Extend\$RmMetadata\$TxfLog\$TxfLog.blf

021c: Object: fffffa801b2f4690  GrantedAccess: 00000004
Type: File Flag: 00000000
File Name: \Program Files (x86)\Test\2022_10_21_11_01_52_111448.log

024c: Object: fffffa801aa56f20  GrantedAccess: 0013019f
Type: File Flag: 00000000
File Name: \Program Files (x86)\Test\data

Причина всего этого: Autochk.exe не может залочить том из-за того, что мой драйвер держит несколько файлов открытыми на запись.

Исправить это можно отказавшись от записи на время работы Autochk.exe.  

А факт окончания работы Autochk.exe можно определить через функцию FsRtlAreVolumeStartupApplicationsComplete.