Documents & code‎ > ‎

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

Handle`s table -> NameByHandle() [NTHANDLE.SYS]   
post id40 
post length2558 
post datetime3/9/2010 7:13:18 PM 
post ip77.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 
Comments