Я разрабатываю драйвер мини-фильтра и взял в качестве примера мини-фильтр Microsoft SwapBuffers. Процедура InstaceSetup по умолчанию подключается ко всем томам. Но я не хочу привязываться ко всем, только к избранным...
Я попытался установить «NULL» вместо «InstanceSetup» в «FLT_REGISTRATION FilterRegistration», а затем вызвать «FltAttachVolume» в процедуре «DriverEntry». Я сделал следующее:
PFLT_VOLUME том; UNICODE_STRING vимя; .... RtlInitUnicodeString(&vname, L"E:\"); FltGetVolumeFromName(gFilterHandle, &vname, &vol); ... FltAttachVolume(gFilterHandle, vol, NULL, NULL); ...
Когда я попытался вызвать FltAttachVolume с трехмерным параметром "NULL" (PCUNICODE_STRING InstanceName), я получил ошибку "STATUS_FLT_INSTANCE_NAME_COLLISION".
Если я вызываю FltAttachVolume с трехмерным параметром «НЕ NULL», например «UniqueInstaceName», он возвращает мне "-2145452013".
Я получаю те же ошибки, когда пытаюсь подключить том с помощью процедуры FilterAttach из моего пользовательского приложения, например:
... driver.driverName = L"swapBuffers"; ... LPCWSTR vname = L"F:\"; ... FilterAttach(driver.driverName, vname, NULL, NULL, NULL);
С трехмерным параметром "NULL" (LPCWSTR lpInstanceName): "ERROR_FLT_INSTANCE_NAME_COLLISION"
С НЕНУЛЕМ: "-2145452013".
В MiniSpy miniFilter есть пользовательское приложение и используется рутина FilterAttach. Я пытался вызвать эту процедуру в своем приложении таким же образом - безрезультатно.
Наконец, я изменил inf-файл swapBuffers:
- не было параметра DefaultInstance, я установил его: «SwapBuffers — Top Instance».
также я скопировал это из inf-файла MiniSpy:
[MiniFilter.AddRegistry] HKR,"Экземпляры","DefaultInstance",0x00000000,%DefaultInstance% HKR,"Экземпляры\"%Instance1.Name%,"Высота",0x00000000,%Instance1.Altitude% HKR,"Экземпляры\"% Instance1.Name%,"Flags",0x00010001,%Instance1.Flags% HKR,"Instances\"%Instance2.Name%,"Altitude",0x00000000,%Instance2.Altitude% HKR,"Instances\"%Instance2.Name% ,"Flags",0x00010001,%Instance2.Flags% HKR,"Экземпляры\"%Instance3.Name%,"Altitude",0x00000000,%Instance3.Altitude% HKR,"Экземпляры\"%Instance3.Name%,"Flags" ,0x00010001,%Instance3.Flags%
............. Instance1.Name = "SwapBuffers - Средний экземпляр" Instance1.Altitude = "370000" Instance1.Flags = 0x1 ; Подавить автоматические вложения Instance2.Name = "SwapBuffers — нижний экземпляр" Instance2.Altitude = "361000" Instance2.Flags = 0x1 ; Подавить автоматические вложения Instance3.Name = "SwapBuffers - Top Instance" Instance3.Altitude = "385100" Instance3.Flags = 0x1 ; Подавить автоматические вложения
изменение флагов на 0x1 для подавления автоматических вложений. И только установив свой мини-фильтр SwapBuffers через этот файл Inf, я получил "STATUS_SUCCESS" от подпрограммы FltAttachVolume в моем драйвере. Но на самом деле он не прикрепляется к диску...
Что я делаю неправильно? Спасибо.