안녕하세요. 개발하다가 막히는 부분이 있어서 도움을 받고자.. 질문을 올립니다..
시스템 종료시 저희 프로그램에서 WM_QUERYENDSESSION 를 통해 로그 내용을 서버로 보내고 종료하도록 하고있습니다. 10초정도 시간이 걸려서 ShutdownBlockReasonCreate(), ShutdownBlockReasonDestroy() 함수를 사용하여 block 을 걸었는데요.. 이게 비스타 이후 부터 지원하는 함수더라구요..
7이상에서는 정상적으로 동작하고 있는데 xp 환경에서는
"프로시저 시작 지점 ShutdownBlockReasonDestroy을(를) DLL USER32.dll에서 찾을 수 없습니다."
라는 메시지가 나오네요.. 
프로시저라서 그런지
OutputDebugStringW를 타기 전에 프로그램이 죽어버리고 if 문으로 비스타 이상 분기 처리를 해도 프로그램이 죽어버립니다.
ShutdownBlockReasonCreate() 함수 외에 다른 함수로 대체할 수 있는 함수가 있는지..
아니면 해당 함수로 해결할 방법이 있는지 여쭤봅니다..
아래는 해당 예제 코드 입니다.
LRESULT CMFCApplication6Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
 switch (message)
  {
  case WM_QUERYENDSESSION:
    if (lParam & ENDSESSION_CRITICAL)
    {
      
    }
    else
    {
      if ((lParam & ENDSESSION_CLOSEAPP) || (lParam & ENDSESSION_LOGOFF))
      {
        OSVERSIONINFOEX osvi;
        ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
        osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
        if ( GetVersionEx((OSVERSIONINFO*)&osvi) == TRUE )
        {
          // 비스타 이상
          if (osvi.dwMajorVersion >= 6)
          {
            OutputDebugStringW(L"비스타 이상");
            ShutdownBlockReasonCreate(GetSafeHwnd(), L"test");
            ShutdownBlockReasonDestroy(GetSafeHwnd());
          }
          else
          {
            OutputDebugStringW(L"비스타 이전"); 
          }
        }  
      }
    }
  }
  return CDialogEx::WindowProc(message, wParam, lParam);
}
        
        
                    
                    
                    
                    
                    
    
                    
                    
                    
                    
                    
                
                    [최초 등록일: ]
                    [최종 수정일: 4/20/2017]