[DCOMLAUNCH] Add a DcomLaunch service stub
[reactos.git] / base / services / wkssvc / rpcserver.c
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()\n");
368
369 *NameBuffer = NULL;
370 *BufferType = NetSetupUnjoined;
371
372 return NERR_Success;
373 }
374
375
376 /* Function 21 - Not used on wire */
377 unsigned long
378 __stdcall
379 NetrGetJoinableOUs(void)
380 {
381 TRACE("NetrGetJoinableOUs()\n");
382 return ERROR_NOT_SUPPORTED;
383 }
384
385
386 /* Function 22 */
387 unsigned long
388 __stdcall
389 NetrJoinDomain2(
390 handle_t RpcBindingHandle,
391 wchar_t *ServerName,
392 wchar_t *DomainNameParam,
393 wchar_t *MachineAccountOU,
394 wchar_t *AccountName,
395 PJOINPR_ENCRYPTED_USER_PASSWORD Password,
396 unsigned long Options)
397 {
398 UNIMPLEMENTED;
399 return 0;
400 }
401
402
403 /* Function 23 */
404 unsigned long
405 __stdcall
406 NetrUnjoinDomain2(
407 handle_t RpcBindingHandle,
408 wchar_t *ServerName,
409 wchar_t *AccountName,
410 PJOINPR_ENCRYPTED_USER_PASSWORD Password,
411 unsigned long Options)
412 {
413 UNIMPLEMENTED;
414 return 0;
415 }
416
417
418 /* Function 24 */
419 unsigned long
420 __stdcall
421 NetrRenameMachineInDomain2(
422 handle_t RpcBindingHandle,
423 wchar_t *ServerName,
424 wchar_t *MachineName,
425 wchar_t *AccountName,
426 PJOINPR_ENCRYPTED_USER_PASSWORD Password,
427 unsigned long Options)
428 {
429 UNIMPLEMENTED;
430 return 0;
431 }
432
433
434 /* Function 25 */
435 unsigned long
436 __stdcall
437 NetrValidateName2(
438 handle_t RpcBindingHandle,
439 wchar_t *ServerName,
440 wchar_t *NameToValidate,
441 wchar_t *AccountName,
442 PJOINPR_ENCRYPTED_USER_PASSWORD Password,
443 NETSETUP_NAME_TYPE NameType)
444 {
445 UNIMPLEMENTED;
446 return 0;
447 }
448
449
450 /* Function 26 */
451 unsigned long
452 __stdcall
453 NetrGetJoinableOUs2(
454 handle_t RpcBindingHandle,
455 wchar_t *ServerName,
456 wchar_t *DomainNameParam,
457 wchar_t *AccountName,
458 PJOINPR_ENCRYPTED_USER_PASSWORD Password,
459 unsigned long* OUCount,
460 wchar_t ***OUs)
461 {
462 UNIMPLEMENTED;
463 return 0;
464 }
465
466
467 /* Function 27 */
468 unsigned long
469 __stdcall
470 NetrAddAlternateComputerName(
471 handle_t RpcBindingHandle,
472 wchar_t *ServerName,
473 wchar_t *AlternateName,
474 wchar_t *DomainAccount,
475 PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
476 unsigned long Reserved)
477 {
478 UNIMPLEMENTED;
479 return 0;
480 }
481
482
483 /* Function 28 */
484 unsigned long
485 __stdcall
486 NetrRemoveAlternateComputerName(
487 handle_t RpcBindingHandle,
488 wchar_t *ServerName,
489 wchar_t *AlternateName,
490 wchar_t *DomainAccount,
491 PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
492 unsigned long Reserved)
493 {
494 UNIMPLEMENTED;
495 return 0;
496 }
497
498
499 /* Function 29 */
500 unsigned long
501 __stdcall
502 NetrSetPrimaryComputerName(
503 handle_t RpcBindingHandle,
504 wchar_t *ServerName,
505 wchar_t *PrimaryName,
506 wchar_t *DomainAccount,
507 PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword,
508 unsigned long Reserved)
509 {
510 UNIMPLEMENTED;
511 return 0;
512 }
513
514
515 /* Function 30 */
516 unsigned long
517 __stdcall
518 NetrEnumerateComputerNames(
519 WKSSVC_IMPERSONATE_HANDLE ServerName,
520 NET_COMPUTER_NAME_TYPE NameType,
521 unsigned long Reserved,
522 PNET_COMPUTER_NAME_ARRAY *ComputerNames)
523 {
524 UNIMPLEMENTED;
525 return 0;
526 }
527
528 /* EOF */