{
DCE *ret;
BOOL Hit = FALSE;
- NTSTATUS Status = STATUS_SUCCESS;
if (NULL == pdce) return NULL;
if (Force && !GDIOBJ_OwnedByCurrentProcess(pdce->hDC))
{
DPRINT1("Change ownership for DCE!\n");
-
+ // Note: Windows sets W32PF_OWNDCCLEANUP and moves on.
if (!IsObjectDead((HGDIOBJ) pdce->hDC))
DC_SetOwnership( pdce->hDC, PsGetCurrentProcess());
else
{
NtGdiDeleteObject(pdce->hClipRgn);
}
- // Temp fix until we know where the problem is, most likely in windc.
- _SEH_TRY
- {
- RemoveEntryList(&pdce->List);
- }
- _SEH_HANDLE
- {
- Status = _SEH_GetExceptionCode();
- }
- _SEH_END
- if (!NT_SUCCESS(Status))
+
+ RemoveEntryList(&pdce->List);
+
+ if (IsListEmpty(&pdce->List))
{
- SetLastNtError(Status);
- DPRINT1("CRASHED DCE! -> %x\n" , pdce);
- return 0; // Give it up and bail~!
+ DPRINT1("List is Empty! DCE! -> %x\n" , pdce);
+ FirstDce = NULL;
+ ret = NULL;
}
ExFreePoolWithTag(pdce, TAG_PDCE);