Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenlsa.c
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS system libraries 00004 * FILE: dll/win32/advapi32/sec/lsa.c 00005 * PURPOSE: Local security authority functions 00006 * PROGRAMMER: Emanuele Aliberti 00007 * UPDATE HISTORY: 00008 * 19990322 EA created 00009 * 19990515 EA stubs 00010 * 20030202 KJK compressed stubs 00011 * 00012 */ 00013 #include <advapi32.h> 00014 WINE_DEFAULT_DEBUG_CHANNEL(advapi); 00015 00016 00017 static BOOL LsapIsLocalComputer(PLSA_UNICODE_STRING ServerName) 00018 { 00019 DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1; 00020 BOOL Result; 00021 LPWSTR buf; 00022 00023 if (ServerName == NULL || ServerName->Length == 0 || ServerName->Buffer == NULL) 00024 return TRUE; 00025 00026 buf = HeapAlloc(GetProcessHeap(), 0, dwSize * sizeof(WCHAR)); 00027 Result = GetComputerNameW(buf, &dwSize); 00028 if (Result && (ServerName->Buffer[0] == '\\') && (ServerName->Buffer[1] == '\\')) 00029 ServerName += 2; 00030 Result = Result && !lstrcmpW(ServerName->Buffer, buf); 00031 HeapFree(GetProcessHeap(), 0, buf); 00032 00033 return Result; 00034 } 00035 00036 00037 handle_t __RPC_USER 00038 PLSAPR_SERVER_NAME_bind(PLSAPR_SERVER_NAME pszSystemName) 00039 { 00040 handle_t hBinding = NULL; 00041 LPWSTR pszStringBinding; 00042 RPC_STATUS status; 00043 00044 TRACE("PLSAPR_SERVER_NAME_bind() called\n"); 00045 00046 status = RpcStringBindingComposeW(NULL, 00047 L"ncacn_np", 00048 pszSystemName, 00049 L"\\pipe\\lsarpc", 00050 NULL, 00051 &pszStringBinding); 00052 if (status) 00053 { 00054 TRACE("RpcStringBindingCompose returned 0x%x\n", status); 00055 return NULL; 00056 } 00057 00058 /* Set the binding handle that will be used to bind to the server. */ 00059 status = RpcBindingFromStringBindingW(pszStringBinding, 00060 &hBinding); 00061 if (status) 00062 { 00063 TRACE("RpcBindingFromStringBinding returned 0x%x\n", status); 00064 } 00065 00066 status = RpcStringFreeW(&pszStringBinding); 00067 if (status) 00068 { 00069 TRACE("RpcStringFree returned 0x%x\n", status); 00070 } 00071 00072 return hBinding; 00073 } 00074 00075 00076 void __RPC_USER 00077 PLSAPR_SERVER_NAME_unbind(PLSAPR_SERVER_NAME pszSystemName, 00078 handle_t hBinding) 00079 { 00080 RPC_STATUS status; 00081 00082 TRACE("PLSAPR_SERVER_NAME_unbind() called\n"); 00083 00084 status = RpcBindingFree(&hBinding); 00085 if (status) 00086 { 00087 TRACE("RpcBindingFree returned 0x%x\n", status); 00088 } 00089 } 00090 00091 00092 /* 00093 * @implemented 00094 */ 00095 NTSTATUS 00096 WINAPI 00097 LsaClose(IN LSA_HANDLE ObjectHandle) 00098 { 00099 NTSTATUS Status; 00100 00101 TRACE("LsaClose(0x%p) called\n", ObjectHandle); 00102 00103 RpcTryExcept 00104 { 00105 Status = LsarClose((PLSAPR_HANDLE)&ObjectHandle); 00106 } 00107 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00108 { 00109 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00110 } 00111 RpcEndExcept; 00112 00113 return Status; 00114 } 00115 00116 00117 /* 00118 * @implemented 00119 */ 00120 NTSTATUS 00121 WINAPI 00122 LsaDelete(IN LSA_HANDLE ObjectHandle) 00123 { 00124 NTSTATUS Status; 00125 00126 TRACE("LsaDelete(0x%p) called\n", ObjectHandle); 00127 00128 RpcTryExcept 00129 { 00130 Status = LsarDelete((LSAPR_HANDLE)ObjectHandle); 00131 } 00132 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00133 { 00134 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00135 } 00136 RpcEndExcept; 00137 00138 return Status; 00139 } 00140 00141 00142 /* 00143 * @implemented 00144 */ 00145 NTSTATUS 00146 WINAPI 00147 LsaAddAccountRights(IN LSA_HANDLE PolicyHandle, 00148 IN PSID AccountSid, 00149 IN PLSA_UNICODE_STRING UserRights, 00150 IN ULONG CountOfRights) 00151 { 00152 LSAPR_USER_RIGHT_SET UserRightSet; 00153 NTSTATUS Status; 00154 00155 TRACE("(%p,%p,%p,0x%08x) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights); 00156 00157 UserRightSet.Entries = CountOfRights; 00158 UserRightSet.UserRights = (PRPC_UNICODE_STRING)UserRights; 00159 00160 RpcTryExcept 00161 { 00162 Status = LsarAddAccountRights((LSAPR_HANDLE)PolicyHandle, 00163 (PRPC_SID)AccountSid, 00164 &UserRightSet); 00165 00166 } 00167 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00168 { 00169 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00170 } 00171 RpcEndExcept; 00172 00173 return Status; 00174 } 00175 00176 00177 /* 00178 * @implemented 00179 */ 00180 NTSTATUS 00181 WINAPI 00182 LsaAddPrivilegesToAccount(IN LSA_HANDLE AccountHandle, 00183 IN PPRIVILEGE_SET PrivilegeSet) 00184 { 00185 NTSTATUS Status; 00186 00187 TRACE("(%p,%p) stub\n", AccountHandle, PrivilegeSet); 00188 00189 RpcTryExcept 00190 { 00191 Status = LsarAddPrivilegesToAccount((LSAPR_HANDLE)AccountHandle, 00192 (PLSAPR_PRIVILEGE_SET)PrivilegeSet); 00193 } 00194 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00195 { 00196 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00197 } 00198 RpcEndExcept; 00199 00200 return Status; 00201 } 00202 00203 00204 /* 00205 * @implemented 00206 */ 00207 NTSTATUS 00208 WINAPI 00209 LsaCreateAccount(IN LSA_HANDLE PolicyHandle, 00210 IN PSID AccountSid, 00211 IN ACCESS_MASK DesiredAccess, 00212 OUT PLSA_HANDLE AccountHandle) 00213 { 00214 NTSTATUS Status; 00215 00216 TRACE("(%p,%p,0x%08x,%p)\n", PolicyHandle, AccountSid, DesiredAccess, AccountHandle); 00217 00218 RpcTryExcept 00219 { 00220 Status = LsarCreateAccount((LSAPR_HANDLE)PolicyHandle, 00221 AccountSid, 00222 DesiredAccess, 00223 AccountHandle); 00224 } 00225 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00226 { 00227 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00228 } 00229 RpcEndExcept; 00230 00231 return Status; 00232 } 00233 00234 00235 /* 00236 * @implemented 00237 */ 00238 NTSTATUS 00239 WINAPI 00240 LsaCreateTrustedDomain(IN LSA_HANDLE PolicyHandle, 00241 IN PLSA_TRUST_INFORMATION TrustedDomainInformation, 00242 IN ACCESS_MASK DesiredAccess, 00243 OUT PLSA_HANDLE TrustedDomainHandle) 00244 { 00245 NTSTATUS Status; 00246 00247 TRACE("(%p,%p,0x%08x,%p)\n", PolicyHandle, TrustedDomainInformation, 00248 DesiredAccess, TrustedDomainHandle); 00249 00250 RpcTryExcept 00251 { 00252 Status = LsarCreateTrustedDomain((LSAPR_HANDLE)PolicyHandle, 00253 (PLSAPR_TRUST_INFORMATION)TrustedDomainInformation, 00254 DesiredAccess, 00255 (PLSAPR_HANDLE)TrustedDomainHandle); 00256 } 00257 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00258 { 00259 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00260 } 00261 RpcEndExcept; 00262 00263 return Status; 00264 } 00265 00266 00267 /* 00268 * @unimplemented 00269 */ 00270 NTSTATUS 00271 WINAPI 00272 LsaCreateTrustedDomainEx( 00273 LSA_HANDLE PolicyHandle, 00274 PTRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, 00275 PTRUSTED_DOMAIN_AUTH_INFORMATION AuthenticationInformation, 00276 ACCESS_MASK DesiredAccess, 00277 PLSA_HANDLE TrustedDomainHandle) 00278 { 00279 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle, TrustedDomainInformation, AuthenticationInformation, 00280 DesiredAccess, TrustedDomainHandle); 00281 return STATUS_SUCCESS; 00282 } 00283 00284 00285 /* 00286 * @implemented 00287 */ 00288 NTSTATUS 00289 WINAPI 00290 LsaDeleteTrustedDomain(IN LSA_HANDLE PolicyHandle, 00291 IN PSID TrustedDomainSid) 00292 { 00293 NTSTATUS Status; 00294 00295 TRACE("(%p,%p)\n", PolicyHandle, TrustedDomainSid); 00296 00297 RpcTryExcept 00298 { 00299 Status = LsarDeleteTrustedDomain((LSAPR_HANDLE)PolicyHandle, 00300 TrustedDomainSid); 00301 } 00302 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00303 { 00304 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00305 } 00306 RpcEndExcept; 00307 00308 return Status; 00309 } 00310 00311 00312 /* 00313 * @implemented 00314 */ 00315 NTSTATUS 00316 WINAPI 00317 LsaEnumerateAccountRights(IN LSA_HANDLE PolicyHandle, 00318 IN PSID AccountSid, 00319 OUT PLSA_UNICODE_STRING *UserRights, 00320 OUT PULONG CountOfRights) 00321 { 00322 LSAPR_USER_RIGHT_SET UserRightsSet; 00323 NTSTATUS Status; 00324 00325 TRACE("(%p,%p,%p,%p) stub\n", PolicyHandle, AccountSid, UserRights, CountOfRights); 00326 00327 UserRightsSet.Entries = 0; 00328 UserRightsSet.UserRights = NULL; 00329 00330 RpcTryExcept 00331 { 00332 Status = LsarEnmuerateAccountRights((LSAPR_HANDLE)PolicyHandle, 00333 AccountSid, 00334 &UserRightsSet); 00335 00336 *CountOfRights = UserRightsSet.Entries; 00337 *UserRights = (PUNICODE_STRING)UserRightsSet.UserRights; 00338 } 00339 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00340 { 00341 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00342 00343 if (UserRightsSet.UserRights != NULL) 00344 { 00345 MIDL_user_free(UserRightsSet.UserRights); 00346 } 00347 } 00348 RpcEndExcept; 00349 00350 return Status; 00351 } 00352 00353 00354 /* 00355 * @unimplemented 00356 */ 00357 NTSTATUS 00358 WINAPI 00359 LsaEnumerateAccountsWithUserRight( 00360 LSA_HANDLE PolicyHandle, 00361 OPTIONAL PLSA_UNICODE_STRING UserRights, 00362 PVOID *EnumerationBuffer, 00363 PULONG CountReturned) 00364 { 00365 FIXME("(%p,%p,%p,%p) stub\n", PolicyHandle, UserRights, EnumerationBuffer, CountReturned); 00366 return STATUS_NO_MORE_ENTRIES; 00367 } 00368 00369 00370 /* 00371 * @implemented 00372 */ 00373 NTSTATUS 00374 WINAPI 00375 LsaEnumeratePrivilegesOfAccount(IN LSA_HANDLE AccountHandle, 00376 OUT PPRIVILEGE_SET *Privileges) 00377 { 00378 NTSTATUS Status; 00379 00380 TRACE("(%p,%p) stub\n", AccountHandle, Privileges); 00381 00382 RpcTryExcept 00383 { 00384 Status = LsarEnumeratePrivilegesAccount((LSAPR_HANDLE)AccountHandle, 00385 (LSAPR_PRIVILEGE_SET **)Privileges); 00386 } 00387 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00388 { 00389 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00390 } 00391 RpcEndExcept; 00392 00393 return Status; 00394 } 00395 00396 00397 /* 00398 * @unimplemented 00399 */ 00400 NTSTATUS 00401 WINAPI 00402 LsaEnumerateTrustedDomains( 00403 LSA_HANDLE PolicyHandle, 00404 PLSA_ENUMERATION_HANDLE EnumerationContext, 00405 PVOID *Buffer, 00406 ULONG PreferedMaximumLength, 00407 PULONG CountReturned) 00408 { 00409 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle, EnumerationContext, 00410 Buffer, PreferedMaximumLength, CountReturned); 00411 00412 if (CountReturned) *CountReturned = 0; 00413 return STATUS_SUCCESS; 00414 } 00415 00416 /* 00417 * @unimplemented 00418 */ 00419 NTSTATUS 00420 WINAPI 00421 LsaEnumerateTrustedDomainsEx( 00422 LSA_HANDLE PolicyHandle, 00423 PLSA_ENUMERATION_HANDLE EnumerationContext, 00424 PVOID *Buffer, 00425 ULONG PreferedMaximumLength, 00426 PULONG CountReturned) 00427 { 00428 FIXME("(%p,%p,%p,0x%08x,%p) stub\n", PolicyHandle, EnumerationContext, Buffer, 00429 PreferedMaximumLength, CountReturned); 00430 if (CountReturned) *CountReturned = 0; 00431 return STATUS_SUCCESS; 00432 } 00433 00434 00435 /* 00436 * @implemented 00437 */ 00438 NTSTATUS 00439 WINAPI 00440 LsaFreeMemory(IN PVOID Buffer) 00441 { 00442 TRACE("(%p)\n", Buffer); 00443 return RtlFreeHeap(RtlGetProcessHeap(), 0, Buffer); 00444 } 00445 00446 00447 /* 00448 * @implemented 00449 */ 00450 NTSTATUS 00451 WINAPI 00452 LsaLookupNames(IN LSA_HANDLE PolicyHandle, 00453 IN ULONG Count, 00454 IN PLSA_UNICODE_STRING Names, 00455 OUT PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains, 00456 OUT PLSA_TRANSLATED_SID *Sids) 00457 { 00458 LSAPR_TRANSLATED_SIDS TranslatedSids = {0, NULL}; 00459 ULONG MappedCount = 0; 00460 NTSTATUS Status; 00461 00462 TRACE("(%p,0x%08x,%p,%p,%p)\n", PolicyHandle, Count, Names, 00463 ReferencedDomains, Sids); 00464 00465 if (ReferencedDomains == NULL || Sids == NULL) 00466 return STATUS_INVALID_PARAMETER; 00467 00468 RpcTryExcept 00469 { 00470 *ReferencedDomains = NULL; 00471 *Sids = NULL; 00472 00473 TranslatedSids.Entries = Count; 00474 00475 Status = LsarLookupNames((LSAPR_HANDLE)PolicyHandle, 00476 Count, 00477 (PRPC_UNICODE_STRING)Names, 00478 (PLSAPR_REFERENCED_DOMAIN_LIST *)ReferencedDomains, 00479 &TranslatedSids, 00480 LsapLookupWksta, 00481 &MappedCount); 00482 00483 *Sids = (PLSA_TRANSLATED_SID)TranslatedSids.Sids; 00484 } 00485 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00486 { 00487 if (TranslatedSids.Sids != NULL) 00488 MIDL_user_free(TranslatedSids.Sids); 00489 00490 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00491 } 00492 RpcEndExcept; 00493 00494 return Status; 00495 } 00496 00497 00498 /* 00499 * @implemented 00500 */ 00501 NTSTATUS 00502 WINAPI 00503 LsaLookupNames2(IN LSA_HANDLE PolicyHandle, 00504 IN ULONG Flags, 00505 IN ULONG Count, 00506 IN PLSA_UNICODE_STRING Names, 00507 OUT PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains, 00508 OUT PLSA_TRANSLATED_SID2 *Sids) 00509 { 00510 LSAPR_TRANSLATED_SIDS_EX2 TranslatedSids = {0, NULL}; 00511 ULONG MappedCount = 0; 00512 NTSTATUS Status; 00513 00514 TRACE("(%p,0x%08x,0x%08x,%p,%p,%p) stub\n", PolicyHandle, Flags, 00515 Count, Names, ReferencedDomains, Sids); 00516 00517 if (ReferencedDomains == NULL || Sids == NULL) 00518 return STATUS_INVALID_PARAMETER; 00519 00520 RpcTryExcept 00521 { 00522 *ReferencedDomains = NULL; 00523 *Sids = NULL; 00524 00525 TranslatedSids.Entries = Count; 00526 00527 Status = LsarLookupNames3((LSAPR_HANDLE)PolicyHandle, 00528 Count, 00529 (PRPC_UNICODE_STRING)Names, 00530 (PLSAPR_REFERENCED_DOMAIN_LIST *)ReferencedDomains, 00531 &TranslatedSids, 00532 LsapLookupWksta, 00533 &MappedCount, 00534 Flags, 00535 2); 00536 00537 *Sids = (PLSA_TRANSLATED_SID2)TranslatedSids.Sids; 00538 } 00539 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00540 { 00541 if (TranslatedSids.Sids != NULL) 00542 MIDL_user_free(TranslatedSids.Sids); 00543 00544 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00545 } 00546 RpcEndExcept; 00547 00548 return Status; 00549 } 00550 00551 00552 /* 00553 * @implemented 00554 */ 00555 NTSTATUS 00556 WINAPI 00557 LsaLookupPrivilegeName(IN LSA_HANDLE PolicyHandle, 00558 IN PLUID Value, 00559 OUT PUNICODE_STRING *Name) 00560 { 00561 PRPC_UNICODE_STRING NameBuffer = NULL; 00562 NTSTATUS Status; 00563 00564 TRACE("(%p,%p,%p)\n", PolicyHandle, Value, Name); 00565 00566 RpcTryExcept 00567 { 00568 Status = LsarLookupPrivilegeName(PolicyHandle, 00569 Value, 00570 &NameBuffer); 00571 00572 *Name = (PUNICODE_STRING)NameBuffer; 00573 } 00574 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00575 { 00576 if (NameBuffer != NULL) 00577 MIDL_user_free(NameBuffer); 00578 00579 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00580 } 00581 RpcEndExcept; 00582 00583 return Status; 00584 } 00585 00586 00587 /* 00588 * @implemented 00589 */ 00590 NTSTATUS 00591 WINAPI 00592 LsaLookupPrivilegeValue(IN LSA_HANDLE PolicyHandle, 00593 IN PLSA_UNICODE_STRING Name, 00594 OUT PLUID Value) 00595 { 00596 LUID Luid; 00597 NTSTATUS Status; 00598 00599 TRACE("(%p,%p,%p)\n", PolicyHandle, Name, Value); 00600 00601 RpcTryExcept 00602 { 00603 Status = LsarLookupPrivilegeValue(PolicyHandle, 00604 (PRPC_UNICODE_STRING)Name, 00605 &Luid); 00606 if (Status == STATUS_SUCCESS) 00607 *Value = Luid; 00608 } 00609 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00610 { 00611 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00612 } 00613 RpcEndExcept; 00614 00615 return Status; 00616 } 00617 00618 00619 /* 00620 * @implemented 00621 */ 00622 NTSTATUS 00623 WINAPI 00624 LsaLookupSids(IN LSA_HANDLE PolicyHandle, 00625 IN ULONG Count, 00626 IN PSID *Sids, 00627 OUT PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains, 00628 OUT PLSA_TRANSLATED_NAME *Names) 00629 { 00630 LSAPR_SID_ENUM_BUFFER SidEnumBuffer; 00631 LSAPR_TRANSLATED_NAMES TranslatedNames; 00632 ULONG MappedCount = 0; 00633 NTSTATUS Status; 00634 00635 TRACE("(%p,%u,%p,%p,%p)\n", PolicyHandle, Count, Sids, 00636 ReferencedDomains, Names); 00637 00638 if (Count == 0) 00639 return STATUS_INVALID_PARAMETER; 00640 00641 SidEnumBuffer.Entries = Count; 00642 SidEnumBuffer.SidInfo = (PLSAPR_SID_INFORMATION)Sids; 00643 00644 RpcTryExcept 00645 { 00646 *ReferencedDomains = NULL; 00647 *Names = NULL; 00648 00649 TranslatedNames.Entries = 0; 00650 TranslatedNames.Names = NULL; 00651 00652 Status = LsarLookupSids((LSAPR_HANDLE)PolicyHandle, 00653 &SidEnumBuffer, 00654 (PLSAPR_REFERENCED_DOMAIN_LIST *)ReferencedDomains, 00655 &TranslatedNames, 00656 LsapLookupWksta, 00657 &MappedCount); 00658 00659 *Names = (PLSA_TRANSLATED_NAME)TranslatedNames.Names; 00660 } 00661 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00662 { 00663 if (TranslatedNames.Names != NULL) 00664 { 00665 MIDL_user_free(TranslatedNames.Names); 00666 } 00667 00668 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00669 } 00670 RpcEndExcept; 00671 00672 return Status; 00673 } 00674 00675 00676 /****************************************************************************** 00677 * LsaNtStatusToWinError 00678 * 00679 * PARAMS 00680 * Status [I] 00681 * 00682 * @implemented 00683 */ 00684 ULONG 00685 WINAPI 00686 LsaNtStatusToWinError(IN NTSTATUS Status) 00687 { 00688 TRACE("(%lx)\n", Status); 00689 return RtlNtStatusToDosError(Status); 00690 } 00691 00692 00693 /* 00694 * @implemented 00695 */ 00696 NTSTATUS 00697 WINAPI 00698 LsaOpenAccount(IN LSA_HANDLE PolicyHandle, 00699 IN PSID AccountSid, 00700 IN ACCESS_MASK DesiredAccess, 00701 OUT PLSA_HANDLE AccountHandle) 00702 { 00703 NTSTATUS Status; 00704 00705 TRACE("(%p,%p,0x%08lx,%p)\n", PolicyHandle, AccountSid, DesiredAccess, AccountHandle); 00706 00707 RpcTryExcept 00708 { 00709 Status = LsarOpenAccount((LSAPR_HANDLE)PolicyHandle, 00710 AccountSid, 00711 DesiredAccess, 00712 AccountHandle); 00713 } 00714 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00715 { 00716 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00717 } 00718 RpcEndExcept; 00719 00720 return Status; 00721 } 00722 00723 00724 /****************************************************************************** 00725 * LsaOpenPolicy 00726 * 00727 * PARAMS 00728 * x1 [] 00729 * x2 [] 00730 * x3 [] 00731 * x4 [] 00732 * 00733 * @implemented 00734 */ 00735 NTSTATUS 00736 WINAPI 00737 LsaOpenPolicy(IN PLSA_UNICODE_STRING SystemName, 00738 IN PLSA_OBJECT_ATTRIBUTES ObjectAttributes, 00739 IN ACCESS_MASK DesiredAccess, 00740 OUT PLSA_HANDLE PolicyHandle) 00741 { 00742 NTSTATUS Status; 00743 00744 TRACE("LsaOpenPolicy (%s,%p,0x%08x,%p)\n", 00745 SystemName ? debugstr_w(SystemName->Buffer) : "(null)", 00746 ObjectAttributes, DesiredAccess, PolicyHandle); 00747 00748 /* FIXME: RPC should take care of this */ 00749 if (!LsapIsLocalComputer(SystemName)) 00750 return RPC_NT_SERVER_UNAVAILABLE; 00751 00752 RpcTryExcept 00753 { 00754 *PolicyHandle = NULL; 00755 00756 Status = LsarOpenPolicy(SystemName ? SystemName->Buffer : NULL, 00757 (PLSAPR_OBJECT_ATTRIBUTES)ObjectAttributes, 00758 DesiredAccess, 00759 PolicyHandle); 00760 } 00761 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00762 { 00763 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00764 } 00765 RpcEndExcept; 00766 00767 TRACE("LsaOpenPolicy() done (Status: 0x%08lx)\n", Status); 00768 00769 return Status; 00770 } 00771 00772 00773 /* 00774 * @implemented 00775 */ 00776 NTSTATUS 00777 WINAPI 00778 LsaOpenTrustedDomainByName(IN LSA_HANDLE PolicyHandle, 00779 IN PLSA_UNICODE_STRING TrustedDomainName, 00780 IN ACCESS_MASK DesiredAccess, 00781 OUT PLSA_HANDLE TrustedDomainHandle) 00782 { 00783 NTSTATUS Status; 00784 00785 TRACE("(%p,%p,0x%08x,%p)\n", PolicyHandle, TrustedDomainName, 00786 DesiredAccess, TrustedDomainHandle); 00787 00788 RpcTryExcept 00789 { 00790 Status = LsarOpenTrustedDomainByName((LSAPR_HANDLE)PolicyHandle, 00791 (PRPC_UNICODE_STRING)TrustedDomainName, 00792 DesiredAccess, 00793 TrustedDomainHandle); 00794 } 00795 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00796 { 00797 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00798 } 00799 RpcEndExcept; 00800 00801 return Status; 00802 } 00803 00804 00805 /* 00806 * @unimplemented 00807 */ 00808 NTSTATUS 00809 WINAPI 00810 LsaQueryDomainInformationPolicy( 00811 LSA_HANDLE PolicyHandle, 00812 POLICY_DOMAIN_INFORMATION_CLASS InformationClass, 00813 PVOID *Buffer) 00814 { 00815 FIXME("(%p,0x%08x,%p)\n", PolicyHandle, InformationClass, Buffer); 00816 return STATUS_NOT_IMPLEMENTED; 00817 } 00818 00819 00820 /* 00821 * @unimplemented 00822 */ 00823 NTSTATUS 00824 WINAPI 00825 LsaQueryForestTrustInformation( 00826 LSA_HANDLE PolicyHandle, 00827 PLSA_UNICODE_STRING TrustedDomainName, 00828 PLSA_FOREST_TRUST_INFORMATION * ForestTrustInfo) 00829 { 00830 FIXME("(%p,%p,%p) stub\n", PolicyHandle, TrustedDomainName, ForestTrustInfo); 00831 return STATUS_NOT_IMPLEMENTED; 00832 } 00833 00834 00835 /* 00836 * @implemented 00837 */ 00838 NTSTATUS 00839 WINAPI 00840 LsaQueryInformationPolicy(IN LSA_HANDLE PolicyHandle, 00841 IN POLICY_INFORMATION_CLASS InformationClass, 00842 OUT PVOID *Buffer) 00843 { 00844 PLSAPR_POLICY_INFORMATION PolicyInformation = NULL; 00845 NTSTATUS Status; 00846 00847 TRACE("(%p,0x%08x,%p)\n", PolicyHandle, InformationClass, Buffer); 00848 00849 RpcTryExcept 00850 { 00851 Status = LsarQueryInformationPolicy((LSAPR_HANDLE)PolicyHandle, 00852 InformationClass, 00853 &PolicyInformation); 00854 *Buffer = PolicyInformation; 00855 } 00856 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00857 { 00858 if (PolicyInformation != NULL) 00859 MIDL_user_free(PolicyInformation); 00860 00861 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00862 } 00863 RpcEndExcept; 00864 00865 TRACE("Done (Status: 0x%08x)\n", Status); 00866 00867 return Status; 00868 } 00869 00870 00871 /* 00872 * @unimplemented 00873 */ 00874 NTSTATUS 00875 WINAPI 00876 LsaQueryTrustedDomainInfo( 00877 LSA_HANDLE PolicyHandle, 00878 PSID TrustedDomainSid, 00879 TRUSTED_INFORMATION_CLASS InformationClass, 00880 PVOID *Buffer) 00881 { 00882 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainSid, InformationClass, Buffer); 00883 return STATUS_OBJECT_NAME_NOT_FOUND; 00884 } 00885 00886 00887 /* 00888 * @implemented 00889 */ 00890 NTSTATUS 00891 WINAPI 00892 LsaQueryTrustedDomainInfoByName(IN LSA_HANDLE PolicyHandle, 00893 IN PLSA_UNICODE_STRING TrustedDomainName, 00894 IN TRUSTED_INFORMATION_CLASS InformationClass, 00895 OUT PVOID *Buffer) 00896 { 00897 NTSTATUS Status; 00898 00899 TRACE("(%p,%p,%d,%p)\n", PolicyHandle, TrustedDomainName, InformationClass, Buffer); 00900 00901 if (InformationClass == TrustedDomainAuthInformationInternal || 00902 InformationClass == TrustedDomainFullInformationInternal) 00903 return STATUS_INVALID_INFO_CLASS; 00904 00905 RpcTryExcept 00906 { 00907 Status = LsarQueryTrustedDomainInfoByName((LSAPR_HANDLE)PolicyHandle, 00908 (PRPC_UNICODE_STRING)TrustedDomainName, 00909 InformationClass, 00910 (unsigned long *)Buffer); // Shuld be: (PLSAPR_POLICY_INFORMATION *)Buffer 00911 } 00912 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00913 { 00914 Status = I_RpcMapWin32Status(RpcExceptionCode()); 00915 } 00916 RpcEndExcept; 00917 00918 return Status; 00919 } 00920 00921 00922 /* 00923 * @implemented 00924 */ 00925 NTSTATUS 00926 WINAPI 00927 LsaRemoveAccountRights(IN LSA_HANDLE PolicyHandle, 00928 IN PSID AccountSid, 00929 IN BOOLEAN AllRights, 00930 IN PLSA_UNICODE_STRING UserRights, 00931 IN ULONG CountOfRights) 00932 { 00933 LSAPR_USER_RIGHT_SET UserRightSet; 00934 00935 TRACE("(%p,%p,%d,%p,0x%08x) stub\n", PolicyHandle, AccountSid, AllRights, UserRights, CountOfRights); 00936 00937 UserRightSet.Entries = CountOfRights; 00938 UserRightSet.UserRights = (PRPC_UNICODE_STRING)UserRights; 00939 00940 RpcTryExcept 00941 { 00942 LsarRemoveAccountRights((LSAPR_HANDLE)PolicyHandle, 00943 (PRPC_SID)AccountSid, 00944 AllRights, 00945 &UserRightSet); 00946 } 00947 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 00948 { 00949 I_RpcMapWin32Status(RpcExceptionCode()); 00950 } 00951 RpcEndExcept; 00952 00953 return STATUS_SUCCESS; 00954 } 00955 00956 00957 /* 00958 * @unimplemented 00959 */ 00960 NTSTATUS 00961 WINAPI 00962 LsaRetrievePrivateData( 00963 LSA_HANDLE PolicyHandle, 00964 PLSA_UNICODE_STRING KeyName, 00965 PLSA_UNICODE_STRING *PrivateData) 00966 { 00967 FIXME("(%p,%p,%p) stub\n", PolicyHandle, KeyName, PrivateData); 00968 return STATUS_OBJECT_NAME_NOT_FOUND; 00969 } 00970 00971 /* 00972 * @unimplemented 00973 */ 00974 NTSTATUS 00975 WINAPI 00976 LsaSetDomainInformationPolicy( 00977 LSA_HANDLE PolicyHandle, 00978 POLICY_DOMAIN_INFORMATION_CLASS InformationClass, 00979 PVOID Buffer) 00980 { 00981 FIXME("(%p,0x%08x,%p) stub\n", PolicyHandle, InformationClass, Buffer); 00982 return STATUS_UNSUCCESSFUL; 00983 } 00984 00985 00986 /* 00987 * @implemented 00988 */ 00989 NTSTATUS 00990 WINAPI 00991 LsaSetInformationPolicy(IN LSA_HANDLE PolicyHandle, 00992 IN POLICY_INFORMATION_CLASS InformationClass, 00993 IN PVOID Buffer) 00994 { 00995 NTSTATUS Status; 00996 00997 TRACE("(%p,0x%08x,%p)\n", PolicyHandle, InformationClass, Buffer); 00998 00999 RpcTryExcept 01000 { 01001 Status = LsarSetInformationPolicy((LSAPR_HANDLE)PolicyHandle, 01002 InformationClass, 01003 (PLSAPR_POLICY_INFORMATION)Buffer); 01004 } 01005 RpcExcept(EXCEPTION_EXECUTE_HANDLER) 01006 { 01007 Status = I_RpcMapWin32Status(RpcExceptionCode()); 01008 } 01009 RpcEndExcept; 01010 01011 return Status; 01012 } 01013 01014 01015 /* 01016 * @unimplemented 01017 */ 01018 NTSTATUS WINAPI LsaSetSecret( 01019 IN LSA_HANDLE SecretHandle, 01020 IN PLSA_UNICODE_STRING EncryptedCurrentValue, 01021 IN PLSA_UNICODE_STRING EncryptedOldValue) 01022 { 01023 FIXME("(%p,%p,%p) stub\n", SecretHandle, EncryptedCurrentValue, 01024 EncryptedOldValue); 01025 return STATUS_SUCCESS; 01026 } 01027 01028 /* 01029 * @unimplemented 01030 */ 01031 NTSTATUS 01032 WINAPI 01033 LsaSetForestTrustInformation( 01034 LSA_HANDLE PolicyHandle, 01035 PLSA_UNICODE_STRING TrustedDomainName, 01036 PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo, 01037 BOOL CheckOnly, 01038 PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo) 01039 { 01040 FIXME("(%p,%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainName, ForestTrustInfo, CheckOnly, CollisionInfo); 01041 return STATUS_NOT_IMPLEMENTED; 01042 } 01043 01044 /* 01045 * @unimplemented 01046 */ 01047 NTSTATUS 01048 WINAPI 01049 LsaSetTrustedDomainInfoByName( 01050 LSA_HANDLE PolicyHandle, 01051 PLSA_UNICODE_STRING TrustedDomainName, 01052 TRUSTED_INFORMATION_CLASS InformationClass, 01053 PVOID Buffer) 01054 { 01055 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainName, InformationClass, Buffer); 01056 return STATUS_SUCCESS; 01057 } 01058 01059 /* 01060 * @unimplemented 01061 */ 01062 NTSTATUS WINAPI LsaRegisterPolicyChangeNotification( 01063 POLICY_NOTIFICATION_INFORMATION_CLASS class, 01064 HANDLE event) 01065 { 01066 FIXME("(%d,%p) stub\n", class, event); 01067 return STATUS_UNSUCCESSFUL; 01068 } 01069 01070 /* 01071 * @unimplemented 01072 */ 01073 NTSTATUS 01074 WINAPI 01075 LsaSetTrustedDomainInformation( 01076 LSA_HANDLE PolicyHandle, 01077 PSID TrustedDomainSid, 01078 TRUSTED_INFORMATION_CLASS InformationClass, 01079 PVOID Buffer) 01080 { 01081 FIXME("(%p,%p,%d,%p) stub\n", PolicyHandle, TrustedDomainSid, InformationClass, Buffer); 01082 return STATUS_SUCCESS; 01083 } 01084 01085 /* 01086 * @unimplemented 01087 */ 01088 NTSTATUS 01089 WINAPI 01090 LsaStorePrivateData( 01091 LSA_HANDLE PolicyHandle, 01092 PLSA_UNICODE_STRING KeyName, 01093 PLSA_UNICODE_STRING PrivateData) 01094 { 01095 FIXME("(%p,%p,%p) stub\n", PolicyHandle, KeyName, PrivateData); 01096 return STATUS_OBJECT_NAME_NOT_FOUND; 01097 } 01098 01099 /* 01100 * @unimplemented 01101 */ 01102 NTSTATUS WINAPI LsaUnregisterPolicyChangeNotification( 01103 POLICY_NOTIFICATION_INFORMATION_CLASS class, 01104 HANDLE event) 01105 { 01106 FIXME("(%d,%p) stub\n", class, event); 01107 return STATUS_SUCCESS; 01108 } 01109 01110 /* 01111 * @unimplemented 01112 */ 01113 NTSTATUS 01114 WINAPI 01115 LsaGetUserName( 01116 PUNICODE_STRING *UserName, 01117 PUNICODE_STRING *DomainName) 01118 { 01119 FIXME("(%p,%p) stub\n", UserName, DomainName); 01120 return STATUS_NOT_IMPLEMENTED; 01121 } 01122 01123 /* 01124 * @unimplemented 01125 */ 01126 NTSTATUS 01127 WINAPI 01128 LsaQueryInfoTrustedDomain (DWORD Unknonw0, 01129 DWORD Unknonw1, 01130 DWORD Unknonw2) 01131 { 01132 FIXME("(%d,%d,%d) stub\n", Unknonw0, Unknonw1, Unknonw2); 01133 return STATUS_NOT_IMPLEMENTED; 01134 } 01135 01136 01137 /* EOF */ Generated on Sat May 26 2012 04:21:12 for ReactOS by
1.7.6.1
|