Информация об изменениях

Сообщение Re[2]: Детект прав админа у пользователя от 29.03.2024 15:25

Изменено 29.03.2024 15:35 VladD2

Re[2]: Детект прав админа у пользователя
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А потом по нему получить WindowsPrincipal


До сюда все пучком...

PD>и проверить роль


PD>https://stackoverflow.com/questions/3600322/check-if-the-current-user-is-administrator


А вот это не работает.

    public static bool IsLoginLocalAdministrator(string userName, string domainName, string password)
    {
        SafeTokenHandle safeTokenHandle;
        try
        {
            const int LOGON32_PROVIDER_DEFAULT = 0;
            //This parameter causes LogonUser to create a primary token.
            const int LOGON32_LOGON_INTERACTIVE = 2;

            // Call LogonUser to obtain a handle to an access token.
            bool returnValue = LogonUser(userName, domainName, password,
                LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
                out safeTokenHandle);

            if (!returnValue)
            {
                var ret = Marshal.GetLastWin32Error();
                throw new System.ComponentModel.Win32Exception(ret);
            }

            using (safeTokenHandle)
            {
                using WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle());
                WindowsIdentity.RunImpersonated(newId.AccessToken, () =>
                    {
                        // Вот тут возвращает false на учетку локального админа :(
                        return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
                    });
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine("Exception occurred. " + ex.Message);
        }

        return false;
    }


ЧЯДНТ?
Re[2]: Детект прав админа у пользователя
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А потом по нему получить WindowsPrincipal


До сюда все пучком...

PD>и проверить роль


PD>https://stackoverflow.com/questions/3600322/check-if-the-current-user-is-administrator


А вот это не работает.

    public static bool IsLoginLocalAdministrator(string userName, string domainName, string password)
    {
        SafeTokenHandle safeTokenHandle;
        try
        {
            const int LOGON32_PROVIDER_DEFAULT = 0;
            //This parameter causes LogonUser to create a primary token.
            const int LOGON32_LOGON_INTERACTIVE = 2;

            // Call LogonUser to obtain a handle to an access token.
            bool returnValue = LogonUser(userName, domainName, password,
                LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
                out safeTokenHandle);

            if (!returnValue)
            {
                var ret = Marshal.GetLastWin32Error();
                throw new System.ComponentModel.Win32Exception(ret);
            }

            using (safeTokenHandle)
            {
                using WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle());
                return WindowsIdentity.RunImpersonated(newId.AccessToken, () =>
                    {
                        // Вот тут возвращает false на учетку локального админа :(
                        return new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
                    });
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine("Exception occurred. " + ex.Message);
        }

        return false;
    }


ЧЯДНТ?