『转』credential Provider 简易改写攻略
本次小学期的题目是windows下的凭证改编。本人负责的是Win7 下的credentials Provider 的编写以及其他杂七杂八的工作。当然给我印象最深的就是credentials provider的部分。作为一个比较新的技术(个人感觉在现在中国的局域网上能找的信息中,只要是在xp之后的技术,资料都是少得可怜。),资料少的可怜。在百度,这个关键词到了第三页的信息中中文信息就没有用了。谷歌被墙了,实际上在谷歌中,基本上也找不到有用的中文信息。至于在msdn中貌似只有英文贴。所以基本上能用的信息算是比较少的。
下面贴出一些我在寻找过程中比较有用的网页。
MSDN 上提供的示例:http://www.microsoft.com/en-us/download/confirmation.aspx?id=5372
WindowsVista Sample Credential Providers Overview 中文翻译http://blog.csdn.net/linbaotong/article/details/7925645
改编一个属于你自己的凭证:http://blog.csdn.net/mikefeng/article/details/1569475
一些相关的知识:http://blog.csdn.net/patdz/article/details/7522195
(下面全部以SampleAllControlsCredentialProvider为例)
首先是界面方面的修改。示例中credential provider 的界面编写的语言不祥。但可以肯定的是界面不是用mfc编写的。实际上,如果是要改写示例的话,千万不要用MFC的任何相关的东西,包括CString。否则就会出现这样的情况。
在改写界面的话,主要改写的内容是:
common.h(line 25), 这一部分的内容,你可以在这部分中添加你想要的元素的序号。注意注释中强调的,SFI_NUM_FIELDS必须放在最后一个,否则会出现奇怪的问题。
之后是staticconstFIELD_STATE_PAIRs_rgFieldStatePairs[]以及staticconstCREDENTIAL_PROVIDER_FIELD_DESCRIPTORs_rgCredProvFieldDescriptors[]的内容。同样是添加你所想要的表项。比如我修改如下:
(图中修改的内容是去掉了checkbox和combobox,commandink,添加了一个pin码的写入框)
至此,common.h上的修改已经结束了。
之后转到CSampleCredentialc.cpp中修改。
HRESULTCSampleCredential::Initialize(
constCREDENTIAL_PROVIDER_FIELD_DESCRIPTOR*rgcpfd,
constFIELD_STATE_PAIR*rgfsp
)
修改初始化函数,按照他自己给你的格式修改即可。
界面的修改就到此结束了。
在界面修改后,如果你要使你的组件工作,只要改写诸如HRESULTCSampleCredential::GetComboBoxValueCount(
DWORDdwFieldID,
DWORD*pcItems,
DWORD*pdwSelectedItem
) 一类的函数既可以了。
之后便是认证的部分。
在认证部分,你只需要修改CSampleCredential::GetSerialization这一部分的内容即可。
关于这一部分,示例中的代码给原理是:
读取账户密码框的数据,写入变量KERB_INTERACTIVE_LOGONkil; 中,然后改写标记:
*pcpgsr=CPGSR_RETURN_CREDENTIAL_FINISHED; 这个标记一旦被写入了。在登陆的过程中我们程序的部分就结束了。
在这一部分中,需要注意的是kil中的账户密码必须是windows中存在的账户密码。也就是
说如果你想要用自己的账户密码来登陆,你的程序中就需要在编写的时候写入系统的账户密码。比如下面这样:
hr=UnicodeStringInitWithString(L"Administrator",&kil.UserName);
hr=UnicodeStringInitWithString(L"",&kil.Password);
整个改写的过程基本上就是这样。Over.
之后是使用你的凭证,运行你的运行包中提供的注册表文件,然后把生成的dll文件复制到system32中即可。注意的是如果要提示你是否覆盖的话,最好先删掉原来的程序再试。
然后就是多个凭证的问题。在win7后会存在有多个凭证。如果你想要系统中只存在一个凭证的话,你就需要这么做:
备份(千万要记得备份!)
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\CredentialProviders里面的东西后,再删除掉所有的东西(这个过程中有一两个凭证不可删除,很正常)。然后安装你自己的凭证,到时候你就会发现登录的时候只存在你自己的凭证。
不过程序中还是没有解决的问题就是示例在锁定之后就无法正常登录,只能切换系统自带的凭证来登陆。
程序的最后效果如下:
最后附上一个肯定会有用的函数,unicode字符转char*。
boolUnicodeToAnsi(constWCHAR*pSrc,char*pDes)
{
chardefaultChar[100];
BOOLbUseDefaultChar;
intiByte=WideCharToMultiByte(CP_ACP,0,pSrc,-1,pDes,1024,defaultChar,&bUseDefaultChar);
if(iByte==0)
{
//_stprintf(tszErrMsg,theApp.GetText(_T("%s, cann't convert the source to ansi code page, theerror code is 0x%x\n")).c_str(), lpszInput, GetLastError());
//AfxMessageBox(tszErrMsg);
}
returntrue;
}
http://blog.csdn.net/nachtz/article/details/37775767
『转』credential Provider 简易改写攻略的更多相关文章
- 圣魔大战3(Castle Fantisia)艾伦希亚战记完美攻略
作为城堡幻想曲系列续作,艾伦希亚战记继承了前作的战棋+养成模式进行游戏. (城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一 ...
- 『片段』OracleHelper (支持 多条SQL语句)
C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...
- [日推荐] 『Streeter』极乐商店邀你一起来尬舞啊!-store.dreawer.com
你听的舞蹈有哪些?Jazz?Poppin?Hiphop?现代舞?民族舞?... 今天推荐一款小程序『Streeter』,几乎包含所有舞蹈视频,偷偷学好了,邀请你来尬舞啊 Streeter 这个Logo ...
- 『TensorFlow』模型保存和载入方法汇总
『TensorFlow』第七弹_保存&载入会话_霸王回马 一.TensorFlow常规模型加载方法 保存模型 tf.train.Saver()类,.save(sess, ckpt文件目录)方法 ...
- 『计算机视觉』Mask-RCNN_训练网络其一:数据集与Dataset类
Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...
- 『cs231n』通过代码理解风格迁移
『cs231n』卷积神经网络的可视化应用 文件目录 vgg16.py import os import numpy as np import tensorflow as tf from downloa ...
- 『计算机视觉』Mask-RCNN_推断网络其三:RPN锚框处理和Proposal生成
一.RPN锚框信息生成 上文的最后,我们生成了用于计算锚框信息的特征(源代码在inference模式中不进行锚框生成,而是外部生成好feed进网络,training模式下在向前传播时直接生成锚框,不过 ...
- 『计算机视觉』Mask-RCNN_推断网络其二:基于ReNet101的FPN共享网络暨TensorFlow和Keras交互简介
零.参考资料 有关FPN的介绍见『计算机视觉』FPN特征金字塔网络. 网络构架部分代码见Mask_RCNN/mrcnn/model.py中class MaskRCNN的build方法的"in ...
- 『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理
Fork版本项目地址:SSD 一.TFR数据读取 创建slim.dataset.Dataset对象 在train_ssd_network.py获取数据操作如下,首先需要slim.dataset.Dat ...
随机推荐
- 6 Django REST framework JWT 和登录功能实现
JWT 在用户注册或登录后,我们想记录用户的登录状态,或者为用户创建身份认证的凭证. 我们不再使用Session认证机制,而使用Json Web Token认证机制. Json web token ( ...
- 洛谷P1101 单词方针
题目描述 给一 n×n 的字母方阵,内可能蕴含多个“yizhong”单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 88 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉, ...
- 基于Mybatis实现一个查库的接口
基本功能就是写一个接口,该接口的主要功能是根据给的条件查询特定表: 先通过Workbench来看一下在给定条件下的查询的结果,先给出最终的结果查询的表以及查询的条件: 也就是该接口实现在image_t ...
- 详解 java socket
一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...
- 解决Maven下载依赖慢的问题(转)
使用Maven构建项目时,项目中有的依赖包可能下载的非常慢,我们可以通过配置镜像来解决这个问题. 之前开源中国的那个好像已经关闭了,于是我找到了一个阿里的来解决. 在Maven的配置文件(%MAVEN ...
- Excel中如何匹配另外一个Excel中的数据
场景: 我在Excel中想展示通过一列匹配到另外Excel中的数据.对于程序员来说,就是left join 出 B表的数据. 但是在Excel中怎么做呢,我又不想每次都在把数据导入到数据库中操作. 这 ...
- Hadoop介绍-1.基本原理
了解大数据 首先,搞清楚hadoop在处理大数据的定位在哪里 什么是大数据?为什么要处理大数据? 数据量大(Volume) 数据类别复杂(Variety) 数据处理速度快(Velocity) 数据真实 ...
- Cppcheck - A tool for static C/C++ code analysis
cppcheck是一个个检测源码的工具,对编译工具的一个补充,mark Cppcheck - A tool for static C/C++ code analysis Syntax: cppchec ...
- 使用Redis数据库(2)(三十四)
除了String类型,实战中我们还经常会在Redis中存储对象,这时候我们就会想是否可以使用类似RedisTemplate<String, User>来初始化并进行操作.但是Spring ...
- vuex的学习例子
最近在学习vuejs,一直有听说vuex,用来实现多组件共享的一种状态管理模式,但是网上都说,不要为了用vuex而用vuex,大概意思就是尽量少用vuex,一些小项目可以用bus来实现组件之间的传值问 ...