CmCallbackGetKeyObjectID
NTSTATUS __stdcall CmCallbackGetKeyObjectID(
PEX_CALLBACK_FUNCTION Function,
PCUNICODE_STRING Altitude,
PVOID Driver,
PVOID Context,
PLARGE_INTEGER Cookie,
PVOID Reserved){
_CM_KEY_CONTROL_BLOCK *Buffer;
NTSTATUS started;
UINT8 *v9;
_UNICODE_STRING *KeyPath;
INT64 v12[2];
PPRIVILEGE_SET Privileges[2];
KAPC_STATE ApcState;
KeyPath = 0i64;
*(_OWORD *)v12 = 0i64;
WORD1(v12[0]) = -1;
memset(&ApcState, 0, sizeof(ApcState));
*(_OWORD *)Privileges = 0i64;
if( !Altitude || *(_DWORD *)&Altitude->Length != 1803104306 || !Function )
goto LABEL_16;
Buffer = (_CM_KEY_CONTROL_BLOCK *)Altitude->Buffer;
if( Driver )
*(_QWORD *)Driver = Buffer;
if( !Context )
{
started = 0;
goto LABEL_17;
}
if( ((unsigned __int8)Buffer & 1) == 0 )
{
CmpAttachToRegistryProcess(&ApcState);
CmpLockRegistry();
started = CmpStartKcbStackForTopLayerKcb((INT64)v12, (INT64)Buffer);
if( started >= 0 )
{
CmpLockKcbStackShared((INT64)v12);
if( Buffer->NameBlock && (int)CmpConstructAndCacheName(Buffer, &KeyPath, v9) >= 0 )
{
started = 0;
*(_QWORD *)Context = KeyPath;
}
else
{
started = -1073741670;
}
CmpUnlockKcbStack((__int64)v12);
}
CmpUnlockRegistry();
KiUnstackDetachProcess(&ApcState, 0i64);
}
else
{
LABEL_16:
started = -1073741811;
}
LABEL_17:
if( Privileges[1] )
CmSiFreeMemory(Privileges[1]);
return started;
}Referenced by:
EtwpRegTraceCallback