![]() |
![]() | #1 |
Школьник Join Date: 05 2002 Location: Yerevan
Posts: 202
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Вопрос вот какой. Как известно, для того, чтобы скрыть активный процесс в Win9x достаточно было использовать недокументированную функцию из kernel32 RegisterServiceProcess . Тогда списке задач Ctrl-Alt-Del этот процесс отсутствовал и убить его было невозможно. Однако в Вин2К/НТ этой функции нет. По логике вещей там она должна быть в USER32, однако насколько я понял, под НТ скрыть процесс невозможно в принципе. То-ли это ради защиты от всяческих вирусов они так чделали, то-ли еще что-то. Короче, знает-ли кто-нить способы для решения этой проблемы. Буду очень признателен. С уважением, я. |
![]() |
![]() | #2 |
Moderator Join Date: 07 2002 Location: Yerevan Age: 49
Posts: 450
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Как говорится Виндовс маст дай...а Юникс рулез... Kстати встречный вопрос...если под Юникс кильнуть програмку, а в этой програмке память аллокирована (malloc там, alloc)..что с ней происходить, она корректо возврашается или остается висеть мусором? |
![]() |
![]() | #3 |
Академик Join Date: 09 2001 Location: inside myself
Posts: 5,369
Downloads: 0 Uploads: 0
Reputation: 18 | 5 | ![]()
shatver: Ну при чем здесь "Windows must die" ? лол. Amph, ты должен создать сервис под НТ. а под Виндовс эти процессы "невидимы" разве что для юзеров ![]() Code: // Force system to create message queue for this thread MSG threadMessage; PeekMessage( & threadMessage, NULL, 0, 0, PM_REMOVE ); ServiceStatus.dwServiceType = SERVICE_WIN32; ServiceStatus.dwCurrentState = SERVICE_START_PENDING; ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP; ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwServiceSpecificExitCode = 0; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 100000; ServiceStatusHandle = RegisterServiceCtrlHandler( "My Nut Sevice", ServiceCtrlHandler ); if ( ServiceStatusHandle == (SERVICE_STATUS_HANDLE) 0 ) {... return; } SetServiceStatus( ServiceStatusHandle, & ServiceStatus ); status = ServiceInitialization( argc, argv, & specificError ); if ( status != NO_ERROR ) {... return; } ServiceStatus.dwCurrentState = SERVICE_RUNNING; ServiceStatus.dwCheckPoint++; ServiceStatus.dwWaitHint = 0; if (! SetServiceStatus( ServiceStatusHandle, & ServiceStatus ) ) {... return; } bool waitFor = true; do { ... } while ( waitFor ); ServiceCleanup(); ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOPPED; ServiceStatus.dwCheckPoint++; ServiceStatus.dwWaitHint = 0; SetServiceStatus( ServiceStatusHandle, & ServiceStatus ); =-==-=-==-=-=-=-=-=-=-=-=-=-=- void ServiceCleanup(void) { ServiceStatus.dwWin32ExitCode = 0; ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING; ServiceStatus.dwCheckPoint = 0; ServiceStatus.dwWaitHint = 10000; ... } |
![]() |
![]() |
Thread Tools | |
|
На правах рекламы: | |
![]() | |