IopLoadUnloadDriver
VOID __stdcall IopLoadUnloadDriver(PVOID Parameter){
__int64 v2;
int v3;
INT64 DriverEntryStatus;
HANDLE KeyHandle;
LODWORD(DriverEntryStatus) = 0;
v2 = *((_QWORD *)Parameter + 7);
KeyHandle = 0i64;
if( v2 )
{
(*(void(**)(void))(v2 + 104))();
v3 = 0;
}
else
{
v3 = IopOpenRegistryKey(&KeyHandle, 0i64, *((UNICODE_STRING **)Parameter + 8), 0x20019ui64, 0);
if( v3 >= 0 )
{
v3 = IopLoadDriver(KeyHandle, 1u, 0, &DriverEntryStatus);
if( v3 == -1073740955 )
{
v3 = DriverEntryStatus;
}
else if( v3 == -1073740914 )
{
v3 = -1073741772;
}
IopCallDriverReinitializationRoutines(0);
}
}
*((_DWORD *)Parameter + 18) = v3;
KeSetEvent((PRKEVENT)((char *)Parameter + 32), 0);
}Referenced by:
IopCompleteUnloadOrDelete
IopLoadDriverImage