Adott egy PIPO X8 nevű touchscreen-es kijelző alá épített minipc, ami bedrótozottan win10-et futtat.
Adott egy program, ami a háttérben fut és ha elérhető egy adott oldal, akkor feldobja a Google Chrome-ot kiosk/incognito módban az adott oldallal.
Az oldalról letölthető egy "IP állító" program, ami a IPv4, subnet mask és gateway értékeit hivatott beállítani.Ezt a beállítást a netsh
exec()
-el történő meghívásával csinálja, ami xp és 7-es alatt működik, de itt nem. Ha a parancssorba becopyzom a kiadott utasítást, akkor elhajt, hogy adminisztrátori jogkör szükséges. A futtató user adminisztrátori jogosultságokkal rendelkezik. Természetesen, ha azt kérem, hogy command prompt as admin, akkor működik, de nekem ugyanezt a programból kéne kiadnom és nem pedig a cmd.exe-ből. Próbáltam a runas /user:administrator
segítségével végrehajtatni, de azt se engedte.
A kód:
Exec('netsh interface IPv4 set address name="Ethernet 2" source= static addr=' + edit1.text + '.' + edit2.text + '.' + edit3.text + '.' + edit4.text + ' mask=' + edit5.text + '.' + edit6.text + '.' + edit7.text + '.' + edit8.text + ' gateway=' + edit9.text + '.' + edit10.text + '.' + edit11.text + '.' + edit12.text + ' 1');
Aztán, próbáltam egy winapi-s függvényt is, ami állítólag beállítaná ezeket a címeket:
procedure SetStaticIpAddress(const NetworkCard, IPAddress, Mask, GateWay :string);
const
WbemUser ='';
WbemPassword='';
WbemComputer='localhost';
wbemFlagForwardOnly = $00000020;
var
FSWbemLocator : OLEVariant;
FWMIService : OLEVariant;
FWbemObjectSet : OLEVariant;
FWbemObject : OLEVariant;
FOutParams : OLEVariant;
vIpAddress : OLEVariant;
vGateWays : OLEVariant;
vMask : OLEVariant;
oEnum : IEnumvariant;
iValue : LongWord;
begin
CoInitialize(nil);
FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
FWMIService := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
FWbemObjectSet:= FWMIService.ExecQuery(Format('SELECT * FROM Win32_NetworkAdapterConfiguration Where Description="%s"',[NetworkCard]),'WQL',wbemFlagForwardOnly);
oEnum := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
if oEnum.Next(1, FWbemObject, iValue) = 0 then
begin
vIpAddress := VarArrayCreate([0, 0], varVariant);
vIpAddress[0]:= IPAddress;
vMask := VarArrayCreate([0, 0], varVariant);
vMask[0]:= Mask;
FOutParams:=FWbemObject.EnableStatic(vIpAddress, vMask);
vGateWays := VarArrayCreate([0, 0], varVariant);
vGateWays[0]:= GateWay;
FOutParams:=FWbemObject.SetGateways(vGateWays);
end;
CoUninitialize;
end;
Ez elszáll "invalid query" hibával.
Aztán próbáltam a HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<GUID>
alatt beállítani, ami kézzel sikerült is, de ezzel két problémám is akadt: az egyik, hogy hogyan kérem le egy adott eszköz interface GUID-jét, hogy tudjam melyik alatt kell belepiszkálni, (mert ezt programból kell beállítanom és nem szemmel néznem, hogy ez lesz az, vagy sem), a másik, hogy a változást a rendszer nem veszi észre magától, újra kell indítani, vagy legalábbis a hálózatot újra kéne húzni, de az ipconfig /renew
nem ment.
Tehát akkor az érdemi kérdések:
- Hogyan tudom elérni, hogy a netsh
parancsot meg tudjam hívni a programból, elevated accessel?
- Mi a baja a winapi-s függvénynek?
- Hogyan tudom lekérni egy interface GUID-jét (a név ismert) és utána újrahúzatni a hálózatot, miután a registryben átírtam amit kell?
A három kérdés közül ha egyre választ kapok, már megoldódik a probléma.
Előre köszönöm a segítséget.
- 2767 megtekintés
Hozzászólások
"próbáltam a HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\<GUID> alatt beállítani, ami kézzel sikerült is"
Programból nem fog, elevated access hiányában.
"Hogyan tudom elérni, hogy a netsh parancsot meg tudjam hívni a programból, elevated accessel?"
Röviden: sehogy.
"Mi a baja a winapi-s függvénynek?"
Az elevated access hiánya.
"Hogyan tudom lekérni egy interface GUID-jét (a név ismert) és utána újrahúzatni a hálózatot, miután a registryben átírtam amit kell?"
Mivel nem tudod átírni, a kérdésre lényegtelen a válasz. :)
Ha a Winnel azt csinálsz, amit akarsz, akkor írd meg külön service-ként, induljon a Windowszal system jogon, hallgasson valahol, ahova átadod az IP-t, és csinálja meg a service a váltást.
- A hozzászóláshoz be kell jelentkezni
Már megoldottam: ha a HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA
kulcsot zéróra állítom, akkor a felhasználó által futtatott programok mindig elevated accessel futnak. Így a megoldás az lett, hogy fenti kulcs nullázása, majd utána a programban már megy a registry értékek átírása és aztán a reboot.
- A hozzászóláshoz be kell jelentkezni
Bocs, de ez nem megoldás, hanem iszonyatos hákolás, és reménykedés abban, hogy nem törik ezen keresztül szanaszét a hálózatod. Nem poénból találta ki az MS, hogy alapból nincs elevated access az admin jogú usereknek.
- A hozzászóláshoz be kell jelentkezni
Ezzel nem tudok mit kezdeni, ez sem a megrendelőt, sem a főnökömet nem érdekli, viszont még ma készen kellett lennie. Egyébként a cucc egy zárt hálózaton ülő munkaidőterminál lesz, senkit nem érdekel a biztonság.
- A hozzászóláshoz be kell jelentkezni
A főnökös érvet tökéletesen megértem, de azért tartsd fejben a régi indián közmondást miszerint "Zárt hálózat az ami be van öntve betonba."
- A hozzászóláshoz be kell jelentkezni
Ez nem a főnököm hibája, a gépek csak a minap érkeztek (jó sok késés után, hurrá Kína) és mivel a program már rég kész volt és xp meg 7-es alatt ment, így azt hittem, hogy menni fog 10-es alatt is, csak fel kell rakni. Hiba volt. Azt én értem, hogy sok a hülye, meg sok a vírus és az ms kínjában már minden marhaságot kitalál - leginkább minden kattintásra rákérdez, hogy most te kattintottál oda, vagy meghekkelték a gépedet - de nem értem, hogy miért nem teszik ezt opcionálissá; legyen valahol egy beállítás, hogy "tudom mit csinálok, kapcsold ki ezt a sok blockert a francba" és ennyi. Külön szívás volt, hogy erre a gépre home verziót tettek és a normál verzióval ellentétben - ahol legalább ilyen eldugott felületeken megvolt a lehetőség a blockerek egyesével történő kikapcsolgatására - ebből az ms gondosan kigyomlált minden ilyen lehetőséget.
De, hogy ne csak az ms legyen ekézve a hordozhatóság, meg a kompatibilitás miatt, elmondom, hogy a webes felületen a szervízkártyás beállításoknál volt két db. number
típusú HTML input mező, amikbe egy odarajzolt numerikus keypaddal lehetett bepötyögni a számokat (a terminál érintőképernyős, egér és billentyűzet nincsen, egy zárt dobozba van bezárva az egész) és ez Opera 12-ben ment, Firefox 45-ben dettó. Ehhez képest a gépre felpakolt vadiúj Chrome és Firefox nemes egyszerűséggel közölték, hogy number
típusú mezőre a selection nem támogatott többé (a caret pos-t, azzal lehet lekérni). Magyarul pár verzióval korábban ezt még simán megcsinálták a böngészők, most meg nem, mert csak. Nem tudom ennek mi értelme volt, de biztos van rá valami szakmai magyarázatnak álcázott bullshit, hogy miért kell valamit kivenni, ami amúgy működik.
Mintha az egész ipar arra gyúrna rá, hogy ami tegnap még működött, azt mára tönkre kell tenni, mert nem jó, ha nem rossz.
- A hozzászóláshoz be kell jelentkezni
Ez olyan volt, mint amikor a kezdő linuxosok akarják mindenáron megszüntetni a jelszó bekérést... Fentebb javasolták, hogy auto DHCPt állíts a terminálon, és rendelj hozzá egy statikus IPt a routerben. Legalább nem szivat így meg. Gyors, egyszerű. Amúgy a Win10 meg kellene jelenítsen virtuális billentyűzetet ha tapis képernyőn akarsz form/input-ba pötyögni, nem? Minek külön num keypadot varázsolni? Vagy valami spéci oka van?
- A hozzászóláshoz be kell jelentkezni
Én meg már elmondtam, hogy nem én állítom össze a hálózatot; a feladat ez volt, ezt kellett megoldani. Nincs DHCP. A virtuális billentyűzetet nem lehet használni, mert az oprendszert teljesen ki kellett takarni, csak a kioszk módban futó böngésző és a benne lévő weblap látható.
- A hozzászóláshoz be kell jelentkezni
Akkor minek windows?
pch
--
http://www.buster.hu "A" számlázó
--
- A hozzászóláshoz be kell jelentkezni
Ezt is leírtam: Bedrótozottan win10 van ezen a PIPO X8-ason.
- A hozzászóláshoz be kell jelentkezni
Én úgy látom, hogy ez csak lekéri a címeket, de nem írja át.
- A hozzászóláshoz be kell jelentkezni
Ha lent megnézed a linkeket, ide is eljuthatsz: https://msdn.microsoft.com/en-us/library/windows/desktop/aa366073
Kérdés van-e értelme túrkálni itt, ha úgyis megoldottad, és szerinted elég nekik így.
- A hozzászóláshoz be kell jelentkezni
Az a baj, hogy én UNIX-okra fejlesztek, a winhez nem értek és ennek ma kész kell lennie, nincs időm beleásni magam, mert még ezen kívül is van dolgom a projekttel. Egyébként nem tudom, hogy az elevated access hiánya az IP helpernek is meggátolná-e az állítgatást, mert az alapján, amit blr írt, meg kéne, hiszen ezt is ugyanaz a sima process hívta volna meg.
És mondom, zárt hálózaton fog futni, van egy db. Linuxos szerver, meg az egy db. win10-es munkaidőterminál, nincs netre kötve a rendszer; azonfelül zárt dobozban lesz, egér, billentyűzet és USB portok nélkül, csak a LAN-on ülő szerveren lévő weblap fog látszani. Így a megtörés miatt szerintem nem kell félni.
Ha kellene, nem így lenne kezelve a dolog.
- A hozzászóláshoz be kell jelentkezni
De miért nem DHCP-n kap címet? Mire jó, hogy kézzel állítgatják? Egyáltalán, minek állítgatni?
- A hozzászóláshoz be kell jelentkezni
Azért, mert a rendszer fix IP címekkel dolgozik. Minden ajtónak, sorompónak, kamerának fix IP címe van, mert a rendszer így tartja nyilván, hogy honnan jött adat. Így aztán a kártyalehúzós munkaidőterminálnak is fix címe van.
- A hozzászóláshoz be kell jelentkezni
Nem követtem a szálat, de az hogy DHCP-vel van osztva az miben változtatja meg azt, hogy milyen IP címet oszt ki neki a DHCP szerver? Ha akarod ítéletnapig ugyanazt.
- A hozzászóláshoz be kell jelentkezni
Nem tudom, nem én terveztem a rendszert. Így működik, ezt kellett megcsinálni.
- A hozzászóláshoz be kell jelentkezni
Ha fix IP-n működő biztonsági, proximity, illetve munkaidő nyilvántartó rendszer van, akkor minek kell IP-t változtatgatni programból?
- A hozzászóláshoz be kell jelentkezni
Mert egyszer, az elején be akarják állítani, viszont a rendszerhez nem akarnak hozzáférést adni. Csak a munkaidőterminál programja fut, kitakarva mindent, ráhúzva egy SW_HIDE-ot a tálcára is.
- A hozzászóláshoz be kell jelentkezni
Értem. Tehát ez igazából egy egyszeri művelet lesz, nem?
Ha igen, akkor a rendszer telepítésekor kell ezt beállítani, és akkor már nem feltétlenül a programból tenném meg, hanem eleve a Win felületéről. Hisz a rendszer telepítését nem a felhasználó fogja végezni, nem?
- A hozzászóláshoz be kell jelentkezni
A szoftver telepítését mi végezzük, de az eszköz beállítását nem. Én összeraktam idehaza a terminálokat, de a helyére pakolni (és az IP-t beállítani) már a megrendelő fogja.
- A hozzászóláshoz be kell jelentkezni
Lehet létrehozni olyan parancsikont ami elevated acces-el fut alapból. Akkor indításnál kap a user egy kérdést, viszont nem fog minden azzal menni.
- A hozzászóláshoz be kell jelentkezni
Itt az indításkori kérdés nem játszik. Ennek újrainduláskor kérdés nélkül el kell jutnia a munkaidőterminál felületéig. Elevated joggal felruházott parancsikont hogy indítasz startupkor? Indítópult megeszi?
- A hozzászóláshoz be kell jelentkezni
Elevated jog is játszhat, rákérdezés nélkül.
A trükk az, hogy készíteni kell egy ütemezett feladatot, ami az alkalmazást elindítja, a feladatnál be lehet állítani, hogy rendszergazda módban fusson. Időzítést nem kell neki adni.
Ezután az alkalmazás így indítható:
C:\Windows\System32\schtasks.exe /run /tn "feladat neve"
Így kiemelt joggal fog futni és nem fog kérdezni sem.
Gábor
- A hozzászóláshoz be kell jelentkezni
Thx a tippet.
- A hozzászóláshoz be kell jelentkezni
Akkor a DHCP szerveren kell statikus címhozzárendelést állítani MAC cím alapján és kész is.
De pl Windows AD esetén ugyanez megy gépnévvel is és még átláthatóbb is lesz, csak gondolom nem akarjátok tartományba is léptetni az eszközöket
- A hozzászóláshoz be kell jelentkezni
Nincs DHCP. Statikus IP-k vannak. Az okát nem tudom, mert nem én terveztem a rendszert, de így működik és kész.
- A hozzászóláshoz be kell jelentkezni