Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Change NT Password

Posted on 2000-03-12
12
Medium Priority
?
912 Views
Last Modified: 2012-05-04
How can I programatically change
a users NT password? Please provide
example code snippet.

Thanks,
Michael
0
Comment
Question by:mmcgurl
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
  • 2
  • +3
12 Comments
 
LVL 17

Accepted Solution

by:
inthe earned 300 total points
ID: 2610138
Hi,
i have componen ti paste here that can do this.

unit NTChangePassword;

interface

uses
  NTSecurityDecls, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TNTChangePassword = class(TComponent)
  private
    { Private declarations }
    FDomainName:String;
    FUserName:String;
    FOldPassword:String;
    FNewPassword:String;
    function GetTheDomainName:String;
    function GetTheUserName:String;
    function GetTheOld:String;
    function GetTheNew:String;
    procedure SetTheDomainName(TheValue:String);
    procedure SetTheUserName(TheValue:String);
    procedure SetTheOld(TheValue:String);
    procedure SetTheNew(TheValue:String);
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property DomainName:String read GetTheDomainName write SetTheDomainName;
    property UserName:String read GetTheUserName write SetTheUserName;
    property OldPassword:String read GetTheOld write SetTheOld;
    property NewPassword:String read GetTheNew write SetTheNew;
    function Execute:LongInt;
  end;

procedure Register;

implementation

function TNTChangePassword.GetTheDomainName:String;
begin
     Result:=FDomainName;
end;

function TNTChangePassword.GetTheUserName:String;
begin
     Result:=FUserName;
end;

function TNTChangePassword.GetTheOld:String;
begin
     Result:=FOldPassword;
end;

function TNTChangePassword.GetTheNew:String;
begin
     Result:=FNewPassword;
end;

procedure TNTChangePassword.SetTheDomainName(TheValue:String);
begin
     FDomainName:=TheValue;
end;

procedure TNTChangePassword.SetTheUserName(TheValue:String);
begin
     FUserName:=TheValue;
end;

procedure TNTChangePassword.SetTheOld(TheValue:String);
begin
     FOldPassword:=TheValue;
end;

procedure TNTChangePassword.SetTheNew(TheValue:String);
begin
     FNewPassword:=TheValue;
end;

function TNTChangePassword.Execute:LongInt;
var Tmp1:Array[0..255] Of WideChar;
    Tmp2:Array[0..255] Of WideChar;
    Tmp3:Array[0..255] Of WideChar;
    Tmp4:Array[0..255] Of WideChar;
begin
     StringToWideChar(FDomainName,@Tmp1,255);
     StringToWideChar(FUserName,@Tmp2,255);
     StringToWideChar(FOldPassword,@Tmp3,255);
     StringToWideChar(FNewPassword,@Tmp4,255);
     Result:=NetUserChangePassword(@Tmp1,@Tmp2,@Tmp3,@Tmp4);
end;

procedure Register;
begin
  RegisterComponents('NT Tools - Additional', [TNTChangePassword]);
end;

end.



you'll also need this:


// Gideon Vos, 1997 - gideon.vos@usa.net / gvos@qdata.co.za
// NT Security Management Function And Structures, From NETAPI32.DLL And WINNT.H

unit NTSecurityDecls;

interface

uses Windows;

Const

// Event Log Constants
 EVENTLOG_SEQUENTIAL_READ        =$0001;
 EVENTLOG_SEEK_READ              =$0002;
 EVENTLOG_FORWARDS_READ          =$0004;
 EVENTLOG_BACKWARDS_READ         =$0008;
 EVENTLOG_SUCCESS                =$0000;
 EVENTLOG_ERROR_TYPE             =$0001;
 EVENTLOG_WARNING_TYPE           =$0002;
 EVENTLOG_INFORMATION_TYPE       =$0004;
 EVENTLOG_AUDIT_SUCCESS          =$0008;
 EVENTLOG_AUDIT_FAILURE          =$0010;
 EVENTLOG_START_PAIRED_EVENT     =$0001;
 EVENTLOG_END_PAIRED_EVENT       =$0002;
 EVENTLOG_END_ALL_PAIRED_EVENTS  =$0004;
 EVENTLOG_PAIRED_EVENT_ACTIVE    =$0008;
 EVENTLOG_PAIRED_EVENT_INACTIVE  =$0010;

// File And Directory Access Rights
 FILE_READ_DATA                  =$0001;     // file & pipe
 FILE_LIST_DIRECTORY             =$0001;     // directory
 FILE_WRITE_DATA                 =$0002;     // file & pipe
 FILE_ADD_FILE                   =$0002;     // directory
 FILE_APPEND_DATA                =$0004;     // file
 FILE_ADD_SUBDIRECTORY           =$0004;     // directory
 FILE_CREATE_PIPE_INSTANCE       =$0004;     // named pipe
 FILE_READ_EA                    =$0008;     // file & directory
 FILE_READ_PROPERTIES            =FILE_READ_EA;
 FILE_WRITE_EA                   =$0010;     // file & directory
 FILE_WRITE_PROPERTIES           =FILE_WRITE_EA;
 FILE_EXECUTE                    =$0020;     // file
 FILE_TRAVERSE                   =$0020;     // directory
 FILE_DELETE_CHILD               =$0040;     // directory
 FILE_READ_ATTRIBUTES            =$0080;     // all
 FILE_WRITE_ATTRIBUTES           =$0100;     // all
 FILE_ALL_ACCESS                 =(STANDARD_RIGHTS_REQUIRED Or SYNCHRONIZE Or $1FF);
 FILE_GENERIC_READ               =(STANDARD_RIGHTS_READ Or FILE_READ_DATA Or FILE_READ_ATTRIBUTES Or FILE_READ_EA Or SYNCHRONIZE);
 FILE_GENERIC_WRITE              =(STANDARD_RIGHTS_WRITE Or FILE_WRITE_DATA Or FILE_WRITE_ATTRIBUTES Or FILE_WRITE_EA Or FILE_APPEND_DATA Or SYNCHRONIZE);
 FILE_GENERIC_EXECUTE            =(STANDARD_RIGHTS_EXECUTE Or FILE_READ_ATTRIBUTES Or FILE_EXECUTE Or SYNCHRONIZE);

// Access Types
 DELETE                          =$00010000;
 READ_CONTROL                    =$00020000;
 WRITE_DAC                       =$00040000;
 WRITE_OWNER                     =$00080000;
 SYNCHRONIZE                     =$00100000;
 STANDARD_RIGHTS_REQUIRED        =$000F0000;
 STANDARD_RIGHTS_READ            =READ_CONTROL;
 STANDARD_RIGHTS_WRITE           =READ_CONTROL;
 STANDARD_RIGHTS_EXECUTE         =READ_CONTROL;
 STANDARD_RIGHTS_ALL             =$001F0000;
 SPECIFIC_RIGHTS_ALL             =$0000FFFF;

// AccessSystemAcl access type
 ACCESS_SYSTEM_SECURITY          =$01000000;

// MaximumAllowed access type
 MAXIMUM_ALLOWED                 =$02000000;

//  These are the generic rights.
 GENERIC_READ                    =$80000000;
 GENERIC_WRITE                   =$40000000;
 GENERIC_EXECUTE                 =$20000000;
 GENERIC_ALL                     =$10000000;

// Well known SID's
 SECURITY_NULL_SID_AUTHORITY     =[0,0,0,0,0,0];
 SECURITY_WORLD_SID_AUTHORITY    =[0,0,0,0,0,1];
 SECURITY_LOCAL_SID_AUTHORITY    =[0,0,0,0,0,2];
 SECURITY_CREATOR_SID_AUTHORITY  =[0,0,0,0,0,3];
 SECURITY_NON_UNIQUE_AUTHORITY   =[0,0,0,0,0,4];
 SECURITY_NULL_RID               =$00000000;
 SECURITY_WORLD_RID              =$00000000;
 SECURITY_LOCAL_RID              =$00000000;
 SECURITY_CREATOR_OWNER_RID      =$00000000;
 SECURITY_CREATOR_GROUP_RID      =$00000001;

// NT well-known SIDs
 SECURITY_NT_AUTHORITY           =[0,0,0,0,0,5];
 SECURITY_DIALUP_RID             =$00000001;
 SECURITY_NETWORK_RID            =$00000002;
 SECURITY_BATCH_RID              =$00000003;
 SECURITY_INTERACTIVE_RID        =$00000004;
 SECURITY_SERVICE_RID            =$00000006;
 SECURITY_ANONYMOUS_LOGON_RID    =$00000007;
 SECURITY_LOGON_IDS_RID          =$00000005;
 SECURITY_LOGON_IDS_RID_COUNT    =$3;
 SECURITY_LOCAL_SYSTEM_RID       =00000012;
 SECURITY_NT_NON_UNIQUE          =00000015;
 SECURITY_BUILTIN_DOMAIN_RID     =00000020;

// Well-known users ...
 DOMAIN_USER_RID_ADMIN           =$000001F4;
 DOMAIN_USER_RID_GUEST           =$000001F5;

// well-known groups ...
 DOMAIN_GROUP_RID_ADMINS         =$00000200;
 DOMAIN_GROUP_RID_USERS          =$00000201;
 DOMAIN_GROUP_RID_GUESTS         =$00000202;

// ACL revision
 ACL_REVISION                    =2;

// ACE types
 ACCESS_ALLOWED_ACE_TYPE         =0;
 ACCESS_DENIED_ACE_TYPE          =1;
 SYSTEM_AUDIT_ACE_TYPE           =2;
 SYSTEM_ALARM_ACE_TYPE           =3;

// ACE inherit flags
 OBJECT_INHERIT_ACE              =$1;
 CONTAINER_INHERIT_ACE           =$2;
 NO_PROPAGATE_INHERIT_ACE        =$4;
 INHERIT_ONLY_ACE                =$8;
 VALID_INHERIT_FLAGS             =$F;
 SUCCESSFUL_ACCESS_ACE_FLAG      =$40;
 FAILED_ACCESS_ACE_FLAG          =$80;

// Current Security Revision
 SECURITY_DESCRIPTOR_REVISION    =1;
 SECURITY_DESCRIPTOR_REVISION1   =1;
 SECURITY_DESCRIPTOR_MIN_LENGTH  =20;

// DACL's
 SE_OWNER_DEFAULTED              =$0001;
 SE_GROUP_DEFAULTED              =$0002;
 SE_DACL_PRESENT                 =$0004;
 SE_DACL_DEFAULTED               =$0008;
 SE_SACL_PRESENT                 =$0010;
 SE_SACL_DEFAULTED               =$0020;
 SE_SELF_RELATIVE                =$8000;

// Security Information
 OWNER_SECURITY_INFORMATION      =$00000001;
 GROUP_SECURITY_INFORMATION      =$00000002;
 DACL_SECURITY_INFORMATION       =$00000004;
 SACL_SECURITY_INFORMATION       =$00000008;

// Netbios
 NCBNAMSZ                        =18;

// Server Types
SV_TYPE_WORKSTATION              =$00000001; // LAN Manager Workstation
SV_TYPE_SERVER                       =$00000002; // LAN Manager Server
SV_TYPE_SQLSERVER               =$00000004; // Server Running Microsoft SQL Server
SV_TYPE_DOMAIN_CTRL              =$00000008; // Primary Domain Controller
SV_TYPE_DOMAIN_BAKCTRL           =$00000010; // Backup Domain Controller
SV_TYPE_TIMESOURCE               =$00000020; // Server Running Timesource Service
SV_TYPE_AFP                      =$00000040; // Apple File Protocol Server
SV_TYPE_NOVELL                   =$00000080; // Novell Server
SV_TYPE_DOMAIN_MEMBER            =$00000100; // Domain Member
SV_TYPE_PRINT                    =$00000200; // Server Sharing Print Queue
SV_TYPE_DIALIN                   =$00000400; // Server Running Dial-In Service
SV_TYPE_XENIX_SERVER             =$00000800; // Xenix Server
SV_TYPE_NT                       =$00001000; // Windows NT Server
SV_TYPE_WFW                      =$00002000; // Server Running Windows For Workgroups
SV_TYPE_POTENTIAL_BROWSER        =$00010000; // Server That Can Run Browser Service
SV_TYPE_BACKUP_BROWSER           =$00020000; // Server Running A Browser Service As Backup
SV_TYPE_MASTER_BROWSER           =$00040000; // Server Running Master Browser Service
SV_TYPE_DOMAIN_MASTER            =$00080000; // Server Running Domain Master Browser
SV_TYPE_DOMAIN_ENUM              =$80000000; // Domain Announcement
SV_TYPE_ALL                      =$FFFFFFFF; // All Servers

// Session User Types
SESS_GUEST                   =$00000001;
SESS_NONENCRYPTION             =$00000002;

// Type Definitions
Type LARGE_INTEGER=record
    LowPart:DWORD;
    HighPart:LongInt;
End;

// defines a Session Level 0 structure
Type SESSION_INFO_0=record
      sesi0_cname:LPWSTR;
End;

// defines a Session Level 1 structure
Type SESSION_INFO_1=record
      sesi1_cname:LPWSTR;
      sesi1_username:LPWSTR;
      sesi1_num_opens:DWORD;
      sesi1_time:DWORD;
      sesi1_idle_time:DWORD;
      sesi1__flags:DWORD;
End;

// defines a Session Level 2 structure
Type SESSION_INFO_2=record
      sesi2_cname:LPWSTR;
      sesi2_username:LPWSTR;
      sesi2_num_opens:DWORD;
      sesi2_time:DWORD;
      sesi2_idle_time:DWORD;
      sesi2_flags:DWORD;
      sesi2_cltype_name:LPWSTR;
End;

// defines a Session Level 3 structure
Type SESSION_INFO_10=record
      sesi10_cname:LPWSTR;
      sesi10_username:LPWSTR;
      sesi10_time:DWORD;
      sesi10_idle_time:DWORD;
End;

// defines a Local Group Level 0 structure
Type LOCALGROUP_INFO_0=record
      lgrpi0_name:LPWSTR;
End;

// defines a Local Group Level 1 structure
Type LOCALGROUP_INFO_1=record
      lgrpi1_name:LPWSTR;
      lgrpi1_comment:LPWSTR;
End;

// defines a Local Group Level 1002 structure
Type LOCALGROUP_INFO_1002=record
      lgrpi1002_comment:LPWSTR;
End;

// defines a Local Group Member Info Level 0 structure
Type LOCALGROUP_MEMBERS_INFO_0=record
        lgrmi0_sid:PSID;
End;

// defines a Local Group Member Info Level 3 structure
Type LOCALGROUP_MEMBERS_INFO_3=record
        lgrmi3_domainandname:LPWSTR;
End;

// defines User Level 0 structure
Type USER_INFO_0=record
      usri0_name:LPWSTR;
End;

// defines User Level 1 structure
Type USER_INFO_1=record
      usri1_name:LPWSTR;
      usri1_password:LPWSTR;
      usri1_password_age:DWORD;
      usri1_priv:DWORD;
      usri1_home_dir:LPWSTR;
      usri1_comment:LPWSTR;
      usri1_flags:DWORD;
        usri1_script_path:LPWSTR;
End;

// defines User Level 2 structure
Type USER_INFO_2=record
      usri2_name:LPWSTR;
      usri2_password:LPWSTR;
      usri2_password_age:DWORD;
      usri2_priv:DWORD;
        usri2_home_dir:LPWSTR;
      usri2_comment:LPWSTR;
      usri2_flags:DWORD;
      usri2_script_path:LPWSTR;
      usri2_auth_flags:DWORD;
      usri2_full_name:LPWSTR;
      usri2_usr_comment:LPWSTR;
      usri2_parms:LPWSTR;
      usri2_workstations:LPWSTR;
      usri2_last_logon:DWORD;
      usri2_last_logoff:DWORD;
      usri2_acct_expires:DWORD;
      usri2_max_storage:DWORD;
      usri2_units_per_week:DWORD;
      usri2_logon_hours:PChar;
      usri2_bad_pw_count:DWORD;
      usri2_num_logons:DWORD;
      usri2_logon_server:LPWSTR;
      usri2_country_code:DWORD;
      usri2_code_page:DWORD;
End;

// defines User Level 3 structure
Type USER_INFO_3=record
      usri3_name:LPWSTR;
      usri3_password:LPWSTR;
      usri3_password_age:DWORD;
      usri3_priv:DWORD;
      usri3_home_dir:LPWSTR;
      usri3_comment:LPWSTR;
      usri3_flags:DWORD;
      usri3_script_path:LPWSTR;
      usri3_auth_flags:DWORD;
      usri3_full_name:LPWSTR;
      usri3_usr_comment:LPWSTR;
      usri3_parms:LPWSTR;
      usri3_workstations:LPWSTR;
      usri3_last_logon:DWORD;
      usri3_last_logoff:DWORD;
      usri3_acct_expires:DWORD;
      usri3_max_storage:DWORD;
      usri3_units_per_week:DWORD;
      usri3_logon_hours:PBYTE;
      usri3_bad_pw_count:DWORD;
      usri3_num_logons:DWORD;
      usri3_logon_server:LPWSTR;
      usri3_country_code:DWORD;
      usri3_code_page:DWORD;
      usri3_user_id:DWORD;
      usri3_primary_group_id:DWORD;
      usri3_profile:LPWSTR;
      usri3_home_dir_drive:LPWSTR;
      usri3_password_expired:DWORD;
End;

// defines User Level 10 structure
Type USER_INFO_10=record
      usri10_name:LPWSTR;
      usri10_comment:LPWSTR;
      usri10_usr_comment:LPWSTR;
      usri10_full_name:LPWSTR;
End;

// defines User Level 11 structure
Type USER_INFO_11=record
      usri11_name:LPWSTR;
      usri11_comment:LPWSTR;
      usri11_usr_comment:LPWSTR;
      usri11_full_name:LPWSTR;
      usri11_priv:DWORD;
      usri11_auth_flags:DWORD;
      usri11_password_age:DWORD;
      usri11_home_dir:LPWSTR;
      usri11_parms:LPWSTR;
      usri11_last_logon:DWORD;
      usri11_last_logoff:DWORD;
      usri11_bad_pw_count:DWORD;
      usri11_num_logons:DWORD;
      usri11_logon_server:LPWSTR;
      usri11_country_code:DWORD;
      usri11_workstations:LPWSTR;
      usri11_max_storage:DWORD;
      usri11_units_per_week:DWORD;
      usri11_logon_hours:PChar;
      usri11_code_page:DWORD;
End;

// defines User Level 20 structure
Type USER_INFO_20=record
      usri20_name:LPWSTR;
      usri20_full_name:LPWSTR;
      usri20_comment:LPWSTR;
      usri20_flags:DWORD;
      usri20_user_id:DWORD;
End;

// defines a Global Group Level 0 structure
Type GROUP_INFO_0=record
      grpi0_name:LPWSTR;
End;

// defines a Global Group Level 1 structure
Type GROUP_INFO_1=record
      grpi1_name:LPWSTR;
      grpi1_comment:LPWSTR;
End;

// defines a Global Group Level 2 structure
Type GROUP_INFO_2=record
      grpi2_name:LPWSTR;
      grpi2_comment:LPWSTR;
      grpi2_group_id:DWORD;
      grpi2_attributes:DWORD;
End;

// defines a User Info Level 0 structure
Type GROUP_USERS_INFO_0=record
      grui0_name:LPWSTR;
End;

// defines a User Info Level 1 structure
Type GROUP_USERS_INFO_1=record
      grui1_name:LPWSTR;
      grui1_attributes:DWORD;
End;

// defines a User Modals Level 0 structure
Type USER_MODALS_INFO_0=record
      usrmod0_min_passwd_len:DWORD;
      usrmod0_max_passwd_age:DWORD;
      usrmod0_min_passwd_age:DWORD;
      usrmod0_force_logoff:DWORD;
      usrmod0_password_hist_len:DWORD;
End;

// defines a User Modals Level 1 structure
Type USER_MODALS_INFO_1=record
      usrmod1_role:DWORD;
      usrmod1_primary:LPWSTR;
End;

// defines a User Modals Level 2 structure
Type USER_MODALS_INFO_2=record
      usrmod2_domain_name:LPWSTR;
      usrmod2_domain_id:PSID;
End;

// defines a Server Transport Level 0 structure
Type SERVER_TRANSPORT_INFO_0=record
      svti0_number_of_vcs:DWORD;
      svti0_transport_name:LPWSTR;
      svti0_transport_address:PChar;
      svti0_transportaddresslength:DWORD;
      svti0_networkaddress:LPWSTR;
End;

// defines a Workstation Transport Level 0 structure
Type WKSTA_TRANSPORT_INFO_0=record
      wkti0_quality_of_service:DWORD;
      wkti0_number_of_vcs:DWORD;
      wkti0_transport_name:LPWSTR;
      wkti0_transport_address:LPWSTR;
End;

// defines a Server Level 100 structure
Type SERVER_INFO_100=record
      sv100_platform_id:DWORD;
      sv100_name:LPWSTR;
End;

// defines a Server Level 101 structure
Type SERVER_INFO_101=record
      sv101_platform_id:DWORD;
      sv101_name:LPWSTR;
      sv101_version_major:DWORD;
      sv101_version_minor:DWORD;
      sv101_type:DWORD;
      sv101_comment:LPWSTR;
End;

// defines a Server Level 102 structure
Type SERVER_INFO_102=record
      sv102_platform_id:DWORD;
      sv102_name:LPWSTR;
      sv102_version_major:DWORD;
      sv102_version_minor:DWORD;
      sv102_type:DWORD;
      sv102_comment:LPWSTR;
      sv102_users:DWORD;
      sv102_disc:DWORD;
      sv102_hidden:Boolean;
      sv102_announce:DWORD;
      sv102_anndelta:DWORD;
      sv102_userpath:LPWSTR;
End;

// defines a Server Level 402 structure
Type SERVER_INFO_402=record
      sv402_ulist_mtime:DWORD;
      sv402_glist_mtime:DWORD;
      sv402_alist_mtime:DWORD;
      sv402_alerts:LPWSTR;
      sv402_security:DWORD;
      sv402_numadmin:DWORD;
      sv402_lanmask:DWORD;
      sv402_guestacct:LPWSTR;
      sv402_chdevs:DWORD;
      sv402_chdevq:DWORD;
      sv402_chdevjobs:DWORD;
      sv402_connections:DWORD;
      sv402_shares:DWORD;
      sv402_openfiles:DWORD;
      sv402_sessopens:DWORD;
      sv402_sessvcs:DWORD;
      sv402_sessreqs:DWORD;
      sv402_opensearch:DWORD;
      sv402_activelocks:DWORD;
      sv402_numreqbuf:DWORD;
      sv402_sizreqbuf:DWORD;
      sv402_numbigbuf:DWORD;
      sv402_numfiletasks:DWORD;
      sv402_alertsched:DWORD;
      sv402_erroralert:DWORD;
      sv402_logonalert:DWORD;
      sv402_accessalert:DWORD;
      sv402_diskalert:DWORD;
      sv402_netioalert:DWORD;
      sv402_maxauditsz:DWORD;
      sv402_srvheuristics:LPWSTR;
End;

// defines a Server Level 403 structure
Type SERVER_INFO_403=record
      sv403_ulist_mtime:DWORD;
      sv403_glist_mtime:DWORD;
      sv403_alist_mtime:DWORD;
      sv403_alerts:LPWSTR;
      sv403_security:DWORD;
      sv403_numadmin:DWORD;
      sv403_lanmask:DWORD;
      sv403_guestacct:LPWSTR;
      sv403_chdevs:DWORD;
      sv403_chdevq:DWORD;
      sv403_chdevjobs:DWORD;
      sv403_connections:DWORD;
      sv403_shares:DWORD;
      sv403_openfiles:DWORD;
      sv403_sessopens:DWORD;
      sv403_sessvcs:DWORD;
      sv403_sessreqs:DWORD;
      sv403_opensearch:DWORD;
      sv403_activelocks:DWORD;
      sv403_numreqbuf:DWORD;
      sv403_sizreqbuf:DWORD;
      sv403_numbigbuf:DWORD;
      sv403_numfiletasks:DWORD;
      sv403_alertsched:DWORD;
      sv403_erroralert:DWORD;
      sv403_logonalert:DWORD;
      sv403_accessalert:DWORD;
      sv403_diskalert:DWORD;
      sv403_netioalert:DWORD;
      sv403_maxauditsz:DWORD;
      sv403_srvheuristics:LPWSTR;
      sv403_auditedevents:DWORD;
      sv403_autoprofile:DWORD;
      sv403_autopath:LPWSTR;
End;

// defines a Server Level 502 structure
Type SERVER_INFO_502=record
      sv502_sessopens:DWORD;
      sv502_sessvcs:DWORD;
      sv502_opensearch:DWORD;
      sv502_sizreqbuf:DWORD;
      sv502_initworkitems:DWORD;
      sv502_maxworkitems:DWORD;
      sv502_rawworkitems:DWORD;
      sv502_irpstacksize:DWORD;
      sv502_maxrawbuflen:DWORD;
      sv502_sessusers:DWORD;
      sv502_sessconns:DWORD;
      sv502_maxpagedmemoryusage:DWORD;
      sv502_maxnonpagedmemoryusage:DWORD;
      sv502_enablesoftcompat:Boolean;
        sv502_enableforcedlogoff:Boolean;
      sv502_timesource:Boolean;
      sv502_acceptdownlevelapis:Boolean;
      sv502_lmannounce:Boolean;
End;

// defines a Server Level 503 structure
Type SERVER_INFO_503=record
      sv503_sessopens:DWORD;
      sv503_sessvcs:DWORD;
      sv503_opensearch:DWORD;
      sv503_sizreqbuf:DWORD;
      sv503_initworkitems:DWORD;
      sv503_maxworkitems:DWORD;
      sv503_rawworkitems:DWORD;
      sv503_irpstacksize:DWORD;
      sv503_maxrawbuflen:DWORD;
      sv503_sessusers:DWORD;
      sv503_sessconns:DWORD;
      sv503_maxpagedmemoryusage:DWORD;
      sv503_maxnonpagedmemoryusage:DWORD;
      sv503_enablesoftcompat:Boolean;
      sv503_enableforcedlogoff:Boolean;
      sv503_timesource:Boolean;
      sv503_acceptdownlevelapis:Boolean;
      sv503_lmannounce:Boolean;
      sv503_domain:PChar;
      sv503_maxcopyreadlen:DWORD;
      sv503_maxcopywritelen:DWORD;
      sv503_minkeepsearch:DWORD;
      sv503_maxkeepsearch:DWORD;
      sv503_minkeepcomplsearch:DWORD;
      sv503_maxkeepcomplsearch:DWORD;
      sv503_threadcountadd:DWORD;
      sv503_numblockthreads:DWORD;
      sv503_scavtimeout:DWORD;
      sv503_minrcvqueue:DWORD;
      sv503_minfreeworkitems:DWORD;
      sv503_xactmemsize:DWORD;
      sv503_threadpriority:DWORD;
      sv503_maxmpxct:DWORD;
      sv503_oplockbreakwait:DWORD;
      sv503_oplockbreakresponsewait:DWORD;
      sv503_enableoplocks:Boolean;
      sv503_enableoplockforceclose:Boolean;
      sv503_enablefcbopens:Boolean;
      sv503_enableraw:Boolean;
      sv503_enabledpc:Boolean;
      sv503_enablemdlio:Boolean;
      sv503_enablefastio:Boolean;
End;

// defines a NT Workstation Statistics structure
Type STAT_WORKSTATION_0_NT=record
      StatisticsStartTime:LARGE_INTEGER;
      BytesReceived:LARGE_INTEGER;
      SmbsReceived:LARGE_INTEGER;
      PagingReadBytesRequested:LARGE_INTEGER;
      NonPagingReadBytesRequested:LARGE_INTEGER;
      CacheReadBytesRequested:LARGE_INTEGER;
      NetworkReadBytesRequested:LARGE_INTEGER;
      BytesTransmitted:LARGE_INTEGER;
      SmbsTransmitted:LARGE_INTEGER;
      PagingWriteBytesRequested:LARGE_INTEGER;
      NonPagingWriteBytesRequested:LARGE_INTEGER;
      CacheWriteBytesRequested:LARGE_INTEGER;
      NetworkWriteBytesRequested:LARGE_INTEGER;
      InitiallyFailedOperations:DWORD;
      FailedCompletionOperations:DWORD;
      ReadOperations:DWORD;
      RandomReadOperations:DWORD;
      ReadSmbs:DWORD;
      LargeReadSmbs:DWORD;
      SmallReadSmbs:DWORD;
      WriteOperations:DWORD;
      RandomWriteOperations:DWORD;
      WriteSmbs:DWORD;
      LargeWriteSmbs:DWORD;
      SmallWriteSmbs:DWORD;
      RawReadsDenied:DWORD;
      RawWritesDenied:DWORD;
      NetworkErrors:DWORD;
      Sessions:DWORD;
      FailedSessions:DWORD;
      Reconnects:DWORD;
      CoreConnects:DWORD;
      Lanman20Connects:DWORD;
      Lanman21Connects:DWORD;
      LanmanNtConnects:DWORD;
      ServerDisconnects:DWORD;
      HungSessions:DWORD;
      UseCount:DWORD;
      FailedUseCount:DWORD;
      CurrentCommands:DWORD;
End;

// defines a Workstation Level 100 structure
Type WKSTA_INFO_100=record
      wki100_platform_id:DWORD;
      wki100_computername:LPWSTR;
      wki100_langroup:LPWSTR;
      wki100_ver_major:DWORD;
      wki100_ver_minor:DWORD;
End;

// defines a Workstation Level 101 structure
Type WKSTA_INFO_101=record
      wki101_platform_id:DWORD;
      wki101_computername:LPWSTR;
      wki101_langroup:LPWSTR;
      wki101_ver_major:DWORD;
      wki101_ver_minor:DWORD;
      wki101_lanroot:LPWSTR;
End;

// defines a Workstation Level 102 structure
Type WKSTA_INFO_102=record
      wki102_platform_id:DWORD;
      wki102_computername:LPWSTR;
      wki102_langroup:LPWSTR;
      wki102_ver_major:DWORD;
      wki102_ver_minor:DWORD;
      wki102_lanroot:LPWSTR;
      wki102_logged_on_users:DWORD;
End;

// defines a Workstation Level 302 structure
Type WKSTA_INFO_302=record
      wki302_char_wait:DWORD;
      wki302_collection_time:DWORD;
      wki302_maximum_collection_count:DWORD;
      wki302_keep_conn:DWORD;
      wki302_keep_search:DWORD;
      wki302_max_cmds:DWORD;
      wki302_num_work_buf:DWORD;
      wki302_siz_work_buf:DWORD;
      wki302_max_wrk_cache:DWORD;
      wki302_sess_timeout:DWORD;
      wki302_siz_error:DWORD;
      wki302_num_alerts:DWORD;
      wki302_num_services:DWORD;
      wki302_errlog_sz:DWORD;
      wki302_print_buf_time:DWORD;
      wki302_num_char_buf:DWORD;
      wki302_siz_char_buf:DWORD;
      wki302_wrk_heuristics:LPWSTR;
      wki302_mailslots:DWORD;
      wki302_num_dgram_buf:DWORD;
End;

// defines a Workstation Level 402 structure
Type WKSTA_INFO_402=record
      wki402_char_wait:DWORD;
      wki402_collection_time:DWORD;
      wki402_maximum_collection_count:DWORD;
      wki402_keep_conn:DWORD;
      wki402_keep_search:DWORD;
      wki402_max_cmds:DWORD;
      wki402_num_work_buf:DWORD;
      wki402_siz_work_buf:DWORD;
      wki402_max_wrk_cache:DWORD;
      wki402_sess_timeout:DWORD;
      wki402_siz_error:DWORD;
      wki402_num_alerts:DWORD;
      wki402_num_services:DWORD;
      wki402_errlog_sz:DWORD;
      wki402_print_buf_time:DWORD;
      wki402_num_char_buf:DWORD;
      wki402_siz_char_buf:DWORD;
      wki402_wrk_heuristics:LPWSTR;
      wki402_mailslots:DWORD;
      wki402_num_dgram_buf:DWORD;
      wki402_max_threads:DWORD;
End;

// defines a Workstation Level 502 structure
Type WKSTA_INFO_502=record
      wki502_char_wait:DWORD;
      wki502_collection_time:DWORD;
      wki502_maximum_collection_count:DWORD;
      wki502_keep_conn:DWORD;
      wki502_max_cmds:DWORD;
      wki502_sess_timeout:DWORD;
      wki502_siz_char_buf:DWORD;
      wki502_max_threads:DWORD;
      wki502_lock_quota:DWORD;
      wki502_lock_increment:DWORD;
      wki502_lock_maximum:DWORD;
      wki502_pipe_increment:DWORD;
      wki502_pipe_maximum:DWORD;
      wki502_cache_file_timeout:DWORD;
      wki502_dormant_file_limit:DWORD;
      wki502_read_ahead_throughput:DWORD;
      wki502_num_mailslot_buffers:DWORD;
      wki502_num_srv_announce_buffers:DWORD;
      wki502_dgreceiver_threads:DWORD;
      wki502_use_opportunistic_locking:Boolean;
      wki502_use_unlock_behind:Boolean;
      wki502_use_close_behind:Boolean;
      wki502_buf_named_pipes:Boolean;
      wki502_use_lock_read_unlock:Boolean;
      wki502_utilize_nt_caching:Boolean;
      wki502_use_raw_read:Boolean;
      wki502_use_raw_write:Boolean;
      wki502_use_write_raw_data:Boolean;
      wki502_use_encryption:Boolean;
      wki502_buf_files_deny_write:Boolean;
      wki502_buf_read_only_files:Boolean;
      wki502_force_core_create_mode:Boolean;
      wki502_use_512_byte_max_transfer:Boolean;
End;

// defines a Workstation User Level 0 structure
Type WKSTA_USER_INFO_0=record
      wkui0_username:LPWSTR;
End;

// defines a Workstation User Level 1 structure
Type WKSTA_USER_INFO_1=record
      wkui1_username:LPWSTR;
      wkui1_logon_domain:LPWSTR;
      wkui1_logon_server:LPWSTR;
      wkui1_oth_domains:LPWSTR;
End;

// defines a Workstation User Level 1101 structure
Type WKSTA_USER_INFO_1101=record
      wkui1101_oth_domains:PChar;
End;

// defines a Name Buffer structure
Type NAME_BUFFER=record
    name:Array[0..NCBNAMSZ] Of UCHAR;
    name_num:UCHAR;
    name_flags:UCHAR;
End;

// defines a Network Control Block structure
Type NCB=record
    ncb_command:UCHAR;
    ncb_retcode:UCHAR;
    ncb_lsn:UCHAR;
    ncb_num:UCHAR;
    ncb_buffer:PUCHAR;
    ncb_length:WORD;
    ncb_callname:Array[0..NCBNAMSZ] Of UCHAR;
    ncb_name:Array[0..NCBNAMSZ] Of UCHAR;
    ncb_rto:UCHAR;
    ncb_sto:UCHAR;
    ncb_post:Pointer;                      //////////////////// ?
    ncb_lana_num:UCHAR;
    ncb_cmd_cplt:UCHAR;
    ncb_reserve:Array[0..10] Of UCHAR;
    ncb_event:THandle;
End;

// defines an Adapter Status structure
Type ADAPTER_STATUS=record
    adapter_address:Array[0..6] Of Char;
    rev_major:UCHAR;
    reserved0:UCHAR;
    adapter_type:UCHAR;
    rev_minor:UCHAR;
    duration:WORD;
    frmr_recv:WORD;
    frmr_xmit:WORD;
    iframe_recv_err:WORD;
    xmit_aborts:WORD;
    xmit_success:DWORD;
    recv_success:DWORD;
    iframe_xmit_err:WORD;
    recv_buff_unavail:WORD;
    t1_timeouts:WORD;
    ti_timeouts:WORD;
    reserved1:DWORD;
    free_ncbs:WORD;
    max_cfg_ncbs:WORD;
    max_ncbs:WORD;
    xmit_buf_unavail:WORD;
    max_dgram_size:WORD;
    pending_sess:WORD;
    max_cfg_sess:WORD;
    max_sess:WORD;
    max_sess_pkt_size:WORD;
    name_count:WORD;
End;

// Local Group Function Defines
function NetLocalGroupAdd(Server:PWideChar;Level:DWORD;Buffer:PChar;ParmError:PChar):LongInt; stdcall; external 'netapi32.dll' name 'NetLocalGroupAdd';
function NetLocalGroupAddMember(Server:PWideChar;GroupName:PWideChar;MembersID:PSID):LongInt; stdcall; external 'netapi32.dll' name 'NetLocalGroupAddMember';
function NetLocalGroupDel(Server:PWideChar;GroupName:PWideChar):LongInt; stdcall; external 'netapi32.dll' name 'NetLocalGroupDel';
function NetLocalGroupDelMember(Server:PWideChar;GroupName:PWideChar;MembersID:PSID):LongInt; stdcall; external 'netapi32.dll' name 'NetLocalGroupDelMember';
function NetLocalGroupEnum(Server:PWideChar;Level:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;ResumeHandle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetLocalGroupEnum';
function NetLocalGroupGetInfo(Server:PWideChar;GroupName:PWideChar;Level:DWORD;BufPtr:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetLocalGroupGetInfo';
function NetLocalGroupGetMembers(Server:PWideChar;LocalGroupName:PWideChar;Level:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;ResumeHandle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetLocalGroupGetMembers';
function NetLocalGroupSetInfo(Server:PWideChar;GroupName:PWideChar;Level:DWORD;Buffer:PChar;ParmError:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetLocalGroupSetInfo';
function NetLocalGroupSetMembers(Server:PWideChar;GroupName:PWideChar;Level:DWORD;Buf:PChar;TotalEntries:DWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetLocalGroupSetMembers';

// Global Group Function Defines
function NetGroupAdd(ServerName:PWideChar;Level:DWORD;Buf:PChar;ParmError:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetGroupAdd';
function NetGroupAddUser(ServerName:PWideChar;GroupName:PWideChar;UserName:PWideChar):LongInt; stdcall; external 'netapi32.dll' name 'NetGroupAddUser';
function NetGroupDel(Server:PWideChar;GroupName:PWideChar):LongInt; stdcall; external 'netapi32.dll' name 'NetGroupDel';
function NetGroupDelUser(Server:PWideChar;GroupName:PWideChar;UserName:PWideChar):LongInt; stdcall; external 'netapi32.dll' name 'NetGroupDelUser';
function NetGroupEnum(Server:PWideChar;Level:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;Resume_Handle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetGroupEnum';
function NetGroupGetInfo(Server:PWideChar;GroupName:PWideChar;Level:DWORD;BufPtr:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetGroupGetInfo';
function NetGroupGetUsers(Server:PWideChar;GroupName:PWideChar;Level:DWORD;BufPtr:Pointer;PreMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;Resume_Handle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetGroupGetUsers';
function NetGroupSetInfo(Server:PWideChar;GroupName:PWideChar;Level:DWORD;Buf:PChar;ParmError:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetGroupSetInfo';
function NetGroupSetUsers(Server:PWideChar;GroupName:PWideChar;Level:DWORD;Buf:PChar;TotalEntries:DWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetGroupSetUsers';

// User Modals Function Defines
function NetUserModalsGet(Server:PWideChar;Level:DWORD;BufPtr:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetUserModalsGet';
function NetUserModalsSet(Server:PWideChar;Level:DWORD;Buf:PChar;ParmError:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetUserModalsSet';

// Statistics Function Defines
function NetStatisticsGet(Server:PWideChar;Service:PWideChar;Level:DWORD;Options:DWORD;BufPtr:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetStatisticsGet';

// User Management Function Defines
function NetUserAdd(Server:PWideChar;Level:DWORD;Buffer:PChar;ParmError:PChar):LongInt; stdcall; external 'netapi32.dll' name 'NetUserAdd';
function NetUserDel(Server:PWideChar;UserName:PWideChar):LongInt; stdcall; external 'netapi32.dll' name 'NetUserDel';
function NetUserEnum(Server:PWideChar;Level:DWORD;Filter:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;ResumeHandle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetUserEnum';
function NetUserGetLocalGroups(Server:PWideChar;UserName:PWideChar;Level:DWORD;Flags:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;ResumeHandle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetUserGetLocalGroups';
function NetUserGetGroups(Server:PWideChar;UserName:PWideChar;Level:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;ResumeHandle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetUserGetGroups';
function NetUserSetGroups(Server:PWideChar;UserName:PWideChar;Level:DWORD;Buffer:PChar;Num_Entries:DWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetUserSetGroups';
function NetUserGetInfo(Server:PWideChar;UserName:PWideChar;Level:DWORD;Buffer:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetUserGetInfo';
function NetUserSetInfo(Server:PWideChar;UserName:PWideChar;Level:DWORD;Buffer:PChar;ParmError:PChar):LongInt; stdcall; external 'netapi32.dll' name 'NetUserSetInfo';
function NetUserChangePassword(Domain:PWideChar;UserName:PWideChar;OldPassword:PWideChar;NewPassword:PWideChar):LongInt; stdcall; external 'netapi32.dll' name 'NetUserChangePassword';

// Server & Transport Function Defines
function NetServerTransportAdd(Server:PChar;Level:DWORD;BufPtr:PChar):LongInt; stdcall; external 'netapi32.dll' name 'NetServerTransportAdd';
function NetServerTransportDel(Server:PWideChar;TransportName:PWideChar):LongInt; stdcall; external 'netapi32.dll' name 'NetServerTransportDel';
function NetServerTransportEnum(Server:PChar;Level:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:DWORD;Resume_Handle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetServerTransportEnum';
function NetServerDiskEnum(Server:PChar;Level:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;Resume_Handle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetServerDiskEnum';
function NetServerEnum(Server:PChar;Level:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;ServerType:DWORD;Domain:PChar;Resume_Handle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetServerEnum';
function NetServerGetInfo(Server:PChar;Level:DWORD;BufPtr:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetServerGetInfo';
function NetServerSetInfo(Server:PChar;Level:DWORD;Buf:PChar;Parm_Error:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetServerSetInfo';

// Workstation Function Defines
function NetWkstaGetInfo(Server:PChar;Level:DWORD;BufPtr:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetWkstaGetInfo';
function NetWkstaSetInfo(Server:PChar;Level:DWORD;Buf:PChar;Parm_Error:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetWkstaSetInfo';
function NetWkstaUserGetInfo(Reserved:PChar;Level:DWORD;BufPtr:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetWkstaUserGetInfo';
function NetWkstaUserSetInfo(Reserved:PChar;Level:DWORD;BufPtr:Pointer;Parm_Error:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetWkstaUserSetInfo';
function NetWkstaUserEnum(Server:PChar;Level:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;Resume_Handle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetWkstaUserEnum';

// Netbios function Defines
function Netbios(PNCB:Pointer):UCHAR; stdcall; external 'netapi32.dll' name 'Netbios';

// Other function Defines
function NetApiBufferFree(Buffer:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetApiBufferFree';

// Session Functions
function NetSessionDel(Server:PChar;ClientName:PChar;UserName:PChar;Reserved:DWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetSessionDel';
function NetSessionEnum(Server:PChar;ClientName:PChar;UserName:PChar;Level:DWORD;BufPtr:Pointer;PrefMaxLen:DWORD;EntriesRead:LPDWORD;TotalEntries:LPDWORD;Resume_Handle:LPDWORD):LongInt; stdcall; external 'netapi32.dll' name 'NetSessionEnum';
function NetSessionGetInfo(Server:PChar;ClientName:PChar;UserName:PChar;Level:DWORD;BufPtr:Pointer):LongInt; stdcall; external 'netapi32.dll' name 'NetSessionGetInfo';

implementation

end.



Regards Barry



0
 
LVL 15

Expert Comment

by:simonet
ID: 2610181
Following...
0
 
LVL 2

Expert Comment

by:craig_capel
ID: 2612313
all that code is making me dizzzzzy............
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 3

Expert Comment

by:d4jaj1
ID: 2618143
Didn't work for me in D4 C/S, win98.  I get an error during Installation of teh component.  Something about a device not being loaded.
0
 
LVL 17

Expert Comment

by:inthe
ID: 2618158
the question is for change password in nt not win98...
0
 

Expert Comment

by:Rusfist
ID: 2619476
Listening...
0
 
LVL 2

Expert Comment

by:craig_capel
ID: 2619518
d4jaj are you mmcgurl ?
0
 
LVL 3

Expert Comment

by:d4jaj1
ID: 2620372
inthe,

You are correct.  My error.  Do you have something similar that works on NT & 9x?

Craig,

No, I'm not mmcgurl.
0
 
LVL 17

Expert Comment

by:inthe
ID: 2622587
nope ..this is very nt specific
the dlls needed for this way are not present on Win9* ..
that is reason the errors  about device not being loaded occur on win9* )


where is mmcgurl ?
0
 
LVL 17

Expert Comment

by:inthe
ID: 2642784
i'd like to know what would have got an "A" grade ..
0
 
LVL 2

Expert Comment

by:craig_capel
ID: 2644219
hmm, maybe, you may have got a grade "A" if you got the next flight out, and then wrote the program for them.......
0
 
LVL 1

Expert Comment

by:rene_moeller
ID: 2644275
I just used the code in a project. It works perfect for me. Thanks inthe.

I grade the answer A+ !!!
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article explains how to create forms/units independent of other forms/units object names in a delphi project. Have you ever created a form for user input in a Delphi project and then had the need to have that same form in a other Delphi proj…
In my programming career I have only very rarely run into situations where operator overloading would be of any use in my work.  Normally those situations involved math with either overly large numbers (hundreds of thousands of digits or accuracy re…
This tutorial will teach you the special effect of super speed similar to the fictional character Wally West aka "The Flash" After Shake : http://www.videocopilot.net/presets/after_shake/ All lightning effects with instructions : http://www.mediaf…
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
Suggested Courses

636 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question