Я написал код для изменения уровня целостности объекта (не процесса) (в данном случае файла).Как мы знаем, мы начинаем со среднего целочисленного уровня, но я хочу понизить его до «низкого».Я хочу запустить файл .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. Это означает, что An attempt was made to reference a token that does not exist
.Я не получил его, потому что путь к файлу действителен.Может ли кто-нибудь помочь решить проблему?