Здравствуйте AlexVS, Вы писали:
AVS>Как из драйвера уровня ядра на w2k корректно выполнить shutdown ?
Документированного способа нет.
Если это не останавливает, я бы начал с дизассемблирования InitiateSystemShutdown. Она скорее всего пишет сообщение в какой-то pipe. В kernel-mode повторить такую же последовательность действий вполне реально. А как разберешься, статью нам про это напишешь
Здравствуйте AlexVS, Вы писали:
AVS>Как из драйвера уровня ядра на w2k корректно выполнить shutdown ? :???:
AVS>P.S. AVS>Рубить питание умею, но это не правильно.
Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте AlexVS, Вы писали:
W>>>А чем тебе не подходит ExitWindows(...)?
AVS>>В "NativeApi" такой функции нет.
AF>А чем не нравится по-нормальному сделать? Сделать службу, которая будет следить за командами драйвера и в нужный момент аккуратно остановит систему?
Да, верно. Можно и так. Я просто хотел все в драйвере сделать.
Здравствуйте AlexVS, Вы писали:
AVS>Здравствуйте Alex Fedotov, Вы писали:
AF>>Здравствуйте AlexVS, Вы писали:
W>>>>А чем тебе не подходит ExitWindows(...)?
AVS>>>В "NativeApi" такой функции нет.
AF>>А чем не нравится по-нормальному сделать? Сделать службу, которая будет следить за командами драйвера и в нужный момент аккуратно остановит систему?
AVS>Да, верно. Можно и так. Я просто хотел все в драйвере сделать.
А ты открой в дизассемблере user32.dll и посмотри, что там ExitWindows(...) делает, может что и найдёшь. У меня w32dasm вылетает при попытке user32.dll загрузить, так что ничем помочь не могу.
-------------------------------------------------------------------
Вызывает презедент к себе коров и говорит:
— Ну, что будем сдавать, молоко или мясо?
(с) Г. Явлинский TV6 — Герой дня (18.04.2002)
Здравствуйте ServerMouse, Вы писали:
SM>Здравствуйте AlexVS, Вы писали:
AVS>>P.S. AVS>>Рубить питание умею, но это не правильно.
SM>А как? Мне под DOS-ом надо вырубить...
Оно чипсетозависимое.
Для моего VIA VT82C686A South Bridge такая функция:
void PowerOff(void)
{
DWORD val,base;
// Power Management I/O Base
outportq(0xcf8,0x80003C48);
base=inportq(0xcf8+4)&0x0000fffe;
val=inportq(base+4);
// bits 12-10: 010 Suspend to Disk (STD) (also called Soft Off).
val&=(0xe3<<8);
val|=(0x08<<8);
outportq(base+4,val);
val=inportq(base+4);
// bit 13=1: SLP_EN
val|=(0x20<<8);
outportq(base+4,val);
}
Здравствуйте AlexVS, Вы писали:
AVS>>>P.S. AVS>>>Рубить питание умею, но это не правильно.
SM>>А как? Мне под DOS-ом надо вырубить...
AVS>Оно чипсетозависимое. AVS>Для моего VIA VT82C686A South Bridge такая функция:
AVS>void PowerOff(void) AVS>{ AVS>DWORD val,base;
AVS> // Power Management I/O Base AVS> outportq(0xcf8,0x80003C48); AVS> base=inportq(0xcf8+4)&0x0000fffe; AVS> val=inportq(base+4); AVS> // bits 12-10: 010 Suspend to Disk (STD) (also called Soft Off). AVS> val&=(0xe3<<8); AVS> val|=(0x08<<8); AVS> outportq(base+4,val); AVS> val=inportq(base+4); AVS> // bit 13=1: SLP_EN AVS> val|=(0x20<<8); AVS> outportq(base+4,val); AVS>}
Здравствуйте Alex Fedotov, Вы писали:
AF>Здравствуйте AlexVS, Вы писали:
AVS>>>>P.S. AVS>>>>Рубить питание умею, но это не правильно.
SM>>>А как? Мне под DOS-ом надо вырубить...