gpt4 book ai didi

c++ - 试图了解进程特权属性

转载 作者:可可西里 更新时间:2023-11-01 09:20:03 25 4
gpt4 key购买 nike

我正在编写一个可以收集进程权限的日志记录服务,并且我正在尝试了解每个进程权限的属性。让我用这段代码解释一下:

HANDLE hToken;
if(OpenProcessToken(::GetCurrentProcess(), TOKEN_QUERY, &hToken))
{
DWORD dwSize = 0;
if(!GetTokenInformation(hToken, TokenPrivileges, NULL, dwSize, &dwSize) &&
::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
BYTE* pb = new (std::nothrow) BYTE[dwSize];
if(pb)
{
TOKEN_PRIVILEGES* pTPs = (TOKEN_PRIVILEGES*)pb;
DWORD dwSize2;
if(GetTokenInformation(hToken, TokenPrivileges, pTPs, dwSize, &dwSize2) &&
dwSize2 <= dwSize)
{
for(UINT i = 0; i < pTPs->PrivilegeCount; i++)
{
//Analyze privilege attributes to understand if it's enabled or disabled?
DWORD dwPrivAttr = pTPs->Privileges[i].Attributes;

//...
}
}

delete[] pb;
}
}

CloseHandle(hToken);
}

那么让我们看看TOKEN_PRIVILEGES的结构尤其是 LUID_AND_ATTRIBUTES:

#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
#define SE_PRIVILEGE_ENABLED (0x00000002L)
#define SE_PRIVILEGE_REMOVED (0X00000004L)
#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)

它看起来像是被定义为位掩码,但这会带来以下解释这些标志的问题:

  1. ENABLEDENABLED_BY_DEFAULT 有什么区别?

  2. 什么是 SE_PRIVILEGE_USED_FOR_ACCESS 以及如何使用它?

  3. 如果同时设置了 SE_PRIVILEGE_ENABLEDSE_PRIVILEGE_REMOVED 会怎样?或者,重置?

  4. 我刚刚运行了一个简单的测试,对于我的进程,SeShutdownPrivilege 权限将这些属性设置为 0。那么这是什么意思呢?

我对这个结构比较困惑,但我现在只保留这些点。

谢谢!

最佳答案

按顺序回答您的问题:

  1. ENABLED_BY_DEFAULT 表示该权限是进程启动时启用的权限之一。如果您有 ENABLED 但没有 ENABLED_BY_DEFAULT 那么该进程已明确启用该权限。如果您有 ENABLED_BY_DEFAULT 但没有 ENABLED,则该进程已明确禁用该权限。

  2. 根据文档,只要实际使用特权,就会设置 SE_PRIVILEGE_USED_FOR_ACCESS。您可以使用它来进行故障排除,例如,检测您正在设置您实际上没有使用的特权,或者通过实验确定特定系统调用需要哪些特权。 (我从来没有检查过这是否真的像记录的那样运行,尽管我没有理由不这么认为。)

  3. 如果同时设置了 SE_PRIVILEGE_ENABLEDSE_PRIVILEGE_REMOVED,则您发现了 Windows 中的错误。 :-)

    如果 SE_PRIVILEGE_ENABLEDSE_PRIVILEGE_REMOVED 均未设置,则权限存在于 token 中,尚未被删除,但当前未启用。您可以使用 AdjustTokenPrivileges() 启用它(或删除它) .

  4. 如果该属性为零,则权限存在于 token 中,但当前未启用、未被删除、默认情况下未启用且进程从未使用过。

关于c++ - 试图了解进程特权属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29453204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com