WaitableTimerをセット後、スリープし、指定時間後に復帰するプログラムです。
Visual C++ 2008 Standard Edition 32/64bit対応

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

int WINAPI _tWinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,TCHAR* lpsCmdLine, int nCmdShow){

	MessageBox(0,TEXT("60秒後に冬眠から目覚めます"),TEXT("メッセージ"),MB_YESNO | MB_ICONQUESTION);

	HANDLE timeH = CreateWaitableTimer(NULL, FALSE, NULL);
	LARGE_INTEGER ltime;
	ltime.QuadPart = -10000000*60;		//指定時刻までのタイマー時間を100ns単位で取得 負で指定するのがミソ

	SetWaitableTimer(timeH, &ltime, 0, 0, 0, TRUE);

	
	DWORD ret;
    HANDLE hToken;
    LUID    Luid;
    TOKEN_PRIVILEGES    tNew,tPre;

    HANDLE hProcess = GetCurrentProcess();
    OpenProcessToken(hProcess, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken);
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &Luid);
    tNew.PrivilegeCount = 1;
    tNew.Privileges[0].Luid = Luid;
    tNew.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    AdjustTokenPrivileges(hToken, FALSE, &tNew, sizeof(tPre), &tPre, &ret);
	SetSystemPowerState(FALSE, FALSE);	//	サスペンド

	MessageBox(0,TEXT("おはよう"),TEXT("メッセージ"),MB_YESNO | MB_ICONQUESTION);

	CancelWaitableTimer(timeH);
	CloseHandle(timeH);

return 0;

}