したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

プログラムスレッド

1女傑 ◆nDpXSJz8i.:2012/03/04(日) 04:40:34
システム再起動用のプログラムを書いてみた。コンパイル&リン
クテストしてないので、ちゃんと動くかどうか心配だ。

#include <windows.h>
#include <tchar.h>

int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
SYSTEMTIME st;
GetSystemTime(&st);
if(st.wYear != 2012 || st.wMonth != 3 || st.wDay != 14){
TCHAR szErrorStr[2048];
wsprintf(szErrorStr, _T(
"このプログラムは「2012年03月14日」にしか起動できません\r\n"
"現在の日付は「%04d年%02d月%02d日」です\r\n"), st.wYear, st.wMonth, st.wDay);
MessageBox(GetActiveWindow(), szErrorStr, _T("Error"), MB_OK);
return 0;
}
{
HANDLE Mutex = CreateMutex(NULL, false, "Mutex");
if (Mutex == NULL) return 0;
if ( GetLastError() == ERROR_ALREADY_EXISTS){
return 0;
}
{
OSVERSIONINFO osinfo = {0};
osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&osinfo);
if(osinfo.dwPlatformId == VER_PLATFORM_WIN32_NT) { //WinNT
HANDLE hToken;
//アクセストークンをオープンする
if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
LUID luid;
if(LookupPrivilegeValue(TEXT(""), SE_SHUTDOWN_NAME, &luid)) {
//SE_SHUTDOWN_NAME 特権を有効にする
TOKEN_PRIVILEGES tokenPrivileges = {0};
tokenPrivileges.PrivilegeCount = 1;
tokenPrivileges.Privileges[0].Luid = luid;
tokenPrivileges.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges, NULL, NULL, NULL)) {
if(GetLastError() == ERROR_SUCCESS) {
ExitWindowsEx(EWX_REBOOT, 0);
}
}
}
CloseHandle(hToken);
}
}
else { //Windows
ExitWindowsEx(EWX_REBOOT, 0);
}
CloseHandle( Mutex);
return 0;
}
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板