Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 45
  1. #1

    bloccare l'orologio...

    Buongiorno, vorrei sapere se è possibile bloccare l'orologio di windows. Nel senso che ho un programma che spegne il computer ad una determinata ora e questo programma è protetto con una password. Però quel furbastro di mio figlio aggira questa cosa spostando all'indietro l'orologio di windows. Non è possibile fare in modo che l'orologio non possa essere modificato se non con l'ausilio di una password?

    Grazie mille per adesso

  2. #2
    Imposta l'account di tuo figlio come utente limitato: non potrà tirare indietro l'orologio.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    dimenticavo di aggiungere che ho un pc con windows ME. Scusa ma non sono molto pratico, ( probabilmente è più pratico mio figlio ) mi potresti spiegare bene come fare? GRAZIE MILLE

  4. #4
    Temo che con Windows ME ci sia poco da fare... anche se forse il buon vecchio poledit può venirci in aiuto. Comunque il computer ha un solo utente o è già impostato con un utente per te e uno per il ragazzo?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Dunque, in primo luogo potresti rinominare il file datetime.cpl (contenuto in C:\Windows\System) in datetime.cpl.bak (o con un altro nome); questo impedirebbe la modifica dell'ora facendo doppio click sull'orologio e così pure dal pannello di controllo. Tuttavia si potrebbe comunque modificare l'ora con il comando "time" del prompt dei comandi oppure dal BIOS. Per il primo caso non c'è rimedio, mentre per il secondo basta impostare una password nel BIOS.
    Tuttavia posso sempre scriverti un programmino in C che ogni X secondi verifichi l'ora; se l'ora è cambiata (di più di X secondi, beninteso), la riporta ad un valore corretto. Si può anche nascondere il processo del programma in questione dal Task Manager di Windows ME, così che non venga né visto né terminato.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Originariamente inviato da MItaly
    Dunque, in primo luogo potresti rinominare il file datetime.cpl (contenuto in C:\Windows\System) in datetime.cpl.bak (o con un altro nome); questo impedirebbe la modifica dell'ora facendo doppio click sull'orologio e così pure dal pannello di controllo. Tuttavia si potrebbe comunque modificare l'ora con il comando "time" del prompt dei comandi oppure dal BIOS. Per il primo caso non c'è rimedio, mentre per il secondo basta impostare una password nel BIOS.
    Tuttavia posso sempre scriverti un programmino in C che ogni X secondi verifichi l'ora; se l'ora è cambiata (di più di X secondi, beninteso), la riporta ad un valore corretto. Si può anche nascondere il processo del programma in questione dal Task Manager di Windows ME, così che non venga né visto né terminato.

    CASPITA !!!! sei veramente forte! complimenti. Ho provato a rinominare il file timedate.cpl (datetime non c'era) e adesso non si può più modificare l'ora dalla barra degli strumenti. Però è ancora possibile modificare l'ora dal pannello di controllo. Per quanto riguarda il programmino in C...bhè che dire, te ne sarei grato se avessi voglia e tempo di farmelo. Intanto grazie mille lo stesso

  7. #7
    Il programma è già in fabbricazione... Il nucleo centrale è scritto, ora devo implementare un po' di funzioni accessorie, come quelle per abilitare/disabilitare il programma usando i mailslot.

    Il programma in questione appena avviato entra in un loop infinito; all'inizio di questo loop chiede al sistema l'ora, quindi blocca il suo thread per 5 secondi (tempo modificabile); se dopo questa pausa l'ora non è quella precedente più 5 secondi (con tolleranza del 10%), reimposta l'ora al valore che aveva memorizzato prima della pausa, aggiungendoci 5 secondi. In questa maniera ogni volta che si modifica l'ora il programma lo rileva e la riporta ad un valore corretto. Il programma è in grado di nascondersi al task manager di Windows 9x/ME spacciandosi per un servizio di sistema (ma effettivamente non è proprio una balla ). Ora sto scrivendo il codice più complesso, ossia un sistema basato sulle mailslot che consenta di disattivarlo quando si vuole cambiare l'ora.
    Il programma viene attivato all'avvio del sistema, e per disattivare la "protezione ora" basta digitare al prompt dei comandi "timestop terminate"; per riattivarla è sufficiente lanciare il programma digitando "timestop".
    Importante: non digitare questi comandi in "Start->Esegui...", perché rimarrebbero memorizzati nella cache che Windows tiene dei comandi digitati in questa finestra.

    Di seguito il codice principale del programma (manca il codice di lettura dei messaggi nella mailslot perché non l'ho ancora implementato):
    codice:
    (vedi post successivo)
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Ok, l'applicazione in questione è finita. Posto il codice per intero:
    codice:
    #include <windows.h>
    #define CHECKINTERVAL 5 //Secondi ogni quanto controllare
    typedef DWORD (*RSP)(DWORD dwProcessId, DWORD dwType);
    bool ReadMessages(HANDLE hSlot);
    int __stdcall WinMain(HINSTANCE hInstance,
        HINSTANCE hPrevInstance,
        LPSTR lpCmdLine,
        int nCmdShow
    )
    {
    	LPSTR lpszSlotName = "\\\\.\\mailslot\\stoptime_mailslot"; 
    	if (*lpCmdLine=='\0')
    	{
        	HANDLE hSlot= CreateMailslot(lpszSlotName, 
    			0,                             // no maximum message size 
    			MAILSLOT_WAIT_FOREVER,         // no time-out for operations 
    			(LPSECURITY_ATTRIBUTES) NULL); // no security attributes 
    		if (hSlot==INVALID_HANDLE_VALUE)
    		{
    			 MessageBox(0,"Can't create mailslot. Probably another instance of StopTime is still running.","StopTime",MB_ICONERROR);
    			 return 1;
    		}
    		//Tempo prima della pausa
    		__int64 old;
    		//Tempo dopo la pausa
    		__int64 now;
    		//Tempo da assegnare
    		SYSTEMTIME st;
    		RSP ProcAddr;
    		//Nasconde l'eseguibile dalla lista dei processi di Windows 9x
    		HINSTANCE hInst=LoadLibrary("KERNEL32");
    		if (hInst != NULL)
    		{
    			ProcAddr = (RSP) GetProcAddress(hInst,"RegisterServiceProcess");
    			if (NULL!=ProcAddr)
    			{
    				(ProcAddr)(GetCurrentProcessId(),1);
    			}
    		}
    		//Ciclo dipendente dalla funzione ReadMessages;
    		//se c'è un messaggio che dice di uscire restituisce false e il ciclo termina
    		while (ReadMessages(hSlot))
    		{
    			GetSystemTimeAsFileTime((FILETIME *) &old);
    			Sleep(CHECKINTERVAL*1000);
    			GetSystemTimeAsFileTime((FILETIME *) &now);
    			if ((now-old>(CHECKINTERVAL+CHECKINTERVAL*0.1)*10000000) || (now-old<(CHECKINTERVAL-CHECKINTERVAL*0.1)))
    			{
    				old+=CHECKINTERVAL*10000000;
    				FileTimeToSystemTime((FILETIME *)&old,&st);
    				SetSystemTime(&st);
    			}
    		}
    		CloseHandle(hSlot);
    	}
    	else if (strcmp(lpCmdLine,"-?")==0||strcmp(lpCmdLine,"/?")==0)
    	{
    		MessageBox(0,
    			"StopTime by Matteo Italia: preserves the system clock from modifications.\n\n"
    			"Syntax:\n"
    			"StopTime				Starts StopTime;\n"
    			"StopTime -?			Shows this help screen;\n"
    			"StopTime /?			Shows this help screen;\n"
    			"StopTime <parameters>		Sends <parameters> to the StopTime mailslot.\n\n"
    			"Actually only \"terminate\" parameter is supported; it makes StopTime terminate.",
    			"StopTime",MB_ICONINFORMATION);
    	}
    	else
    	{
    		BOOL fResult;
    		HANDLE hFile; 
    		DWORD cbWritten; 
    		
    		hFile = CreateFile(lpszSlotName, 
    			GENERIC_WRITE, 
    			FILE_SHARE_READ,  // required to write to a mailslot 
    			(LPSECURITY_ATTRIBUTES) NULL, 
    			OPEN_EXISTING, 
    			FILE_ATTRIBUTE_NORMAL, 
    			(HANDLE) NULL); 
    		 
    		if (hFile == INVALID_HANDLE_VALUE) 
    		{ 
    			MessageBox(0,"Can't open the mailslot. Probably StopTime is not running.","StopTime",MB_ICONERROR);
    			return 2;
    		} 
    		 
    		fResult = WriteFile(hFile, 
    			lpCmdLine, 
    			(DWORD) lstrlen(lpCmdLine) + 1,  // include terminating null 
    			&cbWritten, 
    			(LPOVERLAPPED) NULL); 
    		 
    		if (!fResult) 
    		{ 
    			MessageBox(0,"Can't write on the mailslot.","StopTime",MB_ICONERROR);
    			return 3; 
    		} 
    		 
    		fResult = CloseHandle(hFile); 
    		 
    		if (!fResult) 
    		{ 
    			MessageBox(0,"Can't close mailslot handle.","StopTime",MB_ICONERROR);
    			return 4;
    		}
    		MessageBox(0,"Message successfully sent to the mailslot.","StopTime",MB_ICONINFORMATION);
    	}
    	return 0;
    }
    
    bool ReadMessages(HANDLE hSlot)
    {
        DWORD cbMessage, cMessage, cbRead; 
        BOOL fResult; 
        LPSTR lpszBuffer; 
        CHAR achID[80]; 
        DWORD cAllMessages; 
        HANDLE hEvent;
        OVERLAPPED ov;
     
        cbMessage = cMessage = cbRead = 0; 
    
        hEvent = CreateEvent(NULL, FALSE, FALSE, "StopTimeEvent");
        if( NULL == hEvent )
            return FALSE;
        ov.Offset = 0;
        ov.OffsetHigh = 0;
        ov.hEvent = hEvent;
     
        // Mailslot handle "hSlot1" is declared globally. 
     
        fResult = GetMailslotInfo(hSlot, // mailslot handle 
            (LPDWORD) NULL,               // no maximum message size 
            &cbMessage,                   // size of next message 
            &cMessage,                    // number of messages 
            (LPDWORD) NULL);              // no read time-out 
     
        if (!fResult) 
        { 
            MessageBox(0,"Can't get mailslot infos.","StopTime",MB_ICONERROR);
            return false; 
        } 
     
        if (cbMessage == MAILSLOT_NO_MESSAGE) 
        { 
            return true; 
        } 
     
        cAllMessages = cMessage; 
     
        while (cMessage != 0)  // retrieve all messages
        { 
            // Allocate memory for the message. 
     
            lpszBuffer = (LPSTR) GlobalAlloc(GPTR, 
                lstrlen((LPSTR) achID) + cbMessage); 
            if( NULL == lpszBuffer )
    		{
    			MessageBox(0,"Can't allocate memory to read the message from the mailbox.","StopTime",MB_ICONERROR);
                return false;
    		}
            lpszBuffer[0] = '\0'; 
     
            fResult = ReadFile(hSlot, 
                lpszBuffer, 
                cbMessage, 
                &cbRead, 
                &ov); 
     
            if (!fResult) 
            { 
                MessageBox(0,"Can't read the message from the maibox.","StopTime",MB_ICONERROR);
                GlobalFree((HGLOBAL) lpszBuffer); 
                return false; 
            } 
     
            // Interpretes the message
     
            if (strcmp(strlwr(lpszBuffer),"terminate")==0)
    		{
    			MessageBox(0,"Terminate message recieved; press OK to exit StopTime.","StopTime",MB_ICONINFORMATION);
    			return false; //Esce
    		}
     
            GlobalFree((HGLOBAL) lpszBuffer); 
     
            fResult = GetMailslotInfo(hSlot, // mailslot handle 
                (LPDWORD) NULL,               // no maximum message size 
                &cbMessage,                   // size of next message 
                &cMessage,                    // number of messages 
                (LPDWORD) NULL);              // no read time-out 
     
            if (!fResult) 
            { 
    	        MessageBox(0,"Can't get mailslot infos.","StopTime",MB_ICONERROR);
                return false; 
            } 
        } 
        return true; 
    }
    @danielessj5
    Se mi contatti in privato (via e-mail) ti spedisco l'eseguibile compilato e le istruzioni d'installazione.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    cioè non so che dire... VVoVe: VVoVe: VVoVe:

    Mi ricordo qualche anno fa quando dovevo fare l'esame di fondamenti di informatica con il linguaggio C al politecnico...mio dio che fatica che ho fatto a strappare un 19.

    E in poco tempo tu mi crei tutto quel programma con tutti quei codici vari. Sicuramente non sarò il primo a farti dei complimenti.

    Bhè grazie veramente tante. La mia mail è danielessj5@hotmail.it ( te la scrivo qui perchè il sistema del forum mi dice che hai disabilitato la ricezione delle email da parte degli altri utenti ).

    GRAZIE ANCORA

  10. #10
    Ok, ti ho inviato tutto come concordato.
    Ciao
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.