KeWriteProtectProcessorState

CHAR __stdcall KeWriteProtectProcessorState(INT64 a1, UINT64 a2, INT64 a3, INT64 a4){
  __int64 v4; 
  bool v6; 
  NTSTATUS v7; 
  UINT64 v8; 

  v4 = *(_QWORD *)a1;
  v6 = VslVsmEnabled != 0;
  LOBYTE(v7) = MmSetPageProtection(*(VOID **)(a1 + 56), 0x1000ui64, 2ui64);
  if( v6 )
  {
    LOBYTE(v7) = MmSetPageProtection((VOID *)(v4 & 0xFFFFFFFFFFFFF000ui64), 0x1000ui64, 2ui64);
    if( KiKvaShadow )
      LOBYTE(v7) = MmSetPageProtection(*(VOID **)(a1 + 8), 0x1000ui64, 2ui64);
  }
  v8 = *(unsigned int *)(a1 + 420);
  if( (_DWORD)v8 )
  {
    if( VslVsmEnabled )
      LOBYTE(v7) = VslFinishStartSecureProcessor(v8);
  }
  else
  {
    v7 = KiShadowProcessorAllocation(a1 + 384, (CHAR *)(v4 - 12208));
    if( !v7 )
      KeBugCheck(0x7Du);
  }
  return v7;
}

Referenced by:

KiDynamicProcessorInitialization
MakeGdtReadOnly