DrvDbGetDriverFileMappedProperty
NTSTATUS __stdcall DrvDbGetDriverFileMappedProperty(
_DRVDB_CONTEXT *pDrvDbCtx,
WCHAR *DriverFileName,
VOID *ObjectBaseKey,
_DEVPROPKEY *PropertyKey,
UINT64 *PropertyType,
UINT8 *PropertyBuffer,
UINT64 BufferSize,
UINT64 *PropertySize){
UINT8 *v8;
UINT64 *v10;
unsigned int pid;
__int64 v14;
UINT8 *v15;
int ObjectDatabaseNodeName;
__int64 v17;
__int64(**i)[3];
__int64(*v19)[3];
__int64 v20;
__int64 v22;
const _DRVDB_PROPERTY_REG_VALUE_MAP *v23;
UINT64 v24;
UINT64 v25;
INT64 v26;
v8 = (UINT8 *)PropertyType;
v10 = PropertySize;
v26 = 0i64;
*(_DWORD *)PropertyType = 0;
*(_DWORD *)v10 = 0;
pid = PropertyKey->pid;
if( pid == 2 )
{
v14 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_NODE;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_NODE )
v14 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x5008C7D4C8250077i64;
if( !v14 )
{
v15 = PropertyBuffer;
LODWORD(v24) = (unsigned int)BufferSize >> 1;
*(_DWORD *)v8 = 18;
ObjectDatabaseNodeName = DrvDbGetObjectDatabaseNodeName(
(INT64 *)pDrvDbCtx,
4i64,
(INT64)DriverFileName,
v15,
v24,
v10);
if( (int)(ObjectDatabaseNodeName + 0x80000000) < 0 || ObjectDatabaseNodeName == -1073741789 )
*(_DWORD *)v10 *= 2;
goto LABEL_21;
}
}
v17 = 0i64;
for( i = &off_1400099E0; ; i += 5 )
{
v19 = *i;
if( LODWORD((**i)[2]) == pid )
{
v20 = (*v19)[0] - *(_QWORD *)&PropertyKey->fmtid.Data1;
if( (*v19)[0] == *(_QWORD *)&PropertyKey->fmtid.Data1 )
v20 = (*v19)[1] - *(_QWORD *)PropertyKey->fmtid.Data4;
if( !v20 )
break;
}
v17 = (unsigned int)(v17 + 1);
if( (unsigned int)v17 >= 2 )
return -1073741802;
}
v22 = 5 * v17;
v23 = (const _DRVDB_PROPERTY_REG_VALUE_MAP *)(&off_1400099E0 + 5 * v17);
if( !v23 )
return -1073741802;
if( !ObjectBaseKey )
{
ObjectDatabaseNodeName = DrvDbOpenDriverFileRegKey(
(INT64 *)pDrvDbCtx,
(INT64)DriverFileName,
1i64,
0,
(INT64)&v26,
0i64);
if( ObjectDatabaseNodeName < 0 )
goto LABEL_21;
ObjectBaseKey = (VOID *)v26;
}
LODWORD(v25) = BufferSize;
ObjectDatabaseNodeName = DrvDbGetRegValueMappedProperty((VOID *)v22, ObjectBaseKey, v23, v8, PropertyBuffer, v25, v10);
LABEL_21:
if( v26 )
ZwClose(v26);
return ObjectDatabaseNodeName;
}Referenced by:
DrvDbDispatchDriverFile