Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Цитата DmitriiV:
Возможны и другие варианты, но здесь надо знать больше подробностей об условиях
Вариантов, как и условий - много. Особенно доставляет WMI: были прецеденты, когда Win32_OperatingSystem содержал не совсем верную информацию о системе, например, в одной из контор, где была развернута Win7, система определялась как 2008 R2. А ведь такого же эффекта можно добиться незамысловатым С-кодом:
Код: Выделить весь код
#include <windows.h>
#include <stdio.h>
#include <locale.h>

#define CreateString(String) #String,
#define FifthBranch(Type) Type(2000) Type(XP) Type(Server 2003)
#define SixthBranch(Type) Type(Vista\\Server 2008) \
  Type(7\\Server 2008 R2) \
  Type(8\\Server 2012) \
  Type(8.1\\Server 2012 R2)

VOID (__stdcall *RtlGetNtVersionNumbers)(
    LPDWORD Major,
    LPDWORD Minor,
    LPDWORD Build
);

BOOL Is64BitSystem() {
  #if defined(_WIN64)
    return TRUE;
  #elif defined(_WIN32)
    BOOL x64 = FALSE;
    return IsWow64Process(GetCurrentProcess(), &x64) && x64;
  #else
    return FALSE;
  #endif
}

int main(void) {
  DWORD _maj = 0, _min = 0;
  const char *Fifth[] = {FifthBranch(CreateString)};
  const char *Sixth[] = {SixthBranch(CreateString)};
  
  setlocale(LC_CTYPE, "");
  
  if (!(RtlGetNtVersionNumbers = (PVOID)GetProcAddress(
    GetModuleHandle("ntdll.dll"), "RtlGetNtVersionNumbers"
  ))) {
    LPVOID msg;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
        NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR) &msg, 0, NULL
    );
    printf("%s\n", msg);
    LocalFree(msg);
    return -1;
  }
  
  printf("%s, Windows ", Is64BitSystem() ? "64-bit" : "32-bit");
  RtlGetNtVersionNumbers(&_maj, &_min, NULL);
  switch (_maj) {
    case  5: printf(Fifth[_min]); break;
    case  6: printf(Sixth[_min]); break;
    case 10: printf("10\n");      break;
    default: printf("Unknown");   break;
  }
  
  return 0;
}
Такие коврижки.

Отправлено: 17:03, 29-09-2016 | #5