2 * COPYRIGHT: See COPYING in the top level directory
4 * FILE: dll/win32/netapi32/netlogon.c
5 * PURPOSE: Netlogon service interface code
6 * PROGRAMMERS: Eric Kohl (eric.kohl@reactos.org)
9 /* INCLUDES ******************************************************************/
16 #include "netlogon_c.h"
18 WINE_DEFAULT_DEBUG_CHANNEL(netapi32
);
20 /* FUNCTIONS *****************************************************************/
23 LOGONSRV_HANDLE_bind(LOGONSRV_HANDLE pszSystemName
)
25 handle_t hBinding
= NULL
;
26 LPWSTR pszStringBinding
;
29 TRACE("LOGONSRV_HANDLE_bind() called\n");
31 status
= RpcStringBindingComposeW(NULL
,
39 TRACE("RpcStringBindingCompose returned 0x%x\n", status
);
43 /* Set the binding handle that will be used to bind to the server. */
44 status
= RpcBindingFromStringBindingW(pszStringBinding
,
48 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status
);
51 status
= RpcStringFreeW(&pszStringBinding
);
54 // TRACE("RpcStringFree returned 0x%x\n", status);
62 LOGONSRV_HANDLE_unbind(LOGONSRV_HANDLE pszSystemName
,
67 TRACE("LOGONSRV_HANDLE_unbind() called\n");
69 status
= RpcBindingFree(&hBinding
);
72 TRACE("RpcBindingFree returned 0x%x\n", status
);
79 DsAddressToSiteNamesA(
80 _In_opt_ LPCSTR ComputerName
,
81 _In_ DWORD EntryCount
,
82 _In_ PSOCKET_ADDRESS SocketAddresses
,
83 _Out_ LPSTR
**SiteNames
)
85 FIXME("DsAddressToSiteNamesA(%s, %lu, %p, %p)\n",
86 debugstr_a(ComputerName
), EntryCount
, SocketAddresses
, SiteNames
);
87 return ERROR_CALL_NOT_IMPLEMENTED
;
93 DsAddressToSiteNamesW(
94 _In_opt_ LPCWSTR ComputerName
,
95 _In_ DWORD EntryCount
,
96 _In_ PSOCKET_ADDRESS SocketAddresses
,
97 _Out_ LPWSTR
**SiteNames
)
99 PNL_SITE_NAME_ARRAY SiteNameArray
= NULL
;
100 PWSTR
*SiteNamesBuffer
= NULL
, Ptr
;
102 NET_API_STATUS status
;
104 TRACE("DsAddressToSiteNamesW(%s, %lu, %p, %p)\n",
105 debugstr_w(ComputerName
), EntryCount
, SocketAddresses
, SiteNames
);
108 return ERROR_INVALID_PARAMETER
;
114 status
= DsrAddressToSiteNamesW((PWSTR
)ComputerName
,
116 (PNL_SOCKET_ADDRESS
)SocketAddresses
,
118 if (status
== NERR_Success
)
120 if (SiteNameArray
->EntryCount
== 0)
122 status
= ERROR_INVALID_PARAMETER
;
126 BufferSize
= SiteNameArray
->EntryCount
* sizeof(PWSTR
);
127 for (i
= 0; i
< SiteNameArray
->EntryCount
; i
++)
128 BufferSize
+= SiteNameArray
->SiteNames
[i
].Length
+ sizeof(WCHAR
);
130 status
= NetApiBufferAllocate(BufferSize
, (PVOID
*)&SiteNamesBuffer
);
131 if (status
== NERR_Success
)
133 ZeroMemory(SiteNamesBuffer
, BufferSize
);
135 Ptr
= (PWSTR
)((ULONG_PTR
)SiteNamesBuffer
+ SiteNameArray
->EntryCount
* sizeof(PWSTR
));
136 for (i
= 0; i
< SiteNameArray
->EntryCount
; i
++)
138 SiteNamesBuffer
[i
] = Ptr
;
140 SiteNameArray
->SiteNames
[i
].Buffer
,
141 SiteNameArray
->SiteNames
[i
].Length
);
143 Ptr
= (PWSTR
)((ULONG_PTR
)Ptr
+ SiteNameArray
->SiteNames
[i
].Length
+ sizeof(WCHAR
));
146 *SiteNames
= SiteNamesBuffer
;
150 MIDL_user_free(SiteNameArray
);
153 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
155 status
= I_RpcMapWin32Status(RpcExceptionCode());
165 DsEnumerateDomainTrustsA(
166 _In_opt_ LPSTR ServerName
,
168 _Out_ PDS_DOMAIN_TRUSTSA
*Domains
,
169 _Out_ PULONG DomainCount
)
171 FIXME("DsEnumerateDomainTrustsA(%s, %x, %p, %p)\n",
172 debugstr_a(ServerName
), Flags
, Domains
, DomainCount
);
174 return ERROR_NO_LOGON_SERVERS
;
180 DsEnumerateDomainTrustsW(
181 _In_opt_ LPWSTR ServerName
,
183 _Out_ PDS_DOMAIN_TRUSTSW
*Domains
,
184 _Out_ PULONG DomainCount
)
186 FIXME("DsEnumerateDomainTrustsW(%s, %x, %p, %p)\n",
187 debugstr_w(ServerName
), Flags
, Domains
, DomainCount
);
189 return ERROR_NO_LOGON_SERVERS
;
196 _In_ LPCSTR ComputerName
,
197 _In_ LPCSTR DomainName
,
198 _In_ GUID
*DomainGuid
,
199 _In_ LPCSTR SiteName
,
201 _Out_ PDOMAIN_CONTROLLER_INFOA
*DomainControllerInfo
)
203 FIXME("DsGetDcNameA(%s, %s, %s, %s, %08x, %p): stub\n",
204 debugstr_a(ComputerName
), debugstr_a(DomainName
), debugstr_guid(DomainGuid
),
205 debugstr_a(SiteName
), Flags
, DomainControllerInfo
);
207 return ERROR_CALL_NOT_IMPLEMENTED
;
214 _In_ LPCWSTR ComputerName
,
215 _In_ LPCWSTR DomainName
,
216 _In_ GUID
*DomainGuid
,
217 _In_ LPCWSTR SiteName
,
219 _Out_ PDOMAIN_CONTROLLER_INFOW
*DomainControllerInfo
)
221 FIXME("DsGetDcNameW(%s, %s, %s, %s, %08x, %p)\n",
222 debugstr_w(ComputerName
), debugstr_w(DomainName
), debugstr_guid(DomainGuid
),
223 debugstr_w(SiteName
), Flags
, DomainControllerInfo
);
224 return ERROR_CALL_NOT_IMPLEMENTED
;
230 DsGetDcSiteCoverageA(
231 _In_opt_ LPCSTR ServerName
,
232 _Out_ PULONG EntryCount
,
233 _Out_ LPSTR
**SiteNames
)
235 FIXME("DsGetDcSiteCoverageA(%s, %p, %p)\n",
236 debugstr_a(ServerName
), EntryCount
, SiteNames
);
237 return ERROR_CALL_NOT_IMPLEMENTED
;
243 DsGetDcSiteCoverageW(
244 _In_opt_ LPCWSTR ServerName
,
245 _Out_ PULONG EntryCount
,
246 _Out_ LPWSTR
**SiteNames
)
248 PNL_SITE_NAME_ARRAY SiteNameArray
= NULL
;
249 PWSTR
*SiteNamesBuffer
= NULL
, Ptr
;
251 NET_API_STATUS status
;
253 TRACE("DsGetDcSiteCoverageA(%s, %p, %p)\n",
254 debugstr_w(ServerName
), EntryCount
, SiteNames
);
261 status
= DsrGetDcSiteCoverageW((PWSTR
)ServerName
,
263 if (status
== NERR_Success
)
265 if (SiteNameArray
->EntryCount
== 0)
267 status
= ERROR_INVALID_PARAMETER
;
271 BufferSize
= SiteNameArray
->EntryCount
* sizeof(PWSTR
);
272 for (i
= 0; i
< SiteNameArray
->EntryCount
; i
++)
273 BufferSize
+= SiteNameArray
->SiteNames
[i
].Length
+ sizeof(WCHAR
);
275 status
= NetApiBufferAllocate(BufferSize
, (PVOID
*)&SiteNamesBuffer
);
276 if (status
== NERR_Success
)
278 ZeroMemory(SiteNamesBuffer
, BufferSize
);
280 Ptr
= (PWSTR
)((ULONG_PTR
)SiteNamesBuffer
+ SiteNameArray
->EntryCount
* sizeof(PWSTR
));
281 for (i
= 0; i
< SiteNameArray
->EntryCount
; i
++)
283 SiteNamesBuffer
[i
] = Ptr
;
285 SiteNameArray
->SiteNames
[i
].Buffer
,
286 SiteNameArray
->SiteNames
[i
].Length
);
288 Ptr
= (PWSTR
)((ULONG_PTR
)Ptr
+ SiteNameArray
->SiteNames
[i
].Length
+ sizeof(WCHAR
));
291 *EntryCount
= SiteNameArray
->EntryCount
;
292 *SiteNames
= SiteNamesBuffer
;
296 MIDL_user_free(SiteNameArray
);
299 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
301 status
= I_RpcMapWin32Status(RpcExceptionCode());
312 _In_ LPCSTR ComputerName
,
313 _Out_ LPSTR
*SiteName
)
315 FIXME("DsGetSiteNameA(%s, %p)\n",
316 debugstr_a(ComputerName
), SiteName
);
317 return ERROR_CALL_NOT_IMPLEMENTED
;
324 _In_ LPCWSTR ComputerName
,
325 _Out_ LPWSTR
*SiteName
)
327 NET_API_STATUS status
;
329 TRACE("DsGetSiteNameW(%s, %p)\n",
330 debugstr_w(ComputerName
), SiteName
);
334 status
= DsrGetSiteName((PWSTR
)ComputerName
,
337 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
339 status
= I_RpcMapWin32Status(RpcExceptionCode());
352 TRACE("DsRoleFreeMemory(%p)\n", Buffer
);
353 HeapFree(GetProcessHeap(), 0, Buffer
);
359 NetEnumerateTrustedDomains(
360 _In_ LPWSTR ServerName
,
361 _Out_ LPWSTR
*DomainNames
)
363 DOMAIN_NAME_BUFFER DomainNameBuffer
= {0, NULL
};
366 TRACE("NetEnumerateTrustedDomains(%s, %p)\n",
367 debugstr_w(ServerName
), DomainNames
);
371 Status
= NetrEnumerateTrustedDomains(ServerName
,
373 if (NT_SUCCESS(Status
))
375 *DomainNames
= (LPWSTR
)DomainNameBuffer
.DomainNames
;
378 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
380 Status
= I_RpcMapWin32Status(RpcExceptionCode());
390 _In_opt_ LPCWSTR ServerName
,
391 _In_opt_ LPCWSTR DomainName
,
392 _Out_ LPBYTE
*BufPtr
)
394 NET_API_STATUS status
;
396 TRACE("NetGetAnyDCName(%s, %s, %p)\n",
397 debugstr_w(ServerName
), debugstr_w(DomainName
), BufPtr
);
403 status
= NetrGetAnyDCName((PWSTR
)ServerName
,
407 RpcExcept(EXCEPTION_EXECUTE_HANDLER
)
409 status
= I_RpcMapWin32Status(RpcExceptionCode());
420 _In_ LPCWSTR servername
,
421 _In_ LPCWSTR domainname
,
422 _Out_ LPBYTE
*bufptr
)
424 FIXME("NetGetDCName(%s, %s, %p)\n",
425 debugstr_w(servername
), debugstr_w(domainname
), bufptr
);
427 return NERR_DCNotFound
;