Написал простенький драйвер-фильтр, в XP все работает, в Vista нет. Код аттача(проверки выкинуты): Код (Text): Status = AttachDevice( DriverObject, &FilterDeviceObject, &TcpDeviceObject, L"\\Device\\Tcp" ); Код (Text): NTSTATUS AttachDevice( PDRIVER_OBJECT DriverObject, PDEVICE_OBJECT *FilterObject, PDEVICE_OBJECT *OldDevice, PCWSTR DeviceName ) { ... Status = IoCreateDevice( DriverObject, 0, NULL, FILE_DEVICE_UNKNOWN, 0, TRUE, FilterObject ); (*FilterObject)->Flags |= DO_DIRECT_IO; Status = IoAttachDevice( *FilterObject, &TargetDeviceUnicodeString, OldDevice ); ... Код обработчика: Код (Text): NTSTATUS DeviceDispatch( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { PIO_STACK_LOCATION IrpStack = IoGetCurrentIrpStackLocation( Irp ); if ( DeviceObject == FilterDeviceObject ) { switch ( IrpStack->MajorFunction ) { case IRP_MJ_INTERNAL_DEVICE_CONTROL: { if ( IrpStack->MinorFunction == TDI_SEND ) { DbgPrint("TDI_SEND\n"); goto exit; } ... Есть идеи, почему в Висте код не работает?
Во-первых, в IoCreateDevice() следует выставить FILE_DEVICE_NETWORK и в предпоследнем параметре FALSE. Во-вторых, в чём именно проявляется неработоспособность? В-третьих, слишком мало информации для диагностики ошибки.
Непомогло. Неработоспособность проявляется в том, что я в WinDbg не вижу заветных TDI_SEND, TDI_SET_EVENT_HANDLER и т.д. Какая еще информация нужна?