Привет, почему данный код не работает под вин2003? хотя под ХР нормально пашет, т.е. режит все пакеты. Код (Text): ;@echo off ;goto make .386 .model flat, stdcall option casemap:none include \masm32\include\w2k\ntstatus.inc include \masm32\include\w2k\hal.inc include \masm32\include\w2k\ntddk.inc include \masm32\include\debug.inc include \masm32\include\w2k\ntoskrnl.inc include \masm32\macros\strings.mac includelib \masm32\lib\ntoskrnl.lib includelib \masm32\lib\hal.lib IOCTL_PF_SET_EXTENSION_POINTER equ CTL_CODE(FILE_DEVICE_NETWORK, 22, METHOD_BUFFERED, FILE_WRITE_ACCESS) ;defs .data CCOUNTED_UNICODE_STRING "\\Device\\IPFILTERDRIVER" ,ipdrv_smbl,4 devobj PDEVICE_OBJECT ? isb IO_STATUS_BLOCK <> fileobj PFILE_OBJECT NULL myirp PIRP NULL .data? hook_nfo dd ? .code packethook proc PacketHeader:DWORD, Packet:DWORD, PacketLength:WORD, RecvInterfaceIndex:WORD,SendInterfaceIndex:WORD,RecvLinkNextHop:DWORD, SendLinkNextHop:DWORD mov eax, 1 ret packethook endp sethook proc packethook_f:dword invoke IoGetDeviceObjectPointer, addr ipdrv_smbl, STANDARD_RIGHTS_ALL, addr fileobj, addr devobj \\\\\\\вот здесь не возвращает STATUS_SUCCESS .if eax != STATUS_SUCCESS jmp exit .endif push packethook_f pop hook_nfo invoke IoBuildDeviceIoControlRequest,IOCTL_PF_SET_EXTENSION_POINTER,devobj, addr hook_nfo, sizeof hook_nfo, 0, 0, FALSE, 0, offset isb mov myirp,eax .if eax == NULL .endif invoke IoCallDriver,devobj,myirp exit: .if fileobj!=NULL invoke ObDereferenceObject,fileobj .endif ret sethook endp DriverUnload proc pDriverObject:PDRIVER_OBJECT ret DriverUnload endp DriverEntry proc pDriverObject:DWORD, pusRegistryPath:DWORD local status:NTSTATUS mov eax, pDriverObject assume eax:PTR DRIVER_OBJECT mov [eax].DriverUnload, offset DriverUnload invoke sethook, offset packethook mov eax, STATUS_SUCCESS ret DriverEntry endp end DriverEntry :make \masm32\bin\ml /nologo /c /coff E:\dev\sdev\driver\ipflt\2\ipflt.bat \masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:E:\dev\sdev\driver\ipflt\2\ipflt.sys /subsystem:native ipflt.obj del ipflt.obj echo. pause
я не слишком знаком с сетевыми фильтрами\драйверами\стеками драйверов, но девайс такой у вас утсановлен?
интересно получается, у меня под боком всего 3 машинки w2k sp4: Код (Text): kd> !devobj IPFILTERDRIVER Device object IPFILTERDRIVER not found kd> !devobj \Device\IPFILTERDRIVER Device object \Device\IPFILTERDRIVER not foun xp sp1: Код (Text): kd> !devobj IPFILTERDRIVER Device object IPFILTERDRIVER not found ещё есть w2k3 serv sp1, лог абсолютно идентичный двум предидущим
сначала запустите RtlInitUnicodeString(&IpFilterDriver, IP_FILTER_DRIVER); Status = ZwLoadDriver(&IpFilterDriver); if (NT_SUCCESS(Status)) { #define IP_FILTER_DRIVER L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\IpFilterDriver"
Так я ж не знаю откуда бсод, кидай что теб еотладчик выводит, может чего и подскажу. Не умеешь пользоваться тоже можно подсказать.