在这篇伟大的MSDN文章的帮助下,我的第一个想法是简单地检查进程是否使用提升的Administrator组,并使用AdjustTokenGroups()
我将Administrator组设置为SE_GROUP_USE_FOR_DENY_ONLY
.不幸的是,我们无法修改当前正在运行的进程的管理员组,因为它还具有该SE_GROUP_MANDATORY
属性,这使得它无法进行更改.
MSDN文档有这样的说法:
该AdjustTokenGroups
函数无法禁用具有结构中SE_GROUP_MANDATORY
属性的组TOKEN_GROUPS
.请CreateRestrictedToken
改用.
所以,我完成了以下代码来实现这一目标;
bool _IsNewProcessLaunched()
{
HANDLE hToken = NULL;
bool hasRestarted = false;
if (!OpenProcessToken( GetCurrentProcess(),
TOKEN_ASSIGN_PRIMARY | TOKEN_QUERY | TOKEN_DUPLICATE | TOKEN_ADJUST_GROUPS,
&hToken ))
{
return hasRestarted;
}
PSECURITY_DESCRIPTOR pSID = NULL;
SID_IDENTIFIER_AUTHORITY SIDAuth = SECURITY_NT_AUTHORITY;
if(! AllocateAndInitializeSid( &SIDAuth, 2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&pSID) )
{
CloseHandle(hToken);
hToken = NULL;
return hasRestarted;
}
BOOL isAdmin = …
Run Code Online (Sandbox Code Playgroud) winapi uac privilege-elevation access-token elevated-privileges
我在GTX690上使用opencv GPU :: matchTemplate().
我在内部检查了函数,发现gpu :: matchTemplate()在这个过程中没有使用任何FFT,而它的CPU对应物却没有.
我的问题是,在GPU中不使用FFT的原因是什么?