Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: об установленном сервис-паке  (Прочитано 7221 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Алиса
Гость
« : 20-08-2008 20:01 » 

Как получить ифу об установленном sp in XP?
PsGetVersion возвращает в парметр строку == NULL, на RtlVerifyVersionInfo линкер ругается (наверно DDK голимый).
можно из реестра получить, но не хотелось бы с ним возится.
что делать?

с RtlVerifyVersionInfo скомпилилось, наконец-то.
поскажите, как ее использовать?
спасибо!
« Последнее редактирование: 20-08-2008 20:29 от Алиса » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 21-08-2008 05:44 » 

у меня так получилось Улыбаюсь
Код:
OSVERSIONINFO VersionInfo;
memset(&VersionInfo,0,sizeof(VersionInfo));
VersionInfo.dwOSVersionInfoSize=sizeof(VersionInfo);

if(GetVersionEx(&VersionInfo))
{
int iii=1;
}

Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 21-08-2008 05:46 » 

собственно,
Цитата
szCSDVersion
Pointer to a null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack installed on the system. If no Service Pack has been installed, the string is empty.
Windows Me/98/95:  Pointer to a null-terminated string that indicates additional version information. For example, " C" indicates Windows 95 OSR2 and " A" indicates Windows 98 Second Edition.
Записан

Алиса
Гость
« Ответ #3 : 21-08-2008 12:06 » 

GetVersionEx из драйвера?

я делаю так:

   ULONG TypeMask=VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR;
   ULONGLONG  ConditionMask = 0;
            RTL_OSVERSIONINFOEXW VersionInfo;
   memset(&VersionInfo,0,sizeof(RTL_OSVERSIONINFOEXW));
   VER_SET_CONDITION(ConditionMask,VER_MAJORVERSION,0);
   VER_SET_CONDITION(ConditionMask,VER_MINORVERSION,0);
   VER_SET_CONDITION(ConditionMask,VER_SERVICEPACKMAJOR,0);
   VER_SET_CONDITION(ConditionMask,VER_SERVICEPACKMINOR,0);
   
   NTSTATUS status = RtlVerifyVersionInfo(&VersionInfo, TypeMask,ConditionMask);
   if(!NT_SUCCESS(status))
   {
      DbgPrint("pmon: Error call version %X\n", status);   
   }else
      DbgPrint("pmon: Major %04X,   Minor %04X\n",
                              VersionInfo.wServicePackMajor,
                         VersionInfo.wServicePackMinor);

получаю ошибку: C00000059
« Последнее редактирование: 21-08-2008 12:54 от Алиса » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 21-08-2008 14:24 » 

"Typically, RtlVerifyVersionInfo returns STATUS_SUCCESS only if all comparisons succeed. However, the major version, minor version, and service pack version are tested in a sequential manner in the following way:

If the major version exceeds the minimum required, then the minor version and service pack version are not tested. For example, if the current major version is 6.0, a test for a system greater than or equal to version 5.1 service pack 1 succeeds. The minor version and service pack version are not tested.
If the minor version exceeds the minimum required, then the service pack version is not tested. For example, if the current major version is 5.2, a test for a system version greater than or equal to version 5.1 service pack 1 succeeds. The service pack version is not tested.
If the major service pack version exceeds the minimum required, then the minor service pack version is not tested. "

а ошибка из за того что ComparisonType==0 в VER_SET_CONDITION()

а ошибку ты получаешь STATUS_REVISION_MISMATCH, что значит The specified version does not match the currently running version of the operating system.


попробуй заполнить структуру целиком и правильно.


не проще кстати RtlGetVersion использовать? (PsGetVersion - устаревшая)

и наконец. The RtlVerifyVersionInfo routine compares a specified set
сравнивает!!!! то есть надо указать в VersionInfo - то с чем ты сравниваешь, а потом при помощи VER_SET_CONDITION - задать условия сравнения.... и получить ответ да/нет! (STATUS_SUCCESS или STATUS_REVISION_MISMATCH)

описание http://msdn.microsoft.com/en-us/library/ms804307.aspx
пример http://www.microsoft.com/whdc/driver/tips/w2kDrvLoad.mspx
« Последнее редактирование: 21-08-2008 14:54 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Алиса
Гость
« Ответ #5 : 21-08-2008 16:08 » 

Ochkarik, точно
так помогло:
    RTL_OSVERSIONINFOEXW osVerInfo;
    memset(&osVerInfo, 0,sizeof(RTL_OSVERSIONINFOEXW));
    osVerInfo.dwOSVersionInfoSize = sizeof(RTL_OSVERSIONINFOEXW);
    RtlGetVersion((PRTL_OSVERSIONINFOW)&osVerInfo);
спасибочки!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines