Я пытаюсь определить, почему мой фильтр вызывает задержку управления диском, diskmgmt.msc.Он застревает на длительный период, пока не показывает или не показывает вовсе.
Мое расследование и заключение довольно сильно сузили проблему.Я напишу некоторый код, который сильно сокращен для удобного чтения.Я вполне уверен, что достаточно ответить на вопрос.
Видите ли, приведенный ниже код работает.Результатом является значение, которое возвращается.
if(Data->Iopb->MajorFunction == IRP_MJ_VOLUME_MOUNT)
{
dev = diskDevice->DeviceType;
if((FILE_DEVICE_MASS_STORAGE == dev) || (FILE_DEVICE_DISK == dev) ||
(FILE_DEVICE_DISK_FILE_SYSTEM == dev) || (FILE_DEVICE_VIRTUAL_DISK == dev)
|| (FILE_DEVICE_FILE_SYSTEM == dev) || (dev >= 32768))
{
if(FLT_FSTYPE_NTFS == fs_type)
{
Result = FLT_PREOP_SUCCESS_WITH_CALLBACK;
}
else
{
Result = FLT_PREOP_SUCCESS_NO_CALLBACK;
}
}
}
Если бы "else" было бы FLT_PREOP_SUCCESS_WITH_CALLBACK ;, оно бы запаздывало.
Итак, я предполагаю, что существует специфическое поведение для некоторого конкретного FLT_FSTYPE, отличного от NTFS.Поэтому у меня вопрос: к какому из них предъявляются особые требования?
Моя функция PostOperation не делает ничего, кроме регистрации.Эта функция всегда возвращает FLT_POSTOP_FINISHED_PROCESSING.