Как следует из названия, я ищу ответ на свой вопрос. Я попытался написать код, который достигает того, о чем я прошу, в соответствии с официальной документацией Microsoft по этой структуре: https://learn.microsoft.com/en-us/windo ... descriptor
У меня есть файл заголовка с классом, одним частным членом (объект SECURITY_DESCRIPTOR), затем двумя общедоступными методами, один для установки членов структуры частных членов и один для возврата копия объекта.
Все выглядит нормально, пока я не вызываю GetLastError(), который возвращает код ошибки 1337, указывающий, что «структура идентификатора безопасности недействительна», что означает, что я, вероятно, неправильно использую AllocateAndInitializeSid.
Я приложу код ниже.
#pragma once
class init
{
private:
SECURITY_DESCRIPTOR secObjInfo{}; // contains info such as, owner, group, Sacl, Dacl, control. (Important)
public:
void setSecurityDescriptor()
{
// SID structure stuff
SID_IDENTIFIER_AUTHORITY sia
{
SECURITY_NT_AUTHORITY
};
PSID si = nullptr; // this security identification object determines what level of authority we have.
BOOL sid = AllocateAndInitializeSid( // function to initialize our
&sia,
1,
SECURITY_WORLD_RID,
0,
0,
0,
0,
0,
0,
0,
&si
);
// end
// set control for (SECURITY_DESCRIPTOR)
DWORD setControl = SetSecurityDescriptorRMControl(
&secObjInfo,
NULL
);
// end
// set revision level and give default initialization to mostly everything else in the struct (SECURITY_DESCRIPTOR).
BOOL setRevision = InitializeSecurityDescriptor(
&secObjInfo,
SECURITY_DESCRIPTOR_REVISION
);
// end
// set owner of SECURITY_DESCRIPTOR
BOOL secDesOwner = SetSecurityDescriptorOwner(
&secObjInfo,
&si,
1
);
// end
// set group for SECURITY_DESCRIPTOR
BOOL secDesGroup = SetSecurityDescriptorGroup(
&secObjInfo,
&si,
1
);
// end
}
SECURITY_DESCRIPTOR getSecurityDescriptor()
{
return secObjInfo;
}
};
/*
issues
~ security descriptor is being initialized incorrectly (error code 1338)
~ messy code.
*/ );
// end
// set group for SECURITY_DESCRIPTOR
BOOL secDesGroup = SetSecurityDescriptorGroup(
&secObjInfo,
&si,
1
);
// end
}
SECURITY_DESCRIPTOR getSecurityDescriptor()
{
return secObjInfo;
}
};
/*
issues
~ security descriptor is being initialized incorrectly (error code 1338)
~ messy code.
*/
Подробнее здесь: https://stackoverflow.com/questions/798 ... descriptor