DrvDbSuspendDatabase
INT64 __stdcall DrvDbSuspendDatabase(WCHAR *DriverDatabaseId, UINT8 Suspend){
char v2;
__int64 v3;
int DatabaseNode;
char v5;
const WCHAR *v6;
__int64 *i;
int v9;
unsigned int v10;
const UNICODE_STRING *v11;
v3 = PiDrvDbCtx;
DatabaseNode = 0;
v11 = 0i64;
v5 = v2;
v6 = (const WCHAR *)Suspend;
if( Suspend && wcsicmp((const wchar_t *)Suspend, L"*") )
{
DatabaseNode = DrvDbFindDatabaseNode(v3, v6, &v11);
if( DatabaseNode >= 0 )
{
if( v5 )
LODWORD(v11[3].Buffer) |= 4u;
else
LODWORD(v11[3].Buffer) &= ~4u;
}
}
else
{
for( i = *(__int64 **)(v3 + 16); i != (__int64 *)(v3 + 16); i = (__int64 *)*i )
{
v9 = *((_DWORD *)i + 14);
if( v5 )
v10 = v9 | 4;
else
v10 = v9 & 0xFFFFFFFB;
*((_DWORD *)i + 14) = v10;
}
}
return(unsigned int)DatabaseNode;
}Referenced by:
PiDrvDbSuspendNodes