Module: Win32::Resolv::WsControl
| Relationships & Source Files | |
| Namespace Children | |
| Modules: | |
| Defined in: | ext/win32/lib/win32/resolv9x.rb | 
Constant Summary
- 
    CL_NL_ENTITY =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1550x301
- 
    CL_NL_IP =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1580x303
- 
    ENTITY_LIST_ID =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1530
- 
    ENTITY_TYPE_ID =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1571
- 
    GENERIC_ENTITY =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1540
- 
    IF_ENTITY =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1560x200
- 
    IF_MIB =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1590x202
- 
    IF_MIB_STATS_ID =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1601
- 
    INFO_CLASS_GENERIC =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1500x100
- 
    INFO_CLASS_PROTOCOL =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1510x200
- 
    INFO_TYPE_PROVIDER =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1520x100
- 
    IPPROTO_TCP =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1486
- 
    IP_MIB_ADDRTABLE_ENTRY_ID =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1610x102
- 
    MAX_TDI_ENTITIES =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 147512
- 
    WSAGetLastError =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 145WSock32.extern "int WSAGetLastError(void)", :stdcall 
- 
    WSCTL_TCP_QUERY_INFORMATION =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 1490
- 
    WsControl =
    
 # File 'ext/win32/lib/win32/resolv9x.rb', line 144WSock32.extern "int WsControl(int, int, void *, void *, void *, void *", :stdcall 
Class Method Summary
Class Method Details
.get_iflist
[ GitHub ]# File 'ext/win32/lib/win32/resolv9x.rb', line 189
def self.get_iflist # Get TDI Entity List entities, size = wsctl(GENERIC_ENTITY, 0, INFO_CLASS_GENERIC, INFO_TYPE_PROVIDER, ENTITY_LIST_ID, MAX_TDI_ENTITIES * 8) # sizeof(TDIEntityID) entities = entities[0, size]. scan(/.{8}/). collect { |e| e.unpack('VV') } # Get MIB Interface List iflist = [] ifcount = 0 entities.each do |entity, instance| if( (entity & IF_ENTITY)>0 ) ifcount += 1 etype, = wsctl(entity, instance, INFO_CLASS_GENERIC, INFO_TYPE_PROVIDER, ENTITY_TYPE_ID, 4) if( (API.unpackdw(etype) & IF_MIB)==IF_MIB ) ifentry, = wsctl(entity, instance, INFO_CLASS_PROTOCOL, INFO_TYPE_PROVIDER, IF_MIB_STATS_ID, 21 * 4 + 8 + 130) # sizeof(IFEntry) iflist << [ API.unpackdw(ifentry[0,4]), ifentry[20, 6] ] end end end # Get IP Addresses entities.each do |entity, instance| if entity == CL_NL_ENTITY etype, = wsctl(entity, instance, INFO_CLASS_GENERIC, INFO_TYPE_PROVIDER, ENTITY_TYPE_ID, 4) if API.unpackdw(etype) == CL_NL_IP ipentries, = wsctl(entity, instance, INFO_CLASS_PROTOCOL, INFO_TYPE_PROVIDER, IP_MIB_ADDRTABLE_ENTRY_ID, 24 * (ifcount+1)) # sizeof(IPAddrEntry) ipentries.scan(/.{24}/) do |ipentry| ipaddr, index = ipentry.unpack('VV') if ifitem = iflist.assoc(index) ifitem << ipaddr end end end end end iflist end
.wsctl(tei_entity, tei_instance, toi_class, toi_type, toi_id, buffsize) (private)
[ GitHub ]# File 'ext/win32/lib/win32/resolv9x.rb', line 163
def self.wsctl(tei_entity, tei_instance, toi_class, toi_type, toi_id, buffsize) reqinfo = [ ## TDIEntityID tei_entity, tei_instance, ## TDIObjectID toi_class, toi_type, toi_id, ## TCP_REQUEST_INFORMATION_EX "" ].pack('VVVVVa16') reqsize = API.packdw(reqinfo.size) buff = "\0" * buffsize buffsize = API.packdw(buffsize) result = WsControl.call( IPPROTO_TCP, WSCTL_TCP_QUERY_INFORMATION, reqinfo, reqsize, buff, buffsize) if result != 0 raise RuntimeError, "WsControl failed.(#{result})" end [ buff, API.unpackdw(buffsize) ] end