Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Re: Checking user privileges
Message
From
12/09/2018 11:31:20
 
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Miscellaneous
Thread ID:
01661979
Message ID:
01661980
Views:
87
>Hi there,
>
>I am using the api-function "IsUserAnAdmin" to check if an user is logged in as an admin. Works fine with Win7 but seems to fail wiith Win10. Does anyone can tell me why?
>
>Best regards
>
>Thomas

I just tried Anatoliy Mogylevets's code sample "Finding out if the current user is the Guest account" from https://github.com/VFPX/Win32API/blob/master/samples/sample_566.md, and it works fine on my machine.
LOCAL oUser As CurrentUser
oUser = CREATEOBJECT("CurrentUser")
WITH oUser
	? .GetUserName()
	? .IsUserAdmin()
	? .IsUserGuest()
ENDWITH
* end of main

DEFINE CLASS CurrentUser As Session
#DEFINE USER_PRIV_GUEST 0
#DEFINE USER_PRIV_USER 1
#DEFINE USER_PRIV_ADMIN 2

	PROTECTED UserName, UserPrivLevel
	UserName=""
	UserPrivLevel=0

PROCEDURE Init
	THIS.declare
	THIS.GetUserInfo

FUNCTION IsUserAdmin() As Boolean
RETURN (BITAND(THIS.UserPrivLevel,;
	USER_PRIV_ADMIN) <> 0)

FUNCTION IsUserGuest() As Boolean
RETURN (BITAND(THIS.UserPrivLevel,;
	USER_PRIV_GUEST) <> 0)

FUNCTION GetUserName() As String
RETURN THIS.UserName

PROCEDURE GetUserInfo
	LOCAL nUserInfo, nBufSize, cUserInfo
	STORE 0 TO nUserInfo, nBufSize

	WITH THIS
		.UserName=.GetCurrentUserName()

		* USER_INFO_1
		= NetUserGetInfo(NULL, .ToUnicode(.UserName),;
			1, @nUserInfo)
		
		NetApiBufferSize(nUserInfo, @nBufSize)

		cUserInfo = REPLICATE(CHR(0), nBufSize)
		MemToStr(@cUserInfo, nUserInfo, nBufSize)

		* 13=offset to usri1_priv member; 4=DWORD
		.UserPrivLevel = .buf2dword(;
			SUBSTR(m.cUserInfo, 13, 4))
	ENDWITH

PROTECTED FUNCTION GetCurrentUserName() As String
* just an example; parsing SYS(0) would suffice
	LOCAL nBufSize, cUserName
	nBufSize=0
	= GetUserName(NULL, @nBufSize)
	cUserName = REPLICATE(CHR(0), nBufSize)
	= GetUserName(@cUserName, @nBufSize)
RETURN STRTRAN(cUserName, CHR(0), "")

PROTECTED PROCEDURE declare

	DECLARE INTEGER NetUserGetInfo IN netapi32;
		STRING servername, STRING username,;
		INTEGER lvl, INTEGER @bufptr

	DECLARE INTEGER GetUserName IN advapi32;
		STRING @lpBuffer, INTEGER @nSize

	DECLARE INTEGER NetApiBufferFree IN netapi32;
		INTEGER Buffer

	DECLARE INTEGER NetApiBufferSize IN netapi32;
		INTEGER Buffer, INTEGER @ByteCount

	DECLARE RtlMoveMemory IN kernel32 As MemToStr;
		STRING @dst, INTEGER src, INTEGER nLen

PROTECTED FUNCTION ToUnicode(cStr As String) As String
RETURN STRCONV(m.cStr, 5)

PROTECTED FUNCTION buf2dword(cBuffer)
RETURN Asc(SUBSTR(cBuffer, 1,1)) + ;
	BitLShift(Asc(SUBSTR(cBuffer, 2,1)),  8) +;
	BitLShift(Asc(SUBSTR(cBuffer, 3,1)), 16) +;
	BitLShift(Asc(SUBSTR(cBuffer, 4,1)), 24)

ENDDEFINE
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform