|
|
//*************************************************************
// File name: dllload.h
//
// Description: DLL loading function proto-types
//
//
// Microsoft Confidential
// Copyright (c) Microsoft Corporation 1999
// All rights reserved
//
//*************************************************************
void InitializeAPIs( void ); void CloseApiDLLsCritSec( void );
//
// NETAPI32 functions
//
typedef DWORD (WINAPI * PFNDSGETDCNAMEA)(LPCSTR ComputerName, LPCSTR DomainName, GUID *DomainGuid, LPCSTR SiteName, ULONG Flags, PDOMAIN_CONTROLLER_INFOA *DomainControllerInfo);
typedef DWORD (WINAPI * PFNDSGETDCNAMEW) (LPCWSTR ComputerName, LPCWSTR DomainName, GUID *DomainGuid, LPCWSTR SiteName, ULONG Flags, PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo);
typedef DWORD (WINAPI * PFNDSGETSITENAMEA)(IN LPCSTR ComputerName OPTIONAL, OUT LPSTR *SiteName);
typedef DWORD (WINAPI * PFNDSGETSITENAMEW)(IN LPCWSTR ComputerName OPTIONAL, OUT LPWSTR *SiteName);
typedef DWORD (WINAPI * PFNDSROLEGETPRIMARYDOMAININFORMATION)( IN LPCWSTR lpServer OPTIONAL, IN DSROLE_PRIMARY_DOMAIN_INFO_LEVEL InfoLevel, OUT PBYTE *Buffer );
typedef VOID (WINAPI * PFNDSROLEFREEMEMORY)(IN PVOID Buffer);
typedef DWORD (*PFNNETAPIBUFFERFREE)(LPVOID Buffer);
typedef DWORD (*PFNNETUSERGETGROUPS)( LPCWSTR servername, LPCWSTR username, DWORD level, LPBYTE *bufptr, DWORD prefmaxlen, LPDWORD entriesread, LPDWORD totalentries );
typedef DWORD (*PFNNETUSERGETINFO) ( IN LPCWSTR servername OPTIONAL, IN LPCWSTR username, IN DWORD level, OUT LPBYTE *bufptr );
#ifdef UNICODE
#define PFNDSGETDCNAME PFNDSGETDCNAMEW
#define PFNDSGETSITENAME PFNDSGETSITENAMEW
#else
#define PFNDSGETDCNAME PFNDSGETDCNAMEA
#define PFNDSGETSITENAME PFNDSGETSITENAMEA
#endif
typedef struct _NETAPI32_API { HINSTANCE hInstance; PFNDSGETDCNAME pfnDsGetDcName; PFNDSGETSITENAME pfnDsGetSiteName; PFNDSROLEGETPRIMARYDOMAININFORMATION pfnDsRoleGetPrimaryDomainInformation; PFNDSROLEFREEMEMORY pfnDsRoleFreeMemory; PFNNETAPIBUFFERFREE pfnNetApiBufferFree; PFNNETUSERGETGROUPS pfnNetUserGetGroups; PFNNETUSERGETINFO pfnNetUserGetInfo; } NETAPI32_API, *PNETAPI32_API;
PNETAPI32_API LoadNetAPI32 ();
//
// SECUR32 functions
//
typedef BOOLEAN (*PFNGETUSERNAMEEXA)( EXTENDED_NAME_FORMAT NameFormat, LPSTR lpNameBuffer, PULONG nSize );
typedef BOOLEAN (*PFNGETUSERNAMEEXW)( EXTENDED_NAME_FORMAT NameFormat, LPWSTR lpNameBuffer, PULONG nSize );
typedef BOOLEAN (*PFNGETCOMPUTEROBJECTNAMEA)( EXTENDED_NAME_FORMAT NameFormat, LPSTR lpNameBuffer, PULONG nSize );
typedef BOOLEAN (*PFNGETCOMPUTEROBJECTNAMEW)( EXTENDED_NAME_FORMAT NameFormat, LPWSTR lpNameBuffer, PULONG nSize );
typedef BOOLEAN (*PFNTRANSLATENAMEA)( IN LPCSTR lpAccountName, IN EXTENDED_NAME_FORMAT AccountNameFormat, IN EXTENDED_NAME_FORMAT DesiredNameFormat, IN LPSTR lpTranslatedName, IN PULONG nSize );
typedef BOOLEAN (*PFNTRANSLATENAMEW)( IN LPCWSTR lpAccountName, IN EXTENDED_NAME_FORMAT AccountNameFormat, IN EXTENDED_NAME_FORMAT DesiredNameFormat, IN LPWSTR lpTranslatedName, IN PULONG nSize );
#ifdef UNICODE
#define PFNGETUSERNAMEEX PFNGETUSERNAMEEXW
#define PFNGETCOMPUTEROBJECTNAME PFNGETCOMPUTEROBJECTNAMEW
#define PFNTRANSLATENAME PFNTRANSLATENAMEW
#else
#define PFNGETUSERNAMEEX PFNGETUSERNAMEEXA
#define PFNGETCOMPUTEROBJECTNAME PFNGETCOMPUTEROBJECTNAMEA
#define PFNTRANSLATENAME PFNTRANSLATENAMEA
#endif
typedef struct _SECUR32_API { HINSTANCE hInstance; PFNGETUSERNAMEEX pfnGetUserNameEx; PFNGETCOMPUTEROBJECTNAME pfnGetComputerObjectName; PFNTRANSLATENAME pfnTranslateName; ACCEPT_SECURITY_CONTEXT_FN pfnAcceptSecurityContext; ACQUIRE_CREDENTIALS_HANDLE_FN pfnAcquireCredentialsHandle; DELETE_SECURITY_CONTEXT_FN pfnDeleteSecurityContext; FREE_CONTEXT_BUFFER_FN pfnFreeContextBuffer; FREE_CREDENTIALS_HANDLE_FN pfnFreeCredentialsHandle; INITIALIZE_SECURITY_CONTEXT_FN pfnInitializeSecurityContext; QUERY_SECURITY_CONTEXT_TOKEN_FN pfnQuerySecurityContextToken; QUERY_SECURITY_PACKAGE_INFO_FN pfnQuerySecurityPackageInfo;
} SECUR32_API, *PSECUR32_API;
PSECUR32_API LoadSecur32 ();
//
// WLDAP32 functions
//
typedef LDAP * (LDAPAPI * PFNLDAP_OPENW)( PWCHAR HostName, ULONG PortNumber ); typedef LDAP * (LDAPAPI * PFNLDAP_OPENA)( PCHAR HostName, ULONG PortNumber );
typedef LDAP * (LDAPAPI * PFNLDAP_INITW)( PWCHAR HostName, ULONG PortNumber ); typedef LDAP * (LDAPAPI * PFNLDAP_INITA)( PCHAR HostName, ULONG PortNumber );
typedef ULONG (LDAPAPI * PFNLDAP_BIND_SW)( LDAP *ld, PWCHAR dn, PWCHAR cred, ULONG method ); typedef ULONG (LDAPAPI * PFNLDAP_BIND_SA)( LDAP *ld, PCHAR dn, PCHAR cred, ULONG method );
typedef ULONG (LDAPAPI * PFNLDAP_SEARCH_SW)( LDAP *ld, PWCHAR base, ULONG scope, PWCHAR filter, PWCHAR attrs[], ULONG attrsonly, LDAPMessage **res ); typedef ULONG (LDAPAPI * PFNLDAP_SEARCH_SA)( LDAP *ld, PCHAR base, ULONG scope, PCHAR filter, PCHAR attrs[], ULONG attrsonly, LDAPMessage **res );
typedef ULONG (LDAPAPI * PFNLDAP_SEARCH_EXT_SW)( LDAP *ld, PWCHAR base, ULONG scope, PWCHAR filter, PWCHAR attrs[], ULONG attrsonly, PLDAPControlW *ServerControls, PLDAPControlW *ClientControls, struct l_timeval *timeout, ULONG SizeLimit, LDAPMessage **res );
typedef ULONG (LDAPAPI * PFNLDAP_SEARCH_EXT_SA)( LDAP *ld, PCHAR base, ULONG scope, PCHAR filter, PCHAR attrs[], ULONG attrsonly, PLDAPControlA *ServerControls, PLDAPControlA *ClientControls, struct l_timeval *timeout, ULONG SizeLimit, LDAPMessage **res );
typedef PWCHAR * (LDAPAPI * PFNLDAP_GET_VALUESW)( LDAP *ld, LDAPMessage *entry, PWCHAR attr ); typedef PCHAR * (LDAPAPI * PFNLDAP_GET_VALUESA)( LDAP *ld, LDAPMessage *entry, PCHAR attr );
typedef ULONG (LDAPAPI * PFNLDAP_VALUE_FREEW)( PWCHAR *vals ); typedef ULONG (LDAPAPI * PFNLDAP_VALUE_FREEA)( PCHAR *vals );
typedef struct berval ** (LDAPAPI * PFNLDAP_GET_VALUES_LENW)( LDAP *ExternalHandle, LDAPMessage *Message, PWCHAR attr ); typedef struct berval ** (LDAPAPI * PFNLDAP_GET_VALUES_LENA) ( LDAP *ExternalHandle, LDAPMessage *Message, PCHAR attr );
typedef ULONG (LDAPAPI * PFNLDAP_VALUE_FREE_LEN)( struct berval **vals );
typedef ULONG (LDAPAPI * PFNLDAP_MSGFREE)( LDAPMessage *res );
typedef ULONG (LDAPAPI * PFNLDAP_UNBIND)( LDAP *ld ); typedef ULONG (LDAPAPI * PFNLDAPGETLASTERROR)( VOID ); typedef PWCHAR (LDAPAPI * PFNLDAP_ERR2STRINGW)( ULONG ); typedef PCHAR (LDAPAPI * PFNLDAP_ERR2STRINGA)( ULONG );
typedef LDAPMessage * (LDAPAPI * PFNLDAP_FIRST_ENTRY)( LDAP *ld, LDAPMessage *entry ); typedef LDAPMessage * (LDAPAPI * PFNLDAP_NEXT_ENTRY)( LDAP *ld, LDAPMessage *entry );
typedef PWCHAR (LDAPAPI * PFNLDAP_GET_DNW)( LDAP *ld, LDAPMessage *entry ); typedef PCHAR (LDAPAPI * PFNLDAP_GET_DNA)( LDAP *ld, LDAPMessage *entry );
typedef ULONG (LDAPAPI *PFNLDAP_SET_OPTION)( LDAP *ld, int option, void *invalue ); typedef ULONG (LDAPAPI *PFNLDAP_SET_OPTIONW)( LDAP *ld, int option, void *invalue );
typedef VOID (LDAPAPI * PFNLDAP_MEMFREEW)( PWCHAR Block ); typedef VOID (LDAPAPI * PFNLDAP_MEMFREEA)( PCHAR Block );
typedef ULONG (LDAPAPI * PFNLDAP_CONNECT)( LDAP *ld, struct l_timeval *timeout );
typedef ULONG (LDAPAPI * PFNLDAPMAPERRORTOWIN32)( ULONG LdapError );
//
// WNet functions
//
typedef DWORD (*PFNWNETGETCONNECTION)(LPCTSTR lpLocalName, LPTSTR lpRemoteName, LPDWORD lpnLength); typedef DWORD (*PFNWNETGETRESOURCEINFORMATION)(LPNETRESOURCE lpNetResource, LPVOID lpBuffer, LPDWORD lpcbBuffer, LPTSTR *lplpSystem);
//
// msi functions
//
typedef UINT (*PFNMSINOTIFYSIDCHANGE)(LPCTSTR pOldSid, LPCTSTR pNewSid); typedef UINT (*PFNMSIDELETEUSERDATA)(LPCTSTR pSid, LPCTSTR szComputerName, LPVOID pReserved);
#ifdef UNICODE
#define PFNLDAP_OPEN PFNLDAP_OPENW
#define PFNLDAP_INIT PFNLDAP_INITW
#define PFNLDAP_BIND_S PFNLDAP_BIND_SW
#define PFNLDAP_SEARCH_S PFNLDAP_SEARCH_SW
#define PFNLDAP_SEARCH_EXT_S PFNLDAP_SEARCH_EXT_SW
#define PFNLDAP_GET_VALUES PFNLDAP_GET_VALUESW
#define PFNLDAP_VALUE_FREE PFNLDAP_VALUE_FREEW
#define PFNLDAP_GET_VALUES_LEN PFNLDAP_GET_VALUES_LENW
#define PFNLDAP_GET_DN PFNLDAP_GET_DNW
#define PFNLDAP_MEMFREE PFNLDAP_MEMFREEW
#define PFNLDAP_SET_OPTION PFNLDAP_SET_OPTIONW
#define PFNLDAP_ERR2STRING PFNLDAP_ERR2STRINGW
#else
#define PFNLDAP_OPEN PFNLDAP_OPENA
#define PFNLDAP_INIT PFNLDAP_INITA
#define PFNLDAP_BIND_S PFNLDAP_BIND_SA
#define PFNLDAP_SEARCH_S PFNLDAP_SEARCH_SA
#define PFNLDAP_SEARCH_EXT_S PFNLDAP_SEARCH_EXT_SA
#define PFNLDAP_GET_VALUES PFNLDAP_GET_VALUESA
#define PFNLDAP_VALUE_FREE PFNLDAP_VALUE_FREEA
#define PFNLDAP_GET_VALUES_LEN PFNLDAP_GET_VALUES_LENA
#define PFNLDAP_GET_DN PFNLDAP_GET_DNA
#define PFNLDAP_MEMFREE PFNLDAP_MEMFREEA
#define PFNLDAP_ERR2STRING PFNLDAP_ERR2STRINGA
#endif
typedef struct _LDAP_API { HINSTANCE hInstance; PFNLDAP_OPEN pfnldap_open; PFNLDAP_INIT pfnldap_init; PFNLDAP_CONNECT pfnldap_connect; PFNLDAP_BIND_S pfnldap_bind_s; PFNLDAP_SEARCH_S pfnldap_search_s; PFNLDAP_SEARCH_EXT_S pfnldap_search_ext_s; PFNLDAP_GET_VALUES pfnldap_get_values; PFNLDAP_VALUE_FREE pfnldap_value_free; PFNLDAP_GET_VALUES_LEN pfnldap_get_values_len; PFNLDAP_VALUE_FREE_LEN pfnldap_value_free_len; PFNLDAP_MSGFREE pfnldap_msgfree; PFNLDAP_UNBIND pfnldap_unbind; PFNLDAPGETLASTERROR pfnLdapGetLastError; PFNLDAP_FIRST_ENTRY pfnldap_first_entry; PFNLDAP_NEXT_ENTRY pfnldap_next_entry; PFNLDAP_GET_DN pfnldap_get_dn; PFNLDAP_SET_OPTION pfnldap_set_option; PFNLDAP_MEMFREE pfnldap_memfree; PFNLDAPMAPERRORTOWIN32 pfnLdapMapErrorToWin32; PFNLDAP_ERR2STRING pfnldap_err2string; } LDAP_API, *PLDAP_API;
PLDAP_API LoadLDAP();
//
// ICMP functions
//
typedef HANDLE (*PFNICMPCREATEFILE)(VOID); typedef BOOL (*PFNICMPCLOSEHANDLE)(HANDLE IcmpHandle); typedef DWORD (*PFNICMPSENDECHO)( HANDLE IcmpHandle, IPAddr DestinationAddress, LPVOID RequestData, WORD RequestSize, PIP_OPTION_INFORMATION RequestOptions, LPVOID ReplyBuffer, DWORD ReplySize, DWORD Timeout );
typedef struct _ICMP_API { HINSTANCE hInstance; PFNICMPCREATEFILE pfnIcmpCreateFile; PFNICMPCLOSEHANDLE pfnIcmpCloseHandle; PFNICMPSENDECHO pfnIcmpSendEcho; } ICMP_API, *PICMP_API;
DWORD LoadIcmp (PICMP_API *);
//
// WSOCK32 functions
//
typedef struct _WSOCK32_API { HINSTANCE hInstance; LPFN_INET_ADDR pfninet_addr; LPFN_GETHOSTBYNAME pfngethostbyname; } WSOCK32_API, *PWSOCK32_API;
PWSOCK32_API LoadWSock32 ();
//
// DSAPI functions
//
typedef DWORD (WINAPI *PFN_DSCRACKNAMESW)( HANDLE hDS, DS_NAME_FLAGS flags, DS_NAME_FORMAT formatOffered, DS_NAME_FORMAT formatDesired, DWORD cNames, const LPCWSTR *rpNames, PDS_NAME_RESULTW *ppResult);
typedef DWORD (WINAPI *PFN_DSCRACKNAMESA)( HANDLE hDS, DS_NAME_FLAGS flags, DS_NAME_FORMAT formatOffered, DS_NAME_FORMAT formatDesired, DWORD cNames, const LPCSTR *rpNames, PDS_NAME_RESULTA *ppResult);
typedef void (WINAPI *PFN_DSFREENAMERESULTW)( DS_NAME_RESULTW *pResult);
typedef void (WINAPI *PFN_DSFREENAMERESULTA)( DS_NAME_RESULTA *pResult);
#ifdef UNICODE
#define PFN_DSCRACKNAMES PFN_DSCRACKNAMESW
#define PFN_DSFREENAMERESULT PFN_DSFREENAMERESULTW
#else
#define PFN_DSCRACKNAMES PFN_DSCRACKNAMESA
#define PFN_DSFREENAMERESULT PFN_DSFREENAMERESULTA
#endif
typedef struct _DS_API { HINSTANCE hInstance; PFN_DSCRACKNAMES pfnDsCrackNames; PFN_DSFREENAMERESULT pfnDsFreeNameResult; } DS_API, *PDS_API;
PDS_API LoadDSApi();
//
// Ole32 functions
//
typedef HRESULT (*PFNCOCREATEINSTANCE)(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID FAR* ppv);
typedef HRESULT (*PFNCOINITIALIZE)(LPVOID pvReserved); typedef HRESULT (*PFNCOINITIALIZEEX)(LPVOID pvReserved, DWORD dwCoInit); typedef VOID (*PFNCOUNINITIALIZE)(VOID);
typedef HRESULT (*PFNCOCREATEGUID)(GUID *pGuid );
typedef VOID (*PFNINITCOMMONCONTROLS)(VOID);
typedef struct _OLE32_API { HINSTANCE hInstance; PFNCOCREATEINSTANCE pfnCoCreateInstance; PFNCOINITIALIZEEX pfnCoInitializeEx; PFNCOUNINITIALIZE pfnCoUnInitialize; PFNCOCREATEGUID pfnCoCreateGuid; } OLE32_API, *POLE32_API;
POLE32_API LoadOle32Api();
//
// Shell32 functions
//
typedef VOID (*PFNSHCHANGENOTIFY)(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2);
typedef BOOL (*PFNSHGETSPECIALFOLDERPATHA)(HWND hwnd, LPSTR lpszPath, int csidl, BOOL fCreate); typedef BOOL (*PFNSHGETSPECIALFOLDERPATHW)(HWND hwnd, LPWSTR lpszPath, int csidl, BOOL fCreate);
typedef HRESULT (*PFNSHGETFOLDERPATHA)(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
typedef HRESULT (*PFNSHGETFOLDERPATHW)(HWND hwnd, int csidl, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
typedef HRESULT (*PFNSHSETFOLDERPATHA)(int csidl, HANDLE hToken, DWORD dwFlags, LPSTR pszPath);
typedef HRESULT (*PFNSHSETFOLDERPATHW)(int csidl, HANDLE hToken, DWORD dwFlags, LPWSTR pszPath);
typedef HRESULT (*PFNSHSETLOCALIZEDNAME)(LPWSTR pszPath, LPCWSTR pszResModule, int idsRes);
#ifdef UNICODE
#define PFNSHGETSPECIALFOLDERPATH PFNSHGETSPECIALFOLDERPATHW
#define PFNSHGETFOLDERPATH PFNSHGETFOLDERPATHW
#define PFNSHSETFOLDERPATH PFNSHSETFOLDERPATHW
#else
#define PFNSHGETSPECIALFOLDERPATH PFNSHGETSPECIALFOLDERPATHA
#define PFNSHGETFOLDERPATH PFNSHGETFOLDERPATHA
#define PFNSHSETFOLDERPATH PFNSHSETFOLDERPATHA
#endif
#define SHSetFolderA_Ord 231
#define SHSetFolderW_Ord 232
typedef struct _SHELL32_API { HINSTANCE hInstance; PFNSHGETSPECIALFOLDERPATH pfnShGetSpecialFolderPath; PFNSHGETFOLDERPATH pfnShGetFolderPath; PFNSHSETFOLDERPATH pfnShSetFolderPath; PFNSHCHANGENOTIFY pfnShChangeNotify; PFNSHSETLOCALIZEDNAME pfnShSetLocalizedName; } SHELL32_API, *PSHELL32_API;
DWORD LoadShell32Api( PSHELL32_API * );
//
// shlwapi functions
//
typedef LPSTR (*PFNPATHGETARGSA)(LPCSTR pszPath); typedef LPWSTR (*PFNPATHGETARGSW)(LPCWSTR pszPath);
typedef VOID (*PFNPATHUNQUOTESPACESA)(LPSTR lpsz); typedef VOID (*PFNPATHUNQUOTESPACESW)(LPWSTR lpsz);
#ifdef UNICODE
#define PFNPATHGETARGS PFNPATHGETARGSW
#define PFNPATHUNQUOTESPACES PFNPATHUNQUOTESPACESW
#else
#define PFNPATHGETARGS PFNPATHGETARGSA
#define PFNPATHUNQUOTESPACES PFNPATHUNQUOTESPACESA
#endif
typedef struct _SHLWAPI_API { HINSTANCE hInstance; PFNPATHGETARGS pfnPathGetArgs; PFNPATHUNQUOTESPACES pfnPathUnquoteSpaces; } SHLWAPI_API, *PSHLWAPI_API;
PSHLWAPI_API LoadShlwapiApi();
//
// Gptext.dll functions
//
typedef BOOL (*PFNPARSEADMFILE)( WCHAR *pwszAdmFile, BOOL bUser, void **ppAdmHandle ); typedef BOOL (*PFNFREEADMDATA)( void *pAdmHandle ); typedef DWORD (*PFNSCRREGGPOLISTTOWBEM)( LPWSTR szSID, IWbemServices* pServices );
typedef struct _GPTEXT_API { HINSTANCE hInstance; PFNSCRREGGPOLISTTOWBEM pfnScrRegGPOListToWbem; } GPTEXT_API;
GPTEXT_API *LoadGpTextApi();
//
// iphlpapi.dll functions
//
typedef DWORD (WINAPI *PFNGETBESTINTERFACE)(IPAddr dwDestAddr, PDWORD pdwBestIfIndex); typedef DWORD (WINAPI *PFNGETIFENTRY)(PMIB_IFROW pIfRow); typedef DWORD (WINAPI *PFNGETADAPTERINDEX)(LPWSTR, PULONG);
typedef struct _IPHLPAPI_API { HINSTANCE hInstance; PFNGETBESTINTERFACE pfnGetBestInterface; PFNGETIFENTRY pfnGetIfEntry; PFNGETADAPTERINDEX pfnGetAdapterIndex; } IPHLPAPI_API, *PIPHLPAPI_API;
PIPHLPAPI_API LoadIpHlpApi();
//
// ws2_32.dll functions
//
typedef INT (WINAPI *PFNWSALOOKUPSERVICEBEGIN)( LPWSAQUERYSET, DWORD, LPHANDLE ); typedef INT (WINAPI *PFNWSALOOKUPSERVICENEXT)( HANDLE, DWORD, LPDWORD, LPWSAQUERYSET ); typedef INT (WINAPI *PFNWSALOOKUPSERVICEEND)( HANDLE ); typedef INT (WINAPI *PFNWSASTARTUP)( WORD, LPWSADATA ); typedef INT (WINAPI *PFNWSACLEANUP)(); typedef INT (WINAPI *PFNWSAGETLASTERROR)();
typedef struct _WS2_32_API { HINSTANCE hInstance; PFNWSALOOKUPSERVICEBEGIN pfnWSALookupServiceBegin; PFNWSALOOKUPSERVICENEXT pfnWSALookupServiceNext; PFNWSALOOKUPSERVICEEND pfnWSALookupServiceEnd; PFNWSASTARTUP pfnWSAStartup; PFNWSACLEANUP pfnWSACleanup; PFNWSAGETLASTERROR pfnWSAGetLastError; } WS2_32_API, *PWS2_32_API;
PWS2_32_API Loadws2_32Api();
|