本次小学期的题目是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 简易改写攻略的更多相关文章

  1. 圣魔大战3(Castle Fantisia)艾伦希亚战记完美攻略

    作为城堡幻想曲系列续作,艾伦希亚战记继承了前作的战棋+养成模式进行游戏. (城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一 ...

  2. 『片段』OracleHelper (支持 多条SQL语句)

    C# 调用 Oracle 是如此尴尬 >System.Data.OracleClient.dll —— .Net 自带的 已经 过时作废. >要链接 Oracle 服务器,必须在 本机安装 ...

  3. [日推荐] 『Streeter』极乐商店邀你一起来尬舞啊!-store.dreawer.com

    你听的舞蹈有哪些?Jazz?Poppin?Hiphop?现代舞?民族舞?... 今天推荐一款小程序『Streeter』,几乎包含所有舞蹈视频,偷偷学好了,邀请你来尬舞啊 Streeter 这个Logo ...

  4. 『TensorFlow』模型保存和载入方法汇总

    『TensorFlow』第七弹_保存&载入会话_霸王回马 一.TensorFlow常规模型加载方法 保存模型 tf.train.Saver()类,.save(sess, ckpt文件目录)方法 ...

  5. 『计算机视觉』Mask-RCNN_训练网络其一:数据集与Dataset类

    Github地址:Mask_RCNN 『计算机视觉』Mask-RCNN_论文学习 『计算机视觉』Mask-RCNN_项目文档翻译 『计算机视觉』Mask-RCNN_推断网络其一:总览 『计算机视觉』M ...

  6. 『cs231n』通过代码理解风格迁移

    『cs231n』卷积神经网络的可视化应用 文件目录 vgg16.py import os import numpy as np import tensorflow as tf from downloa ...

  7. 『计算机视觉』Mask-RCNN_推断网络其三:RPN锚框处理和Proposal生成

    一.RPN锚框信息生成 上文的最后,我们生成了用于计算锚框信息的特征(源代码在inference模式中不进行锚框生成,而是外部生成好feed进网络,training模式下在向前传播时直接生成锚框,不过 ...

  8. 『计算机视觉』Mask-RCNN_推断网络其二:基于ReNet101的FPN共享网络暨TensorFlow和Keras交互简介

    零.参考资料 有关FPN的介绍见『计算机视觉』FPN特征金字塔网络. 网络构架部分代码见Mask_RCNN/mrcnn/model.py中class MaskRCNN的build方法的"in ...

  9. 『TensorFlow』SSD源码学习_其五:TFR数据读取&数据预处理

    Fork版本项目地址:SSD 一.TFR数据读取 创建slim.dataset.Dataset对象 在train_ssd_network.py获取数据操作如下,首先需要slim.dataset.Dat ...

随机推荐

  1. pip安装kolla-ansible时报错Cannot install 'PyYAML'的解决方法

    pip install kolla-ansible --ignore-installed PyYAML

  2. 【Oracle】【2】复制表结构及其数据

    --复制表结构及其数据 create table table_name_new as select * from table_name_old; --只复制表结构 ; --create table t ...

  3. using强制对象清理资源 【转】

    转 http://www.cnblogs.com/Legolas/p/detail-of-using.html using肯定所有人都用过,最简单的就是使用using引入命名空间,然后就是引入别名,简 ...

  4. oracle坏块处理记录

    1. 执行sql:select count(distinct id) from bw_fpzxx ,报错如下: ORA-01578: ORACLE 数据块损坏 (文件号 16, 块号 195428)O ...

  5. UI基础一:简单的BOL查询

    利用标准的BOL编辑工具,添加BOL对象,重写查询方法,实现简答的BOL查询 1.SE11创建查询对象结构: 2.SE11创建查询结果对象: 3.SE24新建处理类: 重写查询结果方法: METHOD ...

  6. Vue keep-alive总结

    <keep-alive>是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM. <keep-alive> 包裹动态组件时,会缓存不活动的组件实例,而不是 ...

  7. Directory /home/hdfs/name is in an inconsistent state: storage directory does not exist or is not a

    2018-06-11 17:50:36,896 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered except ...

  8. 这样好用的ReactiveCocoa,根本停不下来

    作者:空之境界(博客) 前戏我个人非常推崇ReactiveCocoa,它就像中国的太极,太极生两仪,两仪生四象,四象生八卦,八卦生万物.ReactiveCocoa是一个高度抽象的编程框架,它真的很抽象 ...

  9. 利用ML&AI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定

    利用ML&AI判定未知恶意程序 导语:0x01.前言 在上一篇ML&AI如何在云态势感知产品中落地中介绍了,为什么我们要预测未知恶意程序,传统的安全产品已经无法满足现有的安全态势.那么 ...

  10. java生成word的几种方案

    http://blog.sina.com.cn/s/blog_a5e968370101crtl.html 1. Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建 ...