ReactOS  0.4.12-dev-14-gd0c8636
rpcserver.c
Go to the documentation of this file.
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 
34 
35 /* FUNCTIONS *****************************************************************/
36 
37 DWORD
38 WINAPI
41 {
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 
59  if (Status != RPC_S_OK)
60  {
61  ERR("RpcServerListen() failed (Status %lx)\n", Status);
62  }
63 
64  return 0;
65 }
66 
67 
69 {
71 }
72 
73 
75 {
76  HeapFree(GetProcessHeap(), 0, ptr);
77 }
78 
79 
80 /* Function 0 */
81 unsigned long
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
98  WKSSVC_IDENTIFY_HANDLE ServerName,
99  unsigned long Level,
100  LPWKSTA_INFO WkstaInfo,
101  unsigned long *ErrorParameter)
102 {
104  return 0;
105 }
106 
107 
108 /* Function 2 */
109 unsigned long
110 __stdcall
112  WKSSVC_IDENTIFY_HANDLE ServerName,
113  LPWKSTA_USER_ENUM_STRUCT UserInfo,
114  unsigned long PreferredMaximumLength,
115  unsigned long *TotalEntries,
116  unsigned long *ResumeHandle)
117 {
119  return 0;
120 }
121 
122 
123 /* Function 3 */
124 unsigned long
125 __stdcall
128  unsigned long Level,
129  LPWKSTA_USER_INFO UserInfo)
130 {
131  FIXME("(%s, %d, %p)\n", debugstr_w(Unused), Level, UserInfo);
132 
134  return 0;
135 }
136 
137 
138 /* Function 4 */
139 unsigned long
140 __stdcall
143  unsigned long Level,
144  LPWKSTA_USER_INFO UserInfo,
145  unsigned long *ErrorParameter)
146 {
148  return 0;
149 }
150 
151 
152 /* Function 5 */
153 unsigned long
154 __stdcall
156  WKSSVC_IDENTIFY_HANDLE ServerName,
157  LPWKSTA_TRANSPORT_ENUM_STRUCT TransportInfo,
158  unsigned long PreferredMaximumLength,
159  unsigned long* TotalEntries,
160  unsigned long *ResumeHandle)
161 {
163  return 0;
164 }
165 
166 
167 /* Function 6 */
168 unsigned long
169 __stdcall
171  WKSSVC_IDENTIFY_HANDLE ServerName,
172  unsigned long Level,
173  LPWKSTA_TRANSPORT_INFO_0 TransportInfo,
174  unsigned long *ErrorParameter)
175 {
177  return 0;
178 }
179 
180 
181 /* Function 7 */
182 unsigned long
183 __stdcall
185  WKSSVC_IDENTIFY_HANDLE ServerName,
186  wchar_t *TransportName,
187  unsigned long ForceLevel)
188 {
190  return 0;
191 }
192 
193 
194 /* Function 8 */
195 unsigned long
196 __stdcall
198  WKSSVC_IMPERSONATE_HANDLE ServerName,
199  unsigned long Level,
200  LPUSE_INFO InfoStruct,
201  unsigned long *ErrorParameter)
202 {
204  return 0;
205 }
206 
207 
208 /* Function 9 */
209 unsigned long
210 __stdcall
212  WKSSVC_IMPERSONATE_HANDLE ServerName,
213  wchar_t *UseName,
214  unsigned long Level,
215  LPUSE_INFO InfoStruct)
216 {
218  return 0;
219 }
220 
221 
222 /* Function 10 */
223 unsigned long
224 __stdcall
226  WKSSVC_IMPERSONATE_HANDLE ServerName,
227  wchar_t *UseName,
228  unsigned long ForceLevel)
229 {
231  return 0;
232 }
233 
234 
235 /* Function 11 */
236 unsigned long
237 __stdcall
239  WKSSVC_IDENTIFY_HANDLE ServerName,
240  LPUSE_ENUM_STRUCT InfoStruct,
241  unsigned long PreferredMaximumLength,
242  unsigned long *TotalEntries,
243  unsigned long *ResumeHandle)
244 {
246  return 0;
247 }
248 
249 
250 /* Function 12 - Not used on wire */
251 unsigned long
252 __stdcall
254 {
255  TRACE("NetrMessageBufferSend()\n");
256  return ERROR_NOT_SUPPORTED;
257 }
258 
259 
260 /* Function 13 */
261 unsigned long
262 __stdcall
264  WKSSVC_IDENTIFY_HANDLE ServerName,
265  wchar_t *ServiceName,
266  unsigned long Level,
267  unsigned long Options,
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)
280 
281  pStatBuffer = midl_user_allocate(sizeof(STAT_WORKSTATION_0));
282  if (pStatBuffer == NULL)
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
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
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
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
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
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
353 {
354  TRACE("NetrRenameMachineInDomain()\n");
355  return ERROR_NOT_SUPPORTED;
356 }
357 
358 
359 /* Function 20 */
360 unsigned long
361 __stdcall
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
380 {
381  TRACE("NetrGetJoinableOUs()\n");
382  return ERROR_NOT_SUPPORTED;
383 }
384 
385 
386 /* Function 22 */
387 unsigned long
388 __stdcall
390  handle_t RpcBindingHandle,
391  wchar_t *ServerName,
392  wchar_t *DomainNameParam,
393  wchar_t *MachineAccountOU,
394  wchar_t *AccountName,
396  unsigned long Options)
397 {
399  return 0;
400 }
401 
402 
403 /* Function 23 */
404 unsigned long
405 __stdcall
407  handle_t RpcBindingHandle,
408  wchar_t *ServerName,
409  wchar_t *AccountName,
411  unsigned long Options)
412 {
414  return 0;
415 }
416 
417 
418 /* Function 24 */
419 unsigned long
420 __stdcall
422  handle_t RpcBindingHandle,
423  wchar_t *ServerName,
424  wchar_t *MachineName,
425  wchar_t *AccountName,
427  unsigned long Options)
428 {
430  return 0;
431 }
432 
433 
434 /* Function 25 */
435 unsigned long
436 __stdcall
438  handle_t RpcBindingHandle,
439  wchar_t *ServerName,
440  wchar_t *NameToValidate,
441  wchar_t *AccountName,
444 {
446  return 0;
447 }
448 
449 
450 /* Function 26 */
451 unsigned long
452 __stdcall
454  handle_t RpcBindingHandle,
455  wchar_t *ServerName,
456  wchar_t *DomainNameParam,
457  wchar_t *AccountName,
459  unsigned long* OUCount,
460  wchar_t ***OUs)
461 {
463  return 0;
464 }
465 
466 
467 /* Function 27 */
468 unsigned long
469 __stdcall
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 {
479  return 0;
480 }
481 
482 
483 /* Function 28 */
484 unsigned long
485 __stdcall
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 {
495  return 0;
496 }
497 
498 
499 /* Function 29 */
500 unsigned long
501 __stdcall
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 {
511  return 0;
512 }
513 
514 
515 /* Function 30 */
516 unsigned long
517 __stdcall
519  WKSSVC_IMPERSONATE_HANDLE ServerName,
521  unsigned long Reserved,
522  PNET_COMPUTER_NAME_ARRAY *ComputerNames)
523 {
525  return 0;
526 }
527 
528 /* EOF */
#define ERROR_INVALID_PARAMETER
Definition: compat.h:91
_Must_inspect_result_ typedef _In_ PVOID Unused
Definition: iotypes.h:1128
unsigned long __stdcall NetrMessageBufferSend(void)
Definition: rpcserver.c:253
unsigned long __stdcall NetrLogonDomainNameDel(WKSSVC_IDENTIFY_HANDLE DomainName)
Definition: rpcserver.c:310
unsigned long __stdcall NetrWorkstationStatisticsGet(WKSSVC_IDENTIFY_HANDLE ServerName, wchar_t *ServiceName, unsigned long Level, unsigned long Options, LPSTAT_WORKSTATION_0 *Buffer)
Definition: rpcserver.c:263
unsigned long __stdcall NetrGetJoinableOUs(void)
Definition: rpcserver.c:379
unsigned long __stdcall NetrWkstaSetInfo(WKSSVC_IDENTIFY_HANDLE ServerName, unsigned long Level, LPWKSTA_INFO WkstaInfo, unsigned long *ErrorParameter)
Definition: rpcserver.c:97
unsigned long __stdcall NetrWkstaUserGetInfo(WKSSVC_IDENTIFY_HANDLE Unused, unsigned long Level, LPWKSTA_USER_INFO UserInfo)
Definition: rpcserver.c:126
enum _NET_COMPUTER_NAME_TYPE NET_COMPUTER_NAME_TYPE
unsigned long __stdcall NetrJoinDomain(void)
Definition: rpcserver.c:322
unsigned long __stdcall NetrAddAlternateComputerName(handle_t RpcBindingHandle, wchar_t *ServerName, wchar_t *AlternateName, wchar_t *DomainAccount, PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword, unsigned long Reserved)
Definition: rpcserver.c:470
#define ERROR_NOT_ENOUGH_MEMORY
Definition: dderror.h:7
_In_ DWORD _Out_ PDWORD _In_opt_ PCSTR MachineName
Definition: setupapi.h:1286
#define ZeroMemory
Definition: winbase.h:1635
wchar_t * WKSSVC_IMPERSONATE_HANDLE
Definition: wkssvc.idl:8
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:55
unsigned long __stdcall NetrWkstaGetInfo(WKSSVC_IDENTIFY_HANDLE ServerName, unsigned long Level, LPWKSTA_INFO WkstaInfo)
Definition: rpcserver.c:83
enum OPTION_FLAGS Options
Definition: stats.c:44
unsigned long __stdcall NetrWkstaTransportEnum(WKSSVC_IDENTIFY_HANDLE ServerName, LPWKSTA_TRANSPORT_ENUM_STRUCT TransportInfo, unsigned long PreferredMaximumLength, unsigned long *TotalEntries, unsigned long *ResumeHandle)
Definition: rpcserver.c:155
unsigned long __stdcall NetrGetJoinableOUs2(handle_t RpcBindingHandle, wchar_t *ServerName, wchar_t *DomainNameParam, wchar_t *AccountName, PJOINPR_ENCRYPTED_USER_PASSWORD Password, unsigned long *OUCount, wchar_t ***OUs)
Definition: rpcserver.c:453
unsigned long __stdcall NetrRenameMachineInDomain(void)
Definition: rpcserver.c:352
unsigned long __stdcall NetrUseAdd(WKSSVC_IMPERSONATE_HANDLE ServerName, unsigned long Level, LPUSE_INFO InfoStruct, unsigned long *ErrorParameter)
Definition: rpcserver.c:197
#define NERR_Success
Definition: lmerr.h:5
unsigned long __stdcall NetrWkstaTransportDel(WKSSVC_IDENTIFY_HANDLE ServerName, wchar_t *TransportName, unsigned long ForceLevel)
Definition: rpcserver.c:184
long RPC_STATUS
Definition: rpc.h:52
unsigned long __stdcall NetrUseDel(WKSSVC_IMPERSONATE_HANDLE ServerName, wchar_t *UseName, unsigned long ForceLevel)
Definition: rpcserver.c:225
unsigned long __stdcall NetrUnjoinDomain(void)
Definition: rpcserver.c:332
RPC_STATUS WINAPI RpcServerListen(UINT MinimumCallThreads, UINT MaxCalls, UINT DontWait)
Definition: rpc_server.c:1527
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
static PVOID ptr
Definition: dispmode.c:27
#define RPC_C_LISTEN_MAX_CALLS_DEFAULT
Definition: rpcdce.h:122
void __RPC_FAR *__RPC_USER midl_user_allocate(SIZE_T len)
Definition: rpcserver.c:69
smooth NULL
Definition: ftsmooth.c:416
_Reserved_ PVOID Reserved
Definition: winddi.h:3974
Definition: bufpool.h:45
#define __RPC_FAR
Definition: rpc.h:56
enum _NETSETUP_NAME_TYPE NETSETUP_NAME_TYPE
#define __RPC_USER
Definition: rpc.h:65
unsigned long __stdcall NetrValidateName2(handle_t RpcBindingHandle, wchar_t *ServerName, wchar_t *NameToValidate, wchar_t *AccountName, PJOINPR_ENCRYPTED_USER_PASSWORD Password, NETSETUP_NAME_TYPE NameType)
Definition: rpcserver.c:437
#define TRACE(s)
Definition: solgame.cpp:4
LPTSTR ServiceName
Definition: ServiceMain.c:15
#define GetProcessHeap()
Definition: compat.h:395
unsigned long __stdcall NetrUseEnum(WKSSVC_IDENTIFY_HANDLE ServerName, LPUSE_ENUM_STRUCT InfoStruct, unsigned long PreferredMaximumLength, unsigned long *TotalEntries, unsigned long *ResumeHandle)
Definition: rpcserver.c:238
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
unsigned long __stdcall NetrUnjoinDomain2(handle_t RpcBindingHandle, wchar_t *ServerName, wchar_t *AccountName, PJOINPR_ENCRYPTED_USER_PASSWORD Password, unsigned long Options)
Definition: rpcserver.c:406
unsigned long __stdcall NetrGetJoinInformation(WKSSVC_IMPERSONATE_HANDLE ServerName, wchar_t **NameBuffer, PNETSETUP_JOIN_STATUS BufferType)
Definition: rpcserver.c:362
unsigned long __stdcall NetrWkstaTransportAdd(WKSSVC_IDENTIFY_HANDLE ServerName, unsigned long Level, LPWKSTA_TRANSPORT_INFO_0 TransportInfo, unsigned long *ErrorParameter)
Definition: rpcserver.c:170
unsigned long __stdcall NetrSetPrimaryComputerName(handle_t RpcBindingHandle, wchar_t *ServerName, wchar_t *PrimaryName, wchar_t *DomainAccount, PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword, unsigned long Reserved)
Definition: rpcserver.c:502
WINE_DEFAULT_DEBUG_CHANNEL(schedsvc)
unsigned long DWORD
Definition: ntddk_ex.h:95
RPC_STATUS WINAPI RpcServerRegisterIf(RPC_IF_HANDLE IfSpec, UUID *MgrTypeUuid, RPC_MGR_EPV *MgrEpv)
Definition: rpc_server.c:1123
#define __stdcall
Definition: typedefs.h:25
unsigned long __stdcall NetrUseGetInfo(WKSSVC_IMPERSONATE_HANDLE ServerName, wchar_t *UseName, unsigned long Level, LPUSE_INFO InfoStruct)
Definition: rpcserver.c:211
unsigned long __stdcall NetrWkstaUserEnum(WKSSVC_IDENTIFY_HANDLE ServerName, LPWKSTA_USER_ENUM_STRUCT UserInfo, unsigned long PreferredMaximumLength, unsigned long *TotalEntries, unsigned long *ResumeHandle)
Definition: rpcserver.c:111
static const WCHAR L[]
Definition: oid.c:1087
LPVOID lpParameter
Definition: kernel32.h:232
unsigned long __stdcall NetrJoinDomain2(handle_t RpcBindingHandle, wchar_t *ServerName, wchar_t *DomainNameParam, wchar_t *MachineAccountOU, wchar_t *AccountName, PJOINPR_ENCRYPTED_USER_PASSWORD Password, unsigned long Options)
Definition: rpcserver.c:389
GLenum GLsizei len
Definition: glext.h:6722
DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter)
Definition: rpcserver.c:40
unsigned long __stdcall NetrWkstaUserSetInfo(WKSSVC_IDENTIFY_HANDLE Unused, unsigned long Level, LPWKSTA_USER_INFO UserInfo, unsigned long *ErrorParameter)
Definition: rpcserver.c:141
#define WINAPI
Definition: msvc.h:20
Status
Definition: gdiplustypes.h:24
RPC_STATUS WINAPI RpcServerUseProtseqEpW(RPC_WSTR Protseq, UINT MaxCalls, RPC_WSTR Endpoint, LPVOID SecurityDescriptor)
Definition: rpc_server.c:934
#define ERR(fmt,...)
Definition: debug.h:109
ULONG_PTR SIZE_T
Definition: typedefs.h:78
unsigned long __stdcall NetrLogonDomainNameAdd(WKSSVC_IDENTIFY_HANDLE DomainName)
Definition: rpcserver.c:298
unsigned long __stdcall NetrRemoveAlternateComputerName(handle_t RpcBindingHandle, wchar_t *ServerName, wchar_t *AlternateName, wchar_t *DomainAccount, PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword, unsigned long Reserved)
Definition: rpcserver.c:486
void __RPC_USER midl_user_free(void __RPC_FAR *ptr)
Definition: rpcserver.c:75
enum tagNETSETUP_JOIN_STATUS * PNETSETUP_JOIN_STATUS
unsigned long __stdcall NetrRenameMachineInDomain2(handle_t RpcBindingHandle, wchar_t *ServerName, wchar_t *MachineName, wchar_t *AccountName, PJOINPR_ENCRYPTED_USER_PASSWORD Password, unsigned long Options)
Definition: rpcserver.c:421
#define HEAP_ZERO_MEMORY
Definition: compat.h:123
#define ERROR_NOT_SUPPORTED
Definition: compat.h:90
#define UNIMPLEMENTED
Definition: debug.h:114
unsigned long __stdcall NetrValidateName(void)
Definition: rpcserver.c:342
ACPI_PHYSICAL_ADDRESS ACPI_SIZE BOOLEAN Warn BOOLEAN Physical UINT32 ACPI_TABLE_HEADER *OutTableHeader ACPI_TABLE_HEADER **OutTable ACPI_HANDLE UINT32 ACPI_WALK_CALLBACK ACPI_WALK_CALLBACK void void **ReturnValue UINT32 NameType
Definition: acpixf.h:657
#define ERROR_INVALID_LEVEL
Definition: winerror.h:196
#define HeapFree(x, y, z)
Definition: compat.h:394
#define RPC_S_OK
Definition: rpcnterr.h:22
wchar_t * WKSSVC_IDENTIFY_HANDLE
Definition: wkssvc.idl:7
unsigned long __stdcall NetrEnumerateComputerNames(WKSSVC_IMPERSONATE_HANDLE ServerName, NET_COMPUTER_NAME_TYPE NameType, unsigned long Reserved, PNET_COMPUTER_NAME_ARRAY *ComputerNames)
Definition: rpcserver.c:518