进程权限

进程权限与提权机制

进程权限的发展

    在DOS时代, 所有程序都能直接操作我们的物理内存操作系统和我们的应用软件都是同一等级的程序,它是不安全的.会造成系统不稳定,毫无保密性
    从Win95/98到XP后, 新增了虚拟内存,它杜绝了修改操作系统代码的可能(直接修改物理内存)出现了进程, 它是"完全封闭"(开放了一些接口)的
它会使我们的进程没有保密性,我们使用CreateProcess创建一个子进程父进程拥有子进程的"访问权限"
    所以出现了进程权限,父进程必须拥有一定的权限(用户赋予的权限),高危操作会告诉用户, 用户选择是否赋予,以管理员权限打开的进程, 子进程会拥有(继承)管理员权限
    UAC出现,它是一个带过滤表的权限,它不拥有全部的"管理员权限"使得任何一个程序都不能完全拥有管理员权限,UAC是为了防止程序拥有了管理员权限是静默的做很多事情,它会在有风险的操作时进行提示

进程提权

BOOL ShellExecuteEx(
  _Inout_ SHELLEXECUTEINFO *pExecInfo
);

typedef struct _SHELLEXECUTEINFO {
  DWORD     cbSize;         // 长度 sizeof(SHELLEXECUTEINFO)
  ULONG     fMask;          // 标准
  HWND      hwnd;           // 窗口句柄
  LPCTSTR   lpVerb;         // 执行的操作
  LPCTSTR   lpFile;         // 执行的文件路径
  LPCTSTR   lpParameters;   // 参数
  LPCTSTR   lpDirectory;    // 目录
  int       nShow;          // 显示方式
  HINSTANCE hInstApp;       // 返回的HINSTANCE
  LPVOID    lpIDList;       // 特殊标识符
  LPCTSTR   lpClass;        // 指明GUID或类名
  HKEY      hkeyClass;      // 获得已经在系统注册的文件类型
  DWORD     dwHotKey;       // 热键
  union {
    HANDLE hIcon;           // 图标
    HANDLE hMonitor;        // 显示器的HANDLE
  } DUMMYUNIONNAME;
  HANDLE    hProcess;       // 新启动程序的句柄
} SHELLEXECUTEINFO, *LPSHELLEXECUTEINFO;
#include <Windows.h>
#include tchar.h>

int main()
{
    SHELLEXECUTEINFO sei = {0};
    sei.cbSize = sizeof(SHELLEXECUTEINFO);
    sei.lpVerb = TEXT("runas");
    sei.lpFile = TEXT("CMD");
    sei.nShow = SW_SHOW;

    if (!ShellExecuteEx(&sei))
    {
        DWORD dwError = GetLastError();
        if (ERROR_CANCELLED == dwError)
        {
            _tprintf(TEXT("用户取消提权!\n"));
        }
        else if (ERROR_FILE_NOT_FOUND == dwError)
        {
            _tprintf(TEXT("要提权的文件未找到!\n"));
        }
    }
    else
    {
        _tprintf(TEXT("已经提权运行!\n"));
    }

    system("pause");

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值