SFilter
От: Phess  
Дата: 06.03.07 11:21
Оценка:
Добрый день.

Проблема следующая: нужно переделать SFilter под себя (до этого пользовался FileSpy), взял его из последнего SDK, установил, вроде бы все хорошо.
Диагностика показывает что он запущен (QueryServiceStatusEx), но при попытке получить хэндлер:
HANDLE hHandle = hDevice = CreateFile( L"\\\\.\\SFilter",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
ругается с кодом 3: не находит нужного файла... Не подскажите, как это обойти?

06.03.07 19:20: Перенесено модератором из 'WIN API' — Alex Fedotov
Re: SFilter
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 06.03.07 15:55
Оценка:
Здравствуйте, Phess, Вы писали:

P>ругается с кодом 3: не находит нужного файла... Не подскажите, как это обойти?

Если Вы заглянете в код SFilter::DriverEntry, то увидите там, что фильтр не выставляет свой CDO наружу, для win32:

//
//  Create the Control Device Object (CDO).  This object represents this
//  driver.  Note that it does not have a device extension.
//
RtlInitUnicodeString( &nameString, L"\\FileSystem\\Filters\\SFilterCDO" );
status = IoCreateDevice( DriverObject,
                                                 0,                      //has no device extension
                                                 &nameString,
                                                 FILE_DEVICE_DISK_FILE_SYSTEM,
                                                 FILE_DEVICE_SECURE_OPEN,
                                                 FALSE,
                                                 &gSFilterControlDeviceObject );

if (status == STATUS_OBJECT_PATH_NOT_FOUND) {

        //
        //  This must be a version of the OS that doesn't have the Filters
        //  path in its namespace.  This was added in Windows XP.
        //
        //  We will try just putting our control device object in the
        //  \FileSystem portion of the object name space.
        //

        RtlInitUnicodeString( &nameString, L"\\FileSystem\\SFilterCDO" );

        status = IoCreateDevice( DriverObject,
                                                         0,                  //has no device extension
                                                         &nameString,
                                                         FILE_DEVICE_DISK_FILE_SYSTEM,
                                                         FILE_DEVICE_SECURE_OPEN,
                                                         FALSE,
                                                         &gSFilterControlDeviceObject );


соотв что Вам нужно сделать — это всего лишь после успешного создания CDO создать симлинк, по типу как делает FileSpy:
RtlInitUnicodeString( &linkString, L"\\DosDevices\\SFilter");
status = IoCreateSymbolicLink(&linkString, &nameString);


PS вопросы по Sfilter & драйверам следует задавать в форуме asm
... << RSDN@Home 1.2.0 alpha rev. 655>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: SFilter
От: Phess  
Дата: 06.03.07 20:37
Оценка:
Здравствуйте, Valery A. Boronin, Вы писали:

VAB>Здравствуйте, Phess, Вы писали:


P>>ругается с кодом 3: не находит нужного файла... Не подскажите, как это обойти?

VAB>Если Вы заглянете в код SFilter::DriverEntry, то увидите там, что фильтр не выставляет свой CDO наружу, для win32:
.....
Большое спасибо, впредь буду внимательнее!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.