static RPVOID osTrackerDiffThread ( rEvent isTimeToStop, RPVOID ctx ) { CryptoLib_Hash* prevServices = NULL; RU32 prevNServices = 0; CryptoLib_Hash* prevDrivers = NULL; RU32 prevNDrivers = 0; CryptoLib_Hash* prevAutoruns = NULL; RU32 prevNAutoruns = 0; rList snapshot = NULL; UNREFERENCED_PARAMETER( ctx ); while( !rEvent_wait( isTimeToStop, g_diff_timeout ) ) { rpal_debug_info( "looking for changes in os snapshots" ); if( NULL != ( snapshot = libOs_getServices( TRUE ) ) ) { _processSnapshot( snapshot, &prevServices, &prevNServices, RP_TAGS_SVC, RP_TAGS_NOTIFICATION_SERVICE_CHANGE ); rList_free( snapshot ); } if( rEvent_wait( isTimeToStop, MSEC_FROM_SEC( 5 ) ) ) { break; } if( NULL != ( snapshot = libOs_getDrivers( TRUE ) ) ) { _processSnapshot( snapshot, &prevDrivers, &prevNDrivers, RP_TAGS_SVC, RP_TAGS_NOTIFICATION_DRIVER_CHANGE ); rList_free( snapshot ); } if( rEvent_wait( isTimeToStop, MSEC_FROM_SEC( 5 ) ) ) { break; } if( NULL != ( snapshot = libOs_getAutoruns( TRUE ) ) ) { _processSnapshot( snapshot, &prevAutoruns, &prevNAutoruns, RP_TAGS_SVC, RP_TAGS_NOTIFICATION_AUTORUN_CHANGE ); rList_free( snapshot ); } rpal_debug_info( "finished updating snapshots" ); } FREE_AND_NULL( prevServices ); FREE_AND_NULL( prevDrivers ); FREE_AND_NULL( prevAutoruns ); return NULL; }
RPRIVATE RPVOID osTrackerDiffThread ( rEvent isTimeToStop, RPVOID ctx ) { CryptoLib_Hash* prevServices = NULL; RU32 prevNServices = 0; CryptoLib_Hash* prevDrivers = NULL; RU32 prevNDrivers = 0; CryptoLib_Hash* prevAutoruns = NULL; RU32 prevNAutoruns = 0; rList snapshot = NULL; UNREFERENCED_PARAMETER( ctx ); while( !rEvent_wait( isTimeToStop, g_diff_timeout ) ) { rpal_debug_info( "looking for changes in os snapshots" ); if( NULL != ( snapshot = libOs_getServices( TRUE ) ) ) { _processSnapshot( snapshot, &prevServices, &prevNServices, RP_TAGS_SVC, RP_TAGS_NOTIFICATION_SERVICE_CHANGE ); rList_free( snapshot ); } if( rEvent_wait( isTimeToStop, MSEC_FROM_SEC( 5 ) ) ) { break; } #ifdef RPAL_PLATFORM_WINDOWS // Drivers are only available on Windows if( NULL != ( snapshot = libOs_getDrivers( TRUE ) ) ) { _processSnapshot( snapshot, &prevDrivers, &prevNDrivers, RP_TAGS_SVC, RP_TAGS_NOTIFICATION_DRIVER_CHANGE ); rList_free( snapshot ); } if( rEvent_wait( isTimeToStop, MSEC_FROM_SEC( 5 ) ) ) { break; } #endif #if defined( RPAL_PLATFORM_WINDOWS ) || defined( RPAL_PLATFORM_MACOSX ) // Services are currently only available on OSX and Windows if( NULL != ( snapshot = libOs_getAutoruns( TRUE ) ) ) { _processSnapshot( snapshot, &prevAutoruns, &prevNAutoruns, RP_TAGS_SVC, RP_TAGS_NOTIFICATION_AUTORUN_CHANGE ); rList_free( snapshot ); } rpal_debug_info( "finished updating snapshots" ); #endif } FREE_AND_NULL( prevServices ); FREE_AND_NULL( prevDrivers ); FREE_AND_NULL( prevAutoruns ); return NULL; }