o
    jN                     @   sf   d dl Z d dlZd dlT G dd dejZG dd dZG dd dZG d	d
 d
ZG dd dZdS )    N)*c                   @   s$   e Zd ZdZdZdZdZdZdZdS )	DumpFlags                   N)	__name__
__module____qualname__!MINIDUMP_THREAD_INFO_ERROR_THREAD"MINIDUMP_THREAD_INFO_EXITED_THREAD$MINIDUMP_THREAD_INFO_INVALID_CONTEXT!MINIDUMP_THREAD_INFO_INVALID_INFO MINIDUMP_THREAD_INFO_INVALID_TEB#MINIDUMP_THREAD_INFO_WRITING_THREAD r   r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/streams/ThreadInfoListStream.pyr      s    r   c                   @   (   e Zd Zdd Zdd Zedd ZdS )MINIDUMP_THREAD_INFO_LISTc                 C   s   d | _ d | _d | _d S N)SizeOfHeaderSizeOfEntryNumberOfEntriesselfr   r   r   __init__   s   
z"MINIDUMP_THREAD_INFO_LIST.__init__c                 C   sD   | j jjdddd}|| jjdddd7 }|| jjdddd7 }|S Nr   littleF	byteordersigned)r   valueto_bytesr   r   r   tr   r   r   r$      s   z"MINIDUMP_THREAD_INFO_LIST.to_bytesc                 C   sR   t  }tj| dddd|_tj| dddd|_tj| dddd|_|S r   )r   int
from_bytesreadr   r   r   )buffmtilr   r   r   parse    s
   zMINIDUMP_THREAD_INFO_LIST.parseNr
   r   r   r   r$   staticmethodr,   r   r   r   r   r      s
    r   c                   @   r   )MINIDUMP_THREAD_INFOc                 C   @   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d | _	d S r   
ThreadIdr   	DumpError
ExitStatus
CreateTimeExitTime
KernelTimeUserTimeStartAddressAffinityr   r   r   r   r   ,      
zMINIDUMP_THREAD_INFO.__init__c                 C   s   | j jjdddd}| jr|| jjjdddd7 }n|d7 }|| jjdddd7 }|| jjdddd7 }|| jjdddd7 }|| jjdddd7 }|| jjdddd7 }|| j	jdddd7 }|| j
jdddd7 }|| jjdddd7 }|S )Nr   r   Fr    s       r   )r2   r#   r$   r   r3   r4   r5   r6   r7   r8   r9   r:   r%   r   r   r   r$   8   s   zMINIDUMP_THREAD_INFO.to_bytesc                 C   s  t  }tj| dddd|_zttj| dddd|_W n   Y tj| dddd|_tj| dddd|_tj| dddd|_tj| dddd|_	tj| dddd|_
tj| dddd|_tj| dddd|_tj| dddd|_|S )Nr   r   Fr    r   )r/   r'   r(   r)   r2   r   r3   r4   r5   r6   r7   r8   r9   r:   )r*   mtir   r   r   r,   H   s    zMINIDUMP_THREAD_INFO.parseNr-   r   r   r   r   r/   +   s
    r/   c                   @   <   e Zd Zdd Zedd Zedd Zdd Zd	d
 ZdS )MinidumpThreadInfoc                 C   r0   r   r1   r   r   r   r   r   [   r;   zMinidumpThreadInfo.__init__c                 C   sZ   t  }| j|_| j|_| j|_| j|_| j|_| j|_| j|_| j|_| j	|_	| j
|_
|S r   )r>   r2   r   r3   r4   r5   r6   r7   r8   r9   r:   )r&   r*   r<   r   r   r   r,   g   s   zMinidumpThreadInfo.parsec                   C   s   g dS )Nr1   r   r   r   r   r   
get_headerv   s   zMinidumpThreadInfo.get_headerc                 C   sT   t | jt| jt| jt | jt| jt| jt| jt| j	t | j
t| jg
S r   )hexr2   strr   r3   r4   r5   r6   r7   r8   r9   r:   r   r   r   r   to_row   s   zMinidumpThreadInfo.to_rowc                 C   s0   d| j | j| j| j| j| j| j| j| j| j	f
 S )NzThreadId: %x DumpFlags: %s DumpError: %s ExitStatus: %x CreateTime: %s ExitTime: %s KernelTime: %s UserTime: %s StartAddress: %x Affinity: %dr1   r   r   r   r   __str__   s   *zMinidumpThreadInfo.__str__N)	r
   r   r   r   r.   r,   r?   rB   rC   r   r   r   r   r>   Z   s    

r>   c                   @   r=   )MinidumpThreadInfoListc                 C   s   d | _ g | _d S r   )headerinfosr   r   r   r   r      s   
zMinidumpThreadInfoList.__init__c                 C   sl   t  }|| jj || jj}t|}t	||_
t|j
jD ]}t	|}|jt	|| q"|S r   rD   seekLocationRvar)   DataSizeioBytesIOr   r,   rE   ranger   r/   rF   appendr>   dirr*   r&   datachunk_mir   r   r   r,      s   

zMinidumpThreadInfoList.parsec                    sz   t  }|| jjI d H  || jjI d H }t|}t	||_
t|j
jD ]}t	|}|jt	|d  q)|S r   rG   rP   r   r   r   aparse   s   

zMinidumpThreadInfoList.aparsec                 C   s0   g }| t  | jD ]	}| |  q|S r   )rO   r>   r?   rF   rB   )r   r&   infor   r   r   to_table   s
   
zMinidumpThreadInfoList.to_tablec                 C   s   dt |   S )Nz== ThreadInfoList ==
)construct_tablerX   r   r   r   r   rC      s   zMinidumpThreadInfoList.__str__N)	r
   r   r   r   r.   r,   rV   rX   rC   r   r   r   r   rD      s    

rD   )	rL   enumminidump.common_structsEnumr   r   r/   r>   rD   r   r   r   r   <module>   s   	/=