Здравствуйте, 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>>