[PATCH] advapi32: add stub for LogonUserEx{A,W}

Louis Lenders xerox.xerox2000x at gmail.com
Wed Sep 2 11:22:29 CDT 2020


This was API mentioned on forum: https://forum.winehq.org/viewtopic.php?f=2&t=34291
(The app is ConsultantPlus)

Signed-off-by: Louis Lenders <xerox.xerox2000x at gmail.com>
---
 dlls/advapi32/advapi.c      | 57 ++++++++++++++++++++++++++-----------
 dlls/advapi32/advapi32.spec |  4 +--
 2 files changed, 42 insertions(+), 19 deletions(-)

diff --git a/dlls/advapi32/advapi.c b/dlls/advapi32/advapi.c
index 589405b59e..b494740bd8 100644
--- a/dlls/advapi32/advapi.c
+++ b/dlls/advapi32/advapi.c
@@ -237,36 +237,59 @@ DWORD WINAPI InitiateShutdownW(WCHAR *name, WCHAR *message, DWORD seconds, DWORD
     return ERROR_CALL_NOT_IMPLEMENTED;
 }
 
-BOOL WINAPI LogonUserA( LPCSTR lpszUsername, LPCSTR lpszDomain, LPCSTR lpszPassword,
-                        DWORD dwLogonType, DWORD dwLogonProvider, PHANDLE phToken )
+BOOL WINAPI LogonUserExW ( const WCHAR *name, const WCHAR *domain, const WCHAR *pwd,
+                           DWORD type, DWORD provider, HANDLE *token, SID **sid, VOID **buf,
+                           DWORD *size, QUOTA_LIMITS *quota_limits )
 {
-    WCHAR *usernameW = NULL, *domainW = NULL, *passwordW = NULL;
+    FIXME("%s %s %s 0x%08x 0x%08x %p %p %p %p %p\n", debugstr_w(name),
+          debugstr_w(domain), debugstr_w(pwd), type, provider, token, sid, buf, size, quota_limits);
+
+    if ( sid || buf || size || quota_limits )
+    {
+        FIXME(" %p %p %p %p - unsupported arguments\n", sid, buf, size, quota_limits);
+        return FALSE;
+    }
+
+    if ( token )
+        *token = (HANDLE *)0xdeadbeef;
+
+    return TRUE;
+}
+
+BOOL WINAPI LogonUserExA ( const char *name, const char *domain, const char *pwd,
+                           DWORD type, DWORD provider, HANDLE *token, SID **sid, VOID **buf,
+                           DWORD *size, QUOTA_LIMITS *quota_limits )
+{
+    WCHAR *nameW = NULL, *domainW = NULL, *pwdW = NULL;
     BOOL ret = FALSE;
 
-    TRACE("%s %s %p 0x%08x 0x%08x %p\n", debugstr_a(lpszUsername),
-          debugstr_a(lpszDomain), lpszPassword, dwLogonType, dwLogonProvider, phToken);
+    TRACE("%s %s %s 0x%08x 0x%08x %p %p %p %p %p\n", debugstr_a(name),
+          debugstr_a(domain), debugstr_a(pwd), type, provider, token, sid, buf, size, quota_limits);
 
-    if (lpszUsername && !(usernameW = strdupAW( lpszUsername ))) return FALSE;
-    if (lpszDomain && !(domainW = strdupAW( lpszUsername ))) goto done;
-    if (lpszPassword && !(passwordW = strdupAW( lpszPassword ))) goto done;
+    if (name && !(nameW = strdupAW( name ))) return FALSE;
+    if (domain && !(domainW = strdupAW( domain ))) goto done;
+    if (pwd && !(pwdW = strdupAW( pwd ))) goto done;
 
-    ret = LogonUserW( usernameW, domainW, passwordW, dwLogonType, dwLogonProvider, phToken );
+    ret = LogonUserExW( nameW, domainW, pwdW, type, provider, token, sid, buf, size, quota_limits );
 
 done:
-    heap_free( usernameW );
+    heap_free( nameW );
     heap_free( domainW );
-    heap_free( passwordW );
+    heap_free( pwdW );
     return ret;
 }
 
-BOOL WINAPI LogonUserW( LPCWSTR lpszUsername, LPCWSTR lpszDomain, LPCWSTR lpszPassword,
-                        DWORD dwLogonType, DWORD dwLogonProvider, PHANDLE phToken )
+BOOL WINAPI LogonUserW( const WCHAR *name, const WCHAR *domain, const WCHAR *pwd,
+                        DWORD type, DWORD provider, HANDLE *token )
 {
-    FIXME("%s %s %p 0x%08x 0x%08x %p - stub\n", debugstr_w(lpszUsername),
-          debugstr_w(lpszDomain), lpszPassword, dwLogonType, dwLogonProvider, phToken);
+    return LogonUserExW ( name, domain, pwd, type, provider, token, NULL, NULL, NULL, NULL );
+}
 
-    *phToken = (HANDLE *)0xdeadbeef;
-    return TRUE;
+
+BOOL WINAPI LogonUserA( const char *name, const char *domain, const char *pwd,
+                        DWORD type, DWORD provider, HANDLE *token )
+{
+    return LogonUserExA ( name, domain, pwd, type, provider, token, NULL, NULL, NULL, NULL );
 }
 
 typedef UINT (WINAPI *fnMsiProvideComponentFromDescriptor)(LPCWSTR,LPWSTR,DWORD*,DWORD*);
diff --git a/dlls/advapi32/advapi32.spec b/dlls/advapi32/advapi32.spec
index fcef859a7c..6b41eb77dd 100644
--- a/dlls/advapi32/advapi32.spec
+++ b/dlls/advapi32/advapi32.spec
@@ -423,9 +423,9 @@
 @ stdcall -import IsWellKnownSid(ptr long)
 @ stdcall LockServiceDatabase(ptr)
 @ stdcall LogonUserA(str str str long long ptr)
-# @ stub LogonUserExA
+@ stdcall LogonUserExA(str str str long long ptr ptr ptr ptr ptr)
 # @ stub LogonUserExExW
-# @ stub LogonUserExW
+@ stdcall LogonUserExW(wstr wstr wstr long long ptr ptr ptr ptr ptr)
 @ stdcall LogonUserW(wstr wstr wstr long long ptr)
 @ stdcall LookupAccountNameA(str str ptr ptr ptr ptr ptr)
 @ stdcall LookupAccountNameW(wstr wstr ptr ptr ptr ptr ptr)
-- 
2.28.0




More information about the wine-devel mailing list