#include <wine/debug.h>
-#define POLICY_DELETE (RTL_HANDLE_VALID << 1)
-typedef struct _LSAR_POLICY_HANDLE
+typedef struct _LSA_DB_HANDLE
{
- ULONG Flags;
+ ULONG Signature;
+ ULONG Type;
LONG RefCount;
ACCESS_MASK AccessGranted;
-} LSAR_POLICY_HANDLE, *PLSAR_POLICY_HANDLE;
+} LSA_DB_HANDLE, *PLSA_DB_HANDLE;
+
+#define LSAP_DB_SIGNATURE 0x12345678
static RTL_CRITICAL_SECTION PolicyHandleTableLock;
-static RTL_HANDLE_TABLE PolicyHandleTable;
WINE_DEFAULT_DEBUG_CHANNEL(lsasrv);
+
/* FUNCTIONS ***************************************************************/
-/*static*/ NTSTATUS
-ReferencePolicyHandle(IN LSAPR_HANDLE ObjectHandle,
- IN ACCESS_MASK DesiredAccess,
- OUT PLSAR_POLICY_HANDLE *Policy)
+static LSAPR_HANDLE
+LsapCreateDbHandle(ULONG Type)
{
- PLSAR_POLICY_HANDLE ReferencedPolicy;
- NTSTATUS Status = STATUS_SUCCESS;
+ PLSA_DB_HANDLE DbHandle;
- RtlEnterCriticalSection(&PolicyHandleTableLock);
+// RtlEnterCriticalSection(&PolicyHandleTableLock);
- if (RtlIsValidIndexHandle(&PolicyHandleTable,
- (ULONG)ObjectHandle,
- (PRTL_HANDLE_TABLE_ENTRY*)&ReferencedPolicy) &&
- !(ReferencedPolicy->Flags & POLICY_DELETE))
+ DbHandle = (PLSA_DB_HANDLE)RtlAllocateHeap(RtlGetProcessHeap(),
+ 0,
+ sizeof(LSA_DB_HANDLE));
+ if (DbHandle != NULL)
{
- if (RtlAreAllAccessesGranted(ReferencedPolicy->AccessGranted,
- DesiredAccess))
- {
- ReferencedPolicy->RefCount++;
- *Policy = ReferencedPolicy;
- }
- else
- Status = STATUS_ACCESS_DENIED;
+ DbHandle->Signature = LSAP_DB_SIGNATURE;
+ DbHandle->RefCount = 1;
+ DbHandle->Type = Type;
}
- else
- Status = STATUS_INVALID_HANDLE;
- RtlLeaveCriticalSection(&PolicyHandleTableLock);
+// RtlLeaveCriticalSection(&PolicyHandleTableLock);
- return Status;
+ return (LSAPR_HANDLE)DbHandle;
}
-/*static*/ VOID
-DereferencePolicyHandle(IN OUT PLSAR_POLICY_HANDLE Policy,
- IN BOOLEAN Delete)
+
+static BOOL
+LsapValidateDbHandle(LSAPR_HANDLE Handle)
{
- RtlEnterCriticalSection(&PolicyHandleTableLock);
+ PLSA_DB_HANDLE DbHandle = (PLSA_DB_HANDLE)Handle;
+ BOOL bValid = FALSE;
- if (Delete)
+ _SEH2_TRY
{
- Policy->Flags |= POLICY_DELETE;
- Policy->RefCount--;
-
- ASSERT(Policy->RefCount != 0);
+ if (DbHandle->Signature == LSAP_DB_SIGNATURE)
+ bValid = TRUE;
}
-
- if (--Policy->RefCount == 0)
+ _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
{
- ASSERT(Policy->Flags & POLICY_DELETE);
- RtlFreeHandle(&PolicyHandleTable,
- (PRTL_HANDLE_TABLE_ENTRY)Policy);
+ bValid = FALSE;
}
+ _SEH2_END;
- RtlLeaveCriticalSection(&PolicyHandleTableLock);
+
+ return bValid;
}
+
+
+
VOID
LsarStartRpcServer(VOID)
{
RPC_STATUS Status;
RtlInitializeCriticalSection(&PolicyHandleTableLock);
- RtlInitializeHandleTable(0x1000,
- sizeof(LSAR_POLICY_HANDLE),
- &PolicyHandleTable);
TRACE("LsarStartRpcServer() called");
}
+void __RPC_USER LSAPR_HANDLE_rundown(LSAPR_HANDLE hHandle)
+{
+
+}
+
+
/* Function 0 */
NTSTATUS LsarClose(
- handle_t hBinding,
LSAPR_HANDLE *ObjectHandle)
{
-#if 0
- PLSAR_POLICY_HANDLE Policy = NULL;
- NTSTATUS Status;
+ NTSTATUS Status = STATUS_SUCCESS;
TRACE("0x%p\n", ObjectHandle);
- Status = ReferencePolicyHandle(*ObjectHandle,
- 0,
- &Policy);
- if (NT_SUCCESS(Status))
+// RtlEnterCriticalSection(&PolicyHandleTableLock);
+
+ if (LsapValidateDbHandle(*ObjectHandle))
{
- /* delete the handle */
- DereferencePolicyHandle(Policy,
- TRUE);
+ RtlFreeHeap(RtlGetProcessHeap(), 0, *ObjectHandle);
+ *ObjectHandle = NULL;
}
+ else
+ Status = STATUS_INVALID_HANDLE;
+
+// RtlLeaveCriticalSection(&PolicyHandleTableLock);
return Status;
-#endif
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
}
/* Function 1 */
NTSTATUS LsarDelete(
- handle_t hBinding,
LSAPR_HANDLE ObjectHandle)
{
/* Deprecated */
/* Function 2 */
NTSTATUS LsarEnumeratePrivileges(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
DWORD *EnumerationContext,
PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer,
/* Function 3 */
NTSTATUS LsarQuerySecurityObject(
- handle_t hBinding,
LSAPR_HANDLE ObjectHandle,
SECURITY_INFORMATION SecurityInformation,
PLSAPR_SR_SECURITY_DESCRIPTOR *SecurityDescriptor)
/* Function 4 */
NTSTATUS LsarSetSecurityObject(
- handle_t hBinding,
LSAPR_HANDLE ObjectHandle,
SECURITY_INFORMATION SecurityInformation,
PLSAPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor)
/* Function 5 */
NTSTATUS LsarChangePassword(
- handle_t hBinding,
+ handle_t IDL_handle,
PRPC_UNICODE_STRING String1,
PRPC_UNICODE_STRING String2,
PRPC_UNICODE_STRING String3,
/* Function 6 */
NTSTATUS LsarOpenPolicy(
- handle_t hBinding,
LPWSTR SystemName,
PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes,
ACCESS_MASK DesiredAccess,
LSAPR_HANDLE *PolicyHandle)
{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ NTSTATUS Status = STATUS_SUCCESS;
+
+ TRACE("LsarOpenPolicy called!\n");
+
+ RtlEnterCriticalSection(&PolicyHandleTableLock);
+
+ *PolicyHandle = LsapCreateDbHandle(0);
+ if (*PolicyHandle == NULL)
+ Status = STATUS_INSUFFICIENT_RESOURCES;
+
+ RtlLeaveCriticalSection(&PolicyHandleTableLock);
+
+ TRACE("LsarOpenPolicy done!\n");
+
+ return Status;
}
/* Function 7 */
NTSTATUS LsarQueryInformationPolicy(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
POLICY_INFORMATION_CLASS InformationClass,
unsigned long PolicyInformation)
/* Function 8 */
NTSTATUS LsarSetInformationPolicy(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
POLICY_INFORMATION_CLASS InformationClass,
unsigned long *PolicyInformation)
/* Function 9 */
NTSTATUS LsarClearAuditLog(
- handle_t hBinding,
LSAPR_HANDLE ObjectHandle)
{
/* Deprecated */
/* Function 10 */
NTSTATUS LsarCreateAccount(
- handle_t hBinding,
+ LSAPR_HANDLE PolicyHandle,
PRPC_SID AccountSid,
ACCESS_MASK DesiredAccess,
LSAPR_HANDLE *AccountHandle)
/* Function 11 */
NTSTATUS LsarEnumerateAccounts(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
DWORD *EnumerationContext,
PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer,
/* Function 12 */
NTSTATUS LsarCreateTrustedDomain(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PLSAPR_TRUST_INFORMATION TrustedDomainInformation,
ACCESS_MASK DesiredAccess,
/* Function 13 */
NTSTATUS LsarEnumerateTrustedDomains(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
DWORD *EnumerationContext,
PLSAPR_TRUSTED_ENUM_BUFFER EnumerationBuffer,
/* Function 14 */
NTSTATUS LsarLookupNames(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
DWORD Count,
PRPC_UNICODE_STRING Names,
/* Function 15 */
NTSTATUS LsarLookupSids(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
/* Function 16 */
NTSTATUS LsarCreateSecret(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_UNICODE_STRING SecretName,
ACCESS_MASK DesiredAccess,
/* Function 17 */
NTSTATUS LsarOpenAccount(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_SID AccountSid,
ACCESS_MASK DesiredAccess,
/* Function 18 */
NTSTATUS LsarEnumeratePrivilegesAccount(
- handle_t hBinding,
LSAPR_HANDLE AccountHandle,
PLSAPR_PRIVILEGE_SET *Privileges)
{
/* Function 19 */
NTSTATUS LsarAddPrivilegesToAccount(
- handle_t hBinding,
LSAPR_HANDLE AccountHandle,
PLSAPR_PRIVILEGE_SET Privileges)
{
/* Function 20 */
NTSTATUS LsarRemovePrivilegesFromAccount(
- handle_t hBinding,
LSAPR_HANDLE AccountHandle,
BOOL AllPrivileges,
PLSAPR_PRIVILEGE_SET Privileges)
/* Function 21 */
NTSTATUS LsarGetQuotasForAccount(
- handle_t hBinding,
LSAPR_HANDLE AccountHandle,
PQUOTA_LIMITS QuotaLimits)
{
/* Function 22 */
NTSTATUS LsarSetQuotasForAccount(
- handle_t hBinding,
LSAPR_HANDLE AccountHandle,
PQUOTA_LIMITS QuotaLimits)
{
/* Function 23 */
NTSTATUS LsarGetSystemAccessAccount(
- handle_t hBinding,
LSAPR_HANDLE AccountHandle,
ACCESS_MASK *SystemAccess)
{
/* Function 24 */
NTSTATUS LsarSetSystemAccessAccount(
- handle_t hBinding,
LSAPR_HANDLE AccountHandle,
ACCESS_MASK SystemAccess)
{
/* Function 25 */
NTSTATUS LsarOpenTrustedDomain(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_SID TrustedDomainSid,
ACCESS_MASK DesiredAccess,
/* Function 26 */
NTSTATUS LsarQueryInfoTrustedDomain(
- handle_t hBinding,
LSAPR_HANDLE TrustedDomainHandle,
TRUSTED_INFORMATION_CLASS InformationClass,
PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation)
/* Function 27 */
NTSTATUS LsarSetInformationTrustedDomain(
- handle_t hBinding,
LSAPR_HANDLE TrustedDomainHandle,
TRUSTED_INFORMATION_CLASS InformationClass,
PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation)
/* Function 28 */
NTSTATUS LsarOpenSecret(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_UNICODE_STRING SecretName,
ACCESS_MASK DesiredAccess,
/* Function 29 */
NTSTATUS LsarSetSecret(
- handle_t hBinding,
LSAPR_HANDLE *SecretHandle,
PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue,
PLSAPR_CR_CIPHER_VALUE EncryptedOldValue)
/* Function 30 */
NTSTATUS LsarQuerySecret(
- handle_t hBinding,
LSAPR_HANDLE SecretHandle,
PLSAPR_CR_CIPHER_VALUE *EncryptedCurrentValue,
PLARGE_INTEGER CurrentValueSetTime,
/* Function 31 */
NTSTATUS LsarLookupPrivilegeValue(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_UNICODE_STRING Name,
PLUID Value)
/* Function 32 */
NTSTATUS LsarLookupPrivilegeName(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PLUID Value,
PRPC_UNICODE_STRING *Name)
/* Function 33 */
NTSTATUS LsarLookupPrivilegeDisplayName(
- handle_t hBinding,
+ LSAPR_HANDLE PolicyHandle,
+ PRPC_UNICODE_STRING Name,
+ USHORT ClientLanguage,
+ USHORT ClientSystemDefaultLanguage,
+ PRPC_UNICODE_STRING *DisplayName,
USHORT *LanguageReturned)
{
UNIMPLEMENTED;
/* Function 34 */
NTSTATUS LsarDeleteObject(
- handle_t hBinding,
LSAPR_HANDLE *ObjectHandle)
{
UNIMPLEMENTED;
/* Function 35 */
NTSTATUS LsarEnumerateAccountsWithUserRight(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_UNICODE_STRING UserRight,
PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer)
/* Function 36 */
NTSTATUS LsarEnmuerateAccountRights(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_SID AccountSid,
PLSAPR_USER_RIGHT_SET UserRights)
/* Function 37 */
NTSTATUS LsarAddAccountRights(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_SID AccountSid,
PLSAPR_USER_RIGHT_SET UserRights)
/* Function 38 */
NTSTATUS LsarRemoveAccountRights(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_SID AccountSid,
BOOL AllRights,
/* Function 39 */
NTSTATUS LsarQueryTrustedDomainInfo(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_SID TrustedDomainSid,
TRUSTED_INFORMATION_CLASS InformationClass,
/* Function 40 */
NTSTATUS LsarSetTrustedDomainInfo(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_SID TrustedDomainSid,
TRUSTED_INFORMATION_CLASS InformationClass,
/* Function 41 */
NTSTATUS LsarDeleteTrustedDomain(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_SID TrustedDomainSid)
{
/* Function 42 */
NTSTATUS LsarStorePrivateData(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_UNICODE_STRING KeyName,
PLSAPR_CR_CIPHER_VALUE EncryptedData)
/* Function 43 */
NTSTATUS LsarRetrievePrivateData(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_UNICODE_STRING KeyName,
PLSAPR_CR_CIPHER_VALUE *EncryptedData)
/* Function 44 */
NTSTATUS LsarOpenPolicy2(
- handle_t hBinding,
LPWSTR SystemName,
PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes,
ACCESS_MASK DesiredAccess,
/* Function 45 */
NTSTATUS LsarGetUserName(
- handle_t hBinding,
LPWSTR SystemName,
PRPC_UNICODE_STRING *UserName,
PRPC_UNICODE_STRING *DomainName)
/* Function 46 */
NTSTATUS LsarQueryInformationPolicy2(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
POLICY_INFORMATION_CLASS InformationClass,
unsigned long *PolicyInformation)
/* Function 47 */
NTSTATUS LsarSetInformationPolicy2(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
POLICY_INFORMATION_CLASS InformationClass,
unsigned long PolicyInformation)
/* Function 48 */
NTSTATUS LsarQueryTrustedDomainInfoByName(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_UNICODE_STRING TrustedDomainName,
POLICY_INFORMATION_CLASS InformationClass,
/* Function 49 */
NTSTATUS LsarSetTrustedDomainInfoByName(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_UNICODE_STRING TrustedDomainName,
POLICY_INFORMATION_CLASS InformationClass,
/* Function 50 */
NTSTATUS LsarEnumerateTrustedDomainsEx(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
DWORD *EnumerationContext,
PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer,
/* Function 51 */
NTSTATUS LsarCreateTrustedDomainEx(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,
PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation,
/* Function 52 */
NTSTATUS LsarSetPolicyReplicationHandle(
- handle_t hBinding,
PLSAPR_HANDLE PolicyHandle)
{
/* Deprecated */
/* Function 53 */
NTSTATUS LsarQueryDomainInformationPolicy(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
POLICY_INFORMATION_CLASS InformationClass,
unsigned long *PolicyInformation)
/* Function 54 */
NTSTATUS LsarSetDomainInformationPolicy(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
POLICY_INFORMATION_CLASS InformationClass,
unsigned long PolicyInformation)
/* Function 55 */
NTSTATUS LsarOpenTrustedDomainByName(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PRPC_UNICODE_STRING TrustedDomainName,
ACCESS_MASK DesiredAccess,
/* Function 57 */
NTSTATUS LsarLookupSids2(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
/* Function 58 */
NTSTATUS LsarLookupNames2(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
DWORD Count,
PRPC_UNICODE_STRING Names,
/* Function 59 */
NTSTATUS LsarCreateTrustedDomainEx2(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation,
PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation,
/* Function 68 */
NTSTATUS LsarLookupNames3(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
DWORD Count,
PRPC_UNICODE_STRING Names,
/* Function 73 */
NTSTATUS LsarQueryForestTrustInformation(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PLSA_UNICODE_STRING TrustedDomainName,
LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType,
/* Function 74 */
NTSTATUS LsarSetForestTrustInformation(
- handle_t hBinding,
LSAPR_HANDLE PolicyHandle,
PLSA_UNICODE_STRING TrustedDomainName,
LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType,
/* Function 76 */
NTSTATUS LsarLookupSids3(
- handle_t hBinding,
+ LSAPR_HANDLE PolicyHandle,
PLSAPR_SID_ENUM_BUFFER SidEnumBuffer,
PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains,
PLSAPR_TRANSLATED_NAMES_EX TranslatedNames,
/* Function 77 */
NTSTATUS LsarLookupNames4(
- handle_t hBinding,
handle_t RpcHandle,
DWORD Count,
PRPC_UNICODE_STRING Names,
}
+/* Function 82 */
+NTSTATUS CredrFindBestCredential(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 83 */
+NTSTATUS LsarSetAuditPolicy(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 84 */
+NTSTATUS LsarQueryAuditPolicy(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 85 */
+NTSTATUS LsarEnumerateAuditPolicy(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 86 */
+NTSTATUS LsarEnumerateAuditCategories(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 87 */
+NTSTATUS LsarEnumerateAuditSubCategories(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 88 */
+NTSTATUS LsarLookupAuditCategoryName(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 89 */
+NTSTATUS LsarLookupAuditSubCategoryName(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 90 */
+NTSTATUS LsarSetAuditSecurity(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 91 */
+NTSTATUS LsarQueryAuditSecurity(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 92 */
+NTSTATUS CredReadByTokenHandle(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 93 */
+NTSTATUS CredrRestoreCredentials(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+
+/* Function 94 */
+NTSTATUS CredrBackupCredentials(
+ handle_t hBinding)
+{
+ UNIMPLEMENTED;
+ return STATUS_NOT_IMPLEMENTED;
+}
+
/* EOF */