DbgkLkmdRegisterCallback
NTSTATUS __stdcall DbgkLkmdRegisterCallback(
INT64 *CallbackRoutine,
INT64 *a2,
VOID *a3,
VOID *a4,
UINT64 a5,
UINT8 *a6,
VOID *a7,
VOID *a8,
UINT64 a9,
VOID *a10,
VOID *a11,
VOID *a12,
VOID *CallbackContext,
UINT64 Flags){
int v14;
unsigned int i;
INT64 *v18;
_EX_RUNDOWN_REF *v19;
VOID *v20;
VOID *v21;
_EX_RUNDOWN_REF *v22;
unsigned int j;
NTSTATUS result;
VOID *v25;
VOID *v26;
v14 = (int)a3;
if( ((unsigned __int8)a3 & 3) == 3 )
return -1073741811;
for( i = 0; i < 8; ++i )
{
v18 = (INT64 *)(&stru_140C53C70 + 4 * i);
v19 = ExReferenceCallBackBlock(v18);
if( v19 )
{
if( CallbackRoutine == (INT64 *)v19[1].Count )
{
ExDereferenceCallBackBlock((_EX_CALLBACK *)v18, v19);
return -1073740008;
}
ExDereferenceCallBackBlock((_EX_CALLBACK *)v18, v19);
}
}
v22 = (_EX_RUNDOWN_REF *)ExAllocateCallBack((INT64)CallbackRoutine, a2, v20, v21, v25, v26);
if( !v22 )
return -1073741801;
for( j = 0; j < 8; ++j )
{
if( ExCompareExchangeCallBack(&stru_140C53C70 + 4 * j, v22, 0i64) )
{
result = 0;
*((_DWORD *)&stru_140C53C70 + 4 * j + 2) = v14;
return result;
}
}
ExFreePoolWithTag(v22, 0);
return -1073740757;
}Referenced by:
No references.