3 M]WY* @sddlZddlZddlmZddlmZddlmZddlmZddlmZddlmZddlm Z dd lm Z dd lm Z ddl Z dd l mZdd lmZd dZdZejZejZejZejZejeZZejZZeZeZ ddZ!ddZ"Gdddej#Z$Gdddej#Z%eje%Z&ejZ'ej(j)dZ*e*j+Z+ege+_,ee+_-e*j.Z/eeje$eege/_,ee/_-e*j0Z0eee&ge0_,ee0_-e*j1Z2eje$eeege2_,ee2_-ee2_3e*j4Z5ee&eeeeege5_,ee5_-e*j6Z7ee&eeege7_,ee7_-e*j8Z8ee&eeee ge8_,e e8_-ej(j)dZ9e9j:Z:e ge:_,ee:_-e9j;ZdZ?dZ@dZAdZBdZCdZDdZEdZFe jGd d!d"d#d$gZHe jGd d!d"d#d%d&d'd(gZId)d*ZJd+d,ZKeLd-krx,eMeKD]\ZNZOZPeQd.jReNeOePqWdS)/N)BOOL)HWND)DWORD)WORD)LONG)ULONG)LPCSTR)HKEY)BYTE) ULONG_PTR)list_ports_commoncCs|dkrtj|S)Nr)ctypesWinError)valuefuncZ argumentsr(/usr/lib/python3.6/list_ports_windows.py ValidHandlesrcCs t|S)zGet a buffer for a string)r )Zlengthrrr byte_buffer.srcCs8g}x(|D] }|dkrP|jt|d@q Wdj|S)Nr)appendchrjoin)bufferscrrrstring3s  rc@s4eZdZdefdefdefdedfgZddZdS) GUIDData1Data2Data3Data4c CsLdj|j|j|jdjdd|jddDdjdd|jddDS)Nz{{{:08x}-{:04x}-{:04x}-{}-{}}}rcSsg|]}dj|qS)z{:02x})format).0drrr Isz GUID.__str__..cSsg|]}dj|qS)z{:02x})r$)r%r&rrrr'Js)r$rr r!rr")selfrrr__str__Ds z GUID.__str__N)__name__ __module__ __qualname__rrr _fields_r*rrrrr<s rc@s0eZdZdefdefdefdefgZddZdS)SP_DEVINFO_DATAcbSize ClassGuidDevInstZReservedcCsdj|j|jS)NzClassGuid:{} DevInst:{})r$r1r2)r)rrrr*VszSP_DEVINFO_DATA.__str__N)r+r,r-rrr r.r*rrrrr/Ns  r/setupapiZAdvapi32r(z #iPortsNamec cs|td}t}tt|tj|tj|s2tjxBt|j D]2}t tj||dt t }t }tj||_d}xt||tj|rj|d7}t|tj|tdtt}td}ttj|}t|tddtj|tj|t|t|jdrqxtd}t|tj|tj|tj|ddsjt|tj|tdtj|tj|ddsjtjtkrjtjt|} t j!t|} | jdrt"j#d| t"j$} | rt%| j&dd | _'t%| j&d d | _(| j&d r| j&d | _)td} t|tj|t*dtj| tj| ddrt"j+d t| } g} xn| D]f}|j&dr\| j,d j-t%|j&ddn4t.| dkrv| j,dn | j,d| j,|j&d q,W| rdj/| | _0| j1| _2np| jdrt"j#d| t"j$} | rt%| j&dd | _'t%| j&d d | _(| j&d r| j&d | _)| j1| _2n| | _2td}t|tj|t3dtj|tj|ddrbt|| _4| VqxWt5|q@WdS)z s