
    Xf                         d dl mZmZmZ d dlmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ  G d dej        j                  Zd	S )
    )IterableCallableTuple)	renderers
interfaces
exceptions)requirements)utility)mac)pslistc                   \   e Zd ZdZdZdZdddddd	d
dddddZg dZg dZg dZ	eee	dZ
ed             Zd Zed             Zed             Zed fdej        j        dedeegef         deeej        j        ej        j        ej        j        f                  fd            Zd Zd Zd S )!Keventsz,Lists event handlers registered by processes)   r   r   )   r   r   EVFILT_READEVFILT_WRITE
EVFILT_AIOEVFILT_VNODEEVFILT_PROCEVFILT_SIGNALEVFILT_TIMEREVFILT_MACHPORT	EVFILT_FSEVFILT_USER	EVFILT_VM)r   r                     	   
      ))NOTE_DELETEr   )
NOTE_WRITEr   )NOTE_EXTENDr   )NOTE_ATTRIBr!   )	NOTE_LINK   )NOTE_RENAME    )NOTE_REVOKE@   ))	NOTE_EXITl        )NOTE_EXITSTATUSi   )	NOTE_FORKi   @)	NOTE_EXECi    )NOTE_SIGNALi   )	NOTE_REAPi   ))NOTE_SECONDSr   )NOTE_USECONDSr   )NOTE_NSECONDSr   )NOTE_ABSOLUTEr!   )r   r   r    c           	          t          j        ddddg          t          j        dt          j        d          t          j        d	t          j        d
          t          j        ddt          d          gS )NkernelzKernel module for the OSIntel32Intel64)namedescriptionarchitecturesr   )r   r   r   )r=   pluginversionmacutils)r   r   r   )r=   	componentrA   pidzFilter on specific process IDsT)r=   r>   element_typeoptional)
r	   ModuleRequirementPluginRequirementr   PsListVersionRequirementr   MacUtilitiesListRequirementint)clss    [/home/panchajanya/Development/work/volatility3/volatility3/framework/plugins/mac/kevents.pyget_requirementszKevents.get_requirementsB   s     *6()4  
 *fmY   +3+;Y   (< 	  
 	
    c                     |dk    s	|| j         vrdS g }| j         |         }|D ]#\  }}||z  |k    r|                    |           $d                    |          S )Nr    ,)all_filtersappendjoin)selffilter_indexfilter_flagscontextfiltersflagindexs          rO   _parse_flagszKevents._parse_flagsX   sy    1D4D D D2"<0" 	% 	%KD%e#u,,t$$$xx   rQ   c              #   0  K   	 t          ||          }t          ||          }|                    d||dz   |                    d                    }n# t          j        $ r Y dS w xY w|D ])}t
          j                            |d          D ]}	|	V  *dS )z
        Convenience wrapper for walking an array of lists of kernel events
        Handles invalid address references
        arrayr   klist)object_typeoffsetcountsubtypeNkn_link)getattrobjectget_typer   InvalidAddressExceptionr   rK   
walk_slist)
rN   r:   fdparray_pointer_memberarray_size_memberklist_array_pointer
array_sizeklist_arrayrb   kns
             rO   _walk_klist_arrayzKevents._walk_klist_arraye   s      	")#/C"D"D &788J --#* 1n00	 (  KK 1 	 	 	44	 ! 	 	E&11%CC  	 	s   AA A'&A'c              #      K   |j         }|                     ||dd          D ]}|V  |                     ||dd          D ]}|V  	 |j        }n# t          j        $ r Y dS w xY wt
          j                            |d          D ]}|V  dS )z
        Enumerates event filters per task.
        Uses smear-safe APIs throughout as these data structures
        see a significant amount of smear
        	fd_knlistfd_knlistsize	fd_knhashfd_knhashmaskNrg   )p_fdrt   p_klistr   rk   r   rK   rl   )rN   r:   taskrm   rs   r{   s         rO   _get_task_keventszKevents._get_task_kevents}   s       i''[/RR 	 	BHHHH''[/RR 	 	BHHHH	lGG1 	 	 	44	 "--gyAA 	 	BHHHH	 	s   	A A$#A$c                     dS )NF )_s    rO   <lambda>zKevents.<lambda>   s    u rQ   r[   kernel_module_namefilter_funcreturnc              #   ,  K   |j         |         }t          j                            t          j        j        d                   } ||||          D ]B}t          j        |j                  }|j        }| 	                    ||          D ]	}	|||	fV  
CdS )aN  
        Returns the kernel event filters registered

        Return values:
            A tuple of 3 elements:
                1) The name of the process that registered the filter
                2) The process ID of the process that registered the filter
                3) The object of the associated kernel event filter
        r   N)
modulesr   rI   get_list_taskspslist_methodsr
   array_to_stringp_commp_pidr}   )
rN   r[   r   r   r:   
list_tasksr|   	task_namerD   rs   s
             rO   list_kernel_eventszKevents.list_kernel_events   s      , !34]11&-2Nq2QRR
Jw(:KHH 	) 	)D/<<I*C++FD99 ) )b((((()		) 	)rQ   c              #     K   t           j                            | j                            dd                     }|                     | j        | j        d         |          D ]v\  }}}|j        j        dz  }|| j	        v r| j	        |         }n-	 |j        j
        }n# t          j        $ r Y Lw xY w|                     ||j                  }d|||||ffV  wd S )NrD   r:   )r   r   )r   rI   create_pid_filterconfiggetr   r[   	kn_keventfilterevent_typesidentr   rk   r_   
kn_sfflags)	rX   r   r   rD   rs   rY   filter_namer   r[   s	            rO   
_generatorzKevents._generator   s     m55dkooeT6R6RSS"&"9"9L$+h/[ #: #
 #
 	E 	EIsB <.3Lt///".|<*5    ''bmDDGsIuk7CDDDDD!	E 	Es   BB0/B0c                     t          j        dt          fdt          fdt          fdt          fdt          fg|                                           S )NPIDProcessIdentFilterContext)r   TreeGridrM   strr   )rX   s    rO   runzKevents.run   sP    !C #3C  OO	
 	
 		
rQ   N)__name__
__module____qualname____doc___required_framework_version_versionr   vnode_filtersproc_filterstimer_filtersrU   classmethodrP   r_   rt   r}   r   r[   ContextInterfacer   r   rM   boolr   r   objectsObjectInterfacer   r   r   r   rQ   rO   r   r      s       66"+H  K  M  L  M  K 
 
 [
*! ! !   [.   [, 
 .=_	) )#4)  ) seTk*	)
 
...0	

) ) ) [)@E E E*

 

 

 

 

rQ   r   N)typingr   r   r   volatility3.frameworkr   r   r   #volatility3.framework.configurationr	   volatility3.framework.objectsr
   volatility3.framework.symbolsr   volatility3.plugins.macr   pluginsPluginInterfacer   r   rQ   rO   <module>r      s   
 - , , , , , , , , , C C C C C C C C C C < < < < < < 1 1 1 1 1 1 - - - - - - * * * * * *F
 F
 F
 F
 F
j 0 F
 F
 F
 F
 F
rQ   