o
    Žõ±jý  ã                   @   s  d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ e	ZeZe
ZeZeZeZeZeeƒZeZeZeeƒZeZeZeeƒZeZeZeeƒZ eZ!eeƒZ"eeƒZ#eeƒZ$e"Z%eZ&ee&ƒZ'eZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/e+Z0e+Z1e+Z2d	Z3d
Z4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=e0e8B Z>e/e5B e6B e7B e8B e9B e:B e;B e<B e=B Z?zedƒj@ZAW n eByË   eeƒdkr¿dZAn
eeƒdkrÈdZAn‚ Y nw d ZCdZDdZEdZFeZGeeGƒZHeZIeeIƒZJG dd„ deƒZKeeKƒZLG dd„ deƒZMeeMƒZNd$dd„ZOe?fd d!„ZPd"d#„ ZQdS )%é    )ÚWinErrorÚc_intÚcastÚc_int64ÚsizeofÚwindllÚbyrefÚ	StructureÚc_ubyteÚc_int16Úc_int32Úc_void_pÚc_uint16Úc_uint32ÚPOINTERÚ
c_longlongéz   i   i   i   i   i   i   i   iÿÿ  é   é   é   é   é   é    é@   é€   é   éÿÿÿÿì   ÿÿ l   ÿÿÿÿ é   c                   @   s<   e Zd ZdefdefgZdd„ Zedd„ ƒZedd„ ƒZ	d	S )
ÚLUIDÚLowPartÚHighPartc                 C   s
   t  | ¡S ©N)r   Úluid_to_int©Úself© r&   úš/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/pypykatz/kerberos/functiondefs/advapi32.pyÚto_int[   s   
zLUID.to_intc                 C   s   | j d> | j S )Nr   )r!   r    )Úluidr&   r&   r'   r#   ^   s   zLUID.luid_to_intc                 C   s   t ƒ }| d? |_| d@ |_|S )Nr   r   )r   r!   r    )Úir)   r&   r&   r'   Úfrom_intb   s   

zLUID.from_intN)
Ú__name__Ú
__module__Ú__qualname__ÚDWORDÚLONGÚ_fields_r(   Ústaticmethodr#   r+   r&   r&   r&   r'   r   U   s    þ
r   c                   @   sT   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d
efg
Zdd„ Z	dS )ÚTOKEN_STATISTICSÚTokenIdÚAuthenticationIdÚExpirationTimeÚ	TokenTypeÚImpersonationLevelÚDynamicChargedÚDynamicAvailableÚ
GroupCountÚPrivilegeCountÚ
ModifiedIdc                 C   s:   | j  ¡ | j ¡ | j| j| j| j| j| j| j	| j
 ¡ dœ
S )N)
r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   )r4   r(   r5   r6   r7   r8   r9   r:   r;   r<   r=   r$   r&   r&   r'   Úto_dicty   s   özTOKEN_STATISTICS.to_dictN)
r,   r-   r.   r   ÚLONGLONGÚ
TOKEN_TYPEÚSECURITY_IMPERSONATION_LEVELr/   r1   r>   r&   r&   r&   r'   r3   k   s    ör3   Nr&   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   )ÚresultÚfuncÚ	argumentsr&   r&   r'   ÚRaiseIfZeroˆ   s   rE   c                 C   s<   t jj}tttg|_t|_t	|_
ttƒ}|| |t|ƒƒ |S r"   )r   Úadvapi32ÚOpenProcessTokenÚHANDLEr/   ÚPHANDLEÚargtypesÚboolÚrestyperE   ÚerrcheckÚINVALID_HANDLE_VALUEr   )ÚProcessHANDLEÚDesiredAccessÚ_OpenProcessTokenÚNewTokenHandler&   r&   r'   rG   ˜   s   rG   c           	   
   C   sÌ   d}t jj}tttttg|_t	|_
t|_tdƒ}z|| |d|t|ƒƒ W n ty6 } zW Y d}~nd}~ww |j}tdƒ}t| ƒ }|| |t|ƒ|t|ƒƒ |j|krXttƒ‚t|ttƒƒj}| ¡ }|S )zP
	The original function wasn't working. this one returns the SID for the token
	é
   r   N)r   rF   ÚGetTokenInformationrH   ÚTOKEN_INFORMATION_CLASSÚLPVOIDr/   ÚPDWORDrJ   rK   rL   rE   rM   r   Ú	ExceptionÚvalueÚBYTEr   ÚERROR_INSUFFICIENT_BUFFERr   r   r3   Úcontentsr>   )	ÚhTokenHandleÚTokenStatisticsÚ_GetTokenInformationÚReturnLengthÚeÚTokenInformationLengthÚtiÚtÚresr&   r&   r'   Ú#GetTokenInformation_tokenstatistics£   s*   €ÿ

rf   )Nr&   )RÚctypesr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   rZ   ÚUCHARÚSHORTÚUSHORTr0   rV   ÚPVOIDÚPPVOIDr/   rH   rI   ÚLPHANDLEÚNTSTATUSÚ	PNTSTATUSÚULONGÚPULONGr?   ÚLPDWORDÚLPULONGÚLPLONGrW   ÚLARGE_INTEGERÚPLARGE_INTEGERrU   r[   Ú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_ALLÚTOKEN_ASSIGN_PRIMARYÚTOKEN_DUPLICATEÚTOKEN_IMPERSONATEÚTOKEN_QUERYÚTOKEN_QUERY_SOURCEÚTOKEN_ADJUST_PRIVILEGESÚTOKEN_ADJUST_GROUPSÚTOKEN_ADJUST_DEFAULTÚTOKEN_ADJUST_SESSIONIDÚ
TOKEN_READÚTOKEN_ALL_ACCESSrY   rN   Ú	TypeErrorÚSecurityAnonymousÚSecurityIdentificationÚSecurityImpersonationÚSecurityDelegationrA   ÚPSECURITY_IMPERSONATION_LEVELr@   ÚPTOKEN_TYPEr   ÚPLUIDr3   ÚPTOKEN_STATISTICSrE   rG   rf   r&   r&   r&   r'   Ú<module>   s´   H ÿÿÿÿþþþý€ú
