o
    Žõ±j8\  ã                   @   s   d Z ddlZddlZdZeeƒ  ¡ ƒZze W n ey5   da	G dd„ de
ƒZddlmZ d�dd„ZY nw ejZejZejZejZejZejZG dd	„ d	ejƒZG d
d„ dejƒZze e e ¡ ¡¡ ejZW n eyu   ejZY nw dZer•G dd„ deƒZG dd„ deƒZG dd„ deƒZeƒ Zd�dd„Z d�dd„Z!d�dd„Z"G dd„ deƒZ#G dd„ deƒZ$dd„ Z%d d!„ Z&ejZ'ejZ(ej)Z*ej+Z,ej-Z.ej/Z0ej1Z2ej3Z4ej5Z6ej7Z8ej9Z:ej1Z;ej/Z<ej5Z=ej3Z>ej5Z?ej3Z@ej9ZAej7ZBejCZDejEZFejGZHej1ZIej5ZJej9ZKejLZMej/ZNej3ZOej7ZPej5ZQej9ZRej3ZSej7ZTej3ZUej7ZVej5ZWejXZYejZZ[zej\Z]ej^Z_W n  e`�yV   e,e0e4e8d"œee'ƒ Z]e.e2e6e:d"œee'ƒ Z_Y nw ee]ƒZae]Zbe]Zce]Zde'ZeeeeƒZfeDZgeFZheDZieFZjee,ƒZkee.ƒZlee0ƒZmee2ƒZnee4ƒZoee6ƒZpee@ƒZqee?ƒZreoZseebƒZteqZuerZve(Zwe,ZxeeWƒZyeyZze(Z{e,Z|eBZ}eeUƒZ~eeSƒZeeVƒZ€eeTƒZ�e~Z‚eZƒe€Z„e�Z…e0Z†e'Z‡ee‡ƒZˆeˆZ‰e‡ZŠe‡Z‹e‡ZŒe‡Z�ee�ƒZŽe‡Z�e‡Z�e‡Z‘e‡Z’e‡Z“e‡Z”e‡Z•e?Z–e‡Z—e‡Z˜e‡Z™e™Zše™Z›e™Zœe™Z�e™Zže™ZŸe™Z e™Z¡e™Z¢e™Z£e™Z¤e‡Z¥e?Z¦ee¦ƒZ§ecZ¨e4Z©e8Zªe4Z«e'Z¬e'Z­e4Z®e®Z¯ee®ƒZ°ee¯ƒZ±eeZ²G d#d$„ d$eƒZ³ee³ƒZ´G d%d&„ d&eƒZµeeµƒZ¶dZ·d'Z¸d(Z¹dZºd(Z»ze d'¡j¼Z½W n! e�yp   eejƒd)k�rbd*Z½neejƒd+k�rmd,Z½n‚ Y nw d-Z¾d.Z¿dZÀd(ZÁd/ZÂd0ZÃd1ZÄd2ZÅd+ZÆd3ZÇd4ZÈd5ZÉd6ZÊd7ZËd8ZÌd9ZÍd:ZÎd;ZÏd<ZÐd=ZÑd>ZÒd?ZÓd@ZÔdAZÕdBZÖdCZ×dDZØdEZÙdFZÚdGZÛdHZÜdIZÝdJZÞdKZßdLZàdMZádNZâdOZãdPZädQZådRZædSZçdTZèdUZédVZêdWZëdXZìdYZídZZîd[Zïd\Zðd]Zñd^Zòd_Zód`ZôdaZõdbZödcZ÷ddZødeZùdfZúdgZûdhZüdiZýdjZþdkZÿdl�Z dm�Zdn�Zdo�Zdp�Zdq�Zdr�Zds�Zdt�Zdu�Z	dv�Z
dw�Zdx�Zdy�Zdz�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�Z�e�Z�e�Zd‡�Zdˆ�ZG d‰dŠ„ dŠeƒ�Z G d‹dŒ„ dŒeƒ�Z!G d�dŽ„ dŽeƒ�Z"eeƒ  ¡ ƒ� #e¡ZdS )‘z
Common definitions.
é    Nc                   @   ó   e Zd Zdd„ ZdS )ÚWindowsErrorc                 O   s8   t j| g|¢R i |¤Ž td u rddlma tƒ | _d S )Nr   )ÚGetLastError)ÚOSErrorÚ__init__Ú_gleÚkernel32r   Úwinerror)ÚselfÚargsÚkwargs© r   ú¦/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/commons/winapi/local/function_defs/defines.pyr   5   s   zWindowsError.__init__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   4   ó    r   )Úgetenvc                 C   s$   t | d ƒ}|d u rt |  ¡ |ƒ}|S ©N)Ú_real_getenvÚupper)ÚkeyÚdefaultÚvaluer   r   r   r   =   s   
r   c                   @   ó"   e Zd ZeejƒdkrdZdS dS )Ú	Structureé   é   N©r   r   r   ÚsizeofÚctypesÚc_void_pÚ_pack_r   r   r   r   r   N   ó    ÿr   c                   @   r   )ÚUnionr   r   Nr   r   r   r   r   r$   Q   r#   r$   Fc                   @   r   )Ú
WinDllHookc                 C   s   |  d¡rt | |¡S t|ƒS ©NÚ_)Ú
startswithÚobjectÚ__getattr__ÚWinFuncHook©r
   Únamer   r   r   r*   h   s   
zWinDllHook.__getattr__N)r   r   r   r*   r   r   r   r   r%   g   r   r%   c                   @   s   e Zd Zdd„ Zdd„ ZdS )r+   c                 C   s
   || _ d S r   )Ú_WinFuncHook__namer,   r   r   r   r   n   s   
zWinFuncHook.__init__c                 C   s"   |  d¡rt | |¡S t| j|ƒS r&   )r(   r)   r*   ÚWinCallHookr.   r,   r   r   r   r*   q   s   
zWinFuncHook.__getattr__N)r   r   r   r   r*   r   r   r   r   r+   m   s    r+   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )r/   c                 C   s$   || _ || _tttj|ƒ|ƒ| _d S r   )Ú_WinCallHook__dllnameÚ_WinCallHook__funcnameÚgetattrr    ÚwindllÚ_WinCallHook__func)r
   ÚdllnameÚfuncnamer   r   r   r   w   s   zWinCallHook.__init__c                 C   sZ   zt | |ƒ}t| j||ƒ W d S  ty,   z
t| j|ƒ W Y d S  ty+   Y Y d S w w r   )r2   Úsetattrr4   ÚAttributeErrorÚdelattr)r
   Ú	attributer   r   r   r   Ú__copy_attribute|   s   
ÿýzWinCallHook.__copy_attributec                 G   sX   |   d¡ |   d¡ |   d¡ tdƒ td| j| j|f ƒ | j|Ž }td|f ƒ |S )NÚargtypesÚrestypeÚerrcheckz
----------z
%s ! %s %rz== %r)Ú_WinCallHook__copy_attributeÚprintr0   r1   r4   )r
   ÚargvÚretvalr   r   r   Ú__call__†   s   



zWinCallHook.__call__N)r   r   r   r   r?   rC   r   r   r   r   r/   v   s    
r/   r   c                 C   s   | st  ¡ ‚| S )z·
    Error checking for most Win32 API calls.

    The function is assumed to return an integer, which is C{0} on error.
    In that case the C{WindowsError} exception is raised.
    ©r    ÚWinError©ÚresultÚfuncÚ	argumentsr   r   r   ÚRaiseIfZero”   s   rJ   c                 C   s   | rt  ¡ ‚| S )ao  
    Error checking for some odd Win32 API calls.

    The function is assumed to return an integer, which is zero on success.
    If the return value is nonzero the C{WindowsError} exception is raised.

    This is mostly useful for free() like functions, where the return value is
    the pointer to the memory block on failure or a C{NULL} pointer on success.
    rD   rF   r   r   r   ÚRaiseIfNotZeroŸ   s   
rK   c                 C   s   | t kr	t | ¡‚| S )zÅ
    Error checking for Win32 Registry API calls.

    The function is assumed to return a Win32 error code. If the code is not
    C{ERROR_SUCCESS} then a C{WindowsError} exception is raised.
    )ÚERROR_SUCCESSr    rE   rF   r   r   r   ÚRaiseIfNotErrorSuccess­   s   
rM   c                   @   s4   e Zd ZdZedƒZedƒZeZdd„ Zdd„ Z	dS )ÚGuessStringTypeaì  
    Decorator that guesses the correct version (A or W) to call
    based on the types of the strings passed as parameters.

    Calls the B{ANSI} version if the only string types are ANSI.

    Calls the B{Unicode} version if Unicode or mixed string types are passed.

    The default if no string arguments are passed depends on the value of the
    L{t_default} class variable.

    @type fn_ansi: function
    @ivar fn_ansi: ANSI version of the API function to call.
    @type fn_unicode: function
    @ivar fn_unicode: Unicode (wide) version of the API function to call.

    @type t_default: type
    @cvar t_default: Default string type to use.
        Possible values are:
         - type('') for ANSI
         - type(u'') for Unicode
    Ú c                 C   ó~   || _ || _z| j jdd… | _W n	 ty   Y nw z| j j| _W n	 ty+   Y nw z| j j| _W dS  ty>   Y dS w ©zß
        @type  fn_ansi: function
        @param fn_ansi: ANSI version of the API function to call.
        @type  fn_unicode: function
        @param fn_unicode: Unicode (wide) version of the API function to call.
        Néÿÿÿÿ©Úfn_ansiÚ
fn_unicoder   r8   r   Ú__doc__©r
   rT   rU   r   r   r   r   ×   ó"   ÿÿÿzGuessStringType.__init__c           	      O   sÒ   | j }dd„ |D ƒ}| dd„ | ¡ D ƒ¡ | j|kr| j}n| j}| j|v r[||v rWt|ƒ}tt	|ƒƒD ]}|| |krC|| ||< q5| ¡ D ]\}}t
|ƒ|krV|||< qH| j}n||v rb| j}||i |¤ŽS )Nc                 S   ó   g | ]}t |ƒ‘qS r   ©Útype©Ú.0Úitemr   r   r   Ú
<listcomp>õ   ó    z,GuessStringType.__call__.<locals>.<listcomp>c                 S   ó   g | ]\}}t |ƒ‘qS r   rZ   ©r]   r   r   r   r   r   r_   ö   ó    )Út_ansiÚextendÚitemsÚ	t_defaultrT   rU   Ú	t_unicodeÚlistÚrangeÚlenr[   )	r
   rA   Úargdrd   Úv_typesÚfnÚindexr   r   r   r   r   rC   ï   s*   

€€zGuessStringType.__call__N)
r   r   r   rV   r[   rd   rh   rg   r   rC   r   r   r   r   rN   ¸   s    rN   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚDefaultStringTypeaq  
    Decorator that uses the default version (A or W) to call
    based on the configuration of the L{GuessStringType} decorator.

    @see: L{GuessStringType.t_default}

    @type fn_ansi: function
    @ivar fn_ansi: ANSI version of the API function to call.
    @type fn_unicode: function
    @ivar fn_unicode: Unicode (wide) version of the API function to call.
    c                 C   rP   rQ   rS   rW   r   r   r   r   &  rX   zDefaultStringType.__init__c                 O   s(   t jt jkr
| j}n| j}||i |¤ŽS r   )rN   rg   rd   rT   rU   )r
   rA   rl   rn   r   r   r   rC   >  s   zDefaultStringType.__call__N)r   r   r   rV   r   rC   r   r   r   r   rp     s    rp   c                    ó   t  ˆ ¡‡ fdd„ƒ}|S )z±
    Decorator that generates an ANSI version of a Unicode (wide) only API call.

    @type  fn: callable
    @param fn: Unicode (wide) version of the API function to call.
    c                     s¨   t j}t j}dd„ | D ƒ}| dd„ | ¡ D ƒ¡ ||v rMt| ƒ} tt| ƒƒD ]}|| |kr7|| | ƒ| |< q'| ¡ D ]\}}t|ƒ|krL||ƒ||< q<ˆ | i |¤ŽS )Nc                 S   rY   r   rZ   r\   r   r   r   r_   T  r`   z4MakeANSIVersion.<locals>.wrapper.<locals>.<listcomp>c                 S   ra   r   rZ   rb   r   r   r   r_   U  rc   ©	rN   rd   rh   re   rf   ri   rj   rk   r[   ©rA   rl   rd   rh   rm   ro   r   r   ©rn   r   r   ÚwrapperP  ó   €€z MakeANSIVersion.<locals>.wrapper©Ú	functoolsÚwraps©rn   ru   r   rt   r   ÚMakeANSIVersionI  ó   r{   c                    rq   )z§
    Decorator that generates a Unicode (wide) version of an ANSI only API call.

    @type  fn: callable
    @param fn: ANSI version of the API function to call.
    c                     s¨   t j}t j}dd„ | D ƒ}| dd„ | ¡ D ƒ¡ ||v rMt| ƒ} tt| ƒƒD ]}|| |kr7|| | ƒ| |< q'| ¡ D ]\}}t|ƒ|krL||ƒ||< q<ˆ | i |¤ŽS )Nc                 S   rY   r   rZ   r\   r   r   r   r_   l  r`   z4MakeWideVersion.<locals>.wrapper.<locals>.<listcomp>c                 S   ra   r   rZ   rb   r   r   r   r_   m  rc   rr   rs   rt   r   r   ru   h  rv   z MakeWideVersion.<locals>.wrapperrw   rz   r   rt   r   ÚMakeWideVersiona  r|   r}   )r   é   r   é   c                   @   ó   e Zd ZdefdefgZdS )ÚFLOAT128ÚLowPartÚHighPartN)r   r   r   ÚQWORDÚ_fields_r   r   r   r   r�     ó    þr�   c                   @   s   e Zd ZdefdefgZdS )ÚM128AÚLowÚHighN)r   r   r   Ú	ULONGLONGÚLONGLONGr…   r   r   r   r   r‡   #  r†   r‡   rR   r   r   l   ÿÿ r   l   ÿÿÿÿ éÿ   i  r~   é   é   é   é   é   é   é&   é'   é2   éP   éW   éo   ép   éx   éy   éz   é{   é~   é   é‘   éŸ   é    é¡   é·   éº   éË   éÎ   éê   i  i  i+  iç  i6  i<  i>  iœ  iž  i°  i±  i²  i³  i´  iµ  i¶  i·  i¸  i¹  iþ  iÿ  iä  iæ  i#  i$  i%  i&  i'  i(  i)  i*  i+  i,  i-  i.  i/  i0  i1  i2  i3  i4  i5  i6  i7  i8  i9  i:  i;  i<  i  i"  i4  iº  i   i   i   i   i   i   i   iÿÿ  c                   @   s*   e Zd ZdefdefdefgZdd„ ZdS )ÚUNICODE_STRINGÚLengthÚMaximumLengthÚBufferc                 C   s   t  | j| j¡ d¡S )Nz	utf-16-le)r    Ú	string_atr¬   rª   Údecode)r
   r   r   r   Ú	getStringÃ  s   zUNICODE_STRING.getStringN)r   r   r   ÚUSHORTÚPVOIDr…   r¯   r   r   r   r   r©   ¼  s    ýr©   c                   @   s,   e Zd Zdefdefdefded fgZdS )ÚGUIDÚData1ÚData2ÚData3ÚData4r   N)r   r   r   ÚDWORDÚWORDÚBYTEr…   r   r   r   r   r²   Î  s    
ür²   c                   @   r€   )Ú
LIST_ENTRYÚFlinkÚBlinkN)r   r   r   r±   r…   r   r   r   r   rº   Ü  r†   rº   r   )Nr   ($  rV   r    rx   Ú_allÚsetÚvarsÚkeysr   Ú	NameErrorr   r   Úosr   r   Ú	addressofr   ÚSIZEOFÚPOINTERÚWINFUNCTYPEr3   r   r$   r!   ÚbyrefÚc_charÚ	TypeErrorÚpointerÚWIN32_VERBOSE_MODEr)   r%   r+   r/   rJ   rK   rM   rN   rp   r{   r}   ÚLPVOIDÚCHARÚc_wcharÚWCHARÚc_ubyter¹   Úc_byteÚSBYTEÚc_uint16r¸   Úc_int16ÚSWORDÚc_uint32r·   Úc_int32ÚSDWORDÚc_uint64r„   Úc_int64ÚSQWORDÚSHORTr°   ÚINTÚUINTÚLONGÚULONGr‹   rŠ   Úc_char_pÚLPSTRÚ	c_wchar_pÚLPWSTRÚc_int8ÚINT8ÚINT16ÚINT32ÚINT64Úc_uint8ÚUINT8ÚUINT16ÚUINT32ÚUINT64ÚLONG32ÚLONG64ÚULONG32ÚULONG64ÚDWORD32ÚDWORD64ÚBOOLÚc_floatÚFLOATÚc_doubleÚDOUBLEÚc_size_tÚSIZE_TÚ	c_ssize_tÚSSIZE_Tr8   ÚPSIZE_TÚ	DWORD_PTRÚ	ULONG_PTRÚLONG_PTRr±   ÚPPVOIDÚPSTRÚPWSTRÚPCHARÚPWCHARÚLPBYTEÚLPSBYTEÚLPWORDÚLPSWORDÚLPDWORDÚLPSDWORDÚLPULONGÚLPLONGÚPDWORDÚ
PDWORD_PTRÚPULONGÚPLONGÚCCHARÚBOOLEANÚPBOOLÚLPBOOLÚTCHARÚUCHARÚ	DWORDLONGÚ	LPDWORD32Ú	LPULONG32Ú	LPDWORD64Ú	LPULONG64ÚPDWORD32ÚPULONG32ÚPDWORD64ÚPULONG64ÚATOMÚHANDLEÚPHANDLEÚLPHANDLEÚHMODULEÚ	HINSTANCEÚHTASKÚHKEYÚPHKEYÚHDESKÚHRSRCÚHSTRÚHWINSTAÚHKLÚHDWPÚHFILEÚHRESULTÚHGLOBALÚHLOCALÚHGDIOBJÚHDCÚHRGNÚHBITMAPÚHPALETTEÚHPENÚHBRUSHÚHMFÚHEMFÚHENHMETAFILEÚ	HMETAFILEÚHMETAFILEPICTÚHWNDÚNTSTATUSÚ	PNTSTATUSÚ	KAFFINITYÚRVAÚRVA64ÚWPARAMÚLPARAMÚLRESULTÚACCESS_MASKÚREGSAMÚPACCESS_MASKÚPREGSAMÚPSIDr�   Ú	PFLOAT128r‡   ÚPM128AÚNULLÚINFINITEÚTRUEÚFALSEÚANYSIZE_ARRAYr   ÚINVALID_HANDLE_VALUEÚMAX_MODULE_NAME32ÚMAX_PATHrL   ÚERROR_INVALID_FUNCTIONÚERROR_FILE_NOT_FOUNDÚERROR_PATH_NOT_FOUNDÚERROR_ACCESS_DENIEDÚERROR_INVALID_HANDLEÚERROR_NOT_ENOUGH_MEMORYÚERROR_INVALID_DRIVEÚERROR_NO_MORE_FILESÚERROR_BAD_LENGTHÚERROR_HANDLE_EOFÚERROR_HANDLE_DISK_FULLÚERROR_NOT_SUPPORTEDÚERROR_FILE_EXISTSÚERROR_INVALID_PARAMETERÚERROR_BUFFER_OVERFLOWÚERROR_DISK_FULLÚERROR_CALL_NOT_IMPLEMENTEDÚERROR_SEM_TIMEOUTÚERROR_INSUFFICIENT_BUFFERÚERROR_INVALID_NAMEÚERROR_MOD_NOT_FOUNDÚERROR_PROC_NOT_FOUNDÚERROR_DIR_NOT_EMPTYÚERROR_BAD_THREADID_ADDRÚERROR_BAD_ARGUMENTSÚERROR_BAD_PATHNAMEÚERROR_ALREADY_EXISTSÚERROR_INVALID_FLAG_NUMBERÚERROR_ENVVAR_NOT_FOUNDÚERROR_FILENAME_EXCED_RANGEÚERROR_MORE_DATAÚWAIT_TIMEOUTÚERROR_NO_MORE_ITEMSÚERROR_PARTIAL_COPYÚERROR_INVALID_ADDRESSÚERROR_THREAD_NOT_IN_PROCESSÚERROR_CONTROL_C_EXITÚERROR_UNHANDLED_EXCEPTIONÚERROR_ASSERTION_FAILUREÚERROR_WOW_ASSERTIONÚERROR_DBG_EXCEPTION_NOT_HANDLEDÚERROR_DBG_REPLY_LATERÚ"ERROR_DBG_UNABLE_TO_PROVIDE_HANDLEÚERROR_DBG_TERMINATE_THREADÚERROR_DBG_TERMINATE_PROCESSÚERROR_DBG_CONTROL_CÚERROR_DBG_PRINTEXCEPTION_CÚERROR_DBG_RIPEXCEPTIONÚERROR_DBG_CONTROL_BREAKÚERROR_DBG_COMMAND_EXCEPTIONÚERROR_DBG_EXCEPTION_HANDLEDÚERROR_DBG_CONTINUEÚERROR_ELEVATION_REQUIREDÚERROR_NOACCESSÚERROR_CIRCULAR_DEPENDENCYÚERROR_SERVICE_DOES_NOT_EXISTÚ ERROR_SERVICE_CANNOT_ACCEPT_CTRLÚERROR_SERVICE_NOT_ACTIVEÚ'ERROR_FAILED_SERVICE_CONTROLLER_CONNECTÚERROR_EXCEPTION_IN_SERVICEÚERROR_DATABASE_DOES_NOT_EXISTÚERROR_SERVICE_SPECIFIC_ERRORÚERROR_PROCESS_ABORTEDÚERROR_SERVICE_DEPENDENCY_FAILÚERROR_SERVICE_LOGON_FAILEDÚERROR_SERVICE_START_HANGÚERROR_INVALID_SERVICE_LOCKÚERROR_SERVICE_MARKED_FOR_DELETEÚERROR_SERVICE_EXISTSÚERROR_ALREADY_RUNNING_LKGÚ ERROR_SERVICE_DEPENDENCY_DELETEDÚERROR_BOOT_ALREADY_ACCEPTEDÚERROR_SERVICE_NEVER_STARTEDÚERROR_DUPLICATE_SERVICE_NAMEÚERROR_DIFFERENT_SERVICE_ACCOUNTÚ"ERROR_CANNOT_DETECT_DRIVER_FAILUREÚ!ERROR_CANNOT_DETECT_PROCESS_ABORTÚERROR_NO_RECOVERY_PROGRAMÚERROR_SERVICE_NOT_IN_EXEÚERROR_NOT_SAFEBOOT_SERVICEÚERROR_DEBUGGER_INACTIVEÚERROR_PRIVILEGE_NOT_HELDÚERROR_NONE_MAPPEDÚRPC_S_SERVER_UNAVAILABLEÚDELETEÚREAD_CONTROLÚ	WRITE_DACÚWRITE_OWNERÚSYNCHRONIZEÚSTANDARD_RIGHTS_REQUIREDÚSTANDARD_RIGHTS_READÚSTANDARD_RIGHTS_WRITEÚSTANDARD_RIGHTS_EXECUTEÚSTANDARD_RIGHTS_ALLÚSPECIFIC_RIGHTS_ALLr©   r²   rº   Ú
differencer   r   r   r   Ú<module>   s@  õ

ÿ		


a0
ý€ú