Пример #1
0
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);
}
Пример #2
0
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;
}
Пример #3
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;
}
Пример #5
0
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;
}
Пример #6
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;
}
Пример #7
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;
}
Пример #9
0
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);
}
Пример #10
0
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;
}
Пример #11
0
void CN50_Shutdown(){
	KernelIoControl(QC_IOCTL_POWER_DOWN_REQ, NULL, 0, NULL, 0, NULL);
	SetSystemPowerState(NULL, POWER_STATE_OFF, POWER_FORCE);
}