На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Как получить дату создания биоса
    собственно, сабж... желательно с исходником! Даже не желательно, а с исходником ;D
    Заранее 10х...
      tasm file.asm
      tlink /t/x file.obj
      ExpandedWrap disabled
        <br>.286<br>.model tiny<br>.code<br>org 100h<br>start:<br>               push       0F000h      ;F000:FFF5- ASCII BIOS date<br>               pop        ds<br>               <br>               mov        dx, 0FFF5h<br>               mov        bx, 1       ;standart output device<br>               mov        cx, 8       <br>               mov        ah, 40h     ;write file via handle<br>               int        21h         ;ah=40h, int 21h<br><br>               ret<br>end start<br>
        Цитата SUnteXx, 24.07.02, 06:20:41
        собственно, сабж... желательно с исходником! Даже не желательно, а с исходником ;D
        Заранее 10х...


        Значит так. Вот кусок кода из моего модуля псевдозащиты  :). Первый (Для Win9x) читает значения из реестра, второй в случае Win9x читает напрямую из адреса где всё это хранится, а в случае NT - из реестра (но там оно в другом месте лежит).
        Пользуйтесь кому надо. Просьба ногами не пинать, писал как мог  ;)

        Для Win9x:
        ExpandedWrap disabled
          //------------------------------------------------------------------------<br>void btGetBIOSInfoClick()<br>{<br>      TRegistry *tReg=(TRegistry *)new TRegistry;<br><br>      tReg->RootKey = HKEY_LOCAL_MACHINE;<br>      tReg->LazyWrite = false;<br>      tReg->OpenKey("Enum\\Root\\*PNP0C01\\0000", false);<br><br>      AnsiString BiosDate;<br>      AnsiString BiosName;<br>      AnsiString BiosVer;<br><br>      try<br>      {<br>            BiosDate = tReg->ReadString("BIOSDate");<br>      }<br>      catch (ERegistryException& xcpt)<br>      {<br>            BiosDate="<Error>";<br>      }<br><br>      try<br>      {<br>            BiosName = tReg->ReadString("BIOSName");<br>      }<br>      catch (ERegistryException& xcpt)<br>      {<br>            BiosName="<Error>";<br>      }<br><br>      try<br>      {<br>            BiosVer = tReg->ReadString("BIOSVersion");<br>      }<br>      catch (ERegistryException& xcpt)<br>      {<br>            BiosVer="<Error>";<br>      }<br><br>      delete tReg;<br><br>      AnsiString BIOSInfo="Name : " + BiosName + "\nVersion : " + BiosVer + "\nDate : " + BiosDate;<br><br>      Application->MessageBox(BIOSInfo.c_str(), "BIOS Information", MB_OK);<br>}<br>//----------------------------------------------------------------------------------<br>


        Для W2K/XP :

        ExpandedWrap disabled
          <br>//---------------------------------------------------------------------------<br>AnsiString StrFromPtrA(long lpszA)<br>{<br>      char far *Ptr=(char far *)lpszA;<br><br>      int len=lstrlen(Ptr);<br>      char *s=new char[len];<br>      AnsiString RetVal;<br><br>      lstrcpy(s, (char *)lpszA);<br><br>      RetVal=AnsiString(s);<br><br>      delete [] s;<br><br>      return RetVal;<br>}<br>//---------------------------------------------------------------------------<br>AnsiString __fastcall GetRegString(HKEY Reg_key, AnsiString Path, AnsiString Key)<br>{<br>      TRegistry *reg=new TRegistry();<br>      TRegDataType rdtKeyDataType;<br>      AnsiString Result;<br>      bool rescode;<br><br>      reg->Access=KEY_ALL_ACCESS;<br>      reg->RootKey = Reg_key;<br><br>      rescode=reg->OpenKey(Path, false);<br>      if(!rescode)<br>      {<br>            reg->CloseKey();<br>            delete reg;<br>            return (Result="<Registry Key not found>");<br>      }<br><br>      try<br>      {<br>            if(reg->ValueExists(Key))<br>            {<br>                  rdtKeyDataType=reg->GetDataType(Key);<br>                  if(rdtKeyDataType==rdString || rdtKeyDataType==rdExpandString)<br>                        Result=reg->ReadString(Key);<br>                  else if(rdtKeyDataType==rdUnknown)<br>                        Result="<Unknown Registry value type>";<br>                  else<br>                        Result="<Wrong Registry value type>";<br>            }<br>            else<br>            {<br>                  Result="<Registry value not found>";<br>            }<br>      }<br>      catch(ERegistryException &xcpt)<br>      {<br>            Application->MessageBox(xcpt.Message.c_str(), "Error reading registry value", MB_OK|MB_ICONEXCLAMATION);<br>            Result="<Error>";<br>      }<br>      reg->CloseKey();<br>      delete reg;<br><br>      return Result;<br>}<br>//---------------------------------------------------------------------------<br>AnsiString SystemBiosDate()<br>{<br>      AnsiString Result;<br><br>      if(isWinNT())<br>            Result = GetRegString(HKEY_LOCAL_MACHINE, "Hardware\\Description\\System", "SystemBiosDate");<br>      else//Win9x<br>            Result=StrFromPtrA(0xFFFF5);<br><br>      return Result;<br>}<br>//---------------------------------------------------------------------------<br>
        Сообщение отредактировано: SUnteXx -
          Чё-т мне способ с реестром сомнителен кажеЦа, но хотя хз... Это точно работает? А на 95 вынде?
            Цитата SUnteXx, 25.07.02, 01:12:25
            Чё-т мне способ с реестром сомнителен кажеЦа, но хотя хз... Это точно работает? А на 95 вынде?


            Вариант для Win9x работает под Win98 - проверено.
            Второй вариант - для обоих операционок - работает под Win98 и должен работать под Win95, т.к. значения получаются напрямую из BIOS.
            Вот, кстати ещё список адресов с полезной инфой:
              0xC00A8 - Video BIOS Date & Revision (все в одной строке - надо разгребать)
              0xC0048 - Video BIOS Version & CopyRight (тоже, что и выше)
              0xFFFF5 - System BIOS Date
              0xFE091 - System BIOS CopyRight
              0xFE061 - System BIOS Version
              0xFEC71 - System BIOS Extra Info (та самая сигнатура то ли BIOS'а то ли матери)
             
              BYTE Date[8];
              memmove(Date, 0xFFFF5, 8);
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0375 ]   [ 16 queries used ]   [ Generated: 29.03.24, 10:52 GMT ]