w2k3 и IPFILTERDRIVER

Тема в разделе "WASM.NT.KERNEL", создана пользователем valix7, 19 сен 2007.

  1. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    Привет, почему данный код не работает под вин2003? хотя под ХР нормально пашет, т.е. режит все пакеты.
    Код (Text):
    1. ;@echo off
    2.  ;goto make
    3.  .386
    4.  .model flat, stdcall
    5.  option casemap:none
    6.  
    7. include \masm32\include\w2k\ntstatus.inc
    8. include \masm32\include\w2k\hal.inc
    9. include \masm32\include\w2k\ntddk.inc
    10. include \masm32\include\debug.inc
    11. include \masm32\include\w2k\ntoskrnl.inc
    12.  
    13. include \masm32\macros\strings.mac
    14.  
    15. includelib \masm32\lib\ntoskrnl.lib
    16. includelib \masm32\lib\hal.lib
    17. IOCTL_PF_SET_EXTENSION_POINTER equ  CTL_CODE(FILE_DEVICE_NETWORK, 22, METHOD_BUFFERED, FILE_WRITE_ACCESS)
    18. ;defs
    19.  
    20. .data
    21. CCOUNTED_UNICODE_STRING "\\Device\\IPFILTERDRIVER" ,ipdrv_smbl,4
    22. devobj PDEVICE_OBJECT ?
    23. isb IO_STATUS_BLOCK <>
    24. fileobj PFILE_OBJECT NULL
    25. myirp PIRP NULL
    26. .data?
    27. hook_nfo dd ?
    28.  .code
    29.  
    30.  
    31. packethook proc PacketHeader:DWORD, Packet:DWORD, PacketLength:WORD,
    32.         RecvInterfaceIndex:WORD,SendInterfaceIndex:WORD,RecvLinkNextHop:DWORD,
    33.         SendLinkNextHop:DWORD
    34.  
    35.         mov eax, 1
    36.     ret
    37. packethook endp
    38.  
    39. sethook proc packethook_f:dword
    40.     invoke IoGetDeviceObjectPointer, addr ipdrv_smbl, STANDARD_RIGHTS_ALL, addr fileobj, addr devobj
    41.      \\\\\\\вот здесь не возвращает STATUS_SUCCESS
    42.     .if eax != STATUS_SUCCESS
    43.     jmp exit
    44.     .endif
    45.     push packethook_f
    46.     pop hook_nfo
    47.     invoke IoBuildDeviceIoControlRequest,IOCTL_PF_SET_EXTENSION_POINTER,devobj, addr hook_nfo, sizeof hook_nfo, 0, 0, FALSE, 0, offset isb
    48.     mov myirp,eax
    49.     .if eax == NULL
    50.  
    51.     .endif
    52.     invoke IoCallDriver,devobj,myirp
    53.     exit:
    54.     .if fileobj!=NULL
    55.         invoke ObDereferenceObject,fileobj
    56.     .endif
    57.  
    58. ret          
    59. sethook endp
    60.  
    61. DriverUnload proc pDriverObject:PDRIVER_OBJECT
    62. ret
    63. DriverUnload endp
    64.  
    65. DriverEntry proc pDriverObject:DWORD, pusRegistryPath:DWORD
    66. local status:NTSTATUS
    67. mov eax, pDriverObject
    68. assume eax:PTR DRIVER_OBJECT
    69. mov [eax].DriverUnload, offset DriverUnload
    70. invoke sethook, offset packethook
    71. mov eax, STATUS_SUCCESS
    72. ret
    73. DriverEntry endp
    74.  
    75.  
    76. end DriverEntry
    77.  
    78.  :make
    79.  \masm32\bin\ml /nologo /c /coff E:\dev\sdev\driver\ipflt\2\ipflt.bat
    80.  \masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:E:\dev\sdev\driver\ipflt\2\ipflt.sys /subsystem:native ipflt.obj
    81.  
    82.  del ipflt.obj
    83.  
    84.  echo.
    85.  pause
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    я не слишком знаком с сетевыми фильтрами\драйверами\стеками драйверов, но девайс такой у вас утсановлен?
     
  3. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    IPFILTERDRIVER? да он установлен на всех NT..
     
  4. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    интересно получается, у меня под боком всего 3 машинки
    w2k sp4:
    Код (Text):
    1. kd> !devobj IPFILTERDRIVER
    2. Device object IPFILTERDRIVER not found
    3. kd> !devobj \Device\IPFILTERDRIVER
    4. Device object \Device\IPFILTERDRIVER not foun
    xp sp1:
    Код (Text):
    1. kd> !devobj IPFILTERDRIVER
    2. Device object IPFILTERDRIVER not found
    ещё есть w2k3 serv sp1, лог абсолютно идентичный двум предидущим
     
  5. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    страно, у меня все есть... под хр, под 2003, 2000...
     
  6. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    сначала запустите
    RtlInitUnicodeString(&IpFilterDriver, IP_FILTER_DRIVER);
    Status = ZwLoadDriver(&IpFilterDriver);
    if (NT_SUCCESS(Status)) {
    #define IP_FILTER_DRIVER L"\\Registry\\Machine\\System\\CurrentControlSet\\Services\\IpFilterDriver"
     
  7. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    2Cock, после ZwLoadDriver у меня вообще вылетает в BSOD
     
  8. Cock

    Cock New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    148
    Так я ж не знаю откуда бсод, кидай что теб еотладчик выводит, может чего и подскажу. Не умеешь пользоваться тоже можно подсказать.
     
  9. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    2Cock, уже все нормально... моя ошибка была...
     
  10. valix7

    valix7 New Member

    Публикаций:
    0
    Регистрация:
    31 окт 2006
    Сообщения:
    143
    Спасибо Cock! проблема решился путем вызова ZwLoadDriver