ReactOS 0.4.17-dev-1321-g5c122a9
nsprovid.c File Reference
#include <ws2_32.h>
Include dependency graph for nsprovid.c:

Go to the source code of this file.

Functions

PNSQUERY_PROVIDER WSAAPI WsNqProvAllocate (VOID)
 
DWORD WSAAPI WsNqProvInitialize (IN PNSQUERY_PROVIDER QueryProvider, IN PNS_PROVIDER Provider)
 
VOID WSAAPI WsNqProvDelete (IN PNSQUERY_PROVIDER QueryProvider)
 
PNS_PROVIDER WSAAPI WsNpAllocate (VOID)
 
DWORD WSAAPI WsNpInitialize (IN PNS_PROVIDER Provider, IN LPWSTR DllName, IN LPGUID ProviderId)
 
DWORD WSAAPI WsNpNSPCleanup (IN PNS_PROVIDER Provider)
 
VOID WSAAPI WsNpDelete (IN PNS_PROVIDER Provider)
 
VOID WSAAPI WsNpDereference (IN PNS_PROVIDER Provider)
 
DWORD WSAAPI WsNqProvLookupServiceEnd (IN PNSQUERY_PROVIDER QueryProvider)
 
DWORD WSAAPI WsNqProvLookupServiceNext (IN PNSQUERY_PROVIDER QueryProvider, IN DWORD ControlFlags, IN PDWORD BufferLength, LPWSAQUERYSETW Results)
 
DWORD WSAAPI WsNqProvLookupServiceBegin (IN PNSQUERY_PROVIDER QueryProvider, IN LPWSAQUERYSETW Restrictions, IN LPWSASERVICECLASSINFOW ServiceClassInfo, IN DWORD ControlFlags)
 
DWORD WSAAPI WsNpLookupServiceEnd (IN PNS_PROVIDER Provider, IN HANDLE LookupHandle)
 
DWORD WSAAPI WsNpLookupServiceNext (IN PNS_PROVIDER Provider, IN HANDLE LookupHandle, IN DWORD ControlFlags, OUT PDWORD BufferLength, OUT LPWSAQUERYSETW Results)
 
DWORD WSAAPI WsNpLookupServiceBegin (IN PNS_PROVIDER Provider, IN LPWSAQUERYSETW Restrictions, IN LPWSASERVICECLASSINFOW ServiceClassInfo, IN DWORD ControlFlags, OUT PHANDLE LookupHandle)
 

Function Documentation

◆ WsNpAllocate()

PNS_PROVIDER WSAAPI WsNpAllocate ( VOID  )

Definition at line 63 of file nsprovid.c.

64{
66
67 /* Allocate the object */
69 if (Provider)
70 {
71 /* Set non-null data */
72 Provider->RefCount = 1;
73 Provider->Service.cbSize = sizeof(NSP_ROUTINE);
74 }
75
76 /* Return it */
77 return Provider;
78}
#define HeapAlloc
Definition: compat.h:733
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
HANDLE WsSockHeap
Definition: dllmain.c:21
struct _NSP_ROUTINE NSP_ROUTINE

Referenced by WsNcLoadProvider().

◆ WsNpDelete()

VOID WSAAPI WsNpDelete ( IN PNS_PROVIDER  Provider)

Definition at line 161 of file nsprovid.c.

162{
163 /* Make sure we have a loaded handle */
164 if (Provider->DllHandle)
165 {
166 /* Clean us up */
168
169 /* Unload the library */
170 FreeLibrary(Provider->DllHandle);
171 Provider->DllHandle = NULL;
172 }
173
174 /* Delete us */
176}
#define NULL
Definition: types.h:112
#define FreeLibrary(x)
Definition: compat.h:748
#define HeapFree(x, y, z)
Definition: compat.h:735
DWORD WSAAPI WsNpNSPCleanup(IN PNS_PROVIDER Provider)
Definition: nsprovid.c:140

Referenced by WsNpDereference().

◆ WsNpDereference()

VOID WSAAPI WsNpDereference ( IN PNS_PROVIDER  Provider)

Definition at line 180 of file nsprovid.c.

181{
182 /* Decrease the reference count and check if it's zero */
183 if (!InterlockedDecrement(&Provider->RefCount))
184 {
185 /* Delete us*/
187 }
188}
#define InterlockedDecrement
Definition: armddk.h:52
VOID WSAAPI WsNpDelete(IN PNS_PROVIDER Provider)
Definition: nsprovid.c:161

Referenced by WsNcEntryDelete(), WsNcLoadProvider(), and WsNqProvDelete().

◆ WsNpInitialize()

DWORD WSAAPI WsNpInitialize ( IN PNS_PROVIDER  Provider,
IN LPWSTR  DllName,
IN LPGUID  ProviderId 
)

Definition at line 82 of file nsprovid.c.

85{
87 LPNSPSTARTUP NSPStartupProc;
88 CHAR AnsiPath[MAX_PATH], ExpandedDllPath[MAX_PATH];
89
90 /* Convert the path to ANSI */
92 0,
93 DllName,
94 -1,
95 AnsiPath,
97 NULL,
98 NULL);
99
100 /* Expand the DLL Path */
102 ExpandedDllPath,
103 MAX_PATH);
104
105 /* Load the DLL */
106 Provider->DllHandle = LoadLibraryA(ExpandedDllPath);
107 if (!Provider->DllHandle)
108 {
109 /* Fail */
111 goto Fail;
112 }
113
114 /* Get the pointer to NSPStartup */
115 NSPStartupProc = (LPNSPSTARTUP)GetProcAddress(Provider->DllHandle,
116 "NSPStartup");
117 if (!NSPStartupProc)
118 {
119 /* Fail */
121 goto Fail;
122 }
123
124 /* Call it */
125 (*NSPStartupProc)(ProviderId, &Provider->Service);
126
127 /* Save the provider ID */
128 Provider->ProviderId = *ProviderId;
129 return ErrorCode;
130
131Fail:
132 /* Bail out */
133 if (Provider->DllHandle) FreeLibrary(Provider->DllHandle);
134 Provider->DllHandle = NULL;
135 return ErrorCode;
136}
#define ERROR_SUCCESS
Definition: deptool.c:10
#define CP_ACP
Definition: compat.h:109
#define GetProcAddress(x, y)
Definition: compat.h:753
#define MAX_PATH
Definition: compat.h:34
#define WideCharToMultiByte
Definition: compat.h:111
DWORD WINAPI ExpandEnvironmentStringsA(IN LPCSTR lpSrc, IN LPSTR lpDst, IN DWORD nSize)
Definition: environ.c:372
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryA(LPCSTR lpLibFileName)
Definition: loader.c:111
int Fail
Definition: ehthrow.cxx:24
_In_ NDIS_ERROR_CODE ErrorCode
Definition: ndis.h:4438
char CHAR
Definition: pedump.c:57
int32_t INT
Definition: typedefs.h:58
#define WSAEPROVIDERFAILEDINIT
Definition: winerror.h:2900
_Must_inspect_result_ INT(WSAAPI * LPNSPSTARTUP)(_In_ LPGUID lpProviderId, _Inout_ LPNSP_ROUTINE lpnspRoutines)
Definition: ws2spi.h:671

Referenced by WsNcLoadProvider().

◆ WsNpLookupServiceBegin()

DWORD WSAAPI WsNpLookupServiceBegin ( IN PNS_PROVIDER  Provider,
IN LPWSAQUERYSETW  Restrictions,
IN LPWSASERVICECLASSINFOW  ServiceClassInfo,
IN DWORD  ControlFlags,
OUT PHANDLE  LookupHandle 
)

Definition at line 255 of file nsprovid.c.

260{
261 /* Call the NSP */
262 return Provider->Service.NSPLookupServiceBegin(&Provider->ProviderId,
263 Restrictions,
264 ServiceClassInfo,
265 ControlFlags,
266 LookupHandle);
267}

Referenced by WsNqProvLookupServiceBegin().

◆ WsNpLookupServiceEnd()

DWORD WSAAPI WsNpLookupServiceEnd ( IN PNS_PROVIDER  Provider,
IN HANDLE  LookupHandle 
)

Definition at line 231 of file nsprovid.c.

233{
234 /* Call the NSP */
235 return Provider->Service.NSPLookupServiceEnd(LookupHandle);
236}

Referenced by WsNqProvLookupServiceEnd().

◆ WsNpLookupServiceNext()

DWORD WSAAPI WsNpLookupServiceNext ( IN PNS_PROVIDER  Provider,
IN HANDLE  LookupHandle,
IN DWORD  ControlFlags,
OUT PDWORD  BufferLength,
OUT LPWSAQUERYSETW  Results 
)

Definition at line 240 of file nsprovid.c.

245{
246 /* Call the NSP */
247 return Provider->Service.NSPLookupServiceNext(LookupHandle,
248 ControlFlags,
250 Results);
251}
macro TEXTAREA section xr p2align endm macro DATAAREA section dw endm macro RODATAAREA section dr endm macro EXPORT Attribute global Name endm macro IMPORT Target ifc WEAK weak Name set Target endif endm set macro SET_COMDAT_ALIGNMENT Alignment set Alignment endm macro NESTED_ENTRY Name global Name p2align xr p2align __ComdatAlignment NESTED_ENTRY Name endm macro ALTERNATE_ENTRY Name global Name Results
Definition: kxarm64.h:154
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
Definition: wdfdevice.h:3777

Referenced by WsNqProvLookupServiceNext().

◆ WsNpNSPCleanup()

DWORD WSAAPI WsNpNSPCleanup ( IN PNS_PROVIDER  Provider)

Definition at line 140 of file nsprovid.c.

141{
143 LPNSPCLEANUP lpNSPCleanup = NULL;
144
145 /* Make sure we have a loaded handle */
146 if (Provider->DllHandle)
147 {
148 /* Get the pointer and clear it */
149 lpNSPCleanup = InterlockedExchangePointer((PVOID*)&Provider->Service.NSPCleanup,
150 NULL);
151 /* If it's not NULL, call it */
152 if (lpNSPCleanup) ErrorCode = lpNSPCleanup(&Provider->ProviderId);
153 }
154
155 /* Return */
156 return ErrorCode;
157}
#define InterlockedExchangePointer(Target, Value)
Definition: dshow.h:45
INT(WSAAPI * LPNSPCLEANUP)(_In_ LPGUID lpProviderId)
Definition: ws2spi.h:494

Referenced by CleanupNamespaceProviders(), and WsNpDelete().

◆ WsNqProvAllocate()

PNSQUERY_PROVIDER WSAAPI WsNqProvAllocate ( VOID  )

Definition at line 17 of file nsprovid.c.

18{
20
21 /* Allocate the object */
23
24 /* Return it */
25 return Provider;
26}

Referenced by WsNqAddProvider().

◆ WsNqProvDelete()

VOID WSAAPI WsNqProvDelete ( IN PNSQUERY_PROVIDER  QueryProvider)

Definition at line 45 of file nsprovid.c.

46{
47 /* Check if we have a provider */
48 if (QueryProvider->Provider)
49 {
50 /* Dereference it */
51 WsNpDereference(QueryProvider->Provider);
52
53 /* Clear it */
54 QueryProvider->Provider = NULL;
55 }
56
57 /* Delete us */
58 HeapFree(WsSockHeap, 0, QueryProvider);
59}
VOID WSAAPI WsNpDereference(IN PNS_PROVIDER Provider)
Definition: nsprovid.c:180

Referenced by WsNqDelete(), WsNqLookupServiceBegin(), and WsNqLookupServiceNext().

◆ WsNqProvInitialize()

DWORD WSAAPI WsNqProvInitialize ( IN PNSQUERY_PROVIDER  QueryProvider,
IN PNS_PROVIDER  Provider 
)

Definition at line 30 of file nsprovid.c.

32{
33 /* Reference the provider */
35
36 /* Set it as our own */
37 QueryProvider->Provider = Provider;
38
39 /* Return success */
40 return ERROR_SUCCESS;
41}
#define InterlockedIncrement
Definition: armddk.h:53

Referenced by WsNqAddProvider().

◆ WsNqProvLookupServiceBegin()

DWORD WSAAPI WsNqProvLookupServiceBegin ( IN PNSQUERY_PROVIDER  QueryProvider,
IN LPWSAQUERYSETW  Restrictions,
IN LPWSASERVICECLASSINFOW  ServiceClassInfo,
IN DWORD  ControlFlags 
)

Definition at line 216 of file nsprovid.c.

220{
221 /* Simply call the provider */
222 return WsNpLookupServiceBegin(QueryProvider->Provider,
223 Restrictions,
224 ServiceClassInfo,
225 ControlFlags,
226 &QueryProvider->LookupHandle);
227}
DWORD WSAAPI WsNpLookupServiceBegin(IN PNS_PROVIDER Provider, IN LPWSAQUERYSETW Restrictions, IN LPWSASERVICECLASSINFOW ServiceClassInfo, IN DWORD ControlFlags, OUT PHANDLE LookupHandle)
Definition: nsprovid.c:255

Referenced by WsNqLookupServiceBegin().

◆ WsNqProvLookupServiceEnd()

DWORD WSAAPI WsNqProvLookupServiceEnd ( IN PNSQUERY_PROVIDER  QueryProvider)

Definition at line 192 of file nsprovid.c.

193{
194 /* Simply call the provider */
195 return WsNpLookupServiceEnd(QueryProvider->Provider,
196 QueryProvider->LookupHandle);
197}
DWORD WSAAPI WsNpLookupServiceEnd(IN PNS_PROVIDER Provider, IN HANDLE LookupHandle)
Definition: nsprovid.c:231

Referenced by WsNqLookupServiceEnd(), and WsNqLookupServiceNext().

◆ WsNqProvLookupServiceNext()

DWORD WSAAPI WsNqProvLookupServiceNext ( IN PNSQUERY_PROVIDER  QueryProvider,
IN DWORD  ControlFlags,
IN PDWORD  BufferLength,
LPWSAQUERYSETW  Results 
)

Definition at line 201 of file nsprovid.c.

205{
206 /* Simply call the provider */
207 return WsNpLookupServiceNext(QueryProvider->Provider,
208 QueryProvider->LookupHandle,
209 ControlFlags,
211 Results);
212}
DWORD WSAAPI WsNpLookupServiceNext(IN PNS_PROVIDER Provider, IN HANDLE LookupHandle, IN DWORD ControlFlags, OUT PDWORD BufferLength, OUT LPWSAQUERYSETW Results)
Definition: nsprovid.c:240