Acces violation w c++ Builderze v 5.0

0

Chcę np. wyświetlic nazwe BIOSu na Label1 po kliknieciu Button1. Prosta funkcja:

void __fastcall TForm1::Button1Click(TObject Sender)
{
char NazwaBiosu[100];
strcpy(NazwaBiosu, (char
)0xFE061);
Label1->Caption = NazwaBiosu;
}

Proste. Kompiluje kod pod Borland Builder 5 i Win XP.
Wszystko jest OK. Jak uruchamiam program i klikam na Button1, wyskakuje mi Acces violation at adress... DLACZEGO??? Czy moze to byc spowodowane zabezpieczeniami w Windowsie XP???

Drugi problem jest ze wstawkami assemblerowskimi. Chce zapalic diode, np CapsLock na klawiaturze. Kod programu:

asm
{
mov al, 0xed // Sterowanie diodami LED
out 0x60, al // przesłanie danych do klawiatury
mov eax, 4 // kombinacja diod do zaświecenia, 4-CapsLock
out 0x60, al // zaświecenie diod
}
po uruchomieniu programu klikam na OK i zamiast diody wyskakuje mi
"Priviliged instruction"
CO TO JEST???
POMOCY:)

0

void __fastcall TForm1::Button1Click(TObject Sender)
{
char NazwaBiosu[100];
strcpy(NazwaBiosu, (char
)0xFE061);
Label1->Caption = NazwaBiosu;
}

problem jest w strcpy(NazwaBiosu, (char*)0xFE061);
poniewaz system nie zezwala na dostep do pamieci pod tym adresem!

0

Instrukcje IN i OUT nie dzialaja w trybie uprzywilejowania 3 (musi byc 2 lub nizej - zarezerwowane dla sterownikow systemowych i jadra). Czyli na nasze: tak tego nie zrobisz.
Zainstaluj program jako usluge. Funkcje API do instalacji uslugi pozwalaja okreslic jej stopien uprzywilejowania i jesli bedzie on odpowiedni, instr. IN i OUT zaczna dzialac.

0

Dzieki Krolik, tylko że nie za bardzo łapie jak moge zainstalowac program jako usługę??? Wiesz moze ktore to sa funkcje?

0

jak moge napisac kod programu żeby system zezwalał na dostep do pamieci pod tym adresem 0xFE061??? Szukałem w pomocy Bildera ale nie za bardzo moge sie połapac.

1 użytkowników online, w tym zalogowanych: 0, gości: 1