
    Xf                         d dl 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	                  Z
 G d d	ej	                  Ze
ed
ZdS )    )objects
interfaces)
exceptions)Flags)	renderers)Unionc                       e Zd ZdZdefdZdeeej	        j
        f         fdZdeeej	        j
        f         fdZdeeej	        j
        f         fdZdeeej	        j
        f         fdZdefdZd	 Zd
S )SERVICE_RECORDzA service record structure.returnc                     | j         dk     s| j         dk    rdS 	 | j        j        }| j        j        }n# t          $ r Y dS w xY wdS )$Determine if the structure is valid.r   i  FT)OrderStatedescriptionStart
ValueError)self_s     k/home/panchajanya/Development/work/volatility3/volatility3/framework/symbols/windows/extensions/services.pyis_validzSERVICE_RECORD.is_valid   sb    :>>TZ&005	
&A
&AA 	 	 	55	 ts   3 
A Ac                     | j         j        dk    sd|                                 vrt          j                    S 	 | j        j        S # t          j        $ r t          j	                    cY S w xY w)z&Return the pid of the process, if any.SERVICE_RUNNINGPROCESS)
r   r   get_typer   NotApplicableValueServiceProcess	ProcessIdr   InvalidAddressExceptionUnreadableValuer   s    r   get_pidzSERVICE_RECORD.get_pid   s{     J"&777///111	/&001 	/ 	/ 	/,.....	/s   A "A,+A,c                    | j         j        dk    rt          j                    S 	 d|                                 v r5| j        j                                                            dddd          S | j	                                                            dddd          S # t          j        $ r t          j                    cY S w xY w)z/Returns the binary associated with the service.r   r   stringutf-16replace   encodingerrors
max_length)r   r   r   r   r   r   
BinaryPathdereferencecast
DriverNamer   r   r   r    s    r   
get_binaryzSERVICE_RECORD.get_binary)   s    :!%666/111
	/DMMOO++*5AACCHHx	c I    224499x	c :    1 	/ 	/ 	/,.....	/s   A
B  0/B   "CCc                     	 | j                                                             dddd          S # t          j        $ r t          j                    cY S w xY w)zReturns the service name.r#   r$   r%   r&   r'   )ServiceNamer,   r-   r   r   r   r   r    s    r   get_namezSERVICE_RECORD.get_name<   q    	/#//11668I# 7    1 	/ 	/ 	/,.....	/   /2 "AAc                     	 | j                                                             dddd          S # t          j        $ r t          j                    cY S w xY w)zReturns the service display.r#   r$   r%   r&   r'   )DisplayNamer,   r-   r   r   r   r   r    s    r   get_displayzSERVICE_RECORD.get_displayE   r3   r4   c                 |    dddddddd}t          |	          }d
                     || j                            S )zReturns the binary types.                      )SERVICE_KERNEL_DRIVERSERVICE_FILE_SYSTEM_DRIVERSERVICE_ADAPTORSERVICE_RECOGNIZER_DRIVERSERVICE_WIN32_OWN_PROCESSSERVICE_WIN32_SHARE_PROCESSSERVICE_INTERACTIVE_PROCESS)choices|)r   joinType)r   SERVICE_TYPE_FLAGS
type_flagss      r   r   zSERVICE_RECORD.get_typeN   sW     &'*+ )*)++-+.
 
 #5666
xx

49--...    c              #     K   	 t          | d          rJ| V  | j        }|r7|                                r'|V  |j        }|r|                                !dS dS dS dS | }|rN|                                r>|V  |j        j                                        }|r|                                8dS dS dS dS # t          j        $ r Y dS w xY w)z)Generator that enumerates other services.	PrevEntryN)hasattrrO   r   ServiceListBlinkr,   r   r   )r   recs     r   traversezSERVICE_RECORD.traverse^   s<     	t[)) >


 n (cllnn (III-C  (cllnn ( ( ( ( ( ( ( ( (  >cllnn >III//;;==C  >cllnn > > > > > > > > > 1 	 	 	44	s   AB6 AB6 6C	C	N)__name__
__module____qualname____doc__boolr   r   intr   r   BaseAbsentValuer!   strr/   r2   r7   r   rT    rM   r   r
   r
      s       %%$    /sJ$8$HHI / / / //E#z';'K"KL / / / /&/%Z%9%I IJ / / / //U3
(<(L#LM / / / //# / / / /     rM   r
   c                       e Zd ZdZdefdZdS )SERVICE_HEADERzA service header structure.r   c                 b    	 | j                                         S # t          j        $ r Y dS w xY w)r   F)ServiceRecordr   r   r   r    s    r   r   zSERVICE_HEADER.is_validw   sA    	%..0001 	 	 	55	s    ..N)rU   rV   rW   rX   rY   r   r]   rM   r   r_   r_   t   s5        %%$      rM   r_   )_SERVICE_RECORD_SERVICE_HEADERN)volatility3.frameworkr   r   r   &volatility3.framework.symbols.wrappersr   r   typingr   
StructTyper
   r_   class_typesr]   rM   r   <module>ri      s   
 6 5 5 5 5 5 5 5 , , , , , , 8 8 8 8 8 8 + + + + + +      e e e e eW' e e eP    W'    #1^TTrM   