return r == ERROR_SUCCESS && type == REG_DWORD;
}
-static UINT get_user_sid(LPWSTR *usersid)
+static WCHAR *get_user_sid(void)
{
HANDLE token;
- BYTE buf[1024];
- DWORD size;
- PTOKEN_USER user;
+ DWORD size = 256;
+ TOKEN_USER *user;
+ WCHAR *ret;
- if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &token))
- return ERROR_FUNCTION_FAILED;
-
- size = sizeof(buf);
- if (!GetTokenInformation(token, TokenUser, buf, size, &size)) {
- CloseHandle(token);
- return ERROR_FUNCTION_FAILED;
+ if (!OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, &token )) return NULL;
+ if (!(user = msi_alloc( size )))
+ {
+ CloseHandle( token );
+ return NULL;
}
-
- user = (PTOKEN_USER)buf;
- if (!ConvertSidToStringSidW(user->User.Sid, usersid)) {
- CloseHandle(token);
- return ERROR_FUNCTION_FAILED;
+ if (!GetTokenInformation( token, TokenUser, user, size, &size ))
+ {
+ msi_free( user );
+ if (GetLastError() != ERROR_INSUFFICIENT_BUFFER || !(user = msi_alloc( size )))
+ {
+ CloseHandle( token );
+ return NULL;
+ }
+ GetTokenInformation( token, TokenUser, user, size, &size );
}
- CloseHandle(token);
- return ERROR_SUCCESS;
+ CloseHandle( token );
+ if (!ConvertSidToStringSidW( user->User.Sid, &ret ))
+ {
+ msi_free( user );
+ return NULL;
+ }
+ msi_free( user );
+ return ret;
}
UINT MSIREG_OpenUninstallKey(MSIPACKAGE *package, HKEY *key, BOOL create)
UINT MSIREG_OpenProductKey(LPCWSTR szProduct, LPCWSTR szUserSid,
MSIINSTALLCONTEXT context, HKEY *key, BOOL create)
{
- UINT r;
LPWSTR usersid = NULL;
HKEY root = HKEY_LOCAL_MACHINE;
WCHAR squished_pc[GUID_SIZE];
{
if (!szUserSid)
{
- r = get_user_sid(&usersid);
- if (r != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", r);
- return r;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
-
szUserSid = usersid;
}
-
- sprintfW(keypath, szInstaller_LocalManagedProd_fmt,
- szUserSid, squished_pc);
+ sprintfW(keypath, szInstaller_LocalManagedProd_fmt, szUserSid, squished_pc);
LocalFree(usersid);
}
UINT MSIREG_OpenFeaturesKey(LPCWSTR szProduct, MSIINSTALLCONTEXT context,
HKEY *key, BOOL create)
{
- UINT r;
LPWSTR usersid;
HKEY root = HKEY_LOCAL_MACHINE;
WCHAR squished_pc[GUID_SIZE];
}
else
{
- r = get_user_sid(&usersid);
- if (r != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", r);
- return r;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
-
sprintfW(keypath, szInstaller_LocalManagedFeat_fmt, usersid, squished_pc);
LocalFree(usersid);
}
UINT MSIREG_OpenUserDataFeaturesKey(LPCWSTR szProduct, MSIINSTALLCONTEXT context,
HKEY *key, BOOL create)
{
- UINT r;
LPWSTR usersid;
WCHAR squished_pc[GUID_SIZE];
WCHAR keypath[0x200];
}
else
{
- r = get_user_sid(&usersid);
- if (r != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", r);
- return r;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
-
sprintfW(keypath, szUserDataFeatures_fmt, usersid, squished_pc);
LocalFree(usersid);
}
if (!szUserSid)
{
- rc = get_user_sid(&usersid);
- if (rc != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", rc);
- return rc;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
sprintfW(keypath, szUserDataComp_fmt, usersid, comp);
UINT MSIREG_DeleteUserDataComponentKey(LPCWSTR szComponent, LPCWSTR szUserSid)
{
- UINT rc;
WCHAR comp[GUID_SIZE];
WCHAR keypath[0x200];
LPWSTR usersid;
if (!szUserSid)
{
- rc = get_user_sid(&usersid);
- if (rc != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", rc);
- return rc;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
-
sprintfW(keypath, szUserDataComp_fmt, usersid, comp);
LocalFree(usersid);
}
sprintfW(keypath, szUserDataProd_fmt, szUserSid, squished_pc);
else
{
- rc = get_user_sid(&usersid);
- if (rc != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", rc);
- return rc;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
sprintfW(keypath, szUserDataProd_fmt, usersid, squished_pc);
UINT MSIREG_OpenUserDataPatchKey(LPCWSTR szPatch, MSIINSTALLCONTEXT dwContext,
HKEY *key, BOOL create)
{
- UINT rc;
WCHAR squished_patch[GUID_SIZE];
WCHAR keypath[0x200];
LPWSTR usersid;
sprintfW(keypath, szUserDataPatch_fmt, szLocalSid, squished_patch);
else
{
- rc = get_user_sid(&usersid);
- if (rc != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", rc);
- return rc;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
-
sprintfW(keypath, szUserDataPatch_fmt, usersid, squished_patch);
LocalFree(usersid);
}
UINT MSIREG_DeleteUserDataPatchKey(LPCWSTR patch, MSIINSTALLCONTEXT context)
{
- UINT r;
WCHAR squished_patch[GUID_SIZE];
WCHAR keypath[0x200];
LPWSTR usersid;
sprintfW(keypath, szUserDataPatch_fmt, szLocalSid, squished_patch);
else
{
- r = get_user_sid(&usersid);
- if (r != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", r);
- return r;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
-
sprintfW(keypath, szUserDataPatch_fmt, usersid, squished_patch);
LocalFree(usersid);
}
UINT MSIREG_OpenUserDataProductPatchesKey(LPCWSTR product, MSIINSTALLCONTEXT context,
HKEY *key, BOOL create)
{
- UINT rc;
WCHAR squished_product[GUID_SIZE];
WCHAR keypath[0x200];
LPWSTR usersid;
sprintfW(keypath, szUserDataProductPatches_fmt, szLocalSid, squished_product);
else
{
- rc = get_user_sid(&usersid);
- if (rc != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", rc);
- return rc;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
-
sprintfW(keypath, szUserDataProductPatches_fmt, usersid, squished_product);
LocalFree(usersid);
}
UINT MSIREG_OpenInstallProps(LPCWSTR szProduct, MSIINSTALLCONTEXT dwContext,
LPCWSTR szUserSid, HKEY *key, BOOL create)
{
- UINT rc;
LPWSTR usersid;
WCHAR squished_pc[GUID_SIZE];
WCHAR keypath[0x200];
sprintfW(keypath, szInstallProperties_fmt, szUserSid, squished_pc);
else
{
- rc = get_user_sid(&usersid);
- if (rc != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", rc);
- return rc;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
-
sprintfW(keypath, szInstallProperties_fmt, usersid, squished_pc);
LocalFree(usersid);
}
UINT MSIREG_DeleteUserDataProductKey(LPCWSTR szProduct)
{
- UINT rc;
WCHAR squished_pc[GUID_SIZE];
WCHAR keypath[0x200];
LPWSTR usersid;
return ERROR_FUNCTION_FAILED;
TRACE("squished (%s)\n", debugstr_w(squished_pc));
- rc = get_user_sid(&usersid);
- if (rc != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", rc);
- return rc;
+ ERR("Failed to retrieve user SID\n");
+ return ERROR_FUNCTION_FAILED;
}
-
sprintfW(keypath, szUserDataProd_fmt, usersid, squished_pc);
-
LocalFree(usersid);
+
return RegDeleteTreeW(HKEY_LOCAL_MACHINE, keypath);
}
RegCloseKey(key);
key = 0;
- r = get_user_sid(&usersid);
- if (r != ERROR_SUCCESS || !usersid)
+ if (!(usersid = get_user_sid()))
{
- ERR("Failed to retrieve user SID: %d\n", r);
+ ERR("Failed to retrieve user SID\n");
last_index = 0;
- return r;
+ return ERROR_FUNCTION_FAILED;
}
sprintfW(keypath, szInstaller_LocalManaged_fmt, usersid);
LocalFree(usersid);
if (!szUserSid)
{
- get_user_sid(&usersid);
- szUserSid = usersid;
+ szUserSid = usersid = get_user_sid();
+ if (!usersid) return ERROR_FUNCTION_FAILED;
}
if (dwContext & MSIINSTALLCONTEXT_USERMANAGED)