C# 如何在c++;与c类似#

C# 如何在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#中使用此代码:

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;
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;
}