return ret;
}
+PTHREADINFO FASTCALL
+IsThreadAttach(PTHREADINFO ptiTo)
+{
+ PATTACHINFO pai;
+
+ if (!gpai) return NULL;
+
+ pai = gpai;
+ do
+ {
+ if (pai->pti2 == ptiTo) break;
+ pai = pai->paiNext;
+ } while (pai);
+
+ if (!pai) return NULL;
+
+ // Return ptiFrom.
+ return pai->pti1;
+}
+
BOOL FASTCALL
UserAttachThreadInput(PTHREADINFO ptiFrom, PTHREADINFO ptiTo, BOOL fAttach)
{
pai->pti1 = ptiFrom;
pai->pti2 = ptiTo;
gpai = pai;
- TRACE("Attach Allocated! ptiFrom 0x%p ptiTo 0x%p\n",ptiFrom,ptiTo);
+ ERR("Attach Allocated! ptiFrom 0x%p ptiTo 0x%p\n",ptiFrom,ptiTo);
ptiTo->MessageQueue->iCursorLevel -= ptiFrom->iCursorLevel;
ptiFrom->pqAttach = ptiFrom->MessageQueue;
if (paiprev) paiprev->paiNext = pai->paiNext;
ExFreePoolWithTag(pai, USERTAG_ATTACHINFO);
- TRACE("Attach Free! ptiFrom 0x%p ptiTo 0x%p\n",ptiFrom,ptiTo);
+ ERR("Attach Free! ptiFrom 0x%p ptiTo 0x%p\n",ptiFrom,ptiTo);
ptiFrom->MessageQueue = ptiFrom->pqAttach;
// FIXME: conditions?