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