鱼C论坛

 找回密码
 立即注册
查看: 430|回复: 2

[已解决]AdjustTokenPrivileges

[复制链接]
发表于 2023-5-26 19:20:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
AdjustTokenPrivileges     第 6 个参数表示接收返回上一个特权数据缓冲区应该有的大小

我的问题:我如何获得  上一个特权数据缓冲区的大小   ??
最佳答案
2023-5-26 21:43:16
lm68140318 发表于 2023-5-26 19:22
第五个 参数  如何  书写  ?

AdjustTokenPrivileges 是Windows操作系统API的一部分,该API允许程序修改访问令牌的特权。你所提到的第六个参数和第五个参数是 AdjustTokenPrivileges 函数的一部分。

在调用 AdjustTokenPrivileges 函数时,其函数定义如下:
BOOL AdjustTokenPrivileges(
  HANDLE               TokenHandle,
  BOOL                 DisableAllPrivileges,
  PTOKEN_PRIVILEGES    NewState,
  DWORD                BufferLength,
  PTOKEN_PRIVILEGES    PreviousState,
  PDWORD               ReturnLength
);
其中:

·  TokenHandle :打开的访问令牌的句柄,该访问令牌包含要修改的特权。
·  DisableAllPrivileges :禁用所有特权的标志。
·  NewState :要应用的新特权状态。
·  BufferLength : PreviousState 缓冲区的大小(以字节为单位)。
·  PreviousState :可选指针,如果不为NULL,则在 PreviousState 中返回调整之前的特权信息。
·  ReturnLength :指向变量的指针,该变量接收 PreviousState 缓冲区应有的大小(以字节为单位)。

你提到的第六个参数是 ReturnLength ,它是一个指针,指向一个DWORD,用于接收 PreviousState 缓冲区应有的大小。函数将返回的数据大小写入这个位置。你不需要预先知道这个大小,只需要在调用之后检查这个变量的值即可。

你提到的第五个参数 PreviousState 是一个可选参数,用于接收调整之前的特权信息。这个参数应该是一个指向 TOKEN_PRIVILEGES 结构的指针。如果你想获得旧的特权状态,你需要为这个结构分配内存,并把指针传给这个参数。如果你不关心旧的状态,你可以把这个参数设置为NULL。

这是一个示例代码:
DWORD returnLength;
TOKEN_PRIVILEGES previousState;

BOOL result = AdjustTokenPrivileges(tokenHandle, FALSE, &newState, sizeof(TOKEN_PRIVILEGES), &previousState, &returnLength);
if (!result)
{
    printf("Failed to adjust privileges. Error: %u\n", GetLastError());
    return;
}

printf("Size of previous state: %u\n", returnLength);

这里,我们创建了一个 TOKEN_PRIVILEGES 结构的变量 previousState ,并把它的地址和大小传递给 AdjustTokenPrivileges 函数。在函数返回后,我们可以检查 returnLength 变量的值,以确定返回的数据的大小。

注意,这只是一个示例。在实际代码中,你可能需要根据你的需要调整。例如,如果你不关心旧的特权状态,你可以把第五个和第六个参数都设置为NULL。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-26 19:22:46 | 显示全部楼层
第五个 参数  如何  书写  ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-26 21:43:16 | 显示全部楼层    本楼为最佳答案   
lm68140318 发表于 2023-5-26 19:22
第五个 参数  如何  书写  ?

AdjustTokenPrivileges 是Windows操作系统API的一部分,该API允许程序修改访问令牌的特权。你所提到的第六个参数和第五个参数是 AdjustTokenPrivileges 函数的一部分。

在调用 AdjustTokenPrivileges 函数时,其函数定义如下:
BOOL AdjustTokenPrivileges(
  HANDLE               TokenHandle,
  BOOL                 DisableAllPrivileges,
  PTOKEN_PRIVILEGES    NewState,
  DWORD                BufferLength,
  PTOKEN_PRIVILEGES    PreviousState,
  PDWORD               ReturnLength
);
其中:

·  TokenHandle :打开的访问令牌的句柄,该访问令牌包含要修改的特权。
·  DisableAllPrivileges :禁用所有特权的标志。
·  NewState :要应用的新特权状态。
·  BufferLength : PreviousState 缓冲区的大小(以字节为单位)。
·  PreviousState :可选指针,如果不为NULL,则在 PreviousState 中返回调整之前的特权信息。
·  ReturnLength :指向变量的指针,该变量接收 PreviousState 缓冲区应有的大小(以字节为单位)。

你提到的第六个参数是 ReturnLength ,它是一个指针,指向一个DWORD,用于接收 PreviousState 缓冲区应有的大小。函数将返回的数据大小写入这个位置。你不需要预先知道这个大小,只需要在调用之后检查这个变量的值即可。

你提到的第五个参数 PreviousState 是一个可选参数,用于接收调整之前的特权信息。这个参数应该是一个指向 TOKEN_PRIVILEGES 结构的指针。如果你想获得旧的特权状态,你需要为这个结构分配内存,并把指针传给这个参数。如果你不关心旧的状态,你可以把这个参数设置为NULL。

这是一个示例代码:
DWORD returnLength;
TOKEN_PRIVILEGES previousState;

BOOL result = AdjustTokenPrivileges(tokenHandle, FALSE, &newState, sizeof(TOKEN_PRIVILEGES), &previousState, &returnLength);
if (!result)
{
    printf("Failed to adjust privileges. Error: %u\n", GetLastError());
    return;
}

printf("Size of previous state: %u\n", returnLength);

这里,我们创建了一个 TOKEN_PRIVILEGES 结构的变量 previousState ,并把它的地址和大小传递给 AdjustTokenPrivileges 函数。在函数返回后,我们可以检查 returnLength 变量的值,以确定返回的数据的大小。

注意,这只是一个示例。在实际代码中,你可能需要根据你的需要调整。例如,如果你不关心旧的特权状态,你可以把第五个和第六个参数都设置为NULL。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 23:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表