DrvDbSetDriverInfFileMappedProperty
NTSTATUS __stdcall DrvDbSetDriverInfFileMappedProperty(
_DRVDB_CONTEXT *pDrvDbCtx,
WCHAR *DriverInfFileName,
VOID *ObjectBaseKey,
_DEVPROPKEY *PropertyKey,
UINT64 PropertyType,
VOID *PropertyBuffer,
UINT64 PropertySize){
unsigned int pid;
__int64 v11;
__int64(**i)[3];
__int64(*v13)[3];
__int64 v14;
__int64 v15;
__int64(**v16)[3];
unsigned int v17;
int v18;
__int64 v20;
INT64 v21;
v21 = 0i64;
pid = PropertyKey->pid;
if( pid == 2 )
{
v20 = *(_QWORD *)&PropertyKey->fmtid.Data1 - DEVPKEY_NODE;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == DEVPKEY_NODE )
v20 = *(_QWORD *)PropertyKey->fmtid.Data4 + 0x5008C7D4C8250077i64;
if( !v20 )
return -1073741790;
}
v11 = 0i64;
for( i = &off_140001C60; ; i += 5 )
{
v13 = *i;
if( LODWORD((**i)[2]) == pid )
{
v14 = (*v13)[0] - *(_QWORD *)&PropertyKey->fmtid.Data1;
if( (*v13)[0] == *(_QWORD *)&PropertyKey->fmtid.Data1 )
v14 = (*v13)[1] - *(_QWORD *)PropertyKey->fmtid.Data4;
if( !v14 )
break;
}
v11 = (unsigned int)(v11 + 1);
if( (unsigned int)v11 >= 4 )
return -1073741802;
}
v15 = 5 * v11;
v16 = &off_140001C60 + v15;
if( !v16 )
return -1073741802;
v17 = PropertyType;
if( (_DWORD)PropertyType != *((_DWORD *)v16 + 2) && (_DWORD)PropertyType )
return -1073741811;
if( !ObjectBaseKey )
{
v18 = DrvDbOpenDriverInfFileRegKey((INT64 *)pDrvDbCtx, (INT64)DriverInfFileName, 2i64, 0, (INT64)&v21, 0i64);
if( v18 < 0 )
goto LABEL_13;
ObjectBaseKey = (VOID *)v21;
}
v18 = DrvDbSetRegValueMappedProperty(
(VOID *)v15,
(_DRVDB_PROPERTY_REG_VALUE_MAP *)ObjectBaseKey,
(UINT64)v16,
(UINT8 *)v17,
(UINT64)PropertyBuffer);
LABEL_13:
if( v21 )
ZwClose(v21);
return v18;
}Referenced by:
DrvDbDispatchDriverInfFile