20 #define NSP_CALLID_DNS 0x0001 21 #define NSP_CALLID_HOSTNAME 0x0002 22 #define NSP_CALLID_HOSTBYNAME 0x0003 23 #define NSP_CALLID_SERVICEBYNAME 0x0004 28 #ifndef WS2_INTERNAL_MAX_ALIAS 29 #define WS2_INTERNAL_MAX_ALIAS 512 30 #endif // WS2_INTERNAL_MAX_ALIAS 68 {0xAE, 0x5A, 0x00, 0xAA, 0x00, 0xA7, 0x11, 0x2B}};
75 {0xBA, 0xA5, 0x2E, 0x0B, 0xD7, 0x1F, 0xDD, 0x83}};
84 const rdrLib =
"mswsock.dll-original";
85 lpRdrNSPStartup rdrNSPStartup;
179 *lphLookup = (
HANDLE)pLook;
193 pLook->rdrproc = rdrproc_tcpip;
197 pLook->rdrproc = rdrproc_nla;
204 if (pLook->rdrproc.NSPLookupServiceBegin(lpProviderId,
236 else if (
IsEqualGUID(lpqsRestrictions->lpServiceClassId,
241 lpqsRestrictions->lpszServiceInstanceName,
244 else if (
IsEqualGUID(lpqsRestrictions->lpServiceClassId,
249 lpqsRestrictions->lpszServiceInstanceName,
252 else if (
IsEqualGUID(lpqsRestrictions->lpServiceClassId,
281 INT res = pLook->rdrproc.NSPLookupServiceNext(pLook->rdrLookup,
303 lpqsResults->dwSize =
sizeof(*lpqsResults);
331 _In_opt_ LPWSACOMPLETION lpCompletion,
351 res = pLook->rdrproc.NSPLookupServiceEnd(pLook->rdrLookup);
415 if (
data->CallID != 0)
418 data->CallID = CallID;
428 if (hostnameA !=
NULL)
449 DWORD bufByteLen = bufCharLen *
sizeof(
WCHAR);
472 DNS_STATUS dns_status = { 0 };
510 if ((dns_status != 0) || (dp ==
NULL))
548 #define SKIPWS(ptr, act) \ 549 {while(*ptr && isspace(*ptr)) ptr++; if(!*ptr) act;} 551 #define SKIPANDMARKSTR(ptr, act) \ 552 {while(*ptr && !isspace(*ptr)) ptr++; \ 553 if(!*ptr) {act;} else { *ptr = 0; ptr++; }} 572 *PortNumberStr = ServiceString;
575 while (*ServiceString && NAliases < MaxAlias - 1)
577 SKIPWS(ServiceString,
break);
581 if (
strlen(ServiceString))
584 *Aliases++ = ServiceString;
592 *ProtocolStr =
strchr(*PortNumberStr,
'/');
626 L"System\\CurrentControlSet\\Services\\Tcpip\\Parameters",
668 if (ExpandedPath[StringLength - 1] !=
L'\\')
678 if (ExpandedPath[StringLength - 1] !=
L'\\')
709 ProtocolStr = 0, Comment = 0, EndValid;
720 if (!
data->hostnameW)
731 nameProtoA =
strchr(nameA,
'/');
732 if (nameProtoA ==
NULL)
739 i = (
DWORD)(nameProtoA - nameA - 1);
742 nameServiceA[
i] =
'\0';
760 sizeof( ServiceDBData ) - 1,
764 ThisLine =
NextLine = ServiceDBData;
765 EndValid = ServiceDBData + ReadSize;
766 ServiceDBData[
sizeof(ServiceDBData) - 1] =
'\0';
776 if (ThisLine == ServiceDBData)
782 memmove(ServiceDBData, ThisLine, LineLen);
785 ServiceDBData + LineLen,
786 sizeof( ServiceDBData )-1 - LineLen,
790 EndValid = ServiceDBData + LineLen + ReadSize;
792 ThisLine = ServiceDBData;
794 if (!ReadSize)
break;
799 Comment =
strchr(ThisLine,
'#');
810 (
strlen(nameProtoA) == 0 ||
strcmp(ProtocolStr, nameProtoA) == 0))
838 hostinfo->servport =
atoi(PortNumberStr);
846 if (nameServiceA !=
NULL)
874 lpRes->dwSize =
sizeof(*lpRes);
875 lpRes->dwNameSpace =
NS_DNS;
881 if (
data->CallIDCounter >= 1)
892 data->CallIDCounter++;
926 ServiceInstanceNameW = hostinfo.
hostnameW;
928 if (ServiceInstanceNameA ==
NULL)
937 ServiceInstanceNameW = hostinfo.
servnameW;
939 if (ServiceInstanceNameA ==
NULL)
946 if (ServiceProtocolNameA ==
NULL)
959 *lpResLen =
buf.bytesUsed;
973 ServiceInstanceNameA,
976 *lpResLen =
buf.bytesUsed;
986 ServiceInstanceNameA,
988 ServiceProtocolNameA,
991 *lpResLen =
buf.bytesUsed;
1010 lpRes->lpszServiceInstanceName =
NULL;
1011 *lpResLen =
buf.bytesUsed;
1017 *lpResLen =
buf.bytesUsed;
1022 if (ServiceInstanceNameA !=
NULL)
1023 HeapFree(hHeap, 0, ServiceInstanceNameA);
1025 if (ServiceProtocolNameA !=
NULL)
1026 HeapFree(hHeap, 0, ServiceProtocolNameA);
1051 if ((lpRout ==
NULL) ||
1067 lpRout->dwMajorVersion = 1;
1068 lpRout->dwMinorVersion = 1;
1069 lpRout->cbSize =
sizeof(*lpRout) -
sizeof(lpRout->NSPIoctl);
1078 lpRout->NSPIoctl =
NULL;
#define NSP_CALLID_HOSTNAME
#define ERROR_INVALID_PARAMETER
static const GUID guid_INET_HOSTADDRBYNAME
#define memmove(s1, s2, n)
_In_ NDIS_ERROR_CODE ErrorCode
#define WSAHOST_NOT_FOUND
WCHAR * StrCpyHeapAllocW(_In_opt_ HANDLE hHeap, _In_ WCHAR *wStr)
BOOL mswBufferAppendStrW(_Inout_ PMSW_BUFFER mswBuf, _In_ WCHAR *str)
#define _In_reads_bytes_(s)
#define WSASERVICE_NOT_FOUND
ACPI_SIZE strlen(const char *String)
#define NSP_CALLID_SERVICEBYNAME
#define WS2_INTERNAL_MAX_ALIAS
BOOL mswBufferAppendBlob_Servent(_Inout_ PMSW_BUFFER mswBuf, _Inout_ LPWSAQUERYSETW lpRes, _In_ char *serviceNameA, _In_ char **serviceAliasesA, _In_ char *protocolNameA, _In_ WORD port)
#define ExpandEnvironmentStrings
static const GUID guid_INET_HOSTADDRBYINETSTRING
INT WSAAPI mwsNSPIoCtl(_In_ HANDLE hLookup, _In_ DWORD dwControlCode, _In_reads_bytes_(cbInBuffer) LPVOID lpvInBuffer, _In_ DWORD cbInBuffer, _Out_writes_bytes_to_(cbOutBuffer, *lpcbBytesReturned) LPVOID lpvOutBuffer, _In_ DWORD cbOutBuffer, _Out_ LPDWORD lpcbBytesReturned, _In_opt_ LPWSACOMPLETION lpCompletion, _In_ LPWSATHREADID lpThreadId)
void mswBufferInit(_Inout_ PMSW_BUFFER mswBuf, _In_ BYTE *buffer, _In_ DWORD bufferSize)
#define INVALID_HANDLE_VALUE
VOID WINAPI DnsRecordListFree(PDNS_RECORD list, DNS_FREE_TYPE type)
char * StrW2AHeapAlloc(_In_opt_ HANDLE hHeap, _In_ WCHAR *wStr)
BOOL WINAPI GetComputerNameExW(COMPUTER_NAME_FORMAT NameType, LPWSTR lpBuffer, LPDWORD nSize)
INT WSAAPI mwsNSPGetServiceClassInfo(_In_ LPGUID lpProviderId, _In_ LPDWORD lpdwBufSize, _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo)
static const GUID guid_mswsock_NLA
#define DNS_QUERY_NO_RECURSION
GLenum GLuint GLenum GLsizei const GLchar * buf
INT NSP_GetHostNameHeapAllocW(_Out_ WCHAR **hostname)
INT NSP_LookupServiceNextW(_In_ PWSHANDLEINTERN data, _In_ DWORD dwControlFlags, _Inout_ LPWSAQUERYSETW lpRes, _Inout_ LPDWORD lpResLen)
LONG WINAPI RegCloseKey(HKEY hKey)
char ** StrAryCpyHeapAllocA(_In_opt_ HANDLE hHeap, _In_ char **aStrAry)
HANDLE WSAAPI OpenNetworkDatabase(_In_ LPCWSTR Name)
WCHAR * StrA2WHeapAlloc(_In_opt_ HANDLE hHeap, _In_ char *aStr)
DNS_STATUS WINAPI DnsQuery_W(LPCWSTR Name, WORD Type, DWORD Options, PVOID Extra, PDNS_RECORD *QueryResultSet, PVOID *Reserved)
STRSAFEAPI StringCbCopyA(STRSAFE_LPSTR pszDest, size_t cbDest, STRSAFE_LPCSTR pszSrc)
INT WSAAPI mwsNSPInstallServiceClass(_In_ LPGUID lpProviderId, _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo)
VOID WSAAPI WSASetLastError(IN INT iError)
struct WSHOSTINFOINTERN * PWSHOSTINFOINTERN
INT NSP_GetServiceByNameHeapAllocW(_In_ PWSHANDLEINTERN data, _In_ DWORD dwControlFlags, _Out_ PWSHOSTINFOINTERN hostinfo)
#define NSP_CALLID_HOSTBYNAME
INT WSAAPI WSAGetLastError(VOID)
static BOOL DecodeServEntFromString(IN PCHAR ServiceString, OUT PCHAR *ServiceName, OUT PCHAR *PortNumberStr, OUT PCHAR *ProtocolStr, IN PCHAR *Aliases, IN DWORD MaxAlias)
BYTE * mswBufferEndPtr(_Inout_ PMSW_BUFFER mswBuf)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
enum _WSAESETSERVICEOP WSAESETSERVICEOP
static const GUID guid_NULL
INT WSAAPI mwsNSPLookupServiceNext(_In_ HANDLE hLookup, _In_ DWORD dwControlFlags, _Inout_ LPDWORD lpdwBufferLength, LPWSAQUERYSETW lpqsResults)
#define SVCID_INET_SERVICEBYNAME
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
int WINAPI NSPStartup(_In_ LPGUID lpProviderId, _Out_ LPNSP_ROUTINE lpRout)
INT NSP_LookupServiceBeginW(PWSHANDLEINTERN data, CHAR *hostnameA, WCHAR *hostnameW, DWORD CallID)
#define WSA_NOT_ENOUGH_MEMORY
#define FILE_ATTRIBUTE_NORMAL
INT WSAAPI mwsNSPSetService(_In_ LPGUID lpProviderId, _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo, _In_ LPWSAQUERYSETW lpqsRegInfo, _In_ WSAESETSERVICEOP essOperation, _In_ DWORD dwControlFlags)
#define GetSystemDirectory
static const GUID guid_mswsock_TcpIp
#define SKIPANDMARKSTR(ptr, act)
#define MAX_COMPUTERNAME_LENGTH
INT WSAAPI mwsNSPRemoveServiceClass(_In_ LPGUID lpProviderId, _In_ LPGUID lpServiceClassId)
char ** StrAryCpyHeapAllocWToA(_In_opt_ HANDLE hHeap, _In_ WCHAR **wStrAry)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
INT NSP_GetHostByNameHeapAllocW(_In_ PWSHANDLEINTERN data, _In_ DWORD dwControlFlags, _Out_ PWSHOSTINFOINTERN hostinfo)
#define ReadFile(a, b, c, d, e)
INT WSAAPI mwsNSPLookupServiceBegin(_In_ LPGUID lpProviderId, _In_ LPWSAQUERYSETW lpqsRestrictions, _In_ LPWSASERVICECLASSINFOW lpServiceClassInfo, _In_ DWORD dwControlFlags, _Out_ LPHANDLE lphLookup)
#define DNS_QUERY_STANDARD
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
BOOL mswBufferIncUsed(_Inout_ PMSW_BUFFER mswBuf, _In_ DWORD count)
char * strchr(const char *String, int ch)
INT WSAAPI mwsNSPCleanUp(_In_ LPGUID lpProviderId)
_Check_return_ int __cdecl atoi(_In_z_ const char *_Str)
union _DnsRecordW::@3253 Data
struct _DnsRecordW * pNext
int strcmp(const char *String1, const char *String2)
INT WINAPI mswNSPStartup(LPGUID lpProviderId, LPNSP_ROUTINE lpRout)
INT WSAAPI mwsNSPLookupServiceEnd(_In_ HANDLE hLookup)
#define ERROR_CALL_NOT_IMPLEMENTED
#define RtlZeroMemory(Destination, Length)
char * cleanup(char *str)
#define ERROR_INVALID_NAME
BOOL mswBufferAppendAddr_AddrInfoW(_Inout_ PMSW_BUFFER mswBuf, _Inout_ LPWSAQUERYSETW lpRes, _In_ DWORD ip4addr)
_In_ _In_opt_ _Out_writes_bytes_to_opt_ lpdwBufferLength _Inout_ LPDWORD lpdwBufferLength
#define _Out_writes_bytes_to_(s, c)
static const GUID guid_HOSTNAME
#define SVCID_INET_HOSTADDRBYINETSTRING
BOOL mswBufferAppendBlob_Hostent(_Inout_ PMSW_BUFFER mswBuf, _Inout_ LPWSAQUERYSETW lpRes, _In_ char **hostAliasesA, _In_ char *hostnameA, _In_ DWORD ip4addr)
#define HeapFree(x, y, z)
static const GUID guid_INET_SERVICEBYNAME
struct WSHANDLEINTERN * PWSHANDLEINTERN
#define SVCID_INET_HOSTADDRBYNAME
#define LUP_RETURN_ALIASES
#define HKEY_LOCAL_MACHINE
GLuint const GLchar * name