Author: ekohl Date: Sun May 13 21:45:59 2012 New Revision: 56581
URL: http://svn.reactos.org/svn/reactos?rev=56581&view=rev Log: [ADVAPI32] Use LSA functions to query the account domain SID.
Modified: trunk/reactos/dll/win32/advapi32/misc/logon.c
Modified: trunk/reactos/dll/win32/advapi32/misc/logon.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advapi32/misc/log... ============================================================================== --- trunk/reactos/dll/win32/advapi32/misc/logon.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/advapi32/misc/logon.c [iso-8859-1] Sun May 13 21:45:59 2012 @@ -307,75 +307,59 @@
static BOOL WINAPI -SamGetDomainSid(PSID *Sid) -{ +GetDomainSid(PSID *Sid) +{ + PPOLICY_ACCOUNT_DOMAIN_INFO Info = NULL; + LSA_OBJECT_ATTRIBUTES ObjectAttributes; + LSA_HANDLE PolicyHandle; PSID lpSid; - DWORD dwLength; - HKEY hDomainKey; - - TRACE("SamGetDomainSid() called\n"); - - if (Sid != NULL) - *Sid = NULL; - - /* Open the account domain key */ - if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, - L"SAM\SAM\Domains\Account", - 0, - KEY_READ, - &hDomainKey)) - { - ERR("Failed to open the account domain key! (Error %lu)\n", GetLastError()); - return FALSE; - } - - /* Get SID size */ - dwLength = 0; - if (RegQueryValueExW(hDomainKey, - L"Sid", - NULL, - NULL, - NULL, - &dwLength)) - { - ERR("Failed to read the SID size! (Error %lu)\n", GetLastError()); - RegCloseKey(hDomainKey); - return FALSE; - } - - /* Allocate sid buffer */ - TRACE("Required SID buffer size: %lu\n", dwLength); - lpSid = (PSID)RtlAllocateHeap(RtlGetProcessHeap(), - 0, - dwLength); + ULONG Length; + NTSTATUS Status; + + *Sid = NULL; + + memset(&ObjectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES)); + ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES); + + Status = LsaOpenPolicy(NULL, + &ObjectAttributes, + POLICY_TRUST_ADMIN, + &PolicyHandle); + if (!NT_SUCCESS(Status)) + { + ERR("LsaOpenPolicy failed (Status: 0x%08lx)\n", Status); + return FALSE; + } + + Status = LsaQueryInformationPolicy(PolicyHandle, + PolicyAccountDomainInformation, + (PVOID *)&Info); + if (!NT_SUCCESS(Status)) + { + ERR("LsaQueryInformationPolicy failed (Status: 0x%08lx)\n", Status); + LsaClose(PolicyHandle); + return FALSE; + } + + Length = RtlLengthSid(Info->DomainSid); + + lpSid = RtlAllocateHeap(RtlGetProcessHeap(), + 0, + Length); if (lpSid == NULL) { ERR("Failed to allocate SID buffer!\n"); - RegCloseKey(hDomainKey); - return FALSE; - } - - /* Read sid */ - if (RegQueryValueExW(hDomainKey, - L"Sid", - NULL, - NULL, - (LPBYTE)lpSid, - &dwLength)) - { - ERR("Failed to read the SID! (Error %lu)\n", GetLastError()); - RtlFreeHeap(RtlGetProcessHeap(), - 0, - lpSid); - RegCloseKey(hDomainKey); - return FALSE; - } - - RegCloseKey(hDomainKey); + LsaFreeMemory(Info); + LsaClose(PolicyHandle); + return FALSE; + } + + memcpy(lpSid, Info->DomainSid, Length);
*Sid = lpSid;
- TRACE("SamGetDomainSid() done\n"); + LsaFreeMemory(Info); + LsaClose(PolicyHandle);
return TRUE; } @@ -435,7 +419,7 @@ if (!NT_SUCCESS(Status)) return NULL;
- if (!SamGetDomainSid(&DomainSid)) + if (!GetDomainSid(&DomainSid)) return NULL;
TokenGroups = RtlAllocateHeap(