gpt4 book ai didi

c - 为什么此代码不能更改(降低)文件的完整性级别?

转载 作者:行者123 更新时间:2023-11-30 20:17:19 28 4
gpt4 key购买 nike

我已经编写了代码来更改对象(不是进程)(在本例中是文件)的完整性级别。据我们所知,我们从中等完整性级别开始,但我想将其降低到“低”。我想运行完整性较低的 .txt 文件而不是默认介质。

我使用 WINAPI 主要是为了这个目的。因此,我创建了一个 .txt 文件,将其完整性从中降低到低。

void SetLowLabelToFile()
{
int k = 0;
// The LABEL_SECURITY_INFORMATION SDDL SACL to be set for low integrity
#define LOW_INTEGRITY_SDDL_SACL_W L"S:(ML;;NW;;;LW)"
DWORD dwErr = ERROR_SUCCESS;
PSECURITY_DESCRIPTOR pSD = NULL;

PACL pSacl = NULL; // not allocated
BOOL fSaclPresent = FALSE;
BOOL fSaclDefaulted = FALSE;
LPCWSTR pwszFileName = L"C:\\Users\\Dan\\Documents\\testIntegrity\\hi1.txt";

if (ConvertStringSecurityDescriptorToSecurityDescriptorW(
LOW_INTEGRITY_SDDL_SACL_W, SDDL_REVISION_1, &pSD, NULL))
{
k = GetLastError();
if (GetSecurityDescriptorSacl(pSD, &fSaclPresent, &pSacl,
&fSaclDefaulted))
{
k = GetLastError();

// Note that psidOwner, psidGroup, and pDacl are
// all NULL and set the new LABEL_SECURITY_INFORMATION
dwErr = SetNamedSecurityInfoW((LPWSTR)pwszFileName,
SE_FILE_OBJECT, LABEL_SECURITY_INFORMATION,
NULL, NULL, NULL, pSacl);
k = GetLastError();

}
LocalFree(pSD);
}
}

我设置了 3 个 GetLastErrors 来获取错误代码,最后一个是 1008。这意味着尝试引用不存在的 token 。我没有得到它,因为文件的路径是有效的。有谁能帮忙解决一下这个问题吗?

最佳答案

数据文件没有完整性级别。进程具有完整性级别。

您无法“运行 .txt 文件”,您需要运行一个“应用程序”,然后加载 .txt 文件。 “应用程序”必须以低完整性级别运行,而不是 .txt 文件本身。

从代码启动低完整性进程的正确方法是:

  • 让您的代码使用 OpenProcessToken()DuplicateTokenEx() 复制其当前进程句柄。

  • 使用 SetTokenInformation() 将该访问 token 中的完整性级别设置为“低”。

  • 使用 CreateProcessAsUser() 使用该低完整性访问 token 创建新进程。

MSDN 上有一个这样的示例(C# 语言):

Create low-integrity process in C# (CSCreateLowIntegrityProcess)

关于c - 为什么此代码不能更改(降低)文件的完整性级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141684/

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