Click here to Skip to main content
15,887,135 members
Home / Discussions / Windows Development
   

Windows Development

 
GeneralRe: Binding Pin
Samir Ibrahim6-Mar-22 21:32
Samir Ibrahim6-Mar-22 21:32 
GeneralRe: Binding Pin
RobertSF5-Mar-22 6:14
professionalRobertSF5-Mar-22 6:14 
GeneralRe: Binding Pin
Samir Ibrahim6-Mar-22 21:09
Samir Ibrahim6-Mar-22 21:09 
GeneralRe: Binding Pin
RedDk5-Mar-22 10:21
RedDk5-Mar-22 10:21 
QuestionBatch file - If statement findstr Pin
User 1536543221-Oct-21 9:11
User 1536543221-Oct-21 9:11 
AnswerRe: Batch file - If statement findstr Pin
Dave Kreskowiak21-Oct-21 12:09
mveDave Kreskowiak21-Oct-21 12:09 
QuestionGetting the interactive user's display language from a service Pin
Daniel Pfeffer25-Aug-21 4:24
professionalDaniel Pfeffer25-Aug-21 4:24 
AnswerRe: Getting the interactive user's display language from a service Pin
Randor 25-Aug-21 10:08
professional Randor 25-Aug-21 10:08 
Hi Daniel,

I think you are asking if it's possible to use the GetUserDefaultLCID function by impersonating the security context of a logged-on user. But I'm not sure if you know what that means. For example User1 (or Administrator) can execute apps as User2 and User3 which means all those user accounts will have 'interactive sessions'.

Also... you need to clarify which user language[^] you want to use. For example, some users might have MUI enabled[^] and have both Hebrew and English (or maybe a dozen).

If you really do want to look up the same information that the GetUserDefaultLCID function retrieves for a user that logged in via winlogon.exe from your system service then I can help you do that.

C++
#pragma comment(lib, "Secur32.lib")
#pragma comment(lib, "Advapi32.lib")

#include <iostream>
#include <windows.h>
#include <ntsecapi.h>
#include <sddl.h>

BOOL RegGetInternationaliations(const PSID p, const wchar_t name[], wchar_t *pOut, DWORD out_len)
{
    LPWSTR szSid = nullptr;
    BOOL bRet = FALSE;
    if (ConvertSidToStringSidW(p, &szSid))
    {
        HKEY k;
        constexpr DWORD size = 256;
        WCHAR buffer[size];
        wsprintf(buffer, L"%s\\Control Panel\\International", szSid);

        LSTATUS status = RegOpenKeyW(HKEY_USERS, buffer, &k);
        if (ERROR_SUCCESS == status)
        {
            status = RegGetValueW(k, NULL, name, RRF_RT_REG_SZ | RRF_ZEROONFAILURE, 0, pOut, &out_len);
            bRet = (ERROR_SUCCESS == status);

            RegCloseKey(k);
        }

        LocalFree(szSid);
    }

    return bRet;
}

INT main()
{
    DWORD lc = 0;
    DWORD status = 0;
    PLUID list = nullptr;

    LsaEnumerateLogonSessions(&lc, &list);
    for (DWORD i = 0; i < lc; i++)
    {
        PSECURITY_LOGON_SESSION_DATA pData;

        status = LsaGetLogonSessionData((PLUID)((INT_PTR)list + sizeof(LUID) * i), &pData);
        if (0 == status)
        {
            if (Interactive == pData->LogonType && (pData->UserFlags & LOGON_WINLOGON))
            {
                constexpr DWORD s = 256;
                WCHAR buffer[s];

                if (RegGetInternationaliations(pData->Sid, L"Locale", buffer, s))
                {
                    wprintf(L"Locale: %s\n", buffer);
                }
            }

            LsaFreeReturnBuffer(pData);
        }
    }
}


This will work from session 0 and does exactly the same thing as the GetUserDefaultLCID function for the logged in users. Those internationalization registry keys have been pretty much unchanged for 14 years (I think the last change there was 2006)

If you really do want to do this for ALL interactive sessions then remove the following:
C++
if (Interactive == pData->LogonType && (pData->UserFlags & LOGON_WINLOGON))


Also... if this isn't what you wanted... and what you really wanted was the currently selected MUI language[^] then let me know, it's an easy change.

I'm getting off now so I won't be back until tomorrow to read your response.

Best Wishes,
-David Delaune
GeneralRe: Getting the interactive user's display language from a service Pin
Daniel Pfeffer25-Aug-21 10:56
professionalDaniel Pfeffer25-Aug-21 10:56 
GeneralRe: Getting the interactive user's display language from a service Pin
Randor 26-Aug-21 8:02
professional Randor 26-Aug-21 8:02 
GeneralRe: Getting the interactive user's display language from a service Pin
Daniel Pfeffer26-Aug-21 17:03
professionalDaniel Pfeffer26-Aug-21 17:03 
GeneralRe: Getting the interactive user's display language from a service Pin
Daniel Pfeffer31-Aug-21 10:03
professionalDaniel Pfeffer31-Aug-21 10:03 
GeneralRe: Getting the interactive user's display language from a service Pin
Randor 27-Sep-21 7:36
professional Randor 27-Sep-21 7:36 
GeneralRe: Getting the interactive user's display language from a service Pin
Daniel Pfeffer28-Sep-21 9:16
professionalDaniel Pfeffer28-Sep-21 9:16 
QuestionDisplaying a system modal message box in the system format Pin
Daniel Pfeffer4-Aug-21 1:49
professionalDaniel Pfeffer4-Aug-21 1:49 
AnswerRe: Displaying a system modal message box in the system format Pin
Richard MacCutchan4-Aug-21 3:12
mveRichard MacCutchan4-Aug-21 3:12 
GeneralRe: Displaying a system modal message box in the system format Pin
Daniel Pfeffer4-Aug-21 3:30
professionalDaniel Pfeffer4-Aug-21 3:30 
QuestionCheck if .exe-file, WITH A PATH(!!!), is running, from within a bat-file? Pin
arnold_w10-May-21 7:17
arnold_w10-May-21 7:17 
AnswerRe: Check if .exe-file, WITH A PATH(!!!), is running, from within a bat-file? Pin
Victor Nijegorodov10-May-21 9:31
Victor Nijegorodov10-May-21 9:31 
GeneralRe: Check if .exe-file, WITH A PATH(!!!), is running, from within a bat-file? Pin
arnold_w10-May-21 9:56
arnold_w10-May-21 9:56 
AnswerRe: Check if .exe-file, WITH A PATH(!!!), is running, from within a bat-file? Pin
arnold_w11-May-21 22:35
arnold_w11-May-21 22:35 
GeneralRe: Check if .exe-file, WITH A PATH(!!!), is running, from within a bat-file? Pin
Victor Nijegorodov11-May-21 22:47
Victor Nijegorodov11-May-21 22:47 
GeneralRe: Check if .exe-file, WITH A PATH(!!!), is running, from within a bat-file? Pin
arnold_w11-May-21 23:18
arnold_w11-May-21 23:18 
GeneralRe: Check if .exe-file, WITH A PATH(!!!), is running, from within a bat-file? Pin
Victor Nijegorodov11-May-21 23:49
Victor Nijegorodov11-May-21 23:49 
GeneralRe: Check if .exe-file, WITH A PATH(!!!), is running, from within a bat-file? Pin
arnold_w12-May-21 0:38
arnold_w12-May-21 0:38 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.