/** Primary entry function ***/ int main( int argc, char* argv[] ) { ReturnCode_t returnCode; // Create the master context Context_t context; // Zero the context memset( &context, 0, sizeof(Context_t) ); // Check the command line arguments for local and remote IP addresses and number of hyperperiods assert( argc == 4 ); /*** Initialize the FRODO subsystems ***/ SysEventInitialize( AllCategories, false, true, false ); PeripheralInitialize(); LogInitialize(); ErrorHandlerInitialize(); SchedInitialize( EarliestDeadlineFirst, ErrSchedulerHandler, 20.0, 1, &context ); UDPInitialize( ErrUDPHandler ); /*** Create message ports ***/ { // Set initial value of port message data_t data = { 1.0 }; CreateSamplingPort( "data", sizeof(data_t), Bidirectional, 0, &(context.msgPort), &returnCode ); WriteSamplingMessage( context.msgPort, &data, sizeof(data_t), &returnCode ); } /*** Create Tasks ***/ { // Create task with instances pfloat_t Task1_times[1] = { 4.0 }; SchedCreatePeriodicTask( "Task1", Task1_exec, &context.task1, 1.00, NoRestriction, 1, Task1_times ); } /*** Create Peripherals ***/ { pfloat_t send_times[1] = { 8.0 }; pfloat_t receive_times[1] = { 14.0 }; SyncExpectation syncExpects[2] = { { ExpectSend, 1, sizeof(data_t), 1, send_times, 2.0, context.msgPort, NULL }, { ExpectReceive, 1, sizeof(data_t), 1, receive_times, 2.0, context.msgPort, NULL } }; context.udpChannel = UDPCreateChannel( argv[1], argv[2], 21212, 2, syncExpects, 0, NULL, true, false, 2 ); } /*** Execute the schedule ***/ // Wait for the platform to wake up ( Platform Dependent ) NanoSleep( SCHEDULER_INITIALIZATION_WAIT ); // Execute the schedule SchedExecute( atoi(argv[3]) ); /*** Shutdown the application ***/ // If this returns we must shut everything down UDPShutdown( ); SchedShutdown( ); SysEventShutdown( NULL ); }
bool initializeLog() { wchar_t buf[255]; if(true == QueryReg(REGDRIVERPATH,L"ImagePath",buf,sizeof(buf)) ) { wchar_t *p = wcsrchr(buf,L'\\'); if(p != NULL) { *((p-buf+1)+buf) = L'\0'; //wcscat_s(buf,sizeof(255),L"sysLog.txt"); RtlMoveMemory(buf+wcslen(buf),L"syslog.txt",24); LogInitialize(LOG_TYPE_DEBUG,buf); return true; } } return false; }
bool initializeLog() { wchar_t buf[255]; if(true == QueryReg(L"\\Registry\\Machine\\SYSTEM\\CurrentControlSet\\Services\\MoneyHubPrt",L"ImagePath",buf,sizeof(buf)) ) { wchar_t *p = wcsrchr(buf,L'\\'); if(p != NULL) { *((p-buf+1)+buf) = L'\0'; //wcscat_s(buf,sizeof(255),L"sysLog.txt"); RtlMoveMemory(buf+wcslen(buf),L"syslog.txt",24); LogInitialize(LOG_TYPE_DEBUG,buf); return true; } else return false; } else return false; }
extern "C" HRESULT EngineRun( __in HINSTANCE hInstance, __in_z_opt LPCWSTR wzCommandLine, __in int nCmdShow, __out DWORD* pdwExitCode ) { HRESULT hr = S_OK; BOOL fComInitialized = FALSE; BOOL fLogInitialized = FALSE; BOOL fRegInitialized = FALSE; BOOL fWiuInitialized = FALSE; BOOL fXmlInitialized = FALSE; OSVERSIONINFOEXW ovix = { }; LPWSTR sczExePath = NULL; BOOL fRunNormal = FALSE; BOOL fRestart = FALSE; BURN_ENGINE_STATE engineState = { }; hr = InitializeEngineState(&engineState); ExitOnFailure(hr, "Failed to initialize engine state."); engineState.command.nCmdShow = nCmdShow; // Ensure that log contains approriate level of information #ifdef _DEBUG LogSetLevel(REPORT_DEBUG, FALSE); #else LogSetLevel(REPORT_VERBOSE, FALSE); // FALSE means don't write an additional text line to the log saying the level changed #endif // initialize platform layer PlatformInitialize(); // initialize COM hr = ::CoInitializeEx(NULL, COINIT_MULTITHREADED); ExitOnFailure(hr, "Failed to initialize COM."); fComInitialized = TRUE; // Initialize dutil. LogInitialize(::GetModuleHandleW(NULL)); fLogInitialized = TRUE; hr = RegInitialize(); ExitOnFailure(hr, "Failed to initialize Regutil."); fRegInitialized = TRUE; hr = WiuInitialize(); ExitOnFailure(hr, "Failed to initialize Wiutil."); fWiuInitialized = TRUE; hr = XmlInitialize(); ExitOnFailure(hr, "Failed to initialize XML util."); fXmlInitialized = TRUE; ovix.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW); if (!::GetVersionExW((LPOSVERSIONINFOW)&ovix)) { ExitWithLastError(hr, "Failed to get OS info."); } PathForCurrentProcess(&sczExePath, NULL); // Ignore failure. LogId(REPORT_STANDARD, MSG_BURN_INFO, szVerMajorMinorBuild, ovix.dwMajorVersion, ovix.dwMinorVersion, ovix.dwBuildNumber, ovix.wServicePackMajor, sczExePath, wzCommandLine ? wzCommandLine : L""); ReleaseNullStr(sczExePath); // initialize core hr = CoreInitialize(wzCommandLine, &engineState); ExitOnFailure(hr, "Failed to initialize core."); // select run mode switch (engineState.mode) { case BURN_MODE_NORMAL: fRunNormal = TRUE; hr = RunNormal(hInstance, &engineState); ExitOnFailure(hr, "Failed to run per-user mode."); break; case BURN_MODE_ELEVATED: hr = RunElevated(hInstance, wzCommandLine, &engineState); ExitOnFailure(hr, "Failed to run per-machine mode."); break; case BURN_MODE_EMBEDDED: fRunNormal = TRUE; hr = RunEmbedded(hInstance, &engineState); ExitOnFailure(hr, "Failed to run embedded mode."); break; case BURN_MODE_RUNONCE: hr = RunRunOnce(wzCommandLine, nCmdShow); ExitOnFailure(hr, "Failed to run RunOnce mode."); break; default: hr = E_UNEXPECTED; ExitOnFailure(hr, "Invalid run mode."); } // set exit code and remember if we are supposed to restart. *pdwExitCode = engineState.userExperience.dwExitCode; fRestart = engineState.fRestart; LExit: ReleaseStr(sczExePath); // If anything went wrong but the log was never open, try to open a "failure" log // and that will dump anything captured in the log memory buffer to the log. if (FAILED(hr) && BURN_LOGGING_STATE_CLOSED == engineState.log.state) { LogOpen(NULL, L"Setup", L"_Failed", L"txt", FALSE, FALSE, NULL); } UserExperienceRemove(&engineState.userExperience); CacheRemoveWorkingFolder(engineState.registration.sczId); // If this is a related bundle (but not an update) suppress restart and return the standard restart error code. if (fRestart && BOOTSTRAPPER_RELATION_NONE != engineState.command.relationType && BOOTSTRAPPER_RELATION_UPDATE != engineState.command.relationType) { LogId(REPORT_STANDARD, MSG_RESTART_ABORTED, LoggingRelationTypeToString(engineState.command.relationType)); fRestart = FALSE; hr = HRESULT_FROM_WIN32(ERROR_SUCCESS_REBOOT_REQUIRED); } UninitializeEngineState(&engineState); if (fXmlInitialized) { XmlUninitialize(); } if (fWiuInitialized) { WiuUninitialize(); } if (fRegInitialized) { RegUninitialize(); } if (fComInitialized) { ::CoUninitialize(); } if (fRunNormal) { LogId(REPORT_STANDARD, MSG_EXITING, FAILED(hr) ? (int)hr : *pdwExitCode, LoggingBoolToString(fRestart)); if (fRestart) { LogId(REPORT_STANDARD, MSG_RESTARTING); } } if (fLogInitialized) { LogClose(FALSE); } if (fRestart) { Restart(); } if (fLogInitialized) { LogUninitialize(FALSE); } return hr; }
NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { HANDLE ServiceKey; HANDLE ParametersKey; ULONG Index; NTSTATUS status; ASSERT3P(__DriverGetDriverObject(), ==, NULL); ExInitializeDriverRuntime(DrvRtPoolNxOptIn); __EnableDbgPrint(); Trace("====>\n"); __DriverSetDriverObject(DriverObject); if (*InitSafeBootMode > 0) goto done; status = LogInitialize(); if (!NT_SUCCESS(status)) goto fail1; Info("%s (%s)\n", MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MICRO_VERSION_STR "." BUILD_NUMBER_STR, DAY_STR "/" MONTH_STR "/" YEAR_STR); SystemGetInformation(); status = HypercallInitialize(&Driver.HypercallInterface); if (!NT_SUCCESS(status)) goto fail2; status = ModuleInitialize(); if (!NT_SUCCESS(status)) goto fail3; status = ProcessInitialize(); if (!NT_SUCCESS(status)) goto fail4; status = RegistryInitialize(RegistryPath); if (!NT_SUCCESS(status)) goto fail5; status = RegistryOpenServiceKey(KEY_READ, &ServiceKey); if (!NT_SUCCESS(status)) goto fail6; status = RegistryOpenSubKey(ServiceKey, "Parameters", KEY_READ, &ParametersKey); if (NT_SUCCESS(status)) __DriverSetParametersKey(ParametersKey); RegistryCloseKey(ServiceKey); Driver.DriverObject->DriverUnload = DriverUnload; Driver.DriverObject->DriverExtension->AddDevice = AddDevice; for (Index = 0; Index <= IRP_MJ_MAXIMUM_FUNCTION; Index++) { #pragma prefast(suppress:28169) // No __drv_dispatchType annotation #pragma prefast(suppress:28168) // No matching __drv_dispatchType annotation for IRP_MJ_CREATE Driver.DriverObject->MajorFunction[Index] = Dispatch; } done: Trace("<====\n"); return STATUS_SUCCESS; fail6: Error("fail6\n"); RegistryTeardown(); fail5: Error("fail5\n"); ProcessTeardown(); fail4: Error("fail4\n"); ModuleTeardown(); fail3: Error("fail3\n"); HypercallTeardown(&Driver.HypercallInterface); fail2: Error("fail2\n"); LogTeardown(); fail1: Error("fail1 (%08x)\n", status); __DriverSetDriverObject(NULL); ASSERT(IsZeroMemory(&Driver, sizeof (XEN_DRIVER))); return status; }