static PWINSTATION_OBJECT FASTCALL IntGetWinStaForCbAccess(VOID) { HWINSTA hWinSta; PWINSTATION_OBJECT pWinStaObj; NTSTATUS Status; hWinSta = UserGetProcessWindowStation(); Status = IntValidateWindowStationHandle(hWinSta, KernelMode, WINSTA_ACCESSCLIPBOARD, &pWinStaObj, 0); if (!NT_SUCCESS(Status)) { ERR("Cannot open winsta\n"); SetLastNtError(Status); return NULL; } return pWinStaObj; }
BOOL APIENTRY NtUserCloseWindowStation( HWINSTA hWinSta) { PWINSTATION_OBJECT Object; NTSTATUS Status; TRACE("NtUserCloseWindowStation called (%p)\n", hWinSta); if (hWinSta == UserGetProcessWindowStation()) { ERR("Attempted to close process window station\n"); return FALSE; } Status = IntValidateWindowStationHandle(hWinSta, UserMode, 0, &Object, 0); if (!NT_SUCCESS(Status)) { ERR("Validation of window station handle (%p) failed\n", hWinSta); return FALSE; } ObDereferenceObject(Object); TRACE("Closing window station handle (%p)\n", hWinSta); Status = ObCloseHandle(hWinSta, UserMode); if (!NT_SUCCESS(Status)) { SetLastNtError(Status); return FALSE; } return TRUE; }
HWINSTA APIENTRY NtUserGetProcessWindowStation(VOID) { return UserGetProcessWindowStation(); }