Пример #1
0
VOID APIENTRY
IntWinStaObjectDelete(PWIN32_DELETEMETHOD_PARAMETERS Parameters)
{
   PWINSTATION_OBJECT WinSta = (PWINSTATION_OBJECT)Parameters->Object;

   TRACE("Deleting window station (0x%X)\n", WinSta);

   UserEmptyClipboardData(WinSta);

   RtlDestroyAtomTable(WinSta->AtomTable);

   RtlFreeUnicodeString(&WinSta->Name);
}
Пример #2
0
NTSTATUS
APIENTRY
IntWinStaObjectDelete(
    _In_ PVOID Parameters)
{
    PWIN32_DELETEMETHOD_PARAMETERS DeleteParameters = Parameters;
    PWINSTATION_OBJECT WinSta = (PWINSTATION_OBJECT)DeleteParameters->Object;

    TRACE("Deleting window station (0x%p)\n", WinSta);

    WinSta->Flags |= WSS_DYING;

    UserEmptyClipboardData(WinSta);

    RtlDestroyAtomTable(WinSta->AtomTable);

    RtlFreeUnicodeString(&WinSta->Name);

    return STATUS_SUCCESS;
}
Пример #3
0
BOOL NTAPI
UserEmptyClipboard(VOID)
{
    BOOL bRet = FALSE;
    PWINSTATION_OBJECT pWinStaObj;

    pWinStaObj = IntGetWinStaForCbAccess();
    if (!pWinStaObj)
        return FALSE;

    if (IntIsClipboardOpenByMe(pWinStaObj))
    {
        UserEmptyClipboardData(pWinStaObj);

        if (pWinStaObj->spwndClipOwner)
        {
            TRACE("Clipboard: WM_DESTROYCLIPBOARD to %p\n", pWinStaObj->spwndClipOwner->head.h);
            co_IntSendMessageNoWait(pWinStaObj->spwndClipOwner->head.h, WM_DESTROYCLIPBOARD, 0, 0);
        }

        pWinStaObj->spwndClipOwner = pWinStaObj->spwndClipOpen;

        pWinStaObj->iClipSequenceNumber++;

        bRet = TRUE;
    }
    else
    {
        EngSetLastError(ERROR_CLIPBOARD_NOT_OPEN);
        ERR("Access denied!\n");
    }

    ObDereferenceObject(pWinStaObj);

    return bRet;
}