Dmitry Timoshkov : advapi32: Use GetWindowsAccountDomainSid() to retrieve the domain SID.

Alexandre Julliard julliard at winehq.org
Fri Mar 2 12:16:45 CST 2018


Module: wine
Branch: master
Commit: a3bcaca48dd694a2c9d610730df0326780ca27df
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a3bcaca48dd694a2c9d610730df0326780ca27df

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Fri Mar  2 18:44:17 2018 +0800

advapi32: Use GetWindowsAccountDomainSid() to retrieve the domain SID.

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/advapi32/lsa.c | 23 ++++++++++++++++-------
 include/winbase.h   |  1 +
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
index 6f51f9d..f2fcc07 100644
--- a/dlls/advapi32/lsa.c
+++ b/dlls/advapi32/lsa.c
@@ -763,16 +763,24 @@ NTSTATUS WINAPI LsaQueryInformationPolicy(
         break;
         case  PolicyDnsDomainInformation:	/* 12 (0xc) */
         {
-            struct di
+            struct
             {
                 POLICY_DNS_DOMAIN_INFO info;
-                SID sid;
+                struct
+                {
+                    SID sid;
+                    DWORD sid_subauthority[3];
+                } domain_sid;
                 WCHAR domain_name[MAX_COMPUTERNAME_LENGTH + 1];
                 WCHAR dns_domain_name[MAX_COMPUTERNAME_LENGTH + 1];
                 WCHAR dns_forest_name[MAX_COMPUTERNAME_LENGTH + 1];
-            };
+            } *xdi;
+            struct
+            {
+                SID sid;
+                DWORD sid_subauthority[3];
+            } computer_sid;
             DWORD dwSize;
-            struct di *xdi;
 
             xdi = heap_alloc_zero(sizeof(*xdi));
             if (!xdi) return STATUS_NO_MEMORY;
@@ -788,10 +796,11 @@ NTSTATUS WINAPI LsaQueryInformationPolicy(
 
             /* FIXME: also set DnsDomainName and DnsForestName */
 
-            if (ADVAPI_GetComputerSid(&xdi->sid))
+            dwSize = sizeof(xdi->domain_sid);
+            if (ADVAPI_GetComputerSid(&computer_sid.sid) && GetWindowsAccountDomainSid(&computer_sid.sid, &xdi->domain_sid.sid, &dwSize))
             {
-                xdi->info.Sid = &xdi->sid;
-                TRACE("setting SID to %s\n", debugstr_sid(&xdi->sid));
+                xdi->info.Sid = &xdi->domain_sid.sid;
+                TRACE("setting SID to %s\n", debugstr_sid(&xdi->domain_sid.sid));
             }
 
             *Buffer = xdi;
diff --git a/include/winbase.h b/include/winbase.h
index e47c87a..9c7908a 100644
--- a/include/winbase.h
+++ b/include/winbase.h
@@ -2245,6 +2245,7 @@ WINBASEAPI BOOL        WINAPI GetVolumePathNameW(LPCWSTR,LPWSTR,DWORD);
 WINBASEAPI BOOL        WINAPI GetVolumePathNamesForVolumeNameA(LPCSTR,LPSTR,DWORD,PDWORD);
 WINBASEAPI BOOL        WINAPI GetVolumePathNamesForVolumeNameW(LPCWSTR,LPWSTR,DWORD,PDWORD);
 #define                       GetVolumePathNamesForVolumeName WINELIB_NAME_AW(GetVolumePathNamesForVolumeName)
+WINADVAPI  BOOL        WINAPI GetWindowsAccountDomainSid(PSID,PSID,DWORD*);
 WINBASEAPI UINT        WINAPI GetWindowsDirectoryA(LPSTR,UINT);
 WINBASEAPI UINT        WINAPI GetWindowsDirectoryW(LPWSTR,UINT);
 #define                       GetWindowsDirectory WINELIB_NAME_AW(GetWindowsDirectory)




More information about the wine-cvs mailing list