4 Ocak 2015 Pazar

Reboot MessageBox

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
#include <ctype.h>
char command[20];

  BOOL WINAPI RecognizeCommand(char command[])
  {
  const int result=NULL;
       HANDLE hToken;
       TOKEN_PRIVILEGES tPrivilige;

         // Erişim Belirleyici al...

      if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
 {
 return false;
 }
         // Get the LUID for the shutdown privilege.
    //AdjustTokenPriviliges fonksiyonu sözkonusu işlem için yetkileri aktifleştirir veya iptal eder....
         //Burda Luid=Locally Unique Idetifier-- Restart atılana kadar 64 bitlik eşsiz bir deger üretmeyi garanti eder...
    //Power off, reboot ve shutdown işlemleri için -->SE_SHUTDOWN_NAME yetkisi olmalıdır. Aşağıda bu yetki tanımlanmıştır.
    //#define SE_SHUTDOWN_NAME  ------->              TEXT("SeShutdownPrivilege")  ---> ilgili yetki bu sekilde tanımlıdır.
       
    LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tPrivilige.Privileges[0].Luid);

//Yukarıdaki LookupPriviligeValue tanımı aşagıdaki gibidir

//LookupPrivilegeValueA(
         //_In_opt_ LPCSTR lpSystemName,
         //_In_     LPCSTR lpName,
         //_Out_    PLUID   lpLuid
         //                     );
         tPrivilige.PrivilegeCount = 1;  // tek izin değiştirilecek...  
         tPrivilige.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //SE_PRIVILIGE_ENABLED-->ilgili yetkiyi aktifleştirir.
         // Get the shutdown privilege for this process.
         AdjustTokenPrivileges(
     hToken,
 FALSE,
 &tPrivilige,
 0,
                  (PTOKEN_PRIVILEGES)NULL,
 0
            );

          if (GetLastError() != ERROR_SUCCESS)
       {
    return false;
       }


//ExitWindowsEx FOnksiyonunda ilk parametre flag ikincisi ise Nedeni tutar
  if(strcmp((command),"reboot")==0)
       {
             const int result = MessageBox(NULL, "Bilgisayar yeniden başlatılıyor. Onaylıyor musunuz?", "UYARI",  MB_YESNO);
            switch (result)
            {
              case IDYES:
 if (!ExitWindowsEx(EWX_REBOOT| EWX_FORCE,SHTDN_REASON_MAJOR_OPERATINGSYSTEM |SHTDN_REASON_MINOR_UPGRADE |SHTDN_REASON_FLAG_PLANNED | SHTDN_REASON_MINOR_OTHER))
                 {//Tekrar baslat(zorla)-->yeniden baslatma sebebi: işletim sistemi sorunu(OPERATINGSYSTEM) veya güncelleme(UPGRADE) veya Planlanmış bir kapanma(planned) veya başka bir sebeb(other)
                return false;
                 }
                 else
                 {
                return true;
                 }  
                 break;
             case IDNO:
                 break;
             case IDCANCEL:
                 break;
             default:
                 break;
            }      
return false;
      }
      else if(strcmp((command),"shutdown")==0)
      {
             const int result = MessageBox(NULL, "Bilgisayar Kapatılıyor. Onaylıyor musunuz?", "UYARI",  MB_YESNO);
           switch (result)
           {
                    case IDYES:
                       if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE,SHTDN_REASON_MAJOR_OPERATINGSYSTEM |SHTDN_REASON_MINOR_UPGRADE |SHTDN_REASON_FLAG_PLANNED| SHTDN_REASON_MINOR_OTHER))
                       { //kapat(zorla kapat)-->kapatma sebebi: işletim sistemi sorunu(OPERATINGSYSTEM) veya güncelleme(UPGRADE) veya Planlanmış bir kapanma(planned) veya başka bir sebeb(other)
                      return false;
                       }
                       else
                       {
                      return true;
                       }
                       break;
                    case IDNO:
                       break;
                    case IDCANCEL:                  
                       break;
                    default:
                       break;
           }          
      return false;
     }
     else if(strcmp((command),"power off")==0 || strcmp((command),"poweroff")==0)
     {
            const int result = MessageBox(NULL, "Bilgisayar Kapatılıyor(Power Off). Onaylıyor musunuz?", "UYARI",  MB_YESNO);
           switch (result)
           {
                    case IDYES:
                      if (!ExitWindowsEx(EWX_POWEROFF | EWX_FORCE,SHTDN_REASON_MAJOR_OPERATINGSYSTEM |SHTDN_REASON_MINOR_UPGRADE |SHTDN_REASON_FLAG_PLANNED| SHTDN_REASON_MINOR_OTHER))
             {//KApatveGuçKes(zorla kapat)-->kapatma sebebi: işletim sistemi sorunu(OPERATINGSYSTEM) veya güncelleme(UPGRADE) veya Planlanmış bir kapanma(planned) veya başka bir sebeb(other)
            return false;
              }
             else
              {
            return true;
              }  
                       break;
                    case IDNO:
                       break;
                    case IDCANCEL:
                       break;
                    default:
                       break;
            }    
             return false;
     }
     else if(strcmp((command),"log off")==0 || strcmp((command),"logoff")==0)
     {
           const int result = MessageBox(NULL, "Kullanıcı çıkışı yapılacaktır. Onaylıyor musunuz?", "UYARI",  MB_YESNO);
           switch (result)
           {
                    case IDYES:
                       if (!ExitWindowsEx(EWX_LOGOFF | EWX_FORCE,SHTDN_REASON_MAJOR_OPERATINGSYSTEM |SHTDN_REASON_MINOR_UPGRADE |SHTDN_REASON_FLAG_PLANNED| SHTDN_REASON_MINOR_OTHER))
           {//Kullanıcı Çıkışı(zorla Çıkış)-->ÇIKIŞ sebebi: işletim sistemi sorunu(OPERATINGSYSTEM) veya güncelleme(UPGRADE) veya Planlanmış bir kapanma(planned) veya başka bir sebeb(other)
            return false;
           }
           else
           {
            return true;
           }
                        break;
                    case IDNO:
                        break;
                    case IDCANCEL:
                        break;
                    default:
                        break;
            }  
             return false;
     }
     else
     {
           printf("Komut taninamadi.");  
              return false;
     }
   }

    int main(int argc,char *argv[]) {
              int i=1;
              if(argc < 2)
 {
                  printf("Hic argument alinamadi\n");
                  getch();
                  return 0;
              }
              else if(argc>2)
              {
                 if(argc==3)
                    {
                         strcat(command,argv[1]);
                         strcat(command,argv[2]);
                         RecognizeCommand(command);  
                    }
                 else
                    {
                         printf("argument sayisi gecersiz.\n");
                         getch();
                         return 0;
                    }            
             }
            else
             {
                strcat(command,argv[1]);
                RecognizeCommand(command);
             }
            return(0);  
        }

Hiç yorum yok:

Yorum Gönder