Защита от "дурака" спасает только от неизобретательного дурака.
Вы можете попробовать этот код. Я без проблем использовал его
под Netware LAN в течение долгого времени. Работа программы зависит от наличия
NWCALLS.DLL на машине пользователя, но если он использовал сеть хоть раз, данная
библиотека должна присутствовать на его машине.
unit GetLogin;
{
Данный модуль инкапсулирует несколько внешних
функций библиотеки NWCALLS.DLL
Создан на основе кода Григория Трубецкого
Модуль содержит функции, возвращающие Netware User ID
и полное имя пользователя.
}interfaceuses
SysUtils, Messages, Dialogs;
function GetUserLogin: string;
function GetUserFullName(SomeUser: string): string;
implementationtype
NWTimeStamp = record
Year: byte;
Month: byte;
Day: byte;
Hour: byte;
Minute: byte;
Second: byte;
DayOfWeek: byte;
end;
{Netware API - требуется NWCALLS.DLL}function NWGetDefaultConnectionID(var Connection: word): word;
far; external 'NWCALLS';
function NWGetConnectionNumber(Connection: word; var ConnectionNumber:
word): word;
far; external 'NWCALLS';
function NWGetConnectionInformation(Connection: word;
ConnectionNumber: word;
ObjectName: pchar;
var ObjectType: word;
var ObjectID: word;
var LoginTime: NWTimeStamp): word;
far; external 'NWCALLS';
function NWReadPropertyValue(Connection: word;
ObjectName: pChar;
ObjectType: word;
PropertyName: pChar;
DataSetIndex: byte;
DataBuffer: pChar;
var More: byte;
var Flags: byte): word;
far; external 'NWCALLS';
{ конец секции работы с Netware API }function GetUserLogin: string;
var
ConnectionID: word;
ConnectionNumber: word;
RC: word;
Name: array[0..50] of Char;
ObjectType: word;
ObjectID: word;
LoginTime: NWTimeStamp;
begin
RC := NWGetDefaultConnectionID(ConnectionID);
RC := NWGetConnectionNumber(ConnectionID, ConnectionNumber);
RC := NWGetConnectionInformation(ConnectionID,
ConnectionNumber,
Name,
ObjectType,
ObjectID,
LoginTime);
Result := StrPas(Name);
end;
function GetUserFullName(SomeUser: string): string;
{Реально имя пользователя является свойством 'IDENTIFICATON'.
Вы должны вызывать NWReadPropertyValue с параметрами (между прочим) вашего ConnectionID,
имени объекта (такое же, как и логин пользователя, сетевое имя которого мы пытаемся узнать)
и свойство name, которое нам необходимо получить, в нашем случае 'IDENTIFICATION'
(это и есть искомая величина - полное имя пользователя).}var
ConnectionID: word;
RC: word;
Name: array[0..50] of Char;
ObjectType: word;
PropName: array[0..14] of Char;
DataSetIndex: byte;
FullName: array[0..127] of Char;
More: byte;
Flags: byte;
begin
RC := NWGetDefaultConnectionID(ConnectionID);
ObjectType := 256; {пользователь}
StrPCopy(PropName, 'IDENTIFICATION');
DataSetIndex := 1;
StrPCopy(Name, SomeUser);
RC := NWReadPropertyValue(ConnectionID,
Name,
ObjectType,
PropName,
DataSetIndex,
FullName,
More,
Flags);
if RC = 35324 then
MessageDlg('Пользователь ' + SomeUser + ' на этом сервере не обнаружен!',
mtError, [mbOK], 0);
Result := StrPas(FullName);
end;
end.
Код, который вы предоставили, это модуль Delphi, взаимодействующий с API Netware с помощью библиотеки NWCALLS.DLL. Он предлагает два функционала: GetUserLogin и GetUserFullName, которые извлекают ID пользователя Netware и полное имя пользователя соответственно.
Вот подробный анализ кода:
Секция интерфейса определяет два функционала: GetUserLogin и GetUserFullName. Эти функционалы объявлены возвращать строки.
В секции реализации есть несколько определений типов, включая NWTimeStamp, который используется для представления таймстэмпа Netware.
Функции NWGetDefaultConnectionID, NWGetConnectionNumber, NWGetConnectionInformation и NWReadPropertyValue объявлены как внешние процедуры, требующие библиотеки NWCALLS.DLL. Эти функции являются частью API Netware и используются для взаимодействия с сервером Netware.
Функция GetUserLogin извлекает логин пользователя, вызывая несколько функций API Netware в последовательности:
NWGetDefaultConnectionID получает ID по умолчанию
NWGetConnectionNumber получает номер соединения для указанного ID соединения
NWGetConnectionInformation получает информацию о соединении, включая логин пользователя
Результат затем конвертируется в строку с помощью функции StrPas.
Функция GetUserFullName извлекает полное имя пользователя, вызывая несколько функций API Netware в последовательности:
NWGetDefaultConnectionID получает ID по умолчанию
NWReadPropertyValue читает значение свойства 'IDENTIFICATION' для указанного пользователя
Результат затем конвертируется в строку с помощью функции StrPas.
Обратите внимание, что этот код предполагает, что библиотека NWCALLS.DLL находится на машине и пользователь уже подключен к серверу Netware. Если пользователь не подключен, функции будут проваливаться.
Также помните, что это код является специфичным для Delphi и может требовать модификаций для работы с другими языками программирования или средами.
Получение сетевого имени пользователя: модуль GetLogin для Delphi, позволяющий получить Netware User ID и полное имя пользователя с помощью библиотеки NWCALLS.DLL.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.