كشف امتيازات التصحيح على عملية (ويندوز، C)
-
06-07-2019 - |
سؤال
السؤال السابق سألت كيفية التغلب حقيقة أن في بعض المستخدمين كانت امتيازات التصحيح لم يكن هناك. الآن، لأنني لا يمكن أن يحدد شيء لا وجود له، كيف لي أن تحقق ما إذا كان المستخدم لديه امتيازات التصحيح؟
وأنا أعرف أن لدي لاستخدام LookupPrivilegeValue ()، أنا فقط لا يمكن معرفة إلى أين قرأت على القيمة التي تم إرجاعها التي من شأنها أن تشير إلى ما إذا كان امتياز معين هناك أم لا.
ويحظى بتقدير القانون.
والشكر
المحلول
http://msdn.microsoft. كوم / EN-US / مكتبة / aa446619٪ 28VS.85٪ 29.aspx
BOOL SetPrivilege(
HANDLE hToken, // access token handle
LPCTSTR lpszPrivilege, // name of privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid;
if ( !LookupPrivilegeValue(
NULL, // lookup privilege on local system
lpszPrivilege, // privilege to lookup
&luid ) ) // receives LUID of privilege
{
printf("LookupPrivilegeValue error: %u\n", GetLastError() );
return FALSE;
}
tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0;
// Enable the privilege or disable all privileges.
if ( !AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
(PTOKEN_PRIVILEGES) NULL,
(PDWORD) NULL) )
{
printf("AdjustTokenPrivileges error: %u\n", GetLastError() );
return FALSE;
}
if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
printf("The token does not have the specified privilege. \n");
return FALSE;
}
return TRUE;
}
وإذا ترجع الدالة ERROR_NOT_ALL_ASSIGNED عند طلب تعيين امتيازات التصحيح ثم الرمز المميز ليست هناك.
لا تنتمي إلى StackOverflow