[WIN32K] Implement UOI_FLAGS in NtUserGetObjectInformation(). Based from a patch by Jérôme Gardou.

CORE-13447 CORE-14422

This fixes closing nLite 1.4.9.3 (.NET2) application, as well as any
other program that expects that the interactive window station is
reported as being visible. I thank Mark Jansen and Joachim Henze for
help and testing.
This commit is contained in:
Hermès Bélusca-Maïto 2018-04-22 22:56:16 +02:00
parent e445b305bb
commit a55d7c692b
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0

View file

@ -717,22 +717,49 @@ NtUserGetObjectInformation(
goto Exit; goto Exit;
} }
TRACE("WinSta or Desktop opened!!\n"); TRACE("WinSta or Desktop opened!\n");
/* Get data */ /* Get data */
switch (nIndex) switch (nIndex)
{ {
case UOI_FLAGS: case UOI_FLAGS:
{ {
/* This is a default implementation that does almost nothing */ OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo;
ObjectFlags.fInherit = FALSE; ULONG BytesWritten;
ObjectFlags.fReserved = FALSE; ObjectFlags.fReserved = FALSE;
/* Check whether this handle is inheritable */
Status = ZwQueryObject(hObject,
ObjectHandleFlagInformation,
&HandleInfo,
sizeof(OBJECT_HANDLE_ATTRIBUTE_INFORMATION),
&BytesWritten);
if (!NT_SUCCESS(Status))
{
ERR("ZwQueryObject failed, Status 0x%08lx\n", Status);
break;
}
ObjectFlags.fInherit = HandleInfo.Inherit;
ObjectFlags.dwFlags = 0; ObjectFlags.dwFlags = 0;
if (WinStaObject != NULL)
{
if (!(WinStaObject->Flags & WSS_NOIO))
ObjectFlags.dwFlags |= WSF_VISIBLE;
}
else if (DesktopObject != NULL)
{
FIXME("Setting DF_ALLOWOTHERACCOUNTHOOK is unimplemented.\n");
}
else
{
ERR("No associated WinStaObject nor DesktopObject!\n");
}
pvData = &ObjectFlags; pvData = &ObjectFlags;
nDataSize = sizeof(ObjectFlags); nDataSize = sizeof(ObjectFlags);
Status = STATUS_SUCCESS; Status = STATUS_SUCCESS;
ERR("UOI_FLAGS unimplemented!\n");
break; break;
} }