function GetWinlogonPid: Cardinal; var LSnap: THandle; pEntry: TProcessEntry32; LRtn: Boolean; begin Result := 1; LSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); pEntry.dwSize := SizeOf(pEntry); LRtn := Process32First(LSnap, pEntry); while LRtn do begin if String.Compare(pEntry.szExeFile, 'winlogon.exe', False) = 0 then begin CloseHandle(LSnap); Exit(pEntry.th32ProcessID); end; FillChar(pEntry.szExeFile, 260, 0); LRtn := Process32Next(LSnap, pEntry); end; CloseHandle(LSnap); Result := 0; end;
procedure EnabledCTL_ALT_DELETE(const Enabled: Boolean); var dummy : Boolean; WinLogonPID: Cardinal; hProcess : Cardinal; begin WinLogonPID := GetWinlogonPid; dummy := False; RtlAdjustPrivilege(20, True, False, dummy); hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, WinLogonPID); if Enabled then NtResumeProcess(hProcess) else NtSuspendProcess(hProcess); CloseHandle(hProcess); end;
procedure UnKeyBoardHookProc; begin UnhookWindowsHookEx(HKeyHook); end;
function KeyBoardHookProc(iCode: Integer; wParam: WPARAM; lParam: LParam): LResult; var pMSG: PKBDLLHOOKSTRUCT; begin
if iCode = HC_ACTION then begin case wParam of WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP: begin pMSG := PKBDLLHOOKSTRUCT(lParam); //if not (pMSG.vkCode in [VK_BACK, VK_RETURN, VK_ESCAPE, 48..57, 65..90, 96..105, 186..191, 219..220]) then if not (pMSG.vkCode in [VK_BACK, VK_RETURN, VK_ESCAPE, 48..57, 65..90, 96..105]) then Result := 1 else Result := CallNextHookEx(HKeyHook, iCode, wParam, lParam); end; else begin Result := CallNextHookEx(HKeyHook, iCode, wParam, lParam); end; end; end; end;
procedure AutoStartRunAPP(const IsAutoRun: Boolean); var LReg: TRegistry; begin LReg := TRegistry.Create; try LReg.RootKey := HKEY_CURRENT_USER; LReg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run', True); if IsAutoRun then LReg.WriteString('EI5Start', ParamStr(0)) else begin LReg.DeleteValue('EI5Start'); end; finally LReg.Closekey; LReg.Free; end; end;
function GetComputerName:string; var aLen : DWORD; aName : array [0..MAX_COMPUTERNAME_LENGTH] of Char; begin aLen := MAX_COMPUTERNAME_LENGTH + 1; if Winapi.Windows.GetComputerName(aName, aLen) then SetString(Result, aName, aLen) else Result := ''; end;
function TimedShutdown(AComputer:string; AMsg:string; ATime:Word; AForce:Boolean; AReboot:Boolean):Boolean; var rl:DWORD; htoken:THandle; tkp:TOKEN_PRIVILEGES; begin OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,htoken); if LookupPrivilegeValue(nil,'SeShutdownPrivilege',tkp.Privileges[0].Luid) then begin tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED; tkp.PrivilegeCount:=1; AdjustTokenPrivileges(hToken,False,tkp,0,nil,rl); end; Result:=InitiateSystemShutdown(Pchar(AComputer),Pchar(AMsg),ATime,AForce,AReboot); end;
procedure ImmediatelyShutdown; var dummy : Boolean; begin RtlAdjustPrivilege(19, True, True, dummy); ZwShutdownSystem(2); end;