シャットダウン時間を記録するプログラム

シャットダウンを実施して、シャットダウン時間を記録するプログラムを作ってみました。

動作
①現在のシステム時間を取得しログファイルに保存する
②シャットダウン命令を実行する
③ファイルへ書き込む

ログファイルはプログラムを実行した時のホームディレクトリに保存されます。

使用用途
1. 毎日のシステム停止時間のログ取得に利用
2. レジストリ変更時に再起動した時間を保存しておきたい時に利用

システム停止時間はイベントログ見ればいいやん、とかバッチファイルだったらもっと簡単やんとかの突っ込みはなしの方向で(汗)

====プログラムはここから====

#include
#include

#define TIMESIZE 22

int main(){
int syntaxerrflug = 0;
BOOL rtl;
SYSTEMTIME localsystemtime;
WORD year,month,day,hour,minute,second;
FILE *fp;
char timestr[TIMESIZE];
DWORD ret;
HANDLE hProcess;
HANDLE hToken;
LUID Luid;
TOKEN_PRIVILEGES tokenNew,tokenPre;


//システム時間取得ここから
GetLocalTime(&localsystemtime);
year = localsystemtime.wYear;
month = localsystemtime.wMonth;
day = localsystemtime.wDay;
hour = localsystemtime.wHour;
minute = localsystemtime.wMinute;
second = localsystemtime.wSecond;

//ファイルへの書き出しここから
fp = fopen("shuttime.txt","a");

if(fp == NULL){
printf("file open error\n");
exit(-1);
}

sprintf(timestr,"%d/%d/%d %d:%d:%d\n",year,month,day,hour,minute,second);
fprintf(fp,"%s",timestr);

if(fp == NULL){
printf("file close error\n");
exit(-1);
}
fclose(fp);

//shutdownプログラムここから

hProcess = GetCurrentProcess();
OpenProcessToken(hProcess, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken);
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &Luid);

tokenNew.PrivilegeCount = 1;
tokenNew.Privileges[0].Luid = Luid;
tokenNew.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, &tokenNew, sizeof(tokenPre), &tokenPre, &ret);

rtl = ExitWindowsEx(EWX_SHUTDOWN, 0);
if(rtl == 0){
printf("#Error:Shutdown was failed.\n");
exit(-1);
}
return(0);
}

====プログラムここまで====

バイナリデータ(zip圧縮)は以下です。
http://www.geocities.jp/j1401072/shuttime.zip