Отладка приложений


Использование CrashHandler API - часть 4


 if ( NULL == hMod) 

{

return ( FALSE); 

}_

// Распределить память под временный массив. Этот массив должен

 // быть распределен из памяти, наличие которой гарантировано, даже // если процесс разрушается. Если процесс разрушается,

 // куча времени выполнения, вероятно, небезопасна, поэтому 

// временный массив распределяется в куче процесса. 

HMODULE * phTemp = (HMODULE*)

HeapAlloc ( GetProcessHeap () ,

 HEAP_ZERO_MEMORY |

HEAP_GENERATE_EXCEPTIONS , 

( sizeof ( HMODULE) * ( g_uiModCount+l)) );

 ASSERT ( NULL != phTemp);

 if ( NULL = phTemp) 

{

TRACE0 ( "Serious trouble in the house! _ "

 "HeapAlloc failed!!!\n" );

return ( FALSE); 

}

if ( NULL = g_ahMod) 

{

g_ahMod = phTemp;

  g_ahMod[ 0 ] = hMod;

 g_uiModCount++; 

}

else

 {

// Копировать старые значения. 

CopyMemory ( phTemp ,

 g_ahMod ,

sizeof ( HMODULE) * g_uiModCount) ; 

// Освободить старую память.

VERIFY ( HeapFree ( GetProcessHeap (), 0, g_ahMod));

 g_ahMod = phTemp; 

g_ahMod[ g_uiModCount ] = hMod; 

g_uiModCount++; 

}

return ( TRUE);

 }

UINT _stdcall GetLimitModuleCount ( void) 

{

return ( g_uiModCount); 

}

int _stdcall GetLimitModulesArray ( HMODULE * pahMod, UINT uiSize)

 {

int iRet;

_try

{

ASSERT ( FALSE == IsBadWritePtr ( pahMod,

uiSize * sizeof ( HMODULE)));

 if ( TRUE == IsBadWritePtr ( pahMod,

uiSize * sizeof ( HMODULE)))

 {

iRet = GLMA_BADPARAM;

 _leave;

 }.

if ( uiSize < g_uiModCount) 

{

iRet = GLMA_BUFFTOOSMALL; 

_leave; 

}

CopyMemory ( pahMod ,

 g_ahMod ,

sizeof ( HMODULE) * g_uiModCount);

 iRet = GLMA_SUCCESS;

 }

_except ( EXCEPTION_EXECUTE_HANDLER) 

{

iRet = GLMA_FAILURE; 

}

return ( iRet); 

}

LONG _stdcall GrashHandlerExceptionFilter ( EXCEPTION_POINTERS* pExPtrs) { 




Начало  Назад  Вперед



Книжный магазин