Здравствуйте пишу небольшую программу (сервис) который бы при входе писал имя пользователя который залогинился(вошел в систему)в файл.Вот кусок кода функции обработки запроса. Вся проблема в том что функция 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; }
|
|