PiDrvDbLoadNodeWorkerCallback
VOID __stdcall PiDrvDbLoadNodeWorkerCallback(VOID *Parameter){
unsigned __int16 *v1;
NTSTATUS Hive;
int v4;
INT64 *v5;
_DWORD *v6;
__int64 v7;
WCHAR v8;
int v9;
INT64 v10;
INT64 v11;
INT64 v12;
int v13;
INT64 v14;
VOID *Handle;
v1 = (unsigned __int16 *)((char *)Parameter + 16);
LODWORD(v12) = 1;
Handle = 0i64;
v13 = 0;
LODWORD(v14) = 0;
PnpDiagnosticTraceObject(&KMPnPEvt_DriverDatabaseLoad_Start, (unsigned __int16 *)Parameter + 8);
PnpDiagnosticTraceObject(&KMPnPEvt_DriverDatabaseLoaded_Start, v1);
Hive = PiDrvDbLoadHive((_UNICODE_STRING *)Parameter + 2, (_UNICODE_STRING *)Parameter + 3, 0i64);
v4 = Hive;
if( Hive < 0 )
{
if( Hive == -1073741772 || Hive == -1073741766 )
*((_BYTE *)Parameter + 80) = 1;
goto LABEL_35;
}
v5 = (INT64 *)((char *)Parameter + 72);
if( SysCtxRegOpenKey(0i64, Handle, L"DriverDatabase", 0, 0x2000000u, (VOID **)Parameter + 9) < 0 )
{
*((_BYTE *)Parameter + 80) = 1;
goto LABEL_5;
}
if( *((_QWORD *)Parameter + 60) == 0xFFFFFFFFi64 )
{
if( PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
*((_QWORD *)Parameter + 3),
7i64,
*v5,
0i64,
(INT64)&DEVPKEY_DriverDatabase_UnloadTimeout,
(INT64)&v12,
(INT64)&v14) >= 0
&& (_DWORD)v12 == 7
&& v13 == 4 )
{
v7 = (unsigned int)v14;
}
else
{
v7 = 120000i64;
LODWORD(v14) = 120000;
}
if( (_DWORD)v7 != -1 )
*((_QWORD *)Parameter + 60) = -10000 * v7;
}
v6 = (char *)Parameter + 496;
if( *((_DWORD *)Parameter + 124) != 259 )
goto LABEL_5;
if( PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
*((_QWORD *)Parameter + 3),
7i64,
*v5,
0i64,
(INT64)&DEVPKEY_DriverDatabase_SetupOptions,
(INT64)&v12,
(INT64)Parameter + 492) < 0
|| (_DWORD)v12 != 7
|| v13 != 4 )
{
*((_DWORD *)Parameter + 123) = 51;
}
if( PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
*((_QWORD *)Parameter + 3),
7i64,
*v5,
0i64,
(INT64)&DEVPKEY_DriverDatabase_SetupStatus,
(INT64)&v12,
(INT64)Parameter + 496) < 0
|| (_DWORD)v12 != 24
|| v13 != 4 )
{
*v6 = 259;
LABEL_27:
v9 = PiDrvDbSetupNodeHive((__int64)Parameter, *((WCHAR **)Parameter + 3), v8);
v10 = *v5;
v11 = *((_QWORD *)Parameter + 3);
*v6 = v9;
PnpSetObjectProperty(
*(&stru_140CF2E80 + 607),
v11,
7u,
v10,
0i64,
(__int64)&DEVPKEY_DriverDatabase_SetupStatus,
24,
(__int64)Parameter + 496,
4,
0);
goto LABEL_5;
}
if( *v6 == 259 )
goto LABEL_27;
LABEL_5:
ZwClose((_HANDLE)Handle);
ZwResetEvent(*((VOID **)Parameter + 59), 0i64);
v4 = PiDrvDbUnloadHive((_UNICODE_STRING *)Parameter + 2, *((VOID **)Parameter + 59));
if( v4 == 259 )
{
v4 = 0;
goto LABEL_7;
}
if( v4 < 0 )
v4 = 0;
ZwSetEvent(*((VOID **)Parameter + 59), 0i64);
LABEL_35:
if( v4 == -1073741431 )
v4 = -1073741077;
LABEL_7:
*((_DWORD *)Parameter + 64) = v4;
KeSetEvent((PRKEVENT)((char *)Parameter + 200), 0, 0);
PnpDiagnosticTraceObjectWithStatus(&KMPnPEvt_DriverDatabaseLoad_Stop, v1, v4);
if( v4 < 0 )
PnpDiagnosticTraceObjectWithStatus(&KMPnPEvt_DriverDatabaseLoaded_Stop, v1, v4);
}Referenced by:
No references.