<Return[A]><Top>

AdjustTokenPrivileges

Declare Function Api_AdjustTokenPrivileges& Lib "advapi32" Alias "AdjustTokenPrivileges" (ByVal TokenHandle&, ByVal DisableAllPrivileges&, NewState As TOKEN_PRIVILEGES, ByVal BufferLength&, PreviousState As TOKEN_PRIVILEGES, ReturnLength&)

Declare Function AdjustTokenPrivileges Lib "advapi32" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long

指定したアクセストークン内の特権を有効または無効に設定する。

パラメータ
TokenHandle
    変更したい特権を保持するアクセストークンを指定する。このハンドルは、トークンに対する TOKEN_ADJUST_PRIVILEGES アクセス権を

    備えていなければならない。PreviousState パラメータが NULL ではない場合、このハンドルは TOKEN_QUERY アクセス権も必要。
DisableAllPrivileges
    トークンのすべての特権を無効にするかどうかを指定する。この値が TRUE の場合、関数はすべての特権を無効にし、NewState パラメー

    タを無視する。FALSE の場合、この関数は NewState パラメータが指す情報に基づいて特権に変更を加える。
NewState
    特権とその属性からなる配列を TOKEN_PRIVILEGES 構造体へのポインタを指定する。DisableAllPrivileges パラメータが FALSE の場

    合、AdjustTokenPrivileges 関数は配列内の値に従って、トークンの特権を有効または無効にする。

    ある特権の SE_PRIVILEGE_ENABLED 属性をセットしておくと、その特権が有効になる。属性をクリアしておくと、特権が無効になる。
    DisableAllPrivileges が TRUE の場合、関数はこのパラメータを無視する。
BufferLength
    PreviousState パラメータが指すバッファのサイズをバイト単位で指定する。PreviousState パラメータが NULL の場合、このパラメータは 0

    でもよい。
PreviousState
    この関数の変更対象となる特権の、従来の状態を保持する TOKEN_PRIVILEGES 構造体を受け取るバッファへのポインタを指定する。

    このパラメータは、NULL でもよい。
    指定したバッファが小さすぎて、変更後の特権の完全なリストを受け取れない場合、関数は失敗し、どの特権も調整されない。

    その場合、ReturnLength パラメータが指す変数の値は、変更後の特権の完全なリストを保持するために必要なバイト数に設定される。
ReturnLength
    PreviousState パラメータが指すバッファが必要とするバイト数を受け取る変数へのポインタを指定する。PreviousState が NULL の場合、

    このパラメータは NULL でもよい。

 

戻り値
    関数が成功すると、0 以外の値が返る。指定したすべての特権に調整が加えられたかどうかを調べるには、GetLastError 関数を呼び出

    すと、次の値のいずれかが返る。

    値                                               

説明                                                                                                                        

    ERROR_SUCCESS

この関数は、指定されたすべての特権を調整した。

    ERROR_NOT_ALL_ASSIGNED

 

トークンは、NewState パラメータで指定された特権の1つ以上を保持していない。どの特権も調整されなかった場合でも、関数が成功してこのエラーを返すことがある。PreviousState パラメータが、調整された特権を示す。

 

解説
    AdjustTokenPrivileges 関数は、アクセストークンに新しい特権を追加することはできない。トークン内の既存の特権を有効または無効にす

    るだけである。トークン内に存在する特権を調べるには、GetTokenInformation 関数を呼び出す。
    NewState パラメータを使うと、現在トークン内に存在しない特権を指定でき、関数は失敗しない。この場合、関数は現在トークン内に存在

    する特権を調整し、指定されたその他の特権を無視し、成功を返す。この関数が、指定されたすべての特権を調整したかどうかを決定する

    には、GetLastError 関数を呼び出す。PreviousState パラメータは、調整された特権を示す。
    PreviousState パラメータは、調整を加えられた特権の元の状態を保持する TOKEN_PRIVILEGES 構造体を受け取る。元の状態に復元

    するには、PreviousState ポインタを NewState パラメータとして指定し、AdjustTokenPrivileges 関数をもう一度呼び出す。