KdRegisterDebuggerDataBlock
UINT8 __stdcall KdRegisterDebuggerDataBlock(UINT64 Tag, _DBGKD_DEBUG_DATA_HEADER64 *DataHeader, UINT64 Size){
unsigned __int64 v4;
__int64 *v5;
_DBGKD_DEBUG_DATA_HEADER64 **v6;
UINT8 result;
_DBGKD_DEBUG_DATA_HEADER64 *v8;
v4 = (unsigned __int8)KeAcquireSpinLockRaiseToDpc((UINT64 *)&stru_140CF2E80 + 609);
v5 = (__int64 *)KdpDebuggerDataListHead;
while( v5 != &KdpDebuggerDataListHead )
{
v8 = (_DBGKD_DEBUG_DATA_HEADER64 *)v5;
v5 = (__int64 *)*v5;
if( v8 == DataHeader || v8->OwnerTag == 1195525195 )
{
KxReleaseSpinLock((UINT64 *)&stru_140CF2E80 + 609);
result = 0;
goto LABEL_5;
}
}
DataHeader->OwnerTag = 1195525195;
DataHeader->Size = 896;
v6 = (_DBGKD_DEBUG_DATA_HEADER64 **)qword_140C40578;
if( *(__int64 **)qword_140C40578 != &KdpDebuggerDataListHead )
__fastfail(3u);
DataHeader->List.Flink = (unsigned __int64)&KdpDebuggerDataListHead;
DataHeader->List.Blink = (unsigned __int64)v6;
*v6 = DataHeader;
qword_140C40578 = (__int64)DataHeader;
KxReleaseSpinLock((UINT64 *)&stru_140CF2E80 + 609);
result = 1;
LABEL_5:
__writecr8(v4);
return result;
}Referenced by:
KdInitSystem