AdjustTokenPrivilegesが失敗しました。エラーは1300です。

エラーコード1300は「指定されたアクセス許可セットが現在のプロセスのアクセス許可を超えています」ことを意味します。このエラーは、現在のプロセスに十分な特権がない特権を取得または変更しようとした場合に発生します。

具体的には、AdjustTokenPrivileges関数を呼び出すときは、自分のプロセスにSE_PRIVILEGE_ENABLED権限の権限があることを確認する必要があります。さもないと、エラーコード1300が返されます。

この問題を解決する方法は、プロセスが管理者権限で実行されるようにすることです。アプリケーションを右クリックして「管理者として実行」を選択してプログラムを実行するか、コードに追加して管理者権限で実行されるようにします。

管理者権限でコードを実行する例を以下に示します。

#include <iostream>
#include <Windows.h>
int main()
{
HANDLE hToken;
TOKEN_PRIVILEGES tokenPrivileges;
// 获取当前进程的访问令牌
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
std::cout << "OpenProcessToken failed: " << GetLastError() << std::endl;
return 1;
}
// 获取特权的LUID
if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tokenPrivileges.Privileges[0].Luid))
{
std::cout << "LookupPrivilegeValue failed: " << GetLastError() << std::endl;
return 1;
}
tokenPrivileges.PrivilegeCount = 1;
tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// 调整进程的特权
if (!AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, 0, NULL, NULL))
{
std::cout << "AdjustTokenPrivileges failed: " << GetLastError() << std::endl;
return 1;
}
std::cout << "特权已调整" << std::endl;
// 关闭访问令牌句柄
CloseHandle(hToken);
return 0;
}

このサンプルでは、OpenProcessToken関数を呼び出して現在のプロセスのアクセストークンを取得し、LookupPrivilegeValue関数を呼び出してSE_DEBUG_NAME特権のLUIDを検索します。最後に、AdjustTokenPrivileges関数を呼び出してプロセスの特権を調整します。

ユーザーアカウントに管理者権限がないか、アプリケーションに適切な権限が設定されていないことが考えられます。その場合、システム管理者に問い合わせるか、アプリケーションの権限設定をご確認ください。

bannerAds