https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f95c96e2078a7c86e8518…
commit f95c96e2078a7c86e8518395137dd0d9bc7d023e
Author: Andreas Maier <staubim(a)quantentunnel.de>
AuthorDate: Sat Apr 11 23:32:04 2020 +0200
Commit: Mark Jansen <mark.jansen(a)reactos.org>
CommitDate: Sun Apr 26 17:26:17 2020 +0200
[MSV1_0] Create stubs for SECPKG_FUNCTION_TABLE (SpLsaModeInitialize)
This commit fixes a bug too.
Old code of SpLsaModeInitialze returns a pointer to a local variable
(SECPKG_FUNCTION_TABLE).
---
dll/win32/msv1_0/CMakeLists.txt | 1 +
dll/win32/msv1_0/lsa.c | 228 ++++++++++++++++++++++++++++++++++++++++
dll/win32/msv1_0/lsa.h | 142 +++++++++++++++++++++++++
dll/win32/msv1_0/msv1_0.c | 67 ++++++------
dll/win32/msv1_0/msv1_0.spec | 2 +-
dll/win32/msv1_0/precomp.h | 1 +
6 files changed, 407 insertions(+), 34 deletions(-)
diff --git a/dll/win32/msv1_0/CMakeLists.txt b/dll/win32/msv1_0/CMakeLists.txt
index b4e56cd2475..380fc5d16dd 100644
--- a/dll/win32/msv1_0/CMakeLists.txt
+++ b/dll/win32/msv1_0/CMakeLists.txt
@@ -2,6 +2,7 @@
spec2def(msv1_0.dll msv1_0.spec)
list(APPEND SOURCE
+ lsa.c
msv1_0.c
precomp.h
${CMAKE_CURRENT_BINARY_DIR}/msv1_0_stubs.c
diff --git a/dll/win32/msv1_0/lsa.c b/dll/win32/msv1_0/lsa.c
new file mode 100644
index 00000000000..63a4bb1f0a7
--- /dev/null
+++ b/dll/win32/msv1_0/lsa.c
@@ -0,0 +1,228 @@
+/*
+ * PROJECT: Authentication Package DLL
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: dll/win32/msv1_0/lsa.c
+ * PURPOSE: NTLM-functions returned from SpLsaModeInitialize
+ (PSECPKG_FUNCTION_TABLE)
+ * COPYRIGHT: Copyright 2019-2020 Andreas Maier <staubim(a)quantentunnel.de>
+ */
+
+#include "precomp.h"
+
+#include "wine/debug.h"
+WINE_DEFAULT_DEBUG_CHANNEL(msv1_0);
+
+SECPKG_FUNCTION_TABLE NtlmLsaFn[1];
+
+NTSTATUS
+NTAPI
+SpInitialize(
+ _In_ ULONG_PTR PackageId,
+ _In_ PSECPKG_PARAMETERS Parameters,
+ _In_ PLSA_SECPKG_FUNCTION_TABLE FunctionTable)
+{
+ TRACE("LsaSpInitialize (0x%p, 0x%p, 0x%p)\n",
+ PackageId, Parameters, FunctionTable);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpShutDown(VOID)
+{
+ TRACE("LsaSpShutDown\n");
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+/* MS doc says name must be SpAcceptCredentials! */
+NTSTATUS
+NTAPI
+SpAcceptCredentials(
+ _In_ SECURITY_LOGON_TYPE LogonType,
+ _In_ PUNICODE_STRING AccountName,
+ _In_ PSECPKG_PRIMARY_CRED PrimaryCredentials,
+ _In_ PSECPKG_SUPPLEMENTAL_CRED SupplementalCredentials)
+{
+ TRACE("LsaSpAcceptCredentials(%li %wZ 0x%p 0x%p)\n",
+ LogonType, AccountName, PrimaryCredentials, SupplementalCredentials);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpAcquireCredentialsHandle(
+ _In_ PUNICODE_STRING PrincipalName,
+ _In_ ULONG CredentialUseFlags,
+ _In_ PLUID LogonId,
+ _In_ PVOID AuthorizationData,
+ _In_ PVOID GetKeyFunciton,
+ _In_ PVOID GetKeyArgument,
+ _Out_ PLSA_SEC_HANDLE CredentialHandle,
+ _Out_ PTimeStamp ExpirationTime)
+{
+ TRACE("LsaSpAcquireCredentialsHandle(%wZ 0x%lx 0x%p 0x%p 0x%p 0x%p 0x%p
0x%p)\n",
+ PrincipalName, CredentialUseFlags, LogonId,
+ AuthorizationData, GetKeyFunciton, GetKeyArgument,
+ CredentialHandle, ExpirationTime);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpQueryCredentialsAttributes(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ ULONG CredentialAttribute,
+ _Inout_ PVOID Buffer)
+{
+ TRACE("LsaSpQueryCredentialsAttributes(0x%p 0x%lx 0x%p)\n",
+ CredentialHandle, CredentialAttribute, Buffer);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpFreeCredentialsHandle(
+ _In_ LSA_SEC_HANDLE CredentialHandle)
+{
+ TRACE("LsaSpFreeCredentialsHandle(0x%p)", CredentialHandle);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpSaveCredentials(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ PSecBuffer Credentials)
+{
+ TRACE("LsaSpSaveCredentials(0x%p 0x%p)\n", CredentialHandle, Credentials);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpGetCredentials(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _Inout_ PSecBuffer Credentials)
+{
+ TRACE("LsaSpGetCredentials(0x%p 0x%p)\n", CredentialHandle, Credentials);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpDeleteCredentials(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ PSecBuffer Key)
+{
+ TRACE("LsaSpDeleteCredentials(0x%p 0x%p)\n", CredentialHandle, Key);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpGetInfoW(
+ _Out_ PSecPkgInfoW PackageInfo)
+{
+ TRACE("LsaGetInfo(0x%p)\n", PackageInfo);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpInitLsaModeContext(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ LSA_SEC_HANDLE ContextHandle,
+ _In_ PUNICODE_STRING TargetName,
+ _In_ ULONG ContextRequirements,
+ _In_ ULONG TargetDataRep,
+ _In_ PSecBufferDesc InputBuffers,
+ _Out_ PLSA_SEC_HANDLE NewContextHandle,
+ _Inout_ PSecBufferDesc OutputBuffers,
+ _Out_ PULONG ContextAttributes,
+ _Out_ PTimeStamp ExpirationTime,
+ _Out_ PBOOLEAN MappedContext,
+ _Out_ PSecBuffer ContextData)
+{
+ TRACE("LsaSpInitLsaModeContext(0x%p 0x%p %wZ 0x%lx %i 0x%p 0x%p 0x%p "
+ "0x%p 0x%p 0x%p 0x%p 0x%p 0x%p 0x%p 0x%p)\n",
+ CredentialHandle, ContextHandle, TargetName,
+ ContextRequirements, TargetDataRep, InputBuffers,
+ NewContextHandle, OutputBuffers, ContextAttributes,
+ ExpirationTime, MappedContext, ContextData);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpAcceptLsaModeContext(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ LSA_SEC_HANDLE ContextHandle,
+ _In_ PSecBufferDesc InputBuffer,
+ _In_ ULONG ContextRequirements,
+ _In_ ULONG TargetDataRep,
+ _Out_ PLSA_SEC_HANDLE NewContextHandle,
+ _Inout_ PSecBufferDesc OutputBuffer,
+ _Out_ PULONG ContextAttributes,
+ _Out_ PTimeStamp ExpirationTime,
+ _Out_ PBOOLEAN MappedContext,
+ _Out_ PSecBuffer ContextData)
+{
+ TRACE("LsaSpAcceptLsaModeContext(0x%p 0x%p 0x%p %i %i 0x%p 0x%p 0x%p "
+ "0x%p 0x%p 0x%p)\n",
+ CredentialHandle, ContextHandle, InputBuffer, ContextRequirements,
+ TargetDataRep, NewContextHandle, OutputBuffer,
+ ContextAttributes, ExpirationTime, MappedContext, ContextData);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpDeleteContext(
+ _In_ LSA_SEC_HANDLE ContextHandle)
+{
+ TRACE("LsaSpDeleteContext(0x%p)\n", ContextHandle);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpApplyControlToken(
+ _In_ LSA_SEC_HANDLE ContextHandle,
+ _In_ PSecBufferDesc ControlToken)
+{
+ TRACE("LsaSpApplyControlToken(0x%p 0x%p)\n", ContextHandle, ControlToken);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpGetUserInfo(
+ _In_ PLUID LogonId,
+ _In_ ULONG Flags,
+ _Out_ PSecurityUserData *UserData)
+{
+ TRACE("LsaSpGetUserInfo(0x%p 0x%lx 0x%p)\n", LogonId, Flags, UserData);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpGetExtendedInformation(
+ _In_ SECPKG_EXTENDED_INFORMATION_CLASS Class,
+ _Out_ PSECPKG_EXTENDED_INFORMATION *ppInfo)
+{
+ TRACE("LsaSpGetExtendedInformation(0x%lx 0x%p)\n",
+ Class, ppInfo);
+ return STATUS_NOT_IMPLEMENTED;
+}
+
+NTSTATUS
+NTAPI
+LsaSpSetExtendedInformation(
+ _In_ SECPKG_EXTENDED_INFORMATION_CLASS Class,
+ _In_ PSECPKG_EXTENDED_INFORMATION Info)
+{
+ TRACE("LsaSpSetExtendedInformation(0x%lx 0x%p)\n",
+ Class, Info);
+ return STATUS_NOT_IMPLEMENTED;
+}
diff --git a/dll/win32/msv1_0/lsa.h b/dll/win32/msv1_0/lsa.h
new file mode 100644
index 00000000000..e5fe1a934d1
--- /dev/null
+++ b/dll/win32/msv1_0/lsa.h
@@ -0,0 +1,142 @@
+/*
+ * PROJECT: Authentication Package DLL
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: dll/win32/msv1_0/lsa.h
+ * PURPOSE: header for lsa.c
+ * COPYRIGHT: Copyright 2019-2020 Andreas Maier <staubim(a)quantentunnel.de>
+ */
+
+#ifndef _MSV1_0_LSA_H_
+#define _MSV1_0_LSA_H_
+
+// functions we provide to LSA in SpLsaModeInitialize
+extern SECPKG_FUNCTION_TABLE NtlmLsaFn[1];
+
+NTSTATUS
+NTAPI
+SpInitialize(
+ _In_ ULONG_PTR PackageId,
+ _In_ PSECPKG_PARAMETERS Parameters,
+ _In_ PLSA_SECPKG_FUNCTION_TABLE FunctionTable);
+
+NTSTATUS
+NTAPI
+LsaSpShutDown(VOID);
+
+NTSTATUS
+NTAPI
+SpAcceptCredentials(
+ _In_ SECURITY_LOGON_TYPE LogonType,
+ _In_ PUNICODE_STRING AccountName,
+ _In_ PSECPKG_PRIMARY_CRED PrimaryCredentials,
+ _In_ PSECPKG_SUPPLEMENTAL_CRED SupplementalCredentials);
+
+NTSTATUS
+NTAPI
+LsaSpAcquireCredentialsHandle(
+ _In_ PUNICODE_STRING PrincipalName,
+ _In_ ULONG CredentialUseFlags,
+ _In_ PLUID LogonId,
+ _In_ PVOID AuthorizationData,
+ _In_ PVOID GetKeyFunciton,
+ _In_ PVOID GetKeyArgument,
+ _Out_ PLSA_SEC_HANDLE CredentialHandle,
+ _Out_ PTimeStamp ExpirationTime);
+
+NTSTATUS
+NTAPI
+LsaSpQueryCredentialsAttributes(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ ULONG CredentialAttribute,
+ _Inout_ PVOID Buffer);
+
+NTSTATUS
+NTAPI
+LsaSpFreeCredentialsHandle(
+ _In_ LSA_SEC_HANDLE CredentialHandle);
+
+NTSTATUS
+NTAPI
+LsaSpSaveCredentials(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ PSecBuffer Credentials);
+
+NTSTATUS
+NTAPI
+LsaSpGetCredentials(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _Inout_ PSecBuffer Credentials);
+
+NTSTATUS
+NTAPI
+LsaSpDeleteCredentials(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ PSecBuffer Key);
+
+NTSTATUS
+NTAPI
+LsaSpGetInfoW(
+ _Out_ PSecPkgInfoW PackageInfo);
+
+NTSTATUS
+NTAPI
+LsaSpInitLsaModeContext(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ LSA_SEC_HANDLE ContextHandle,
+ _In_ PUNICODE_STRING TargetName,
+ _In_ ULONG ContextRequirements,
+ _In_ ULONG TargetDataRep,
+ _In_ PSecBufferDesc InputBuffers,
+ _Out_ PLSA_SEC_HANDLE NewContextHandle,
+ _Inout_ PSecBufferDesc OutputBuffers,
+ _Out_ PULONG ContextAttributes,
+ _Out_ PTimeStamp ExpirationTime,
+ _Out_ PBOOLEAN MappedContext,
+ _Out_ PSecBuffer ContextData);
+
+NTSTATUS
+NTAPI
+LsaSpAcceptLsaModeContext(
+ _In_ LSA_SEC_HANDLE CredentialHandle,
+ _In_ LSA_SEC_HANDLE ContextHandle,
+ _In_ PSecBufferDesc InputBuffer,
+ _In_ ULONG ContextRequirements,
+ _In_ ULONG TargetDataRep,
+ _Out_ PLSA_SEC_HANDLE NewContextHandle,
+ _Inout_ PSecBufferDesc OutputBuffer,
+ _Out_ PULONG ContextAttributes,
+ _Out_ PTimeStamp ExpirationTime,
+ _Out_ PBOOLEAN MappedContext,
+ _Out_ PSecBuffer ContextData);
+
+NTSTATUS
+NTAPI
+LsaSpDeleteContext(
+ _In_ LSA_SEC_HANDLE ContextHandle);
+
+NTSTATUS
+NTAPI
+LsaSpApplyControlToken(
+ _In_ LSA_SEC_HANDLE ContextHandle,
+ _In_ PSecBufferDesc ControlToken);
+
+NTSTATUS
+NTAPI
+LsaSpGetUserInfo(
+ _In_ PLUID LogonId,
+ _In_ ULONG Flags,
+ _Out_ PSecurityUserData *UserData);
+
+NTSTATUS
+NTAPI
+LsaSpGetExtendedInformation(
+ _In_ SECPKG_EXTENDED_INFORMATION_CLASS Class,
+ _Out_ PSECPKG_EXTENDED_INFORMATION *ppInfo);
+
+NTSTATUS
+NTAPI
+LsaSpSetExtendedInformation(
+ _In_ SECPKG_EXTENDED_INFORMATION_CLASS Class,
+ _In_ PSECPKG_EXTENDED_INFORMATION Info);
+
+#endif /* _MSV1_0_LSA_H_ */
diff --git a/dll/win32/msv1_0/msv1_0.c b/dll/win32/msv1_0/msv1_0.c
index 6db439cc762..a6c9fd75225 100644
--- a/dll/win32/msv1_0/msv1_0.c
+++ b/dll/win32/msv1_0/msv1_0.c
@@ -1716,8 +1716,6 @@ SpLsaModeInitialize(
_Out_ PSECPKG_FUNCTION_TABLE *ppTables,
_Out_ PULONG pcTables)
{
- SECPKG_FUNCTION_TABLE Tables[1];
-
TRACE("SpLsaModeInitialize(0x%lx %p %p %p)\n",
LsaVersion, PackageVersion, ppTables, pcTables);
@@ -1726,37 +1724,40 @@ SpLsaModeInitialize(
*PackageVersion = SECPKG_INTERFACE_VERSION;
- RtlZeroMemory(&Tables, sizeof(Tables));
-
- Tables[0].InitializePackage = LsaApInitializePackage;
-// Tables[0].LogonUser = NULL;
- Tables[0].CallPackage = (PLSA_AP_CALL_PACKAGE)LsaApCallPackage;
- Tables[0].LogonTerminated = LsaApLogonTerminated;
- Tables[0].CallPackageUntrusted = LsaApCallPackageUntrusted;
- Tables[0].CallPackagePassthrough =
(PLSA_AP_CALL_PACKAGE_PASSTHROUGH)LsaApCallPackagePassthrough;
-// Tables[0].LogonUserEx = NULL;
- Tables[0].LogonUserEx2 = LsaApLogonUserEx2;
-// Tables[0].Initialize = SpInitialize;
-// Tables[0].Shutdown = NULL;
-// Tables[0].GetInfo = NULL;
-// Tables[0].AcceptCredentials = NULL;
-// Tables[0].SpAcquireCredentialsHandle = NULL;
-// Tables[0].SpQueryCredentialsAttributes = NULL;
-// Tables[0].FreeCredentialsHandle = NULL;
-// Tables[0].SaveCredentials = NULL;
-// Tables[0].GetCredentials = NULL;
-// Tables[0].DeleteCredentials = NULL;
-// Tables[0].InitLsaModeContext = NULL;
-// Tables[0].AcceptLsaModeContext = NULL;
-// Tables[0].DeleteContext = NULL;
-// Tables[0].ApplyControlToken = NULL;
-// Tables[0].GetUserInfo = NULL;
-// Tables[0].GetExtendedInformation = NULL;
-// Tables[0].SpQueryContextAttributes = NULL;
-// Tables[0].SpAddCredentials = NULL;
-// Tables[0].SetExtendedInformation = NULL;
-
- *ppTables = Tables;
+ RtlZeroMemory(NtlmLsaFn, sizeof(NtlmLsaFn));
+
+ /* msv1_0 (XP, win2k) returns NULL for
+ * InitializePackage, LsaLogonUser,LsaLogonUserEx,
+ * SpQueryContextAttributes and SpAddCredentials */
+ NtlmLsaFn[0].InitializePackage = NULL;
+ NtlmLsaFn[0].LsaLogonUser = NULL;
+ NtlmLsaFn[0].CallPackage = LsaApCallPackage;
+ NtlmLsaFn[0].LogonTerminated = LsaApLogonTerminated;
+ NtlmLsaFn[0].CallPackageUntrusted = LsaApCallPackageUntrusted;
+ NtlmLsaFn[0].CallPackagePassthrough = LsaApCallPackagePassthrough;
+ NtlmLsaFn[0].LogonUserEx = NULL;
+ NtlmLsaFn[0].LogonUserEx2 = LsaApLogonUserEx2;
+ NtlmLsaFn[0].Initialize = SpInitialize;
+ NtlmLsaFn[0].Shutdown = LsaSpShutDown;
+ NtlmLsaFn[0].GetInfo = LsaSpGetInfoW;
+ NtlmLsaFn[0].AcceptCredentials = SpAcceptCredentials;
+ NtlmLsaFn[0].SpAcquireCredentialsHandle = LsaSpAcquireCredentialsHandle;
+ NtlmLsaFn[0].SpQueryCredentialsAttributes = LsaSpQueryCredentialsAttributes;
+ NtlmLsaFn[0].FreeCredentialsHandle = LsaSpFreeCredentialsHandle;
+ NtlmLsaFn[0].SaveCredentials = LsaSpSaveCredentials;
+ NtlmLsaFn[0].GetCredentials = LsaSpGetCredentials;
+ NtlmLsaFn[0].DeleteCredentials = LsaSpDeleteCredentials;
+ NtlmLsaFn[0].InitLsaModeContext = LsaSpInitLsaModeContext;
+ NtlmLsaFn[0].AcceptLsaModeContext = LsaSpAcceptLsaModeContext;
+ NtlmLsaFn[0].DeleteContext = LsaSpDeleteContext;
+ NtlmLsaFn[0].ApplyControlToken = LsaSpApplyControlToken;
+ NtlmLsaFn[0].GetUserInfo = LsaSpGetUserInfo;
+ NtlmLsaFn[0].GetExtendedInformation = LsaSpGetExtendedInformation;
+ NtlmLsaFn[0].SpQueryContextAttributes = NULL;
+ NtlmLsaFn[0].SpAddCredentials = NULL;
+ NtlmLsaFn[0].SetExtendedInformation = LsaSpSetExtendedInformation;
+
+ *ppTables = NtlmLsaFn;
*pcTables = 1;
return STATUS_SUCCESS;
diff --git a/dll/win32/msv1_0/msv1_0.spec b/dll/win32/msv1_0/msv1_0.spec
index f1c98077b2a..36d62cf1223 100644
--- a/dll/win32/msv1_0/msv1_0.spec
+++ b/dll/win32/msv1_0/msv1_0.spec
@@ -10,7 +10,7 @@
@ stub MsvSamLogoff
@ stub MsvSamValidate
@ stub MsvValidateTarget
-@ stub SpInitialize
+@ stdcall SpInitialize(long ptr ptr)
@ stub SpInstanceInit
@ stdcall SpLsaModeInitialize(long ptr ptr ptr)
@ stdcall SpUserModeInitialize(long ptr ptr ptr)
diff --git a/dll/win32/msv1_0/precomp.h b/dll/win32/msv1_0/precomp.h
index c4140240ab3..99aeda9d36e 100644
--- a/dll/win32/msv1_0/precomp.h
+++ b/dll/win32/msv1_0/precomp.h
@@ -29,6 +29,7 @@
#include <samsrv/samsrv.h>
//#include <lsass/lsasrv.h>
+#include "lsa.h"
#include "msv1_0.h"
#include <wine/debug.h>