;//////////////////////////////////////////////////////////
; jpd September 2009
; update October 2010
;
; PB 4.51
;
; enable/disable user local or on remote computer
;//////////////////////////////////////////////////////////
EnableExplicit
#ERROR_SUCCESS = 0
#NERR_SUCCESS=#ERROR_SUCCESS
#UF_ACCOUNTDISABLE = 2
#ERR_ACCOUNT_CHANGED = 0
#ERR_ACCOUNT_ALREADY_DISABLED = -16
#ERR_ACCOUNT_ALREADY_ENABLED = -32
#ERR_ACCOUNT_NOT_FOUND = -64
#ERR_UPDATE_NOT_SUCCESSFUL = -128
Procedure.l ToggleAccount(sComputer.s,sUsername.s)
Protected Ucomputer.s,Uuser.s
Protected success.l, buff.l=0
Protected *ui3.USER_INFO_3
Protected DisableAccount.l
sComputer=RemoveString(sComputer, "\" )
sComputer="\\"+sComputer
CompilerIf #PB_Compiler_Unicode
Ucomputer = sComputer
Uuser = sUsername
CompilerElse
Ucomputer = Space(512)
Uuser = Space(512)
MultiByteToWideChar_(#CP_ACP, #MB_PRECOMPOSED, @sComputer, -1, @Ucomputer, 512)
MultiByteToWideChar_(#CP_ACP, #MB_PRECOMPOSED, @sUsername, -1, @Uuser, 512)
CompilerEndIf
success = NetUserGetInfo_(Ucomputer, @Uuser, 3, @buff)
If success = #NERR_SUCCESS
*ui3=buff
If *ui3\Flags & #UF_ACCOUNTDISABLE <>#UF_ACCOUNTDISABLE
Debug "enabled"
;set disable value
*ui3\Flags = #UF_ACCOUNTDISABLE
Else
Debug "disabled"
;set enable value
*ui3\Flags = *ui3\Flags - #UF_ACCOUNTDISABLE
EndIf
buff=*ui3
success = NetUserSetInfo_(Ucomputer, @Uuser,3,buff,0)
NetApiBufferFree_(buff)
If success = #ERROR_SUCCESS
DisableAccount = #ERR_ACCOUNT_CHANGED
ProcedureReturn 1
Else
DisableAccount = #ERR_UPDATE_NOT_SUCCESSFUL
ProcedureReturn GetLastError_()
EndIf
Else
ProcedureReturn GetLastError_()
EndIf
EndProcedure
Debug ToggleAccount("computername","username")
;return code
;1 enable/disable successfully
;else error: GetLastError