[ADVAPI32]
authorEric Kohl <eric.kohl@reactos.org>
Mon, 23 May 2016 13:53:24 +0000 (13:53 +0000)
committerEric Kohl <eric.kohl@reactos.org>
Mon, 23 May 2016 13:53:24 +0000 (13:53 +0000)
Implement LogonUserEx[A/W].

svn path=/trunk/; revision=71385

reactos/dll/win32/advapi32/advapi32.spec
reactos/dll/win32/advapi32/misc/logon.c
reactos/sdk/include/psdk/winbase.h

index 23bf223..47b0f02 100644 (file)
 322 stdcall IsWellKnownSid(ptr long)
 323 stdcall LockServiceDatabase(ptr)
 324 stdcall LogonUserA(str str str long long ptr)
-325 stub LogonUserExA
-326 stub LogonUserExW
+325 stdcall LogonUserExA(str str str long long ptr ptr ptr ptr ptr)
+326 stdcall LogonUserExW(wstr wstr wstr long long ptr ptr ptr ptr ptr)
 327 stdcall LogonUserW(wstr wstr wstr long long ptr)
 328 stdcall LookupAccountNameA(str str ptr ptr ptr ptr ptr)
 329 stdcall LookupAccountNameW(wstr wstr ptr ptr ptr ptr ptr)
index b3ca1f7..003113a 100644 (file)
@@ -221,16 +221,49 @@ CreateProcessAsUserW(HANDLE hToken,
     return TRUE;
 }
 
+
 /*
  * @implemented
  */
-BOOL WINAPI
-LogonUserA(LPSTR lpszUsername,
-           LPSTR lpszDomain,
-           LPSTR lpszPassword,
-           DWORD dwLogonType,
-           DWORD dwLogonProvider,
-           PHANDLE phToken)
+BOOL
+WINAPI
+LogonUserA(
+    _In_ LPSTR lpszUsername,
+    _In_opt_ LPSTR lpszDomain,
+    _In_opt_ LPSTR lpszPassword,
+    _In_ DWORD dwLogonType,
+    _In_ DWORD dwLogonProvider,
+    _Out_opt_ PHANDLE phToken)
+{
+    return LogonUserExA(lpszUsername,
+                        lpszDomain,
+                        lpszPassword,
+                        dwLogonType,
+                        dwLogonProvider,
+                        phToken,
+                        NULL,
+                        NULL,
+                        NULL,
+                        NULL);
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+LogonUserExA(
+    _In_ LPSTR lpszUsername,
+    _In_opt_ LPSTR lpszDomain,
+    _In_opt_ LPSTR lpszPassword,
+    _In_ DWORD dwLogonType,
+    _In_ DWORD dwLogonProvider,
+    _Out_opt_ PHANDLE phToken,
+    _Out_opt_ PSID *ppLogonSid,
+    _Out_opt_ PVOID *ppProfileBuffer,
+    _Out_opt_ LPDWORD pdwProfileLength,
+    _Out_opt_ PQUOTA_LIMITS pQuotaLimits)
 {
     UNICODE_STRING UserName;
     UNICODE_STRING Domain;
@@ -259,12 +292,16 @@ LogonUserA(LPSTR lpszUsername,
         goto PasswordDone;
     }
 
-    ret = LogonUserW(UserName.Buffer,
-                     Domain.Buffer,
-                     Password.Buffer,
-                     dwLogonType,
-                     dwLogonProvider,
-                     phToken);
+    ret = LogonUserExW(UserName.Buffer,
+                       Domain.Buffer,
+                       Password.Buffer,
+                       dwLogonType,
+                       dwLogonProvider,
+                       phToken,
+                       ppLogonSid,
+                       ppProfileBuffer,
+                       pdwProfileLength,
+                       pQuotaLimits);
 
     if (Password.Buffer != NULL)
         RtlFreeUnicodeString(&Password);
@@ -285,13 +322,45 @@ UsernameDone:
 /*
  * @implemented
  */
-BOOL WINAPI
-LogonUserW(LPWSTR lpszUsername,
-           LPWSTR lpszDomain,
-           LPWSTR lpszPassword,
-           DWORD dwLogonType,
-           DWORD dwLogonProvider,
-           PHANDLE phToken)
+BOOL
+WINAPI
+LogonUserW(
+    _In_ LPWSTR lpszUsername,
+    _In_opt_ LPWSTR lpszDomain,
+    _In_opt_ LPWSTR lpszPassword,
+    _In_ DWORD dwLogonType,
+    _In_ DWORD dwLogonProvider,
+    _Out_opt_ PHANDLE phToken)
+{
+    return LogonUserExW(lpszUsername,
+                        lpszDomain,
+                        lpszPassword,
+                        dwLogonType,
+                        dwLogonProvider,
+                        phToken,
+                        NULL,
+                        NULL,
+                        NULL,
+                        NULL);
+}
+
+
+/*
+ * @implemented
+ */
+BOOL
+WINAPI
+LogonUserExW(
+    _In_ LPWSTR lpszUsername,
+    _In_opt_ LPWSTR lpszDomain,
+    _In_opt_ LPWSTR lpszPassword,
+    _In_ DWORD dwLogonType,
+    _In_ DWORD dwLogonProvider,
+    _Out_opt_ PHANDLE phToken,
+    _Out_opt_ PSID *ppLogonSid,
+    _Out_opt_ PVOID *ppProfileBuffer,
+    _Out_opt_ LPDWORD pdwProfileLength,
+    _Out_opt_ PQUOTA_LIMITS pQuotaLimits)
 {
     SID_IDENTIFIER_AUTHORITY LocalAuthority = {SECURITY_LOCAL_SID_AUTHORITY};
     SID_IDENTIFIER_AUTHORITY SystemAuthority = {SECURITY_NT_AUTHORITY};
@@ -503,6 +572,8 @@ LogonUserW(LPWSTR lpszUsername,
 
     *phToken = TokenHandle;
 
+    /* FIXME: return ppLogonSid, ppProfileBuffer, pdwProfileLength and pQuotaLimits */
+
 done:
     if (ProfileBuffer != NULL)
         LsaFreeReturnBuffer(ProfileBuffer);
index bdc8c76..c6b2df2 100644 (file)
@@ -2566,6 +2566,36 @@ PVOID WINAPI LockResource(HGLOBAL);
 BOOL WINAPI LogonUserA(_In_ LPSTR, _In_opt_ LPSTR, _In_opt_ LPSTR, _In_ DWORD, _In_ DWORD, _Outptr_ PHANDLE);
 BOOL WINAPI LogonUserW(_In_ LPWSTR, _In_opt_ LPWSTR, _In_opt_ LPWSTR, _In_ DWORD, _In_ DWORD, _Outptr_ PHANDLE);
 
+_Success_(return != FALSE)
+BOOL
+WINAPI
+LogonUserExA(
+  _In_ LPSTR lpszUsername,
+  _In_opt_ LPSTR lpszDomain,
+  _In_opt_ LPSTR lpszPassword,
+  _In_ DWORD dwLogonType,
+  _In_ DWORD dwLogonProvider,
+  _Out_opt_ PHANDLE phToken,
+  _Out_opt_ PSID *ppLogonSid,
+  _Out_opt_ PVOID *ppProfileBuffer,
+  _Out_opt_ LPDWORD pdwProfileLength,
+  _Out_opt_ PQUOTA_LIMITS pQuotaLimits);
+
+_Success_(return != FALSE)
+BOOL
+WINAPI
+LogonUserExW(
+  _In_ LPWSTR lpszUsername,
+  _In_opt_ LPWSTR lpszDomain,
+  _In_opt_ LPWSTR lpszPassword,
+  _In_ DWORD dwLogonType,
+  _In_ DWORD dwLogonProvider,
+  _Out_opt_ PHANDLE phToken,
+  _Out_opt_ PSID *ppLogonSid,
+  _Out_opt_ PVOID *ppProfileBuffer,
+  _Out_opt_ LPDWORD pdwProfileLength,
+  _Out_opt_ PQUOTA_LIMITS pQuotaLimits);
+
 _Success_(return != FALSE)
 BOOL
 WINAPI
@@ -3359,6 +3389,7 @@ typedef PCACTCTXW PCACTCTX;
 #define LoadLibrary LoadLibraryW
 #define LoadLibraryEx LoadLibraryExW
 #define LogonUser LogonUserW
+#define LogonUserEx LogonUserExW
 #define LookupAccountName LookupAccountNameW
 #define LookupAccountSid LookupAccountSidW
 #define LookupPrivilegeDisplayName LookupPrivilegeDisplayNameW
@@ -3567,6 +3598,7 @@ typedef ENUMRESTYPEPROCA ENUMRESTYPEPROC;
 #define LoadLibrary LoadLibraryA
 #define LoadLibraryEx LoadLibraryExA
 #define LogonUser LogonUserA
+#define LogonUserEx LogonUserExA
 #define LookupAccountName LookupAccountNameA
 #define LookupAccountSid LookupAccountSidA
 #define LookupPrivilegeDisplayName LookupPrivilegeDisplayNameA