=============================================================================
WIN32 应用程序:CppUACSelfElevation 项目概述
=============================================================================
/////////////////////////////////////////////////////////////////////////////
摘要:
用户账户控制 (UAC)是Windows Vista及后续操作系统中的一个新安全组件。当UAC被
完全开启时,管理员的交互操作通常运行在普通用户权限下。这个示例演示了如何去检
测当前进程的权限等级,和如何通过许可验证对话框来确认并自我提升此线程的权限等
级。
/////////////////////////////////////////////////////////////////////////////
先决条件:
你必须在Windows Vista及后续操作系统中运行此示例程序。
/////////////////////////////////////////////////////////////////////////////
演示:
以下步骤演示了此UAC示例程序。
步骤1、在使用Visual Studio2008成功生成示例项目后, 你将得到一个应用程序:
CppUACSelfElevation.exe
步骤2、在一个UAC完全开启的Windows Vista或Windows 7系统中,使用受保护的管理员账
户执行此程序。此程序会显示一个对话框包含以下内容:
用户是否是系统管理员: 是
是否以管理员身份运行: 否
进程权限是否被提升: 否
完整性级别: 中
在“自我提升权限”按钮上有一个UAC盾状图标。
步骤3、点击“自我提升权限”按钮, 你将会看到一个许可验证对话框
用户账户控制
----------------------------------
您想允许来自未知发布者的以下程序对此计算机进行更改吗?
步骤4、点击“是”允许提升权限。之前的程序会被启动并显示以下内容
用户是否是系统管理员: 是
是否以管理员身份运行: 是
进程权限是否被提升: 是
完整性级别: 高
此时对话框中的“自我提升权限”按钮没有了之前的UAC盾状图标。这是由于此应用程序
以一个已提升的管理员运行。成功进行权限提升。如果你再次点击“自我提升权限”按钮,
此程序会告知你它已经作为管理员身份运行。
步骤5、 点击[X]关闭此应用程序。
/////////////////////////////////////////////////////////////////////////////
创建过程:
步骤1、创建一个基于对话框的Win32 VC++应用程序
新建一个Visual C++ / Win32 / Win32 项目。把其命名为CppUACSelfElevation并在应用
程序设置页中把应用程序类型设置为Windows应用程序。在程序被创建后,在项目属性/
配置属性/ C/C++ /预编译头中关闭预编译头。在资源视图中,删除所有默认Accelerator
dialog, icon, menu, 和 string table资源。这是由于这些资源在本示例中不是必须的。
接下来, 添加一个dialog资源,其ID设置为:IDD_MAINDIALOG。它作为本Windows应用程
序的主对话框。在解决方案资源管理器中,删除向导所生成的文件:stdafx.cpp, stdafx.h,
targetver.h, CppUACSelfElevation.h, CppUACSelfElevation.ico,和small.ico。这将
简化此项目。打开CppUACSelfElevation.cpp,使用以下代码替换其内容。以下这些代码
描述了一个VC++ Win32基于对话框应用程序的基本框架。
#include <stdio.h>
#include <windows.h>
#include <windowsx.h>
#include "Resource.h"
BOOL OnInitDialog(HWND hWnd, HWND hwndFocus, LPARAM lParam)
{
return TRUE;
}
void OnCommand(HWND hWnd, int id, HWND hwndCtl, UINT codeNotify)
{
switch (id)
{
case IDOK:
case IDCANCEL:
EndDialog(hWnd, 0);
break;
}
}
void OnClose(HWND hWnd)
{
EndDialog(hWnd, 0);
}
INT_PTR CALLBACK DialogProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
HANDLE_MSG (hWnd, WM_INITDIALOG, OnInitDialog);
HANDLE_MSG (hWnd, WM_COMMAND, OnCommand);
HANDLE_MSG (hWnd, WM_CLOSE, OnClose);
default:
return FALSE;
}
return 0;
}
int APIENTRY wWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPWSTR lpCmdLine,
int nCmdShow)
{
return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAINDIALOG), NULL, DialogProc);
}
步骤2、在主对话框中添加控件
类型:Button
ID: IDC_ELEVATE_BN
Caption: "自我提升权限"
类型: Static Text
ID: IDC_INADMINGROUP_STATIC
用法:即使在还没有为当前用户提升权限的前提下,此控件显示拥有此进程的主访问令
牌的用户是否是本地管理员组的成员。
类型: Static Text
ID: IDC_ISRUNASADMIN_STATIC
用法:此控件显示此程序以管理员身份运行。
类型: Static Text
ID: IDC_ISELEVATED_STATIC
用法:此控件显示当前进程的权限是否已经被提升。令牌提升只有在Windows Vista
及后续版本的Windows中才被支持。此控件在Windows Vista之前版的Windows中显示
显示N/A。
类型: Static Text
ID: IDC_IL_STATIC
用法:此控件显示当前进程的完整性级别。完整性级别只有在Windows Vista及后续版
本的Windows中才被支持。此控件在Windows Vista之前版的Windows中显示显示N/A。
步骤3、在程序初始化主对话框时检查并显示当前进程的“以管理员身份运行”的状态,
权限提升信息及完整性级别。
创建以下四个辅助函数:
//
// 函数:IsUserInAdminGroup()
//
// 用途:即使在还没有为当前用户提升权限的前提下,此函数检测拥有此进程的主访
// 问令牌的用户是否是本地管理员组的成员。
//
// 返回值:如果拥有主访问令牌的用户是管理员组成员则返回TRUE,反之则返回FALSE。
//
// 异常:如果此函数出错,它抛出一个包含Win32相关错误代码的C++ DWORD异常。
//
//
// 调用示例:
// try
// {
// if (IsUserInAdminGroup())
// wprintf (L"用户是管理员组成员\n");
// else
// wprintf (L"用户不是管理员组成员\n");
// }
// catch (DWORD dwError)
// {
// wprintf(L"IsUserInAdminGroup 调用失败 w/err %lu\n", dwError);
// }
//
BOOL IsUserInAdminGroup();
//
// 函数:IsRunAsAdmin()
//
// 用途:此函数检测当前进程是否以管理员身份运行。换而言之,此进程要求用户是
// 拥有主访问令牌的用户是管理员组成员并且已经执行了权限提升。
//
// 返回值:如果拥有主访问令牌的用户是管理员组成员且已经执行了权限提升则返回
// TRUE,反之则返回FALSE。
//
// 异常:如果此函数出错,它抛出一个包含Win32相关错误代码的C++ DWORD异常。
//
// 调用示例:
// try
// {
// if (IsRunAsAdmin())
// wprintf (L"进程以管理员身份运行\n");
// else
// wprintf (L"进程没有以管理员身份运行\n");
// }
// catch (DWORD dwError)
// {
// wprintf(L"IsRunAsAdmin 失败 w/err %lu\n", dwError);
// }
//
BOOL IsRunAsAdmin();
//
// 函数:IsProcessElevated
//
// 用途:此函数获取当前进程的权限提升信息。它由此进程是否进行了权限提升所
// 决定。令牌权限提升只有在Windows Vista及后续版本的Windows中有效。所以在
// Windows Vista之前的版本中执行IsProcessElevated, 它会抛出一个C++异常。
// 此函数并不适用于检测是否此�
没有合适的资源?快使用搜索试试~ 我知道了~
微软一站式示例代码库
共2091个文件
vb:457个
cs:385个
sln:123个
需积分: 9 54 下载量 178 浏览量
2011-03-30
08:58:29
上传
评论 1
收藏 13.92MB ZIP 举报
温馨提示
微软一站式开发技术框架 解决方案通过不同编程语言和典型示例勾画出微软几乎所有开发技术的骨架。 ASP.NET新示例 CSASPNETBingMaps 此示例演示了如何在网页中嵌入Bing Map控件,获取某一点的地图信息。通过使用Bing Map的查询功能,我们还能输入某一个地点的名称,查询这个地点在地图中的方位。 VBASPNETRemoteUploadAndDownload 本本示例展示了如何使用HTTP和FTP两个轻量级类库,实现对指定服务器资源进行远程上传及下载的功能。 CS/VBASPNETSerializeJsonString 本示例是使用.NET命名空间System.Web.Script.Serialization的JSON序列化组件来执行数据的转换,用jQuery的AutoComplete来执行Ajax请求。运行本示例,当用户输入一个字符在文本框中,比如'm',文本框会自动进行服务 器端的数据匹配,并将匹配列表自动呈现,用户任意选择一个列表项时,被选项的相关信息会立即显示在页面上。 CSASPNETIPtoLocation 此示例演示了如何将一个IP地址定位到实际的地理位置中。当用户输入一个IP地址之后,通过第三方的WebService,我们可以将这个IP地址所在的地理位置信息,包括国家,城市,邮编,以及经纬度。 CSASPNETExcelLikeGridView 此示例旨在改变原有Gridview默认模式下只能逐行编辑、更新或者删除;改为批量更新删除。同时利用了GridView的FooterRow实现了GridView“增加”数据功能。示例使用了JQuery的技术。 等等等等等等
资源推荐
资源详情
资源评论
收起资源包目录
微软一站式示例代码库 (2091个子文件)
Global.asax 105B
Global.asax 105B
MyUserControl.ascx 250B
MyUserControl.ascx 245B
AutoComplete.ashx 2KB
ImageHandler.ashx 128B
AutoComplete.ashx 119B
ImageHandler.ashx 109B
ExternalWebService.asmx 109B
ExternalWebService.asmx 109B
Searcher.asmx 109B
BridgeWebService.asmx 105B
BridgeWebService.asmx 105B
LoginPage.aspx 14KB
LoginPage.aspx 14KB
Default.aspx 10KB
Default.aspx 9KB
Default.aspx 9KB
AddArticle.aspx 6KB
AddArticle.aspx 6KB
Default.aspx 6KB
Default.aspx 6KB
Default.aspx 5KB
RemoteFileForm.aspx 5KB
RemoteFileForm.aspx 5KB
RunCmd.aspx 4KB
RunCmd.aspx 4KB
Default.aspx 4KB
Default.aspx 4KB
ChatBox.aspx 4KB
ChatBox.aspx 4KB
CSASPNETPageValidationClientSide.aspx 4KB
SilverlightClient.aspx 3KB
SilverlightClient.aspx 3KB
VBSL4WCFNetTcpTestPage.aspx 3KB
CSSL4WCFNetTcpTestPage.aspx 3KB
HtmlClient.aspx 3KB
HtmlClient.aspx 3KB
HtmlClient.aspx 3KB
Default.aspx 2KB
Default.aspx 2KB
Default.aspx 2KB
Default.aspx 2KB
Default.aspx 2KB
Default.aspx 2KB
Default.aspx 2KB
Default.aspx 2KB
CSASPNETPageValidationServerSide.aspx 1KB
Login.aspx 1KB
Login.aspx 1KB
CurrentOnlineUserList.aspx 1KB
CurrentOnlineUserList.aspx 1KB
CSASPNETMenu.aspx 1KB
VBASPNETMenu.aspx 1KB
Default.aspx 1KB
Default.aspx 1KB
Default.aspx 1KB
Default.aspx 998B
Default.aspx 979B
Default.aspx 965B
Default.aspx 815B
Default.aspx 804B
Default.aspx 754B
Logout.aspx 577B
Logout.aspx 569B
FederationCallbackHandler.aspx 514B
FederationCallbackHandler.aspx 490B
CheckUserOnlinePage.aspx 487B
CheckUserOnlinePage.aspx 486B
Default.aspx 482B
Image.aspx 453B
Image.aspx 452B
Rss.aspx 443B
Rss.aspx 442B
CustomTab.bmp 246B
CustomTab.bmp 246B
dlldatax.c 452B
dlldatax.c 452B
AzureBingMaps.ccproj 2KB
AzureBingMaps.ccproj 2KB
ServiceReferences.ClientConfig 1KB
ServiceReferences.ClientConfig 1KB
ServiceReferences.ClientConfig 1KB
ServiceReferences.ClientConfig 899B
ServiceReferences.ClientConfig 739B
ServiceReferences.ClientConfig 739B
Web.config 10KB
Web.config 9KB
Web.config 9KB
Web.config 9KB
Web.config 9KB
Web.config 9KB
Web.config 9KB
Web.config 8KB
Web.config 8KB
Web.config 8KB
Web.config 8KB
Web.config 8KB
Web.config 8KB
Web.config 7KB
共 2091 条
- 1
- 2
- 3
- 4
- 5
- 6
- 21
资源评论
adagadadfafd
- 粉丝: 148
- 资源: 154
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ZArchiver.Pro_0.9.5.apk
- vmware环境配置.mp4
- 548springboot + vue 大学生社团活动平台.zip(可运行源码+数据库文件+文档)
- 微信小程序 辩论倒计时小程序源码 作业设计demo 计算机专业参考
- 深入探究文件IO,嵌入式Linux
- 微信备忘录小程序源码 作业设计demo 计算机专业作业
- 微信小程序 仿百度小说小程序 看小说小程序 实现源码
- 锂电资料包-锂离子电池技术干货资料合集.zip
- EMC EMI资料大全电磁兼容电磁干扰设计资料工程师必备经验资料35个合集.zip
- 547springboot + vue 交流互动系统.zip(可运行源码+数据库文件+文档)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功