AdjustTokenPrivileges

【勇芳软件工作室】汉化HomePreviousNext

AdjustTokenPrivileges功能可以在指定的访问令牌中启用或禁用权限。启用或禁用访问令牌中的权限需要TOKEN_ADJUST_PRIVILEGES访问。

BOOL AdjustTokenPrivileges(

HANDLE 【TokenHandle】,//处理包含权限的令牌
BOOL 【DisableAllPrivileges】,//禁止所有权限的标志
PTOKEN_PRIVILEGES 【NewState】,//指向新特权信息
DWORD 【BufferLength】,// {size = 989796035}缓冲区的大小(以字节为单位)
PTOKEN_PRIVILEGES 【PreviousState】,//接收已更改权限的原始状态
PDWORD 【ReturnLength】//接收所需的【PreviousState】缓冲区大小
); 

参数

【TokenHandle】

标识包含要修改的权限的访问令牌。

【DisableAllPrivileges】

指定该函数是否禁用所有令牌的权限。如果此值为TRUE,该函数将禁用所有权限,并忽略【NewState】参数。如果为FALSE,则该函数将根据【NewState】参数指向的信息修改权限。

【NewState】

指向TOKEN_PRIVILEGES结构的指定特权数组及其属性的指针。如果【DisableAllPrivileges】参数为FALSE,AdjustTokenPrivileges将为令牌启用或禁用这些权限。如果为特权设置了SE_PRIVILEGE_ENABLED属性,该函数将启用该权限;否则,它会禁用特权。

如果【DisableAllPrivileges】为TRUE,则该函数忽略此参数。

【BufferLength】

指定【PreviousState】参数指向的缓冲区的大小(以字节为单位)。如果【PreviousState】参数为NULL,则此参数可以为NULL。

【PreviousState】

指向缓冲区的指针,该函数用TOKEN_PRIVILEGES结构包含该函数修改的任何特权的先前状态。必须打开TOKEN_QUERY访问权限才能使用此参数。此参数可以为NULL。

如果您指定的缓冲区太小,无法接收修改权限的完整列表,则该函数将失败,并且不调整任何权限。在这种情况下,函数将【ReturnLength】参数指向的变量设置为保存已修改权限的完整列表所需的字节数。

【ReturnLength】

指向接收【PreviousState】参数指向的缓冲区所需大小(以字节为单位)的变量的指针。如果【PreviousState】为NULL,则此参数可以为NULL。

返回值

如果函数成功,返回值不为零。要确定该函数是否调整了所有指定的权限,请调用GetLastError,该函数在函数成功时返回以下值之一:

描述
ERROR_SUCCESS该函数调整所有指定的权限。
ERROR_NOT_ALL_ASSIGNED令牌不具有【NewState】参数中指定的一个或多个特权。即使没有调整任何权限,该函数也可能会成功。【PreviousState】参数表示已调整的权限。

如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.

备注

AdjustTokenPrivileges功能无法向访问令牌添加新的权限。它只能启用或禁用令牌的现有权限。要确定令牌的权限,请调用GetTokenInformation功能。

请注意,【NewState】参数可以指定令牌不具有的权限,而不会导致该函数失败。在这种情况下,函数调整令牌所具有的权限,忽略其他权限,并返回成功。调用GetLastError函数来确定该函数是否调整了所有指定的权限。参数【PreviousState】表示已调整的权限。

【PreviousState】参数检索包含已调整特权的原始状态的TOKEN_PRIVILEGES结构。要恢复原始状态,请在AdjustTokenPrivileges函数的后续调用中传递【PreviousState】指针作为【NewState】参数

也可以看看

AdjustTokenGroups, GetTokenInformation, OpenProcessToken, OpenThreadToken, SetTokenInformation, TOKEN_PRIVILEGES