o
    j#                     @   sN  d dl Z d dlT d dlmZmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ dd	 Zej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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+d$Z,d%Z-d&Z.d'Z/d(Z0d)Z1d*Z2d+Z3d,Z4d-Z5d.Z6d/Z7d0Z8d1Z9d2Z:d
Z;dZ<dZ=dZ>dZ?d)Z@d3ZAd4ZBd5ZCeDe>B ZEeFe;B e<B e=B e>B e?B e@B eAB eBB eCB ZGd
ZHdZIdZJdZKdZLd6ZMd7ZNd8ZOd9ZPd)ZQd3ZRd4ZSd:ZTdZUd;ZVd
ZWdZXdZYeZZ[d<Z\d
Z]dZ^dZ_dZ`dZad)Zbd3Zcd4Zdd5Zed=Zfd
ZgdZhdZidZjdZkd)Zld>d? Zmd@dA ZnG dBdC dCeoZpeqepZrdDdE ZsddGdHZtdIdJ ZudKdL ZvdMdN ZwdOdP Zxd
ZyeHeIB eJB fdQdRZzeHeIB eJB dfdSdTZ{ddeffdUdVZ|e\fdWdXZ}dYdZ Z~G d[d\ d\eoZeqeZG d]d^ d^eoZeqeZeUeVB eYfd_d`Zd9ZdaZdbZdcZddZdeZdfZdgZdhZeeeeeediZd=Zd)ZdZdZdjZdZd
ZdjZdZdkZd5ZdlZd Zd Zd
ZdZdZdZdeefdmdnZdodp Zdqdr Zdsdt ZddvdwZeGfdxdyZdzd{ ZejZeqeZG d|d} d}eoZeqeZd Zd
ZdZdZejZeqeZG d~d deoZeqeZdd ZG dd deoZeqeZG dd deoZeqeZdd Zdd Zdd ZdS )    N)*)GetLastError	LocalFreeREAD_CONTROL)MemoryBuffer)SECURITY_DESCRIPTOR)SID)SE_OBJECT_TYPEc                 C   s   | dkr	t | | S Nr   )ctypesWinError)resultfunc	arguments r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/winacl/functions/advapi32.pywin_succ_check	   s   
r                           	   
                                                                      !   "   #   $   %   &   '   (   )   @            i    i   @l        i   0   i i?  c                 C   s   t jj}tttttttg|_t|_t|_	d}d }|j
d ur.|tO }|j
 }t|t|}d }d }|jd urH|tO }|j }	t|	t|	}d }
|dkrRtd|| ||||||
}d S )Nr   z6Looks like nothing is to be set! Check your sd object!)windlladvapi32SetSecurityInfoHANDLEDWORDPVOIDargtypesrestypeRaiseIfNotErrorSuccesserrcheckOwnerOWNER_SECURITY_INFORMATIONto_bytesr   create_string_bufferlenDaclDACL_SECURITY_INFORMATION	Exception)
handle_objobj_typesd_SetSecurityInfosec_infopOwner
owner_datapGrouppDacl	dacl_datapSaclretr   r   r   rC      s8   



rC   c                 C   s   t jj}ttttttttg|_t|_t|_	d }d }d }d }t
t
d}|| ||||||t
|}	|j}
tt
|j}t||}t| |S r
   )rA   rB   GetSecurityInforD   rE   rF   rG   rH   r   rJ   r   pointerc_uintbyrefcontentsr   	addressofr   from_bufferr   )rS   rT   info_req_GetSecurityInfo
ppsidOwner
ppsidGroupppDaclppSaclppSecurityDescriptorr^   pSecurityDescriptorbuffrU   r   r   r   r_      s   r_   c                   @   s.   e Zd ZdefdefdefdefdefgZdS )	TRUSTEE_WpMultipleTrusteeMultipleTrusteeOperationTrusteeFormTrusteeType	ptstrNameN)__name__
__module____qualname__rF   rE   rD   _fields_r   r   r   r   ro      s    ro   c                 C   sD   t jj}ttg|_d |_|  }t	|t
|}t }||| |S N)rA   rB   BuildTrusteeWithSidW
PTRUSTEE_WrF   rG   rH   rM   r   rN   rO   ro   )sid_BuildTrusteeWithSidWsid_datacsidtrusteer   r   r   rz      s   

rz   Fc                 C   s   t jj}ttg|_t|_t|_|du r3| 	 }t
|t|}t
d}t
|}|t|t| nt
d}t
|}|| t| t
|}t| |S )NFr   )rA   rB   ConvertSidToStringSidWrF   rG   rE   rH   RaiseIfZerorJ   rM   r   rN   rO   create_unicode_bufferr`   rb   
wstring_atr   )r|   
is_raw_ptr_ConvertSidToStringSidWr~   r   pstrcstr_sidstr_sidr   r   r   r     s    





r   c                 C   sr   t jj}ttg|_t|_t|_t	
| d}t	t	d}||t| tt	|j}t|}t| |S )N	utf-16-ler   )rA   rB   ConvertStringSidToSidWrF   rG   rE   rH   r   rJ   r   rN   encoder`   ra   rb   r   rd   rc   r   re   r   )sid_str_ConvertStringSidToSidWr   rl   rn   rU   r   r   r   r   "  s   

r   c           
      C   s   t jj}tttg|_t|_|	 }t
|t|}t }d|_d|_d|_d|_t
t
||_td}| 	 }t
|t|}|||t|}	|jS )z%
	Takes a SID instead of a trustee!
	r   )rA   rB   GetEffectiveRightsFromAclWrF   r{   PDWORDrG   rI   rH   rM   r   rN   rO   ro   rp   rq   rr   rs   c_void_prd   rt   rE   rb   value)
aclr|   _GetEffectiveRightsFromAclWr~   psidr   effective_rigths_maskacl_datapaclresr   r   r   r   :  s    r   c              	   C   s   t jj}tttttttg|_t|_	t
d}t
d}t
d}t|t|}|| |d t|d t|t| t }|tkrAt|td|jd }td|jd }	|| ||t||	t|t|}
|
sit |j|	j|jfS )Nr    r   )rA   rB   LookupAccountSidWLPSTRPSIDLPWSTRLPDWORDrG   boolrH   rE   r   rN   rO   rb   r   ERROR_INSUFFICIENT_BUFFERr   r   r   )lpSystemNamer~   _LookupAccountSidWcchNamecchReferencedDomainNamepeUselpSiderrorlpNamelpReferencedDomainNamesuccessr   r   r   r   R  s"    
 r   c              	   C   s   t jj}tttttttg|_t|_t	d}t	d}t	d}t
|}|| |d t|d t|t| t }|tkr>t
|t
d|j}t
t
|t}	t
d|jd }
|| ||	t||
t|t|}|smt
 t|	j}t|}||
j|jfS )Nr       r   r   )rA   rB   LookupAccountNameWr   r   r   rG   BOOLrH   rE   r   r   rb   r   r   r   rN   r   castr`   r   r   re   )r   accountname_LookupAccountNameWcbSidr   r   lpAccountNamer   r|   r   r   r   rn   r   r   r   r   g  s(   
 
 

r   c                 C   s   t jj}tttttg|_t|_t|_	| 
 }t|t|}ttd}td}||t|t|t| t||jd }t| |dS )Nr   r   r   )rA   rB   4ConvertSecurityDescriptorToStringSecurityDescriptorWrF   rE   PULONGrG   rH   r   rJ   rM   r   rN   rO   r`   ra   SDDL_REVISION_1rb   	string_atr   r   decode)rU   req_info5_ConvertSecurityDescriptorToStringSecurityDescriptorWsd_datapsdr   pstrsizer   r   r   r   r     s   

r   c                 C   s   t jj}tttttg|_t|_d }td}td}d}|| ||||}|dkr*|j	}t
|}t|}td}|| ||||}|dkrHt
tt
||j	}	t|	|}
|
S r
   )rA   rB   QueryServiceObjectSecurity	SC_HANDLErE   rF   r   rG   rH   r   r   rN   r   r   r   r   
from_bytes)hServicedwSecurityInformationsd_object_type_QueryServiceObjectSecuritylpSecurityDescriptor	cbBufSizepcbBytesNeededcorrect_lengthr   rn   rU   r   r   r   r     s&   

r   c                 C   s0   t jj}tttg|_t|_t|_	|| ||}|S ry   )
rA   rB   OpenSCManagerWr   rE   rG   r   rH   r   rJ   )lpMachineNamelpDatabaseNamedwDesiredAccess_OpenSCManagerW	hSCObjectr   r   r   r     s   r   c                 C   s,   t jj}tttg|_t|_t|_	|| ||S ry   )
rA   rB   OpenServiceWr   r   rE   rG   rH   r   rJ   )
hSCManagerlpServiceNamer   _OpenServiceWr   r   r   r     s
   r   c                 C   (   t jj}tg|_t|_t|_||  d S ry   )	rA   rB   CloseServiceHandlerD   rG   r   rH   r   rJ   )hHandle_CloseServiceHandler   r   r   r     
   r   c                   @   s:   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gZdS )	SERVICE_STATUSdwServiceTypedwCurrentStatedwControlsAccepteddwWin32ExitCodedwServiceSpecificExitCodedwCheckPoint
dwWaitHintN)ru   rv   rw   rE   rx   r   r   r   r   r     s    r   c                   @   "   e Zd ZdefdefdefgZdS )ENUM_SERVICE_STATUSWr   lpDisplayNameServiceStatusN)ru   rv   rw   r   r   rx   r   r   r   r   r     
    r   c              
   C   s4  t jj}ttttttttg|_t|_	td}td}td}|| ||d dt
|t
|t
| g }d}t tkr|jttk r@nRtd|j}	|| ||t
|	t|	t
|t
|t
|}t|	tt|j k rkt ttt|	tjt}
td|jD ]
}||
| j q|rnt tks8|st |S )Nr   Fr   )rA   rB   EnumServicesStatusWr   rE   LPVOIDr   rG   r   rH   rb   r   ERROR_MORE_DATAr   sizeofr   r   rN   r   r   r`   r   LPENUM_SERVICE_STATUSWrangeappendr   )r   r   dwServiceState_EnumServicesStatusWcbBytesNeededServicesReturnedResumeHandleServicesr   ServicesBufferlpServicesArrayindexr   r   r   r     s0   "
*
r   l       l       l       l       l   P    l   `    l       l       )HKLMHKCUHKCRHKUHKCCHKPDi  i   i  c           	      C   sj   t jj}tttttg|_t|_t	|_
d }|d ur%|d}t|t|}t }|| |||t|}|S )Nascii)rA   rB   RegOpenKeyExArD   r   rE   PHANDLErG   rH   rI   rJ   r   r   rN   rO   rb   )	regkey_handlesubkey_nameoptionsaccess_RegOpenKeyExWpsubkeyr   	reshandler^   r   r   r   RegOpenKeyExW=  s   
r  c                 C   r   ry   )	rA   rB   RegCloseKeyrD   rG   r   rH   rI   rJ   )r   _RegCloseKeyr   r   r   r  M  r   r  c           	   	   C   s   t jj}ttttttttg|_t|_	d}g }t
}|t
krXt|}td}td}|| |t|t|tttt}|t
krI|j}|| |d7 }n|tkrP	 |S t |t
ks|S Nr   i     r   )rA   rB   RegEnumKeyExWrD   rE   rF   r   r   rG   rH   ERROR_SUCCESSr   r   rb   NULLr   r   ERROR_NO_MORE_ITEMSr   )	hKey_RegEnumKeyExWisubkeysr   dwIndexr   	lpcchNamesknamer   r   r   r
  a  *   


r
  c           	   	   C   s   t jj}ttttttttg|_t|_d}g }t	}|t	krXt|}t
d}td}|| |t|t|tttt}|t	krI|j}|| |d7 }n|tkrP	 |S t
 |t	ks|S r  )rA   rB   RegEnumValueWrD   rE   rF   r   rG   rH   r  r   r   rb   r  r   r   r  r   )	r  _RegEnumValueWr  r  r   r  r   r  r  r   r   r   r    r  r    c                 C   s   t jj}ttttg|_t|_t|_t	
| dt| d}t	
|dt|d}t	t	d}|t	|t	||| t| tS )Nr   r   )rA   netapi32NetShareGetInforF   rE   rG   rH   rI   rJ   r   rN   r   rO   r`   ra   printr   )
servername	sharenamelevel_NetShareGetInfopservername
psharenamepbuffr   r   r   r    s   r  c                 C   s>   t jj}tttg|_t|_t	|_
tt}|| |t| |jS ry   )rA   rB   OpenProcessTokenrD   rE   r   rG   r   rH   r   rJ   INVALID_HANDLE_VALUErb   r   )ProcessHandleDesiredAccess_OpenProcessTokenNewTokenHandler   r   r   r#    s   r#  c                 C   sd   t jj}tttttg|_t	|_
t|_td}t|}|| |t||t| |j|kr0tt|S r
   )rA   rB   GetTokenInformationrD   TOKEN_INFORMATION_CLASSr   rE   r   rG   r   rH   r   rJ   SIZEOFrb   r   r   r   r   )hTokenHandleTokenInformationClassTokenInformation_GetTokenInformationReturnLengthTokenInformationLengthr   r   r   _internal_GetTokenInformation  s   

r2  c                   @   s   e Zd ZdefdefgZdS )LUIDLowPartHighPartN)ru   rv   rw   rE   LONGrx   r   r   r   r   r3    s    r3  c                   @   sL   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S )TOKEN_STATISTICSTokenIdAuthenticationIdExpirationTime	TokenTypeImpersonationLevelDynamicChargedDynamicAvailable
GroupCountPrivilegeCount
ModifiedIdN)	ru   rv   rw   r3  LONGLONG
TOKEN_TYPESECURITY_IMPERSONATION_LEVELrE   rx   r   r   r   r   r7  
  s    r7  c                 C   s>   |dks|t krtd| |tkrt }t| || |S d S )Nr   z,Invalid value for TokenInformationClass (%i))MaxTokenInfoClass
ValueErrorTokenStatisticsr7  r2  )r,  r-  r.  r   r   r   r)     s   r)  c                   @   r   )LSA_LAST_INTER_LOGON_INFOLastSuccessfulLogonLastFailedLogon*FailedAttemptCountSinceLastSuccessfulLogonN)ru   rv   rw   rB  ULONGrx   r   r   r   r   rH  *  r   rH  c                   @   s   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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defdefgZ	dS )SECURITY_LOGON_SESSION_DATASizeLogonIdUserNameLogonDomainAuthenticationPackageSessionSid	LogonTimeLogonServerDnsDomainNameUpn	UserFlagsLastLogonInfoLogonScriptProfilePathHomeDirectoryHomeDirectoryDrive
LogoffTimeKickOffTimePasswordLastSetPasswordCanChangePasswordMustChangeN)
ru   rv   rw   rL  r3  UNICODE_STRINGr   rB  rH  rx   r   r   r   r   rM  2  s0    rM  c                 C   sn   t jj}tttg|_t|_t }|| t	|}|j
j t|j
jd|j
j |j
j |j
j d}|S )NT)usernameusersiddomainlogonserverdnsdomainname)rA   Secur32LsaGetLogonSessionDataPLUIDPOINTERPSECURITY_LOGON_SESSION_DATArG   rE   rH   rb   rc   rP  
get_stringr   rT  rQ  rV  rW  )luid_LsaGetLogonSessionDatasecdataxr   r   r   r   rk  M  s   



rk  c                  C   s   t jj} g | _t| _|  S ry   )rA   kernel32GetCurrentProcessIdrG   rE   rH   )_GetCurrentProcessIdr   r   r   ru  `  s   ru  c                 C   sJ   t jj}tttg|_t|_| d u rd} || t||}|t	kr#t
 |S )Nr?   )rA   rt  OpenProcessrE   r   rG   rD   rH   r   r  r   r   )r   bInheritHandledwProcessId_OpenProcesshProcessr   r   r   rw  k  s   rw  )F)r  )enumwinacl.functions.defineswinacl.functions.kernel32r   r   r   winacl.functions.membuffr   winacl.dtyp.security_descriptorr   winacl.dtyp.sidr   winacl.functions.constantsr	   r   r   c_intr*  	TokenUserTokenGroupsTokenPrivileges
TokenOwnerTokenPrimaryGroupTokenDefaultDaclTokenSourcer;  TokenImpersonationLevelrG  TokenRestrictedSidsTokenSessionIdTokenGroupsAndPrivilegesTokenSessionReferenceTokenSandBoxInertTokenAuditPolicyTokenOriginTokenElevationTypeTokenLinkedTokenTokenElevationTokenHasRestrictionsTokenAccessInformationTokenVirtualizationAllowedTokenVirtualizationEnabledTokenIntegrityLevelTokenUIAccessTokenMandatoryPolicyTokenLogonSidTokenIsAppContainerTokenCapabilitiesTokenAppContainerSidTokenAppContainerNumberTokenUserClaimAttributesTokenDeviceClaimAttributes"TokenRestrictedUserClaimAttributes$TokenRestrictedDeviceClaimAttributesTokenDeviceGroupsTokenRestrictedDeviceGroupsTokenSecurityAttributesTokenIsRestrictedrE  TOKEN_ASSIGN_PRIMARYTOKEN_DUPLICATETOKEN_IMPERSONATETOKEN_QUERYTOKEN_QUERY_SOURCETOKEN_ADJUST_PRIVILEGESTOKEN_ADJUST_GROUPSTOKEN_ADJUST_DEFAULTTOKEN_ADJUST_SESSIONIDSTANDARD_RIGHTS_READ
TOKEN_READSTANDARD_RIGHTS_REQUIREDTOKEN_ALL_ACCESSrL   GROUP_SECURITY_INFORMATIONrQ   SACL_SECURITY_INFORMATIONLABEL_SECURITY_INFORMATION%UNPROTECTED_SACL_SECURITY_INFORMATION%UNPROTECTED_DACL_SECURITY_INFORMATION#PROTECTED_SACL_SECURITY_INFORMATION#PROTECTED_DACL_SECURITY_INFORMATIONATTRIBUTE_SECURITY_INFORMATIONSCOPE_SECURITY_INFORMATION(PROCESS_TRUST_LABEL_SECURITY_INFORMATIONBACKUP_SECURITY_INFORMATIONSERVICE_DRIVERSERVICE_WIN32SERVICE_ACTIVESERVICE_INACTIVESERVICE_STATE_ALLrD   r   SERVICE_ALL_ACCESSSERVICE_QUERY_CONFIGSERVICE_CHANGE_CONFIGSERVICE_QUERY_STATUSSERVICE_ENUMERATE_DEPENDENTSSERVICE_STARTSERVICE_STOPSERVICE_PAUSE_CONTINUESERVICE_INTERROGATESERVICE_USER_DEFINED_CONTROLSC_MANAGER_ALL_ACCESSSC_MANAGER_CONNECTSC_MANAGER_CREATE_SERVICESC_MANAGER_ENUMERATE_SERVICESC_MANAGER_LOCKSC_MANAGER_QUERY_LOCK_STATUSSC_MANAGER_MODIFY_BOOT_CONFIGrC   r_   	Structurero   rm  r{   rz   r   r   r   r   r   r   r   r   r   r   r   r   LPSERVICE_STATUSr   r   r   HKEY_CLASSES_ROOTHKEY_CURRENT_USERHKEY_LOCAL_MACHINE
HKEY_USERSHKEY_PERFORMANCE_DATAHKEY_PERFORMANCE_TEXTHKEY_PERFORMANCE_NLSTEXTHKEY_CURRENT_CONFIGHKEY_DYN_DATAhive_name_mapKEY_ALL_ACCESSKEY_CREATE_LINKKEY_CREATE_SUB_KEYKEY_ENUMERATE_SUB_KEYSKEY_EXECUTE
KEY_NOTIFYKEY_QUERY_VALUEKEY_READKEY_SET_VALUEKEY_WOW64_32KEYKEY_WOW64_64KEY	KEY_WRITEREG_OPTION_RESERVEDREG_OPTION_NON_VOLATILEREG_OPTION_VOLATILEREG_OPTION_CREATE_LINKREG_OPTION_BACKUP_RESTOREREG_OPTION_OPEN_LINKr  r  r
  r  r  r#  r2  rC  PTOKEN_TYPEr3  rl  SecurityAnonymousSecurityIdentificationSecurityImpersonationSecurityDelegationrD  PSECURITY_IMPERSONATION_LEVELr7  PTOKEN_STATISTICSr)  rH  PLSA_LAST_INTER_LOGON_INFOrM  rn  rk  ru  rw  r   r   r   r   <module>   s   ?
	


'
#
		
