o
    *i                     @   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 H/home/kim/smarthome/.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   Z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dwSizeZcntUsageth32ProcessIDZth32DefaultHeapIDZth32ModuleIDZ
cntThreadsth32ParentProcessIDZpcPriClassBaseZdwFlags	szExeFileN)__name__
__module____qualname__r   r   POINTERr
   r   r   r   Z_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
   r/   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   )
r*   CreateToolhelp32Snapshotr/   TH32CS_SNAPPROCESSr!   r   Zsizeofr"   Process32FirstProcess32Next)r,   Zsnapentryr   r   r   r   _iter_processesp   s   "r5   c                 C   s>   t t}	 td|j}t| d||r|jS | jd9  _q)NT r   r   )r   r   r   Zcreate_unicode_buffervaluer*   QueryFullProcessImageNameW)prochsizeZ	path_buffr   r   r   _get_full_path{   s   r;   
   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.)r5   osgetpidrangeKeyError
isinstancebytesdecode
rpartitionlowerr   !PROCESS_QUERY_LIMITED_INFORMATIONr/   r*   OpenProcessr;   )	pid	max_depthZproc_map_Zppid
executablenamekeyr9   r   r   r   	get_shell   s,   
	
&rU   )r   )Nr<   )+
contextlibr   rD   Zctypes.wintypesr   r   r   r   r   r   r   r	   r
   Zshellingham._corer   r7   ZINVALID_HANDLE_VALUEZERROR_NO_MORE_FILESZERROR_INSUFFICIENT_BUFFERr1   rM   Zwindllr*   r   r    Z	Structurer!   r+   argtypesrestyper0   Zerrcheckr)   r2   r3   ZGetCurrentProcessIdrN   r8   contextmanagerr/   r5   r;   rU   r   r   r   r   <module>   s`    ,

	

	