NetUserGetInfo_ API call, strange return value

Just starting out? Need help? Post your questions and find answers here.
User avatar
Rings
Moderator
Moderator
Posts: 1435
Joined: Sat Apr 26, 2003 1:11 am

Post by Rings »

This example is not completed, but works in its way.
For More info about the USER_INFO_x structures, see WinApi.HLP oder SDK.
it does the job for me :)

Code: Select all

Enumeration 
#USER_PRIV_GUEST 
#USER_PRIV_USER 
#USER_PRIV_ADMIN 
EndEnumeration 

*ui3.USER_INFO_3 
usr.s = Space(256) 
nsize = Len(usr.s)
GetUserName_(@usr.s, @nsize) 
usrW.s = Space(512) 
Result=MultiByteToWideChar_(#CP_ACP, #MB_PRECOMPOSED, @usr.s, -1, @usrW.s, 512) 
lpBuf.l=0
res.l = NetUserGetInfo_(0, @usrW.s, 3, @lpBuf) 
If res = 0 And lpBuf<>0 ;#nerr_success 
 *ui3=lpBuf
 If *ui3\uName<>0 
  Buffer.s=Space(512)
  Result=WideCharToMultiByte_(#CP_ACP ,0,*ui3\uName,255,@Buffer.s,512,0,0)
  Debug Buffer.s
 EndIf
 
 Debug *ui3\privilege 
  ;If (ui3\privilege = #USER_PRIV_ADMIN) 
 Debug *ui3\LastLogon
 If *ui3\HomeDir<>0 
  Buffer.s=Space(512)
  Result=WideCharToMultiByte_(#CP_ACP ,0,*ui3\HomeDir,255,@Buffer.s,512,0,0)
  Debug Buffer.s
 EndIf
 If *ui3\HomeDirDrive<>0 
  Buffer.s=Space(512)
  Result=WideCharToMultiByte_(#CP_ACP ,0,*ui3\HomeDirDrive,255,@Buffer.s,512,0,0)
  Debug Buffer.s
 EndIf
 If *ui3\FullName<>0
  Buffer.s=Space(512)
  Result=WideCharToMultiByte_(#CP_ACP ,0,*ui3\FullName,255,@Buffer.s,512,0,0)
  Debug Buffer.s
 EndIf
 If *ui3\UserComment<>0
  Buffer.s=Space(512)
  Result=WideCharToMultiByte_(#CP_ACP ,0,*ui3\UserComment,255,@Buffer.s,512,0,0)
  Debug Buffer.s
 EndIf

 Debug *ui3\PasswordAge
 Debug *ui3\CodePage
 Debug *ui3\LogonHours
 
 NetApiBufferFree_(lpBuf) 
EndIf 
SPAMINATOR NR.1
Anden
Enthusiast
Enthusiast
Posts: 135
Joined: Mon Jul 21, 2003 7:23 am
Contact:

Post by Anden »

Thanks for directing me in the right lane, Rings.

Somehow managed to "ignore" the * in the API reference for the *bufptr :-)

NET_API_STATUS NetUserGetInfo(
LPWSTR servername,
LPWSTR username,
DWORD level,
LPBYTE *bufptr
);

Anyway, here's the "easy" IsAdmin() procedure:

Code: Select all

#NERR_SUCCESS = 0
#USER_PRIV_ADMIN = 2

Procedure IsAdmin()
  Result.l = #False
  ui3.USER_INFO_3
  usr$ = Space(256)
  nsize = Len(usr$)
  GetUserName_(@usr$, @nsize)
  usrW$ = Space(512)
  MultiByteToWideChar_(#CP_ACP, #MB_PRECOMPOSED, @usr$, -1, @usrW$, Len(usrW$))
  If (NetUserGetInfo_(#NULL, @usrW$, 3, @lpBuf.l) = #NERR_SUCCESS)
    CopyMemory(lpBuf, @ui3, SizeOf(ui3))
    If (ui3\privilege = #USER_PRIV_ADMIN) : Result = #True : EndIf
    NetApiBufferFree_(lpBuf)
  EndIf
  ProcedureReturn Result
EndProcedure

Post Reply