HalpDmaControllerFlushChannel
VOID __stdcall HalpDmaControllerFlushChannel(_HALP_DMA_CONTROLLER *DmaController, UINT64 ChannelNumber){
unsigned __int64 BugCheckParameter4;
unsigned __int8 CurrentIrql;
char v5;
unsigned __int64 *p_Lock;
_HALP_DMA_CHANNEL *v7;
BugCheckParameter4 = (unsigned int)ChannelNumber;
CurrentIrql = KeGetCurrentIrql();
v5 = 0;
if( CurrentIrql == 15 )
{
p_Lock = &DmaController->Lock;
}
else
{
CurrentIrql = KeGetCurrentIrql();
__writecr8(DmaController->Irql);
p_Lock = &DmaController->Lock;
KxAcquireSpinLock(&DmaController->Lock);
v5 = 1;
}
v7 = &DmaController->Channels[BugCheckParameter4];
if( !v7->Complete && v7->CurrentCompletionRoutine )
KeBugCheckEx(0xE6u, (PVOID)0x23, 0i64, (PVOID)DmaController->ControllerId, (PVOID)BugCheckParameter4);
DmaController->Operations.FlushChannel(DmaController->ExtensionData, BugCheckParameter4);
v7->CurrentCompletionRoutine = 0i64;
v7->CurrentCompletionContext = 0i64;
v7->Complete = 0;
if( v5 )
{
KxReleaseSpinLock(p_Lock);
__writecr8(CurrentIrql);
}
}Referenced by:
HalFlushAdapterBuffersEx
IoFlushAdapterBuffersV3