lm68140318 发表于 2023-5-26 19:20:34

AdjustTokenPrivileges

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

我的问题:我如何获得上一个特权数据缓冲区的大小   ??

lm68140318 发表于 2023-5-26 19:22:46

第五个 参数如何书写?

isdkz 发表于 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。
页: [1]
查看完整版本: AdjustTokenPrivileges