PiDmGetObjectConstraintList
NTSTATUS __stdcall PiDmGetObjectConstraintList(
PI_DM_LIST_ID ListId,
WCHAR *ConstraintObjectName,
VOID *MatchCallbackContext,
WCHAR *Buffer,
UINT64 BufferLength,
UINT64 *RequiredLength){
unsigned int *v6;
unsigned int v7;
_WORD *v8;
NTSTATUS v11;
int v12;
unsigned int v13;
INT64 v15[2];
__int128 v16;
_PI_DM_OBJECT *Object;
unsigned int *v18;
v6 = v18;
v7 = (unsigned int)RequiredLength;
v8 = (_WORD *)BufferLength;
*v18 = 0;
Object = 0i64;
*(_OWORD *)v15 = 0i64;
v16 = 0i64;
if( v7 )
*v8 = 0;
v11 = PiDmGetObject(PiDmListDefs[5 * ListId], ConstraintObjectName, &Object);
v12 = v11;
if( v11 < 0 )
{
if( v11 != -1073741772 )
goto LABEL_10;
v12 = 0;
}
else
{
v15[0] = (INT64)PiDmCmObjectMatchCallback;
v15[1] = (INT64)Buffer;
*(_QWORD *)&v16 = v8;
*((_QWORD *)&v16 + 1) = v7;
v12 = PiDmListEnumObjectsWithCallback(
(unsigned int)ListId,
(_EX_PUSH_LOCK *)Object,
(INT64)PiDmGetObjectListCallback,
(INT64)v15);
if( v12 < 0 )
goto LABEL_10;
*v6 = HIDWORD(v16);
}
if( *v6 )
{
v13 = *v6 + 1;
*v6 = v13;
if( v8 && v7 >= v13 )
v8[v13 - 1] = 0;
else
v12 = -1073741789;
}
LABEL_10:
if( Object )
PiDmObjectRelease(Object);
return v12;
}Referenced by:
PiDmGetCmObjectConstraintListFromCache