o
    Žõ±jàJ  ã                   @   s�  d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZmZmZmZmZ d dlmZ d dlmZmZ d dlmZ edƒZedƒZG d	d
„ d
eƒZeZG dd„ d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(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4d Z5d!Z6dZ7d"Z8d#Z9d$Z:d%Z;d&Z<d'Z=dZ>dZ?d(Z@d)ZAd*ZBd+ZCd,ZDd-ZEd&ZFd$ZGd.ZHd/ZId'ZJd%ZKd0ZLd!ZMd"ZNdZOd1ZPd ZQd2ZRd3ZSd4ZTd5ZUd6ZVd7ZWdZXdZYd8ZZdZ[dZ\dZ]dZ^dZ_dZ`d9Zad:Zbd!ZcdZdd"Zed;Zfd5Zgd Zhd!ZidZjdZkdZldZmdZndZod<Zpd=Zqd:Zrd!ZsG d>d?„ d?eƒZtG d@dA„ dAeƒZuG dBdC„ dCeƒZvG dDdE„ dEeƒZwG dFdG„ dGeƒZxG dHdI„ dIeƒZyG dJdK„ dKeƒZzG dLdM„ dMeƒZ{G dNdO„ dOeƒZ|G dPdQ„ dQeƒZ}G dRdS„ dSeƒZ~G dTdU„ dUeƒZG dVdW„ dWeƒZ€G dXdY„ dYeƒZ�G dZd[„ d[eƒZ‚G d\d]„ d]eƒZƒG d^d_„ d_eƒZ„G d`da„ daeƒZ…G dbdc„ dceƒZ†G ddde„ deeƒZ‡G dfdg„ dgeƒZˆG dhdi„ dieƒZ‰G djdk„ dkeƒZŠG dldm„ dmeƒZ‹G dndo„ doeƒZŒG dpdq„ dqeƒZ�G drds„ dseƒZŽG dtdu„ dueƒZ�G dvdw„ dweƒZ�G dxdy„ dyeƒZ‘G dzd{„ d{eƒZ’G d|d}„ d}eƒZ“G d~d„ deƒZ”G d€d�„ d�eƒZ•eŽe�fe�e‘feŒe�fe”e”fe’e“fd‚œZ–dƒd„„ Z—d…d†„ Z˜e	e	e-e	fd‡dˆ„Z™e	dfd‰dŠ„Zšd‹dŒ„ Z›d�dŽ„ Zœd�S )�é    )Úsystem_errors)Ú	ULONGLONGÚUINTÚUSHORTÚLPWSTRÚDWORDÚULONGÚNULL)ÚNDRCALLÚ	NDRSTRUCTÚNDRUNIONÚ
NDRPOINTERÚNDRUniConformantArray)ÚDCERPCException)Úuuidtup_to_binÚstring_to_bin)ÚDRIVER_INFO_2_ARRAY)z$76F03F96-CDFD-44FC-A22C-64950A001209z1.0z$9940CA8E-512F-4C58-88A9-61098D6896BDc                   @   s   e Zd Zddd„Zdd„ ZdS )ÚDCERPCSessionErrorNc                 C   s   t  | |||¡ d S )N)r   Ú__init__)ÚselfÚerror_stringÚ
error_codeÚpacket© r   ú‡/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/par.pyr   "   s   zDCERPCSessionError.__init__c                 C   sF   | j }|tjv rtj| d }tj| d }d| j ||f S d| j  S )Nr   é   z'RPRN SessionError: code: 0x%x - %s - %sz+RPRN SessionError: unknown error code: 0x%x)r   r   ÚERROR_MESSAGES)r   ÚkeyÚerror_msg_shortÚerror_msg_verboser   r   r   Ú__str__%   s   

zDCERPCSessionError.__str__)NNN)Ú__name__Ú
__module__Ú__qualname__r   r    r   r   r   r   r   !   s    
r   c                   @   ó   e Zd ZdeffZdS )ÚPSTRING_HANDLEÚDataN)r!   r"   r#   ÚSTRING_HANDLEÚreferentr   r   r   r   r%   3   ó    ÿr%   é   é    i  i   i0  é   é   é@   i  i  r   é   i  i  i  iÿÿ  i   i   i   i   i   i   i   l        i   @i    i   éÿ   é   i   i   i   i ÿ  iÿÿwwiÿÿwi   pi   i    i  @ i  p i   i   i   i   i @  i €  i  € i   i    c                   @   s   e Zd ZdZdd„ ZdS )ÚPRINTER_HANDLE))r&   z20s=b""c                 C   s   | j du rdS dS )NTr-   r,   )Ú_isNDR64)r   r   r   r   ÚgetAlignment¦   s   
zPRINTER_HANDLE.getAlignmentN)r!   r"   r#   Ú	structurer4   r   r   r   r   r2   ¢   s    r2   c                   @   ó   e Zd ZdZdS )Ú
BYTE_ARRAYÚcN©r!   r"   r#   Úitemr   r   r   r   r7   ­   ó    r7   c                   @   r$   )ÚPBYTE_ARRAYr&   N)r!   r"   r#   r7   r(   r   r   r   r   r<   °   r)   r<   c                   @   ó   e Zd ZdefdeffZdS )ÚDEVMODE_CONTAINERÚcbBufÚpDevModeN)r!   r"   r#   r   r<   r5   r   r   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fZdS )	ÚSPLCLIENT_INFO_1ÚdwSizeÚpMachineNameÚ	pUserNameÚ
dwBuildNumÚdwMajorVersionÚdwMinorVersionÚwProcessorArchitectureN)r!   r"   r#   r   r   r   r5   r   r   r   r   rB   ¼   s    ùrB   c                   @   r$   )ÚPSPLCLIENT_INFO_1r&   N)r!   r"   r#   rB   r(   r   r   r   r   rJ   Ç   r)   rJ   c                   @   r$   )ÚSPLCLIENT_INFO_2ÚnotUsedN)r!   r"   r#   r   r5   r   r   r   r   rK   Í   r)   rK   c                   @   r$   )ÚPSPLCLIENT_INFO_2r&   N)r!   r"   r#   rK   r(   r   r   r   r   rM   Ò   r)   rM   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f
Zd
S )ÚSPLCLIENT_INFO_3ÚcbSizeÚdwFlagsrD   rE   rF   rG   rH   rI   ÚhSplPrinterN)	r!   r"   r#   r   r   r   r   r   r5   r   r   r   r   rN   ×   s    örN   c                   @   r$   )ÚPSPLCLIENT_INFO_3r&   N)r!   r"   r#   rN   r(   r   r   r   r   rR   å   r)   rR   c                   @   r$   )ÚDRIVER_INFO_1ÚpNameN)r!   r"   r#   r'   r5   r   r   r   r   rS   ë   r)   rS   c                   @   r$   )ÚPDRIVER_INFO_1r&   N)r!   r"   r#   rS   r(   r   r   r   r   rU   ï   r)   rU   c                   @   s4   e Zd ZdefdefdefdefdefdeffZdS )ÚDRIVER_INFO_2ÚcVersionrT   ÚpEnvironmentÚpDriverPathÚ	pDataFileÚpConfigFileN)r!   r"   r#   r   r   r5   r   r   r   r   rV   õ   ó    úrV   c                   @   r$   )ÚPDRIVER_INFO_2r&   N)r!   r"   r#   rV   r(   r   r   r   r   r]   þ   r)   r]   c                   @   s(   e Zd ZdeffZdefdefdœZdS )ÚDRIVER_INFO_UNIONÚtagÚpNotUsedÚLevel2)r   r/   N)r!   r"   r#   r   Ú	commonHdrrU   r]   Úunionr   r   r   r   r^     s    ÿ
þr^   c                   @   r=   )ÚDRIVER_CONTAINERÚLevelÚ
DriverInfoN)r!   r"   r#   r   r^   r5   r   r   r   r   rd     rA   rd   c                   @   s.   e Zd ZdeffZdefdefdefdœZdS )ÚCLIENT_INFO_UNIONr_   ÚpClientInfo1Ú	pNotUsed1Ú	pNotUsed2)r   r/   é   N)	r!   r"   r#   r   rb   rJ   rM   rR   rc   r   r   r   r   rg     s    ÿ
ýrg   c                   @   r=   )ÚSPLCLIENT_CONTAINERre   Ú
ClientInfoN)r!   r"   r#   r   rg   r5   r   r   r   r   rl     rA   rl   c                   @   r6   )ÚUSHORT_ARRAYz<HNr9   r   r   r   r   rn   %  r;   rn   c                   @   r$   )ÚPUSHORT_ARRAYr&   N)r!   r"   r#   rn   r(   r   r   r   r   ro   (  r)   ro   c                   @   s4   e Zd ZdefdefdefdefdefdeffZdS )ÚRpcAsync_V2_NOTIFY_OPTIONS_TYPEÚTypeÚ	Reserved0Ú	Reserved1Ú	Reserved2ÚCountÚpFieldsN)r!   r"   r#   r   r   ro   r5   r   r   r   r   rp   -  r\   rp   c                   @   r$   )Ú!PRPC_V2_NOTIFY_OPTIONS_TYPE_ARRAYr&   N)r!   r"   r#   rp   r(   r   r   r   r   rw   7  r)   rw   c                   @   s(   e Zd ZdefdefdefdeffZdS )ÚRpcAsync_V2_NOTIFY_OPTIONSÚVersionÚReservedru   ÚpTypesN)r!   r"   r#   r   rw   r5   r   r   r   r   rx   =  ó    ürx   c                   @   r$   )ÚPRPC_V2_NOTIFY_OPTIONSr&   N)r!   r"   r#   rx   r(   r   r   r   r   r}   E  r)   r}   c                   @   s2   e Zd ZdZdefdefdefdefdeffZdS )ÚRpcAsyncEnumPrintersé&   ÚFlagsÚNamere   ÚpPrinterEnumr?   N)r!   r"   r#   Úopnumr   r'   r<   r5   r   r   r   r   r~   O  ó    ûr~   c                   @   ó(   e Zd ZdefdefdefdeffZdS )ÚRpcAsyncEnumPrintersResponser‚   Ú	pcbNeededÚ
pcReturnedÚ	ErrorCodeN©r!   r"   r#   r<   r   r   r5   r   r   r   r   r†   Y  r|   r†   c                   @   s2   e Zd ZdZdefdefdefdefdeffZ	dS )ÚRpcAsyncOpenPrinterr   ÚpPrinterNameÚ	pDatatypeÚpDevModeContainerÚAccessRequiredÚpClientInfoN)
r!   r"   r#   rƒ   r'   r   r>   r   rl   r5   r   r   r   r   r‹   b  r„   r‹   c                   @   r=   )ÚRpcAsyncOpenPrinterResponseÚpHandler‰   N©r!   r"   r#   r2   r   r5   r   r   r   r   r‘   l  rA   r‘   c                   @   s   e Zd ZdZdeffZdS )ÚRpcAsyncClosePrinteré   Ú	phPrinterN)r!   r"   r#   rƒ   r2   r5   r   r   r   r   r”   s  s    ÿr”   c                   @   r=   )ÚRpcAsyncClosePrinterResponser–   r‰   Nr“   r   r   r   r   r—   y  rA   r—   c                   @   s2   e Zd ZdZdefdefdefdefdeffZdS )ÚRpcAsyncEnumPrinterDriversé(   rT   rX   re   ÚpDriversr?   N)	r!   r"   r#   rƒ   r'   r   r   r<   r5   r   r   r   r   r˜   €  r„   r˜   c                   @   r…   )Ú"RpcAsyncEnumPrinterDriversResponserš   r‡   rˆ   r‰   NrŠ   r   r   r   r   r›   Š  r|   r›   c                   @   s&   e Zd ZdZdefdefdeffZdS )ÚRpcAsyncAddPrinterDriveré'   rT   ÚpDriverContainerÚdwFileCopyFlagsN)r!   r"   r#   rƒ   r'   rd   r   r5   r   r   r   r   rœ   “  s    ýrœ   c                   @   r$   )Ú RpcAsyncAddPrinterDriverResponser‰   N)r!   r"   r#   r   r5   r   r   r   r   r    ›  r)   r    )r   r•   r   r�   r™   c                 C   s(   | t kr| S | dd … dkr| d S | S )Néÿÿÿÿú )r	   )Ústringr   r   r   ÚcheckNullString¯  s
   r¤   c                 Ã   s"   �t ƒ }||d< |  |t¡I dH S )aŸ  
	RpcClosePrinter closes a handle to a printer object, server object, job object, or port object.
	Full Documentation: https://msdn.microsoft.com/en-us/library/cc244768.aspx

	:param DCERPC_v5 dce: a connected DCE instance.
	:param PRINTER_HANDLE phPrinter: A handle to a printer object, server object, job object, or port object.

	:return: a RpcClosePrinterResponse instance, raises DCERPCSessionError on error.
	r–   N)r”   ÚrequestÚMSRPC_UUID_WINSPOOL)Údcer–   r¥   r   r   r   ÚhRpcAsyncClosePrinter¸  s   €
r¨   c                 Ã   sl   �t ƒ }t|ƒ|d< ||d< |tu rt|d d< n||d< ||d< |tu r)tdƒ‚||d< |  |t¡I dH S )	aþ  
	RpcOpenPrinterEx retrieves a handle for a printer, port, port monitor, print job, or print server
	Full Documentation: https://msdn.microsoft.com/en-us/library/cc244809.aspx

	:param DCERPC_v5 dce: a connected DCE instance.
	:param string printerName: A string for a printer connection, printer object, server object, job object, port
	object, or port monitor object. This MUST be a Domain Name System (DNS), NetBIOS, Internet Protocol version 4
	(IPv4), Internet Protocol version 6 (IPv6), or Universal Naming Convention (UNC) name that remote procedure
	call (RpcAsync) binds to, and it MUST uniquely identify a print server on the network.
	:param string pDatatype: A string that specifies the data type to be associated with the printer handle.
	:param DEVMODE_CONTAINER pDevModeContainer: A DEVMODE_CONTAINER structure. This parameter MUST adhere to the specification in
	DEVMODE_CONTAINER Parameters (section 3.1.4.1.8.1).
	:param int accessRequired: The access level that the client requires for interacting with the object to which a
	handle is being opened.
	:param SPLCLIENT_CONTAINER pClientInfo: This parameter MUST adhere to the specification in SPLCLIENT_CONTAINER Parameters.

	:return: a RpcOpenPrinterExResponse instance, raises DCERPCSessionError on error.
	rŒ   r�   rŽ   r@   r�   zpClientInfo cannot be NULLr�   N)r‹   r¤   r	   Ú	Exceptionr¥   r¦   )r§   ÚprinterNamer�   rŽ   ÚaccessRequiredr�   r¥   r   r   r   ÚhRpcAsyncOpenPrinterÇ  s   €r¬   c           	   
   Ã   sÜ   �t ƒ }||d< ||d< t|d< ||d< d}z|  |t¡I dH \}}|dur(|‚W n" tyK } zt|ƒ d¡dk r;‚ | ¡ d }W Y d}~nd}~ww t ƒ }||d< ||d< ||d< ||d	< d
| |d< |  |t¡I dH S )a¬  
	RpcEnumPrinters enumerates available printers, print servers, domains, or print providers.
	Full Documentation: https://msdn.microsoft.com/en-us/library/cc244794.aspx

	:param DCERPC_v5 dce: a connected DCE instance.
	:param int flags: The types of print objects that this method enumerates. The value of this parameter is the
	result of a bitwise OR of one or more of the Printer Enumeration Flags (section 2.2.3.7).
	:param string name: NULL or a server name parameter as specified in Printer Server Name Parameters (section 3.1.4.1.4).
	:param level: The level of printer information structure.

	:return: a RpcEnumPrintersResponse instance, raises DCERPCSessionError on error.
	r€   r�   r‚   re   r   NÚERROR_INSUFFICIENT_BUFFERr‡   r?   ó   a)r~   r	   r¥   r¦   r   ÚstrÚfindÚ
get_packet)	r§   ÚflagsÚnameÚlevelr¥   ÚbytesNeededÚ_ÚerrÚer   r   r   ÚhRpcAsyncEnumPrintersë  s2   €ÿ€ýr¹   c                 Ã   s6   �t ƒ }t|ƒ|d< ||d< ||d< |  |t¡I dH S )af  
	RpcAddPrinterDriverEx installs a printer driver on the print server
	Full Documentation: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rprn/b96cc497-59e5-4510-ab04-5484993b259b

	:param DCERPC_v5 dce: a connected DCE instance.
	:param pName
	:param pDriverContainer
	:param dwFileCopyFlags

	:return: raises DCERPCSessionError on error.
	rT   rž   rŸ   N)rœ   r¤   r¥   r¦   )r§   rT   rž   rŸ   r¥   r   r   r   ÚhRpcAsyncAddPrinterDriver  s   €rº   c              
   Ã   s   �t ƒ }t|ƒ|d< ||d< ||d< t|d< d|d< z|  |t¡I dH \}}|dur,|‚W n" tyO } zt|ƒ d¡dk r?‚ | ¡ d	 }W Y d}~nd}~ww t ƒ }t|ƒ|d< ||d< ||d< d
| |d< ||d< |  |t¡I dH \}	}|dur~d|fS t	 
d |	d ¡|	d ¡}
|
j|fS )a´  
	RpcEnumPrinterDrivers enumerates the printer drivers installed on a specified print server.
	Full Documentation: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rprn/857d00ac-3682-4a0d-86ca-3d3c372e5e4a

	:param DCERPC_v5 dce: a connected DCE instance.
	:param pName
	:param pEnvironment
	:param Level
	:param pDrivers
	:param cbBuf
	:param pcbNeeded
	:param pcReturned

	:return: raises DCERPCSessionError on error.
	rT   rX   re   rš   r   r?   Nr­   r‡   r®   ó    rˆ   )r˜   r¤   r	   r¥   r¦   r   r¯   r°   r±   r   Ú
from_bytesÚjoinÚdrivers)r§   rT   rX   re   r¥   r¶   r·   r¸   rµ   Údata_rawÚdatar   r   r   ÚhRpcAsyncEnumPrinterDrivers&  s:   €ÿ€ý
rÁ   N)�Úaiosmb.dcerpc.v5r   Úaiosmb.dcerpc.v5.dtypesr   r   r   r   r   r   r	   Úaiosmb.dcerpc.v5.ndrr
   r   r   r   r   Úaiosmb.dcerpc.v5.rpcrtr   Úaiosmb.dcerpc.v5.uuidr   r   Úaiosmb.dcerpc.v5.rprnr   ÚMSRPC_UUID_PARr¦   r   r'   r%   ÚJOB_ACCESS_ADMINISTERÚJOB_ACCESS_READÚJOB_EXECUTEÚJOB_READÚ	JOB_WRITEÚJOB_ALL_ACCESSÚPRINTER_ACCESS_ADMINISTERÚPRINTER_ACCESS_USEÚPRINTER_ACCESS_MANAGE_LIMITEDÚPRINTER_ALL_ACCESSÚPRINTER_EXECUTEÚPRINTER_READÚPRINTER_WRITEÚSERVER_ACCESS_ADMINISTERÚSERVER_ACCESS_ENUMERATEÚSERVER_ALL_ACCESSÚSERVER_EXECUTEÚSERVER_READÚSERVER_WRITEÚSPECIFIC_RIGHTS_ALLÚSTANDARD_RIGHTS_ALLÚSTANDARD_RIGHTS_EXECUTEÚSTANDARD_RIGHTS_READÚSTANDARD_RIGHTS_REQUIREDÚSTANDARD_RIGHTS_WRITEÚSYNCHRONIZEÚDELETEÚREAD_CONTROLÚ	WRITE_DACÚWRITE_OWNERÚGENERIC_READÚGENERIC_WRITEÚGENERIC_EXECUTEÚGENERIC_ALLÚPRINTER_CHANGE_SET_PRINTERÚPRINTER_CHANGE_DELETE_PRINTERÚPRINTER_CHANGE_PRINTERÚPRINTER_CHANGE_ADD_JOBÚPRINTER_CHANGE_SET_JOBÚPRINTER_CHANGE_DELETE_JOBÚPRINTER_CHANGE_WRITE_JOBÚPRINTER_CHANGE_JOBÚ!PRINTER_CHANGE_SET_PRINTER_DRIVERÚPRINTER_CHANGE_TIMEOUTÚPRINTER_CHANGE_ALLÚPRINTER_CHANGE_ALL_2Ú!PRINTER_CHANGE_ADD_PRINTER_DRIVERÚ$PRINTER_CHANGE_DELETE_PRINTER_DRIVERÚPRINTER_CHANGE_PRINTER_DRIVERÚPRINTER_CHANGE_ADD_FORMÚPRINTER_CHANGE_DELETE_FORMÚPRINTER_CHANGE_SET_FORMÚPRINTER_CHANGE_FORMÚPRINTER_CHANGE_ADD_PORTÚPRINTER_CHANGE_CONFIGURE_PORTÚPRINTER_CHANGE_DELETE_PORTÚPRINTER_CHANGE_PORTÚ"PRINTER_CHANGE_ADD_PRINT_PROCESSORÚ%PRINTER_CHANGE_DELETE_PRINT_PROCESSORÚPRINTER_CHANGE_PRINT_PROCESSORÚPRINTER_CHANGE_ADD_PRINTERÚ(PRINTER_CHANGE_FAILED_CONNECTION_PRINTERÚPRINTER_CHANGE_SERVERÚPRINTER_ENUM_LOCALÚPRINTER_ENUM_CONNECTIONSÚPRINTER_ENUM_NAMEÚPRINTER_ENUM_REMOTEÚPRINTER_ENUM_SHAREDÚPRINTER_ENUM_NETWORKÚPRINTER_ENUM_EXPANDÚPRINTER_ENUM_CONTAINERÚPRINTER_ENUM_ICON1ÚPRINTER_ENUM_ICON2ÚPRINTER_ENUM_ICON3ÚPRINTER_ENUM_ICON8ÚPRINTER_ENUM_HIDEÚPRINTER_NOTIFY_CATEGORY_2DÚPRINTER_NOTIFY_CATEGORY_ALLÚPRINTER_NOTIFY_CATEGORY_3DÚAPD_STRICT_UPGRADEÚAPD_STRICT_DOWNGRADEÚAPD_COPY_ALL_FILESÚAPD_COPY_NEW_FILESÚAPD_COPY_FROM_DIRECTORYÚAPD_DONT_COPY_FILES_TO_CLUSTERÚAPD_COPY_TO_ALL_SPOOLERSÚAPD_INSTALL_WARNED_DRIVERÚAPD_RETURN_BLOCKING_STATUS_CODEr2   r7   r<   r>   rB   rJ   rK   rM   rN   rR   rS   rU   rV   r]   r^   rd   rg   rl   rn   ro   rp   rw   rx   r}   r~   r†   r‹   r‘   r”   r—   r˜   r›   rœ   r    ÚOPNUMSr¤   r¨   r¬   r¹   rº   rÁ   r   r   r   r   Ú<module>   s&  $		



	

		ú	
ÿ$&