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