Handle`s table -> NameByHandle() [NTHANDLE.SYS]

Handle`s table -> NameByHandle() [NTHANDLE.SYS]

post id: 40

post length: 2558

post datetime: 3/9/2010 7:13:18 PM

post ip: 77.51.2.19

[RE] Handle`s table -> NameByHandle()

[RE] ещё один вариант разыменования описателя объекта через драйвер [NTHANDLE.SYS]:

1. Сперва регистрируем [*.SYS]

Public [drv] = IRegDriver()

Function IRegDriver() As Integer

' регистрируем в реестре наш драйвер для

' его последующей загрузки:

Dim Key As Integer _

= &H80000002 _

, SubKey As String _

= "SYSTEM\CurrentControlSet\Services" _

, KEY_ALL_ACCESS As Integer _

= ((&H1 Or &H2 Or &H4 Or &H8 Or &H10 Or &H20)) _

, [Returned] As Integer = Nothing _

, [drv] As IntPtr = Nothing

If IRegKey.RegOpenKeyEx(Key, SubKey, 0, KEY_ALL_ACCESS, [Returned]) = 0 Then

If IRegKey.RegCreateKey([Returned], ".NTHANDLE", [Returned]) = 0 Then

IRegKey.RegSetValueEx([Returned], "Type", 0, 4, New IntPtr(1000), 4)

IRegKey.RegSetValueEx([Returned], "ErrorControl", 0, 4, New IntPtr(1000), 4)

IRegKey.RegSetValueEx([Returned], "Start", 0, 4, New IntPtr(1000), 4)

IRegKey.RegSetValueEx([Returned], "ImagePath", 0, 1, Marshal.StringToBSTR("[path to NTHANDLE.SYS]"), 100)

'[ЗАГРУЖАЕМ ЕГО]

NtLoadDriver(...)

' а быть может даже и так:

' SystemLoadAndCallImage(...)

' Получаем его дескриптор для последующего обращения

' по нему через [DeviceIoControl]:

[drv] = CreateFile(...)

RegCloseKey([Returned])

End If

End If

Return [drv]

End Function

2. И далее, при переборе [SHI]() обращяемся к нему через [DeviceIoControl] для получения [ONI]

Public Function GET_NAME_BY_HANDLE(ByVal IHandle As [Int32], ByVal SHI AsSYSTEM_HANDLE_INFORMATION) As String

Dim Ret As String = ""

'|-----------------------

'| CTLCODE`S |

'|-----------------------

Const IOCTL_CODE As Integer = &H83350000

Dim OutPtr_size As Integer = 2048 _

, OutPtr As IntPtr = Marshal.AllocHGlobal(OutPtr_size) _

, InPtr_size As Integer = Marshal.SizeOf(12) _

, InPtr As IntPtr = Marshal.AllocHGlobal(InPtr_size) _

, Bytes As Integer _

Marshal.WriteInt32(InPtr, {ofs}, SHI.Obj)

If Not (WinIoCtl.DeviceIoControl([drv], IOCTL_CODE _

, InPtr, InPtr_size, OutPtr, OutPtr_size _

, Bytes, 0) = 0) Then

'...

'Получаем структуру [ONI]

'...

End If

Marshal.FreeHGlobal(OutPtr)

Marshal.FreeHGlobal(InPtr)

'|-----------------------

Return Ret

End Function

THE END