информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
программа внутри (ожидаю большой сенькс :-) ) 15.11.01 01:33  Число просмотров: 1196
Автор: йцукенг <jcukeng> Статус: Member
<"чистая" ссылка>
// сие есть плод моих медитаций над MSDN :-)
#include "stdafx.h" // если проект сгенерен в MSVC по дефолту
#include <stdio.h>
#include <process.h>
#include <string.h>
#include <windows.h> 
#include <conio.h>
BOOL SetPrivilege(
    HANDLE hToken,          // access token handle
    LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
    BOOL bEnablePrivilege   // to enable or disable privilege
    );
int die(char * str,int retval){fputc('\n',stdout);fputs(str,stdout);exit(retval);return 0;};
int main(int argc, char* argv[])
{
char mname[1024];
HANDLE hndl;
char bWhatToDo='r';
  
  if (argc < 2){
    puts("Enter machine name>");
    gets(mname);
label1:
    puts("reboot or shutdown or quit[r/s/q]?");
    bWhatToDo=tolower(bWhatToDo);
    if((bWhatToDo=getc(stdin))=='q')die("finishing",-1);
    if((bWhatToDo!='r')&&(bWhatToDo!='s'))goto label1;
  }
  else{
    strncpy(mname,argv[1],1023);
    bWhatToDo=tolower(argv[2][0]);
    printf("Relax for a moment whilst rebooting machine '%s'...",mname);
  }
  /*
  printf("bWhatToDo flag =%c",bWhatToDo);
  exit(1);
  */
  if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hndl))
      die("call to openprocesstoken failed",3);
  SetPrivilege(hndl,SE_SHUTDOWN_NAME,TRUE);
  
 if(!InitiateSystemShutdown(
  mname,   // pointer to name of computer to shut down
  "Message from Administrator:\n Выключаю этот компьютер :)",          // pointer to message to display in 
                             // dialog box
  20,           // time to display dialog box
  TRUE,     // force applications closed flag
  (bWhatToDo=='r')  // reboot flag
  )
)
  
   {
   strcat(mname,":Failed to InitiateSystemShutdown!");
   die(mname,4);
   }
  else puts("\nSuccess. Enjoy!");

return 1;
};
//////////////////////////////////////
/////////////////////////////////////
BOOL SetPrivilege(
    HANDLE hToken,          // access token handle
    LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
    BOOL bEnablePrivilege   // to enable or disable privilege
    ) 
//...................................
  {
TOKEN_PRIVILEGES tp;
LUID luid;

if ( !LookupPrivilegeValue( 
        NULL,            // lookup privilege on local system
        lpszPrivilege,   // privilege to lookup 
        &luid ) ) {      // receives LUID of privilege
    printf("LookupPrivilegeValue error: %u\n", GetLastError() ); 
    return FALSE; 
}

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
    tp.Privileges[0].Attributes = 0;

// Enable the privilege or disable all privileges.

AdjustTokenPrivileges(
       hToken, 
       FALSE, 
       &tp, 
       sizeof(TOKEN_PRIVILEGES), 
       (PTOKEN_PRIVILEGES) NULL, 
       (PDWORD) NULL); 
 
// Call GetLastError to determine whether the function succeeded.

if (GetLastError() != ERROR_SUCCESS) { 
      printf("AdjustTokenPrivileges failed: %u\n", GetLastError() ); 
      return FALSE; 
} 

return TRUE;
}

---

теперь замечание: программа работает только в WinNT4.0/2000 :(
принципиально не пишу программ под win9x :))
для ее успешного запуска нужны привилегии power user'а.
с наилучшими пожеланиями,
йцукенг.
<programming>
Reboot win9x/NT 14.11.01 16:28  
Автор: Darkf0x Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Сорри за простой (наверное) вопрос, не подскажет кто-нибудь как перезагрузить винды (9x/nt)
ExitWindowsEx(EWX_REBOOT, 0);
не проходит... =( имхо только сеанс завершает...
Пробовал слать всем задачам wm_quit, а потом вызывать перезагрузку, одна фигня...

Может кто знает, как это 100% сделать?
Reboot win9x/NT 15.11.01 11:34  
Автор: BOBAH Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Вообще то, ExitWindowsEx( EWX_REBOOT | EWX_FORCE, 0 )
под 98 должно прокатывать, только надо завершить процесс Explorer.
А ещё можно извратиться так:
_execv( rundll32.exe, "shell32.dll,SHExitWindowsEx 6" );

> Сорри за простой (наверное) вопрос, не подскажет кто-нибудь
> как перезагрузить винды (9x/nt)
> ExitWindowsEx(EWX_REBOOT, 0);
> не проходит... =( имхо только сеанс завершает...
> Пробовал слать всем задачам wm_quit, а потом вызывать
> перезагрузку, одна фигня...
>
> Может кто знает, как это 100% сделать?
программа внутри (ожидаю большой сенькс :-) ) 15.11.01 01:33  
Автор: йцукенг <jcukeng> Статус: Member
<"чистая" ссылка>
// сие есть плод моих медитаций над MSDN :-)
#include "stdafx.h" // если проект сгенерен в MSVC по дефолту
#include <stdio.h>
#include <process.h>
#include <string.h>
#include <windows.h> 
#include <conio.h>
BOOL SetPrivilege(
    HANDLE hToken,          // access token handle
    LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
    BOOL bEnablePrivilege   // to enable or disable privilege
    );
int die(char * str,int retval){fputc('\n',stdout);fputs(str,stdout);exit(retval);return 0;};
int main(int argc, char* argv[])
{
char mname[1024];
HANDLE hndl;
char bWhatToDo='r';
  
  if (argc < 2){
    puts("Enter machine name>");
    gets(mname);
label1:
    puts("reboot or shutdown or quit[r/s/q]?");
    bWhatToDo=tolower(bWhatToDo);
    if((bWhatToDo=getc(stdin))=='q')die("finishing",-1);
    if((bWhatToDo!='r')&&(bWhatToDo!='s'))goto label1;
  }
  else{
    strncpy(mname,argv[1],1023);
    bWhatToDo=tolower(argv[2][0]);
    printf("Relax for a moment whilst rebooting machine '%s'...",mname);
  }
  /*
  printf("bWhatToDo flag =%c",bWhatToDo);
  exit(1);
  */
  if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,&hndl))
      die("call to openprocesstoken failed",3);
  SetPrivilege(hndl,SE_SHUTDOWN_NAME,TRUE);
  
 if(!InitiateSystemShutdown(
  mname,   // pointer to name of computer to shut down
  "Message from Administrator:\n Выключаю этот компьютер :)",          // pointer to message to display in 
                             // dialog box
  20,           // time to display dialog box
  TRUE,     // force applications closed flag
  (bWhatToDo=='r')  // reboot flag
  )
)
  
   {
   strcat(mname,":Failed to InitiateSystemShutdown!");
   die(mname,4);
   }
  else puts("\nSuccess. Enjoy!");

return 1;
};
//////////////////////////////////////
/////////////////////////////////////
BOOL SetPrivilege(
    HANDLE hToken,          // access token handle
    LPCTSTR lpszPrivilege,  // name of privilege to enable/disable
    BOOL bEnablePrivilege   // to enable or disable privilege
    ) 
//...................................
  {
TOKEN_PRIVILEGES tp;
LUID luid;

if ( !LookupPrivilegeValue( 
        NULL,            // lookup privilege on local system
        lpszPrivilege,   // privilege to lookup 
        &luid ) ) {      // receives LUID of privilege
    printf("LookupPrivilegeValue error: %u\n", GetLastError() ); 
    return FALSE; 
}

tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
    tp.Privileges[0].Attributes = 0;

// Enable the privilege or disable all privileges.

AdjustTokenPrivileges(
       hToken, 
       FALSE, 
       &tp, 
       sizeof(TOKEN_PRIVILEGES), 
       (PTOKEN_PRIVILEGES) NULL, 
       (PDWORD) NULL); 
 
// Call GetLastError to determine whether the function succeeded.

if (GetLastError() != ERROR_SUCCESS) { 
      printf("AdjustTokenPrivileges failed: %u\n", GetLastError() ); 
      return FALSE; 
} 

return TRUE;
}

---

теперь замечание: программа работает только в WinNT4.0/2000 :(
принципиально не пишу программ под win9x :))
для ее успешного запуска нужны привилегии power user'а.
с наилучшими пожеланиями,
йцукенг.
программа внутри (ожидаю большой сенькс :-) ) 15.11.01 09:39  
Автор: Darkf0x Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Big thanx!!!!!! =)
Сейчас проверим.....
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach