Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.31.100] |
|
Сообщ.
#1
,
|
|
|
собственно, сабж... желательно с исходником! Даже не желательно, а с исходником ;D
Заранее 10х... |
Сообщ.
#2
,
|
|
|
tasm file.asm
tlink /t/x file.obj <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> |
Сообщ.
#3
,
|
|
|
Цитата SUnteXx, 24.07.02, 06:20:41 собственно, сабж... желательно с исходником! Даже не желательно, а с исходником ;D Заранее 10х... Значит так. Вот кусок кода из моего модуля псевдозащиты . Первый (Для Win9x) читает значения из реестра, второй в случае Win9x читает напрямую из адреса где всё это хранится, а в случае NT - из реестра (но там оно в другом месте лежит). Пользуйтесь кому надо. Просьба ногами не пинать, писал как мог Для Win9x: //------------------------------------------------------------------------<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 : <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> |
Сообщ.
#4
,
|
|
|
Чё-т мне способ с реестром сомнителен кажеЦа, но хотя хз... Это точно работает? А на 95 вынде?
|
Сообщ.
#5
,
|
|
|
Цитата 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'а то ли матери) |
Сообщ.
#6
,
|
|
|
BYTE Date[8];
memmove(Date, 0xFFFF5, 8); |