MiApplyHotPatchToDriver

NTSTATUS __stdcall MiApplyHotPatchToDriver(INT64 a1, INT64 a2, _UNICODE_STRING *a3, INT64 a4){
  INT64 v4; 
  int v7; 
  int v8; 
  NTSTATUS v9; 
  unsigned int v10; 
  INT64 v12; 

  v4 = PsLoadedModuleList;
  v7 = a2;
  v8 = a1;
  v9 = -1073741515;
  while( (INT64 *)v4 != &PsLoadedModuleList )
  {
    if( MiGetSystemRegionType(*(_QWORD *)(v4 + 48)) != 1
      && *(_DWORD *)(v4 + 120) == v8
      && *(_DWORD *)(v4 + 156) == v7
      && (*(_DWORD *)(v4 + 196) & 0x21) == 0 )
    {
      v9 = 0;
      if( a3 )
      {
        if( !a4 )
          return v9;
        v10 = MiApplyHotPatchToLoadedDriver(v4, a3, a4);
      }
      else
      {
        if( !*(_QWORD *)(v4 + 280) )
          return v9;
        v10 = MiUnapplyDriverHotPatch(v4, v4 + 160);
      }
      v9 = v10;
      LODWORD(v12) = 1;
      MiLogHotPatchOperationStatus(
        *(unsigned int *)(v4 + 120),
        *(unsigned int *)(v4 + 156),
        (PFN_WDFCX_DEVICE_POST_SELF_MANAGED_IO_INIT *)a3,
        v10,
        v12);
      return v9;
    }
    v4 = *(_QWORD *)v4;
  }
  return v9;
}

Referenced by:

MiLoadHotPatch
MiUnloadHotPatch
MmRegisterHotPatch