// Initialisation BOOL vncPropertiesPoll::Init(vncServer *server) { // Save the server pointer m_server = server; // sf@2007 - Registry mode can still be forced for backward compatibility and OS version < Vista m_fUseRegistry = ((myIniFile.ReadInt("admin", "UseRegistry", 0) == 1) ? TRUE : FALSE); // Load the settings if (m_fUseRegistry) Load(TRUE); else LoadFromIniFile(); return TRUE; }
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow) { HWND hprevwnd = FindWindow(szWindowClass,NULL); if ( hprevwnd != NULL){ MessageBox(NULL,"「かぜそみそ」はすでに起動しています","(・◇・)",MB_OK); return 0; } // GDI+が使えるかチェック HMODULE hmd = LoadLibrary("gdiplus.dll"); if(hmd != NULL){ gdiplus_useable = TRUE; FreeLibrary(hmd); // 遅延ロードで勝手にロードしてくれるはずなのでFreeする }else{ gdiplus_useable = FALSE; } ULONG_PTR gdiplusToken = NULL; if(gdiplus_useable){ Gdiplus::GdiplusStartupInput gdiplusStartupInput; Gdiplus::GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); } srand(GetTickCount()); SetCurrentDirectoryToExePath(); if(!LoadTorifuda()){ return 0; } if(!LoadYomiFuda()){ return 0; } std::string s1,s2; std::vector<int> notnigate; currentdesign.tori = & currenttori; currentdesign.yomi = & currentyomi; tori_or_yomi = TORI; LoadFromIniFile(0,currentdesign,¬nigate); tori_or_yomi = YOMI; LoadFromIniFile(0,currentdesign,NULL); tori_or_yomi = TORI; currentdesign.UpdateSize(); std::vector<int>::iterator it; for(it = notnigate.begin(); it != notnigate.end(); it++){ torifuda[*it].nigatefuda = FALSE; } firstfuda.simonoku = firstfudalist[myrandint(sizeof(firstfudalist) / sizeof(*firstfudalist))]; firstfuda.kimariji = std::string("きまりじ"); currentfuda = &firstfuda; currentdesign.kimariji = currentfuda->kimariji; currentdesign.simonoku = currentfuda->simonoku; currentdesign.waka = std::string("難波津(なにはづ)に\n咲(さ)くやこの花(はな)\n冬(ふゆ)ごもり\n今(いま)を春(はる)べと\n咲(さ)くやこの花(はな)"); MSG msg; MyRegisterClass(hInstance); if (!InitInstance (hInstance, nCmdShow)) { return FALSE; } HACCEL hAccelTable; hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_KAZESOMISO); BeginPrinter(); while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { if(hDlgWnd == NULL || !IsDialogMessage(hDlgWnd,&msg)){ TranslateMessage(&msg); DispatchMessage(&msg); } } } EndPrinter(); if(gdiplusToken != NULL){ Gdiplus::GdiplusShutdown(gdiplusToken); } return (int) msg.wParam; }
// Dialog box handling functions void vncPropertiesPoll::Show(BOOL show, BOOL usersettings) { HANDLE hProcess=NULL; HANDLE hPToken=NULL; DWORD id=GetExplorerLogonPid(); int iImpersonateResult=0; { char WORKDIR[MAX_PATH]; if (!GetTempPath(MAX_PATH,WORKDIR)) { //Function failed, just set something if (GetModuleFileName(NULL, WORKDIR, MAX_PATH)) { char* p = strrchr(WORKDIR, '\\'); if (p == NULL) return; *p = '\0'; } strcpy(m_Tempfile,""); strcat(m_Tempfile,WORKDIR);//set the directory strcat(m_Tempfile,"\\"); strcat(m_Tempfile,INIFILE_NAME); } else { strcpy(m_Tempfile,""); strcat(m_Tempfile,WORKDIR);//set the directory strcat(m_Tempfile,INIFILE_NAME); } } if (id!=0) { hProcess = OpenProcess(MAXIMUM_ALLOWED,FALSE,id); if(OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY |TOKEN_DUPLICATE|TOKEN_ASSIGN_PRIMARY|TOKEN_ADJUST_SESSIONID |TOKEN_READ|TOKEN_WRITE,&hPToken)) { ImpersonateLoggedOnUser(hPToken); iImpersonateResult = GetLastError(); if(iImpersonateResult == ERROR_SUCCESS) { ExpandEnvironmentStringsForUser(hPToken, "%TEMP%", m_Tempfile, MAX_PATH); strcat(m_Tempfile,"\\"); strcat(m_Tempfile,INIFILE_NAME); } } } if (show) { if (!m_fUseRegistry) // Use the ini file { // We're trying to edit the default local settings - verify that we can /* if (!myIniFile.IsWritable()) { if(iImpersonateResult == ERROR_SUCCESS)RevertToSelf(); CloseHandle(hProcess); CloseHandle(hPToken); return; } */ } else // Use the registry { // Verify that we know who is logged on if (usersettings) { char username[UNLEN+1]; if (!vncService::CurrentUser(username, sizeof(username))) { if(iImpersonateResult == ERROR_SUCCESS)RevertToSelf(); CloseHandle(hProcess); CloseHandle(hPToken); return; } if (strcmp(username, "") == 0) { MessageBoxSecure(NULL, sz_ID_NO_CURRENT_USER_ERR, sz_ID_WINVNC_ERROR, MB_OK | MB_ICONEXCLAMATION); if(iImpersonateResult == ERROR_SUCCESS)RevertToSelf(); CloseHandle(hProcess); CloseHandle(hPToken); return; } } else { // We're trying to edit the default local settings - verify that we can HKEY hkLocal=NULL; HKEY hkDefault=NULL; BOOL canEditDefaultPrefs = 1; DWORD dw; if (RegCreateKeyEx(HKEY_LOCAL_MACHINE, WINVNC_REGISTRY_KEY, 0, REG_NONE, REG_OPTION_NON_VOLATILE, KEY_READ, NULL, &hkLocal, &dw) != ERROR_SUCCESS) canEditDefaultPrefs = 0; else if (RegCreateKeyEx(hkLocal, "Default", 0, REG_NONE, REG_OPTION_NON_VOLATILE, KEY_WRITE | KEY_READ, NULL, &hkDefault, &dw) != ERROR_SUCCESS) canEditDefaultPrefs = 0; if (hkLocal) RegCloseKey(hkLocal); if (hkDefault) RegCloseKey(hkDefault); if (!canEditDefaultPrefs) { MessageBoxSecure(NULL, sz_ID_CANNOT_EDIT_DEFAULT_PREFS, sz_ID_WINVNC_ERROR, MB_OK | MB_ICONEXCLAMATION); if(iImpersonateResult == ERROR_SUCCESS)RevertToSelf(); if (hProcess) CloseHandle(hProcess); if (hPToken) CloseHandle(hPToken); return; } } } // Now, if the dialog is not already displayed, show it! if (!m_dlgvisible) { if (m_fUseRegistry) { if (usersettings) vnclog.Print(LL_INTINFO, VNCLOG("show per-user Properties\n")); else vnclog.Print(LL_INTINFO, VNCLOG("show default system Properties\n")); // Load in the settings relevant to the user or system //Load(usersettings); m_usersettings=usersettings; // Load in the settings relevant to the user or system Load(usersettings); } else LoadFromIniFile(); for (;;) { m_returncode_valid = FALSE; // Do the dialog box // [v1.0.2-jp1 fix] //int result = DialogBoxParam(hAppInstance, int result = DialogBoxParam(hInstResDLL, MAKEINTRESOURCE(IDD_PROPERTIES), NULL, (DLGPROC) DialogProcPoll, (LONG_PTR) this); if (!m_returncode_valid) result = IDCANCEL; vnclog.Print(LL_INTINFO, VNCLOG("dialog result = %d\n"), result); if (result == -1) { // Dialog box failed, so quit PostQuitMessage(0); if(iImpersonateResult == ERROR_SUCCESS)RevertToSelf(); CloseHandle(hProcess); CloseHandle(hPToken); return; } break; omni_thread::sleep(4); } // Load in all the settings if (!vncService::RunningAsService()) { if (m_fUseRegistry) Load(TRUE); else LoadFromIniFile(); } } } if(iImpersonateResult == ERROR_SUCCESS)RevertToSelf(); if (hProcess) CloseHandle(hProcess); if (hPToken) CloseHandle(hPToken); }