advapi32: LsaQueryInformationPolicy update.
Update LsaQueryInformationPolicy to use correct computer name and SID. Add support for PolicyDnsDomainInformation.
This commit is contained in:
parent
a430db9e39
commit
3879fef21d
|
@ -394,10 +394,9 @@ NTSTATUS WINAPI LsaQueryInformationPolicy(
|
|||
{
|
||||
POLICY_PRIMARY_DOMAIN_INFO ppdi;
|
||||
SID sid;
|
||||
DWORD padding[3];
|
||||
};
|
||||
|
||||
SID_IDENTIFIER_AUTHORITY localSidAuthority = {SECURITY_NT_AUTHORITY};
|
||||
|
||||
struct di * xdi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*xdi));
|
||||
HKEY key;
|
||||
BOOL useDefault = TRUE;
|
||||
|
@ -431,15 +430,111 @@ NTSTATUS WINAPI LsaQueryInformationPolicy(
|
|||
RegCloseKey(key);
|
||||
}
|
||||
if (useDefault)
|
||||
RtlCreateUnicodeStringFromAsciiz(&(xdi->ppdi.Name), "DOMAIN");
|
||||
|
||||
{
|
||||
DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
|
||||
LPWSTR buf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize * sizeof(WCHAR));
|
||||
if (GetComputerNameW(buf, &dwSize))
|
||||
{
|
||||
xdi->ppdi.Name.Buffer = buf;
|
||||
xdi->ppdi.Name.Length = dwSize * sizeof(WCHAR);
|
||||
}
|
||||
}
|
||||
|
||||
TRACE("setting domain to %s\n", debugstr_w(xdi->ppdi.Name.Buffer));
|
||||
|
||||
|
||||
xdi->ppdi.Sid = &(xdi->sid);
|
||||
xdi->sid.Revision = SID_REVISION;
|
||||
xdi->sid.SubAuthorityCount = 1;
|
||||
xdi->sid.IdentifierAuthority = localSidAuthority;
|
||||
xdi->sid.SubAuthority[0] = SECURITY_LOCAL_SYSTEM_RID;
|
||||
|
||||
/* read the computer SID from the registry */
|
||||
if (!ADVAPI_GetComputerSid(&(xdi->sid)))
|
||||
{
|
||||
SID_IDENTIFIER_AUTHORITY localSidAuthority = {SECURITY_NT_AUTHORITY};
|
||||
|
||||
xdi->sid.Revision = SID_REVISION;
|
||||
xdi->sid.SubAuthorityCount = 4;
|
||||
xdi->sid.IdentifierAuthority = localSidAuthority;
|
||||
xdi->sid.SubAuthority[0] = SECURITY_NT_NON_UNIQUE;
|
||||
xdi->sid.SubAuthority[1] = 0;
|
||||
xdi->sid.SubAuthority[2] = 0;
|
||||
xdi->sid.SubAuthority[3] = 0;
|
||||
}
|
||||
|
||||
TRACE("setting SID to %s\n", debugstr_sid(&xdi->sid));
|
||||
|
||||
*Buffer = xdi;
|
||||
}
|
||||
break;
|
||||
case PolicyDnsDomainInformation: /* 12 (0xc) */
|
||||
{
|
||||
struct di
|
||||
{
|
||||
POLICY_DNS_DOMAIN_INFO pddi;
|
||||
SID sid;
|
||||
DWORD padding[3];
|
||||
};
|
||||
|
||||
struct di * xdi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*xdi));
|
||||
HKEY key;
|
||||
BOOL useDefault = TRUE;
|
||||
LONG ret;
|
||||
|
||||
if ((ret = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
|
||||
"System\\CurrentControlSet\\Services\\VxD\\VNETSUP", 0,
|
||||
KEY_READ, &key)) == ERROR_SUCCESS)
|
||||
{
|
||||
DWORD size = 0;
|
||||
static const WCHAR wg[] = { 'W','o','r','k','g','r','o','u','p',0 };
|
||||
|
||||
ret = RegQueryValueExW(key, wg, NULL, NULL, NULL, &size);
|
||||
if (ret == ERROR_MORE_DATA || ret == ERROR_SUCCESS)
|
||||
{
|
||||
xdi->pddi.Name.Buffer = HeapAlloc(GetProcessHeap(),
|
||||
HEAP_ZERO_MEMORY, size);
|
||||
|
||||
if ((ret = RegQueryValueExW(key, wg, NULL, NULL,
|
||||
(LPBYTE)xdi->pddi.Name.Buffer, &size)) == ERROR_SUCCESS)
|
||||
{
|
||||
xdi->pddi.Name.Length = (USHORT)size;
|
||||
useDefault = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, xdi->pddi.Name.Buffer);
|
||||
xdi->pddi.Name.Buffer = NULL;
|
||||
}
|
||||
}
|
||||
RegCloseKey(key);
|
||||
}
|
||||
if (useDefault)
|
||||
{
|
||||
DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
|
||||
LPWSTR buf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize * sizeof(WCHAR));
|
||||
if (GetComputerNameW(buf, &dwSize))
|
||||
{
|
||||
xdi->pddi.Name.Buffer = buf;
|
||||
xdi->pddi.Name.Length = dwSize * sizeof(WCHAR);
|
||||
}
|
||||
}
|
||||
|
||||
TRACE("setting domain to %s\n", debugstr_w(xdi->pddi.Name.Buffer));
|
||||
|
||||
xdi->pddi.Sid = &(xdi->sid);
|
||||
|
||||
/* read the computer SID from the registry */
|
||||
if (!ADVAPI_GetComputerSid(&(xdi->sid)))
|
||||
{
|
||||
SID_IDENTIFIER_AUTHORITY localSidAuthority = {SECURITY_NT_AUTHORITY};
|
||||
|
||||
xdi->sid.Revision = SID_REVISION;
|
||||
xdi->sid.SubAuthorityCount = 4;
|
||||
xdi->sid.IdentifierAuthority = localSidAuthority;
|
||||
xdi->sid.SubAuthority[0] = SECURITY_NT_NON_UNIQUE;
|
||||
xdi->sid.SubAuthority[1] = 0;
|
||||
xdi->sid.SubAuthority[2] = 0;
|
||||
xdi->sid.SubAuthority[3] = 0;
|
||||
}
|
||||
|
||||
TRACE("setting SID to %s\n", debugstr_sid(&xdi->sid));
|
||||
|
||||
*Buffer = xdi;
|
||||
}
|
||||
break;
|
||||
|
@ -451,7 +546,6 @@ NTSTATUS WINAPI LsaQueryInformationPolicy(
|
|||
case PolicyModificationInformation:
|
||||
case PolicyAuditFullSetInformation:
|
||||
case PolicyAuditFullQueryInformation:
|
||||
case PolicyDnsDomainInformation:
|
||||
{
|
||||
FIXME("category not implemented\n");
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
|
|
Loading…
Reference in New Issue