o
    Uh                     @   s  d dl Z d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
mZmZ d dlmZ edjZdZdZdZdZejjZdd	d
Zdd ZG dd dejZegej_eej_eegej_eej_eeej_ee egej!_eej!_eeej!_ee egej"_eej"_eeej"_g ej#_eej#_eeegej$_eej$_eeej$_eee	egej%_eej%_eeej%_e j&dd Z'dd Z(dd Z)dddZ*dS )    N)	BOOLCHARDWORDHANDLELONGLPWSTRMAX_PATHPDWORDULONG)SHELL_NAMES   z      i   c                        fdd}|S )Nc                    s   |  krt  | S N)ctypesWinError)retfuncargs	error_val b/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/shellingham/nt.pycheck   s   z_check_handle.<locals>.checkr   )r   r   r   r   r   _check_handle   s   r   c                    r   )Nc                    s&   | rdS t  }| krdS t |)NTF)r   GetLastErrorr   )r   r   r   codeexpectedr   r   r   (   s   
z_check_expected.<locals>.checkr   )r    r   r   r   r   _check_expected'   s   r!   c                   @   sV   e Zd Zdefdefdefdeefdefdefdefdefd	efd
ee	 ff
Z
dS )ProcessEntry32dwSizecntUsageth32ProcessIDth32DefaultHeapIDth32ModuleID
cntThreadsth32ParentProcessIDpcPriClassBasedwFlags	szExeFileN)__name__
__module____qualname__r   r   POINTERr
   r   r   r   _fields_r   r   r   r   r"   3   s    
r"   c              	   o   s4    | |i |}z|V  W t | d S t | w r   )kernel32CloseHandle)fr   kwargshandler   r   r   _handleg   s
   r7   c                  c   s    t j} t| td-}t }t||_t ||}|r/|V  t 	||}|sW d    d S W d    d S 1 s:w   Y  d S )Nr   )
r2   CreateToolhelp32Snapshotr7   TH32CS_SNAPPROCESSr"   r   sizeofr#   Process32FirstProcess32Next)r4   snapentryr   r   r   r   _iter_processesp   s   "r?   c                 C   s>   t t}	 td|j}t| d||r|jS | jd9  _q)NT r   r   )r   r   r   create_unicode_buffervaluer2   QueryFullProcessImageNameW)prochsize	path_buffr   r   r   _get_full_path{   s   rG   
   c           	   	   C   s   dd t  D }| pt } td|d D ]S}z||  \}}W n ty*   Y  d S w t|tr6|dd}|dd 	 }|t
vrF|} qt}ttj|d| }|t|fW  d      S 1 scw   Y  qd S )Nc                 S   s   i | ]
}|j |j|jfqS r   )r%   r)   r,   ).0procr   r   r   
<dictcomp>   s    zget_shell.<locals>.<dictcomp>r      mbcsreplace.)r?   osgetpidrangeKeyError
isinstancebytesdecode
rpartitionlowerr   !PROCESS_QUERY_LIMITED_INFORMATIONr7   r2   OpenProcessrG   )	pid	max_depthproc_map_ppid
executablenamekeyrD   r   r   r   	get_shell   s,   
	
&rc   )r   )NrH   )+
contextlibr   rP   ctypes.wintypesr   r   r   r   r   r   r   r	   r
   shellingham._corer   rB   INVALID_HANDLE_VALUEERROR_NO_MORE_FILESERROR_INSUFFICIENT_BUFFERr9   rY   windllr2   r   r!   	Structurer"   r3   argtypesrestyper8   errcheckr0   r;   r<   GetCurrentProcessIdrZ   rC   contextmanagerr7   r?   rG   rc   r   r   r   r   <module>   s`    ,

	

	