xref: /reactos/base/services/wkssvc/rpcserver.c (revision 6a8c8946)
1 /*
2  *  ReactOS Services
3  *  Copyright (C) 2015 ReactOS Team
4  *
5  *  This program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License along
16  *  with this program; if not, write to the Free Software Foundation, Inc.,
17  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 /*
20  * COPYRIGHT:        See COPYING in the top level directory
21  * PROJECT:          ReactOS Services
22  * FILE:             base/services/wkssvc/rpcserver.c
23  * PURPOSE:          Workstation service
24  * PROGRAMMER:       Eric Kohl
25  */
26 
27 /* INCLUDES *****************************************************************/
28 
29 #include "precomp.h"
30 
31 #include "lmerr.h"
32 
33 WINE_DEFAULT_DEBUG_CHANNEL(wkssvc);
34 
35 /* FUNCTIONS *****************************************************************/
36 
37 DWORD
38 WINAPI
39 RpcThreadRoutine(
40     LPVOID lpParameter)
41 {
42     RPC_STATUS Status;
43 
44     Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\wkssvc", NULL);
45     if (Status != RPC_S_OK)
46     {
47         ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
48         return 0;
49     }
50 
51     Status = RpcServerRegisterIf(wkssvc_v1_0_s_ifspec, NULL, NULL);
52     if (Status != RPC_S_OK)
53     {
54         ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status);
55         return 0;
56     }
57 
58     Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, FALSE);
59     if (Status != RPC_S_OK)
60     {
61         ERR("RpcServerListen() failed (Status %lx)\n", Status);
62     }
63 
64     return 0;
65 }
66 
67 
68 void __RPC_FAR * __RPC_USER midl_user_allocate(SIZE_T len)
69 {
70     return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
71 }
72 
73 
74 void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
75 {
76     HeapFree(GetProcessHeap(), 0, ptr);
77 }
78 
79 
80 /* Function 0 */
81 unsigned long
82 __stdcall
83 NetrWkstaGetInfo(
84     WKSSVC_IDENTIFY_HANDLE ServerName,
85     unsigned long Level,
86     LPWKSTA_INFO WkstaInfo)
87 {
88     TRACE("NetrWkstaGetInfo level %lu\n", Level);
89 
90     return 0;
91 }
92 
93 
94 /* Function 1 */
95 unsigned long
96 __stdcall
97 NetrWkstaSetInfo(
98     WKSSVC_IDENTIFY_HANDLE ServerName,
99     unsigned long Level,
100     LPWKSTA_INFO WkstaInfo,
101     unsigned long *ErrorParameter)
102 {
103     UNIMPLEMENTED;
104     return 0;
105 }
106 
107 
108 /* Function 2 */
109 unsigned long
110 __stdcall
111 NetrWkstaUserEnum(
112     WKSSVC_IDENTIFY_HANDLE ServerName,
113     LPWKSTA_USER_ENUM_STRUCT UserInfo,
114     unsigned long PreferredMaximumLength,
115     unsigned long *TotalEntries,
116     unsigned long *ResumeHandle)
117 {
118     UNIMPLEMENTED;
119     return 0;
120 }
121 
122 
123 /* Function 3 */
124 unsigned long
125 __stdcall
126 NetrWkstaUserGetInfo(
127     WKSSVC_IDENTIFY_HANDLE Unused,
128     unsigned long Level,
129     LPWKSTA_USER_INFO UserInfo)
130 {
131     FIXME("(%s, %d, %p)\n", debugstr_w(Unused), Level, UserInfo);
132 
133     UNIMPLEMENTED;
134     return 0;
135 }
136 
137 
138 /* Function 4 */
139 unsigned long
140 __stdcall
141 NetrWkstaUserSetInfo (
142     WKSSVC_IDENTIFY_HANDLE Unused,
143     unsigned long Level,
144     LPWKSTA_USER_INFO UserInfo,
145     unsigned long *ErrorParameter)
146 {
147     UNIMPLEMENTED;
148     return 0;
149 }
150 
151 
152 /* Function 5 */
153 unsigned long
154 __stdcall
155 NetrWkstaTransportEnum(
156     WKSSVC_IDENTIFY_HANDLE ServerName,
157     LPWKSTA_TRANSPORT_ENUM_STRUCT TransportInfo,
158     unsigned long PreferredMaximumLength,
159     unsigned long* TotalEntries,
160     unsigned long *ResumeHandle)
161 {
162     UNIMPLEMENTED;
163     return 0;
164 }
165 
166 
167 /* Function 6 */
168 unsigned long
169 __stdcall
170 NetrWkstaTransportAdd(
171     WKSSVC_IDENTIFY_HANDLE ServerName,
172     unsigned long Level,
173     LPWKSTA_TRANSPORT_INFO_0 TransportInfo,
174     unsigned long *ErrorParameter)
175 {
176     UNIMPLEMENTED;
177     return 0;
178 }
179 
180 
181 /* Function 7 */
182 unsigned long
183 __stdcall
184 NetrWkstaTransportDel(
185     WKSSVC_IDENTIFY_HANDLE ServerName,
186     wchar_t *TransportName,
187     unsigned long ForceLevel)
188 {
189     UNIMPLEMENTED;
190     return 0;
191 }
192 
193 
194 /* Function 8 */
195 unsigned long
196 __stdcall
197 NetrUseAdd(
198     WKSSVC_IMPERSONATE_HANDLE ServerName,
199     unsigned long Level,
200     LPUSE_INFO InfoStruct,
201     unsigned long *ErrorParameter)
202 {
203     UNIMPLEMENTED;
204     return 0;
205 }
206 
207 
208 /* Function 9 */
209 unsigned long
210 __stdcall
211 NetrUseGetInfo(
212     WKSSVC_IMPERSONATE_HANDLE ServerName,
213     wchar_t *UseName,
214     unsigned long Level,
215     LPUSE_INFO InfoStruct)
216 {
217     UNIMPLEMENTED;
218     return 0;
219 }
220 
221 
222 /* Function 10 */
223 unsigned long
224 __stdcall
225 NetrUseDel(
226     WKSSVC_IMPERSONATE_HANDLE ServerName,
227     wchar_t *UseName,
228     unsigned long ForceLevel)
229 {
230     UNIMPLEMENTED;
231     return 0;
232 }
233 
234 
235 /* Function 11 */
236 unsigned long
237 __stdcall
238 NetrUseEnum(
239     WKSSVC_IDENTIFY_HANDLE ServerName,
240     LPUSE_ENUM_STRUCT InfoStruct,
241     unsigned long PreferredMaximumLength,
242     unsigned long *TotalEntries,
243     unsigned long *ResumeHandle)
244 {
245     UNIMPLEMENTED;
246     return 0;
247 }
248 
249 
250 /* Function 12 - Not used on wire */
251 unsigned long
252 __stdcall
253 NetrMessageBufferSend(void)
254 {
255     TRACE("NetrMessageBufferSend()\n");
256     return ERROR_NOT_SUPPORTED;
257 }
258 
259 
260 /* Function 13 */
261 unsigned long
262 __stdcall
263 NetrWorkstationStatisticsGet(
264     WKSSVC_IDENTIFY_HANDLE ServerName,
265     wchar_t *ServiceName,
266     unsigned long Level,
267     unsigned long Options,
268     LPSTAT_WORKSTATION_0 *Buffer)
269 {
270     PSTAT_WORKSTATION_0 pStatBuffer;
271 
272     TRACE("NetrWorkstationStatisticsGet(%p %p %lu 0x%lx %p)\n",
273           ServerName, ServiceName, Level, Options, Buffer);
274 
275     if (Level != 0)
276         return ERROR_INVALID_LEVEL;
277 
278     if (Options != 0)
279         return ERROR_INVALID_PARAMETER;
280 
281     pStatBuffer = midl_user_allocate(sizeof(STAT_WORKSTATION_0));
282     if (pStatBuffer == NULL)
283         return ERROR_NOT_ENOUGH_MEMORY;
284 
285     ZeroMemory(pStatBuffer, sizeof(STAT_WORKSTATION_0));
286 
287     // FIXME: Return the actual statistcs data!
288 
289     *Buffer = pStatBuffer;
290 
291     return NERR_Success;
292 }
293 
294 
295 /* Function 14 - Not used on wire */
296 unsigned long
297 __stdcall
298 NetrLogonDomainNameAdd(
299     WKSSVC_IDENTIFY_HANDLE DomainName)
300 {
301     TRACE("NetrLogonDomainNameAdd(%s)\n",
302           debugstr_w(DomainName));
303     return ERROR_NOT_SUPPORTED;
304 }
305 
306 
307 /* Function 15 - Not used on wire */
308 unsigned long
309 __stdcall
310 NetrLogonDomainNameDel(
311     WKSSVC_IDENTIFY_HANDLE DomainName)
312 {
313     TRACE("NetrLogonDomainNameDel(%s)\n",
314           debugstr_w(DomainName));
315     return ERROR_NOT_SUPPORTED;
316 }
317 
318 
319 /* Function 16 - Not used on wire */
320 unsigned long
321 __stdcall
322 NetrJoinDomain(void)
323 {
324     TRACE("NetrJoinDomain()\n");
325     return ERROR_NOT_SUPPORTED;
326 }
327 
328 
329 /* Function 17 - Not used on wire */
330 unsigned long
331 __stdcall
332 NetrUnjoinDomain(void)
333 {
334     TRACE("NetrUnjoinDomain()\n");
335     return ERROR_NOT_SUPPORTED;
336 }
337 
338 
339 /* Function 18 - Not used on wire */
340 unsigned long
341 __stdcall
342 NetrValidateName(void)
343 {
344     TRACE("NetrValidateName()\n");
345     return ERROR_NOT_SUPPORTED;
346 }
347 
348 
349 /* Function 19 - Not used on wire */
350 unsigned long
351 __stdcall
352 NetrRenameMachineInDomain(void)
353 {
354     TRACE("NetrRenameMachineInDomain()\n");
355     return ERROR_NOT_SUPPORTED;
356 }
357 
358 
359 /* Function 20 */
360 unsigned long
361 __stdcall
362 NetrGetJoinInformation(
363     WKSSVC_IMPERSONATE_HANDLE ServerName,
364     wchar_t **NameBuffer,
365     PNETSETUP_JOIN_STATUS BufferType)
366 {
367     TRACE("NetrGetJoinInformation(%p %p %p)\n",
368           ServerName, NameBuffer, BufferType);
369 
370     if (NameBuffer == NULL)
371         return ERROR_INVALID_PARAMETER;
372 
373     return NetpGetJoinInformation(NameBuffer,
374                                   BufferType);
375 }
376 
377 
378 /* Function 21 - Not used on wire */
379 unsigned long
380 __stdcall
381 NetrGetJoinableOUs(void)
382 {
383     TRACE("NetrGetJoinableOUs()\n");
384     return ERROR_NOT_SUPPORTED;
385 }
386 
387 
388 /* Function 22 */
389 unsigned long
390 __stdcall
391 NetrJoinDomain2(
392     handle_t RpcBindingHandle,
393     wchar_t *ServerName,
394     wchar_t *DomainNameParam,
395     wchar_t *MachineAccountOU,
396     wchar_t *AccountName,
397     PJOINPR_ENCRYPTED_USER_PASSWORD Password,
398     unsigned long Options)
399 {
400     NET_API_STATUS status;
401 
402     FIXME("NetrJoinDomain2(%p %S %S %S %S %p 0x%lx)\n",
403           RpcBindingHandle, ServerName, DomainNameParam, MachineAccountOU,
404           AccountName, Password, Options);
405 
406     if (DomainNameParam == NULL)
407         return ERROR_INVALID_PARAMETER;
408 
409     if (Options & NETSETUP_JOIN_DOMAIN)
410     {
411         FIXME("NetrJoinDomain2: NETSETUP_JOIN_DOMAIN is not supported yet!\n");
412         status = ERROR_CALL_NOT_IMPLEMENTED;
413     }
414     else
415     {
416         status = NetpJoinWorkgroup(DomainNameParam);
417     }
418 
419     return status;
420 }
421 
422 
423 /* Function 23 */
424 unsigned long
425 __stdcall
426 NetrUnjoinDomain2(
427     handle_t RpcBindingHandle,
428     wchar_t *ServerName,
429     wchar_t *AccountName,
430     PJOINPR_ENCRYPTED_USER_PASSWORD Password,
431     unsigned long Options)
432 {
433     UNIMPLEMENTED;
434     return 0;
435 }
436 
437 
438 /* Function 24 */
439 unsigned long
440 __stdcall
441 NetrRenameMachineInDomain2(
442     handle_t RpcBindingHandle,
443     wchar_t *ServerName,
444     wchar_t *MachineName,
445     wchar_t *AccountName,
446     PJOINPR_ENCRYPTED_USER_PASSWORD Password,
447     unsigned long Options)
448 {
449     UNIMPLEMENTED;
450     return 0;
451 }
452 
453 
454 /* Function 25 */
455 unsigned long
456 __stdcall
457 NetrValidateName2(
458     handle_t RpcBindingHandle,
459     wchar_t *ServerName,
460     wchar_t *NameToValidate,
461     wchar_t *AccountName,
462     PJOINPR_ENCRYPTED_USER_PASSWORD Password,
463     NETSETUP_NAME_TYPE NameType)
464 {
465     UNIMPLEMENTED;
466     return 0;
467 }
468 
469 
470 /* Function 26 */
471 unsigned long
472 __stdcall
473 NetrGetJoinableOUs2(
474     handle_t RpcBindingHandle,
475     wchar_t *ServerName,
476     wchar_t *DomainNameParam,
477     wchar_t *AccountName,
478     PJOINPR_ENCRYPTED_USER_PASSWORD Password,
479     unsigned long* OUCount,
480     wchar_t ***OUs)
481 {
482     UNIMPLEMENTED;
483     return 0;
484 }
485 
486 
487 /* Function 27 */
488 unsigned long
489 __stdcall
490 NetrAddAlternateComputerName(
491     handle_t RpcBindingHandle,
492     wchar_t *ServerName,
493     wchar_t *AlternateName,
494     wchar_t *DomainAccount,
495     PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
496     unsigned long Reserved)
497 {
498     UNIMPLEMENTED;
499     return 0;
500 }
501 
502 
503 /* Function 28 */
504 unsigned long
505 __stdcall
506 NetrRemoveAlternateComputerName(
507     handle_t RpcBindingHandle,
508     wchar_t *ServerName,
509     wchar_t *AlternateName,
510     wchar_t *DomainAccount,
511     PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
512     unsigned long Reserved)
513 {
514     UNIMPLEMENTED;
515     return 0;
516 }
517 
518 
519 /* Function 29 */
520 unsigned long
521 __stdcall
522 NetrSetPrimaryComputerName(
523     handle_t RpcBindingHandle,
524     wchar_t *ServerName,
525     wchar_t *PrimaryName,
526     wchar_t *DomainAccount,
527     PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
528     unsigned long Reserved)
529 {
530     UNIMPLEMENTED;
531     return 0;
532 }
533 
534 
535 /* Function 30 */
536 unsigned long
537 __stdcall
538 NetrEnumerateComputerNames(
539     WKSSVC_IMPERSONATE_HANDLE ServerName,
540     NET_COMPUTER_NAME_TYPE NameType,
541     unsigned long Reserved,
542     PNET_COMPUTER_NAME_ARRAY *ComputerNames)
543 {
544     UNIMPLEMENTED;
545     return 0;
546 }
547 
548 /* EOF */
549