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 */ 251 void 252 __stdcall 253 Opnum12NotUsedOnWire(void) 254 { 255 UNIMPLEMENTED; 256 // return 0; 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 UNIMPLEMENTED; 271 return 0; 272 } 273 274 275 /* Function 14 */ 276 void 277 __stdcall 278 Opnum14NotUsedOnWire(void) 279 { 280 UNIMPLEMENTED; 281 // return 0; 282 } 283 284 285 /* Function 15 */ 286 void 287 __stdcall 288 Opnum15NotUsedOnWire(void) 289 { 290 UNIMPLEMENTED; 291 // return 0; 292 } 293 294 295 /* Function 16 */ 296 void 297 __stdcall 298 Opnum16NotUsedOnWire(void) 299 { 300 UNIMPLEMENTED; 301 // return 0; 302 } 303 304 305 /* Function 17 */ 306 void 307 __stdcall 308 Opnum17NotUsedOnWire(void) 309 { 310 UNIMPLEMENTED; 311 // return 0; 312 } 313 314 315 /* Function 18 */ 316 void 317 __stdcall 318 Opnum18NotUsedOnWire(void) 319 { 320 UNIMPLEMENTED; 321 // return 0; 322 } 323 324 325 /* Function 19 */ 326 void 327 __stdcall 328 Opnum19NotUsedOnWire(void) 329 { 330 UNIMPLEMENTED; 331 // return 0; 332 } 333 334 335 /* Function 20 */ 336 unsigned long 337 __stdcall 338 NetrGetJoinInformation( 339 WKSSVC_IMPERSONATE_HANDLE ServerName, 340 wchar_t **NameBuffer, 341 PNETSETUP_JOIN_STATUS BufferType) 342 { 343 TRACE("NetrGetJoinInformation()\n"); 344 345 *NameBuffer = NULL; 346 *BufferType = NetSetupUnjoined; 347 348 return NERR_Success; 349 } 350 351 352 /* Function 21 */ 353 void 354 __stdcall 355 Opnum21NotUsedOnWire(void) 356 { 357 UNIMPLEMENTED; 358 // return 0; 359 } 360 361 362 /* Function 22 */ 363 unsigned long 364 __stdcall 365 NetrJoinDomain2( 366 handle_t RpcBindingHandle, 367 wchar_t *ServerName, 368 wchar_t *DomainNameParam, 369 wchar_t *MachineAccountOU, 370 wchar_t *AccountName, 371 PJOINPR_ENCRYPTED_USER_PASSWORD Password, 372 unsigned long Options) 373 { 374 UNIMPLEMENTED; 375 return 0; 376 } 377 378 379 /* Function 23 */ 380 unsigned long 381 __stdcall 382 NetrUnjoinDomain2( 383 handle_t RpcBindingHandle, 384 wchar_t *ServerName, 385 wchar_t *AccountName, 386 PJOINPR_ENCRYPTED_USER_PASSWORD Password, 387 unsigned long Options) 388 { 389 UNIMPLEMENTED; 390 return 0; 391 } 392 393 394 /* Function 24 */ 395 unsigned long 396 __stdcall 397 NetrRenameMachineInDomain2( 398 handle_t RpcBindingHandle, 399 wchar_t *ServerName, 400 wchar_t *MachineName, 401 wchar_t *AccountName, 402 PJOINPR_ENCRYPTED_USER_PASSWORD Password, 403 unsigned long Options) 404 { 405 UNIMPLEMENTED; 406 return 0; 407 } 408 409 410 /* Function 25 */ 411 unsigned long 412 __stdcall 413 NetrValidateName2( 414 handle_t RpcBindingHandle, 415 wchar_t *ServerName, 416 wchar_t *NameToValidate, 417 wchar_t *AccountName, 418 PJOINPR_ENCRYPTED_USER_PASSWORD Password, 419 NETSETUP_NAME_TYPE NameType) 420 { 421 UNIMPLEMENTED; 422 return 0; 423 } 424 425 426 /* Function 26 */ 427 unsigned long 428 __stdcall 429 NetrGetJoinableOUs2( 430 handle_t RpcBindingHandle, 431 wchar_t *ServerName, 432 wchar_t *DomainNameParam, 433 wchar_t *AccountName, 434 PJOINPR_ENCRYPTED_USER_PASSWORD Password, 435 unsigned long* OUCount, 436 wchar_t ***OUs) 437 { 438 UNIMPLEMENTED; 439 return 0; 440 } 441 442 443 /* Function 27 */ 444 unsigned long 445 __stdcall 446 NetrAddAlternateComputerName( 447 handle_t RpcBindingHandle, 448 wchar_t *ServerName, 449 wchar_t *AlternateName, 450 wchar_t *DomainAccount, 451 PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword, 452 unsigned long Reserved) 453 { 454 UNIMPLEMENTED; 455 return 0; 456 } 457 458 459 /* Function 28 */ 460 unsigned long 461 __stdcall 462 NetrRemoveAlternateComputerName( 463 handle_t RpcBindingHandle, 464 wchar_t *ServerName, 465 wchar_t *AlternateName, 466 wchar_t *DomainAccount, 467 PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword, 468 unsigned long Reserved) 469 { 470 UNIMPLEMENTED; 471 return 0; 472 } 473 474 475 /* Function 29 */ 476 unsigned long 477 __stdcall 478 NetrSetPrimaryComputerName( 479 handle_t RpcBindingHandle, 480 wchar_t *ServerName, 481 wchar_t *PrimaryName, 482 wchar_t *DomainAccount, 483 PJOINPR_ENCRYPTED_USER_PASSWORD EncryptedPassword, 484 unsigned long Reserved) 485 { 486 UNIMPLEMENTED; 487 return 0; 488 } 489 490 491 /* Function 30 */ 492 unsigned long 493 __stdcall 494 NetrEnumerateComputerNames( 495 WKSSVC_IMPERSONATE_HANDLE ServerName, 496 NET_COMPUTER_NAME_TYPE NameType, 497 unsigned long Reserved, 498 PNET_COMPUTER_NAME_ARRAY *ComputerNames) 499 { 500 UNIMPLEMENTED; 501 return 0; 502 } 503 504 /* EOF */ 505