Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Завершение работы 
:(
    Опции темы
GX777
Дата 11.6.2008, 00:25 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Вопрос №1:Как  завершить работу Windows?
Вопрос №2:Я делаю программу с ограниченным доступом.Посоветуйте,где мне хранить пароль,чтоб она его запоминала до последующео запуска? 
PM MAIL   Вверх
CYBERDREAM
Дата 11.6.2008, 06:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 8
Всего: 28



Код

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Text;
namespace StartTurnOff
{
        public class WinAPIClass
        {
            
            #region Завершение работы Windows. 
            /// <summary>
            /// Завершение работы.
            /// </summary>
            /// <param name="shutDownType">Тип завершения работы.</param>
            /// <param name="reason">Причина</param>        
            /// <returns></returns>
            [DllImport("user32.dll")]
            public static extern bool ExitWindowsEx(uint shutDownType, string reason);

            //To shut down or restart the system, the calling process must use the 
            //AdjustTokenPrivileges function to enable the SE_SHUTDOWN_NAME privilege.
            // Для выключения или перезагрузки системы вызываемый процесс 
            //должен использовать функцию AdjustTokenPrivileges для получения 
            //определенного уровня доступа (привилегии)

            /// <summary>
            /// Тип завершения работы.
            /// </summary>
            public enum ShutdownType:int
            {
                LogOf = 0,
                Shutdown = 0x00000001,
                Reboot = 0x00000002,
                PowerOf = 0x00000008            
            }

            #endregion
            // Дополнительные переменные
            public const int SE_PRIVILEGE_ENABLED = 2;
            public const string SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
            public const int ANYSIZE_ARRAY = 1;
            public const int TOKEN_QUERY = 8;
            public const int TOKEN_ADJUST_PRIVILEGES = 32;//0x00000020;


            
            // Структура, используемая  для передачи в метод AdjustTokenPrivileges
            //  в качестве необходимой привилегии.
            [StructLayout(LayoutKind.Sequential, Pack=1)]
            internal struct TokPriv1Luid
            {
                // Количество привилегий в наборе.
                public int Count;
                public long Luid;
                // Тип привилегии.
                public int Attr;
            }

            /// <summary>
            /// Возвращение указателя на текущий процесс.
            /// </summary>
            /// <returns></returns>
            [DllImport("kernel32.dll", ExactSpelling=true) ]
            internal static extern IntPtr GetCurrentProcess();
            /// <summary>
            /// Открывание процесса  access token, который содержит информацию о 
///безопасности текущего пользователя, 
            /// привязанного  к заданному процессу.
            /// </summary>
            /// <param name="h">Указатель на процесс.</param>
            /// <param name="acc">Тип access token.</param>
            /// <param name="phtok">Указатель на access token.</param>
            /// <returns></returns>
            [DllImport("advapi32.dll", ExactSpelling=true) ]
            internal static extern bool OpenProcessToken( IntPtr h, int acc, ref IntPtr phtok );
            /// <summary>
            /// Возвращение значения переменной в текущей сессии ОС.
            /// </summary>
            /// <param name="host">Название системы. Если значение  null,  
            ///поиск осуществляется
            ///  в локальной системе.</param>
            /// <param name="name">Название переменной.</param>
            /// <param name="pluid">Указатель на значение переменной.</param>
            /// <returns></returns>
            [DllImport("advapi32.dll") ]
            internal static extern bool LookupPrivilegeValue( string host, string name, ref long pluid );
            /// <summary>
            /// Включение  указанной привилегии.
            /// </summary>
            /// <param name="htok">Указатель на access token</param>
            /// <param name="disall">Необходимость выключения  всех привилегий.</param>
            /// <param name="newst">Новое значение привилегии. Если предыдущее
            /// значение установлено в true, 
            /// то это значение не учитывается.</param>
            /// <param name="len">Размер буфера для следующего значения.</param>
            /// <param name="prev">Предыдущая привилегия.</param>
            /// <param name="relen">Указатель на  размер полученных привилегий.</param>
            /// <returns></returns>
            [DllImport("advapi32.dll", ExactSpelling=true) ]
            internal static extern bool AdjustTokenPrivileges( IntPtr htok, bool disall,
                ref TokPriv1Luid newst, int len, IntPtr prev, IntPtr relen );
        }
    }
/////////////////////////////////////////
Обработка:
        private void btnUserOut_Click(object sender, System.EventArgs e)
        {
            WinAPIClass.ExitWindowsEx((uint)WinAPIClass.ShutdownType.LogOf, "Win Api test");
        }

        private void btnTurnOff_Click(object sender, System.EventArgs e)
        {
            RestartOrShotDown(WinAPIClass.ShutdownType.Shutdown);
        }
        
        private void btnRestart_Click(object sender, System.EventArgs e)
        {            
            RestartOrShotDown(WinAPIClass.ShutdownType.Reboot);
        }
        void RestartOrShotDown(WinAPIClass.ShutdownType type)
        {                
            WinAPIClass.TokPriv1Luid tp;
            IntPtr hproc = WinAPIClass.GetCurrentProcess();
            IntPtr hToken = IntPtr.Zero;
            WinAPIClass.OpenProcessToken( hproc, WinAPIClass.TOKEN_ADJUST_PRIVILEGES | WinAPIClass.TOKEN_QUERY, ref hToken );
            tp.Count = 1;
            tp.Luid = 0;
            tp.Attr = WinAPIClass.SE_PRIVILEGE_ENABLED;
            WinAPIClass.LookupPrivilegeValue(null, WinAPIClass.SE_SHUTDOWN_NAME, ref tp.Luid );
            WinAPIClass.AdjustTokenPrivileges(hToken, false, ref tp, 0, IntPtr.Zero, IntPtr.Zero );
            WinAPIClass.ExitWindowsEx((uint)type, "Win Api test");

        }

        private void btnCancel2_Click(object sender, System.EventArgs e)
        {
            this.Close();
        }





--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
Ram1reS
Дата 11.6.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 25.4.2008
Где: Москва

Репутация: 2
Всего: 5



Цитата(GX777 @ 11.6.2008,  00:25)
Вопрос №1:Как  завершить работу Windows?
Вопрос №2:Я делаю программу с ограниченным доступом.Посоветуйте,где мне хранить пароль,чтоб она его запоминала до последующео запуска?

Можно просто выполнить "shutdown -s -t 1"  smile 

--------------------
 
PM MAIL ICQ   Вверх
Azzdorf
  Дата 12.6.2008, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 190
Регистрация: 29.3.2007

Репутация: нет
Всего: нет



Цитата(GX777 @ 11.6.2008,  00:25)
Вопрос №2:Я делаю программу с ограниченным доступом.Посоветуйте,где мне хранить пароль,чтоб она его запоминала до последующео запуска?

тебе нужно сохранить пароль или хэш пароля???

если что-бы в окошке просто светилось ************ - тогда сохрани в любом файлике нужное количество символов,

а вообще я для паролей (их хэшей  использую сюриализацию), про пароли было много тем и то где их хранить - поищи по форуму))))

если недопонял - пиши поподробнее)))  smile 
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.