C# 如何在c++;与c类似#
在c#中使用此代码: WindowsIdentity.GetCurrent().User.Value 以及获取输出: S-1-5-21-3050176684-2277112922-4090480026-1001C# 如何在c++;与c类似#,c#,c++,sid,hwid,C#,C++,Sid,Hwid,在c#中使用此代码: WindowsIdentity.GetCurrent().User.Value 以及获取输出: S-1-5-21-3050176684-2277112922-4090480026-1001 如何在C++中获得相同的输出?< p>这里是一些代码,说明如何使用查找表帐户名< /C> >():在本地计算机上获取SID的SID:< /P> #包括 #包括 #包括 LPCWSTR GetSid(LPCWSTR szAccountName) { LPWSTR pszRet=NULL;
如何在C++中获得相同的输出?
< p>这里是一些代码,说明如何使用<代码>查找表帐户名< /C> >():在本地计算机上获取SID的SID:< /P>#包括
#包括
#包括
LPCWSTR GetSid(LPCWSTR szAccountName)
{
LPWSTR pszRet=NULL;
DWORD dwDomainSize=32,dwSidSize=32;
LPWSTR pszDomainName=新的WCHAR[dwDomainSize];
无符号字符*pSid=新的无符号字符[dwSidSize];
while(true)
{
SID\u名称\u使用sidType;
DWORD dwDomainSizeTmp=dwDomainSize,dwSidSizeTmp=dwSidSize;
如果(LookupAccountNameW(NULL,szAccountName,(PSID)PSID,
&dwSidSizeTmp、pszDomainName和dwDomainSizeTmp以及sidType))
{
LPWSTR pszTmp;
if(转换器SIDTOSTRINGSIDW(pSid和pszTmp))
{
常量int buffLen=wcslen(pszTmp)+1;
pszRet=新的WCHAR[buffLen];
wcscpy_s(pszRet、buffLen、pszTmp);
LocalFree(pszTmp);
}
打破
}
其他的
{
如果(GetLastError()==错误\u缓冲区不足)
{
if(dwDomainSizeTmp>dwDomainSize)
{
删除[]pszdomanname;
pszDomainName=新的WCHAR[dwDomainSizeTmp];
dwDomainSize=dwDomainSizeTmp;
}
if(dwSidSizeTmp>dwSidSize)
{
删除[]pSid;
pSid=新的无符号字符[dwSidSizeTmp];
dwSidSize=dwSidSizeTmp;
}
}
其他的
{
打破
}
}
}
删除[]pszdomanname;
删除[]pSid;
返回pszRet;
}
int main()
{
LPCWSTR ret=GetSid(L“andy”);
如果(ret)
{
STD::WcOut:这能回答你的问题吗?你可以使用<代码> LoopUpCudioNo./Cube >:@安迪,你可以展示一个工作例子,我真的是新到++@ WaFaFunnMyor如果你是新的C++,考虑学习,从结构化的方式,从A。安迪我需要这个代码来解决一个小问题,我不需要更多的++知识。
#include <windows.h>
#include <iostream>
#include <sddl.h>
LPCWSTR GetSid(LPCWSTR szAccountName)
{
LPWSTR pszRet = NULL;
DWORD dwDomainSize = 32, dwSidSize = 32;
LPWSTR pszDomainName = new WCHAR[dwDomainSize];
unsigned char* pSid = new unsigned char[dwSidSize];
while (true)
{
SID_NAME_USE sidType;
DWORD dwDomainSizeTmp = dwDomainSize, dwSidSizeTmp = dwSidSize;
if (LookupAccountNameW(NULL, szAccountName, (PSID)pSid,
&dwSidSizeTmp, pszDomainName, &dwDomainSizeTmp, &sidType))
{
LPWSTR pszTmp;
if (ConvertSidToStringSidW(pSid, &pszTmp))
{
const int buffLen = wcslen(pszTmp) + 1;
pszRet = new WCHAR[buffLen];
wcscpy_s(pszRet, buffLen, pszTmp);
LocalFree(pszTmp);
}
break;
}
else
{
if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
if (dwDomainSizeTmp > dwDomainSize)
{
delete[] pszDomainName;
pszDomainName = new WCHAR[dwDomainSizeTmp];
dwDomainSize = dwDomainSizeTmp;
}
if (dwSidSizeTmp > dwSidSize)
{
delete[] pSid;
pSid = new unsigned char[dwSidSizeTmp];
dwSidSize = dwSidSizeTmp;
}
}
else
{
break;
}
}
}
delete[] pszDomainName;
delete[] pSid;
return pszRet;
}
int main()
{
LPCWSTR ret = GetSid(L"andy");
if (ret)
{
std::wcout << L"SID for \"andy\" is: " << ret << std::endl;
delete[] ret;
}
else
{
std::wcout << L"Failed to get SID for \"andy\"" << std::endl;
}
return 0;
}