00001
00002
00003
00004
00005
00006
00007 #pragma once
00008
00009 #include <windows.h>
00010
00011 namespace Swift {
00012 class WindowsRegistry {
00013 public:
00014 static bool isFIPSEnabled() {
00015 char* pathForXP = "System\\CurrentControlSet\\Control\\Lsa";
00016 char* pathSinceVista = "System\\CurrentControlSet\\Control\\Lsa\\FIPSAlgorithmPolicy";
00017 char* keyForXP = "FIPSAlgorithmPolicy";
00018 char* keySinceVista = "Enabled";
00019
00020 OSVERSIONINFO osvi;
00021 ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
00022 osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
00023 GetVersionEx(&osvi);
00024
00025 char* keyForOS = osvi.dwMajorVersion < 6 ? keyForXP : keySinceVista;
00026 char* pathForOS = osvi.dwMajorVersion < 6 ? pathForXP : pathSinceVista;
00027
00028
00029
00030 HKEY key;
00031 bool result = false;
00032 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
00033 pathForOS,
00034 0,
00035 KEY_READ,
00036 &key) != ERROR_SUCCESS) {
00037
00038 return result;
00039 }
00040 DWORD keyType = REG_DWORD;
00041 DWORD data;
00042 DWORD length = sizeof(data);
00043
00044 if (RegQueryValueEx(key,
00045 keyForOS,
00046 NULL,
00047 &keyType,
00048 (LPBYTE)&data,
00049 &length) == ERROR_SUCCESS) {
00050 result = data != 0;
00051 }
00052
00053 RegCloseKey(key);
00054 return result;
00055 }
00056 };
00057 }