# -*- coding: binary -*-
module Rex
module Post
module Meterpreter
module Extensions
module Stdapi
module Railgun
module Def

class Def_windows_ws2_32

  def self.create_library(constant_manager, library_path = 'ws2_32')
    dll = Library.new(library_path, constant_manager)

    dll.add_function('getaddrinfo', 'DWORD',[
      ["PCHAR","pNodeName","in"],
      ["PCHAR","pServiceName","in"],
      ["PDWORD","pHints","in"],
      ["PDWORD","ppResult","out"]
      ])

    dll.add_function('gethostbyaddr', 'DWORD', [
      ['PCHAR', 'addr', 'in'],
      ['DWORD','len','in'],
      ['DWORD','type','in']
      ])

    dll.add_function('WSAAccept', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","addr","inout"],
      ["PDWORD","addrlen","inout"],
      ["PBLOB","lpfnCondition","in"],
      ["PDWORD","dwCallbackData","in"],
      ])

    dll.add_function('WSAAddressToStringA', 'DWORD',[
      ["PBLOB","lpsaAddress","in"],
      ["DWORD","dwAddressLength","in"],
      ["PBLOB","lpProtocolInfo","in"],
      ["PCHAR","lpszAddressString","inout"],
      ["PDWORD","lpdwAddressStringLength","inout"],
      ])

    dll.add_function('WSAAddressToStringW', 'DWORD',[
      ["PBLOB","lpsaAddress","in"],
      ["DWORD","dwAddressLength","in"],
      ["PBLOB","lpProtocolInfo","in"],
      ["PWCHAR","lpszAddressString","inout"],
      ["PDWORD","lpdwAddressStringLength","inout"],
      ])

    dll.add_function('WSAAsyncGetHostByAddr', 'DWORD',[
      ["DWORD","hWnd","in"],
      ["DWORD","wMsg","in"],
      ["PCHAR","addr","in"],
      ["DWORD","len","in"],
      ["DWORD","type","in"],
      ["PCHAR","buf","inout"],
      ["DWORD","buflen","in"],
      ])

    dll.add_function('WSAAsyncGetHostByName', 'DWORD',[
      ["DWORD","hWnd","in"],
      ["DWORD","wMsg","in"],
      ["PCHAR","name","in"],
      ["PCHAR","buf","inout"],
      ["DWORD","buflen","in"],
      ])

    dll.add_function('WSAAsyncGetProtoByName', 'DWORD',[
      ["DWORD","hWnd","in"],
      ["DWORD","wMsg","in"],
      ["PCHAR","name","in"],
      ["PCHAR","buf","inout"],
      ["DWORD","buflen","in"],
      ])

    dll.add_function('WSAAsyncGetProtoByNumber', 'DWORD',[
      ["DWORD","hWnd","in"],
      ["DWORD","wMsg","in"],
      ["DWORD","number","in"],
      ["PCHAR","buf","inout"],
      ["DWORD","buflen","in"],
      ])

    dll.add_function('WSAAsyncGetServByName', 'DWORD',[
      ["DWORD","hWnd","in"],
      ["DWORD","wMsg","in"],
      ["PCHAR","name","in"],
      ["PCHAR","proto","in"],
      ["PCHAR","buf","inout"],
      ["DWORD","buflen","in"],
      ])

    dll.add_function('WSAAsyncGetServByPort', 'DWORD',[
      ["DWORD","hWnd","in"],
      ["DWORD","wMsg","in"],
      ["DWORD","port","in"],
      ["PCHAR","proto","in"],
      ["PCHAR","buf","inout"],
      ["DWORD","buflen","in"],
      ])

    dll.add_function('WSAAsyncSelect', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","hWnd","in"],
      ["DWORD","wMsg","in"],
      ["DWORD","lEvent","in"],
      ])

    dll.add_function('WSACancelAsyncRequest', 'DWORD',[
      ["DWORD","hAsyncTaskHandle","in"],
      ])

    dll.add_function('WSACancelBlockingCall', 'DWORD',[
      ])

    dll.add_function('WSACleanup', 'DWORD',[
      ])

    dll.add_function('WSACloseEvent', 'BOOL',[
      ["DWORD","hEvent","in"],
      ])

    dll.add_function('WSAConnect', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","name","in"],
      ["DWORD","namelen","in"],
      ["PBLOB","lpCallerData","in"],
      ["PBLOB","lpCalleeData","inout"],
      ["PBLOB","lpSQOS","in"],
      ["PBLOB","lpGQOS","in"],
      ])

    dll.add_function('WSACreateEvent', 'DWORD',[
      ])

    dll.add_function('WSADuplicateSocketA', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","dwProcessId","in"],
      ["PBLOB","lpProtocolInfo","inout"],
      ])

    dll.add_function('WSADuplicateSocketW', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","dwProcessId","in"],
      ["PBLOB","lpProtocolInfo","inout"],
      ])

    dll.add_function('WSAEnumNameSpaceProvidersA', 'DWORD',[
      ["PDWORD","lpdwBufferLength","inout"],
      ["PBLOB","lpnspBuffer","inout"],
      ])

    dll.add_function('WSAEnumNameSpaceProvidersW', 'DWORD',[
      ["PDWORD","lpdwBufferLength","inout"],
      ["PBLOB","lpnspBuffer","inout"],
      ])

    dll.add_function('WSAEnumNetworkEvents', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","hEventObject","in"],
      ["PBLOB","lpNetworkEvents","inout"],
      ])

    dll.add_function('WSAEnumProtocolsA', 'DWORD',[
      ["PDWORD","lpiProtocols","in"],
      ["PBLOB","lpProtocolBuffer","inout"],
      ["PDWORD","lpdwBufferLength","inout"],
      ])

    dll.add_function('WSAEnumProtocolsW', 'DWORD',[
      ["PDWORD","lpiProtocols","in"],
      ["PBLOB","lpProtocolBuffer","inout"],
      ["PDWORD","lpdwBufferLength","inout"],
      ])

    dll.add_function('WSAEventSelect', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","hEventObject","in"],
      ["DWORD","lNetworkEvents","in"],
      ])

    dll.add_function('WSAGetLastError', 'DWORD',[
      ])

    dll.add_function('WSAGetOverlappedResult', 'BOOL',[
      ["DWORD","s","in"],
      ["PBLOB","lpOverlapped","in"],
      ["PDWORD","lpcbTransfer","inout"],
      ["BOOL","fWait","in"],
      ["PDWORD","lpdwFlags","inout"],
      ])

    dll.add_function('WSAGetQOSByName', 'BOOL',[
      ["DWORD","s","in"],
      ["PBLOB","lpQOSName","in"],
      ["PBLOB","lpQOS","inout"],
      ])

    dll.add_function('WSAGetServiceClassInfoA', 'DWORD',[
      ["PBLOB","lpProviderId","in"],
      ["PBLOB","lpServiceClassId","in"],
      ["PDWORD","lpdwBufSize","inout"],
      ["PBLOB","lpServiceClassInfo","inout"],
      ])

    dll.add_function('WSAGetServiceClassInfoW', 'DWORD',[
      ["PBLOB","lpProviderId","in"],
      ["PBLOB","lpServiceClassId","in"],
      ["PDWORD","lpdwBufSize","inout"],
      ["PBLOB","lpServiceClassInfo","inout"],
      ])

    dll.add_function('WSAGetServiceClassNameByClassIdA', 'DWORD',[
      ["PBLOB","lpServiceClassId","in"],
      ["PCHAR","lpszServiceClassName","inout"],
      ["PDWORD","lpdwBufferLength","inout"],
      ])

    dll.add_function('WSAGetServiceClassNameByClassIdW', 'DWORD',[
      ["PBLOB","lpServiceClassId","in"],
      ["PWCHAR","lpszServiceClassName","inout"],
      ["PDWORD","lpdwBufferLength","inout"],
      ])

    dll.add_function('WSAHtonl', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","hostlong","in"],
      ["PDWORD","lpnetlong","inout"],
      ])

    dll.add_function('WSAHtons', 'DWORD',[
      ["DWORD","s","in"],
      ["WORD","hostshort","in"],
      ["PBLOB","lpnetshort","inout"],
      ])

    dll.add_function('WSAInstallServiceClassA', 'DWORD',[
      ["PBLOB","lpServiceClassInfo","in"],
      ])

    dll.add_function('WSAInstallServiceClassW', 'DWORD',[
      ["PBLOB","lpServiceClassInfo","in"],
      ])

    dll.add_function('WSAIoctl', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","dwIoControlCode","in"],
      ["PBLOB","lpvInBuffer","in"],
      ["DWORD","cbInBuffer","in"],
      ["PBLOB","lpvOutBuffer","inout"],
      ["DWORD","cbOutBuffer","in"],
      ["PDWORD","lpcbBytesReturned","inout"],
      ["PBLOB","lpOverlapped","in"],
      ["PBLOB","lpCompletionRoutine","in"],
      ])

    dll.add_function('WSAIsBlocking', 'BOOL',[
      ])

    dll.add_function('WSAJoinLeaf', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","name","in"],
      ["DWORD","namelen","in"],
      ["PBLOB","lpCallerData","in"],
      ["PBLOB","lpCalleeData","inout"],
      ["PBLOB","lpSQOS","in"],
      ["PBLOB","lpGQOS","in"],
      ["DWORD","dwFlags","in"],
      ])

    dll.add_function('WSALookupServiceBeginA', 'DWORD',[
      ["PBLOB","lpqsRestrictions","in"],
      ["DWORD","dwControlFlags","in"],
      ["PHANDLE","lphLookup","inout"],
      ])

    dll.add_function('WSALookupServiceBeginW', 'DWORD',[
      ["PBLOB","lpqsRestrictions","in"],
      ["DWORD","dwControlFlags","in"],
      ["PHANDLE","lphLookup","inout"],
      ])

    dll.add_function('WSALookupServiceEnd', 'DWORD',[
      ["DWORD","hLookup","in"],
      ])

    dll.add_function('WSALookupServiceNextA', 'DWORD',[
      ["DWORD","hLookup","in"],
      ["DWORD","dwControlFlags","in"],
      ["PDWORD","lpdwBufferLength","inout"],
      ["PBLOB","lpqsResults","inout"],
      ])

    dll.add_function('WSALookupServiceNextW', 'DWORD',[
      ["DWORD","hLookup","in"],
      ["DWORD","dwControlFlags","in"],
      ["PDWORD","lpdwBufferLength","inout"],
      ["PBLOB","lpqsResults","inout"],
      ])

    dll.add_function('WSANSPIoctl', 'DWORD',[
      ["DWORD","hLookup","in"],
      ["DWORD","dwControlCode","in"],
      ["PBLOB","lpvInBuffer","in"],
      ["DWORD","cbInBuffer","in"],
      ["PBLOB","lpvOutBuffer","inout"],
      ["DWORD","cbOutBuffer","in"],
      ["PDWORD","lpcbBytesReturned","inout"],
      ["PBLOB","lpCompletion","in"],
      ])

    dll.add_function('WSANtohl', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","netlong","in"],
      ["PDWORD","lphostlong","inout"],
      ])

    dll.add_function('WSANtohs', 'DWORD',[
      ["DWORD","s","in"],
      ["WORD","netshort","in"],
      ["PBLOB","lphostshort","inout"],
      ])

    dll.add_function('WSAProviderConfigChange', 'DWORD',[
      ["PHANDLE","lpNotificationHandle","inout"],
      ["PBLOB","lpOverlapped","in"],
      ["PBLOB","lpCompletionRoutine","in"],
      ])

    dll.add_function('WSARecv', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","lpBuffers","inout"],
      ["DWORD","dwBufferCount","in"],
      ["PDWORD","lpNumberOfBytesRecvd","inout"],
      ["PDWORD","lpFlags","inout"],
      ["PBLOB","lpOverlapped","in"],
      ["PBLOB","lpCompletionRoutine","in"],
      ])

    dll.add_function('WSARecvDisconnect', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","lpInboundDisconnectData","inout"],
      ])

    dll.add_function('WSARecvFrom', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","lpBuffers","inout"],
      ["DWORD","dwBufferCount","in"],
      ["PDWORD","lpNumberOfBytesRecvd","inout"],
      ["PDWORD","lpFlags","inout"],
      ["PBLOB","lpFrom","inout"],
      ["PDWORD","lpFromlen","inout"],
      ["PBLOB","lpOverlapped","in"],
      ["PBLOB","lpCompletionRoutine","in"],
      ])

    dll.add_function('WSARemoveServiceClass', 'DWORD',[
      ["PBLOB","lpServiceClassId","in"],
      ])

    dll.add_function('WSAResetEvent', 'BOOL',[
      ["DWORD","hEvent","in"],
      ])

    dll.add_function('WSASend', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","lpBuffers","in"],
      ["DWORD","dwBufferCount","in"],
      ["PDWORD","lpNumberOfBytesSent","inout"],
      ["DWORD","dwFlags","in"],
      ["PBLOB","lpOverlapped","in"],
      ["PBLOB","lpCompletionRoutine","in"],
      ])

    dll.add_function('WSASendDisconnect', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","lpOutboundDisconnectData","in"],
      ])

    dll.add_function('WSASendTo', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","lpBuffers","in"],
      ["DWORD","dwBufferCount","in"],
      ["PDWORD","lpNumberOfBytesSent","inout"],
      ["DWORD","dwFlags","in"],
      ["PBLOB","lpTo","in"],
      ["DWORD","iTolen","in"],
      ["PBLOB","lpOverlapped","in"],
      ["PBLOB","lpCompletionRoutine","in"],
      ])

    dll.add_function('WSASetEvent', 'BOOL',[
      ["DWORD","hEvent","in"],
      ])

    dll.add_function('WSASetLastError', 'VOID',[
      ["DWORD","iError","in"],
      ])

    dll.add_function('WSASetServiceA', 'DWORD',[
      ["PBLOB","lpqsRegInfo","in"],
      ["PBLOB","essoperation","in"],
      ["DWORD","dwControlFlags","in"],
      ])

    dll.add_function('WSASetServiceW', 'DWORD',[
      ["PBLOB","lpqsRegInfo","in"],
      ["PBLOB","essoperation","in"],
      ["DWORD","dwControlFlags","in"],
      ])

    dll.add_function('WSASocketA', 'DWORD',[
      ["DWORD","af","in"],
      ["DWORD","type","in"],
      ["DWORD","protocol","in"],
      ["PBLOB","lpProtocolInfo","in"],
      ["PBLOB","g","in"],
      ["DWORD","dwFlags","in"],
      ])

    dll.add_function('WSASocketW', 'DWORD',[
      ["DWORD","af","in"],
      ["DWORD","type","in"],
      ["DWORD","protocol","in"],
      ["PBLOB","lpProtocolInfo","in"],
      ["PBLOB","g","in"],
      ["DWORD","dwFlags","in"],
      ])

    dll.add_function('WSAStartup', 'DWORD',[
      ["WORD","wVersionRequested","in"],
      ["PBLOB","lpWSAData","inout"],
      ])

    dll.add_function('WSAStringToAddressA', 'DWORD',[
      ["PCHAR","AddressString","in"],
      ["DWORD","AddressFamily","in"],
      ["PBLOB","lpProtocolInfo","in"],
      ["PBLOB","lpAddress","inout"],
      ["PDWORD","lpAddressLength","inout"],
      ])

    dll.add_function('WSAStringToAddressW', 'DWORD',[
      ["PWCHAR","AddressString","in"],
      ["DWORD","AddressFamily","in"],
      ["PBLOB","lpProtocolInfo","in"],
      ["PBLOB","lpAddress","inout"],
      ["PDWORD","lpAddressLength","inout"],
      ])

    dll.add_function('WSAUnhookBlockingHook', 'DWORD',[
      ])

    dll.add_function('WSAWaitForMultipleEvents', 'DWORD',[
      ["DWORD","cEvents","in"],
      ["PHANDLE","lphEvents","in"],
      ["BOOL","fWaitAll","in"],
      ["DWORD","dwTimeout","in"],
      ["BOOL","fAlertable","in"],
      ])

    dll.add_function('__WSAFDIsSet', 'DWORD',[
      ["DWORD","param0","in"],
      ["PBLOB","param1","inout"],
      ])

    dll.add_function('accept', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","addr","inout"],
      ["PDWORD","addrlen","inout"],
      ])

    dll.add_function('bind', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","name","in"],
      ["DWORD","namelen","in"],
      ])

    dll.add_function('closesocket', 'DWORD',[
      ["DWORD","s","in"],
      ])

    dll.add_function('connect', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","name","in"],
      ["DWORD","namelen","in"],
      ])

    dll.add_function('gethostname', 'DWORD',[
      ["PCHAR","name","inout"],
      ["DWORD","namelen","in"],
      ])

    dll.add_function('getpeername', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","name","inout"],
      ["PDWORD","namelen","inout"],
      ])

    dll.add_function('getsockname', 'DWORD',[
      ["DWORD","s","in"],
      ["PBLOB","name","inout"],
      ["PDWORD","namelen","inout"],
      ])

    dll.add_function('getsockopt', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","level","in"],
      ["DWORD","optname","in"],
      ["PCHAR","optval","inout"],
      ["PDWORD","optlen","inout"],
      ])

    dll.add_function('htonl', 'DWORD',[
      ["DWORD","hostlong","in"],
      ])

    dll.add_function('htons', 'WORD',[
      ["WORD","hostshort","in"],
      ])

    dll.add_function('inet_addr', 'DWORD',[
      ["PCHAR","cp","in"],
      ])

    dll.add_function('ioctlsocket', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","cmd","in"],
      ["PDWORD","argp","inout"],
      ])

    dll.add_function('listen', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","backlog","in"],
      ])

    dll.add_function('ntohl', 'DWORD',[
      ["DWORD","netlong","in"],
      ])

    dll.add_function('ntohs', 'WORD',[
      ["WORD","netshort","in"],
      ])

    dll.add_function('recv', 'DWORD',[
      ["DWORD","s","in"],
      ["PCHAR","buf","inout"],
      ["DWORD","len","in"],
      ["DWORD","flags","in"],
      ])

    dll.add_function('recvfrom', 'DWORD',[
      ["DWORD","s","in"],
      ["PCHAR","buf","inout"],
      ["DWORD","len","in"],
      ["DWORD","flags","in"],
      ["PBLOB","from","inout"],
      ["PDWORD","fromlen","inout"],
      ])

    dll.add_function('select', 'DWORD',[
      ["DWORD","nfds","in"],
      ["PBLOB","readfds","inout"],
      ["PBLOB","writefds","inout"],
      ["PBLOB","exceptfds","inout"],
      ["PDWORD","timeout","in"],
      ])

    dll.add_function('send', 'DWORD',[
      ["DWORD","s","in"],
      ["PCHAR","buf","in"],
      ["DWORD","len","in"],
      ["DWORD","flags","in"],
      ])

    dll.add_function('sendto', 'DWORD',[
      ["DWORD","s","in"],
      ["PCHAR","buf","in"],
      ["DWORD","len","in"],
      ["DWORD","flags","in"],
      ["PBLOB","to","in"],
      ["DWORD","tolen","in"],
      ])

    dll.add_function('setsockopt', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","level","in"],
      ["DWORD","optname","in"],
      ["PCHAR","optval","in"],
      ["DWORD","optlen","in"],
      ])

    dll.add_function('shutdown', 'DWORD',[
      ["DWORD","s","in"],
      ["DWORD","how","in"],
      ])

    dll.add_function('socket', 'DWORD',[
      ["DWORD","af","in"],
      ["DWORD","type","in"],
      ["DWORD","protocol","in"],
      ])

    return dll
  end

end

end; end; end; end; end; end; end


