PnprMapTargetSparePhysicalPages

INT64 __fastcall PnprMapTargetSparePhysicalPages(
        _LARGE_INTEGER TargetPhysicalAddress,
        _LARGE_INTEGER SparePhysicalAddress,
        _LARGE_INTEGER *NumberOfBytes,
        VOID **TargetAddress,
        VOID **SpareAddress){
  __int64 v5; 
  int v6; 
  __int64 v7; 
  UINT64 v10; 
  int v11; 
  int v12; 
  UINT64 v13; 
  int v14; 
  int v15; 
  LODWORD(v5) = *((_DWORD *)KeGetPcr() + 105);
  v6 = 0;
  v7 = (unsigned int)v5;
  if( TargetPhysicalAddress.QuadPart == 0x7FFFFFFFFFFFFFFFi64
    || (v6 = PnprMapPhysicalPages(
               (INT64 *)(*(_QWORD *)(PnprContext + 136) + 24 * v5),
               TargetPhysicalAddress.QuadPart,
               (UINT64 *)&NumberOfBytes->QuadPart),
        v6 >= 0) )
  {
    if( SparePhysicalAddress.QuadPart != 0x7FFFFFFFFFFFFFFFi64 )
    {
      v6 = PnprMapPhysicalPages(
             (INT64 *)(*(_QWORD *)(PnprContext + 144) + 24 * v7),
             SparePhysicalAddress.QuadPart,
             (UINT64 *)&NumberOfBytes->QuadPart);
      if( v6 < 0 )
      {
        v13 = PnprContext;
        v14 = *(_DWORD *)(PnprContext + 20984);
        if( !v14 )
          v14 = 4235;
        *(_DWORD *)(PnprContext + 20984) = v14;
        v15 = *(_DWORD *)(v13 + 20988);
        if( !v15 )
          v15 = 10;
        *(_DWORD *)(v13 + 20988) = v15;
      }
    }
  }
  else
  {
    v10 = PnprContext;
    v11 = *(_DWORD *)(PnprContext + 20984);
    if( !v11 )
      v11 = 4223;
    *(_DWORD *)(PnprContext + 20984) = v11;
    v12 = *(_DWORD *)(v10 + 20988);
    if( !v12 )
      v12 = 10;
    *(_DWORD *)(v10 + 20988) = v12;
  }
  return(unsigned int)v6;
}

Referenced by:

No references.