SdbpCheckKObject
NTSTATUS __stdcall SdbpCheckKObject(
VOID *hSDB,
UINT64 tiKObject,
WCHAR *szPath,
VOID *FileHandle,
VOID *pImageBase,
WCHAR *cbImageSize,
tagSDBBMACHINEINFO *MachineInfo){
unsigned int v7;
NTSTATUS SearchDBContext;
WCHAR **v11;
_DB *v12;
const WCHAR *v13;
const WCHAR *v14;
INT64 *v16;
NTSTATUS v17;
_MATCHMODE *pMatchMode;
tagSEARCHDBCONTEXT pContext[36];
_MATCHMODE v20;
WCHAR **FileMappingHandleOut;
UINT64 pdwFlags;
HIDWORD(pdwFlags) = HIDWORD(FileHandle);
v7 = tiKObject;
memset(pContext, 0i64, 0x60u);
LODWORD(pdwFlags) = 0;
SearchDBContext = 0;
v20 = MATCHMODE_UNKNOWN;
v11 = 0i64;
v12 = (_DB *)*((_QWORD *)hSDB + 1);
FileMappingHandleOut = 0i64;
if( !szPath
|| (v17 = AslFileMappingCreate(
&FileMappingHandleOut,
szPath,
(VOID *)0xFFFFFFFFFFFFFFFFi64,
pImageBase,
cbImageSize),
v11 = FileMappingHandleOut,
v17 >= 0) )
{
memset(&pContext[1], 0i64, 0x5Cu);
pContext[0] = 26;
SearchDBContext = SdbpCreateSearchDBContext(pContext, v11, v13, v14, (_RTL_ARRAY *)pMatchMode);
if( SearchDBContext )
{
SearchDBContext = SdbpCheckForMatch(hSDB, v12, v7, pContext, &v20, &pdwFlags);
if( SearchDBContext )
{
v16 = (INT64 *)MachineInfo;
if( MachineInfo )
{
SearchDBContext = SdbpMatchAcpi(v12, v7, *(tagSDBDEVICEINFO **)MachineInfo);
if( SearchDBContext )
{
SearchDBContext = SdbpMatchOem(v12, v7, v16[1]);
if( SearchDBContext )
{
SearchDBContext = SdbpMatchBios(v12, v7, v16[2]);
if( SearchDBContext )
SearchDBContext = SdbpMatchCpu(v12, v7, v16[3]);
}
}
}
}
}
}
SdbpReleaseSearchDBContext(pContext);
AslFileMappingDelete((UINT64)v11);
return SearchDBContext;
}Referenced by:
SdbGetDatabaseMatchEx