控制台访问权限、别名及注意事项

本文涉及的某些概念在前文中有所提及,如果有不太清楚的描述,建议参考前文。

本文属于控制台编程第五篇文章,前四篇链接如下。

本文主要介绍控制台的一些附加处理,比如控制台句柄的访问权限、控制台命令别名、控制台的ANSI函数使用注意事项。

一、控制台访问权限

控制台中有效访问权限主要有下面两种

说明
GENERIC_READ(0x80000000L) 控制台屏幕缓冲的读权限。
GENERIC_WRITE(0x40000000L) 控制台屏幕缓冲的写权限。

使用CreateFileCreateConsoleScreenBufferGetStdHandle函数获得的句柄,默认都是有GENERIC_READGENERIC_WRITE权限的。在函数调用时可指定仅有读或者写的权限。

在调用函数CreateFileCreateConsoleScreenBuffer时可指定控制台屏幕缓冲句柄的访问权限控制(安全性控制),详细内容可参考

Access Control Model

二、控制台别名

别名的作用主要是将源字符串替换为目标字符串,例如预先在控制台中定义“abc”到“cd <a-long_patch>\abc”的别名,在控制台中输入"abc",控制台会自动将“abc”扩展为“cd <a-long_patch>\abc”的形式。并执行cd操作。

定义控制台别名可使用Doskey或者AddConsoleAlias函数。

如下面代码的使用方式:

// using Doskey.exe:
doskey abc=cd \a_very_long_path\test

// using AddConsoleAlias
AddConsoleAlias( TEXT("abc"),
                 TEXT("cd \\<a_very_long_path>\\test"),
                 TEXT("cmd.exe"));

运行于同一个控制台的多个可执行文件的实例共享所有预先定义的别名。其他情况下别名不会共享,比如运行于同一个控制台的不同可执行文件是不共享别名的,运行于多个控制台的同一个应用程序的多个实例也不会共享别名。

可使用 GetConsoleAlias函数获取指定应用程序上指定字符串是否存在别名定义。

可使用GetConsoleAliases函数获取指定应用程序中定义的所有别名。

可使用GetConsoleAliasExes函数获取用于控制台别名的所有进程的名称。

三、控制台ANSI函数使用注意事项

控制台输入输出函数中在处理8bit字符数据(ANSI)时默认采用OEM Code Page。但所有其他函数默认使用ANSI Code Page。二者不完全相同,这样就会造成控制台输入输出函数中的ANSI字符串不能被其他函数正确解析,反过来也也如此。比如FindFirstFileA函数返回的字符串中包含特定的ANSI扩展字符,WriteConsoleA函数就不能正确的显示这些字符串。

因此,在控制台程序中推荐使用UNICODE编码方式。如果这样不可行,建议使用SetFileApisToOEM函数设置下其他文件读写函数的默认Code Page。其中的文件处理函数包括:

CopyFile GetFileAttributes LoadLibrary
CreateDirectory GetFullPathName LoadLibraryEx
CreateFile GetModuleFileName MoveFile
CreateProcess GetModuleHandle MoveFileEx
DeleteFile GetSystemDirectory OpenFile
FindFirstFile GetTempFileName RemoveDirectory
FindNextFile GetTempPath SearchPath
GetCurrentDirectory GetVolumeInformation SetCurrentDirectory
GetDiskFreeSpace GetWindowsDirectory SetFileAttributes
GetDriveType  
时间: 2024-10-14 10:59:51

控制台访问权限、别名及注意事项的相关文章

01 安装apache php配置 时区 环境变量 安装mysql 虚拟主机 文件夹访问权限 目录别名

php介绍 简介与历史 应用领域: php运行环境 php语言运行原理 安装apache: PHP的命令行运行模式(独立运行): 配置apache以运行php网页 配置php的基本运行环境 确定php配置文件(php.ini)的位置: 配置时区: 设置环境变量 检测apache配置文件语法 配置数据库连接机制 安装mysql数据库 虚拟主机配置 端口监听: 主机配置关键项 配置文件夹访问权限 主机别名设置 文件夹访问控制的文件控制方式 目录别名设置Alias 多站点配置: php介绍 简介与历史

Java之访问权限控制符以及结合继承体系引发的注意事项

访问修饰符的作用域: private:可以定义方法或者属性,定义的方法和属性不能被外部的类所访问(包括子类). default:可以在本包中的任意地方访问. protected:保护,不同包中的非子类不能访问.(能访问的成员包括相同包以及该类的任意子类) public:公共的,都可以访问,不受任何限制. Java继承&访问修饰符结合使用引发的大混乱 1.子类重载方法的权限是否允许小于父类定义?其中,private<default<public 不允许,注:Java中允许Parent  

this/super/static/final/匿名对象/继承/抽象类/访问权限修饰符

1.this关键字的作用     1)调用本类中的属性;     2)调用本类中的构造方法;且只能放首行,且必须留一个构造方法作为出口,即不能递归调用     3)表示当前对象; 2.匿名对象     直接new出来的对象,不创建变量名,且只能使用一次,通常作为方法的参数及返回值使用 3.继承     继承是面向对象的三大特征之一,通过关键字:extends实现,被继承的类称为父类(也称作基类/超类),实现继承的类称为子类(也称作派生类).     特点:     (1)通过继承,子类可以直接访

Windows远程桌面IP地址控制访问权限

Windows远程桌面IP地址控制访问权限 1.           工作组环境 在工作组环境中,因为没有组策略服务,所以只有打开"控制台",添加"组策略对象编辑器",进行"组策略"设置. 1)  点击"开始"――"运行"――"cmd",输入"mmc",打开"控制台". 2)  点击"文件"菜单――"添加/删除管理单元

设置Windows服务的访问权限

作者:beyond 默认情况下,只有管理员组成员.LocalSystem和Power Users组成员帐户才有权启动.停止服务.为了让普通用户也可以控制该服务,我们可以手动设置其访问权限.可能有些初学者会感到奇怪,怎么服务也可以设置权限?其实在Windows系统里,不仅可以对文件夹设置权限,还可以对注册表.打印机和服务等系统资源进行权限设置.然而对服务进行权限设置,没有对文件夹进行权限设置那么直观,需要借助以下两种方法: 安全配置和分析 (1)以管理员身份登录系统,在运行对话框里输入mmc并回车

windows service 之访问权限(有NetworkService和LocalSystem的区分)

最近写了一个关于从局域网的算机上下载文件的winodws service,最初认为应该没什么大的问题.通过本地的调试也没发现问题.但是当我把程序发布后发现服务报错“访问路径被拒绝”,我的第一感觉,肯定是网络文件夹访问权限问题.那好吧,就用个最傻的方法把文件夹的权限设置成everyone.但是,我把服务跑起来后发现根本就不理你,还是报同样的错误.难道是下载文件的模块出错了?后来我把下载模块放到一个控制台程序和一个web页面中,都顺利通过.真是搞不懂,后来到网上搜一下看到思归老大的回复,是 wind

SVN版本库(访问权限)配置实例笔记

http://blog.csdn.net/zjianbo/article/details/8578297 SVN版本库(访问权限)配置实例笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/8578297 作者:张建波 邮箱: [email protected] 电话:13577062679 欢迎来电交流! 访问控制如图所示 说明: why用户仅仅只能访问(读写)yjb目录,对其它目录是无法“查看

未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试

报错:未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试 → 尝试以"管理员身份"运行程序,不行.→ 点击菜单下的"运行",输入"cmd",来到控制台.→ 输入"netstat -a"查看端口是否被占用,发现应用程序中所使用的端口已被占用.→ 更改应用程序的端口,问题解决.

Exchange 日常管理之一:用户邮箱完全访问权限

有些时候出于公司内部对员工的"特殊"管理需求,需要某些员工具有查看和管理一些其他员工邮箱账户的权利,企业的这个需求在Exchange 2010中可以通过EMC控制台来做简单的管理赋权操作.在本次实例中我们要赋予jerry用户对tom用户邮箱的完全访问的权限. 实现这个功能我们有两中途径: 1.图形界面 2.命令行 在这里因为条件限制我们只为大家讲解第一种方式:图形界面 首先我们打开sy的邮箱: 点击jerry: 这里我们输入tom,然后点击打开: 系统给我们弹出上图这个错误. 为此我们