『转』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 ...
随机推荐
- SVN的安装
Svn服务器的安装和配置 注意,一定要切换到最高管理权限: su root 通过这个命令就可以完成! 1.安装svn服务器端软件从镜像服务器或者YUM源下载安装SVN服务器软件:yum insta ...
- 【模板/经典题型】FWT
FWT在三种位运算下都满足FWT(a×b)=FWT(a)*FWT(b) 其中or卷积和and卷积还可以通过FMT实现(本质上就是个高维前缀和) #include<bits/stdc++.h> ...
- AS(Android Studio)不停的updating indices
有同事问我他as进入后updating iindices个不停 就在此处一直刷一直刷,虽然对他项目没什么影响,但总归很是烦人,解决办法如下: 打开File->Invalidate Caches ...
- 【Java】【4】关于Java中的自增自减
摘要:理解j = j++与j = ++j的区别:正确用法:直接用j++,不要用前两种 正文: import java.util.*; public class Test{ public static ...
- python-day74--知识总体总结
1. 课程介绍 - 数据类型 - 函数 - 面向对象三大特性:继承,封装,多态 - socket:本质传输字节:所有网络通信都基于socket ...
- 函数式编程语言(Fuction Program Language)
一.什么是函数式编程语言 函数式编程语言(functional progarm language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型. ...
- Leetcode 129
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...
- Visual Studio 类模板的修改
总共有三个步骤: No1:找到类文件模板路径 我的安装盘在D盘 visual studio 2010: D:\Program Files (x86)\Microsoft Visual Studio 1 ...
- Oracle12c中配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB)
Oracle12c中的多宿主选项允许一个容器数据库(CDB)容纳多个独立的可插拔数据库(PDB).本文将展示如何配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB).1. 配置CDB中的实例 ...
- python匿名函数以及return语句