
    Xf              	          d dl Z d dlmZmZmZ d dlmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ i ddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(i d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJi dKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdkdldmdndodpdqdrdsdtZ e j"                  e      Z G du dve	j(                  j*                        Zy)w    N)IteratorListTuple)	constants	renderers
exceptions
interfaces)requirements)format_hints)
driverscan'   FILE_DEVICE_8042_PORT2   FILE_DEVICE_ACPI)   FILE_DEVICE_BATTERY   FILE_DEVICE_BEEP*   FILE_DEVICE_BUS_EXTENDER   FILE_DEVICE_CD_ROM   FILE_DEVICE_CD_ROM_FILE_SYSTEM0   FILE_DEVICE_CHANGER   FILE_DEVICE_CONTROLLER   FILE_DEVICE_DATALINK   FILE_DEVICE_DFS5   FILE_DEVICE_DFS_FILE_SYSTEM6   FILE_DEVICE_DFS_VOLUME   FILE_DEVICE_DISK   FILE_DEVICE_DISK_FILE_SYSTEM3   FILE_DEVICE_DVD	   FILE_DEVICE_FILE_SYSTEM:   FILE_DEVICE_FIPS4   FILE_DEVICE_FULLSCREEN_VIDEO
   FILE_DEVICE_INPORT_PORT   FILE_DEVICE_KEYBOARD/   FILE_DEVICE_KS9   FILE_DEVICE_KSEC   FILE_DEVICE_MAILSLOT-   FILE_DEVICE_MASS_STORAGE   FILE_DEVICE_MIDI_IN   FILE_DEVICE_MIDI_OUT+   FILE_DEVICE_MODEM   FILE_DEVICE_MOUSE   FILE_DEVICE_MULTI_UNC_PROVIDER   FILE_DEVICE_NAMED_PIPE   FILE_DEVICE_NETWORK   FILE_DEVICE_NETWORK_BROWSER   FILE_DEVICE_NETWORK_FILE_SYSTEM(   FILE_DEVICE_NETWORK_REDIRECTOR   FILE_DEVICE_NULL   FILE_DEVICE_PARALLEL_PORT   FILE_DEVICE_PHYSICAL_NETCARD   FILE_DEVICE_PRINTER   FILE_DEVICE_SCANNER   FILE_DEVICE_SCREEN7   FILE_DEVICE_SERENUM   FILE_DEVICE_SERIAL_MOUSE_PORT   FILE_DEVICE_SERIAL_PORT1   FILE_DEVICE_SMARTCARD.   FILE_DEVICE_SMB   FILE_DEVICE_SOUND   FILE_DEVICE_STREAMS   FILE_DEVICE_TAPE    FILE_DEVICE_TAPE_FILE_SYSTEM8   FILE_DEVICE_TERMSRVFILE_DEVICE_TRANSPORTFILE_DEVICE_UNKNOWNFILE_DEVICE_VDMFILE_DEVICE_VIDEOFILE_DEVICE_VIRTUAL_DISKFILE_DEVICE_WAVE_INFILE_DEVICE_WAVE_OUT)!   "   ,   #   $   %   &   c                       e Zd ZdZdZdZedeej                  j                     fd       Zdee   fdZdej                   fdZy)	
DeviceTreezXListing tree based on drivers and attached devices in a particular windows memory image.)r   r   r   )r   r   r   returnc                     t        j                  ddddg      t        j                  dt        j                  d      gS )	NkernelzWindows kernelIntel32Intel64)namedescriptionarchitecturesr   )r   r   r   )r   pluginversion)r
   ModuleRequirementPluginRequirementr   
DriverScan)clss    b/home/panchajanya/Development/work/volatility3/volatility3/framework/plugins/windows/devicetree.pyget_requirementszDeviceTree.get_requirementsT   sG     **,()4
 **!**?*?	
 		
    c           
   #     K   | j                   j                  | j                  d      }t        j                  j                  | j                   |j                  |j                        D ]  }	 	 |j                         }dt)        j*                  |j                   j"                        d|t%        j,                         t%        j,                         t%        j,                         ff |j/                         D ]$  }	 |j1                         }t2        j5                  |j6                  d      }dt)        j*                  |j                   j"                        d	||t%        j,                         |ff t9        |j;                         d
      D ]  \  }}	 |j1                         }|j<                  j>                  jA                         }	t2        j5                  |j6                  d      }
|t)        j*                  |j                   j"                        d|||	|
ff  '  y # t        t        j                  f$ rT t        j                  t        j                  d|j                   j"                  d       t%        j&                         }Y w xY w# t        t        j                  f$ rT t        j                  t        j                  d|j                   j"                  d       t%        j&                         }Y w xY w# t        t        j                  f$ rT t        j                  t        j                  d|j                   j"                  d       t%        j&                         }Y w xY w# t        j                  $ r@ t        j                  t        j                  d|j                   j"                  d       Y ]w xY ww)Nr   zFailed to get Driver name : xr   DRVzFailed to get Device name : UNKNOWNr   DEVr   )startz$Failed to get Attached Device Name: ATTz3Invalid address identified in drivers and devices: )!contextmodulesconfigr   r   scan_drivers
layer_namesymbol_table_nameget_driver_name
ValueErrorr   InvalidAddressExceptionvolloglogr   LOGLEVEL_VVVVvoloffsetr   UnparsableValuer   HexNotApplicableValueget_devicesget_device_nameDEVICE_CODESget
DeviceType	enumerateget_attached_devicesDriverObject
DriverName
get_string)selfr   driverdriver_namedevicedevice_namedevice_typelevelattached_deviceattached_device_driver_nameattached_device_types              r   
_generatorzDeviceTree._generatora   sb    %%dkk(&;< !++88LL&++V-E-E
 W	FT>"("8"8":K $(():):;#!446!446!446
 
 %002 6FB&,&<&<&> #/"2"263D3Di"PK (,,VZZ->->?!''%88:'
 
 3<335Q3 .F*9*I*I*KK ,88CCNNP 4 0</?/?+66	0,
 " , 0 01B1B C % + + ; 4
 
'365W	 #J$F$FG >JJ!//6vzz7H7H6KL #,";";"=K>. '
(J(JK B

%33:6::;L;LQ:OP '0&?&?&AB6 !+J,N,NO F"JJ ) 7 7"FGZGZGaGabcFd e +4*C*C*EKF4 55 

++I&**J[J[\]I^_ s   A*O	.H#>A=M3<JBM3L#A<M3O	#A)JM3JM3A)L <M3?L  M3A)M0	,M3/M0	0M33AOO	OO	c           	          t        j                  dt        j                  fdt        fdt        fdt        fdt        fdt        fg| j                               S )NOffsetTyper   
DeviceNameDriverNameOfAttDevicer   )r   TreeGridr   r   strr   )r   s    r   runzDeviceTree.run   s[    !!<++,s#s#(#.s# OO

 
	
r   N)__name__
__module____qualname____doc___required_framework_version_versionclassmethodr   r	   configurationRequirementInterfacer   r   r   r   r   r   r    r   r   r   r   N   s_    b"+H

j&>&>&S&S!T 

 

[HUO [z
Y'' 
r   r   )loggingtypingr   r   r   volatility3.frameworkr   r   r   r	   #volatility3.framework.configurationr
   volatility3.framework.renderersr   volatility3.plugins.windowsr   r   	getLoggerr   r   pluginsPluginInterfacer   r   r   r   <module>r      s.  
  ( ( N N < 8 2;';"; %; "	;
 *; $; 0; %; (; &; !; -; (; "; .;  !!;" )#;$ "%;& .';( ));* &+;,  -;. "/;0 &1;2 *3;4 %5;6 &7;8 #9;: #;;< 0=;> (?;@ %A;B -C;D 1E;F 0G;H "I;J +K;L .M;N %O;P %Q;R $S;T %U;V /W;X )Y;Z '[;\ !];^ #_;` %a;b "c;d .e;f %g;h (%!#*%&u;z 
		8	${
##33 {
r   