void RunExperiments(ifstream &input, ofstream &output) { // Read input file input.seekg(0, ios::end); size_t input_length = input.tellg(); input.seekg(0, ios::beg); char * input_content = new char[input_length+1]; input.read(input_content, input_length); input_content[input_length] = 0; map<string, fnptr> ®isteredExperiments = RegisterExperiment("", NULL); cout << "Registered experiments: " << endl; for(map<string, fnptr>::iterator it = registeredExperiments.begin(); it != registeredExperiments.end(); ++it) cout << "\t- " << it->first << endl; // Create JSON object JSONValue *root = JSON::Parse(input_content); delete [] input_content; // Iterate over each object if (!root->IsObject()) { cerr << "Error, the input file does not contain objects." << endl; return; } cout << endl; cout << "* Running Experiments" << endl; output << "{" << endl; // This is a vector of <sdt::wstring, JSONValue> JSONObject objects = root->AsObject(); Timer overall_time; for(JSONObject::iterator it = objects.begin(); it != objects.end(); ++it) { string tmp((it->first).begin(), (it->first).end()); output << "experiment_name: \"" << tmp << "\"" << endl; if (registeredExperiments.count(tmp) == 0) { cout << "\tExperiment " << tmp << " is not registered." << endl; output << "result: \"error\"" << endl; } else { cout << "\tRunning experiment " << tmp << endl; Timer experiment_time; wstring result = registeredExperiments[tmp](it->second->Stringify()); experiment_time.stop(); string tmp_result(result.begin(), result.end()); output << "result: " << tmp_result << endl; output << "experiment_time:" << experiment_time.elapsedTime() << endl; } } overall_time.stop(); output << "overall_time:" << overall_time.elapsedTime() << endl; output << GetSystemInformation(); output << "}" << endl; }
PVOID GetModule( PCHAR Name ) { PSYSTEM_MODULE_INFORMATION Modules = (PSYSTEM_MODULE_INFORMATION) GetSystemInformation ( SystemModuleInformation); for (ULONG i=0; i<Modules->ModulesCount; i++) { if (((ULONG)Modules->Modules[i].ImageBaseAddress & 0xF0000000) == 0xB0000000) { // // Session-space modules // char *mod = (char*)Modules->Modules[i].Name; char *relmod = strrchr (mod, '\\'); if (relmod) relmod++; else relmod = mod; printf("%08x %s\n", Modules->Modules[i].ImageBaseAddress, relmod); if (!lstrcmpi(relmod, Name)) { PVOID ret = Modules->Modules[i].ImageBaseAddress; ExFreePool (Modules); return ret; } } } ExFreePool (Modules); return NULL; }
/* Property page dialog callback */ INT_PTR CALLBACK GeneralPageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { UNREFERENCED_PARAMETER(lParam); UNREFERENCED_PARAMETER(wParam); switch (uMsg) { case WM_INITDIALOG: pImgInfo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IMGINFO)); if (pImgInfo == NULL) { EndDialog(hwndDlg, 0); return FALSE; } InitLogo(hwndDlg); SetWindowLongPtr(GetDlgItem(hwndDlg, IDC_ROSIMG), GWL_WNDPROC, (LONG)RosImageProc); GetSystemInformation(hwndDlg); break; case WM_DESTROY: HeapFree(GetProcessHeap(), 0, pImgInfo); break; case WM_COMMAND: if (LOWORD(wParam) == IDC_LICENCE) { DialogBox(hApplet, MAKEINTRESOURCE(IDD_LICENCE), hwndDlg, LicenceDlgProc); return TRUE; } break; case WM_DRAWITEM: { LPDRAWITEMSTRUCT lpDrawItem = (LPDRAWITEMSTRUCT) lParam; if (lpDrawItem->CtlID == IDC_ROSIMG) { HDC hdcMem; LONG left; /* Position image in centre of dialog */ left = (lpDrawItem->rcItem.right - pImgInfo->cxSource) / 2; hdcMem = CreateCompatibleDC(lpDrawItem->hDC); if (hdcMem != NULL) { SelectObject(hdcMem, pImgInfo->hBitmap); BitBlt(lpDrawItem->hDC, left, lpDrawItem->rcItem.top, lpDrawItem->rcItem.right - lpDrawItem->rcItem.left, lpDrawItem->rcItem.bottom - lpDrawItem->rcItem.top, hdcMem, 0, 0, SRCCOPY); DeleteDC(hdcMem); } } return TRUE; } case WM_NOTIFY: { NMHDR *nmhdr = (NMHDR *)lParam; if (nmhdr->idFrom == IDC_ROSHOMEPAGE_LINK && nmhdr->code == NM_CLICK) { PNMLINK nml = (PNMLINK)nmhdr; ShellExecuteW(hwndDlg, L"open", nml->item.szUrl, NULL, NULL, SW_SHOWNORMAL); } break; } } return FALSE; }
void FileMedia::OpenLogFile() { SYSTEMTIME st; GetLocalTime(&st); m_sFilename = m_sOrigFilename; m_sFilename.Replace(_T("%DATETIME%"), _T("%DATE% %TIME%")); if (m_sFilename.Find(_T("%DATE%")) != -1) { TCHAR bufdate[128]; _stprintf_s(bufdate, _T("%i-%02i-%02i"), st.wYear, st.wMonth, st.wDay); m_sFilename.Replace(_T("%DATE%"), bufdate); m_wLogYear = st.wYear; m_wLogMonth = st.wMonth; m_wLogDay = st.wDay; } if (m_sFilename.Find(_T("%TIME%")) != -1) { GetLocalTime(&st); TCHAR buftime[128]; _stprintf_s(buftime, _T("%02i-%02i"), st.wHour, st.wMinute); m_sFilename.Replace(_T("%TIME%"), buftime); } if (!CreateFileDir(m_sFilename)) { _RPT1(_CRT_ERROR, "FileMedia: Can't create folder '%S'", (LPCWSTR) CStringW(m_sFilename)); return; } // Создадим для доступа к этому файлу мьютекс CString sMtx(m_sFilename); sMtx.MakeUpper(); for (int i = 0, size = sMtx.GetLength(); i < size; ++i) { if (!_istalnum(sMtx[i])) sMtx.SetAt(i, _T('_')); } m_hMutex = CreateMutex(NULL, TRUE, (LPCTSTR)sMtx); DWORD dwMtxError = GetLastError(); m_hFile = CreateFile(m_sFilename, GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, (m_bAppend || dwMtxError == ERROR_ALREADY_EXISTS) ? OPEN_ALWAYS : CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (m_hFile == INVALID_HANDLE_VALUE) { if (dwMtxError != ERROR_ALREADY_EXISTS) VERIFY(ReleaseMutex(m_hMutex)); m_hMutex.Close(); return; } if (dwMtxError != ERROR_ALREADY_EXISTS) { CString header; header.Format( _T("================================================\r\n") _T("=== Trace Log Started on %i-%02i-%02i %02i:%02i:%02i ===\r\n") _T("=== %s ===\r\n") _T("================================================\r\n") _T("\r\n%s\r\n\r\n") , st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond , (LPCTSTR)GetSystemInformation() , (LPCTSTR)GetModuleInformation()); LONG dwDistanceToMoveHigh = 0; // Нужен, чтобы писать в файлы больше 4Гб VERIFY(SetFilePointer(m_hFile, 0, &dwDistanceToMoveHigh, FILE_END) != INVALID_SET_FILE_POINTER || GetLastError() == NO_ERROR); CStringA headerA = header; DWORD dwWritten; // VERIFY(WriteFile(m_hFile, (LPCTSTR)header, (DWORD)header.size() * sizeof(TCHAR), &dwWritten, NULL)); VERIFY(WriteFile(m_hFile, (LPCSTR)headerA, (DWORD)headerA.GetLength() * sizeof(CHAR), &dwWritten, NULL)); if (m_hMutex != NULL) VERIFY(ReleaseMutex(m_hMutex)); } }
BOOL GetPrivilege(ULONG Priviliage) { BOOL bRet = FALSE; NTSTATUS St; BOOLEAN bEnable; bRet = NT_SUCCESS(RtlAdjustPrivilege(Priviliage,TRUE,FALSE,&bEnable)) || NT_SUCCESS(RtlAdjustPrivilege(Priviliage,TRUE,TRUE,&bEnable)); if (!bRet) { PSYSTEM_PROCESSES_INFORMATION Processes = (PSYSTEM_PROCESSES_INFORMATION)GetSystemInformation(SystemProcessInformation); if (Processes) { UNICODE_STRING ProcessName = RTL_CONSTANT_STRING(L"services.exe"); for (PSYSTEM_PROCESSES_INFORMATION Proc=Processes; ; *(ULONG*)&Proc += Proc->NextEntryDelta) { if (RtlEqualUnicodeString(&Proc->ProcessName,&ProcessName,TRUE)) { HANDLE hThread; OBJECT_ATTRIBUTES ObjAttr; InitializeObjectAttributes(&ObjAttr,NULL,0,0,0); St = NtOpenThread(&hThread,THREAD_DIRECT_IMPERSONATION,&ObjAttr,&Proc->Threads[0].ClientId); if (NT_SUCCESS(St)) { SECURITY_QUALITY_OF_SERVICE SecurityQos = {0}; SecurityQos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE); SecurityQos.ImpersonationLevel = SecurityImpersonation; SecurityQos.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING; St = NtImpersonateThread(NtCurrentThread(),hThread,&SecurityQos); if (NT_SUCCESS(St)) { St = RtlAdjustPrivilege(Priviliage,TRUE,TRUE,&bEnable); bRet = NT_SUCCESS(St); if (!bRet) { DbgPrint(__FUNCTION__"(): RtlAdjustPrivilege failed with status %x\n",St); } } else { DbgPrint(__FUNCTION__"(): NtImpersonateThread failed with status %x\n",St); } NtClose(hThread); } else { DbgPrint(__FUNCTION__"(): NtOpenThread failed with status %x\n",St); } break; } if (!Proc->NextEntryDelta) break; } free(Processes); } } return bRet; }