WindowsApi/Win32/Advapi32/Advapi32Extension.cs
(开头部分) 4KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace Utils.WindowsApi
{
public class Advapi32Extension : Advapi32Base
{
/// <summary>
/// 授予权限
/// 参数取值为文件PrivilegeAPI中的类PrivilegeConstants中的字段
/// </summary>
/// <param name="privilegeName">PrivilegeConstants类中的字段</param>
/// <returns></returns>
public static bool GrantPrivilege(string privilegeName)
{
try
{
LUID locallyUniqueIdentifier = new LUID();
if (LookupPrivilegeValue(null, privilegeName, ref locallyUniqueIdentifier))
{
TOKEN_PRIVILEGES tokenPrivileges = new TOKEN_PRIVILEGES();
tokenPrivileges.PrivilegeCount = 1;
LUID_AND_ATTRIBUTES luidAndAtt = new LUID_AND_ATTRIBUTES();
// luidAndAtt.Attributes should be SE_PRIVILEGE_ENABLED to enable privilege
luidAndAtt.Attributes = SE_PRIVILEGE_ENABLED;
luidAndAtt.Luid = locallyUniqueIdentifier;
tokenPrivileges.Privilege = luidAndAtt;
IntPtr tokenHandle = IntPtr.Zero;
try
{
if (OpenProcessToken(Kernel32Base.GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, out tokenHandle))
{
if (AdjustTokenPrivileges(tokenHandle, false, ref tokenPrivileges, 1024, IntPtr.Zero, 0))
{
// 当前用户没有关联该权限
// 需要在windows系统(本地安全策略——本地策略——用户权限分配)中设置为该权限添加当前用户
if (Marshal.GetLastWin32Error() != ERROR_NOT_ALL_ASSIGNED)
{
return true;
}
}
}
}
finally
{
if (tokenHandle != IntPtr.Zero)
{
Kernel32Base.CloseHandle(tokenHandle);
}
}
}
return false;
}
后面还有 62 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。