void CMobileOpalDlg::EnableFullPower() { m_hPowerRequirement = SetPowerRequirement(_T("WAV1:"), D0, POWER_FORCE|POWER_NAME, NULL, 0); if (m_hPowerRequirement == NULL) MessageBox(_T("Could not set power mode!")); SetSystemPowerState(NULL, POWER_STATE_ON, POWER_FORCE); }
INT WINAPI ResetButtonThread(void) { PWRBTN_INF((_T("[PWR:INF] ++ResetButtonThread()\r\n"))); while(!g_bExitThread) { WaitForSingleObject(g_hEventResetBtn, INFINITE); if(g_bExitThread) { break; } Button_rstbtn_disable_interrupt(); // Mask EINT Button_rstbtn_clear_interrupt_pending(); // Clear Interrupt Pending InterruptDone(g_dwSysIntrResetBtn); PWRBTN_INF((_T("[PWR] Reset Button Event\r\n"))); SetSystemPowerState(NULL, POWER_STATE_RESET, POWER_FORCE); //KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL); PWRBTN_ERR((_T("[PWR:ERR] Soft Reset Failed\r\n"))); Button_rstbtn_enable_interrupt(); // UnMask EINT } PWRBTN_INF((_T("[PWR:INF] --ResetButtonThread()\r\n"))); return 0; }
BOOL ResetPocketPC() { SetSystemPowerState(NULL, POWER_STATE_RESET, 0); return 0; //DWORD dwRet=0; //return KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, &dwRet); }
/** \brief Reset the device. */ int qRemoteSoftReset(DWORD, BYTE*, DWORD*, BYTE**, IRAPIStream* stream) { //POWER_STATE_ON On state //POWER_STATE_OFF Off state //POWER_STATE_CRITICAL Critical state //POWER_STATE_BOOT Boot state //POWER_STATE_IDLE Idle state //POWER_STATE_SUSPEND Suspend state //POWER_STATE_RESET Reset state DWORD returnValue = SetSystemPowerState(0, POWER_STATE_RESET, POWER_FORCE); return returnValue; }
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) { BOOL quiet = FALSE; if (wcscmp(lpCmdLine, L"/QUIET") == 0) { quiet = TRUE; } if (GetFileAttributes(L"\\Evadeo\\x.eva") == INVALID_FILE_ATTRIBUTES || GetFileAttributes(L"\\Windows\\Desktop") == INVALID_FILE_ATTRIBUTES) { if (quiet == FALSE) { MessageBox(NULL, L"Cet outil n'est compatible qu'avec Evadeo X50 et X60", TEXT("Evadeo Boost"), MB_OK); } return 1; } if (registry_key_exists(HKEY_LOCAL_MACHINE, L"\\System\\StorageManager\\Profiles\\" "SDMemory\\FATFS", L"EnableCacheWarm") == TRUE) { if (quiet == FALSE) { MessageBox(NULL, L"Votre Evadeo est deja en mode turbo", TEXT("Evadeo Boost"), MB_OK); } return 0; } if (quiet == FALSE) { MessageBox(NULL, L"Evadeo Boost v1.2 par Axey pour www.evadeiste.fr\r\n" "Cliquez sur OK pour redemarrer l'Evadeo en mode turbo", TEXT("Evadeo Boost"), MB_OK); } update_registry(); ForcePageout(); Sleep(1000); ForcePageout(); SetSystemPowerState(NULL, POWER_STATE_RESET, 0); return 0; }
INT WINAPI PowerButtonThread(void) { DWORD nBtnCount = 0; PWRBTN_INF((_T("[PWR:INF] ++PowerButtonThread()\r\n"))); while(!g_bExitThread) { WaitForSingleObject(g_hEventPowerBtn, INFINITE); if(g_bExitThread) { break; } Button_pwrbtn_disable_interrupt(); // Mask EINT Button_pwrbtn_clear_interrupt_pending(); // Clear Interrupt Pending InterruptDone(g_dwSysIntrPowerBtn); while(Button_pwrbtn_is_pushed()) { // Wait for Button Released... Sleep(10); } nBtnCount++; PWRBTN_INF((_T("[PWR] Power Button Event [%d]\r\n"), nBtnCount)); //PowerPolicyNotify(PPN_POWERBUTTONPRESSED,0); SetSystemPowerState(NULL, POWER_STATE_SUSPEND, POWER_FORCE); Button_pwrbtn_enable_interrupt(); // UnMask EINT } PWRBTN_INF((_T("[PWR:INF] --PowerButtonThread()\r\n"))); return 0; }
static DWORD ShutdownNow(BYTE shutdownType) { DWORD dwErrCode = ERROR_SUCCESS; switch (shutdownType) { case SDSDT_CLOSEMIRANDA: if (!Miranda_Terminated()) { /* waiting for short until ready (but not too long...) */ DWORD dwLastTickCount = GetTickCount(); while (!CallService(MS_SYSTEM_OKTOEXIT, 0, 0)) { /* infinite loop protection (max 5 sec) */ if (GetTickCount() - dwLastTickCount >= 5000) { /* wraparound works */ OutputDebugStringA("Timeout (5 sec)\n"); /* tell others, all ascii */ break; } SleepEx(1000, TRUE); if (Miranda_Terminated()) break; /* someone else did it */ OutputDebugStringA("Not ready to exit. Waiting...\n"); /* tell others, all ascii */ } /* shutdown service must be called from main thread anyway */ if (!DestroyWindow(pcli->hwndContactList)) dwErrCode = GetLastError(); } break; case SDSDT_SETMIRANDAOFFLINE: /* set global status mode to offline (is remembered by Miranda on exit) */ CallService(MS_CLIST_SETSTATUSMODE, (WPARAM)ID_STATUS_OFFLINE, 0); break; case SDSDT_STANDBY: case SDSDT_HIBERNATE: WinNT_SetPrivilege(SE_SHUTDOWN_NAME, TRUE); if (!SetSystemPowerState(shutdownType == SDSDT_STANDBY, TRUE)) dwErrCode = GetLastError(); WinNT_SetPrivilege(SE_SHUTDOWN_NAME, FALSE); break; case SDSDT_LOCKWORKSTATION: if (!IsWorkstationLocked()) dwErrCode = GetLastError(); break; case SDSDT_CLOSERASCONNECTIONS: ShutdownNow(SDSDT_SETMIRANDAOFFLINE); /* set Miranda offline */ /* hang up all ras connections */ { DWORD dwRetries; RASCONNSTATUS rcs; DWORD dw, dwLastTickCount; DWORD dwConnSize = sizeof(RASCONN); DWORD dwConnItems = 0; RASCONN *paConn = (RASCONN*)mir_alloc(dwConnSize); dwErrCode = ERROR_NOT_ENOUGH_MEMORY; if (paConn != NULL) { for (dwRetries = 5; dwRetries != 0; dwRetries--) { /* prevent infinite loop (rare) */ memset(paConn, 0, dwConnSize); paConn[0].dwSize = sizeof(RASCONN); dwErrCode = RasEnumConnections(paConn, &dwConnSize, &dwConnItems); if (dwErrCode != ERROR_BUFFER_TOO_SMALL) break; RASCONN *paConnBuf = (RASCONN*)mir_realloc(paConn, dwConnSize); if (paConnBuf == NULL) { mir_free(paConn); paConn = NULL; dwErrCode = ERROR_NOT_ENOUGH_MEMORY; break; } paConn = paConnBuf; } if (dwErrCode == ERROR_SUCCESS || dwErrCode == ERROR_BUFFER_TOO_SMALL) { for (dw = 0; dw < dwConnItems; ++dw) { if (dwErrCode) { if (RasHangUp(paConn[dw].hrasconn)) paConn[dw].hrasconn = NULL; /* do not wait for on error */ } else { dwErrCode = RasHangUp(paConn[dw].hrasconn); if (!dwErrCode) paConn[dw].hrasconn = NULL; /* do not wait for on error */ } } /* RAS does not allow to quit directly after HangUp (see docs) */ dwLastTickCount = GetTickCount(); memset(&rcs, 0, sizeof(RASCONNSTATUS)); rcs.dwSize = sizeof(RASCONNSTATUS); for (dw = 0; dw < dwConnItems; ++dw) { if (paConn[dw].hrasconn != NULL) { while (RasGetConnectStatus(paConn[dw].hrasconn, &rcs) != ERROR_INVALID_HANDLE) { Sleep(0); /* give rest of time silce to other threads with equal priority */ /* infinite loop protection (3000ms defined in docs) */ dwRetries = GetTickCount(); if (dwRetries - dwLastTickCount > 3000) break; /* wraparound works */ } } } } mir_free(paConn); /* does NULL check */ } } /* set Miranda to offline again, to remain offline with reconnection plugins */ ShutdownNow(SDSDT_SETMIRANDAOFFLINE); break; case SDSDT_REBOOT: case SDSDT_SHUTDOWN: if (GetSystemMetrics(SM_SHUTTINGDOWN)) { /* Win2000+, 0 on error */ dwErrCode = ERROR_SHUTDOWN_IN_PROGRESS; break; } /* WinNT4/2000/XP */ { WinNT_SetPrivilege(SE_SHUTDOWN_NAME, TRUE); /* does not send out WM_ENDSESSION messages, so we do it manually to * give the applications the chance to save their data */ WinNT_SetPrivilege(SE_TCB_NAME, TRUE); /* for BSM_ALLDESKTOPS */ BroadcastEndSession(BSM_APPLICATIONS | BSM_ALLDESKTOPS, ENDSESSION_CLOSEAPP); /* app should close itself */ WinNT_SetPrivilege(SE_TCB_NAME, FALSE); if (!InitiateSystemShutdownEx(NULL, TranslateT("AutoShutdown"), 0, TRUE, shutdownType == SDSDT_REBOOT, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED)) dwErrCode = GetLastError(); /* cleanly close Miranda */ if (!dwErrCode) ShutdownNow(SDSDT_CLOSEMIRANDA); break; } /* fall through for Win9x */ case SDSDT_LOGOFF: { UINT flags; switch (shutdownType) { case SDSDT_LOGOFF: flags = EWX_LOGOFF; break; case SDSDT_REBOOT: flags = EWX_REBOOT; break; default: flags = EWX_SHUTDOWN | EWX_POWEROFF; } if (shutdownType == SDSDT_LOGOFF && !IsWorkstationLocked()) flags |= EWX_FORCEIFHUNG; /* only considered for WM_ENDSESSION messages */ else flags |= EWX_FORCE; /* must be used when workstation locked */ if (flags & EWX_FORCE) { /* EWX_FORCE does not send out WM_ENDSESSION messages, so we do it * manually to give the applications the chance to save their data */ BroadcastEndSession(BSM_APPLICATIONS, (shutdownType == SDSDT_LOGOFF) ? ENDSESSION_LOGOFF : 0); /* Windows Me/98/95 (msdn): Because of the design of the shell, * calling ExitWindowsEx with EWX_FORCE fails to completely log off * the user (the system terminates the applications and displays the * Enter Windows Password dialog box, however, the user's desktop remains.) * To log off the user forcibly, terminate the Explorer process before calling * ExitWindowsEx with EWX_LOGOFF and EWX_FORCE. */ } if (!ExitWindowsEx(flags, SHTDN_REASON_MAJOR_OTHER | SHTDN_REASON_MINOR_OTHER | SHTDN_REASON_FLAG_PLANNED)) dwErrCode = GetLastError(); /* cleanly close Miranda */ if (!dwErrCode) ShutdownNow(SDSDT_CLOSEMIRANDA); } break; } return dwErrCode; }
BOOL CommandLineArguements(HWND hwnd, LPCTSTR pCmdLine) { if (pCmdLine == NULL) { return FALSE; } if (hwnd) { if (wcsicmp(pCmdLine, L"reload") == 0) { PostMessage(hwnd, WM_TIMER, TIMER_ACTUALIZA_NOTIF, 0); return TRUE; } else if (wcsicmp(pCmdLine, L"relaunch") == 0) { PostMessage(hwnd, WM_USER_RELAUNCH, 0, 0); return TRUE; } else if (wcsicmp(pCmdLine, L"add") == 0) { PostMessage(hwnd, WM_USER_ADD, 0, 0); return TRUE; } else if (wcsicmp(pCmdLine, L"options") == 0) { PostMessage(hwnd, WM_USER_OPTIONS, -1, 0); return TRUE; } else if (_wcsnicmp(pCmdLine, L"options:", wcslen(L"options:")) == 0) { int l = wcslen(L"options:"); PostMessage(hwnd, WM_USER_OPTIONS, _wtoi(pCmdLine + l), 0); return TRUE; } else if (_wcsnicmp(pCmdLine, L"goto:", wcslen(L"goto:")) == 0) { int l = wcslen(L"goto:"); if (wcsicmp(pCmdLine + l, L"next") == 0 || wcsicmp(pCmdLine + l, L"right") == 0) { PostMessage(hwnd, WM_USER_GOTO_NEXT, 0, 0); } else if (wcsicmp(pCmdLine + l, L"previous") == 0 || wcsicmp(pCmdLine + l, L"left") == 0) { PostMessage(hwnd, WM_USER_GOTO_PREV, 0, 0); } else if (wcsicmp(pCmdLine + l, L"up") == 0) { PostMessage(hwnd, WM_USER_GOTO_UP, 0, 0); } else if (wcsicmp(pCmdLine + l, L"down") == 0) { PostMessage(hwnd, WM_USER_GOTO_DOWN, 0, 0); } else { PostMessage(hwnd, WM_USER_GOTO, _wtoi(pCmdLine + l), 0); } return TRUE; #ifdef EXEC_MODE } else if (wcsicmp(pCmdLine, L"close") == 0 || wcsicmp(pCmdLine, L"exit") == 0) { PostMessage(hwnd, WM_DESTROY, 0, 0); return TRUE; } else if (wcsicmp(pCmdLine, L"minimize") == 0) { ShowWindow(hwnd, SW_MINIMIZE); return TRUE; #endif } } if (wcsicmp(pCmdLine, L"taskbar") == 0) { HWND hWndTaskbar = FindWindow(L"HHTaskBar", NULL); if (hWndTaskbar != NULL) { ShowWindow(hWndTaskbar, IsWindowVisible(hWndTaskbar) ? SW_HIDE : SW_SHOW); } return TRUE; } else if (_wcsnicmp(pCmdLine, L"volume:", wcslen(L"volume:")) == 0) { int l = wcslen(L"volume:"); WORD vol = GetVolumePercentage(); BOOL cycle = FALSE; if (*(pCmdLine + l) == '+') { l++; if (*(pCmdLine + l) == '+') { l++; cycle = TRUE; } if (cycle && vol >= 100) { vol = 0; } else { vol += (WORD) _wtoi(pCmdLine + l); } } else if (*(pCmdLine + l) == '-') { l++; if (*(pCmdLine + l) == '-') { l++; cycle = TRUE; } if (cycle && vol <= 0) { vol = 100; } else { vol -= (WORD) _wtoi(pCmdLine + l); } } else { vol = (WORD) _wtoi(pCmdLine + l); } SetVolumePercentage(vol); if (hwnd) { PostMessage(hwnd, WM_TIMER, TIMER_ACTUALIZA_NOTIF, 0); } return TRUE; } else if (wcsicmp(pCmdLine, L"rotate") == 0) { Rotate(90); return TRUE; } else if (_wcsnicmp(pCmdLine, L"rotate:", wcslen(L"rotate:")) == 0) { int l = wcslen(L"rotate:"); Rotate(_wtoi(pCmdLine + l)); return TRUE; } else if (wcsicmp(pCmdLine, L"reset") == 0 || wcsicmp(pCmdLine, L"restart") == 0) { SetSystemPowerState(NULL, POWER_STATE_RESET, POWER_FORCE); return TRUE; } else if (wcsicmp(pCmdLine, L"off") == 0 || wcsicmp(pCmdLine, L"standby") == 0 || wcsicmp(pCmdLine, L"suspend") == 0) { SetSystemPowerState(NULL, POWER_STATE_SUSPEND, POWER_FORCE); return TRUE; } else if (wcsicmp(pCmdLine, L"keyboard") == 0) { ToggleKeyboard(); return TRUE; } else if (wcsicmp(pCmdLine, L"winkey") == 0) { keybd_event(91, NULL, KEYEVENTF_SILENT, NULL); keybd_event(91, NULL, KEYEVENTF_SILENT|KEYEVENTF_KEYUP, NULL); return TRUE; } else if (wcsicmp(pCmdLine, L"bluetooth") == 0) { ToggleBluetooth(); return TRUE; } else if (wcsicmp(pCmdLine, L"wireless") == 0 || wcsicmp(pCmdLine, L"wifi") == 0 || wcsicmp(pCmdLine, L"wlan") == 0) { ToggleWLAN(); return TRUE; } return FALSE; }
static int reboot(int flags) { #ifdef _WIN32_WCE if(flags != RB_AUTOBOOT) { errno = EINVAL; return -1; } #ifdef _USE_KIOCTL if(!KernelIoControl(IOCTL_HAL_REBOOT, NULL, 0, NULL, 0, NULL)) return -1; #else unsigned long int e = SetSystemPowerState(NULL, POWER_STATE_RESET, 0); if(e) { SetLastError(e); return -1; } #endif #else if(enable_shutdown_privilege() < 0) return -1; #ifdef _WIN32_WNT_NATIVE SHUTDOWN_ACTION action; switch(flags) { case RB_AUTOBOOT: action = ShutdownReboot; break; case RB_HALT_SYSTEM: action = ShutdownNoReboot; break; default: errno = EINVAL; return -1; } long int status = NtShutdownSystem(action); if(status < 0) { __set_errno_from_ntstatus(status); return -1; } #else #ifdef _USE_EWX unsigned int wflags = EWX_FORCE; switch(flags) { case RB_AUTOBOOT: flags |= EWX_REBOOT; break; case RB_HALT_SYSTEM: flags |= EWX_SHUTDOWN; break; default: errno = EINVAL; return -1; } if(!ExitWindowsEx(wflags, 0)) { __set_errno_from_oserror(); return -1; } #else if(!InitiateSystemShutdownW(NULL, NULL, 0, 1, flags & EWX_REBOOT)) { __set_errno_from_oserror(); return -1; } #endif #endif /* _WIN32_WNT_NATIVE */ #endif /* _WIN32_WCE */ while(1) sleep(10000); }
INT WINAPI PowerButtonThread(void) { DWORD nBtnCount = 0; WCHAR state[1024] = {0}; LPWSTR pState = &state[0]; DWORD dwBufChars = (sizeof(state) / sizeof(state[0])); DWORD dwStateFlags = 0; DWORD dwErr; PWRBTN_INF((_T("[PWR:INF] ++PowerButtonThread()\r\n"))); while(!g_bExitThread) { WaitForSingleObject(g_hEventPowerBtn, INFINITE); if(g_bExitThread) { break; } Button_pwrbtn_disable_interrupt(); // Mask EINT Button_pwrbtn_clear_interrupt_pending(); // Clear Interrupt Pending dwErr = GetSystemPowerState(pState, dwBufChars, &dwStateFlags); if (ERROR_SUCCESS != dwErr) { RETAILMSG(1, (TEXT("PMGET!GetSystemPowerState:ERROR:%d\n"), dwErr)); } else { RETAILMSG(1, (TEXT("PMGET! System Power state is '%s', flags 0x%08x\n"), state, dwStateFlags)); } InterruptDone(g_dwSysIntrPowerBtn); #ifndef SLEEP_AGING_TEST while(Button_pwrbtn_is_pushed()) { // Wait for Button Released... Sleep(10); } #endif nBtnCount++; PWRBTN_INF((_T("[PWR] Power Button Event [%d]\r\n"), nBtnCount)); //SetSystemPowerState(NULL, POWER_STATE_SUSPEND, POWER_FORCE); //PowerPolicyNotify(PPN_POWERBUTTONPRESSED,0); if ( wcscmp(state,TEXT("screenoff")) == 0 ) { RETAILMSG(1,(TEXT("setsystempowerstate to ON from screen off\r\n"))); SetSystemPowerState( NULL, POWER_STATE_ON, POWER_FORCE ); } else if ( wcscmp(state,TEXT("backlightoff")) == 0 ) { #ifdef WPC RETAILMSG(1,(TEXT("setsystempowerstate to ON from backlight off\r\n"))); SetSystemPowerState( NULL, POWER_STATE_ON, POWER_FORCE ); #endif #ifdef SMARTFON RETAILMSG(1,(TEXT("setsystempowerstate to IDLE from backlight off\r\n"))); SetSystemPowerState( TEXT("useridle"), POWER_STATE_IDLE, POWER_FORCE ); #endif } else { #ifdef WPC //SetSystemPowerState( NULL, POWER_STATE_SUSPEND, POWER_FORCE ); PowerPolicyNotify(PPN_POWERBUTTONPRESSED,0); #endif #ifdef SMARTFON RETAILMSG(1,(TEXT("setsystempowerstate to IDLE from on\r\n"))); SetSystemPowerState( TEXT("useridle"), POWER_STATE_IDLE, POWER_FORCE ); #endif } Button_pwrbtn_enable_interrupt(); // UnMask EINT #ifdef SLEEP_AGING_TEST Sleep(2000); SetEvent(g_hEventPowerBtn); #endif } PWRBTN_INF((_T("[PWR:INF] --PowerButtonThread()\r\n"))); return 0; }
void CN50_Shutdown(){ KernelIoControl(QC_IOCTL_POWER_DOWN_REQ, NULL, 0, NULL, 0, NULL); SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE); }