o
    �õ±j¢#  ã                   @   sœ   d dl Z d dlZd dlT d dlmZ G dd„ dƒZG dd„ dƒZG dd	„ d	ƒZ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)Ú*)ÚListc                   @   ó    e Zd Zdd„ Zedd„ ƒZdS )ÚMINIDUMP_HANDLE_DATA_STREAMc                 C   ó   d | _ d | _d | _d | _d S ©N)ÚSizeOfHeaderÚSizeOfDescriptorÚNumberOfDescriptorsÚReserved©Úself© r   ú”/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minidump/streams/HandleDataStream.pyÚ__init__   ó   
z$MINIDUMP_HANDLE_DATA_STREAM.__init__c                 C   sj   t ƒ }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 ©Né   ÚlittleF©Ú	byteorderÚsigned)r   ÚintÚ
from_bytesÚreadr   r	   r
   r   )ÚbuffÚmhdsr   r   r   Úparse   s   z!MINIDUMP_HANDLE_DATA_STREAM.parseN©Ú__name__Ú
__module__Ú__qualname__r   Ústaticmethodr   r   r   r   r   r      s    r   c                   @   s$   e Zd ZdZdd„ Zedd„ ƒZdS )ÚMINIDUMP_HANDLE_DESCRIPTORé    c                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S r   )ÚHandleÚTypeNameRvaÚObjectNameRvaÚ
AttributesÚGrantedAccessÚHandleCountÚPointerCountr   r   r   r   r       s   
z#MINIDUMP_HANDLE_DESCRIPTOR.__init__c                 C   s²   t ƒ }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 ©Né   r   Fr   r   )r#   r   r   r   r%   r&   r'   r(   r)   r*   r+   ©r   Úmhdr   r   r   r   )   s   z MINIDUMP_HANDLE_DESCRIPTOR.parseN)r   r    r!   Úsizer   r"   r   r   r   r   r   r#      s
    	r#   c                   @   r   )ÚMINIDUMP_HANDLE_DESCRIPTOR_2c                 C   s:   d | _ d | _d | _d | _d | _d | _d | _d | _d | _d S r   )	r%   r&   r'   r(   r)   r*   r+   ÚObjectInfoRvaÚ	Reserved0r   r   r   r   r   8   s   
z%MINIDUMP_HANDLE_DESCRIPTOR_2.__init__c                 C   sâ   t ƒ }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�|_tj|  d¡ddd�|_|S r,   )r1   r   r   r   r%   r&   r'   r(   r)   r*   r+   r2   r3   r.   r   r   r   r   C   s   z"MINIDUMP_HANDLE_DESCRIPTOR_2.parseNr   r   r   r   r   r1   7   s    r1   c                   @   s$   e Zd ZdZdZdZdZdZdZdS )Ú'MINIDUMP_HANDLE_OBJECT_INFORMATION_TYPEr   é   é   é   r   é   N)	r   r    r!   ÚMiniHandleObjectInformationNoneÚMiniThreadInformation1ÚMiniMutantInformation1ÚMiniMutantInformation2ÚMiniProcessInformation1ÚMiniProcessInformation2r   r   r   r   r4   R   s    r4   c                   @   s,   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdS )Ú"MINIDUMP_HANDLE_OBJECT_INFORMATIONc                 C   r   r   )ÚNextInfoRvaÚInfoTypeÚ
SizeOfInfoÚ
info_bytesr   r   r   r   r   \   s   
z+MINIDUMP_HANDLE_OBJECT_INFORMATION.__init__c                 C   s`   t ƒ }tj|  d¡ddd�|_tj|  d¡ddd�|_tj|  d¡ddd�|_|  |j¡|_|S r   )r?   r   r   r   r@   rA   rB   rC   )r   Úmhoir   r   r   r   d   s   z(MINIDUMP_HANDLE_OBJECT_INFORMATION.parsec                 Ã   s†   �t ƒ }|  d¡I d H }tj|ddd�|_|  d¡I d H }tj|ddd�|_|  d¡I d H }tj|ddd�|_|  |j¡I d H |_|S r   )r?   r   r   r   r@   rA   rB   rC   )r   rD   Útr   r   r   Úaparsem   s   €z)MINIDUMP_HANDLE_OBJECT_INFORMATION.aparseN)r   r    r!   r   r"   r   rF   r   r   r   r   r?   [   s    
r?   c                   @   s(   e Zd Zdd„ Zedd„ ƒZdd„ ZdS )ÚMinidumpHandleObjectInformationc                 C   r   r   )ÚNextInforA   rB   rC   r   r   r   r   r   z   r   z(MinidumpHandleObjectInformation.__init__c                 C   s"   t ƒ }| j|_| j|_| j|_|S r   )rG   rA   rB   rC   )rD   rE   r   r   r   r   €   s
   z%MinidumpHandleObjectInformation.parsec                 C   s
   | j  ¡ S r   )rC   Úhexr   r   r   r   Ú__str__ˆ   s   
z'MinidumpHandleObjectInformation.__str__N)r   r    r!   r   r"   r   rJ   r   r   r   r   rG   y   s
    
rG   c                   @   sL   e Zd Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZed	d
„ ƒZdd„ Z	dS )ÚMinidumpHandleDescriptorc                 C   s4   d | _ d | _d | _d | _d | _d | _d | _g | _d S r   )r%   ÚTypeNameÚ
ObjectNamer(   r)   r*   r+   ÚObjectInfosr   r   r   r   r   Ž   s   
z!MinidumpHandleDescriptor.__init__c                 C   s”   t ƒ }| j|_| jdkrt | j|¡|_| jdkr!t | j|¡|_| j|_| j	|_	| j
|_
| j|_t| tƒrH| jd urH| jdkrHt  || j|¡ |S ©Nr   )rK   r%   r&   ÚMINIDUMP_STRINGÚget_from_rvarL   r'   rM   r(   r)   r*   r+   Ú
isinstancer1   r2   Úwalk_objectinfo©rE   r   r/   r   r   r   r   ˜   s   


zMinidumpHandleDescriptor.parsec                 Ã   s¨   �t ƒ }| j|_| jdkrt | j|¡I d H |_| jdkr(t | j|¡I d H |_| j|_| j	|_	| j
|_
| j|_t| tƒrR| jd urR| jdkrRt  || j|¡I d H  |S rO   )rK   r%   r&   rP   Úaget_from_rvarL   r'   rM   r(   r)   r*   r+   rR   r1   r2   Úawalk_objectinforT   r   r   r   rF   ©   s   €


zMinidumpHandleDescriptor.aparsec                 C   s`   |d ur*|dkr.|  |¡ t |¡}t |¡}| j |¡ |j}|d ur,|dksd S d S d S d S rO   )Úseekr?   r   rG   rN   ÚappendrH   ©r/   Ústartr   rD   rE   r   r   r   rS   º   s   


 ûz(MinidumpHandleDescriptor.walk_objectinfoc                 Ã   sn   �|d ur1|dkr5|  |¡I d H  t |¡I d H }t |¡}| j |¡ |j}|d ur3|dks	d S d S d S d S rO   )rW   r?   rF   rG   r   rN   rX   rH   rY   r   r   r   rV   Ã   s   €
 ûz)MinidumpHandleDescriptor.awalk_objectinfoc                 C   s‚   d}|d| j  7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }|d| j 7 }| jD ]}|t|ƒ7 }q6|S )	Nz == MinidumpHandleDescriptor == 
zHandle 0x%08x zTypeName %s zObjectName %s zAttributes %s zGrantedAccess %s zHandleCount %s zPointerCount %s )	r%   rL   rM   r(   r)   r*   r+   rN   Ústr)r   rE   Úoir   r   r   rJ   Í   s   
z MinidumpHandleDescriptor.__str__N)
r   r    r!   r   r"   r   rF   rS   rV   rJ   r   r   r   r   rK   �   s    




	rK   c                   @   s4   e Zd Zdd„ Zedd„ ƒZedd„ ƒZdd„ Zd	S )
ÚMinidumpHandleDataStreamc                 C   s   d | _ g | _d S r   )ÚheaderÚhandlesr   r   r   r   r   Û   s   
z!MinidumpHandleDataStream.__init__c                 C   s–   t ƒ }| | jj¡ t | | jj¡¡}t 	|¡|_
t|j
jƒD ](}|j
jtjkr9t 	|¡}|j t 	||¡¡ q t 	|¡}|j t 	||¡¡ q |S r   )r]   rW   ÚLocationÚRvaÚioÚBytesIOr   ÚDataSizer   r   r^   Úranger
   r	   r#   r0   r_   rX   rK   r1   )Údirr   rE   ÚchunkÚ_r/   r   r   r   r   ß   s   

zMinidumpHandleDataStream.parsec                 Ã   s¼   �t ƒ }| | jj¡I d H  | | jj¡I d H }t |¡}t 	|¡|_
t|j
jƒD ]2}|j
jtjkrGt 	|¡}t ||¡I d H }|j |¡ q)t 	|¡}t ||¡I d H }|j |¡ q)|S r   )r]   rW   r`   ra   r   rd   rb   rc   r   r   r^   re   r
   r	   r#   r0   rK   rF   r_   rX   r1   )rf   r   rE   Ú
chunk_datarg   rh   r/   Úrr   r   r   rF   î   s   €


zMinidumpHandleDataStream.aparsec                 C   s    d}| j D ]}|t|ƒ7 }q|S )Nz== MinidumpHandleDataStream ==
)r_   r[   )r   rE   Úhandler   r   r   rJ      s   
z MinidumpHandleDataStream.__str__N)r   r    r!   r   r"   r   rF   rJ   r   r   r   r   r]   Ú   s    

r]   )rb   ÚenumÚminidump.common_structsÚtypingr   r   r#   r1   ÚEnumr4   r?   rG   rK   r]   r   r   r   r   Ú<module>   s   	M