14ee2ad04344446e610172a0e73949212923014dfSebastian Redl// Windows/NtCheck.h
22cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
32cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#ifndef __WINDOWS_NT_CHECK_H
42cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#define __WINDOWS_NT_CHECK_H
52cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
62cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#ifdef _WIN32
72cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
82cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#if !defined(_WIN64) && !defined(UNDER_CE)
92cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregorstatic inline bool IsItWindowsNT()
10a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl{
112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  OSVERSIONINFO vi;
122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  vi.dwOSVersionInfoSize = sizeof(vi);
132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  return (::GetVersionEx(&vi) && vi.dwPlatformId == VER_PLATFORM_WIN32_NT);
147faa2ec03a7ef120ac165bb45b6c70a8b20c9f1cSebastian Redl}
150eca89e9890db4d8336ce762a5b359a1d58ca02bArgyrios Kyrtzidis#endif
16e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor
17e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregor#ifndef _UNICODE
182cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  #if defined(_WIN64) || defined(UNDER_CE)
192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    bool g_IsNT = true;
202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor    #define SET_IS_NT
212a7fb27913999d132cf9e10e03dc5271faa2e9d3John McCall  #else
2289eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis    bool g_IsNT = false;
230b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor    #define SET_IS_NT g_IsNT = IsItWindowsNT();
247a1fad38256eb4c5129359be85ba1ea1678eb5c9John McCall  #endif
252cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  #define NT_CHECK_ACTION
26a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall  // #define NT_CHECK_ACTION { NT_CHECK_FAIL_ACTION }
276ab7cd853e9c15cf986a8a7c3db1f8d20e275409Sebastian Redl#else
287c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner  #if !defined(_WIN64) && !defined(UNDER_CE)
296a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor    #define NT_CHECK_ACTION if (!IsItWindowsNT()) { NT_CHECK_FAIL_ACTION }
307c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner  #else
3183d63c78810556d26b62ac4cbae2eda6cdd2570cSteve Naroff    #define NT_CHECK_ACTION
3214f79002e58556798e86168c63e48d533287eda5Douglas Gregor  #endif
3310e286aa8d39fb51a21412850265d9dae74613eeChris Lattner  #define SET_IS_NT
343251ceb90b3fec68e86d6dcfa58836e20a7205c3Douglas Gregor#endif
3514f79002e58556798e86168c63e48d533287eda5Douglas Gregor
36bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor#define NT_CHECK  NT_CHECK_ACTION SET_IS_NT
372bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor
38ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor#else
390a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor
4017fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor#define NT_CHECK
4117fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor
422596e429a61602312bdd149786045b8a90cd2d10Daniel Dunbar#endif
432cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
44fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer#endif
4514f79002e58556798e86168c63e48d533287eda5Douglas Gregor