MiMakeIoRangePermanentDpc

VOID __stdcall MiMakeIoRangePermanentDpc(
        KDPC *Dpc,
        PVOID DeferredContext,
        PVOID SystemArgument1,
        PVOID SystemArgument2){
  signed __int32 v6; 
  unsigned int v7; 
  signed __int32 v8; 
  unsigned int v9; 
  UINT64 SpinCount; 
  UINT64 v11; 
  LODWORD(SpinCount) = 0;
  v6 = _InterlockedDecrement((volatile signed __int32 *)SystemArgument2);
  v7 = ~v6 & 0x80000000;
  if( (v6 & 0x7FFFFFFF) != 0 )
  {
    while( (*(_DWORD *)SystemArgument2 & 0x80000000) != v7 )
      KeYieldProcessorEx(&SpinCount);
  }
  else
  {
    *(_DWORD *)SystemArgument2 = v7 | *((_DWORD *)SystemArgument2 + 1);
    *((_DWORD *)DeferredContext + 2) = MiMakeIoRangePermanent(*(_QWORD *)DeferredContext);
  }
  v8 = _InterlockedDecrement((volatile signed __int32 *)SystemArgument2);
  v9 = ~v8 & 0x80000000;
  if( (v8 & 0x7FFFFFFF) != 0 )
  {
    LODWORD(v11) = 0;
    while( (*(_DWORD *)SystemArgument2 & 0x80000000) != v9 )
      KeYieldProcessorEx(&v11);
  }
  else
  {
    *(_DWORD *)SystemArgument2 = v9 | *((_DWORD *)SystemArgument2 + 1);
  }
  _InterlockedDecrement((volatile signed __int32 *)SystemArgument1);
}

Referenced by:

No references.