Keresés

Hirdetés

Új hozzászólás Aktív témák

  • kampi_

    csendes tag

    Sziasztok!

    Szeretnék csinálni, egy olyan programot, aminek kb ez lenne a működési elve, hogy van egy .txt (pl.:Parget.txt) és van egy másik (pl.:what.txt). A target.txt-ben csak gépnevek vannak. Minden gép domainban van. Ha elindítom a progit, akkor a target.txt-ből kiolvassa a gépneveket, és minden gépen lefutattja a what.txt-ben megadott file-szerveren lévő fájlt. Ez így medoldható szerintetek? Mert én csak leginkább olyan megoldást találtam, hogy külön csinálok egy kliens progit, amit minde gépre fel kell tennem, és egy szerver progit, amit meg ugye én vezérelek, hogy mit csináljon éppen a progi. A kérdés az lenne, hogy ahogy én leírtam (nem a kliens-szerver megoldással) megoldható-e valahogyan a progi amit szeretnék, és ha igen akkor egy két ötletet is kérnék, hogy nagyjából miket kellene hozzá használnom.

    Előre is ksözi szépen a segítséget!

  • kampi_

    csendes tag

    válasz Jester01 #979 üzenetére

    Hi!

    Ezt megtaláltam én is, de ez azért nem jó nekem, mert 2-300 gépről beszélünk, és mire begépelem mindet, addigra ugyanott vagyok ahol a aprt szakad...Ezért lenne jó ha én tudnám megcsinálni, úgy hogy egy fájlból olvassa ki, a gépneveket.... ;)

  • kampi_

    csendes tag

    Utoljár 4-5 éve programoztam rendesebben, szóval mind a kettő problémát jelent :) Bár most eszembe jutott, hogy olyan progit tudok csinálni, ami meghívja a psexec-et és ott paraméteresen átadom neki az épp aktuális gépnevet. Legalábbi remélem, hogy menni fog ;) Köszi szépen a segítséget

  • kampi_

    csendes tag

    Sziasztok!

    Tudnátok nekem mondani egy függvényt, aminek segítségével C-ben tudok egy külső programot futtatni paraméterekkel?? Én így próbáltam :

    execl("psexec.exe","\\\\target -i -c d:\\kampi\\map.bat",NULL);

    A target az egy változó, ami mindig egy épp aktuális gépnevet tartalmaz amit fájlból olvas ki, de így nem műkődik sajnos. :((

    Előre is köszönöm a segítséget!

  • kampi_

    csendes tag

    válasz Fire/SOUL/CD #993 üzenetére

    Hi!

    Tehát ha jól értem, akkor elvileg ebben a formában működnie kellene, ugye?

    execl("psexec.exe","\\\\target -i -c d:\\kampi\\map.bat",NULL);

    Csak az volt a gáz ezzel, hogy a "target" változót nem értelmezte rendesen, mert a "\\target" nevű gépen akarta lefutattni a progit, pedig pont az lenne a lényege, hogy a target az változik. Kiolvas egy gépnevet egy fájlból és azon a gépen lefut a progi, aztán kiolvassa a következőt és megint lefut. Mondjuk azóta variáltam még, csak sajnos legkésőbb hétfőn este tudom majd kipróbálni....

    Másik kérdés. Mielőtt ez a rész lefutna, akarok egy olyat, hogy megpingelje az összes gépet ami a fájlban van, mert ha a psexec-et egy olyan gépen akarom futtatni, ami nem elérhető akkor leáll a progi. Ezért szertnék olyat csinálni, hogy előtte megpingelek minden gépet ami a fájlban van, és ha elérhető, akkor kiírja egy fájlba, ha meg nem akkor egy másik fájlba, és így tuti lefutna végig a progi rendesen. A kérdés csak az, hogy hogyan tudom a ping visszatérési értékét vizsgálni?? Nincs erre valamilyen ötletetek, vagy programrészleteteket, ami ha lefutott a ping akkor pl.: visszaad 0-át, ha nem elérhető, akkor 1-et, ha meg valamilyen hiba van akkor 2-vel. Mert így már tudnám kezelni rendesen.

    Köszi a segítséget!

  • kampi_

    csendes tag

    Sziasztok!

    Egy gyors kérdésem lenne. Van egy gépnév mint pl:: computer1234 ebből szeretnék én egy olyat, hogy az utolsó 4 karakter ténylegesen int tipusú legyen ne char. Tudnátok ebben segíteni. Nekem sehogysem jön össze. Nagyon fontos lenne!

    Előre is köszönöm a segítséget!

    Üdv:Kampi

  • kampi_

    csendes tag

    Sziasztok!

    Szeretnék csinálni, egy olyan programot, aminek az a lényege, hogy egy fájlból kiolvasom programok elérési útvonalait és megniytom azokat a programokat. Ha bezártam őket, akkor megnyitja megint. Odaáig eljutottam simán, hogy createprocess-el megnyitom a programokat, de hogyan tudom figyelni, hogy bezáródott-e? Tudnátok ebben segíteni?

    (system függvény használata azért nem jó, mert az megvárja amíg bezáródik a megnyitott alkalmazás, és addig megáll a program. Nekem viszont pont az kellene, hogy egyszerre nyitok meg mindent, és ha akármelyik alkalmazást bezárom, akkor azt újraindítja)

    Előre is köszi a segítséget!

    kampi

  • kampi_

    csendes tag

    válasz sghc_toma #1069 üzenetére

    Hi!

    Köszönöm a sok segítséget, de ehhez én még kevés vagyok :)
    Próbálkoztam a WaitForMultipleObjects , de az nem igazán jött össze. Úgyhogy maradtam a te megoldásodnál. Ami egyszerűbbnek tűnik, csak az a bajom, hogy nem tudom hogyan kell HANDLE-t kérni. Én így próbáltam:

    HANDLE handle;

    handle = OpenProcess(READ_CONTROL, false, proc_data[1].proc_id);

    De ha itt kiiratom a handle-t akkor csak valamilyen egyre növekvő számokat kapok vissza. Tudnál ebben segíteni?

    Előre is köszönöm!

    kampi

  • kampi_

    csendes tag

    Bocs, megint én.

    Azt elfelejtettem megírni, hogy ha a handle==NULL mint ahogy mondtad, akkor újra megnyitnám a bezárt process-t, de soha nem lesz NULL. :(

    Köszi a segítséget.

    kampi

  • kampi_

    csendes tag

    Sziasztok!

    Az előző kérdéseimet már megoldottam, de most felmerült egy újabb. Szóval ugye egy olyan progit csinálok, ahol egy fájlban megadom a programok elérési útonalait, és a progi elindítja őket.Ha bezárom valamelyik általam megnyitott progit akkor pedig megnyitom újból. Most már minden szép és jó, viszont felmerült egy olyan probléma, hogy csa kettőt hajlandó megnyitni a program. Ez lehet a createprocess miatt? Itt a program is:

    #include <windows.h>
    #include <stdio.h>
    #include <conio.h>

    #define Buf_Size 16*1024

    struct proc {
    char proc_name[300];
    int proc_id;
    };

    void file_exists(const char * filename);
    void filempty(char * filename);
    void createproc (char * str, int i, proc *);
    int count(char * file);

    struct proc proc_data[3];

    int main ()
    {
    int i;
    FILE *appfile;
    char tmp[Buf_Size];
    bool fute;

    int current,ret,line;

    current=0;
    line=0;

    file_exists("Application.txt");
    filempty("Application.txt");
    line = count("Application.txt");
    //struct proc proc_data[line];

    appfile = fopen("application.txt","r");

    while ( fgets(tmp, sizeof tmp, appfile) != NULL )
    {
    createproc(tmp,current,proc_data);
    current++;
    }//while

    fclose(appfile);

    i=0;
    while (1)
    {
    if (i==line) i=0;
    current++;
    Sleep(2000);
    HANDLE phandle = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, proc_data[i].proc_id);
    if (phandle==NULL) createproc(proc_data[i].proc_name,current,proc_data);
    CloseHandle(phandle);
    i++;
    }//while

    }//main

    void createproc (char * str, int i,proc *proc_data)
    {
    STARTUPINFO StartInfo;
    PROCESS_INFORMATION ProcInfo;
    memset(&ProcInfo, 0, sizeof(ProcInfo));
    memset(&StartInfo, 0 , sizeof(StartInfo));
    StartInfo.cb = sizeof(StartInfo);
    StartInfo.wShowWindow = SW_HIDE;
    CreateProcess(NULL, str, NULL, NULL, false, 0, NULL, NULL, &StartInfo, &ProcInfo);

    strcpy(proc_data[i].proc_name,str);
    proc_data[i].proc_id = ProcInfo.dwProcessId;

    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
    }//createproc

    Ha valaki lát benne hibát legyen szíves szóljon, mert én nem találom, és fontos lenne! Vagy ha esetleg más megoldást tudtok mondani, amivel 2-nél több alkalmazást tudok megnyitni (ha esetleg a createprocess lenne a ludas) akkor jelezzétek!

    Előre is köszönöm a segítséget!

    kampi

  • kampi_

    csendes tag

    válasz Jester01 #1086 üzenetére

    Hi!

    Igen egyenlőre tényleg 3 processznak van helye, mert most csak tesztelem. De ettől függetlenül is, csak kettőt nyit meg! Az fgets előtt megnézem, hogy létezik-e fájl, és hogy üres-e? Azt tény, hogy azt nem tudom hogy lehet megnézni, hogy üres-e egy sor, vagy hogy az egész megvan-e, de ha te tudod, akkor elmondhatnád :) Az OpenProcess elvileg NULL-t ad vissza. Legalábbis én azért gondolom, mert ha nem lenne NULL akkor nem teljesülne ez a feltétel : if (phandle==NULL) createproc(proc_data[i].proc_name,i,proc_data); De teljesül mert ha bezárom, akkor megnyitja megint a process-t, tehát teljesülnie kell,nem? A while(1) cilusbanpedig csak elfelejtettem átírni a current-et i-re.:( De már kijavítottam. De ettől függetlenül azt nem mondtad meg, hogy miért csak kettő process nyílik meg és nem több? :) Vagy ez lehet ezek a hibák miatt? A CloseHandle-es részt nem igazán értem hogy mire gondoltál. Sajnos ezeket a handleket meg a createprocess-t nem teljesen vágom, hogy hogyan műkődnek. Ezért is kértem segítséget :)

    Kampi

  • kampi_

    csendes tag

    válasz Jester01 #1088 üzenetére

    Hi!

    Már rájöttem mi volt a baj! Ugye a fájl tartalma így nézett ki pl, hogy :
    notepad
    maspaint
    notepad

    És az volt a gáz, hogy ugye a sor végén volt egy "\n". Na ezért indult el scak kettő. Levágtam a soremeléseket és már jó is. Hibátlanul megy. 13 processra próbáltam ki, és megy simán. Azért köszönöm a segítséget :)

    Az rendben van hogy a hossza nulla, de hogy nézem meg egy sor hosszát?
    fgets(tmp, sizeof tmp, appfile) == NULL . Erre gondolsz?

    És hogyan lehetne levágott egy sor? Gondolom ha nem férne bele a tmp-be,nem? De azért 16 Kb-ba már csak belefér minden :)

    Köszi mégegyszer a segítséget!

    kampi

  • kampi_

    csendes tag

    Sziasztok!

    Fennti progim működik úgy ahogy kell, de felmerült egy probléma. Win 2000 esetén mindig az utolsó process ablakát teszi aktívvá. Erre tudnátok valami megoldást, hogy hogyan tudnám azt megcsinálni, hogy ne tegye mindig az utolsó processt aktívvá?

    Előre is köszi a segítséget!

    kampi

  • kampi_

    csendes tag

    Sziasztok!

    Megint lenne egy jó kérdésem. Hogyan tudom C-ben lekérdezni egy gép MAC címét? Van erre valami függvény, vagy nekem kell megcsinálni? Meg az is érdekelne, hogy ha van egy gép, ami ki van kapcsolva, de háló és táp rá van dugva, akkor le tudom-e kérdezni a MAC címét valahogyan?

    Előre is köszi a segítséget!

    kampi

  • kampi_

    csendes tag

    Sziasztok!

    Tudja valaki, hogy hogyan lehet megoldani C-ben azt, hogy létrehozok egy process-t, de úgy mintha run as-szel futttatnám? Tehát bekérem a felhasználónevet, meg a jelszót, meg hogy milyen process process-t nyissak meg, és az eredmény az hogy megnyílik a program csak úgy mintha az adott felhasználó nevében nyitnám meg.

    Thx, kampi

  • kampi_

    csendes tag

    válasz kampi_ #1167 üzenetére

    Hi!

    Azt hiszem megtaláltam. Ha minden igaz akkor a CreateProcessWithLogonW függvénnyel tudok ilyet csinálni. Ha nem, akkor légyszíves szóljatok, mert hiába fogok próbálkozni :)

    Thx, kampi

  • kampi_

    csendes tag

    Hi!

    Tudja valaki hogy hogyan kell használni a CreateProcessWithLogonW fv-t? Vagy csak én vagyok béna, és azért nem jó?

    Így próbálom,de nem történik semmi, a CreateProcessWithLogonW mindig 0-t ad vissza,vagyis valamilyen hiba van,csak nem találom meg hogy mi? :(

    STARTUPINFO StartInfo;
    PROCESS_INFORMATION ProcInfo;
    memset(&ProcInfo, 0, sizeof(ProcInfo));
    memset(&StartInfo, 0 , sizeof(StartInfo));
    StartInfo.cb = sizeof(StartInfo);
    int bFuncRetn = CreateProcessWithLogonW(
    (LPCWSTR)user,
    (LPCWSTR)domain,
    (LPCWSTR)password,
    LOGON_WITH_PROFILE,//LOGON_NETCREDENTIALS_ONLY,
    (LPWSTR)applicationname,
    NULL,
    CREATE_UNICODE_ENVIRONMENT,//CREATE_NEW_PROCESS_GROUP,
    NULL,
    NULL,
    (LPSTARTUPINFOW)&StartInfo,
    &ProcInfo
    );

    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);
    printf("\n\nCreateProcessWithLogonW returns :: %d", bFuncRetn);

    Előre is köszönöm a segítséget!

    kampi

  • kampi_

    csendes tag

    Hi!

    A GetLastError 1326-ot ad vissza, vagyis Logon Failure-el szállt el. Közben rájöttem, hogy az volt a gáz, hogy nem Unicoe típust hazsnáltam, hanem csak sima char-t nem wchar_t -t. De ezt már kijavítottam. Most az a bajom, hogy ha lokális felhasználóval akarok egy process-t nyitni, akkor műkődik, viszont ha egy olyan userral ami domain-tag akkor márnem megy. GetLastError szintén 1326-ot ad vissza.

    Valakinek valami ötlet?

    Előre is köszi!

    kampi

  • kampi_

    csendes tag

    Hi!

    Boccs, hogy ennyit írok. Szóval mostmár sikerült megcsinálni. A LOGON_WITH_PROFILE-t kellett átírni LOGON_NETCREDENTIALS_ONLY-ra. Most viszont az a bajom, hogy a process elindul, de a másik user neve alatt, hanem vagy az enyém alatt, vagy pedig system-ként látja a taskmanager. Ez mitől lehet? Ebben segítsetek légyszíves, mert fontos lenne.

    Köszönöm!

    kampi

  • kampi_

    csendes tag

    Sziasztok!

    Tudna valaki segíteni nekem a CreateProcessWithLogonW függvénnyel kapcsolatban?
    A problémám az vele, hogy létre tudok hozni egy processt pl Total commandert, de:
    - bennt a cégnél műkődik is, mert egy admin usert adok meg, és hozzáférek olyan dolgokhoz amikhez csak ezzel a userral tudok. Ezzel eddig semmi gáz. Ha megnézem Task Managerben, akkor ott viszont nem úgy látszik, hogy az admin userrel futtatom a process-t hanem a SYSTEM futtatja a process-t. Na mindegy, végülis műkődik, csak gondoltam megkérdem ezt is hátha valaki tudja hogy miért?
    - otthon viszont(hazaviszem a laptopom) megpróbálom ugyanezt (semmit nem változtattam a kódon) és meg akarom nyitni az admin userrel ugyanúgy a Total commandert (már be voltam jelentkezve a gépre vele, így létrejöt a profil, tehát elvileg már akármit tudok run as-ként futtatni), és meg is nyílik, viszont itt már nincsenek meg a jogaim. Most nem hálózati jogokra gondolok, hanem pl az a user amivel be vagyok lépve, nem admin, tehát pl nem tudok egy fájlt létrehozni a c:\-ben. Az admin userrel viszont simán tudok. Van egy lokális admin user is, azzal is megpróbáltam. Megadtam a usert, jelszót, domainnak meg a gépnevet, és ugyanúgy nincs jogom hozzá. Mindkét esetben (otthon az admin és a lokál admin esetében is) task managerben úgy látszik hogy a processt az a user futtaja aki be van jelentkezve.

    Erre van valakinek valami ötlete?

    Előre is köszi a segítséget!

    Kampi

  • kampi_

    csendes tag

    Sziasztok!

    Adott ez a kód:

    STARTUPINFO StartInfo;
    PROCESS_INFORMATION ProcInfo;
    TOKEN_PRIVILEGES tp;
    memset(&ProcInfo, 0, sizeof(ProcInfo));
    memset(&StartInfo, 0 , sizeof(StartInfo));
    StartInfo.cb = sizeof(StartInfo);
    HANDLE handle = NULL;

    if (!OpenProcessToken(GetCurrentProcess(),
    TOKEN_ALL_ACCESS, &handle)) printf("\nOpenProcessError");

    if (!LookupPrivilegeValue(NULL,SE_TCB_NAME,
    //SE_TCB_NAME,
    &tp.Privileges[0].Luid)) {
    printf("\nLookupPriv error");
    }

    tp.PrivilegeCount = 1;
    tp.Privileges[0].Attributes =
    SE_PRIVILEGE_ENABLED;//SE_PRIVILEGE_ENABLED;
    if (!AdjustTokenPrivileges(handle, FALSE, &tp, 0, NULL, 0)) {
    printf("\nAdjustToken error");
    }

    i = LogonUser(user, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &handle);
    printf("\nLogonUser return : %d",i);
    i = GetLastError();
    printf("\nLogonUser getlast : %d",i);
    if (! ImpersonateLoggedOnUser(handle) ) printf("\nImpLoggedOnUser!");

    i = CreateProcessAsUser(handle, "c:\\windows\\system32\\notepad.exe",NULL, NULL, NULL, true,
    CREATE_UNICODE_ENVIRONMENT |NORMAL_PRIORITY_CLASS | CREATE_NEW_CONSOLE, NULL, NULL,
    &StartInfo, &ProcInfo);
    printf("\nCreateProcessAsUser return : %d",i);
    i = GetLastError();
    printf("\nCreateProcessAsUser getlast : %d",i);

    CloseHandle(handle);
    CloseHandle(ProcInfo.hProcess);
    CloseHandle(ProcInfo.hThread);

    A domaint, user, és passwordot egy fájlból olvasom be. A probléma az, hogy a CreateProcessAsuser mindig 1314-es hibával száll el, ami "A required privilige is not held by the client". A kérdés mit csinálok rosszul, vagy hogyan tudnék jogot adni a handle-nek? Gondolom annak kellene.

    Előre is köszi a segítséget!

    kampi

Új hozzászólás Aktív témák