判断当前运行权限是否是system

方法一:

BOOL CurrentUserIsLocalSystem()
{
BOOL bIsLocalSystem = FALSE;
PSID psidLocalSystem;
SID_IDENTIFIER_AUTHORITY ntAuthority = SECURITY_NT_AUTHORITY;

BOOL fSuccess = ::AllocateAndInitializeSid(&ntAuthority, 1, SECURITY_LOCAL_SYSTEM_RID,
0, 0, 0, 0, 0, 0, 0, &psidLocalSystem);
if (fSuccess)
{
fSuccess = ::CheckTokenMembership(0, psidLocalSystem, &bIsLocalSystem);
::FreeSid(psidLocalSystem);
}

return bIsLocalSystem;
}

 

方法二:

bool IsSystemPrivilegeImp()
{
static bool isSystemPrivilege = false;

if (isSystemPrivilege)
{
return isSystemPrivilege;
}

char szPath[MAX_PATH] = { 0 };

if (::SHGetSpecialFolderPathA(NULL, szPath, CSIDL_APPDATA, TRUE))
{
std::string flag("config\\systemprofile");
std::string path(szPath);
if (path.find(flag) != std::string::npos)
{
isSystemPrivilege = true;
}
}
return isSystemPrivilege;
}

 

转载于:https://www.cnblogs.com/idebug/p/11124664.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ProcessBuilder没有root权限,但是可以使用ProcessBuilder来启动一个具有root权限的进程。在Linux系统中,可以使用sudo命令来获取root权限,ProcessBuilder可以通过以下方式使用sudo命令来启动一个具有root权限的进程: ```java ProcessBuilder builder = new ProcessBuilder("sudo", "command"); ``` 这将使用sudo命令来运行指定的命令,并以root权限运行该命令。需要注意的是,运行sudo命令需要用户具有sudo权限,否则会提示需要输入密码或者无法获取root权限。 ### 回答2: 要判断ProcessBuilder是否具有root权限,可以通过以下步骤进行判断: 1. 首先,需要创建一个ProcessBuilder对象。这个对象用于启动一个新的进程。 2. 调用ProcessBuilder对象的command方法,并传入一个命令作为参数。例如,可以使用"whoami"命令,该命令用于获取当前用户的用户名。 3. 调用ProcessBuilder对象的start方法,启动一个新的进程,并获取该进程的输出流。 4. 使用Java的IO流读取该进程的输出流,并获取输出结果。 5. 如果输出结果是"root",则表示ProcessBuilder具有root权限;否则,表示ProcessBuilder没有root权限。 以下是一个示例代码: ``` import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class RootChecker { public static void main(String[] args) { boolean hasRootPermission = checkRootPermission(); System.out.println("ProcessBuilder has root permission: " + hasRootPermission); } public static boolean checkRootPermission() { ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command("whoami"); try { Process process = processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String output = reader.readLine(); if (output.equals("root")) { return true; } } catch (IOException e) { e.printStackTrace(); } return false; } } ``` 上述代码会执行"whoami"命令,并获取该命令的输出结果。如果输出结果是"root",则返回true,表示ProcessBuilder具有root权限;否则,返回false,表示ProcessBuilder没有root权限。 ### 回答3: 要判断ProcessBuilder是否具有root权限,可以采取以下方法: 1. 使用ProcessBuilder创建一个进程并执行一个需要root权限的命令,例如尝试执行一个需要root权限的系统命令如"sudo"。如果进程能够成功执行,说明ProcessBuilder具有root权限。可以通过捕获进程输出并检查其返回值来判断执行结果。 2. 使用ProcessBuilder的environment()方法获取当前进程的环境变量,并检查是否包含具有root权限的环境变量。通常,当进程以root权限运行时,其环境变量会包含一些特定的标记,比如"USER=root"或"SUDO_USER=root"。可以通过遍历进程的环境变量,查找是否有这样的标记来判断ProcessBuilder是否具有root权限。 3. 使用ProcessBuilder的command()方法获取要执行的命令,然后检查该命令是否需要root权限。可以通过判断命令的开头是否为"sudo"或"su"来确定是否需要root权限。如果需要root权限,可以认为ProcessBuilder具有root权限。 需要注意的是,这些方法只是对ProcessBuilder是否具有root权限的一种推测。要真正确定ProcessBuilder是否具有root权限,可能需要更加深入的系统调用和权限检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值