#define NTOS_MODE_USER
#include <ndk/cmfuncs.h>
+#include <ndk/exfuncs.h>
#include <ndk/kefuncs.h>
#include <ndk/mmfuncs.h>
#include <ndk/obfuncs.h>
#include <ntlsa.h>
#include <sddl.h>
+#include <srmp.h>
+
#include <lsass.h>
#include <lsa_s.h>
HANDLE ConnectionHandle;
} LSAP_LOGON_CONTEXT, *PLSAP_LOGON_CONTEXT;
+typedef struct _SAMPR_ULONG_ARRAY
+{
+ unsigned long Count;
+ unsigned long *Element;
+} SAMPR_ULONG_ARRAY, *PSAMPR_ULONG_ARRAY;
+
extern SID_IDENTIFIER_AUTHORITY NullSidAuthority;
extern SID_IDENTIFIER_AUTHORITY WorldSidAuthority;
extern SID_IDENTIFIER_AUTHORITY LocalSidAuthority;
LsapDeleteObjectAttribute(PLSA_DB_OBJECT DbObject,
LPWSTR AttributeName);
+/* dssetup.c */
+VOID
+DsSetupInit(VOID);
+
/* lookup.c */
NTSTATUS
LsapInitSids(VOID);
DWORD ClientRevision);
/* lsarpc.c */
-VOID
+NTSTATUS
LsarStartRpcServer(VOID);
+/* notify.c */
+VOID
+LsapInitNotificationList(VOID);
+
+NTSTATUS
+LsapRegisterNotification(
+ PLSA_API_MSG RequestMsg);
+
+VOID
+LsapNotifyPolicyChange(
+ POLICY_NOTIFICATION_INFORMATION_CLASS InformationClass);
+
/* policy.c */
NTSTATUS
LsarQueryAuditLog(PLSA_DB_OBJECT PolicyObject,
PRPC_UNICODE_STRING *Name);
NTSTATUS
-LsarpLookupPrivilegeValue(PRPC_UNICODE_STRING Name,
- PLUID Value);
+LsarpLookupPrivilegeDisplayName(PRPC_UNICODE_STRING Name,
+ USHORT ClientLanguage,
+ USHORT ClientSystemDefaultLanguage,
+ PRPC_UNICODE_STRING *DisplayName,
+ USHORT *LanguageReturned);
+
+PLUID
+LsarpLookupPrivilegeValue(
+ IN PRPC_UNICODE_STRING Name);
NTSTATUS
LsarpEnumeratePrivileges(DWORD *EnumerationContext,
LsapLookupAccountRightName(ULONG RightValue,
PRPC_UNICODE_STRING *Name);
+ACCESS_MASK
+LsapLookupAccountRightValue(
+ IN PRPC_UNICODE_STRING Name);
+
/* registry.h */
NTSTATUS
LsapRegCloseKey(IN HANDLE KeyHandle);
NTSTATUS
LsapRegQueryKeyInfo(IN HANDLE KeyHandle,
OUT PULONG SubKeyCount,
+ OUT PULONG MaxSubKeyNameLength,
OUT PULONG ValueCount);
NTSTATUS
LsapDeleteLogonSession(IN PLUID LogonId);
NTSTATUS
-LsapSetLogonSessionData(IN PLUID LogonId);
+NTAPI
+LsapAddCredential(
+ _In_ PLUID LogonId,
+ _In_ ULONG AuthenticationPackage,
+ _In_ PLSA_STRING PrimaryKeyValue,
+ _In_ PLSA_STRING Credential);
+
+NTSTATUS
+NTAPI
+LsapGetCredentials(
+ _In_ PLUID LogonId,
+ _In_ ULONG AuthenticationPackage,
+ _Inout_ PULONG QueryContext,
+ _In_ BOOLEAN RetrieveAllCredentials,
+ _Inout_ PLSA_STRING PrimaryKeyValue,
+ _Out_ PULONG PrimaryKeyLength,
+ _Out_ PLSA_STRING Credentials);
+
+NTSTATUS
+NTAPI
+LsapDeleteCredential(
+ _In_ PLUID LogonId,
+ _In_ ULONG AuthenticationPackage,
+ _In_ PLSA_STRING PrimaryKeyValue);
+
+NTSTATUS
+LsapSetLogonSessionData(
+ _In_ PLUID LogonId,
+ _In_ ULONG LogonType,
+ _In_ PUNICODE_STRING UserName,
+ _In_ PUNICODE_STRING LogonDomain,
+ _In_ PSID Sid);
NTSTATUS
LsapEnumLogonSessions(IN OUT PLSA_API_MSG RequestMsg);
NTSTATUS
LsapGetLogonSessionData(IN OUT PLSA_API_MSG RequestMsg);
+/* srm.c */
+NTSTATUS
+LsapRmInitializeServer(VOID);
+
+NTSTATUS
+LsapRmCreateLogonSession(
+ PLUID LogonId);
+
+NTSTATUS
+LsapRmDeleteLogonSession(
+ PLUID LogonId);
+
/* utils.c */
INT
LsapLoadString(HINSTANCE hInstance,
LPWSTR lpBuffer,
INT nBufferMax);
+INT
+LsapGetResourceStringLengthEx(
+ _In_ HINSTANCE hInstance,
+ _In_ UINT uId,
+ _In_ USHORT usLanguage);
+
+INT
+LsapLoadStringEx(
+ _In_ HINSTANCE hInstance,
+ _In_ UINT uId,
+ _In_ USHORT usLanguage,
+ _Out_ LPWSTR lpBuffer,
+ _Out_ INT nBufferMax);
+
PSID
LsapAppendRidToSid(
PSID SrcSid,