⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stnet.pas

📁 条码控件: 一维条码控件 二维条码控件 PDF417Barcode MaxiCodeBarcode
💻 PAS
📖 第 1 页 / 共 5 页
字号:
    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 + -