1 /* 2 * COPYRIGHT: See COPYING in the top level directory 3 * PROJECT: ReactOS Winlogon 4 * FILE: base/system/winlogon/rpcserver.c 5 * PURPOSE: RPC server interface for the remote registry calls 6 * PROGRAMMERS: Eric Kohl 7 */ 8 9 /* INCLUDES ******************************************************************/ 10 11 #include "winlogon.h" 12 13 #include <rpc.h> 14 #include <winreg_s.h> 15 16 /* FUNCTIONS *****************************************************************/ 17 18 BOOL 19 StartRpcServer(VOID) 20 { 21 RPC_STATUS Status; 22 23 TRACE("StartRpcServer() called\n"); 24 25 Status = RpcServerUseProtseqEpW(L"ncacn_np", 26 RPC_C_PROTSEQ_MAX_REQS_DEFAULT, 27 L"\\pipe\\winreg", 28 NULL); 29 if (Status != RPC_S_OK) 30 { 31 ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); 32 return FALSE; 33 } 34 35 Status = RpcServerRegisterIf(winreg_v1_0_s_ifspec, 36 NULL, 37 NULL); 38 if (Status != RPC_S_OK) 39 { 40 ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status); 41 return FALSE; 42 } 43 44 Status = RpcServerListen(1, 20, TRUE); 45 if (Status != RPC_S_OK) 46 { 47 ERR("RpcServerListen() failed (Status %lx)\n", Status); 48 return FALSE; 49 } 50 51 TRACE("StartRpcServer() done\n"); 52 return TRUE; 53 } 54 55 56 void __RPC_FAR * __RPC_USER MIDL_user_allocate(SIZE_T len) 57 { 58 return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); 59 } 60 61 62 void __RPC_USER MIDL_user_free(void __RPC_FAR * ptr) 63 { 64 HeapFree(GetProcessHeap(), 0, ptr); 65 } 66 67 68 void __RPC_USER RPC_HKEY_rundown(RPC_HKEY hSCObject) 69 { 70 } 71 72 73 /* Function 0 */ 74 error_status_t 75 WINAPI 76 OpenClassesRoot( 77 PREGISTRY_SERVER_NAME ServerName, 78 REGSAM samDesired, 79 PRPC_HKEY phKey) 80 { 81 TRACE("\n"); 82 return ERROR_SUCCESS; 83 } 84 85 86 /* Function 1 */ 87 error_status_t 88 WINAPI 89 OpenCurrentUser( 90 PREGISTRY_SERVER_NAME ServerName, 91 REGSAM samDesired, 92 PRPC_HKEY phKey) 93 { 94 TRACE("\n"); 95 return ERROR_SUCCESS; 96 } 97 98 99 /* Function 2 */ 100 error_status_t 101 WINAPI 102 OpenLocalMachine( 103 PREGISTRY_SERVER_NAME ServerName, 104 REGSAM samDesired, 105 PRPC_HKEY phKey) 106 { 107 TRACE("\n"); 108 return ERROR_SUCCESS; 109 } 110 111 112 /* Function 3 */ 113 error_status_t 114 WINAPI 115 OpenPerformanceData( 116 PREGISTRY_SERVER_NAME ServerName, 117 REGSAM samDesired, 118 PRPC_HKEY phKey) 119 { 120 TRACE("\n"); 121 return ERROR_SUCCESS; 122 } 123 124 125 /* Function 4 */ 126 error_status_t 127 WINAPI 128 OpenUsers( 129 PREGISTRY_SERVER_NAME ServerName, 130 REGSAM samDesired, 131 PRPC_HKEY phKey) 132 { 133 TRACE("\n"); 134 return ERROR_SUCCESS; 135 } 136 137 138 /* Function 5 */ 139 error_status_t 140 WINAPI 141 BaseRegCloseKey( 142 PRPC_HKEY hKey) 143 { 144 TRACE("\n"); 145 return ERROR_SUCCESS; 146 } 147 148 149 /* Function 6 */ 150 error_status_t 151 WINAPI 152 BaseRegCreateKey( 153 RPC_HKEY hKey, 154 PRPC_UNICODE_STRING lpSubKey, 155 PRPC_UNICODE_STRING lpClass, 156 DWORD dwOptions, 157 REGSAM samDesired, 158 PRPC_SECURITY_ATTRIBUTES lpSecurityAttributes, 159 PRPC_HKEY phkResult, 160 LPDWORD lpdwDisposition) 161 { 162 TRACE("\n"); 163 return ERROR_SUCCESS; 164 } 165 166 167 /* Function 7 */ 168 error_status_t 169 WINAPI 170 BaseRegDeleteKey( 171 RPC_HKEY hKey, 172 PRPC_UNICODE_STRING lpSubKey) 173 { 174 TRACE("\n"); 175 return ERROR_SUCCESS; 176 } 177 178 179 /* Function 8 */ 180 error_status_t 181 WINAPI 182 BaseRegDeleteValue( 183 RPC_HKEY hKey, 184 PRPC_UNICODE_STRING lpValueName) 185 { 186 TRACE("\n"); 187 return ERROR_SUCCESS; 188 } 189 190 191 /* Function 9 */ 192 error_status_t 193 WINAPI 194 BaseRegEnumKey( 195 RPC_HKEY hKey, 196 DWORD dwIndex, 197 PRPC_UNICODE_STRING lpNameIn, 198 PRPC_UNICODE_STRING lpNameOut, 199 PRPC_UNICODE_STRING lpClassIn, 200 PRPC_UNICODE_STRING *lplpClassOut, 201 PFILETIME lpftLastWriteTime) 202 { 203 TRACE("\n"); 204 return ERROR_SUCCESS; 205 } 206 207 208 /* Function 10 */ 209 error_status_t 210 WINAPI 211 BaseRegEnumValue( 212 RPC_HKEY hKey, 213 DWORD dwIndex, 214 PRPC_UNICODE_STRING lpValueNameIn, 215 PRPC_UNICODE_STRING lpValueNameOut, 216 LPDWORD lpType, 217 LPBYTE lpData, 218 LPDWORD lpcbData, 219 LPDWORD lpcbLen) 220 { 221 TRACE("\n"); 222 return ERROR_SUCCESS; 223 } 224 225 226 /* Function 11 */ 227 error_status_t 228 __stdcall 229 BaseRegFlushKey( 230 RPC_HKEY hKey) 231 { 232 TRACE("\n"); 233 return ERROR_SUCCESS; 234 } 235 236 237 /* Function 12 */ 238 error_status_t 239 __stdcall 240 BaseRegGetKeySecurity( 241 RPC_HKEY hKey, 242 SECURITY_INFORMATION SecurityInformation, 243 PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptorIn, 244 PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptorOut) 245 { 246 TRACE("\n"); 247 return ERROR_SUCCESS; 248 } 249 250 251 /* Function 13 */ 252 error_status_t 253 __stdcall 254 BaseRegLoadKey( 255 RPC_HKEY hKey, 256 PRPC_UNICODE_STRING lpSubKey, 257 PRPC_UNICODE_STRING lpFile) 258 { 259 TRACE("\n"); 260 return ERROR_SUCCESS; 261 } 262 263 264 /* Function 14 - Not used on wire */ 265 void 266 __stdcall 267 BaseRegNotifyChangeKeyValue( 268 handle_t IDL_handle) 269 { 270 TRACE("\n"); 271 } 272 273 274 /* Function 15 */ 275 error_status_t 276 __stdcall 277 BaseRegOpenKey( 278 RPC_HKEY hKey, 279 PRPC_UNICODE_STRING lpSubKey, 280 DWORD dwOptions, 281 REGSAM samDesired, 282 PRPC_HKEY phkResult) 283 { 284 TRACE("\n"); 285 return ERROR_SUCCESS; 286 } 287 288 289 /* Function 16 */ 290 error_status_t 291 __stdcall 292 BaseRegQueryInfoKey( 293 RPC_HKEY hKey, 294 PRPC_UNICODE_STRING lpClassIn, 295 PRPC_UNICODE_STRING lpClassOut, 296 LPDWORD lpcSubKeys, 297 LPDWORD lpcbMaxSubKeyLen, 298 LPDWORD lpcbMaxClassLen, 299 LPDWORD lpcValues, 300 LPDWORD lpcbMaxValueNameLen, 301 LPDWORD lpcbMaxValueLen, 302 LPDWORD lpcbSecurityDescriptor, 303 PFILETIME lpftLastWriteTime) 304 { 305 TRACE("\n"); 306 return ERROR_SUCCESS; 307 } 308 309 310 /* Function 17 */ 311 error_status_t 312 __stdcall 313 BaseRegQueryValue( 314 RPC_HKEY hKey, 315 PRPC_UNICODE_STRING lpValueName, 316 LPDWORD lpType, 317 LPBYTE lpData, 318 LPDWORD lpcbData, 319 LPDWORD lpcbLen) 320 { 321 TRACE("\n"); 322 return ERROR_SUCCESS; 323 } 324 325 326 /* Function 18 */ 327 error_status_t 328 __stdcall 329 BaseRegReplaceKey( 330 RPC_HKEY hKey, 331 PRPC_UNICODE_STRING lpSubKey, 332 PRPC_UNICODE_STRING lpNewFile, 333 PRPC_UNICODE_STRING lpOldFile) 334 { 335 TRACE("\n"); 336 return ERROR_SUCCESS; 337 } 338 339 340 /* Function 19 */ 341 error_status_t 342 __stdcall 343 BaseRegRestoreKey( 344 RPC_HKEY hKey, 345 PRPC_UNICODE_STRING lpFile, 346 DWORD Flags) 347 { 348 TRACE("\n"); 349 return ERROR_SUCCESS; 350 } 351 352 353 /* Function 20 */ 354 error_status_t 355 __stdcall 356 BaseRegSaveKey( 357 RPC_HKEY hKey, 358 PRPC_UNICODE_STRING lpFile, 359 PRPC_SECURITY_ATTRIBUTES pSecurityAttributes) 360 { 361 TRACE("\n"); 362 return ERROR_SUCCESS; 363 } 364 365 366 /* Function 21 */ 367 error_status_t 368 __stdcall 369 BaseRegSetKeySecurity( 370 RPC_HKEY hKey, 371 SECURITY_INFORMATION SecurityInformation, 372 PRPC_SECURITY_DESCRIPTOR pRpcSecurityDescriptor) 373 { 374 TRACE("\n"); 375 return ERROR_SUCCESS; 376 } 377 378 379 /* Function 22 */ 380 error_status_t 381 __stdcall 382 BaseRegSetValue( 383 RPC_HKEY hKey, 384 PRPC_UNICODE_STRING lpValueName, 385 DWORD dwType, 386 LPBYTE lpData, 387 DWORD cbData) 388 { 389 TRACE("\n"); 390 return ERROR_SUCCESS; 391 } 392 393 394 /* Function 23 */ 395 error_status_t 396 __stdcall 397 BaseRegUnLoadKey( 398 RPC_HKEY hKey, 399 PRPC_UNICODE_STRING lpSubKey) 400 { 401 TRACE("\n"); 402 return ERROR_SUCCESS; 403 } 404 405 406 /* Function 24 */ 407 ULONG 408 __stdcall 409 BaseInitiateSystemShutdown( 410 PREGISTRY_SERVER_NAME ServerName, 411 PRPC_UNICODE_STRING lpMessage, 412 ULONG dwTimeout, 413 BOOLEAN bForceAppsClosed, 414 BOOLEAN bRebootAfterShutdown) 415 { 416 TRACE("BaseInitiateSystemShutdown()\n"); 417 return BaseInitiateSystemShutdownEx(ServerName, 418 lpMessage, 419 dwTimeout, 420 bForceAppsClosed, 421 bRebootAfterShutdown, 422 0); 423 } 424 425 426 /* Function 25 */ 427 ULONG 428 __stdcall 429 BaseAbortSystemShutdown( 430 PREGISTRY_SERVER_NAME ServerName) 431 { 432 TRACE("BaseAbortSystemShutdown()\n"); 433 434 //FIXME: Verify that the caller actually has the correct privileges 435 436 return TerminateSystemShutdown(); 437 } 438 439 440 /* Function 26 */ 441 error_status_t 442 __stdcall 443 BaseRegGetVersion( 444 RPC_HKEY hKey, 445 LPDWORD lpdwVersion) 446 { 447 TRACE("\n"); 448 return ERROR_SUCCESS; 449 } 450 451 452 /* Function 27 */ 453 error_status_t 454 __stdcall 455 OpenCurrentConfig( 456 PREGISTRY_SERVER_NAME ServerName, 457 REGSAM samDesired, 458 PRPC_HKEY phKey) 459 { 460 TRACE("\n"); 461 return ERROR_SUCCESS; 462 } 463 464 465 /* Function 28 - Not used on wire */ 466 void 467 __stdcall 468 OpenDynData( 469 handle_t IDL_handle) 470 { 471 TRACE("\n"); 472 } 473 474 475 /* Function 29 */ 476 error_status_t 477 __stdcall 478 BaseRegQueryMultipleValues( 479 RPC_HKEY hKey, 480 PRVALENT val_listIn, 481 PRVALENT val_listOut, 482 DWORD num_vals, 483 char *lpvalueBuf, 484 LPDWORD ldwTotsize) 485 { 486 TRACE("\n"); 487 return ERROR_SUCCESS; 488 } 489 490 491 /* Function 30 */ 492 ULONG 493 __stdcall 494 BaseInitiateSystemShutdownEx( 495 PREGISTRY_SERVER_NAME ServerName, 496 PRPC_UNICODE_STRING lpMessage, 497 ULONG dwTimeout, 498 BOOLEAN bForceAppsClosed, 499 BOOLEAN bRebootAfterShutdown, 500 ULONG dwReason) 501 { 502 TRACE("BaseInitiateSystemShutdownEx()\n"); 503 TRACE(" Message: %wZ\n", lpMessage); 504 TRACE(" Timeout: %lu\n", dwTimeout); 505 TRACE(" Force: %d\n", bForceAppsClosed); 506 TRACE(" Reboot: %d\n", bRebootAfterShutdown); 507 TRACE(" Reason: %lu\n", dwReason); 508 509 //FIXME: Verify that the caller actually has the correct privileges 510 511 return StartSystemShutdown((PUNICODE_STRING)lpMessage, 512 dwTimeout, 513 bForceAppsClosed, 514 bRebootAfterShutdown, 515 dwReason); 516 } 517 518 519 /* Function 31 */ 520 error_status_t 521 __stdcall 522 BaseRegSaveKeyEx( 523 RPC_HKEY hKey, 524 PRPC_UNICODE_STRING lpFile, 525 PRPC_SECURITY_ATTRIBUTES pSecurityAttributes, 526 DWORD Flags) 527 { 528 TRACE("\n"); 529 return ERROR_SUCCESS; 530 } 531 532 533 /* Function 32 */ 534 error_status_t 535 __stdcall 536 OpenPerformanceText( 537 PREGISTRY_SERVER_NAME ServerName, 538 REGSAM samDesired, 539 PRPC_HKEY phKey) 540 { 541 TRACE("\n"); 542 return ERROR_SUCCESS; 543 } 544 545 546 /* Function 33 */ 547 error_status_t 548 __stdcall 549 OpenPerformanceNlsText( 550 PREGISTRY_SERVER_NAME ServerName, 551 REGSAM samDesired, 552 PRPC_HKEY phKey) 553 { 554 TRACE("\n"); 555 return ERROR_SUCCESS; 556 } 557 558 559 /* Function 34 */ 560 error_status_t 561 __stdcall 562 BaseRegQueryMultipleValues2( 563 RPC_HKEY hKey, 564 PRVALENT val_listIn, 565 PRVALENT val_listOut, 566 DWORD num_vals, 567 char *lpvalueBuf, 568 LPDWORD ldwTotsize, 569 LPDWORD ldwRequiredSize) 570 { 571 TRACE("\n"); 572 return ERROR_SUCCESS; 573 } 574 575 576 /* Function 35 */ 577 error_status_t 578 __stdcall 579 BaseRegDeleteKeyEx( 580 RPC_HKEY hKey, 581 PRPC_UNICODE_STRING lpSubKey, 582 REGSAM AccessMask, 583 DWORD Reserved) 584 { 585 TRACE("\n"); 586 return ERROR_SUCCESS; 587 } 588 589 /* EOF */ 590