B
    `                 @   s  d dl Z d dl mZmZ e jdddZe e jdkr>e jZne j	Zej
Z
ejZejZejZeZe jZee
eZdZdZd	Zd
ZdZdZdZdZdZdZdZdZdZeeB eB eB ZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+eeB dB Z,dZ-dZ.dZ/G dd  d e j0Z1G d!d" d"e j0Z2G d#d$ d$e j0Z3G d%d& d&eZ4d'd( Z5d)d* Z6d+d, Z7d-d. Z8d/d0 Z9d1d2 Z:d3d4 Z;d5d6 Z<d7d8 Z=d Z>dZ?dZ@dZAd
ZBd9d: ZCd;d< ZDdS )=    N)WINFUNCTYPEwintypeskernel32T)use_last_error               	         i    i   i   i   i   i      @   i   i   i      i             i  c               @   s4   e Zd ZdefdefdefdefdefdefgZdS )IO_COUNTERSZReadOperationCountZWriteOperationCountZOtherOperationCountZReadTransferCountZWriteTransferCountZOtherTransferCountN)__name__
__module____qualname__	ULONGLONG_fields_ r   r   U/home/kop/projects/devel/pgwui/test_venv/lib/python3.7/site-packages/hupper/winapi.pyr   7   s   r   c            
   @   sF   e Zd Zdefdefdefdefdefdefdefdefd	efg	Zd
S )!JOBOBJECT_BASIC_LIMIT_INFORMATIONZPerProcessUserTimeLimitZPerJobUserTimeLimitZ
LimitFlagsZMinimumWorkingSetSizeZMaximumWorkingSetSizeZActiveProcessLimitZAffinityZPriorityClassZSchedulingClassN)r   r   r   LARGE_INTEGERDWORDSIZE_T	ULONG_PTRr   r   r   r   r   r   B   s   r   c               @   s4   e Zd ZdefdefdefdefdefdefgZdS )$JOBOBJECT_EXTENDED_LIMIT_INFORMATIONZBasicLimitInformationZIoInfoZProcessMemoryLimitZJobMemoryLimitZPeakProcessMemoryUsedZPeakJobMemoryUsedN)r   r   r   r   r   r   r   r   r   r   r   r!   P   s   r!   c               @   s0   e Zd ZdZdd Zdd Zdd ZeZeZdS )	HandleFc             C   s   | j sd| _ t|  d S )NT)closedCloseHandle)selfr   r   r   Close^   s    zHandle.Closec             C   s   | j sd| _ | jS tdd S )NTzalready closed)r#   value
ValueError)r%   r   r   r   Detachc   s    zHandle.Detachc             C   s   d| j j| jf S )Nz%s(%d))	__class__r   r'   )r%   r   r   r   __repr__i   s    zHandle.__repr__N)	r   r   r   r#   r&   r)   r+   __del____str__r   r   r   r   r"   [   s   r"   c             C   s   t |  d S )N)r   r$   )hr   r   r   r$   p   s    r$   c             C   s   | st t  |d S )N)ctypesZWinErrorZget_last_error)resultmsgr   r   r   
CheckErrort   s    r2   c          	   C   s8   t  }t| ||t||||}t|d t|jS )Nzfailed to duplicate handle)	r   HANDLEr   DuplicateHandler/   byrefr2   r"   r'   )ZhSourceProcessZhSourceHandleZhTargetProcessdesiredAccessZinheritHandleoptionsZtargetHandleretr   r   r   r4   y   s    
r4   c              C   s   t  } t| S )N)r   GetCurrentProcessr"   )hpr   r   r   r9      s    r9   c             C   s    t | ||}t|d t|S )Nzfailed to open process)r   OpenProcessr2   r"   )r6   Zinheritpidr:   r   r   r   r;      s    
r;   c             C   s   t | |}t|d t|S )Nzfailed to create job object)r   ZCreateJobObjectAr2   r"   )ZjobAttributesnamer:   r   r   r   CreateJobObject   s    
r>   c             C   s*   t | |t|t|}t|d d S )Nz$failed to set information job object)r   SetInformationJobObjectr/   r5   sizeofr2   )hJobZinfoTypeZjobObjectInfor8   r   r   r   r?      s    r?   c             C   s   t | |}t|d d S )Nz&failed to assign process to job object)r   AssignProcessToJobObjectr2   )rA   ZhProcessr8   r   r   r   rB      s    rB   c             C   s   t | ||}t|d d S )Nz failed to set handle information)r   SetHandleInformationr2   )r.   ZdwMaskZdwFlagsr8   r   r   r   rC      s    rC   c             C   s.   t j}ttf|_t|_|| |}t|d d S )Nz%failed in to set console ctrl handler)r   SetConsoleCtrlHandlerPHANDLER_ROUTINEBOOLargtypesrestyper2   )handleraddrD   r8   r   r   r   rD      s
    

rD   c                s&   t fdd t d  fddS )Nc                s    | t ttttfkr   dS dS )NTF)CTRL_C_EVENTCTRL_BREAK_EVENTCTRL_CLOSE_EVENTCTRL_LOGOFF_EVENTCTRL_SHUTDOWN_EVENT)Z	ctrl_type)rI   r   r   console_handler   s    z.AddConsoleCtrlHandler.<locals>.console_handlerTc                  s
   t  dS )NF)rD   r   )rP   r   r   <lambda>       z'AddConsoleCtrlHandler.<locals>.<lambda>)rE   rD   )rI   r   )rP   rI   r   AddConsoleCtrlHandler   s    
rS   )Er/   r   r   ZWinDLLr   r@   c_void_pc_int64r    c_ulongrF   r   r3   r   r   c_uint64r   rE   Z+JobObjectAssociateCompletionPortInformationZJobObjectBasicLimitInformationZJobObjectBasicUIRestrictionsZ JobObjectEndOfJobTimeInformationZ!JobObjectExtendedLimitInformationZ!JobObjectSecurityLimitInformationZJobObjectGroupInformationZ"JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSEDELETEZREAD_CONTROLZSYNCHRONIZEZ	WRITE_DACZWRITE_OWNERZSTANDARD_RIGHTS_REQUIREDZPROCESS_CREATE_PROCESSZPROCESS_CREATE_THREADZPROCESS_DUP_HANDLEZPROCESS_QUERY_INFORMATIONZ!PROCESS_QUERY_LIMITED_INFORMATIONZPROCESS_SET_INFORMATIONZPROCESS_SET_QUOTAZPROCESS_SUSPEND_RESUMEZPROCESS_TERMINATEZPROCESS_VM_OPERATIONZPROCESS_VM_READZPROCESS_VM_WRITEZPROCESS_ALL_ACCESSZDUPLICATE_SAME_ACCESSZHANDLE_FLAG_INHERITZHANDLE_FLAG_PROTECT_FROM_CLOSE	Structurer   r   r!   r"   r$   r2   r4   r9   r;   r>   r?   rB   rC   rK   rL   rM   rN   rO   rD   rS   r   r   r   r   <module>   s|   

	