Привет! Нужно узнать SID пользователя,для того ,что б попасть в ветку HKEY_USERS\sid_string_name\....... Делал уже разными способами-это один из них Код (Text): LPTSTR GetSID(LPTSTR pszName, LPTSTR pszBuffer) { UNICODE_STRING szSID = { 0 }; WCHAR pszUserName[512] = L""; DWORD lSizeOfSid = 512, lSizeOfDomain = 512; LPVOID pSid = LocalAlloc(LMEM_ZEROINIT, lSizeOfSid); SID_NAME_USE peUse; WCHAR pszDomain[512] = L""; DWORD l = 512; GetUserName(pszUserName, &l); BOOL i= LookupAccountName(NULL, pszUserName, (PSID) pSid, &lSizeOfSid, pszDomain, &lSizeOfDomain, &peUse); szSID.Buffer = (LPWSTR) LocalAlloc(LMEM_ZEROINIT, 512); szSID.Length = 512; szSID.MaximumLength = szSID.Length + 2; pRtlConvertSidToUnicodeString=NULL; reinterpret_cast<FARPROC&>(pRtlConvertSidToUnicodeString) = GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")), "RtlConvertSidToUnicodeString"); pRtlConvertSidToUnicodeString(&szSID, pSid, 0); lstrcpyn (pszBuffer, szSID.Buffer,szSID.Length ); LocalFree(pSid); LocalFree(szSID.Buffer); return pszBuffer; } Так вот,из 4_х компов sid совпадает с веткой реестра,а вот на одном нет значения,которое пишется обычно в конце -1003 Т.е вместо S-1-5-21-1935655697-1682526488-682003330-1003 получаю S-1-5-21-1935655697-1682526488-682003330 ну и естествено не могу туда попасть,ибо HKEY_USERS\S-1-5-21-1935655697-1682526488-682003330-1003 не существует Собствено вопрос-почему так может происходить,кто виноват и что делать?
Вот дали правильный код Код (Text): bool GetCurrentUserSid (char* pSidBuffer) { if (! pSidBuffer) return false; bool r = false; char name [512] = {0}; DWORD dwlen = 512; PSID psid = NULL; LPTSTR ssid = NULL; char* prefdomain = NULL; SID_NAME_USE siduse; DWORD dwdom = 1024; DWORD dwsid = 1024; psid = (char*) LocalAlloc (LPTR, 1024); if (! psid) goto END; prefdomain = (char*) LocalAlloc (LPTR, 1024); if (! prefdomain) goto END; if (! GetUserNameEx (NameSamCompatible, name, &dwlen)) goto END; if (! LookupAccountName ( NULL, name, psid, &dwsid, prefdomain, &dwdom, &siduse)) { goto END; } if (! ConvertSidToStringSid (psid, &ssid)) goto END; lstrcpy (pSidBuffer, ssid); r = true; END: if (psid) LocalFree (psid); if (prefdomain) LocalFree (prefdomain); if (ssid) LocalFree (ssid); return r; }