windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue
来源:互联网 发布:淘宝aj旗舰店是正品吗 编辑:程序博客网 时间:2024/05/14 11:45
这三个函数主要用来提升进程的权限
1 OpenProcessToken()函数:获取进程的令牌句柄
OpenProcessToken的原型.
BOOL WINAPI OpenProcessToken(
__in HANDLE ProcessHandle,
__in DWORD DesiredAccess,
__out PHANDLE TokenHandle
);
第一个参数 进程句柄(当前进程为GetCurrentProcess()为参数)
第二个参数 访问令牌特权(可以参考msdnhttps://msdn.microsoft.com/zh-cn/library/aa374905)
第三个参数 令牌句柄 返回的参数 就是AdjustTokenPrivileges的第一个参数
2LookupPrivilegeValue()函数:
在认识这个函数之前我们需要了解一下结构体
TOKEN_PRIVILEGES结构体
typedef struct _TOKEN_PRIVILEGES
{
DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
}TOKEN_PRIVILEGES;
第一个参数是个特权数组。
第二个参数是要修改的特权数目
LUID_AND_ATTRIBUTES 结构体
typedef struct _LUID_AND_ATTRIBUTES
{
LUID Luid;
DWORD Attributes;
} LUID_AND_ATTRIBUTES;
LookupPrivilegeValue的原型
BOOL WINAPI LookupPrivilegeValue(
__in_opt LPCTSTR lpSystemName,
__in LPCTSTR lpName,
__out PLUID lpLuid
);
第一个参数是系统的名字,如果为NULL,就是本地名字(这里就填NULL)
第二个参数是特权的名字,要查看详细特权,在这里写SE_DEBUG_NAME
第三个参数就可以通过指针返回一个LUID类型的Luid的标识了。 通过这个值就可以填入刚才的结构体里了。
3 AdjustTokenPrivileges()函数
BOOL WINAPI AdjustTokenPrivileges(
__in HANDLE TokenHandle,
__in BOOL DisableAllPrivileges,
__in_opt PTOKEN_PRIVILEGES NewState,
__in DWORD BufferLength,
__out_opt PTOKEN_PRIVILEGES PreviousState,
__out_opt PDWORD ReturnLength
);
第一个参数为OpenProcessToken第三个指针参数传出的句柄值
第二个参数为是否禁用所有所有的特权(这里填false)
第三个参数为新的TOKEN_PRIVILEGES的特权结构体指针
第四个参数是上面结构体的字节长度(sizeof)
第五个参数是 接受原先的特权的结构体
第六个参数也是这个结构体的字节长度的指针
最后要记得调用CloseHandle()函数
我们可以将上述函数组合为一个方法
void EenableDebugPriv(){ HANDLE hToken; TOKEN_PRIVILEGES tkp; OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, &hToken); LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0); CloseHandle( hToken );}
这样就可以修改相关进程的权限了
- windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue
- GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges
- GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges
- GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges
- [转载]GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges
- 【转载】[转载]GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、AdjustTokenPrivileges
- GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue、Adj...
- GetCurrentProcessID、OpenProcessToken、LookupPrivilegeValue
- LookupPrivilegeValue
- LookupPrivilegeValue
- WindowsAPI之GetFileVersionInfo函数和VerQueryValue函数
- WindowsAPI之RegOpenKey和RegSetValueEx函数
- 解析SMBIOS信息之WindowsAPI和WMIC
- AdjustTokenPrivileges
- AdjustTokenPrivileges
- AdjustTokenPrivileges
- GetCurrentProcessID 得到当前进程的ID OpenProcessToken 得到进程的令牌句柄 LookupPrivilegeValue 查询进程的权限
- windowsAPI之键盘输入
- android SDK 无法更新的问题
- windows下使用vfw方式生成AVI视频的实现
- ios开发之 Xib设置圆角
- 很让人受教的 提高php代码质量36计
- Android TouchEvent之requestDisallowInterceptTouchEvent
- windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue
- HDU 2766
- QML基础——在C++程序中使用QML
- setTimeout传参数问题
- 百度地图API功能给多个点添加信息窗口
- zzuli OJ 1045: 数值统计
- 8月28日 XE8移动开发入门(三)XE8在Android应用中调用Java类, 使用LiveBindings(免费培训)
- 调试lib
- 2015应该学习的前端语言与框架