HalAllocateCrashDumpRegisters
PVOID __stdcall HalAllocateCrashDumpRegisters(PADAPTER_OBJECT AdapterObject, PULONG NumberOfMapRegisters){
ULONG v2;
int v5;
__int64 v6;
PVOID result;
_DMA_OPERATIONS *MapRegistersAtHighLevel;
int v9;
__int64 v10;
v2 = 0;
if( LOBYTE(AdapterObject[27].Version) || !*((_BYTE *)&AdapterObject[27].Size + 3) )
{
if( HalpDmaHibernateRegisterPhase == 1 )
{
v5 = HalpDmaHibernatePhase1RegisterSetIndex;
v6 = 2i64 * (unsigned int)HalpDmaHibernatePhase1RegisterSetIndex;
*NumberOfMapRegisters = HalpDmaHibernateRegisterSets[2 * (unsigned int)HalpDmaHibernatePhase1RegisterSetIndex + 1];
result = (PVOID)HalpDmaHibernateRegisterSets[v6];
AdapterObject[14].DmaOperations = (_DMA_OPERATIONS *)result;
*(_DWORD *)&AdapterObject[15].Version = *NumberOfMapRegisters;
HalpDmaHibernatePhase1RegisterSetIndex = v5 + 1;
return result;
}
if( *NumberOfMapRegisters > *(_DWORD *)&AdapterObject[14].Version )
{
*(_DWORD *)&AdapterObject[15].Version = 0;
result = 0i64;
*NumberOfMapRegisters = 0;
return result;
}
MapRegistersAtHighLevel = (_DMA_OPERATIONS *)HalpDmaAllocateMapRegistersAtHighLevel(
(__int64)AdapterObject,
(int *)NumberOfMapRegisters);
AdapterObject[14].DmaOperations = MapRegistersAtHighLevel;
if( MapRegistersAtHighLevel )
{
v9 = HalpDmaHibernateRegisterSetIndex;
if( (unsigned int)HalpDmaHibernateRegisterSetIndex < 4 )
{
v10 = 2i64 * (unsigned int)HalpDmaHibernateRegisterSetIndex;
HalpDmaHibernateRegisterSets[v10] = (__int64)MapRegistersAtHighLevel;
LODWORD(HalpDmaHibernateRegisterSets[v10 + 1]) = *NumberOfMapRegisters;
HalpDmaHibernateRegisterSetIndex = v9 + 1;
}
}
else
{
*NumberOfMapRegisters = 0;
}
v2 = *NumberOfMapRegisters;
}
else
{
AdapterObject[14].DmaOperations = 0i64;
}
*(_DWORD *)&AdapterObject[15].Version = v2;
result = AdapterObject[14].DmaOperations;
HalpDmaHibernateAdapter = AdapterObject;
return result;
}Referenced by:
VfAllocateCrashDumpRegisters