Note:访问令牌说简单了就是个访问权限的数据集合,令牌中包含用户所有的权限,校验令牌可以识别用户是否有权限访问他要访问的位置
LookupPrivilegeValue
函数查看系统权限的特权值,返回信息到一个LUID结构体里。
AdjustTokenPrivileges 函数启用或禁止 指定访问令牌的特权。
启用或禁用特权一个有TOKEN_ADJUST_PRIVILEGES访问的访问令牌.
BOOL AdjustTokenPrivileges(
HANDLE
TokenHandle
, //包含特权的句柄
BOOL
DisableAllPrivileges
,
//禁用所有权限标志
PTOKEN_PRIVILEGES
NewState
,
//新特权信息的指针(结构体)
DWORD
BufferLength
, //大小,以字节为单位的PreviousState的缓存区(sizeof)
PTOKEN_PRIVILEGES
PreviousState
,
//接收被改变特权当前状态的Buffer
PDWORD
ReturnLength//接收PreviousState缓存区要求的大小
);
参数
TokenHandle
包含要修改特权的访问令牌的标识(句柄).这个句柄必须有TOKEN_ADJUST_PRIVILEGES访问令牌.如果PreviousState不是NULL,这个句柄还必须有TOKEN_QUERY访问特权.
DisableAllPrivileges
标志这个函数是否禁用该令牌的所有特权.如果为TRUE,这个函数禁用所有特权,NewState参数无效.如果为假,以NewState参数指针的信息为基础来修改特权.
NewState
一个
TOKEN_PRIVILEGES结构体的指针指定了一组特权和他们的属性.
如果参数DisableAllPrivileges为FALSE,
AdjustTokenPrivileges启用或禁用这些令牌的特权.
如果你给一个特权设置了SE_PRIVILEGE_ENABLED的属性,这个函数将启动特权,否则禁用特权.
如果DisableAllPrivileges为TRUE,这个参数无效.
BufferLength
标志参数PreviousState指针以字节大小缓存区(sizeof).
如果参数PreviousState是NULL,这个参数可以为NULL.
PreviousState
这个函数填充一个TOKEN_PRIVILEGES结构体【指针】,它包括该函数修改之前任何特权状态.这个参数可以为NULL.
如果指定的缓冲区太小,无法收到完整的修改权限列表,这个函数失败并不会修改任何特权.
这个函数设置了一个 拥有修改权限完成列表【 参数ReturnLength 】的字节数 的指针变量.[结果的Buffer]
ReturnLength
接收 参数PreviousState的缓存区指针的 字节大小 的 变量指针(长度指针).
如果PreviousState为NULL,这个参数可以为NULL.
返回值
如果这个函数成功,返回非0.为了确定这个函数是否修改了所有指定的特权,可以调用
GetLastError函数,当这个函数返回下面的值之一时就代表函数成功: