Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Как получить текущее имя пользователя и домена в Windows 95 и Windows 98

Эта статья описывает, как программно получить имя пользователя и имя домена для интерактивно залогинившегося пользователя в Windows 95 и Windows 98, которое возможно только при использовании 16-битной функции NetWkstaGetInfo LAN менеджера.

В Windows 95 нет 32-битной функции для получения как имени пользователя так и имени домена, связанных с залогинившимся пользователем. Однако, эти значения можно получить при помощи 16-битной функции LAN Менеджера NetWkstaGetInfo на info-level 10. Эта функция экспортируется 16-битной библиотекой Netapi.dll. Заголовочные файлы, а так же библиотеки, связанные с функциями 16-битного LAN Менеджера можно найти в Windows for Workgroups Software Development Kit (SDK).

ЗАМЕЧАНИЕ: Windows for Workgroups SDK больше не поддерживается Майкрософтом, поэтому получить данный SDK будет проблематично. Но всё же те, у кого этот SDK имеется могут воспользоваться нижеприведённым кодом.

ЗАМЕЧАНИЕ: Если Вам необходимо получить только имя пользователя, то можно воспользоваться 32-битной функцией GetUserName которая присутствует в Windows 95, Windows 98, Microsoft Windows NT, и Microsoft Windows 2000.

Пример кода

Следующий пример демонстрирует, как программно получить имя пользователя и имя домена в Windows 95 и 98 при помощи функции NetWkstaGetInfo. Так как функция NetWkstaGetInfo является 16-битной, то данный пример должен быть откомпилирован при помощи 16-битного компилятора:

#include <windows.h>
 #include <stdlib.h>
 #include <string.h>
 #include <netcons.h>
 #include <wksta.h>
 #include <neterr.h>
 
 //**********************************************************************
 //
 //  FUNCTION:     GetCurrentUserAndDomain - This function looks up
 //                the user name and domain name for the user account
 //                associated with the calling thread.
 //
 //  PARAMETERS:   szUser - a buffer that receives the user name
 //                pcchUser - the size, in characters, of szUser
 //                szDomain - a buffer that receives the domain name
 //                pcchDomain - the size, in characters, of szDomain
 //
 //  RETURN VALUE: NERR_Success if the function succeeds. Otherwise, the
 //                function returns a network error code from neterr.h.
 //
 //                If either of the supplied buffers are too small, the
 //                function will return NERR_BufTooSmall and pcchUser and
 //                pcchDomain will be adjusted to reflect the required
 //                buffer sizes.
 //
 //**********************************************************************
 
 unsigned short GetCurrentUserAndDomain(char* szUser, int* pcchUser,
       char* szDomain, int* pcchDomain) {
 
    unsigned short iNetErr;
 
    struct wksta_info_10 far* pwi10 = NULL;
    unsigned short cbwi10 = 0;
 
    int iDomainLen;
    int iUserLen;
 
    // Запрашиваем требуемый объём буфера для информации об учётной записи.
    iNetErr = NetWkstaGetInfo(NULL, 10, (char far*) pwi10, cbwi10,
          &cbwi10);
 
    // Нулевая длина буфера сигнализирует об ошибке.
    if (iNetErr != NERR_BufTooSmall)
       return iNetErr;
 
    // Выделяем буфер для информации об учётной записи.
    pwi10 = (struct wksta_info_10 far*) malloc(cbwi10);
    if (pwi10 == NULL)
       return NERR_ProgNeedsExtraMem;
 
    // Получаем информацию об учётной записи.
    iNetErr = NetWkstaGetInfo(NULL, 10, (char far*) pwi10, cbwi10,
          &cbwi10);
    if (iNetErr == NERR_Success) {
 
       // Если возможно, то копируем имя пользователя в буфер.
       iUserLen = strlen(pwi10->wki10_username) + 1;
       if (iUserLen < *pcchUser)
          strcpy(szUser, pwi10->wki10_username);
       else
          iNetErr = NERR_BufTooSmall;
 
       // Устанавливаем требуемый размер буфера.
       *pcchUser = iUserLen;
 
       // Если возможно, то копируем имя домена в буфер.
       iDomainLen = strlen(pwi10->wki10_logon_domain) + 1;
       if (iDomainLen < *pcchDomain)
          strcpy(szDomain, pwi10->wki10_logon_domain);
       else
          iNetErr = NERR_BufTooSmall;
 
       // Устанавливаем требуемый размер буфера.
       *pcchDomain = iDomainLen;
    }
 
    // Освобождаем выделенный буфер.
    free(pwi10);
 
    return iNetErr;
 } 

 

ССЫЛКИ

В Windows NT и Windows 2000, для получения имени пользователя и домена вызывающий поток может использовать 32-битные функции. Дополнительную информацию по этому поводу можно прочитать в статье из Microsoft Knowledge Base:

Q111544 Как получить текущее имя пользователя и имя домена в Windows NT

Пример данной статьи должен быть скомпилирован 16-битным компилятором. Либо вызывать 16-битные функции из 32-битного приложения при помощи механихма под названием "thunking". Подробнее об этом можно прочитать в статье из Microsoft Knowledge Base:

Q155763 Как вызывать 16-битный код из 32-битного под Windows 95



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS