咄咄怪事,一个MFC程序离开了VC6的CTRL+F5则无法正常运行

怪事,一个MFC程序离开了VC6的CTRL+F5则无法正常运行
一个简单的关机程序
通过outputdebugstring看能正常走到定时器回调里面去
但是无法执行::ExitWindowsEx(EWX_SHUTDOWN, EWX_FORCE);这个API。
如果在VC6中使用CTRL+F5带起来程序。才能正常执行流程。直接执行debug或release目录的执行文件则无法重启。这是为啥???
源码下载http://pan.baidu.com/s/1jGn71S6
------解决思路----------------------
还有用户权限问题,调试时获取的系统权限高,运行时权限低,xitWindowsEx(EWX_SHUTDOWN, EWX_FORCE)的表现可能不一样,这个函数在不同的操作系统里也有不同的表现
------解决思路----------------------
“调试时获取的系统权限高,运行时权限低”

所以提高 Privilege Level
------解决思路----------------------
bool AdjustPrivileges() {
    HANDLE hToken;
    TOKEN_PRIVILEGES tp;
    TOKEN_PRIVILEGES oldtp;
    DWORD dwSize=sizeof(TOKEN_PRIVILEGES);
    LUID luid;

    if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES 
------解决思路----------------------
 TOKEN_QUERY, &hToken)) {
        if (GetLastError()==ERROR_CALL_NOT_IMPLEMENTED) return true;
        else return false;
    }
    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &luid)) {
        CloseHandle(hToken);
        return false;
    }
    ZeroMemory(&tp, sizeof(tp));
    tp.PrivilegeCount=1;
    tp.Privileges[0].Luid=luid;
    tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
    /* Adjust Token Privileges */
    if (!AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), &oldtp, &dwSize)) {
        CloseHandle(hToken);
        return false;
    }
    // close handles
    CloseHandle(hToken);
    return true;
}