|
3 | 3 | #include <windows.h>
|
4 | 4 | #include <msiquery.h>
|
5 | 5 | #include <wcautil.h>
|
| 6 | +#include <sddl.h> |
| 7 | +#include <Lmcons.h> |
6 | 8 |
|
7 | 9 | #define GUID_BUFFER_SIZE 39 // {8-4-4-4-12}\0
|
8 | 10 |
|
@@ -96,6 +98,35 @@ extern "C" UINT WINAPI BroadcastEnvironmentUpdate(MSIHANDLE hInstall) {
|
96 | 98 | return WcaFinalize(er);
|
97 | 99 | }
|
98 | 100 |
|
| 101 | +#define AUTHENTICATED_USERS_SID L"S-1-5-11" |
| 102 | + |
| 103 | +extern "C" UINT WINAPI GetLocalizedUserNames(MSIHANDLE hInstall) { |
| 104 | + HRESULT hr = S_OK; |
| 105 | + UINT er = ERROR_SUCCESS; |
| 106 | + TCHAR userName[UNLEN + 1] = {0}; |
| 107 | + DWORD userNameSize = UNLEN + 1; |
| 108 | + TCHAR domain[DNLEN + 1] = {0}; |
| 109 | + DWORD domainSize = DNLEN + 1; |
| 110 | + PSID sid; |
| 111 | + SID_NAME_USE nameUse; |
| 112 | + |
| 113 | + hr = WcaInitialize(hInstall, "GetLocalizedUserNames"); |
| 114 | + ExitOnFailure(hr, "Failed to initialize"); |
| 115 | + |
| 116 | + er = ConvertStringSidToSidW(AUTHENTICATED_USERS_SID, &sid); |
| 117 | + ExitOnLastError(er, "Failed to convert security identifier"); |
| 118 | + |
| 119 | + er = LookupAccountSidW(NULL, sid, userName, &userNameSize, domain, &domainSize, &nameUse); |
| 120 | + ExitOnLastError(er, "Failed to lookup security identifier"); |
| 121 | + |
| 122 | + MsiSetProperty(hInstall, L"AUTHENTICATED_USERS", userName); |
| 123 | + ExitOnWin32Error(er, hr, "Failed to set localized Authenticated User name"); |
| 124 | + |
| 125 | +LExit: |
| 126 | + er = SUCCEEDED(hr) ? ERROR_SUCCESS : ERROR_INSTALL_FAILURE; |
| 127 | + LocalFree(sid); |
| 128 | + return WcaFinalize(er); |
| 129 | +} |
99 | 130 |
|
100 | 131 | extern "C" BOOL WINAPI DllMain(HINSTANCE hInst, ULONG ulReason, VOID* dummy) {
|
101 | 132 | switch (ulReason) {
|
|
0 commit comments