Как получить текущее имя пользователя и домена в 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). ЗАМЕЧАНИЕ: Если Вам необходимо получить только имя пользователя, то можно воспользоваться 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:
Пример данной статьи должен быть скомпилирован 16-битным компилятором. Либо вызывать 16-битные функции из 32-битного приложения при помощи механихма под названием "thunking". Подробнее об этом можно прочитать в статье из Microsoft Knowledge Base:
|