gpt4 book ai didi

c++ - 如何从 TOKEN_INFORMATION_CLASS 获取 PSID?

转载 作者:太空狗 更新时间:2023-10-29 20:05:48 26 4
gpt4 key购买 nike

我尝试使用这篇文章中的信息:https://stackoverflow.com/a/251267/393087

我想出的代码是:

HANDLE hToken;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES, &hToken);
DWORD dwSize;
TOKEN_INFORMATION_CLASS tokenInformationClass;
GetTokenInformation(hToken, tokenInformationClass, NULL, sizeof(TOKEN_INFORMATION_CLASS), &dwSize);

好的,所以我得到了 TOKEN_INFORMATION_CLASS,但是如何从这里得到 ConvertSidToStringSid() 需要的 PSID? tic 手册页 (http://msdn.microsoft.com/en-us/library/windows/desktop/aa379626(v=vs.85).aspx) 中没有 PSID 字样。

最佳答案

实际上这是微不足道的。选择你想要的任何 token 信息类(我猜你想要 TokenUser),然后确保将匹配的 TOKEN_USER 结构传递给 GetTokenInformation,然后进入 TOKEN_USER 结构以访问 TOKEN_USER::User::Sid 以获取 PSID

当然你可能还想要另一个token信息类,但是原理是一样的。完整示例程序(在 MSVC 中编译为 .cpp 文件):

#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0500
#endif
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
#include <Sddl.h> // for ConvertSidToStringSid()

BOOL printTokenUserSid(HANDLE hToken)
{
PTOKEN_USER ptu = NULL;
DWORD dwSize = 0;
if(!GetTokenInformation(hToken, TokenUser, NULL, 0, &dwSize)
&& ERROR_INSUFFICIENT_BUFFER != GetLastError())
{
return FALSE;
}
if(NULL != (ptu = (PTOKEN_USER)LocalAlloc(LPTR, dwSize)))
{
LPTSTR StringSid = NULL;
if(!GetTokenInformation(hToken, TokenUser, ptu, dwSize, &dwSize))
{
LocalFree((HLOCAL)ptu);
return FALSE;
}
if(ConvertSidToStringSid(ptu->User.Sid, &StringSid))
{
_tprintf(_T("%s\n"), StringSid);
LocalFree((HLOCAL)StringSid);
LocalFree((HLOCAL)ptu);
return TRUE;
}
LocalFree((HLOCAL)ptu);
}
return FALSE;
}

int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hToken = NULL;
if(OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hToken)
|| OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken))
{
if(!printTokenUserSid(hToken))
{
_tprintf(_T("Something failed, Win32 error: %d\n"), GetLastError());
}
CloseHandle(hToken);
}
return 0;
}

关于c++ - 如何从 TOKEN_INFORMATION_CLASS 获取 PSID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11316350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com