Korralik reg comp php. REGINI käsk – kontrollib juurdepääsu registrivõtmetele. POSIXi mallipuhvri vabastamine

Kasulikkus REGINI.EXE algselt kaasas ressursside komplekti, kuid alates Windows XP-st on see olnud süsteemitarkvara standardkomponent. Kasutatakse haldusskriptides, et kontrollida juurdepääsu registrivõtmetele (võtmetele) kohalikus või kaugarvutis.

Käsurea vorming:

REGINI [-m \\masinanimi | -h hivefile hiveroot] [-i n] [-o outputWidth][-b] textFiles...

Käsurea valikud:

-m\\masinanimi- selle kaugarvuti nimi või aadress, mille registrivõtmete õigusi muudetakse.

-h- määrab kohalikus arvutis registritaru, mille jaoks õigused määratakse.

-i n– teksti nihe rea esimesest positsioonist. Vaikimisi on 4

-o väljundlaius- väljundliinide maksimaalne suurus. Vaikimisi on konsooli laius.

-b- määrab tagasiühilduvuse režiimi REGINI eelmiste versioonidega (tagasi ühilduv).

tekstifailid- ANSI- või Unicode-kodeeringus tekstifailide nimed, mis on registriõiguste muutmise skriptid.

Kasutamise näited:

regini/?- kuvab käsu kasutamise lühiabi.

regini acl1reg.txt- teha skriptifaili abil kohalikus arvutis registriosade (võtmete) lubade muudatusi acl1reg.txt

regini –m \\COMP0 C:\scripts\acl2reg.txt- teha kaugarvutis registri lubade muudatusi COMP0 skripti kasutades C:\scripts\acl2reg.txt

Utiliidi skriptid REGINI sisaldavad spetsiaalseid direktiive ja parameetreid, mida saab kasutada Windowsi registri jaotistele (võtmetele) juurdepääsu kontrollimiseks. Skriptifailid on tavalised tekstifailid, mida saab redigeerida näiteks Notepadi redaktori abil. Skriptiread sisaldavad tühikutega eraldatud jaotiste aadresse ja numbrilisi koode, mis määravad õigused järgmises vormingus:

(registrivõtme tee) [load]

Näiteks skriptirida, mis määrab jaotisele juurdepääsuõigused Adm:

HKEY_LOCAL_MACHINE\Software\Adm

Selles näites on õigused määratud , mida saab dekrüpteerida järgmise tabeli abil:

1 - Administraator, täielik juurdepääs

2 - Administraator, lugemine

3 - Administraator, loe ja kirjuta

4 - Administraator, lugege, kirjutage ja kustutage

5 - Looja, täielik juurdepääs

6 - Looja, lugege ja kirjutage

7 - Kõik, täielik juurdepääs

8 - See on kõik, lugemine

9 - Kõik, lugege ja kirjutage

10 - Kõik, loe, kirjuta ja kustuta

11 - Kogenud kasutajad, täielik juurdepääs

12 - Kogenud kasutajad, lugege ja kirjutage

13 - Kogenud kasutajad, lugege, kirjutage ja kustutage

14 - Süsteemihaldur, täielik juurdepääs

15 - Süsteemi operaator, loe ja kirjuta

16 - Süsteemi operaator, loe, kirjuta ja kustuta

17 - Süsteem, täielik juurdepääs

18 - Süsteem, lugeda ja kirjutada

19 - Süsteem, lugemine

20 - Administraator, lugemine, eriload

21 - Interaktiivsed kasutajad, lugemine, täielik juurdepääs

22 - Interaktiivsed kasutajad, lugemine

23 - Interaktiivsed kasutajad, lugemine, eriload

0 - Pole ühtegi rühma ega kasutajat, kellel on sellele objektile juurdepääsuõigus, kuid objekti omanik saab õigusi määrata.

Nii et kood tähendab

Administraator, täielik juurdepääs
Looja, täielik juurdepääs
Kõik, loe ja kirjuta

Tuleb arvestada asjaoluga, et varem seatud õigused lähtestatakse ja kui pärast kombinatsiooni skript kasutab näiteks käsku:

HKEY_LOCAL_MACHINE\Software\Adm

See tähendab, et koodi ei lisata 4 - Administraator, lugege, kirjutage ja kustutage olemasolevaid koode 1 5 9 ja nende asendamine. Uute õiguste lisamiseks, säilitades samal ajal vanad, peaks rida välja nägema järgmine:

HKEY_LOCAL_MACHINE\Software\Adm

Uute võtmete või parameetrite lisamisel registrisse näitab skriptifaili esimene rida võtme nime ja teine ​​(järgnev) rida parameetri nime, võrdusmärki, andmetüüpi ja väärtust:

KEY NAME

Parameetri nimi = andmetüübi väärtus

Skriptifaili näide:

HKEY_CURRENT_USER\TEST

Tekst=REG_SZ String1

Esimene rida näitab võtme (registri alamvõtme) nime HKEY_CURRENT_USER\TEST, millesse parameeter kirjutatakse, ja nurksulgudes - sellele juurdepääsuloa koodi. Kui alajaotist TEST ei eksisteeri, siis luuakse see määratud õigustega, kui see on olemas, siis muudetakse õigused nurksulgudes märgitud õigusteks. Kui loa koodi pole määratud, siis õigusi ei muudeta. Teine rida määrab sellesse registrivõtmesse kirjutatava parameetri nime ja väärtuse. Kui parameeter tekst ei eksisteeri, siis see luuakse, kui on olemas, siis muudetakse selle väärtus stringiks String1.

Võrdsusmärgi olemasolu = skriptireal tõlgendab utiliit regini.exe seda käsuna kirjutada parameeter vormingusse

nimi = tüübi väärtus

Parameetri väärtuse kustutamiseks peaks rida välja nägema järgmine:

Parameetri enda eemaldamiseks kasutage märksõna KUSTUTA

text=DELETE

Võtme nimega rea ​​alla saate parameetrite muutmiseks või lisamiseks panna mitu käsku:

text=REG_SZ See on tekst


Väärtus1=REG_DWORD 0x0A0D

Kasutades käsku REGINI kujutab endast teatud ohtu, nii et enne suuremate muudatuste tegemist süsteemis on soovitatav teha varukoopia ja tutvuda Windowsi taastemeetoditega.

Kui teil on vaja mõnda teise operatsioonisüsteemi kuuluvale registritarule seada uued õigused, peate arvestama asjaoluga, et registrivõtmete teed tuleb määrata taru nime suhtes, näiteks jaotise õiguste muutmiseks. HKEY_LOCAL_MACHINE\System juurdepääsuks peaks käsk välja nägema järgmine:

regini –h D:\oldwin\system32\config\system newacl.txt

Fail newacl.txt peaks sisaldama rida ilma alamvõtme nimeta:

Olemasolevate õiguste vaatamiseks Windows NT/2000 käsureal saate kasutada utiliiti regdmp.exe ressursside komplekti lisatööriistadest. Windows OS-i hilisemates versioonides puuduvad standardsed tööriistad registrivõtmete õiguste vaatamiseks käsureal.

Esiteks täiustame registreerimislehte, lisades avatari üleslaadimise võimaluse. Lähtepilt peab olema jpg-, gif- või png-vormingus. Samuti ei tohiks see olla suurem kui 2 MB. Ärge muretsege, pärast skripti poolt selle tihendamist on avatari suurus umbes 3 kb ja jpg-vormingus. Avage leht reg.php ja lisage see sildile < vormi> rida enctype="multipart/form-data", nagu näites:


Registreerimine










Nüüd hoiame kokku reg.php

2. Seejärel peate tabelisse looma teise välja kasutajad. Lähme juurde phpmyadmin, valige soovitud andmebaas ja tabel.


Seadsime kõik väärtused nagu joonisel:

Avatari tee salvestatakse sellele väljale ja see salvestatakse eraldi kausta, nimetagem seda "avatarideks". Kaust asub ülejäänud skriptifailidega samas kataloogis.

3. Minge faili juurde salvestada_ kasutaja. php ja lisage järgmine kood pärast sisselogimisnimest ja paroolist tühikute eemaldamist:

//eemaldage lisatühikud
$login = trimmi($login);

// lisa uus ************************************************

//lisage sisselogimise ja parooli pikkuse kontroll
if (strlen($login)< 3 or strlen($login) > 15) {
exit("Sisselogimine peab koosnema vähemalt 3 ja mitte rohkem kui 15 tähemärgist.");
}
if (strlen($parool)< 3 or strlen($password) > 15) {
exit("Parool peab olema vähemalt 3 tähemärki ja mitte rohkem kui 15.");
}

if (!empty($_POST["fuupload"])) //kontrolli, kas kasutaja on pildi saatnud
{
$fupload=$_POST["fuupload"]; $fuupload = trimmi($fuupload);
if ($fupload =="" või tühi($fupload)) (
unset($fupload);// kui muutuja $fupload on tühi, siis kustuta see
}
}
if (!isset($fupload) või tühi($fupload) või $fupload =="")
{
//kui muutujat ei ole (kasutaja ei saatnud pilti), siis määrake sellele eelnevalt ettevalmistatud pilt kirjaga "avatari pole"
$avatar = "avatars/net-avatara.jpg"; //saate joonistada net-avatara.jpg või võtta selle allikast
}
muidu
{
//muidu - laadige kasutaja pilt
$path_to_90_directory = "avatars/";//kaust, kuhu laaditakse esialgne pilt ja selle tihendatud koopia

If(preg_match("/[.](JPG)|(jpg)|(gif)|(GIF)|(png)|(PNG)$/",$_FILES["taaslaadimine"]["nimi"])) //lähtepildi vormingu kontrollimine
{
$failinimi = $_FILES["taaslaadimine"]["nimi"];
$allikas = $_FILES["fuupload"]["tmp_name"];
$sihtmärk = $tee_90_kataloogi . $failinimi;
move_uploaded_file($source, $target);//originaalfaili üleslaadimine kausta $tee_90_kataloogi
if(preg_match("/[.](GIF)|(gif)$/", $failinimi)) (
$im = imagecreatefromgif($tee_90_kataloogi.$failinimi) ; //kui originaal oli gif formaadis, siis loo samas formaadis pilt. Vajalik järgnevaks tihendamiseks
}
if(preg_match("/[.](PNG)|(png)$/", $failinimi)) (
$im = imagecreatefrompng($tee_90_kataloogi.$failinimi) ;//kui originaal oli png-vormingus, siis loo pilt samas vormingus. Vajalik järgnevaks tihendamiseks
}

If(preg_match("/[.](JPG)|(jpg)|(jpeg)|(JPEG)$/", $failinimi)) (
$im = imagecreatefromjpeg($tee_90_kataloogi.$failinimi); //kui originaal oli jpg formaadis, siis loo samas formaadis pilt. Vajalik järgnevaks tihendamiseks
}
//SAIDILT www.codenet.ru Võetud ruutkujutise LOOMINE JA SELLE JÄRGNE KOMPRESSIOON
// Looge ruut suurusega 90x90
// dest – saadud pilt
// w - pildi laius
// suhe - proportsionaalsuskoefitsient
$w = 90; // ruut 90x90. Võimalik tarnida ka teistes suurustes.
// loob selle põhjal algse pildi
// lähtefail ja määrake selle suurus
$w_src = pildidx($im); //laiuse arvutamine
$h_src = imagesy($im); //arvuta pildi kõrgus
// looge tühi ruudukujuline pilt
// truecolor on oluline!, muidu saame 8-bitise tulemuse
$dest = imagecreatetruecolor($w,$w);
// lõigake ruudu keskpunkt piki x-i välja, kui foto on horisontaalne
kui ($w_src>$h_src)
imagecopyresampled($dest, $im, 0, 0,
round((max($w_src,$h_src)-min($w_src,$h_src))/2),
0, $w, $w, min($w_src,$h_src), min($w_src,$h_src));
// lõigake ruudukujuline ülaosa piki y-d välja,
// kui foto on vertikaalne (kuigi võite kasutada ka keskmist)
if ($w_src<$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w,
min($w_src,$h_src), min($w_src,$h_src));
// ruudukujulist pilti skaleeritakse ilma kärpimata
if ($w_src==$h_src)
imagecopyresampled($dest, $im, 0, 0, 0, 0, $w, $w, $w_src, $w_src);
$kuupäev=kellaaeg(); //praegu kellaaja arvutamine.
imagejpeg($dest, $tee_90_kataloogi.$kuupäev..jpg");//salvestage pilt jpg-vormingus soovitud kausta, nimeks saab praegune kellaaeg. Loodud selleks, et avataridel ei oleks samad nimed.
//miks jpg? See võtab väga vähe ruumi + kasutaja tähelepanu hajutav GIF-pildi animatsioon hävib. Tema kommentaari pole eriti meeldiv lugeda, kui märkad silmanurgast liikumist.
$avatar = $tee_90_kataloogi.$kuupäev.".jpg";//pane avatari tee muutujasse.
$delfull = $tee_90_kataloogi.$failinimi;
unlink ($delfull);//kustutage algne üleslaaditud pilt, me ei vaja seda enam. Ülesandeks oli hankida miniatuur.
}
muidu
{
//vormingu mittevastavuse korral väljasta vastav teade
exit("Avatar peab olema vormingus JPG, GIF või PNG");
}
//laadimisprotsessi lõpp ja muutujale $avatar laaditud ava aadressi määramine
}



// lisas uus *************************************************** **
// Järgmiseks tuleb kõik artikli esimesest osast, kuid peate lisama andmebaasi päringusse muudatuse.
//ühendage andmebaasiga
// kontrollige sama sisselogimisega kasutaja olemasolu
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
if (!empty($myrow["id"])) (
exit("Vabandust, teie sisestatud sisselogimine on juba registreeritud. Palun sisesta teine ​​sisselogimine.");
}
// kui see nii ei ole, siis salvesta andmed
$result2 = mysql_query("INSERT INTO kasutajad (sisselogimine,parool,avatar) VALUES("$sisselogimine","$parool","$avatar")");
// Kontrollige, kas on vigu
kui ($tulemus2=="TRUE")
{
echo "Oled edukalt registreerunud! Nüüd saate saidile siseneda. Avaleht";
}
muu (
echo "Viga! Te pole registreerunud.";
}
?>

4. Peate samasse andmebaasi lisama ühe tabeli. See salvestab IP-aadressid, mis tegid sisselogimisel vigu. Nii saame piirata ligipääsu neile, kes eksisid rohkem kui kolm korda järjest, umbes 15 minuti jooksul.
Läheme phpmyadminisse ja loome uue 3 väljaga tabeli:


ip - IP-aadress.
kuupäev - selle ip-ga kasutaja ebaõnnestunud sisselogimise kuupäev viimase 15 minuti jooksul. col – selle ip-ga kasutaja vigade arv viimase 15 minuti jooksul.
Suurepärane! Valmis, nüüd muudame sisselogimise ja parooli kinnitusfaili, sest nüüd on meie parool krüptitud. Avage testreg.php ja kustutage kõik peale tühikute eemaldamise sisselogimisel ja paroolil. Järgmisena lisame järgmise koodi:

//eemaldage lisatühikud
$login = trimmi($login);
$parool = trimmi($parool);

// asendada uuega************************************************ *******
// ühenduge andmebaasiga
include("bd.php");// fail bd.php peab olema kõigi teistega samas kaustas, kui see pole, siis muuda lihtsalt teed
// parooli valimise minikontroll
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (tühi($ip) || $ip=="tundmatu") ( $ip=getenv("REMOTE_ADDR"); )//extract ip
mysql_query ("DELETE FROM oshibka WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(date) > 900");//kustutage 15 minuti pärast sisselogimisel vea teinud kasutajate IP-aadressid.
$result = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db // toovad andmebaasist välja antud IP-ga kasutaja ebaõnnestunud sisselogimiskatsete arvu viimase 15 jooksul);
$myrow = mysql_fetch_array($tulemus);
if ($myrow["col"] > 2) (
//kui vigu on rohkem kui kaks, st kolm, siis väljastame teate.
exit("Sisestasite oma kasutajanime või parooli 3 korda valesti. Palun oodake 15 minutit enne uuesti proovimist.");
}
$parool = md5($password);//parool krüpteeritakse
$password = strrev($password);// usaldusväärsuse huvides lisage vastupidine
$parool = $parool."b3p6f";
//saate oma maitse järgi lisada paar oma tegelast, näiteks sisestades "b3p6f". Kui see parool on toore jõuga sisse häkitud samas md5 serveris, siis ilmselgelt ei tule sellest midagi head. Aga soovitan panna teised märgid, võib-olla rea ​​algusesse või keskele.
//Sellisel juhul on vaja andmebaasis paroolivälja pikkust suurendada. Krüpteeritud parool võib olla palju suurem.

$result = mysql_query("SELECT * FROM kasutajad WHERE login="$sisselogimine" JA parool="$parool"",$db); //võtab andmebaasist kõik andmed sisestatud sisselogimise ja parooliga kasutaja kohta
$myrow = mysql_fetch_array($tulemus);
if (tühi($myrow["id"]))
{
//kui sisestatud sisselogimise ja parooliga kasutajat pole olemas
//Teeme kirje, et see ip ei saanud sisse logida.
$select = mysql_query("SELECT ip FROM oshibka WHERE ip="$ip"");
$tmp = mysql_fetch_row($select);
if ($ip == $tmp) (//kontrolli, kas kasutaja on tabelis "oshibka"
$result52 = mysql_query("SELECT col FROM oshibka WHERE ip="$ip"",$db);
$myrow52 = mysql_fetch_array($tulemus52);
$col = $myrow52 + 1;//lisage veel üks ebaõnnestunud sisselogimiskatse
mysql_query("UPDATE error SET col=$col,date=NOW() WHERE ip="$ip"");
}
muu (
mysql_query("INSERT INTO oshibka (ip,date,col) VALUES ("$ip",NOW(),"1")");
//kui viimase 15 minuti jooksul vigu ei esinenud, siis sisesta tabelisse "oshibka" uus kirje
}

exit("Vabandust, teie sisestatud kasutajanimi või parool on vale.");
}
muu (
nbsp; //kui paroolid klapivad, siis käivitame kasutaja jaoks seansi! Võite teda õnnitleda, ta sai sisse!
$_SESSION["parool"]=$myrow["parool"];
$_SESSION["sisselogimine"]=$myrow["sisselogimine"];
$_SESSION["id"]=$myrow["id"];//neid andmeid kasutatakse väga sageli, nii et sisselogitud kasutaja kannab neid endaga kaasas

//Järgmisena salvestame andmed küpsistesse järgnevaks sisselogimiseks.
//TÄHELEPANU!!! TEGE SEDA OMA VÄLJA VALMISTAMISEL, KUNA ANDMED SALVESTATAKSE KÜPSISES ILMA krüptimiseta
if ($_POST["salvesta"] == 1) (
//Kui kasutaja soovib, et tema andmed salvestataks järgnevaks sisselogimiseks, siis salvestame need tema brauseri küpsistesse
setcookie("sisselogimine", $_POST["sisselogimine"], time()+9999999);
setcookie("parool", $_POST["parool"], time()+9999999);
}}
kaja" ";//suuname kasutaja avalehele, kus teavitame teda edukast sisselogimisest
?>

5. Muudame avalehe täielikult. Sellel on vaja kuvada kasutaja avatari, kuvada link kontolt väljalogimiseks ja lisada märkeruut, et sisselogimisel parool meeles pidada.
Indeks.php

// kogu protseduur toimib seanssidena. See on koht, kus kasutaja andmeid hoitakse saidil viibimise ajal. Väga oluline on need käivitada kohe lehe alguses!!!
session_start();
include("bd.php");// fail bd.php peab olema kõigi teistega samas kaustas, kui see pole, siis muuda lihtsalt teed
if (!empty($_SESSION["sisselogimine"]) ja !empty($_SESSION["parool"]))
{
//kui seanssides on sisselogimine ja parool, siis kontrolli need üle ja too avatari
$sisselogimine = $_SESSION["sisselogimine"];
$parool = $_SESSION["parool"];
$result = mysql_query("SELECT id,avatar FROM kasutajatest WHERE login="$sisselogimine" JA parool="$parool",$db);
$myrow = mysql_fetch_array($tulemus);
//võtab välja vajalikud kasutajaandmed
}
?>


Avaleht


Avaleht

if (!isset($myrow["avatar"]) või $myrow["avatar"]=="") (
//kontrollib, kas kasutajaandmed on andmebaasist välja võetud. Kui ei, siis pole ta sisse logitud või seansi parool on vale. Kuvame sisselogimisakna. Aga sissetulnutele me seda välja ei pane, neil pole seda enam vaja.
printida<<


SIIN;

If (isset($_COOKIE["login"])) //kas COOKIE-s on sisselogimisega muutuja. See peaks nii olema, kui kasutaja klõpsas eelmise sisselogimise ajal märkeruudul "Jäta mind meelde".
{
//kui jah, siis sisesta selle väärtus vormi. Sel juhul näidatakse kasutajale, et tema sisselogimine on juba vajalikku veergu sisestatud
echo " value="".$_COOKIE["sisselogimine"]."">";
}

printida<<




SIIN;

If (isset($_COOKIE["parool"]))//kas COOKIE-s on parooliga muutuja. See peaks nii olema, kui kasutaja klõpsas eelmise sisselogimise ajal märkeruudul "Jäta mind meelde".
{
//kui jah, siis sisesta selle väärtus vormi. Sel juhul näidatakse kasutajale, et tema parool on juba nõutavasse veergu sisestatud
echo " value="".$_COOKIE["parool"]."">";
}

Prindi<<



Mäleta mind.






Registreeri



Olete külalisena sisse logitud

SIIN;
}
muidu
{
//kui sisselogimine õnnestub, antakse kasutajale kõik allpool tärnide vahel.

printida<<
Olete saidile sisse logitud kasutajana $_SESSION (välju)


See link on saadaval ainult registreeritud kasutajatele

Sinu avatar:




SIIN;

//************************************************************************************
//kui sisselogimine õnnestub, antakse kasutajale kõik, mis asub ÜLAL tärnide vahel.
}
?>



6. Sisselogitud kasutajatel on vaja välja logida. Avalehel oli juba link väljumiseks. Kuid seda faili pole veel olemas. Loome siis uue faili exit.php koodiga:

session_start();
if (tühi($_SESSION["sisselogimine"]) või tühi($_SESSION["parool"]))
{
//kui sisselogimise ja parooliga seanssi pole, siis pääses sellele failile ligi sisse logimata kasutaja. Ta ei kuulu siia. Saadame veateate ja peatame skripti
exit ("Juurdepääs sellele lehele on lubatud ainult registreeritud kasutajatele. Kui olete registreerunud, logige saidile sisse oma kasutajanime ja parooliga
Koduleht");
}

unset($_SESSION["parool"]);
unset($_SESSION["sisselogimine"]);
unset($_SESSION["id"]);// hävitada muutujad seanssides
exit (" ");
// saadab kasutaja avalehele.
?>

OK, nüüd on kõik läbi! Nautige seda oma tervise nimel! Edu!

Windowsi register on lihtsalt hierarhiliselt struktureeritud andmebaas, milles operatsioonisüsteem ja muud rakendused salvestavad olulist konfiguratsiooniteavet.

Kõik registrisse salvestatud andmed: kasutajaprofiilid, seose failitüüp, riistvarateave, seerianumbrid ja palju muud. Kuna laiendusfunktsioon win32std on saadaval, on teie PHP-põhistel Windowsi rakendustel juurdepääs registrile.

Laienduse Win32std saab eelkompileeritud teekidena alla laadida saidilt downloads.php.net/Pierre/. Lihtsalt asetage see kausta PHP-Ext, värskendage faili php.ini ja vajadusel taaskäivitage Apache. Pange tähele, et allalaaditavad teegid on 32-bitised, nii et kui kasutate 64-bitist järgu, peate kas installima WampServeri 32-bitise järgu või proovima teeki ise kompileerida.

Registri paigutus

Registril on Windowsi operatsioonisüsteemis tumeda, ohtliku ja hirmutava koha maine. See on ilmselt liialdatud hirm, kuid ma kordan Microsofti tsitaati sellegipoolest:

Enne registris muudatuste tegemist tehke sellest varukoopia ja veenduge, et mõistate, kuidas seda probleemide ilmnemisel taastada. Selle vale muutmine võib põhjustada tõsiseid probleeme, mis võivad nõuda operatsioonisüsteemi uuesti installimist.

Windowsi register on jagatud 5 põhirühma, mida nimetatakse võtmeteks:

  1. HKEY_CURRENT_CONFIG – võti salvestab teavet arvuti riistvara kohta, näiteks monitori eraldusvõime ja kõlarite sätted. Seda võtit näete lühendatult HKCC.
  2. HKEY_LOCAL_MACHINE – jaotis sisaldab masina konfiguratsiooniteavet, näiteks printerite, tarkvara ja võrguteavet. Võti laaditakse ja seejärel alistavad kasutajaprofiili kirjed erinevad väärtused. Näete seda võtit lühendatult HKLM.
  3. HKEY_USERS – võti sisaldab kõiki masina kohalike kasutajakontode profiile. Sellised asjad nagu kasutaja ekraanisäästja, teabeteema ja muud seaded. Sellel võtmel on lühend HKU.
  4. HKEY_CLASSES_ROOT – võti on varjunimi, mis osutab HKEY_LOCAL_MACHINE\Software'ile, mis salvestab seosefailide teabe ja MIME tüübid. Lühend HKCR.
  5. HKEY_CURRENT_USER – võti on varjunimi, mis osutab praeguse kasutaja HKEY_USERS profiilile. Näete seda võtit lühendatult HKCU.

Iga jaotis sisaldab alajaotisi, mis omakorda sisaldavad muid alajaotisi, konfiguratsiooniväärtusi.

HKEY_CURRENT_USER toimingust piisab mitme CLI- ja liivakastiskriptiga mängude jaoks. Süsteemiandmete laialdaseks kasutamiseks kasutatakse ainult HKEY_LOCAL_MACHINE, kui tunnete end mugavalt Microsofti turbelubadega. Et mõista, mis on teie olukorra jaoks õige, on oluline teada, millise konto all PHP töötab, ja luua võtmed asjakohaselt.

Liivakasti disain

Soovitan turvakaalutlustel luua skriptides kasutamiseks spetsiaalne võti, eriti kui tegelete arendusega. Eksimine on inimlik ja me ei taha, et sa midagi olulist kogemata ümber kirjutaksid. Organisatsioon on veel üks põhjus määratud võtme loomiseks. Register salvestab palju teavet.

Registri vaatamiseks ja muutmiseks kasutatakse Microsofti programmi. Liivakasti loomiseks minge menüüsse Start, tippige otsinguribale "regedit" ja valige kuvatavast tulemuste loendist regedit.exe.

Vasakpoolne paan näitab olemasolevate võtmete puustruktuuri, parempoolne aga nendele salvestatud väärtused. Laiendage sõlme HKEY_CURRENT_USER, paremklõpsake tarkvaral ja valige Uus > Võti hüpikkontekstimenüüst. Lisaks saime ka klahvide abil puus liikuda, et tarkvara esile tõstetakse ja valik tehakse Uus > Võti menüüst Muuda. Sisestage nimi ja vajutage sisestusklahvi.

Nüüd on meil mänguruumi. Lubage mul tutvustada teile registrikirjete manipuleerimise funktsioone, mida win32std pakub.

Lugemine registrist

Funktsioon reg_open_key() avab ühenduse registriga ja tagastab ressursi. Seejärel kasutatakse seda ressurssi teiste sellel ühendusel põhinevate registrifunktsioonidega. Funktsioon reg_close_key() sulgeb ühenduse.

reg_open_key() kasutab kahte argumenti: esiteks eelmääratletud konstant, mis esindab üht viiest registri põhirühmast, ülejäänud tee soovitud võtmeni.

Nüüd on ühendus avatud, saate registrist teavet funktsioonide reg_enum_key(), reg_enum_value() ja reg_get_value() abil.

Kui ressurss edastatakse koodile reg_enum_key(), tagastab see praeguse võtme alamvõtmete massiivi. Täisarvu saab edastada ka konkreetse indeksi alajaotuse saamiseks.

$subkey) ( echo "Alamvõti aadressil " . $index . " on " . $subkey . "\n"; ) // konkreetse alamvõtme hankimine $index = 2; $alamvõti = reg_enum_key($reg, $indeks); echo "Alamvõti aadressil " . $indeks. "on". $subkey. "\n"; ?>

Nii nagu reg_enum_key() tagastab võtmed, tagastab reg_enum_value() võtmeväärtused. See funktsioon aktsepteerib täiendava indeksiga ressursse. Väärtuste nimed saab väärtuse hankimiseks edastada funktsioonile reg_get_value().

$value) ( ​​echo "Väärtus kohas " . $index . " on " . $value . " ja salvestab "; echo reg_get_value($reg, $value) . "\n"; ) // konkreetse väärtuse toomine antud indeks $indeks = 1; $väärtus = reg_enum_value($reg, $indeks); echo "Väärtus juures" . $indeks. "on". $ väärtus . "ja kauplused"; echo reg_get_value($reg, $value) . "\n"; ?>

Registri kanne

Registrisse lugemisel ja kirjutamisel saate valida mitut tüüpi andmeid. Need on PHP dünaamilise olemuse tõttu tavaliselt väikese väärtusega, kuid väärtuse kirjutamisel peate määrama tüübi. Enamasti kasutate REG_SZ või REG_DWORD, kuid siin on loend laienduse pakutavatest andmetüüpidest:

  • REG_DWORD – väärtus on salvestatud 32-bitiste täisarvudena
  • REG_SZ – väärtus salvestatakse fikseeritud pikkusega stringina
  • REG_EXPAND_SZ – väärtus salvestatakse muutuva pikkusega
  • REG_MULTI_SZ – väärtus on elementide loend, mis on eraldatud eraldajaga (nt tühik või koma)
  • REG_BINARY – väärtus on kahendstring
  • REG_NONE – väärtusega ei ole seotud kindlat andmetüüpi

Funktsiooni reg_set_value() kasutatakse väärtuste registrisse kirjutamiseks. Kui väärtus on juba olemas, kirjutatakse see üle, kui seda pole, siis luuakse väärtus. Funktsioonil on neli argumenti: esimene avatud ressurss, väärtuse nimi, eelmääratletud konstant, mis tähistab andmeväärtuse tüüpi, ja lõpuks andmed ise.

Näide – USB-draivi dongle

Võite olla üllatunud, et registriga töötamiseks on praktilisi kasutusvõimalusi. Saate veebirakenduse konfiguratsiooniteavet salvestada registrisse. Kui oled kirjutanud avalduse, siis võib register olla hea koht, kus salvestada kõikvõimalikku infot rakenduse andmete kohta lähtuvalt kasutaja eelistustest. Windows ise kirjutab igasugust huvitavat ja olekuga seotud registriteavet ning osa sellest võib olla kasulik, kui oled piisavalt loominguline.

Oletame, et meie PHP-rakendus on litsentsitud ja selle käivitamiseks peab serveriga olema ühendatud USB-võti. Kuidas PHP võtme olemasolu tuvastab? Windowsi vastus peitub registris! Igal seadmel on kordumatu ID ja seega otsib skript ID-le vastavaid võtmeid.

Esimene samm on seadme ID määramine. Selle näite jaoks kasutan draivi. Lihtsalt ühendage USB-mälupulk arvuti USB-porti ja seejärel atribuutides Minu arvuti vali seadmehaldus kuvatavate tulemuste loendis.

Leidke seade seadmehaldurist, paremklõpsake kirjel ja valige Omadused kontekstimenüüst. Seejärel minge aknas vahekaardile Intelligentsus ja valige Seadme eksemplari tee ripploendist. Kuueteistkümnendsüsteemi numbrite jada seadme ID väärtuse lõpuni (märgitud punasega).

Windows logib USB-seadmete olemasolu ja HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services erinevate alamvõtmete olemasolu. Meediumitel, nagu usbstori mälupulk, usbaudio, usbccgp ja usbehci. Lisaks pange tähele, et HKEY_LOCAL_MACHINE on saadaval ainult privilegeeritud kontodele.

Nüüd saame lihtsalt otsida seadme eksemplari jaoks alamvõtit Enum. Kui draiv on ühendatud, on see loendis ja kui see pole ühendatud, pole see loendis.

See on lihtne kontroll, avab ka muid huvitavaid võimalusi, saate lihtsalt kodeerida lihtsalt administraatoriliidese, mis kontrollib võtit ja päring saadetakse serverist endast, kontrollides $_SERVER["REMOTE_ADDR"] . See meetmete kogum nõuab, et kasutaja logiks füüsiliselt sisse spetsiaalsesse serverisse ja pakuks füüsilise autentimise vormi.

Lõpuks

Kogu selle artikli jooksul olete näinud, mis on Windowsi register, ja väikest näidet selle kohta, kuidas sellest teavet leida. Saate kirjutada oma konfiguratsiooniandmed või lugeda teavet laienduse win32std funktsioonide abil.

#kaasa
#kaasa
int regcomp(regex_t *preg, püsimärk *regex, intclipud);
int regexec(const regex_t *preg, püsimärk *string, suurus_tnmatch,
regmatch_tpmatch, intlipud);
size_t regerror(intveakood, const regex_t *preg, täht*errbuf,
suurus_terrbuf_size);
void regfree(regex_t *preg);

KIRJELDUS

POSIX regulaaravaldiste koostamine

Funktsioon regcomp() kasutatakse regulaaravaldise kompileerimiseks vormingusse, mis sobib järgmisteks otsinguteks regexec().

regcomp() suunatakse kursor puhvermalli salvestusalale preg, osutab nulliga lõppenud stringile regex ja lipud clipud, mida kasutatakse koostamise tüübi määramiseks.

Kõik regulaaravaldise otsingud tuleb teha kompileeritud puhvermustri abil, seega regexec() tuleb alati välja kutsuda funktsiooni poolt lähtestatud puhvrimalli aadressiga regcomp().

Tähendus clipud võib koosneda bittide kaupa või null või enam järgmistest väärtustest:

REG_EXTENDED Kasutage tõlgendamisel POSIXi laiendatud regulaaravaldise süntaksit regex. Kui see lipp pole lubatud, kasutatakse POSIX-i lihtsat regulaaravaldise süntaksit. REG_ICASE Ignoreeri suurtähti. Järgnevad otsingud regexec() selle puhvermustri kasutamine ei ole tõstutundlik. REG_NOSUBÄrge teatage tikkude asukohta. Valikud nmatch Ja pmatch Sest regexec() ignoreeritakse, kui antud puhvri mall kompileeriti selle lipu abil. REG_NEWLINE Suvalise tähemärgiga sobitamise operaatorid ei ühti reavahetuse märgiga.

Mittesobivate märkide loend ( [^...] ) ilma reavahetuseta ei ole sama, mis reavahetus.

Võrdlusoperaator stringi alguses ( ^ ) vastab tühjale stringile vahetult pärast reavahetust lipud, hukkamise lipud regexec(), sisaldama REG_NOTBOL.

Rea lõpu võrdlusoperaator ($) sobitab tühja stringi kuni rea alguse märgini, olenemata sellest lipud sisaldab REG_NOTEOL.

Võrdlus POSIX regulaaravaldisega

Funktsioon regexec() kasutatakse nulllõpuga stringi võrdlemiseks eeltöödeldud puhvermustriga preg. Argumendid nmatch Ja pmatch kasutatakse mis tahes matšide asukoha kohta teabe edastamiseks. Tähendus lipud võib olla bitipõhine VÕIüks või mõlemad väärtused REG_NOTBOL Ja REG_NOTEOL. Need väärtused määravad allpool kirjeldatud võrdlusprotsessi käitumise. REG_NOTBOL Võrdlusoperaator stringi alguses ebaõnnestub alati (kuid vaadake ülalkirjeldatud kompileerimislippu REG_NEWLINE). Seda lippu saab kasutada siis, kui regexec() stringi eraldi osad edastatakse ja sellise stringi algust ei tohiks antud juhul tõlgendada uue rea algusena. REG_NOTEOL Rea lõpu võrdlusoperaator alati ebaõnnestub (kuid vaadake ülalkirjeldatud kompileerimislippu REG_NEWLINE).

Baitide nihked

Kui REG_NOSUB ei ole puhvermalli koostamisel määratud, on võimalik saada teavet vastete asukoha kohta. Tähendus pmatch tuleb määratleda vähemalt nmatch elemendid. Nad täituvad regexec() tekstisiseste vastete aadressid. Alam-avaldise nihked, mis algavad tähega i- avatud sulg, salvestatud pmatch[i]. Kogu regulaaravaldise vaste aadress salvestatakse pmatch(pange tähele, et vaste nihke tagastamiseks N alamväljendid, tähendus nmatch peab olema vähemalt N+1). Kõik kasutamata struktuurielemendid sisaldavad väärtust -1.

Struktuur regmatch_t, mis on tüüp pmatch, määratletud aastal :

Typedef struct ( regoff_t rm_so; regoff_t rm_eo; ) regmatch_t;

Iga element rm_so, mis ei võrdu -1-ga, näitab antud stringi suurima alamstringi järgmise vaste algusnihet. Suhteline element rm_eo tähistab vaste lõpu nihet, mis on esimene märk vastendatud teksti järel.

POSIX-i vigadest teatamine

Funktsioon regerror kasutatakse tõrkekoodide teisendamiseks, millest võidakse saada regcomp() Ja regexec(), veateate ridadesse.

IN regerror edastatud: veakood veakood, puhvermuster preg, kursor märgistringi puhvrile errbuf ja reapuhvri suurus errbuf_size. Funktsioon tagastab suuruse errbuf, mis on vajalik veateate salvestamiseks null-lõpuga stringina. Kui errbuf, Ja errbuf_size ei ole siis võrdsed nulliga errbuf täidetud kõigepealt errbuf_size – 1 veateate tähemärki ja lõpeb nullbaidiga ("\0").

POSIXi mallipuhvri vabastamine

Funktsioon regfree() vabastab puhvermallile eraldatud mälu preg koostamise käigus kasutades regcomp().

TAGASTUSVÄÄRTUS

Funktsioon regcomp() tagastab eduka kompileerimise korral nulli või muul juhul veakoodi.

Funktsioon regexec() tagastab nulli vastel või REG_NOMATCH, kui vasteid poleks.

VEAD

Funktsioon regcomp() võib tagastada järgmised vead: REG_BADBR Tagasilingi operaatori vale kasutamine. REG_BADPAT Malli operaatorite (nt rühma või loendi operaatorite) vale kasutamine. REG_BADRPT Kordusoperaatorite vale kasutamine, näiteks "*" kasutamine esimese märgina. REG_EBRACE Paarimata sulud intervalltehterites. REG_EBRACK Sidumata nurksulud loendilausetes. REG_ECOLLATE Kehtetu sortimiselement. REG_ECTYPE Tundmatu märgiklassi nimi. REG_EEND Võimalik viga. Pole POSIX.2-s määratletud. REG_EESCAPE Tagumine kaldkriips. REG_EPAREN Paarimata sulud rühmitustehterites. REG_ERANGE Ala operaatori vale kasutamine: näiteks ala lõpp ilmub enne selle algust. REG_ESIZE Kompileeritud regulaaravaldis nõuab puhvermustrit, mis on suurem kui 64 KB. See pole POSIX.2-s määratletud. REG_ESPACE Regulaaravaldiste rutiinide mälu on otsa saanud. REG_EBUREG Kehtetu tagasiviide alamavaldisele.