这个函数中的各个参数代表着什么意思?
和它关联的这几个函数的起什么作用呢?
OpenProcessToken(),LookupPrivilegevalue(),
我在看一些例子的时候,有一个这样的类:
TTokanPrivileges. 当定义一个变量:Privileges:TTokenPrivileges;时
Privileges.PrivilegeCount其中PrivilegeCount这个字段是什么意思呢?
我在看MSDN的时候,因为全是英文,有些意思不太清楚,还请各位高手大侠指点!谢谢!

解决方案 »

  1.   

    BOOL AdjustTokenPrivileges(
         HANDLE TokenHandle,              // handle to token
         BOOL DisableAllPrivileges,       // disabling option
         PTOKEN_PRIVILEGES NewState,      // privilege information
         DWORD BufferLength,              // size of buffer
         PTOKEN_PRIVILEGES PreviousState, // original state buffer
         PDWORD ReturnLength              // required buffer size
    );
    第一个参数是访问令牌的句柄;第二个参数决定是进行权限修改还是除能(Disable)所有权限;第三个参数指明要修改的权限,是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,数据组的每个项指明了权限的类型和要进行的操作; 第四个参数是结构PreviousState的长度,如果
    PreviousState为空,该参数应为NULL;第五个参数也是一个指向TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息,可空;最后一个参数为实际PreviousState结构返回的大小。在使用这个函数前再看一下TOKEN_PRIVILEGES这个结构,其声明如下:typedef struct _TOKEN_PRIVILEGES { 
         DWORD PrivilegeCount; 
         LUID_AND_ATTRIBUTES Privileges[]; 
    } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; PrivilegeCount指的数组原素的个数,接着是一个LUID_AND_ATTRIBUTES类型的数组,再来看一下LUID_AND_ATTRIBUTES这个结构的内容,声明如下:typedef struct _LUID_AND_ATTRIBUTES { 
         LUID   Luid; 
         DWORD  Attributes; 
    } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES第二个参数就指明了我们要进行的操作类型,有三个可选项: 
    SE_PRIVILEGE_ENABLED、SE_PRIVILEGE_ENABLED_BY_DEFAULT、
    SE_PRIVILEGE_USED_FOR_ACCESS。要使能一个权限就指定Attributes为
    SE_PRIVILEGE_ENABLED。第一个参数就是指权限的类型,是一个LUID的
    值,LUID就是指locally unique identifier,我想GUID大家是比较熟
    悉的,和GUID的要求保证全局唯一不同,LUID只要保证局部唯一,就是
    指在系统的每一次运行期间保证是唯一的就可以了。另外和GUID相同的
    一点,LUID也是一个64位的值,相信大家都看过GUID那一大串的值,我
    们要怎么样才能知道一个权限对应的LUID值是多少呢?这就要用到另外
    一个API函数LookupPrivilegeValue,其原形如下:BOOL LookupPrivilegeValue(
         LPCTSTR lpSystemName,  // system name
         LPCTSTR lpName,        // privilege name
         PLUID lpLuid           // locally unique identifier
    );
    第一个参数是系统的名称,如果是本地系统只要指明为NULL就可以了,
    第三个参数就是返回LUID的指针,第二个参数就是指明了权限的名称,
    如“SeDebugPrivilege”。在Winnt.h中还定义了一些权限名称的宏,
    如:
    #define SE_BACKUP_NAME        TEXT("SeBackupPrivilege")
    #define SE_RESTORE_NAME       TEXT("SeRestorePrivilege")
    #define SE_SHUTDOWN_NAME      TEXT("SeShutdownPrivilege")
    #define SE_DEBUG_NAME         TEXT("SeDebugPrivilege")
    这样通过这三个函数的调用,我们就可以用OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcessID)来打获得任意进程的句柄,并
    且指定了所有的访问权。
      

  2.   

    AdjustTokenPrivileges:调整令牌权限