#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