CMFUnmapModules
NTSTATUS __stdcall CMFUnmapModules(UINT64 ulWhat){
__int16 v1;
PADAPTER_OBJECT *v2;
PADAPTER_OBJECT *v3;
__int64 v4;
struct _DMA_ADAPTER *v5;
struct _DMA_ADAPTER *v6;
v1 = ulWhat;
if( (ulWhat & 0x20) != 0 )
{
v2 = (PADAPTER_OBJECT *)CMFSegmentSectionPointer;
_InterlockedExchange64((volatile __int64 *)&CMFSegmentSectionPointer, 0i64);
if( v2 )
{
v3 = v2;
v4 = 30i64;
do
{
if( *v3 )
{
HalPutDmaAdapter(*v3);
*v3 = 0i64;
}
++v3;
--v4;
}
while( v4 );
ExFreePoolWithTag(v2, 0);
}
}
if( (v1 & 0x10) != 0 )
{
v5 = CMFDirectorySectionPointer;
if( CMFDirectorySectionPointer )
{
if( v5 == (struct _DMA_ADAPTER *)_InterlockedCompareExchange64(
(volatile signed __int64 *)&CMFDirectorySectionPointer,
0i64,
(signed __int64)CMFDirectorySectionPointer) )
HalPutDmaAdapter(v5);
}
}
if( (v1 & 0x100) != 0 )
{
v6 = CMFHitsSectionPointer;
if( CMFHitsSectionPointer )
{
if( v6 == (struct _DMA_ADAPTER *)_InterlockedCompareExchange64(
(volatile signed __int64 *)&CMFHitsSectionPointer,
0i64,
(signed __int64)CMFHitsSectionPointer) )
HalPutDmaAdapter(v6);
}
}
return 0;
}Referenced by:
NtMapCMFModule