James Hawkins : msi: Set the UserSID property.

Alexandre Julliard julliard at wine.codeweavers.com
Fri Dec 1 06:29:56 CST 2006


Module: wine
Branch: master
Commit: 8ae81d0620a0c11febea41fdfd463f692e506dbc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8ae81d0620a0c11febea41fdfd463f692e506dbc

Author: James Hawkins <truiken at gmail.com>
Date:   Thu Nov 30 18:15:40 2006 -0800

msi: Set the UserSID property.

---

 dlls/msi/package.c |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/dlls/msi/package.c b/dlls/msi/package.c
index 57bf0f6..d4b9d25 100644
--- a/dlls/msi/package.c
+++ b/dlls/msi/package.c
@@ -41,6 +41,7 @@
 #include "wine/unicode.h"
 #include "objbase.h"
 #include "msidefs.h"
+#include "sddl.h"
 
 #include "msipriv.h"
 
@@ -113,6 +114,56 @@ static UINT set_installed_prop( MSIPACKA
     return r;
 }
 
+static UINT set_user_sid_prop( MSIPACKAGE *package )
+{
+    SID_NAME_USE use;
+    LPWSTR user_name;
+    LPWSTR sid_str, dom = NULL;
+    DWORD size, dom_size;
+    PSID psid = NULL;
+    UINT r = ERROR_FUNCTION_FAILED;
+
+    static const WCHAR user_sid[] = {'U','s','e','r','S','I','D',0};
+
+    size = 0;
+    GetUserNameW( NULL, &size );
+
+    user_name = msi_alloc( (size + 1) * sizeof(WCHAR) );
+    if (!user_name)
+        return ERROR_OUTOFMEMORY;
+
+    if (!GetUserNameW( user_name, &size ))
+        goto done;
+
+    size = 0;
+    dom_size = 0;
+    LookupAccountNameW( NULL, user_name, NULL, &size, NULL, &dom_size, &use );
+
+    psid = msi_alloc( size );
+    dom = msi_alloc( dom_size );
+    if (!psid || !dom)
+    {
+        r = ERROR_OUTOFMEMORY;
+        goto done;
+    }
+
+    if (!LookupAccountNameW( NULL, user_name, psid, &size, dom, &dom_size, &use ))
+        goto done;
+
+    if (!ConvertSidToStringSidW( psid, &sid_str ))
+        goto done;
+
+    r = MSI_SetPropertyW( package, user_sid, sid_str );
+
+done:
+    LocalFree( sid_str );
+    msi_free( dom );
+    msi_free( psid );
+    msi_free( user_name );
+
+    return r;
+}
+
 /*
  * There are a whole slew of these we need to set
  *
@@ -379,6 +430,9 @@ static VOID set_installer_properties(MSI
         msi_free( company );
     }
 
+    if ( set_user_sid_prop( package ) != ERROR_SUCCESS)
+        ERR("Failed to set the UserSID property\n");
+
     msi_free( check );
     CloseHandle( hkey );
 }




More information about the wine-cvs mailing list