Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с функцией LookupAccountSidA 
:(
    Опции темы
koldun90
Дата 25.10.2018, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 16.5.2014

Репутация: нет
Всего: нет



Здравствуйте пишу небольшую программу (сервис) который бы при входе писал имя пользователя который залогинился(вошел в систему)в файл.Вот кусок кода функции обработки запроса. Вся проблема в том что функция LookupAccountSidA возвращает код ошибки 1332 и я не знаю что с этим делать


Код

case SERVICE_CONTROL_SESSIONCHANGE:
        {
            if (eventType == WTS_SESSION_LOGON)  // пользователь вошел
            {
                HANDLE phToken;
                WTSSESSION_NOTIFICATION *uk = (WTSSESSION_NOTIFICATION *)eventData;
                int sessid=uk->dwSessionId;
                
            
 
                BOOL rez=WTSQueryUserToken(sessid,&phToken);
                if (rez == true)
                {
                    DWORD dwSize=0; 
                    TOKEN_USER ptu;
                            
                    rez=GetTokenInformation(phToken, TokenUser, &ptu, sizeof(ptu), &dwSize);
                    if (rez == false)
                    {
                        if (GetLastError() != 122)
                        {
                            return 0;
                        }
                        rez = GetTokenInformation(phToken, TokenUser, &ptu, dwSize, &dwSize);
                        if (rez == true)
                        {
                        
                            SID_NAME_USE use;
                            DWORD size1 = 100;
                            DWORD size2 = 100;
                            char fulnm[100] = { 0 };
                            char fulldm[100] = { 0 };
                            rez = LookupAccountSidA(NULL, ptu.User.Sid, (LPSTR)&fulnm, (LPDWORD)&size1, (LPSTR)&fulldm, (LPDWORD)&size2, &use);
                            if (rez == true)
                            {
 
                                /*FILE *E = fopen("c:\\EEEEEE.txt", "a");
                                char mnm[20];
                                sprintf(mnm, "%s\n", fulnm);
                                fwrite(mnm, strlen(mm), 1, E);
                                fclose(E);*/
                            }
                            else
                            {
                                int rd = GetLastError();  //1332
                                int u = 8;
                            }
                        }
                        else
                        {
                            int r = GetLastError();
                            FILE *F = fopen("c:\\ERROROROR.txt", "a");
                            char mm[20];
                            sprintf(mm, "%d\n", r);
                            fwrite(mm, strlen(mm), 1, F);
                            fclose(F);
                        }
                    }
                }
                else
                {
                    int err = GetLastError();
                    FILE *F = fopen("c:\\bbbbbbb.txt", "a");
                    char mm[20];
                    sprintf(mm, "%d\n", err);
                    fwrite(mm, strlen(mm), 1, F);
                    fclose(F);
                }
            }
            if (eventType == WTS_SESSION_LOGOFF)
            {
                FILE *F = fopen("c:\\ct.txt", "a");
                char mm[20];
                sprintf(mm, "%s", "vyshel\n");
                fwrite(mm, strlen(mm), 1, F);
                fclose(F);
            }
            return 0;
        }


PM MAIL   Вверх
xvr
Дата 26.10.2018, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



1332 это ERROR_NONE_MAPPED. Вот что говорит MSDN:
Цитата

If the function cannot find an account name for the SID, GetLastError returns ERROR_NONE_MAPPED. This can occur if a network time-out prevents the function from finding the name. It also occurs for SIDs that have no corresponding account name, such as a logon SID that identifies a logon session.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1188 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.