📄 stnet.pas
字号:
Refresh;
Result := TUSER_INFO_3(FUserData^).usri3_full_name;
end;
function TStNetUserItem.GetHomeDirectory: string;
begin
if (FUserData = nil) then
Refresh;
Result := TUSER_INFO_3(FUserData^).usri3_home_dir;
end;
function TStNetUserItem.GetHomeDrive: string;
begin
if (FUserData = nil) then
Refresh;
Result := TUSER_INFO_3(FUserData^).usri3_home_dir_drive;
end;
function TStNetUserItem.GetLastLogon: TStDateTimeRec;
var
Data : DWord;
begin
if (FUserData = nil) then
Refresh;
Data := TUSER_INFO_3(FUserData^).usri3_last_logon;
Result := UnixTimeToStDateTime(Data);
end;
function TStNetUserItem.GetLastLogoff: TStDateTimeRec;
var
Data : DWord;
begin
if (FUserData = nil) then
Refresh;
Data := TUSER_INFO_3(FUserData^).usri3_last_logoff;
Result := UnixTimeToStDateTime(Data);
end;
function TStNetUserItem.GetLockedOut: Boolean;
var
Data : DWord;
begin
if (FUserData = nil) then
Refresh;
Data := TUSER_INFO_3(FUserData^).usri3_flags;
Result := LongFlagIsSet(Data, UF_LOCKOUT);
end;
function TStNetUserItem.GetName: string;
begin
Result := FName;
end;
function TStNetUserItem.GetNoUserPasswordChange: Boolean;
var
Data : DWord;
begin
if (FUserData = nil) then
Refresh;
Data := TUSER_INFO_3(FUserData^).usri3_flags;
Result := LongFlagIsSet(Data, UF_PASSWD_CANT_CHANGE);
end;
function TStNetUserItem.GetNumberOfLogons: Cardinal;
begin
if (FUserData = nil) then
Refresh;
Result := TUSER_INFO_3(FUserData^).usri3_num_logons;
end;
function TStNetUserItem.GetOperatorPrivilege: TStNetUserAuthPrivSet;
var
Data : DWord;
begin
if (FUserData = nil) then
Refresh;
Data := TUSER_INFO_3(FUserData^).usri3_auth_flags;
Result := [];
if LongFlagIsSet(Data, AF_OP_PRINT) then
Include(Result, uaptPrint);
if LongFlagIsSet(Data, AF_OP_COMM) then
Include(Result, uaptCommunications);
if LongFlagIsSet(Data, AF_OP_SERVER) then
Include(Result, uaptServer);
if LongFlagIsSet(Data, AF_OP_ACCOUNTS) then
Include(Result, uaptAccounts);
end;
function TStNetUserItem.GetPasswordNeverExpires: Boolean;
var
Data : DWord;
begin
if (FUserData = nil) then
Refresh;
Data := TUSER_INFO_3(FUserData^).usri3_flags;
Result := LongFlagIsSet(Data, UF_DONT_EXPIRE_PASSWD);
end;
function TStNetUserItem.GetPasswordExpired: Boolean;
begin
if (FUserData = nil) then
Refresh;
Result := Boolean(TUSER_INFO_3(FUserData^).usri3_password_expired);
end;
function TStNetUserItem.GetPasswordLastChanged: TStDateTimeRec;
var
Current:TStDateTimeRec;
Data : DWord;
begin
if (FUserData = nil) then
Refresh;
Current.D := CurrentDate;
Current.T := CurrentTime;
Data := TUSER_INFO_3(FUserData^).usri3_password_age;
IncDateTime(Current, Result, -Abs(Data div SecondsInDay),
-Abs(Data mod SecondsInDay));
end;
function TStNetUserItem.GetPasswordNotRequired: Boolean;
var
Data : DWord;
begin
if (FUserData = nil) then
Refresh;
Data := TUSER_INFO_3(FUserData^).usri3_flags;
Result := LongFlagIsSet(Data, UF_PASSWD_NOTREQD);
end;
function TStNetUserItem.GetProfilePath: string;
begin
if (FUserData = nil) then
Refresh;
Result := TUSER_INFO_3(FUserData^).usri3_profile;
end;
function TStNetUserItem.GetScriptPath: string;
begin
if (FUserData = nil) then
Refresh;
Result := TUSER_INFO_3(FUserData^).usri3_script_path;
end;
function TStNetUserItem.GetUserComment: string;
begin
if (FUserData = nil) then
Refresh;
Result := TUSER_INFO_3(FUserData^).usri3_usr_comment;
end;
function TStNetUserItem.GetUserPrivilege: TStNetUserPrivType;
var
Data : DWord;
begin
if (FUserData = nil) then
Refresh;
Data := TUSER_INFO_3(FUserData^).usri3_priv;
Result := TStNetUserPrivType(Data+1);
end;
function TStNetUserItem.GetWorkstations: TStrings;
var
Data: string;
begin
if (FUserData = nil) then
Refresh;
Data := TUSER_INFO_3(FUserData^).usri3_workstations;
FWorkStationList.CommaText := Data;
Result := FWorkStationList;
end;
procedure TStNetUserItem.SetAccountDisabled(Value: Boolean);
var
Data : DWord;
ErrorD : DWord;
ParmErr : DWord;
begin
if Value <> AccountDisabled then begin
Data := TUSER_INFO_3(FUserData^).usri3_flags;
if Value then
SetLongFlag(LongInt(Data), UF_ACCOUNTDISABLE)
else
ClearLongFlag(LongInt(Data), UF_ACCOUNTDISABLE);
ErrorD := StNetUserSetInfo(FServer, FName, 1008, @Data, ParmErr);
if ErrorD = NERR_SUCCESS then
TUSER_INFO_3(FUserData^).usri3_flags := Data
else
RaiseStWin32Error(EStNetException, ErrorD);
end;
end;
procedure TStNetUserItem.SetAccountExpires(Value: TStDateTimeRec);
var
Data : DWord;
ErrorD : DWord;
ParmErr : DWord;
const
MaxDate = $0002D210; { 2/5/2106 }
begin
{
1. Setting Date/Time to 0 will make a Non-Expiring account.
2. Dates must be >= 1/1/1980 12:00:00 AM
3. Dates must be <= 2/5/2106 23:59:59 AM
}
if (Value.D <> AccountExpires.D) or (Value.T <> AccountExpires.T) then begin
if (Value.D = 0) and (Value.T = 0) then
Data := TIMEQ_FOREVER
else begin
if ((Value.D >= Date1980) and (Value.T >= 0)) and
((Value.D <= MaxDate) and (Value.T < SecondsInDay)) then begin
Data := StDateTimeToUnixTime(LocalDateTimeToGlobal(Value, 0));
end else begin
RaiseStError(EStNetException, stscNetDateSpecifiedOutOfRange);
Exit;
end;
end;
ErrorD := StNetUserSetInfo(FServer, FName, 1017, @Data, ParmErr);
if ErrorD = NERR_SUCCESS then begin
if (Value.D = 0) and (Value.T = 0) then
Data := TIMEQ_FOREVER;
TUSER_INFO_3(FUserData^).usri3_acct_expires := Data;
end else begin
RaiseStWin32Error(EStNetException, ErrorD);
end;
end;
end;
procedure TStNetUserItem.SetComment(Value: string);
var
ErrorD : DWord;
ParmErr : DWord;
Data : TLMWideChar;
begin
if Value <> Comment then begin
Data.Value := nil;
try
CvtToWideCharLM(Value, Data);
ErrorD := StNetUserSetInfo(FServer, FName, 1007, @Data.Value, ParmErr);
if ErrorD = NERR_SUCCESS then begin
StNetApiBufferFree(TUSER_INFO_3(FUserData^).usri3_comment);
TUSER_INFO_3(FUserData^).usri3_comment := Data.Value;
FComment := Value;
end else begin
RaiseStWin32Error(EStNetException, ErrorD);
end;
except
StNetApiBufferFree(Data.Value);
raise;
end;
end;
end;
procedure TStNetUserItem.SetFullName(Value: string);
var
ErrorD : DWord;
ParmErr : DWord;
Data : TLMWideChar;
begin
if Value <> FullName then begin
Data.Value := nil;
try
CvtToWideCharLM(Value, Data);
ErrorD := StNetUserSetInfo(FServer, FName, 1011, @Data.Value, ParmErr);
if ErrorD = NERR_SUCCESS then begin
StNetApiBufferFree(TUSER_INFO_3(FUserData^).usri3_full_name);
TUSER_INFO_3(FUserData^).usri3_full_name := Data.Value;
end else begin
RaiseStWin32Error(EStNetException, ErrorD);
end;
except
StNetApiBufferFree(Data.Value);
raise;
end;
end;
end;
procedure TStNetUserItem.SetHomeDirectory(Value: string);
var
ErrorD : DWord;
ParmErr : DWord;
Data : TLMWideChar;
begin
if Value <> HomeDirectory then begin
Data.Value := nil;
try
CvtToWideCharLM(Value, Data);
ErrorD := StNetUserSetInfo(FServer, FName, 1006, @Data.Value, ParmErr);
if ErrorD = NERR_SUCCESS then begin
StNetApiBufferFree(TUSER_INFO_3(FUserData^).usri3_home_dir);
TUSER_INFO_3(FUserData^).usri3_home_dir := Data.Value;
end else begin
RaiseStWin32Error(EStNetException, ErrorD);
end;
except
StNetApiBufferFree(Data.Value);
raise;
end;
end;
end;
procedure TStNetUserItem.SetHomeDrive(Value: string);
var
ErrorD : DWord;
ParmErr : DWord;
Data : TLMWideChar;
begin
if Value <> HomeDirectory then begin
Data.Value := nil;
try
CvtToWideCharLM(Value, Data);
ErrorD := StNetUserSetInfo(FServer, FName, 1053, @Data.Value, ParmErr);
if ErrorD = NERR_SUCCESS then begin
StNetApiBufferFree(TUSER_INFO_3(FUserData^).usri3_home_dir_drive);
TUSER_INFO_3(FUserData^).usri3_home_dir_drive := Data.Value;
end else begin
RaiseStWin32Error(EStNetException, ErrorD);
end;
except
StNetApiBufferFree(Data.Value);
raise;
end;
end;
end;
procedure TStNetUserItem.SetLockedOut(Value: Boolean);
var
Data : DWord;
ErrorD : DWord;
ParmErr : DWord;
begin
if LockedOut then begin
if Value = False then begin
Data := TUSER_INFO_3(FUserData^).usri3_flags;
ClearLongFlag(LongInt(Data), UF_LOCKOUT);
ErrorD := StNetUserSetInfo(FServer, FName, 1008, @Data, ParmErr);
if ErrorD = NERR_SUCCESS then
TUSER_INFO_3(FUserData^).usri3_flags := Data
else
RaiseStWin32Error(EStNetException, ErrorD);
end else begin
{can only CLEAR a lockout }
RaiseStError(EStNetException, stscNetInvalidParameter);
end;
end;
end;
procedure TStNetUserItem.SetName(Value: string);
var
ErrorD : DWord;
ParmErr : DWord;
Data : TLMWideChar;
S : TStNetServerItem;
begin
if Value <> Name then begin
Data.Value := nil;
try
CvtToWideCharLM(Value, Data);
ErrorD := StNetUserSetInfo(FServer, FName, 0, @Data.Value, ParmErr);
if ErrorD = NERR_SUCCESS then begin
StNetApiBufferFree(TUSER_INFO_3(FUserData^).usri3_name);
TUSER_INFO_3(FUserData^).usri3_name := Data.Value;
S := FNetwork.Server[FServer];
S.FUserList[S.FUserList.IndexOf(FName)] := Value;;
FName := Value;
end else begin
RaiseStWin32Error(EStNetException, ErrorD);
end;
except
StNetApiBufferFree(Data.Value);
raise;
end;
end;
end;
procedure TStNetUserItem.SetNoUserPasswordChange(Value: Boolean);
var
Data : DWord;
ErrorD : DWord;
ParmErr : DWord;
begin
if Value <> NoUserPasswordChange then begin
Data := TUSER_INFO_3(FUserData^).usri3_flags;
if Value then
SetLongFlag(LongInt(Data), UF_PASSWD_CANT_CHANGE)
else
ClearLongFlag(LongInt(Data), UF_PASSWD_CANT_CHANGE);
ErrorD := StNetUserSetInfo(FServer, FName, 1008, @Data, ParmErr);
if ErrorD = NERR_SUCCESS then
TUSER_INFO_3(FUserData^).usri3_flags := Data
else
RaiseStWin32Error(EStNetException, ErrorD);
end;
end;
procedure TStNetUserItem.SetPasswordAdmin(Value: string);
var
ErrorD : DWord;
ParmErr : DWord;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -