ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

lsa.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.