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

lsarpc.c
Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:       See COPYING in the top level directory
00003  * PROJECT:         Local Security Authority (LSA) Server
00004  * FILE:            reactos/dll/win32/lsasrv/lsarpc.h
00005  * PURPOSE:         RPC interface functions
00006  *
00007  * PROGRAMMERS:     Eric Kohl
00008  */
00009 
00010 /* INCLUDES ****************************************************************/
00011 
00012 #include "lsasrv.h"
00013 
00014 
00015 static RTL_CRITICAL_SECTION PolicyHandleTableLock;
00016 
00017 WINE_DEFAULT_DEBUG_CHANNEL(lsasrv);
00018 
00019 
00020 /* FUNCTIONS ***************************************************************/
00021 
00022 
00023 VOID
00024 LsarStartRpcServer(VOID)
00025 {
00026     RPC_STATUS Status;
00027 
00028     RtlInitializeCriticalSection(&PolicyHandleTableLock);
00029 
00030     TRACE("LsarStartRpcServer() called\n");
00031 
00032     Status = RpcServerUseProtseqEpW(L"ncacn_np",
00033                                     10,
00034                                     L"\\pipe\\lsarpc",
00035                                     NULL);
00036     if (Status != RPC_S_OK)
00037     {
00038         WARN("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
00039         return;
00040     }
00041 
00042     Status = RpcServerRegisterIf(lsarpc_v0_0_s_ifspec,
00043                                  NULL,
00044                                  NULL);
00045     if (Status != RPC_S_OK)
00046     {
00047         WARN("RpcServerRegisterIf() failed (Status %lx)\n", Status);
00048         return;
00049     }
00050 
00051     Status = RpcServerListen(1, 20, TRUE);
00052     if (Status != RPC_S_OK)
00053     {
00054         WARN("RpcServerListen() failed (Status %lx)\n", Status);
00055         return;
00056     }
00057 
00058     TRACE("LsarStartRpcServer() done\n");
00059 }
00060 
00061 
00062 void __RPC_USER LSAPR_HANDLE_rundown(LSAPR_HANDLE hHandle)
00063 {
00064 
00065 }
00066 
00067 
00068 /* Function 0 */
00069 NTSTATUS WINAPI LsarClose(
00070     LSAPR_HANDLE *ObjectHandle)
00071 {
00072     PLSA_DB_OBJECT DbObject;
00073     NTSTATUS Status = STATUS_SUCCESS;
00074 
00075     TRACE("0x%p\n", ObjectHandle);
00076 
00077 //    RtlEnterCriticalSection(&PolicyHandleTableLock);
00078 
00079     Status = LsapValidateDbObject(*ObjectHandle,
00080                                   LsaDbIgnoreObject,
00081                                   0,
00082                                   &DbObject);
00083     if (Status == STATUS_SUCCESS)
00084     {
00085         Status = LsapCloseDbObject(DbObject);
00086         *ObjectHandle = NULL;
00087     }
00088 
00089 //    RtlLeaveCriticalSection(&PolicyHandleTableLock);
00090 
00091     return Status;
00092 }
00093 
00094 
00095 /* Function 1 */
00096 NTSTATUS WINAPI LsarDelete(
00097     LSAPR_HANDLE ObjectHandle)
00098 {
00099     /* Deprecated */
00100     return STATUS_NOT_SUPPORTED;
00101 }
00102 
00103 
00104 /* Function 2 */
00105 NTSTATUS WINAPI LsarEnumeratePrivileges(
00106     LSAPR_HANDLE PolicyHandle,
00107     DWORD *EnumerationContext,
00108     PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer,
00109     DWORD PreferedMaximumLength)
00110 {
00111     UNIMPLEMENTED;
00112     return STATUS_NOT_IMPLEMENTED;
00113 }
00114 
00115 
00116 /* Function 3 */
00117 NTSTATUS WINAPI LsarQuerySecurityObject(
00118     LSAPR_HANDLE ObjectHandle,
00119     SECURITY_INFORMATION SecurityInformation,
00120     PLSAPR_SR_SECURITY_DESCRIPTOR *SecurityDescriptor)
00121 {
00122     UNIMPLEMENTED;
00123     return STATUS_NOT_IMPLEMENTED;
00124 }
00125 
00126 
00127 /* Function 4 */
00128 NTSTATUS WINAPI LsarSetSecurityObject(
00129     LSAPR_HANDLE ObjectHandle,
00130     SECURITY_INFORMATION SecurityInformation,
00131     PLSAPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor)
00132 {
00133     UNIMPLEMENTED;
00134     return STATUS_NOT_IMPLEMENTED;
00135 }
00136 
00137 
00138 /* Function 5 */
00139 NTSTATUS WINAPI LsarChangePassword(
00140     handle_t IDL_handle,
00141     PRPC_UNICODE_STRING String1,
00142     PRPC_UNICODE_STRING String2,
00143     PRPC_UNICODE_STRING String3,
00144     PRPC_UNICODE_STRING String4,
00145     PRPC_UNICODE_STRING String5)
00146 {
00147     /* Deprecated */
00148     return STATUS_NOT_IMPLEMENTED;
00149 }
00150 
00151 
00152 /* Function 6 */
00153 NTSTATUS WINAPI LsarOpenPolicy(
00154     LPWSTR SystemName,
00155     PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes,
00156     ACCESS_MASK DesiredAccess,
00157     LSAPR_HANDLE *PolicyHandle)
00158 {
00159     PLSA_DB_OBJECT PolicyObject;
00160     NTSTATUS Status;
00161 
00162     TRACE("LsarOpenPolicy called!\n");
00163 
00164     RtlEnterCriticalSection(&PolicyHandleTableLock);
00165 
00166     Status = LsapOpenDbObject(NULL,
00167                               L"Policy",
00168                               LsaDbPolicyObject,
00169                               DesiredAccess,
00170                               &PolicyObject);
00171 
00172     RtlLeaveCriticalSection(&PolicyHandleTableLock);
00173 
00174     if (NT_SUCCESS(Status))
00175         *PolicyHandle = (LSAPR_HANDLE)PolicyObject;
00176 
00177     TRACE("LsarOpenPolicy done!\n");
00178 
00179     return Status;
00180 }
00181 
00182 
00183 /* Function 7 */
00184 NTSTATUS WINAPI LsarQueryInformationPolicy(
00185     LSAPR_HANDLE PolicyHandle,
00186     POLICY_INFORMATION_CLASS InformationClass,
00187     PLSAPR_POLICY_INFORMATION *PolicyInformation)
00188 {
00189     PLSA_DB_OBJECT DbObject;
00190     NTSTATUS Status;
00191 
00192     TRACE("LsarQueryInformationPolicy(%p,0x%08x,%p)\n",
00193           PolicyHandle, InformationClass, PolicyInformation);
00194 
00195     if (PolicyInformation)
00196     {
00197         TRACE("*PolicyInformation %p\n", *PolicyInformation);
00198     }
00199 
00200     Status = LsapValidateDbObject(PolicyHandle,
00201                                   LsaDbPolicyObject,
00202                                   0, /* FIXME */
00203                                   &DbObject);
00204     if (!NT_SUCCESS(Status))
00205         return Status;
00206 
00207     switch (InformationClass)
00208     {
00209         case PolicyAuditEventsInformation:   /* 2 */
00210             Status = LsarQueryAuditEvents(PolicyHandle,
00211                                           PolicyInformation);
00212             break;
00213 
00214         case PolicyPrimaryDomainInformation: /* 3 */
00215             Status = LsarQueryPrimaryDomain(PolicyHandle,
00216                                             PolicyInformation);
00217             break;
00218 
00219         case PolicyAccountDomainInformation: /* 5 */
00220             Status = LsarQueryAccountDomain(PolicyHandle,
00221                                             PolicyInformation);
00222             break;
00223 
00224         case PolicyDnsDomainInformation:     /* 12 (0xc) */
00225             Status = LsarQueryDnsDomain(PolicyHandle,
00226                                         PolicyInformation);
00227             break;
00228 
00229         case PolicyAuditLogInformation:
00230         case PolicyPdAccountInformation:
00231         case PolicyLsaServerRoleInformation:
00232         case PolicyReplicaSourceInformation:
00233         case PolicyDefaultQuotaInformation:
00234         case PolicyModificationInformation:
00235         case PolicyAuditFullSetInformation:
00236         case PolicyAuditFullQueryInformation:
00237         case PolicyEfsInformation:
00238             FIXME("category not implemented\n");
00239             Status = STATUS_UNSUCCESSFUL;
00240             break;
00241     }
00242 
00243     return Status;
00244 }
00245 
00246 
00247 /* Function 8 */
00248 NTSTATUS WINAPI LsarSetInformationPolicy(
00249     LSAPR_HANDLE PolicyHandle,
00250     POLICY_INFORMATION_CLASS InformationClass,
00251     PLSAPR_POLICY_INFORMATION PolicyInformation)
00252 {
00253     PLSA_DB_OBJECT DbObject;
00254     NTSTATUS Status;
00255 
00256     TRACE("LsarSetInformationPolicy(%p,0x%08x,%p)\n",
00257           PolicyHandle, InformationClass, PolicyInformation);
00258 
00259     if (PolicyInformation)
00260     {
00261         TRACE("*PolicyInformation %p\n", *PolicyInformation);
00262     }
00263 
00264     Status = LsapValidateDbObject(PolicyHandle,
00265                                   LsaDbPolicyObject,
00266                                   0, /* FIXME */
00267                                   &DbObject);
00268     if (!NT_SUCCESS(Status))
00269         return Status;
00270 
00271     switch (InformationClass)
00272     {
00273         case PolicyAuditEventsInformation:
00274             Status = STATUS_NOT_IMPLEMENTED;
00275             break;
00276 
00277         case PolicyPrimaryDomainInformation:
00278             Status = LsarSetPrimaryDomain(PolicyHandle,
00279                                           (PLSAPR_POLICY_PRIMARY_DOM_INFO)PolicyInformation);
00280             break;
00281 
00282         case PolicyAccountDomainInformation:
00283             Status = LsarSetAccountDomain(PolicyHandle,
00284                                           (PLSAPR_POLICY_ACCOUNT_DOM_INFO)PolicyInformation);
00285             break;
00286 
00287         case PolicyDnsDomainInformation:
00288             Status = LsarSetDnsDomain(PolicyHandle,
00289                                       (PLSAPR_POLICY_DNS_DOMAIN_INFO)PolicyInformation);
00290             break;
00291 
00292         case PolicyLsaServerRoleInformation:
00293             Status = STATUS_NOT_IMPLEMENTED;
00294             break;
00295 
00296         default:
00297             Status = STATUS_INVALID_PARAMETER;
00298             break;
00299     }
00300 
00301     return Status;
00302 }
00303 
00304 
00305 /* Function 9 */
00306 NTSTATUS WINAPI LsarClearAuditLog(
00307     LSAPR_HANDLE ObjectHandle)
00308 {
00309     /* Deprecated */
00310     return STATUS_NOT_IMPLEMENTED;
00311 }
00312 
00313 
00314 /* Function 10 */
00315 NTSTATUS WINAPI LsarCreateAccount(
00316     LSAPR_HANDLE PolicyHandle,
00317     PRPC_SID AccountSid,
00318     ACCESS_MASK DesiredAccess,
00319     LSAPR_HANDLE *AccountHandle)
00320 {
00321     PLSA_DB_OBJECT PolicyObject;
00322     PLSA_DB_OBJECT AccountsObject = NULL;
00323     PLSA_DB_OBJECT AccountObject = NULL;
00324     LPWSTR SidString = NULL;
00325     NTSTATUS Status = STATUS_SUCCESS;
00326 
00327     /* Validate the PolicyHandle */
00328     Status = LsapValidateDbObject(PolicyHandle,
00329                                   LsaDbPolicyObject,
00330                                   POLICY_CREATE_ACCOUNT,
00331                                   &PolicyObject);
00332     if (!NT_SUCCESS(Status))
00333     {
00334         ERR("LsapValidateDbObject returned 0x%08lx\n", Status);
00335         return Status;
00336     }
00337 
00338     /* Open the Accounts object */
00339     Status = LsapOpenDbObject(PolicyObject,
00340                               L"Accounts",
00341                               LsaDbContainerObject,
00342                               0,
00343                               &AccountsObject);
00344     if (!NT_SUCCESS(Status))
00345     {
00346         ERR("LsapCreateDbObject (Accounts) failed (Status 0x%08lx)\n", Status);
00347         goto done;
00348     }
00349 
00350     /* Create SID string */
00351     if (!ConvertSidToStringSid((PSID)AccountSid,
00352                                &SidString))
00353     {
00354         ERR("ConvertSidToStringSid failed\n");
00355         Status = STATUS_INVALID_PARAMETER;
00356         goto done;
00357     }
00358 
00359     /* Create the Account object */
00360     Status = LsapCreateDbObject(AccountsObject,
00361                                 SidString,
00362                                 LsaDbAccountObject,
00363                                 DesiredAccess,
00364                                 &AccountObject);
00365     if (!NT_SUCCESS(Status))
00366     {
00367         ERR("LsapCreateDbObject (Account) failed (Status 0x%08lx)\n", Status);
00368         goto done;
00369     }
00370 
00371     /* Set the Sid attribute */
00372     Status = LsapSetObjectAttribute(AccountObject,
00373                                     L"Sid",
00374                                     (PVOID)AccountSid,
00375                                     GetLengthSid(AccountSid));
00376 
00377 done:
00378     if (SidString != NULL)
00379         LocalFree(SidString);
00380 
00381     if (!NT_SUCCESS(Status))
00382     {
00383         if (AccountObject != NULL)
00384             LsapCloseDbObject(AccountObject);
00385     }
00386     else
00387     {
00388         *AccountHandle = (LSAPR_HANDLE)AccountObject;
00389     }
00390 
00391     if (AccountsObject != NULL)
00392         LsapCloseDbObject(AccountsObject);
00393 
00394     return STATUS_SUCCESS;
00395 }
00396 
00397 
00398 /* Function 11 */
00399 NTSTATUS WINAPI LsarEnumerateAccounts(
00400     LSAPR_HANDLE PolicyHandle,
00401     DWORD *EnumerationContext,
00402     PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer,
00403     DWORD PreferedMaximumLength)
00404 {
00405     UNIMPLEMENTED;
00406     return STATUS_NOT_IMPLEMENTED;
00407 }
00408 
00409 
00410 /* Function 12 */
00411 NTSTATUS WINAPI LsarCreateTrustedDomain(
00412     LSAPR_HANDLE PolicyHandle,
00413     PLSAPR_TRUST_INFORMATION TrustedDomainInformation,
00414     ACCESS_MASK DesiredAccess,
00415     LSAPR_HANDLE *TrustedDomainHandle)
00416 {
00417     UNIMPLEMENTED;
00418     return STATUS_NOT_IMPLEMENTED;
00419 }
00420 
00421 
00422 /* Function 13 */
00423 NTSTATUS WINAPI LsarEnumerateTrustedDomains(
00424     LSAPR_HANDLE PolicyHandle,
00425     DWORD *EnumerationContext,
00426     PLSAPR_TRUSTED_ENUM_BUFFER EnumerationBuffer,
00427     DWORD PreferedMaximumLength)
00428 {
00429     UNIMPLEMENTED;
00430     return STATUS_NOT_IMPLEMENTED;
00431 }
00432 
00433 
00434 /* Function 14 */
00435 NTSTATUS WINAPI LsarLookupNames(
00436     LSAPR_HANDLE PolicyHandle,
00437     DWORD Count,
00438     PRPC_UNICODE_STRING Names,
00439     PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
00440     PLSAPR_TRANSLATED_SIDS TranslatedSids,
00441     LSAP_LOOKUP_LEVEL LookupLevel,
00442     DWORD *MappedCount)
00443 {
00444     SID_IDENTIFIER_AUTHORITY IdentifierAuthority = {SECURITY_NT_AUTHORITY};
00445     static const UNICODE_STRING DomainName = RTL_CONSTANT_STRING(L"DOMAIN");
00446     PLSAPR_REFERENCED_DOMAIN_LIST OutputDomains = NULL;
00447     PLSA_TRANSLATED_SID OutputSids = NULL;
00448     ULONG OutputSidsLength;
00449     ULONG i;
00450     PSID Sid;
00451     ULONG SidLength;
00452     NTSTATUS Status;
00453 
00454     TRACE("LsarLookupNames(%p, %lu, %p, %p, %p, %d, %p)\n",
00455           PolicyHandle, Count, Names, ReferencedDomains, TranslatedSids,
00456           LookupLevel, MappedCount);
00457 
00458     TranslatedSids->Entries = Count;
00459     TranslatedSids->Sids = NULL;
00460     *ReferencedDomains = NULL;
00461 
00462     OutputSidsLength = Count * sizeof(LSA_TRANSLATED_SID);
00463     OutputSids = MIDL_user_allocate(OutputSidsLength);
00464     if (OutputSids == NULL)
00465     {
00466         return STATUS_INSUFFICIENT_RESOURCES;
00467     }
00468 
00469     RtlZeroMemory(OutputSids, OutputSidsLength);
00470 
00471     OutputDomains = MIDL_user_allocate(sizeof(LSAPR_REFERENCED_DOMAIN_LIST));
00472     if (OutputDomains == NULL)
00473     {
00474         MIDL_user_free(OutputSids);
00475         return STATUS_INSUFFICIENT_RESOURCES;
00476     }
00477 
00478     OutputDomains->Entries = Count;
00479     OutputDomains->Domains = MIDL_user_allocate(Count * sizeof(LSA_TRUST_INFORMATION));
00480     if (OutputDomains->Domains == NULL)
00481     {
00482         MIDL_user_free(OutputDomains);
00483         MIDL_user_free(OutputSids);
00484         return STATUS_INSUFFICIENT_RESOURCES;
00485     }
00486 
00487     Status = RtlAllocateAndInitializeSid(&IdentifierAuthority,
00488                                          2,
00489                                          SECURITY_BUILTIN_DOMAIN_RID,
00490                                          DOMAIN_ALIAS_RID_ADMINS,
00491                                          0, 0, 0, 0, 0, 0,
00492                                          &Sid);
00493     if (!NT_SUCCESS(Status))
00494     {
00495         MIDL_user_free(OutputDomains->Domains);
00496         MIDL_user_free(OutputDomains);
00497         MIDL_user_free(OutputSids);
00498         return Status;
00499     }
00500 
00501     SidLength = RtlLengthSid(Sid);
00502 
00503     for (i = 0; i < Count; i++)
00504     {
00505         OutputDomains->Domains[i].Sid = MIDL_user_allocate(SidLength);
00506         RtlCopyMemory(OutputDomains->Domains[i].Sid, Sid, SidLength);
00507 
00508         OutputDomains->Domains[i].Name.Buffer = MIDL_user_allocate(DomainName.MaximumLength);
00509         OutputDomains->Domains[i].Name.Length = DomainName.Length;
00510         OutputDomains->Domains[i].Name.MaximumLength = DomainName.MaximumLength;
00511         RtlCopyMemory(OutputDomains->Domains[i].Name.Buffer, DomainName.Buffer, DomainName.MaximumLength);
00512     }
00513 
00514     for (i = 0; i < Count; i++)
00515     {
00516         OutputSids[i].Use = SidTypeWellKnownGroup;
00517         OutputSids[i].RelativeId = DOMAIN_USER_RID_ADMIN; //DOMAIN_ALIAS_RID_ADMINS;
00518         OutputSids[i].DomainIndex = i;
00519     }
00520 
00521     *ReferencedDomains = OutputDomains;
00522 
00523     *MappedCount = Count;
00524 
00525     TranslatedSids->Entries = Count;
00526     TranslatedSids->Sids = OutputSids;
00527 
00528     return STATUS_SUCCESS;
00529 }
00530 
00531 
00532 /* Function 15 */
00533 NTSTATUS WINAPI LsarLookupSids(
00534     LSAPR_HANDLE PolicyHandle,
00535     PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
00536     PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
00537     PLSAPR_TRANSLATED_NAMES TranslatedNames,
00538     LSAP_LOOKUP_LEVEL LookupLevel,
00539     DWORD *MappedCount)
00540 {
00541     SID_IDENTIFIER_AUTHORITY IdentifierAuthority = {SECURITY_NT_AUTHORITY};
00542     static const UNICODE_STRING DomainName = RTL_CONSTANT_STRING(L"DOMAIN");
00543     PLSAPR_REFERENCED_DOMAIN_LIST OutputDomains = NULL;
00544     PLSAPR_TRANSLATED_NAME OutputNames = NULL;
00545     ULONG OutputNamesLength;
00546     ULONG i;
00547     PSID Sid;
00548     ULONG SidLength;
00549     NTSTATUS Status;
00550 
00551     TRACE("LsarLookupSids(%p, %p, %p, %p, %d, %p)\n",
00552           PolicyHandle, SidEnumBuffer, ReferencedDomains, TranslatedNames,
00553           LookupLevel, MappedCount);
00554 
00555     TranslatedNames->Entries = SidEnumBuffer->Entries;
00556     TranslatedNames->Names = NULL;
00557     *ReferencedDomains = NULL;
00558 
00559     OutputNamesLength = SidEnumBuffer->Entries * sizeof(LSA_TRANSLATED_NAME);
00560     OutputNames = MIDL_user_allocate(OutputNamesLength);
00561     if (OutputNames == NULL)
00562     {
00563         return STATUS_INSUFFICIENT_RESOURCES;
00564     }
00565 
00566     RtlZeroMemory(OutputNames, OutputNamesLength);
00567 
00568     OutputDomains = MIDL_user_allocate(sizeof(LSAPR_REFERENCED_DOMAIN_LIST));
00569     if (OutputDomains == NULL)
00570     {
00571         MIDL_user_free(OutputNames);
00572         return STATUS_INSUFFICIENT_RESOURCES;
00573     }
00574 
00575     OutputDomains->Entries = SidEnumBuffer->Entries;
00576     OutputDomains->Domains = MIDL_user_allocate(SidEnumBuffer->Entries * sizeof(LSA_TRUST_INFORMATION));
00577     if (OutputDomains->Domains == NULL)
00578     {
00579         MIDL_user_free(OutputDomains);
00580         MIDL_user_free(OutputNames);
00581         return STATUS_INSUFFICIENT_RESOURCES;
00582     }
00583 
00584     Status = RtlAllocateAndInitializeSid(&IdentifierAuthority,
00585                                          2,
00586                                          SECURITY_BUILTIN_DOMAIN_RID,
00587                                          DOMAIN_ALIAS_RID_ADMINS,
00588                                          0, 0, 0, 0, 0, 0,
00589                                          &Sid);
00590     if (!NT_SUCCESS(Status))
00591     {
00592         MIDL_user_free(OutputDomains->Domains);
00593         MIDL_user_free(OutputDomains);
00594         MIDL_user_free(OutputNames);
00595         return Status;
00596     }
00597 
00598     SidLength = RtlLengthSid(Sid);
00599 
00600     for (i = 0; i < SidEnumBuffer->Entries; i++)
00601     {
00602         OutputDomains->Domains[i].Sid = MIDL_user_allocate(SidLength);
00603         RtlCopyMemory(OutputDomains->Domains[i].Sid, Sid, SidLength);
00604 
00605         OutputDomains->Domains[i].Name.Buffer = MIDL_user_allocate(DomainName.MaximumLength);
00606         OutputDomains->Domains[i].Name.Length = DomainName.Length;
00607         OutputDomains->Domains[i].Name.MaximumLength = DomainName.MaximumLength;
00608         RtlCopyMemory(OutputDomains->Domains[i].Name.Buffer, DomainName.Buffer, DomainName.MaximumLength);
00609     }
00610 
00611     Status = LsapLookupSids(SidEnumBuffer,
00612                             OutputNames);
00613 
00614     *ReferencedDomains = OutputDomains;
00615 
00616     *MappedCount = SidEnumBuffer->Entries;
00617 
00618     TranslatedNames->Entries = SidEnumBuffer->Entries;
00619     TranslatedNames->Names = OutputNames;
00620 
00621     return Status;
00622 }
00623 
00624 
00625 /* Function 16 */
00626 NTSTATUS WINAPI LsarCreateSecret(
00627     LSAPR_HANDLE PolicyHandle,
00628     PRPC_UNICODE_STRING SecretName,
00629     ACCESS_MASK DesiredAccess,
00630     LSAPR_HANDLE *SecretHandle)
00631 {
00632     UNIMPLEMENTED;
00633     return STATUS_NOT_IMPLEMENTED;
00634 }
00635 
00636 
00637 /* Function 17 */
00638 NTSTATUS WINAPI LsarOpenAccount(
00639     LSAPR_HANDLE PolicyHandle,
00640     PRPC_SID AccountSid,
00641     ACCESS_MASK DesiredAccess,
00642     LSAPR_HANDLE *AccountHandle)
00643 {
00644     PLSA_DB_OBJECT PolicyObject;
00645     PLSA_DB_OBJECT AccountsObject = NULL;
00646     PLSA_DB_OBJECT AccountObject = NULL;
00647     LPWSTR SidString = NULL;
00648     NTSTATUS Status = STATUS_SUCCESS;
00649 
00650     /* Validate the PolicyHandle */
00651     Status = LsapValidateDbObject(PolicyHandle,
00652                                   LsaDbPolicyObject,
00653                                   POLICY_CREATE_ACCOUNT,
00654                                   &PolicyObject);
00655     if (!NT_SUCCESS(Status))
00656     {
00657         ERR("LsapValidateDbObject returned 0x%08lx\n", Status);
00658         return Status;
00659     }
00660 
00661     /* Open the Accounts object */
00662     Status = LsapOpenDbObject(PolicyObject,
00663                               L"Accounts",
00664                               LsaDbContainerObject,
00665                               0,
00666                               &AccountsObject);
00667     if (!NT_SUCCESS(Status))
00668     {
00669         ERR("LsapCreateDbObject (Accounts) failed (Status 0x%08lx)\n", Status);
00670         goto done;
00671     }
00672 
00673     /* Create SID string */
00674     if (!ConvertSidToStringSid((PSID)AccountSid,
00675                                &SidString))
00676     {
00677         ERR("ConvertSidToStringSid failed\n");
00678         Status = STATUS_INVALID_PARAMETER;
00679         goto done;
00680     }
00681 
00682     /* Create the Account object */
00683     Status = LsapOpenDbObject(AccountsObject,
00684                               SidString,
00685                               LsaDbAccountObject,
00686                               DesiredAccess,
00687                               &AccountObject);
00688     if (!NT_SUCCESS(Status))
00689     {
00690         ERR("LsapOpenDbObject (Account) failed (Status 0x%08lx)\n", Status);
00691         goto done;
00692     }
00693 
00694     /* Set the Sid attribute */
00695     Status = LsapSetObjectAttribute(AccountObject,
00696                                     L"Sid",
00697                                     (PVOID)AccountSid,
00698                                     GetLengthSid(AccountSid));
00699 
00700 done:
00701     if (SidString != NULL)
00702         LocalFree(SidString);
00703 
00704     if (!NT_SUCCESS(Status))
00705     {
00706         if (AccountObject != NULL)
00707             LsapCloseDbObject(AccountObject);
00708     }
00709     else
00710     {
00711         *AccountHandle = (LSAPR_HANDLE)AccountObject;
00712     }
00713 
00714     if (AccountsObject != NULL)
00715         LsapCloseDbObject(AccountsObject);
00716 
00717     return STATUS_SUCCESS;
00718 }
00719 
00720 
00721 /* Function 18 */
00722 NTSTATUS WINAPI LsarEnumeratePrivilegesAccount(
00723     LSAPR_HANDLE AccountHandle,
00724     PLSAPR_PRIVILEGE_SET *Privileges)
00725 {
00726     PLSA_DB_OBJECT AccountObject;
00727     ULONG PrivilegeSetSize = 0;
00728     PLSAPR_PRIVILEGE_SET PrivilegeSet = NULL;
00729     NTSTATUS Status;
00730 
00731     *Privileges = NULL;
00732 
00733     /* Validate the AccountHandle */
00734     Status = LsapValidateDbObject(AccountHandle,
00735                                   LsaDbAccountObject,
00736                                   ACCOUNT_VIEW,
00737                                   &AccountObject);
00738     if (!NT_SUCCESS(Status))
00739     {
00740         ERR("LsapValidateDbObject returned 0x%08lx\n", Status);
00741         return Status;
00742     }
00743 
00744     /* Get the size of the privilege set */
00745     Status = LsapGetObjectAttribute(AccountObject,
00746                                     L"Privilgs",
00747                                     NULL,
00748                                     &PrivilegeSetSize);
00749     if (!NT_SUCCESS(Status))
00750         return Status;
00751 
00752     /* Allocate a buffer for the privilege set */
00753     PrivilegeSet = MIDL_user_allocate(PrivilegeSetSize);
00754     if (PrivilegeSet == NULL)
00755         return STATUS_NO_MEMORY;
00756 
00757     /* Get the privilege set */
00758     Status = LsapGetObjectAttribute(AccountObject,
00759                                     L"Privilgs",
00760                                     PrivilegeSet,
00761                                     &PrivilegeSetSize);
00762     if (!NT_SUCCESS(Status))
00763     {
00764         MIDL_user_free(PrivilegeSet);
00765         return Status;
00766     }
00767 
00768     /* Return a pointer to the privilege set */
00769     *Privileges = PrivilegeSet;
00770 
00771     return STATUS_SUCCESS;
00772 }
00773 
00774 
00775 /* Function 19 */
00776 NTSTATUS WINAPI LsarAddPrivilegesToAccount(
00777     LSAPR_HANDLE AccountHandle,
00778     PLSAPR_PRIVILEGE_SET Privileges)
00779 {
00780     PLSA_DB_OBJECT AccountObject;
00781     PPRIVILEGE_SET CurrentPrivileges = NULL;
00782     PPRIVILEGE_SET NewPrivileges = NULL;
00783     ULONG PrivilegeSetSize = 0;
00784     ULONG PrivilegeCount;
00785     ULONG i, j;
00786     BOOL bFound;
00787     NTSTATUS Status;
00788 
00789     /* Validate the AccountHandle */
00790     Status = LsapValidateDbObject(AccountHandle,
00791                                   LsaDbAccountObject,
00792                                   ACCOUNT_ADJUST_PRIVILEGES,
00793                                   &AccountObject);
00794     if (!NT_SUCCESS(Status))
00795     {
00796         ERR("LsapValidateDbObject returned 0x%08lx\n", Status);
00797         return Status;
00798     }
00799 
00800     Status = LsapGetObjectAttribute(AccountObject,
00801                                     L"Privilgs",
00802                                     NULL,
00803                                     &PrivilegeSetSize);
00804     if (!NT_SUCCESS(Status) || PrivilegeSetSize == 0)
00805     {
00806         /* The Privilgs attribute does not exist */
00807 
00808         PrivilegeSetSize = sizeof(PRIVILEGE_SET) +
00809                            (Privileges->PrivilegeCount - 1) * sizeof(LUID_AND_ATTRIBUTES);
00810         Status = LsapSetObjectAttribute(AccountObject,
00811                                         L"Privilgs",
00812                                         Privileges,
00813                                         PrivilegeSetSize);
00814     }
00815     else
00816     {
00817         /* The Privilgs attribute exists */
00818 
00819         /* Allocate memory for the stored privilege set */
00820         CurrentPrivileges = MIDL_user_allocate(PrivilegeSetSize);
00821         if (CurrentPrivileges == NULL)
00822             return STATUS_NO_MEMORY;
00823 
00824         /* Get the current privilege set */
00825         Status = LsapGetObjectAttribute(AccountObject,
00826                                         L"Privilgs",
00827                                         CurrentPrivileges,
00828                                         &PrivilegeSetSize);
00829         if (!NT_SUCCESS(Status))
00830         {
00831             TRACE("LsapGetObjectAttribute() failed (Status 0x%08lx)\n", Status);
00832             goto done;
00833         }
00834 
00835         PrivilegeCount = CurrentPrivileges->PrivilegeCount;
00836         TRACE("Current privilege count: %lu\n", PrivilegeCount);
00837 
00838         /* Calculate the number privileges in the combined privilege set */
00839         for (i = 0; i < Privileges->PrivilegeCount; i++)
00840         {
00841             bFound = FALSE;
00842             for (j = 0; j < CurrentPrivileges->PrivilegeCount; j++)
00843             {
00844                 if (RtlEqualLuid(&(Privileges->Privilege[i].Luid),
00845                                  &(CurrentPrivileges->Privilege[i].Luid)))
00846                 {
00847                     bFound = TRUE;
00848                     break;
00849                 }
00850             }
00851 
00852             if (bFound == FALSE)
00853             {
00854                 TRACE("Found new privilege\n");
00855                 PrivilegeCount++;
00856             }
00857         }
00858         TRACE("New privilege count: %lu\n", PrivilegeCount);
00859 
00860         /* Calculate the size of the new privilege set and allocate it */
00861         PrivilegeSetSize = sizeof(PRIVILEGE_SET) +
00862                            (PrivilegeCount - 1) * sizeof(LUID_AND_ATTRIBUTES);
00863         NewPrivileges = MIDL_user_allocate(PrivilegeSetSize);
00864         if (NewPrivileges == NULL)
00865         {
00866             Status = STATUS_NO_MEMORY;
00867             goto done;
00868         }
00869 
00870         /* Initialize the new privilege set */
00871         NewPrivileges->PrivilegeCount = PrivilegeCount;
00872         NewPrivileges->Control = 0;
00873 
00874         /* Copy all privileges from the current privilege set */
00875         RtlCopyLuidAndAttributesArray(CurrentPrivileges->PrivilegeCount,
00876                                       &(CurrentPrivileges->Privilege[0]),
00877                                       &(NewPrivileges->Privilege[0]));
00878 
00879         /* Add new privileges to the new privilege set */
00880         PrivilegeCount = CurrentPrivileges->PrivilegeCount;
00881         for (i = 0; i < Privileges->PrivilegeCount; i++)
00882         {
00883             bFound = FALSE;
00884             for (j = 0; j < CurrentPrivileges->PrivilegeCount; j++)
00885             {
00886                 if (RtlEqualLuid(&(Privileges->Privilege[i].Luid),
00887                                  &(CurrentPrivileges->Privilege[i].Luid)))
00888                 {
00889                     /* Overwrite attributes if a matching privilege was found */
00890                     NewPrivileges->Privilege[j].Attributes = Privileges->Privilege[i].Attributes;
00891 
00892                     bFound = TRUE;
00893                     break;
00894                 }
00895             }
00896 
00897             if (bFound == FALSE)
00898             {
00899                 /* Copy the new privilege */
00900                 RtlCopyLuidAndAttributesArray(1,
00901                                               (PLUID_AND_ATTRIBUTES)&(Privileges->Privilege[i]),
00902                                               &(NewPrivileges->Privilege[PrivilegeCount]));
00903                 PrivilegeCount++;
00904             }
00905         }
00906 
00907         /* Set the new priivliege set */
00908         Status = LsapSetObjectAttribute(AccountObject,
00909                                         L"Privilgs",
00910                                         NewPrivileges,
00911                                         PrivilegeSetSize);
00912     }
00913 
00914 done:
00915     if (CurrentPrivileges != NULL)
00916         MIDL_user_free(CurrentPrivileges);
00917 
00918     if (NewPrivileges != NULL)
00919         MIDL_user_free(NewPrivileges);
00920 
00921     return Status;
00922 }
00923 
00924 
00925 /* Function 20 */
00926 NTSTATUS WINAPI LsarRemovePrivilegesFromAccount(
00927     LSAPR_HANDLE AccountHandle,
00928     BOOL AllPrivileges,
00929     PLSAPR_PRIVILEGE_SET Privileges)
00930 {
00931     UNIMPLEMENTED;
00932     return STATUS_NOT_IMPLEMENTED;
00933 }
00934 
00935 
00936 /* Function 21 */
00937 NTSTATUS WINAPI LsarGetQuotasForAccount(
00938     LSAPR_HANDLE AccountHandle,
00939     PQUOTA_LIMITS QuotaLimits)
00940 {
00941     UNIMPLEMENTED;
00942     return STATUS_NOT_IMPLEMENTED;
00943 }
00944 
00945 
00946 /* Function 22 */
00947 NTSTATUS WINAPI LsarSetQuotasForAccount(
00948     LSAPR_HANDLE AccountHandle,
00949     PQUOTA_LIMITS QuotaLimits)
00950 {
00951     UNIMPLEMENTED;
00952     return STATUS_NOT_IMPLEMENTED;
00953 }
00954 
00955 
00956 /* Function 23 */
00957 NTSTATUS WINAPI LsarGetSystemAccessAccount(
00958     LSAPR_HANDLE AccountHandle,
00959     ACCESS_MASK *SystemAccess)
00960 {
00961     UNIMPLEMENTED;
00962     return STATUS_NOT_IMPLEMENTED;
00963 }
00964 
00965 
00966 /* Function 24 */
00967 NTSTATUS WINAPI LsarSetSystemAccessAccount(
00968     LSAPR_HANDLE AccountHandle,
00969     ACCESS_MASK SystemAccess)
00970 {
00971     UNIMPLEMENTED;
00972     return STATUS_NOT_IMPLEMENTED;
00973 }
00974 
00975 
00976 /* Function 25 */
00977 NTSTATUS WINAPI LsarOpenTrustedDomain(
00978     LSAPR_HANDLE PolicyHandle,
00979     PRPC_SID TrustedDomainSid,
00980     ACCESS_MASK DesiredAccess,
00981     LSAPR_HANDLE *TrustedDomainHandle)
00982 {
00983     UNIMPLEMENTED;
00984     return STATUS_NOT_IMPLEMENTED;
00985 }
00986 
00987 
00988 /* Function 26 */
00989 NTSTATUS WINAPI LsarQueryInfoTrustedDomain(
00990     LSAPR_HANDLE TrustedDomainHandle,
00991     TRUSTED_INFORMATION_CLASS InformationClass,
00992     PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation)
00993 {
00994     UNIMPLEMENTED;
00995     return STATUS_NOT_IMPLEMENTED;
00996 }
00997 
00998 
00999 /* Function 27 */
01000 NTSTATUS WINAPI LsarSetInformationTrustedDomain(
01001     LSAPR_HANDLE TrustedDomainHandle,
01002     TRUSTED_INFORMATION_CLASS InformationClass,
01003     PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation)
01004 {
01005     UNIMPLEMENTED;
01006     return STATUS_NOT_IMPLEMENTED;
01007 }
01008 
01009 
01010 /* Function 28 */
01011 NTSTATUS WINAPI LsarOpenSecret(
01012     LSAPR_HANDLE PolicyHandle,
01013     PRPC_UNICODE_STRING SecretName,
01014     ACCESS_MASK DesiredAccess,
01015     LSAPR_HANDLE *SecretHandle)
01016 {
01017     UNIMPLEMENTED;
01018     return STATUS_NOT_IMPLEMENTED;
01019 }
01020 
01021 
01022 /* Function 29 */
01023 NTSTATUS WINAPI LsarSetSecret(
01024     LSAPR_HANDLE *SecretHandle,
01025     PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue,
01026     PLSAPR_CR_CIPHER_VALUE EncryptedOldValue)
01027 {
01028     UNIMPLEMENTED;
01029     return STATUS_NOT_IMPLEMENTED;
01030 }
01031 
01032 
01033 /* Function 30 */
01034 NTSTATUS WINAPI LsarQuerySecret(
01035     LSAPR_HANDLE SecretHandle,
01036     PLSAPR_CR_CIPHER_VALUE *EncryptedCurrentValue,
01037     PLARGE_INTEGER CurrentValueSetTime,
01038     PLSAPR_CR_CIPHER_VALUE *EncryptedOldValue,
01039     PLARGE_INTEGER OldValueSetTime)
01040 {
01041     UNIMPLEMENTED;
01042     return STATUS_NOT_IMPLEMENTED;
01043 }
01044 
01045 
01046 /* Function 31 */
01047 NTSTATUS WINAPI LsarLookupPrivilegeValue(
01048     LSAPR_HANDLE PolicyHandle,
01049     PRPC_UNICODE_STRING Name,
01050     PLUID Value)
01051 {
01052     NTSTATUS Status;
01053 
01054     TRACE("LsarLookupPrivilegeValue(%p, %wZ, %p)\n",
01055           PolicyHandle, Name, Value);
01056 
01057     Status = LsapValidateDbObject(PolicyHandle,
01058                                   LsaDbPolicyObject,
01059                                   0, /* FIXME */
01060                                   NULL);
01061     if (!NT_SUCCESS(Status))
01062     {
01063         ERR("Invalid handle (Status %lx)\n", Status);
01064         return Status;
01065     }
01066 
01067     TRACE("Privilege: %wZ\n", Name);
01068 
01069     Status = LsarpLookupPrivilegeValue((PUNICODE_STRING)Name,
01070                                        Value);
01071 
01072     return Status;
01073 }
01074 
01075 
01076 /* Function 32 */
01077 NTSTATUS WINAPI LsarLookupPrivilegeName(
01078     LSAPR_HANDLE PolicyHandle,
01079     PLUID Value,
01080     PRPC_UNICODE_STRING *Name)
01081 {
01082     NTSTATUS Status;
01083 
01084     TRACE("LsarLookupPrivilegeName(%p, %p, %p)\n",
01085           PolicyHandle, Value, Name);
01086 
01087     Status = LsapValidateDbObject(PolicyHandle,
01088                                   LsaDbPolicyObject,
01089                                   0, /* FIXME */
01090                                   NULL);
01091     if (!NT_SUCCESS(Status))
01092     {
01093         ERR("Invalid handle\n");
01094         return Status;
01095     }
01096 
01097     Status = LsarpLookupPrivilegeName(Value, (PUNICODE_STRING*)Name);
01098 
01099     return Status;
01100 }
01101 
01102 
01103 /* Function 33 */
01104 NTSTATUS WINAPI LsarLookupPrivilegeDisplayName(
01105     LSAPR_HANDLE PolicyHandle,
01106     PRPC_UNICODE_STRING Name,
01107     USHORT ClientLanguage,
01108     USHORT ClientSystemDefaultLanguage,
01109     PRPC_UNICODE_STRING *DisplayName,
01110     USHORT *LanguageReturned)
01111 {
01112     UNIMPLEMENTED;
01113     return STATUS_NOT_IMPLEMENTED;
01114 }
01115 
01116 
01117 /* Function 34 */
01118 NTSTATUS WINAPI LsarDeleteObject(
01119     LSAPR_HANDLE *ObjectHandle)
01120 {
01121     UNIMPLEMENTED;
01122     return STATUS_NOT_IMPLEMENTED;
01123 }
01124 
01125 
01126 /* Function 35 */
01127 NTSTATUS WINAPI LsarEnumerateAccountsWithUserRight(
01128     LSAPR_HANDLE PolicyHandle,
01129     PRPC_UNICODE_STRING UserRight,
01130     PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer)
01131 {
01132     UNIMPLEMENTED;
01133     return STATUS_NOT_IMPLEMENTED;
01134 }
01135 
01136 
01137 /* Function 36 */
01138 NTSTATUS WINAPI LsarEnmuerateAccountRights(
01139     LSAPR_HANDLE PolicyHandle,
01140     PRPC_SID AccountSid,
01141     PLSAPR_USER_RIGHT_SET UserRights)
01142 {
01143     PLSA_DB_OBJECT PolicyObject;
01144     NTSTATUS Status;
01145 
01146     FIXME("(%p,%p,%p) stub\n", PolicyHandle, AccountSid, UserRights);
01147 
01148     Status = LsapValidateDbObject(PolicyHandle,
01149                                   LsaDbPolicyObject,
01150                                   0, /* FIXME */
01151                                   &PolicyObject);
01152     if (!NT_SUCCESS(Status))
01153         return Status;
01154 
01155     UserRights->Entries = 0;
01156     UserRights->UserRights = NULL;
01157     return STATUS_OBJECT_NAME_NOT_FOUND;
01158 }
01159 
01160 
01161 /* Function 37 */
01162 NTSTATUS WINAPI LsarAddAccountRights(
01163     LSAPR_HANDLE PolicyHandle,
01164     PRPC_SID AccountSid,
01165     PLSAPR_USER_RIGHT_SET UserRights)
01166 {
01167     UNIMPLEMENTED;
01168     return STATUS_NOT_IMPLEMENTED;
01169 }
01170 
01171 
01172 /* Function 38 */
01173 NTSTATUS WINAPI LsarRemoveAccountRights(
01174     LSAPR_HANDLE PolicyHandle,
01175     PRPC_SID AccountSid,
01176     BOOL AllRights,
01177     PLSAPR_USER_RIGHT_SET UserRights)
01178 {
01179     UNIMPLEMENTED;
01180     return STATUS_NOT_IMPLEMENTED;
01181 }
01182 
01183 
01184 /* Function 39 */
01185 NTSTATUS WINAPI LsarQueryTrustedDomainInfo(
01186     LSAPR_HANDLE PolicyHandle,
01187     PRPC_SID TrustedDomainSid,
01188     TRUSTED_INFORMATION_CLASS InformationClass,
01189     PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation)
01190 {
01191     UNIMPLEMENTED;
01192     return STATUS_NOT_IMPLEMENTED;
01193 }
01194 
01195 
01196 /* Function 40 */
01197 NTSTATUS WINAPI LsarSetTrustedDomainInfo(
01198     LSAPR_HANDLE PolicyHandle,
01199     PRPC_SID TrustedDomainSid,
01200     TRUSTED_INFORMATION_CLASS InformationClass,
01201     PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation)
01202 {
01203     UNIMPLEMENTED;
01204     return STATUS_NOT_IMPLEMENTED;
01205 }
01206 
01207 
01208 /* Function 41 */
01209 NTSTATUS WINAPI LsarDeleteTrustedDomain(
01210     LSAPR_HANDLE PolicyHandle,
01211     PRPC_SID TrustedDomainSid)
01212 {
01213     UNIMPLEMENTED;
01214     return STATUS_NOT_IMPLEMENTED;
01215 }
01216 
01217 
01218 /* Function 42 */
01219 NTSTATUS WINAPI LsarStorePrivateData(
01220     LSAPR_HANDLE PolicyHandle,
01221     PRPC_UNICODE_STRING KeyName,
01222     PLSAPR_CR_CIPHER_VALUE EncryptedData)
01223 {
01224     UNIMPLEMENTED;
01225     return STATUS_NOT_IMPLEMENTED;
01226 }
01227 
01228 
01229 /* Function 43 */
01230 NTSTATUS WINAPI LsarRetrievePrivateData(
01231     LSAPR_HANDLE PolicyHandle,
01232     PRPC_UNICODE_STRING KeyName,
01233     PLSAPR_CR_CIPHER_VALUE *EncryptedData)
01234 {
01235     UNIMPLEMENTED;
01236     return STATUS_NOT_IMPLEMENTED;
01237 }
01238 
01239 
01240 /* Function 44 */
01241 NTSTATUS WINAPI LsarOpenPolicy2(
01242     LPWSTR SystemName,
01243     PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes,
01244     ACCESS_MASK DesiredAccess,
01245     LSAPR_HANDLE *PolicyHandle)
01246 {
01247     UNIMPLEMENTED;
01248     return STATUS_NOT_IMPLEMENTED;
01249 }
01250 
01251 
01252 /* Function 45 */
01253 NTSTATUS WINAPI LsarGetUserName(
01254     LPWSTR SystemName,
01255     PRPC_UNICODE_STRING *UserName,
01256     PRPC_UNICODE_STRING *DomainName)
01257 {
01258     UNIMPLEMENTED;
01259     return STATUS_NOT_IMPLEMENTED;
01260 }
01261 
01262 
01263 /* Function 46 */
01264 NTSTATUS WINAPI LsarQueryInformationPolicy2(
01265     LSAPR_HANDLE PolicyHandle,
01266     POLICY_INFORMATION_CLASS InformationClass,
01267     unsigned long *PolicyInformation)
01268 {
01269     UNIMPLEMENTED;
01270     return STATUS_NOT_IMPLEMENTED;
01271 }
01272 
01273 
01274 /* Function 47 */
01275 NTSTATUS WINAPI LsarSetInformationPolicy2(
01276     LSAPR_HANDLE PolicyHandle,
01277     POLICY_INFORMATION_CLASS InformationClass,
01278     unsigned long PolicyInformation)
01279 {
01280     UNIMPLEMENTED;
01281     return STATUS_NOT_IMPLEMENTED;
01282 }
01283 
01284 
01285 /* Function 48 */
01286 NTSTATUS WINAPI LsarQueryTrustedDomainInfoByName(
01287     LSAPR_HANDLE PolicyHandle,
01288     PRPC_UNICODE_STRING TrustedDomainName,
01289     POLICY_INFORMATION_CLASS InformationClass,
01290     unsigned long *PolicyInformation)
01291 {
01292     UNIMPLEMENTED;
01293     return STATUS_NOT_IMPLEMENTED;
01294 }
01295 
01296 
01297 /* Function 49 */
01298 NTSTATUS WINAPI LsarSetTrustedDomainInfoByName(
01299     LSAPR_HANDLE PolicyHandle,
01300     PRPC_UNICODE_STRING TrustedDomainName,
01301     POLICY_INFORMATION_CLASS InformationClass,
01302     unsigned long PolicyInformation)
01303 {
01304     UNIMPLEMENTED;
01305     return STATUS_NOT_IMPLEMENTED;
01306 }
01307 
01308 
01309 /* Function 50 */
01310 NTSTATUS WINAPI LsarEnumerateTrustedDomainsEx(
01311     LSAPR_HANDLE PolicyHandle,
01312     DWORD *EnumerationContext,
01313     PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer,
01314     DWORD PreferedMaximumLength)
01315 {
01316     UNIMPLEMENTED;
01317     return STATUS_NOT_IMPLEMENTED;
01318 }
01319 
01320 
01321 /* Function 51 */
01322 NTSTATUS WINAPI LsarCreateTrustedDomainEx(
01323     LSAPR_HANDLE PolicyHandle,
01324     PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,
01325     PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation,
01326     ACCESS_MASK DesiredAccess,
01327     LSAPR_HANDLE *TrustedDomainHandle)
01328 {
01329     UNIMPLEMENTED;
01330     return STATUS_NOT_IMPLEMENTED;
01331 }
01332 
01333 
01334 /* Function 52 */
01335 NTSTATUS WINAPI LsarSetPolicyReplicationHandle(
01336     PLSAPR_HANDLE PolicyHandle)
01337 {
01338     /* Deprecated */
01339     return STATUS_NOT_IMPLEMENTED;
01340 }
01341 
01342 
01343 /* Function 53 */
01344 NTSTATUS WINAPI LsarQueryDomainInformationPolicy(
01345     LSAPR_HANDLE PolicyHandle,
01346     POLICY_INFORMATION_CLASS InformationClass,
01347     unsigned long *PolicyInformation)
01348 {
01349     UNIMPLEMENTED;
01350     return STATUS_NOT_IMPLEMENTED;
01351 }
01352 
01353 
01354 /* Function 54 */
01355 NTSTATUS WINAPI LsarSetDomainInformationPolicy(
01356     LSAPR_HANDLE PolicyHandle,
01357     POLICY_INFORMATION_CLASS InformationClass,
01358     unsigned long PolicyInformation)
01359 {
01360     UNIMPLEMENTED;
01361     return STATUS_NOT_IMPLEMENTED;
01362 }
01363 
01364 
01365 /* Function 55 */
01366 NTSTATUS WINAPI LsarOpenTrustedDomainByName(
01367     LSAPR_HANDLE PolicyHandle,
01368     PRPC_UNICODE_STRING TrustedDomainName,
01369     ACCESS_MASK DesiredAccess,
01370     LSAPR_HANDLE *TrustedDomainHandle)
01371 {
01372     UNIMPLEMENTED;
01373     return STATUS_NOT_IMPLEMENTED;
01374 }
01375 
01376 
01377 /* Function 56 */
01378 NTSTATUS WINAPI LsarTestCall(
01379     handle_t hBinding)
01380 {
01381     UNIMPLEMENTED;
01382     return STATUS_NOT_IMPLEMENTED;
01383 }
01384 
01385 
01386 /* Function 57 */
01387 NTSTATUS WINAPI LsarLookupSids2(
01388     LSAPR_HANDLE PolicyHandle,
01389     PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
01390     PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
01391     PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
01392     LSAP_LOOKUP_LEVEL LookupLevel,
01393     DWORD *MappedCount,
01394     DWORD LookupOptions,
01395     DWORD ClientRevision)
01396 {
01397     UNIMPLEMENTED;
01398     return STATUS_NOT_IMPLEMENTED;
01399 }
01400 
01401 
01402 /* Function 58 */
01403 NTSTATUS WINAPI LsarLookupNames2(
01404     LSAPR_HANDLE PolicyHandle,
01405     DWORD Count,
01406     PRPC_UNICODE_STRING Names,
01407     PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
01408     PLSAPR_TRANSLATED_SIDS_EX TranslatedSids,
01409     LSAP_LOOKUP_LEVEL LookupLevel,
01410     DWORD *MappedCount,
01411     DWORD LookupOptions,
01412     DWORD ClientRevision)
01413 {
01414     UNIMPLEMENTED;
01415     return STATUS_NOT_IMPLEMENTED;
01416 }
01417 
01418 
01419 /* Function 59 */
01420 NTSTATUS WINAPI LsarCreateTrustedDomainEx2(
01421     LSAPR_HANDLE PolicyHandle,
01422     PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,
01423     PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation,
01424     ACCESS_MASK DesiredAccess,
01425     LSAPR_HANDLE *TrustedDomainHandle)
01426 {
01427     UNIMPLEMENTED;
01428     return STATUS_NOT_IMPLEMENTED;
01429 }
01430 
01431 
01432 /* Function 60 */
01433 NTSTATUS WINAPI CredrWrite(
01434     handle_t hBinding)
01435 {
01436     UNIMPLEMENTED;
01437     return STATUS_NOT_IMPLEMENTED;
01438 }
01439 
01440 
01441 /* Function 61 */
01442 NTSTATUS WINAPI CredrRead(
01443     handle_t hBinding)
01444 {
01445     UNIMPLEMENTED;
01446     return STATUS_NOT_IMPLEMENTED;
01447 }
01448 
01449 
01450 /* Function 62 */
01451 NTSTATUS WINAPI CredrEnumerate(
01452     handle_t hBinding)
01453 {
01454     UNIMPLEMENTED;
01455     return STATUS_NOT_IMPLEMENTED;
01456 }
01457 
01458 
01459 /* Function 63 */
01460 NTSTATUS WINAPI CredrWriteDomainCredentials(
01461     handle_t hBinding)
01462 {
01463     UNIMPLEMENTED;
01464     return STATUS_NOT_IMPLEMENTED;
01465 }
01466 
01467 
01468 /* Function 64 */
01469 NTSTATUS WINAPI CredrReadDomainCredentials(
01470     handle_t hBinding)
01471 {
01472     UNIMPLEMENTED;
01473     return STATUS_NOT_IMPLEMENTED;
01474 }
01475 
01476 
01477 /* Function 65 */
01478 NTSTATUS WINAPI CredrDelete(
01479     handle_t hBinding)
01480 {
01481     UNIMPLEMENTED;
01482     return STATUS_NOT_IMPLEMENTED;
01483 }
01484 
01485 
01486 /* Function 66 */
01487 NTSTATUS WINAPI CredrGetTargetInfo(
01488     handle_t hBinding)
01489 {
01490     UNIMPLEMENTED;
01491     return STATUS_NOT_IMPLEMENTED;
01492 }
01493 
01494 
01495 /* Function 67 */
01496 NTSTATUS WINAPI CredrProfileLoaded(
01497     handle_t hBinding)
01498 {
01499     UNIMPLEMENTED;
01500     return STATUS_NOT_IMPLEMENTED;
01501 }
01502 
01503 
01504 /* Function 68 */
01505 NTSTATUS WINAPI LsarLookupNames3(
01506     LSAPR_HANDLE PolicyHandle,
01507     DWORD Count,
01508     PRPC_UNICODE_STRING Names,
01509     PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
01510     PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids,
01511     LSAP_LOOKUP_LEVEL LookupLevel,
01512     DWORD *MappedCount,
01513     DWORD LookupOptions,
01514     DWORD ClientRevision)
01515 {
01516     SID_IDENTIFIER_AUTHORITY IdentifierAuthority = {SECURITY_NT_AUTHORITY};
01517     static const UNICODE_STRING DomainName = RTL_CONSTANT_STRING(L"DOMAIN");
01518     PLSAPR_REFERENCED_DOMAIN_LIST DomainsBuffer = NULL;
01519     PLSAPR_TRANSLATED_SID_EX2 SidsBuffer = NULL;
01520     ULONG SidsBufferLength;
01521     ULONG DomainSidLength;
01522     ULONG AccountSidLength;
01523     PSID DomainSid;
01524     PSID AccountSid;
01525     ULONG i;
01526     NTSTATUS Status;
01527 
01528     TRACE("LsarLookupNames3(%p, %lu, %p, %p, %p, %d, %p, %lu, %lu)\n",
01529           PolicyHandle, Count, Names, ReferencedDomains, TranslatedSids,
01530           LookupLevel, MappedCount, LookupOptions, ClientRevision);
01531 
01532     if (Count == 0)
01533         return STATUS_NONE_MAPPED;
01534 
01535     TranslatedSids->Entries = Count;
01536     TranslatedSids->Sids = NULL;
01537     *ReferencedDomains = NULL;
01538 
01539     SidsBufferLength = Count * sizeof(LSAPR_TRANSLATED_SID_EX2);
01540     SidsBuffer = MIDL_user_allocate(SidsBufferLength);
01541     if (SidsBuffer == NULL)
01542         return STATUS_INSUFFICIENT_RESOURCES;
01543 
01544     for (i = 0; i < Count; i++)
01545     {
01546         SidsBuffer[i].Use = SidTypeUser;
01547         SidsBuffer[i].Sid = NULL;
01548         SidsBuffer[i].DomainIndex = -1;
01549         SidsBuffer[i].Flags = 0;
01550     }
01551 
01552     DomainsBuffer = MIDL_user_allocate(sizeof(LSAPR_REFERENCED_DOMAIN_LIST));
01553     if (DomainsBuffer == NULL)
01554     {
01555         MIDL_user_free(SidsBuffer);
01556         return STATUS_INSUFFICIENT_RESOURCES;
01557     }
01558 
01559     DomainsBuffer->Entries = Count;
01560     DomainsBuffer->Domains = MIDL_user_allocate(Count * sizeof(LSA_TRUST_INFORMATION));
01561     if (DomainsBuffer->Domains == NULL)
01562     {
01563         MIDL_user_free(DomainsBuffer);
01564         MIDL_user_free(SidsBuffer);
01565         return STATUS_INSUFFICIENT_RESOURCES;
01566     }
01567 
01568     Status = RtlAllocateAndInitializeSid(&IdentifierAuthority,
01569                                          2,
01570                                          SECURITY_BUILTIN_DOMAIN_RID,
01571                                          DOMAIN_ALIAS_RID_ADMINS,
01572                                          0, 0, 0, 0, 0, 0,
01573                                          &DomainSid);
01574     if (!NT_SUCCESS(Status))
01575     {
01576         MIDL_user_free(DomainsBuffer->Domains);
01577         MIDL_user_free(DomainsBuffer);
01578         MIDL_user_free(SidsBuffer);
01579         return Status;
01580     }
01581 
01582     DomainSidLength = RtlLengthSid(DomainSid);
01583 
01584     for (i = 0; i < Count; i++)
01585     {
01586         DomainsBuffer->Domains[i].Sid = MIDL_user_allocate(DomainSidLength);
01587         RtlCopyMemory(DomainsBuffer->Domains[i].Sid,
01588                       DomainSid,
01589                       DomainSidLength);
01590 
01591         DomainsBuffer->Domains[i].Name.Buffer = MIDL_user_allocate(DomainName.MaximumLength);
01592         DomainsBuffer->Domains[i].Name.Length = DomainName.Length;
01593         DomainsBuffer->Domains[i].Name.MaximumLength = DomainName.MaximumLength;
01594         RtlCopyMemory(DomainsBuffer->Domains[i].Name.Buffer,
01595                       DomainName.Buffer,
01596                       DomainName.MaximumLength);
01597     }
01598 
01599     Status = RtlAllocateAndInitializeSid(&IdentifierAuthority,
01600                                          3,
01601                                          SECURITY_BUILTIN_DOMAIN_RID,
01602                                          DOMAIN_ALIAS_RID_ADMINS,
01603                                          DOMAIN_USER_RID_ADMIN,
01604                                          0, 0, 0, 0, 0,
01605                                          &AccountSid);
01606     if (!NT_SUCCESS(Status))
01607     {
01608         MIDL_user_free(DomainsBuffer->Domains);
01609         MIDL_user_free(DomainsBuffer);
01610         MIDL_user_free(SidsBuffer);
01611         return Status;
01612     }
01613 
01614     AccountSidLength = RtlLengthSid(AccountSid);
01615 
01616     for (i = 0; i < Count; i++)
01617     {
01618         SidsBuffer[i].Use = SidTypeWellKnownGroup;
01619         SidsBuffer[i].Sid = MIDL_user_allocate(AccountSidLength);
01620 
01621         RtlCopyMemory(SidsBuffer[i].Sid,
01622                       AccountSid,
01623                       AccountSidLength);
01624 
01625         SidsBuffer[i].DomainIndex = i;
01626         SidsBuffer[i].Flags = 0;
01627     }
01628 
01629     *ReferencedDomains = DomainsBuffer;
01630     *MappedCount = Count;
01631 
01632     TranslatedSids->Entries = Count;
01633     TranslatedSids->Sids = SidsBuffer;
01634 
01635     return STATUS_SUCCESS;
01636 }
01637 
01638 
01639 /* Function 69 */
01640 NTSTATUS WINAPI CredrGetSessionTypes(
01641     handle_t hBinding)
01642 {
01643     UNIMPLEMENTED;
01644     return STATUS_NOT_IMPLEMENTED;
01645 }
01646 
01647 
01648 /* Function 70 */
01649 NTSTATUS WINAPI LsarRegisterAuditEvent(
01650     handle_t hBinding)
01651 {
01652     UNIMPLEMENTED;
01653     return STATUS_NOT_IMPLEMENTED;
01654 }
01655 
01656 
01657 /* Function 71 */
01658 NTSTATUS WINAPI LsarGenAuditEvent(
01659     handle_t hBinding)
01660 {
01661     UNIMPLEMENTED;
01662     return STATUS_NOT_IMPLEMENTED;
01663 }
01664 
01665 
01666 /* Function 72 */
01667 NTSTATUS WINAPI LsarUnregisterAuditEvent(
01668     handle_t hBinding)
01669 {
01670     UNIMPLEMENTED;
01671     return STATUS_NOT_IMPLEMENTED;
01672 }
01673 
01674 
01675 /* Function 73 */
01676 NTSTATUS WINAPI LsarQueryForestTrustInformation(
01677     LSAPR_HANDLE PolicyHandle,
01678     PLSA_UNICODE_STRING TrustedDomainName,
01679     LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType,
01680     PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo)
01681 {
01682     UNIMPLEMENTED;
01683     return STATUS_NOT_IMPLEMENTED;
01684 }
01685 
01686 
01687 /* Function 74 */
01688 NTSTATUS WINAPI LsarSetForestTrustInformation(
01689     LSAPR_HANDLE PolicyHandle,
01690     PLSA_UNICODE_STRING TrustedDomainName,
01691     LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType,
01692     PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo,
01693     BOOL CheckOnly,
01694     PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo)
01695 {
01696     UNIMPLEMENTED;
01697     return STATUS_NOT_IMPLEMENTED;
01698 }
01699 
01700 
01701 /* Function 75 */
01702 NTSTATUS WINAPI CredrRename(
01703     handle_t hBinding)
01704 {
01705     UNIMPLEMENTED;
01706     return STATUS_NOT_IMPLEMENTED;
01707 }
01708 
01709 
01710 /* Function 76 */
01711 NTSTATUS WINAPI LsarLookupSids3(
01712     LSAPR_HANDLE PolicyHandle,
01713     PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
01714     PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
01715     PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
01716     LSAP_LOOKUP_LEVEL LookupLevel,
01717     DWORD *MappedCount,
01718     DWORD LookupOptions,
01719     DWORD ClientRevision)
01720 {
01721     UNIMPLEMENTED;
01722     return STATUS_NOT_IMPLEMENTED;
01723 }
01724 
01725 
01726 /* Function 77 */
01727 NTSTATUS WINAPI LsarLookupNames4(
01728     handle_t RpcHandle,
01729     DWORD Count,
01730     PRPC_UNICODE_STRING Names,
01731     PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
01732     PLSAPR_TRANSLATED_SIDS_EX2 TranslatedSids,
01733     LSAP_LOOKUP_LEVEL LookupLevel,
01734     DWORD *MappedCount,
01735     DWORD LookupOptions,
01736     DWORD ClientRevision)
01737 {
01738     UNIMPLEMENTED;
01739     return STATUS_NOT_IMPLEMENTED;
01740 }
01741 
01742 
01743 /* Function 78 */
01744 NTSTATUS WINAPI LsarOpenPolicySce(
01745     handle_t hBinding)
01746 {
01747     UNIMPLEMENTED;
01748     return STATUS_NOT_IMPLEMENTED;
01749 }
01750 
01751 
01752 /* Function 79 */
01753 NTSTATUS WINAPI LsarAdtRegisterSecurityEventSource(
01754     handle_t hBinding)
01755 {
01756     UNIMPLEMENTED;
01757     return STATUS_NOT_IMPLEMENTED;
01758 }
01759 
01760 
01761 /* Function 80 */
01762 NTSTATUS WINAPI LsarAdtUnregisterSecurityEventSource(
01763     handle_t hBinding)
01764 {
01765     UNIMPLEMENTED;
01766     return STATUS_NOT_IMPLEMENTED;
01767 }
01768 
01769 
01770 /* Function 81 */
01771 NTSTATUS WINAPI LsarAdtReportSecurityEvent(
01772     handle_t hBinding)
01773 {
01774     UNIMPLEMENTED;
01775     return STATUS_NOT_IMPLEMENTED;
01776 }
01777 
01778 
01779 /* Function 82 */
01780 NTSTATUS WINAPI CredrFindBestCredential(
01781     handle_t hBinding)
01782 {
01783     UNIMPLEMENTED;
01784     return STATUS_NOT_IMPLEMENTED;
01785 }
01786 
01787 
01788 /* Function 83 */
01789 NTSTATUS WINAPI LsarSetAuditPolicy(
01790     handle_t hBinding)
01791 {
01792     UNIMPLEMENTED;
01793     return STATUS_NOT_IMPLEMENTED;
01794 }
01795 
01796 
01797 /* Function 84 */
01798 NTSTATUS WINAPI LsarQueryAuditPolicy(
01799     handle_t hBinding)
01800 {
01801     UNIMPLEMENTED;
01802     return STATUS_NOT_IMPLEMENTED;
01803 }
01804 
01805 
01806 /* Function 85 */
01807 NTSTATUS WINAPI LsarEnumerateAuditPolicy(
01808     handle_t hBinding)
01809 {
01810     UNIMPLEMENTED;
01811     return STATUS_NOT_IMPLEMENTED;
01812 }
01813 
01814 
01815 /* Function 86 */
01816 NTSTATUS WINAPI LsarEnumerateAuditCategories(
01817     handle_t hBinding)
01818 {
01819     UNIMPLEMENTED;
01820     return STATUS_NOT_IMPLEMENTED;
01821 }
01822 
01823 
01824 /* Function 87 */
01825 NTSTATUS WINAPI LsarEnumerateAuditSubCategories(
01826     handle_t hBinding)
01827 {
01828     UNIMPLEMENTED;
01829     return STATUS_NOT_IMPLEMENTED;
01830 }
01831 
01832 
01833 /* Function 88 */
01834 NTSTATUS WINAPI LsarLookupAuditCategoryName(
01835     handle_t hBinding)
01836 {
01837     UNIMPLEMENTED;
01838     return STATUS_NOT_IMPLEMENTED;
01839 }
01840 
01841 
01842 /* Function 89 */
01843 NTSTATUS WINAPI LsarLookupAuditSubCategoryName(
01844     handle_t hBinding)
01845 {
01846     UNIMPLEMENTED;
01847     return STATUS_NOT_IMPLEMENTED;
01848 }
01849 
01850 
01851 /* Function 90 */
01852 NTSTATUS WINAPI LsarSetAuditSecurity(
01853     handle_t hBinding)
01854 {
01855     UNIMPLEMENTED;
01856     return STATUS_NOT_IMPLEMENTED;
01857 }
01858 
01859 
01860 /* Function 91 */
01861 NTSTATUS WINAPI LsarQueryAuditSecurity(
01862     handle_t hBinding)
01863 {
01864     UNIMPLEMENTED;
01865     return STATUS_NOT_IMPLEMENTED;
01866 }
01867 
01868 
01869 /* Function 92 */
01870 NTSTATUS WINAPI CredReadByTokenHandle(
01871     handle_t hBinding)
01872 {
01873     UNIMPLEMENTED;
01874     return STATUS_NOT_IMPLEMENTED;
01875 }
01876 
01877 
01878 /* Function 93 */
01879 NTSTATUS WINAPI CredrRestoreCredentials(
01880     handle_t hBinding)
01881 {
01882     UNIMPLEMENTED;
01883     return STATUS_NOT_IMPLEMENTED;
01884 }
01885 
01886 
01887 /* Function 94 */
01888 NTSTATUS WINAPI CredrBackupCredentials(
01889     handle_t hBinding)
01890 {
01891     UNIMPLEMENTED;
01892     return STATUS_NOT_IMPLEMENTED;
01893 }
01894 
01895 /* EOF */

Generated on Sat May 26 2012 04:23:10 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.