KiUnstackDetachProcess
VOID __stdcall KiUnstackDetachProcess(_KAPC_STATE *ApcState, UINT64 Force){
_EPROCESS *Process;
char v3;
_ETHREAD *CurrentThread;
_EPROCESS *v5;
int v6;
unsigned __int8 CurrentIrql;
struct _KPRCB *CurrentPrcb;
$F25F8C4BA33AF922A5F1AF68CD89DDDF *v9;
UINT64 v10;
_DWORD *SchedulerAssist;
struct _KPRCB *v12;
_DWORD *v13;
int v14;
UINT64 SpinCount;
int v16;
UINT64 v17;
v16 = Force;
Process = ApcState->Process;
v3 = Force;
if( Process != (_EPROCESS *)1 )
{
if( Process )
{
KiDetachProcess(ApcState, Force);
}
else
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v5 = CurrentThread->Tcb.ApcState.Process;
v6 = Force & 2;
if( (Force & 2) != 0 )
{
CurrentIrql = 15;
}
else
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
CurrentPrcb = KeGetCurrentPrcb();
LODWORD(SpinCount) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)&CurrentThread->Tcb.ThreadLock, 0i64) )
{
do
KeYieldProcessorEx(&SpinCount);
while( CurrentThread->Tcb.ThreadLock );
SchedulerAssist = CurrentPrcb->SchedulerAssist;
if( SchedulerAssist && CurrentPrcb->NestingLevel <= 1u )
++SchedulerAssist[6];
}
}
if( CurrentThread->Tcb.ApcState.KernelApcPending )
{
do
{
if( CurrentIrql || CurrentThread->Tcb.SpecialApcDisable )
break;
KiReleaseThreadLockSafe((INT64)CurrentThread);
__writecr8(0i64);
CurrentIrql = KeGetCurrentIrql();
__writecr8(2ui64);
v12 = KeGetCurrentPrcb();
LODWORD(v17) = 0;
while( _interlockedbittestandset64((volatile signed __int32 *)&CurrentThread->Tcb.ThreadLock, 0i64) )
{
do
KeYieldProcessorEx(&v17);
while( CurrentThread->Tcb.ThreadLock );
v13 = v12->SchedulerAssist;
if( v13 && v12->NestingLevel <= 1u )
{
v14 = v13[6] + 1;
v13[6] = v14;
}
}
}
while( CurrentThread->Tcb.ApcState.KernelApcPending );
v3 = v16;
}
if( !CurrentThread->Tcb.ApcStateIndex
|| (CurrentThread->Tcb.ApcState.InProgressFlags & 1) != 0
|| (v9 = &CurrentThread->Tcb.152, ($F25F8C4BA33AF922A5F1AF68CD89DDDF *)v9->ApcState.ApcListHead[0].Flink != v9)
|| (unsigned __int8 *)CurrentThread->Tcb.ApcState.ApcListHead[1].Flink != &CurrentThread->Tcb.ApcStateFill[16] )
{
KeBugCheck(6u);
}
CurrentThread->Tcb._bf_0 |= 0x800u;
KiMoveApcState(&CurrentThread->Tcb.SavedApcState, &CurrentThread->Tcb.ApcState);
CurrentThread->Tcb.SavedApcState.Process = 0i64;
CurrentThread->Tcb.ApcStateIndex = 0;
if( !v6 )
KiReleaseThreadLockSafe((INT64)CurrentThread);
KiSwapProcess(CurrentThread->Tcb.ApcState.Process, v5);
CurrentThread->Tcb._bf_0 &= ~0x800u;
if( !v6 )
__writecr8(CurrentIrql);
if( (v3 & 1) == 0 )
KiDecrementProcessStackCount(&v5->Pcb);
if( ($F25F8C4BA33AF922A5F1AF68CD89DDDF *)v9->ApcState.ApcListHead[0].Flink != v9 )
{
LOBYTE(v10) = 1;
CurrentThread->Tcb.ApcState.KernelApcPending = 1;
HalRequestSoftwareInterrupt(v10);
}
}
}
}Referenced by:
AlpcViewDestroyProcedure
AlpcpExposeViewAttributeInSenderContext
AlpcpForceUnlinkSecureView
AlpcpPrepareViewForDelivery
AlpcpRestoreWriteAccess
CmCallbackGetKeyObjectID
CmCallbackGetKeyObjectIDEx
CmEnumerateValueKey
CmEtwRunDown
CmLoadKey
CmReconcileAndValidateAllHives
CmRmFinalizeRecovery
CmpAddRemoveContainerToCLFSLog
CmpCleanUpKCBCacheTable
CmpCleanupLightWeightTransaction
CmpDelayCloseWorker
CmpDetachFromRegistryProcess
CmpEtwDumpKcb
CmpFinishSystemHivesLoad
CmpFlushBackupHive
CmpForceFlushWorker
CmpHandlePageFileOpenNotification
CmpInitHiveFromFile
CmpInitializeRegistryProcess
CmpMountPreloadedHives
CmpPublishEventForPcaResolver
CmpRmUnDoPhase
CmpSearchKeyControlBlockTreeEx
DbgkQueueUserExceptionReport
DbgkSendSystemDllMessages
DbgkUserReportWorkRoutine
DbgkpMarkProcessPeb
DbgkpPostFakeProcessCreateMessages
EmpCacheBiosDate
EmpMapPhysicalAddress
EtwQueryProcessTelemetryInfo
EtwTraceAppStateChange
EtwpAddRegEntryToGroup
EtwpCovSampEnumerateProcess
EtwpProcessEnumCallback
EtwpPsProvProcessEnumCallback
EtwpRealtimeInjectEtwBuffer
EtwpTiQueryVad
EtwpTrackGuidEntryRegistrations
EtwpUMGLEnabled
EtwpUpdateProcessTracingCallback
EtwpWriteProcessEvent
ExSweepHandleTable
ExpDebuggerWorker
ExpSvmServicePageFault
ExpWnfWriteStateData
IoRaiseHardError
IoRemoveIoCompletion
IopIsNotNativeDriverImage
IopRaiseHardError
KeForceDetachProcess
KeSecureProcess
KiTpReadImageData
KiTpWriteMemory
MiAllocateChildVads
MiCloneProcessAddressSpace
MiCombineIdenticalPages
MiCopyLargeVad
MiCopyPagesIntoEnclave
MiDeleteFinalPageTables
MiDeleteInsertedCloneVads
MiEmptyAccessLogs
MiFindNextEnclaveBoundary
MiFlushAllPages
MiGetWorkingSetInfoEx
MiGetWorkingSetInfoList
MiHotPatchAllProcesses
MiInSwapSharedWorkingSetWorker
MiInSwapStoreWorker
MiInsertChildVads
MiLoadDataIntoVsmEnclave
MiLockDownWorkingSet
MiLogHotPatchRundown
MiMapImageForEnclaveUse
MiMapImageInSystemSpace
MiMapViewOfSection
MiQueryMemoryPhysicalContiguity
MiQueryProcessActivePatches
MiScrubProcesses
MiUnmapImageForEnclaveUse
MiUnmapImageInSystemSpace
MiUnmapViewOfSection
MiWaitForInPageComplete
MmAssignProcessToJob
MmCopyVirtualMemory
MmCreatePeb
MmCreateShadowMapping
MmCreateTeb
MmDeleteShadowMapping
MmDeleteTeb
MmDetachSession
MmEnforceWorkingSetLimit
MmEnumerateAddressSpaceAndReferenceImages
MmFlushVirtualMemory
MmFreeVirtualMemory
MmInitializeHandBuiltProcess2
MmInitializeProcessAddressSpace
MmIsFileMapped
MmNewProcessInitialized
MmPrefetchVirtualMemory
MmProbeAndLockProcessPages
MmProcessWorkingSetControl
MmSecureVirtualMemoryAgainstWrites
MmSetCommitReleaseEligibility
MmUpdateOldWorkingSetPages
NtCompressKey
NtCreateEnclave
NtEnumerateValueKey
NtFlushKey
NtQueryMultipleValueKey
NtRenameKey
NtRestoreKey
NtRollbackRegistryTransaction
NtSaveKeyEx
NtSaveMergedKeys
NtThawRegistry
ObCloseHandleTableEntry
ObSetHandleAttributes
ObpDecrementHandleCount
ObpIncrementHandleCountEx
PfSnAsyncPrefetchWorker
PfSnPopulateReadList
PoEnergyContextStart
PsDispatchIumService
PsMapSystemDlls
PsQueryProcessCommandLine
PsQueryProcessExceptionFlags
PsStartSiloMonitor
PsUnregisterSiloMonitor
PspAllocatePartition
PspAllocateThread
PspApplyWorkingSetLimitsToProcess
PspChangeProcessExecutionState
PspCreateSecureThread
PspDeleteUserStack
PspInitPhase3
PspIsProcessReadyForRemoteThread
PspIumGetPhysicalPage
PspProcessDynamicEHContinuationTargets
PspRundownSingleProcess
PspSetupReservedUserMappings
PspSetupUserProcessAddressSpace
PspSetupUserShadowStack
PspSetupUserStack
PspShutdownCsrProcess
PspTrySetProcessPebThrottlingFlags
PspWow64InitThread
PspWow64ReadOrWriteThreadCpuArea
PspWow64SetupUserStack
PspWritePebAffinityInfo
PspWriteTebIdealProcessor
PspWriteTebImpersonationInfo
SMKM_STORE::SmStCleanup
SMKM_STORE::SmStDirectRead
SMKM_STORE::SmStPrioritizeRegionsStore
SMKM_STORE::SmStSwapStore
SMKM_STORE::SmStTrimWsStore
SepAdtLogAuditRecord
SepCleanupLUIDDeviceMapDirectory
SepRmCallLsa
SmFirstTimeInit
SmProcessStoreMemoryPriorityRequest
VmpPrefetchWorker