if (hWinSta == UserGetProcessWindowStation())
{
- ERR("Attempted to close process window station");
+ ERR("Attempted to close process window station\n");
return FALSE;
}
/* try windowstation */
TRACE("Trying to open window station 0x%x\n", hObject);
- Status = IntValidateWindowStationHandle(
+ Status = ObReferenceObjectByHandle(
hObject,
- UserMode,
0,
- &WinStaObject);
-
-
- if (!NT_SUCCESS(Status) && Status != STATUS_OBJECT_TYPE_MISMATCH)
- {
- TRACE("Failed: 0x%x\n", Status);
- SetLastNtError(Status);
- return FALSE;
- }
+ ExWindowStationObjectType,
+ UserMode,
+ (PVOID*)&WinStaObject,
+ NULL);
if (Status == STATUS_OBJECT_TYPE_MISMATCH)
{
UserMode,
0,
&DesktopObject);
- if (!NT_SUCCESS(Status))
- {
- TRACE("Failed: 0x%x\n", Status);
- SetLastNtError(Status);
- return FALSE;
- }
}
+
+ if (!NT_SUCCESS(Status))
+ {
+ ERR("Failed: 0x%x\n", Status);
+ SetLastNtError(Status);
+ return FALSE;
+ }
+
TRACE("WinSta or Desktop opened!!\n");
/* get data */
if (DesktopObject != NULL)
ObDereferenceObject(DesktopObject);
- SetLastNtError(Status);
- return NT_SUCCESS(Status);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastNtError(Status);
+ return FALSE;
+ }
+
+ return TRUE;
}
/*
LPDWORD lpnLengthNeeded)
{
LPWSTR buffer;
- BOOL ret = TRUE;
+ BOOL ret = FALSE;
+ DWORD LengthNeeded;
TRACE("GetUserObjectInformationA(%x %d %x %d %x)\n", hObj, nIndex,
pvInfo, nLength, lpnLengthNeeded);
}
/* get unicode string */
- if (!GetUserObjectInformationW(hObj, nIndex, buffer, nLength*2, lpnLengthNeeded))
- ret = FALSE;
- *lpnLengthNeeded /= 2;
-
- if (ret)
+ if (GetUserObjectInformationW(hObj, nIndex, buffer, nLength*2, lpnLengthNeeded))
{
/* convert string */
- if (WideCharToMultiByte(CP_THREAD_ACP, 0, buffer, -1,
- pvInfo, nLength, NULL, NULL) == 0)
+ LengthNeeded = WideCharToMultiByte(CP_THREAD_ACP, 0, buffer, -1,
+ pvInfo, nLength, NULL, NULL);
+
+ if (LengthNeeded != 0)
{
- ret = FALSE;
+ *lpnLengthNeeded = LengthNeeded;
+ ret = TRUE;
}
}